mons-rules 0.4.2 → 0.4.3
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/README.md +1 -1
- package/dist/mons-rules.js +1 -1
- package/package.json +2 -2
package/dist/mons-rules.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var _y=Object.defineProperty;var Fy=e=>{throw TypeError(e)};var lR=(e,n,o)=>n in e?_y(e,n,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[n]=o;var c=(e,n)=>_y(e,"name",{value:n,configurable:!0});var ne=(e,n,o)=>lR(e,typeof n!="symbol"?n+"":n,o),jl=(e,n,o)=>n.has(e)||Fy("Cannot "+o);var T=(e,n,o)=>(jl(e,n,"read from private field"),o?o.call(e):n.get(e)),L=(e,n,o)=>n.has(e)?Fy("Cannot add the same private member more than once"):n instanceof WeakSet?n.add(e):n.set(e,o),F=(e,n,o,t)=>(jl(e,n,"write to private field"),t?t.call(e,o):n.set(e,o),o),U=(e,n,o)=>(jl(e,n,"access private method"),o);function dR(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(dR,"assertBoundedCache");var ra,Hs,Kl=class Kl{constructor(n){ne(this,"lifetime",n);L(this,ra,new Set);L(this,Hs,new Map)}get cacheCount(){return T(this,ra).size}get entryCount(){let n=0;for(let o of T(this,ra))n+=o.size;return n}own(n){return dR(n),T(this,ra).add(n),n}getOrCreate(n,o){let t=T(this,Hs).get(n);if(t!==void 0)return t;let r=this.own(o());return T(this,Hs).set(n,r),r}clear(){for(let n of T(this,ra))n.clear()}};ra=new WeakMap,Hs=new WeakMap,c(Kl,"AutomoveCacheScope");var pi=Kl;var Wy=650;function mR(){return globalThis.performance.now()}c(mR,"systemMonotonicClock");function ql(e,n){if(!Number.isFinite(e)||e<0)throw new RangeError(`${n} must be a finite nonnegative number`);return e}c(ql,"validateDuration");var Us,vc,jn,li,Kn,zl,By,Ly,Gy,Ac,Vy,$l=class $l{constructor(n={}){L(this,Kn);L(this,Us);L(this,vc,new pi("session"));L(this,jn);L(this,li,!1);F(this,Us,n.clock??mR)}get caches(){return T(this,vc)}now(){let n=T(this,Us).call(this);if(!Number.isFinite(n))throw new RangeError("monotonic clock must return a finite number");return n}withDeadlineIfAbsent(n,o){return U(this,Kn,zl).call(this,n,!0,o)}withUnrecordedDeadlineIfAbsent(n,o){return U(this,Kn,zl).call(this,n,!1,o)}withCooperativeSubdeadline(n,o){let t=ql(n,"subdeadline budget"),r=T(this,jn);return r===void 0?U(this,Kn,Gy).call(this,t,o):U(this,Kn,Vy).call(this,r,t,o)}checkpoint(){let n=T(this,jn);return n===void 0?!1:n.timedOut?!0:this.now()>=n.endMs?(n.timedOut=!0,!0):!1}checkpointWithReserve(n){let o=ql(n,"checkpoint reserve"),t=T(this,jn);return t===void 0?!1:t.timedOut?!0:this.now()+o>=t.endMs?(t.timedOut=!0,!0):!1}get cancelled(){return T(this,jn)?.timedOut??!1}get cacheWriteAllowed(){return!this.checkpoint()}takePreviousTimeout(){if(T(this,jn)!==void 0)return!1;let n=T(this,li);return F(this,li,!1),n}};Us=new WeakMap,vc=new WeakMap,jn=new WeakMap,li=new WeakMap,Kn=new WeakSet,zl=c(function(n,o,t){U(this,Kn,By).call(this,ql(n,"deadline budget"),o);try{return t()}finally{U(this,Kn,Ly).call(this)}},"#runWithDeadlineIfAbsent"),By=c(function(n,o){var t;if(T(this,jn)===void 0){F(this,jn,{endMs:this.now()+n,timedOut:!1,nesting:1,recordTimeout:o});return}(t=T(this,jn)).recordTimeout||(t.recordTimeout=o),T(this,jn).nesting=Math.min(Number.MAX_SAFE_INTEGER,T(this,jn).nesting+1)},"#enterDeadline"),Ly=c(function(){let n=T(this,jn);n!==void 0&&(n.nesting<=1?(T(this,li)||F(this,li,n.timedOut&&n.recordTimeout),F(this,jn,void 0)):n.nesting-=1)},"#exitDeadline"),Gy=c(function(n,o){let t;return this.withDeadlineIfAbsent(n,()=>{if(this.checkpoint())return;let r=o();this.checkpoint()||(t=r)}),t},"#runWithStandaloneSubdeadline"),Ac=c(function(n){let o=this.now(),t=T(this,jn),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,jn,n),r},"#restoreOuterDeadline"),Vy=c(function(n,o,t){if(this.checkpoint())return;let r={...n};if(n.endMs=Math.min(n.endMs,this.now()+o),this.checkpoint()){U(this,Kn,Ac).call(this,r);return}let a=!1;try{let i=t(),s=U(this,Kn,Ac).call(this,r);return a=!0,s?void 0:i}finally{a||U(this,Kn,Ac).call(this,r)}},"#runWithNestedSubdeadline"),c($l,"SearchSession");var gc=$l;function Hy(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(Hy,"createAutomoveExecutionContext");var fR=Object.freeze({nextUint32(){let e=new Uint32Array(1);return globalThis.crypto.getRandomValues(e),e[0]??0}}),di,js,mi,aa,Yl=class Yl{constructor(n={}){L(this,di);L(this,js);L(this,mi,new pi("engine"));L(this,aa,!1);F(this,di,n.clock),F(this,js,n.randomSource??fR)}run(n){T(this,aa)&&(T(this,mi).clear(),F(this,aa,!1));let o=new gc(T(this,di)===void 0?{}:{clock:T(this,di)}),t=Hy(o,T(this,mi),T(this,js));try{return n(t)}finally{F(this,aa,o.takePreviousTimeout()),t.caches.session.clear()}}clearCaches(){F(this,aa,!1),T(this,mi).clear()}};di=new WeakMap,js=new WeakMap,mi=new WeakMap,aa=new WeakMap,c(Yl,"AutomoveEngine");var Ec=Yl;var P=Object.freeze({White:"white",Black:"black"}),he=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"}),q=Object.freeze({Potion:"potion",Bomb:"bomb",BombOrPotion:"bomb-or-potion"}),en=Object.freeze({SelectPotion:"select-potion",SelectBomb:"select-bomb"});var Zl=Object.freeze({[P.White]:0,[P.Black]:1});function un(e){return Zl[e]}c(un,"colorId");var it=Object.freeze({[A.Demon]:0,[A.Drainer]:1,[A.Angel]:2,[A.Spirit]:3,[A.Mystic]:4}),wo=Object.freeze({MonMove:"mon-move",ManaMove:"mana-move",Action:"action",Potion:"potion"}),Jl=Object.freeze({[en.SelectPotion]:0,[en.SelectBomb]:1}),we=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"}),jt=4,yr=Object.freeze({kind:"supermana"});function G(e){return e===P.Black?P.White:P.Black}c(G,"otherColor");function sa(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(sa,"createMon");function Xl(e,n){return e.kind===n.kind&&e.color===n.color&&e.cooldown===n.cooldown}c(Xl,"monEquals");function j(e){return e.cooldown>0}c(j,"isMonFainted");function jy(e){return sa(e.kind,e.color,2)}c(jy,"faintMon");function Ky(e){return e.cooldown>0?sa(e.kind,e.color,e.cooldown-1):Go(e)}c(Ky,"decreaseMonCooldown");function yi(e){return Object.freeze({kind:"regular",color:e})}c(yi,"regularMana");function qe(e,n){return e.kind==="supermana"?n.kind==="supermana":n.kind==="regular"&&e.color===n.color}c(qe,"manaEquals");function ed(e,n){return e||!n?2:1}c(ed,"manaScoreForOwnership");function De(e,n){return ed(e.kind==="supermana",e.kind==="regular"&&e.color===n)}c(De,"manaScore");function Yn(e){return Object.freeze({kind:"mon",mon:Go(e)})}c(Yn,"monItem");function ht(e){return Object.freeze({kind:"mana",mana:fi(e)})}c(ht,"manaItem");function st(e,n){return Object.freeze({kind:"mon-with-mana",mon:Go(e),mana:fi(n)})}c(st,"monWithManaItem");function Ks(e,n){return Object.freeze({kind:"mon-with-consumable",mon:Go(e),consumable:n})}c(Ks,"monWithConsumableItem");function qs(e){return Object.freeze({kind:"consumable",consumable:e})}c(qs,"consumableItem");function Go(e){return Object.isFrozen(e)?e:sa(e.kind,e.color,e.cooldown)}c(Go,"immutableMon");function fi(e){return e.kind==="supermana"?yr:Object.isFrozen(e)?e:yi(e.color)}c(fi,"immutableMana");function ia(e){switch(e.kind){case"mon":return Object.isFrozen(e)&&Object.isFrozen(e.mon)?e:Yn(e.mon);case"mana":return Object.isFrozen(e)&&Object.isFrozen(e.mana)?e:ht(e.mana);case"mon-with-mana":return Object.isFrozen(e)&&Object.isFrozen(e.mon)&&Object.isFrozen(e.mana)?e:st(e.mon,e.mana);case"mon-with-consumable":return Object.isFrozen(e)&&Object.isFrozen(e.mon)?e:Ks(e.mon,e.consumable);case"consumable":return Object.isFrozen(e)?e:qs(e.consumable)}}c(ia,"immutableItem");function Ge(e){return{i:e.i,j:e.j}}c(Ge,"copyLocation");function yR(e){switch(e.kind){case"takeback":return{kind:"takeback"};case"location":return{kind:"location",location:Ge(e.location)};case"modifier":return{kind:"modifier",modifier:e.modifier}}}c(yR,"copyInput");function Si(e){let n=yR(e.input);return e.actorMonItem===void 0?{input:n,kind:e.kind}:{input:n,kind:e.kind,actorMonItem:ia(e.actorMonItem)}}c(Si,"copyNextInput");function ua(e){switch(e.kind){case"mon-move":return{kind:"mon-move",item:ia(e.item),from:Ge(e.from),to:Ge(e.to)};case"mana-move":return{kind:"mana-move",mana:fi(e.mana),from:Ge(e.from),to:Ge(e.to)};case"mana-scored":return{kind:"mana-scored",mana:fi(e.mana),at:Ge(e.at)};case"mystic-action":return{kind:"mystic-action",mystic:Go(e.mystic),from:Ge(e.from),to:Ge(e.to)};case"demon-action":return{kind:"demon-action",demon:Go(e.demon),from:Ge(e.from),to:Ge(e.to)};case"demon-additional-step":return{kind:"demon-additional-step",demon:Go(e.demon),from:Ge(e.from),to:Ge(e.to)};case"spirit-target-move":return{kind:"spirit-target-move",item:ia(e.item),from:Ge(e.from),to:Ge(e.to),by:Ge(e.by)};case"pickup-bomb":return{kind:"pickup-bomb",by:Go(e.by),at:Ge(e.at)};case"pickup-potion":return{kind:"pickup-potion",by:ia(e.by),at:Ge(e.at)};case"use-potion":return{kind:"use-potion",from:Ge(e.from),to:Ge(e.to)};case"pickup-mana":return{kind:"pickup-mana",mana:fi(e.mana),by:Go(e.by),at:Ge(e.at)};case"mon-fainted":return{kind:"mon-fainted",mon:Go(e.mon),from:Ge(e.from),to:Ge(e.to)};case"mana-dropped":return{kind:"mana-dropped",mana:fi(e.mana),at:Ge(e.at)};case"supermana-back-to-base":return{kind:"supermana-back-to-base",from:Ge(e.from),to:Ge(e.to)};case"bomb-attack":return{kind:"bomb-attack",by:Go(e.by),from:Ge(e.from),to:Ge(e.to)};case"mon-awake":return{kind:"mon-awake",mon:Go(e.mon),at:Ge(e.at)};case"bomb-explosion":return{kind:"bomb-explosion",at:Ge(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(ua,"copyEvent");function nd(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(Ge)};case"next-input-options":return{kind:"next-input-options",nextInputs:e.nextInputs.map(Si)};case"events":return{kind:"events",events:e.events.map(ua)}}}c(nd,"copyOutput");function H(e){switch(e.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return e.mon;case"mana":case"consumable":return}}c(H,"itemMon");function bt(e){let n=H(e);return n===void 0||!j(n)}c(bt,"isSpiritTargetAllowed");function Xn(e){switch(e.kind){case"mana":case"mon-with-mana":return e.mana;case"mon":case"mon-with-consumable":case"consumable":return}}c(Xn,"itemMana");function ca(e){switch(e.kind){case"mon-with-consumable":case"consumable":return e.consumable;case"mon":case"mana":case"mon-with-mana":return}}c(ca,"itemConsumable");function qy(e,n){switch(e.kind){case"mon":return n.kind==="mon"&&Xl(e.mon,n.mon);case"mana":return n.kind==="mana"&&qe(e.mana,n.mana);case"mon-with-mana":return n.kind==="mon-with-mana"&&Xl(e.mon,n.mon)&&qe(e.mana,n.mana);case"mon-with-consumable":return n.kind==="mon-with-consumable"&&Xl(e.mon,n.mon)&&e.consumable===n.consumable;case"consumable":return n.kind==="consumable"&&e.consumable===n.consumable}}c(qy,"itemEquals");function Ql(e){return`${e.kind}:${e.color}:${e.cooldown}`}c(Ql,"monKey");function Uy(e){return e.kind==="supermana"?"s":`r:${e.color}`}c(Uy,"manaKey");function Oc(e){switch(e.kind){case"mon":return`m:${Ql(e.mon)}`;case"mana":return`a:${Uy(e.mana)}`;case"mon-with-mana":return`mm:${Ql(e.mon)}:${Uy(e.mana)}`;case"mon-with-consumable":return`mc:${Ql(e.mon)}:${e.consumable}`;case"consumable":return`c:${e.consumable}`}}c(Oc,"itemKey");function od(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(od,"inputKey");function yn(e){return e.map(od).join(";")}c(yn,"inputChainKey");function Kt(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(Kt,"inputEquals");function Te(e,n){let o=e[0],t=n[0];return o!==void 0&&t!==void 0&&Kt(o,t)}c(Te,"inputChainsShareFirstInput");function le(e,n){return e.length===n.length&&e.every((o,t)=>{let r=n[t];return r!==void 0&&Kt(o,r)})}c(le,"inputChainsEqual");var Ic=Math.trunc(5.5),qt=10;function Sn(e,n){return{i:e,j:n}}c(Sn,"location");function Oe(e,n){return e.i===n.i&&e.j===n.j}c(Oe,"locationEquals");function ut(e){return Number.isInteger(e.i)&&Number.isInteger(e.j)&&e.i>=0&&e.i<11&&e.j>=0&&e.j<11}c(ut,"isValidLocation");function pa(e){if(!ut(e))throw new RangeError(`board location must use integer coordinates from 0 to ${qt}`)}c(pa,"assertValidLocation");function J(e){return pa(e),e.i*11+e.j}c(J,"locationIndex");function hi(e){if(!Number.isInteger(e)||e<0||e>=121)throw new RangeError("board location index must be an integer from 0 to 120");return Sn(Math.trunc(e/11),e%11)}c(hi,"fromLocationIndex");function Sr(e,n){return Sn(Math.trunc((e.i+n.i)/2),Math.trunc((e.j+n.j)/2))}c(Sr,"locationBetween");function te(e,n){return Math.max(Math.abs(n.i-e.i),Math.abs(n.j-e.j))}c(te,"locationDistance");function zy(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=Sn(t,r);ut(a)&&!Oe(a,e)&&o.push(a)}return o}c(zy,"nearbyLocationsFor");function $y(e,n){let o=[];for(let[t,r]of n){let a=Sn(e.i+t,e.j+r);ut(a)&&o.push(a)}return o}c($y,"directionalReachabilityFor");function SR(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=Sn(e.i+o,e.j+t);ut(r)&&n.push(r)}return n}c(SR,"spiritReachabilityFor");function zs(e){return Object.freeze(Array.from({length:121},(n,o)=>Object.freeze(e(hi(o)).map(t=>Object.freeze(t)))))}c(zs,"buildCache");var hR=zs(e=>zy(e,1)),bR=zs(e=>zy(e,3)),CR=zs(e=>$y(e,[[-2,-2],[2,2],[-2,2],[2,-2]])),MR=zs(e=>$y(e,[[-2,0],[2,0],[0,2],[0,-2]])),kR=zs(SR);function $s(e,n){return ut(n)?e[J(n)]??[]:[]}c($s,"cachedLocations");function fe(e){return $s(hR,e)}c(fe,"nearbyLocations");function hr(e){return $s(bR,e)}c(hr,"bombReachableLocations");function Vo(e){return $s(CR,e)}c(Vo,"mysticReachableLocations");function Ho(e){return $s(MR,e)}c(Ho,"demonReachableLocations");function Uo(e){return $s(kR,e)}c(Uo,"spiritReachableLocations");var td=Object.freeze(Array.from({length:121},(e,n)=>Object.freeze(hi(n))));function Yy(e){if(!/^(?:0|[1-9]\d*)$/u.test(e))return;let n=Number(e);return Number.isSafeInteger(n)?n:void 0}c(Yy,"parseNonnegativeInteger");function Xy(e){for(let n=0;n<e.length;n+=1)if(e.charCodeAt(n)>127)return!1;return!0}c(Xy,"isAscii");function Le(e){return`${e.i},${e.j}`}c(Le,"locationFen");function Qy(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=Yy(o),a=Yy(t);if(r===void 0||a===void 0)return;let i={i:r,j:a};return ut(i)?i:void 0}c(Qy,"parseLocationFen");function TR(e){switch(e){case en.SelectPotion:return"p";case en.SelectBomb:return"b"}}c(TR,"modifierFen");function RR(e){switch(e){case"p":return en.SelectPotion;case"b":return en.SelectBomb;default:return}}c(RR,"parseModifierFen");function PR(e){switch(e.kind){case"takeback":return"z";case"location":return`l${Le(e.location)}`;case"modifier":return`m${TR(e.modifier)}`}}c(PR,"inputFen");function wR(e){switch(e[0]){case"l":{let n=Qy(e.slice(1));return n===void 0?void 0:{kind:"location",location:n}}case"m":{let n=RR(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(wR,"parseInputFen");function br(e){return e.map(PR).join(";")}c(br,"inputArrayFen");function la(e){if(!Xy(e))return;if(e==="")return[];let n=[];for(let o of e.split(";")){if(n.length===jt)return;let t=wR(o);if(t===void 0)return;n.push(t)}return n}c(la,"parseInputArrayFen");var Zy=["id","formula","material","position","mana","race","threat"],rd=["useHeuristicFormula","includeRegularManaMoveWindows","includeMatchPointWindow","nextTurnWindowScaleBp","doubleConfirmedScore"],ad=["confirmedScore","faintedMon","faintedDrainer","faintedCooldownStep","hasConsumable","activeMon"],id=["drainerAtRisk","manaCloseToSamePool","monWithManaCloseToAnyPool","extraForSupermana","extraForOpponentsMana","drainerCloseToMana","drainerHoldingMana","drainerCloseToOwnPool","drainerCloseToSupermana","monCloseToCenter","spiritCloseToEnemy","spiritOnOwnBasePenalty","angelGuardingDrainer","angelCloseToFriendlyDrainer"],sd=["regularManaToOwnerPool","regularManaDrainerControl","supermanaDrainerControl","supermanaRaceControl","opponentManaDenial","manaCarrierAtRisk","manaCarrierGuarded","manaCarrierOneStepFromPool","supermanaCarrierOneStepFromPoolExtra","immediateWinningCarrier"],ud=["scoreRacePathProgress","opponentScoreRacePathProgress","scoreRaceMultiPath","opponentScoreRaceMultiPath","immediateScoreWindow","opponentImmediateScoreWindow","immediateScoreMultiWindow","opponentImmediateScoreMultiWindow"],cd=["drainerBestManaPath","drainerPickupScoreThisTurn","manaCarrierScoreThisTurn","drainerImmediateThreat","spiritActionUtility","drainerDangerBoolean","manaCarrierDangerBoolean","drainerWalkThreatBoolean","manaCarrierWalkThreatBoolean","opponentDrainerAttackBonus","attackerCloseToOpponentDrainer"];var Jy=Object.freeze({default:"[[true,false,false,5000,true],[1000,-500,-800,0,110,50],[-350,500,800,120,100,300,350,180,120,210,160,180,180,120],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0]]","balanced-distance":"[[true,false,false,5000,true],[1000,-520,-900,-80,105,45],[-420,520,820,130,120,330,370,280,180,180,220,180,280,180],[0,0,0,0,0,0,0,160,80,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0]]","mana-race-lite":"[[true,false,false,5000,true],[1000,-520,-900,-70,105,45],[-420,420,820,130,120,330,370,290,200,180,220,180,290,180],[150,15,26,0,0,-150,70,220,120,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0]]","finisher-balanced":"[[true,false,false,5000,true],[1000,-520,-900,-80,105,45],[-420,520,820,130,120,330,370,280,180,180,220,180,280,180],[0,0,0,0,0,0,0,220,110,360],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0]]","finisher-aggressive":"[[true,false,false,5000,true],[1000,-520,-900,-80,105,45],[-420,520,820,130,120,330,370,280,180,180,220,180,280,180],[0,0,0,0,0,0,0,250,130,540],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0]]","mana-race-lite-d2":"[[true,false,false,5000,true],[1000,-520,-900,-70,105,45],[-420,380,820,130,120,330,370,320,200,180,220,180,290,180],[170,18,26,0,0,-210,95,260,150,300],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0]]","tactical-balanced":"[[true,false,false,5000,true],[1000,-520,-900,-120,105,45],[-420,520,820,130,120,330,370,280,180,180,230,180,300,180],[0,0,0,0,0,-200,110,240,150,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0]]","tactical-aggressive":"[[true,false,false,5000,true],[1000,-520,-900,-160,105,45],[-420,520,820,130,120,330,370,280,180,180,250,180,320,180],[0,0,0,0,0,-260,140,320,220,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0]]","runtime-fast-context":"[[false,false,false,5000,true],[920,-520,-900,-70,105,45],[-420,380,820,130,120,360,430,320,200,180,220,180,290,180],[170,18,26,0,0,-285,145,320,210,520],[165,150,60,90,240,220,80,120],[250,210,290,-220,56,0,0,0,0,0,0]]","runtime-fast-context-potion":"[[false,false,false,5000,true],[920,-520,-900,-70,320,45],[-420,380,820,130,120,360,430,320,200,180,220,180,290,180],[170,18,26,0,0,-285,145,320,210,520],[165,150,60,90,240,220,80,120],[250,210,290,-220,72,0,0,0,0,0,0]]","runtime-fast-boolean":"[[false,false,false,5000,true],[920,-520,-900,-70,105,45],[-420,380,820,130,120,360,430,320,200,180,220,180,290,180],[170,18,26,30,0,-285,145,320,210,520],[165,150,60,90,240,220,80,120],[250,210,290,-220,56,-400,-300,0,0,0,0]]","runtime-fast-boolean-potion":"[[false,false,false,5000,true],[920,-520,-900,-70,320,45],[-420,380,820,130,120,360,430,320,200,180,220,180,290,180],[170,18,26,30,0,-285,145,320,210,520],[165,150,60,90,240,220,80,120],[250,210,290,-220,72,-400,-300,0,0,0,0]]","runtime-normal.base.balanced":"[[false,false,false,5000,true],[900,-520,-900,-80,105,45],[-420,520,820,130,120,360,470,280,180,180,220,260,120,180],[0,0,0,30,24,0,0,160,80,0],[86,184,0,0,96,245,0,0],[58,90,150,-55,86,0,0,0,0,0,0]]","runtime-normal.base.tactical":"[[false,false,false,5000,true],[900,-520,-900,-120,105,45],[-420,520,820,130,120,390,500,280,180,180,230,260,180,180],[0,0,0,34,30,-200,110,240,150,0],[94,220,0,0,102,310,0,0],[84,110,180,-90,90,0,0,0,0,0,0]]","runtime-normal.base.tactical-aggressive":"[[false,false,false,5000,true],[890,-520,-900,-160,105,45],[-420,520,820,130,120,410,520,280,180,180,250,260,190,180],[0,0,0,40,34,-260,140,320,220,0],[104,255,0,0,114,360,0,0],[96,130,220,-120,94,0,0,0,0,0,0]]","runtime-normal.base.finisher":"[[false,false,false,5000,true],[930,-520,-900,-80,105,45],[-420,520,820,130,120,375,500,280,180,180,220,260,170,180],[0,0,0,32,28,0,0,220,110,360],[170,170,0,0,275,235,0,0],[72,120,240,0,88,0,0,0,0,0,0]]","runtime-normal.base.finisher-aggressive":"[[false,false,false,5000,true],[940,-520,-900,-80,105,45],[-420,520,820,130,120,395,520,280,180,180,220,260,180,180],[0,0,0,36,30,0,0,250,130,540],[195,185,0,0,330,265,0,0],[84,140,280,0,90,0,0,0,0,0,0]]","runtime-normal.boolean.balanced":"[[false,false,false,5000,true],[900,-520,-900,-80,105,45],[-420,520,820,130,120,360,470,280,180,180,220,260,120,180],[0,0,0,30,24,0,0,160,80,0],[86,184,0,0,96,245,0,0],[58,90,150,-55,86,-1200,-800,0,0,0,0]]","runtime-normal.boolean.tactical":"[[false,false,false,5000,true],[900,-520,-900,-120,105,45],[-420,520,820,130,120,390,500,280,180,180,230,260,180,180],[0,0,0,34,30,-200,110,240,150,0],[94,220,0,0,102,310,0,0],[84,110,180,-90,90,-1200,-800,0,0,0,0]]","runtime-normal.boolean.tactical-aggressive":"[[false,false,false,5000,true],[890,-520,-900,-160,105,45],[-420,520,820,130,120,410,520,280,180,180,250,260,190,180],[0,0,0,40,34,-260,140,320,220,0],[104,255,0,0,114,360,0,0],[96,130,220,-120,94,-1200,-800,0,0,0,0]]","runtime-normal.boolean.finisher":"[[false,false,false,5000,true],[930,-520,-900,-80,105,45],[-420,520,820,130,120,375,500,280,180,180,220,260,170,180],[0,0,0,32,28,0,0,220,110,360],[170,170,0,0,275,235,0,0],[72,120,240,0,88,-1200,-800,0,0,0,0]]","runtime-normal.boolean.finisher-aggressive":"[[false,false,false,5000,true],[940,-520,-900,-80,105,45],[-420,520,820,130,120,395,520,280,180,180,220,260,180,180],[0,0,0,36,30,0,0,250,130,540],[195,185,0,0,330,265,0,0],[84,140,280,0,90,-1200,-800,0,0,0,0]]","runtime-normal-walk-balanced":"[[false,false,false,5000,true],[900,-520,-900,-80,105,45],[-420,520,820,130,120,360,470,280,180,180,220,260,120,180],[0,0,0,30,24,0,0,160,80,0],[86,184,0,0,96,245,0,0],[58,90,150,-55,86,-1200,-800,-300,-150,0,0]]","runtime-normal-walk-tactical":"[[false,false,false,5000,true],[900,-520,-900,-120,105,45],[-420,520,820,130,120,390,500,280,180,180,230,260,180,180],[0,0,0,34,30,-200,110,240,150,0],[94,220,0,0,102,310,0,0],[84,110,180,-90,90,-1200,-800,-300,-150,0,0]]","runtime-normal-walk-tactical-aggressive":"[[false,false,false,5000,true],[890,-520,-900,-160,105,45],[-420,520,820,130,120,410,520,280,180,180,250,260,190,180],[0,0,0,40,34,-260,140,320,220,0],[104,255,0,0,114,360,0,0],[96,130,220,-120,94,-1200,-800,-300,-150,0,0]]","runtime-normal-walk-finisher":"[[false,false,false,5000,true],[930,-520,-900,-80,105,45],[-420,520,820,130,120,375,500,280,180,180,220,260,170,180],[0,0,0,32,28,0,0,220,110,360],[170,170,0,0,275,235,0,0],[72,120,240,0,88,-1200,-800,-300,-150,0,0]]","runtime-normal-walk-finisher-aggressive":"[[false,false,false,5000,true],[940,-520,-900,-80,105,45],[-420,520,820,130,120,395,520,280,180,180,220,260,180,180],[0,0,0,36,30,0,0,250,130,540],[195,185,0,0,330,265,0,0],[84,140,280,0,90,-1200,-800,-300,-150,0,0]]","runtime-normal-attacker-balanced":"[[false,false,false,5000,true],[900,-520,-900,-80,105,45],[-420,520,820,130,120,360,470,280,180,180,220,260,120,180],[0,0,0,30,24,0,0,160,80,0],[86,184,0,0,96,245,0,0],[58,90,150,-55,86,-1200,-800,0,0,0,200]]","runtime-normal-attacker-tactical":"[[false,false,false,5000,true],[900,-520,-900,-120,105,45],[-420,520,820,130,120,390,500,280,180,180,230,260,180,180],[0,0,0,34,30,-200,110,240,150,0],[94,220,0,0,102,310,0,0],[84,110,180,-90,90,-1200,-800,0,0,0,200]]","runtime-normal-attacker-tactical-aggressive":"[[false,false,false,5000,true],[890,-520,-900,-160,105,45],[-420,520,820,130,120,410,520,280,180,180,250,260,190,180],[0,0,0,40,34,-260,140,320,220,0],[104,255,0,0,114,360,0,0],[96,130,220,-120,94,-1200,-800,0,0,0,200]]","runtime-normal-attacker-finisher":"[[false,false,false,5000,true],[930,-520,-900,-80,105,45],[-420,520,820,130,120,375,500,280,180,180,220,260,170,180],[0,0,0,32,28,0,0,220,110,360],[170,170,0,0,275,235,0,0],[72,120,240,0,88,-1200,-800,0,0,0,200]]","runtime-normal-attacker-finisher-aggressive":"[[false,false,false,5000,true],[940,-520,-900,-80,105,45],[-420,520,820,130,120,395,520,280,180,180,220,260,180,180],[0,0,0,36,30,0,0,250,130,540],[195,185,0,0,330,265,0,0],[84,140,280,0,90,-1200,-800,0,0,0,200]]"});var pd=1e4,eS=2e4,AR=/^[a-z0-9]+(?:[.-][a-z0-9]+)*$/,nS=new Map(Object.entries(Jy)),ld=new WeakSet;function dd(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(dd,"validateExactKeys");function oS(e){if(typeof e!="string"||e.length>96||!AR.test(e))throw new RangeError(`scoring profile id must be a lower-case dotted or dashed identifier: ${e}`)}c(oS,"validateProfileId");function Ys(e,n,o){dd(e,n,o);for(let[t,r]of Object.entries(n))if(!Number.isSafeInteger(r)||Math.abs(r)>pd)throw new RangeError(`${e}.${t} must be a safe integer between -${pd} and ${pd}`)}c(Ys,"validateNumericSection");function gR(e){dd("formula",e,rd);for(let[n,o]of Object.entries(e))if(n==="nextTurnWindowScaleBp"){if(typeof o!="number"||!Number.isSafeInteger(o)||o<0||o>eS)throw new RangeError(`formula.nextTurnWindowScaleBp must be an integer between 0 and ${eS}`)}else if(typeof o!="boolean")throw new TypeError(`formula.${n} must be a boolean`)}c(gR,"validateFormula");function vR(e){return JSON.stringify([rd.map(n=>e.formula[n]),ad.map(n=>e.material[n]),id.map(n=>e.position[n]),sd.map(n=>e.mana[n]),ud.map(n=>e.race[n]),cd.map(n=>e.threat[n])])}c(vR,"profileSignature");function ER(e){let n=vR(e),o=nS.get(e.id);if(o!==void 0&&o!==n)throw new RangeError(`scoring profile id ${e.id} is already registered with different weights`);nS.set(e.id,n)}c(ER,"registerProfileIdentity");function _n(e){return Object.freeze(e)}c(_n,"freezeScoringSection");function vn(e){oS(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:_n({...n.formula,...e.formula}),material:_n({...n.material,...e.material}),position:_n({...n.position,...e.position}),mana:_n({...n.mana,...e.mana}),race:_n({...n.race,...e.race}),threat:_n({...n.threat,...e.threat})};Xs(o);let t=Object.freeze(o);return ld.add(t),t}c(vn,"defineScoringProfile");function Xs(e){if(typeof e!="object"||e===null)throw new TypeError("scoring profile must be an object");let n=e;dd("scoring profile",n,Zy),oS(n.id),gR(n.formula),Ys("material",n.material,ad),Ys("position",n.position,id),Ys("mana",n.mana,sd),Ys("race",n.race,ud),Ys("threat",n.threat,cd),ER(n)}c(Xs,"validateScoringProfile");function bi(e){return e.id}c(bi,"scoringProfileId");function Qs(e){if(Xs(e),ld.has(e))return e;let n=Object.freeze({id:e.id,formula:_n({...e.formula}),material:_n({...e.material}),position:_n({...e.position}),mana:_n({...e.mana}),race:_n({...e.race}),threat:_n({...e.threat})});return Xs(n),ld.add(n),n}c(Qs,"normalizeScoringProfile");var OR=_n({useHeuristicFormula:!0,includeRegularManaMoveWindows:!1,includeMatchPointWindow:!1,nextTurnWindowScaleBp:5e3,doubleConfirmedScore:!0}),IR=_n({confirmedScore:1e3,faintedMon:-500,faintedDrainer:-800,faintedCooldownStep:0,hasConsumable:110,activeMon:50}),xR=_n({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}),NR=_n({regularManaToOwnerPool:0,regularManaDrainerControl:0,supermanaDrainerControl:0,supermanaRaceControl:0,opponentManaDenial:0,manaCarrierAtRisk:0,manaCarrierGuarded:0,manaCarrierOneStepFromPool:0,supermanaCarrierOneStepFromPoolExtra:0,immediateWinningCarrier:0}),DR=_n({scoreRacePathProgress:0,opponentScoreRacePathProgress:0,scoreRaceMultiPath:0,opponentScoreRaceMultiPath:0,immediateScoreWindow:0,opponentImmediateScoreWindow:0,immediateScoreMultiWindow:0,opponentImmediateScoreMultiWindow:0}),_R=_n({drainerBestManaPath:0,drainerPickupScoreThisTurn:0,manaCarrierScoreThisTurn:0,drainerImmediateThreat:0,spiritActionUtility:0,drainerDangerBoolean:0,manaCarrierDangerBoolean:0,drainerWalkThreatBoolean:0,manaCarrierWalkThreatBoolean:0,opponentDrainerAttackBonus:0,attackerCloseToOpponentDrainer:0}),md=Qs({id:"default",formula:OR,material:IR,position:xR,mana:NR,race:DR,threat:_R}),Cr=vn({id:"balanced-distance",base:md,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}}),FR=vn({id:"mana-race-lite",base:Cr,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}}),tS=vn({id:"finisher-balanced",base:Cr,mana:{manaCarrierOneStepFromPool:220,supermanaCarrierOneStepFromPoolExtra:110,immediateWinningCarrier:360}}),rS=vn({id:"finisher-aggressive",base:Cr,mana:{manaCarrierOneStepFromPool:250,supermanaCarrierOneStepFromPoolExtra:130,immediateWinningCarrier:540}}),fd=vn({id:"mana-race-lite-d2",base:FR,position:{manaCloseToSamePool:380,drainerCloseToOwnPool:320},mana:{regularManaToOwnerPool:170,regularManaDrainerControl:18,manaCarrierAtRisk:-210,manaCarrierGuarded:95,manaCarrierOneStepFromPool:260,supermanaCarrierOneStepFromPoolExtra:150,immediateWinningCarrier:300}}),yd=vn({id:"tactical-balanced",base:Cr,material:{faintedCooldownStep:-120},position:{spiritCloseToEnemy:230,angelGuardingDrainer:300},mana:{manaCarrierAtRisk:-200,manaCarrierGuarded:110,manaCarrierOneStepFromPool:240,supermanaCarrierOneStepFromPoolExtra:150}}),aS=vn({id:"tactical-aggressive",base:yd,material:{faintedCooldownStep:-160},position:{spiritCloseToEnemy:250,angelGuardingDrainer:320},mana:{manaCarrierAtRisk:-260,manaCarrierGuarded:140,manaCarrierOneStepFromPool:320,supermanaCarrierOneStepFromPoolExtra:220}}),iS=vn({id:"runtime-fast-context",base:fd,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}}),xc=vn({id:"runtime-fast-context-potion",base:iS,material:{hasConsumable:320},threat:{spiritActionUtility:72}}),Nc=vn({id:"runtime-fast-boolean",base:iS,mana:{supermanaRaceControl:30},threat:{drainerDangerBoolean:-400,manaCarrierDangerBoolean:-300}}),sS=vn({id:"runtime-fast-boolean-potion",base:Nc,material:{hasConsumable:320},threat:{spiritActionUtility:72}});var Zs=Math.trunc(14022),uS=140,cS=3,pS=8,lS=600,dS=180,Js=6,eu=2200,mS=220,fS=140,yS=2500,SS=340,Dc=260,hS=240,bS=420,CS=210,MS=360,kS=220,TS=140,Mr=Object.freeze({maxExtensionsPerPath:1,extensionNodeShareBp:1500,quiescenceNodes:120,quiescenceEnumerationLimit:12,futilityMargin:2300,transpositionCapacity:12e3,evaluationCacheCapacity:32768}),_c=Object.freeze({fast:Object.freeze({depth:2,maxVisitedNodes:480}),normal:Object.freeze({depth:3,maxVisitedNodes:3800}),pro:Object.freeze({depth:4,maxVisitedNodes:Zs})});function Re(e,n,o){return Math.min(o,Math.max(n,Math.trunc(e)))}c(Re,"clamp");function Ci(e,n){return Math.max(0,e-n)}c(Ci,"subtractSaturating");function da(e,n,o){return Math.trunc(e*n/o)}c(da,"scaleFloor");var Fe=Object.freeze({Baseline:"baseline",Production:"production"});function D(e){return e.planner.mode===Fe.Production}c(D,"productionEnabled");function Mi(e,n){let o=e.board.get(e.board.base({kind:A.Spirit,color:n,cooldown:0})),t=o===void 0?void 0:H(o);return t?.kind===A.Spirit&&t.color===n&&!j(t)}c(Mi,"hasAwakeSpiritOnBase");function ma(e,n){return!e.isFirstTurn()&&e.playerCanMoveMon()&&Mi(e,n)}c(ma,"shouldPreferSpiritDevelopment");function re(e){return e.winsImmediately||e.scoresSupermanaThisTurn||e.scoresOpponentManaThisTurn||e.safeSupermanaPickupNow||e.safeOpponentManaPickupNow}c(re,"hasConcreteScoreSurface");function Q(e){return e.safeSupermanaPickupNow||e.safeOpponentManaPickupNow||e.supermanaProgress||e.opponentManaProgress}c(Q,"hasProgressSurface");function N(e){return e.manaHandoffToOpponent||e.ownDrainerVulnerable&&!e.classes.drainerSafetyRecover&&!e.attacksOpponentDrainer&&!re(e)}c(N,"rootIsUnsafe");function B(e){return e.spiritDevelopment&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow}c(B,"isPlainSpiritDevelopmentRoot");var RS=1e6,Sd=1e4,WR=["budget","search","planner","evaluation","replyRisk","policy"],BR=["preference","depth","maxVisitedNodes","exactLiteRootCalls","exactLiteStaticCalls","extensionNodeShareBp","quiescenceNodes"],LR=["depth","maxVisitedNodes","exactLiteRootCalls","exactLiteStaticCalls","extensionNodeShareBp","quiescenceNodes"],GR=["rootEnumerationLimit","rootBranchLimit","nodeEnumerationLimit","nodeBranchLimit","twoPassRootAllocation","volatilityFocus","selectiveExtensions","maxExtensionsPerPath","quietReductions","quietReductionDepthThreshold","quiescence","quiescenceEnumerationLimit","futilityPruning","futilityMargin","transpositionTable","transpositionCapacity","exactLiteChecks","exactRootAnalysis"],VR=["twoPassRootAllocation","volatilityFocus","selectiveExtensions","quietReductions","quiescence","futilityPruning","transpositionTable","exactLiteChecks","exactRootAnalysis"],HR=["rootEnumerationLimit","rootBranchLimit","nodeEnumerationLimit","nodeBranchLimit","maxExtensionsPerPath","quietReductionDepthThreshold","quiescenceEnumerationLimit","futilityMargin","transpositionCapacity"],UR=["enabled","rerankHeads","lowBudgetGuard","midTurnTacticalGuard","secondaryAnalysis","selectedFollowupProjection","mode","ownSeedCap","ownBeam","perNodeFamilyCap","stepCap","opponentSeedCap","opponentBeam","replySeedCap","replyBeam","expansionCap","spiritFamily"],jR=["enabled","rerankHeads","lowBudgetGuard","midTurnTacticalGuard","secondaryAnalysis","selectedFollowupProjection","spiritFamily"],KR=["ownSeedCap","ownBeam","perNodeFamilyCap","stepCap","opponentSeedCap","opponentBeam","replySeedCap","replyBeam","expansionCap"],qR=["weights","cacheCapacity","rootManaHandoffPenalty","rootBacktrackPenalty","potionSpendPenalty","supermanaProgressBonus","supermanaScoreBonus","opponentManaProgressBonus","opponentManaScoreBonus","softManaHandoffPenalty","softRoundtripPenalty"],zR=["cacheCapacity","rootManaHandoffPenalty","rootBacktrackPenalty","potionSpendPenalty","supermanaProgressBonus","supermanaScoreBonus","opponentManaProgressBonus","opponentManaScoreBonus","softManaHandoffPenalty","softRoundtripPenalty"],$R=["enabled","scoreMargin","shortlistLimit","replyLimit","nodeShareBp","antiHelpScoreMargin","antiHelpReplyLimit","safetyRerank","deepSafetyFloor","deterministicTiebreak","preferCleanRoots","lateSafeManaRootPreference"],YR=["enabled","safetyRerank","deepSafetyFloor","deterministicTiebreak","preferCleanRoots","lateSafeManaRootPreference"],XR=["scoreMargin","shortlistLimit","replyLimit","nodeShareBp","antiHelpScoreMargin","antiHelpReplyLimit"],QR=["targetedDrainerAttackFallback","forcedTacticalPrepass","preferSpiritDevelopment","hardSpiritDeployment","supermanaPrepassException","drainerSafetyScoreMargin","efficiencyScoreMargin"],ZR=["targetedDrainerAttackFallback","forcedTacticalPrepass","preferSpiritDevelopment","hardSpiritDeployment","supermanaPrepassException"],JR=["drainerSafetyScoreMargin","efficiencyScoreMargin"];function PS(e,n){if(n===null||typeof n!="object"||Array.isArray(n))throw new TypeError(`${e} must be a plain object`)}c(PS,"requireRecord");function wS(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(wS,"validateExactKeys");function ki(e,n,o){for(let t of o){let r=n[t];if(typeof r!="number"||!Number.isSafeInteger(r)||r<0||r>RS)throw new RangeError(`${e}.${t} must be an integer from 0 through ${RS}`)}}c(ki,"validateConfigNumbers");function Fc(e,n,o){for(let t of o)if(typeof n[t]!="boolean")throw new TypeError(`${e}.${t} must be a boolean`)}c(Fc,"validateConfigBooleans");function hd(e){PS("automove config",e),wS("automove config",e,WR);for(let[t,r]of[["budget",BR],["search",GR],["planner",UR],["evaluation",qR],["replyRisk",$R],["policy",QR]]){let a=e[t];PS(`${t} config`,a),wS(`${t} config`,a,r)}let n=e;if(Xs(n.evaluation.weights),!Object.prototype.hasOwnProperty.call(_c,n.budget.preference))throw new RangeError(`unknown automove preference: ${n.budget.preference}`);let o=e.planner.mode;if(o!==Fe.Baseline&&o!==Fe.Production)throw new RangeError(`unknown planner mode: ${String(o)}`);if(ki("budget",n.budget,LR),ki("search",n.search,HR),ki("planner",n.planner,KR),ki("evaluation",n.evaluation,zR),ki("replyRisk",n.replyRisk,XR),ki("policy",n.policy,JR),Fc("search",n.search,VR),Fc("planner",n.planner,jR),Fc("replyRisk",n.replyRisk,YR),Fc("policy",n.policy,ZR),n.budget.depth<1||n.budget.depth>5)throw new RangeError(`budget.depth must be from ${1} through ${5}`);if(n.budget.maxVisitedNodes<1||n.budget.maxVisitedNodes>18e4)throw new RangeError(`budget.maxVisitedNodes must be from 1 through ${18e4}`);if(n.search.transpositionCapacity<1)throw new RangeError("search.transpositionCapacity must be positive");if(n.budget.extensionNodeShareBp>Sd||n.replyRisk.nodeShareBp>Sd)throw new RangeError(`basis-point shares must not exceed ${Sd}`)}c(hd,"validateAutomoveConfig");function jo(e){return Object.freeze(e)}c(jo,"freezeSection");function AS(e){let n=Qs(e.evaluation.weights),o=Object.freeze({budget:jo({...e.budget}),search:jo({...e.search}),planner:jo({...e.planner}),evaluation:jo({...e.evaluation,weights:n}),replyRisk:jo({...e.replyRisk}),policy:jo({...e.policy})});return hd(o),o}c(AS,"defineAutomoveConfig");function ke(e,n){let o=(()=>{if(n.evaluation===void 0)return e.evaluation;let r=Qs(n.evaluation.weights??e.evaluation.weights);return jo({...e.evaluation,...n.evaluation,weights:r})})(),t=Object.freeze({budget:n.budget===void 0?e.budget:jo({...e.budget,...n.budget}),search:n.search===void 0?e.search:jo({...e.search,...n.search}),planner:n.planner===void 0?e.planner:jo({...e.planner,...n.planner}),evaluation:o,replyRisk:n.replyRisk===void 0?e.replyRisk:jo({...e.replyRisk,...n.replyRisk}),policy:n.policy===void 0?e.policy:jo({...e.policy,...n.policy})});return hd(t),t}c(ke,"patchAutomoveConfig");function nP(e,n,o){let t=Re(Math.trunc(n),1,5),r=Re(Math.trunc(o),32,18e4),a=Re(Math.trunc(r/24),4,28),i=Re(Math.trunc(r/40),4,18),s=Re(a*5,a,180),u=Re(i*3,i,96);return AS({budget:{preference:e,depth:t,maxVisitedNodes:r,exactLiteRootCalls:0,exactLiteStaticCalls:0,extensionNodeShareBp:Mr.extensionNodeShareBp,quiescenceNodes:Mr.quiescenceNodes},search:{rootEnumerationLimit:s,rootBranchLimit:a,nodeEnumerationLimit:u,nodeBranchLimit:i,twoPassRootAllocation:!1,volatilityFocus:!1,selectiveExtensions:!1,maxExtensionsPerPath:Mr.maxExtensionsPerPath,quietReductions:!1,quietReductionDepthThreshold:3,quiescence:!1,quiescenceEnumerationLimit:Mr.quiescenceEnumerationLimit,futilityPruning:!1,futilityMargin:Mr.futilityMargin,transpositionTable:!0,transpositionCapacity:Mr.transpositionCapacity,exactLiteChecks:!1,exactRootAnalysis:!1},planner:{enabled:!1,rerankHeads:!1,lowBudgetGuard:!1,midTurnTacticalGuard:!1,secondaryAnalysis:!0,selectedFollowupProjection:!0,mode:Fe.Baseline,ownSeedCap:0,ownBeam:0,perNodeFamilyCap:0,stepCap:0,opponentSeedCap:0,opponentBeam:0,replySeedCap:0,replyBeam:0,expansionCap:0,spiritFamily:!1},evaluation:{weights:md,cacheCapacity:Mr.evaluationCacheCapacity,rootManaHandoffPenalty:mS,rootBacktrackPenalty:fS,potionSpendPenalty:t>=3?Dc:SS,supermanaProgressBonus:hS,supermanaScoreBonus:bS,opponentManaProgressBonus:CS,opponentManaScoreBonus:MS,softManaHandoffPenalty:kS,softRoundtripPenalty:TS},replyRisk:{enabled:!1,scoreMargin:uS,shortlistLimit:cS,replyLimit:pS,nodeShareBp:lS,antiHelpScoreMargin:dS,antiHelpReplyLimit:Js,safetyRerank:!1,deepSafetyFloor:!1,deterministicTiebreak:!1,preferCleanRoots:!1,lateSafeManaRootPreference:!1},policy:{targetedDrainerAttackFallback:!1,forcedTacticalPrepass:!0,preferSpiritDevelopment:!0,hardSpiritDeployment:!1,supermanaPrepassException:!1,drainerSafetyScoreMargin:eu,efficiencyScoreMargin:yS}})}c(nP,"automoveConfigFromBudget");function oP(e){if(e.budget.depth>=3){let n=Re(e.search.rootBranchLimit+10,6,36),o=Re(Ci(e.search.nodeBranchLimit,11),6,18);return ke(e,{search:{rootBranchLimit:n,nodeBranchLimit:o,rootEnumerationLimit:Re(n*6,n,220),nodeEnumerationLimit:Re(o*4,o,108)},evaluation:{weights:Cr}})}return ke(e,{evaluation:{weights:fd}})}c(oP,"withRuntimeSearchShape");function tP(e){let n=Re(e.search.rootBranchLimit+8,8,40),o=Re(Ci(e.search.nodeBranchLimit,2),6,18);return ke(e,{search:{rootBranchLimit:n,nodeBranchLimit:o,rootEnumerationLimit:Re(n*6,n,240),nodeEnumerationLimit:Re(o*4,o,108)}})}c(tP,"withFastWideRootShape");function rP(e){let n=Re(e.search.rootBranchLimit,8,36),o=Re(e.search.nodeBranchLimit+3,9,18);return ke(e,{search:{rootBranchLimit:n,nodeBranchLimit:o,rootEnumerationLimit:Re(n*6,n,220),nodeEnumerationLimit:Re(o*6,o,132)}})}c(rP,"withNormalDeeperShape");function gS(e){let n=_c[e],o=oP(nP(e,n.depth,n.maxVisitedNodes));if(e==="fast")return ke(tP(o),{search:{twoPassRootAllocation:!1,selectiveExtensions:!1,quietReductions:!0,volatilityFocus:!1},evaluation:{weights:xc,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:Js,safetyRerank:!1,deepSafetyFloor:!1,deterministicTiebreak:!1,preferCleanRoots:!1},policy:{forcedTacticalPrepass:!0,preferSpiritDevelopment:!0,hardSpiritDeployment:!1,supermanaPrepassException:!0,drainerSafetyScoreMargin:eu,efficiencyScoreMargin:1700}});let t=rP(o);if(e==="normal"){let i=Re(da(t.budget.maxVisitedNodes,3,2),t.budget.maxVisitedNodes,18e4),s=Re(da(i,112,100),i,18e4),u=Re(Ci(t.search.rootBranchLimit,1),12,38),p=Re(t.search.nodeBranchLimit+2,8,18);return ke(t,{budget:{maxVisitedNodes:s},search:{rootBranchLimit:u,nodeBranchLimit:p,rootEnumerationLimit:Re(u*6,u,240),nodeEnumerationLimit:Re((p+2)*6,p,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=Re(t.search.rootBranchLimit,14,34),a=Re(t.search.nodeBranchLimit,9,15);return ke(t,{budget:{maxVisitedNodes:Zs},search:{rootBranchLimit:r,nodeBranchLimit:a,rootEnumerationLimit:Re(r*6,r,204),nodeEnumerationLimit:Re((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(gS,"automoveConfigFromPreference");var zt=he.Classic,Ie=5,ue=5,kr=1,qn=1,fa=Object.freeze([he.Classic,he.SwappedManaRows,he.OffsetArcManaRows,he.CenterSpokeManaRows,he.AlternatingManaRows,he.InnerWedgeManaRows,he.OuterWedgeManaRows,he.BentCenterManaRows,he.OuterEdgeManaRows,he.SplitFlankManaRows,he.ForwardBridgeManaRows,he.CornerChainManaRows]),OS=Object.freeze({[he.Classic]:0,[he.SwappedManaRows]:1,[he.OffsetArcManaRows]:2,[he.CenterSpokeManaRows]:3,[he.AlternatingManaRows]:4,[he.InnerWedgeManaRows]:5,[he.OuterWedgeManaRows]:6,[he.BentCenterManaRows]:7,[he.OuterEdgeManaRows]:8,[he.SplitFlankManaRows]:9,[he.ForwardBridgeManaRows]:10,[he.CornerChainManaRows]:11}),aP=new Map(fa.map(e=>[OS[e],e]));function nu(e){return OS[e]}c(nu,"gameVariantId");function cn(...e){return Object.freeze(e.map(([n,o])=>Object.freeze(Sn(n,o))))}c(cn,"locations");function Ko(e,n){return Object.freeze({[P.Black]:e,[P.White]:n})}c(Ko,"manaLayout");var iP=Object.freeze({[he.Classic]:Ko(cn([3,4],[3,6],[4,3],[4,5],[4,7]),cn([7,4],[7,6],[6,3],[6,5],[6,7])),[he.SwappedManaRows]:Ko(cn([3,3],[3,5],[3,7],[4,4],[4,6]),cn([7,3],[7,5],[7,7],[6,4],[6,6])),[he.OffsetArcManaRows]:Ko(cn([3,4],[3,6],[4,2],[4,5],[4,8]),cn([6,2],[6,5],[6,8],[7,4],[7,6])),[he.CenterSpokeManaRows]:Ko(cn([3,5],[4,2],[4,4],[4,6],[4,8]),cn([6,2],[6,4],[6,6],[6,8],[7,5])),[he.AlternatingManaRows]:Ko(cn([4,1],[4,3],[4,5],[4,7],[4,9]),cn([6,1],[6,3],[6,5],[6,7],[6,9])),[he.InnerWedgeManaRows]:Ko(cn([3,4],[3,6],[4,4],[4,5],[4,6]),cn([6,4],[6,5],[6,6],[7,4],[7,6])),[he.OuterWedgeManaRows]:Ko(cn([3,4],[3,5],[3,6],[4,3],[4,7]),cn([6,3],[6,7],[7,4],[7,5],[7,6])),[he.BentCenterManaRows]:Ko(cn([3,5],[4,4],[4,5],[4,6],[5,3]),cn([5,7],[6,4],[6,5],[6,6],[7,5])),[he.OuterEdgeManaRows]:Ko(cn([4,0],[4,1],[4,9],[4,10],[5,1]),cn([5,9],[6,0],[6,1],[6,9],[6,10])),[he.SplitFlankManaRows]:Ko(cn([3,4],[3,6],[4,2],[4,3],[5,2]),cn([5,8],[6,7],[6,8],[7,4],[7,6])),[he.ForwardBridgeManaRows]:Ko(cn([3,4],[3,6],[4,3],[4,5],[5,4]),cn([5,6],[6,5],[6,7],[7,4],[7,6])),[he.CornerChainManaRows]:Ko(cn([3,5],[3,6],[4,6],[4,7],[5,7]),cn([5,3],[6,3],[6,4],[7,4],[7,5]))}),IS=Object.freeze({kind:"regular"}),vS=Object.freeze({kind:"consumable-base"}),sP=Object.freeze({kind:"supermana-base"}),ou=Object.freeze(Sn(5,5)),ya=cn([0,3],[0,4],[0,5],[0,6],[0,7],[10,3],[10,4],[10,5],[10,6],[10,7]);function xS(e){return Number.isSafeInteger(e)?aP.get(e):void 0}c(xS,"gameVariantFromId");function ES(e,n){return iP[e][n]}c(ES,"manaBaseLocations");function uP(e){let n=Array.from({length:121}).fill(IS),o=c((t,r)=>{n[J(t)]=Object.freeze(r)},"put");o(Sn(0,0),{kind:"mana-pool",color:P.Black}),o(Sn(0,10),{kind:"mana-pool",color:P.Black}),o(Sn(10,0),{kind:"mana-pool",color:P.White}),o(Sn(10,10),{kind:"mana-pool",color:P.White}),o(Sn(0,3),{kind:"mon-base",monKind:A.Mystic,color:P.Black}),o(Sn(0,4),{kind:"mon-base",monKind:A.Spirit,color:P.Black}),o(Sn(0,5),{kind:"mon-base",monKind:A.Drainer,color:P.Black}),o(Sn(0,6),{kind:"mon-base",monKind:A.Angel,color:P.Black}),o(Sn(0,7),{kind:"mon-base",monKind:A.Demon,color:P.Black}),o(Sn(10,3),{kind:"mon-base",monKind:A.Demon,color:P.White}),o(Sn(10,4),{kind:"mon-base",monKind:A.Angel,color:P.White}),o(Sn(10,5),{kind:"mon-base",monKind:A.Drainer,color:P.White}),o(Sn(10,6),{kind:"mon-base",monKind:A.Spirit,color:P.White}),o(Sn(10,7),{kind:"mon-base",monKind:A.Mystic,color:P.White});for(let t of ES(e,P.Black))o(t,{kind:"mana-base",color:P.Black});for(let t of ES(e,P.White))o(t,{kind:"mana-base",color:P.White});return o(Sn(5,0),vS),o(Sn(5,10),vS),o(ou,sP),Object.freeze(n)}c(uP,"buildSquares");var cP=new Map(fa.map(e=>[e,uP(e)]));function Lc(e){let n=cP.get(e);if(n===void 0)throw new TypeError(`unsupported game variant: ${e}`);return n}c(Lc,"squaresForVariant");function bd(e,n){return pa(e),Lc(n)[J(e)]??IS}c(bd,"squareAtForVariant");function pP(e){return bd(e,zt)}c(pP,"squareAt");function lP(e){switch(e.kind){case"mon-base":return Yn(sa(e.monKind,e.color,0));case"mana-base":return ht(yi(e.color));case"supermana-base":return ht(yr);case"consumable-base":return qs(q.BombOrPotion);case"regular":case"mana-pool":return}}c(lP,"initialItemForSquare");function dP(e){return Object.freeze(Lc(e).map(lP))}c(dP,"buildInitialItems");var mP=new Map(fa.map(e=>[e,dP(e)]));function NS(e){let n=mP.get(e);if(n===void 0)throw new TypeError(`unsupported game variant: ${e}`);return[...n]}c(NS,"initialItemsForVariant");function DS(e,n){for(let o of ya){let t=pP(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(DS,"monBase");var tu=Object.freeze({balanced:vn({id:"runtime-normal.base.balanced",base:Cr,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:vn({id:"runtime-normal.base.tactical",base:yd,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:vn({id:"runtime-normal.base.tactical-aggressive",base:aS,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:vn({id:"runtime-normal.base.finisher",base:tS,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:vn({id:"runtime-normal.base.finisher-aggressive",base:rS,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 ru(e,n){return vn({id:e,base:n,threat:{drainerDangerBoolean:-1200,manaCarrierDangerBoolean:-800}})}c(ru,"withBooleanDrainer");var Ct=Object.freeze({balanced:ru("runtime-normal.boolean.balanced",tu.balanced),tactical:ru("runtime-normal.boolean.tactical",tu.tactical),tacticalAggressive:ru("runtime-normal.boolean.tactical-aggressive",tu.tacticalAggressive),finisher:ru("runtime-normal.boolean.finisher",tu.finisher),finisherAggressive:ru("runtime-normal.boolean.finisher-aggressive",tu.finisherAggressive)});function au(e,n){return vn({id:e,base:n,threat:{drainerWalkThreatBoolean:-300,manaCarrierWalkThreatBoolean:-150}})}c(au,"withMediumWalkThreat");function iu(e,n){return vn({id:e,base:n,threat:{attackerCloseToOpponentDrainer:200}})}c(iu,"withAttackerProximity");function _S(e,n,o,t,r,a){let[i,s]=e.activeColor===P.White?[e.whiteScore,e.blackScore]:[e.blackScore,e.whiteScore],u=Ie-i,p=Ie-s,l=i-s;return u<=1?a:p<=1?t:u<=2?r:p<=2||l<=-1?o:n}c(_S,"phaseProfile");var su=Object.freeze({balanced:Object.freeze({weights:au("runtime-normal-walk-balanced",Ct.balanced)}),tactical:Object.freeze({weights:au("runtime-normal-walk-tactical",Ct.tactical)}),tacticalAggressive:Object.freeze({weights:au("runtime-normal-walk-tactical-aggressive",Ct.tacticalAggressive)}),finisher:Object.freeze({weights:au("runtime-normal-walk-finisher",Ct.finisher)}),finisherAggressive:Object.freeze({weights:au("runtime-normal-walk-finisher-aggressive",Ct.finisherAggressive)})}),uu=Object.freeze({balanced:Object.freeze({weights:iu("runtime-normal-attacker-balanced",Ct.balanced)}),tactical:Object.freeze({weights:iu("runtime-normal-attacker-tactical",Ct.tactical)}),tacticalAggressive:Object.freeze({weights:iu("runtime-normal-attacker-tactical-aggressive",Ct.tacticalAggressive)}),finisher:Object.freeze({weights:iu("runtime-normal-attacker-finisher",Ct.finisher)}),finisherAggressive:Object.freeze({weights:iu("runtime-normal-attacker-finisher-aggressive",Ct.finisherAggressive)})});function FS(e,n){return n<3?Object.freeze({weights:Nc}):_S(e,su.balanced,su.tactical,su.tacticalAggressive,su.finisher,su.finisherAggressive)}c(FS,"runtimePhaseAdaptiveWalkThreatMediumScoringProfile");function WS(e,n){return n<3?Object.freeze({weights:Nc}):_S(e,uu.balanced,uu.tactical,uu.tacticalAggressive,uu.finisher,uu.finisherAggressive)}c(WS,"runtimePhaseAdaptiveAttackerProximityScoringProfile");function fP(e,n){let o=n.budget.depth<3?sS:FS(e,n.budget.depth).weights;return ke(n,{evaluation:{weights:o},budget:{maxVisitedNodes:n.budget.depth>=3?da(n.budget.maxVisitedNodes,120,100):n.budget.maxVisitedNodes}})}c(fP,"withRuntimeScoringWeights");function yP(e){let n=Re(e.search.rootBranchLimit+5,12,40),o=Re(Ci(e.search.nodeBranchLimit,2),8,18);return ke(e,{search:{rootBranchLimit:n,nodeBranchLimit:o,rootEnumerationLimit:Re(n*6,n,240),nodeEnumerationLimit:Re(o*4,o,108),twoPassRootAllocation:!1,selectiveExtensions:!1,quietReductions:!0,volatilityFocus:!1},evaluation:{weights:xc,rootManaHandoffPenalty:300,rootBacktrackPenalty:220,potionSpendPenalty:Dc,supermanaProgressBonus:320,supermanaScoreBonus:600,opponentManaProgressBonus:200,opponentManaScoreBonus:310,softManaHandoffPenalty:280,softRoundtripPenalty:220},replyRisk:{scoreMargin:125,shortlistLimit:4,replyLimit:10,nodeShareBp:650,antiHelpScoreMargin:220,antiHelpReplyLimit:Js,safetyRerank:!1,deepSafetyFloor:!1,deterministicTiebreak:!1,preferCleanRoots:!1},policy:{hardSpiritDeployment:!1,supermanaPrepassException:!0,drainerSafetyScoreMargin:eu,efficiencyScoreMargin:1700}})}c(yP,"applyRuntimeNormalFastPolicyBlock");function SP(e){let n=yP(e),o=Re(n.search.rootBranchLimit+2,12,40);return ke(n,{budget:{exactLiteRootCalls:1,exactLiteStaticCalls:1,maxVisitedNodes:da(n.budget.maxVisitedNodes,130,100)},search:{exactLiteChecks:!0,rootBranchLimit:o,rootEnumerationLimit:Re(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(SP,"applyRuntimeNormalFastCoreBudgetSpendProfile");function hP(e,n){let o=Re(n.search.rootBranchLimit,14,34),t=Re(n.search.nodeBranchLimit,9,15);return ke(n,{budget:{maxVisitedNodes:da(Zs,9,8)},search:{rootBranchLimit:Math.min(o+1,16),nodeBranchLimit:Math.min(t+1,12),rootEnumerationLimit:Re(o*6,o,204),nodeEnumerationLimit:Re((t+2)*6,t,132),futilityPruning:!0,quietReductions:!0,quietReductionDepthThreshold:2,selectiveExtensions:!0,quiescence:!0},planner:{rerankHeads:!0},evaluation:{weights:WS(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(hP,"applyProPrimaryProfile");function bP(e){return ke(e,{budget:{exactLiteRootCalls:0,exactLiteStaticCalls:0},search:{exactLiteChecks:!1}})}c(bP,"withPreExactRuntimePolicy");function Mt(e){return ke(e,{planner:{rerankHeads:!1,enabled:!0,mode:Fe.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(Mt,"withProductionPlanner");function ho(e,n){let o=fP(e,gS(n));return n==="pro"&&(o=hP(e,o)),o=bP(o),n==="normal"&&(o=SP(o)),o}c(ho,"automoveConfigForGame");function Tr(e,n){return nn(e,n)?.game}c(Tr,"applyInputsForSearch");function nn(e,n){let o=e.fork(),t=o.processInput(n,!1,!1);return t.kind==="events"?{game:o,events:t.events}:void 0}c(nn,"applyInputsForSearchWithEvents");var Ri=new RangeError("fast workspace allocation failed");function Pi(e){return e===Ri}c(Pi,"isFastWorkspaceAllocationFailure");function $t(e){throw e instanceof RangeError?Ri:e}c($t,"rethrowFastWorkspaceAllocation");var to=Object.keys(Zl).length,Yt=Object.keys(it).length,Gc=to*Yt,Mn=1,Wn=2,pn=3,LS=1,GS=2,ro=3,bo=1,VS=2,ao=3,wi=it[A.Demon],io=it[A.Drainer],cu=it[A.Angel],Vc=it[A.Spirit],Hc=it[A.Mystic],CP=0,MP=1,kt=2,kP=3,HS=5,Fn=7,Ai=J(ou);function ze(e){return e&3}c(ze,"cellOccupancy");function En(e){return e>>2&7}c(En,"cellMonKind");function zn(e){return e>>5&1}c(zn,"cellMonColor");function Gn(e){return e>>6&3}c(Gn,"cellCooldown");function xe(e){return e>>8&3}c(xe,"cellMana");function Ve(e){return e>>10&3}c(Ve,"cellConsumable");function gi(e){let n=Ve(e);return n===0||n===bo}c(gi,"damagingAttackCanComplete");function vi(e,n,o,t,r){return pn|e<<2|n<<5|o<<6|t<<8|r<<10}c(vi,"makeMonCell");function Rr(e){return Mn|e<<8}c(Rr,"makeManaCell");function US(e){return Wn|e<<10}c(US,"makeConsumableCell");function Tt(e,n){return ed(e===ro,e-1===n)}c(Tt,"manaScoreValue");function xn(e,n){return e*to+n}c(xn,"monId");function Ei(e){return e!==kt&&e<Fn}c(Ei,"squareIsRegularForMovement");function Xt(e){return e>=HS&&e<Fn}c(Xt,"squareIsPool");function Uc(e){return Math.trunc((e-Fn)/to)}c(Uc,"squareMonBaseKind");function jc(e){return(e-Fn)%to}c(jc,"squareMonBaseColor");function $e(e,n){return e[n]??0}c($e,"u8");function me(e,n){return e[n]??0}c(me,"u16");function W(e,n){return e[n]??0}c(W,"i32");function qo(e,n){let o=e[n];if(o===void 0)throw new RangeError("automove search slot index out of range");return o}c(qo,"at");function Kc(e,n,o){return vi(it[e.kind],un(e.color),e.cooldown,n,o)}c(Kc,"fastMonCellFromMon");function TP(e){let n=new Uint8Array(121),o=Lc(e);for(let t=0;t<121;t+=1){let r=o[t];if(r!==void 0)switch(r.kind){case"regular":n[t]=CP;break;case"consumable-base":n[t]=MP;break;case"supermana-base":n[t]=kt;break;case"mana-base":n[t]=kP+un(r.color);break;case"mana-pool":n[t]=HS+un(r.color);break;case"mon-base":n[t]=Fn+xn(it[r.monKind],un(r.color));break}}return n}c(TP,"buildSquares");var RP=new Map(fa.map(e=>[e,TP(e)]));function qc(e){let n=RP.get(e);if(n===void 0)throw new TypeError(`unsupported game variant: ${e}`);try{return n.slice()}catch(o){$t(o)}}c(qc,"fastSquaresForVariant");var Cd=(()=>{let e=new Int32Array(Gc).fill(-1),n=qc(qo(fa,0));for(let o of ya){let t=J(o),r=$e(n,t);r>=Fn&&(e[r-Fn]=t)}return e})();function pu(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(hi(r)).map(J).sort((i,s)=>i-s);n.push(...a),o[r]=a.length}return{list:new Int32Array(n),starts:t,counts:o}}c(pu,"buildOffsetTable");var Ao=pu(fe),Oi=pu(Vo),Ii=pu(Ho),zc=pu(Uo),$c=pu(hr),PP=(()=>{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 zo(e,n){return $e(PP,e*121+n)}c(zo,"chebyshev");function Yc(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(Yc,"midpoint");var BS=(()=>{let e=[],n=qc(qo(fa,0));for(let o=0;o<121;o+=1)Xt($e(n,o))&&e.push(o);return new Int32Array(e)})(),jS=(()=>{let e=new Uint8Array(121*to);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<to;a+=1){let i=a===0?10:0,s=Math.abs(i-o);e[a*121+n]=s>r?s:r}}return e})(),KS=(()=>{let e=new Uint8Array(121);for(let n=0;n<121;n+=1)e[n]=Math.abs(Ic-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<BS.length;t+=1){let r=zo(n,W(BS,t));r<o&&(o=r)}e[n]=o}return e})();function wP(e){let n=e>>>0;return()=>(n^=n<<13,n>>>=0,n^=n>>>17,n^=n<<5,n>>>=0,n|0)}c(wP,"xorshift");function Pr(e,n){let o=new Int32Array(n);for(let t=0;t<n;t+=1)o[t]=e();return o}c(Pr,"randomTable");var wr=wP(49734321),qS=3,Xc=1+Gc*qS,AP=Pr(wr,121*Xc),gP=Pr(wr,121*Xc),vP=Pr(wr,484),EP=Pr(wr,484),OP=Pr(wr,484),IP=Pr(wr,484),zS=2048,Qc=Pr(wr,zS),Md=Pr(wr,zS);function $S(e){return ze(e)!==pn?0:1+xn(En(e),zn(e))*qS+Gn(e)}c($S,"monSlot");function Zc(e,n){return n===0?0:W(AP,e*Xc+$S(n))^W(vP,e*4+xe(n))^W(OP,e*4+Ve(n))}c(Zc,"cellHashLo");function Jc(e,n){return n===0?0:W(gP,e*Xc+$S(n))^W(EP,e*4+xe(n))^W(IP,e*4+Ve(n))}c(Jc,"cellHashHi");function kd(e,n){return e>=Ie?P.White:n>=Ie?P.Black:void 0}c(kd,"winnerForScores");function ep(e){return kd(e.whiteScore,e.blackScore)}c(ep,"winnerForState");function He(e,n){return n===P.White?e.whiteScore:e.blackScore}c(He,"scoreForColor");function Ni(e){return e.turnNumber===1}c(Ni,"isFirstTurnState");function np(e){return e.activeColor===P.White?e.whitePotionsCount:e.blackPotionsCount}c(np,"currentPlayerPotions");function Sa(e){return e<ue}c(Sa,"canMoveMonForCounts");function YS(e){return Sa(e.monsMovesCount)}c(YS,"canPlayerMoveMon");function op(e,n){return!e&&n<kr}c(op,"canMoveManaForCounts");function XS(e){return op(Ni(e),e.manaMovesCount)}c(XS,"canPlayerMoveMana");function tp(e,n,o){return!e&&(o>0||n<qn)}c(tp,"canUseActionForCounts");function QS(e){return tp(Ni(e),e.actionsUsedCount,np(e))}c(QS,"canPlayerUseAction");function Di(e,n){if(n===void 0)return!0;let o=H(e);switch(n.kind){case"mon":return o!==void 0?!1:e.kind==="mana"?n.mon.kind===A.Drainer&&!j(n.mon):e.kind==="consumable"&&e.consumable===q.BombOrPotion;case"mana":return o?.kind===A.Drainer&&!j(o);case"mon-with-mana":case"mon-with-consumable":return e.kind==="consumable"&&e.consumable===q.BombOrPotion;case"consumable":return n.consumable===q.BombOrPotion&&o!==void 0}}c(Di,"spiritDestinationItemAllowed");function Td(e,n,o,t,r,a,i){if(!op(e,o))return!1;let s=Sa(n);return!s&&!tp(e,t,r)||!a||i&&!s&&t>=qn&&r>0}c(Td,"shouldSuggestRegularManaStartsFromScalars");function ZS(e,n,o){return Td(Ni(e),e.monsMovesCount,e.manaMovesCount,e.actionsUsedCount,np(e),n,o)}c(ZS,"shouldSuggestRegularManaStarts");function Rd(e,n,o,t){return e?!Sa(n):op(e,o)?!Sa(n)&&!t:!0}c(Rd,"shouldAdvanceTurnForCounts");function JS(e){let n=Ni(e),t=!(!n&&op(n,e.manaMovesCount)&&!Sa(e.monsMovesCount))||e.board.findMana(e.activeColor)!==void 0;return Rd(n,e.monsMovesCount,e.manaMovesCount,t)}c(JS,"shouldAdvanceTurn");var Qt=0,lu=1,du=2,go=3,Rt=4,mu=5,so=127,Zt=0,Jt=1,ba=2,gd=3,vd=-2,xP=16;function Qn(e,n,o,t,r){return e|n<<3|o<<10|t<<17|r<<24}c(Qn,"encodeMove");function fu(e){return e&7}c(fu,"moveType");function Pt(e){return e>>3&127}c(Pt,"moveFrom");function $o(e){return e>>10&127}c($o,"moveTo");function Ar(e){return e>>17&127}c(Ar,"moveAux");function yu(e){return e>>24&3}c(yu,"moveModifier");function Pd(e,n,o){if(e.length!==n)throw new RangeError(`fast position ${o} length must be ${n}`)}c(Pd,"validateArrayLength");var Nd=class Nd{constructor(){ne(this,"cells",new Uint16Array(121));ne(this,"squares",new Uint8Array(121));ne(this,"monLocations",new Int32Array(Gc).fill(-1));ne(this,"freeMana",new Int32Array(to));ne(this,"manaIndices",new Int32Array(xP));ne(this,"manaCount",0);ne(this,"whiteScore",0);ne(this,"blackScore",0);ne(this,"active",0);ne(this,"monsMoves",0);ne(this,"manaMoves",0);ne(this,"actionsUsed",0);ne(this,"potions",new Int32Array(to));ne(this,"firstTurn",!1);ne(this,"hashLo",0);ne(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){Pd(n.cells,121,"cells"),Pd(n.squares,121,"squares"),Pd(n.potions,to,"potions");let o;try{o=new Uint8Array(n.squares)}catch(m){$t(m)}let t=0;for(let m=0;m<121;m+=1){let d=me(n.cells,m);if(!(d===0||ze(d)!==Mn)&&(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,p=n.actionsUsed,l=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=p,this.potions.set(n.potions),this.firstTurn=l,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^=Zc(t,r),o^=Jc(t,r);let a=ze(r);if(a===pn)this.monLocations[xn(En(r),zn(r))]=t;else if(a===Mn){let i=xe(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(Nd,"MutableFastPosition");var wd=Nd,ap=wd;function Su(e,n,o){let t=W(e.monLocations,xn(cu,n));if(t<0)return!1;let r=me(e.cells,t);return ze(r)===pn&&En(r)===cu&&zn(r)===n&&Gn(r)===0&&zo(t,o)===1}c(Su,"awakeAngelGuards");function NP(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(NP,"removeManaIndex");function DP(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(DP,"insertManaIndex");function Ue(e,n,o){let t=me(e.cells,n);if(t!==o){if(t!==0){e.hashLo^=Zc(n,t),e.hashHi^=Jc(n,t);let r=ze(t);if(r===pn){let a=xn(En(t),zn(t));W(e.monLocations,a)===n&&(e.monLocations[a]=-1)}else if(r===Mn){let a=xe(t);(a===1||a===2)&&(e.freeMana[a-1]=W(e.freeMana,a-1)-1),NP(e,n)}}if(e.cells[n]=o,o!==0){e.hashLo^=Zc(n,o),e.hashHi^=Jc(n,o);let r=ze(o);if(r===pn)e.monLocations[xn(En(o),zn(o))]=n;else if(r===Mn){let a=xe(o);(a===1||a===2)&&(e.freeMana[a-1]=W(e.freeMana,a-1)+1),DP(e,n)}}}}c(Ue,"setCell");function rp(e){return vi(En(e),zn(e),Gn(e),0,0)}c(rp,"plainMonCell");function ha(e,n,o){return vi(En(e),zn(e),Gn(e),n,o)}c(ha,"carryingMonCell");function eh(e,n){e.potions[n]=W(e.potions,n)+1}c(eh,"addPotion");function Ad(e,n,o,t){if(xe(n)===0&&Ve(n)===0&&t===Jt){Ue(e,o,ha(n,0,bo));return}Ue(e,o,n),eh(e,zn(n))}c(Ad,"collectConsumableAt");function _P(e,n){e.active===0?e.whiteScore+=n:e.blackScore+=n}c(_P,"addScore");function Ed(e){if(e.actionsUsed<qn){e.actionsUsed+=1;return}e.potions[e.active]=W(e.potions,e.active)-1}c(Ed,"consumeAction");function nh(e,n){let o=En(n),t=zn(n),r=W(Cd,xn(o,t));Ue(e,r,vi(o,t,2,0,0))}c(nh,"faintMonAt");function FP(e){let n=me(e.cells,Ai);ze(n)===pn&&xe(n)===0&&Ve(n)===0?Ue(e,Ai,ha(n,ro,0)):Ue(e,Ai,Rr(ro))}c(FP,"supermanaBackToBase");function WP(e,n,o){let t=xe(n);t===ro?FP(e):t!==0&&Ue(e,o,Rr(t)),Ve(n)===bo&&Ue(e,o,0)}c(WP,"releaseFaintedCarry");function Od(e,n,o){nh(e,n),WP(e,n,o)}c(Od,"faintTargetAndReleaseCarry");function Id(e,n,o){_P(e,Tt(o,e.active));let t=me(e.cells,n);ze(t)===pn?Ue(e,n,rp(t)):Ue(e,n,0)}c(Id,"scoreCarriedManaAt");function BP(e,n){let o=Pt(n),t=$o(n),r=me(e.cells,o),a=me(e.cells,t),i=xe(r);if(e.monsMoves+=1,Ue(e,o,0),Ue(e,t,r),a!==0){let s=ze(a);s===Mn?(i!==0&&Ue(e,o,Rr(i)),Ue(e,t,ha(r,xe(a),0))):s===Wn&&Ve(a)===ao&&Ad(e,r,t,yu(n))}i!==0&&Xt($e(e.squares,t))&&Id(e,t,i)}c(BP,"applyMonMove");function LP(e,n){let o=Pt(n),t=$o(n),r=xe(me(e.cells,o)),a=me(e.cells,t);e.manaMoves+=1,Ue(e,o,0),Ue(e,t,Rr(r)),a!==0&&Ue(e,t,ha(a,r,0)),Xt($e(e.squares,t))&&Id(e,t,r)}c(LP,"applyManaMove");function GP(e,n){let o=$o(n),t=me(e.cells,o);Ed(e),Ue(e,o,0),Od(e,t,o)}c(GP,"applyMysticAction");function VP(e,n){let o=Pt(n),t=$o(n),r=yu(n),a=r===gd?so:Ar(n),i=me(e.cells,o),s=me(e.cells,t),u=W(Cd,xn(En(i),zn(i))),p=Ve(s)!==bo||a===so||a===u;return Ue(e,o,0),a===so?Ue(e,t,rp(i)):Ue(e,t,0),Ed(e),s!==0&&(Od(e,s,t),Ve(s)===bo&&nh(e,i)),a!==so&&(r===Jt?Ue(e,a,ha(i,0,bo)):(Ue(e,a,rp(i)),r===ba&&eh(e,zn(i)))),p}c(VP,"applyDemonAction");function HP(e,n){let o=Pt(n),t=$o(n),r=me(e.cells,o),a=me(e.cells,t);Ue(e,t,0),Ue(e,o,rp(r)),Od(e,a,t)}c(HP,"applyBombAttack");function UP(e,n){let o=$o(n),t=Ar(n),r=yu(n),a=me(e.cells,o),i=me(e.cells,t),s=xe(a);if(Ed(e),Ue(e,o,0),Ue(e,t,a),i!==0){let u=ze(a);if(u===pn){let p=ze(i);p===Mn?(s!==0&&Ue(e,o,Rr(s)),Ue(e,t,ha(a,xe(i),0))):p===Wn&&Ad(e,a,t,r)}else u===Mn?Ue(e,t,ha(i,s,0)):u===Wn&&Ad(e,i,t,r)}s!==0&&Xt($e(e.squares,t))&&Id(e,t,s)}c(UP,"applySpiritAction");function xd(e){let n=kd(e.whiteScore,e.blackScore);return n===void 0?-1:un(n)}c(xd,"positionWinner");function oh(e){return tp(e.firstTurn,e.actionsUsed,W(e.potions,e.active))}c(oh,"canUseAction");function th(e,n){return W(e.freeMana,e.active)===0?!1:Td(e.firstTurn,e.monsMoves,e.manaMoves,e.actionsUsed,W(e.potions,e.active),n!==0,!0)}c(th,"manaStartsAllowed");function jP(e){return Rd(e.firstTurn,e.monsMoves,e.manaMoves,W(e.freeMana,e.active)!==0)}c(jP,"shouldAdvanceTurn");function KP(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<Yt;o+=1){let t=W(e.monLocations,xn(o,n));if(t<0)continue;let r=me(e.cells,t),a=Gn(r);a===0||xe(r)!==0||Ve(r)!==0||Ue(e,t,vi(En(r),zn(r),a-1,xe(r),Ve(r)))}}c(KP,"advanceTurn");function rh(e,n){let o=e,t=fu(n),r=!0;switch(t){case Qt:BP(o,n);break;case lu:LP(o,n);break;case du:GP(o,n);break;case go:r=VP(o,n);break;case Rt:UP(o,n);break;case mu:HP(o,n);break;default:throw new RangeError(`unsupported fast move type: ${t}`)}let a=xd(o);return a===-1&&jP(o)&&KP(o),r?a:vd}c(rh,"applyFastMove");function ah(e){switch(e){case q.Bomb:return bo;case q.Potion:return VS;case q.BombOrPotion:return ao}}c(ah,"consumableCode");function ih(e){return e.kind==="supermana"?ro:un(e.color)===0?LS:GS}c(ih,"manaCode");var sh=2147483647;function uh(e,n,o){if(!Number.isSafeInteger(o)||o<0||n.whitePotionsCount>sh-o||n.blackPotionsCount>sh-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(Xn(a)!==void 0&&(r+=1,r>e.manaIndices.length))return!1;let i=H(a);if(i===void 0)continue;let s=xn(it[i.kind],un(i.color));if(t[s]!==0)return!1;t[s]=1}try{qP(e,n)}catch(a){if(Pi(a))return!1;throw a}return!0}c(uh,"tryLoadPosition");function qP(e,n){let o;try{o=new Uint16Array(121)}catch(r){$t(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]=Kc(a.mon,0,0);break;case"mana":o[r]=Rr(ih(a.mana));break;case"mon-with-mana":o[r]=Kc(a.mon,ih(a.mana),0);break;case"mon-with-consumable":o[r]=Kc(a.mon,0,ah(a.consumable));break;case"consumable":o[r]=US(ah(a.consumable));break}}e.reset({cells:o,squares:qc(n.variant()),whiteScore:n.whiteScore,blackScore:n.blackScore,active:un(n.activeColor),monsMoves:n.monsMovesCount,manaMoves:n.manaMovesCount,actionsUsed:n.actionsUsedCount,potions:[n.whitePotionsCount,n.blackPotionsCount],firstTurn:n.isFirstTurn()})}c(qP,"loadPosition");function ip(e){return{kind:"location",location:hi(e)}}c(ip,"locationInput");function zP(e){return{kind:"modifier",modifier:e===Jt?en.SelectBomb:en.SelectPotion}}c(zP,"modifierInput");function Dd(e){let n=fu(e),o=[ip(Pt(e)),ip($o(e))];n===Rt?o.push(ip(Ar(e))):n===go&&Ar(e)!==so&&o.push(ip(Ar(e)));let t=yu(e);return(t===Jt||t===ba)&&(n===Qt||n===go||n===Rt)&&o.push(zP(t)),o}c(Dd,"moveToInputs");var gr=1e6,sp=1e6,$P=["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 mh(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 $P){let r=n[t];if(typeof r!="number")throw new TypeError(`weights.${t} must be a number`);if(!Number.isSafeInteger(r)||r<-sp||r>sp)throw new RangeError(`weights.${t} must be a safe integer from -${sp} through ${sp}`);o[t]=r}return Object.freeze(o)}c(mh,"normalizeEvalWeights");var hu=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}),At=99,Ca=Math.max(At+1,11),ch=3,ph=ue+1;function wt(e){let n=fh(Ca);for(let o=0;o<Ca;o+=1)n[o]=Math.trunc(e/(o+1));return n}c(wt,"distanceTable");function YP(e){let n=fh(ch*Ca);for(let o=0;o<ch;o+=1){let t=o*Ca;for(let r=0;r<Ca;r+=1)n[t+r]=Math.trunc(o*e/(r+1))}return n}c(YP,"manaPointsAttractionTable");function lh(e,n){let o=XP(ph);for(let t=0;t<ph;t+=1)o[t]=Math.trunc(e*n*(ue+1-t)/ue);return o}c(lh,"threatWalkTable");function fh(e){try{return new Int32Array(e)}catch(n){$t(n)}}c(fh,"createInt32Table");function XP(e){try{return new Float64Array(e)}catch(n){$t(n)}}c(XP,"createFloat64Table");function _d(e){return{weights:e,manaPointsAttraction:YP(e.manaPointsAttraction),manaToOwnerPool:wt(e.manaToOwnerPool),manaToNearestPool:wt(e.manaToNearestPool),carrierCloseToPool:wt(e.carrierCloseToPool),drainerCloseToMana:wt(e.drainerCloseToMana),drainerCloseToOwnPool:wt(e.drainerCloseToOwnPool),drainerCloseToSupermana:wt(e.drainerCloseToSupermana),angelCloseToDrainer:wt(e.angelCloseToDrainer),spiritCloseToEnemy:wt(e.spiritCloseToEnemy),monCloseToCenter:wt(e.monCloseToCenter),attackerCloseToEnemyDrainer:wt(e.attackerCloseToEnemyDrainer),threatWalkPlain:lh(e.drainerThreatWalk,1),threatWalkCarrier:lh(e.drainerThreatWalk,e.carrierThreatFactor)}}c(_d,"createEvalTables");var Fd=_d(hu);function dh(e,n){return $e(jS,n*121+e)}c(dh,"ownPoolDistance");function QP(e){return $e(KS,e)}c(QP,"centerDistance");function ZP(e,n,o,t){if(!gi(me(e.cells,n)))return At;let r=o^1,a=At;for(let i=0;i<Yt;i+=1){let s=W(e.monLocations,xn(i,r));if(s<0)continue;let u=me(e.cells,s);if(ze(u)!==pn)continue;if(Ve(u)===bo){let d=zo(s,n)-3,f=d<0?0:d;if(f===0)return 0;f<a&&(a=f);continue}if(Gn(u)!==0||Ve(u)!==0||t||xe(u)!==0)continue;let p=i===Hc?Oi:i===wi?Ii:void 0;if(p===void 0)continue;let l=W(p.starts,n),m=W(p.counts,n);for(let d=0;d<m;d+=1){let f=W(p.list,l+d);if($e(e.squares,f)>=Fn)continue;if(i===wi){let b=Yc(n,f);if(b!==s&&me(e.cells,b)!==0)continue;let C=$e(e.squares,b);if(C===kt||C>=Fn)continue}let y=zo(s,f);if(y===0)return 0;y<a&&(a=y)}}return a}c(ZP,"estimatedAttackSteps");function yh(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,xn(io,0)),a=W(e.monLocations,xn(io,1)),i=r>=0&&Gn(me(e.cells,r))===0,s=a>=0&&Gn(me(e.cells,a))===0,u=At,p=At,l=At,m=At,d=ue-e.monsMoves;for(let f=0;f<e.manaCount;f+=1){let y=W(e.manaIndices,f),b=me(e.cells,y);if(ze(b)!==Mn)continue;let C=xe(b),h=i?zo(r,y):At,k=s?zo(a,y):At;h<u&&(u=h),k<p&&(p=k);let M=$e(xi,y);if(i){let w=h+M;w<l&&(l=w)}if(s){let w=k+M;w<m&&(m=w)}let R=k-h;if(R>4&&(R=4),R<-4&&(R=-4),o.manaPointsAttraction!==0){let w=n.manaPointsAttraction;i&&(t+=W(w,Tt(C,0)*Ca+h)),s&&(t-=W(w,Tt(C,1)*Ca+k))}if(C===ro)t+=o.supermanaDrainerControl*R;else{let w=C-1,v=w===0?1:-1;t+=v*W(n.manaToOwnerPool,dh(y,w)),t+=v*W(n.manaToNearestPool,M),t+=o.manaDrainerControl*R}}for(let f=0;f<to;f+=1){let y=f===0?1:-1,b=f^1;for(let C=0;C<Yt;C+=1){let h=W(e.monLocations,xn(C,f));if(h<0)continue;let k=me(e.cells,h);if(ze(k)!==pn)continue;let M=Gn(k);M!==0&&(t-=y*((C===io?o.faintDrainer:o.faintMon)+o.faintCooldownStep*M));let R=$e(e.squares,h);M===0&&R<Fn&&(t+=y*o.activeMon);let w=xe(k);if(w!==0){let v=Tt(w,f),O=$e(xi,h);t+=y*(W(n.carrierCloseToPool,O)+v*o.carrierPointBonus),f===e.active&&O<=d?t+=y*o.carrierScoresThisTurn*v:f!==e.active&&O<=ue&&(t+=y*o.carrierScoresNextTurn*v);let E=f===0?e.whiteScore:e.blackScore;v>=Ie-E&&(t+=y*o.winningCarrier)}else Ve(k)===bo&&(t+=y*o.bomb);if(M===0)if(C===io){let v=f===0?u:p,O=f===0?l:m;t+=y*W(n.drainerCloseToMana,v),t+=y*W(n.drainerCloseToOwnPool,dh(h,f)),t+=y*W(n.drainerCloseToSupermana,zo(h,Ai)),w===0&&Ve(k)===0&&f===e.active&&O<=d&&(t+=y*o.drainerPickupScoresThisTurn);let E=Su(e,f,h),x=ZP(e,h,f,E),_=w!==0;if(x===0){let z=_?o.carrierThreatFactor:1;t-=y*o.drainerThreatImmediate*z}else if(x<=ue){let z=_?n.threatWalkCarrier:n.threatWalkPlain;t-=y*(z[x]??0)}E&&(t+=y*o.angelGuardingDrainer)}else if(C===cu){let v=f===0?r:a;v>=0&&(t+=y*W(n.angelCloseToDrainer,zo(h,v)))}else if(C===Vc){let v=At;for(let O=0;O<Yt;O+=1){let E=W(e.monLocations,xn(O,b));if(E<0)continue;let x=me(e.cells,E);if(Gn(x)!==0)continue;let _=zo(h,E);_<v&&(v=_)}t+=y*W(n.spiritCloseToEnemy,v),R>=Fn&&(t-=y*o.spiritOnOwnBase)}else{t+=y*W(n.monCloseToCenter,QP(h));let v=b===0?r:a,O=b===0?i:s;v>=0&&O&&(t+=y*W(n.attackerCloseToEnemyDrainer,zo(h,v)))}}}return t}c(yh,"evaluateWithTables");var Ma=704,up=1073741824;function Mu(e,n){return n?e+up:e}c(Mu,"encodeGeneratedMoves");function bu(e){return e>=up?e-up:e}c(bu,"generatedMoveCount");function Cu(e){return e>=up}c(Cu,"generatedMovesHadRawStartOption");function Wd(e,n){return ze(e)===pn&&zn(e)!==n&&Gn(e)===0}c(Wd,"isEnemyAwakeMon");function JP(e,n,o){let t=me(e.cells,o),r=$e(e.squares,o),a=ze(n),i=a===pn,s=xe(n),u=Ve(n),p=t===0?-1:ze(t),l=p===pn&&(xe(t)!==0||Ve(t)!==0);if(p===pn)if(l){if(a!==Wn||u!==ao)return 0}else{if(i)return 0;if(a===Mn){if(En(t)!==io||Gn(t)!==0)return 0}else if(u!==ao)return 0}else if(p===Mn){if(!i||En(n)!==io||Gn(n)!==0)return 0}else if(p===Wn&&(Ve(t)!==ao||!i))return 0;if(r>=Fn){if(!i||Uc(r)!==En(n)||jc(r)!==zn(n)||s!==0||u!==0)return 0}else if(r===kt){let m=p===Mn&&xe(t)===ro,d=i&&En(n)===io;if(!(s===ro||s===0&&d&&(t===0||m)||d&&m))return 0}return t===0?1:i?s===0&&u===0?p===Wn?Ve(t)===ao?2:0:1:s!==0?p===Wn?Ve(t)===ao?1:0:1:p!==Wn||Ve(t)!==ao?0:1:a===Mn?p!==pn||l?0:1:p!==pn?0:l?u===ao?1:0:2}c(JP,"spiritDestinationOptionCount");function ew(e,n,o,t,r){let a=r,i=!1,s=En(o),u=zn(o),p=xe(o),l=Ve(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),b=me(e.cells,y),C=$e(e.squares,y),h=b===0?-1:ze(b),k;if(p!==0)h===pn?k=!1:h===Mn||h===Wn?k=!0:k=Ei(C)||C===kt&&p===ro;else if(l!==0)h===Wn?k=!0:h===-1?k=Ei(C):k=!1;else{let M;h===pn?M=!1:h===Mn?M=s===io:M=!0,M?C>=Fn?k=Uc(C)===s&&jc(C)===u:C===kt?k=s===io&&(b===0||h===Mn&&xe(b)===ro):k=!0:k=!1}k&&(i=!0,!(h===Wn&&Ve(b)!==ao)&&(h===Wn&&Ve(b)===ao&&p===0&&l===0?(t[a]=Qn(Qt,n,y,so,Jt),a+=1,t[a]=Qn(Qt,n,y,so,ba),a+=1):(t[a]=Qn(Qt,n,y,so,Zt),a+=1)))}return Mu(a,i)}c(ew,"generateMonMoves");function nw(e,n,o,t){let r=e.active,a=t,i=!1,s=W(Oi.starts,n),u=W(Oi.counts,n);for(let p=0;p<u;p+=1){let l=W(Oi.list,s+p),m=me(e.cells,l);Wd(m,r)&&(Su(e,r^1,l)||(i=!0,gi(m)&&(o[a]=Qn(du,n,l,so,Zt),a+=1)))}return Mu(a,i)}c(nw,"generateMysticMoves");function ow(e,n,o,t){let r=e.active,a=t,i=!1,s=wi,u=r,p=W(Ii.starts,n),l=W(Ii.counts,n);for(let m=0;m<l;m+=1){let d=W(Ii.list,p+m),f=me(e.cells,d);if(!Wd(f,r)||Su(e,r^1,d))continue;let y=Yc(n,d);if(me(e.cells,y)!==0)continue;let b=$e(e.squares,y);if(b===kt||b>=Fn||(i=!0,!gi(f)))continue;let C=$e(e.squares,d),h=xe(f);if(!(h!==0&&h!==ro||C===kt||C>=Fn)){o[a]=Qn(go,n,d,so,Zt),a+=1;continue}let M=a,R=W(Ao.starts,d),w=W(Ao.counts,d);for(let v=0;v<w;v+=1){let O=W(Ao.list,R+v),E=me(e.cells,O),x=E===0?-1:ze(E);if(x!==-1&&x!==Wn)continue;let _=$e(e.squares,O);(Ei(_)||_>=Fn&&Uc(_)===s&&jc(_)===u)&&(x===Wn?Ve(E)===ao?(o[a]=Qn(go,n,d,O,Jt),a+=1,o[a]=Qn(go,n,d,O,ba),a+=1):(o[a]=Qn(go,n,d,O,gd),a+=1):(o[a]=Qn(go,n,d,O,Zt),a+=1))}a===M&&(o[a]=Qn(go,n,d,so,Zt),a+=1)}return Mu(a,i)}c(ow,"generateDemonMoves");function tw(e,n,o,t){let r=t,a=!1,i=W(zc.starts,n),s=W(zc.counts,n);for(let u=0;u<s;u+=1){let p=W(zc.list,i+u),l=me(e.cells,p);if(l===0||ze(l)===pn&&Gn(l)!==0)continue;a=!0;let m=W(Ao.starts,p),d=W(Ao.counts,p);for(let f=0;f<d;f+=1){let y=W(Ao.list,m+f),b=JP(e,l,y);b!==0&&(b===2?(o[r]=Qn(Rt,n,p,y,Jt),r+=1,o[r]=Qn(Rt,n,p,y,ba),r+=1):(o[r]=Qn(Rt,n,p,y,Zt),r+=1))}}return Mu(r,a)}c(tw,"generateSpiritMoves");function rw(e,n,o,t){let r=e.active,a=t,i=!1,s=W($c.starts,n),u=W($c.counts,n);for(let p=0;p<u;p+=1){let l=W($c.list,s+p),m=me(e.cells,l);Wd(m,r)&&(i=!0,gi(m)&&(o[a]=Qn(mu,n,l,so,Zt),a+=1))}return Mu(a,i)}c(rw,"generateBombMoves");function aw(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),p=me(e.cells,u),l=$e(e.squares,u),m;p===0?m=Ei(l):ze(p)===pn&&xe(p)===0&&Ve(p)===0?m=Ei(l)&&En(p)===io:m=!1,m&&(o[r]=Qn(lu,n,u,so,Zt),r+=1)}return r}c(aw,"generateManaMoves");function Bd(e,n){let o=e.active,t=Sa(e.monsMoves),r=oh(e),a=0,i=0;for(let s=0;s<Yt;s+=1){let u=W(e.monLocations,xn(s,o));if(u<0)continue;let p=me(e.cells,u);if(ze(p)!==pn)continue;let l=!1,m=xe(p),d=Ve(p),f=m!==0||d!==0;if(!(!f&&Gn(p)!==0)){if(t){let y=ew(e,u,p,n,a);a=bu(y),l||(l=Cu(y))}if(f){if(d===bo){let y=rw(e,u,n,a);a=bu(y),l||(l=Cu(y))}}else if($e(e.squares,u)<Fn&&r){if(s===Hc){let b=nw(e,u,n,a);a=bu(b),l||(l=Cu(b))}else if(s===wi){let b=ow(e,u,n,a);a=bu(b),l||(l=Cu(b))}else if(s===Vc){let b=tw(e,u,n,a);a=bu(b),l||(l=Cu(b))}}l&&(i+=1)}}if(th(e,i)){let s=o+1;for(let u=0;u<e.manaCount;u+=1){let p=W(e.manaIndices,u),l=me(e.cells,p);ze(l)===Mn&&xe(l)===s&&(a=aw(e,p,n,a))}}if(a>n.length)throw new RangeError(`fast move buffer capacity exceeded: generated ${a} moves for ${n.length} slots`);return a}c(Bd,"generateMoves");var ku=new Int32Array(0);function Tu(e){try{return new Int32Array(e)}catch(n){if(n instanceof RangeError)return;throw n}}c(Tu,"tryAllocateTranspositionPart");var Ld=class Ld{constructor(){ne(this,"keyLo",ku);ne(this,"keyHi",ku);ne(this,"score",ku);ne(this,"info",ku);ne(this,"move",ku);ne(this,"entries",0);ne(this,"generation",1);ne(this,"mask",0)}deactivate(){this.mask=0}prepare(n){if(this.keyLo.length!==0)return this.mask=1048575,!0;if(n())return!1;let o=Tu(1048576);if(o===void 0||n())return!1;let t=Tu(1048576);if(t===void 0||n())return!1;let r=Tu(1048576);if(r===void 0||n())return!1;let a=Tu(1048576);if(a===void 0||n())return!1;let i=Tu(1048576);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=1048575,!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(Ld,"TranspositionTable");var cp=Ld;var vr=48,Sh=0,hh=1,bh=2,iw=3,Ch=1<<30,Mh=4194303,sw=511,uw=32768,cw=1<<28,pw=1<<24,lw=1<<23,Ru=gr*2,Pu=gr-vr-1,kh=c(()=>!1,"NO_TIMEOUT"),Gd=vr-2,Rh=to,Ph=ue+1,wh=kr+1,Ah=qn+1,gh=2,Vd=4,dw=Rh*Ph*wh*Ah*gh*Vd*Vd;if(Qc.length!==Md.length||Qc.length<dw)throw new RangeError("fast scalar hash table is too small for the configured state space");var Hd=Object.freeze({lateMoveReduction:!0,lateMoveIndex:3,lateMoveDeepIndex:8,moveCountPruning:!0,moveCountDepth:3,moveCountBase:4,moveCountFactor:5,futilityMargin:900});function mw(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>Gd)throw new RangeError(`maxDepth must be a safe integer from 0 through ${Gd}`);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?Hd:fw(r)})}c(mw,"normalizeSearchLimits");function fw(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:Th(n,"lateMoveReduction"),lateMoveIndex:_i(n,"lateMoveIndex",Ma),lateMoveDeepIndex:_i(n,"lateMoveDeepIndex",Ma),moveCountPruning:Th(n,"moveCountPruning"),moveCountDepth:_i(n,"moveCountDepth",Gd),moveCountBase:_i(n,"moveCountBase",Ma),moveCountFactor:_i(n,"moveCountFactor",Ma),futilityMargin:_i(n,"futilityMargin",Pu)})}c(fw,"normalizeSearchTuning");function Th(e,n){let o=e[n];if(typeof o!="boolean")throw new TypeError(`tuning.${n} must be a boolean`);return o}c(Th,"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}c(_i,"normalizedTuningInteger");var Er,Fi,Ra,Yo,gt,Pa,Wi,Bi,er,Li,vt,Gi,vo,wa,ye,vh,Eh,ka,Ud,Ta,pp,jd,wu,Oh,Kd,qd,zd=class zd{constructor(){L(this,ye);L(this,Er,[]);L(this,Fi,[]);L(this,Ra,[]);L(this,Yo);L(this,gt,new Int32Array(vr*2));L(this,Pa,new Int32Array(to*121*121));L(this,Wi,Fd);L(this,Bi,Hd);L(this,er,0);L(this,Li,0);L(this,vt,!1);L(this,Gi,!1);L(this,vo,0);L(this,wa,kh);F(this,Yo,new cp);for(let n=0;n<=vr;n+=1)T(this,Er).push(new ap),T(this,Fi).push(new Int32Array(Ma)),T(this,Ra).push(new Int32Array(Ma))}get root(){return qo(T(this,Er),0)}get size(){return T(this,Yo).entries}search(n,o,t=hu){let r=mw(n),a=mh(t);if(F(this,Gi,!1),F(this,vo,0),xd(this.root)!==-1)return{move:0,score:0,depth:0,nodes:0,supported:!0};F(this,Wi,_d(a)),F(this,Bi,r.tuning),F(this,er,0),F(this,Li,r.maxNodes),F(this,vt,!1),F(this,wa,o),T(this,Yo).deactivate();try{T(this,gt).fill(0),T(this,Pa).fill(0);let i=0,s=0,u=0;for(let p=1;p<=r.maxDepth;p+=1){if(p===2){if(T(this,er)>=T(this,Li)||!T(this,Yo).prepare(T(this,wa))){F(this,vt,!0);break}U(this,ye,vh).call(this)}let l=U(this,ye,Eh).call(this,p,i);if(l.move===0)break;if(U(this,ye,Ta).call(this)){u===0&&(i=l.move,s=l.score);break}if(i=l.move,s=l.score,u=p,!l.selective&&s>=gr-vr)break}return{move:i,score:s,depth:u,nodes:T(this,er),supported:!T(this,Gi)}}finally{T(this,Yo).deactivate(),F(this,Wi,Fd),F(this,Bi,Hd),F(this,wa,kh)}}};Er=new WeakMap,Fi=new WeakMap,Ra=new WeakMap,Yo=new WeakMap,gt=new WeakMap,Pa=new WeakMap,Wi=new WeakMap,Bi=new WeakMap,er=new WeakMap,Li=new WeakMap,vt=new WeakMap,Gi=new WeakMap,vo=new WeakMap,wa=new WeakMap,ye=new WeakSet,vh=c(function(){T(this,Yo).generation+=1,T(this,Yo).generation>Mh&&T(this,Yo).clear()},"#advanceTableGeneration"),Eh=c(function(n,o){let t=qo(T(this,Er),0),r=qo(T(this,Fi),0),a=Bd(t,r);if(a===0)return{move:0,score:0,selective:!1};U(this,ye,Kd).call(this,t,r,a,0,o);let i=qo(T(this,Ra),0),s=-Ru,u=0,p=-Ru,l=!1;for(let m=0;m<a;m+=1){U(this,ye,qd).call(this,r,i,m,a);let d=W(r,m),f,y=T(this,vo),b;if(m===0?(f=U(this,ye,ka).call(this,t,d,0,n-1,s,Ru),b=T(this,vo)!==y):(f=U(this,ye,ka).call(this,t,d,0,n-1,s,s+1),b=T(this,vo)!==y,f>s&&!U(this,ye,Ta).call(this)&&(y=T(this,vo),f=U(this,ye,ka).call(this,t,d,0,n-1,s,Ru),b=T(this,vo)!==y)),U(this,ye,Ta).call(this))break;f>p&&(p=f,u=d,l=b,f>s&&(s=f))}return u===0&&(u=W(r,0),p=0,l=!0),{move:u,score:p,selective:l}},"#searchRoot"),ka=c(function(n,o,t,r,a,i){let s=qo(T(this,Er),t+1);s.copyFrom(n);let u=rh(s,o);return u===vd?(F(this,Gi,!0),F(this,vt,!0),0):u!==-1?u===n.active?gr-t:-(gr-t):s.active===n.active?U(this,ye,Ud).call(this,r,t+1,a,i):-U(this,ye,Ud).call(this,r,t+1,-i,-a)},"#child"),Ud=c(function(n,o,t,r){if(!U(this,ye,pp).call(this))return 0;let a=qo(T(this,Er),o);if(o>=vr-2)return U(this,ye,wu).call(this,a);if(n<=0)return U(this,ye,wu).call(this,a);let i=t,s=Sw(a),u=hw(a,s),p=bw(a,s),l=T(this,Yo),m=(u^p*3)&l.mask,d=0,f=W(l.info,m),y=W(l.keyLo,m)===u&&W(l.keyHi,m)===p&&(f>>>8&Mh)===l.generation;if(y&&(d=W(l.move,m),(f>>2&63)>=n)){let K=W(l.score,m),pe=f&3;if(pe===Sh||pe===hh&&K>=r||pe===bh&&K<=i)return(f&Ch)!==0&&F(this,vo,T(this,vo)+1),K}let b=qo(T(this,Fi),o),C=Bd(a,b);if(C===0)return U(this,ye,wu).call(this,a);U(this,ye,Kd).call(this,a,b,C,o,d);let h=qo(T(this,Ra),o),k=T(this,Bi),M=C;if(k.moveCountPruning&&n<=k.moveCountDepth){let Y=k.moveCountBase+k.moveCountFactor*n;Y<M&&(M=Y)}let R=n<=2;if(R&&!U(this,ye,pp).call(this)||U(this,ye,Ta).call(this))return 0;let w=!1,v=!1,O=-Ru,E=0,x=!1,_=T(this,vo);for(let Y=0;Y<C;Y+=1){U(this,ye,qd).call(this,b,h,Y,C);let K=W(b,Y),pe=W(h,Y)>=uw;if(!pe&&E!==0){let Ee=Y>=M;if(!Ee&&R&&(w||(v=U(this,ye,jd).call(this,a)+k.futilityMargin*n<=t,w=!0),Ee=v),Ee){x=!0,F(this,vo,T(this,vo)+1);break}}let Me;if(Y===0)Me=U(this,ye,ka).call(this,a,K,o,n-1,i,r);else{let Ee=0;k.lateMoveReduction&&!pe&&n>=3&&Y>=k.lateMoveIndex&&(Ee=Y>=k.lateMoveDeepIndex?2:1,Ee>=n&&(Ee=n-1)),Me=U(this,ye,ka).call(this,a,K,o,n-1-Ee,i,i+1),!U(this,ye,Ta).call(this)&&Me>i&&(Ee>0||Me<r)&&(Me=U(this,ye,ka).call(this,a,K,o,n-1,i,r))}if(U(this,ye,Ta).call(this))return 0;if(Me>O&&(O=Me,E=K),Me>i&&(i=Me),i>=r){U(this,ye,Oh).call(this,a,K,o,n,pe);break}}if(E===0)return U(this,ye,wu).call(this,a);let z=T(this,vo)!==_,$=x?iw:O>=r?hh:O<=t?bh:Sh,Z=x?0:n;if(O<gr-vr&&O>-gr+vr){let Y=f>>2&63;(!y||Z>=Y)&&(f===0&&W(l.info,m)===0&&(l.entries+=1),l.keyLo[m]=u,l.keyHi[m]=p,l.score[m]=O,l.info[m]=l.generation<<8|Z<<2|$|(z?Ch:0),l.move[m]=E)}return O},"#negamax"),Ta=c(function(){return T(this,vt)},"#isStopped"),pp=c(function(){return T(this,vt)?!1:T(this,er)>=T(this,Li)?(F(this,vt,!0),!1):(F(this,er,T(this,er)+1),(T(this,er)&sw)===0&&T(this,wa).call(this)?(F(this,vt,!0),!1):!0)},"#beginWorkUnit"),jd=c(function(n){let o=yh(n,T(this,Wi)),t=n.active===0?o:-o;return t>Pu?Pu:t<-Pu?-Pu:t},"#evaluateStatic"),wu=c(function(n){return U(this,ye,pp).call(this)?U(this,ye,jd).call(this,n):0},"#staticScore"),Oh=c(function(n,o,t,r,a){if(a)return;let i=t*2;W(T(this,gt),i)!==o&&(T(this,gt)[i+1]=W(T(this,gt),i),T(this,gt)[i]=o);let s=n.active*121*121+Pt(o)*121+$o(o),u=W(T(this,Pa),s)+r*r;T(this,Pa)[s]=u>1<<20?1<<20:u},"#recordCutoff"),Kd=c(function(n,o,t,r,a){let i=qo(T(this,Ra),r),s=W(T(this,gt),r*2),u=W(T(this,gt),r*2+1),p=n.active*121*121;for(let l=0;l<t;l+=1){let m=W(o,l),d=yw(n,m);if(m===a)d+=cw;else if(m===s)d+=pw;else if(m===u)d+=lw;else{let f=W(T(this,Pa),p+Pt(m)*121+$o(m));d+=f>8191?8191:f}i[l]=d}},"#orderMoves"),qd=c(function(n,o,t,r){let a=t,i=W(o,t);for(let u=t+1;u<r;u+=1){let p=W(o,u);p>i&&(i=p,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(zd,"FastSearcher");var lp=zd;function yw(e,n){let o=fu(n),t=Pt(n),r=$o(n);switch(o){case Qt:{let a=me(e.cells,t),i=xe(a),s=0;i!==0&&Xt($e(e.squares,r))&&(s+=(1<<21)+Tt(i,e.active)*(1<<18));let u=me(e.cells,r);if(u!==0){let p=ze(u);p===Mn?s+=65536+Tt(xe(u),e.active)*512:p===Wn&&(s+=16384)}if(i!==0){let p=$e(xi,t),l=$e(xi,r);s+=(p-l)*2048+4096}else En(a)===io&&(s+=1024);return s}case lu:return Xt($e(e.squares,r))?(1<<21)+(1<<18):16;case du:case go:case mu:{let a=me(e.cells,r),i=1<<17;return xe(a)!==0&&(i+=1<<20),En(a)===io&&(i+=1<<19),i}case Rt:{let a=me(e.cells,r),i=Ar(n),s=8192,u=xe(a);return u!==0&&Xt($e(e.squares,i))?s+=(1<<21)+Tt(u,e.active)*(1<<18):ze(a)===Mn&&(s+=32768),s}default:throw new RangeError(`unsupported fast move type: ${o}`)}}c(yw,"moveHeuristic");function Sw(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+Vd*a,a=(e.firstTurn?1:0)+gh*a,a=e.actionsUsed+Ah*a,a=e.manaMoves+wh*a,a=e.monsMoves+Ph*a,e.active+Rh*a}c(Sw,"scalarIndex");function hw(e,n){return e.hashLo^W(Qc,n)^e.whiteScore*2654435761^e.blackScore*2135587861^W(e.potions,0)}c(hw,"stateKeyLo");function bw(e,n){return e.hashHi^W(Md,n)^e.whiteScore*2246822507^e.blackScore*3266489909^W(e.potions,1)}c(bw,"stateKeyHi");function Ih(){return globalThis.WeakRef}c(Ih,"systemWeakRefConstructor");function Cw(){try{return new ap}catch(e){if(e instanceof RangeError)return Ri;throw e}}c(Cw,"tryCreateDefaultFastPosition");function Mw(e){let n=Ih();return n===void 0?void 0:new n(e)}c(Mw,"systemWeakFastSearcher");var Vi,dp,xh,Xd=class Xd{constructor(){L(this,dp);L(this,Vi)}run(n){let o=T(this,Vi)?.deref();if(o===void 0)try{o=new lp}catch(t){if(t instanceof RangeError)return Ri;throw t}F(this,Vi,void 0);try{return n(o)}catch(t){if(Pi(t))return Ri;throw t}finally{U(this,dp,xh).call(this,o)}}};Vi=new WeakMap,dp=new WeakSet,xh=c(function(n){T(this,Vi)??F(this,Vi,Mw(n))},"#release"),c(Xd,"FastSearcherPool");var $d=Xd,kw=new $d,Tw=Object.freeze({fast:Object.freeze({budgetMs:16,limits:Object.freeze({maxDepth:40,maxNodes:3e4})}),normal:Object.freeze({budgetMs:75,limits:Object.freeze({maxDepth:40,maxNodes:15e4})}),pro:Object.freeze({budgetMs:460,limits:Object.freeze({maxDepth:40,maxNodes:2e6})})});function Yd(e,n,o){let t=Tw[o];return o!=="pro"&&Ih()===void 0?{kind:"unsupported",fallbackInputs:[]}:e.session.withUnrecordedDeadlineIfAbsent(t.budgetMs,()=>{if(e.session.checkpoint())return{kind:"supported",inputs:[]};if(n.winnerColor()!==void 0)return{kind:"supported",inputs:[]};let r=e.session.now()+t.budgetMs,a=c(()=>e.session.checkpoint()?!0:e.session.now()<r?!1:(e.session.checkpoint(),!0),"deadlineReached"),i=Cw();if(Pi(i))return{kind:"unsupported",fallbackInputs:[]};if(o!=="pro"&&a())return{kind:"supported",inputs:[]};if(!uh(i,n,t.limits.maxDepth))return{kind:"unsupported",fallbackInputs:[]};if(o==="pro"?e.session.checkpoint():a())return{kind:"supported",inputs:[]};let s=kw.run(u=>{if(!(o!=="pro"&&a())&&(u.root.copyFrom(i),!(o==="pro"?e.session.checkpoint():a())))return u.search(t.limits,a,hu)});return Pi(s)?{kind:"unsupported",fallbackInputs:[]}:s===void 0?{kind:"supported",inputs:[]}:(e.session.checkpoint(),s.supported?{kind:"supported",inputs:s.move===0?[]:Dd(s.move)}:{kind:"unsupported",fallbackInputs:s.depth>0&&s.move!==0?Dd(s.move):[]})})}c(Yd,"selectPackedFastSelection");function Nh(e,n){return Yd(e,n,"pro")}c(Nh,"selectProFastSelection");function Dh(e){return e===void 0?void 0:{i:e.i,j:e.j}}c(Dh,"detachedLocation");function Qd(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(Qd,"detachedLocations");function Aa(e){let n=e;return n===P.White?0:n===P.Black?1:void 0}c(Aa,"boardColorIndex");var Zd=class Zd{constructor(n=zt,o,t,r=!1){ne(this,"variant",n);ne(this,"storage");if(t!==void 0){this.storage=t;return}let a=o??NS(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:ia(i)),occupiedEntries:void 0,categoryDerived:void 0}}get items(){return[...this.storage.itemSlots]}static fromItems(n,o){return new Or(o,n)}fork(){let n=new Or(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(ut(n))return this.storage.itemSlots[J(n)]}itemAtIndex(n){return this.storage.itemSlots[n]}squareAt(n){return pa(n),bd(n,this.variant)}allMonsBases(){return ya}supermanaBase(){return ou}allMonsLocations(n){let o=Aa(n);return o===void 0?[]:Qd(this.getCategoryDerived().monsLocations[o])}allFreeRegularManaLocations(n){let o=Aa(n);return o===void 0?[]:Qd(this.getCategoryDerived().freeRegularManaLocations[o])}base(n){return DS(n.kind,n.color)}faintedMonsLocations(n){let o=Aa(n);return o===void 0?[]:Qd(this.getCategoryDerived().faintedMonsLocations[o])}findMana(n){let o=Aa(n);if(o!==void 0)return Dh(this.getCategoryDerived().freeRegularManaLocations[o][0])}findAwakeAngel(n){let o=Aa(n);if(o!==void 0)return Dh(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(!qy(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=td[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 l=0;l<121;l+=1){let m=this.storage.itemSlots[l];if(m!==void 0){let d=td[l];if(d!==void 0){let f=H(m);if(f!==void 0){let y=Aa(f.color);if(y===void 0)continue;(y===0?n:o).push(d),m.kind==="mon"&&j(f)?(y===0?a:i).push(d):f.kind===A.Angel&&!j(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=Aa(m.mana.color);y!==void 0&&(y===0?t:r).push(d)}}}}let p={monsLocations:[n,o],freeRegularManaLocations:[t,r],faintedMonsLocations:[a,i],awakeAngelLocations:[s,u]};return this.storage.categoryDerived=p,p}entries(){return this.getOccupiedEntries().values()}};c(Zd,"Board");var Hi=Zd,Au,Jd=class Jd extends Hi{constructor(){super(...arguments);L(this,Au)}delete(o){pa(o),this.storage.itemSlots[J(o)]=void 0,this.storage.occupiedEntries=void 0,this.storage.categoryDerived=void 0}set(o,t){pa(o),this.storage.itemSlots[J(o)]=ia(t),this.storage.occupiedEntries=void 0,this.storage.categoryDerived=void 0}readonlyView(){return T(this,Au)??F(this,Au,new Hi(this.variant,void 0,this.storage)),T(this,Au)}};Au=new WeakMap,c(Jd,"MutableBoard");var Or=Jd;function _h(e,n){return e.variant!==n.variant?!1:e.itemsEqual(n)}c(_h,"boardEquals");function gu(e){return e===P.White?"w":"b"}c(gu,"colorFen");function Xo(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===P.White?n.toUpperCase():n}${e.cooldown}`}c(Xo,"monFen");function Rw(e,n){let o,t;switch(e.charCodeAt(n)){case 69:o=P.White,t=A.Demon;break;case 101:o=P.Black,t=A.Demon;break;case 68:o=P.White,t=A.Drainer;break;case 100:o=P.Black,t=A.Drainer;break;case 65:o=P.White,t=A.Angel;break;case 97:o=P.Black,t=A.Angel;break;case 83:o=P.White,t=A.Spirit;break;case 115:o=P.Black,t=A.Spirit;break;case 89:o=P.White,t=A.Mystic;break;case 121:o=P.Black,t=A.Mystic;break;default:return}let r=e.charCodeAt(n+1);return r<48||r>50?void 0:sa(t,o,r-48)}c(Rw,"parseMonFenAt");function ga(e){return e.kind==="supermana"?"U":e.color===P.White?"M":"m"}c(ga,"manaFen");function Fh(e){switch(e){case 77:return yi(P.White);case 109:return yi(P.Black);case 85:return yr;default:return}}c(Fh,"parseManaCode");function Wh(e){switch(e){case q.Potion:return"P";case q.Bomb:return"B";case q.BombOrPotion:return"Q"}}c(Wh,"consumableFen");function Bh(e){switch(e){case 80:return q.Potion;case 66:return q.Bomb;case 81:return q.BombOrPotion;default:return}}c(Bh,"parseConsumableCode");function Ui(e){switch(e.kind){case"mon":return`${Xo(e.mon)}x`;case"mana":return`xx${ga(e.mana)}`;case"mon-with-mana":return`${Xo(e.mon)}${ga(e.mana)}`;case"mon-with-consumable":return`${Xo(e.mon)}${Wh(e.consumable)}`;case"consumable":return`xx${Wh(e.consumable)}`}}c(Ui,"itemFen");function Lh(e,n){let o=e.charCodeAt(n),t=e.charCodeAt(n+2);if(o===120){if(e.charCodeAt(n+1)!==120)return;let s=Fh(t);if(s!==void 0)return ht(s);let u=Bh(t);return u===void 0?void 0:qs(u)}let r=Rw(e,n);if(r===void 0)return;let a=Fh(t);if(a!==void 0)return st(r,a);let i=Bh(t);return i!==void 0?Ks(r,i):t===120?Yn(r):void 0}c(Lh,"parseItemFenAt");var Gh=Ie+1,Pw=Object.freeze(["","n01","n02","n03","n04","n05","n06","n07","n08","n09","n10","n11"]);function ww(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+=Vh(a),a=0),n+=Ui(i)}a>0&&(n+=Vh(a))}return n}c(ww,"boardFen");function Aw(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 l=e.charCodeAt(a+1)-48,m=e.charCodeAt(a+2)-48;if(l<0||l>9||m<0||m>9)return;let d=l*10+m;if(d<1||s+d>11)return;s+=d,a+=3,u=!0;continue}if(a+2>=o||s>=11)return;let p=Lh(e,a);if(p===void 0)return;r[i*11+s]=p,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 Or(t,r,void 0,!0)}c(Aw,"parseBoardFenRange");function Hh(e){let n=`${e.whiteScore} ${e.blackScore} ${gu(e.activeColor)} ${e.actionsUsedCount} ${e.manaMovesCount} ${e.monsMovesCount} ${e.whitePotionsCount} ${e.blackPotionsCount} ${e.turnNumber} ${ww(e.board)}`,o=e.board.variant;return o===zt?n:`${n} ${nu(o)}`}c(Hh,"gameFen");function Uh(e){let n=0,o=c(h=>{let k=n,M=0,R=!1;for(;n<e.length;){let w=e.charCodeAt(n);if(w===32)break;if(w<48||w>57)return-1;if(n===k)R=w===48;else if(R)return-1;if(M=M*10+(w-48),!Number.isSafeInteger(M))return-1;n+=1}if(n===k)return-1;if(h){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?P.White:a===98?P.Black:void 0;if(i===void 0||e.charCodeAt(n+1)!==32)return;n+=2;let s=o(!0),u=o(!0),p=o(!0),l=o(!0),m=o(!0),d=o(!0);if(t<0||r<0||s<0||u<0||p<0||l<0||m<0||d<0||t>Gh||r>Gh||s>qn||u>kr||p>ue||d<1)return;let f=n;for(;n<e.length&&e.charCodeAt(n)!==32;)n+=1;let y=n,b=zt;if(n<e.length){n+=1;let h=o(!1),k=xS(h);if(k===void 0||k===zt)return;b=k}let C=Aw(e,f,y,b);if(C!==void 0)return{board:C,whiteScore:t,blackScore:r,activeColor:i,actionsUsedCount:s,manaMovesCount:u,monsMovesCount:p,whitePotionsCount:l,blackPotionsCount:m,turnNumber:d}}c(Uh,"parseGameFen");function Vh(e){return Pw[e]??""}c(Vh,"emptyRunFen");function jh(e){return{whiteScore:e.whiteScore,blackScore:e.blackScore,activeColor:e.activeColor,actionsUsedCount:e.actionsUsedCount,manaMovesCount:e.manaMovesCount,monsMovesCount:e.monsMovesCount,whitePotionsCount:e.whitePotionsCount,blackPotionsCount:e.blackPotionsCount}}c(jh,"copyRulesCounters");function mp(e,n,o,t){let r=e[n]+o;return t&&!Number.isSafeInteger(r)?!1:(e[n]=r,!0)}c(mp,"addCounter");function em(e,n,o,t){if(e.actionsUsedCount<qn)return e.actionsUsedCount+=1,{valid:!0};let r=e.activeColor===P.White?"whitePotionsCount":"blackPotionsCount";return t&&e[r]<=0?{valid:!1}:(e[r]-=1,{valid:!0,potionUse:{from:n,to:o}})}c(em,"consumeAction");function nm(e,n,o,t){switch(n.kind){case"mon-move":return{valid:mp(e,"monsMovesCount",1,t)};case"mana-move":return{valid:mp(e,"manaMovesCount",1,t)};case"mana-scored":{let r=e.activeColor===P.White?"whiteScore":"blackScore";return{valid:mp(e,r,De(n.mana,e.activeColor),t)}}case"mystic-action":return em(e,n.from,n.to,t);case"demon-action":{let a=o.find(i=>i.kind==="demon-additional-step")?.to??n.to;return em(e,a,a,t)}case"spirit-target-move":return em(e,n.by,n.to,t);case"pickup-potion":{let r=H(n.by);if(r===void 0)return{valid:!0};let a=r.color===P.White?"whitePotionsCount":"blackPotionsCount";return{valid:mp(e,a,1,t)}}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":return{valid:!0}}}c(nm,"projectEventCounters");function om(e,n){let o=jh(e);for(let r of n)if(!nm(o,r,n,!0).valid)return!1;if(e.turnNumber<Number.MAX_SAFE_INTEGER)return!0;let t={...e,board:e.board.fork(),turnNumber:Number.MAX_SAFE_INTEGER-1};return!fp(t,n).turnAdvanced}c(om,"canApplyRulesEvents");function gw(e,n,o,t){let r=nm(e,n,o,!1);switch(r.valid&&r.potionUse!==void 0&&t.push({kind:"use-potion",...r.potionUse}),n.kind){case"mon-move":e.board.delete(n.from),e.board.set(n.to,n.item);break;case"mana-move":e.board.delete(n.from),e.board.set(n.to,ht(n.mana));break;case"mana-scored":{let a=e.board.get(n.at);if(a!==void 0){let i=H(a);i===void 0?e.board.delete(n.at):e.board.set(n.at,Yn(i))}break}case"mystic-action":e.board.delete(n.to);break;case"demon-action":{e.board.delete(n.from),o.find(i=>i.kind==="demon-additional-step")?.to===void 0?e.board.set(n.to,Yn(n.demon)):e.board.delete(n.to);break}case"demon-additional-step":e.board.set(n.to,Yn(n.demon));break;case"spirit-target-move":e.board.delete(n.from),e.board.set(n.to,n.item);break;case"pickup-bomb":e.board.set(n.at,Ks(n.by,q.Bomb));break;case"pickup-potion":{if(H(n.by)===void 0)break;e.board.set(n.at,n.by);break}case"pickup-mana":e.board.set(n.at,st(n.by,n.mana));break;case"mon-fainted":e.board.set(n.to,Yn(jy(n.mon)));break;case"mana-dropped":e.board.set(n.at,ht(n.mana));break;case"supermana-back-to-base":{let a=e.board.get(n.to);e.board.set(n.to,a?.kind==="mon"?st(a.mon,yr):ht(yr));break}case"bomb-attack":e.board.delete(n.to),e.board.set(n.from,Yn(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(gw,"applyEvent");function vw(e,n){e.activeColor=G(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:H(t);if(r===void 0)continue;let a=Ky(r);j(a)||n.push({kind:"mon-awake",mon:a,at:o}),e.board.set(o,Yn(a))}}c(vw,"advanceTurn");function fp(e,n){let o=[];for(let a of n)gw(e,a,n,o);let t=ep(e),r=!1;return t!==void 0?o.push({kind:"game-over",winner:t}):JS(e)&&(vw(e,o),r=!0),{events:[...n,...o],turnAdvanced:r,winner:t}}c(fp,"applyRulesEvents");var vu=Symbol("cache-miss"),zh=Symbol("cached-undefined"),yp=Object.freeze({completionViability:16384,secondInputOptions:4096,secondStage:8192,thirdStage:8192});function Ew(e){return e===void 0?void 0:[e[0].map(ua),e[1].map(Si)]}c(Ew,"copyStageResult");function Kh(e){return e===void 0?zh:[e[0].map(ua),e[1].map(Si)]}c(Kh,"storeStageResult");function qh(e){return e===zh?void 0:Ew(e)}c(qh,"copyStoredStageResult");function Sp(e,n,o,t){e.size>=t&&!e.has(n)&&e.clear(),e.set(n,o)}c(Sp,"setBounded");var ji,Ki,qi,zi,$i,tm=class tm{constructor(){L(this,ji);L(this,Ki);L(this,qi);L(this,zi);L(this,$i)}invalidate(){F(this,ji,void 0),F(this,Ki,void 0),F(this,qi,void 0),F(this,zi,void 0),F(this,$i,void 0)}getStartSuggestion(n){let o=T(this,ji)?.[n];return o===void 0?void 0:nd(o)}setStartSuggestion(n,o){(T(this,ji)??F(this,ji,new Array(4)))[n]=nd(o)}getCompletionViability(n){return T(this,Ki)?.get(n)}setCompletionViability(n,o){Sp(T(this,Ki)??F(this,Ki,new Map),n,o,yp.completionViability)}getSecondInputOptions(n){let o=T(this,qi)?.get(n);return o===void 0?void 0:o.map(Si)}setSecondInputOptions(n,o){Sp(T(this,qi)??F(this,qi,new Map),n,o.map(Si),yp.secondInputOptions)}lookupSecondStage(n){let o=T(this,zi)?.get(n);return o===void 0?vu:qh(o)}setSecondStage(n,o){Sp(T(this,zi)??F(this,zi,new Map),n,Kh(o),yp.secondStage)}lookupThirdStage(n){let o=T(this,$i)?.get(n);return o===void 0?vu:qh(o)}setThirdStage(n,o){Sp(T(this,$i)??F(this,$i,new Map),n,Kh(o),yp.thirdStage)}};ji=new WeakMap,Ki=new WeakMap,qi=new WeakMap,zi=new WeakMap,$i=new WeakMap,c(tm,"RulesQueryCache");var hp=tm;function Eu(e){return e.map(n=>({fen:n.fen,color:n.color,events:n.events.map(ua)}))}c(Eu,"copyTrackingEntries");var Bn,uo,Et,ct,pt,Iu,rm,Ou=class Ou{constructor(n=!1){L(this,Iu);L(this,Bn,[]);L(this,uo,[]);L(this,Et,!0);L(this,ct);L(this,pt,!0);F(this,ct,n)}get takebackFens(){return[...T(this,Bn)]}get trackingEntries(){return Eu(T(this,uo))}get movesVerified(){return T(this,Et)}get verboseTrackingEnabled(){return T(this,ct)}get eventApplicationTrackingEnabled(){return T(this,pt)||T(this,ct)}copy(){let n=new Ou(T(this,ct));return F(n,Bn,[...T(this,Bn)]),F(n,uo,Eu(T(this,uo))),F(n,Et,T(this,Et)),F(n,pt,T(this,pt)),n}fork(){let n=new Ou(!1);return F(n,Et,T(this,Et)),F(n,pt,!1),n}resetForLoadedFen(){U(this,Iu,rm).call(this)}resetForBoardReplacement(){U(this,Iu,rm).call(this)}replace(n){n.takebackFens!==void 0&&F(this,Bn,[...n.takebackFens]),n.trackingEntries!==void 0&&F(this,uo,Eu(n.trackingEntries)),n.movesVerified!==void 0&&F(this,Et,n.movesVerified),n.verboseTrackingEnabled!==void 0&&(F(this,ct,n.verboseTrackingEnabled),n.verboseTrackingEnabled||F(this,uo,[]))}setTakebackTracking(n){F(this,pt,n),n||F(this,Bn,[])}setVerboseTracking(n){F(this,ct,n),n||F(this,uo,[])}canTakeback(n,o){return T(this,pt)&&T(this,Bn).length>1&&n===o}prepareTakeback(n,o){if(!this.canTakeback(n,o))return;let t=T(this,Bn)[T(this,Bn).length-2];if(t!==void 0)return{previousFen:t,takebackFens:T(this,Bn).slice(0,-1),trackingEntries:Eu(T(this,uo).slice(0,-1))}}commitTakeback(n){F(this,Bn,[...n.takebackFens]),F(this,uo,Eu(n.trackingEntries))}beginEventApplication(n,o){if(!T(this,pt)||T(this,Bn).length!==0)return;let t=n();T(this,Bn).push(t),T(this,ct)&&T(this,uo).length===0&&T(this,uo).push({fen:t,color:o,events:[]})}completeEventApplication(n){let o,t=c(()=>o??(o=n.snapshotFen()),"snapshotFen");T(this,pt)&&(n.winner!==void 0?F(this,Bn,[]):n.turnAdvanced?F(this,Bn,[t()]):T(this,Bn).push(t())),T(this,ct)&&T(this,uo).push({fen:t(),color:n.color,events:n.events.map(ua)})}};Bn=new WeakMap,uo=new WeakMap,Et=new WeakMap,ct=new WeakMap,pt=new WeakMap,Iu=new WeakSet,rm=c(function(){F(this,Bn,[]),F(this,uo,[]),F(this,Et,!1)},"#resetUnverified"),c(Ou,"GameHistory");var bp=Ou;var $h=Object.freeze({includeManaStartsWithPotionAction:!1}),$n=Object.freeze({includeManaStartsWithPotionAction:!0});function Eo(e,n,o){return o===void 0?{input:e,kind:n}:{input:e,kind:n,actorMonItem:o}}c(Eo,"nextInput");function Yh(e){let n=[],o;for(let t of e)t.kind!==o&&(n.push(t),o=t.kind);return n}c(Yh,"firstOptionFromEachKindGroup");function va(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(va,"regularSquareForMovement");function am(e,n){return e!==void 0&&te(e,n)===1}c(am,"isLocationGuardedByAngelLocation");function Xh(e,n,o,t){if(o!==void 0){for(let a of e)if(Oe(a,o))return t(o)?[Eo({kind:"location",location:o},n)]:[];return[]}let r=[];for(let a of e)t(a)&&r.push(Eo({kind:"location",location:a},n));return r}c(Xh,"nextInputsFromLocations");function Qh(e,n,o,t){let r=e.board.squareAt(n),a=[];switch(o.kind){case"mon":{let i=o.mon;if(i.color!==e.activeColor||j(i))break;if(e.playerCanMoveMon()&&a.push(...e.nextInputsFromLocations(fe(n),we.MonMove,t,s=>{let u=e.board.get(s),p=e.board.squareAt(s),l;switch(u?.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":l=!1;break;case"mana":l=i.kind===A.Drainer;break;case"consumable":case void 0:l=!0;break}if(!l)return!1;switch(p.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":return i.kind===A.Drainer&&(u===void 0||u.kind==="mana"&&u.mana.kind==="supermana");case"mon-base":return p.monKind===i.kind&&p.color===i.color}})),r.kind!=="mon-base"&&e.playerCanUseAction())switch(i.kind){case A.Angel:case A.Drainer:break;case A.Mystic:{let s=e.board.findAwakeAngel(G(e.activeColor));a.push(...e.nextInputsFromLocations(Vo(n),we.MysticAction,t,u=>{let p=e.board.get(u);if(p===void 0||am(s,u))return!1;let l=H(p);return l!==void 0&&i.color!==l.color&&!j(l)}));break}case A.Demon:{let s=e.board.findAwakeAngel(G(e.activeColor));a.push(...e.nextInputsFromLocations(Ho(n),we.DemonAction,t,u=>{let p=e.board.get(u),l=Sr(n,u),m=e.board.squareAt(l);if(p===void 0||am(s,u)||e.board.get(l)!==void 0||m.kind==="supermana-base"||m.kind==="mon-base")return!1;let d=H(p);return d!==void 0&&i.color!==d.color&&!j(d)}));break}case A.Spirit:a.push(...e.nextInputsFromLocations(Uo(n),we.SpiritTargetCapture,t,s=>{let u=e.board.get(s);return u===void 0?!1:bt(u)}));break}break}case"mana":o.mana.kind==="regular"&&o.mana.color===e.activeColor&&e.playerCanMoveMana()&&a.push(...e.nextInputsFromLocations(fe(n),we.ManaMove,t,i=>{let s=e.board.get(i),u=e.board.squareAt(i);return s?.kind==="mon"?va(u)&&s.mon.kind===A.Drainer:s!==void 0?!1:va(u)}));break;case"mon-with-mana":o.mon.color===e.activeColor&&e.playerCanMoveMon()&&a.push(...e.nextInputsFromLocations(fe(n),we.MonMove,t,i=>{let s=e.board.get(i),u=e.board.squareAt(i);switch(s?.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return!1;case"mana":case"consumable":return!0;case void 0:return va(u)?!0:u.kind==="supermana-base"&&o.mana.kind==="supermana"}}));break;case"mon-with-consumable":{let i=o.mon;if(i.color!==e.activeColor)break;e.playerCanMoveMon()&&a.push(...e.nextInputsFromLocations(fe(n),we.MonMove,t,s=>{let u=e.board.get(s),p=e.board.squareAt(s);switch(u?.kind){case"mon":case"mana":case"mon-with-mana":case"mon-with-consumable":return!1;case"consumable":return!0;case void 0:return va(p)}})),o.consumable===q.Bomb&&a.push(...e.nextInputsFromLocations(hr(n),we.BombAttack,t,s=>{let u=e.board.get(s),p=u===void 0?void 0:H(u);return p!==void 0&&i.color!==p.color&&!j(p)}));break}case"consumable":break}return a}c(Qh,"generateSecondInputOptions");function Zh(e,n,o,t,r){let a=[],i=[],s=e.board.squareAt(r),u=e.board.get(r);switch(n){case we.MonMove:{let p=H(o);if(p===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 l=Xn(o);l!==void 0&&i.push({kind:"mana-dropped",mana:l,at:t}),i.push({kind:"pickup-mana",mana:u.mana,by:p,at:r});break}case"consumable":switch(u.consumable){case q.Bomb:case q.Potion:return;case q.BombOrPotion:ca(o)!==void 0||Xn(o)!==void 0?i.push({kind:"pickup-potion",by:o,at:r}):(a.push(Eo({kind:"modifier",modifier:en.SelectBomb},we.SelectConsumable,o)),a.push(Eo({kind:"modifier",modifier:en.SelectPotion},we.SelectConsumable,o)));break}break}if(s.kind==="mana-pool"){let l=Xn(o);l!==void 0&&i.push({kind:"mana-scored",mana:l,at:r})}break}case we.ManaMove:{if(o.kind!=="mana")return;let p=o.mana;if(i.push({kind:"mana-move",mana:p,from:t,to:r}),u!==void 0){if(u.kind!=="mon")return;i.push({kind:"pickup-mana",mana:p,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:p,at:r});break;case"mon-base":case"supermana-base":return}break}case we.MysticAction:{if(o.kind!=="mon")return;if(i.push({kind:"mystic-action",mystic:o.mon,from:t,to:r}),u!==void 0){let p=H(u);if(p===void 0)return;if(i.push({kind:"mon-fainted",mon:p,from:r,to:e.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:e.board.supermanaBase()})),u.kind==="mon-with-consumable")switch(u.consumable){case q.Bomb:i.push({kind:"bomb-explosion",at:r});break;case q.Potion:case q.BombOrPotion:return}}break}case we.DemonAction:{if(o.kind!=="mon")return;let p=o.mon;i.push({kind:"demon-action",demon:p,from:t,to:r});let l=!1;if(u!==void 0){let m=H(u);if(m===void 0)return;if(i.push({kind:"mon-fainted",mon:m,from:r,to:e.board.base(m)}),u.kind==="mon-with-mana"&&(u.mana.kind==="regular"?(l=!0,i.push({kind:"mana-dropped",mana:u.mana,at:r})):i.push({kind:"supermana-back-to-base",from:r,to:e.board.supermanaBase()})),u.kind==="mon-with-consumable")switch(u.consumable){case q.Bomb:i.push({kind:"bomb-explosion",at:r}),i.push({kind:"mon-fainted",mon:p,from:r,to:e.board.base(p)});break;case q.Potion:case q.BombOrPotion:return}}if((s.kind==="supermana-base"||s.kind==="mon-base")&&(l=!0),l)for(let m of fe(r)){let d=e.board.get(m),f=e.board.squareAt(m);d!==void 0&&d.kind!=="consumable"||(va(f)?a.push(Eo({kind:"location",location:m},we.DemonAdditionalStep)):f.kind==="mon-base"&&f.monKind===p.kind&&f.color===p.color&&a.push(Eo({kind:"location",location:m},we.DemonAdditionalStep)))}break}case we.SpiritTargetCapture:{if(u===void 0)return;let p=H(u),l=Xn(u);a.push(...e.nextInputsFromLocations(fe(r),we.SpiritTargetMove,void 0,m=>{let d=e.board.get(m),f=e.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 l?.kind==="supermana"||l===void 0&&p?.kind===A.Drainer&&(d===void 0||y)||p?.kind===A.Drainer&&y}case"mon-base":return p?.kind===f.monKind&&p.color===f.color&&l===void 0&&ca(u)===void 0}}));break}case we.BombAttack:{let p=H(o);if(p===void 0)return;if(i.push({kind:"bomb-attack",by:p,from:t,to:r}),u!==void 0){let l=H(u);if(l===void 0)return;if(i.push({kind:"mon-fainted",mon:l,from:r,to:e.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:e.board.supermanaBase()})),u.kind==="mon-with-consumable")switch(u.consumable){case q.Bomb:i.push({kind:"bomb-explosion",at:r});break;case q.Potion:case q.BombOrPotion:return}}break}case we.DemonAdditionalStep:case we.SpiritTargetMove:case we.SelectConsumable:break}return[i,a]}c(Zh,"compileSecondInput");function Jh(e,n,o,t,r){let a=e.get(r),i=[],s=[];switch(n.kind){case we.SpiritTargetMove:{if(n.input.kind!=="location"||a===void 0)return;let u=n.input.location,p=e.get(u),l=e.squareAt(u);if(s.push({kind:"spirit-target-move",item:a,from:r,to:u,by:t}),p!==void 0)switch(a.kind){case"mon":switch(p.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return;case"mana":s.push({kind:"pickup-mana",mana:p.mana,by:a.mon,at:u});break;case"consumable":switch(p.consumable){case q.Potion:case q.Bomb:return;case q.BombOrPotion:i.push(Eo({kind:"modifier",modifier:en.SelectBomb},we.SelectConsumable,a)),i.push(Eo({kind:"modifier",modifier:en.SelectPotion},we.SelectConsumable,a));break}break}break;case"mana":if(p.kind!=="mon")return;s.push({kind:"pickup-mana",mana:a.mana,by:p.mon,at:u});break;case"mon-with-mana":switch(p.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:p.mana,by:a.mon,at:u});break;case"consumable":switch(p.consumable){case q.Potion:case q.Bomb:return;case q.BombOrPotion:s.push({kind:"pickup-potion",by:a,at:u});break}break}break;case"mon-with-consumable":if(p.kind!=="consumable"||p.consumable!==q.BombOrPotion)return;s.push({kind:"pickup-potion",by:a,at:u});break;case"consumable":switch(p.kind){case"mana":case"consumable":return;case"mon":i.push(Eo({kind:"modifier",modifier:en.SelectBomb},we.SelectConsumable,p)),i.push(Eo({kind:"modifier",modifier:en.SelectPotion},we.SelectConsumable,p));break;case"mon-with-mana":case"mon-with-consumable":switch(a.consumable){case q.Potion:case q.Bomb:return;case q.BombOrPotion:s.push({kind:"pickup-potion",by:p,at:u});break}break}break}if(l.kind==="mana-pool"){let m=Xn(a);m!==void 0&&s.push({kind:"mana-scored",mana:m,at:u})}break}case we.DemonAdditionalStep:{if(n.input.kind!=="location")return;let u=H(o);if(u===void 0)return;let p=n.input.location;s.push({kind:"demon-additional-step",demon:u,from:r,to:p});let l=e.get(p);if(l?.kind==="consumable")switch(l.consumable){case q.Potion:case q.Bomb:return;case q.BombOrPotion:i.push(Eo({kind:"modifier",modifier:en.SelectBomb},we.SelectConsumable,o)),i.push(Eo({kind:"modifier",modifier:en.SelectPotion},we.SelectConsumable,o));break}break}case we.SelectConsumable:{if(n.input.kind!=="modifier")return;let u=H(o);if(u===void 0)return;switch(n.input.modifier){case en.SelectBomb:s.push({kind:"pickup-bomb",by:u,at:r});break;case en.SelectPotion:s.push({kind:"pickup-potion",by:o,at:r});break}break}case we.MonMove:case we.ManaMove:case we.MysticAction:case we.DemonAction:case we.SpiritTargetCapture:case we.BombAttack:return}return[s,i]}c(Jh,"compileThirdInput");function eb(e,n,o){if(e.kind!=="modifier"||n.input.kind!=="location")return;let r=o.find(i=>Kt(i.input,e))?.actorMonItem,a=r===void 0?void 0:H(r);if(!(r===void 0||a===void 0))switch(e.modifier){case en.SelectBomb:return{kind:"pickup-bomb",by:a,at:n.input.location};case en.SelectPotion:return{kind:"pickup-potion",by:r,at:n.input.location}}}c(eb,"compileFourthInput");function nb(e,n,o){let t=[],r=Array.from({length:121},()=>!1),a=c(i=>{let s=o([{kind:"location",location:i}]);if(s.kind!=="next-input-options"||s.nextInputs.length===0)return;let u=J(i);r[u]||(r[u]=!0,t.push(i))},"addWhenValid");for(let i of e.board.allMonsLocations(e.activeColor))a(i);if(ZS(e,t.length!==0,n.includeManaStartsWithPotionAction))for(let i of e.board.allFreeRegularManaLocations(e.activeColor))a(i);return t.length===0?{kind:"invalid-input"}:{kind:"locations-to-start-from",locations:t}}c(nb,"suggestedInputToStartWith");function ob(e,n,o,t,r,a){let i=n[0];if(i?.kind!=="location")return{kind:"invalid-input"};let s=i.location,u=e.board().get(s);if(u===void 0)return{kind:"invalid-input"};let p=n[1];if(p!==void 0&&p.kind!=="location")return{kind:"invalid-input"};let l=a&&e.requiresCounterCapacityFiltering(),m=e.secondInputOptions(s,u,o,o?void 0:p?.location);if(p===void 0){let O=t&&!l?Yh(m):m,E=e.applicableInputOptions(n,O,r,l,t);return E.length===0?{kind:"invalid-input"}:{kind:"next-input-options",nextInputs:E}}let d=p.location,f=m.find(O=>Kt(O.input,p));if(f===void 0)return{kind:"invalid-input"};let y=n[2],b=e.processSecondInput(f.kind,u,s,d,o),C=b?.[0]??[],h=b?.[1]??[];if(y===void 0){if(h.length!==0){let O=e.applicableInputOptions(n,h,r,l,t);return O.length===0?{kind:"invalid-input"}:{kind:"next-input-options",nextInputs:O}}return C.length===0?{kind:"invalid-input"}:e.resolveEvents(C,o)}let k=h.find(O=>Kt(O.input,y));if(k===void 0)return{kind:"invalid-input"};let M=n[3],R=e.processThirdInput(k,u,s,d,o);C.push(...R?.[0]??[]);let w=R?.[1]??[];if(M===void 0){if(w.length!==0){let O=e.applicableInputOptions(n,w,r,l,t);return O.length===0?{kind:"invalid-input"}:{kind:"next-input-options",nextInputs:O}}return C.length===0?{kind:"invalid-input"}:e.resolveEvents(C,o)}let v=eb(M,k,w);return v===void 0?{kind:"invalid-input"}:(C.push(v),e.resolveEvents(C,o))}c(ob,"dispatchStagedInput");var Ye,hn,co,Du,_e,Yi,Ea,xu,tb,Nu,rb,ab,Cp,ib,sb,ub,cb,im,Ot=class Ot{constructor(n=!1,o=zt,t){L(this,_e);L(this,Ye);L(this,hn);L(this,co);L(this,Du);let r=t===void 0?new Or(o):t.fork();F(this,Ye,{board:r,whiteScore:0,blackScore:0,activeColor:P.White,actionsUsedCount:0,manaMovesCount:0,monsMovesCount:0,whitePotionsCount:0,blackPotionsCount:0,turnNumber:1}),F(this,hn,new bp(n)),F(this,co,new hp),F(this,Du,{board:c(()=>this.board,"board"),requiresCounterCapacityFiltering:c(()=>U(this,_e,rb).call(this),"requiresCounterCapacityFiltering"),secondInputOptions:c((...a)=>U(this,_e,ib).call(this,...a),"secondInputOptions"),processSecondInput:c((...a)=>U(this,_e,sb).call(this,...a),"processSecondInput"),processThirdInput:c((...a)=>U(this,_e,ub).call(this,...a),"processThirdInput"),applicableInputOptions:c((...a)=>U(this,_e,ab).call(this,...a),"applicableInputOptions"),resolveEvents:c((...a)=>U(this,_e,cb).call(this,...a),"resolveEvents")})}get board(){return T(this,Ye).board.readonlyView()}get whiteScore(){return T(this,Ye).whiteScore}get blackScore(){return T(this,Ye).blackScore}get activeColor(){return T(this,Ye).activeColor}get actionsUsedCount(){return T(this,Ye).actionsUsedCount}get manaMovesCount(){return T(this,Ye).manaMovesCount}get monsMovesCount(){return T(this,Ye).monsMovesCount}get whitePotionsCount(){return T(this,Ye).whitePotionsCount}get blackPotionsCount(){return T(this,Ye).blackPotionsCount}get turnNumber(){return T(this,Ye).turnNumber}get takebackFens(){return T(this,hn).takebackFens}get isMovesVerified(){return T(this,hn).movesVerified}get withVerboseTracking(){return T(this,hn).verboseTrackingEnabled}get verboseTrackingEntities(){return T(this,hn).trackingEntries}replaceHistory(n){T(this,hn).replace(n)}static newSimulationState(n){var t,r;let o=U(t=Ot,Ea,xu).call(t,!1,n.board);return U(r=o,_e,Yi).call(r,n),T(o,hn).setTakebackTracking(!1),o}static fromFen(n,o=!1){var a,i;let t=Uh(n);if(t===void 0)return;let r=U(a=Ot,Ea,xu).call(a,o,t.board);return U(i=r,_e,Yi).call(i,t),T(r,hn).resetForLoadedFen(),r}fen(){return Hh(this)}copy(){var o,t;let n=U(o=Ot,Ea,xu).call(o,this.withVerboseTracking,this.board);return U(t=n,_e,Yi).call(t,this),F(n,hn,T(this,hn).copy()),n}fork(){var o,t;let n=U(o=Ot,Ea,xu).call(o,!1,this.board);return U(t=n,_e,Yi).call(t,this),F(n,hn,T(this,hn).fork()),n}variant(){return this.board.variant}replaceBoardItems(n){let o=Array.from({length:121},()=>{});for(let[r,a]of n)o[J(r)]=a;let t=Hi.fromItems(o,this.variant());T(this,Ye).board=t,T(this,hn).resetForBoardReplacement(),this.invalidateProcessInputCache()}setTakebackHistoryTracking(n){T(this,hn).setTakebackTracking(n),this.invalidateProcessInputCache()}invalidateProcessInputCache(){T(this,co).invalidate()}setVerboseTracking(n){T(this,hn).setVerboseTracking(n)}canTakeback(n){return T(this,hn).canTakeback(this.activeColor,n)}processInput(n,o,t){return this.processInputWithStartOptions(n,o,t,void 0)}processInputWithStartOptions(n,o,t,r){return U(this,_e,Nu).call(this,n,o,t,r??$h)}inspectInputGrammar(n,o){return U(this,_e,Nu).call(this,n,!0,!1,o,!1)}applyAndAddResultingEvents(n){return U(this,_e,im).call(this,n,T(this,hn).eventApplicationTrackingEnabled)}forkAndApplyEventsForSimulation(n){var r;let o=this.fork(),t=U(r=o,_e,im).call(r,n,!1);return t===void 0?void 0:{game:o,events:t}}nextInputsFromLocations(n,o,t,r){return Xh(n,o,t,r)}availableMoveKinds(){let n=new Map;return n.set(wo.MonMove,ue-this.monsMovesCount),n.set(wo.Action,0),n.set(wo.Potion,0),n.set(wo.ManaMove,0),this.turnNumber===1||(n.set(wo.Action,qn-this.actionsUsedCount),n.set(wo.Potion,this.playerPotionsCount()),n.set(wo.ManaMove,kr-this.manaMovesCount)),n}winnerColor(){return ep(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(G(this.activeColor)).length>n.board.faintedMonsLocations(G(n.activeColor)).length}isFirstTurn(){return Ni(this)}playerPotionsCount(){return np(this)}playerCanMoveMon(){return YS(this)}playerCanMoveMana(){return XS(this)}playerCanUseAction(){return QS(this)}};Ye=new WeakMap,hn=new WeakMap,co=new WeakMap,Du=new WeakMap,_e=new WeakSet,Yi=c(function(n){T(this,Ye).whiteScore=n.whiteScore,T(this,Ye).blackScore=n.blackScore,T(this,Ye).activeColor=n.activeColor,T(this,Ye).actionsUsedCount=n.actionsUsedCount,T(this,Ye).manaMovesCount=n.manaMovesCount,T(this,Ye).monsMovesCount=n.monsMovesCount,T(this,Ye).whitePotionsCount=n.whitePotionsCount,T(this,Ye).blackPotionsCount=n.blackPotionsCount,T(this,Ye).turnNumber=n.turnNumber},"#copyFenFieldsFrom"),Ea=new WeakSet,xu=c(function(n,o){return new Ot(n,o.variant,o)},"#fromBoard"),tb=c(function(n){let o=n.board.fork();T(this,Ye).board=o,U(this,_e,Yi).call(this,n),this.invalidateProcessInputCache()},"#updateWith"),Nu=c(function(n,o,t,r,a=!0){if(n.length>jt||this.winnerColor()!==void 0)return{kind:"invalid-input"};if(n.length===0){let s=(a?2:0)|(r.includeManaStartsWithPotionAction?1:0),u=T(this,co).getStartSuggestion(s);if(u!==void 0)return u;let p=nb(this,r,l=>U(this,_e,Nu).call(this,l,!0,!0,r,a));return T(this,co).setStartSuggestion(s,p),p}let i=n[0];if(n.length===1&&i?.kind==="takeback"){let s=T(this,hn).prepareTakeback(this.activeColor,this.activeColor);if(s===void 0)return{kind:"invalid-input"};let u=Ot.fromFen(s.previousFen,!1);return u===void 0?{kind:"invalid-input"}:o?{kind:"events",events:[{kind:"takeback"}]}:(U(this,_e,tb).call(this,u),T(this,hn).commitTakeback(s),{kind:"events",events:[{kind:"takeback"}]})}return ob(T(this,Du),n,o,t,r,a)},"#processInputInternal"),rb=c(function(){return this.turnNumber===Number.MAX_SAFE_INTEGER||this.whitePotionsCount===Number.MAX_SAFE_INTEGER||this.blackPotionsCount===Number.MAX_SAFE_INTEGER},"#requiresCounterCapacityFiltering"),ab=c(function(n,o,t,r,a){if(!r)return o;let i=c(u=>U(this,_e,Cp).call(this,[...n,u.input],t),"applicable");if(!a)return o.filter(i);let s=o.find(i);return s===void 0?[]:[s]},"#applicableInputOptions"),Cp=c(function(n,o){let t=`${o.includeManaStartsWithPotionAction?1:0}|${yn(n)}`,r=T(this,co).getCompletionViability(t);if(r!==void 0)return r;let a=U(this,_e,Nu).call(this,n,!0,!1,o,!1),i=(()=>{switch(a.kind){case"invalid-input":return!1;case"events":return om(T(this,Ye),a.events);case"locations-to-start-from":return a.locations.some(s=>U(this,_e,Cp).call(this,[...n,{kind:"location",location:s}],o));case"next-input-options":return a.nextInputs.some(s=>U(this,_e,Cp).call(this,[...n,s.input],o))}})();return T(this,co).setCompletionViability(t,i),i},"#hasApplicableCompletion"),ib=c(function(n,o,t,r){let a=String(J(n)),i=T(this,co).getSecondInputOptions(a);if(i!==void 0)return i;let s=Qh(this,n,o,r);return t&&T(this,co).setSecondInputOptions(a,s),s},"#secondInputOptions"),sb=c(function(n,o,t,r,a){let i=`${n}|${Oc(o)}|${J(t)}|${J(r)}`,s=T(this,co).lookupSecondStage(i);if(s!==vu)return s;let u=Zh(this,n,o,t,r);return a&&T(this,co).setSecondStage(i,u),u},"#processSecondInput"),ub=c(function(n,o,t,r,a){let i=`${od(n.input)}|${n.kind}|${n.actorMonItem===void 0?"":Oc(n.actorMonItem)}|${Oc(o)}|${J(t)}|${J(r)}`,s=T(this,co).lookupThirdStage(i);if(s!==vu)return s;let u=Jh(this.board,n,o,t,r);return a&&T(this,co).setThirdStage(i,u),u},"#processThirdInput"),cb=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"),im=c(function(n,o){if(!om(T(this,Ye),n))return;if(this.invalidateProcessInputCache(),!o)return fp(T(this,Ye),n).events;let t=c(()=>this.fen(),"snapshotFen");T(this,hn).beginEventApplication(t,this.activeColor);let r=fp(T(this,Ye),n);return T(this,hn).completeEventApplication({snapshotFen:t,color:this.activeColor,events:r.events,turnAdvanced:r.turnAdvanced,winner:r.winner}),r.events},"#applyAndAddResultingEvents"),L(Ot,Ea),c(Ot,"MonsGame");var Oo=Ot;function Oa(e,n,o){let t=e.findAwakeAngel(n);return t!==void 0&&te(t,o)===1}c(Oa,"exactIsLocationGuardedByAngel");function Xi(e,n,o){let t=Math.abs(n.i-o.i),r=Math.abs(n.j-o.j),a=Sr(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(Xi,"demonHasLineAttack");var Ir=1,xr=2,Qi=4,Zi=8,xt=16,_u=Ir|xr|Qi|Zi|xt;function Xe(){return{utility:0,sameTurnScore:!1,sameTurnScoreValue:0,sameTurnOpponentManaScore:!1,sameTurnOpponentManaScoreValue:0,supermanaProgress:!1,opponentManaProgress:!1,nextTurnSetupGain:0}}c(Xe,"defaultSpiritSummary");function It(){return{scorePathWindow:{bestSteps:void 0,multiPressure:0},immediateWindow:{bestScore:0,multiPressure:0},bestDrainerPickup:void 0,bestCarrierSteps:void 0,bestDrainerToManaSteps:void 0,spirit:Xe()}}c(It,"defaultColorSummary");function Nr(){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(Nr,"defaultTurnSummary");function Nt(){return{safeSupermanaProgress:!1,safeSupermanaProgressSteps:void 0,safeOpponentManaProgress:!1,safeOpponentManaProgressSteps:void 0,spiritAssistedScore:!1,spiritAssistedScoreValue:0,spiritAssistedDenial:!1,spiritAssistedDenialValue:0,sameTurnScoreWindowValue:0}}c(Nt,"defaultTurnTacticalProjection");function Dr(){return{budget:{remainingMonMoves:0,canUseAction:!1,canMoveMana:!1},turn:Nt(),delta:{sameTurnScoreWindowValue:0,spiritGain:0,opponentWindowDenyGain:0,drainerAttackAvailable:!1,drainerSafety:0,safeSupermanaProgressSteps:void 0,safeOpponentManaProgressSteps:void 0},opponentCanWinImmediately:!1}}c(Dr,"defaultOpportunityContext");var sm=class sm{constructor(n=It(),o=It()){ne(this,"white");ne(this,"black");this.white=n,this.black=o}colorSummary(n){return n===P.White?this.white:this.black}};c(sm,"ExactStrategicAnalysis");var nr=sm;var lb=Object.freeze({hi:0,lo:0});function po(e,n){return{hi:e>>>0,lo:n>>>0}}c(po,"hash64");function Fu(e){if(!Number.isInteger(e)||e<0||e>4294967295)throw new RangeError("hash low word must be an unsigned 32-bit integer");return po(0,e)}c(Fu,"hash64FromLowWord");function um(e){if(!Number.isSafeInteger(e)||e<0)throw new RangeError("hash integer must be a nonnegative safe integer");return po(Math.floor(e/4294967296),e)}c(um,"hash64FromNonnegativeInteger");function Wu(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,p=t*a+Math.floor(s/65536)+(Math.imul(e.hi,n.lo)>>>0)+(Math.imul(e.lo,n.hi)>>>0);return po(p,u)}c(Wu,"hash64Mul");function Bu(e,n){return po(e.hi^n.hi,e.lo^n.lo)}c(Bu,"hash64Xor");function db(e,n){let o=n>>>0&63;if(o===0)return po(e.hi,e.lo);if(o===32)return po(e.lo,e.hi);if(o<32)return po(e.hi<<o|e.lo>>>32-o,e.lo<<o|e.hi>>>32-o);let t=o-32;return po(e.lo<<t|e.hi>>>32-t,e.hi<<t|e.lo>>>32-t)}c(db,"hash64RotateLeft");function cm(e,n){return e.hi===n.hi&&e.lo===n.lo}c(cm,"hash64Equals");function mb(e){return e.hi===0&&e.lo===0}c(mb,"hash64IsZero");function fb(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(fb,"hash64CompareUnsigned");function Mp(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(Mp,"hash64Bucket");function Ow(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(Ow,"createEntry");function Iw(e,n){return e===n||e!==e&&n!==n}c(Iw,"sameValueZero");function pb(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)&&Iw(e.qualifier,s)}c(pb,"entryMatches");function xw(e){if(!Number.isSafeInteger(e)||e<1)throw new RangeError("Hash64 table capacity must be a positive safe integer");return e}c(xw,"validateCapacity");var lt,Ji,_r,es,kp,pm=class pm{constructor(n){L(this,es);L(this,lt,new Map);L(this,Ji);L(this,_r,0);F(this,Ji,xw(n))}get capacity(){return T(this,Ji)}get size(){return T(this,_r)}clear(){T(this,lt).clear(),F(this,_r,0)}has(n,o=0,t,r){return U(this,es,kp).call(this,T(this,lt).get(Mp(n)),n,o,t,r)!==void 0}get(n,o=0,t,r){return U(this,es,kp).call(this,T(this,lt).get(Mp(n)),n,o,t,r)?.value}set(n,o,t=0,r,a){let i=Mp(n),s=T(this,lt).get(i),u=U(this,es,kp).call(this,s,n,t,r,a);if(u!==void 0)return u.value=o,this;T(this,_r)>=T(this,Ji)&&(this.clear(),s=void 0);let p=Ow(n,o,t,r,a);return p.next=s,T(this,lt).set(i,p),F(this,_r,T(this,_r)+1),this}delete(n,o=0,t,r){let a=Mp(n),i=T(this,lt).get(a);if(i===void 0)return!1;let s=n.hi,u=n.lo,p=t!==void 0,l=t?.hi??0,m=t?.lo??0,d,f=i;for(;f!==void 0;){if(!pb(f,s,u,o,p,l,m,r)){d=f,f=f.next;continue}return d===void 0?f.next===void 0?T(this,lt).delete(a):T(this,lt).set(a,f.next):d.next=f.next,F(this,_r,T(this,_r)-1),!0}return!1}};lt=new WeakMap,Ji=new WeakMap,_r=new WeakMap,es=new WeakSet,kp=c(function(n,o,t,r,a){let i=o.hi,s=o.lo,u=r!==void 0,p=r?.hi??0,l=r?.lo??0;for(;n!==void 0;){if(pb(n,i,s,t,u,p,l,a))return n;n=n.next}},"#find"),c(pm,"Hash64Table");var ge=pm,Dt,lm=class lm{constructor(n){L(this,Dt);F(this,Dt,new ge(n))}get capacity(){return T(this,Dt).capacity}get size(){return T(this,Dt).size}clear(){T(this,Dt).clear()}has(n,o=0,t,r){return T(this,Dt).has(n,o,t,r)}add(n,o=0,t,r){return T(this,Dt).set(n,!0,o,t,r),this}delete(n,o=0,t,r){return T(this,Dt).delete(n,o,t,r)}};Dt=new WeakMap,c(lm,"Hash64Set");var Io=lm;var Tp=512,yb=8192,Sb=8192,hb=8192,bb=8192,Cb=8192,Mb=8192,ns=4096,kb=4096,Rp=2048,Nw=Symbol("exact-session-caches"),mm=class mm{constructor(){ne(this,"attackReach",new ge(yb));ne(this,"walkThreat",new ge(Mb));ne(this,"drainerSafety",new ge(hb));ne(this,"carrierSteps",new ge(Sb));ne(this,"drainerToMana",new ge(bb));ne(this,"pickupPath",new ge(Cb));ne(this,"strategicAnalysis",new ge(Tp));ne(this,"turnSummary",new ge(Tp));ne(this,"turnTacticalProjection",new ge(Tp));ne(this,"secureMana",new ge(ns));ne(this,"spiritReach",new ge(kb));ne(this,"spiritTacticalSummary",new ge(Rp));ne(this,"capacity",yb+Mb+hb+Sb+bb+Cb+Tp*3+ns+kb+Rp)}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(mm,"ExactSessionCaches");var dm=mm;function be(e){return e.caches.session.getOrCreate(Nw,()=>new dm)}c(be,"exactCaches");function Nn(e){return e===P.White?0:1}c(Nn,"colorKey");function Dn(...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(Dn,"exactCacheTag");function Pp(e){be(e).clear()}c(Pp,"clearExactStateAnalysisCache");var Qo=Object.freeze({kind:"none"}),os=Object.freeze({kind:"bomb"});function Dw(e){switch(e.kind){case"none":return 0;case"bomb":return 1;case"mana":return e.mana.kind==="supermana"?2:e.mana.color===P.White?3:4}}c(Dw,"payloadSlot");function xo(e,n){return J(e)*5+Dw(n)}c(xo,"payloadSeenSlot");function _w(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(_w,"squareAllowsEmptyMon");function Fw(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(Fw,"squareAllowsManaCarrier");function Ia(e,n,o,t,r,a){let i=e.get(r);switch(t.kind){case"none":{if(i===void 0)return _w(e.squareAt(r),n,o)?Qo: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===q.BombOrPotion?a?os:Qo:void 0}}case"mana":{if(i===void 0)return Fw(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===q.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 os;case"supermana-base":case"mon-base":return}return i.kind==="consumable"&&i.consumable===q.BombOrPotion?os:void 0}}}c(Ia,"actorPayloadAfterMoveCompute");function fm(e,n,o,t,r,a,i,s,u){if(e.session.checkpoint())return;let p=[{location:o,payload:a,steps:0}],l=new Uint8Array(605);l[xo(o,a)]=1;let m=0;for(;m<p.length;){let d=p[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 fe(d.location)){let y=Ia(n,t,r,d.payload,f,i);if(y===void 0)continue;let b=xo(f,y);l[b]===0&&(l[b]=1,p.push({location:f,payload:y,steps:d.steps+1}))}}}c(fm,"shortestPayloadState");var Fr,Wr,ts,ym=class ym{constructor(){L(this,Fr);L(this,Wr);L(this,ts);F(this,Fr,new Uint8Array(121)),F(this,Wr,new Uint8Array(121)),F(this,ts,new Uint8Array(121))}canAttackTarget(n){let o=J(n);return(T(this,Wr)[o]??0)>0||(T(this,ts)[o]??0)===0&&(T(this,Fr)[o]??0)>0}immediateThreats(n){let o=J(n);return[T(this,Fr)[o]??0,T(this,Wr)[o]??0]}markGuarded(n,o){T(this,ts)[J(n)]=o?1:0}addActionThreat(n){let o=J(n);T(this,Fr)[o]=Math.min(255,(T(this,Fr)[o]??0)+1)}addBombThreat(n){let o=J(n);T(this,Wr)[o]=Math.min(255,(T(this,Wr)[o]??0)+1)}};Fr=new WeakMap,Wr=new WeakMap,ts=new WeakMap,c(ym,"AttackReachSummary");var xa=ym;function Tb(e,n,o,t,r,a){if(!(t.kind==="mana"||e.get(r)?.kind==="mana"))return Ia(e,n,o,t,r,a)}c(Tb,"exactAttackPayloadAfterMove");function Ww(e,n,o){return e.squareAt(o).kind!=="mon-base"&&(Oe(o,n)||e.get(o)===void 0)}c(Ww,"exactAttackActionSourceAvailable");function Rb(e,n,o,t){let r;switch(n){case A.Mystic:r=Vo(t);break;case A.Demon:r=Ho(t);break;case A.Drainer:case A.Angel:case A.Spirit:return}let a;for(let i of r){if(!Ww(e,o,i)||n===A.Demon&&e.get(Sr(i,t))!==void 0)continue;let s=te(o,i);a=a===void 0?s:Math.min(a,s)}return a}c(Rb,"exactAttackActionStepsLowerBound");function Bw(e,n,o,t,r,a,i,s){if(a.kind==="bomb")return Math.max(te(r,n)-3,0);if(a.kind==="mana")return;let u=o?void 0:Rb(e,i,r,n);if(s)for(let p of t){let l=te(r,p)+Math.max(te(p,n)-3,0);u=u===void 0?l:Math.min(u,l)}return u}c(Bw,"exactAttackRemainingStepsLowerBound");function Pb(e){let n=[];for(let[o,t]of e.entries())t.kind==="consumable"&&t.consumable===q.BombOrPotion&&n.push(o);return n}c(Pb,"bombPickupLocations");function wb(e,n,o,t,r,a,i,s,u){if(e.session.checkpoint())return!1;if(i.kind==="mon-with-consumable"&&i.consumable===q.Bomb&&te(a,o)<=t+3)return!0;if(!r){let p=Rb(n,s.kind,a,o);if(p!==void 0&&p<=t)return!0}if(i.kind==="mon-with-mana")return!1;for(let p of u){if(e.session.checkpoint())return!1;let l=te(a,p);if(!(l>t)&&te(p,o)<=t-l+3)return!0}return!1}c(wb,"exactAttackTargetPlausibleForAttacker");function Lw(e,n,o,t,r,a,i){if(a<0||!i||n.get(r)===void 0||e.session.checkpoint())return!1;let s=Oa(n,t,r),u=Pb(n);for(let[p,l]of n.entries()){if(e.session.checkpoint())return!1;let m=H(l);if(!(m?.color!==o||j(m))&&wb(e,n,r,a,s,p,l,m,u))return!0}return!1}c(Lw,"exactAttackTargetPlausibleOnBoard");function wp(e,n){let o=[];for(let[t,r]of e.entries())H(r)?.color===n&&o.push(t);return o}c(wp,"attackReachSummaryTargetLocations");function Ap(e,n,o,t,r,a){let i=new xa;if(t<0||!r||a.length===0||e.session.checkpoint())return i;for(let s of a){if(e.session.checkpoint())return new xa;let u=n.get(s),p=u===void 0?void 0:H(u);p!==void 0&&i.markGuarded(s,Oa(n,p.color,s))}for(let[s,u]of n.entries()){if(e.session.checkpoint())return new xa;let p=H(u);if(p?.color!==o||j(p))continue;let l=u.kind!=="mon-with-mana",m=u.kind==="mon-with-consumable"&&u.consumable===q.Bomb?os:Qo,d=[{location:s,payload:m,steps:0}],f=new Uint8Array(605);f[xo(s,m)]=1;let y=0;for(;y<d.length;){let b=d[y];if(y+=1,b===void 0)break;if(e.session.checkpoint())return new xa;if(!(b.steps>t)){if(b.payload.kind==="bomb")for(let C of a)te(b.location,C)<=3&&i.addBombThreat(C);if(n.squareAt(b.location).kind!=="mon-base")for(let C of a)(p.kind===A.Mystic&&Math.abs(b.location.i-C.i)===2&&Math.abs(b.location.j-C.j)===2||p.kind===A.Demon&&Xi(n,b.location,C))&&i.addActionThreat(C);if(b.steps!==t)for(let C of fe(b.location)){let h=Tb(n,p.kind,p.color,b.payload,C,l);if(h===void 0)continue;let k=xo(C,h);f[k]===0&&(f[k]=1,d.push({location:C,payload:h,steps:b.steps+1}))}}}}return e.session.checkpoint()?new xa:i}c(Ap,"attackReachSummaryForTargets");function Ab(e,n,o,t,r,a){return Ap(e,n,o,r,a,wp(n,t))}c(Ab,"attackReachSummary");function Gw(e,n,o,t,r,a){if(e.session.checkpoint())return!1;let i=Oa(n,t,r),s=Pb(n);for(let[u,p]of n.entries()){if(e.session.checkpoint())return!1;let l=H(p);if(l?.color!==o||j(l)||!wb(e,n,r,a,i,u,p,l,s))continue;let m=p.kind!=="mon-with-mana",d=p.kind==="mon-with-consumable"&&p.consumable===q.Bomb?os:Qo,f=[{location:u,payload:d,steps:0}],y=new Uint8Array(605);y[xo(u,d)]=1;let b=0;for(;b<f.length;){let C=f[b];if(b+=1,C===void 0||e.session.checkpoint())return!1;if(C.steps>a)continue;if(C.payload.kind==="bomb"&&n.get(r)!==void 0&&te(C.location,r)<=3||n.squareAt(C.location).kind!=="mon-base"&&!i&&(l.kind===A.Mystic&&Math.abs(C.location.i-r.i)===2&&Math.abs(C.location.j-r.j)===2||l.kind===A.Demon&&Xi(n,C.location,r)))return!0;if(C.steps===a)continue;let h=Bw(n,r,i,s,C.location,C.payload,l.kind,m);if(!(h!==void 0&&C.steps+h>a))for(let k of fe(C.location)){let M=Tb(n,l.kind,l.color,C.payload,k,m);if(M===void 0)continue;let R=xo(k,M);y[R]===0&&(y[R]=1,f.push({location:k,payload:M,steps:C.steps+1}))}}}return!1}c(Gw,"canAttackTargetOnBoardUncached");function Br(e,n,o,t,r,a,i,s){if(i<0||!s||n.get(a)===void 0||e.session.checkpoint())return!1;let u=Dn(Nn(t),Nn(r),J(a),i,1),p=u===void 0?void 0:be(e).attackReach.get(o,u);if(p!==void 0)return p;if(!Lw(e,n,t,r,a,i,s))return e.session.cacheWriteAllowed&&u!==void 0&&be(e).attackReach.set(o,!1,u),!1;let l=Gw(e,n,t,r,a,i);return e.session.cacheWriteAllowed?(u!==void 0&&be(e).attackReach.set(o,l,u),l):!1}c(Br,"canAttackTargetOnBoardWithHash");var Ob=1779033703,Ib=4089235721,xb=2654435761,Nb=2246822535,Db=2496678331,_b=321982955,Vw=2654435769,Hw=2135587861,Fb=3210233709,Wb=484763065,Bb=2496678331,Lb=321982955,Uw=11;function Lr(e,n,o,t,r){let a=o&65535,i=o>>>16,s=r&65535,u=r>>>16,p=a*s,l=(p>>>16)+i*s+a*u;e.lo=(p&65535|(l&65535)<<16)>>>0,e.hi=i*u+Math.floor(l/65536)+(Math.imul(n,r)>>>0)+(Math.imul(o,t)>>>0)>>>0}c(Lr,"multiplyInto");function rs(e,n,o,t){e.hi=(n^n>>>t)>>>0,e.lo=(o^(o>>>t|n<<32-t))>>>0}c(rs,"xorShiftRightInto");function Gb(e,n,o){rs(e,n,o,30),Lr(e,e.hi,e.lo,Fb,Wb),rs(e,e.hi,e.lo,27),Lr(e,e.hi,e.lo,Bb,Lb),rs(e,e.hi,e.lo,31)}c(Gb,"mixBoardHashInto");function Sm(e,n,o){let t=o+Hw>>>0,r=n+Vw+(t<o>>>0?1:0)>>>0;rs(e,r,t,30),Lr(e,e.hi,e.lo,Fb,Wb),rs(e,e.hi,e.lo,27),Lr(e,e.hi,e.lo,Bb,Lb),rs(e,e.hi,e.lo,31)}c(Sm,"mixSearchHashInto");function gp(e){return e===P.White?1:2}c(gp,"exactHashColorBits");function jw(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(jw,"exactHashMonKindBits");function is(e){return e.kind==="supermana"?2:1|gp(e.color)<<4}c(is,"exactHashManaBits");function gb(e){return e.kind==="supermana"?32:16|gp(e.color)}c(gb,"exactSearchHashManaBits");function vb(e){switch(e){case q.Bomb:return 1;case q.Potion:return 2;case q.BombOrPotion:return 3}}c(vb,"exactHashConsumableBits");function Eb(e){switch(e){case q.Potion:return 1;case q.Bomb:return 2;case q.BombOrPotion:return 3}}c(Eb,"exactSearchHashConsumableBits");function as(e){return(jw(e.kind)|gp(e.color)<<4|(e.cooldown&255)<<Uw)>>>0}c(as,"exactHashMonBits");function Kw(e){let n;switch(e.kind){case"mon":n=256|as(e.mon);break;case"mana":n=512|is(e.mana);break;case"mon-with-mana":n=768|as(e.mon)|is(e.mana)<<16;break;case"mon-with-consumable":n=1024|as(e.mon)|vb(e.consumable)<<16;break;case"consumable":n=1280|vb(e.consumable);break}return n>>>0}c(Kw,"exactHashItemBits");function qw(e){let n;switch(e.kind){case"mon":n=256|as(e.mon);break;case"mana":n=512|gb(e.mana);break;case"mon-with-mana":n=768|as(e.mon)|gb(e.mana)<<16;break;case"mon-with-consumable":n=1024|as(e.mon)|Eb(e.consumable)<<16;break;case"consumable":n=1280|Eb(e.consumable);break}return n>>>0}c(qw,"exactSearchHashItemBits");function _t(e,n,o){Sm(e,Math.floor(n/4294967296),(n^o)>>>0)}c(_t,"mixSearchFieldInto");function zw(e,n){let o=nu(n),t=o>>>0,r=t+2242054355>>>0,a=Math.floor(o/4294967296)+608135816+(r<t?1:0)>>>0;Gb(e,a,r)}c(zw,"exactBoardVariantHashInto");function on(e){let n={hi:0,lo:0};zw(n,e.variant);let o=(Ob^n.hi)>>>0,t=(Ib^n.lo)>>>0;for(let[r,a]of e.entries()){Lr(n,0,J(r)+1,xb,Nb);let i=n.hi,s=n.lo;Lr(n,0,Kw(a),Db,_b),Gb(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(on,"exactBoardHash");function se(e){let n={hi:0,lo:0},o=Ob,t=Ib;for(let[r,a]of e.board.entries()){Lr(n,0,J(r)+1,xb,Nb),Sm(n,n.hi,n.lo^qw(a)),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0;let i=(o<<17|t>>>15)>>>0,s=(t<<17|o>>>15)>>>0;Lr(n,i,s,Db,_b),o=n.hi,t=n.lo}return _t(n,e.whiteScore,17),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0,_t(n,e.blackScore,35),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0,_t(n,gp(e.activeColor),53),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0,_t(n,e.actionsUsedCount,71),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0,_t(n,e.manaMovesCount,89),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0,_t(n,e.monsMovesCount,107),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0,_t(n,e.whitePotionsCount,125),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0,_t(n,e.blackPotionsCount,143),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0,_t(n,e.turnNumber,161),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0,_t(n,nu(e.variant()),179),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0,Sm(n,o,t),n}c(se,"exactSearchStateHash");function vp(e,n,o,t){if(e.session.checkpoint())return[1,1];let r=0,a=0;for(let i of Vo(t)){if(e.session.checkpoint())return[1,1];let s=n.get(i),u=s===void 0?void 0:H(s);u?.kind===A.Mystic&&u.color!==o&&!j(u)&&n.squareAt(i).kind!=="mon-base"&&(r+=1)}for(let i of Ho(t)){if(e.session.checkpoint())return[1,1];let s=n.get(i),u=s===void 0?void 0:H(s);u?.kind===A.Demon&&u.color!==o&&!j(u)&&n.squareAt(i).kind!=="mon-base"&&Xi(n,i,t)&&(r+=1)}for(let i of hr(t)){if(e.session.checkpoint())return[1,1];let s=n.get(i);s?.kind==="mon-with-consumable"&&s.consumable===q.Bomb&&s.mon.color!==o&&!j(s.mon)&&n.squareAt(i).kind!=="mon-base"&&(a+=1)}return e.session.checkpoint()?[1,1]:[r,a]}c(vp,"drainerImmediateThreats");function Vb(e,n,o,t,r){if(e.session.checkpoint())return!0;let[a,i]=vp(e,n,o,t);return e.session.checkpoint()?!0:r?i>0:a+i>0}c(Vb,"isDrainerUnderImmediateThreat");function $w(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===q.Bomb&&i.mon.color!==o&&!j(i.mon)&&n.squareAt(a).kind!=="mon-base"&&te(a,t)<=4)return!0;return!1}for(let[a,i]of n.entries()){if(e.session.checkpoint())return!1;let s=H(i);if(!(s===void 0||s.color===o||j(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 p=-1;p<=1;p+=1){if(u===0&&p===0)continue;let l={i:a.i+u,j:a.j+p};if(l.i<0||l.i>10||l.j<0||l.j>10||n.get(l)!==void 0)continue;let m=n.squareAt(l);if(!(m.kind==="mon-base"||m.kind==="supermana-base")&&(s.kind===A.Mystic&&Math.abs(l.i-t.i)===2&&Math.abs(l.j-t.j)===2||s.kind===A.Demon&&Xi(n,l,t)))return!0}if(i.kind==="mon-with-consumable"&&i.consumable===q.Bomb&&te(a,t)<=4)return!0}}return!1}c($w,"isDrainerUnderWalkThreatUncached");function ss(e,n,o,t,r,a){if(e.session.checkpoint())return!0;let i=Dn(Nn(t),J(r),a?1:0),s=i===void 0?void 0:be(e).walkThreat.get(o,i);if(s!==void 0)return s||e.session.checkpoint();let u=$w(e,n,t,r,a);return e.session.cacheWriteAllowed?(i!==void 0&&be(e).walkThreat.set(o,u,i),u):!0}c(ss,"isDrainerUnderWalkThreatWithHash");function Ep(e,n,o,t,r){if(e.session.checkpoint())return!1;let a=Oa(n,t,r),i=Br(e,n,o,G(t),t,r,ue,!0);return e.session.checkpoint()?!1:!i&&!ss(e,n,o,t,r,a)&&!e.session.checkpoint()}c(Ep,"isDrainerExactlySafeNextTurnOnBoardWithHash");function us(e,n,o,t){return Ep(e,n,on(n),o,t)}c(us,"isDrainerExactlySafeNextTurnOnBoard");function or(e,n){for(let[o,t]of e.entries()){let r=H(t);if(r?.color===n&&r.kind===A.Drainer&&!j(r))return o}}c(or,"findAwakeDrainer");function Op(e,n,o,t){if(e.session.checkpoint())return 0;let r=Dn(Nn(t)),a=r===void 0?void 0:be(e).drainerSafety.get(o,r);if(a!==void 0)return a;let i=or(n,t),s=0;if(i!==void 0){let u=Oa(n,t,i),[p,l]=vp(e,n,t,i),m=u?l>0:p+l>0,d=ss(e,n,o,t,i,u);s=Ep(e,n,o,t,i)?m||d?1:2:m||d?-2:-1}return e.session.cacheWriteAllowed?(r!==void 0&&be(e).drainerSafety.set(o,s,r),s):0}c(Op,"exactOwnDrainerSafetyScoreWithHash");function Na(e,n,o,t,r,a){if(e.session.checkpoint()||a!==void 0&&a<0)return;let i=Dn(J(o),is(t));if(i!==void 0&&be(e).carrierSteps.has(r,i)){let u=be(e).carrierSteps.get(r,i);return a===void 0||u===void 0||u<=a?u:void 0}let s=fm(e,n,o,A.Drainer,P.White,{kind:"mana",mana:t},!1,a,(u,p)=>p.kind==="mana"&&n.squareAt(u).kind==="mana-pool");if(e.session.cacheWriteAllowed)return i!==void 0&&(a===void 0||s!==void 0)&&be(e).carrierSteps.set(r,s,i),s}c(Na,"exactCarrierStepsToAnyPoolWithHash");function Hb(e,n,o,t){if(e.session.checkpoint())return;let r=on(n),a=Dn(Nn(o),J(t));if(a!==void 0&&be(e).drainerToMana.has(r,a))return be(e).drainerToMana.get(r,a);let i=fm(e,n,t,A.Drainer,o,Qo,!1,void 0,(s,u)=>u.kind==="mana");if(e.session.cacheWriteAllowed)return a!==void 0&&be(e).drainerToMana.set(r,i,a),i}c(Hb,"exactDrainerToAnyManaSteps");function Yw(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(Yw,"pickupPathBeats");function Ip(e,n,o,t,r,a){if(e.session.checkpoint())return;let i=Dn(Nn(o),J(t),r??-1);if(i!==void 0&&be(e).pickupPath.has(a,i))return be(e).pickupPath.get(a,i);let s=[{location:t,payload:Qo,steps:0}],u=new Uint8Array(605);u[xo(t,Qo)]=1;let p,l=0;for(;l<s.length;){let m=s[l];if(l+=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:De(m.payload.mana,o),mana:m.payload.mana};Yw(d,p)&&(p=d)}if(!(r!==void 0&&m.steps>=r))for(let d of fe(m.location)){let f=Ia(n,A.Drainer,o,m.payload,d,!1);if(f===void 0||f.kind==="bomb")continue;let y=xo(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&&be(e).pickupPath.set(a,p,i),p}c(Ip,"exactBestDrainerPickupPathWithHash");function xp(e,n,o){if(e.session.checkpoint())return;let t=on(n),r;for(let[a,i]of n.entries()){if(e.session.checkpoint())return;let s=H(i);if(s?.color!==o||j(s))continue;let u;i.kind==="mon-with-mana"?u=Na(e,n,a,i.mana,t):(i.kind==="mon"||i.kind==="mon-with-consumable")&&s.kind===A.Drainer&&(u=Ip(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(xp,"exactBestScoreStepsOnBoard");function hm(e,n,o,t){if(t<0||e.session.checkpoint())return 0;let r=on(n),a=0;for(let[i,s]of n.entries()){if(e.session.checkpoint())return 0;let u=H(s);if(!(u?.color!==o||j(u))){if(s.kind==="mon-with-mana")Na(e,n,i,s.mana,r,t)!==void 0&&(a=Math.max(a,De(s.mana,o)));else if((s.kind==="mon"||s.kind==="mon-with-consumable")&&u.kind===A.Drainer){let p=Ip(e,n,o,i,t,r);p!==void 0&&(a=Math.max(a,p.manaValue))}if(a>=2)return a}}return a}c(hm,"exactBestImmediateScoreOnBoard");function Xw(e){let n=0,o=0;for(let[,t]of e.board.entries())t.kind!=="mana"||t.mana.kind!=="regular"||(t.mana.color===P.White?n+=1:o+=1);return{hash:se(e),whiteRegularManaCount:n,blackRegularManaCount:o}}c(Xw,"secureManaStateKey");function bm(e,n,o){let t;for(let[r,a]of e.entries()){if(a.kind!=="mana"||!qe(a.mana,n))continue;let i=te(o,r);t=t===void 0?i:Math.min(t,i)}return t}c(bm,"exactDistanceToWantedManaStepsLowerBound");function Ub(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(Ub,"applySecureDrainerWalk");function Qw(e,n,o,t){let r=Xw(e);return{hash:r.hash,tag:Dn(r.whiteRegularManaCount,r.blackRegularManaCount,Nn(n),is(t),J(o))}}c(Qw,"secureSpecificManaQueryKey");function Zw(e,n,o,t,r,a){if(e.session.checkpoint())return;let i=n.board.get(t),s=i?.kind==="mon-with-mana"&&qe(i.mana,r);if(s&&us(e,n.board,o,t))return 0;if(n.activeColor!==o||!n.playerCanMoveMon())return;let u=Math.max(ue-n.monsMovesCount,0);if(!s){let l=bm(n.board,r,t);if(l===void 0||l>u)return}let p;for(let l of fe(t)){if(e.session.checkpoint())return;if(!s){let f=n.board.get(l);if(!(f?.kind==="mana"&&qe(f.mana,r))){let b=bm(n.board,r,l);if(b===void 0||b>u-1)continue}}let m=Ub(e,n,t,l);if(e.session.checkpoint())return;if(m===void 0)continue;let d;if(m.scoredMana!==void 0&&qe(m.scoredMana,r))d=1;else{let f=or(m.after.board,o);if(f===void 0)continue;let y=Np(e,m.after,o,f,r,a);if(e.session.checkpoint())return;y!==void 0&&(d=y+1)}if(d!==void 0&&(p===void 0||d<p)&&(p=d,d===1))break}return p}c(Zw,"secureSpecificManaStepsInGameUncached");function Np(e,n,o,t,r,a){if(e.session.checkpoint())return;let i=Qw(n,o,t,r);if(i.tag!==void 0&&be(e).secureMana.has(i.hash,i.tag))return be(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=Zw(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&&be(e).secureMana.set(i.hash,s,i.tag),s}c(Np,"secureSpecificManaStepsInGame");function Lu(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"&&qe(i.mana,t))){let l=bm(n,t,a);if(l===void 0||l>r)return}let u=Math.max(0,Math.min(ue,ue-r)),p=Oo.newSimulationState({board:n.fork(),whiteScore:0,blackScore:0,activeColor:o,actionsUsedCount:qn,manaMovesCount:0,monsMovesCount:u,whitePotionsCount:0,blackPotionsCount:0,turnNumber:2});return Np(e,p,o,a,t,new Io(ns))}c(Lu,"exactSecureSpecificManaStepsOnBoard");function Dp(e,n,o,t,r){if(e.session.checkpoint())return;let a=n.fork(),i=t,s=Np(e,a,o,i,r,new Io(ns));if(s===void 0||e.session.checkpoint())return;let u=[];for(;s>0;){let p;for(let l of fe(i)){if(e.session.checkpoint())return;let m=Ub(e,a,i,l);if(e.session.checkpoint())return;if(m===void 0)continue;if(s===1&&m.scoredMana!==void 0&&qe(m.scoredMana,r)){p={next:l,after:m.after,steps:0};break}let d=or(m.after.board,o);if(d===void 0)continue;let f=Np(e,m.after,o,d,r,new Io(ns));if(e.session.checkpoint())return;if(f===s-1){p={next:l,after:m.after,steps:f};break}}if(p===void 0)return;u.push(p.next),a=p.after,i=p.next,s=p.steps}return u}c(Dp,"exactSecureSpecificManaPathFrom");var jb=6;function Cm(e,n,o,t,r){if(r<0||e.session.checkpoint())return[];let a=on(n),i=Dn(J(o),Nn(t),r),s=i===void 0?void 0:be(e).spiritReach.get(a,i);if(s!==void 0)return s;let u=[],p=[[o,0]],l=new Uint8Array(121);l[J(o)]=1;let m=0;for(;m<p.length;){let f=p[m];if(m+=1,f===void 0||e.session.checkpoint())return[];let[y,b]=f;if(u.push([y,b]),!(b>=r))for(let C of fe(y)){if(e.session.checkpoint())return[];let h=J(C);if(l[h]!==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===q.BombOrPotion,R&&(l[h]=1,p.push([C,b+1]))}}if(!e.session.cacheWriteAllowed)return[];let d=Object.freeze(u.map(([f,y])=>Object.freeze([f,y])));return i!==void 0&&be(e).spiritReach.set(a,d,i),d}c(Cm,"reachableSpiritPositions");function Mm(e,n,o){let t=e.get(o),r=H(n),a=Xn(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===A.Drainer;case"mon-base":return r?.kind===i.monKind&&r.color===i.color&&a===void 0&&ca(n)===void 0}}c(Mm,"spiritDestinationAllowed");function Kb(e,n,o,t,r){if(t<0||!r||e.session.checkpoint())return Xe();let a=Xe();for(let[i,s]of n.entries()){if(e.session.checkpoint())return Xe();let u=H(s);if(!(u?.color!==o||u.kind!==A.Spirit||j(u)))for(let[p]of Cm(e,n,i,o,t)){if(e.session.checkpoint())return Xe();if(n.squareAt(p).kind==="mon-base")continue;let l=0,m=0,d=!1,f=!1;for(let b of Uo(p)){let C=n.get(b);if(!(C===void 0||!bt(C)||!fe(b).some(h=>Mm(n,C,h))))if(l+=1,C.kind==="mana")C.mana.kind==="supermana"?(d=!0,m=Math.max(m,2)):C.mana.color===G(o)&&(f=!0,m=Math.max(m,2));else{let h=H(C);h?.color===o&&h.kind===A.Drainer&&!j(h)?m=Math.max(m,2):h!==void 0&&h.color!==o&&!j(h)&&(m=Math.max(m,1))}}let y=Math.max(Math.min(l,jb),Math.min(1+m,jb));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()?Xe():a}c(Kb,"exactPassiveSpiritSummary");function Jw(e,n,o,t,r,a,i,s){if(!i&&!s||e.session.checkpoint())return{bestScore:0,bestOpponentManaScore:0};let u=i?De({kind:"supermana"},o):0,p=s?De({kind:"regular",color:G(o)},o):0,l=[{location:t,payload:Qo,steps:0}],m=new Uint8Array(605);m[xo(t,Qo)]=1;let d=0,f=0,y=0;for(;y<l.length;){let b=l[y];if(y+=1,b===void 0||e.session.checkpoint())return{bestScore:0,bestOpponentManaScore:0};if(b.payload.kind==="mana"&&n.squareAt(b.location).kind==="mana-pool"){let C=De(b.payload.mana,o);if(i&&C>=a&&(d=Math.max(d,C)),s&&b.payload.mana.kind==="regular"&&b.payload.mana.color===G(o)&&(f=Math.max(f,C)),(!i||d>=u)&&(!s||f>=p))return{bestScore:d,bestOpponentManaScore:f}}if(!(b.steps>=r))for(let C of fe(b.location)){if(e.session.checkpoint())return{bestScore:0,bestOpponentManaScore:0};let h=Ia(n,A.Drainer,o,b.payload,C,!1);if(h===void 0||h.kind==="bomb")continue;let k=xo(C,h);m[k]===0&&(m[k]=1,l.push({location:C,payload:h,steps:b.steps+1}))}}return{bestScore:d,bestOpponentManaScore:f}}c(Jw,"exactDrainerImmediateTacticalWindow");function km(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:G(o)},p=r?De({kind:"supermana"},o):0,l=a?De(u,o):0,m=on(n),d=0,f=0;for(let[y,b]of n.entries()){if(e.session.checkpoint())return{bestScore:0,bestOpponentManaScore:0};let C=H(b);if(!(C?.color!==o||j(C))){if(b.kind==="mon-with-mana"){let h=De(b.mana,o),k=r&&h>=s,M=a&&qe(b.mana,u);if(!k&&!M)continue;let R=Na(e,n,y,b.mana,m,t);if(e.session.checkpoint())return{bestScore:0,bestOpponentManaScore:0};if(R===void 0)continue;k&&(d=Math.max(d,h)),M&&(f=Math.max(f,h))}else if(C.kind===A.Drainer&&(b.kind==="mon"||b.kind==="mon-with-consumable")){let h=Jw(e,n,o,y,t,s,r,a);if(e.session.checkpoint())return{bestScore:0,bestOpponentManaScore:0};r&&(d=Math.max(d,h.bestScore)),a&&(f=Math.max(f,h.bestOpponentManaScore))}if((!r||d>=p)&&(!a||f>=l))return{bestScore:d,bestOpponentManaScore:f}}}return e.session.checkpoint()?{bestScore:0,bestOpponentManaScore:0}:{bestScore:d,bestOpponentManaScore:f}}c(km,"exactBestImmediateTacticalWindow");function qb(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 p=o;o.kind==="mon"&&i?.kind==="mana"?p=st(o.mon,i.mana):o.kind==="mana"&&i?.kind==="mon"?p=st(i.mon,o.mana):o.kind==="mon-with-mana"&&i?.kind==="mana"?(e.set(n,{kind:"mana",mana:o.mana}),p=st(o.mon,i.mana)):o.kind==="consumable"&&i?.kind==="mon"?p=Yn(i.mon):o.kind==="mon"&&i?.kind==="consumable"?p=Yn(o.mon):o.kind==="mon-with-mana"&&i?.kind==="consumable"?p=st(o.mon,o.mana):o.kind==="mon-with-consumable"&&i?.kind==="consumable"&&(p={kind:"mon-with-consumable",mon:o.mon,consumable:q.Bomb});let l=0,m=0,d=Xn(p);if(u.kind==="mana-pool"&&d!==void 0){l=De(d,r),d.kind==="regular"&&d.color===G(r)&&(m=l);let f=H(p);if(f===void 0)return e.delete(t),{undo:s,scoreDelta:l,opponentManaScoreDelta:m};p=Yn(f)}return e.set(t,p),{undo:s,scoreDelta:l,opponentManaScoreDelta:m}}c(qb,"applySpiritMovePreviewInPlace");function zb(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(zb,"undoSpiritMovePreview");var cs=1,ps=2,Gu=4,$b=cs|ps|Gu;function eA(e,n){let o=(n&cs)!==0,t=(n&ps)!==0,r=(n&Gu)!==0;return{...Xe(),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(eA,"tacticalSpiritSummaryForFields");function Tm(e,n,o,t,r,a){if(a&=$b,t<0||a===0||!r||e.session.checkpoint())return Xe();let i=on(n),s=Dn(Nn(o),t,Number(r),a),u=s===void 0?void 0:be(e).spiritTacticalSummary.get(i,s);if(u!==void 0)return u;for(let l=1;l<=$b;l+=1){if(l===a||(l&a)!==a)continue;let m=Dn(Nn(o),t,Number(r),l),d=m===void 0?void 0:be(e).spiritTacticalSummary.get(i,m);if(d===void 0)continue;let f=eA(d,a);return e.session.cacheWriteAllowed?(s!==void 0&&be(e).spiritTacticalSummary.set(i,f,s),f):Xe()}let p=nA(e,n,o,t,r,a);return e.session.cacheWriteAllowed?(s!==void 0&&be(e).spiritTacticalSummary.set(i,p,s),p):Xe()}c(Tm,"exactTacticalSpiritSummary");function nA(e,n,o,t,r,a){if(!r||e.session.checkpoint())return Xe();let i=(a&cs)!==0,s=(a&ps)!==0,u=(a&Gu)!==0,p=km(e,n,o,t,i,s);if(e.session.checkpoint())return Xe();let l=i?De({kind:"supermana"},o):0,m=s?De({kind:"regular",color:G(o)},o):0,d=Xe(),f=new ge(Rp);for(let[y,b]of n.entries()){if(e.session.checkpoint())return Xe();let C=H(b);if(!(C?.color!==o||C.kind!==A.Spirit||j(C)))for(let[h,k]of Cm(e,n,y,o,t)){if(e.session.checkpoint())return Xe();if(n.squareAt(h).kind==="mon-base")continue;let M=n.fork();Oe(h,y)||(M.delete(y),M.set(h,b));let R=t-k;for(let w of Uo(h)){if(e.session.checkpoint())return Xe();let v=M.get(w);if(!(v===void 0||!bt(v)))for(let O of fe(w)){if(e.session.checkpoint())return Xe();if(!Mm(M,v,O))continue;let E=qb(M,w,v,O,o);try{if(e.session.checkpoint())return Xe();let x=Math.max(d.sameTurnScoreValue,p.bestScore,E.scoreDelta),_=Math.max(d.sameTurnOpponentManaScoreValue,p.bestOpponentManaScore,E.opponentManaScoreDelta),z=i&&x<l,$=s&&_<m,Z={bestScore:0,bestOpponentManaScore:0};if(z||$){let pe=z?x+1:1,Me=on(M),Ee=Dn(Nn(o),R,pe,Number(z),Number($)),Qe=Ee===void 0?void 0:f.get(Me,Ee);if(Qe!==void 0)Z=Qe;else{if(Z=km(e,M,o,R,z,$,pe),e.session.checkpoint())return Xe();Ee!==void 0&&f.set(Me,Z,Ee)}}if(e.session.checkpoint())return Xe();let Y=Math.max(E.scoreDelta,Z.bestScore),K=Math.max(E.opponentManaScoreDelta,Z.bestOpponentManaScore);if(i&&(E.scoreDelta>0||Y>p.bestScore)&&(d={...d,sameTurnScore:!0,sameTurnScoreValue:Math.max(d.sameTurnScoreValue,Y)}),s&&(E.opponentManaScoreDelta>0||K>p.bestOpponentManaScore)&&(d={...d,sameTurnOpponentManaScore:!0,sameTurnOpponentManaScoreValue:Math.max(d.sameTurnOpponentManaScoreValue,K)}),u&&!d.supermanaProgress){let Me=v.kind==="mana"&&v.mana.kind==="supermana"&&E.scoreDelta>0;if(!Me&&(Me=Lu(e,M,o,{kind:"supermana"},R)!==void 0,e.session.checkpoint()))return Xe();Me&&(d={...d,supermanaProgress:!0})}if(u&&!d.opponentManaProgress){let pe=E.opponentManaScoreDelta>0;if(!pe&&(pe=Lu(e,M,o,{kind:"regular",color:G(o)},R)!==void 0,e.session.checkpoint()))return Xe();pe&&(d={...d,opponentManaProgress:!0})}if(e.session.checkpoint())return Xe();if((!i||d.sameTurnScoreValue>=l)&&(!s||d.sameTurnOpponentManaScoreValue>=m)&&(!u||d.supermanaProgress&&d.opponentManaProgress))return d}finally{zb(M,E.undo)}}}}}return e.session.checkpoint()?Xe():d}c(nA,"exactTacticalSpiritSummaryUncached");function oA(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(oA,"multiPressureFromSteps");function tA(e){return(e[1]??0)*70+(e[2]??0)*35}c(tA,"multiPressureFromScores");function Yb(e,n,o){if(e.session.checkpointWithReserve(20))return It();let t=n.activeColor===o?Math.max(ue-n.monsMovesCount,0):ue,r=n.activeColor===o?n.playerCanUseAction():!0,a=on(n.board),i=[],s;for(let[y,b]of n.board.entries()){if(e.session.checkpoint())return It();if(b.kind!=="mon-with-mana"||b.mon.color!==o||j(b.mon))continue;let C=Na(e,n.board,y,b.mana,a);C!==void 0&&(s=s===void 0?C:Math.min(s,C),i.push(C))}let u=or(n.board,o),p=u===void 0?void 0:Ip(e,n.board,o,u,void 0,a);if(e.session.checkpointWithReserve(20))return It();let l=u===void 0?void 0:Hb(e,n.board,o,u);p!==void 0&&i.push(p.totalMoves),i.sort((y,b)=>y-b);let m=i.filter((y,b)=>b===0||i[b-1]!==y),d=[];for(let[y,b]of n.board.entries()){if(e.session.checkpoint())return It();if(b.kind!=="mon-with-mana"||b.mon.color!==o||j(b.mon))continue;let C=Na(e,n.board,y,b.mana,a,t);C!==void 0&&C<=t&&d.push(De(b.mana,o))}p!==void 0&&p.totalMoves<=t&&d.push(p.manaValue);let f=Kb(e,n.board,o,t,r);return e.session.checkpointWithReserve(20)?It():(d.sort((y,b)=>b-y),{scorePathWindow:{bestSteps:m[0],multiPressure:oA(m)},immediateWindow:{bestScore:d[0]??0,multiPressure:tA(d)},bestDrainerPickup:p,bestCarrierSteps:s,bestDrainerToManaSteps:l,spirit:f})}c(Yb,"buildColorSummary");function rA(e,n){if(e.session.checkpointWithReserve(20))return new nr;let o=Yb(e,n,P.White);if(e.session.checkpointWithReserve(20))return new nr;let t=Yb(e,n,P.Black);return e.session.checkpointWithReserve(20)?new nr:new nr(o,t)}c(rA,"buildExactStrategicAnalysis");function Da(e,n,o){if(e.session.checkpointWithReserve(20))return new nr;let t=be(e).strategicAnalysis.get(o);if(t!==void 0)return t;let r=rA(e,n);return e.session.cacheWriteAllowed?(be(e).strategicAnalysis.set(o,r),r):new nr}c(Da,"exactStrategicAnalysisWithSearchHash");function ls(e,n){return Da(e,n,se(n))}c(ls,"exactStrategicAnalysis");function _p(e,n,o,t){let r=n.activeColor===o?Math.max(ue-n.monsMovesCount,0):ue;return Lu(e,n.board,o,t,r)}c(_p,"exactSecureSpecificManaStepsThisTurn");function Xb(e,n,o,t){let r=or(n.board,G(o));return r===void 0?!1:Br(e,n.board,t,o,G(o),r,n.activeColor===o?Math.max(ue-n.monsMovesCount,0):ue,n.activeColor===o?n.playerCanUseAction():!0)}c(Xb,"canAttackOpponentDrainerExactWithHash");function aA(e,n){let o=(n&Ir)!==0,t=(n&xr)!==0,r=(n&Qi)!==0,a=(n&Zi)!==0,i=(n&xt)!==0,s=i&&(t||a),u=r||i,p=a||s,l=o?e.safeSupermanaProgressSteps:void 0,m=t?e.safeOpponentManaProgressSteps:void 0,d=p&&e.spiritAssistedDenial;return{safeSupermanaProgress:l!==void 0,safeSupermanaProgressSteps:l,safeOpponentManaProgress:m!==void 0||d,safeOpponentManaProgressSteps:m,spiritAssistedScore:u&&e.spiritAssistedScore,spiritAssistedScoreValue:u?e.spiritAssistedScoreValue:0,spiritAssistedDenial:d,spiritAssistedDenialValue:p?e.spiritAssistedDenialValue:0,sameTurnScoreWindowValue:i?e.sameTurnScoreWindowValue:0}}c(aA,"turnTacticalProjectionForFlags");function iA(e,n,o){if(e.session.checkpointWithReserve(20))return Nt();let t=n.activeColor,r=Math.max(ue-n.monsMovesCount,0),a=(o&Ir)!==0,i=(o&xr)!==0,s=(o&Qi)!==0,u=(o&Zi)!==0,p=(o&xt)!==0,l=p&&(i||u),m=0;(s||p)&&(m|=cs),(u||l)&&(m|=ps);let d=m===0?Xe():Tm(e,n.board,t,r,n.playerCanUseAction(),m);if(e.session.checkpointWithReserve(20))return Nt();let f=a?_p(e,n,t,{kind:"supermana"}):void 0;if(e.session.checkpointWithReserve(20))return Nt();let y=i?_p(e,n,t,{kind:"regular",color:G(t)}):void 0;if(e.session.checkpointWithReserve(20))return Nt();let b=p?Math.max(hm(e,n.board,t,r),d.sameTurnScoreValue,l?d.sameTurnOpponentManaScoreValue:0):0;return e.session.checkpointWithReserve(20)?Nt():{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:b}}c(iA,"buildExactTurnTacticalProjection");function No(e,n,o,t,r){if(r===0||n.activeColor!==o||e.session.checkpointWithReserve(20))return Nt();let a=Math.max(ue-n.monsMovesCount,0),i=Dn(Nn(o),a,n.playerCanUseAction()?1:0,r),s=i===void 0?void 0:be(e).turnTacticalProjection.get(t,i);if(s!==void 0)return s;for(let p=1;p<=_u;p+=1){if(p===r||(p&r)!==r)continue;let l=Dn(Nn(o),a,n.playerCanUseAction()?1:0,p),m=l===void 0?void 0:be(e).turnTacticalProjection.get(t,l);if(m!==void 0){let d=aA(m,r);return e.session.cacheWriteAllowed?(i!==void 0&&be(e).turnTacticalProjection.set(t,d,i),d):Nt()}}let u=iA(e,n,r);return e.session.cacheWriteAllowed?(i!==void 0&&be(e).turnTacticalProjection.set(t,u,i),u):Nt()}c(No,"exactTurnTacticalProjectionWithSearchHash");function Qb(e,n,o,t){return No(e,n,o,t,xt).sameTurnScoreWindowValue}c(Qb,"exactSameTurnScoreWindowWithSearchHash");function sA(e,n){if(e.session.checkpointWithReserve(20))return Nr();let o=n.activeColor,t=Math.max(ue-n.monsMovesCount,0),r=Tm(e,n.board,o,t,n.playerCanUseAction(),cs|ps|Gu);if(e.session.checkpointWithReserve(20))return Nr();let a=_p(e,n,o,{kind:"supermana"});if(e.session.checkpointWithReserve(20))return Nr();let i=_p(e,n,o,{kind:"regular",color:G(o)});if(e.session.checkpointWithReserve(20))return Nr();let s=Math.max(hm(e,n.board,o,t),r.sameTurnScoreValue,r.sameTurnOpponentManaScoreValue),u=on(n.board),p={canAttackOpponentDrainer:Xb(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:xp(e,n.board,o)};return e.session.checkpointWithReserve(20)?Nr():p}c(sA,"buildExactTurnSummary");function uA(e,n,o,t){if(n.activeColor!==o||e.session.checkpointWithReserve(20))return Nr();let r=be(e).turnSummary.get(t);if(r!==void 0)return r;let a=sA(e,n);return e.session.cacheWriteAllowed?(be(e).turnSummary.set(t,a),a):Nr()}c(uA,"exactTurnSummaryWithSearchHash");function Rm(e,n,o){return uA(e,n,o,se(n))}c(Rm,"exactTurnSummary");function Zb(e,n,o){return Rm(e,n,o).canAttackOpponentDrainer}c(Zb,"canAttackOpponentDrainerThisTurn");function ds(e,n,o,t){if(n.activeColor!==o||e.session.checkpointWithReserve(20))return Dr();let r={remainingMonMoves:Math.max(ue-n.monsMovesCount,0),canUseAction:n.playerCanUseAction(),canMoveMana:n.playerCanMoveMana()},a=on(n.board),i=No(e,n,o,t,_u);if(e.session.checkpointWithReserve(20))return Dr();let s=Op(e,n.board,a,o);if(e.session.checkpointWithReserve(20))return Dr();let u=G(o),p=u===P.White?n.whiteScore:n.blackScore,l=Math.max(Ie-p,0),m=Da(e,n,t).colorSummary(u).immediateWindow.bestScore;if(e.session.checkpointWithReserve(20))return Dr();let d=l>0&&m>=l,f=l>0&&i.sameTurnScoreWindowValue>0?Math.min(i.sameTurnScoreWindowValue,l):0,y={budget:r,turn:i,delta:{sameTurnScoreWindowValue:i.sameTurnScoreWindowValue,spiritGain:Math.max(i.spiritAssistedScoreValue,i.spiritAssistedDenialValue),opponentWindowDenyGain:f,drainerAttackAvailable:Xb(e,n,o,a),drainerSafety:s,safeSupermanaProgressSteps:i.safeSupermanaProgressSteps,safeOpponentManaProgressSteps:i.safeOpponentManaProgressSteps},opponentCanWinImmediately:d};return e.session.checkpointWithReserve(20)?Dr():y}c(ds,"exactOpportunityContextWithSearchHash");function Ce(e,n,o){return ds(e,n,o,se(n))}c(Ce,"exactOpportunityContext");var _a=4096,ms=256,fs=Number.MAX_SAFE_INTEGER,Fp=po(342167472,1939669891),Vu=po(256,435),Jb=po(4294967295,4294967295),eC=po(4294967295,4294967294),je=Object.freeze({Baseline:"baseline",Production:"production"}),Pm=Object.freeze({[je.Baseline]:0,[je.Production]:1}),S=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([S.ImmediateScore,S.DenyOpponentWindow,S.DrainerKill,S.DrainerSafetyRecovery,S.SpiritImpact,S.SafeSupermanaProgress,S.SafeOpponentManaProgress,S.ManaTempo]),nC=Object.freeze({[S.ImmediateScore]:1,[S.DenyOpponentWindow]:2,[S.DrainerKill]:3,[S.SafeSupermanaProgress]:4,[S.SafeOpponentManaProgress]:5,[S.DrainerSafetyRecovery]:6,[S.SpiritImpact]:7,[S.ManaTempo]:8});function wm(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(wm,"createTurnUtility");var Vn=Object.freeze(wm()),Rn=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"}),oe=Object.freeze({NoPlan:"no-plan",BudgetExceeded:"budget-exceeded"}),Fa=Object.freeze({scoreGain:0,denyGain:0,drainerSafetyDelta:0,spiritOnlySetup:!1,endsNonnegativeDrainerSafety:!1,opponentImmediateWindowAfter:0});function Hu(e,n){return e<n?-1:e>n?1:0}c(Hu,"compareNumber");function oC(e){switch(e.kind){case"takeback":return 0;case"location":return 1;case"modifier":return 2}}c(oC,"inputTag");function Am(e,n){return Hu(e.i,n.i)||Hu(e.j,n.j)}c(Am,"compareLocations");function tC(e,n){return Wp(e.input,n.input)}c(tC,"compareNextInputs");function Wp(e,n){let o=Hu(oC(e),oC(n));return o!==0?o:e.kind==="location"&&n.kind==="location"?Am(e.location,n.location):e.kind==="modifier"&&n.kind==="modifier"?Hu(Jl[e.modifier],Jl[n.modifier]):0}c(Wp,"compareInputs");function lo(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=Wp(r,a);if(i!==0)return i}return Hu(e.length,n.length)}c(lo,"compareInputChains");function gm(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(gm,"lexicographicValues");function Ft(e){return e.denyGain>=0}c(Ft,"utilityHasNonnegativeDenyGain");function Wa(e){return e.drainerSafety>0||e.avoidImmediateLoss>0}c(Wa,"utilitySupportsTemporaryRiskRecovery");function Mo(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(Mo,"utilityStrictlyDominatesOverrideAxes");function Zo(e,n){if(!Mo(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(Zo,"utilityPassesOverrideGuard");function Jo(e,n){return mo(e,n)>=0&&e.evalScore+192>=n.evalScore}c(Jo,"utilitySupportsFamilyFallback");function Gr(e,n){return e.winState>n.winState||e.avoidImmediateLoss>n.avoidImmediateLoss||e.denyGain>n.denyGain||e.drainerAttack>n.drainerAttack||e.drainerSafety>n.drainerSafety}c(Gr,"utilityImprovesNonScoreOverrideAxes");function iC(e,n,o){return e.scoreDelta>=n.scoreDelta+o}c(iC,"utilityHasScoreDeltaForce");function dt(e,n,o){return ie(e,n)>=0&&e.evalScore+o>=n.evalScore}c(dt,"utilitySupportsPrimaryAxesEvalTolerance");function an(e,n){return e<n?-1:e>n?1:0}c(an,"compareNumber");function ju(e,n){let o=Math.min(e.length,n.length);for(let t=0;t<o;t+=1){let r=an(e[t]??0,n[t]??0);if(r!==0)return r}return an(e.length,n.length)}c(ju,"compareTuples");function vm(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(vm,"copyPlan");function Ba(e,n){let o=an(e.length,n.length);if(o!==0)return o;for(let t=0;t<e.length;t+=1){let r=lo(e[t]??[],n[t]??[]);if(r!==0)return r}return 0}c(Ba,"compareChunks");function Uu(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(Uu,"actionKeyTuple");function Em(e){let[n,o,t,r]=Uu(e);return`${n}:${J(o)}:${t===void 0?-1:J(t)}:${r===void 0?-2:J(r)}`}c(Em,"actionKey");function sC(e,n){let o=an(e.i,n.i);return o!==0?o:an(e.j,n.j)}c(sC,"compareLocations");function rC(e,n){return e===void 0?n===void 0?0:-1:n===void 0?1:sC(e,n)}c(rC,"compareOptionalLocations");function La(e,n){let o=Uu(e),t=Uu(n);return an(o[0],t[0])||sC(o[1],t[1])||rC(o[2],t[2])||rC(o[3],t[3])}c(La,"compareActionKeys");function mo(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(mo,"compareTurnUtilities");function ie(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(ie,"compareUtilityPrimaryAxes");function Co(e){return tr.indexOf(e)}c(Co,"familyRank");function aC(e){return e.avoidImmediateLoss<0?0:e.drainerSafety<0||e.scoreDelta<0?1:2}c(aC,"headOpeningRiskClass");function cA(e,n,o){return(e===S.SafeSupermanaProgress||e===S.SafeOpponentManaProgress)&&aC(n)!==aC(o)}c(cA,"shouldCompareHeadOpeningUtility");function pA(e,n,o,t,r,a){let i=ie(e,t);return i!==0||o===a&&cA(o,n,r)&&(i=ie(n,r),i!==0||(i=an(n.evalScore,r.evalScore),i!==0))?i:an(e.evalScore,t.evalScore)}c(pA,"comparePlanRank");function lA(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(lA,"comparePackageMeta");function Zn(e,n){let o=pA(e.utility,e.headUtility,e.headFamily,n.utility,n.headUtility,n.headFamily);return o!==0||(o=lA(e.packageMeta,n.packageMeta),o!==0)||(o=an(Co(n.goalFamily),Co(e.goalFamily)),o!==0)||(o=an(Co(n.headFamily),Co(e.headFamily)),o!==0)?o:(o=an(n.actions.length,e.actions.length),o!==0?o:Ba(e.compiledChunks,n.compiledChunks))}c(Zn,"turnEngineComparePlans");function uC(e){let n=Fp,o=[e.ownSeedCap,e.ownBeam,e.perNodeFamilyCap,e.stepCap,e.opponentSeedCap,e.opponentBeam,e.replySeedCap,e.replyBeam,e.expansionCap,Number(e.enableSpiritFamily),Pm[e.mode]+1,Number(e.enableLazyOracleScoreWindowProjection)];for(let t of o)n=Wu(Bu(n,um(t)),Vu);for(let t of bi(e.scoringWeights))n=Wu(Bu(n,um(t.codePointAt(0)??0)),Vu);return n}c(uC,"configFingerprint");function Bp(e,n,o){return{stateHash:se(e),modeTag:Pm[n],configFingerprint:uC(o)}}c(Bp,"cacheKeyForMode");function Lp(e,n){return Bp(e,n.mode,n)}c(Lp,"cacheKey");function cC(e,n,o){return{configFingerprint:uC(o),startTag:e.hi*2+un(n),startLow:e.lo}}c(cC,"createUtilityCacheIdentity");function pC(e,n){return{stateHash:e,configFingerprint:n.configFingerprint,startTag:n.startTag,startLow:n.startLow}}c(pC,"utilityCacheKey");var dA=Symbol("turn-engine-caches"),Nm=class Nm{constructor(){ne(this,"continuation",new ge(_a));ne(this,"oracle",new ge(_a));ne(this,"utility",new ge(_a));ne(this,"bestPlan",new ge(_a));ne(this,"noPlan",new Io(_a));ne(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()}};c(Nm,"TurnEngineCaches");var Om=Nm;function Jn(e){return e.caches.engine.getOrCreate(dA,()=>new Om)}c(Jn,"turnEngineCaches");function Im(e,n){return e.get(n.stateHash,n.modeTag,n.configFingerprint)}c(Im,"turnCacheGet");function lC(e,n){return e.has(n.stateHash,n.modeTag,n.configFingerprint)}c(lC,"turnCacheHas");function Gp(e,n,o){e.set(n.stateHash,o,n.modeTag,n.configFingerprint)}c(Gp,"turnCacheSet");function dC(e,n){e.add(n.stateHash,n.modeTag,n.configFingerprint)}c(dC,"turnCacheAdd");function xm(e,n){e.delete(n.stateHash,n.modeTag,n.configFingerprint)}c(xm,"turnCacheDelete");function Vp(e){Jn(e).clear()}c(Vp,"clearTurnEnginePlanCache");var Dm=Math.trunc(6710886375e-2),mC=-Dm;function _m(e){return Number.isNaN(e)?0:e<=-2147483648?-2147483648:e>=2147483647?2147483647:Math.trunc(e)}c(_m,"clampScore");function Hp(e){return Number.isNaN(e)?0:e<=mC?mC:e>=Dm?Dm:Math.trunc(e)}c(Hp,"clampHeuristicScore");function g(e,n){return _m(e+n)}c(g,"saturatingScoreAdd");function V(e,n){return _m(e-n)}c(V,"saturatingScoreSubtract");function tn(e,n){return _m(e*n)}c(tn,"saturatingScoreMultiply");function mA(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===q.Bomb;return[o,t,r]}c(mA,"scoringDangerSourceFlags");function fC(e){return Math.max(Math.min(e.i,Math.abs(qt-e.i)),Math.min(e.j,Math.abs(qt-e.j)))+1}c(fC,"distanceToAnyClosestPool");function Hn(e){return e===P.White?0:1}c(Hn,"colorSlot");function fA(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=fC(o)-1;if(n.manaEntries.push({location:o,mana:t.mana,scoreSteps:r}),t.mana.kind==="regular"){let a=Hn(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]=De(t.mana,t.mana.color))}break}case"mon":case"mon-with-mana":case"mon-with-consumable":{let r=t.mon,a=Hn(r.color);if(r.kind===A.Drainer&&n.drainerTargetLocations[a].push(o),j(r))break;t.kind==="mon-with-mana"&&n.liveManaCarriers[a].push({location:o,mana:t.mana,scoreSteps:fC(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]=mA(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(fA,"scoringBoardSummary");function yA(e){return{candidates:e.manaEntries.slice(),regularManaMoveScores:[e.regularManaMoveScores[0],e.regularManaMoveScores[1]]}}c(yA,"manaPathSnapshot");var mt,ys,fo,Ss,hs,Ku,Ga,qu,zu,$u,Yu,Xu,Va,rr,Ha,ar,Vr,Qu,Wt,yC,SC,Up,Fm=class Fm{constructor(n,o,t){L(this,Wt);L(this,mt);L(this,ys);L(this,fo);L(this,Ss);L(this,hs);L(this,Ku);L(this,Ga);L(this,qu);L(this,zu);L(this,$u);L(this,Yu);L(this,Xu);L(this,Va,-1);L(this,rr);L(this,Ha,-1);L(this,ar);L(this,Vr);L(this,Qu);F(this,mt,n),F(this,ys,o),F(this,fo,o.board),F(this,Ss,t.allowExactStrategic),F(this,hs,t.useAttackReachSummary??!1),F(this,Ku,t.narrowAttackReachTargets??!1),F(this,Ga,t.narrowAttackReachToDrainers??!1)}get boardHash(){return T(this,qu)??F(this,qu,on(T(this,fo))),T(this,qu)}get execution(){return T(this,mt)}get game(){return T(this,ys)}get board(){return T(this,fo)}get allowExactStrategic(){return T(this,Ss)}boardSummary(){return T(this,zu)??F(this,zu,fA(T(this,fo))),T(this,zu)}manaPathSnapshot(){return T(this,$u)??F(this,$u,yA(this.boardSummary())),T(this,$u)}exactAnalysis(){if(T(this,Ss))return T(this,Yu)??F(this,Yu,ls(T(this,mt),T(this,ys))),T(this,Yu)}drainerImmediateThreats(n,o){if(T(this,hs))return U(this,Wt,Up).call(this,G(n),n,0,!0,T(this,Ga)).immediateThreats(o);let t=J(o)+(n===P.Black?121:0);if(T(this,Vr)!==void 0){let a=T(this,Vr).get(t);if(a!==void 0)return a}else{if(t===T(this,Va)&&T(this,rr)!==void 0)return T(this,rr);if(t===T(this,Ha)&&T(this,ar)!==void 0)return T(this,ar)}let r=vp(T(this,mt),T(this,fo),n,o);if(T(this,Vr)!==void 0)T(this,Vr).set(t,r);else if(T(this,Va)<0)F(this,Va,t),F(this,rr,r);else if(T(this,Ha)<0)F(this,Ha,t),F(this,ar,r);else{let a=new Map;T(this,rr)!==void 0&&a.set(T(this,Va),T(this,rr)),T(this,ar)!==void 0&&a.set(T(this,Ha),T(this,ar)),a.set(t,r),F(this,Vr,a),F(this,rr,void 0),F(this,ar,void 0)}return r}canAttackTargetOnBoard(n,o,t,r,a){if(T(this,hs)){let i=T(this,fo).get(t),s=i===void 0?void 0:H(i);if(T(this,Ga)&&s?.color===o&&s.kind===A.Drainer)return U(this,Wt,Up).call(this,n,o,r,a,!0).canAttackTarget(t);if(!T(this,Ga))return U(this,Wt,Up).call(this,n,o,r,a,!1).canAttackTarget(t)}return Br(T(this,mt),T(this,fo),this.boardHash,n,o,t,r,a)}};mt=new WeakMap,ys=new WeakMap,fo=new WeakMap,Ss=new WeakMap,hs=new WeakMap,Ku=new WeakMap,Ga=new WeakMap,qu=new WeakMap,zu=new WeakMap,$u=new WeakMap,Yu=new WeakMap,Xu=new WeakMap,Va=new WeakMap,rr=new WeakMap,Ha=new WeakMap,ar=new WeakMap,Vr=new WeakMap,Qu=new WeakMap,Wt=new WeakSet,yC=c(function(n){return T(this,Xu)??F(this,Xu,[wp(T(this,fo),P.White),wp(T(this,fo),P.Black)]),T(this,Xu)[Hn(n)]},"#targets"),SC=c(function(n){return this.boardSummary().drainerTargetLocations[Hn(n)]},"#drainerTargets"),Up=c(function(n,o,t,r,a){let i=Number.isInteger(t)&&t>=0&&t<=65535?t*16+un(n)+un(o)*2+Number(r)*4+Number(a)*8:void 0;if(i!==void 0){let u=T(this,Qu)?.get(i);if(u!==void 0)return u}let s;return a?s=Ap(T(this,mt),T(this,fo),n,t,r,U(this,Wt,SC).call(this,o)):T(this,Ku)?s=Ap(T(this,mt),T(this,fo),n,t,r,U(this,Wt,yC).call(this,o)):s=Ab(T(this,mt),T(this,fo),n,o,t,r),i!==void 0&&(T(this,Qu)??F(this,Qu,new Map)).set(i,s),s},"#attackReachSummary"),c(Fm,"ScoringEvalContext");var jp=Fm;function hC(e){return!e.exactDangerThreat&&!e.walkThreat}c(hC,"exactSafe");function Wm(e){return e.angelNearby&&!e.exactDangerThreat}c(Wm,"guardedAgainstExactAttack");function et(e){if(e===void 0)throw new Error("exact strategic analysis should be available");return e}c(et,"requireExactSummary");function Bm(e,n,o,t){return o===t?e:n}c(Bm,"exactSummaryForScoring");function Lm(e,n,o,t){return n.kind===A.Spirit&&!j(n)&&Oe(o,e.base(n))?t:0}c(Lm,"spiritOnOwnBasePenalty");function Gm(e,n){let o=Math.min(4,Math.max(0,e.nextTurnSetupGain)),t=0;return o>0&&(t=g(t,Math.trunc(tn(Math.max(0,n.race.scoreRacePathProgress),o)/4)),t=g(t,Math.trunc(tn(Math.max(0,n.race.opponentScoreRacePathProgress),o)/6)),t=g(t,Math.trunc(tn(Math.max(0,n.race.scoreRaceMultiPath),o)/8)),t=g(t,Math.trunc(tn(Math.max(0,n.race.opponentScoreRaceMultiPath),o)/10))),e.supermanaProgress&&!e.sameTurnScore&&(t=g(g(t,tn(Math.max(0,n.mana.supermanaRaceControl),3)),Math.trunc(Math.max(0,n.threat.drainerBestManaPath)/4))),e.opponentManaProgress&&!e.sameTurnOpponentManaScore&&(t=g(g(g(t,tn(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(Gm,"exactSpiritPressureBonus");function Vm(e,n){let o=0;for(let t of Uo(n)){let r=e.get(t);r!==void 0&&bt(r)&&(o+=1)}return o}c(Vm,"heuristicSpiritActionUtility");function Kp(e,n,o){let t;for(let r of e.candidates){let i=te(o,r.location)+r.scoreSteps,s=De(r.mana,n);if(t===void 0){t=[i,s];continue}let u=i*3-s,p=t[0]*3-t[1];(u<p||u===p&&s>t[1])&&(t=[i,s])}return t}c(Kp,"bestDrainerPickupPathWithSnapshot");function SA(e,n,o,t){let r=t.boardSummary(),a=11,i=11;for(let u of r.manaEntries)a=Math.min(a,te(u.location,n));for(let u of r.dangerSources[Hn(G(e))]){if(o){u.heuristicThreat&&(i=Math.min(i,te(u.location,n)));continue}let p=2147483647;if(u.exactActionThreat&&(p=te(u.location,n)),u.exactBombThreat){let l=Math.max(1,te(u.location,n)-2);p=Math.min(p,l)}i=Math.min(i,p)}if(o)for(let u of r.looseConsumableLocations)i=Math.min(i,te(u,n));let s=r.liveAngelLocations[Hn(e)].some(u=>te(u,n)===1);return o?[i,a,s]:[Math.max(1,i),Math.max(1,a),s]}c(SA,"drainerDistancesWithContext");function Hm(e,n,o,t,r){let a=r.board,[i,s,u]=SA(e,n,o,r),p=o?Vb(r.execution,a,e,n,u):r.canAttackTargetOnBoard(G(e),e,n,ue,!0),l=t&&!p&&ss(r.execution,a,r.boardHash,e,n,u);return{riskDanger:o?Math.max(1,i):p?1:Math.max(1,i),minMana:s,angelNearby:u,exactDangerThreat:p,walkThreat:l}}c(Hm,"drainerSafetySnapshotWithContext");function Um(e,n,o){return o.drainerImmediateThreats(e,n)}c(Um,"drainerImmediateThreatsWithContext");function bC(e,n,o){let t=11;for(let r of o.boardSummary().liveMonLocations[Hn(G(e))])t=Math.min(t,te(r,n));return Math.max(1,t)}c(bC,"nearestEnemyMonDistanceWithContext");function ir(e,n,o){let t=11;for(let r of o.boardSummary().liveDrainerLocations[Hn(e)])t=Math.min(t,te(r,n));return Math.max(1,t)}c(ir,"nearestFriendlyDrainerDistanceWithContext");function CC(e,n){return te(e,n)+1}c(CC,"distanceToLocation");function jm(e){return Math.max(1,Math.abs(Ic-e.i))+1}c(jm,"distanceToCenter");function MC(e){return Math.max(Math.min(e.i,Math.abs(qt-e.i)),Math.min(e.j,Math.abs(qt-e.j)))+1}c(MC,"distanceToAnyClosestPool");function Zu(e,n){let o=n===P.White?qt:0;return Math.max(Math.abs(o-e.i),Math.min(e.j,Math.abs(qt-e.j)))+1}c(Zu,"distanceToClosestPool");function ko(e,n){return Math.trunc(Math.trunc(e)*Math.trunc(n)/1e4)}c(ko,"scaleByBp");function Km(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(Km,"insertLowestStep");function qm(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(qm,"insertTopScore");function kC(e,n,o,t){if(!t)return o.scorePathWindow;let a=e.boardSummary().regularManaScorePathSteps[Hn(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(kC,"exactScorePathWindowForContext");function TC(e,n,o,t){let r=e.boardSummary(),a=[2147483647,2147483647,2147483647];for(let u of r.liveManaCarriers[Hn(n)])Km(a,u.scoreSteps+1);if(o){let u=e.manaPathSnapshot();for(let p of r.liveDrainerLocations[Hn(n)]){let l=Kp(u,n,p);l!==void 0&&Km(a,l[0]+1)}}if(t){let u=r.regularManaScorePathSteps[Hn(n)];u!==void 0&&Km(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(TC,"scorePathWindowToAnyPoolForContext");function qp(e,n,o,t){if(!t)return o.immediateWindow;let r=e.boardSummary().regularManaMoveScores[Hn(n)];return{bestScore:Math.max(o.immediateWindow.bestScore,r),multiPressure:o.immediateWindow.multiPressure}}c(qp,"exactImmediateScoreWindowForContext");function RC(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[Hn(n)])u.scoreSteps<=o&&qm(s,De(u.mana,n));if(t){let u=e.manaPathSnapshot();for(let p of i.liveDrainerLocations[Hn(n)]){let l=0;for(let m of u.candidates)te(p,m.location)+m.scoreSteps<=o&&(l=Math.max(l,De(m.mana,n)));l>0&&qm(s,l)}}if(r&&a){let u=i.regularManaMoveScores[Hn(n)];u>0&&qm(s,u)}return{bestScore:s[0]??0,multiPressure:(s[1]??0)*70+(s[2]??0)*35}}c(RC,"immediateScoreWindowSummaryForContext");function PC(e,n,o,t,r,a,i,s){let u=s,p=t?TC(o,e,!1,r):kC(o,e,et(a),r),l=t?TC(o,G(e),!1,r):kC(o,G(e),et(i),r);return p.bestSteps!==void 0&&(u=u+ko(Math.trunc(n.race.scoreRacePathProgress/Math.max(1,p.bestSteps)),1e4),t||(u=u+ko(Math.trunc(n.race.scoreRaceMultiPath*p.multiPressure/100),1e4))),l.bestSteps!==void 0&&(u=u+-ko(Math.trunc(n.race.opponentScoreRacePathProgress/Math.max(1,l.bestSteps)),1e4),t||(u=u+-ko(Math.trunc(n.race.opponentScoreRaceMultiPath*l.multiPressure/100),1e4))),u}c(PC,"scorePreferabilityRaceWindows");function wC(e,n,o,t,r,a,i,s,u,p,l,m,d){let f=o.game,y=d;if(f.activeColor===e){let b=t?RC(o,e,s,!1,r,r&&f.playerCanMoveMana()):qp(o,e,et(u),r&&f.playerCanMoveMana());if(y=y+ko(n.race.immediateScoreWindow*b.bestScore,1e4),!t){y=y+ko(Math.trunc(n.race.immediateScoreMultiWindow*b.multiPressure/100),1e4);let C=qp(o,G(e),et(p),r);y=y+-ko(Math.trunc(n.race.opponentImmediateScoreWindow*C.bestScore*i/1e4),1e4),y=y+-ko(Math.trunc(n.race.opponentImmediateScoreMultiWindow*C.multiPressure*i/1e6),1e4),a&&(l+b.bestScore>=Ie&&(y=y+n.mana.immediateWinningCarrier),m+C.bestScore>=Ie&&(y=y+-n.mana.immediateWinningCarrier))}}else{let b=t?RC(o,G(e),s,!1,r,r&&f.playerCanMoveMana()):qp(o,G(e),et(p),r&&f.playerCanMoveMana());if(y=y+-ko(n.race.opponentImmediateScoreWindow*b.bestScore,1e4),!t){y=y+-ko(Math.trunc(n.race.opponentImmediateScoreMultiWindow*b.multiPressure/100),1e4);let C=qp(o,e,et(u),r);y=y+ko(Math.trunc(n.race.immediateScoreWindow*C.bestScore*i/1e4),1e4),y=y+ko(Math.trunc(n.race.immediateScoreMultiWindow*C.multiPressure*i/1e6),1e4),a&&(m+b.bestScore>=Ie&&(y=y+-n.mana.immediateWinningCarrier),l+C.bestScore>=Ie&&(y=y+n.mana.immediateWinningCarrier))}}return y}c(wC,"scorePreferabilityImmediateWindows");var hA=2500,bA=2500,CA=9200,MA=2,zm=new Set(ya.map(J));function Hr(e,n,o,t,r){let a=new jp(e,n,{allowExactStrategic:r});return kA(a,o,t)}c(Hr,"evaluatePreferabilityWithWeightsAndExactPolicy");function kA(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(),p=Math.max(0,ue-t.monsMovesCount),l=r?void 0:e.exactAnalysis(),m=l?.colorSummary(n),d=l?.colorSummary(G(n)),f=n===P.White?t.whiteScore:t.blackScore,y=n===P.White?t.blackScore:t.whiteScore,b=n===P.White?t.whiteScore-t.blackScore:t.blackScore-t.whiteScore,C=n===P.White?t.whitePotionsCount-t.blackPotionsCount:t.blackPotionsCount-t.whitePotionsCount,h=b*o.material.confirmedScore+C*o.material.hasConsumable;return o.formula.doubleConfirmedScore&&(h=h*o.material.confirmedScore),h=TA(n,o,e,r,u,p,l,m,d,h),h=PC(n,o,e,r,a,m,d,h),Hp(wC(n,o,e,r,a,i,s,p,m,d,f,y,h))}c(kA,"evaluatePreferabilityWithContext");function TA(e,n,o,t,r,a,i,s,u,p){let l=o.game,m=p,d=c(h=>{m=m+h},"addScore"),f=c((h,k)=>{d(h*k)},"addSigned"),y=c((h,k,M)=>{d(Math.trunc(h*k/M))},"addSignedRatio"),b=c((h,k,M,R)=>{let w=Hm(h.color,k,t,n.threat.drainerWalkThreatBoolean!==0,o);if(y(M,n.position.drainerCloseToMana,w.minMana),y(M,n.position.drainerCloseToOwnPool,Zu(k,h.color)),y(M,n.position.drainerCloseToSupermana,CC(k,r)),Wm(w)?f(M,n.position.angelGuardingDrainer):y(M,n.position.drainerAtRisk,w.riskDanger),R||!t){let E=t?Kp(o.manaPathSnapshot(),h.color,k):i?.colorSummary(h.color).bestDrainerPickup;if(E!==void 0){let x="pathSteps"in E?E.pathSteps:E[0],_="totalMoves"in E?E.totalMoves:x+1,z="manaValue"in E?E.manaValue:E[1];y(M,n.threat.drainerBestManaPath*z,x+1),h.color===l.activeColor&&_<=a&&f(M,n.threat.drainerPickupScoreThisTurn*z)}}if(n.threat.drainerImmediateThreat!==0){let[E,x]=Um(h.color,k,o),_=w.angelNearby?x:E+x;_>0&&f(M,n.threat.drainerImmediateThreat*_)}let O=(n.threat.drainerDangerBoolean!==0||n.threat.drainerWalkThreatBoolean!==0)&&w.exactDangerThreat;n.threat.drainerDangerBoolean!==0&&O&&(f(M,n.threat.drainerDangerBoolean),M===-1&&d(n.threat.opponentDrainerAttackBonus)),n.threat.drainerWalkThreatBoolean!==0&&!O&&w.walkThreat&&f(M,n.threat.drainerWalkThreatBoolean)},"evaluateDrainer"),C=c((h,k,M)=>{let R=bC(h.color,k,o);y(M,n.position.spiritCloseToEnemy,R),f(-M,Lm(l.board,h,k,n.position.spiritOnOwnBasePenalty));let w=t?4:6,v,O;if(t)v=Vm(l.board,k),O=0;else{let E=Bm(et(s),et(u),h.color,e).spirit;v=E.utility,O=Gm(E,n)}f(M,n.threat.spiritActionUtility*Math.min(v,w)),f(M,O)},"evaluateSpirit");for(let[h,k]of l.board.entries())switch(k.kind){case"mon":{let M=k.mon,R=M.color===e?1:-1;j(M)?(f(R,M.kind===A.Drainer?n.material.faintedDrainer:n.material.faintedMon),f(R,n.material.faintedCooldownStep*M.cooldown)):M.kind===A.Drainer?b(M,h,R,!0):M.kind===A.Spirit?C(M,h,R):M.kind===A.Angel?y(R,n.position.angelCloseToFriendlyDrainer,ir(M.color,h,o)):y(R,n.position.monCloseToCenter,jm(h)),n.threat.attackerCloseToOpponentDrainer!==0&&!j(M)&&(M.kind===A.Demon||M.kind===A.Mystic)&&y(R,n.threat.attackerCloseToOpponentDrainer,ir(G(M.color),h,o)),zm.has(J(h))||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?b(M,h,R,!1):M.kind===A.Spirit?C(M,h,R):M.kind===A.Angel?y(R,n.position.angelCloseToFriendlyDrainer,ir(M.color,h,o)):y(R,n.position.monCloseToCenter,jm(h)),n.threat.attackerCloseToOpponentDrainer!==0&&!j(M)&&(M.kind===A.Demon||M.kind===A.Mystic||k.consumable===q.Bomb)&&y(R,n.threat.attackerCloseToOpponentDrainer,ir(G(M.color),h,o)),!t&&!zm.has(J(h))&&f(R,n.material.activeMon);break}case"mana":{d(Math.trunc(n.position.manaCloseToSamePool/Zu(h,e)));let M;if(k.mana.kind==="regular"){let R=k.mana.color,w=R===e?1:-1,v=Zu(h,R),O=ir(R,h,o),E=ir(G(R),h,o),x=Math.min(4,Math.max(-4,E-O));M=w*(Math.trunc(n.mana.regularManaToOwnerPool/v)+n.mana.regularManaDrainerControl*x),!t&&R===G(e)&&(M=M+n.mana.opponentManaDenial*-x)}else{let R=ir(e,h,o),w=ir(G(e),h,o),v=Math.min(4,Math.max(-4,w-R));M=n.mana.supermanaDrainerControl*v+(t?0:n.mana.supermanaRaceControl*v)}d(M);break}case"mon-with-mana":{let{mon:M,mana:R}=k,w=M.color===e?1:-1,v=MC(h),O=R.kind==="supermana"?n.position.extraForSupermana:R.color===e?0:n.position.extraForOpponentsMana;if(f(w,n.position.drainerHoldingMana),y(w,n.position.monWithManaCloseToAnyPool+O,v),v<=2){let _=R.kind==="supermana"?n.mana.manaCarrierOneStepFromPool+n.mana.supermanaCarrierOneStepFromPoolExtra:n.mana.manaCarrierOneStepFromPool;f(w,_),(M.color===P.White?l.whiteScore:l.blackScore)+De(R,M.color)>=Ie&&f(w,n.mana.immediateWinningCarrier)}let E=!t&&M.kind===A.Drainer&&(R.kind==="supermana"||R.color!==M.color),x=Hm(M.color,h,t,n.threat.manaCarrierWalkThreatBoolean!==0||E,o);if(y(w,n.mana.manaCarrierAtRisk,x.riskDanger),Wm(x)&&f(w,n.mana.manaCarrierGuarded),!t&&M.kind===A.Drainer&&E){let _;R.kind==="supermana"?_=tn(n.mana.supermanaRaceControl,hA):R.color!==M.color?_=tn(n.mana.opponentManaDenial,bA):_=0,_=Math.min(CA,Math.max(0,_));let z=M.color===P.White?l.blackScore:l.whiteScore,$=Math.max(0,Ie-MA);if(_>0&&hC(x)&&z<=$){let Z=tn(n.material.confirmedScore,2);f(w,ko(Z,_))}}if(M.color===l.activeColor&&v-1<=a&&f(w,n.threat.manaCarrierScoreThisTurn),M.kind===A.Drainer){y(w,n.position.drainerCloseToOwnPool,Zu(h,M.color));let[_,z]=Um(M.color,h,o),$=x.angelNearby?z:_+z;$>0&&f(w,n.threat.drainerImmediateThreat*$);let Y=(n.threat.manaCarrierDangerBoolean!==0||n.threat.manaCarrierWalkThreatBoolean!==0)&&x.exactDangerThreat;n.threat.manaCarrierDangerBoolean!==0&&Y&&(f(w,n.threat.manaCarrierDangerBoolean),w===-1&&d(n.threat.opponentDrainerAttackBonus)),n.threat.manaCarrierWalkThreatBoolean!==0&&!Y&&x.walkThreat&&f(w,n.threat.manaCarrierWalkThreatBoolean)}else if(M.kind===A.Spirit){f(-w,Lm(l.board,M,h,n.position.spiritOnOwnBasePenalty));let _=t?4:6,z,$;if(t)z=Vm(l.board,h),$=0;else{let Z=Bm(et(s),et(u),M.color,e).spirit;z=Z.utility,$=Gm(Z,n)}f(w,n.threat.spiritActionUtility*Math.min(z,_)),f(w,$)}!t&&!zm.has(J(h))&&f(w,n.material.activeMon);break}case"consumable":break}return m}c(TA,"scorePreferabilityBoardItems");function Cs(e,n,o,t){return Ms(e,n,se(n),o,t)}c(Cs,"createTurnUtilityEvalContext");function Ms(e,n,o,t,r){return{execution:e,start:n,startHash:o,perspective:t,config:r,cacheIdentity:cC(o,t,r)}}c(Ms,"createTurnUtilityEvalContextWithSearchHash");function Ju(e,n,o,t,r){if(e.session.checkpoint())return Vn;let a=RA(e,n,o,t,r);return e.session.checkpoint()?Vn:a}c(Ju,"turnEngineEvaluateStateUtility");function RA(e,n,o,t,r){if(e.session.checkpoint())return Vn;let a=Cs(e,o,t,r);return vC(a,n,se(n))}c(RA,"evaluateStateUtilityFromInputs");function Ua(e,n,o,t){return e.session.checkpoint()?zp():PA(e,n,o,t)}c(Ua,"turnOracleContextWithSearchHash");function PA(e,n,o,t){let r=Jn(e).oracle.get(t,un(o));if(r!==void 0)return e.session.checkpoint()?zp():r;let a=Da(e,n,t);if(e.session.checkpoint())return zp();let i=ds(e,n,o,t);if(e.session.checkpoint())return zp();let s={opportunity:i,strategic:a.colorSummary(o),opponentImmediateWindow:a.colorSummary(G(o)).immediateWindow.bestScore};return e.session.cacheWriteAllowed&&Jn(e).oracle.set(t,s,un(o)),s}c(PA,"turnOracleContextAfterCheckpoint");function zp(){return{opportunity:Dr(),strategic:It(),opponentImmediateWindow:0}}c(zp,"emptyOracleContext");function bs(e,n,o,t){if(e.session.checkpoint())return 0;let r=Qb(e,n,o,t);return e.session.checkpoint()?0:r}c(bs,"activeTurnScoreWindowWithSearchHash");function gC(e,n,o){return bs(e,n,o,se(n))}c(gC,"activeTurnScoreWindow");function wA(e,n){let o=e.winnerColor();return o===void 0?0:o===n?2:-2}c(wA,"winnerState");function To(e,n,o){return n.winnerColor()!==void 0||n.activeColor!==G(o)?!1:$p(e,n,o,se(n))}c(To,"opponentCanWinImmediately");function $p(e,n,o,t){let r=G(o);if(n.winnerColor()!==void 0||n.activeColor!==r)return!1;let a=V(Ie,He(n,r));return a<=0||bs(e,n,r,t)>=a}c($p,"opponentCanWinImmediatelyWithSearchHash");function ve(e,n,o){return Op(e,n,on(n),o)}c(ve,"ownDrainerSafetyScore");function eo(e,n){for(let[o,t]of e.entries()){let r=H(t);if(r?.color===n&&r.kind===A.Drainer&&!j(r))return o}}c(eo,"findAwakeDrainerLocation");function AC(e,n,o,t){let r=eo(n,o);if(r===void 0)return!1;let a=n.get(r);return a?.kind==="mon-with-mana"&&qe(a.mana,t)&&us(e,n,o,r)}c(AC,"ownDrainerCarriesSafeMana");function Pn(e,n,o){return e.execution.session.checkpoint()?Vn:vC(e,n,o)}c(Pn,"evaluateStateUtilityWithSearchHash");function vC(e,n,o){let{execution:t,start:r,perspective:a,config:i}=e,s=pC(o,e.cacheIdentity),u=Jn(t).utility.get(s.stateHash,s.startTag,s.configFingerprint,s.startLow);if(u!==void 0)return t.session.checkpoint()?Vn:u;let p=He(n,a),l=He(r,a),m=V(p,l),d=Ua(t,n,a,o);if(t.session.cancelled)return Vn;let f=d.strategic.scorePathWindow.bestSteps,y=f===void 0?0:tn(Math.max(33-f,0),22),b=g(tn(d.strategic.immediateWindow.bestScore,110),tn(d.strategic.immediateWindow.multiPressure,18)),C={kind:"supermana"},h={kind:"regular",color:G(a)},k=AC(t,n.board,a,C)?380:0,M=AC(t,n.board,a,h)?300:0,R=G(a),w=bs(t,r,R,e.startHash);if(t.session.cancelled)return Vn;let O=n.activeColor===R?bs(t,n,R,o):d.opponentImmediateWindow;if(t.session.cancelled)return Vn;let x=V(w,O),_=ve(t,n.board,a),z=_<0?tn(Math.min(Math.abs(_),2147483647),900):0,$=V(Ie,He(r,R)),Z=V(Ie,He(n,R)),Y=$>0&&w>=$&&(Z<=0||O<Z),K=Hr(t,n,a,i.scoringWeights,!1);if(t.session.checkpoint())return Vn;let pe=wm({winState:wA(n,a),avoidImmediateLoss:$p(t,n,a,o)?-1:1,scoreDelta:V(g(g(g(g(tn(m,2400),y),b),k),M),z),denyGain:g(tn(x,220),Y?1500:0),drainerAttack:eo(n.board,G(a))===void 0?1:0,drainerSafety:_,evalScore:K});return t.session.cacheWriteAllowed&&Jn(t).utility.set(s.stateHash,pe,s.startTag,s.configFingerprint,s.startLow),pe}c(vC,"evaluateStateUtilityAfterCheckpoint");function Ur(e,n,o,t,r){return AA(Pn(e,n,o),t,r)}c(Ur,"quickOrderScoreWithSearchHash");function AA(e,n,o){let t=(()=>{switch(n){case S.ImmediateScore:return 1e3;case S.DenyOpponentWindow:return 960;case S.DrainerKill:return 920;case S.DrainerSafetyRecovery:return 860;case S.SpiritImpact:return 820;case S.SafeSupermanaProgress:return 760;case S.SafeOpponentManaProgress:return 720;case S.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(AA,"quickOrderScoreForUtility");function ec(e){let n=new Map;return e.forEach((o,t)=>{let r=yn(o);n.has(r)||n.set(r,t)}),n}c(ec,"allowedRankMap");function OC(e,n,o,t,r,a){let i=o.compiledChunks[0],s=i===void 0?void 0:Tr(n,i);return{rank:r,allowedLength:a,firstStepOpponentImmediateLoss:s!==void 0&&To(e,s,t),firstStepDrainerSafety:s===void 0?Math.trunc(-2147483648/4):ve(e,s.board,t)}}c(OC,"allowedHeadSelectionMeta");function EC(e,n){return g(e.evalScore,tn(Math.min(Math.max(n.allowedLength-n.rank,0),96),12))}c(EC,"allowedHeadRankAdjustedEval");function Yp(e,n,o,t){let r=ie(e.utility,o.utility);return r!==0||(r=ju([+!n.firstStepOpponentImmediateLoss,n.firstStepDrainerSafety],[+!t.firstStepOpponentImmediateLoss,t.firstStepDrainerSafety]),r!==0)||(r=an(EC(e.utility,n),EC(o.utility,t)),r!==0)?r:(r=Zn(e,o),r!==0?r:an(t.rank,n.rank))}c(Yp,"compareAllowedHeadPlans");var gA=Object.freeze({sortBranches:!1,allowedFirstLocations:void 0});function vA(e,n,o,t){let r=e.forkAndApplyEventsForSimulation(o);r!==void 0&&t.push({inputs:n.slice(),game:r.game,events:r.events})}c(vA,"appendAppliedTransition");function Xp(e,n,o,t,r,a,i){if(e.checkpoint()){t.length=0;return}if(t.length>=r||o.length>jt)return;let s=n.processInputWithStartOptions(o,!0,!1,a);if(s.kind==="invalid-input")return;if(s.kind==="events"){if(i.allowedFirstLocations!==void 0&&o.length===0)return;vA(n,o,s.events,t);return}if(s.kind==="locations-to-start-from"){let p=i.sortBranches?gm(s.locations,Am):s.locations;for(let l of p){if(t.length>=r)break;o.length===0&&i.allowedFirstLocations!==void 0&&i.allowedFirstLocations[J(l)]!==1||(o.push({kind:"location",location:l}),Xp(e,n,o,t,r,a,i),o.pop())}return}let u=i.sortBranches?gm(s.nextInputs,tC):s.nextInputs;for(let p of u){if(t.length>=r)break;let l=p.input;o.length===0&&i.allowedFirstLocations!==void 0&&(l.kind!=="location"||i.allowedFirstLocations[J(l.location)]!==1)||(o.push(l),Xp(e,n,o,t,r,a,i),o.pop())}}c(Xp,"collectTransitions");function IC(e){let n=new Uint8Array(121);for(let o of e)n[J(o)]=1;return n}c(IC,"locationMask");function EA(e,n){let o=e.inputs[0];return o?.kind==="location"&&n[J(o.location)]===1}c(EA,"startsAtMaskedLocation");function $m(e,n,o,t,r){if(r.length===0)return Do(e,n,o,t);let a=IC(r),i=Math.max(Math.floor(o/2),Math.max(0,o-60)),s=Math.max(0,o-i),u=[],p=[];for(let l of Do(e,n,o,t))if(EA(l,a)?u.length<i&&u.push(l):p.length<s&&p.push(l),u.length>=i&&(s===0||p.length>=s))break;return u.push(...p),u}c($m,"enumerateLegalTransitionsWithPriority");function Do(e,n,o,t=$n){if(e.session.checkpoint()||o<=0)return[];let r=[];return Xp(e.session,n.fork(),[],r,o,t,gA),e.session.cancelled?[]:(r.sort((a,i)=>lo(a.inputs,i.inputs)),r)}c(Do,"enumerateLegalTransitions");function Qp(e,n,o,t=$n,r){if(o<=0||e.session.checkpoint())return[];let a={sortBranches:!0,allowedFirstLocations:r===void 0?void 0:IC(r)},i=[];return Xp(e.session,n.fork(),[],i,o,t,a),e.session.checkpoint()?[]:i}c(Qp,"enumerateLegalTransitionsLexicographicBounded");function xC(e){let n=H(e);return n!==void 0&&(n.kind===A.Mystic||n.kind===A.Demon)}c(xC,"actorCanAttackFromItem");function Ym(e){let n=H(e);return n!==void 0&&!j(n)&&e.kind==="mon-with-consumable"&&e.consumable===q.Bomb}c(Ym,"actorCanBombFromItem");function OA(e,n){return e!==void 0&&te(e,n)===1}c(OA,"locationGuardedByAngel");function IA(e,n,o){let t=Sr(n,o),r=e.squareAt(t);return e.get(t)===void 0&&r.kind!=="supermana-base"&&r.kind!=="mon-base"}c(IA,"demonAttackPathClear");function Xm(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:H(a);if(i?.color!==G(r)||j(i)||OA(e.findAwakeAngel(G(r)),o))return!1;let s=H(t);return s?.kind===A.Mystic?Vo(n).some(u=>Oe(u,o)):s?.kind===A.Demon&&Ho(n).some(u=>Oe(u,o))&&IA(e,n,o)}c(Xm,"actorCanAttackTargetNow");function Qm(e,n,o,t,r){if(!hr(n).some(s=>Oe(s,o))||!Ym(t)||H(t)?.color!==r)return!1;let a=e.get(o),i=a===void 0?void 0:H(a);return i?.color===G(r)&&!j(i)}c(Qm,"actorCanBombTargetNow");function NC(e,n,o){let t=e.get(o),r=e.squareAt(o),a=H(n),i=Xn(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===A.Drainer;case"mon-base":return a?.kind===r.monKind&&a.color===r.color&&i===void 0&&ca(n)===void 0}}c(NC,"spiritDestinationAllowed");function DC(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&&!j(o.mon)}c(DC,"manaMoveDestinationAllowed");function _C(e,n){for(let[o,t]of e.entries())if(t.kind==="mana"&&qe(t.mana,n))return o}c(_C,"nearestWantedManaLocation");function jr(e,n,o){let t=e.get(n),r=t===void 0?void 0:H(t);if(r===void 0)return!1;let a=e.get(o);if(a!==void 0&&H(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(jr,"walkDestinationPlausible");function Kr(e,n){return e.activeColor===n?Math.max(ue-e.monsMovesCount,0):ue}c(Kr,"remainingMovesForColor");function On(e,n){let o=n===P.Black?0:10;return Math.min(te(e,{i:o,j:0}),te(e,{i:o,j:10}))}c(On,"distanceToNearestPool");function FC(e,n,o,t){let r=G(o);return ve(e,n.board,o)<0||gC(e,n,r)>0||He(n,r)>=Ie-2||n.board.get(t)?.kind==="mon-with-mana"||On(t,r)<=3}c(FC,"opponentDrainerKillIsHighValue");function qr(e){return e.kind!=="score-carry"?Em(e):`${Em(e)}:${e.wanted.kind}:${e.wanted.kind==="regular"?e.wanted.color:"s"}`}c(qr,"actionIdentity");function Zm(e,n,o){return e.some(t=>(t.kind==="mon-move"||t.kind==="demon-additional-step")&&Oe(t.from,n)&&Oe(t.to,o))}c(Zm,"movedActorTo");function xA(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===G(t)&&Oe(r.to,o))}c(xA,"attackEventsMatch");function NA(e,n,o){for(let[,t]of e.board.entries())if(t.kind==="mon-with-mana"&&t.mon.color===n&&!j(t.mon)&&qe(t.mana,o))return!0;return!1}c(NA,"actorOrSuccessorCarries");function Jm(e,n,o,t,r,a){switch(a.kind){case"walk":return Zm(t,a.actor,a.to)&&!DA(t);case"attack":return xA(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 Zm(t,a.actor,a.step)&&(t.some(i=>i.kind==="mana-scored"&&qe(i.mana,a.wanted))||NA(o,r,a.wanted));case"safety-retreat":return Zm(t,a.actor,a.to)&&ve(e,o.board,r)>ve(e,n.board,r)}}c(Jm,"transitionMatchesAction");function BC(e,n,o,t,r,a){let i=tn(V(He(o,r),He(n,r)),500);switch(i=g(i,tn(ve(e,o.board,r),180)),!To(e,n,r)&&To(e,o,r)&&(i=V(i,2200)),a.kind){case"walk":i=g(i,tn(te(a.actor,a.to),-20));break;case"attack":_A(t,r)&&(i=g(i,1600)),WC(t,r)&&(i=g(i,800));break;case"spirit-shift":t.some(s=>s.kind==="mana-scored")&&(i=g(i,1e3)),t.some(s=>s.kind==="spirit-target-move")&&(i=g(i,600));break;case"bomb":WC(t,r)&&(i=g(i,1e3));break;case"move-mana":i=g(i,tn(V(On(a.from,r),On(a.to,r)),160));break;case"score-carry":i=g(i,tn(De(a.wanted,r),200));break;case"safety-retreat":i=g(i,tn(ve(e,o.board,r),260));break}return i}c(BC,"transitionScore");function DA(e){return e.some(n=>n.kind==="mystic-action"||n.kind==="demon-action"||n.kind==="bomb-attack"||n.kind==="spirit-target-move")}c(DA,"eventsIncludeNonWalkAction");function WC(e,n){return e.some(o=>o.kind==="mon-fainted"&&o.mon.color===G(n))}c(WC,"eventsIncludeAnyFaint");function _A(e,n){return e.some(o=>o.kind==="mon-fainted"&&o.mon.color===G(n)&&o.mon.kind===A.Drainer)}c(_A,"eventsIncludeOpponentDrainerFaint");var ja,nf=class nf{constructor(n,o,t,r){L(this,ja);ne(this,"transitions");ne(this,"limit");ne(this,"priorityLocations");if(F(this,ja,n),this.limit=FA(r),n.session.checkpoint()){this.transitions=[],this.priorityLocations=[];return}let a=new Set,i=[];for(let s of t)for(let u of BA(s.action)){let p=J(u);a.has(p)||(a.add(p),i.push(u))}this.priorityLocations=i,this.transitions=$m(n,o,this.limit,$n,i),n.session.checkpoint()&&(this.transitions=[])}expand(n){if(T(this,ja).session.checkpoint()||this.transitions.length<this.limit||this.limit>=ms)return!1;let o=Math.min(this.limit*2,ms);if(o<=this.limit)return!1;let t=$m(T(this,ja),n,o,$n,this.priorityLocations);return T(this,ja).session.checkpoint()?!1:(this.transitions=t,this.limit=o,!0)}};ja=new WeakMap,c(nf,"TransitionCompilePool");var sr=nf;function FA(e){return Math.min(Math.max(Math.max(e.ownSeedCap,e.opponentSeedCap)*12,24),96)}c(FA,"compileLimitForConfig");function WA(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(WA,"directInputsForAction");function GC(e,n,o,t){if(e.session.checkpoint())return;let r=WA(t),a=nn(n,r);if(!(a===void 0||e.session.checkpoint())&&Jm(e,n,a.game,a.events,o,t))return[a.game,r]}c(GC,"compileActionDirect");function LC(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||!Jm(e,n,s.game,s.events,o,t))continue;let u=BC(e,n,s.game,s.events,o,t),p=a===void 0?void 0:r[a[1]];(a===void 0||u>a[0]||u===a[0]&&p!==void 0&&lo(s.inputs,p.inputs)<0)&&(a=[u,i])}return a}c(LC,"bestTransitionForAction");function VC(e,n,o,t,r){let a=LC(e,n,o,t,r.transitions);if(a===void 0&&r.expand(n)&&(a=LC(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(VC,"compileActionFromPoolFallback");function ks(e,n,o,t,r){let a=GC(e,n,o,t);return a!==void 0?a:e.session.cancelled?void 0:VC(e,n,o,t,r)}c(ks,"compileActionFromPool");function ef(e,n,o,t,r){let a=GC(e,n,o,t);if(a!==void 0)return a;if(e.session.cancelled)return;let i=new sr(e,n,[{family:S.ManaTempo,action:t,priority:0}],r);return VC(e,n,o,t,i)}c(ef,"compileAction");function BA(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(BA,"actionPriorityLocations");function of(e,n,o){return UC(e,n,o,{kind:"supermana"},S.SafeSupermanaProgress,8900)}c(of,"safeSupermanaProgressSeeds");function tf(e,n,o){return UC(e,n,o,{kind:"regular",color:G(o)},S.SafeOpponentManaProgress,8600)}c(tf,"safeOpponentManaProgressSeeds");function HC(e,n,o,t,r){if(e.session.checkpoint())return{progressSteps:void 0,scorePathBestSteps:void 0,sameTurnScoreWindowValue:0};let a=G(o),i=t.kind==="supermana"?Ir|xt:t.color===a?xr:0,s=No(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:xp(e,n.board,o),sameTurnScoreWindowValue:s.sameTurnScoreWindowValue}}c(HC,"safeProgressExactSnapshot");function UC(e,n,o,t,r,a){if(e.session.checkpoint())return[];let i=eo(n.board,o);if(i===void 0)return[];let s=[],u=HC(e,n,o,t,se(n));if(e.session.cancelled)return[];let p=ve(e,n.board,o),l=Dp(e,n,o,i,t),m=l?.[0];if(m!==void 0&&s.push({family:r,action:{kind:"score-carry",actor:i,wanted:t,step:m},priority:a+Math.max(22-(l?.length??0),0)*120}),e.session.checkpoint())return[];if(Kr(n,o)>0){let f=_C(n.board,t);if(f!==void 0){let y=te(i,f),b=u.progressSteps??33,C=u.scorePathBestSteps??33;for(let h of fe(i)){if(e.session.checkpoint())return[];if(!jr(n.board,i,h))continue;let k=nn(n,[{kind:"location",location:i},{kind:"location",location:h}]);if(k===void 0||To(e,k.game,o))continue;let M=HC(e,k.game,o,t,se(k.game));if(e.session.cancelled)return[];let w=ve(e,k.game.board,o),v=M.progressSteps??33,O=M.scorePathBestSteps??33,E=v<b||v<=b&&O<C;if(!E&&w<p)continue;let x=a-180+Math.max(y-te(h,f),0)*110+(w-p)*120;E&&(x+=(b-v)*220+(C-O)*180),t.kind==="supermana"&&M.sameTurnScoreWindowValue>0&&(x+=M.sameTurnScoreWindowValue*260),s.push({family:r,action:{kind:"walk",actor:i,to:h},priority:x})}}}let d=n.board.get(i);if(d?.kind==="mon-with-mana"&&qe(d.mana,t)){let f=On(i,o);for(let y of fe(i)){let b=On(y,o);b>f||s.push({family:r,action:{kind:"score-carry",actor:i,wanted:t,step:y},priority:a+Math.max(f-b,0)*150})}}return s}c(UC,"safeProgressSeeds");function rf(e,n,o){let t=eo(n.board,o);if(t===void 0)return[];let r=ve(e,n.board,o),a=[];for(let i of fe(t)){let s=nn(n,[{kind:"location",location:t},{kind:"location",location:i}]);if(s===void 0)continue;let u=ve(e,s.game.board,o);u<=r||a.push({family:S.DrainerSafetyRecovery,action:{kind:"safety-retreat",actor:t,to:i},priority:8300+Math.abs(r)*220+(u-r)*260})}return a}c(rf,"safetyRecoverySeeds");function nc(e,n,o){if(Kr(n,o)<=0)return[];let t=[],r=ve(e,n.board,o),a=eo(n.board,o);if(a!==void 0){let i=On(a,o);for(let s of fe(a)){if(!jr(n.board,a,s))continue;let u=nn(n,[{kind:"location",location:a},{kind:"location",location:s}]);if(u===void 0||To(e,u.game,o))continue;let p=ve(e,u.game.board,o);if(p<r)continue;let l=On(s,o);t.push({family:p>r?S.DrainerSafetyRecovery:S.ManaTempo,action:{kind:"walk",actor:a,to:s},priority:7200+Math.max(i-l,0)*140+(p-r)*240})}}if(t.length!==0)return t;for(let[i,s]of n.board.entries()){let u=H(s);if(!(u?.color!==o||j(u)))for(let p of fe(i)){if(!jr(n.board,i,p))continue;let l=nn(n,[{kind:"location",location:i},{kind:"location",location:p}]);l===void 0||To(e,l.game,o)||t.push({family:S.ManaTempo,action:{kind:"walk",actor:i,to:p},priority:6800})}}return t}c(nc,"fallbackWalkSeeds");function LA(e,n,o){let t=eo(n.board,o);if(t===void 0)return;let r=ve(e,n.board,o),a;for(let i of fe(t)){if(!jr(n.board,t,i))continue;let s=nn(n,[{kind:"location",location:t},{kind:"location",location:i}]);if(s===void 0)continue;let u=ve(e,s.game.board,o);if(u<=r)continue;let p=8300+Math.abs(r)*220+(u-r)*260;a=a===void 0?p:Math.max(a,p)}return a}c(LA,"bestFollowUpSafetyRecoveryPriority");function jC(e,n,o,t){if(t.mode!==je.Production||Kr(n,o)<=0)return[];let r=eo(n.board,o);if(r===void 0)return[];let a=ve(e,n.board,o),i=On(r,o),s=[];for(let u of fe(r)){if(!jr(n.board,r,u))continue;let p=nn(n,[{kind:"location",location:r},{kind:"location",location:u}]);if(p===void 0||To(e,p.game,o))continue;let l=ve(e,p.game.board,o),m=On(u,o);if(l>=a||m>=i)continue;let d=LA(e,p.game,o);d!==void 0&&s.push({family:S.ManaTempo,action:{kind:"walk",actor:r,to:u},priority:8e3+Math.max(i-m,0)*260+Math.trunc(d/20)-Math.max(a-l,0)*120})}return s}c(jC,"riskyRecoverySetupSeeds");function kn(e,n){return e===void 0||e.includes(n)}c(kn,"familyAllowed");function af(e,n){let o=[];for(let[t,r]of e.board.entries()){if(r.kind!=="mon-with-mana"||r.mon.color!==n||j(r.mon))continue;let a=On(t,n);for(let i of fe(t)){let s=On(i,n);s>a||o.push({family:S.ImmediateScore,action:{kind:"score-carry",actor:t,wanted:r.mana,step:i},priority:9800+Math.max(a-s,0)*180+De(r.mana,n)*120})}}return o}c(af,"immediateScoreSeeds");function sf(e,n,o){let t=G(o),r=bs(e,n,t,se(n));if(r<=0&&!To(e,n,o))return[];let a=KC(n,o,S.DenyOpponentWindow,9400+r*240),i=eo(n.board,o);if(i===void 0)return a;let s=ve(e,n.board,o),u=On(i,o);for(let p of fe(i))On(p,o)>u+1&&s>=0||a.push({family:S.DenyOpponentWindow,action:{kind:"safety-retreat",actor:i,to:p},priority:9100+Math.abs(s)*220});return a}c(sf,"denyWindowSeeds");function uf(e,n,o){let t=eo(n.board,G(o));return t===void 0||!FC(e,n,o,t)?[]:KC(n,o,S.DrainerKill,9e3)}c(uf,"drainerKillSeeds");function KC(e,n,o,t){let r=eo(e.board,G(n));if(r===void 0)return[];let a=[],i=e.playerCanUseAction(),s=Kr(e,n);for(let[u,p]of e.board.entries()){let l=H(p);if(l?.color!==n||j(l))continue;let m=i&&xC(p),d=i&&Ym(p);if(m&&Xm(e.board,u,r,p,n)&&a.push({family:o,action:{kind:"attack",actor:u,target:r},priority:t}),d&&Qm(e.board,u,r,p,n)&&a.push({family:o,action:{kind:"bomb",actor:u,target:r},priority:t-80}),!(s<=0||!m&&!d)){for(let f of fe(u))if(!(te(f,r)>=te(u,r))){if(o===S.DrainerKill){let y=e.board.fork();if(y.delete(u),y.set(f,p),!(m&&Xm(y,f,r,p,n)||d&&Qm(y,f,r,p,n)))continue}a.push({family:o,action:{kind:"walk",actor:u,to:f},priority:t-200+(te(u,r)-te(f,r))*80})}}}return a}c(KC,"attackFamilySeeds");function zr(e,n,o,t,r){let a=0;return e&&(a|=Ir),n&&(a|=xr),o&&(a|=Qi),t&&(a|=Zi),r&&(a|=xt),a}c(zr,"tacticalProjectionFlags");function GA(e){switch(e){case"safe-progress-only":return zr(!0,!1,!1,!1,!1);case"opponent-progress-only":return zr(!1,!0,!1,!1,!1);case"drainer-opportunity":return zr(!1,!0,!1,!0,!1);case"spirit-score-only":return zr(!1,!1,!0,!1,!1);case"spirit-opportunity":return zr(!0,!1,!0,!1,!1)}}c(GA,"tacticalProjectionProfileFlags");function VA(e,n,o,t,r){let a=n,i=o&&e!==A.Spirit,s=t,u=r&&e===A.Spirit,p=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:zr(a,i,u,r&&i,a||u),projectionProfile:p,needsScoreWindow:a||u}}c(VA,"oracleWalkActorCapabilities");function qC(e,n,o,t){let r=Da(e,n,t).colorSummary(o).spirit;return[r.nextTurnSetupGain,r.utility]}c(qC,"strategicSpiritSignalWithSearchHash");function cf(e,n,o,t,r,a){if(e.session.checkpoint()||Kr(n,o)<=0)return[];let i=kn(r,S.SafeSupermanaProgress),s=kn(r,S.SafeOpponentManaProgress),u=kn(r,S.DrainerSafetyRecovery),p=kn(r,S.SpiritImpact);if(!i&&!s&&!u&&!p)return[];let l=t.turn,m=[0,0];if(p&&(m=qC(e,n,o,se(n))),e.session.checkpoint())return[];let d=i||u?ve(e,n.board,o):0,f=l.safeSupermanaProgressSteps??33,y=l.safeOpponentManaProgressSteps??33,b=eo(n.board,o),C=[],h=a.enableLazyOracleScoreWindowProjection;for(let[k,M]of n.board.entries()){if(e.session.checkpoint())return[];let R=H(M);if(R?.color!==o||j(R)||b!==void 0&&Oe(k,b))continue;let w=VA(R.kind,i,s,u,p);if(!(!w.canEmitSupermana&&!w.canEmitOpponentMana&&!w.canEmitSafety&&!w.canEmitSpirit))for(let v of fe(k)){if(e.session.checkpoint())return[];if(!jr(n.board,k,v))continue;let O=nn(n,[{kind:"location",location:k},{kind:"location",location:v}]);if(O===void 0||To(e,O.game,o))continue;let E=w.canEmitSpirit,x=h?w.projectionProfile!==void 0:w.tacticalFlags!==0,_=h&&w.needsScoreWindow,z=x||_||E?se(O.game):void 0,$;if(x){if(z===void 0)throw new Error("oracle walk projection requires a state hash");let Ze=w.tacticalFlags;if(h){if(w.projectionProfile===void 0)throw new Error("lazy oracle projection requires a profile");Ze=GA(w.projectionProfile)}$=No(e,O.game,o,z,Ze)}if(e.session.cancelled)return[];let Z=[0,0];if(E){if(z===void 0)throw new Error("oracle Spirit analysis requires a state hash");Z=qC(e,O.game,o,z)}let Y=w.canEmitSupermana||w.canEmitSafety?ve(e,O.game.board,o):d,K=$===void 0?f:$.safeSupermanaProgressSteps??33,pe=$===void 0?y:$.safeOpponentManaProgressSteps??33,Me,Ee=c(()=>{if(Me!==void 0)return Me;if(h){if(z===void 0)throw new Error("oracle score-window projection requires a state hash");Me=No(e,O.game,o,z,xt).sameTurnScoreWindowValue}else Me=$?.sameTurnScoreWindowValue??0;return Me},"loadAfterScoreWindow");w.canEmitSupermana&&K<f&&C.push({family:S.SafeSupermanaProgress,action:{kind:"walk",actor:k,to:v},priority:8250+(f-K)*240+(Y-d)*100+Ee()*160});let Qe=w.canEmitOpponentMana&&pe<y,fn=p&&(w.canEmitSpirit||w.canEmitOpponentMana)&&($?.spiritAssistedDenialValue??0)>l.spiritAssistedDenialValue;if(Qe||fn){let Ze=R.kind===A.Spirit?S.SpiritImpact:S.SafeOpponentManaProgress;kn(r,Ze)&&C.push({family:Ze,action:{kind:"walk",actor:k,to:v},priority:8e3+(Qe?Math.max(y-pe,0)*240:0)+(fn?Math.max(($?.spiritAssistedDenialValue??0)-l.spiritAssistedDenialValue,0)*180:0)})}if(w.canEmitSpirit){let Ze=Z[0]-m[0],Ln=Z[1]-m[1],Je=Ze>0||Ln>0,St=($?.spiritAssistedScoreValue??0)>l.spiritAssistedScoreValue,Ut=h?!St&&!Je&&Ee()>l.sameTurnScoreWindowValue:($?.sameTurnScoreWindowValue??0)>l.sameTurnScoreWindowValue;if(St||Ut||Je){let Be=($?.spiritAssistedScoreValue??0)-l.spiritAssistedScoreValue,ui=Ee()-l.sameTurnScoreWindowValue;C.push({family:S.SpiritImpact,action:{kind:"walk",actor:k,to:v},priority:8100+Be*200+ui*220+Ze*320+Ln*180})}}w.canEmitSafety&&Y>d&&C.push({family:S.DrainerSafetyRecovery,action:{kind:"walk",actor:k,to:v},priority:8050+(Y-d)*260})}}return C}c(cf,"oracleWalkSeeds");function zC(e,n){let o=e??33,t=n??33;return t>=o?0:(o-t)*220}c(zC,"progressPriorityBonus");function pf(e,n,o,t){if(e.session.checkpoint()||!t.enableSpiritFamily||!n.playerCanUseAction())return[];let r=zr(!0,!0,!0,!0,!0),a=No(e,n,o,se(n),r);if(e.session.checkpoint())return[];let i=ve(e,n.board,o),s=[];for(let[u,p]of n.board.entries()){if(e.session.checkpoint())return[];let l=H(p);if(!(l?.color!==o||l.kind!==A.Spirit||j(l)||n.board.squareAt(u).kind==="mon-base"))for(let m of Uo(u)){if(e.session.checkpoint())return[];let d=n.board.get(m);if(!(d===void 0||!bt(d)))for(let f of fe(m)){if(e.session.checkpoint())return[];if(!NC(n.board,d,f))continue;let y=nn(n,[{kind:"location",location:u},{kind:"location",location:m},{kind:"location",location:f}]);if(y===void 0)continue;let b=7600;H(d)?.color===G(o)&&(b+=400);let h=Xn(d);h?.kind==="supermana"&&(b+=600),h?.kind==="regular"&&h.color===G(o)&&(b+=460);let k=No(e,y.game,o,se(y.game),r);if(e.session.checkpoint())return[];k.sameTurnScoreWindowValue>a.sameTurnScoreWindowValue&&(b+=(k.sameTurnScoreWindowValue-a.sameTurnScoreWindowValue)*280),k.spiritAssistedScore&&(b+=900+k.spiritAssistedScoreValue*120),k.safeSupermanaProgress&&(b+=700+zC(a.safeSupermanaProgressSteps,k.safeSupermanaProgressSteps)),k.safeOpponentManaProgress&&(b+=760+zC(a.safeOpponentManaProgressSteps,k.safeOpponentManaProgressSteps)),k.spiritAssistedDenial&&(b+=820+k.spiritAssistedDenialValue*140);let M=ve(e,y.game.board,o);M>i&&(b+=(M-i)*160),b+=Math.max(11-te(f,m),0)*20,s.push({family:S.SpiritImpact,action:{kind:"spirit-shift",actor:u,target:m,destination:f},priority:b})}}}return s.sort((u,p)=>{let l=an(p.priority,u.priority);return l!==0?l:La(u.action,p.action)}),s.slice(0,12)}c(pf,"spiritImpactSeeds");function lf(e,n){if(!e.playerCanMoveMana()||eo(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 fe(t)){if(!DC(e.board,a))continue;let i=On(t,n)-On(a,n),s=G(n),u=On(t,s)-On(a,s);i<=0||u>0||o.push({family:S.ManaTempo,action:{kind:"move-mana",from:t,to:a},priority:6900+i*200-Math.max(u,0)*200})}return o}c(lf,"manaTempoSeeds");function HA(e){switch(e){case S.ImmediateScore:return Rn.ImmediateScore;case S.DenyOpponentWindow:return Rn.TacticalDeny;case S.DrainerKill:return Rn.DrainerKill;case S.SafeSupermanaProgress:return Rn.SafeSupermanaProgress;case S.SafeOpponentManaProgress:return Rn.SafeOpponentManaProgress;case S.DrainerSafetyRecovery:return Rn.DrainerSafetyRecovery;case S.SpiritImpact:return Rn.SpiritImpact;case S.ManaTempo:return Rn.ManaTempo}}c(HA,"opportunityKindForFamily");function UA(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(UA,"opportunityBudgetForAction");function jA(e,n){return n.monMovesNeeded<=e.remainingMonMoves&&(!n.needsAction||e.canUseAction)&&(!n.needsManaMove||e.canMoveMana)}c(jA,"budgetAllowsOpportunity");function KA(e,n){let o=33,t=e.family===S.SafeSupermanaProgress?Math.max(o-(n.delta.safeSupermanaProgressSteps??o),0):0,r=e.family===S.SafeOpponentManaProgress?Math.max(o-(n.delta.safeOpponentManaProgressSteps??o),0):0;return{sameTurnScoreWindowGain:n.delta.sameTurnScoreWindowValue,spiritGain:e.family===S.SpiritImpact?Math.max(n.delta.spiritGain,1):0,opponentWindowDenyGain:e.family===S.DenyOpponentWindow||e.family===S.DrainerKill?Math.max(n.delta.opponentWindowDenyGain,1):0,drainerAttack:(e.family===S.DrainerKill||e.family===S.DenyOpponentWindow)&&n.delta.drainerAttackAvailable,drainerSafetyDelta:e.family===S.DrainerSafetyRecovery?Math.max(-n.delta.drainerSafety,0):0,supermanaProgressGain:t,opponentManaProgressGain:r}}c(KA,"opportunityDeltaForSeed");function qA(e,n){return{kind:HA(e.family),family:e.family,action:e.action,priority:e.priority,budget:UA(e.action),delta:KA(e,n)}}c(qA,"turnOpportunityFromSeed");function oc(e,n){let o=(()=>{switch(e.kind){case Rn.ImmediateScore:return 12e3;case Rn.TacticalDeny:return 11400;case Rn.DrainerKill:return 11200;case Rn.DrainerSafetyRecovery:return 10400;case Rn.SpiritImpact:return 9800;case Rn.SafeSupermanaProgress:return 9400;case Rn.SafeOpponentManaProgress:return 9200;case Rn.ManaTempo:return 8e3}})(),t=e.kind===Rn.ImmediateScore||e.kind===Rn.TacticalDeny||e.kind===Rn.DrainerKill||e.kind===Rn.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(oc,"opportunityScore");function tc(e,n,o,t,r,a){if(e.session.checkpoint()||n.activeColor!==o)return[];let i=ds(e,n,o,se(n));if(e.session.checkpoint())return[];let s=i.opponentCanWinImmediately||i.delta.drainerSafety<0,u=[];if(kn(a,S.ImmediateScore)&&u.push(...af(n,o)),e.session.checkpoint())return[];if(kn(a,S.DenyOpponentWindow)&&u.push(...sf(e,n,o)),e.session.checkpoint())return[];if(kn(a,S.DrainerKill)&&u.push(...uf(e,n,o)),e.session.checkpoint())return[];if(kn(a,S.SafeSupermanaProgress)&&u.push(...of(e,n,o)),e.session.checkpoint())return[];if(kn(a,S.SafeOpponentManaProgress)&&u.push(...tf(e,n,o)),e.session.checkpoint())return[];if(kn(a,S.DrainerSafetyRecovery)&&u.push(...rf(e,n,o)),e.session.checkpoint())return[];if(kn(a,S.ManaTempo)&&u.push(...jC(e,n,o,t)),e.session.checkpoint())return[];if((kn(a,S.SafeSupermanaProgress)||kn(a,S.SafeOpponentManaProgress)||kn(a,S.DrainerSafetyRecovery)||kn(a,S.SpiritImpact))&&u.push(...cf(e,n,o,i,a,t)),e.session.checkpoint())return[];if(kn(a,S.SpiritImpact)&&u.push(...pf(e,n,o,t)),e.session.checkpoint())return[];if(kn(a,S.ManaTempo)&&u.push(...lf(n,o)),e.session.checkpoint())return[];if((kn(a,S.ManaTempo)||kn(a,S.DrainerSafetyRecovery))&&u.push(...nc(e,n,o).filter(f=>kn(a,f.family))),e.session.checkpoint())return[];let p=new Map;for(let f of u){if(e.session.checkpoint())return[];let y=qA(f,i);if(!jA(i.budget,y.budget)||s&&y.kind===Rn.ManaTempo&&!y.delta.drainerAttack&&y.delta.drainerSafetyDelta<=0)continue;let b=p.get(y.family)??[];b.push(y),p.set(y.family,b)}for(let f of p.values())f.sort((y,b)=>{let C=an(oc(b,s),oc(y,s));return C!==0?C:La(y.action,b.action)});let l=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 b of tr){let C=p.get(b);if(C===void 0)continue;let h=l.get(b)??0;for(;h<C.length;){let k=C[h];if(h+=1,k!==void 0&&!m.has(qr(k.action))){m.add(qr(k.action)),d.push(k),y=!0;break}}if(l.set(b,h),d.length>=Math.max(r,1))return d}if(!y)break}return d}c(tc,"discoverTurnOpportunities");function Ts(e,n,o,t,r){if(e.session.checkpoint()||n.activeColor!==o)return[];if(t.mode===je.Production){let l=tc(e,n,o,t,r).map(({family:m,action:d,priority:f})=>({family:m,action:d,priority:f}));return e.session.checkpoint()?[]:l}let a=[];if(a.push(...af(n,o)),e.session.checkpoint())return[];if(a.push(...sf(e,n,o)),e.session.checkpoint())return[];if(a.push(...uf(e,n,o)),e.session.checkpoint())return[];if(a.push(...of(e,n,o)),e.session.checkpoint())return[];if(a.push(...tf(e,n,o)),e.session.checkpoint())return[];if(a.push(...rf(e,n,o)),e.session.checkpoint())return[];if(a.push(...cf(e,n,o,ds(e,n,o,se(n)),void 0,t)),e.session.checkpoint())return[];if(a.push(...pf(e,n,o,t)),e.session.checkpoint())return[];if(a.push(...lf(n,o)),e.session.checkpoint())return[];let i=new Map;for(let l of a){if(e.session.checkpoint())return[];let m=i.get(l.family)??[];m.push(l),i.set(l.family,m)}for(let l of i.values())l.sort((m,d)=>{let f=an(d.priority,m.priority);return f!==0?f:La(m.action,d.action)});let s=new Set,u=new Map,p=[];for(let l=0;l<Math.max(t.perNodeFamilyCap,1);l+=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 b=f[y];if(y+=1,b!==void 0&&!s.has(qr(b.action))){s.add(qr(b.action)),p.push(b),m=!0;break}}if(u.set(d,y),p.length>=Math.max(r,1))return p}if(!m)break}return p}c(Ts,"generateActionSeeds");function df(e){return Math.min(Math.max(e.stepCap,1),6)}c(df,"bundleChunkCapForConfig");function Jp(e){return Math.min(Math.max(e.stepCap,1),4)}c(Jp,"bundlePlanCapForConfig");function mf(e,n){return Co(n)<Co(e)?n:e}c(mf,"mergePlanFamily");function zA(e,n,o){if(o===n||o===e)return!0;switch(e){case S.ImmediateScore:return o===S.ImmediateScore||o===S.DrainerSafetyRecovery||o===S.SafeSupermanaProgress||o===S.SafeOpponentManaProgress;case S.DenyOpponentWindow:case S.DrainerKill:return o===S.ImmediateScore||o===S.DenyOpponentWindow||o===S.DrainerKill||o===S.DrainerSafetyRecovery||o===S.SafeSupermanaProgress||o===S.SafeOpponentManaProgress;case S.DrainerSafetyRecovery:return o===S.ImmediateScore||o===S.DrainerSafetyRecovery||o===S.SafeSupermanaProgress||o===S.SafeOpponentManaProgress||o===S.ManaTempo;case S.SpiritImpact:return o===S.ImmediateScore||o===S.DenyOpponentWindow||o===S.SpiritImpact||o===S.SafeSupermanaProgress||o===S.SafeOpponentManaProgress||o===S.DrainerSafetyRecovery;case S.SafeSupermanaProgress:case S.SafeOpponentManaProgress:return o===S.ImmediateScore||o===S.DrainerSafetyRecovery||o===S.SafeSupermanaProgress||o===S.SafeOpponentManaProgress||o===S.DenyOpponentWindow||o===S.SpiritImpact;case S.ManaTempo:return o===S.ImmediateScore||o===S.DrainerSafetyRecovery||o===S.SafeSupermanaProgress||o===S.SafeOpponentManaProgress||o===S.SpiritImpact||o===S.ManaTempo}}c(zA,"macroFollowupFamilyAllowed");function Zp(e,n,o){let t=0;return o===n&&(t+=420),o===e&&(t+=220),o===S.ImmediateScore&&(t+=640),e===S.SpiritImpact&&(o===S.SpiritImpact||o===S.ImmediateScore||o===S.SafeSupermanaProgress||o===S.SafeOpponentManaProgress)&&(t+=180),(e===S.SafeSupermanaProgress||e===S.SafeOpponentManaProgress)&&(o===S.SafeSupermanaProgress||o===S.SafeOpponentManaProgress||o===S.ImmediateScore)&&(t+=180),e===S.DrainerSafetyRecovery&&(o===S.DrainerSafetyRecovery||o===S.SafeSupermanaProgress||o===S.SafeOpponentManaProgress||o===S.ImmediateScore)&&(t+=160),t}c(Zp,"macroFollowupFamilyBonus");function ff(e,n){return tr.filter(o=>zA(e,n,o))}c(ff,"macroFollowupFamilies");function XC(e,n,o,t,r,a,i,s){let u=Ua(e,n,t,o),p=u.opportunity.opponentCanWinImmediately||u.opportunity.delta.drainerSafety<0,l=new Set(s.map(qr)),m=tc(e,n,t,r,Math.max(Math.max(r.ownSeedCap,r.perNodeFamilyCap*3),8),ff(a,i)).filter(d=>!l.has(qr(d.action)));return m.sort((d,f)=>{let y=an(oc(f,p)+Zp(a,i,f.family),oc(d,p)+Zp(a,i,d.family));return y!==0?y:La(d.action,f.action)}),m.slice(0,Math.max(Math.max(r.perNodeFamilyCap,1)*2,4))}c(XC,"macroFollowupSeedCandidates");function $C(e,n){let o=33;return Math.max((e??o)-(n??o),0)}c($C,"progressStepGain");function yf(e,n,o,t,r,a){if(e.session.checkpoint())return YC();let i=Ua(e,o,r,t);return e.session.cancelled?YC():{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:ve(e,o.board,r)-ve(e,n.board,r),supermanaProgressGain:$C(a.opportunity.delta.safeSupermanaProgressSteps,i.opportunity.delta.safeSupermanaProgressSteps),opponentManaProgressGain:$C(a.opportunity.delta.safeOpponentManaProgressSteps,i.opportunity.delta.safeOpponentManaProgressSteps)}}c(yf,"macroOpportunityDelta");function YC(){return{sameTurnScoreWindowGain:0,spiritGain:0,opponentWindowDenyGain:0,drainerAttack:!1,drainerSafetyDelta:0,supermanaProgressGain:0,opponentManaProgressGain:0}}c(YC,"emptyOpportunityDelta");function Sf(e,n,o,t,r,a){return g(a,Math.max(-2147483648,Math.min(2147483647,Math.trunc(Ur(e,n,o,t,r)/1024))))}c(Sf,"macroPriorityFromState");function Rs(e,n){return db(Wu(Bu(e,n),Vu),11)}c(Rs,"macroSignatureMix");function QC(e){let n=Fp;for(let o of e){let[t,r,a,i]=Uu(o);n=Rs(n,Fu(t)),n=Rs(n,Fu(J(r))),n=Rs(n,a===void 0?Jb:Fu(J(a))),n=Rs(n,i===void 0?eC:Fu(J(i)))}return n}c(QC,"macroSignatureForActions");function ZC(e,n){return Rs(Rs(e,n.endSnapshot.stateHash),n.signature)}c(ZC,"macroPlanSignature");function Ka(e,n){let o=an(n.order,e.order);return o!==0?o:Ba(e.node.compiledChunks,n.node.compiledChunks)}c(Ka,"compareOrderedNodes");function $A(e,n,o,t,r,a){if(e.session.checkpoint())return;let i=Ua(e,n,o,r.startHash);if(e.session.cancelled)return;let s=ef(e,n,o,a.action,t);if(s===void 0||e.session.checkpoint())return;let u=s[0],p=se(u),l=Pn(r,u,p);if(e.session.cancelled)return;let d=[a.action],f=[s[1]],y=a.family,b=new Io(fs);for(b.add(r.startHash),b.add(p);u.activeColor===o&&u.winnerColor()===void 0&&f.length<df(t);){if(e.session.checkpoint())return;let M=Ua(e,u,o,p);if(e.session.cancelled)return;let w=Pn(r,u,p);if(e.session.cancelled)return;let O=M.opportunity.delta.drainerSafety<0||w.drainerSafety<0||ve(e,u.board,o)<0,E;for(let x of XC(e,u,p,o,t,a.family,y,d)){if(e.session.checkpoint())return;let _=ef(e,u,o,x.action,t);if(_===void 0||e.session.checkpoint())continue;let[z,$]=_,Z=se(z);if(b.has(Z))continue;let Y=yf(e,u,z,Z,o,M),K=mf(y,x.family),pe=Pn(r,z,Z);if(e.session.cancelled)return;let Ee=Y.sameTurnScoreWindowGain+Y.spiritGain+Y.opponentWindowDenyGain+Math.max(Y.drainerSafetyDelta,0)+Y.supermanaProgressGain+Y.opponentManaProgressGain+(Y.drainerAttack?2:0),Qe=O&&(x.family===S.DrainerSafetyRecovery||x.family===S.ImmediateScore||x.family===S.SafeSupermanaProgress||x.family===S.SafeOpponentManaProgress);if(Ee<=0&&mo(pe,w)<=0&&z.activeColor===o&&!Qe)continue;let fn=O?(()=>{switch(x.family){case S.DrainerSafetyRecovery:return 960;case S.ImmediateScore:return 820;case S.SafeSupermanaProgress:case S.SafeOpponentManaProgress:return 360;case S.DenyOpponentWindow:case S.DrainerKill:return 220;case S.SpiritImpact:case S.ManaTempo:return 0}})():0,Ze=Sf(r,z,Z,K,f.length+1,x.priority+Zp(a.family,y,x.family))+fn+Y.sameTurnScoreWindowGain*280+Y.spiritGain*220+Y.opponentWindowDenyGain*240+Math.max(Y.drainerSafetyDelta,0)*200+Y.supermanaProgressGain*120+Y.opponentManaProgressGain*112+(Y.drainerAttack?820:0);(E===void 0||Ze>E.score||Ze===E.score&&Co(K)<Co(E.goalFamily))&&(E={score:Ze,opportunity:x,after:z,afterHash:Z,chunk:$,goalFamily:K})}if(E===void 0)break;d.push(E.opportunity.action),f.push(E.chunk),y=E.goalFamily,u=E.after,p=E.afterHash,b.add(p)}if(e.session.checkpoint())return;let C={stateHash:p},h=yf(e,n,u,p,o,i);if(!e.session.cancelled)return{headFamily:a.family,goalFamily:y,priority:Sf(r,u,p,y,f.length,a.priority),delta:h,actions:d,compiledChunks:f,endGame:u.fork(),endSnapshot:C,headUtility:l,signature:QC(d)}}c($A,"buildMacroFromHeadOpportunity");function JC(e,n,o,t,r,a,i){if(e.session.checkpoint())return[];let s=[],u=new Io(fs),p=tc(e,n,o,t,Math.max(Math.max(a,t.perNodeFamilyCap*3),8),i);if(e.session.checkpoint())return[];for(let l of p){if(e.session.checkpoint())return[];let m=$A(e,n,o,t,r,l);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((l,m)=>{let d=c(b=>b.priority+b.delta.sameTurnScoreWindowGain*280+b.delta.spiritGain*220+b.delta.opponentWindowDenyGain*240+b.delta.drainerSafetyDelta*220+b.delta.supermanaProgressGain*120+b.delta.opponentManaProgressGain*112+(b.delta.drainerAttack?820:0)+(df(t)-b.compiledChunks.length)*8,"score"),f=an(d(m),d(l));if(f!==0)return f;let y=an(Co(l.goalFamily),Co(m.goalFamily));return y!==0?y:Ba(l.compiledChunks,m.compiledChunks)}),e.session.checkpoint()?[]:s.slice(0,Math.max(a,1))}c(JC,"discoverMacroOpportunities");function YA(e,n){return{actions:n.actions,compiledChunks:n.compiledChunks,endGame:n.game.fork(),utility:Pn(e,n.game,n.stateHash),headUtility:n.headUtility,headFamily:n.headFamily,goalFamily:n.goalFamily,packageMeta:Fa}}c(YA,"macroNodeToPlan");function e0(e,n,o,t,r,a,i,s,u){if(e.session.checkpoint())return{status:oe.BudgetExceeded};let p=0,l=!1,m=Math.min(Math.max(s,1),Jp(t)),d=JC(e,n,o,t,r,a);if(e.session.checkpoint())return{status:oe.BudgetExceeded};if(d.length===0)return{status:oe.NoPlan};let f=new ge(fs),y=[];for(let h of d){if(e.session.checkpoint())return{status:oe.BudgetExceeded};if(p+=1,p>u){l=!0;break}let k=Ur(r,h.endGame,h.endSnapshot.stateHash,h.goalFamily,h.compiledChunks.length);if(e.session.cancelled)return{status:oe.BudgetExceeded};let M=f.get(h.endSnapshot.stateHash,0,h.signature);M!==void 0&&k<=M||(f.set(h.endSnapshot.stateHash,k,0,h.signature),y.push({order:k,node:{game:h.endGame,stateHash:h.endSnapshot.stateHash,actions:h.actions,compiledChunks:h.compiledChunks,headUtility:h.headUtility,headFamily:h.headFamily,goalFamily:h.goalFamily,signature:h.signature}}))}if(y.length===0)return{status:l?oe.BudgetExceeded:oe.NoPlan};y.sort(Ka),y=y.slice(0,Math.max(i,1));let b=[];for(let h=1;h<m;h+=1){if(e.session.checkpoint())return{status:oe.BudgetExceeded};let k=[],M=!1,R=!1;for(let w of y){let v=w.node;if(e.session.checkpoint())return{status:oe.BudgetExceeded};if(v.game.winnerColor()!==void 0||v.game.activeColor!==o){b.push(v);continue}let O=Ms(e,v.game,v.stateHash,o,t),E=JC(e,v.game,o,t,O,a,ff(v.headFamily,v.goalFamily));if(e.session.checkpoint())return{status:oe.BudgetExceeded};if(E.length===0){b.push(v);continue}let x=!1;for(let _ of E){if(e.session.checkpoint())return{status:oe.BudgetExceeded};if(p+=1,p>u){b.push(v),l=!0,R=!0;break}let z=[...v.actions,..._.actions],$=[...v.compiledChunks,..._.compiledChunks],Z=mf(v.goalFamily,_.goalFamily),Y=ZC(v.signature,_),K=Ur(r,_.endGame,_.endSnapshot.stateHash,Z,$.length);if(e.session.cancelled)return{status:oe.BudgetExceeded};let pe=f.get(_.endSnapshot.stateHash,0,Y);pe!==void 0&&K<=pe||(f.set(_.endSnapshot.stateHash,K,0,Y),k.push({order:K,node:{game:_.endGame,stateHash:_.endSnapshot.stateHash,actions:z,compiledChunks:$,headUtility:v.headUtility,headFamily:v.headFamily,goalFamily:Z,signature:Y}}),M=!0,x=!0)}if(R)break;x||b.push(v)}if(R){k.sort(Ka),y=k.slice(0,Math.max(i,1));break}if(!M||k.length===0){y=[];break}k.sort(Ka),y=k.slice(0,Math.max(i,1))}if(b.push(...y.map(({node:h})=>h)),e.session.checkpoint())return{status:oe.BudgetExceeded};if(b.length===0)return{status:l?oe.BudgetExceeded:oe.NoPlan};let C=b.map(h=>YA(r,h));return e.session.checkpoint()?{status:oe.BudgetExceeded}:(C.sort((h,k)=>-Zn(h,k)),{status:"ok",plans:C})}c(e0,"generateMacroPlans");function n0(e,n,o,t,r,a,i,s,u){if(e.session.checkpoint())return{status:oe.BudgetExceeded};let p=0,l=Ts(e,n,o,t,a);if(e.session.checkpoint())return{status:oe.BudgetExceeded};if(l.length===0)return{status:oe.NoPlan};let m=new sr(e,n,l,t);if(e.session.checkpoint())return{status:oe.BudgetExceeded};let d=new ge(fs),f=[];for(let C of l){if(e.session.checkpoint())return{status:oe.BudgetExceeded};let h=ks(e,n,o,C.action,m);if(h===void 0)continue;if(e.session.checkpoint())return{status:oe.BudgetExceeded};if(p+=1,p>u)return{status:oe.BudgetExceeded};let[k,M]=h,R=se(k),w=Ur(r,k,R,C.family,1),v=d.get(R);if(v!==void 0&&w<=v)continue;d.set(R,w);let O=Pn(r,k,R);if(e.session.cancelled)return{status:oe.BudgetExceeded};f.push({order:w,node:{game:k,stateHash:R,actions:[C.action],compiledChunks:[M],headUtility:O,headFamily:C.family,goalFamily:C.family}})}if(f.length===0)return{status:oe.NoPlan};f.sort(Ka),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:oe.BudgetExceeded};let h=[],k=!1;for(let M of f){let R=M.node;if(e.session.checkpoint())return{status:oe.BudgetExceeded};if(R.game.winnerColor()!==void 0||R.game.activeColor!==o){y.push(R);continue}let w=Ts(e,R.game,o,t,a);if(e.session.checkpoint())return{status:oe.BudgetExceeded};if(w.length===0){y.push(R);continue}let v=new sr(e,R.game,w,t);if(e.session.checkpoint())return{status:oe.BudgetExceeded};let O=!1;for(let E of w){if(e.session.checkpoint())return{status:oe.BudgetExceeded};let x=ks(e,R.game,o,E.action,v);if(x===void 0)continue;if(e.session.checkpoint())return{status:oe.BudgetExceeded};if(p+=1,p>u)return{status:oe.BudgetExceeded};let[_,z]=x,$=[...R.actions,E.action],Z=[...R.compiledChunks,z],Y=se(_),K=Ur(r,_,Y,R.goalFamily,$.length);if(e.session.cancelled)return{status:oe.BudgetExceeded};let pe=d.get(Y);pe!==void 0&&K<=pe||(d.set(Y,K),h.push({order:K,node:{game:_,stateHash:Y,actions:$,compiledChunks:Z,headUtility:R.headUtility,headFamily:R.headFamily,goalFamily:R.goalFamily}}),k=!0,O=!0)}O||y.push(R)}if(!k||h.length===0){f=[];break}h.sort(Ka),f=h.slice(0,Math.max(i,1))}if(y.push(...f.map(({node:C})=>C)),e.session.checkpoint())return{status:oe.BudgetExceeded};if(y.length===0)return{status:oe.NoPlan};let b=y.map(C=>({actions:[...C.actions],compiledChunks:C.compiledChunks.map(h=>h.slice()),endGame:C.game.fork(),utility:Pn(r,C.game,C.stateHash),headUtility:C.headUtility,headFamily:C.headFamily,goalFamily:C.goalFamily,packageMeta:Fa}));return e.session.checkpoint()?{status:oe.BudgetExceeded}:(b.sort((C,h)=>-Zn(C,h)),{status:"ok",plans:b})}c(n0,"generateTurnPlans");function qa(e,n,o,t,r,a,i,s,u){if(e.session.checkpoint())return{status:oe.BudgetExceeded};let p=t.mode===je.Production?e0(e,n,o,t,r,a,i,Math.min(s,Jp(t)),u):n0(e,n,o,t,r,a,i,s,u);return e.session.checkpoint()?{status:oe.BudgetExceeded}:p}c(qa,"generatePlansForMode");function o0(e,n){return Math.min(e,Math.min(Math.max(Math.max(n,0)*2,4),8))}c(o0,"replyShortlistLength");function $r(e,n,o,t,r){if(e.session.checkpoint())return Vn;let a=n.endGame,i=se(a),s=G(o);if(a.winnerColor()!==void 0||a.activeColor!==s)return Pn(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)},p=Ms(e,a,i,s,u),l=qa(e,a,s,u,p,u.ownSeedCap,u.ownBeam,u.stepCap,u.expansionCap);if(e.session.checkpoint())return Vn;if(l.status!=="ok")return Pn(r,a,i);let m=l.plans,d=o0(m.length,u.ownBeam),f=m[0];if(f===void 0)return Pn(r,a,i);let y=se(f.endGame),b=Pn(p,f.endGame,y);for(let v of m.slice(1,d)){if(e.session.checkpoint())return Vn;let O=se(v.endGame),E=Pn(p,v.endGame,O),x=mo(E,b);(x>0||x===0&&Ba(v.compiledChunks,f.compiledChunks)<0)&&(f=v,y=O,b=E)}let C=f.endGame;if(C.winnerColor()!==void 0||C.activeColor!==o||t.replySeedCap===0)return Pn(r,C,y);let h={...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=Ms(e,C,y,o,h),M=qa(e,C,o,h,k,h.ownSeedCap,h.ownBeam,h.stepCap,h.expansionCap);if(e.session.checkpoint())return Vn;if(M.status!=="ok")return Pn(r,C,y);let R=M.plans,w;for(let v of R.slice(0,o0(R.length,h.ownBeam))){let O=se(v.endGame),E=Pn(r,v.endGame,O);(w===void 0||mo(E,w)>0)&&(w=E)}return w??Pn(r,C,y)}c($r,"evaluatePlanWithReplies");function t0(e,n,o,t,r){if(e.session.checkpoint())return;let a=Ts(e,n,o,t,Math.min(Math.max(t.ownSeedCap,1)*2,ms));if(e.session.checkpoint()||(a.length===0&&(a=nc(e,n,o)),a.length===0||e.session.checkpoint()))return;let i=new sr(e,n,a,t),s;for(let u of a){if(e.session.checkpoint())return;let p=ks(e,n,o,u.action,i);if(p===void 0)continue;if(e.session.checkpoint())return;let[l,m]=p,d=se(l),f=Pn(r,l,d),y={actions:[u.action],compiledChunks:[m.slice()],endGame:l.fork(),utility:f,headUtility:f,headFamily:u.family,goalFamily:u.family,packageMeta:Fa};if(e.session.cancelled||(y.utility=$r(e,y,o,t,r),e.session.cancelled))return;(s===void 0||Zn(y,s)>0)&&(s=y)}return e.session.checkpoint()?void 0:s}c(t0,"fallbackSingleActionPlan");function r0(e,n,o,t,r,a){if(e.session.checkpoint())return;let i=Ts(e,n,o,t,Math.min(Math.max(t.ownSeedCap,1)*2,ms));if(e.session.checkpoint()||(i.length===0&&(i=nc(e,n,o)),e.session.checkpoint()||i.length===0))return;let s=ec(a),u=new sr(e,n,i,t);if(e.session.checkpoint())return;let p;for(let l of i){if(e.session.checkpoint())return;let m=ks(e,n,o,l.action,u);if(m===void 0)continue;if(e.session.checkpoint())return;let[d,f]=m,y=s.get(yn(f));if(y===void 0)continue;let b=se(d),C=Pn(r,d,b),h={actions:[l.action],compiledChunks:[f.slice()],endGame:d.fork(),utility:C,headUtility:C,headFamily:l.family,goalFamily:l.family,packageMeta:Fa};if(e.session.cancelled||(h.utility=$r(e,h,o,t,r),e.session.cancelled))return;let M={rank:y,allowedLength:a.length,firstStepOpponentImmediateLoss:$p(e,d,o,b),firstStepDrainerSafety:ve(e,d.board,o)};(p===void 0||Yp(h,M,p.plan,p.meta)>0)&&(p={plan:h,meta:M})}return e.session.checkpoint()?void 0:p?.plan}c(r0,"fallbackSingleActionPlanFromAllowedHeads");function hf(e,n,o,t){if(e.session.checkpoint())return{status:oe.BudgetExceeded};let r=Cs(e,n,o,t),a=qa(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:oe.BudgetExceeded};if(a.status===oe.BudgetExceeded)return a;let i;if(a.status==="ok")i=a.plans;else{let u=t0(e,n,o,t,r);return e.session.checkpoint()?{status:oe.BudgetExceeded}:u===void 0?{status:oe.NoPlan}:{status:"ok",plan:u}}if(t.mode===je.Production&&i.length>1){i.sort((d,f)=>-Zn(d,f));let u=Math.min(i.length,Math.min(Math.max(Math.max(t.ownBeam,1)*2,6),12)),p=t.ownBeam>=4?2:1,l=new Map,m=[];for(let d of i){let f=`${yn(d.compiledChunks[0]??[])}:${d.headFamily}:${d.goalFamily}`,y=l.get(f)??0;if(!(y>=p)&&(l.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:oe.BudgetExceeded};if(u.utility=$r(e,u,o,t,r),e.session.cancelled)return{status:oe.BudgetExceeded};(s===void 0||Zn(u,s)>0)&&(s=u)}return e.session.checkpoint()?{status:oe.BudgetExceeded}:s===void 0?{status:oe.NoPlan}:{status:"ok",plan:s}}c(hf,"buildBestPlan");function a0(e,n,o){if(e.session.checkpoint())return;let t=Im(Jn(e).bestPlan,o);if(t===void 0)return;let r=t.compiledChunks[0],a=r!==void 0&&Tr(n,r)!==void 0;if(!e.session.checkpoint()){if(!a){e.session.cacheWriteAllowed&&xm(Jn(e).bestPlan,o);return}return vm(t)}}c(a0,"cachedBestPlanIfLegal");function XA(e,n,o){if(e.session.checkpoint())return;let t=Lp(n,o),r=Im(Jn(e).continuation,t);if(r===void 0)return;let a=Tr(n,r)!==void 0;if(!e.session.checkpoint()){if(!a){e.session.cacheWriteAllowed&&xm(Jn(e).continuation,t);return}return r.slice()}}c(XA,"cachedStepIfLegal");function el(e,n,o){if(e.session.checkpoint())return;let t=XA(e,n,o);return e.session.checkpoint()?void 0:t}c(el,"turnEngineCachedStep");function i0(e,n,o,t,r){e.session.checkpoint()||!e.session.cacheWriteAllowed||Gp(Jn(e).continuation,Bp(n,o,t),r.slice())}c(i0,"turnEngineStoreCachedStep");function ot(e,n,o,t){if(e.session.checkpoint()||n.activeColor!==o)return;let r=Lp(n,t);if(lC(Jn(e).noPlan,r))return;let a=a0(e,n,r);if(a!==void 0)return e.session.checkpoint()?void 0:a;let i=hf(e,n,o,t);if(!e.session.checkpoint())switch(i.status){case oe.NoPlan:e.session.cacheWriteAllowed&&dC(Jn(e).noPlan,r);return;case oe.BudgetExceeded:return;case"ok":return e.session.cacheWriteAllowed?(Gp(Jn(e).bestPlan,r,vm(i.plan)),i.plan):void 0}}c(ot,"turnEngineCandidatePlan");function s0(e,n,o,t){if(e.session.checkpoint()||n.activeColor!==o)return;let r=hf(e,n,o,t);return e.session.checkpoint()||r.status!=="ok"?void 0:r.plan}c(s0,"turnEngineCandidatePlanLive");function QA(e,n,o,t,r,a,i){let s=ec(i),u;for(let p of a){if(e.session.checkpoint())return;let l=p.compiledChunks[0];if(l===void 0)continue;let m=s.get(yn(l));if(m===void 0)continue;if(p.utility=$r(e,p,o,t,r),e.session.cancelled)return;let d=OC(e,n,p,o,m,i.length);(u===void 0||Yp(p,d,u.plan,u.meta)>0)&&(u={plan:p,meta:d})}return u?.plan}c(QA,"bestPlanFromAllowedHeads");function ZA(e,n,o,t,r){if(e.session.checkpoint())return{status:oe.BudgetExceeded};let a=Cs(e,n,o,t),i=qa(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:oe.BudgetExceeded};if(i.status===oe.BudgetExceeded)return i;if(i.status==="ok"){let u=QA(e,n,o,t,a,i.plans,r);if(e.session.checkpoint())return{status:oe.BudgetExceeded};if(u!==void 0)return{status:"ok",plan:u}}let s=r0(e,n,o,t,a,r);return e.session.checkpoint()?{status:oe.BudgetExceeded}:s===void 0?{status:oe.NoPlan}:{status:"ok",plan:s}}c(ZA,"buildBestPlanFromAllowedHeads");function bf(e,n,o,t,r){if(e.session.checkpoint()||n.activeColor!==o||r.length===0)return;let a=ec(r),i=a0(e,n,Lp(n,t)),s=i?.compiledChunks[0];if(s!==void 0&&a.has(yn(s)))return i;let u=ZA(e,n,o,t,r);return e.session.checkpoint()||u.status!=="ok"?void 0:u.plan}c(bf,"turnEngineCandidatePlanFromAllowedHeads");function u0(e,n,o,t,r,a){if(e.session.checkpoint()||n.activeColor!==o||a.length===0)return;let i=new Set(a.map(yn)),s=el(e,n,r);if(s!==void 0&&i.has(yn(s)))return s;let u=bf(e,n,o,r,a);if(!(u===void 0||e.session.checkpoint())&&(p0(e,n,o,t,u,r),!e.session.cancelled))return u.compiledChunks[0]?.slice()}c(u0,"turnEngineNextInputsFromAllowedHeads");function c0(e,n,o,t,r,a){e.session.checkpoint()||p0(e,n,o,t,r,a)}c(c0,"turnEngineCommitPlan");function p0(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 p=r.compiledChunks[u];if(p===void 0)continue;if(u>0&&t===je.Production){let m=ot(e,i,o,a);if(m?.compiledChunks[0]===void 0||e.session.checkpoint()||lo(m.compiledChunks[0],p)!==0)break}if(!e.session.cacheWriteAllowed)return;Gp(Jn(e).continuation,Bp(i,t,a),p.slice());let l=Tr(i,p);if(l?.activeColor!==s)break;i=l}}c(p0,"registerPlanContinuations");function nl(e,n,o,t,r){if(e.session.checkpoint())return Vn;let a=Cs(e,n,t,r),i=$r(e,o,t,r,a);return e.session.checkpoint()?Vn:i}c(nl,"turnEngineEvaluatePlanWithReplies");var ol=4096,JA=Symbol("reply-risk-session-caches"),Rf=class Rf{constructor(){ne(this,"snapshots",new ge(ol));ne(this,"spiritFollowupFloors",new ge(ol));ne(this,"selectedOverrideUtilities",new ge(ol));ne(this,"capacity",ol*3)}get size(){return this.snapshots.size+this.spiritFollowupFloors.size+this.selectedOverrideUtilities.size}clear(){this.snapshots.clear(),this.spiritFollowupFloors.clear(),this.selectedOverrideUtilities.clear()}};c(Rf,"ReplyRiskSessionCaches");var Cf=Rf;function za(e){return e.caches.session.getOrCreate(JA,()=>new Cf)}c(za,"replyRiskCaches");function Mf(e,n){return e.get(n.hash,n.tag,n.secondary,n.qualifier)}c(Mf,"cacheGet");function kf(e,n,o){e.set(n.hash,o,n.tag,n.secondary,n.qualifier)}c(kf,"cacheSet");function rc(e,n,o,t){let r=t.evaluation.weights;if(!Number.isInteger(o)||o<0||o>65535)return;let a=o+un(n)*65536;return{hash:se(e),tag:a,qualifier:`string:${bi(r)}`}}c(rc,"replyRiskCacheKey");function l0(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===je.Production)<<10|Number(o)<<11|Number(e.enableLazyOracleScoreWindowProjection)<<12;return po(a,r)}c(l0,"selectedOverrideConfigKey");function Tf(e){za(e).clear()}c(Tf,"clearReplyRiskCache");function d0(e,n){return Mf(za(e).snapshots,n)}c(d0,"cachedReplyRiskSnapshot");function m0(e,n,o){kf(za(e).snapshots,n,o)}c(m0,"storeReplyRiskSnapshot");function f0(e,n){return Mf(za(e).spiritFollowupFloors,n)}c(f0,"cachedSpiritFollowupFloor");function y0(e,n,o){kf(za(e).spiritFollowupFloors,n,o)}c(y0,"storeSpiritFollowupFloor");function S0(e,n){return Mf(za(e).selectedOverrideUtilities,n)}c(S0,"cachedSelectedOverrideUtility");function h0(e,n,o){kf(za(e).selectedOverrideUtilities,n,o)}c(h0,"storeSelectedOverrideUtility");function Yr(e){return e.planner.mode===Fe.Production?je.Production:je.Baseline}c(Yr,"turnEngineModeFromAutomoveConfig");function ur(e){return Math.max(Math.trunc(e),1)}c(ur,"positiveCap");function _o(e){return{mode:Yr(e),ownSeedCap:ur(e.planner.ownSeedCap),ownBeam:ur(e.planner.ownBeam),perNodeFamilyCap:ur(e.planner.perNodeFamilyCap),stepCap:ur(e.planner.stepCap),opponentSeedCap:ur(e.planner.opponentSeedCap),opponentBeam:ur(e.planner.opponentBeam),replySeedCap:ur(e.planner.replySeedCap),replyBeam:ur(e.planner.replyBeam),expansionCap:ur(e.planner.expansionCap),enableSpiritFamily:e.planner.spiritFamily,scoringWeights:e.evaluation.weights,enableLazyOracleScoreWindowProjection:!1}}c(_o,"turnEngineConfigFromAutomoveConfig");function no(e){return e.planner.enabled&&e.planner.mode===Fe.Production&&e.planner.secondaryAnalysis}c(no,"productionSecondaryAnalysisLive");function Ro(e){return e.activeColor===P.White&&e.turnNumber<=3&&!e.playerCanUseAction()&&!e.playerCanMoveMana()&&(e.monsMovesCount===0||e.monsMovesCount===3)}c(Ro,"productionIsEarlyWhiteTurnStart");function tl(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(tl,"applyEarlyWhiteTurnEngineLimits");function eg(e){let n=e.mode===je.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(eg,"applyTurnEngineRerankLimits");function Xr(e){return eg(_o(e))}c(Xr,"turnEngineRerankConfigFromAutomoveConfig");var b0=700;function C0(e,n){let o=_o(n);o.mode===je.Production&&n.planner.lowBudgetGuard&&Ro(e)&&(o=tl(o));let t=o.mode===je.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(C0,"projectionTurnEngineConfig");var ft=Object.freeze({scoutDepth:2,scoutMinNodes:96,focusCount:3,focusBudgetShareBp:7e3,focusScoreMargin:2e3,narrowSpreadFallback:700,volatilityMargin:600,volatilityKeep:2});function M0(e,n){let o=15;if(e>=o||n<=0)return 0;let t=Math.min(ue,Math.max(0,Math.trunc(e)));return(ue-t)*Math.trunc(n)}c(M0,"rootProgressStepSoftBonus");function ng(e){let n=0;return e.supermanaProgress&&!e.scoresSupermanaThisTurn&&!e.safeSupermanaPickupNow&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&(n=g(g(n,520),M0(e.safeSupermanaProgressSteps,48))),e.opponentManaProgress&&!e.scoresOpponentManaThisTurn&&!e.safeOpponentManaPickupNow&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&(n=g(g(n,480),M0(e.safeOpponentManaProgressSteps,40))),n}c(ng,"rootScoutProgressBonus");function R0(e){return g(g(Math.trunc(e.heuristic),Math.trunc(Math.trunc(e.efficiency)/2)),ng(e))}c(R0,"rootFocusScoutScore");function og(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(og,"rootVolatilityScore");function sn(e,n){let o=15,t=e<o,r=n<o;return t?!r||e<n:!1}c(sn,"rootProgressStepsBetter");function Ya(e,n){let o=33,t=e<o,r=n<o;return t?!r||e<n:!1}c(Ya,"rootScorePathStepsBetter");function k0(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?Ya(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(k0,"isBetterTacticalRootCandidate");function P0(e,n,o){return k0(e,n,o)?-1:k0(n,e,o)?1:0}c(P0,"compareTacticalRootCandidateOrder");function Af(e,n){return P0(e,n,!0)}c(Af,"compareTacticalRootCandidates");function w0(e,n){return P0(e,n,!1)}c(w0,"compareTacticalRootCandidatesIgnoringScorePath");function wf(e,n){return e===n?0:e>n?-1:1}c(wf,"compareScoresDescending");function $a(e,n){let o=e[n];if(o===void 0)throw new RangeError(`root focus index ${n} is out of bounds`);return o}c($a,"valueAt");function al(e,n,o){return wf(n[1],o[1])||Af($a(e,n[0]),$a(e,o[0]))||n[0]-o[0]}c(al,"compareRankedRootIndices");function A0(e,n,o){let t=[];if(o!==void 0&&t.push(o),n!==void 0)for(let i of n)t.some(s=>le(s,i))||t.push(i);let r=[...e],a=0;for(let i of t){let s=r.findIndex(p=>le(p.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(A0,"prioritizeRootInputs");function tg(e,n){return Number.isFinite(e)?Math.max(0,Math.trunc(e)):n}c(tg,"nonnegativeInteger");function Pf(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(Pf,"clampInteger");function T0(e){return e.planner.mode===Fe.Production&&e.planner.enabled}c(T0,"isProductionMode");function rl(e,n,o){return{candidates:A0(e,n,o),scoutVisitedNodes:0}}c(rl,"prioritizedRootResult");function rg(e,n){let o=e.search.volatilityFocus||e.budget.depth<=3?1:Pf(e.budget.depth,1,ft.scoutDepth),t=Pf(1e4-ft.focusBudgetShareBp,500,4e3),r=n;if(o>1){let a=Math.max(0,e.budget.maxVisitedNodes-1);if(a<ft.scoutMinNodes)return;r=Pf(Math.trunc(e.budget.maxVisitedNodes*t/1e4),ft.scoutMinNodes,a)}if(!(r<n))return ke(e,{budget:{depth:o,maxVisitedNodes:r},search:{selectiveExtensions:!1,quietReductions:!1}})}c(rg,"createRootScoutConfig");function ag(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 p=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(p.score),t=Math.min(o.budget.maxVisitedNodes,Math.max(t,tg(p.visitedNodes,t)))}else u=R0(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(ag,"runRootScout");function gf(e,n){return n??R0(e)}c(gf,"effectiveScoutScore");function ig(e,n){let o=e.map((t,r)=>[r,gf(t,n[r])]);return o.sort((t,r)=>al(e,t,r)),o}c(ig,"rankedRootIndices");function sg(e,n){if(e.length<n)return!1;let o=e[0]?.[1]??-2147483648,t=e[n-1]?.[1]??-2147483648;return V(o,t)<=ft.narrowSpreadFallback}c(sg,"hasNarrowScoutSpread");function ug(e,n,o,t,r,a){let{config:i,forcedInputs:s,perspective:u,priorityInputs:p}=e,l=Array.from({length:n.length}).fill(!1);for(let[m]of o.slice(0,a))l[m]=!0;if(T0(i)&&a<=3&&!o.slice(0,a).some(([d])=>{let f=$a(n,d);return f.spiritDevelopment&&!f.spiritSameTurnScoreSetupNow&&!f.spiritOwnManaSetupNow})){let d=o.slice(0,a+3).map(([f])=>f).filter(f=>{let y=$a(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)l[f]=!0}for(let[m,d]of o)d+ft.focusScoreMargin<r||(l[m]=!0);for(let[m,d]of n.entries())d.attacksOpponentDrainer&&(l[m]=!0),(d.scoresSupermanaThisTurn||d.scoresOpponentManaThisTurn||d.safeSupermanaPickupNow||d.safeOpponentManaPickupNow||d.spiritSameTurnScoreSetupNow||d.sameTurnScoreWindowValue>0||d.spiritOwnManaSetupNow)&&(l[m]=!0),T0(i)&&d.ownDrainerVulnerable&&!d.ownDrainerWalkVulnerable&&!d.manaHandoffToOpponent&&!d.hasRoundtrip&&d.game.activeColor===u&&e.qualifiesDrainerSafetyRecoveryPlan?.(d)===!0&&(l[m]=!0);if(p!==void 0)for(let m of p){let d=n.findIndex(f=>le(f.inputs,m));d>=0&&(l[d]=!0)}if(s!==void 0){let m=n.findIndex(d=>le(d.inputs,s));m>=0&&(l[m]=!0)}if(i.search.volatilityFocus){let m=n.map((f,y)=>{let b=t[y];return{index:y,volatility:og(f),scoutScore:gf(f,b)}}).filter(({volatility:f})=>f>0).sort((f,y)=>wf(f.volatility,y.volatility)||wf(f.scoutScore,y.scoutScore)||f.index-y.index);for(let{index:f}of m.slice(0,Math.max(ft.volatilityKeep,1)))l[f]=!0;let d=m[0]?.volatility;if(d!==void 0)for(let{index:f,volatility:y,scoutScore:b}of m){if(y+ft.volatilityMargin<d)break;b+ft.focusScoreMargin<r||(l[f]=!0)}}return l}c(ug,"selectFocusedRootIndices");function g0(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<=ft.focusCount||n.budget.depth<=1)return rl(r,o,t);let a=rg(n,r.length);if(a===void 0)return rl(r,o,t);let i=ag(e,r,a);if(i.status==="cancelled")return{candidates:[],scoutVisitedNodes:i.visitedNodes};let s=Math.min(ft.focusCount,r.length),u=ig(r,i.scores);if(sg(u,s)){let d=u.map(([f])=>$a(r,f));return rl(d,o,t)}let p=ug(e,r,u,i.scores,u[0]?.[1]??-2147483648,s);if(!p.some(Boolean))return rl(r,o,t);let l=p.flatMap((d,f)=>{if(!d)return[];let y=$a(r,f);return[[f,gf(y,i.scores[f])]]});l.sort((d,f)=>al(r,d,f));let m=l.map(([d])=>$a(r,d));return{candidates:A0(m,o,t),scoutVisitedNodes:Math.min(i.visitedNodes,n.budget.maxVisitedNodes)}}c(g0,"focusedRootCandidates");var cg=40;function v0(e,n){let o=e[n];if(o===void 0)throw new RangeError(`root selector index ${n} is out of bounds`);return o}c(v0,"valueAt");function Ps(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?Ya(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(Ps,"compareTacticalEvaluatedRoots");function ae(e,n,o){let t=v0(e,n),r=v0(e,o);return t.score!==r.score?t.score>r.score?-1:1:Ps(t,r)||n-o}c(ae,"compareRankedEvaluatedRootIndices");function E0(e,n){let o=n[0]??0;for(let t of n)ae(e,t,o)<0&&(o=t);return o}c(E0,"bestScoredRootIndex");function ws(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(!(N(r)||r.hasRoundtrip||r.score<g(a.score,cg)||r.sameTurnScoreWindowValue<a.sameTurnScoreWindowValue))return i?1:-1}c(ws,"spiritScoreChallengeOrder");function Xa(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(Xa,"compareProductionRules");function As(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}c(As,"compareRankedReplyRiskEvaluations");function wn(e,n){return sn(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps)||sn(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps)||e.spiritSetupGain>n.spiritSetupGain}c(wn,"rootProgressOrSetupBetter");function vf(e){return e.classes.immediateScore||e.classes.drainerAttack||e.classes.drainerSafetyRecover}c(vf,"isTacticalPriorityRoot");function Fo(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}c(Fo,"rankedRootOrder");function Wo(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(Wo,"sameNonTacticalProgressLane");function gs(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&&V(r,a)>b0)return[];let s=Math.max(0,t.replyRisk.scoreMargin),u=o.filter(d=>{let f=n[d];return f!==void 0&&g(f.score,s)>=r});if(u.sort((d,f)=>As(n,d,f)),u.length===0)return u;let p=Math.max(1,t.replyRisk.shortlistLimit);if(u.length>p)if(D(t)){let d=u.slice(0,p),f=d.some(h=>{let k=n[h];return k!==void 0&&(k.spiritDevelopment||k.spiritSameTurnScoreSetupNow||k.spiritOwnManaSetupNow)}),y=n[u[0]??-1]?.score??r,b=[];if(!f){let h=u.slice(p).find(k=>{let M=n[k];return M!==void 0&&V(y,M.score)<=64&&(M.spiritDevelopment||M.spiritSameTurnScoreSetupNow||M.spiritOwnManaSetupNow)});h!==void 0&&b.push(h)}if([...d,...b].some(h=>{let k=n[h];return k!==void 0&&B(k)})){let h=0;for(let k of u.slice(p)){let M=n[k];if(M!==void 0&&B(M)&&V(y,M.score)<=64&&!b.includes(k)&&(b.push(k),h+=1,h>=2))break}}u=[...d,...b]}else u=u.slice(0,p);let l=u[0],m=l===void 0?void 0:n[l];if(D(t)&&m!==void 0&&N(m)&&Q(m)){let d=o.filter(f=>!u.includes(f)).filter(f=>{let y=n[f];return y!==void 0&&!N(y)&&Wo(y,m)&&V(m.score,y.score)<=320}).sort((f,y)=>As(n,f,y))[0];d!==void 0&&u.push(d)}return u.sort((d,f)=>As(n,d,f)),u}c(gs,"replyRiskGuardShortlistIndices");function Ef(e,n,o){return D(o)&&B(e)&&B(n)&&!N(e)&&!N(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(Ef,"isSafePlainSpiritPair");function ac(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(ac,"shortlistHasPair");function il(e,n,o){return!D(o)||n.length<2?!1:ac(e,n,(t,r)=>Ef(t,r,o))}c(il,"safePlainSpiritCompetition");function Of(){return{allowsImmediateOpponentWin:!0,opponentReachesMatchPoint:!0,worstReplyScore:-Math.trunc(268435455/2)}}c(Of,"conservativeSnapshot");function yt(e,n,o,t){return Hr(e,n,o,t.evaluation.weights,!1)}c(yt,"evaluateReplyRiskGame");function An(e,n,o,t,r){if(e.session.checkpoint())return Of();let a=Math.max(1,Math.trunc(r)),i=rc(n,o,a,t);if(i!==void 0){let p=d0(e,i);if(p!==void 0)return p}let s=n.winnerColor(),u;if(s!==void 0){let p=s===o;u={allowsImmediateOpponentWin:!p,opponentReachesMatchPoint:!p,worstReplyScore:p?Math.trunc(268435455/2):-Math.trunc(268435455/2)}}else if(n.activeColor===o)u={allowsImmediateOpponentWin:!1,opponentReachesMatchPoint:!1,worstReplyScore:yt(e,n,o,t)};else{let p=Do(e,n,a);if(e.session.checkpoint())return Of();if(p.length===0)u={allowsImmediateOpponentWin:!1,opponentReachesMatchPoint:!1,worstReplyScore:Math.trunc(268435455/4)};else{let l=!1,m=!1,d=2147483647,f=!1;for(let y of p){if(e.session.checkpoint())return Of();let b=y.game;f=!0;let C=o===P.White?b.blackScore:b.whiteScore;Ie-C<=1&&(m=!0);let h=b.winnerColor(),k;if(h===o?k=Math.trunc(268435455/2):h!==void 0?(l=!0,m=!0,k=-Math.trunc(268435455/2)):k=yt(e,b,o,t),d=Math.min(d,k),l)break}(!f||d===2147483647)&&(d=yt(e,n,o,t)),u={allowsImmediateOpponentWin:l,opponentReachesMatchPoint:m,worstReplyScore:d}}}return e.session.cacheWriteAllowed&&i!==void 0&&m0(e,i,u),u}c(An,"rootReplyRiskSnapshot");var If=Object.freeze({});function cr(e,n){return e.game.activeColor===n&&e.game.winnerColor()===void 0}c(cr,"canTurnEngineProjectReplyRiskRoot");function ul(e){return e===S.ImmediateScore||e===S.DenyOpponentWindow||e===S.DrainerKill}c(ul,"isTacticalTurnEngineFamily");function I0(e){return ul(e)||e===S.SpiritImpact||e===S.DrainerSafetyRecovery}c(I0,"isInformativeReplyRiskProjectionFamily");function pg(e,n,o,t){return!t.planner.enabled||!D(t)||!cr(e,o)||B(e)||n.plan.headFamily===S.SpiritImpact&&!e.spiritDevelopment&&e.ownDrainerVulnerable?!1:I0(n.plan.headFamily)?!0:(n.plan.headFamily===S.SafeSupermanaProgress||n.plan.headFamily===S.SafeOpponentManaProgress)&&Q(e)}c(pg,"shouldUseReplyRiskProjectionForRoot");function xf(e,n,o,t,r,a){let i=o!==void 0&&pg(n,o,t,r)?o.plan.endGame:n.game;return An(e,i,t,r,a)}c(xf,"rootReplyRiskSnapshotWithProjection");function O0(e,n){return mo(e,n)>=0?e:n}c(O0,"maxTurnUtility");function x0(e,n,o,t,r,a){let i=Ju(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 nl(e,n,s,t,r)}c(x0,"turnEngineRootPlanUtilityWithConfig");function Bt(e,n,o,t,r,a,i=If){return i.evaluateTurnEngineRootUtility?.(n,o,t,a)??x0(e,n,o,t,_o(r),a)}c(Bt,"turnEngineRootPlanUtility");function cl(e,n,o,t,r,a,i=If){let s=i.evaluateTurnEngineRootUtility?.(n,o,t,a);if(s!==void 0)return s;let u=C0(o.game,r),p=rc(o.game,t,nC[a],r),l=l0(u,r.planner.selectedFollowupProjection,r.planner.secondaryAnalysis),m=p===void 0||l===void 0?void 0:{...p,secondary:l};if(m!==void 0){let y=S0(e,m);if(y!==void 0)return y}let d=Ju(e,o.game,n,t,u),f;if(!no(r))f=d;else{let y=x0(e,n,o,t,u,a);if(!r.planner.selectedFollowupProjection||!cr(o,t))f=O0(y,d);else{let b=o.ownDrainerVulnerable||o.spiritDevelopment||o.spiritSameTurnScoreSetupNow||o.spiritOwnManaSetupNow||Q(o),C=o.game.activeColor===P.Black&&(a===S.ManaTempo||a===S.DrainerSafetyRecovery)&&!b&&!N(o)&&!o.manaHandoffToOpponent&&!o.hasRoundtrip&&!o.winsImmediately&&!o.attacksOpponentDrainer;if(!b&&!C)f=y;else{let h=ot(e,o.game,t,u);f=h===void 0?y:O0(h.utility,y)}}}return e.session.cacheWriteAllowed&&m!==void 0&&h0(e,m,f),f}c(cl,"turnEngineSelectedOverrideUtility");function N0(e,n,o,t,r){if(!no(r)||o.length<2)return new Map;let a=il(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)&&cr(y,t)});if(!s&&!u)return new Map;let p;u?p=a?r.planner.lowBudgetGuard?Math.min(o.length,4):o.length:Math.min(o.length,r.planner.lowBudgetGuard?4:8):p=Math.min(o.length,r.planner.lowBudgetGuard?3:6);let l=Xr(r),m=_o(r),d=new Map;for(let f of o.slice(0,p)){if(e.session.checkpoint())return new Map;let y=n[f];if(y===void 0||!cr(y,t))continue;let C=D(r)&&y.ownDrainerVulnerable&&!y.manaHandoffToOpponent&&!y.hasRoundtrip?m:l,h=ot(e,y.game,t,C);h!==void 0&&d.set(f,{plan:h})}return u&&!s&&!a&&![...d.values()].some(({plan:f})=>I0(f.headFamily))?new Map:d}c(N0,"turnEngineReplyRiskProjections");function sl(e,n){return cr(e,n)&&!B(e)&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&!N(e)&&!e.hasRoundtrip}c(sl,"canChallengeSpiritPreferenceRoot");function Qa(e,n){return cr(e,n)&&!B(e)&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&!e.manaHandoffToOpponent&&!e.hasRoundtrip}c(Qa,"canChallengeSpiritPreferenceRootWithRecovery");function D0(e,n,o,t,r){if(!no(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)&&cr(y,t)}).sort((f,y)=>As(n,f,y)).slice(0,a),s=r.planner.lowBudgetGuard?2:4,u=o.filter(f=>{let y=n[f];return y!==void 0&&(sl(y,t)||Qa(y,t))}).sort((f,y)=>As(n,f,y)).slice(0,s),p=[...i];for(let f of u)p.includes(f)||p.push(f);if(p.length<2)return new Map;let l=Xr(r),m=_o(r),d=new Map;for(let f of p){let y=n[f];if(y===void 0)continue;let C=Qa(y,t)&&!sl(y,t)?m:l,h=ot(e,y.game,t,C);h!==void 0&&d.set(f,{plan:h})}return d}c(D0,"buildSpiritRootProjections");function rn(e,n,o,t){if(e.session.checkpoint())return 0;let r=n.winnerColor();if(r!==void 0)return r===o?Math.trunc(268435455/2):-Math.trunc(268435455/2);let a=rc(n,o,1,t);if(a!==void 0){let s=f0(e,a);if(s!==void 0)return s}let i=yt(e,n,o,t);return e.session.cacheWriteAllowed&&a!==void 0&&y0(e,a,i),i}c(rn,"spiritFollowupFloorScore");function I(e){return re(e)?S.ImmediateScore:e.attacksOpponentDrainer?S.DrainerKill:e.classes.drainerSafetyRecover?S.DrainerSafetyRecovery:e.spiritSameTurnScoreSetupNow||e.spiritOwnManaSetupNow||e.spiritDevelopment?S.SpiritImpact:e.supermanaProgress?S.SafeSupermanaProgress:e.opponentManaProgress?S.SafeOpponentManaProgress:S.ManaTempo}c(I,"rootFamily");var ln=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 pl=[[ln.PreserveSpiritRepresentative,e=>e.spiritSameTurnScoreSetupNow||e.spiritOwnManaSetupNow],[ln.PreserveSpiritRepresentative,B],[ln.PreserveSafeProgressRepresentative,e=>I(e)===S.SafeSupermanaProgress],[ln.PreserveSafeProgressRepresentative,e=>I(e)===S.SafeOpponentManaProgress],[ln.PreserveManaTempoRepresentative,e=>I(e)===S.ManaTempo]];function gn(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(gn,"memoizedByIndex");function Tn(e,...n){return n.includes(e)}c(Tn,"isTurnPlanFamilyOneOf");function vs(e,n,o){let t=e[o],r=n[o];return t!==void 0&&r!==void 0&&Kt(t,r)}c(vs,"sameInputAt");function bn(e){return!N(e)&&!e.hasRoundtrip}c(bn,"advisorRootIsSafe");function Cn(e,n,o,t,r){return cl(e,n,o,t,r,I(o))}c(Cn,"rootUtility");function Lt(e,n,o,t,r){return Bt(e,n,o,t,r,I(o))}c(Lt,"rootMoveUtility");function Bo(e,n){return ie(e,n)>=0||Jo(e,n)}c(Bo,"utilityCompetes");function _0(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(_0,"utilitiesEqual");function Gt(e,n){return{inputs:[...e.inputs],family:I(e),rootRank:e.rootRank,reason:n}}c(Gt,"entry");function Lo(e,n){e.some(o=>le(o.inputs,n.inputs))||e.push(n)}c(Lo,"pushUnique");function Nf(e,n,o){return al(e,[n,0],[o,0])}c(Nf,"compareRankedRootMoveIndices");function F0(e,n){return e.heuristic!==n.heuristic?e.heuristic>n.heuristic?-1:1:Af(e,n)||lo(e.inputs,n.inputs)}c(F0,"compareRootMoveSearchPriority");function Df(e,n){return ke(e,{planner:{mode:n}})}c(Df,"withPlannerMode");function _f(e,n){return ke(Df(e,n),{replyRisk:{enabled:!1}})}c(_f,"withoutReplyRiskGuard");function Pe(e,n,o,t){return n.filter(r=>{let a=e[r];return a!==void 0&&o(a,r)}).sort(t)[0]}c(Pe,"bestOverrideIndex");function dn(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(dn,"compareRootRankThenRanked");function Ff(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(Ff,"compareRootRankThenScoreThenRanked");function yo(e,n){let o=Ce(e,n,n.activeColor);return o.delta.sameTurnScoreWindowValue===0&&o.delta.opponentWindowDenyGain===0&&!o.delta.drainerAttackAvailable}c(yo,"exactContextIsQuiet");var lg=Object.freeze(["mana-scored","pickup-mana","mon-fainted","use-potion","pickup-bomb","pickup-potion","bomb-attack","bomb-explosion"]),dg=Object.freeze(["mana-scored","pickup-mana","mon-fainted","use-potion","bomb-attack","bomb-explosion","spirit-target-move","supermana-back-to-base"]);function W0(e,n){return e.some(o=>n.includes(o.kind))}c(W0,"hasEventKind");function ic(e){return W0(e,lg)}c(ic,"hasMaterialEvent");function B0(e){return W0(e,dg)}c(B0,"isQuiescenceTacticalTransition");var mg=16384,pr=15,fg=120,yg=40,L0=90,G0=22,Sg=Symbol("move-efficiency-cache");function U0(e){return e.caches.session.getOrCreate(Sg,()=>new ge(mg))}c(U0,"moveEfficiencyCache");function hg(e,n,o){return un(e)|Number(n)<<1|Number(o)<<2}c(hg,"snapshotCacheTag");function V0(e){return{safeSupermanaProgress:!1,safeSupermanaProgressSteps:void 0,safeOpponentManaProgress:!1,safeOpponentManaProgressSteps:void 0,spiritAssistedScore:!1,spiritAssistedScoreValue:0,spiritAssistedDenial:!1,spiritAssistedDenialValue:0,sameTurnScoreWindowValue:e}}c(V0,"defaultTacticalProjection");function dl(e){let n=10;return Math.max(Math.min(e.i,n-e.i),Math.min(e.j,n-e.j))+1}c(dl,"distanceToAnyPoolStepsForEfficiency");function lr(e,n){let o=10,t=n===P.White?o:0;return Math.max(Math.abs(t-e.i),Math.min(e.j,o-e.j))+1}c(lr,"distanceToColorPoolStepsForEfficiency");function H0(e,n){let o;for(let[t,r]of e.board.entries()){let a=H(r);if(!(a?.color!==n||a.kind!==A.Drainer||j(a)))for(let[i,s]of e.board.entries()){if(s.kind!=="mana")continue;let u=te(t,i)-1;o=o===void 0?u:Math.min(o,u)}}return o}c(H0,"approximateBestDrainerToManaSteps");function ll(e,n){if(e.activeColor!==n)return 0;let o=Math.max(0,ue-e.monsMovesCount),t=0;for(let[r,a]of e.board.entries()){if(a.kind!=="mon-with-mana"||a.mon.color!==n||j(a.mon))continue;dl(r)-1<=o&&(t=Math.max(t,De(a.mana,n)))}return t}c(ll,"approximateSameTurnScoreWindowValue");function bg(e,n,o,t,r,a,i){let s=a?ls(e,n):void 0,u=s?.colorSummary(o),p=s?.colorSummary(t),l=_u,m=r&&n.activeColor===o?No(e,n,o,i,l):V0(u?.immediateWindow.bestScore??ll(n,o)),d=r&&n.activeColor===t?No(e,n,t,i,l):V0(p?.immediateWindow.bestScore??ll(n,t)),f=u?.bestDrainerToManaSteps??H0(n,o)??pr,y=p?.bestDrainerToManaSteps??H0(n,t)??pr;return{myBestCarrierSteps:u?.bestCarrierSteps??pr,opponentBestCarrierSteps:p?.bestCarrierSteps??pr,myBestDrainerToManaSteps:f,opponentBestDrainerToManaSteps:y,myCarrierCount:0,opponentCarrierCount:0,mySpiritOnBase:!1,opponentSpiritOnBase:!1,mySpiritActionTargets:u?.spirit.utility??0,opponentSpiritActionTargets:p?.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??pr,opponentSafeSupermanaProgressSteps:d.safeSupermanaProgressSteps??pr,mySafeOpponentManaProgressSteps:m.safeOpponentManaProgressSteps??pr,opponentSafeOpponentManaProgressSteps:d.safeOpponentManaProgressSteps??pr}}c(bg,"initializeMoveEfficiencySnapshot");function Cg(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(j(s.mon))continue;let u=dl(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"||j(s.mon)||s.mon.kind!==A.Spirit||(s.mon.color===n?t.mySpiritOnBase=Oe(i,r):t.opponentSpiritOnBase=Oe(i,a))}}c(Cg,"observeMoveEfficiencyBoard");function j0(e,n,o,t,r,a){let i=G(o),s=bg(e,n,o,i,t,r,a);return Cg(n,o,i,s),s}c(j0,"buildMoveEfficiencySnapshot");function ml(e,n,o,t,r,a){let i=U0(e),s=hg(o,t,r),u=i.get(a,s);if(u!==void 0)return u;let p=j0(e,n,o,t,r,a);return e.session.cacheWriteAllowed&&i.set(a,p,s),p}c(ml,"moveEfficiencySnapshotWithHash");function Mg(e,n,o,t,r,a){return j0(e,n,o,t,r,a)}c(Mg,"moveEfficiencySnapshotUncachedWithHash");function K0(e){U0(e).clear()}c(K0,"clearMoveEfficiencyCache");function Qr(e,n,o,t,r=pr){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(Qr,"stepProgressDelta");function Za(e){let n=[];for(let o of e){if(o.kind!=="mon-move")continue;let t=H(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}c(Za,"hasRoundtripMonMove");function kg(e,n,o){return _h(e.board,n.board)&&e.whiteScore===n.whiteScore&&e.blackScore===n.blackScore&&e.whitePotionsCount===n.whitePotionsCount&&e.blackPotionsCount===n.blackPotionsCount&&!ic(o)}c(kg,"isNoEffectTurnTransition");function Tg(e,n){let o=G(n);return e.some(t=>t.kind==="mon-fainted"&&t.mon.kind===A.Drainer&&t.mon.color===o)}c(Tg,"eventsIncludeOpponentDrainerFainted");function Ja(e,n,o){if(o<=0)return 0;let t=0,r=G(n);for(let a of e){if(a.kind!=="mana-move")continue;let i=lr(a.from,n),s=lr(a.to,n),u=lr(a.from,r),p=lr(a.to,r),l=Math.max(u-p,0),m=Math.max(i-s,0);if(l>m){let d=l-m;t=t+d*De(a.mana,r)*o}}return t}c(Ja,"manaHandoffPenalty");function Rg(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}c(Rg,"applyCarrierAndDrainerEfficiencyDelta");function Pg(e,n,o){let t=o;return e.mySpiritOnBase&&!n.mySpiritOnBase&&(t=t+L0),!e.opponentSpiritOnBase&&n.opponentSpiritOnBase&&(t=t+Math.trunc(L0/3)),t=t+(n.mySpiritActionTargets-e.mySpiritActionTargets)*G0,t=t-(n.opponentSpiritActionTargets-e.opponentSpiritActionTargets)*Math.trunc(G0/2),t}c(Pg,"applySpiritEfficiencyDelta");function wg(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(wg,"applyScoreWindowEfficiencyDelta");function Ag(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}c(Ag,"applySafeProgressEfficiencyDelta");function gg(e,n,o,t,r,a){let i=a,s=t.some(u=>u.kind==="mana-scored")||Tg(t,o);return r.applyRootManaHandoffGuard&&!s&&(i=i-Ja(t,o,r.rootManaHandoffPenalty)),kg(e,n,t)?i=i-fg:!ic(t)&&i<=0&&(i=i-yg),r.applyBacktrackPenalty&&r.rootBacktrackPenalty>0&&Za(t)&&(i=i-r.rootBacktrackPenalty),i}c(gg,"applyRootEfficiencyPenalties");function vg(e,n,o,t,r,a,i){let s=0;return s=Rg(r,a,s),s=Pg(r,a,s),s=wg(r,a,s),s=Ag(r,a,s),i.isRoot&&(s=gg(e,n,o,t,i,s)),s}c(vg,"moveEfficiencyDeltaFromBeforeSnapshotWithAfterSnapshot");function fl(e,n,o,t,r,a,i,s){let u=Mg(e,o,t,s.includeTacticalExact&&o.activeColor===t,s.includeStrategicExact,i);return vg(n,o,t,r,a,u,s)}c(fl,"moveEfficiencyDeltaFromBeforeSnapshot");function q0(e,n){for(let[o,t]of e.board.entries()){let r=H(t);if(r?.color===n&&r.kind===A.Drainer)return{location:o,mon:r}}}c(q0,"findDrainer");function Un(e,n,o){let t=q0(n,o);if(t===void 0)return!1;if(j(t.mon))return!0;if(n.isFirstTurn())return!1;let r=on(n.board);return Br(e,n.board,r,G(o),o,t.location,ue,!0)}c(Un,"isOwnDrainerVulnerable");function Eg(e,n){let o=G(n);for(let[t,r]of e.board.entries()){let a=H(r);if(a?.color===o&&a.kind===A.Drainer&&!j(a))return t}}c(Eg,"opponentAwakeDrainerLocation");function Og(e,n,o){let t=o===A.Mystic?Vo(n):Ho(n),r=2147483647;for(let a of t)r=Math.min(r,te(e,a));return r}c(Og,"minimumStepsToAttackSource");function yl(e,n){let o=[],t=Eg(e,n);if(t===void 0)return o;let r=Math.max(0,ue-e.monsMovesCount);if(r<=0)return o;let a=G(n),i=e.board.findAwakeAngel(a),s=i!==void 0&&te(i,t)===1,u=[];for(let[p,l]of e.board.entries())l.kind==="consumable"&&l.consumable===q.BombOrPotion&&u.push(p);for(let[p,l]of e.board.entries()){let m=H(l);if(m?.color!==n||j(m))continue;if(l.kind==="mon-with-consumable"&&l.consumable===q.Bomb&&te(p,t)<=r+3){o.push(p);continue}if(!s&&(m.kind===A.Mystic||m.kind===A.Demon)&&Og(p,t,m.kind)<=r){o.push(p);continue}for(let f of u){let y=te(p,f);if(y>r)continue;let b=r-y;if(te(f,t)<=b+3){o.push(p);break}}}return o}c(yl,"potentialDrainerAttackerLocations");function Ig(e,n){return yl(e,n).length>0}c(Ig,"hasPotentialDrainerAttacker");function z0(e,n){return e.activeColor===n&&e.playerCanUseAction()&&Ig(e,n)}c(z0,"approximateCanAttackOpponentDrainerThisTurn");function $0(e,n,o){let t=q0(n,o);if(t===void 0||j(t.mon)||Un(e,n,o))return!1;let r=on(n.board),a=n.board.findAwakeAngel(o),i=a!==void 0&&te(a,t.location)===1;return ss(e,n.board,r,o,t.location,i)}c($0,"isOwnDrainerWalkVulnerable");function Y0(e,n,o,t,r,a){let i=o[0];if(i===void 0||a(i)&&bn(i))return;let s=Lt(e,n,i,t,r);return o.map((u,p)=>p).filter(u=>{let p=o[u];return p!==void 0&&a(p)&&bn(p)&&Bo(Lt(e,n,p,t,r),s)}).sort((u,p)=>Nf(o,u,p))[0]}c(Y0,"findRootMoveRepresentative");function X0(e,n){let o=e[0];if(!(o===void 0||!D(n)||!B(o)||!bn(o)))return e.map((t,r)=>r).filter(t=>{let r=e[t];return r!==void 0&&I(r)===S.SpiritImpact&&!B(r)&&Te(r.inputs,o.inputs)&&r.efficiency===o.efficiency&&bn(r)&&!r.winsImmediately&&!r.attacksOpponentDrainer&&!r.scoresSupermanaThisTurn&&!r.scoresOpponentManaThisTurn&&!r.safeSupermanaPickupNow&&!r.safeOpponentManaPickupNow&&r.sameTurnScoreWindowValue===0}).sort((t,r)=>Nf(e,t,r))[0]}c(X0,"sameOpeningSetupRepresentative");function Wf(e,n,o,t){return D(t)&&e.activeColor===P.Black&&e.turnNumber===6&&e.monsMovesCount===0&&e.playerCanUseAction()&&e.playerCanMoveMana()&&I(n)===S.SpiritImpact&&I(o)===S.SpiritImpact&&B(n)&&o.spiritOwnManaSetupNow&&!o.spiritSameTurnScoreSetupNow&&Te(n.inputs,o.inputs)&&n.ownDrainerVulnerable===o.ownDrainerVulnerable&&n.ownDrainerWalkVulnerable===o.ownDrainerWalkVulnerable&&!n.manaHandoffToOpponent&&!o.manaHandoffToOpponent&&!n.hasRoundtrip&&!o.hasRoundtrip&&!re(n)&&!re(o)&&!n.attacksOpponentDrainer&&!o.attacksOpponentDrainer&&n.sameTurnScoreWindowValue===0&&o.sameTurnScoreWindowValue===0&&!n.supermanaProgress&&!o.supermanaProgress&&!n.opponentManaProgress&&!o.opponentManaProgress}c(Wf,"isBlackTurnSixPlainSpiritSetupPair");function xg(e,n){let o=e.fork(),t=[];for(let r of n.compiledChunks){let a=nn(o,r);if(a===void 0)return;o=a.game,t.push(...a.events)}return{game:o,events:t}}c(xg,"projectedPlanState");function Ng(e,n,o,t,r,a,i,s){let u=o[0];if(u===void 0||u.winsImmediately&&!t.winsImmediately)return!1;let p=N(u),l=N(t),m=Lt(e,n,u,a,i),d=xg(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()),b=d!==void 0&&Ja(d.events,a,Math.max(i.evaluation.rootManaHandoffPenalty,1))>0,C=d!==void 0&&Za(d.events),h=d!==void 0&&d.game.winnerColor()!==a&&Un(e,d.game,a),k=y&&!b&&!C&&!h&&s.compiledChunks.length>1&&s.goalFamily!==S.ManaTempo&&(ie(s.utility,m)>=0||Zo(s.utility,m)||dt(s.utility,m,160)||s.goalFamily===S.ImmediateScore&&Gr(s.utility,m)),M=s.headFamily===S.SafeSupermanaProgress||s.headFamily===S.SafeOpponentManaProgress,R=M&&s.goalFamily===S.ImmediateScore&&s.compiledChunks.length>1,w=!r&&R&&!l&&o.slice(0,3).some(K=>{let pe=K.spiritDevelopment||K.spiritSameTurnScoreSetupNow||K.spiritOwnManaSetupNow||K.safeSupermanaPickupNow||K.safeOpponentManaPickupNow||K.winsImmediately||K.scoresSupermanaThisTurn||K.scoresOpponentManaThisTurn;return!N(K)&&pe&&ie(s.headUtility,Lt(e,n,K,a,i))<0}),v=!r&&R&&o.slice(0,3).some(K=>K.spiritSameTurnScoreSetupNow||K.spiritOwnManaSetupNow||K.sameTurnScoreWindowValue>0),O=!r&&R&&o.slice(0,3).some(K=>!N(K)&&Q(K)),E=!r&&R&&!p&&!re(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(K=>Q(K)&&K.sameTurnScoreWindowValue===0&&!K.spiritSameTurnScoreSetupNow&&!K.spiritOwnManaSetupNow).length>=3,_=r&&s.headFamily===S.SpiritImpact&&s.goalFamily===S.ImmediateScore&&B(t)&&!t.attacksOpponentDrainer&&!re(t)&&o.slice(0,3).some(K=>le(K.inputs,t.inputs)||!B(K)||K.attacksOpponentDrainer||re(K)?!1:K.spiritSetupGain>=t.spiritSetupGain&&K.safeSupermanaProgressSteps<=t.safeSupermanaProgressSteps&&K.safeOpponentManaProgressSteps<=t.safeOpponentManaProgressSteps&&ie(Lt(e,n,K,a,i),s.headUtility)>=0);k=k&&!w&&!v&&!O&&!E;let z=o.slice(0,3).every(K=>{let pe=Lt(e,n,K,a,i);return Zo(s.utility,pe)&&(!l||N(K))})||k,$=t.spiritSameTurnScoreSetupNow||t.sameTurnScoreWindowValue>0||t.attacksOpponentDrainer||re(t),Z=s.headFamily===S.SpiritImpact&&o.slice(0,4).filter(K=>Wf(n,t,K,i)).length>=2;if(x||_||s.headFamily===S.DrainerKill&&!t.attacksOpponentDrainer||M&&!Q(t)&&!k||!z&&s.headFamily===S.SpiritImpact&&!$&&!t.spiritOwnManaSetupNow&&!Z)return!1;let Y=o.slice(0,3).some(K=>K.spiritDevelopment||K.spiritSameTurnScoreSetupNow||K.spiritOwnManaSetupNow);return s.headFamily===S.SpiritImpact&&!Y&&!$&&!t.spiritOwnManaSetupNow&&!z&&!Z?!1:!l||p||z}c(Ng,"injectedCandidatePassesRootGate");function Q0(e,n,o,t,r,a,i){let s=a.compiledChunks[0];if(s===void 0)return;let u=[...s],p=r.find(h=>le(h.inputs,u)),l=p??i.buildInjectedRootCandidate?.(n,o,t,u,a),m=c(()=>({inputs:u,family:a.headFamily,admitted:!1,reason:ln.RejectInjectedMacroRoot}),"rejected");if(l===void 0||!Ng(e,n,r,l,p!==void 0,o,t,a))return m();let d=p===void 0?[...r,l]:[...r];p===void 0&&d.sort(F0);let f=r[0],y=d.findIndex(h=>le(h.inputs,u)),b=d[y];if(f===void 0||b===void 0)return m();let C=le(b.inputs,f.inputs);if(!C){let h=Lt(e,n,f,o,t),k=Lt(e,n,b,o,t),M=ie(a.utility,h)>0||ie(a.headUtility,h)>0||ie(k,h)>0||Mo(a.utility,h)||Mo(k,h),R=b.winsImmediately&&!f.winsImmediately||b.attacksOpponentDrainer&&!f.attacksOpponentDrainer||(b.scoresSupermanaThisTurn||b.scoresOpponentManaThisTurn)&&!(f.scoresSupermanaThisTurn||f.scoresOpponentManaThisTurn)||b.sameTurnScoreWindowValue>f.sameTurnScoreWindowValue&&b.sameTurnScoreWindowValue>0||!N(b)&&N(f)||b.classes.drainerSafetyRecover&&f.ownDrainerVulnerable&&!f.classes.drainerSafetyRecover||Q(b)&&!Q(f)&&!N(b),w=a.headFamily===S.SpiritImpact&&a.goalFamily===S.SpiritImpact&&r.slice(0,4).filter(v=>Wf(n,b,v,t)).length>=2&&ie(k,h)>=0&&V(f.heuristic,b.heuristic)<=8;C=M||R||w}return C&&p===void 0&&r.splice(0,r.length,...d),{inputs:u,family:I(b),admitted:C,reason:C?ln.AdmitInjectedMacroRoot:ln.RejectInjectedMacroRoot}}c(Q0,"evaluateInjectedRoot");function Z0(e,n,o,t,r,a,i={}){if(!D(t)||r.length===0||e.session.checkpoint()||n.activeColor===P.Black&&n.turnNumber===2&&n.monsMovesCount<=1&&n.playerCanUseAction()&&n.playerCanMoveMana())return;let s=[],u=[],p=r[0];if(p===void 0)return;Lo(s,Gt(p,ln.RankedRoot));for(let[f,y]of pl){if(e.session.checkpoint())return;let b=Y0(e,n,r,o,t,y),C=b===void 0?void 0:r[b];if(C===void 0)continue;let h=Gt(C,f);Lo(u,h),Lo(s,h)}let l=X0(r,t),m=l===void 0?void 0:r[l];if(m!==void 0){let f=Gt(m,ln.PreserveSpiritRepresentative);Lo(u,f),Lo(s,f)}let d=a===void 0?void 0:Q0(e,n,o,t,r,a,i);if(d?.admitted){let f=r.find(y=>le(y.inputs,d.inputs));f!==void 0&&Lo(s,Gt(f,ln.AdmitInjectedMacroRoot))}return e.session.checkpoint()?void 0:{orderedShortlist:s,preservedFamilyRepresentatives:u,approvedRoot:void 0,injectedRoot:d}}c(Z0,"productionRootAdvisorPresearch");function Es(e){let n=[];e.injectedRoot?.admitted&&n.push([...e.injectedRoot.inputs]);for(let o of e.preservedFamilyRepresentatives)n.some(t=>le(t,o.inputs))||n.push([...o.inputs]);return n}c(Es,"productionRootAdvisorPriorityInputs");var tt=15,sc=33;function J0(e,n){let o=0,t=tt;for(let[r,a]of e.board.entries()){if(a.kind!=="mon-with-mana"||a.mon.color!==n||j(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(J0,"carrierSnapshot");function Dg(e,n,o){let[t,r]=J0(e,o),[a,i]=J0(n,o);return a>t||i<r&&i<tt}c(Dg,"hasCarrierProgress");function _g(e,n){return e.board.base({kind:A.Spirit,color:n,cooldown:0})}c(_g,"spiritBase");function Fg(e,n){let o=_g(e,n);for(let[t,r]of e.board.entries()){let a=H(r);if(!Oe(t,o)&&a?.kind===A.Spirit&&a.color===n&&!j(a))return!0}return!1}c(Fg,"hasAwakeSpiritOffBase");function Bf(e,n,o,t){return t.some(r=>r.kind==="spirit-target-move")||Mi(e,o)&&Fg(n,o)}c(Bf,"hasSpiritDevelopment");function Wg(e,n,o,t){return t.some(r=>r.kind==="mana-scored")||He(n,o)>He(e,o)}c(Wg,"isImmediateScore");function Lf(e,n){return e.some(o=>o.kind==="mon-fainted"&&o.mon.kind===A.Drainer&&o.mon.color===G(n))}c(Lf,"attacksDrainer");function Sl(e,n,o,t,r=Un(e,n,t),a=Un(e,o.game,t)){let i=Wg(n,o.game,t,o.events),s=Lf(o.events,t),u=r&&!a,p=Dg(n,o.game,t),l=ic(o.events),m=Bf(n,o.game,t,o.events);return{immediateScore:i,drainerAttack:s,drainerSafetyRecover:u,carrierProgress:p,material:l,quiet:!i&&!s&&!u&&!p&&!l&&!m}}c(Sl,"classifyTransition");function hl(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(hl,"orderingEventBonus");function Gf(e,n){return e.some(o=>o.kind==="mana-scored"&&n(o.mana))}c(Gf,"scoresMana");function Vf(e,n){return e.some(o=>o.kind==="pickup-mana"&&n(o.mana))}c(Vf,"picksUpMana");function Hf(e,n,o){return e.some(t=>t.kind==="mana-move"&&o(t.mana)&&lr(t.to,n)<lr(t.from,n))}c(Hf,"manaMovedToward");function uc(e,n,o){return e.some(t=>t.kind==="spirit-target-move"&&t.item.kind==="mana"&&o(t.item.mana)&&lr(t.to,n)<lr(t.from,n))}c(uc,"spiritMovesManaToward");function ei(e,n,o,t){let r=on(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&&!j(i.mon)&&qe(i.mana,t))return Ep(e,n.board,r,o,a);return!1}c(ei,"safeCarrierForMana");function Os(e,n,o,t,r){return uc(o,t,a=>qe(a,r))||o.some(a=>a.kind==="spirit-target-move"&&a.item.kind==="mana"&&qe(a.item.mana,r))&&ei(e,n,t,r)}c(Os,"spiritManaSetup");function eM(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&&!j(a.mon)&&qe(a.mana,o)){t=0;continue}if(!(a.kind!=="mon"&&a.kind!=="mon-with-consumable")&&!(a.mon.color!==n||a.mon.kind!==A.Drainer||j(a.mon)))for(let[i,s]of e.board.entries()){if(s.kind!=="mana"||!qe(s.mana,o))continue;let u=te(r,i);t=t===void 0?u:Math.min(t,u)}}return t}c(eM,"approximateSpecificManaProgressSteps");function Bg(e,n){let o;for(let[t,r]of e.board.entries()){if(r.kind!=="mon-with-mana"||r.mon.color!==n||j(r.mon))continue;let a=Math.max(0,dl(t)-1);o=o===void 0?a:Math.min(o,a)}return o}c(Bg,"approximateBestCarrierSteps");function bl(e,n,o,t=!1){let r=t?ls(e,n).colorSummary(o):void 0,a=Math.max(0,ue-n.monsMovesCount),i=eM(n,o,{kind:"supermana"}),s=eM(n,o,{kind:"regular",color:G(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??ll(n,o),scorePathBestSteps:r?.scorePathWindow.bestSteps??Bg(n,o)}}c(bl,"approximateActiveTurnSummary");function oM(e,n){let o=n.activeColor,t=bl(e,n,o);return t.sameTurnScoreWindowValue>0||z0(n,o)||t.safeSupermanaProgress||t.safeOpponentManaProgress}c(oM,"hasProTacticalPotential");function tM(e,n,o,t,r){if(n.activeColor===o)return t?Rm(e,n,o):bl(e,n,o,r)}c(tM,"rootTurnSummary");function Uf(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(Uf,"liveSpiritSetupGain");function nM(e,n){if(e>=tt||n<=0)return 0;let o=Math.max(0,Math.min(ue,e));return(ue-o)*n}c(nM,"rootProgressBonus");function rM(e,n){let o=0;return n.scoresSupermanaThisTurn?o=g(o,Math.max(0,e.evaluation.supermanaScoreBonus)):n.supermanaProgress&&!n.ownDrainerVulnerable&&(o=g(o,Math.max(0,e.evaluation.supermanaProgressBonus)),o=g(o,nM(n.safeSupermanaProgressSteps,8))),n.scoresOpponentManaThisTurn?o=g(o,Math.max(0,e.evaluation.opponentManaScoreBonus)):n.opponentManaProgress&&!n.ownDrainerVulnerable&&(o=g(o,Math.max(0,e.evaluation.opponentManaProgressBonus)),o=g(o,nM(n.safeOpponentManaProgressSteps,6))),n.manaHandoffToOpponent&&(o=V(o,Math.max(0,e.evaluation.softManaHandoffPenalty))),n.hasRoundtrip&&(o=V(o,Math.max(0,e.evaluation.softRoundtripPenalty))),o}c(rM,"rootSoftPriority");function rt(e,n){return e===n?0:e?-1:1}c(rt,"compareBooleanPreferred");function Cl(e,n){let o=e<tt,t=n<tt;return o!==t?o?-1:1:o?e-n:0}c(Cl,"progressStepsOrder");function Lg(e,n){let o=e<sc,t=n<sc;return o!==t?o?-1:1:o?e-n:0}c(Lg,"scorePathStepsOrder");function aM(e,n){let o=rt(e.winsImmediately,n.winsImmediately);if(o!==0||(o=rt(e.attacksOpponentDrainer,n.attacksOpponentDrainer),o!==0)||(o=rt(!e.ownDrainerVulnerable,!n.ownDrainerVulnerable),o!==0)||(o=rt(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=rt(t[0],t[1]),o!==0)return o;return e.sameTurnScoreWindowValue!==n.sameTurnScoreWindowValue?n.sameTurnScoreWindowValue-e.sameTurnScoreWindowValue:(o=rt(e.spiritSameTurnScoreSetupNow,n.spiritSameTurnScoreSetupNow),o!==0||(o=rt(e.spiritOwnManaSetupNow,n.spiritOwnManaSetupNow),o!==0)||e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.supermanaProgress&&n.supermanaProgress&&(o=Cl(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps),o!==0)||e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.opponentManaProgress&&n.opponentManaProgress&&(o=Cl(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps),o!==0)||e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&(o=Lg(e.scorePathBestSteps,n.scorePathBestSteps),o!==0)||(o=rt(e.supermanaProgress,n.supermanaProgress),o!==0)||e.supermanaProgress&&n.supermanaProgress&&(o=Cl(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps),o!==0)||(o=rt(e.opponentManaProgress,n.opponentManaProgress),o!==0)||e.opponentManaProgress&&n.opponentManaProgress&&(o=Cl(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps),o!==0)||(o=rt(!e.manaHandoffToOpponent,!n.manaHandoffToOpponent),o!==0)||(o=rt(!e.hasRoundtrip,!n.hasRoundtrip),o!==0)||(o=rt(e.spiritDevelopment,n.spiritDevelopment),o!==0)?o:e.efficiency!==n.efficiency?n.efficiency-e.efficiency:n.heuristic-e.heuristic)}c(aM,"tacticalRootOrder");function cc(e,n){if(e.heuristic!==n.heuristic)return n.heuristic-e.heuristic;let o=aM(e,n);return o!==0?o:lo(e.inputs,n.inputs)}c(cc,"compareRootCandidates");function Gg(e,n){switch(n){case 0:return e.classes.immediateScore;case 1:return e.classes.drainerAttack;default:return e.classes.drainerSafetyRecover}}c(Gg,"hasPriorityClass");function iM(e,n){if(e.length<=n)return[...e];if(n<=0)return[];let o=new Set,t=[],r=c(p=>{o.add(p),t.includes(p)||t.push(p)},"markPriority");for(let p=0;p<3;p+=1){let l=e.findIndex(m=>Gg(m,p));l>=0&&r(l)}let a=-1;for(let p=0;p<e.length;p+=1){let l=e[p];if(l===void 0||l.sameTurnScoreWindowValue<=0)continue;let m=e[a];(m===void 0||aM(l,m)<0)&&(a=p)}a>=0&&r(a);for(let p=0;p<e.length;p+=1){let l=e[p];if(l===void 0)continue;let m=l.scoresSupermanaThisTurn||l.scoresOpponentManaThisTurn||l.safeSupermanaPickupNow||l.safeOpponentManaPickupNow||l.spiritSameTurnScoreSetupNow||l.sameTurnScoreWindowValue>0||l.spiritOwnManaSetupNow,d=l.supermanaProgress&&l.safeSupermanaProgressSteps<tt||l.opponentManaProgress&&l.safeOpponentManaProgressSteps<tt;(m||d)&&o.add(p)}let i=[],s=new Set,u=c(p=>{if(i.length>=n||s.has(p))return;let l=e[p];l!==void 0&&(i.push(l),s.add(p))},"append");for(let p of t)u(p);for(let p=0;p<e.length;p+=1)o.has(p)&&u(p);for(let p=0;p<e.length;p+=1)u(p);return i}c(iM,"truncateWithClassCoverage");var Vg=4,Hg=6,Ug=600,jg=1800,Kg=220,qg=280;function pc(e,n){let o=new Set(e.map(t=>yn(t.inputs)));for(let t of n)o.has(yn(t.inputs))||(o.add(yn(t.inputs)),e.push(t))}c(pc,"appendUniqueTransitions");function sM(e){return e.budget.depth>=3?Hg:Vg}c(sM,"forcedAttackCandidatesLimit");function zg(e){return e.budget.depth>=3?jg:Ug}c(zg,"forcedAttackNodeBudget");function $g(e){return e.budget.depth>=3?qg:Kg}c($g,"forcedAttackEnumLimit");function uM(e){return e.budget.depth>=3?8:4}c(uM,"spiritSetupFallbackCandidatesLimit");function Yg(e){return e.budget.depth>=3?256:128}c(Yg,"spiritSetupFallbackEnumLimit");function jf(e){return e.budget.depth>=3?8:4}c(jf,"safeDrainerPickupFallbackCandidatesLimit");function cM(e){return e.budget.depth>=3?8:4}c(cM,"drainerSafetyFallbackCandidatesLimit");function Xg(e){return e.budget.depth>=3?192:96}c(Xg,"drainerSafetyFallbackEnumLimit");function pM(e){return e.budget.depth>=3?24:12}c(pM,"genericRootFallbackEnumLimit");function Kf(e,n,o){let t=[];for(let[r,a]of e.board.entries()){let i=H(a);i?.color===n&&!j(i)&&(o===void 0||i.kind===o)&&t.push(r)}return t}c(Kf,"awakeMonLocations");function qf(e,n,o,t){return uc(o,t,r=>r.kind==="regular"&&r.color===t)||Os(e,n,o,t,{kind:"supermana"})||Os(e,n,o,t,{kind:"regular",color:G(t)})}c(qf,"hasSpiritScoringManaSetup");function lM(e,n,o,t,r){if(e.session.checkpoint()||!n.playerCanUseAction())return[];let a=Kf(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 p=Qp(e,n,Yg(t),$n,[u]);if(e.session.cancelled)return[];for(let l of p){if(e.session.checkpoint())return[];if(s.length>=i)break;qf(e,l.game,l.events,o)&&s.push(l)}}return s}c(lM,"collectTargetedSpiritSetupInputs");function dM(e,n,o,t,r){if(e.session.checkpoint())return[];let a=Kf(n,o);if(a.length===0)return[];let i=Math.max(1,r),s=[],u=new Set;for(let p of a){if(e.session.checkpoint())return[];if(s.length>=i)break;let l=Qp(e,n,Xg(t),$n,[p]);if(e.session.cancelled)return[];for(let m of l){if(e.session.checkpoint())return[];if(s.length>=i)break;if(Un(e,m.game,o))continue;let d=yn(m.inputs);u.has(d)||(u.add(d),s.push(m))}}return s.sort((p,l)=>lo(p.inputs,l.inputs)),s}c(dM,"collectTargetedDrainerSafetyInputs");function mM(e,n){return e.some(o=>o.kind==="pickup-mana"&&qe(o.mana,n))}c(mM,"eventsPickupWantedMana");function Qg(e,n){return e.some(o=>o.kind==="mana-scored"&&qe(o.mana,n))}c(Qg,"eventsScoreWantedMana");function zf(e,n,o,t){return mM(n.events,t)&&ei(e,n.game,o,t)}c(zf,"transitionHasSafeDrainerPickup");function $f(e,n,o,t,r){if(e.session.checkpoint()||!n.playerCanMoveMon())return[];let a=Kf(n,o,A.Drainer);if(a.length===0)return[];let i=Math.max(1,t),s=[],u=new Set;for(let p of a){if(e.session.checkpoint())return[];if(s.length>=i)break;let l=Dp(e,n,o,p,r);if(e.session.cancelled)return[];if(l===void 0||l.length===0)continue;let m=[{kind:"location",location:{i:p.i,j:p.j}},...l.map(f=>({kind:"location",location:{i:f.i,j:f.j}}))],d=nn(n,m);if(d!==void 0&&mM(d.events,r)&&(ei(e,d.game,o,r)||Qg(d.events,r))){let f=yn(m);u.has(f)||(u.add(f),s.push({inputs:m,game:d.game,events:d.events}))}}return s.sort((p,l)=>lo(p.inputs,l.inputs)),s}c($f,"collectTargetedSafeDrainerPickupInputs");function fM(e,n){return e.playerCanMoveMon()&&yl(e,n).length>0}c(fM,"canAttemptForcedDrainerAttackFallback");function Zg(e,n,o,t,r){if(e.session.checkpoint()||n.activeColor!==o||t.remaining===0)return!1;let a=se(n);if(r.has(a))return!0;t.remaining=Math.max(0,t.remaining-1);let i=Zb(e,n,o);return i&&e.session.cacheWriteAllowed&&r.add(a),i}c(Zg,"canAttackOpponentDrainerBeforeTurnEnds");function yM(e,n,o,t,r,a){if(e.session.checkpoint())return[];let i=a?yl(n,o):void 0;if(a&&i?.length===0)return[];let s=a?2:1,u=$g(t)*s,p={remaining:zg(t)*s},l=new Io(Math.max(1,p.remaining)),m=Qp(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(Lf(y.events,o)){f.push(y);continue}y.game.activeColor===o&&Zg(e,y.game,o,p,l)&&f.push(y)}return f}c(yM,"collectDrainerAttackInputs");function Jg(e){return e.some(n=>["mana-move","mana-scored","pickup-mana","mana-dropped","supermana-back-to-base"].includes(n.kind))}c(Jg,"rootTransitionRequiresExactLiteProgress");function ev(e){return e.some(n=>n.kind==="spirit-target-move"||n.kind==="mon-move"&&H(n.item)?.kind===A.Spirit)}c(ev,"rootTransitionRequiresExactLiteSpiritWindow");function SM(e){return Jg(e)||ev(e)}c(SM,"transitionRequiresExactLite");function hM(e,n,o,t){let r=e.budget.exactLiteRootCalls,a=e.budget.exactLiteStaticCalls;return e.search.exactLiteChecks&&r>0&&SM(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),ke(e,{budget:{exactLiteRootCalls:r,exactLiteStaticCalls:a},search:{exactRootAnalysis:e.search.exactLiteChecks?r>0&&SM(o.events):e.search.exactRootAnalysis}})}c(hM,"withExactLiteBudgetedTransitionConfig");function bM(e,n,o){let t=se(n);return ml(e,n,o,!1,!1,t)}c(bM,"rootCandidateSourceSnapshot");function Yf(e,n,o,t,r,a,i){if(e.session.checkpoint())return;let s=o.game,u=se(s),p=fl(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 l=Un(e,s,t),m=!1,d=Sl(e,n,o,t,a,l),f=Gf(o.events,Be=>Be.kind==="supermana"),y=Gf(o.events,Be=>Be.kind==="regular"&&Be.color!==t),b=Vf(o.events,Be=>Be.kind==="supermana"),C=Vf(o.events,Be=>Be.kind==="regular"&&Be.color!==t),h=tM(e,s,t,r.search.exactRootAnalysis,r.search.exactLiteChecks&&r.budget.exactLiteStaticCalls>0),k=b&&ei(e,s,t,{kind:"supermana"}),M=C&&ei(e,s,t,{kind:"regular",color:G(t)}),R=Os(e,s,o.events,t,{kind:"supermana"}),w=Os(e,s,o.events,t,{kind:"regular",color:G(t)}),v=f||b||Hf(o.events,t,Be=>Be.kind==="supermana")||R||(h?.safeSupermanaProgress??!1)||(h?.spiritAssistedSupermanaProgress??!1),O=y||C||Hf(o.events,t,Be=>Be.kind==="regular"&&Be.color!==t)||w||(h?.safeOpponentManaProgress??!1)||(h?.spiritAssistedOpponentManaProgress??!1)||(h?.spiritAssistedDenial??!1),E=h?.safeSupermanaProgressSteps??tt,x=h?.safeOpponentManaProgressSteps??tt,_=h?.scorePathBestSteps??sc,z=h?.sameTurnScoreWindowValue??0,$=Bf(n,s,t,o.events),Z=o.events.some(Be=>Be.kind==="spirit-target-move")&&s.activeColor===t&&z>0,Y=uc(o.events,t,Be=>Be.kind==="regular"&&Be.color===t)||R||w,K=Uf(h,$,Z,Y),pe=s.winnerColor()===t,Me=d.drainerAttack,Qe=!(pe||Me||f||y||h?.spiritAssistedScore===!0)&&Ja(o.events,t,Math.max(0,r.evaluation.rootManaHandoffPenalty))>0,fn=Za(o.events),Ze=rM(r,{supermanaProgress:v,opponentManaProgress:O,safeSupermanaProgressSteps:E,safeOpponentManaProgressSteps:x,scoresSupermanaThisTurn:f,scoresOpponentManaThisTurn:y,ownDrainerVulnerable:l,manaHandoffToOpponent:Qe,hasRoundtrip:fn}),Ln=lc(s,t,Math.max(0,r.budget.depth-1),r.budget.depth),Je=Ln??Hr(e,s,t,r.evaluation.weights,!1);Je=g(Je,hl(n.activeColor,t,o.events)),Je=g(Je,Ze);let St=o.events.some(Be=>Be.kind==="use-potion"),Ut=pe||Me||He(s,t)>=He(n,t)+2||f||y||h?.spiritAssistedScore===!0||!l&&(v||O);return St&&!Ut&&(Je=V(Je,Math.max(0,r.evaluation.potionSpendPenalty))),Ln===void 0&&(Je=Hp(Je)),{inputs:o.inputs,game:s,events:o.events,stateHash:u,heuristic:Je,efficiency:p,winsImmediately:pe,attacksOpponentDrainer:Me,ownDrainerVulnerable:l,ownDrainerWalkVulnerable:m,spiritDevelopment:$,keepsAwakeSpiritOnBase:Mi(n,t)&&Mi(s,t),manaHandoffToOpponent:Qe,hasRoundtrip:fn,scoresSupermanaThisTurn:f,scoresOpponentManaThisTurn:y,safeSupermanaPickupNow:k,safeOpponentManaPickupNow:M,safeSupermanaProgressSteps:E,safeOpponentManaProgressSteps:x,scorePathBestSteps:_,sameTurnScoreWindowValue:z,spiritSetupGain:K,spiritSameTurnScoreSetupNow:Z,spiritOwnManaSetupNow:Y,supermanaProgress:v,opponentManaProgress:O,policyPriority:Ze,classes:d}}c(Yf,"buildRootCandidate");function CM(e,n,o,t,r){let a=[...r],i=nn(n,a);if(i===void 0)return;let s=Yf(e,n,{inputs:a,game:i.game,events:i.events},o,t,Un(e,n,o),()=>bM(e,n,o));return s===void 0?void 0:{...s,rootRank:0}}c(CM,"buildRootCandidateForInputs");function Po(e,n,o,t){if(e.session.checkpoint())return[];let r=n.fen(),a=Un(e,n,o),i=Do(e,n,t.search.rootEnumerationLimit,$n);if(a&&!i.some(M=>!Un(e,M.game,o))&&pc(i,dM(e,n,o,t,cM(t))),e.session.checkpoint())return[];let s=bl(e,n,o,!1),u=Uf(s,!1,!1,!1);if(e.session.checkpoint())return[];let p={kind:"supermana"};if(s.safeSupermanaProgress&&!i.some(M=>zf(e,M,o,p))&&pc(i,$f(e,n,o,jf(t),p)),e.session.checkpoint())return[];let l={kind:"regular",color:G(o)};if(s.safeOpponentManaProgress&&!i.some(M=>zf(e,M,o,l))&&pc(i,$f(e,n,o,jf(t),l)),e.session.checkpoint())return[];if((t.policy.hardSpiritDeployment||t.policy.preferSpiritDevelopment)&&(ma(n,o)||u>0||s.spiritAssistedSupermanaProgress||s.spiritAssistedOpponentManaProgress)&&!i.some(M=>qf(e,M.game,M.events,o))&&pc(i,lM(e,n,o,t,uM(t))),e.session.cancelled)return[];let m={rootCalls:t.budget.exactLiteRootCalls,staticCalls:t.budget.exactLiteStaticCalls},d,f=c(()=>(d??(d=bM(e,n,o)),d),"getSourceSnapshot"),y=[],b=c(M=>{for(let R of M){if(e.session.checkpoint())return!1;let w=hM(t,o,R,m),v=Yf(e,n,R,o,w,a,f);if(e.session.checkpoint())return!1;v!==void 0&&y.push(v)}return!0},"appendCandidates");if(!b(i))return[];if(y.length===0){let M=Do(e,n,pM(t),$n);if(e.session.checkpoint()||!b(M))return[]}let C=y.map((M,R)=>({...M,rootRank:R}));C.sort(cc);let h=C.some(M=>M.winsImmediately),k;if(!h&&!C.some(M=>M.attacksOpponentDrainer)&&fM(n,o)){let M=yM(e,n,o,t,sM(t),t.policy.targetedDrainerAttackFallback);if(e.session.checkpoint())return[];if(M.length>0){k=new Set(M.map(w=>yn(w.inputs)));let R=new Set(C.map(w=>yn(w.inputs)));for(let w of M){if(e.session.checkpoint())return[];let v=yn(w.inputs);if(R.has(v))continue;R.add(v);let O=hM(t,o,w,m),E=Yf(e,n,w,o,O,a,f);if(e.session.checkpoint())return[];E!==void 0&&C.push({...E,rootRank:0})}C.sort(cc),h=C.some(w=>w.winsImmediately)}}if(!h&&C.some(M=>M.attacksOpponentDrainer)?C=C.filter(M=>M.attacksOpponentDrainer):k!==void 0&&(C=C.filter(M=>k.has(yn(M.inputs)))),C=iM(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(Po,"rankRootCandidates");function lc(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(lc,"terminalSearchScore");var MM=110;function kM(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(kM,"classPriority");function TM(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=kM(n.classes)-kM(e.classes);return t!==0?t:-fb(e.hash,n.hash)}c(TM,"compareRankedChildren");function RM(e,n,o){return o?g(e,MM)>=n:e<=g(n,MM)}c(RM,"childWithinCoverageMargin");function Xf(e){return e.classes.immediateScore||e.classes.drainerAttack||e.classes.drainerSafetyRecover||e.classes.carrierProgress||e.orderingEfficiency>0&&!e.classes.material}c(Xf,"isPriorityChild");function PM(e,n,o,t=!0){if(e.length<=n||n===0)return[...e];let r=e[n-1]?.heuristic??0,a=e.findIndex((u,p)=>p>=n&&Xf(u)&&(t||RM(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,p)=>i[p]===!0)}c(PM,"truncateChildrenWithCoverage");function wM(e,n,o=!0){if(e.length<3||e.slice(0,2).some(Xf))return;let t=e[1]?.heuristic??0,r=e.findIndex((a,i)=>i<2||!Xf(a)?!1:o||RM(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(wM,"enforceTacticalChildTop2");function AM(e,n,o){return!o.material&&e<=0&&!n&&!o.immediateScore&&!o.drainerAttack&&!o.drainerSafetyRecover&&!o.carrierProgress}c(AM,"isQuietReductionCandidate");function gM(e,n,o){return e||n>0&&!o.quiet&&!o.material}c(gM,"isSelectiveExtensionCandidate");var nv=2400,ov=32768,tv=Symbol("preferability-cache");function vM(e){return e.caches.session.getOrCreate(tv,()=>new ge(ov))}c(vM,"preferabilityCache");function Qf(e,n,o,t,r,a=se(n)){let i=vM(e),s=un(o),u=bi(t.evaluation.weights),p=i.get(a,s,void 0,u);if(p!==void 0)return r.cacheHits+=1,p;let l=Hr(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,l,s,void 0,u)),l}c(Qf,"cachedPreferability");function rv(e,n,o,t){if(n.execution.session.checkpoint())return[];let r=e.activeColor===n.perspective,a=e.activeColor,i=ml(n.execution,e,n.perspective,!1,!1,o),s=Un(n.execution,e,a),u=[];for(let p of Do(n.execution,e,n.config.search.nodeEnumerationLimit)){if(n.execution.session.checkpoint())return[];let l=se(p.game),m=Un(n.execution,p.game,a),d=Sl(n.execution,e,p,a,s,m),f=fl(n.execution,e,p.game,a,p.events,i,l,{isRoot:!1,applyBacktrackPenalty:!1,applyRootManaHandoffGuard:!1,includeTacticalExact:!1,includeStrategicExact:!1,rootBacktrackPenalty:n.config.evaluation.rootBacktrackPenalty,rootManaHandoffPenalty:n.config.evaluation.rootManaHandoffPenalty}),y=lc(p.game,n.perspective,0,n.config.budget.depth)??Qf(n.execution,p.game,n.perspective,n.config,n.stats,l);y=g(y,hl(a,n.perspective,p.events)),t!==void 0&&cm(l,t)&&(y=g(y,nv));let b=s!==m||p.events.some(C=>C.kind==="mana-scored"||C.kind==="mon-fainted"&&C.mon.kind===A.Drainer);u.push({game:p.game,hash:l,heuristic:y,orderingEfficiency:f,tacticalExtensionTrigger:b,quietReductionCandidate:AM(f,b,d),classes:d})}return u.sort((p,l)=>TM(p,l,r)),wM(u,r,!0),PM(u,n.config.search.nodeBranchLimit,r,!0)}c(rv,"rankedChildren");function Is(e,n,o){return lc(e,o.perspective,0,o.config.budget.depth)??Qf(o.execution,e,o.perspective,o.config,o.stats,n)}c(Is,"staticScore");function av(e,n,o,t,r){let a=Is(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 p of Do(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(!B0(p.events))continue;r.stats.visitedNodes+=1;let l=se(p.game),m=Qf(r.execution,p.game,r.perspective,r.config,r.stats,l);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(av,"quiescenceScore");function Ml(e,n,o,t,r,a,i){let s=lc(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 Is(e,n,i);if(o<=0)return i.config.search.quiescence&&i.stats.quiescenceNodes<i.config.budget.quiescenceNodes?av(e,n,t,r,i):Is(e,n,i);let u=t,p=r,l=u,m=p,d,f=i.config.search.transpositionTable?i.transposition.get(n):void 0;if(f!==void 0&&(i.stats.cacheHits+=1,mb(f.bestChildHash)||(d=f.bestChildHash),f.depth>=o&&(f.bound==="exact"||(f.bound==="lower"?u=Math.max(u,f.score):p=Math.min(p,f.score),u>=p))))return f.score;let y=e.activeColor===i.perspective;if(i.config.search.futilityPruning&&o===1&&!oM(i.execution,e)){let M=Is(e,n,i);if(y&&g(M,i.config.search.futilityMargin)<u||!y&&V(M,i.config.search.futilityMargin)>p)return M}let b=rv(e,i,n,d);if(b.length===0)return Is(e,n,i);let C=y?-2147483648:2147483647,h=lb,k=!1;for(let M of b){if(i.stats.visitedNodes>=i.config.budget.maxVisitedNodes){k=!0;break}let R=Math.max(0,o-1),w=a;i.config.search.selectiveExtensions&&gM(M.tacticalExtensionTrigger,M.orderingEfficiency,M.classes)&&w>0&&(i.extensionNodeBudget===0||i.stats.extensionNodes<i.extensionNodeBudget)?(R=o,w-=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 v=Ml(M.game,M.hash,R,u,p,w,i);if((y&&v>C||!y&&v<C)&&(C=v,h=M.hash),y?u=Math.max(u,C):p=Math.min(p,C),u>=p||i.execution.session.checkpoint())break}if((C===-2147483648||C===2147483647)&&(C=Is(e,n,i)),i.config.search.transpositionTable&&!k&&i.execution.session.cacheWriteAllowed){let M=C<=l?"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:h})}return C}c(Ml,"boundedSearch");function Zf(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}}}c(Zf,"createSearchContext");function iv(e){let n=se(e.game);return cm(n,e.stateHash)?e:{...e,stateHash:n}}c(iv,"candidateWithCurrentStateHash");function sv(e,n){return e.score>n.score||e.score===n.score&&cc(e,n)<0}c(sv,"betterEvaluation");function uv(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:Ml(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||sv(s,t))&&(t=s),r=Math.max(r,i)}return{evaluations:o,best:t}}c(uv,"evaluateFocusedRoots");function EM(e,n,o,t,r){let a=Zf(e,o,r),i=se(n);return Ml(n,i,Math.max(0,t),-2147483648,2147483647,r.search.maxExtensionsPerPath,a)}c(EM,"evaluateSearchScore");function Jf(e,n,o,t,r,a={},i=t.search.transpositionTable){let s=n.fen(),u=r?r.map(iv):Po(e,n,o,t),p,l=g0({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=>(p??(p=Zf(e,o,ke(m.config,{search:{transpositionTable:m.useTranspositionTable}}))),p.stats.visitedNodes=Math.max(p.stats.visitedNodes,m.visitedNodes),{score:Ml(m.candidate.game,m.candidate.stateHash,m.depth,m.alpha,2147483647,0,p),visitedNodes:p.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:l.candidates,scoutVisitedNodes:l.scoutVisitedNodes}}c(Jf,"focusRootCandidatesForSearch");function ey(e,n,o,t,r,a={}){let i=n.fen(),s=Jf(e,n,o,t,r,a),u=s.candidates,p=Zf(e,o,t);p.stats.visitedNodes=s.scoutVisitedNodes;let{evaluations:l,best:m}=uv(u,p);if(n.fen()!==i)throw new Error("bounded search mutated its source game");return{best:m,evaluations:l,visitedNodes:p.stats.visitedNodes,cacheHits:p.stats.cacheHits,timedOut:p.execution.session.cancelled}}c(ey,"searchRootCandidates");function ny(e){vM(e).clear(),K0(e),Pp(e)}c(ny,"clearSearchCaches");function ni(e){return e===je.Production}c(ni,"turnEngineModeUsesMacroPlans");function dc(e){return e.planner.enabled&&e.planner.mode===Fe.Production}c(dc,"productionTurnEngineLive");function kl(e){return dc(e)&&e.planner.lowBudgetGuard}c(kl,"productionLowBudgetGuardLive");function OM(e){return dc(e)&&e.planner.midTurnTacticalGuard}c(OM,"productionMidTurnTacticalGuardLive");function IM(e){return e.activeColor===P.White&&e.turnNumber===1&&e.isFirstTurn()&&e.monsMovesCount===1&&!e.playerCanUseAction()&&!e.playerCanMoveMana()}c(IM,"productionIsWhiteTurnOneManaOnlyFollowup");function xM(e,n){return dc(n)&&e.activeColor===P.White&&e.turnNumber>=3&&e.monsMovesCount===0&&e.playerCanUseAction()&&e.playerCanMoveMana()}c(xM,"productionUseFreshLiveHeadPlan");function mc(e,n){if(n.activeColor!==P.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(mc,"productionIsSafeEarlyBlackOpeningState");function NM(e,n){if(Ro(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(NM,"shouldSkipProductionLowBudgetState");function DM(e,n){if(n.activeColor!==P.White||n.turnNumber!==3||n.monsMovesCount===0||n.monsMovesCount>2||!n.playerCanUseAction()||!n.playerCanMoveMana()||Ro(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(DM,"shouldDisableProductionMidTurnTacticalEngine");function _M(e,n){return!kl(n)||e.activeColor!==P.Black||e.turnNumber!==2||e.monsMovesCount>1||e.playerCanUseAction()&&e.playerCanMoveMana()?n:ke(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(_M,"applyProductionLowBudgetSearchClamp");function Zr(e,n){let o=_o(n);return!ni(o.mode)||!n.planner.lowBudgetGuard||!Ro(e)?o:tl(o)}c(Zr,"turnEngineConfigForGame");function FM(e,n,o,t,r){if(!D(r)||!Wo(e,o)||n.allowsImmediateOpponentWin||t.allowsImmediateOpponentWin||n.opponentReachesMatchPoint||t.opponentReachesMatchPoint)return;let a=!N(e),i=!N(o);if(a===i)return;let s=g(n.worstReplyScore,240)>=t.worstReplyScore,u=g(t.worstReplyScore,240)>=n.worstReplyScore;if(a&&s)return 1;if(i&&u)return-1}c(FM,"safeProgressSiblingOrder");function WM(e,n,o,t,r,a,i){if(!D(i)||!Wo(e,o))return;let s=N(e),u=N(o);if(s===u||r===void 0||a===void 0)return;let p=s?e:o,l=s?n:t,m=s?r:a,d=s?o:e,f=s?t:n,y=s?a:r;if(!(l.allowsImmediateOpponentWin||l.opponentReachesMatchPoint||f.allowsImmediateOpponentWin||f.opponentReachesMatchPoint||m.plan.goalFamily!==S.ImmediateScore||ie(m.plan.utility,y.plan.utility)<0||g(l.worstReplyScore,160)<f.worstReplyScore||g(p.score,32)<d.score))return s?1:-1}c(WM,"riskyRecoveryProgressSiblingOrder");function Jr(e,n){return Te(e.inputs,n.inputs)}c(Jr,"sameFirstInput");function oi(e,n,o){return D(o)&&Jr(e,n)&&e.efficiency===n.efficiency&&Math.abs(e.score-n.score)<=128&&!N(e)&&!N(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(oi,"sameOpeningSafeSetupPair");function BM(e,n,o,t,r){return D(r)&&e.spiritOwnManaSetupNow&&!o.spiritDevelopment&&!o.spiritSameTurnScoreSetupNow&&!o.spiritOwnManaSetupNow&&oi(e,o,r)&&e.rootRank+3<=o.rootRank&&g(e.score,128)>=o.score&&g(n.worstReplyScore,160)>=t.worstReplyScore}c(BM,"omittedSameOpeningSetupCompetes");function LM(e,n,o,t,r){if(!D(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,p=a?o:e,l=a?t:n,m=p.supermanaProgress||p.opponentManaProgress||p.spiritOwnManaSetupNow||p.spiritSameTurnScoreSetupNow||p.spiritDevelopment;if(!(N(s)||u.allowsImmediateOpponentWin||u.opponentReachesMatchPoint||l.allowsImmediateOpponentWin||l.opponentReachesMatchPoint||s.manaHandoffToOpponent||s.hasRoundtrip||p.winsImmediately||p.attacksOpponentDrainer||!m||g(s.score,144)<p.score||g(u.worstReplyScore,192)<l.worstReplyScore))return a?1:-1}c(LM,"safePickupOrder");function GM(e,n,o,t,r){return Ef(e,o,r)&&!n.allowsImmediateOpponentWin&&!t.allowsImmediateOpponentWin&&!n.opponentReachesMatchPoint&&!t.opponentReachesMatchPoint}c(GM,"safePlainSpiritReplyRiskPair");function VM(e,n,o){return!D(o)||n.length<2?!1:ac(e,n,(t,r)=>Wo(t,r)&&N(t)!==N(r))}c(VM,"safeProgressCompetition");function oy(e,n,o,t){if(!D(t)||e.activeColor!==P.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}c(oy,"isProductionModeWhiteSpiritFollowupSetupPair");function Tl(e,n,o,t){return ac(n,o,(r,a)=>oy(e,r,a,t))}c(Tl,"whiteSpiritFollowupSetupCompetition");function fc(e){return I(e)===S.ManaTempo&&e.sameTurnScoreWindowValue>0&&!e.winsImmediately&&!e.attacksOpponentDrainer&&!e.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&!e.manaHandoffToOpponent&&!e.hasRoundtrip}c(fc,"nonConcreteManaWindowRoot");function HM(e,n,o,t){return!D(t)||o.length<2||e.activeColor!==P.Black||e.turnNumber>4?!1:ac(n,o,(r,a)=>{let i=fc(r),s=fc(a);if(i===s)return!1;let u=i?r:a,p=i?a:r;return u.sameTurnScoreWindowValue<=1&&p.sameTurnScoreWindowValue===0&&I(p)===S.ManaTempo&&p.ownDrainerVulnerable===u.ownDrainerVulnerable&&p.ownDrainerWalkVulnerable===u.ownDrainerWalkVulnerable&&!p.manaHandoffToOpponent&&!p.hasRoundtrip&&wn(p,u)&&g(p.score,192)>=u.score})}c(HM,"blackManaWindowProgressCompetition");function UM(e,n,o){if(!D(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&&V(t[0]??0,t[1]??0)<=64}c(UM,"closePositiveScoreCompetition");function ea(e,n,o,t,r,a,i,s){let u=o[t],p=o[r];if(!no(i)||n.turnNumber>3||u===void 0||p===void 0||!B(u)||!B(p)||N(u)||N(p)||u.manaHandoffToOpponent||p.manaHandoffToOpponent||u.hasRoundtrip||p.hasRoundtrip||u.supermanaProgress||u.opponentManaProgress||p.supermanaProgress||p.opponentManaProgress||u.sameTurnScoreWindowValue>0||p.sameTurnScoreWindowValue>0||u.spiritSameTurnScoreSetupNow||p.spiritSameTurnScoreSetupNow||u.spiritOwnManaSetupNow||p.spiritOwnManaSetupNow||Math.abs(u.score-p.score)>224)return;let l=s.get(t)??rn(e,u.game,a,i);s.set(t,l);let m=s.get(r)??rn(e,p.game,a,i);return s.set(r,m),l>=g(m,32)?1:m>=g(l,32)?-1:0}c(ea,"spiritFollowupFloorOrder");function xs(e,n,o,t){return D(t)&&e.activeColor===P.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}c(xs,"isProductionModeBlackPlainSpiritFollowupSetupPair");function Rl(e,n,o,t,r,a,i,s,u,p){let l=o[t],m=o[a];if(l===void 0||m===void 0)return;let d,f,y,b,C,h,k;if(xs(n,l,m,u))d=l,f=r,y=m,b=i,C=t,h=a,k=!0;else if(xs(n,m,l,u))d=m,f=i,y=l,b=r,C=a,h=t,k=!1;else return;if(f.allowsImmediateOpponentWin||b.allowsImmediateOpponentWin||f.opponentReachesMatchPoint||b.opponentReachesMatchPoint)return;let M=p.get(C)??rn(e,d.game,s,u);p.set(C,M);let R=p.get(h)??rn(e,y.game,s,u);if(p.set(h,R),y.rootRank<=d.rootRank&&g(y.score,64)>=d.score&&y.spiritSetupGain>=g(d.spiritSetupGain,32)&&g(b.worstReplyScore,192)>=f.worstReplyScore&&g(R,32)>=M)return k?-1:1;if(!(g(f.worstReplyScore,192)<b.worstReplyScore||M<g(R,32)&&d.score<y.score))return k?1:-1}c(Rl,"blackPlainSpiritFollowupReplyOrder");function Pl(e,n,o,t,r,a,i,s,u,p){let l=o[t],m=o[a];if(!D(u)||n.activeColor!==P.Black||n.turnNumber>2||l===void 0||m===void 0||!B(l)||!B(m)||!Jr(l,m)||l.ownDrainerVulnerable!==m.ownDrainerVulnerable||l.manaHandoffToOpponent!==m.manaHandoffToOpponent||l.hasRoundtrip!==m.hasRoundtrip||l.spiritSameTurnScoreSetupNow||m.spiritSameTurnScoreSetupNow||l.spiritOwnManaSetupNow||m.spiritOwnManaSetupNow||l.winsImmediately||m.winsImmediately||l.attacksOpponentDrainer||m.attacksOpponentDrainer||r.allowsImmediateOpponentWin||i.allowsImmediateOpponentWin||r.opponentReachesMatchPoint||i.opponentReachesMatchPoint)return;let d=p.get(t)??rn(e,l.game,s,u);p.set(t,d);let f=p.get(a)??rn(e,m.game,s,u);p.set(a,f);let y=r.worstReplyScore>=g(i.worstReplyScore,96)&&g(d,32)>=f&&g(l.score,48)>=m.score,b=i.worstReplyScore>=g(r.worstReplyScore,96)&&g(f,32)>=d&&g(m.score,48)>=l.score;if(y===b){let C=r.worstReplyScore<g(i.worstReplyScore,96)&&d<g(f,96),h=i.worstReplyScore<g(r.worstReplyScore,96)&&f<g(d,96);return C&&h&&l.score!==m.score?l.score>m.score?1:-1:void 0}return y?1:-1}c(Pl,"earlyBlackPlainSpiritSiblingOrder");function jM(e,n,o,t,r,a){if(!D(a)||e.activeColor!==P.Black||e.turnNumber>4||o.allowsImmediateOpponentWin||r.allowsImmediateOpponentWin||o.opponentReachesMatchPoint||r.opponentReachesMatchPoint)return;let i=I(n),s=I(t),u=c(h=>h===S.ManaTempo||h===S.SafeSupermanaProgress||h===S.SafeOpponentManaProgress,"allowed");if(!u(i)||!u(s)||Math.abs(n.rootRank-t.rootRank)>8)return;let p=Q(n),l=Q(t),m=wn(n,t)||p&&!l,d=wn(t,n)||l&&!p;if(m===d)return;let f=fc(n),y=fc(t);if(f!==y){let h=f?n:t,k=f?o:r,M=f?t:n,R=f?r:o;if(h.sameTurnScoreWindowValue<=1&&M.sameTurnScoreWindowValue===0&&I(M)===S.ManaTempo&&M.ownDrainerVulnerable===h.ownDrainerVulnerable&&M.ownDrainerWalkVulnerable===h.ownDrainerWalkVulnerable&&!M.manaHandoffToOpponent&&!M.hasRoundtrip&&wn(M,h)&&g(R.worstReplyScore,96)>=k.worstReplyScore&&g(M.score,192)>=h.score)return f?-1:1}let b=g(o.worstReplyScore,240)>=r.worstReplyScore,C=g(r.worstReplyScore,240)>=o.worstReplyScore;if(m&&n.score>t.score&&b)return 1;if(d&&t.score>n.score&&C)return-1}c(jM,"earlyBlackManaProgressReplyOrder");function KM(e,n,o,t,r,a,i,s,u,p){let l=o[t],m=o[a];if(!D(u)||n.activeColor!==P.Black||n.turnNumber>4||l===void 0||m===void 0)return;let d=B(l),f=B(m),y=I(l)===S.ManaTempo,b=I(m)===S.ManaTempo;if(d===f||y===b)return;let C=d?l:m,h=d?r:i,k=d?t:a,M=d?m:l,R=d?i:r,w=d?a:t;if(!Jr(C,M)||C.ownDrainerVulnerable!==M.ownDrainerVulnerable||C.ownDrainerWalkVulnerable!==M.ownDrainerWalkVulnerable||h.allowsImmediateOpponentWin||R.allowsImmediateOpponentWin||h.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||g(C.score,24)<M.score||g(h.worstReplyScore,192)<R.worstReplyScore)return;let v=p.get(k)??rn(e,C.game,s,u);p.set(k,v);let O=p.get(w)??rn(e,M.game,s,u);if(p.set(w,O),!(g(v,32)<O))return d?1:-1}c(KM,"earlyBlackPlainSpiritManaReplyOrder");function qM(e,n,o,t,r,a,i,s,u,p){if(!no(u))return;let l=o[t],m=o[a];if(l===void 0||m===void 0)return;let d=B(l),f=B(m);if(d===f)return;let y=d?m:l,b=d?i:r,C=d?a:t,h=d?l:m,k=d?r:i,M=d?t:a;if(N(y)||N(h)||b.allowsImmediateOpponentWin||k.allowsImmediateOpponentWin||b.opponentReachesMatchPoint||k.opponentReachesMatchPoint||y.manaHandoffToOpponent||h.manaHandoffToOpponent||y.hasRoundtrip||h.hasRoundtrip||y.ownDrainerVulnerable||h.ownDrainerVulnerable||y.ownDrainerWalkVulnerable||h.ownDrainerWalkVulnerable||y.spiritSameTurnScoreSetupNow||y.spiritOwnManaSetupNow||h.spiritSameTurnScoreSetupNow||h.spiritOwnManaSetupNow||y.winsImmediately||h.winsImmediately||y.attacksOpponentDrainer||h.attacksOpponentDrainer||y.sameTurnScoreWindowValue>0||h.sameTurnScoreWindowValue>0)return;let R=p.get(C)??rn(e,y.game,s,u);p.set(C,R);let w=p.get(M)??rn(e,h.game,s,u);p.set(M,w);let v=g(b.worstReplyScore,192)>=k.worstReplyScore,O=n.turnNumber<=2&&!y.supermanaProgress&&!y.opponentManaProgress&&y.score>=g(h.score,48)&&b.worstReplyScore>=96&&R>=w;if(!(g(y.score,32)<h.score||!v&&!O)&&(R>=g(w,48)||O))return d?-1:1}c(qM,"safeNonSpiritFollowupOrder");function zM(e,n,o,t,r,a){if(!oy(e,n,t,a))return;let i=n.spiritOwnManaSetupNow&&n.opponentManaProgress&&!B(n),s=i?n:t,u=i?o:r,p=i?t:n,l=i?r:o;if(!Jr(s,p)||s.efficiency!==p.efficiency||s.ownDrainerVulnerable!==p.ownDrainerVulnerable||s.ownDrainerWalkVulnerable!==p.ownDrainerWalkVulnerable||s.manaHandoffToOpponent||p.manaHandoffToOpponent||s.hasRoundtrip||p.hasRoundtrip||s.winsImmediately||p.winsImmediately||s.attacksOpponentDrainer||p.attacksOpponentDrainer||s.scoresSupermanaThisTurn||p.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||p.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||p.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||p.safeOpponentManaPickupNow||s.sameTurnScoreWindowValue>0||p.sameTurnScoreWindowValue>0||s.supermanaProgress||p.supermanaProgress||u.allowsImmediateOpponentWin||l.allowsImmediateOpponentWin||u.opponentReachesMatchPoint||l.opponentReachesMatchPoint)return;let m=e.turnNumber===3&&e.monsMovesCount===1?192:96;if(!(g(s.score,96)<p.score||g(u.worstReplyScore,m)<l.worstReplyScore||s.rootRank>p.rootRank+8))return i?1:-1}c(zM,"whiteSpiritFollowupSetupReplyOrder");function dr(e,n){let o=e[n];if(o===void 0)throw new RangeError(`production selector index ${n} is out of bounds`);return o}c(dr,"valueAt");function yc(e,n){return e.safeSupermanaPickupNow&&!n.safeSupermanaPickupNow||e.safeOpponentManaPickupNow&&!n.safeOpponentManaPickupNow}c(yc,"hasPickupUpgrade");function Sc(e){return Q(e)||e.scoresSupermanaThisTurn||e.scoresOpponentManaThisTurn}c(Sc,"rootHasProgressSurface");function Ns(e){return I(e)===S.ManaTempo&&e.sameTurnScoreWindowValue>0&&e.sameTurnScoreWindowValue<=1&&!re(e)&&!e.attacksOpponentDrainer&&!e.manaHandoffToOpponent&&!e.hasRoundtrip}c(Ns,"isProductionModeNonConcreteManaWindowRoot");function wl(e,n,o){for(let[t,r]of n.board.entries()){let a=H(r);if(!(a?.kind!==A.Drainer||a.color!==o))return j(a)?!0:n.isFirstTurn()?!1:!us(e,n.board,o,t)}return!1}c(wl,"ownDrainerVulnerableNextTurn");function $M(e,n){let{game:o,config:t,plan:r,candidateIndex:a,candidate:i,selected:s,candidateUnsafe:u,selectedUnsafe:p,candidateProgress:l,selectedProgress:m,scoreGap:d,sameTurnWindowBetter:f,drainerAttackBetter:y,scoresNowBetter:b,safetyRecoverBetter:C,spiritWindowBetter:h,spiritDevelopmentBetter:k,progressBetter:M,selectedSpiritPhase:R,selectedFamily:w,blackSpiritPair:v,blackTurnSixRouteChangePlainSpirit:O}=e,{selectedUtility:E,pickupUpgrade:x,strategicAxesBetter:_,projectedDeferredRecoveryWithoutConcreteGain:z,safeRootBlocksPlainSpirit:$,safeRootBlocksPlainSpiritProgress:Z,plainSpiritSiblingRegresses:Y,allowNonConcreteWhiteProgress:K,whiteSetupRecoveryBlocksUtilityOverride:pe}=n;switch(Yr(t)){case je.Baseline:switch(r.headFamily){case S.ImmediateScore:return(i.winsImmediately||b||f)&&d<=280;case S.DenyOpponentWindow:return f||C||y;case S.DrainerKill:return y&&d<=180;case S.DrainerSafetyRecovery:return C&&mo(r.utility,E)>=0&&d<=140;case S.SpiritImpact:return a<=(r.compiledChunks.length>1?12:6)&&d<=120&&(h||k||R&&mo(r.utility,E)>=0);case S.SafeSupermanaProgress:case S.SafeOpponentManaProgress:return!R&&a<=(r.compiledChunks.length>1?3:1)&&d<=80&&(M||mo(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 S.ManaTempo:return!1;default:return!1}case je.Production:switch(r.headFamily){case S.ImmediateScore:return(i.winsImmediately||b||f||a<=16&&Zo(r.utility,E)&&(!u||p))&&d<=360;case S.DenyOpponentWindow:return f||C||y||a<=16&&d<=220&&!u&&Zo(r.utility,E);case S.DrainerKill:return i.attacksOpponentDrainer&&a<=16&&d<=260&&(y||mo(r.utility,E)>=0);case S.DrainerSafetyRecovery:return i.classes.drainerSafetyRecover&&a<=16&&d<=240&&(C||s.ownDrainerVulnerable&&!i.ownDrainerVulnerable||no(t)&&Jo(r.utility,E)&&(p||!u)&&!pe);case S.SpiritImpact:{let Me=Jo(r.utility,E),Ee=Zo(r.utility,E);if($||Z||Y||(s.spiritSameTurnScoreSetupNow||s.spiritOwnManaSetupNow||s.sameTurnScoreWindowValue>0)&&!v&&!p&&!u&&!i.spiritSameTurnScoreSetupNow&&!i.spiritOwnManaSetupNow&&i.sameTurnScoreWindowValue<=s.sameTurnScoreWindowValue&&i.spiritSetupGain<=s.spiritSetupGain&&!b&&!y)return!1;let fn=O||d<=220&&(h||k||i.spiritOwnManaSetupNow&&!s.spiritOwnManaSetupNow&&Me||Ee||R&&Me);return a<=(r.compiledChunks.length>1?16:10)&&fn}case S.SafeSupermanaProgress:case S.SafeOpponentManaProgress:{let Me=ie(r.utility,E),Ee=(l||p)&&Jo(r.utility,E),Qe=!p&&!R&&!m,fn=!p&&m,Ze=w===S.SafeSupermanaProgress||w===S.SafeOpponentManaProgress,Ln=_||iC(r.utility,E,220);if(p&&u&&!R&&!m&&l&&d>0&&!x&&!C&&!b&&!y&&!f&&!Ln||z)return!1;let Je=K||Ro(o)&&B(s)&&!p&&!u&&l&&a<=2&&d<=96&&(Me>0||Me>=0&&dt(r.utility,E,64)),St=!R||p||Je,Ut=d>48&&!p&&!u,Be=!fn&&!Qe||!Ut||_||x,ui=!u&&Ee&&(p||!R&&!m)&&(!Qe||d<=32||_||x),wc=Ee&&Mo(r.utility,E)&&(!Qe||_),ci=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&&(St&&M&&Be||Je||x||wc&&(!Ut||_||yc(i,s))&&(!fn||_||yc(i,s)||M&&!R)||ui||St&&ci&&d<=(Ze?32:64)&&Be)}case S.ManaTempo:return!1}}}c($M,"acceptTurnEngineHeadByModeAndFamily");var Ke=Object.freeze({EarlySafeManaBlocksSpirit:"early-safe-mana-blocks-spirit",BlackTurnStartSafeManaBlocksPlainSpirit:"black-turn-start-safe-mana-blocks-plain-spirit",WhiteTurnStartSafeManaBlocksPlainSpirit:"white-turn-start-safe-mana-blocks-plain-spirit",WhiteLateSafeManaBlocksPlainSpirit:"white-late-safe-mana-blocks-plain-spirit",BlackNoActionVulnerableProgressHead:"black-no-action-vulnerable-progress-head",BlackEarlySameWindowManaHead:"black-early-same-window-mana-head",BlackNoActionWindowedVulnerableManaHead:"black-no-action-windowed-vulnerable-mana-head",BlackLateWindowedVulnerableManaHead:"black-late-windowed-vulnerable-mana-head",BlackEarlyProgressBlocksMana:"black-early-progress-blocks-mana",BlackEarlyProgressBlocksNonConcreteWindow:"black-early-progress-blocks-non-concrete-window",EarlyBlackSafeManaBlocksWeakerMana:"early-black-safe-mana-blocks-weaker-mana",BlackQuietManaBlocksLowerScoredMana:"black-quiet-mana-blocks-lower-scored-mana",WhiteSameWindowManaBlocksLowerScoredMana:"white-same-window-mana-blocks-lower-scored-mana",WhiteMidTurnManaBlocksLowerScoredWindowMana:"white-mid-turn-mana-blocks-lower-scored-window-mana",WhiteMidTurnSpiritSetupBlocksWindowMana:"white-mid-turn-spirit-setup-blocks-window-mana",WhiteTurnStartSpiritSetupBlocksWindowMana:"white-turn-start-spirit-setup-blocks-window-mana",WhiteSafeManaBlocksDeferredRecoveryProgress:"white-safe-mana-blocks-deferred-recovery-progress",VulnerableWhiteManaHead:"vulnerable-white-mana-head",BlackLateSafeProgressBlocksQuietMana:"black-late-safe-progress-blocks-quiet-mana",BlackRecoveryRootBlocksNonConcreteWindow:"black-recovery-root-blocks-non-concrete-window",WhiteRecoveryRootBlocksNonConcreteWindow:"white-recovery-root-blocks-non-concrete-window",CandidateUnsafeWithoutProjectedOverride:"candidate-unsafe-without-projected-override",SelectedUtilityDominatesPlan:"selected-utility-dominates-plan",NonProgressHeadWithoutOverride:"non-progress-head-without-override",DrainerKillWithoutAttack:"drainer-kill-without-attack",WhiteVulnerableProgressBlocksImmediateScore:"white-vulnerable-progress-blocks-immediate-score",SpiritHeadWithoutImpact:"spirit-head-without-impact"});function YM(e){let{game:n,plan:o,candidate:t,selected:r,macroMode:a,candidateUnsafe:i,selectedUnsafe:s,candidateProgress:u,selectedProgress:p,scoreGap:l,sameTurnWindowBetter:m,drainerAttackBetter:d,scoresNowBetter:f,candidateSpiritTactical:y,selectedSpiritPhase:b,candidateFamily:C,selectedFamily:h,selectedUtilityValue:k}=e,M=a&&o.headFamily===S.ImmediateScore&&n.activeColor===P.Black&&n.turnNumber<=4&&n.monsMovesCount===0&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&i&&!s&&!t.winsImmediately&&!f&&!d&&t.sameTurnScoreWindowValue<=r.sameTurnScoreWindowValue,R=c(()=>a&&n.activeColor===P.White&&n.turnNumber===3&&n.monsMovesCount<=2&&n.playerCanUseAction()&&n.playerCanMoveMana()&&o.headFamily===S.SpiritImpact&&h===S.ManaTempo&&!s&&!i&&!r.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&t.spiritDevelopment&&t.spiritOwnManaSetupNow&&!t.spiritSameTurnScoreSetupNow&&!t.winsImmediately&&!t.attacksOpponentDrainer&&!re(t)&&t.sameTurnScoreWindowValue===0,"earlySafeManaBlocksSpirit"),w=c(()=>a&&n.activeColor===P.Black&&n.turnNumber>=5&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()&&o.headFamily===S.SpiritImpact&&h===S.ManaTempo&&!b&&B(t)&&!u&&!y&&Te(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&&l>96,"blackTurnStartSafeManaBlocksPlainSpirit"),v=c(()=>a&&n.activeColor===P.White&&n.turnNumber>=5&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()&&o.headFamily===S.SpiritImpact&&h===S.ManaTempo&&!s&&!i&&!b&&B(t)&&u&&!y&&Te(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,"whiteTurnStartSafeManaBlocksPlainSpirit"),O=c(()=>a&&n.activeColor===P.White&&n.turnNumber>=5&&n.monsMovesCount>=1&&o.headFamily===S.SpiritImpact&&h===S.ManaTempo&&!b&&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,"whiteLateSafeManaBlocksPlainSpirit"),E=c(()=>a&&n.activeColor===P.Black&&n.turnNumber>=6&&n.monsMovesCount===0&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&(C===S.SafeSupermanaProgress||C===S.SafeOpponentManaProgress)&&h===S.ManaTempo&&!b&&!t.spiritDevelopment&&!t.spiritSameTurnScoreSetupNow&&!t.spiritOwnManaSetupNow&&t.sameTurnScoreWindowValue===0&&r.sameTurnScoreWindowValue===0&&!re(t)&&!re(r)&&t.ownDrainerVulnerable&&!r.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===r.ownDrainerWalkVulnerable&&t.manaHandoffToOpponent===r.manaHandoffToOpponent&&t.hasRoundtrip===r.hasRoundtrip&&!f&&!d&&!m,"blackNoActionVulnerableProgressHead"),x=c(()=>a&&n.activeColor===P.Black&&n.turnNumber<=4&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&C===S.ManaTempo&&h===S.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&&!re(t)&&!re(r)&&!f&&!d,"blackEarlySameWindowManaHead"),_=c(()=>a&&n.activeColor===P.Black&&n.turnNumber>=6&&n.monsMovesCount===0&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&C===S.ManaTempo&&h===S.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&&!re(t)&&!re(r)&&!f&&!d,"blackNoActionWindowedVulnerableManaHead"),z=c(()=>a&&n.activeColor===P.Black&&n.turnNumber>=8&&n.monsMovesCount>=1&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&C===S.ManaTempo&&h===S.ManaTempo&&Te(t.inputs,r.inputs)&&t.sameTurnScoreWindowValue>0&&r.sameTurnScoreWindowValue===0&&t.ownDrainerVulnerable&&!r.ownDrainerVulnerable&&!re(t)&&!re(r)&&V(t.score,r.score)<=32&&!f&&!d,"blackLateWindowedVulnerableManaHead");if(R())return{kind:"reject",reason:Ke.EarlySafeManaBlocksSpirit};if(w())return{kind:"reject",reason:Ke.BlackTurnStartSafeManaBlocksPlainSpirit};if(v())return{kind:"reject",reason:Ke.WhiteTurnStartSafeManaBlocksPlainSpirit};if(O())return{kind:"reject",reason:Ke.WhiteLateSafeManaBlocksPlainSpirit};if(E())return{kind:"reject",reason:Ke.BlackNoActionVulnerableProgressHead};if(x())return{kind:"reject",reason:Ke.BlackEarlySameWindowManaHead};if(_())return{kind:"reject",reason:Ke.BlackNoActionWindowedVulnerableManaHead};if(z())return{kind:"reject",reason:Ke.BlackLateWindowedVulnerableManaHead};let $=yc(t,r),Z=c(()=>a&&n.activeColor===P.Black&&n.turnNumber<=4&&C===S.ManaTempo&&(h===S.ManaTempo||h===S.SafeSupermanaProgress||h===S.SafeOpponentManaProgress)&&!t.winsImmediately&&!t.attacksOpponentDrainer&&!t.spiritDevelopment&&!t.spiritSameTurnScoreSetupNow&&!t.spiritOwnManaSetupNow&&!$&&l>0&&(wn(r,t)||p&&!u),"blackEarlyProgressBlocksMana"),Y=c(()=>a&&n.activeColor===P.Black&&n.turnNumber<=4&&(o.headFamily===S.SafeSupermanaProgress||o.headFamily===S.SafeOpponentManaProgress)&&C===S.ManaTempo&&h===S.ManaTempo&&t.sameTurnScoreWindowValue>0&&r.sameTurnScoreWindowValue===0&&!t.winsImmediately&&!f&&!d&&!$&&r.ownDrainerVulnerable===t.ownDrainerVulnerable&&r.ownDrainerWalkVulnerable===t.ownDrainerWalkVulnerable&&r.manaHandoffToOpponent===t.manaHandoffToOpponent&&r.hasRoundtrip===t.hasRoundtrip&&wn(r,t)&&l>=-192&&!Gr(o.utility,k()),"blackEarlyProgressBlocksNonConcreteWindow");return Z()?{kind:"reject",reason:Ke.BlackEarlyProgressBlocksMana}:Y()?{kind:"reject",reason:Ke.BlackEarlyProgressBlocksNonConcreteWindow}:{kind:"continue",facts:{narrowUnsafeBlackManaScore:M,pickupUpgrade:$}}}c(YM,"evaluateInitialHeadGuards");function XM(e,n){let{game:o,plan:t,candidate:r,selected:a,macroMode:i,candidateUnsafe:s,selectedUnsafe:u,candidateProgress:p,selectedProgress:l,exactContext:m,sameTurnWindowBetter:d,drainerAttackBetter:f,scoresNowBetter:y,selectedSpiritPhase:b,candidateFamily:C,selectedFamily:h}=e,{pickupUpgrade:k,selectedUtility:M}=n,R=c(()=>i&&o.activeColor===P.Black&&o.turnNumber<=4&&o.monsMovesCount>=1&&o.playerCanUseAction()&&o.playerCanMoveMana()&&t.headFamily===S.ManaTempo&&t.goalFamily===S.SpiritImpact&&C===S.ManaTempo&&h===S.ManaTempo&&!s&&!u&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!re(r)&&!re(a)&&r.sameTurnScoreWindowValue===a.sameTurnScoreWindowValue&&!p&&!l&&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>g(r.score,128)&&!y&&!f&&!d&&!k,"earlyBlackSafeManaBlocksWeakerMana"),w=c(()=>i&&o.activeColor===P.Black&&o.turnNumber<=6&&o.monsMovesCount>=1&&o.playerCanMoveMana()&&(t.headFamily===S.ManaTempo||t.headFamily===S.SafeSupermanaProgress||t.headFamily===S.SafeOpponentManaProgress)&&C===S.ManaTempo&&h===S.ManaTempo&&s===u&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!re(r)&&!re(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>g(r.score,48)&&a.safeSupermanaProgressSteps<=r.safeSupermanaProgressSteps+1&&a.safeOpponentManaProgressSteps<=r.safeOpponentManaProgressSteps+1&&!y&&!f&&!d&&!k,"blackQuietManaBlocksLowerScoredMana"),v=c(()=>i&&o.activeColor===P.White&&o.turnNumber===5&&o.monsMovesCount===0&&o.playerCanMoveMana()&&(t.headFamily===S.SafeSupermanaProgress||t.headFamily===S.SafeOpponentManaProgress)&&t.goalFamily===S.ImmediateScore&&C===S.ManaTempo&&h===S.ManaTempo&&s===u&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!re(r)&&!re(a)&&r.sameTurnScoreWindowValue>0&&r.sameTurnScoreWindowValue===a.sameTurnScoreWindowValue&&!p&&!l&&r.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&r.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&Te(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,"whiteSameWindowManaBlocksLowerScoredMana"),O=c(()=>i&&o.activeColor===P.White&&o.turnNumber===5&&o.monsMovesCount>=1&&o.playerCanMoveMana()&&(t.headFamily===S.ImmediateScore||t.headFamily===S.SafeSupermanaProgress||t.headFamily===S.SafeOpponentManaProgress)&&t.goalFamily===S.ImmediateScore&&C===S.ManaTempo&&h===S.ManaTempo&&s===u&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!re(r)&&!re(a)&&r.sameTurnScoreWindowValue>0&&r.sameTurnScoreWindowValue===a.sameTurnScoreWindowValue&&!p&&!l&&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,"whiteMidTurnManaBlocksLowerScoredWindowMana"),E=c(()=>i&&o.activeColor===P.White&&o.turnNumber===5&&o.monsMovesCount>=1&&o.playerCanUseAction()&&o.playerCanMoveMana()&&(t.headFamily===S.SafeSupermanaProgress||t.headFamily===S.SafeOpponentManaProgress)&&t.goalFamily===S.ImmediateScore&&C===S.ManaTempo&&h===S.SpiritImpact&&s===u&&!r.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&a.spiritDevelopment&&a.spiritSameTurnScoreSetupNow&&a.spiritOwnManaSetupNow&&a.spiritSetupGain>=g(r.spiritSetupGain,64)&&!re(r)&&!re(a)&&r.sameTurnScoreWindowValue>0&&r.sameTurnScoreWindowValue===a.sameTurnScoreWindowValue&&!p&&!l&&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<=g(a.score,64)&&!y&&!f&&!d&&!k,"whiteMidTurnSpiritSetupBlocksWindowMana"),x=c(()=>i&&o.activeColor===P.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===S.SafeSupermanaProgress||t.headFamily===S.SafeOpponentManaProgress)&&t.goalFamily===S.ImmediateScore&&Ns(r)&&h===S.SpiritImpact&&s&&!u&&!r.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&a.spiritDevelopment&&a.spiritSameTurnScoreSetupNow&&!a.spiritOwnManaSetupNow&&a.spiritSetupGain>=g(r.spiritSetupGain,96)&&!re(r)&&!re(a)&&r.sameTurnScoreWindowValue===a.sameTurnScoreWindowValue&&!p&&!l&&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,"whiteTurnStartSpiritSetupBlocksWindowMana"),_=c(()=>i&&o.activeColor===P.White&&o.turnNumber===5&&o.monsMovesCount>=1&&!o.playerCanUseAction()&&o.playerCanMoveMana()&&(t.headFamily===S.SafeSupermanaProgress||t.headFamily===S.SafeOpponentManaProgress)&&t.goalFamily===S.DrainerSafetyRecovery&&C===S.ManaTempo&&h===S.ManaTempo&&!s&&!u&&!p&&!l&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!re(r)&&!re(a)&&r.sameTurnScoreWindowValue===0&&a.sameTurnScoreWindowValue===0&&r.safeSupermanaProgressSteps<=a.safeSupermanaProgressSteps&&r.safeOpponentManaProgressSteps<=a.safeOpponentManaProgressSteps&&r.scorePathBestSteps===a.scorePathBestSteps&&r.spiritSetupGain<=g(a.spiritSetupGain,16)&&!r.ownDrainerVulnerable&&!a.ownDrainerVulnerable&&!r.ownDrainerWalkVulnerable&&!a.ownDrainerWalkVulnerable&&!r.manaHandoffToOpponent&&!a.manaHandoffToOpponent&&!r.hasRoundtrip&&!a.hasRoundtrip&&r.rootRank>=a.rootRank+8&&V(r.score,a.score)<=128&&!y&&!f&&!d&&!k&&!dt(t.headUtility,M,192),"whiteSafeManaBlocksDeferredRecoveryProgress"),z=c(()=>i&&o.activeColor===P.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===S.ManaTempo&&t.goalFamily===S.ImmediateScore&&C===S.ManaTempo&&(h===S.SafeSupermanaProgress||h===S.SafeOpponentManaProgress)&&!s&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!re(r)&&!re(a)&&r.sameTurnScoreWindowValue===0&&a.sameTurnScoreWindowValue===0&&!p&&l&&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,"blackLateSafeProgressBlocksQuietMana"),$=c(()=>i&&o.activeColor===P.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===S.ImmediateScore&&t.goalFamily===S.ImmediateScore&&Ns(r)&&h===S.DrainerSafetyRecovery&&a.classes.drainerSafetyRecover&&!u&&!a.ownDrainerVulnerable&&!a.ownDrainerWalkVulnerable&&!re(a)&&!a.attacksOpponentDrainer&&!b&&a.sameTurnScoreWindowValue===0&&!a.manaHandoffToOpponent&&!a.hasRoundtrip&&Te(r.inputs,a.inputs)&&r.ownDrainerVulnerable&&!r.classes.drainerSafetyRecover&&a.safeSupermanaProgressSteps<=r.safeSupermanaProgressSteps&&a.safeOpponentManaProgressSteps<=r.safeOpponentManaProgressSteps&&a.scorePathBestSteps>r.scorePathBestSteps&&!y&&!f&&!k,"blackRecoveryRootBlocksNonConcreteWindow"),Z=c(()=>i&&o.activeColor===P.White&&o.turnNumber===3&&o.monsMovesCount===0&&!o.playerCanUseAction()&&o.playerCanMoveMana()&&(t.headFamily===S.SafeSupermanaProgress||t.headFamily===S.SafeOpponentManaProgress)&&t.goalFamily===S.ImmediateScore&&Ns(r)&&h===S.DrainerSafetyRecovery&&a.classes.drainerSafetyRecover&&!u&&!a.ownDrainerVulnerable&&!a.ownDrainerWalkVulnerable&&!re(a)&&!a.attacksOpponentDrainer&&!b&&a.sameTurnScoreWindowValue===0&&!a.manaHandoffToOpponent&&!a.hasRoundtrip&&Te(r.inputs,a.inputs)&&r.ownDrainerVulnerable&&!r.classes.drainerSafetyRecover&&a.safeSupermanaProgressSteps<=r.safeSupermanaProgressSteps&&a.safeOpponentManaProgressSteps<=r.safeOpponentManaProgressSteps&&a.scorePathBestSteps>r.scorePathBestSteps&&!y&&!f&&!k,"whiteRecoveryRootBlocksNonConcreteWindow"),Y=c(()=>i&&o.activeColor===P.White&&o.turnNumber===3&&o.monsMovesCount>=1&&o.playerCanMoveMana()&&(t.headFamily===S.ManaTempo||t.headFamily===S.SafeSupermanaProgress||t.headFamily===S.SafeOpponentManaProgress)&&t.goalFamily===S.DrainerSafetyRecovery&&C===S.ManaTempo&&h===S.ManaTempo&&s&&!u&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!re(r)&&!re(a)&&r.sameTurnScoreWindowValue===0&&a.sameTurnScoreWindowValue===0&&r.manaHandoffToOpponent===a.manaHandoffToOpponent&&r.hasRoundtrip===a.hasRoundtrip&&!y&&!f&&!d&&!k,"vulnerableWhiteManaHead");if(R())return Ke.EarlyBlackSafeManaBlocksWeakerMana;if(w())return Ke.BlackQuietManaBlocksLowerScoredMana;if(v())return Ke.WhiteSameWindowManaBlocksLowerScoredMana;if(O())return Ke.WhiteMidTurnManaBlocksLowerScoredWindowMana;if(E())return Ke.WhiteMidTurnSpiritSetupBlocksWindowMana;if(x())return Ke.WhiteTurnStartSpiritSetupBlocksWindowMana;if(_())return Ke.WhiteSafeManaBlocksDeferredRecoveryProgress;if(Y())return Ke.VulnerableWhiteManaHead;if(z())return Ke.BlackLateSafeProgressBlocksQuietMana;if($())return Ke.BlackRecoveryRootBlocksNonConcreteWindow;if(Z())return Ke.WhiteRecoveryRootBlocksNonConcreteWindow}c(XM,"firstRejectedManaAndRecoveryHeadGuard");function ty(e,n,o,t,r,a){return cl(e,n,o,t,r,I(o),a)}c(ty,"turnEngineSelectedUtility");function QM(e,n,o,t,r){let a=n.fork(),i=[];for(let m of r.compiledChunks){let d=nn(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(),p=Ja(i,o,Math.max(t.evaluation.rootManaHandoffPenalty,1))>0,l=a.winnerColor()!==o&&wl(e,a,o);return u&&!p&&!Za(i)&&!l}c(QM,"projectedPlanIsSafelyCompleted");function ZM(e,n,o){let{game:t,perspective:r,config:a,plan:i,candidateIndex:s,candidate:u,selected:p,macroMode:l,candidateUnsafe:m,selectedUnsafe:d,candidateProgress:f,selectedProgress:y,scoreGap:b,sameTurnWindowBetter:C,drainerAttackBetter:h,scoresNowBetter:k,candidateSpiritTactical:M,progressBetter:R,selectedSpiritPhase:w,selectedFamily:v,whiteSpiritSetupGain:O}=n,{narrowUnsafeBlackManaScore:E,pickupUpgrade:x,nearTieProgress:_,primaryAxesOrder:z,strategicAxesBetter:$,selectedUtility:Z}=o,Y=l&&QM(e,t,r,a,i),K=ie(i.utility,Z)>=0,pe=ie(i.headUtility,Z)>=0,Me=l&&(i.headFamily===S.SafeSupermanaProgress||i.headFamily===S.SafeOpponentManaProgress)&&t.activeColor===P.White&&t.turnNumber>=5&&t.monsMovesCount<=1&&!t.playerCanUseAction()&&t.playerCanMoveMana()&&!m&&!d&&f&&y&&!w&&_&&b>48&&z===0&&!x&&!$,Ee=!d&&(p.safeSupermanaPickupNow||p.safeOpponentManaPickupNow)&&(i.headFamily===S.SafeSupermanaProgress||i.headFamily===S.SafeOpponentManaProgress)&&!x&&!pe,Qe=d&&m&&!w&&!y&&f&&(i.headFamily===S.SafeSupermanaProgress||i.headFamily===S.SafeOpponentManaProgress)&&i.goalFamily===S.DrainerSafetyRecovery&&!u.classes.drainerSafetyRecover&&u.ownDrainerVulnerable&&!x&&!k&&!h&&!C&&b>48,fn=t.activeColor===P.Black&&i.headFamily===S.SpiritImpact&&!d&&!m&&!y&&!w&&!f&&!M&&!u.spiritOwnManaSetupNow&&b>96&&!$,Ze=t.activeColor===P.Black&&i.headFamily===S.SpiritImpact&&!d&&!m&&!y&&!w&&B(u)&&f&&!M&&!R&&u.safeSupermanaProgressSteps>=p.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps>=p.safeOpponentManaProgressSteps&&u.ownDrainerVulnerable===p.ownDrainerVulnerable&&u.manaHandoffToOpponent===p.manaHandoffToOpponent&&u.hasRoundtrip===p.hasRoundtrip&&!k&&!h&&b>64&&!$,Ln=i.headFamily===S.SpiritImpact&&!d&&!m&&B(p)&&B(u)&&b>=0&&!R&&u.spiritSetupGain<=p.spiritSetupGain&&u.safeSupermanaProgressSteps>=p.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps>=p.safeOpponentManaProgressSteps&&u.ownDrainerVulnerable===p.ownDrainerVulnerable&&u.manaHandoffToOpponent===p.manaHandoffToOpponent&&u.hasRoundtrip===p.hasRoundtrip&&!k&&!h&&!M,Je=Y&&!p.winsImmediately&&i.goalFamily!==S.ManaTempo&&s<=(i.compiledChunks.length>1?16:10)&&K&&(Zo(i.utility,Z)||dt(i.utility,Z,96))&&(m||i.compiledChunks.length>1||Gr(i.utility,Z))&&!fn&&!Ze&&!Ln&&!Ee&&!Qe&&!E&&!Me;if(c(()=>m&&!d&&!Je,"candidateUnsafeWithoutProjectedOverride")())return{kind:"reject",reason:Ke.CandidateUnsafeWithoutProjectedOverride};if(c(()=>l&&ie(Z,i.utility)>0&&!O,"selectedUtilityDominatesPlan")())return{kind:"reject",reason:Ke.SelectedUtilityDominatesPlan};let Be=l&&(i.headFamily===S.SafeSupermanaProgress||i.headFamily===S.SafeOpponentManaProgress)&&!f&&Ro(t)&&B(p)&&!d&&(!m||Je)&&s<=3&&u.score>=p.score&&dt(i.utility,Z,64);if(O)return{kind:"accept"};if(c(()=>l&&(i.headFamily===S.SafeSupermanaProgress||i.headFamily===S.SafeOpponentManaProgress)&&!f&&!Je&&!Be,"nonProgressHeadWithoutOverride")())return{kind:"reject",reason:Ke.NonProgressHeadWithoutOverride};if(c(()=>l&&i.headFamily===S.DrainerKill&&!u.attacksOpponentDrainer,"drainerKillWithoutAttack")())return{kind:"reject",reason:Ke.DrainerKillWithoutAttack};let ci=l&&t.activeColor===P.White&&i.headFamily===S.DrainerSafetyRecovery&&p.spiritOwnManaSetupNow&&!u.spiritOwnManaSetupNow&&!d&&!m&&p.sameTurnScoreWindowValue===0&&u.sameTurnScoreWindowValue===0&&p.spiritSetupGain>=g(u.spiritSetupGain,48)&&!k&&!h&&!C;if(c(()=>l&&t.activeColor===P.White&&(i.headFamily===S.SafeSupermanaProgress||i.headFamily===S.SafeOpponentManaProgress)&&i.goalFamily===S.ImmediateScore&&v===S.ManaTempo&&!y&&f&&p.ownDrainerVulnerable&&u.ownDrainerVulnerable&&p.ownDrainerWalkVulnerable===u.ownDrainerWalkVulnerable&&p.manaHandoffToOpponent===u.manaHandoffToOpponent&&p.hasRoundtrip===u.hasRoundtrip&&!p.spiritDevelopment&&!u.spiritDevelopment&&!p.spiritSameTurnScoreSetupNow&&!u.spiritSameTurnScoreSetupNow&&!p.spiritOwnManaSetupNow&&!u.spiritOwnManaSetupNow&&!k&&!h&&!C&&!x&&!u.classes.drainerSafetyRecover&&u.safeSupermanaProgressSteps+1>=p.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps+1>=p.safeOpponentManaProgressSteps&&u.score<=g(p.score,16)&&!$,"whiteVulnerableProgressBlocksImmediateScore")())return{kind:"reject",reason:Ke.WhiteVulnerableProgressBlocksImmediateScore};let Ul=i.headFamily===S.ImmediateScore||i.headFamily===S.DenyOpponentWindow||i.headFamily===S.DrainerKill||i.headFamily===S.DrainerSafetyRecovery&&no(a);return l&&!p.winsImmediately&&Ul&&Zo(i.utility,Z)&&!ci&&(!m||d)?{kind:"accept"}:c(()=>i.headFamily===S.SpiritImpact&&!M&&!u.spiritDevelopment&&!u.spiritOwnManaSetupNow&&!Je,"spiritHeadWithoutImpact")()?{kind:"reject",reason:Ke.SpiritHeadWithoutImpact}:Je?{kind:"accept"}:{kind:"delegate",policy:{selectedUtility:Z,pickupUpgrade:x,strategicAxesBetter:$,projectedDeferredRecoveryWithoutConcreteGain:Qe,safeRootBlocksPlainSpirit:fn,safeRootBlocksPlainSpiritProgress:Ze,plainSpiritSiblingRegresses:Ln,allowNonConcreteWhiteProgress:Be,whiteSetupRecoveryBlocksUtilityOverride:ci}}}c(ZM,"evaluateProjectedHeadGuards");function cv(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=ie(r.utility,a()),u=Gr(r.utility,a()),p=a();return{...n,nearTieProgress:i,primaryAxesOrder:s,strategicAxesBetter:u,selectedUtility:p}}c(cv,"deriveOrderedHeadFacts");function JM(e,n){let o=YM(n);if(o.kind==="reject")return!1;let t=cv(n,o.facts);if(XM(n,t)!==void 0)return!1;let r=ZM(e,n,t);return r.kind==="accept"?!0:r.kind==="reject"?!1:$M(n,r.policy)}c(JM,"acceptTurnEngineHeadAfterOrderedGuards");function pv(e){let{game:n,plan:o,candidate:t,macroMode:r,selectedProgress:a,candidateFamily:i,selectedFamily:s,selectedUtilityValue:u,candidateUtilityValue:p,blackTurnSixRouteChangePlainSpirit:l,whiteSpiritSetupGain:m}=e;if(!r)return!0;let d=u(),f=p();if(n.activeColor===P.Black&&n.turnNumber<=6&&(o.headFamily===S.SafeSupermanaProgress||o.headFamily===S.SafeOpponentManaProgress)&&o.goalFamily===S.ImmediateScore&&i===S.ManaTempo&&s===S.SpiritImpact&&Ns(t)&&a&&ie(o.headUtility,d)<0)return!1;let b=ie(o.utility,d)>0&&(Mo(o.utility,d)||Mo(o.headUtility,d)),C=ie(f,d)>0&&Mo(f,d);return l||m||b||C}c(pv,"passesTurnEngineMacroDominanceGuard");function ek(e,n,o,t,r,a,i,s){let u=i.compiledChunks[0];if(u===void 0)return!1;let p=r.findIndex(Je=>le(Je.inputs,u)),l=r.findIndex(Je=>le(Je.inputs,a));if(p<0||l<0)return!1;if(p===l)return!0;let m=dr(r,p),d=dr(r,l);if(d.winsImmediately&&!m.winsImmediately)return!1;let f=ni(Yr(t)),y=N(m),b=N(d),C=Sc(m),h=Sc(d),k=Ce(e,n,n.activeColor),M=V(d.score,m.score),R=m.sameTurnScoreWindowValue>d.sameTurnScoreWindowValue,w=m.attacksOpponentDrainer&&!d.attacksOpponentDrainer,v=(m.scoresSupermanaThisTurn||m.scoresOpponentManaThisTurn)&&!(d.scoresSupermanaThisTurn||d.scoresOpponentManaThisTurn),O=m.classes.drainerSafetyRecover&&!d.classes.drainerSafetyRecover&&d.ownDrainerVulnerable&&!m.ownDrainerVulnerable,E=m.spiritSameTurnScoreSetupNow&&!d.spiritSameTurnScoreSetupNow&&m.sameTurnScoreWindowValue>=d.sameTurnScoreWindowValue,x=m.spiritDevelopment&&!d.spiritDevelopment,_=m.spiritSameTurnScoreSetupNow||m.sameTurnScoreWindowValue>0||m.attacksOpponentDrainer||m.scoresSupermanaThisTurn||m.scoresOpponentManaThisTurn||m.safeSupermanaPickupNow||m.safeOpponentManaPickupNow,z=(sn(m.safeSupermanaProgressSteps,d.safeSupermanaProgressSteps)||sn(m.safeOpponentManaProgressSteps,d.safeOpponentManaProgressSteps))&&!d.winsImmediately&&!d.attacksOpponentDrainer&&!d.spiritSameTurnScoreSetupNow,$=d.spiritDevelopment||d.spiritSameTurnScoreSetupNow||d.spiritOwnManaSetupNow,Z=I(m),Y=I(d),K=null,pe=c(()=>(K??(K=ty(e,n,d,o,t,s)),K),"selectedUtilityValue"),Me=null,Ee=c(()=>(Me??(Me=ty(e,n,m,o,t,s)),Me),"candidateUtilityValue"),Qe=f&&i.headFamily===S.SpiritImpact&&xs(n,m,d,t)&&m.score>d.score,fn=f&&n.activeColor===P.White&&i.headFamily===S.SpiritImpact&&!b&&!y&&m.spiritOwnManaSetupNow&&!m.spiritSameTurnScoreSetupNow&&!d.spiritOwnManaSetupNow&&!d.spiritSameTurnScoreSetupNow&&d.spiritDevelopment&&m.spiritDevelopment&&m.spiritSetupGain>=g(d.spiritSetupGain,32)&&m.safeSupermanaProgressSteps<=d.safeSupermanaProgressSteps&&m.safeOpponentManaProgressSteps<=d.safeOpponentManaProgressSteps&&m.ownDrainerVulnerable===d.ownDrainerVulnerable&&m.manaHandoffToOpponent===d.manaHandoffToOpponent&&m.hasRoundtrip===d.hasRoundtrip&&!v&&!w&&M<=96,Ze=f&&n.activeColor===P.Black&&n.turnNumber===6&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()&&i.headFamily===S.SpiritImpact&&i.goalFamily===S.SpiritImpact&&p<=1&&y===b&&B(m)&&!C&&!_&&Y===S.ManaTempo&&b&&!d.spiritDevelopment&&!d.spiritSameTurnScoreSetupNow&&!d.spiritOwnManaSetupNow&&!h&&!re(d)&&d.sameTurnScoreWindowValue===0&&!Te(m.inputs,d.inputs)&&m.ownDrainerVulnerable===d.ownDrainerVulnerable&&m.ownDrainerWalkVulnerable===d.ownDrainerWalkVulnerable&&m.manaHandoffToOpponent===d.manaHandoffToOpponent&&m.hasRoundtrip===d.hasRoundtrip&&M<=1024&&dt(Ee(),pe(),64),Ln={game:n,perspective:o,config:t,plan:i,candidateIndex:p,candidate:m,selected:d,macroMode:f,candidateUnsafe:y,selectedUnsafe:b,candidateProgress:C,selectedProgress:h,exactContext:k,scoreGap:M,sameTurnWindowBetter:R,drainerAttackBetter:w,scoresNowBetter:v,safetyRecoverBetter:O,spiritWindowBetter:E,spiritDevelopmentBetter:x,candidateSpiritTactical:_,progressBetter:z,selectedSpiritPhase:$,candidateFamily:Z,selectedFamily:Y,selectedUtilityValue:pe,candidateUtilityValue:Ee,blackSpiritPair:Qe,whiteSpiritSetupGain:fn,blackTurnSixRouteChangePlainSpirit:Ze};return pv(Ln)?JM(e,Ln):!1}c(ek,"acceptTurnEngineHeadAfterSearch");function Al(e,n){let o=e.find(t=>le(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(Al,"allowedRerankOverrideCandidate");function ti(e,n,o,t,r,a){return Z0(e,n,o,t,r,a,{buildInjectedRootCandidate:c((i,s,u,p)=>CM(e,i,s,t,p),"buildInjectedRootCandidate")})}c(ti,"productionRootAdvisorPresearch");function gl(e,n,o,t,r,a,i){let u=ti(e,n,o,t,[...r],a)?.approvedRoot?.inputs;return u!==void 0&&!le(u,i)}c(gl,"advisorConflictsWithChoice");function lv(e,n){let o;return e.forEach((t,r)=>{n(t)&&(o===void 0||w0(t,dr(e,o))<0)&&(o=r)}),o}c(lv,"bestTacticalRootIndex");function ry(e,n,o,t,r){if(!r.policy.forcedTacticalPrepass||t.length===0)return;let a=c(d=>{let f=lv(t,d);return f===void 0?void 0:[...dr(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"),p=r.policy.supermanaPrepassException&&t.some(u),l=s||p;if(r.policy.supermanaPrepassException&&(i=a(d=>d.scoresSupermanaThisTurn),i!==void 0||(i=a(u),i!==void 0))||!l&&(i=a(d=>d.attacksOpponentDrainer),i!==void 0)||!l&&wl(e,n,o)&&(i=a(d=>!d.ownDrainerVulnerable),i!==void 0))return i;let m=o===P.White?n.blackScore:n.whiteScore;if(Ie-m<=1)return a(d=>d.classes.immediateScore)}c(ry,"forcedTacticalPrepassChoice");function ay(e,n,o){let t=e.findIndex(p=>le(p.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=dr(e,t),i=V(r.heuristic,a.heuristic);if(o===je.Baseline)return t<=2&&i<=96&&!N(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=N(a);return!u&&t<=4&&i<=128||!u&&s&&t<=8&&i<=224||!u&&N(r)&&t<=10&&i<=256}c(ay,"acceptTurnEngineCachedStep");function vl(e,n,o){return ni(o)&&ay(e,n,o)&&le(e[0]?.inputs??[],n)}c(vl,"shouldResumeTurnEngineCachedStep");function nk(e,n,o){return o.planner.mode!==Fe.Production||!o.planner.lowBudgetGuard||n.length===0||Ro(e)?!1:!e.playerCanUseAction()&&!e.playerCanMoveMana()&&e.monsMovesCount>=4?!0:e.activeColor===P.Black&&e.turnNumber===2&&e.monsMovesCount<=1}c(nk,"shouldSkipProductionHeadPlanForRootContext");function ok(e,n,o,t,r){if(r.planner.mode!==Fe.Production||!r.planner.lowBudgetGuard||o.length===0||!(Ro(n)||mc(e,n)))return;let i=t.compiledChunks[0];if(i===void 0)return;let s=o.findIndex(y=>le(y.inputs,i));if(s<0)return;let u=dr(o,s);if(N(u))return;let p=o[0];if(p===void 0||p.winsImmediately||p.attacksOpponentDrainer||p.classes.drainerSafetyRecover)return;let l=V(p.heuristic,u.heuristic),m=t.headFamily===S.SafeSupermanaProgress||t.headFamily===S.SafeOpponentManaProgress||t.headFamily===S.DrainerSafetyRecovery,d=B(p),f=Sc(u);if(s===0&&m)return[...u.inputs];if(Ro(n)&&d&&!N(p)&&f&&s<=2&&l<=96)return[...u.inputs];if(mc(e,n)&&s<=1&&l<=96&&(f||u.spiritDevelopment))return[...u.inputs]}c(ok,"forcedLowBudgetTurnEnginePrepassChoice");function El(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(El,"shouldInvokeTurnHeadRerank");function Ol(e,n){let o=e.findIndex(b=>le(b.inputs,n)),t=e[0];if(o<0||t===void 0)return!1;let r=N(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=dr(e,o);if(a.winsImmediately)return!0;if(t.winsImmediately||N(a))return!1;let i=a.attacksOpponentDrainer||a.scoresSupermanaThisTurn||a.scoresOpponentManaThisTurn||a.safeSupermanaPickupNow||a.safeOpponentManaPickupNow,s=a.sameTurnScoreWindowValue>0||a.spiritSameTurnScoreSetupNow,u=V(t.heuristic,a.heuristic),p=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>g(t.sameTurnScoreWindowValue,1),l=a.safeSupermanaProgressSteps<t.safeSupermanaProgressSteps||a.safeOpponentManaProgressSteps<t.safeOpponentManaProgressSteps,m=!a.ownDrainerVulnerable&&t.ownDrainerVulnerable||!a.manaHandoffToOpponent&&t.manaHandoffToOpponent,d=a.supermanaProgress||a.opponentManaProgress||l;if(d&&!i&&!s&&!a.classes.drainerSafetyRecover&&!a.spiritSameTurnScoreSetupNow)return(m||r)&&o<=4&&u<=180;let y=m&&l&&o<=5&&u<=220;return i||s||a.classes.drainerSafetyRecover||d?a.ownDrainerVulnerable&&!a.classes.drainerSafetyRecover?!1:(p||l&&(m||r)||a.classes.drainerSafetyRecover&&t.ownDrainerVulnerable&&!a.ownDrainerVulnerable||a.spiritSameTurnScoreSetupNow&&a.sameTurnScoreWindowValue>t.sameTurnScoreWindowValue)&&o<=6&&u<=520||p&&o<=8&&u<=640:y}c(Ol,"classifyTurnEngineRerankOverride");function dv(e,n,o,t,r,a){if(!ni(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=Tr(n,i);if(u?.activeColor!==o)return;let p=Zr(u,t),l=Po(e,u,o,t);vl(l,s,r)&&i0(e,u,r,p,s)}c(dv,"seedTurnEngineFollowupCacheIfSafe");function Ds(e,n,o,t,r,a,i){c0(e,n,o,r,a,i),dv(e,n,o,t,r,a)}c(Ds,"commitPlanAndSeedFollowup");function tk(e){return!e.winsImmediately&&!e.attacksOpponentDrainer&&!vf(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(tk,"isFlatLateManaOnlyReplyRoot");function sk(e,n,o,t,r,a){if(!D(a)||!a.replyRisk.lateSafeManaRootPreference||e.activeColor!==P.White||e.turnNumber<6||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana()||o.allowsImmediateOpponentWin||r.allowsImmediateOpponentWin||o.opponentReachesMatchPoint||r.opponentReachesMatchPoint||!tk(n)||!tk(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||V(s.score,i.score)>16||Math.abs(s.rootRank-i.rootRank)>4||s.efficiency<=i.efficiency))return u?1:-1}c(sk,"lateSafeManaRootOrder");function rk(e,n,o,t,r,a){let i=Math.max(0,He(n,o)-t),s=n.winnerColor();if(s!==void 0){let b=s===o;return{allowsImmediateOpponentWin:!b,opponentReachesMatchPoint:!b,opponentMaxScoreGain:b?0:Ie,myScoreGain:i,worstReplyScore:b?Math.trunc(268435455/2):-Math.trunc(268435455/2)}}if(n.activeColor===o)return{allowsImmediateOpponentWin:!1,opponentReachesMatchPoint:!1,opponentMaxScoreGain:0,myScoreGain:i,worstReplyScore:yt(e,n,o,r)};let u=o===P.White?P.Black:P.White,p=He(n,u),l=Do(e,n,Math.max(1,Math.trunc(a)));if(l.length===0)return{allowsImmediateOpponentWin:!1,opponentReachesMatchPoint:!1,opponentMaxScoreGain:0,myScoreGain:i,worstReplyScore:Math.trunc(268435455/4)};let m=!1,d=!1,f=0,y=2147483647;for(let b of l){let C=b.game,h=He(C,u);f=Math.max(f,Math.max(0,h-p)),Ie-h<=1&&(d=!0);let k=C.winnerColor(),M;if(k===o?M=Math.trunc(268435455/2):k!==void 0?(m=!0,d=!0,M=-Math.trunc(268435455/2)):M=yt(e,C,o,r),y=Math.min(y,M),m)break}return y===2147483647&&(y=yt(e,n,o,r)),{allowsImmediateOpponentWin:m,opponentReachesMatchPoint:d,opponentMaxScoreGain:f,myScoreGain:i,worstReplyScore:y}}c(rk,"normalRootSafetySnapshot");function ak(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(ak,"betterNormalRootSafetyCandidate");function ik(e){return!e.winsImmediately&&!e.attacksOpponentDrainer&&!vf(e)&&!e.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&e.sameTurnScoreWindowValue===0}c(ik,"quietNonTacticalReplyRiskRoot");function mv(e,n,o,t,r){if(e.session.checkpoint())return 0;let a=n.winnerColor();if(a!==void 0)return a===o?Math.trunc(268435455/2):-Math.trunc(268435455/2);if(n.activeColor===o)return yt(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),p=ke(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)}}),l=Do(e,n,Math.max(1,Math.trunc(r)));if(e.session.cancelled)return 0;if(l.length===0)return Math.trunc(268435455/4);let m=2147483647;for(let d of l){if(e.session.checkpoint())return 0;let f=d.game.winnerColor(),y=f===o?Math.trunc(268435455/2):f!==void 0?-Math.trunc(268435455/2):EM(e,d.game,o,1,p);if(e.session.checkpoint())return 0;m=Math.min(m,y)}return m===2147483647?yt(e,n,o,t):m}c(mv,"normalRootSafetyDeepFloorScore");function uk(e,n,o,t,r,a,i,s){if(!D(s)||!s.replyRisk.safetyRerank||!ik(o)||!ik(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||Wo(o,r)||oi(o,r,s)))return;let p=Math.min(36,Math.max(12,Math.trunc(s.search.nodeEnumerationLimit))),l=He(n,i),m=rk(e,o.game,i,l,s,p),d=rk(e,r.game,i,l,s,p);if(m.allowsImmediateOpponentWin!==d.allowsImmediateOpponentWin||m.opponentReachesMatchPoint!==d.opponentReachesMatchPoint||m.opponentMaxScoreGain!==d.opponentMaxScoreGain||m.myScoreGain!==d.myScoreGain||m.worstReplyScore!==d.worstReplyScore){if(ak(m,o.score,d,r.score))return 1;if(ak(d,r.score,m,o.score))return-1}let y=Ie-He(n,i),b=Ie-He(n,i===P.White?P.Black:P.White);if(s.replyRisk.deepSafetyFloor&&(y<=3||b<=3)){let C=c(M=>mv(e,M,i,s,p),"floor"),h=C(o.game),k=C(r.game);if(h!==k)return h>k?1:-1}}c(uk,"normalSafetyReplyOrder");function ck(e,n,o,t){if(e.winsImmediately!==o.winsImmediately)return e.winsImmediately;if(e.attacksOpponentDrainer!==o.attacksOpponentDrainer)return e.attacksOpponentDrainer;if(n.allowsImmediateOpponentWin!==t.allowsImmediateOpponentWin)return!n.allowsImmediateOpponentWin;if(n.opponentReachesMatchPoint!==t.opponentReachesMatchPoint)return!n.opponentReachesMatchPoint}c(ck,"immediateReplyRiskDecision");function pk(e,n,o,t,r,a,i,s,u){if(i.game!==void 0){let y=sk(i.game,n,o,t,r,a);if(y!==void 0)return y>0}let p=WM(n,o,t,r,i.candidateProjection,i.incumbentProjection,a);if(p!==void 0)return p>0;let l=FM(n,o,t,r,a);if(l!==void 0)return l>0;if(i.game!==void 0){let y=jM(i.game,n,o,t,r,a);if(y!==void 0)return y>0}if(s!==void 0){let y=s.game,b=s.evaluations,C=s.candidateIndex,h=s.incumbentIndex,k=s.perspective,M=KM(e,y,b,C,o,h,r,k,a,u);if(M!==void 0)return M>0;let R=qM(e,y,b,C,o,h,r,k,a,u);if(R!==void 0)return R>0;let w=Rl(e,y,b,C,o,h,r,k,a,u);if(w!==void 0)return w>0;let v=Pl(e,y,b,C,o,h,r,k,a,u);if(v!==void 0)return v>0;let O=zM(y,n,o,t,r,a);if(O!==void 0)return O>0}let m=LM(n,o,t,r,a);if(m!==void 0)return m>0;if(i.game!==void 0&&i.perspective!==void 0){let y=uk(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}}c(pk,"contextualReplyRiskDecision");function na(e){return tr.length-Co(e)-1}c(na,"closeSpiritGoalFamilyPriority");function fv(e,n){return e.plan.headFamily!==S.SpiritImpact||n.plan.headFamily!==S.SpiritImpact?0:na(e.plan.goalFamily)-na(n.plan.goalFamily)}c(fv,"compareCloseSpiritGoalFamily");function oa(e,n,o){if(o){let t=ie(e.plan.headUtility,n.plan.headUtility);if(t!==0||(t=ie(e.plan.utility,n.plan.utility),t!==0))return t;let r=e.plan.headFamily===S.SpiritImpact,a=n.plan.headFamily===S.SpiritImpact;if(r!==a)return r?1:-1;if(t=fv(e,n),t!==0)return t}return Zn(e.plan,n.plan)}c(oa,"compareSpiritProjectionPlans");function hc(e,n,o,t,r){if(!D(r))return;let a=n.plan.headFamily===S.SpiritImpact,i=t.plan.headFamily===S.SpiritImpact;if(a===i)return;let s=a?o:e,u=a?t:n,p=a?e:o,l=a?n:t,m=na(l.plan.goalFamily),d=na(u.plan.goalFamily);if(!(m>na(S.SpiritImpact)||d<m||s.worstReplyScore<g(p.worstReplyScore,128)||ie(u.plan.utility,l.plan.utility)<0&&!Jo(u.plan.utility,l.plan.utility)))return a?-1:1}c(hc,"mixedPlainSpiritReplyFloorOrder");function iy(e,n,o,t,r,a,i,s,u,p){if(!no(u))return;let l=r.plan.headFamily===S.SpiritImpact,m=i.plan.headFamily===S.SpiritImpact;if(l===m)return;let d=o[t],f=o[a];if(d===void 0||f===void 0)return;let y=l?f:d,b=l?i:r,C=l?d:f,h=l?r:i,k=!l,M=ea(e,n,o,t,a,s,u,p),R=k?t:a,w=k?a:t,v=na(b.plan.goalFamily),O=na(h.plan.goalFamily);return v>=O&&O<=na(S.SpiritImpact)&&y.score>=C.score&&Fo(o,R,w)>0&&ie(b.plan.utility,h.plan.utility)>=0?k?1:-1:O>v&&ie(h.plan.utility,b.plan.utility)>=0&&ie(h.plan.headUtility,b.plan.headUtility)>=0?k?-1:1:(b.plan.headFamily===S.SafeSupermanaProgress||b.plan.headFamily===S.SafeOpponentManaProgress||b.plan.headFamily===S.DrainerSafetyRecovery)&&(M===0||Jo(b.plan.utility,h.plan.utility))&&y.score>=C.score&&Zn(b.plan,h.plan)>0?k?1:-1:l?1:-1}c(iy,"mixedPlainSpiritProjectionOrder");function lk(e,n,o,t,r,a,i,s,u){if(!D(s)||t.length<2)return;let p=t.filter(m=>{let d=o[m];return d!==void 0&&B(d)});if(p.length<2||p.some(m=>!a.has(m)))return;let l=p[0];if(l!==void 0){for(let m of p.slice(1)){let d=o[m],f=o[l],y=a.get(m),b=a.get(l),C=r.get(m),h=r.get(l);if(d===void 0||f===void 0||y===void 0||b===void 0||C===void 0||h===void 0)continue;let k=Pl(e,n,o,m,C,l,h,i,s,u);k??(k=hc(C,y,h,b,s)),k??(k=iy(e,n,o,m,y,l,b,i,s,u)),k===void 0&&(y.plan.headFamily===S.SpiritImpact&&b.plan.headFamily===S.SpiritImpact?k=oa(y,b,Math.abs(d.score-f.score)<=192):(k=ea(e,n,o,m,l,i,s,u),k??(k=Fo(o,m,l)))),k>0&&(l=m)}return l}}c(lk,"plainSpiritReplyRiskPick");function _s(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,p=r?n:t,l=N(i),m=N(u),d=l&&!m&&(Wa(s.plan.utility)&&ie(s.plan.utility,p.plan.utility)>=0&&Jo(s.plan.utility,p.plan.utility)||s.plan.goalFamily===S.ImmediateScore&&ie(s.plan.utility,p.plan.utility)>=0);if(!(l&&!m&&!d)){if(d)return r?-1:1;if(!(s.plan.headFamily===S.SpiritImpact||!Zo(s.plan.utility,p.plan.utility)||ie(s.plan.headUtility,p.plan.headUtility)<0||ie(s.plan.utility,p.plan.utility)<=0))return r?-1:1}}c(_s,"spiritProjectionChallengeOrder");function dk(e,n,o,t,r,a,i,s,u){if(!GM(n,o,t,r,a))return;if(i.candidateProjection!==void 0&&i.incumbentProjection!==void 0&&Math.abs(n.score-t.score)<=16&&n.efficiency===t.efficiency){let l=hc(o,i.candidateProjection,r,i.incumbentProjection,a);if(l!==void 0)return l>0;if(s!==void 0){let d=iy(e,s.game,s.evaluations,s.candidateIndex,i.candidateProjection,s.incumbentIndex,i.incumbentProjection,s.perspective,a,u);if(d!==void 0)return d>0}if(i.candidateProjection.plan.headFamily===S.SpiritImpact||i.incumbentProjection.plan.headFamily===S.SpiritImpact){let d=oa(i.candidateProjection,i.incumbentProjection,Math.abs(n.score-t.score)<=192);if(d!==0)return d>0}}if(s!==void 0){let l=ea(e,s.game,s.evaluations,s.candidateIndex,s.incumbentIndex,s.perspective,a,u);return l!==void 0&&l!==0?l>0:Fo(s.evaluations,s.candidateIndex,s.incumbentIndex)>0}if(n.score!==t.score)return n.score>t.score;let p=Ps(n,t);return p<0||p===0&&n.rootRank<t.rootRank}c(dk,"plainSpiritReplyRiskDecision");function mk(e,n,o,t){if(o===void 0)return;let r=ea(e,o.game,o.evaluations,o.candidateIndex,o.incumbentIndex,o.perspective,n,t);return r!==void 0&&r!==0?r>0:void 0}c(mk,"sharedSpiritFollowupDecision");function fk(e,n,o,t,r,a){if(D(r)&&Math.abs(n.worstReplyScore-t.worstReplyScore)>240)return n.worstReplyScore>t.worstReplyScore;if(D(r)&&e.policyPriority!==o.policyPriority&&e.efficiency>=o.efficiency)return e.policyPriority>o.policyPriority;if(r.replyRisk.deterministicTiebreak&&e.spiritOwnManaSetupNow!==o.spiritOwnManaSetupNow){let i=oi(e,o,r);if(!D(r)||i||Math.abs(n.worstReplyScore-t.worstReplyScore)<=120)return e.spiritOwnManaSetupNow}if(r.replyRisk.deterministicTiebreak&&e.spiritOwnManaSetupNow&&o.spiritOwnManaSetupNow&&e.supermanaProgress&&o.supermanaProgress&&e.safeSupermanaProgressSteps!==o.safeSupermanaProgressSteps)return sn(e.safeSupermanaProgressSteps,o.safeSupermanaProgressSteps);if(r.replyRisk.deterministicTiebreak&&e.spiritOwnManaSetupNow&&o.spiritOwnManaSetupNow&&e.opponentManaProgress&&o.opponentManaProgress&&e.safeOpponentManaProgressSteps!==o.safeOpponentManaProgressSteps)return sn(e.safeOpponentManaProgressSteps,o.safeOpponentManaProgressSteps);if(r.replyRisk.deterministicTiebreak&&e.spiritOwnManaSetupNow&&o.spiritOwnManaSetupNow&&e.scorePathBestSteps!==o.scorePathBestSteps)return Ya(e.scorePathBestSteps,o.scorePathBestSteps);if(r.replyRisk.deterministicTiebreak&&e.spiritDevelopment!==o.spiritDevelopment){let i=_s(e,a.candidateProjection,o,a.incumbentProjection);if(i!==void 0)return i>0;let s=ws(e,o);if(s!==void 0&&(!D(r)||Math.abs(n.worstReplyScore-t.worstReplyScore)<=120))return s>0;if(!D(r)||Math.abs(n.worstReplyScore-t.worstReplyScore)<=120)return e.spiritDevelopment}if(a.candidateProjection!==void 0&&a.incumbentProjection!==void 0){let i=Math.abs(n.worstReplyScore-t.worstReplyScore)<=100,s=!n.allowsImmediateOpponentWin&&!t.allowsImmediateOpponentWin&&!n.opponentReachesMatchPoint&&!t.opponentReachesMatchPoint,u=ul(a.candidateProjection.plan.headFamily)||ul(a.incumbentProjection.plan.headFamily),p=e.spiritOwnManaSetupNow||o.spiritOwnManaSetupNow||e.spiritSameTurnScoreSetupNow||o.spiritSameTurnScoreSetupNow||e.spiritDevelopment||o.spiritDevelopment;if(D(r)&&B(e)&&B(o)&&i&&Ft(a.candidateProjection.plan.utility)&&Ft(a.incumbentProjection.plan.utility)&&s){let d=oa(a.candidateProjection,a.incumbentProjection,Math.abs(e.score-o.score)<=192);if(d!==0)return d>0}if(D(r)&&e.spiritDevelopment&&o.spiritDevelopment&&!e.spiritSameTurnScoreSetupNow&&!o.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&!o.spiritOwnManaSetupNow&&i&&s){let d=oa(a.candidateProjection,a.incumbentProjection,Math.abs(e.score-o.score)<=192);if(d!==0)return d>0}if(u&&s&&i&&!p){let d=Zn(a.candidateProjection.plan,a.incumbentProjection.plan);if(d!==0)return d>0}}return e.policyPriority!==o.policyPriority?e.policyPriority>o.policyPriority:n.worstReplyScore!==t.worstReplyScore?n.worstReplyScore>t.worstReplyScore:e.score!==o.score?e.score>o.score:e.efficiency!==o.efficiency?e.efficiency>o.efficiency:!1}c(fk,"finalReplyRiskDecision");function sy(e,n,o,t,r,a,i={}){let s=ck(n,o,t,r);if(s!==void 0)return s;let p=i.game!==void 0&&i.evaluations!==void 0&&i.candidateIndex!==void 0&&i.incumbentIndex!==void 0&&i.perspective!==void 0?i:void 0,l=i.spiritFollowupScores??new Map,m=pk(e,n,o,t,r,a,i,p,l);if(m!==void 0)return m;let d=dk(e,n,o,t,r,a,i,p,l);if(d!==void 0)return d;let f=mk(e,a,p,l);return f!==void 0?f:fk(n,o,t,r,a,i)}c(sy,"isBetterReplyRiskCandidate");function bc(e,n,o){return D(o)&&I(e)===S.ManaTempo&&I(n)===S.ManaTempo&&e.efficiency===n.efficiency&&!e.ownDrainerVulnerable&&!n.ownDrainerVulnerable&&!e.ownDrainerWalkVulnerable&&!n.ownDrainerWalkVulnerable&&!N(e)&&!N(n)&&Wo(e,n)}c(bc,"isProductionModeWhiteManaSiblingPair");function Il(e,n,o,t,r,a){if(!D(a)||n.activeColor!==P.White||n.turnNumber!==3||n.monsMovesCount<4)return;let i=[...t].filter(d=>{let f=o[d];return f!==void 0&&I(f)===S.ManaTempo&&!f.ownDrainerVulnerable&&!f.ownDrainerWalkVulnerable&&!N(f)&&!f.manaHandoffToOpponent&&!f.hasRoundtrip&&!f.winsImmediately&&!f.attacksOpponentDrainer&&f.sameTurnScoreWindowValue===0&&!f.scoresSupermanaThisTurn&&!f.scoresOpponentManaThisTurn&&!f.safeSupermanaPickupNow&&!f.safeOpponentManaPickupNow}).sort((d,f)=>-Fo(o,d,f))[0];if(i===void 0)return;let s=o[i];if(s===void 0)return;let u=Bt(e,n,s,r,a,S.ManaTempo),p,l,m=!1;return o.forEach((d,f)=>{let y=bc(d,s,a)&&V(s.score,d.score)<=24&&Math.abs(s.rootRank-d.rootRank)<=4&&d.rootRank<s.rootRank;if(t.includes(f)||I(d)!==S.ManaTempo||d.ownDrainerVulnerable||d.ownDrainerWalkVulnerable||N(d)||d.manaHandoffToOpponent||d.hasRoundtrip||d.winsImmediately||d.attacksOpponentDrainer||d.sameTurnScoreWindowValue>0||d.scoresSupermanaThisTurn||d.scoresOpponentManaThisTurn||d.safeSupermanaPickupNow||d.safeOpponentManaPickupNow||!y&&d.score<V(s.score,96)||d.rootRank>=s.rootRank&&!y)return;let b=Bt(e,n,d,r,a,S.ManaTempo),h=ie(b,u)>0||Mo(b,u);if(!h&&!y)return;let k=p,M=l,R=k===void 0||M===void 0;if(k!==void 0&&M!==void 0){let w=o[k];if(w===void 0)R=!0;else{let v=bc(w,s,a)&&V(s.score,w.score)<=24&&Math.abs(s.rootRank-w.rootRank)<=4&&w.rootRank<s.rootRank;if(h!==m)R=h;else if(h){let O=ie(b,M);R=O>0||O===0&&Fo(o,f,k)>0}else y&&v?R=d.rootRank<w.rootRank||d.rootRank===w.rootRank&&Fo(o,f,k)>0:R=y}}R&&(p=f,l=b,m=h)}),p}c(Il,"productionWhiteTurnFourManaSiblingReentry");function Fs(e,n,o,t,r,a,i=t){if(!a.replyRisk.enabled||e.session.checkpoint())return;let s=gs(e,o,t,a);if(s.length===0)return;let u=Il(e,n,o,s,r,a);u!==void 0&&!s.includes(u)&&(s=[...s,u].sort((h,k)=>-Fo(o,h,k)));let p=Math.max(s.length,1,Math.trunc(a.budget.maxVisitedNodes*Math.max(0,a.replyRisk.nodeShareBp)/1e4)),l=Math.min(Math.max(1,a.replyRisk.replyLimit),Math.max(1,Math.trunc(p/s.length))),m=N0(e,o,s,r,a),d=new Map;for(let h of s){if(e.session.checkpoint())return;let k=o[h];if(k===void 0)continue;let M=m.get(h);if(M!==void 0){d.set(h,xf(e,k,M,r,a,l));continue}let w=a.planner.enabled&&D(a)&&cr(k,r)&&!B(k)?k.game:void 0;d.set(h,An(e,w??k.game,r,a,l))}let f=new Map,y=lk(e,n,o,s,d,m,r,a,f);if(s.every(h=>{let k=o[h];return k!==void 0&&B(k)}))return y;if(D(a)&&s.every(h=>{let k=d.get(h);return k!==void 0&&!k.allowsImmediateOpponentWin&&!k.opponentReachesMatchPoint})&&!il(o,s,a)&&!Tl(n,o,s,a)&&!VM(o,s,a)&&!HM(n,o,s,a)&&!UM(o,s,a)){let h=[...s].sort((R,w)=>{let v=d.get(R)?.worstReplyScore??-2147483648;return(d.get(w)?.worstReplyScore??-2147483648)-v||-Fo(o,R,w)}),k=h[0],M=h[1];if(k!==void 0&&(M===void 0||(d.get(k)?.worstReplyScore??-2147483648)>(d.get(M)?.worstReplyScore??-2147483648)))return k}let b=y??s.find(h=>d.has(h));if(b===void 0)return;for(let h of s){if(h===b)continue;let k=o[h],M=o[b],R=d.get(h),w=d.get(b);k!==void 0&&M!==void 0&&R!==void 0&&w!==void 0&&sy(e,k,R,M,w,a,{candidateProjection:m.get(h),incumbentProjection:m.get(b),game:n,evaluations:o,candidateIndex:h,incumbentIndex:b,perspective:r,spiritFollowupScores:f})&&(b=h)}if(D(a)&&y!==void 0&&y!==b){let h=d.get(y),k=d.get(b),M=m.get(y),R=m.get(b);h!==void 0&&k!==void 0&&M!==void 0&&R!==void 0&&(hc(h,M,k,R,a)??-1)>0&&(b=y)}let C=o[b];if(D(a)&&C!==void 0&&!C.spiritDevelopment&&!C.spiritSameTurnScoreSetupNow&&!C.spiritOwnManaSetupNow&&b>=4){let h=i.filter(k=>!s.includes(k)).filter(k=>{let M=o[k];return M!==void 0&&M.spiritOwnManaSetupNow&&M.rootRank+3<=C.rootRank&&oi(M,C,a)}).sort((k,M)=>-Fo(o,k,M))[0];if(h!==void 0){let k=o[h],M=d.get(b);if(k!==void 0&&M!==void 0){let R=xf(e,k,void 0,r,a,l);(BM(k,R,C,M,a)||sy(e,k,R,C,M,a,{incumbentProjection:m.get(b),game:n,evaluations:o,candidateIndex:h,incumbentIndex:b,perspective:r,spiritFollowupScores:f}))&&(b=h)}}}return e.session.checkpoint()?void 0:b}c(Fs,"pickRootWithReplyRiskGuard");var So=Object.freeze({SafeProgress:"safe-progress",FollowupProgress:"followup-progress",RiskyScore:"risky-score",NegativeDeny:"negative-deny",Score:"score",Projection:"projection",RiskyRecovery:"risky-recovery"}),yk=Object.freeze([So.SafeProgress,So.FollowupProgress,So.RiskyScore,So.NegativeDeny,So.Score,So.Projection,So.RiskyRecovery]),at=Object.freeze({SpiritSetup:"spirit-setup",ProjectionChallenge:"projection-challenge",Projection:"projection",FollowupFloor:"followup-floor"});var Sk=700,yv=180;function de(e,n){let o=e[n];if(o===void 0)throw new RangeError(`root selector index ${n} is out of bounds`);return o}c(de,"valueAt");function hk(e,n,o){if(!Number.isInteger(n)||n<0||n>=e.length)throw new RangeError(`${o} selected an invalid root`)}c(hk,"assertRootIndex");function ta(e,n){let o=n;for(let t of e)o=Math.max(o,t);return o}c(ta,"maxValue");function Sv(e){let n;for(let o of e)n=n===void 0?o:Math.min(n,o);return n}c(Sv,"minValue");function py(e,n){return n===P.White?e.whitePotionsCount:e.blackPotionsCount}c(py,"potionsForColor");function hv(e,n){return e.activeColor===n&&!e.isFirstTurn()&&!e.playerCanMoveMon()&&e.actionsUsedCount>=qn&&e.playerCanMoveMana()&&py(e,n)>0}c(hv,"shouldPreferPotionTakebackLines");function bk(e,n,o){return py(n.game,o)<py(e,o)}c(bk,"rootSpendsPotion");function bv(e,n,o){return n.winsImmediately||n.attacksOpponentDrainer||He(n.game,o)>=g(He(e,o),2)||n.scoresSupermanaThisTurn||n.scoresOpponentManaThisTurn||!n.ownDrainerVulnerable&&(n.supermanaProgress||n.opponentManaProgress)}c(bv,"rootPotionSpendCompensated");function Ck(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(Ck,"immediateOpponentWin");function ly(e){return e.planner.mode===Fe.Production}c(ly,"isProductionMode");function xl(e,n,o,t,r){return{game:e,roots:n,candidateIndices:o,perspective:t,config:r}}c(xl,"selectionContext");function Cv(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(Cv,"evaluateProductionCompetitionRules");function uy(e,n,o,t,r,a,i){let s=!1,u=xl(e,n,o,t,r);for(let p of yk)ly(r)&&Cv(a.productionPolicy,p,u)&&(p!=="negative-deny"||i?.()!==!0)&&(s=!0);return s}c(uy,"anyProductionCompetition");function Mv(e,n,o){let t=e.candidateIndices.filter(r=>!de(e.roots,r).spiritDevelopment);return n.some(r=>t.every(a=>{let i=Xa(at.SpiritSetup,{...e,candidateIndex:r,incumbentIndex:a},o);return i!==void 0&&i>0}))}c(Mv,"spiritSetupOverridesNegativeDeny");function cy(e,n,o,t){let r=Sv(n.map(a=>o(de(e,a))).filter(a=>a<t));return r===void 0?[...n]:n.filter(a=>o(de(e,a))===r)}c(cy,"retainBestKnownSteps");function Ws(e,n,o,t,r={}){if(n.length===0)return[];let a=n.map((s,u)=>u),i=!1;if(a.some(s=>de(n,s).winsImmediately))return a.filter(s=>de(n,s).winsImmediately);if(a.some(s=>de(n,s).attacksOpponentDrainer)&&(a=a.filter(s=>de(n,s).attacksOpponentDrainer),i=!0),!i&&!a.some(s=>de(n,s).classes.immediateScore)){let s=ta(a.flatMap(u=>{let p=de(n,u);return!p.ownDrainerVulnerable&&!p.manaHandoffToOpponent?[p.sameTurnScoreWindowValue]:[]}),0);if(s>0){let u=a.filter(p=>{let l=de(n,p);return l.sameTurnScoreWindowValue===s&&!l.ownDrainerVulnerable&&!l.manaHandoffToOpponent});u.length>0&&(a=u)}}if(!i&&a.some(s=>de(n,s).safeSupermanaPickupNow)?a=a.filter(s=>{let u=de(n,s);return u.scoresSupermanaThisTurn||u.safeSupermanaPickupNow}):!i&&a.some(s=>de(n,s).safeOpponentManaPickupNow)&&(a=a.filter(s=>{let u=de(n,s);return u.scoresOpponentManaThisTurn||u.safeOpponentManaPickupNow})),!i&&!a.some(s=>de(n,s).classes.immediateScore)){let s=ta(a.flatMap(p=>{let l=de(n,p);return l.spiritSameTurnScoreSetupNow&&!l.ownDrainerVulnerable&&!l.manaHandoffToOpponent?[l.sameTurnScoreWindowValue]:[]}),0),u=ta(a.flatMap(p=>{let l=de(n,p);return!l.spiritSameTurnScoreSetupNow&&!l.ownDrainerVulnerable&&!l.manaHandoffToOpponent?[l.sameTurnScoreWindowValue]:[]}),0);s>u&&(a=a.filter(p=>{let l=de(n,p);return l.spiritSameTurnScoreSetupNow&&l.sameTurnScoreWindowValue===s&&!l.ownDrainerVulnerable&&!l.manaHandoffToOpponent}))}if(!i&&!a.some(s=>de(n,s).classes.immediateScore)&&a.some(s=>{let u=de(n,s);return u.sameTurnScoreWindowValue>0&&!u.ownDrainerVulnerable&&!u.manaHandoffToOpponent})){let s=ta(a.map(u=>de(n,u).sameTurnScoreWindowValue),0);if(s>0){let u=a.filter(p=>{let l=de(n,p);return l.sameTurnScoreWindowValue===s&&!l.ownDrainerVulnerable&&!l.manaHandoffToOpponent});u.length>0&&(a=u)}}if(!i){let s=a.filter(u=>{let p=de(n,u);return p.spiritOwnManaSetupNow&&!p.ownDrainerVulnerable&&!p.manaHandoffToOpponent});if(s.length>0&&!uy(e,n,a,o,t,r,()=>Mv(xl(e,n,a,o,t),s,r.productionPolicy))){let u=s.filter(p=>de(n,p).supermanaProgress);if(u.length>0)a=cy(n,u,p=>p.safeSupermanaProgressSteps,15);else{let p=s.filter(l=>de(n,l).opponentManaProgress);a=p.length>0?cy(n,p,l=>l.safeOpponentManaProgressSteps,15):cy(n,s,l=>l.scorePathBestSteps,33)}}}if(t.policy.hardSpiritDeployment&&!i&&ma(e,o)&&!a.some(u=>{let p=de(n,u);return p.scoresSupermanaThisTurn||p.scoresOpponentManaThisTurn||p.safeSupermanaPickupNow||p.safeOpponentManaPickupNow})&&!uy(e,n,a,o,t,r)){let u=a.filter(p=>{let l=de(n,p);return l.spiritOwnManaSetupNow&&!l.ownDrainerVulnerable&&!l.manaHandoffToOpponent});if(u.length>0)a=u;else{let p=He(e,o),l=a.filter(m=>!de(n,m).keepsAwakeSpiritOnBase);if(l.length>0){let m=l.filter(b=>{let C=de(n,b);return!C.ownDrainerVulnerable&&!C.manaHandoffToOpponent}),d=m.length>0?m:l,f=a.some(b=>{let C=de(n,b);return C.keepsAwakeSpiritOnBase&&He(C.game,o)>p}),y=d.some(b=>He(de(n,b).game,o)>p);(!f||y)&&(a=d)}}}if(!i){let s=[...a],u=ta(a.map(m=>de(n,m).score),-2147483648),p=Math.max(t.policy.drainerSafetyScoreMargin,0),l=a.filter(m=>{let d=de(n,m);return!d.ownDrainerVulnerable&&d.score+p>=u});if(l.length>0&&(a=l,ly(t))){let m=xl(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(hk(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&&ma(e,o)&&a.some(s=>de(n,s).spiritDevelopment)&&!a.some(u=>{let p=de(n,u);return p.scoresSupermanaThisTurn||p.scoresOpponentManaThisTurn||p.safeSupermanaPickupNow||p.safeOpponentManaPickupNow})&&!uy(e,n,a,o,t,r)){let u=ta(a.map(l=>de(n,l).score),-2147483648),p=a.filter(l=>{let m=de(n,l);return m.spiritOwnManaSetupNow&&m.score+Sk>=u});if(p.length>0)a=p;else{let l=a.filter(m=>{let d=de(n,m);return d.spiritDevelopment&&d.score+Sk>=u});l.length>0&&(a=l)}}if(!i&&a.length>1&&hv(e,o)){let s=ta(a.map(p=>de(n,p).score),-2147483648),u=a.filter(p=>de(n,p).score+yv>=s);if(u.length>1){let p=new Map,l=c(d=>{let f=p.get(d);if(f!==void 0)return f;let y=Ck(de(n,d),d,o,t,r);return p.set(d,y),y},"allowsLoss");if(u.some(d=>{let f=de(n,d);return!bk(e,f,o)&&!l(d)})){let d=new Set(u),f=a.filter(y=>{let b=de(n,y);return b.winsImmediately||!d.has(y)||!bk(e,b,o)||bv(e,b,o)});f.length>0&&(a=f)}}}if(a.length>1){let s=ta(a.map(l=>de(n,l).score),-2147483648),u=Math.max(t.replyRisk.antiHelpScoreMargin,0),p=a.filter(l=>de(n,l).score+u>=s);if(p.length>1){let l=new Map,m=c(f=>{let y=l.get(f);if(y!==void 0)return y;let b=Ck(de(n,f),f,o,t,r);return l.set(f,b),b},"allowsLoss");if(p.some(f=>{let y=de(n,f);return!y.manaHandoffToOpponent&&!y.hasRoundtrip&&!m(f)})){let f=new Set(p),y=a.filter(b=>{let C=de(n,b);return C.winsImmediately||!f.has(b)||!C.manaHandoffToOpponent&&!C.hasRoundtrip});y.length>0&&(a=y)}}}if(ly(t)){let s=xl(e,n,[...a],o,t),u=!1;for(let p of r.productionPolicy?.finalReentryRules??[]){let l=p.select({...s,selectedIndices:a});if(l.kind!=="continue")for(let m of l.indices)hk(n,m,`Production rule ${p.id}`),a.includes(m)||(a.push(m),u=!0)}u&&a.sort((p,l)=>ae(n,p,l))}return a}c(Ws,"filteredRootCandidateIndices");var Mk=80;function Cc(e,n){let o=e[n];if(o===void 0)throw new RangeError(`root selector index ${n} is out of bounds`);return o}c(Cc,"valueAt");function kk(e,n,o){if(!Number.isInteger(n)||n<0||n>=e.length)throw new RangeError(`${o} selected an invalid root`)}c(kk,"assertRootIndex");function kv(e,n){let o=n;for(let t of e)o=Math.max(o,t);return o}c(kv,"maxValue");function mr(e){return e.planner.mode===Fe.Production}c(mr,"isProductionMode");function Tk(e,n,o,t,r){return{game:e,roots:n,candidateIndices:o,perspective:t,config:r}}c(Tk,"selectionContext");function Bs(e,n,o,t,r,a={}){if(a.checkpoint?.()===!0||n.length===0||o.length===0)return;let i=Tk(e,n,o,t,r);if(r.replyRisk.enabled){let y=a.pickReplyRiskGuardedIndex?.(i);if(y!==void 0){if(kk(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=kv(o.map(y=>Cc(n,y).score),-2147483648),u=Math.max(r.policy.efficiencyScoreMargin,0),p=E0(n,o),l=-2147483648,m=-2147483648,d=r.policy.preferSpiritDevelopment&&ma(e,t),f=mr(r)&&o.filter(y=>B(Cc(n,y))).length>=2;for(let y of o){if(a.checkpoint?.()===!0)return;let b=Cc(n,y),C=Cc(n,p),h=mr(r)&&e.turnNumber<=3&&B(b)&&B(C)&&V(s,b.score)<=16,k=mr(r)?Xa(at.SpiritSetup,{...i,candidateIndex:y,incumbentIndex:p},a.productionPolicy):void 0,M=!mr(r)||k===void 0||k>=0;if(b.score+u<s&&!h)continue;let R=d&&b.spiritDevelopment!==C.spiritDevelopment?ws(b,C):void 0;R===void 0&&mr(r)&&d&&b.spiritDevelopment!==C.spiritDevelopment&&Math.abs(b.score-C.score)<=320&&(R=Xa(at.ProjectionChallenge,{...i,candidateIndex:y,incumbentIndex:p},a.productionPolicy));let w=R===void 0&&d&&b.spiritDevelopment&&!C.spiritDevelopment&&M,v=!d||b.spiritDevelopment===C.spiritDevelopment||R!==void 0||mr(r)&&M&&(b.spiritOwnManaSetupNow||b.spiritSameTurnScoreSetupNow),O=b.spiritSameTurnScoreSetupNow&&!C.spiritSameTurnScoreSetupNow&&M,E=b.spiritSameTurnScoreSetupNow===C.spiritSameTurnScoreSetupNow,x=b.spiritOwnManaSetupNow&&!C.spiritOwnManaSetupNow&&M,_=b.spiritOwnManaSetupNow===C.spiritOwnManaSetupNow,z=d&&b.spiritDevelopment&&C.spiritDevelopment&&b.spiritSetupGain>C.spiritSetupGain,$=!d||!b.spiritDevelopment||!C.spiritDevelopment||b.spiritSetupGain===C.spiritSetupGain,Z=f&&B(b)&&B(C),Y=mr(r)&&(d||Z)&&b.spiritDevelopment&&C.spiritDevelopment?Xa(at.Projection,{...i,candidateIndex:y,incumbentIndex:p},a.productionPolicy):void 0,K=mr(r)?Xa(at.FollowupFloor,{...i,candidateIndex:y,incumbentIndex:p},a.productionPolicy):void 0,pe=b.spiritOwnManaSetupNow&&C.spiritOwnManaSetupNow&&b.supermanaProgress&&C.supermanaProgress&&sn(b.safeSupermanaProgressSteps,C.safeSupermanaProgressSteps),Me=!b.spiritOwnManaSetupNow||!C.spiritOwnManaSetupNow||!b.supermanaProgress||!C.supermanaProgress||b.safeSupermanaProgressSteps===C.safeSupermanaProgressSteps,Ee=b.spiritOwnManaSetupNow&&C.spiritOwnManaSetupNow&&b.opponentManaProgress&&C.opponentManaProgress&&sn(b.safeOpponentManaProgressSteps,C.safeOpponentManaProgressSteps),Qe=!b.spiritOwnManaSetupNow||!C.spiritOwnManaSetupNow||!b.opponentManaProgress||!C.opponentManaProgress||b.safeOpponentManaProgressSteps===C.safeOpponentManaProgressSteps,fn=b.spiritOwnManaSetupNow&&C.spiritOwnManaSetupNow&&Ya(b.scorePathBestSteps,C.scorePathBestSteps),Ze=!b.spiritOwnManaSetupNow||!C.spiritOwnManaSetupNow||b.scorePathBestSteps===C.scorePathBestSteps,Ln=sn(b.safeSupermanaProgressSteps,C.safeSupermanaProgressSteps),Je=b.safeSupermanaProgressSteps===C.safeSupermanaProgressSteps,St=sn(b.safeOpponentManaProgressSteps,C.safeOpponentManaProgressSteps),Ut=b.safeOpponentManaProgressSteps===C.safeOpponentManaProgressSteps,Be=b.sameTurnScoreWindowValue>C.sameTurnScoreWindowValue,ui=b.sameTurnScoreWindowValue===C.sameTurnScoreWindowValue,wc=!b.manaHandoffToOpponent&&C.manaHandoffToOpponent,ci=b.manaHandoffToOpponent===C.manaHandoffToOpponent,Ny=!b.hasRoundtrip&&C.hasRoundtrip,Ul=b.hasRoundtrip===C.hasRoundtrip,Dy=b.policyPriority>g(C.policyPriority,Mk),cR=g(b.policyPriority,Mk)>=C.policyPriority,pR=b.efficiency>l||b.efficiency===l&&b.score>m,We;(R??0)>0?We=!0:(R??0)<0?We=!1:Dy?We=!0:cR?Be?We=!0:ui?O?We=!0:E?x?We=!0:_?z?We=!0:$?(K??0)>0?We=!0:(K??0)<0?We=!1:(Y??0)>0?We=!0:(Y??0)<0?We=!1:pe?We=!0:Me?Ee?We=!0:Qe?fn?We=!0:Ze?Ln?We=!0:Je?St?We=!0:Ut?wc?We=!0:ci?Ny?We=!0:Ul?We=pR:We=!1:We=!1:We=!1:We=!1:We=!1:We=!1:We=!1:We=!1:We=!1:We=!1:We=!1:We=!1,(w||v&&We)&&(p=y,l=b.efficiency,m=b.score)}return p}c(Bs,"pickBaselineRootIndexFromCandidateIndices");function Tv(e,n,o,t,r={}){if(r.checkpoint?.()===!0||n.length===0)return;if(mr(t)){let i=n.map((u,p)=>p),s=r.productionPolicy?.rootPicker;if(s!==void 0){let u=s.select(Tk(e,n,i,o,t));if(u.kind==="select")return kk(n,u.index,`Production rule ${s.id}`),r.cancelled?.()===!0?void 0:u.index}}let a=Ws(e,n,o,t,r);return a.length===0&&(a=n.map((i,s)=>s)),Bs(e,n,a,o,t,r)}c(Tv,"pickBaselineRootIndex");function Rk(e,n,o,t,r={}){let a=Tv(e,n,o,t,r);return a===void 0?[]:[...Cc(n,a).inputs]}c(Rk,"pickBaselineRootInputs");function Rv(e,n,o,t,r,a,i,s){let u=o[r];if(u===void 0||!B(u))return!1;let p=gn(m=>{let d=o[m];return d===void 0?-2147483648:rn(e,d.game,a,i)},s),l=!1;for(let m of t){let d=o[m];if(d===void 0||n.activeColor!==P.Black||n.turnNumber>4||!d.spiritOwnManaSetupNow||d.spiritSameTurnScoreSetupNow||!Te(u.inputs,d.inputs)||u.ownDrainerVulnerable!==d.ownDrainerVulnerable||u.ownDrainerWalkVulnerable!==d.ownDrainerWalkVulnerable||!bn(u)||!bn(d)||re(u)||re(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&&g(d.score,64)>=u.score&&d.spiritSetupGain>=g(u.spiritSetupGain,32))return!1;let y=p(r),b=p(m);l||(l=y>=g(b,32)||u.score>=d.score&&y>=b)}return l}c(Rv,"blackPlainSpiritRepresentativeCompetes");function Pk(e,n,o,t,r,a,i,s,u){let p=o[r];return p===void 0?!1:a!==ln.PreserveSpiritRepresentative?!0:p.spiritSameTurnScoreSetupNow||p.spiritOwnManaSetupNow||Rv(e,n,o,t,r,i,s,u)}c(Pk,"representativeCompetesInApproval");function wk(e,n,o,t,r,a,i){let s=t[0];if(s===void 0||t.some(l=>{let m=o[l];return m!==void 0&&i(m)&&bn(m)}))return;let u=o[s];if(u===void 0)return;let p=Cn(e,n,u,r,a);return o.map((l,m)=>m).filter(l=>{let m=o[l];return m!==void 0&&i(m)&&bn(m)&&Bo(Cn(e,n,m,r,a),p)}).sort((l,m)=>ae(o,l,m))[0]}c(wk,"findScoredRepresentative");function Ak(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)&&bn(a)&&o.some(i=>Tl(e,n,[r,i],t))}).sort((r,a)=>ae(n,r,a))[0]}c(Ak,"whiteFollowupRepresentative");function dy(e,n,o,t,r){if(!D(r)||!r.planner.enabled||!r.planner.secondaryAnalysis||o.length<2||!o.every(d=>{let f=n[d];return f!==void 0&&B(f)&&bn(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=gn(d=>{let f=n[d];return f===void 0?-2147483648:rn(e,f.game,t,r)}),p=Math.max(...o.map(u)),l=n.map((d,f)=>f).filter(d=>!o.includes(d)),m=l.filter(d=>{let f=n[d];return f!==void 0&&bn(f)&&!f.ownDrainerVulnerable&&!f.ownDrainerWalkVulnerable&&!f.spiritDevelopment&&!f.spiritSameTurnScoreSetupNow&&!f.spiritOwnManaSetupNow&&g(f.score,32)>=i&&u(d)>=g(p,32)}).sort((d,f)=>u(f)-u(d)||ae(n,d,f))[0];return m!==void 0?m:l.filter(d=>{let f=n[d];return f!==void 0&&bn(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(dy,"plainSpiritClusterProgressReentry");function my(e,n,o,t,r,a){if(!D(a)||!a.planner.enabled)return;let i=t.find(l=>{let m=o[l];return m!==void 0&&bn(m)&&Q(m)&&m.policyPriority>0}),s=i===void 0?void 0:o[i];if(s===void 0)return;let u,p;return o.forEach((l,m)=>{if(t.includes(m)||!N(l)||l.ownDrainerWalkVulnerable||l.manaHandoffToOpponent||l.hasRoundtrip||!Wo(l,s)||l.score+32<s.score||l.game.activeColor!==r||l.game.winnerColor()!==void 0)return;let d=Cn(e,n,l,r,a);Wa(d)&&(p===void 0||ie(d,p)>0||_0(d,p)&&u!==void 0&&ae(o,m,u)<0)&&(u=m,p=d)}),u}c(my,"riskyRecoveryReentry");function Pv(e,n,o,t){if(!D(t)||e.activeColor!==P.Black||e.turnNumber!==6||!e.playerCanMoveMana()||o.length===0||!o.every(i=>{let s=n[i];return s!==void 0&&I(s)===S.ManaTempo&&N(s)&&!s.winsImmediately&&!s.attacksOpponentDrainer&&!re(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)&&I(s)===S.SpiritImpact&&B(s)&&!re(s)&&!s.attacksOpponentDrainer&&s.sameTurnScoreWindowValue===0&&!s.manaHandoffToOpponent&&!s.hasRoundtrip&&s.rootRank+4<=r&&V(a,s.score)<=1024}).sort((i,s)=>ae(n,i,s))[0]}c(Pv,"blackTurnSixSpiritReentry");function wv(e,n,o,t){if(!D(t))return;let r=o[0],a=r===void 0?void 0:e[r];if(!(a===void 0||!N(a)||!Q(a)))return n.filter(i=>{let s=e[i];return s!==void 0&&!o.includes(i)&&bn(s)&&Wo(s,a)&&V(a.score,s.score)<=320}).sort((i,s)=>ae(e,i,s))[0]}c(wv,"safeProgressSiblingReentry");function Av(e,n,o,t,r){if(!D(r)||n.activeColor!==P.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&&(I(s)===S.SafeSupermanaProgress||I(s)===S.SafeOpponentManaProgress)&&bn(s)})))return o.map((i,s)=>s).filter(i=>{let s=o[i],u=s===void 0?void 0:I(s);return s!==void 0&&!t.includes(i)&&(u===S.SafeSupermanaProgress||u===S.SafeOpponentManaProgress)&&!s.manaHandoffToOpponent&&!s.hasRoundtrip&&!s.winsImmediately&&!s.attacksOpponentDrainer&&!re(s)&&s.sameTurnScoreWindowValue===0&&s.score>=0}).sort((i,s)=>{let u=o[i],p=o[s];return u?.score!==p?.score?(p?.score??-2147483648)-(u?.score??-2147483648):ae(o,i,s)})[0]}c(Av,"blackNoActionSafeProgressReentry");function gv(e,n,o,t){if(!D(t)||e.activeColor!==P.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&&I(u)===S.ManaTempo&&bn(u)&&!u.winsImmediately&&!u.attacksOpponentDrainer&&!re(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)||I(u)!==S.ManaTempo||u.manaHandoffToOpponent||u.hasRoundtrip||u.winsImmediately||u.attacksOpponentDrainer||re(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:V(a.score,u.score)<=192}).sort((s,u)=>ae(n,s,u))[0]}c(gv,"blackNoActionManaSiblingReentry");function gk(e,n,o,t,r,a,i){let s=[],u=c(p=>{p!==void 0&&!s.includes(p)&&s.push(p)},"add");return u(dy(e,o,t,a,i)),u(my(e,n,o,t,a,i)),u(Pv(n,o,r,i)),u(wv(o,t,r,i)),u(Av(e,n,o,r,i)),u(gv(n,o,r,i)),u(Il(e,n,o,r,a,i)),s}c(gk,"collectAdvisorReentries");function fy(e,n,o,t,r,a){return t.spiritDevelopment||!(o.spiritOwnManaSetupNow||o.spiritSameTurnScoreSetupNow)||o.sameTurnScoreWindowValue>t.sameTurnScoreWindowValue||o.score>=t.score||n.activeColor===P.Black&&n.turnNumber<=2&&o.spiritOwnManaSetupNow&&!o.spiritSameTurnScoreSetupNow&&I(t)===S.ManaTempo&&!re(o)&&!re(t)&&!o.attacksOpponentDrainer&&!t.attacksOpponentDrainer&&bn(o)&&bn(t)&&g(o.score,64)>=t.score&&o.spiritSetupGain>=g(t.spiritSetupGain,48)&&o.rootRank<=t.rootRank?!0:ie(Cn(e,n,o,r,a),Cn(e,n,t,r,a))>=0}c(fy,"spiritSetupCompetes");function vk(e,n,o,t){let r=n.roots[o],a=n.roots[t];return r!==void 0&&a!==void 0&&fy(e,n.game,r,a,n.perspective,n.config)}c(vk,"spiritSetupCompetesWithRoot");function Ek(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&&(re(r)||r.attacksOpponentDrainer||r.sameTurnScoreWindowValue>0)&&r.score>=o})}c(Ek,"riskyScoreCompetition");function yy(e,n,o,t,r){if(!r.planner.enabled||!D(r)||!o.ownDrainerVulnerable||!Qa(o,t))return;let a=Cn(e,n,o,t,r);return Wa(a)?a:void 0}c(yy,"projectedRiskyRecoveryUtility");function Sy(e,n){return Wa(e)&&ie(e,n)>=0&&Jo(e,n)}c(Sy,"projectedRecoveryUtilityCompetes");function Ok(e){if(!D(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(Ok,"safeProgressCompetition");function Ik(e,n){if(!no(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)&&!N(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=gn(s=>{let u=n.roots[s];return u===void 0?-2147483648:rn(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&&!N(u)&&!u.spiritDevelopment&&!u.spiritSameTurnScoreSetupNow&&!u.spiritOwnManaSetupNow&&!u.ownDrainerVulnerable&&!u.manaHandoffToOpponent&&!u.hasRoundtrip&&u.rootRank<=t+2&&g(u.score,32)>=r&&u.policyPriority>0&&a(s)>=g(i,32)})}c(Ik,"followupProgressCompetition");function vv(e){return e.winsImmediately||e.attacksOpponentDrainer||e.scoresSupermanaThisTurn||e.scoresOpponentManaThisTurn||e.safeSupermanaPickupNow||e.safeOpponentManaPickupNow||e.sameTurnScoreWindowValue>0}c(vv,"hasNonSpiritScoreCompetitionSurface");function xk(e){if(!D(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&&vv(t)&&n.every(r=>{let a=e.roots[r];return a!==void 0&&(ws(t,a)??0)>0})})}c(xk,"scoreCompetition");function Nk(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))}c(Nk,"projectedSpiritIndices");function Dk(e,n){if(!e.config.planner.enabled||!D(e.config)||n.size<2)return!1;let o=Nk(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=sl(i,e.perspective),p=Qa(i,e.perspective)&&s.plan.headFamily===S.DrainerSafetyRecovery;return(u||p)&&Math.abs(i.score-t.score)<=320&&(_s(i,s,t,r)??0)>0})}c(Dk,"projectionCompetition");function _k(e,n){if(!e.config.planner.enabled||!D(e.config))return!1;let o=Nk(e,n).slice(0,3);if(o.length===0||o.some(r=>{let a=n.get(r);return a!==void 0&&Ft(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(_k,"negativeDenyCompetition");function Fk(e,n){if(!n.config.planner.enabled||!D(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=>Cn(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=yy(e,n.game,i,n.perspective,n.config);return s!==void 0&&r.every(u=>Sy(s,u))})}c(Fk,"riskyRecoveryCompetition");function Wk(e,n,o){if(!no(n.config)||o.length===0||!o.every(s=>{let u=n.roots[s];return u!==void 0&&B(u)&&!N(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=gn(s=>{let u=n.roots[s];return u===void 0?-2147483648:rn(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&&!N(u)&&!u.ownDrainerVulnerable&&!u.ownDrainerWalkVulnerable&&!u.manaHandoffToOpponent&&!u.hasRoundtrip&&!u.spiritDevelopment&&!u.spiritSameTurnScoreSetupNow&&!u.spiritOwnManaSetupNow&&u.policyPriority>0&&u.rootRank<=t+2&&g(u.score,32)>=r&&a(s)>=g(i,32)}).sort((s,u)=>{let p=a(s),l=a(u);return p!==l?p>l?-1:1:ae(n.roots,s,u)})[0]}c(Wk,"safeProgressReentryAfterSafetyPrefilter");var Mc=Object.freeze({kind:"continue"}),Ev=Object.freeze({kind:"select"});function ri(e){return e?Ev:Mc}c(ri,"competitionResult");function Ls(e){return e===void 0?Mc:{kind:"compare",order:e}}c(Ls,"comparisonResult");function hy(e){return e.length===0?Mc:{kind:"select",indices:e}}c(hy,"indexSelectionResult");function Nl(e){return Object.freeze(e.map(n=>Object.freeze(n)))}c(Nl,"freezeRules");function Dl(e){let n=new Map,o=new Map,t=c(p=>{let l=`${p.perspective}:${p.candidateIndices.join(",")}`,m=n.get(l);if(m!==void 0)return m;let d=D0(e,p.roots,p.candidateIndices,p.perspective,p.config);return n.set(l,d),d},"projections"),r=c(p=>{let l=Math.max(...p.candidateIndices.map(h=>p.roots[h]?.score??-2147483648)),m=Math.max(p.config.policy.drainerSafetyScoreMargin,0),d=p.config.planner.enabled&&D(p.config)?p.candidateIndices.filter(h=>{let k=p.roots[h];return k!==void 0&&k.ownDrainerVulnerable&&!k.manaHandoffToOpponent&&!k.hasRoundtrip&&k.score+m>=l&&Qa(k,p.perspective)}):[],f=D(p.config)&&p.selectedIndices.length>0&&d.length>0?p.selectedIndices.map(h=>p.roots[h]).filter(h=>h!==void 0).map(h=>Cn(e,p.game,h,p.perspective,p.config)).sort((h,k)=>mo(k,h))[0]:void 0,y=Math.max(...p.selectedIndices.map(h=>p.roots[h]?.score??-2147483648)),b=[...p.selectedIndices];for(let h of d){let k=p.roots[h];if(k===void 0)continue;let M=k.attacksOpponentDrainer||k.classes.drainerSafetyRecover||k.sameTurnScoreWindowValue>0||k.spiritSameTurnScoreSetupNow||k.spiritOwnManaSetupNow||Q(k);if(V(y,k.score)>(M?48:24))continue;let w=yy(e,p.game,k,p.perspective,p.config);w===void 0||f!==void 0&&!Sy(w,f)||b.includes(h)||b.push(h)}let C=Wk(e,p,b);return C!==void 0&&!b.includes(C)&&(b.push(C),b.sort((h,k)=>ae(p.roots,h,k))),b.filter(h=>!p.selectedIndices.includes(h))},"safetyReentries"),a=Nl([{id:"competition.safe-progress",kind:So.SafeProgress,evaluate:c(p=>ri(Ok(p)),"evaluate")},{id:"competition.followup-progress",kind:So.FollowupProgress,evaluate:c(p=>ri(Ik(e,p)),"evaluate")},{id:"competition.risky-score",kind:So.RiskyScore,evaluate:c(p=>ri(Ek(p)),"evaluate")},{id:"competition.negative-deny",kind:So.NegativeDeny,evaluate:c(p=>ri(_k(p,t(p))),"evaluate")},{id:"competition.score",kind:So.Score,evaluate:c(p=>ri(xk(p)),"evaluate")},{id:"competition.projection",kind:So.Projection,evaluate:c(p=>ri(Dk(p,t(p))),"evaluate")},{id:"competition.risky-recovery",kind:So.RiskyRecovery,evaluate:c(p=>ri(Fk(e,p)),"evaluate")}]),i=Nl([{id:"safety-reentry.recovery-and-progress",select:c(p=>hy(r(p)),"select")}]),s=Nl([{id:"final-reentry.plain-spirit-progress",select(p){let l=dy(e,p.roots,p.candidateIndices,p.perspective,p.config);return hy(l===void 0?[]:[l])}},{id:"final-reentry.risky-recovery",select(p){let l=my(e,p.game,p.roots,p.candidateIndices,p.perspective,p.config);return hy(l===void 0?[]:[l])}}]),u=Nl([{id:"comparison.spirit-setup",phase:at.SpiritSetup,compare(p){return Ls(vk(e,p,p.candidateIndex,p.incumbentIndex)?1:-1)}},{id:"comparison.projection-challenge",phase:at.ProjectionChallenge,compare(p){let l=p.roots[p.candidateIndex],m=p.roots[p.incumbentIndex];if(l===void 0||m===void 0)return Mc;let d=t(p);return Ls(_s(l,d.get(p.candidateIndex),m,d.get(p.incumbentIndex)))}},{id:"comparison.projection",phase:at.Projection,compare(p){let l=t(p),m=l.get(p.candidateIndex),d=l.get(p.incumbentIndex);if(m===void 0&&d===void 0)return Mc;if(m===void 0)return Ls(-1);if(d===void 0)return Ls(1);let f=p.roots[p.candidateIndex],y=p.roots[p.incumbentIndex];return Ls(oa(m,d,f!==void 0&&y!==void 0&&Math.abs(f.score-y.score)<=192))}},{id:"comparison.followup-floor",phase:at.FollowupFloor,compare(p){return Ls(ea(e,p.game,p.roots,p.candidateIndex,p.incumbentIndex,p.perspective,p.config,o))}}]);return Object.freeze({competitionRules:a,safetyReentryRules:i,finalReentryRules:s,comparisonRules:u})}c(Dl,"buildRootPolicy");function ce(e){return!e.winsImmediately&&!e.attacksOpponentDrainer&&!e.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&!e.manaHandoffToOpponent&&!e.hasRoundtrip}c(ce,"rootIsNonTactical");function Bk(e,n,o,t,r,a){if(!D(a)||n.activeColor!==P.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||I(s)!==S.ManaTempo||s.rootRank!==0||!s.ownDrainerVulnerable||!ce(s)))return Pe(o,t,(u,p)=>p!==r&&I(u)===S.ManaTempo&&u.rootRank>s.rootRank&&u.rootRank<=s.rootRank+2&&u.sameTurnScoreWindowValue===s.sameTurnScoreWindowValue&&u.ownDrainerVulnerable===s.ownDrainerVulnerable&&u.ownDrainerWalkVulnerable===s.ownDrainerWalkVulnerable&&ce(u)&&u.score>=V(s.score,96)&&u.scorePathBestSteps>s.scorePathBestSteps,(u,p)=>dn(o,u,p))}c(Bk,"blackTurnFourWindowManaSiblingOverride");function Lk(e,n,o,t,r,a,i){if(!D(i)||n.activeColor!==P.Black||r===a||!t.includes(a))return;let s=o[r],u=o[a];if(s===void 0||u===void 0)return;let p=I(s),l=I(u),m=Ce(e,n,n.activeColor),d=ce(s),f=ce(u);return n.turnNumber>=6&&n.monsMovesCount>=2&&n.playerCanUseAction()&&n.playerCanMoveMana()&&m.delta.sameTurnScoreWindowValue===0&&m.delta.opponentWindowDenyGain===0&&!m.delta.drainerAttackAvailable&&p===S.SpiritImpact&&l===S.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&&p===S.SpiritImpact&&l===S.SpiritImpact&&d&&f&&s.spiritOwnManaSetupNow&&u.spiritOwnManaSetupNow&&!s.spiritSameTurnScoreSetupNow&&!u.spiritSameTurnScoreSetupNow&&!N(s)&&!N(u)&&Te(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)&&p===S.ManaTempo&&l===S.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(Lk,"blackBaselineAlignmentOverride");function Gk(e,n,o,t,r,a){if(!D(a)||n.activeColor!==P.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||I(i)!==S.SpiritImpact||!B(i)||Q(i)||!ce(i)||!i.ownDrainerVulnerable)return;let u=Df(a,Fe.Baseline),p;if(u.replyRisk.enabled&&(p=Fs(e,n,o,t,n.activeColor,u)),p??(p=Bs(n,o,t,n.activeColor,u)),p===void 0||p===r||!t.includes(p))return;let l=o[p];if(l===void 0||I(l)!==S.ManaTempo||!ce(l)||!l.ownDrainerVulnerable||i.ownDrainerWalkVulnerable!==l.ownDrainerWalkVulnerable||i.safeSupermanaProgressSteps!==l.safeSupermanaProgressSteps||i.safeOpponentManaProgressSteps!==l.safeOpponentManaProgressSteps||i.scorePathBestSteps!==l.scorePathBestSteps||l.score<g(i.score,256))return;let m=Math.min(Math.max(a.replyRisk.replyLimit,1),24),d=An(e,i.game,n.activeColor,a,m),f=An(e,l.game,n.activeColor,a,m);if(!(d.allowsImmediateOpponentWin||f.allowsImmediateOpponentWin||d.opponentReachesMatchPoint||f.opponentReachesMatchPoint||f.worstReplyScore<g(d.worstReplyScore,32)))return p}c(Gk,"blackTurnStartGuardedBaselineManaOverride");function Vk(e,n,o,t,r,a,i){if(!D(i)||n.activeColor!==P.White||n.turnNumber!==3||r===a)return;let s=o[r],u=o[a];if(s===void 0||u===void 0)return;let p=Ce(e,n,n.activeColor);return n.monsMovesCount>=3&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&t.includes(a)&&p.delta.sameTurnScoreWindowValue===0&&p.delta.opponentWindowDenyGain===0&&!p.delta.drainerAttackAvailable&&I(s)===S.ManaTempo&&I(u)===S.ManaTempo&&ce(s)&&ce(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>=g(s.score,16)&&u.rootRank>=s.rootRank+2&&u.rootRank<=s.rootRank+4?a:void 0}c(Vk,"whiteTurnThreeBaselineAlignmentOverride");function Hk(e,n,o,t,r,a){if(!D(a)||n.activeColor!==P.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()||I(i)!==S.SpiritImpact||!i.spiritDevelopment||i.spiritSameTurnScoreSetupNow||!i.spiritOwnManaSetupNow||!ce(i)||N(i)||i.ownDrainerVulnerable||i.ownDrainerWalkVulnerable)return;let u=o.map((p,l)=>l);return Pe(o,u,(p,l)=>l!==r&&!t.includes(l)&&I(p)===S.ManaTempo&&!p.spiritDevelopment&&!p.spiritSameTurnScoreSetupNow&&!p.spiritOwnManaSetupNow&&ce(p)&&!N(p)&&!p.ownDrainerVulnerable&&!p.ownDrainerWalkVulnerable&&p.safeSupermanaProgressSteps===i.safeSupermanaProgressSteps&&p.safeOpponentManaProgressSteps===i.safeOpponentManaProgressSteps&&p.scorePathBestSteps===i.scorePathBestSteps&&p.inputs.length>=3&&p.rootRank<=i.rootRank+2,(p,l)=>dn(o,p,l))}c(Hk,"whiteTurnThreeAttackBridgeEscape");function by(e,n,o,t,r,a){let i=n.activeColor===P.Black&&n.turnNumber===2||n.activeColor===P.White&&n.turnNumber===3;if(!D(a)||!n.playerCanMoveMana()||o.length===0||!i||!yo(e,n))return;let s=o[r];if(s===void 0)return;let u=I(s);if(!(!Tn(u,S.ManaTempo,S.SpiritImpact)||s.winsImmediately||s.attacksOpponentDrainer||s.sameTurnScoreWindowValue>0||s.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||s.manaHandoffToOpponent||s.hasRoundtrip||N(s)))return Pe(o,t,(p,l)=>l!==r&&I(p)===u&&Te(p.inputs,s.inputs)&&!p.winsImmediately&&!p.attacksOpponentDrainer&&p.sameTurnScoreWindowValue===0&&!p.scoresSupermanaThisTurn&&!p.scoresOpponentManaThisTurn&&!p.safeSupermanaPickupNow&&!p.safeOpponentManaPickupNow&&!p.manaHandoffToOpponent&&!p.hasRoundtrip&&!N(p)&&p.spiritDevelopment===s.spiritDevelopment&&p.spiritSameTurnScoreSetupNow===s.spiritSameTurnScoreSetupNow&&p.spiritOwnManaSetupNow===s.spiritOwnManaSetupNow&&p.supermanaProgress===s.supermanaProgress&&p.opponentManaProgress===s.opponentManaProgress&&p.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&p.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps&&p.scorePathBestSteps===s.scorePathBestSteps&&p.spiritSetupGain===s.spiritSetupGain&&p.ownDrainerVulnerable===s.ownDrainerVulnerable&&p.ownDrainerWalkVulnerable===s.ownDrainerWalkVulnerable&&p.score>=g(s.score,8)&&p.rootRank<=s.rootRank+8,(p,l)=>{let m=o[p],d=o[l];return m===void 0||d===void 0?p-l:m.score!==d.score?m.score>d.score?-1:1:m.rootRank!==d.rootRank?m.rootRank>d.rootRank?-1:1:-ae(o,p,l)})}c(by,"earlySameLaneHigherScoreOverride");function Uk(e,n,o,t,r,a){if(!D(a)||n.activeColor!==P.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||!Tn(I(u),S.SafeSupermanaProgress,S.SafeOpponentManaProgress)||N(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 Pe(o,t,(p,l)=>l!==r&&I(p)===S.SpiritImpact&&p.spiritOwnManaSetupNow&&!p.spiritSameTurnScoreSetupNow&&Q(p)&&!N(p)&&!p.winsImmediately&&!p.attacksOpponentDrainer&&p.sameTurnScoreWindowValue===0&&!p.scoresSupermanaThisTurn&&!p.scoresOpponentManaThisTurn&&!p.safeSupermanaPickupNow&&!p.safeOpponentManaPickupNow&&p.manaHandoffToOpponent===u.manaHandoffToOpponent&&p.hasRoundtrip===u.hasRoundtrip&&p.ownDrainerVulnerable===u.ownDrainerVulnerable&&p.ownDrainerWalkVulnerable===u.ownDrainerWalkVulnerable&&V(u.score,p.score)<=96&&p.spiritSetupGain>=g(u.spiritSetupGain,48)&&p.safeSupermanaProgressSteps<=u.safeSupermanaProgressSteps+1&&p.safeOpponentManaProgressSteps<=u.safeOpponentManaProgressSteps+1&&p.rootRank<=u.rootRank+4,(p,l)=>dn(o,p,l))}c(Uk,"whiteTurnFiveWeakWindowSetupOverride");function ai(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(ai,"replyLimitForRoots");function jk(e,n,o,t,r,a,i){if(!D(i)||n.activeColor!==P.Black||n.turnNumber<6||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0)return;let s=o[r];if(s===void 0||I(s)!==S.SpiritImpact||!B(s)||!Q(s)||s.winsImmediately||s.attacksOpponentDrainer||s.sameTurnScoreWindowValue>0||s.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||s.manaHandoffToOpponent||s.hasRoundtrip||N(s))return;let u=ai(t.length,i),p=An(e,s.game,a,i,u);if(p.allowsImmediateOpponentWin||p.opponentReachesMatchPoint)return;let l=gn(k=>{let M=o[k];return Cn(e,n,M??s,a,i)}),m=gn(k=>{let M=o[k];return An(e,M?.game??s.game,a,i,u)},new Map([[r,p]])),d=gn(k=>{let M=o[k];return rn(e,M?.game??s.game,a,i)}),f=l(r),y=d(r),b=Ce(e,n,n.activeColor),C=b.delta.sameTurnScoreWindowValue<=1&&b.delta.opponentWindowDenyGain<=1,h;for(let k of t){if(k===r)continue;let M=o[k];if(M===void 0||I(M)!==S.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||N(M)||!Te(M.inputs,s.inputs)||M.supermanaProgress!==s.supermanaProgress||M.opponentManaProgress!==s.opponentManaProgress||M.ownDrainerVulnerable!==s.ownDrainerVulnerable||M.ownDrainerWalkVulnerable!==s.ownDrainerWalkVulnerable)continue;let R=l(k),w=m(k),v=d(k),O=Bo(R,f)||wn(M,s),E=C&&M.spiritSetupGain>s.spiritSetupGain&&M.score>=V(s.score,512);if(!E&&!O||w.allowsImmediateOpponentWin||w.opponentReachesMatchPoint||!E&&g(w.worstReplyScore,320)<p.worstReplyScore||!E&&g(v,32)<y)continue;if(h===void 0){h=k;continue}let x=o[h];if(x===void 0){h=k;continue}let _;if(C)_=M.score>x.score||M.score===x.score&&(M.spiritSetupGain>x.spiritSetupGain||M.spiritSetupGain===x.spiritSetupGain&&ae(o,k,h)<0);else{let z=ie(R,l(h)),$=m(h),Z=d(h);z>0?_=!0:z!==0?_=!1:w.worstReplyScore!==$.worstReplyScore?_=w.worstReplyScore>$.worstReplyScore:v!==Z?_=v>Z:M.spiritSetupGain!==x.spiritSetupGain?_=M.spiritSetupGain>x.spiritSetupGain:M.score!==x.score?_=M.score>x.score:_=ae(o,k,h)<0}_&&(h=k)}return h}c(jk,"blackSetupProgressCompetitionOverride");function Kk(e,n,o,t,r,a,i){if(!D(i)||n.activeColor!==P.White||n.turnNumber!==3||n.monsMovesCount<3||o.length===0)return;let s=o[r];if(s===void 0||I(s)!==S.ManaTempo||s.ownDrainerVulnerable||s.ownDrainerWalkVulnerable||s.manaHandoffToOpponent||s.hasRoundtrip||s.winsImmediately||s.attacksOpponentDrainer||s.sameTurnScoreWindowValue>0||s.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||N(s))return;let u=Bt(e,n,s,a,i,S.ManaTempo),p=gn(f=>{let y=o[f];return y===void 0?void 0:Bt(e,n,y,a,i,S.ManaTempo)}),l,m=u,d=!1;for(let f of t){if(f===r)continue;let y=o[f];if(y===void 0)continue;let b=bc(y,s,i)&&V(s.score,y.score)<=24&&Math.abs(s.rootRank-y.rootRank)<=4&&y.rootRank<s.rootRank;if(I(y)!==S.ManaTempo||y.ownDrainerVulnerable||y.ownDrainerWalkVulnerable||y.manaHandoffToOpponent||y.hasRoundtrip||y.winsImmediately||y.attacksOpponentDrainer||y.sameTurnScoreWindowValue>0||y.scoresSupermanaThisTurn||y.scoresOpponentManaThisTurn||y.safeSupermanaPickupNow||y.safeOpponentManaPickupNow||!b&&y.score<V(s.score,96)||N(y)||y.rootRank>=s.rootRank&&!b)continue;let C=p(f);if(C===void 0)continue;let k=ie(C,u)>0||Mo(C,u);if(!k&&!b)continue;let M=l===void 0;if(l!==void 0){let R=o[l];if(R===void 0)M=!0;else{let w=bc(R,s,i)&&V(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 v=ie(C,m);M=v>0||v===0&&ae(o,f,l)<0}else b&&w?M=y.rootRank<R.rootRank||y.rootRank===R.rootRank&&ae(o,f,l)<0:M=b}}M&&(l=f,m=C,d=k)}return l}c(Kk,"whiteManaCompetitionOverride");function qk(e,n,o,t,r,a){if(!D(a)||n.activeColor!==P.White||n.turnNumber<5||n.monsMovesCount!==0||n.playerCanUseAction()||!n.playerCanMoveMana()||!yo(e,n))return;let i=o[r];if(!(i===void 0||!Tn(I(i),S.SafeSupermanaProgress,S.SafeOpponentManaProgress)||!i.ownDrainerVulnerable||!ce(i)||i.sameTurnScoreWindowValue>0))return Pe(o,t,(s,u)=>u!==r&&I(s)===S.ManaTempo&&!N(s)&&!s.ownDrainerVulnerable&&!s.ownDrainerWalkVulnerable&&ce(s)&&s.sameTurnScoreWindowValue===0&&s.safeSupermanaProgressSteps<=i.safeSupermanaProgressSteps+1&&s.safeOpponentManaProgressSteps<=i.safeOpponentManaProgressSteps+1&&g(s.score,448)>=i.score,(s,u)=>dn(o,s,u))}c(qk,"whiteNoActionSafeProgressManaOverride");function Vt(e){return I(e)===S.ManaTempo&&e.sameTurnScoreWindowValue>0&&e.sameTurnScoreWindowValue<=1&&!e.winsImmediately&&!e.attacksOpponentDrainer&&!e.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&!e.manaHandoffToOpponent&&!e.hasRoundtrip}c(Vt,"isNonConcreteManaWindowRoot");function Ov(e,n,o,t){return D(t)&&e.activeColor===P.White&&e.turnNumber>=5&&e.monsMovesCount===0&&e.playerCanUseAction()&&e.playerCanMoveMana()&&I(n)===S.SpiritImpact&&!n.spiritSameTurnScoreSetupNow&&!n.spiritOwnManaSetupNow&&Q(n)&&ce(n)&&n.sameTurnScoreWindowValue===0&&Vt(o)&&n.ownDrainerVulnerable===o.ownDrainerVulnerable&&n.ownDrainerWalkVulnerable===o.ownDrainerWalkVulnerable}c(Ov,"isWhiteSpiritProgressWindowPair");function zk(e,n,o,t,r,a,i){if(!D(i)||n.activeColor!==P.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=Ce(e,n,n.activeColor),p=u.delta.sameTurnScoreWindowValue<=1&&u.delta.opponentWindowDenyGain<=1,l=ai(t.length,i),m=An(e,s.game,a,i,l);if(m.allowsImmediateOpponentWin||m.opponentReachesMatchPoint)return;let d=Cn(e,n,s,a,i),f=rn(e,s.game,a,i),y=gn(h=>{let k=o[h];return k===void 0?void 0:An(e,k.game,a,i,l)},new Map([[r,m]])),b=gn(h=>{let k=o[h];return k===void 0?void 0:rn(e,k.game,a,i)},new Map([[r,f]])),C;for(let h of t){if(h===r)continue;let k=o[h];if(k===void 0||!Ov(n,k,s,i)||k.rootRank>s.rootRank+8)continue;let M=y(h),R=b(h);if(M===void 0||R===void 0)continue;let w=wn(k,s),v=p&&w&&k.score>=V(s.score,32),O=Bo(Cn(e,n,k,a,i),d)||w;if(!(M.allowsImmediateOpponentWin||M.opponentReachesMatchPoint||!v&&!O||!v&&g(M.worstReplyScore,192)<m.worstReplyScore||!v&&g(R,32)<f))if(C===void 0)C=h;else{let E=y(C),x=b(C);(E===void 0||x===void 0||R>x||R===x&&M.worstReplyScore>E.worstReplyScore||R===x&&M.worstReplyScore===E.worstReplyScore&&ae(o,h,C)<0)&&(C=h)}}return C}c(zk,"whiteWindowProgressCompetitionOverride");function $k(e,n,o,t,r){if(!D(r)||e.activeColor!==P.White||e.turnNumber<5||e.monsMovesCount!==0||!e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||I(a)!==S.SpiritImpact||!B(a)||!Q(a)||!ce(a)||a.sameTurnScoreWindowValue>0||N(a)))return Pe(n,o,(i,s)=>s!==t&&I(i)===S.ManaTempo&&!i.spiritDevelopment&&!i.spiritSameTurnScoreSetupNow&&!i.spiritOwnManaSetupNow&&ce(i)&&i.sameTurnScoreWindowValue===0&&!N(i)&&Te(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],p=n[s];return u===void 0||p===void 0?i-s:u.score!==p.score?u.score>p.score?-1:1:ae(n,i,s)})}c($k,"whiteActionManaClusterOverride");function Yk(e,n,o,t,r,a,i){if(!D(i)||n.activeColor!==P.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||I(s)!==S.SpiritImpact||!s.spiritOwnManaSetupNow||s.spiritSameTurnScoreSetupNow||!ce(s)||s.sameTurnScoreWindowValue>0||N(s))return;let u=Cn(e,n,s,a,i);return Pe(o,o.map((p,l)=>l),(p,l)=>l===r||I(p)!==S.ManaTempo||p.spiritDevelopment||p.spiritSameTurnScoreSetupNow||p.spiritOwnManaSetupNow||p.ownDrainerVulnerable||p.ownDrainerWalkVulnerable||!ce(p)||p.sameTurnScoreWindowValue!==0||N(p)||p.rootRank>s.rootRank+2||p.safeSupermanaProgressSteps>s.safeSupermanaProgressSteps||p.safeOpponentManaProgressSteps>s.safeOpponentManaProgressSteps||p.scorePathBestSteps>s.scorePathBestSteps?!1:ie(Cn(e,n,p,a,i),u)>0||p.score>=g(s.score,512),(p,l)=>ae(o,p,l))}c(Yk,"whiteFollowupManaOverride");function _l(e){return e.activeColor===P.Black&&e.turnNumber>=8&&e.monsMovesCount===0&&e.playerCanUseAction()&&e.playerCanMoveMana()}c(_l,"isLateBlackActionManaTurnStart");function Iv(e,n,o,t){return D(t)&&_l(e)&&I(n)===S.SpiritImpact&&n.spiritDevelopment&&!n.spiritSameTurnScoreSetupNow&&!n.spiritOwnManaSetupNow&&n.sameTurnScoreWindowValue===0&&ce(n)&&!N(n)&&I(o)===S.ManaTempo&&o.sameTurnScoreWindowValue===0&&ce(o)&&!N(o)&&Te(n.inputs,o.inputs)}c(Iv,"isLateBlackSpiritFollowupManaPair");function Xk(e,n,o,t,r){if(!D(r)||!_l(e)||n.length===0)return;let a=n[t];if(!(a===void 0||I(a)!==S.ManaTempo))return Pe(n,o,(i,s)=>s!==t&&Iv(e,i,a,r)&&V(a.score,i.score)<=512&&i.rootRank<a.rootRank&&Math.abs(a.rootRank-i.rootRank)<=16,(i,s)=>dn(n,i,s))}c(Xk,"blackLateFollowupCompetitionOverride");function Qk(e,n,o,t,r,a){if(!D(a)||!_l(n)||t.length===0||o.length===0||!yo(e,n))return;let i=o[r];if(!(i===void 0||I(i)!==S.ManaTempo||i.spiritDevelopment||i.spiritSameTurnScoreSetupNow||i.spiritOwnManaSetupNow||Q(i)||!ce(i)||i.sameTurnScoreWindowValue>0||N(i)||i.ownDrainerVulnerable||i.ownDrainerWalkVulnerable))return Pe(o,t,(s,u)=>u!==r&&I(s)===S.SpiritImpact&&s.spiritOwnManaSetupNow&&!s.spiritSameTurnScoreSetupNow&&!Q(s)&&ce(s)&&s.sameTurnScoreWindowValue===0&&!N(s)&&!s.ownDrainerVulnerable&&!s.ownDrainerWalkVulnerable&&s.spiritSetupGain>=g(i.spiritSetupGain,64)&&V(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 p=o[s],l=o[u];return p===void 0||l===void 0?s-u:p.rootRank!==l.rootRank?p.rootRank<l.rootRank?-1:1:p.spiritSetupGain!==l.spiritSetupGain?p.spiritSetupGain>l.spiritSetupGain?-1:1:ae(o,s,u)})}c(Qk,"blackLateReplyRiskSetupOverride");function Zk(e,n,o,t,r,a,i){if(!D(i)||!_l(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 p=o[r];if(p===void 0)return;let l=I(p);if(!Tn(l,S.SafeSupermanaProgress,S.SafeOpponentManaProgress)||!Q(p)||p.spiritDevelopment||p.spiritSameTurnScoreSetupNow||p.spiritOwnManaSetupNow||!ce(p)||p.sameTurnScoreWindowValue>0||N(p)||p.ownDrainerVulnerable||p.ownDrainerWalkVulnerable)return;let m=Cn(e,n,p,a,i);return Pe(o,t,(d,f)=>f!==r&&I(d)===S.SpiritImpact&&d.spiritOwnManaSetupNow&&!d.spiritSameTurnScoreSetupNow&&Q(d)&&ce(d)&&d.sameTurnScoreWindowValue===0&&d.manaHandoffToOpponent===p.manaHandoffToOpponent&&d.hasRoundtrip===p.hasRoundtrip&&!N(d)&&d.ownDrainerVulnerable===p.ownDrainerVulnerable&&d.ownDrainerWalkVulnerable===p.ownDrainerWalkVulnerable&&d.supermanaProgress===p.supermanaProgress&&d.opponentManaProgress===p.opponentManaProgress&&Bo(Cn(e,n,d,a,i),m)&&V(p.score,d.score)<=32&&d.spiritSetupGain>=g(p.spiritSetupGain,64)&&d.rootRank<=p.rootRank+4,(d,f)=>{let y=o[d],b=o[f];return y===void 0||b===void 0?d-f:y.score!==b.score?y.score>b.score?-1:1:y.spiritSetupGain!==b.spiritSetupGain?y.spiritSetupGain>b.spiritSetupGain?-1:1:y.rootRank!==b.rootRank?y.rootRank<b.rootRank?-1:1:ae(o,d,f)})}c(Zk,"blackLateWeakWindowSafeProgressSetupOverride");function xv(e,n,o,t){return D(t)&&e.activeColor===P.Black&&e.turnNumber<=4&&I(n)===S.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}c(xv,"isBlackSpiritProgressWindowPair");function Jk(e,n,o,t,r,a,i,s){if(!D(s)||n.activeColor!==P.Black||o.length===0)return;let u=o[a];if(u===void 0||I(u)!==S.ManaTempo||a>1&&!(n.turnNumber<=2&&n.playerCanUseAction()&&n.playerCanMoveMana()))return;let p=Vt(u);if(u.winsImmediately||u.attacksOpponentDrainer||u.sameTurnScoreWindowValue>0&&!p||u.scoresSupermanaThisTurn||u.scoresOpponentManaThisTurn||u.safeSupermanaPickupNow||u.safeOpponentManaPickupNow)return;let l=Bt(e,n,u,i,s,S.ManaTempo),m=N(u),d=Q(u),f=ai(t.length,s),y=gn(M=>{let R=o[M];return R===void 0?void 0:An(e,R.game,i,s,f)}),b=new Map,C=gn(M=>{let R=o[M];return R===void 0?void 0:rn(e,R.game,i,s)},b),h=[];for(let M of r){if(M===a)continue;let R=o[M];if(R===void 0)continue;let w=I(R),v=R.spiritOwnManaSetupNow||R.spiritSameTurnScoreSetupNow,O=w===S.SpiritImpact&&!v&&Q(R),x=Tn(w,S.SafeSupermanaProgress,S.SafeOpponentManaProgress)&&!p,_=v&&!p&&n.turnNumber<=4;if(!_&&!x&&!O)continue;let z=Cn(e,n,R,i,s),$=Q(R),Z=wn(R,u)||$&&!d;if(w===S.SpiritImpact&&!m&&!N(R)&&I(u)===S.ManaTempo&&!d&&!u.spiritDevelopment&&!u.spiritSameTurnScoreSetupNow&&!u.spiritOwnManaSetupNow&&R.spiritDevelopment&&!R.spiritSameTurnScoreSetupNow&&!R.spiritOwnManaSetupNow&&$&&!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 K=x&&n.turnNumber<=6&&u.score<0&&R.score>=0&&Z,pe=!1;if(O&&p&&xv(n,R,u,s)&&R.rootRank<=u.rootRank+8){let Qe=y(M),fn=y(a),Ze=C(M),Ln=C(a);pe=Qe!==void 0&&fn!==void 0&&Ze!==void 0&&Ln!==void 0&&!Qe.allowsImmediateOpponentWin&&!fn.allowsImmediateOpponentWin&&!Qe.opponentReachesMatchPoint&&!fn.opponentReachesMatchPoint&&wn(R,u)&&g(Qe.worstReplyScore,192)>=fn.worstReplyScore&&g(Ze,32)>=Ln}if(!Bo(z,l)&&!K&&!pe||N(R)&&!m&&!_&&!K&&!pe)continue;let Ee=_&&fy(e,n,R,u,i,s);(Z||Ee||pe)&&h.push(M)}return h.map(M=>{let R=o[M];if(R===void 0||!R.spiritOwnManaSetupNow||R.spiritSameTurnScoreSetupNow)return M;let w=y(M);return w===void 0?M:t.filter(O=>{let E=o[O];if(O===M||E===void 0||!xs(n,E,R,s))return!1;let x=y(O);return x!==void 0&&(Rl(e,n,o,O,x,M,w,i,s,b)??0)>0}).sort((O,E)=>{let x=o[O],_=o[E],z=y(O),$=y(E);if(x===void 0||_===void 0||z===void 0||$===void 0)return O-E;if(z.worstReplyScore!==$.worstReplyScore)return z.worstReplyScore>$.worstReplyScore?-1:1;let Z=C(O)??-2147483648,Y=C(E)??-2147483648;return Z!==Y?Z>Y?-1:1:x.score!==_.score?x.score>_.score?-1:1:ae(o,O,E)})[0]??M}).sort((M,R)=>ae(o,M,R))[0]}c(Jk,"blackFamilyCompetitionOverride");function eT(e,n,o,t,r){if(!D(r)||e.activeColor!==P.Black||e.turnNumber<8||e.monsMovesCount===0||e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(a===void 0||I(a)!==S.ManaTempo||!Vt(a)||!a.ownDrainerVulnerable||a.ownDrainerWalkVulnerable)return;let i=Q(a);return Pe(n,o,(s,u)=>{let p=Q(s),l=wn(s,a)||p&&!i;return u!==t&&I(s)===S.ManaTempo&&Te(s.inputs,a.inputs)&&s.sameTurnScoreWindowValue===0&&!s.ownDrainerVulnerable&&!s.ownDrainerWalkVulnerable&&ce(s)&&!N(s)&&(a.rootRank>0||l)&&V(a.score,s.score)<=32&&s.rootRank<=a.rootRank+2},(s,u)=>dn(n,s,u))}c(eT,"blackLateWindowManaSafetyOverride");function nT(e,n,o,t,r){if(!D(r)||n.activeColor!==P.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||I(i)!==S.ManaTempo||i.sameTurnScoreWindowValue!==0||!ce(i)||N(i)))return Pe(o,o.map((s,u)=>u),(s,u)=>u!==t&&I(s)===S.ManaTempo&&Vt(s)&&s.rootRank===0&&s.ownDrainerVulnerable&&!s.ownDrainerWalkVulnerable&&V(i.score,s.score)<=256,(s,u)=>ae(o,s,u))}c(nT,"blackLateWindowCompetitionOverride");function oT(e,n,o,t,r){if(!D(r)||e.activeColor!==P.Black||e.turnNumber<12||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||I(a)!==S.DrainerSafetyRecovery||!a.spiritDevelopment||!Q(a)||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.sameTurnScoreWindowValue>0||!ce(a)||N(a)||a.inputs.length<3))return Pe(n,o,(i,s)=>s!==t&&I(i)===S.SpiritImpact&&i.spiritDevelopment&&!i.spiritSameTurnScoreSetupNow&&!i.spiritOwnManaSetupNow&&Q(i)&&ce(i)&&i.sameTurnScoreWindowValue===0&&i.inputs.length>=3&&vs(i.inputs,a.inputs,0)&&vs(i.inputs,a.inputs,1)&&V(a.score,i.score)<=1024&&i.rootRank<=a.rootRank+2&&wn(i,a),(i,s)=>ae(n,i,s))}c(oT,"blackLateRecoveryProgressCompetitionOverride");function tT(e,n,o,t,r){if(!D(r)||e.activeColor!==P.Black||e.turnNumber>2||!e.playerCanUseAction()||!e.playerCanMoveMana())return;let a=n[t];if(!(a===void 0||I(a)!==S.SpiritImpact||!a.spiritOwnManaSetupNow||a.spiritSameTurnScoreSetupNow||a.winsImmediately||a.attacksOpponentDrainer||a.scoresSupermanaThisTurn||a.scoresOpponentManaThisTurn||a.safeSupermanaPickupNow||a.safeOpponentManaPickupNow||a.sameTurnScoreWindowValue>0||a.manaHandoffToOpponent||a.hasRoundtrip||N(a)||a.inputs.length<2))return Pe(n,o,(i,s)=>s!==t&&I(i)===S.SpiritImpact&&i.spiritOwnManaSetupNow&&!i.spiritSameTurnScoreSetupNow&&!i.winsImmediately&&!i.attacksOpponentDrainer&&!i.scoresSupermanaThisTurn&&!i.scoresOpponentManaThisTurn&&!i.safeSupermanaPickupNow&&!i.safeOpponentManaPickupNow&&i.sameTurnScoreWindowValue===0&&!i.manaHandoffToOpponent&&!i.hasRoundtrip&&!N(i)&&i.inputs.length>=2&&vs(i.inputs,a.inputs,0)&&vs(i.inputs,a.inputs,1)&&i.spiritSetupGain===a.spiritSetupGain&&i.ownDrainerVulnerable===a.ownDrainerVulnerable&&i.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&i.rootRank<a.rootRank,(i,s)=>dn(n,i,s))}c(tT,"blackOpeningSetupSiblingOverride");function rT(e,n,o,t,r,a){if(!D(a)||n.activeColor!==P.Black||n.turnNumber!==2||n.monsMovesCount<2||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0||!yo(e,n))return;let i=o[r];if(!(i===void 0||I(i)!==S.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||N(i)))return Pe(o,t,(s,u)=>u!==r&&I(s)===S.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&&!N(s)&&s.rootRank<i.rootRank&&s.score>=g(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)=>Ff(o,s,u))}c(rT,"blackEarlySafeManaFollowupOverride");function aT(e,n,o,t,r,a){if(!D(a)||n.activeColor!==P.Black||n.turnNumber!==2||n.monsMovesCount>1||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0||!yo(e,n))return;let i=o[r];if(!(i===void 0||I(i)!==S.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||N(i)))return Pe(o,t,(s,u)=>u!==r&&I(s)===S.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&&!N(s)&&s.rootRank>i.rootRank&&s.rootRank<=i.rootRank+4&&s.score>=V(i.score,32)&&s.spiritSetupGain>=g(i.spiritSetupGain,16)&&s.scorePathBestSteps>=i.scorePathBestSteps&&s.ownDrainerVulnerable===i.ownDrainerVulnerable&&s.ownDrainerWalkVulnerable===i.ownDrainerWalkVulnerable,(s,u)=>{let p=o[s],l=o[u];return p===void 0||l===void 0?s-u:p.score!==l.score?p.score>l.score?-1:1:p.spiritSetupGain!==l.spiritSetupGain?p.spiritSetupGain>l.spiritSetupGain?-1:1:p.rootRank!==l.rootRank?p.rootRank<l.rootRank?-1:1:ae(o,s,u)})}c(aT,"blackEarlyPlainSpiritFollowupOverride");function iT(e,n,o,t,r,a){if(!D(a)||n.activeColor!==P.Black||n.turnNumber!==4||n.monsMovesCount===0||n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0||!yo(e,n))return;let i=o[r];if(!(i===void 0||!Tn(I(i),S.ManaTempo,S.SafeSupermanaProgress,S.SafeOpponentManaProgress)||!i.ownDrainerVulnerable||i.winsImmediately||i.attacksOpponentDrainer||i.sameTurnScoreWindowValue>0||i.scoresSupermanaThisTurn||i.scoresOpponentManaThisTurn||i.safeSupermanaPickupNow||i.safeOpponentManaPickupNow||i.manaHandoffToOpponent||i.hasRoundtrip))return Pe(o,t,(s,u)=>u!==r&&I(s)===S.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)=>Ff(o,s,u))}c(iT,"blackTurnFourVulnerableProgressManaOverride");function sT(e,n,o,t,r,a){if(!D(a)||n.activeColor!==P.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||!Tn(I(s),S.SafeSupermanaProgress,S.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 Pe(o,t,(u,p)=>p!==r&&I(u)===S.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&&V(s.score,u.score)<=160&&u.rootRank<=s.rootRank+4,(u,p)=>dn(o,u,p))}c(sT,"blackTurnSixAttackVulnerableProgressManaOverride");function uT(e,n,o,t,r,a){if(!D(a)||n.activeColor!==P.Black||n.turnNumber!==4||n.monsMovesCount===0||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0||!yo(e,n))return;let i=o[r];if(!(i===void 0||I(i)!==S.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 Pe(o,t,(s,u)=>u!==r&&I(s)===S.SpiritImpact&&s.spiritOwnManaSetupNow&&!s.spiritSameTurnScoreSetupNow&&!s.winsImmediately&&!s.attacksOpponentDrainer&&s.sameTurnScoreWindowValue===0&&!s.scoresSupermanaThisTurn&&!s.scoresOpponentManaThisTurn&&!s.safeSupermanaPickupNow&&!s.safeOpponentManaPickupNow&&!s.manaHandoffToOpponent&&!s.hasRoundtrip&&Te(s.inputs,i.inputs)&&s.ownDrainerVulnerable===i.ownDrainerVulnerable&&s.ownDrainerWalkVulnerable===i.ownDrainerWalkVulnerable&&s.spiritSetupGain>=g(i.spiritSetupGain,32)&&s.rootRank<i.rootRank,(s,u)=>dn(o,s,u))}c(uT,"blackTurnFourSetupClusterOverride");function cT(e,n,o,t,r,a){if(!D(a)||n.activeColor!==P.Black||n.turnNumber<6||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0||!yo(e,n))return;let i=o[r];if(!(i===void 0||I(i)!==S.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 Pe(o,t,(s,u)=>u!==r&&I(s)===S.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&&Te(s.inputs,i.inputs)&&s.spiritSetupGain>=g(i.spiritSetupGain,32)&&s.score>=V(i.score,96)&&s.rootRank<=i.rootRank+4,(s,u)=>{let p=o[s],l=o[u];return p===void 0||l===void 0?s-u:p.score!==l.score?p.score>l.score?-1:1:p.spiritSetupGain!==l.spiritSetupGain?p.spiritSetupGain>l.spiritSetupGain?-1:1:p.rootRank!==l.rootRank?p.rootRank<l.rootRank?-1:1:ae(o,s,u)})}c(cT,"blackPlainSpiritSetupCompetitionOverride");function pT(e,n,o,t,r,a){if(!D(a)||n.activeColor!==P.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||I(s)!==S.ManaTempo||s.winsImmediately||s.attacksOpponentDrainer||s.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||s.sameTurnScoreWindowValue>0||s.manaHandoffToOpponent||s.hasRoundtrip||s.score<0))return Pe(o,t,(u,p)=>p!==r&&Tn(I(u),S.SafeSupermanaProgress,S.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,p)=>{let l=o[u],m=o[p];return l===void 0||m===void 0?u-p:l.score!==m.score?l.score>m.score?-1:1:l.rootRank!==m.rootRank?l.rootRank<m.rootRank?-1:1:ae(o,u,p)})}c(pT,"blackNoActionProgressOverride");function lT(e,n,o,t,r){if(!D(r)||e.activeColor!==P.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(!(I(a)!==S.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 Pe(n,o,(s,u)=>u===t||I(s)!==S.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:V(a.score,s.score)<=192,(s,u)=>dn(n,s,u))}c(lT,"blackNoActionManaSiblingOverride");function dT(e,n,o,t,r,a){if(!D(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||!Vt(s)||!s.ownDrainerVulnerable||s.ownDrainerWalkVulnerable||s.spiritDevelopment||s.spiritSameTurnScoreSetupNow||s.spiritOwnManaSetupNow))return Pe(o,o.map((u,p)=>p),(u,p)=>p!==t&&I(u)===S.DrainerSafetyRecovery&&u.classes.drainerSafetyRecover&&!N(u)&&!u.ownDrainerVulnerable&&!u.ownDrainerWalkVulnerable&&!u.spiritDevelopment&&!u.spiritSameTurnScoreSetupNow&&!u.spiritOwnManaSetupNow&&ce(u)&&u.sameTurnScoreWindowValue===0&&Te(u.inputs,s.inputs)&&(!r.requireSameProgressSteps||u.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps)&&u.rootRank<=s.rootRank&&u.scorePathBestSteps>s.scorePathBestSteps,(u,p)=>dn(o,u,p))}c(dT,"noActionRecoveryOverride");function mT(e,n,o,t,r){return dT(e,n,o,t,{color:P.White,turnNumber:3,monsMoves:{kind:"exact",count:0},rejectDrainerAttack:!1,requireSameProgressSteps:!1},r)}c(mT,"whiteTurnThreeNoActionRecoveryOverride");function fT(e,n,o,t,r){return dT(e,n,o,t,{color:P.Black,turnNumber:4,monsMoves:{kind:"minimum",count:1},rejectDrainerAttack:!0,requireSameProgressSteps:!0},r)}c(fT,"blackTurnFourWeakWindowRecoveryOverride");function yT(e,n,o,t,r){if(!D(r)||e.activeColor!==P.White||e.turnNumber!==3||e.monsMovesCount!==1||!e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||!Tn(I(a),S.SafeSupermanaProgress,S.SafeOpponentManaProgress)||N(a)||!ce(a)||a.spiritDevelopment||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.sameTurnScoreWindowValue>0))return Pe(n,o,(i,s)=>{let u=V(a.score,i.score)<=160&&i.spiritSetupGain>=g(a.spiritSetupGain,64)&&i.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&i.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&i.rootRank+6<=a.rootRank;return s!==t&&I(i)===S.SpiritImpact&&i.spiritOwnManaSetupNow&&!i.spiritSameTurnScoreSetupNow&&Q(i)&&!N(i)&&ce(i)&&i.sameTurnScoreWindowValue===0&&i.manaHandoffToOpponent===a.manaHandoffToOpponent&&i.hasRoundtrip===a.hasRoundtrip&&i.ownDrainerVulnerable===a.ownDrainerVulnerable&&i.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&(V(a.score,i.score)<=32||u)&&i.spiritSetupGain>=g(a.spiritSetupGain,64)&&i.safeSupermanaProgressSteps<=a.safeSupermanaProgressSteps&&i.safeOpponentManaProgressSteps<=a.safeOpponentManaProgressSteps&&i.rootRank<=a.rootRank+4},(i,s)=>{let u=n[i],p=n[s];return u===void 0||p===void 0?i-s:u.score!==p.score?u.score>p.score?-1:1:u.spiritSetupGain!==p.spiritSetupGain?u.spiritSetupGain<p.spiritSetupGain?-1:1:u.rootRank!==p.rootRank?u.rootRank<p.rootRank?-1:1:ae(n,i,s)})}c(yT,"whiteEarlySafeProgressSetupCompetitionOverride");function ST(e,n,o,t,r,a){if(!D(a)||n.activeColor!==P.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||I(i)!==S.SpiritImpact||!i.spiritOwnManaSetupNow||i.spiritSameTurnScoreSetupNow||!ce(i)||i.sameTurnScoreWindowValue>0||N(i)||Ce(e,n,n.activeColor).delta.sameTurnScoreWindowValue===0))return Pe(o,o.map((u,p)=>p),(u,p)=>p!==r&&I(u)===S.ManaTempo&&!u.ownDrainerVulnerable&&!u.ownDrainerWalkVulnerable&&!u.spiritDevelopment&&!u.spiritSameTurnScoreSetupNow&&!u.spiritOwnManaSetupNow&&u.sameTurnScoreWindowValue===0&&ce(u)&&!N(u),(u,p)=>ae(o,u,p))}c(ST,"whiteEarlySetupCompetitionOverride");function Nv(e,n,o,t){return D(t)&&e.activeColor===P.White&&e.turnNumber>=8&&e.monsMovesCount===0&&e.playerCanUseAction()&&e.playerCanMoveMana()&&I(n)===S.SpiritImpact&&n.spiritDevelopment&&!n.spiritSameTurnScoreSetupNow&&n.sameTurnScoreWindowValue===0&&ce(n)&&!N(n)&&Tn(I(o),S.SafeSupermanaProgress,S.ManaTempo)&&!o.spiritDevelopment&&o.sameTurnScoreWindowValue===0&&ce(o)&&!N(o)&&Te(n.inputs,o.inputs)}c(Nv,"isLateWhiteSpiritFollowupSafeProgressPair");function hT(e,n,o,t){if(!D(t)||e.activeColor!==P.White||e.turnNumber<8||e.monsMovesCount!==0||!e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let r=n[o];if(r===void 0||!Tn(I(r),S.SafeSupermanaProgress,S.ManaTempo))return;let a=n.map((s,u)=>u).filter(s=>{let u=n[s];return s!==o&&u!==void 0&&Nv(e,u,r,t)&&V(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 p=n[s],l=n[u];return p===void 0||l===void 0?s-u:i&&p.spiritOwnManaSetupNow!==l.spiritOwnManaSetupNow?p.spiritOwnManaSetupNow?-1:1:i&&p.spiritSetupGain!==l.spiritSetupGain?p.spiritSetupGain>l.spiritSetupGain?-1:1:dn(n,s,u)})[0]}c(hT,"whiteLateFollowupCompetitionOverride");function bT(e,n,o,t,r,a,i){if(!D(i)||n.activeColor!==P.White||n.turnNumber<5||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0)return;let s=o[r];if(s===void 0||I(s)!==S.SpiritImpact||!B(s)||!Q(s)||!ce(s)||s.sameTurnScoreWindowValue>0||N(s))return;let u=ai(t.length,i),p=An(e,s.game,a,i,u);if(p.allowsImmediateOpponentWin||p.opponentReachesMatchPoint)return;let l=gn(C=>{let h=o[C];return h===void 0?void 0:Cn(e,n,h,a,i)}),m=gn(C=>{let h=o[C];return h===void 0?void 0:An(e,h.game,a,i,u)},new Map([[r,p]])),d=gn(C=>{let h=o[C];return h===void 0?void 0:rn(e,h.game,a,i)}),f=l(r),y=d(r);if(f===void 0||y===void 0)return;let b;for(let C of t){if(C===r)continue;let h=o[C];if(h===void 0||I(h)!==S.SpiritImpact||!h.spiritOwnManaSetupNow||h.spiritSameTurnScoreSetupNow||!Q(h)||!bn(h)||!ce(h)||h.sameTurnScoreWindowValue>0||!Te(h.inputs,s.inputs)||h.ownDrainerVulnerable!==s.ownDrainerVulnerable||h.ownDrainerWalkVulnerable!==s.ownDrainerWalkVulnerable)continue;let k=h.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&h.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps&&h.manaHandoffToOpponent===s.manaHandoffToOpponent&&h.hasRoundtrip===s.hasRoundtrip&&V(s.score,h.score)<=64&&h.spiritSetupGain>=g(s.spiritSetupGain,32)&&h.rootRank<=s.rootRank+2,M=l(C),R=m(C),w=d(C);if(M===void 0||R===void 0||w===void 0)continue;let v=!R.allowsImmediateOpponentWin&&!R.opponentReachesMatchPoint&&V(s.score,h.score)<=128&&g(R.worstReplyScore,320)>=p.worstReplyScore&&g(w,32)>=y&&h.rootRank<=s.rootRank+4&&(Bo(M,f)||wn(h,s));if(!k&&!v)continue;if(b===void 0){b=C;continue}let O=o[b],E=l(b),x=m(b),_=d(b);if(O===void 0||E===void 0||x===void 0||_===void 0){b=C;continue}let z=ie(M,E);(z>0||z>=0&&w>_||z>=0&&w===_&&R.worstReplyScore>x.worstReplyScore||w===_&&R.worstReplyScore===x.worstReplyScore&&h.spiritSetupGain>O.spiritSetupGain||w===_&&R.worstReplyScore===x.worstReplyScore&&h.spiritSetupGain===O.spiritSetupGain&&ae(o,C,b)<0)&&(b=C)}return b}c(bT,"whiteSetupProgressCompetitionOverride");function CT(e,n,o,t,r){if(!D(r)||e.activeColor!==P.White||e.turnNumber!==3||e.monsMovesCount!==1||!e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||I(a)!==S.SpiritImpact||!B(a)||!Q(a)||!ce(a)||a.sameTurnScoreWindowValue>0||N(a)))return Pe(n,o,(i,s)=>s!==t&&I(i)===S.SpiritImpact&&i.spiritOwnManaSetupNow&&!i.spiritSameTurnScoreSetupNow&&Q(i)&&ce(i)&&i.sameTurnScoreWindowValue===0&&!N(i)&&Te(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&&V(a.score,i.score)<=64&&i.spiritSetupGain>=g(a.spiritSetupGain,32)&&i.rootRank<=a.rootRank+4,(i,s)=>{let u=n[i],p=n[s];return u===void 0||p===void 0?i-s:u.score!==p.score?u.score>p.score?-1:1:u.rootRank!==p.rootRank?u.rootRank<p.rootRank?-1:1:ae(n,i,s)})}c(CT,"whiteEarlyFollowupSetupCompetitionOverride");function MT(e,n,o,t,r){if(!D(r)||n.activeColor!==P.White||n.turnNumber!==3||n.monsMovesCount!==1||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0||!yo(e,n))return;let a=o[t];if(!(a===void 0||I(a)!==S.SpiritImpact||!a.spiritOwnManaSetupNow||a.spiritSameTurnScoreSetupNow||!Q(a)||!ce(a)||a.sameTurnScoreWindowValue>0||N(a)))return Pe(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&&I(i)===S.SpiritImpact&&i.spiritOwnManaSetupNow&&!i.spiritSameTurnScoreSetupNow&&Q(i)&&ce(i)&&i.sameTurnScoreWindowValue===0&&!N(i)&&Te(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>=V(a.score,64)&&i.rootRank<=a.rootRank+8&&u},(i,s)=>{let u=o[i],p=o[s];if(u===void 0||p===void 0)return i-s;let l=a.safeSupermanaProgressSteps-u.safeSupermanaProgressSteps,m=a.safeSupermanaProgressSteps-p.safeSupermanaProgressSteps;if(l!==m)return l>m?-1:1;let d=V(a.spiritSetupGain,u.spiritSetupGain),f=V(a.spiritSetupGain,p.spiritSetupGain);return d!==f?d>f?-1:1:u.score!==p.score?u.score>p.score?-1:1:u.rootRank!==p.rootRank?u.rootRank<p.rootRank?-1:1:ae(o,i,s)})}c(MT,"whiteEarlySetupSiblingProgressOverride");function kT(e,n,o,t,r){if(!D(r)||e.activeColor!==P.White||e.turnNumber!==3||e.monsMovesCount!==1||e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||!Tn(I(a),S.SafeSupermanaProgress,S.SafeOpponentManaProgress)||!a.ownDrainerVulnerable||a.ownDrainerWalkVulnerable||!ce(a)||a.spiritDevelopment||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.sameTurnScoreWindowValue>0))return Pe(n,o,(i,s)=>s!==t&&Tn(I(i),S.SafeSupermanaProgress,S.SafeOpponentManaProgress)&&!i.ownDrainerVulnerable&&!i.ownDrainerWalkVulnerable&&ce(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>=V(a.score,32),(i,s)=>dn(n,i,s))}c(kT,"whiteEarlyNoActionProgressCompetitionOverride");function TT(e,n,o,t,r){if(!D(r)||e.activeColor!==P.White||e.turnNumber<5||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||!Tn(I(a),S.SafeSupermanaProgress,S.SafeOpponentManaProgress)||!a.ownDrainerVulnerable||a.ownDrainerWalkVulnerable||!ce(a)||a.spiritDevelopment||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.sameTurnScoreWindowValue>0))return Pe(n,o,(i,s)=>s!==t&&I(i)===S.ManaTempo&&!i.ownDrainerVulnerable&&!i.ownDrainerWalkVulnerable&&!i.spiritDevelopment&&!i.spiritSameTurnScoreSetupNow&&!i.spiritOwnManaSetupNow&&i.sameTurnScoreWindowValue===0&&ce(i)&&!N(i)&&V(a.score,i.score)<=64&&Math.abs(a.rootRank-i.rootRank)<=6,(i,s)=>dn(n,i,s))}c(TT,"whiteManaOnlyCompetitionOverride");function RT(e,n,o,t,r){if(!D(r)||e.activeColor!==P.White||e.turnNumber!==3||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||!Tn(I(a),S.SafeSupermanaProgress,S.SafeOpponentManaProgress)||N(a)||!ce(a)||a.spiritDevelopment||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.sameTurnScoreWindowValue>0))return Pe(n,o,(i,s)=>s!==t&&Tn(I(i),S.SafeSupermanaProgress,S.SafeOpponentManaProgress)&&!N(i)&&ce(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>=V(a.score,32)&&wn(i,a),(i,s)=>dn(n,i,s))}c(RT,"whiteTurnThreeSafeProgressSurfaceOverride");var Dv=Object.freeze({kind:"continue"});function PT(e,n,o){return Object.freeze({id:e,evaluate(t){let r=o(t);return r===void 0?Dv:{kind:"select",index:r,reason:n}}})}c(PT,"selectionRule");function Ae(e,n){return PT(e,ln.ApprovedFamilyCompetition,n)}c(Ae,"familyRule");function Cy(e,n){return PT(e,ln.ApprovedBaselineSelector,n)}c(Cy,"baselineRule");var _v=Object.freeze([Ae("black-family-competition",e=>Jk(e.execution,e.game,e.roots,e.replyRiskShortlist,e.selectionIndices,e.chosenIndex,e.perspective,e.config)),Ae("black-opening-setup-sibling",e=>tT(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Ae("black-early-safe-mana-followup",e=>rT(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Ae("black-early-plain-spirit-followup",e=>aT(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Ae("black-turn-four-vulnerable-progress-mana",e=>iT(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Ae("black-turn-six-attack-vulnerable-progress-mana",e=>sT(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Ae("black-turn-four-setup-cluster",e=>uT(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Ae("black-opening-early-same-lane-higher-score",e=>by(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Ae("black-setup-progress-competition",e=>jk(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.perspective,e.config)),Ae("black-plain-spirit-setup-competition",e=>cT(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Ae("black-no-action-progress",e=>pT(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Ae("black-no-action-mana-sibling",e=>lT(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Ae("black-turn-four-window-mana-sibling",e=>Bk(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Ae("black-turn-four-weak-window-recovery",e=>fT(e.execution,e.game,e.roots,e.chosenIndex,e.config)),Cy("black-baseline-alignment",e=>e.baselineIndex===void 0?void 0:Lk(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.baselineIndex,e.config)),Cy("black-turn-start-guarded-baseline-mana",e=>Gk(e.execution,e.game,e.roots,e.candidateIndices,e.chosenIndex,e.config)),Ae("black-late-window-mana-safety",e=>eT(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Ae("black-late-window-competition",e=>nT(e.execution,e.game,e.roots,e.chosenIndex,e.config)),Ae("black-late-recovery-progress-competition",e=>oT(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Ae("white-followup-mana",e=>Yk(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.perspective,e.config)),Ae("white-mana-competition",e=>Kk(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.perspective,e.config)),Ae("white-no-action-safe-progress-mana",e=>qk(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Ae("white-window-progress-competition",e=>zk(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.perspective,e.config)),Ae("white-action-mana-cluster",e=>$k(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Ae("white-setup-progress-competition",e=>bT(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.perspective,e.config)),Ae("white-early-followup-setup-competition",e=>CT(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Ae("white-opening-early-same-lane-higher-score",e=>by(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Ae("white-early-setup-sibling-progress",e=>MT(e.execution,e.game,e.roots,e.chosenIndex,e.config)),Ae("white-early-safe-progress-setup-competition",e=>yT(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Ae("white-early-no-action-progress-competition",e=>kT(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Ae("white-turn-three-safe-progress-surface",e=>RT(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Cy("white-turn-three-baseline-alignment",e=>e.baselineIndex===void 0?void 0:Vk(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.baselineIndex,e.config)),Ae("white-turn-three-attack-bridge-escape",e=>Hk(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Ae("white-turn-three-no-action-recovery",e=>mT(e.execution,e.game,e.roots,e.chosenIndex,e.config)),Ae("white-mana-only-competition",e=>TT(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Ae("white-turn-five-weak-window-setup",e=>Uk(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Ae("white-early-setup-competition",e=>ST(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Ae("white-late-followup-competition",e=>hT(e.game,e.roots,e.chosenIndex,e.config)),Ae("black-late-followup-competition",e=>Xk(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Ae("black-late-reply-risk-setup",e=>Qk(e.execution,e.game,e.roots,e.replyRiskShortlist,e.chosenIndex,e.config)),Ae("black-late-weak-window-safe-progress-setup",e=>Zk(e.execution,e.game,e.roots,e.replyRiskShortlist,e.chosenIndex,e.perspective,e.config))]);function Fv(e,n,o){let t=n;for(let r of o){let a=r.evaluate({...e,chosenIndex:t.index});a.kind==="select"&&(t={index:a.index,reason:a.reason})}return t}c(Fv,"applyAdvisorSelectionRuleRegistry");function wT(e,n){return Fv(e,n,_v)}c(wT,"applyAdvisorSelectionRules");function AT(e,n,o,t,r,a,i,s=ln.OmittedRootReentry){let u=e[i];if(u===void 0)return;let p=Gt(u,s);Lo(o,p),t.includes(i)||t.push(i),r.includes(i)||r.push(i),a.includes(i)||a.push(i),Lo(n,p)}c(AT,"addAdvisorReentry");function gT(e,n,o,t,r){if(!D(r)||o.length===0||e.session.checkpoint())return;let a=Dl(e),i=Ws(n,o,t,r,{rootReplyRiskSnapshot:c((E,x,_,z)=>An(e,E,x,r,z),"rootReplyRiskSnapshot"),productionPolicy:a});i.length===0&&(i=o.map((E,x)=>x));let s=r.replyRisk.enabled?gs(e,o,i,r):[...i];s.length===0&&(s=[...i]);let u=[...s],p=[...s],l=[...i],m=[],d=[];for(let E of s){let x=o[E];x!==void 0&&Lo(m,Gt(x,ln.ReplyRiskShortlist))}let f=new Map;for(let[E,x]of pl){if(e.session.checkpoint())return;let _=wk(e,n,o,s,t,r,x),z=_===void 0?void 0:o[_];if(_===void 0||z===void 0)continue;let $=Gt(z,E);Lo(d,$),s.includes(_)||s.push(_),l.includes(_)||l.push(_),Lo(m,$),Pk(e,n,o,s,_,E,t,r,f)&&!p.includes(_)&&p.push(_)}let y=Ak(n,o,s,r);y!==void 0&&AT(o,m,d,s,l,p,y,ln.PreserveSpiritRepresentative);for(let E of gk(e,n,o,i,s,t,r))AT(o,m,d,s,l,p,E);l.sort((E,x)=>ae(o,E,x));let b=_f(r,Fe.Baseline),C=Bs(n,o,i,t,b),h=_f(r,r.planner.mode),k,M;r.replyRisk.enabled&&(k=Fs(e,n,o,p,t,r,l)),k!==void 0?M=ln.ApprovedReplyRiskGuard:(k=Bs(n,o,l,t,h,{productionPolicy:a}),M=ln.ApprovedBaselineSelector);let R=wT({execution:e,game:n,roots:o,replyRiskShortlist:u,selectionIndices:l,candidateIndices:i,perspective:t,config:r,baselineIndex:C},{index:k??s[0]??i[0]??0,reason:M}),w=R.index;M=R.reason;let v=o[w];if(v===void 0||e.session.checkpoint())return;let O=Gt(v,M);return{index:w,decision:{orderedShortlist:m,preservedFamilyRepresentatives:d,approvedRoot:O,injectedRoot:void 0}}}c(gT,"productionRootAdvisorPostsearch");function vT(e,n){let o=Object.freeze({id:"root-picker.advisor-postsearch",select(t){let r=gT(e,t.game,t.roots,t.perspective,n)?.index;return r===void 0?{kind:"continue"}:{kind:"select",index:r}}});return Object.freeze({...Dl(e),rootPicker:o})}c(vT,"productionRootPolicy");function My(e,n,o,t){let r=t.length===0?{}:{priorityInputs:t};if(!dc(o))return r;let a=Xr(o),i=_o(o);return{...r,qualifiesPlainSpiritPlan:c(s=>{let u=ot(e,s.game,n,a);return u?.headFamily===S.SpiritImpact&&Ft(u.utility)},"qualifiesPlainSpiritPlan"),qualifiesDrainerSafetyRecoveryPlan:c(s=>ot(e,s.game,n,i)?.headFamily===S.DrainerSafetyRecovery,"qualifiesDrainerSafetyRecoveryPlan")}}c(My,"searchRootOptions");function ET(e,n,o,t=!0){let r=n.fen(),a=ke(o,{search:{transpositionTable:t}}),i=n.activeColor,s=Po(e,n,i,a);if(e.session.cancelled||s.length===0)return[];let u=a.planner.enabled?ot(e,n,i,Zr(n,a)):void 0,p=ti(e,n,i,a,s,u),l=p===void 0?[]:Es(p),m=ey(e,n,i,a,s,My(e,i,a,l));if(n.fen()!==r)throw new Error("runtime root focus mutated its source game");return[...m.evaluations]}c(ET,"focusedScoredRootsForRuntime");function OT(e,n,o,t){let r=n.fen(),a=n.activeColor,i=Po(e,n,a,o),s=o.planner.enabled?ot(e,n,a,Zr(n,o)):void 0,u=ti(e,n,a,o,i,s),p=u===void 0?[]:Es(u),l=Jf(e,n,a,o,i,My(e,a,o,p),!0);if(n.fen()!==r)throw new Error("runtime root-rank focus mutated its source game");let m=l.candidates.findIndex(d=>le(d.inputs,t));return m<0?void 0:m}c(OT,"focusedCandidateRankForRuntimeInputs");function ky(e,n){return{checkpoint:c(()=>e.session.checkpoint(),"checkpoint"),cancelled:c(()=>e.session.cancelled,"cancelled"),rootReplyRiskSnapshot:c((o,t,r,a)=>An(e,o,t,n,a),"rootReplyRiskSnapshot"),pickReplyRiskGuardedIndex:c(o=>Fs(e,o.game,o.roots,o.candidateIndices,o.perspective,n),"pickReplyRiskGuardedIndex"),productionPolicy:vT(e,n)}}c(ky,"rootSelectorOptions");function Ty(e,n,o,t,r,a){let i=ey(e,n,o,t,r,My(e,o,t,a));if(e.session.cancelled)return{inputs:[],evaluations:[]};let s=[...i.evaluations];return s.length===0?{inputs:[],evaluations:s}:{inputs:Rk(n,s,o,t,ky(e,t)),evaluations:s}}c(Ty,"searchAndSelectRoot");function IT(e,n,o,t,r,a){if(r.length<=1||!t.planner.rerankHeads||!El(r))return;let i=r.map(u=>u.inputs),s=a?.compiledChunks[0];return a!==void 0&&s!==void 0&&i.some(u=>le(u,s))?a:bf(e,n,o,Xr(t),i)}c(IT,"tryTurnHeadRerank");function xT(e,n,o,t,r,a,i){let s=a?.compiledChunks[0];if(!(s===void 0||!Ol(r,s)||!Al(r,s)||gl(e,n,o,t,r,i,s)))return[...s]}c(xT,"acceptedRerankInputs");function NT(e,n,o,t){if(e.session.checkpoint())return[];ny(e),Tf(e);let r=ke(o,{search:{transpositionTable:t}}),a=n.activeColor,i=Zr(n,r),s;if(kl(r)&&(s=el(e,n,i),s===void 0&&NM(e,n)&&(r=ke(r,{planner:{enabled:!1}}))),OM(r)&&DM(e,n)&&(s=void 0,r=ke(r,{planner:{enabled:!1}})),kl(r)&&mc(e,n)&&(r=ke(r,{planner:{secondaryAnalysis:!1,selectedFollowupProjection:!1}})),r=_M(n,r),!r.planner.enabled&&r.planner.mode===Fe.Production&&IM(n))return NT(e,n,ke(r,{planner:{mode:Fe.Baseline}}),t);let u=Po(e,n,a,r);if(e.session.cancelled||u.length===0)return[];if(r.planner.enabled){let d=Yr(r),f=s??el(e,n,i),y=f!==void 0&&ay(u,f,d)?f:void 0,b=Zr(n,r),h=nk(n,u,r)?void 0:xM(n,r)?s0(e,n,a,b):ot(e,n,a,b);if(e.session.checkpoint())return[];if(d===je.Production&&y!==void 0){if(vl(u,y,d))return[...y];if(h?.compiledChunks[0]!==void 0&&le(h.compiledChunks[0],y))return Ds(e,n,a,r,d,h,b),[...y]}let k=IT(e,n,a,r,u,h),M=xT(e,n,a,r,u,k,h);if(M!==void 0&&k!==void 0)return Ds(e,n,a,r,d,k,b),M;let R=ry(e,n,a,u,r);if(R!==void 0)return h?.compiledChunks[0]!==void 0&&le(h.compiledChunks[0],R)&&Ds(e,n,a,r,d,h,b),R;if(h!==void 0){let x=ok(e,n,u,h,r);if(x!==void 0)return Ds(e,n,a,r,d,h,b),x}let w=ti(e,n,a,r,u,h),v=w===void 0?[]:Es(w),O=Ty(e,n,a,r,u,v);if(O.inputs.length===0)return[];let E=O.inputs;return h!==void 0&&ek(e,n,a,r,O.evaluations,E,h)&&(E=[...h.compiledChunks[0]??E]),y!==void 0&&le(y,E)?[...E]:(h?.compiledChunks[0]!==void 0&&le(h.compiledChunks[0],E)&&Ds(e,n,a,r,d,h,b),[...E])}if(u.length>1&&r.planner.rerankHeads&&El(u)){let d=u.map(y=>y.inputs),f=u0(e,n,a,Yr(r),Xr(r),d);if(f!==void 0&&Ol(u,f)&&Al(u,f)&&!gl(e,n,a,r,u,void 0,f))return[...f]}let p=ry(e,n,a,u,r);if(p!==void 0)return p;let l=ti(e,n,a,r,u,void 0),m=l===void 0?[]:Es(l);return Ty(e,n,a,r,u,m).inputs}c(NT,"smartSearchBestInputsInternal");function DT(e){Pp(e),ny(e),Tf(e),Vp(e)}c(DT,"clearProductionSelectorCaches");function Fl(e,n,o,t=!0){let r=n.fen(),a=NT(e,n,o,t);if(n.fen()!==r)throw new Error("smart search mutated its source game");return[...a]}c(Fl,"smartSearchBestInputs");function Wv(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(Wv,"randomIndex");function _T(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(_T,"nextInputsForPrompt");function FT(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:br(o)};let r=_T(t);if(r===void 0||r.length===0)return{output:{kind:"invalid-input"},inputFen:""};if(o.length===jt)return{output:{kind:"invalid-input"},inputFen:""};let a=r[Wv(e,r.length)];if(a===void 0)return{output:{kind:"invalid-input"},inputFen:""};o.push(a)}}c(FT,"randomAutomove");function Gs(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&&nn(n,o)!==void 0;if(o.length===jt)return!1;let a=_T(r);if(a===void 0||a.length===0)return!1;a.sort(Wp);for(let i of a){if(o.push(i),t())return!0;o.pop()}return!1},"findFirstApplicableCompletion");return t()?o:[]}c(Gs,"deterministicLegalFallbackInputs");function WT(e){DT(e)}c(WT,"clearTimedOutSelectionCaches");function oo(e,n,o){if(e.session.checkpoint())return[];let t=[...Fl(e,n,o,!0)];if(t.length>0)return t;if(e.session.checkpoint())return[];let r=FT(e,n.fork());return r.output.kind==="events"?la(r.inputFen)??[]:[]}c(oo,"selectSearchInputs");function Wl(e,n,o){return e.session.checkpoint()?[]:(o.planner.enabled&&Vp(e),oo(e,n,o))}c(Wl,"selectSearchInputsWithFreshPlanCache");function BT(e,n,o){if(o.length===0)return;let t=n.activeColor===P.Black&&n.turnNumber===4&&n.monsMovesCount===2&&n.playerCanUseAction()&&n.playerCanMoveMana(),r=n.activeColor===P.Black&&n.turnNumber>=4&&n.monsMovesCount>=3&&n.playerCanUseAction()&&n.playerCanMoveMana();if(!t&&!r)return;let a=oo(e,n,ho(n,"pro"));if(!(a.length===0||le(a,o)))return t&&a.length===3&&a[2]?.kind==="modifier"&&a[2].modifier===en.SelectBomb||r?a:void 0}c(BT,"selectLateBlackFallbackInputs");function LT(e,n){return Un(e,n,n.activeColor)||$0(e,n,n.activeColor)}c(LT,"ownDrainerUnsafe");function Ry(e,n,o,t){let r=_o(t),a=Ju(e,o.game,n,n.activeColor,r),i=I(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 nl(e,n,s,n.activeColor,r)}c(Ry,"evaluateSelectedUtility");function kc(e,n){return e.find(o=>le(o.inputs,n))}c(kc,"findRoot");function Bl(e){return!e.opponentCanWinImmediately&&e.delta.sameTurnScoreWindowValue===1&&e.delta.opponentWindowDenyGain===1&&!e.delta.drainerAttackAvailable&&e.delta.drainerSafety<0}c(Bl,"whiteDenyFallbackContextEligible");function Tc(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&&I(e)===S.ManaTempo}c(Tc,"safeQuietManaTempoRoot");function Py(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(Py,"confirmBaselineContextEligible");function wy(e,n,o,t){let r=Mt(o),a=ET(e,n,r,!0),i=a.findIndex(p=>le(p.inputs,t));if(i<0)return;let s=Ws(n,a,n.activeColor,r,ky(e,r));if(!s.includes(i))return;let u=gs(e,a,s,r);if(u.includes(i))return{config:r,roots:a,productionIndex:i,candidateIndices:s,shortlist:u}}c(wy,"productionRuntimeCompetition");function Ay(e){return ke(e,{planner:{enabled:!1,rerankHeads:!0,mode:Fe.Baseline}})}c(Ay,"searchOnlyBaselineConfig");function GT(e,n){if(n.activeColor===P.White&&n.turnNumber<=3&&!n.playerCanUseAction()&&!n.playerCanMoveMana()&&(n.monsMovesCount===0||n.monsMovesCount===3)||n.activeColor===P.White&&n.turnNumber===1&&n.monsMovesCount===2&&!n.playerCanUseAction()&&!n.playerCanMoveMana()||n.activeColor===P.White&&n.turnNumber===3&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()||n.activeColor===P.White&&n.turnNumber===3&&n.monsMovesCount>=3&&n.playerCanUseAction()&&n.playerCanMoveMana())return oo(e,n,ho(n,"pro"));let t=n.activeColor===P.White&&n.turnNumber===3&&n.monsMovesCount===1&&!n.playerCanUseAction()&&n.playerCanMoveMana();if(!(!(n.activeColor===P.White&&n.turnNumber===3&&n.monsMovesCount>0&&!t&&(n.playerCanUseAction()||n.playerCanMoveMana()))||!LT(e,n)))return oo(e,n,ho(n,"fast"))}c(GT,"selectEarlyWhiteFallbackInputs");function VT(e,n,o){if(!(!(n.activeColor===P.White&&n.turnNumber===3&&(n.monsMovesCount===1||n.monsMovesCount===2)&&n.playerCanUseAction()&&n.playerCanMoveMana())||Ce(e,n,n.activeColor).delta.sameTurnScoreWindowValue<=0))return Wl(e,n,Mt(o))}c(VT,"selectScoreWindowTacticalFallbackInputs");function HT(e,n){return n.activeColor===P.Black&&n.turnNumber===2&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()||n.activeColor===P.Black&&n.turnNumber===2&&n.monsMovesCount>0&&!n.playerCanUseAction()&&n.playerCanMoveMana()||n.activeColor===P.Black&&n.turnNumber===4&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()?oo(e,n,ho(n,"pro")):void 0}c(HT,"selectUnconditionalBlackFallbackInputs");function UT(e,n,o,t){if(!(n.activeColor===P.White&&n.turnNumber===3&&n.monsMovesCount===2&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&t.length>0)||!Py(Ce(e,n,n.activeColor)))return;let a=wy(e,n,o,t);if(a?.candidateIndices.length!==2||a.shortlist.length!==a.candidateIndices.length)return;let i=oo(e,n,Ay(a.config));if(i.length===0||le(i,t))return;let s=a.roots.findIndex(l=>le(l.inputs,i));if(!a.candidateIndices.includes(s)||!a.shortlist.includes(s))return;let u=a.roots[a.productionIndex],p=a.roots[s];if(!(u===void 0||p===void 0))return u.score===p.score&&u.spiritSetupGain===p.spiritSetupGain&&u.safeSupermanaProgressSteps===p.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps===p.safeOpponentManaProgressSteps&&u.scorePathBestSteps===p.scorePathBestSteps&&Tc(u)&&Tc(p)?i:void 0}c(UT,"selectWhiteConfirmBaselineTiebreakInputs");function jT(e,n,o,t){if(!(n.activeColor===P.White&&n.turnNumber===3&&n.monsMovesCount>=3&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&t.length>0)||!Py(Ce(e,n,n.activeColor)))return;let a=wy(e,n,o,t);if(a===void 0)return;let i=oo(e,n,Ay(a.config));if(i.length===0||le(i,t))return;let s=a.roots.findIndex(l=>le(l.inputs,i));if(!a.candidateIndices.includes(s)||!a.shortlist.includes(s))return;let u=a.roots[a.productionIndex],p=a.roots[s];if(!(u===void 0||p===void 0))return p.score>=u.score&&p.rootRank<u.rootRank&&u.spiritSetupGain===p.spiritSetupGain&&u.safeSupermanaProgressSteps===p.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps===p.safeOpponentManaProgressSteps&&u.scorePathBestSteps===p.scorePathBestSteps&&Tc(u)&&Tc(p)?i:void 0}c(jT,"selectWhiteConfirmBaselineBetterInputs");function KT(e,n,o,t){if(!(n.activeColor===P.White&&n.turnNumber===5&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()&&t.length>0))return;let a=Ce(e,n,n.activeColor);if(!Bl(a))return;let i=Mt(o),s=kc(Po(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=ho(n,"pro"),p=oo(e,n,u);if(p.length===0||le(p,t))return;let l=kc(Po(e,n,n.activeColor,u),p);if(!(l===void 0||!l.spiritDevelopment||l.spiritSameTurnScoreSetupNow||!Q(l)||l.winsImmediately||l.attacksOpponentDrainer||l.scoresSupermanaThisTurn||l.scoresOpponentManaThisTurn||l.safeSupermanaPickupNow||l.safeOpponentManaPickupNow||l.manaHandoffToOpponent||l.hasRoundtrip||!l.ownDrainerVulnerable||l.ownDrainerWalkVulnerable||l.sameTurnScoreWindowValue!==0))return p}c(KT,"selectWhiteEarlyBaselineFallbackInputs");function qT(e,n,o,t){if(!(n.activeColor===P.White&&n.turnNumber===3&&n.monsMovesCount===1&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&t.length>0))return;let a=Ce(e,n,n.activeColor);if(!Bl(a))return;let i=Mt(o),s=kc(Po(e,n,n.activeColor,i),t);if(s===void 0||!Ft(Ry(e,n,s,i)))return;let u=ke(i,{planner:{enabled:!1,rerankHeads:!0,mode:Fe.Baseline}}),p=oo(e,n,u);return p.length===0||le(p,t)?void 0:p}c(qT,"selectWhiteNonnegativeDenyFallbackInputs");function zT(e,n,o,t){if(!(n.activeColor===P.White&&n.turnNumber===3&&n.monsMovesCount===1&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&t.length>0))return;let a=Ce(e,n,n.activeColor);if(!Bl(a))return;let i=Mt(o),s=kc(Po(e,n,n.activeColor,i),t);if(s===void 0||Ft(Ry(e,n,s,i)))return;let u=ho(n,"pro"),p=ke(i,{planner:{enabled:!1,rerankHeads:!0,ownSeedCap:u.planner.ownSeedCap,ownBeam:u.planner.ownBeam,perNodeFamilyCap:u.planner.perNodeFamilyCap,stepCap:u.planner.stepCap}}),l=oo(e,n,p);if(!(l.length===0||le(l,t)))return OT(e,n,p,l)===0?l:void 0}c(zT,"selectWhiteNegativeDenyFallbackInputs");var $T=Object.freeze({kind:"continue"});function YT(e){return{kind:"select",inputs:e}}c(YT,"selectProductionGuard");function fr(e){return e===void 0?$T:YT(e)}c(fr,"guardResult");var XT=Object.freeze([Object.freeze({id:"early-white-fallback",evaluate:c((e,n)=>fr(GT(e,n)),"evaluate")}),Object.freeze({id:"score-window-tactical-fallback",evaluate:c((e,n,o)=>fr(VT(e,n,o)),"evaluate")}),Object.freeze({id:"unconditional-black-fallback",evaluate:c((e,n)=>fr(HT(e,n)),"evaluate")})]),QT=Object.freeze([Object.freeze({id:"white-early-baseline-fallback",evaluate:c((e,n,o,t)=>fr(KT(e,n,o,t)),"evaluate")}),Object.freeze({id:"white-nonnegative-deny-fallback",evaluate:c((e,n,o,t)=>fr(qT(e,n,o,t)),"evaluate")}),Object.freeze({id:"white-negative-deny-fallback",evaluate:c((e,n,o,t)=>fr(zT(e,n,o,t)),"evaluate")}),Object.freeze({id:"white-confirm-baseline-tiebreak",evaluate:c((e,n,o,t)=>fr(UT(e,n,o,t)),"evaluate")}),Object.freeze({id:"white-confirm-baseline-better",evaluate:c((e,n,o,t)=>fr(jT(e,n,o,t)),"evaluate")}),Object.freeze({id:"late-black-fallback",evaluate:c((e,n,o,t)=>fr(BT(e,n,t)),"evaluate")})]);function ZT(e,n,o,t){for(let a of XT){if(e.session.checkpoint())return[];let i=a.evaluate(e,n,o);if(i.kind==="select")return[...i.inputs]}let r=Wl(e,n,t);if(e.session.checkpoint())return[];for(let a of QT){if(e.session.checkpoint())return[];let i=a.evaluate(e,n,o,r);if(i.kind==="select")return[...i.inputs]}return r}c(ZT,"selectProductionPolicyInputs");var Bv=200,Lv=100,Gv=550;function eR(e,n,o){return e.session.withDeadlineIfAbsent(Wy,()=>{let t=Gs(n);if(e.session.checkpoint())return t;let r=o.budget.preference;if(r!=="fast"&&r!=="normal")return JT(e,n,o,t);let a=Yd(e,n,r);return a.kind==="supported"?a.inputs.length===0||e.session.checkpoint()?t:a.inputs:JT(e,n,o,a.fallbackInputs.length>0?a.fallbackInputs:t)})}c(eR,"selectStrategicSearchInputsWithDeadline");function JT(e,n,o,t){if(e.session.checkpoint())return t;let r=oo(e,n,o);return r.length===0||e.session.checkpoint()?t:r}c(JT,"selectCanonicalStrategicInputs");function Vv(e,n){let o=ho(n,"fast"),t=e.session.withCooperativeSubdeadline(Bv,()=>[...Fl(e,n,o,!0)]);return t===void 0&&WT(e),t}c(Vv,"selectFastPreferenceBankInputs");function Hv(e,n,o){let t=o.length>0?o:Gs(n);if(e.session.checkpoint())return t;let r=Vv(e,n);if(r!==void 0&&r.length>0){if(e.session.checkpoint())return t;t=r}if(e.session.checkpointWithReserve(Lv))return t;let a=ho(n,"pro"),i=Mt(a),s=ZT(e,n,a,i);return s.length===0||e.session.checkpoint()?t:s}c(Hv,"selectCanonicalProductionInputs");function nR(e,n){return e.session.withDeadlineIfAbsent(Gv,()=>{let o=Nh(e,n);return o.kind==="supported"?o.inputs:Hv(e,n,o.fallbackInputs)})}c(nR,"selectProductionInputsWithDeadline");function oR(e,n,o){let t=n.fen(),r=o==="pro"?nR(e,n):eR(e,n,ho(n,o)),a=r.length===0?Gs(n):r,i=nn(n,a),s=a;if(i===void 0&&(s=Gs(n),i=nn(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:br(s)}}c(oR,"suggestMove");function Uv(e){switch(e.kind){case"mon-move":return`mm ${Ui(e.item)} ${Le(e.from)} ${Le(e.to)}`;case"mana-move":return`mma ${ga(e.mana)} ${Le(e.from)} ${Le(e.to)}`;case"mana-scored":return`ms ${ga(e.mana)} ${Le(e.at)}`;case"mystic-action":return`ma ${Xo(e.mystic)} ${Le(e.from)} ${Le(e.to)}`;case"demon-action":return`da ${Xo(e.demon)} ${Le(e.from)} ${Le(e.to)}`;case"demon-additional-step":return`das ${Xo(e.demon)} ${Le(e.from)} ${Le(e.to)}`;case"spirit-target-move":return`stm ${Ui(e.item)} ${Le(e.from)} ${Le(e.to)} ${Le(e.by)}`;case"pickup-bomb":return`pb ${Xo(e.by)} ${Le(e.at)}`;case"pickup-potion":return`pp ${Ui(e.by)} ${Le(e.at)}`;case"use-potion":return`up ${Le(e.from)} ${Le(e.to)}`;case"pickup-mana":return`pm ${ga(e.mana)} ${Xo(e.by)} ${Le(e.at)}`;case"mon-fainted":return`mf ${Xo(e.mon)} ${Le(e.from)} ${Le(e.to)}`;case"mana-dropped":return`md ${ga(e.mana)} ${Le(e.at)}`;case"supermana-back-to-base":return`sb ${Le(e.from)} ${Le(e.to)}`;case"bomb-attack":return`ba ${Xo(e.by)} ${Le(e.from)} ${Le(e.to)}`;case"mon-awake":return`maw ${Xo(e.mon)} ${Le(e.at)}`;case"bomb-explosion":return`be ${Le(e.at)}`;case"next-turn":return`nt ${gu(e.color)}`;case"game-over":return`go ${gu(e.winner)}`;case"takeback":return"z"}}c(Uv,"eventFen");function tR(e){return e.map(Uv).join(" ")}c(tR,"eventArrayFen");function Ll(e){let n={i:e.row,j:e.column};if(!Number.isInteger(e.row)||!Number.isInteger(e.column)||!ut(n))throw new RangeError(`position must contain integer row and column values from 0 through ${10}`);return n}c(Ll,"toEnginePosition");function mn(e){return{row:e.i,column:e.j}}c(mn,"fromEnginePosition");function Ht(e){return{kind:e.kind,color:e.color,cooldown:e.cooldown}}c(Ht,"fromEngineMon");function Rc(e){return e.kind==="supermana"?{kind:"supermana"}:{kind:"regular",color:e.color}}c(Rc,"fromEngineMana");function Vs(e){switch(e.kind){case"mon":return{kind:"mon",mon:Ht(e.mon)};case"mana":return{kind:"mana",mana:Rc(e.mana)};case"mon-with-mana":return{kind:"mon",mon:Ht(e.mon),carrying:{kind:"mana",mana:Rc(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}}}c(Vs,"fromEngineItem");function rR(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(rR,"fromEngineSquare");function gy(e){switch(e.kind){case"takeback":return{kind:"takeback"};case"position":return{kind:"location",location:Ll(e.position)};case"modifier":return{kind:"modifier",modifier:e.modifier}}}c(gy,"toEngineInput");function vy(e){switch(e.kind){case"takeback":return{kind:"takeback"};case"location":return{kind:"position",position:mn(e.location)};case"modifier":return{kind:"modifier",modifier:e.modifier}}}c(vy,"fromEngineInput");function jv(e){let n=vy(e.input),o=e.actorMonItem===void 0?{}:{actor:Vs(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(jv,"fromEngineInputOption");function Gl(e){switch(e.kind){case"mon-move":return{kind:e.kind,item:Vs(e.item),from:mn(e.from),to:mn(e.to)};case"mana-move":return{kind:e.kind,mana:Rc(e.mana),from:mn(e.from),to:mn(e.to)};case"mana-scored":case"mana-dropped":return{kind:e.kind,mana:Rc(e.mana),at:mn(e.at)};case"mystic-action":return{kind:e.kind,mystic:Ht(e.mystic),from:mn(e.from),to:mn(e.to)};case"demon-action":case"demon-additional-step":return{kind:e.kind,demon:Ht(e.demon),from:mn(e.from),to:mn(e.to)};case"spirit-target-move":return{kind:e.kind,item:Vs(e.item),from:mn(e.from),to:mn(e.to),by:mn(e.by)};case"pickup-bomb":return{kind:e.kind,by:Ht(e.by),at:mn(e.at)};case"pickup-potion":return{kind:e.kind,by:Vs(e.by),at:mn(e.at)};case"use-potion":case"supermana-back-to-base":return{kind:e.kind,from:mn(e.from),to:mn(e.to)};case"pickup-mana":return{kind:e.kind,mana:Rc(e.mana),by:Ht(e.by),at:mn(e.at)};case"mon-fainted":return{kind:e.kind,mon:Ht(e.mon),from:mn(e.from),to:mn(e.to)};case"bomb-attack":return{kind:e.kind,by:Ht(e.by),from:mn(e.from),to:mn(e.to)};case"mon-awake":return{kind:e.kind,mon:Ht(e.mon),at:mn(e.at)};case"bomb-explosion":return{kind:e.kind,at:mn(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(Gl,"fromEngineEvent");function Ey(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(mn)};case"next-input-options":return{kind:"awaiting-input",inputFen:n,options:e.nextInputs.map(jv)};case"events":return{kind:"complete",inputFen:n,events:e.events.map(Gl)}}}c(Ey,"fromEngineOutput");function aR(e){return{monMoves:e.get(wo.MonMove)??0,manaMoves:e.get(wo.ManaMove)??0,actions:e.get(wo.Action)??0,potions:e.get(wo.Potion)??0}}c(aR,"availableMoveCountsFromEngine");function Kv(e){if(e!=="")return la(e)}c(Kv,"parseReplayMove");function Vl(e,n,o,t){let r=0,a=0;for(;r<n.length||a<o.length;){let i=e.activeColor===P.White,p=(i?n:o)[i?r:a];if(p===void 0)return{status:"missing-move",whiteMovesProcessed:r,blackMovesProcessed:a};let l=Kv(p);if(l===void 0)return{status:"invalid-move",whiteMovesProcessed:r,blackMovesProcessed:a};let m=e.processInput(l,!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(Vl,"replayInterleavedMoves");var Ne,Hl,Pc,Iy,si,sR,xy,ii=class ii{constructor(n={}){L(this,si);L(this,Ne);L(this,Hl,new Ec);let{variant:o=he.Classic}=n;if(!zv(o))throw new TypeError(`unsupported game variant: ${String(o)}`);F(this,Ne,new Oo(!0,o))}static fromFen(n){var t;let o=Oo.fromFen(n,!0);if(o?.fen()===n)return U(t=ii,Pc,Iy).call(t,o)}get variant(){return T(this,Ne).variant()}get activeColor(){return T(this,Ne).activeColor}get turnNumber(){return T(this,Ne).turnNumber}get scores(){return{[P.White]:T(this,Ne).whiteScore,[P.Black]:T(this,Ne).blackScore}}get potions(){return{[P.White]:T(this,Ne).whitePotionsCount,[P.Black]:T(this,Ne).blackPotionsCount}}get winner(){return T(this,Ne).winnerColor()}get historyVerified(){return T(this,Ne).isMovesVerified}get takebackFens(){return[...T(this,Ne).takebackFens]}get trackingEntries(){return T(this,Ne).verboseTrackingEntities.map(n=>({fen:n.fen,color:n.color,events:n.events.map(Gl),eventsFen:tR(n.events)}))}toFen(){return T(this,Ne).fen()}preview(n){let o=n.map(gy);return U(this,si,sR).call(this,o,br(o))}play(n){let o=n.map(gy);return U(this,si,xy).call(this,o,br(o))}playFen(n){let o=la(n);return o===void 0?{kind:"invalid",inputFen:n}:U(this,si,xy).call(this,o,br(o))}itemAt(n){let o=T(this,Ne).board.get(Ll(n));return o===void 0?void 0:Vs(o)}squareAt(n){return rR(T(this,Ne).board.squareAt(Ll(n)))}contentPositions(){let n=new Map;for(let[o]of T(this,Ne).board.entries())n.set(iR(o.i,o.j),{row:o.i,column:o.j});for(let o of T(this,Ne).board.allMonsBases())n.set(iR(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(!qv(n))throw new TypeError(`unsupported color: ${String(n)}`);return T(this,Ne).canTakeback(n)}takeback(){return this.play([{kind:"takeback"}])}previousTurn(n){var u;let o=T(this,Ne).verboseTrackingEntities;if(o.length<=1)return;let t=o.slice(0,-1),r=t[t.length-1],a=Oo.fromFen(r?.fen??T(this,Ne).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(p=>{let l=Oo.fromFen(p,!1);return l?.fen()!==p||l.variant()!==a.variant()}))return a.replaceHistory({takebackFens:s,trackingEntries:t,verboseTrackingEnabled:!0,movesVerified:T(this,Ne).isMovesVerified}),U(u=ii,Pc,Iy).call(u,a)}verifyHistory(n){let o=new Oo(!0,T(this,Ne).variant());return Vl(o,n.white,n.black).status!=="complete"||o.fen()!==T(this,Ne).fen()?!1:(T(this,Ne).replaceHistory({takebackFens:o.takebackFens,trackingEntries:o.verboseTrackingEntities,movesVerified:!0}),!0)}isLaterThan(n){return T(this,Ne).isLaterThan(T(n,Ne))}availableMoveCounts(){return aR(T(this,Ne).availableMoveKinds())}suggestMove(n){if(!$v(n))throw new TypeError(`unsupported automove preference: ${String(n)}`);let o=T(this,Hl).run(r=>oR(r,T(this,Ne),n));if(o.output.kind!=="events")return;let t=la(o.inputFen);if(t!==void 0)return{inputs:t.map(vy),inputFen:o.inputFen,events:o.output.events.map(Gl)}}};Ne=new WeakMap,Hl=new WeakMap,Pc=new WeakSet,Iy=c(function(n){let o=new ii({variant:n.variant()});return F(o,Ne,n),o},"#fromEngine"),si=new WeakSet,sR=c(function(n,o){let t=n.length===1&&n[0]?.kind==="takeback"?T(this,Ne).copy():T(this,Ne).fork();return Ey(t.processInput(n,!1,!1),o)},"#previewEngineInputs"),xy=c(function(n,o){let t=Ey(T(this,Ne).processInput(n,!1,!1),o);return t.kind==="complete"?t:{kind:"invalid",inputFen:o}},"#playEngineInputs"),L(ii,Pc),c(ii,"Game");var Oy=ii;function qv(e){return e===P.White||e===P.Black}c(qv,"isColor");function zv(e){return Object.values(he).includes(e)}c(zv,"isGameVariant");function $v(e){return e==="fast"||e==="normal"||e==="pro"}c($v,"isAutomovePreference");function iR(e,n){return`${e},${n}`}c(iR,"positionKey");function Yv(e){let n=uR(e.white.fen),o=uR(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?P.Black:P.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 Oo(!1,n.variant()),i;return Vl(a,e.white.moves,e.black.moves,(s,{whiteMovesProcessed:u,blackMovesProcessed:p})=>{let l=s.winnerColor();if(l===void 0)return!0;let m=l===P.White?u===e.white.moves.length:p===e.black.moves.length,d=l===P.White?t:r;return i=m&&d===s.fen()?{kind:"winner",winner:l}:{kind:"invalid"},!1}),i??{kind:"invalid"}}c(Yv,"resolveMatch");function uR(e){let n=Oo.fromFen(e,!1);return n?.fen()===e?n:void 0}c(uR,"submittedGame");export{P as Color,q as Consumable,Oy as Game,he as GameVariant,en as Modifier,A as MonKind,Yv as resolveMatch};
|
|
1
|
+
var dk=Object.defineProperty;var c=(e,n)=>dk(e,"name",{value:n,configurable:!0});function mk(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(mk,"assertBoundedCache");var Ia=class{constructor(n){this.lifetime=n}lifetime;static{c(this,"AutomoveCacheScope")}#e=new Set;#o=new Map;get cacheCount(){return this.#e.size}get entryCount(){let n=0;for(let o of this.#e)n+=o.size;return n}own(n){return mk(n),this.#e.add(n),n}getOrCreate(n,o){let t=this.#o.get(n);if(t!==void 0)return t;let r=this.own(o());return this.#o.set(n,r),r}clear(){for(let n of this.#e)n.clear()}};var Vm=650;function fk(){return globalThis.performance.now()}c(fk,"systemMonotonicClock");function kp(e,n){if(!Number.isFinite(e)||e<0)throw new RangeError(`${n} must be a finite nonnegative number`);return e}c(kp,"validateDuration");var su=class{static{c(this,"SearchSession")}#e;#o=new Ia("session");#n;#t=!1;constructor(n={}){this.#e=n.clock??fk}get caches(){return this.#o}now(){let n=this.#e();if(!Number.isFinite(n))throw new RangeError("monotonic clock must return a finite number");return n}withDeadlineIfAbsent(n,o){return this.#r(n,!0,o)}withUnrecordedDeadlineIfAbsent(n,o){return this.#r(n,!1,o)}withCooperativeSubdeadline(n,o){let t=kp(n,"subdeadline budget"),r=this.#n;return r===void 0?this.#s(t,o):this.#d(r,t,o)}checkpoint(){let n=this.#n;return n===void 0?!1:n.timedOut?!0:this.now()>=n.endMs?(n.timedOut=!0,!0):!1}checkpointWithReserve(n){let o=kp(n,"checkpoint reserve"),t=this.#n;return t===void 0?!1:t.timedOut?!0:this.now()+o>=t.endMs?(t.timedOut=!0,!0):!1}get cancelled(){return this.#n?.timedOut??!1}get cacheWriteAllowed(){return!this.checkpoint()}takePreviousTimeout(){if(this.#n!==void 0)return!1;let n=this.#t;return this.#t=!1,n}#r(n,o,t){this.#a(kp(n,"deadline budget"),o);try{return t()}finally{this.#u()}}#a(n,o){if(this.#n===void 0){this.#n={endMs:this.now()+n,timedOut:!1,nesting:1,recordTimeout:o};return}this.#n.recordTimeout||=o,this.#n.nesting=Math.min(Number.MAX_SAFE_INTEGER,this.#n.nesting+1)}#u(){let n=this.#n;n!==void 0&&(n.nesting<=1?(this.#t||=n.timedOut&&n.recordTimeout,this.#n=void 0):n.nesting-=1)}#s(n,o){let t;return this.withDeadlineIfAbsent(n,()=>{if(this.checkpoint())return;let r=o();this.checkpoint()||(t=r)}),t}#c(n){let o=this.now(),t=this.#n,r=t===void 0||t.timedOut||o>=t.endMs;return n.recordTimeout||=t?.recordTimeout??!1,o>=n.endMs&&(n.timedOut=!0),this.#n=n,r}#d(n,o,t){if(this.checkpoint())return;let r={...n};if(n.endMs=Math.min(n.endMs,this.now()+o),this.checkpoint()){this.#c(r);return}let a=!1;try{let i=t(),s=this.#c(r);return a=!0,s?void 0:i}finally{a||this.#c(r)}}};function Hm(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(Hm,"createAutomoveExecutionContext");var yk=Object.freeze({nextUint32(){let e=new Uint32Array(1);return globalThis.crypto.getRandomValues(e),e[0]??0}}),uu=class{static{c(this,"AutomoveEngine")}#e;#o;#n=new Ia("engine");#t=!1;constructor(n={}){this.#e=n.clock,this.#o=n.randomSource??yk}run(n){this.#t&&(this.#n.clear(),this.#t=!1);let o=new su(this.#e===void 0?{}:{clock:this.#e}),t=Hm(o,this.#n,this.#o);try{return n(t)}finally{this.#t=o.takePreviousTimeout(),t.caches.session.clear()}}clearCaches(){this.#t=!1,this.#n.clear()}};var R=Object.freeze({White:"white",Black:"black"}),Me=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"}),w=Object.freeze({Demon:"demon",Drainer:"drainer",Angel:"angel",Spirit:"spirit",Mystic:"mystic"}),K=Object.freeze({Potion:"potion",Bomb:"bomb",BombOrPotion:"bomb-or-potion"}),Ye=Object.freeze({SelectPotion:"select-potion",SelectBomb:"select-bomb"});var Pp=Object.freeze({[R.White]:0,[R.Black]:1});function rn(e){return Pp[e]}c(rn,"colorId");var Xo=Object.freeze({[w.Demon]:0,[w.Drainer]:1,[w.Angel]:2,[w.Spirit]:3,[w.Mystic]:4}),bo=Object.freeze({MonMove:"mon-move",ManaMove:"mana-move",Action:"action",Potion:"potion"}),wp=Object.freeze({[Ye.SelectPotion]:0,[Ye.SelectBomb]:1}),ge=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"}),At=4,Qt=Object.freeze({kind:"supermana"});function B(e){return e===R.Black?R.White:R.Black}c(B,"otherColor");function jr(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(jr,"createMon");function Tp(e,n){return e.kind===n.kind&&e.color===n.color&&e.cooldown===n.cooldown}c(Tp,"monEquals");function H(e){return e.cooldown>0}c(H,"isMonFainted");function jm(e){return jr(e.kind,e.color,2)}c(jm,"faintMon");function Km(e){return e.cooldown>0?jr(e.kind,e.color,e.cooldown-1):xo(e)}c(Km,"decreaseMonCooldown");function Na(e){return Object.freeze({kind:"regular",color:e})}c(Na,"regularMana");function ze(e,n){return e.kind==="supermana"?n.kind==="supermana":n.kind==="regular"&&e.color===n.color}c(ze,"manaEquals");function Ap(e,n){return e||!n?2:1}c(Ap,"manaScoreForOwnership");function Fe(e,n){return Ap(e.kind==="supermana",e.kind==="regular"&&e.color===n)}c(Fe,"manaScore");function Kn(e){return Object.freeze({kind:"mon",mon:xo(e)})}c(Kn,"monItem");function it(e){return Object.freeze({kind:"mana",mana:xa(e)})}c(it,"manaItem");function Qo(e,n){return Object.freeze({kind:"mon-with-mana",mon:xo(e),mana:xa(n)})}c(Qo,"monWithManaItem");function Gi(e,n){return Object.freeze({kind:"mon-with-consumable",mon:xo(e),consumable:n})}c(Gi,"monWithConsumableItem");function Vi(e){return Object.freeze({kind:"consumable",consumable:e})}c(Vi,"consumableItem");function xo(e){return Object.isFrozen(e)?e:jr(e.kind,e.color,e.cooldown)}c(xo,"immutableMon");function xa(e){return e.kind==="supermana"?Qt:Object.isFrozen(e)?e:Na(e.color)}c(xa,"immutableMana");function Ur(e){switch(e.kind){case"mon":return Object.isFrozen(e)&&Object.isFrozen(e.mon)?e:Kn(e.mon);case"mana":return Object.isFrozen(e)&&Object.isFrozen(e.mana)?e:it(e.mana);case"mon-with-mana":return Object.isFrozen(e)&&Object.isFrozen(e.mon)&&Object.isFrozen(e.mana)?e:Qo(e.mon,e.mana);case"mon-with-consumable":return Object.isFrozen(e)&&Object.isFrozen(e.mon)?e:Gi(e.mon,e.consumable);case"consumable":return Object.isFrozen(e)?e:Vi(e.consumable)}}c(Ur,"immutableItem");function Ve(e){return{i:e.i,j:e.j}}c(Ve,"copyLocation");function Sk(e){switch(e.kind){case"takeback":return{kind:"takeback"};case"location":return{kind:"location",location:Ve(e.location)};case"modifier":return{kind:"modifier",modifier:e.modifier}}}c(Sk,"copyInput");function Da(e){let n=Sk(e.input);return e.actorMonItem===void 0?{input:n,kind:e.kind}:{input:n,kind:e.kind,actorMonItem:Ur(e.actorMonItem)}}c(Da,"copyNextInput");function Kr(e){switch(e.kind){case"mon-move":return{kind:"mon-move",item:Ur(e.item),from:Ve(e.from),to:Ve(e.to)};case"mana-move":return{kind:"mana-move",mana:xa(e.mana),from:Ve(e.from),to:Ve(e.to)};case"mana-scored":return{kind:"mana-scored",mana:xa(e.mana),at:Ve(e.at)};case"mystic-action":return{kind:"mystic-action",mystic:xo(e.mystic),from:Ve(e.from),to:Ve(e.to)};case"demon-action":return{kind:"demon-action",demon:xo(e.demon),from:Ve(e.from),to:Ve(e.to)};case"demon-additional-step":return{kind:"demon-additional-step",demon:xo(e.demon),from:Ve(e.from),to:Ve(e.to)};case"spirit-target-move":return{kind:"spirit-target-move",item:Ur(e.item),from:Ve(e.from),to:Ve(e.to),by:Ve(e.by)};case"pickup-bomb":return{kind:"pickup-bomb",by:xo(e.by),at:Ve(e.at)};case"pickup-potion":return{kind:"pickup-potion",by:Ur(e.by),at:Ve(e.at)};case"use-potion":return{kind:"use-potion",from:Ve(e.from),to:Ve(e.to)};case"pickup-mana":return{kind:"pickup-mana",mana:xa(e.mana),by:xo(e.by),at:Ve(e.at)};case"mon-fainted":return{kind:"mon-fainted",mon:xo(e.mon),from:Ve(e.from),to:Ve(e.to)};case"mana-dropped":return{kind:"mana-dropped",mana:xa(e.mana),at:Ve(e.at)};case"supermana-back-to-base":return{kind:"supermana-back-to-base",from:Ve(e.from),to:Ve(e.to)};case"bomb-attack":return{kind:"bomb-attack",by:xo(e.by),from:Ve(e.from),to:Ve(e.to)};case"mon-awake":return{kind:"mon-awake",mon:xo(e.mon),at:Ve(e.at)};case"bomb-explosion":return{kind:"bomb-explosion",at:Ve(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(Kr,"copyEvent");function Ep(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(Ve)};case"next-input-options":return{kind:"next-input-options",nextInputs:e.nextInputs.map(Da)};case"events":return{kind:"events",events:e.events.map(Kr)}}}c(Ep,"copyOutput");function G(e){switch(e.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return e.mon;case"mana":case"consumable":return}}c(G,"itemMon");function st(e){let n=G(e);return n===void 0||!H(n)}c(st,"isSpiritTargetAllowed");function qn(e){switch(e.kind){case"mana":case"mon-with-mana":return e.mana;case"mon":case"mon-with-consumable":case"consumable":return}}c(qn,"itemMana");function qr(e){switch(e.kind){case"mon-with-consumable":case"consumable":return e.consumable;case"mon":case"mana":case"mon-with-mana":return}}c(qr,"itemConsumable");function qm(e,n){switch(e.kind){case"mon":return n.kind==="mon"&&Tp(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"&&Tp(e.mon,n.mon)&&ze(e.mana,n.mana);case"mon-with-consumable":return n.kind==="mon-with-consumable"&&Tp(e.mon,n.mon)&&e.consumable===n.consumable;case"consumable":return n.kind==="consumable"&&e.consumable===n.consumable}}c(qm,"itemEquals");function Rp(e){return`${e.kind}:${e.color}:${e.cooldown}`}c(Rp,"monKey");function Um(e){return e.kind==="supermana"?"s":`r:${e.color}`}c(Um,"manaKey");function cu(e){switch(e.kind){case"mon":return`m:${Rp(e.mon)}`;case"mana":return`a:${Um(e.mana)}`;case"mon-with-mana":return`mm:${Rp(e.mon)}:${Um(e.mana)}`;case"mon-with-consumable":return`mc:${Rp(e.mon)}:${e.consumable}`;case"consumable":return`c:${e.consumable}`}}c(cu,"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 pn(e){return e.map(gp).join(";")}c(pn,"inputChainKey");function Et(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(Et,"inputEquals");function Pe(e,n){let o=e[0],t=n[0];return o!==void 0&&t!==void 0&&Et(o,t)}c(Pe,"inputChainsShareFirstInput");function le(e,n){return e.length===n.length&&e.every((o,t)=>{let r=n[t];return r!==void 0&&Et(o,r)})}c(le,"inputChainsEqual");var pu=Math.trunc(5.5),gt=10;function ln(e,n){return{i:e,j:n}}c(ln,"location");function _e(e,n){return e.i===n.i&&e.j===n.j}c(_e,"locationEquals");function Zo(e){return Number.isInteger(e.i)&&Number.isInteger(e.j)&&e.i>=0&&e.i<11&&e.j>=0&&e.j<11}c(Zo,"isValidLocation");function zr(e){if(!Zo(e))throw new RangeError(`board location must use integer coordinates from 0 to ${gt}`)}c(zr,"assertValidLocation");function Q(e){return zr(e),e.i*11+e.j}c(Q,"locationIndex");function _a(e){if(!Number.isInteger(e)||e<0||e>=121)throw new RangeError("board location index must be an integer from 0 to 120");return ln(Math.trunc(e/11),e%11)}c(_a,"fromLocationIndex");function Zt(e,n){return ln(Math.trunc((e.i+n.i)/2),Math.trunc((e.j+n.j)/2))}c(Zt,"locationBetween");function ne(e,n){return Math.max(Math.abs(n.i-e.i),Math.abs(n.j-e.j))}c(ne,"locationDistance");function zm(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=ln(t,r);Zo(a)&&!_e(a,e)&&o.push(a)}return o}c(zm,"nearbyLocationsFor");function $m(e,n){let o=[];for(let[t,r]of n){let a=ln(e.i+t,e.j+r);Zo(a)&&o.push(a)}return o}c($m,"directionalReachabilityFor");function hk(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=ln(e.i+o,e.j+t);Zo(r)&&n.push(r)}return n}c(hk,"spiritReachabilityFor");function Hi(e){return Object.freeze(Array.from({length:121},(n,o)=>Object.freeze(e(_a(o)).map(t=>Object.freeze(t)))))}c(Hi,"buildCache");var bk=Hi(e=>zm(e,1)),Ck=Hi(e=>zm(e,3)),Mk=Hi(e=>$m(e,[[-2,-2],[2,2],[-2,2],[2,-2]])),kk=Hi(e=>$m(e,[[-2,0],[2,0],[0,2],[0,-2]])),Tk=Hi(hk);function Ui(e,n){return Zo(n)?e[Q(n)]??[]:[]}c(Ui,"cachedLocations");function me(e){return Ui(bk,e)}c(me,"nearbyLocations");function Jt(e){return Ui(Ck,e)}c(Jt,"bombReachableLocations");function No(e){return Ui(Mk,e)}c(No,"mysticReachableLocations");function Do(e){return Ui(kk,e)}c(Do,"demonReachableLocations");function _o(e){return Ui(Tk,e)}c(_o,"spiritReachableLocations");var vp=Object.freeze(Array.from({length:121},(e,n)=>Object.freeze(_a(n))));function Ym(e){if(!/^(?:0|[1-9]\d*)$/u.test(e))return;let n=Number(e);return Number.isSafeInteger(n)?n:void 0}c(Ym,"parseNonnegativeInteger");function Xm(e){for(let n=0;n<e.length;n+=1)if(e.charCodeAt(n)>127)return!1;return!0}c(Xm,"isAscii");function Ge(e){return`${e.i},${e.j}`}c(Ge,"locationFen");function Qm(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=Ym(o),a=Ym(t);if(r===void 0||a===void 0)return;let i={i:r,j:a};return Zo(i)?i:void 0}c(Qm,"parseLocationFen");function Rk(e){switch(e){case Ye.SelectPotion:return"p";case Ye.SelectBomb:return"b"}}c(Rk,"modifierFen");function Pk(e){switch(e){case"p":return Ye.SelectPotion;case"b":return Ye.SelectBomb;default:return}}c(Pk,"parseModifierFen");function wk(e){switch(e.kind){case"takeback":return"z";case"location":return`l${Ge(e.location)}`;case"modifier":return`m${Rk(e.modifier)}`}}c(wk,"inputFen");function Ak(e){switch(e[0]){case"l":{let n=Qm(e.slice(1));return n===void 0?void 0:{kind:"location",location:n}}case"m":{let n=Pk(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(Ak,"parseInputFen");function er(e){return e.map(wk).join(";")}c(er,"inputArrayFen");function $r(e){if(!Xm(e))return;if(e==="")return[];let n=[];for(let o of e.split(";")){if(n.length===At)return;let t=Ak(o);if(t===void 0)return;n.push(t)}return n}c($r,"parseInputArrayFen");function nr(e,n){return Xe(e,n)?.game}c(nr,"applyInputsForSearch");function Xe(e,n){let o=e.fork(),t=o.processInput(n,!1,!1);return t.kind==="events"?{game:o,events:t.events}:void 0}c(Xe,"applyInputsForSearchWithEvents");var Fa=new RangeError("fast workspace allocation failed");function Wa(e){return e===Fa}c(Wa,"isFastWorkspaceAllocationFailure");function Jo(e){throw e instanceof RangeError?Fa:e}c(Jo,"rethrowFastWorkspaceAllocation");var vt=Me.Classic,be=5,oe=5,or=1,Vn=1,Yr=Object.freeze([Me.Classic,Me.SwappedManaRows,Me.OffsetArcManaRows,Me.CenterSpokeManaRows,Me.AlternatingManaRows,Me.InnerWedgeManaRows,Me.OuterWedgeManaRows,Me.BentCenterManaRows,Me.OuterEdgeManaRows,Me.SplitFlankManaRows,Me.ForwardBridgeManaRows,Me.CornerChainManaRows]),ef=Object.freeze({[Me.Classic]:0,[Me.SwappedManaRows]:1,[Me.OffsetArcManaRows]:2,[Me.CenterSpokeManaRows]:3,[Me.AlternatingManaRows]:4,[Me.InnerWedgeManaRows]:5,[Me.OuterWedgeManaRows]:6,[Me.BentCenterManaRows]:7,[Me.OuterEdgeManaRows]:8,[Me.SplitFlankManaRows]:9,[Me.ForwardBridgeManaRows]:10,[Me.CornerChainManaRows]:11}),Ek=new Map(Yr.map(e=>[ef[e],e]));function ji(e){return ef[e]}c(ji,"gameVariantId");function an(...e){return Object.freeze(e.map(([n,o])=>Object.freeze(ln(n,o))))}c(an,"locations");function Fo(e,n){return Object.freeze({[R.Black]:e,[R.White]:n})}c(Fo,"manaLayout");var gk=Object.freeze({[Me.Classic]:Fo(an([3,4],[3,6],[4,3],[4,5],[4,7]),an([7,4],[7,6],[6,3],[6,5],[6,7])),[Me.SwappedManaRows]:Fo(an([3,3],[3,5],[3,7],[4,4],[4,6]),an([7,3],[7,5],[7,7],[6,4],[6,6])),[Me.OffsetArcManaRows]:Fo(an([3,4],[3,6],[4,2],[4,5],[4,8]),an([6,2],[6,5],[6,8],[7,4],[7,6])),[Me.CenterSpokeManaRows]:Fo(an([3,5],[4,2],[4,4],[4,6],[4,8]),an([6,2],[6,4],[6,6],[6,8],[7,5])),[Me.AlternatingManaRows]:Fo(an([4,1],[4,3],[4,5],[4,7],[4,9]),an([6,1],[6,3],[6,5],[6,7],[6,9])),[Me.InnerWedgeManaRows]:Fo(an([3,4],[3,6],[4,4],[4,5],[4,6]),an([6,4],[6,5],[6,6],[7,4],[7,6])),[Me.OuterWedgeManaRows]:Fo(an([3,4],[3,5],[3,6],[4,3],[4,7]),an([6,3],[6,7],[7,4],[7,5],[7,6])),[Me.BentCenterManaRows]:Fo(an([3,5],[4,4],[4,5],[4,6],[5,3]),an([5,7],[6,4],[6,5],[6,6],[7,5])),[Me.OuterEdgeManaRows]:Fo(an([4,0],[4,1],[4,9],[4,10],[5,1]),an([5,9],[6,0],[6,1],[6,9],[6,10])),[Me.SplitFlankManaRows]:Fo(an([3,4],[3,6],[4,2],[4,3],[5,2]),an([5,8],[6,7],[6,8],[7,4],[7,6])),[Me.ForwardBridgeManaRows]:Fo(an([3,4],[3,6],[4,3],[4,5],[5,4]),an([5,6],[6,5],[6,7],[7,4],[7,6])),[Me.CornerChainManaRows]:Fo(an([3,5],[3,6],[4,6],[4,7],[5,7]),an([5,3],[6,3],[6,4],[7,4],[7,5]))}),nf=Object.freeze({kind:"regular"}),Zm=Object.freeze({kind:"consumable-base"}),vk=Object.freeze({kind:"supermana-base"}),Ki=Object.freeze(ln(5,5)),Xr=an([0,3],[0,4],[0,5],[0,6],[0,7],[10,3],[10,4],[10,5],[10,6],[10,7]);function of(e){return Number.isSafeInteger(e)?Ek.get(e):void 0}c(of,"gameVariantFromId");function Jm(e,n){return gk[e][n]}c(Jm,"manaBaseLocations");function Ok(e){let n=Array.from({length:121}).fill(nf),o=c((t,r)=>{n[Q(t)]=Object.freeze(r)},"put");o(ln(0,0),{kind:"mana-pool",color:R.Black}),o(ln(0,10),{kind:"mana-pool",color:R.Black}),o(ln(10,0),{kind:"mana-pool",color:R.White}),o(ln(10,10),{kind:"mana-pool",color:R.White}),o(ln(0,3),{kind:"mon-base",monKind:w.Mystic,color:R.Black}),o(ln(0,4),{kind:"mon-base",monKind:w.Spirit,color:R.Black}),o(ln(0,5),{kind:"mon-base",monKind:w.Drainer,color:R.Black}),o(ln(0,6),{kind:"mon-base",monKind:w.Angel,color:R.Black}),o(ln(0,7),{kind:"mon-base",monKind:w.Demon,color:R.Black}),o(ln(10,3),{kind:"mon-base",monKind:w.Demon,color:R.White}),o(ln(10,4),{kind:"mon-base",monKind:w.Angel,color:R.White}),o(ln(10,5),{kind:"mon-base",monKind:w.Drainer,color:R.White}),o(ln(10,6),{kind:"mon-base",monKind:w.Spirit,color:R.White}),o(ln(10,7),{kind:"mon-base",monKind:w.Mystic,color:R.White});for(let t of Jm(e,R.Black))o(t,{kind:"mana-base",color:R.Black});for(let t of Jm(e,R.White))o(t,{kind:"mana-base",color:R.White});return o(ln(5,0),Zm),o(ln(5,10),Zm),o(Ki,vk),Object.freeze(n)}c(Ok,"buildSquares");var Ik=new Map(Yr.map(e=>[e,Ok(e)]));function lu(e){let n=Ik.get(e);if(n===void 0)throw new TypeError(`unsupported game variant: ${e}`);return n}c(lu,"squaresForVariant");function Op(e,n){return zr(e),lu(n)[Q(e)]??nf}c(Op,"squareAtForVariant");function xk(e){return Op(e,vt)}c(xk,"squareAt");function Nk(e){switch(e.kind){case"mon-base":return Kn(jr(e.monKind,e.color,0));case"mana-base":return it(Na(e.color));case"supermana-base":return it(Qt);case"consumable-base":return Vi(K.BombOrPotion);case"regular":case"mana-pool":return}}c(Nk,"initialItemForSquare");function Dk(e){return Object.freeze(lu(e).map(Nk))}c(Dk,"buildInitialItems");var _k=new Map(Yr.map(e=>[e,Dk(e)]));function tf(e){let n=_k.get(e);if(n===void 0)throw new TypeError(`unsupported game variant: ${e}`);return[...n]}c(tf,"initialItemsForVariant");function rf(e,n){for(let o of Xr){let t=xk(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(rf,"monBase");var oo=Object.keys(Pp).length,Ot=Object.keys(Xo).length,qi=oo*Ot,dn=1,_n=2,nn=3,zi=1,$i=2,Hn=3,po=1,sf=2,to=3,Yi=Xo[w.Demon],zn=Xo[w.Drainer],Xi=Xo[w.Angel],du=Xo[w.Spirit],mu=Xo[w.Mystic],Fk=0,Wk=1,ut=2,Bk=3,uf=5,En=7,Ba=Q(Ki);function He(e){return e&3}c(He,"cellOccupancy");function gn(e){return e>>2&7}c(gn,"cellMonKind");function Fn(e){return e>>5&1}c(Fn,"cellMonColor");function Rn(e){return e>>6&3}c(Rn,"cellCooldown");function Oe(e){return e>>8&3}c(Oe,"cellMana");function We(e){return e>>10&3}c(We,"cellConsumable");function La(e){let n=We(e);return n===0||n===po}c(La,"damagingAttackCanComplete");function Ga(e,n,o,t,r){return nn|e<<2|n<<5|o<<6|t<<8|r<<10}c(Ga,"makeMonCell");function tr(e){return dn|e<<8}c(tr,"makeManaCell");function cf(e){return _n|e<<10}c(cf,"makeConsumableCell");function Wo(e,n){return Ap(e===Hn,e-1===n)}c(Wo,"manaScoreValue");function vn(e,n){return e*oo+n}c(vn,"monId");function Va(e){return e!==ut&&e<En}c(Va,"squareIsRegularForMovement");function ct(e){return e>=uf&&e<En}c(ct,"squareIsPool");function fu(e){return Math.trunc((e-En)/oo)}c(fu,"squareMonBaseKind");function yu(e){return(e-En)%oo}c(yu,"squareMonBaseColor");function we(e,n){return e[n]??0}c(we,"u8");function fe(e,n){return e[n]??0}c(fe,"u16");function v(e,n){return e[n]??0}c(v,"i32");function $n(e,n){let o=e[n];if(o===void 0)throw new RangeError("automove search slot index out of range");return o}c($n,"at");function Su(e,n,o){return Ga(Xo[e.kind],rn(e.color),e.cooldown,n,o)}c(Su,"fastMonCellFromMon");function Lk(e){let n=new Uint8Array(121),o=lu(e);for(let t=0;t<121;t+=1){let r=o[t];if(r!==void 0)switch(r.kind){case"regular":n[t]=Fk;break;case"consumable-base":n[t]=Wk;break;case"supermana-base":n[t]=ut;break;case"mana-base":n[t]=Bk+rn(r.color);break;case"mana-pool":n[t]=uf+rn(r.color);break;case"mon-base":n[t]=En+vn(Xo[r.monKind],rn(r.color));break}}return n}c(Lk,"buildSquares");var Gk=new Map(Yr.map(e=>[e,Lk(e)]));function hu(e){let n=Gk.get(e);if(n===void 0)throw new TypeError(`unsupported game variant: ${e}`);try{return n.slice()}catch(o){Jo(o)}}c(hu,"fastSquaresForVariant");var Ip=(()=>{let e=new Int32Array(qi).fill(-1),n=hu($n(Yr,0));for(let o of Xr){let t=Q(o),r=we(n,t);r>=En&&(e[r-En]=t)}return e})();function Qi(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(_a(r)).map(Q).sort((i,s)=>i-s);n.push(...a),o[r]=a.length}return{list:new Int32Array(n),starts:t,counts:o}}c(Qi,"buildOffsetTable");var On=Qi(me),rr=Qi(No),ar=Qi(Do),bu=Qi(_o),Cu=Qi(Jt),Vk=(()=>{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 Yn(e,n){return we(Vk,e*121+n)}c(Yn,"chebyshev");function Hk(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(Hk,"midpointCompute");var Uk=(()=>{let e=new Uint8Array(14641);for(let n=0;n<121;n+=1)for(let o=0;o<121;o+=1)e[n*121+o]=Hk(n,o);return e})();function Mu(e,n){return we(Uk,e*121+n)}c(Mu,"midpoint");var af=(()=>{let e=[],n=hu($n(Yr,0));for(let o=0;o<121;o+=1)ct(we(n,o))&&e.push(o);return new Int32Array(e)})(),pf=(()=>{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})(),lf=(()=>{let e=new Uint8Array(121);for(let n=0;n<121;n+=1)e[n]=Math.abs(pu-Math.trunc(n/11));return e})(),pt=(()=>{let e=new Uint8Array(121);for(let n=0;n<121;n+=1){let o=99;for(let t=0;t<af.length;t+=1){let r=Yn(n,v(af,t));r<o&&(o=r)}e[n]=o}return e})();function jk(e){let n=e>>>0;return()=>(n^=n<<13,n>>>=0,n^=n>>>17,n^=n<<5,n>>>=0,n|0)}c(jk,"xorshift");function ir(e,n){let o=new Int32Array(n);for(let t=0;t<n;t+=1)o[t]=e();return o}c(ir,"randomTable");var sr=jk(49734321),df=3,ku=1+qi*df,Kk=ir(sr,121*ku),qk=ir(sr,121*ku),zk=ir(sr,484),$k=ir(sr,484),Yk=ir(sr,484),Xk=ir(sr,484),mf=2048,Tu=ir(sr,mf),xp=ir(sr,mf);function ff(e){return He(e)!==nn?0:1+vn(gn(e),Fn(e))*df+Rn(e)}c(ff,"monSlot");function Ru(e,n){return n===0?0:v(Kk,e*ku+ff(n))^v(zk,e*4+Oe(n))^v(Yk,e*4+We(n))}c(Ru,"cellHashLo");function Pu(e,n){return n===0?0:v(qk,e*ku+ff(n))^v($k,e*4+Oe(n))^v(Xk,e*4+We(n))}c(Pu,"cellHashHi");function Np(e,n){return e>=be?R.White:n>=be?R.Black:void 0}c(Np,"winnerForScores");function wu(e){return Np(e.whiteScore,e.blackScore)}c(wu,"winnerForState");function Ue(e,n){return n===R.White?e.whiteScore:e.blackScore}c(Ue,"scoreForColor");function Ha(e){return e.turnNumber===1}c(Ha,"isFirstTurnState");function Au(e){return e.activeColor===R.White?e.whitePotionsCount:e.blackPotionsCount}c(Au,"currentPlayerPotions");function It(e){return e<oe}c(It,"canMoveMonForCounts");function yf(e){return It(e.monsMovesCount)}c(yf,"canPlayerMoveMon");function ur(e,n){return!e&&n<or}c(ur,"canMoveManaForCounts");function Sf(e){return ur(Ha(e),e.manaMovesCount)}c(Sf,"canPlayerMoveMana");function Eu(e,n,o){return!e&&(o>0||n<Vn)}c(Eu,"canUseActionForCounts");function hf(e){return Eu(Ha(e),e.actionsUsedCount,Au(e))}c(hf,"canPlayerUseAction");function Ua(e,n){if(n===void 0)return!0;let o=G(e);switch(n.kind){case"mon":return o!==void 0?!1:e.kind==="mana"?n.mon.kind===w.Drainer&&!H(n.mon):e.kind==="consumable"&&e.consumable===K.BombOrPotion;case"mana":return o?.kind===w.Drainer&&!H(o);case"mon-with-mana":case"mon-with-consumable":return e.kind==="consumable"&&e.consumable===K.BombOrPotion;case"consumable":return n.consumable===K.BombOrPotion&&o!==void 0}}c(Ua,"spiritDestinationItemAllowed");function Dp(e,n,o,t,r,a,i){if(!ur(e,o))return!1;let s=It(n);return!s&&!Eu(e,t,r)||!a||i&&!s&&t>=Vn&&r>0}c(Dp,"shouldSuggestRegularManaStartsFromScalars");function bf(e,n,o){return Dp(Ha(e),e.monsMovesCount,e.manaMovesCount,e.actionsUsedCount,Au(e),n,o)}c(bf,"shouldSuggestRegularManaStarts");function _p(e,n,o,t){return e?!It(n):ur(e,o)?!It(n)&&!t:!0}c(_p,"shouldAdvanceTurnForCounts");function Qr(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(Qr,"regularSquareForMovement");function Fp(e,n){let o=e.get(n),t=e.squareAt(n);return o?.kind==="mon"?Qr(t)&&o.mon.kind===w.Drainer:o!==void 0?!1:Qr(t)}c(Fp,"regularManaMoveDestinationAllowed");function Qk(e){for(let n of e.board.allFreeRegularManaLocations(e.activeColor))for(let o of me(n))if(Fp(e.board,o))return!0;return!1}c(Qk,"hasMovableFreeRegularMana");function Cf(e){let n=Ha(e),t=!(!n&&ur(n,e.manaMovesCount)&&!It(e.monsMovesCount))||Qk(e);return _p(n,e.monsMovesCount,e.manaMovesCount,t)}c(Cf,"shouldAdvanceTurn");var lt=0,vu=1,Gp=2,et=3,cr=4,Vp=5,Xn=127,dt=0,xt=1,Jr=2,Hp=3,Up=-2,Mf=16;function Un(e,n,o,t,r){return e|n<<3|o<<10|t<<17|r<<24}c(Un,"encodeMove");function ja(e){return e&7}c(ja,"moveType");function nt(e){return e>>3&127}c(nt,"moveFrom");function Co(e){return e>>10&127}c(Co,"moveTo");function Ka(e){return e>>17&127}c(Ka,"moveAux");function Zi(e){return e>>24&3}c(Zi,"moveModifier");function Wp(e,n,o){if(e.length!==n)throw new RangeError(`fast position ${o} length must be ${n}`)}c(Wp,"validateArrayLength");var Bp=class{static{c(this,"MutableFastPosition")}cells=new Uint16Array(121);squares=new Uint8Array(121);monLocations=new Int32Array(qi).fill(-1);freeMana=new Int32Array(oo);manaIndices=new Int32Array(Mf);manaCount=0;whiteScore=0;blackScore=0;active=0;monsMoves=0;manaMoves=0;actionsUsed=0;potions=new Int32Array(oo);firstTurn=!1;hashLo=0;hashHi=0;copyFrom(n){let o=n;this.cells.set(o.cells),this.squares=o.squares;let t=this.monLocations,r=o.monLocations;for(let s=0;s<qi;s+=1)t[s]=v(r,s);this.freeMana[0]=v(o.freeMana,0),this.freeMana[1]=v(o.freeMana,1);let a=this.manaIndices,i=o.manaIndices;for(let s=0;s<Mf;s+=1)a[s]=v(i,s);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[0]=v(o.potions,0),this.potions[1]=v(o.potions,1),this.firstTurn=o.firstTurn,this.hashLo=o.hashLo,this.hashHi=o.hashHi}reset(n){Wp(n.cells,121,"cells"),Wp(n.squares,121,"squares"),Wp(n.potions,oo,"potions");let o;try{o=new Uint8Array(n.squares)}catch(m){Jo(m)}let t=0;for(let m=0;m<121;m+=1){let d=fe(n.cells,m);if(!(d===0||He(d)!==dn)&&(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,p=n.actionsUsed,l=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=p,this.potions.set(n.potions),this.firstTurn=l,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=fe(this.cells,t);if(r===0)continue;n^=Ru(t,r),o^=Pu(t,r);let a=He(r);if(a===nn)this.monLocations[vn(gn(r),Fn(r))]=t;else if(a===dn){let i=Oe(r);(i===1||i===2)&&(this.freeMana[i-1]=v(this.freeMana,i-1)+1),this.manaIndices[this.manaCount]=t,this.manaCount+=1}}this.hashLo=n,this.hashHi=o}},Ou=Bp;function Ji(e,n,o){let t=v(e.monLocations,vn(Xi,n));if(t<0)return!1;let r=fe(e.cells,t);return He(r)===nn&&gn(r)===Xi&&Fn(r)===n&&Rn(r)===0&&Yn(t,o)===1}c(Ji,"awakeAngelGuards");function Zk(e,n){let o=e.manaCount;for(let t=0;t<o;t+=1)if(v(e.manaIndices,t)===n){for(let r=t+1;r<o;r+=1)e.manaIndices[r-1]=v(e.manaIndices,r);e.manaIndices[o-1]=0,e.manaCount=o-1;return}throw new RangeError(`missing fast mana index: ${n}`)}c(Zk,"removeManaIndex");function Jk(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&&v(e.manaIndices,t-1)>n;)e.manaIndices[t]=v(e.manaIndices,t-1),t-=1;e.manaIndices[t]=n,e.manaCount=o+1}c(Jk,"insertManaIndex");function je(e,n,o){let t=fe(e.cells,n);if(t!==o){if(t!==0){e.hashLo^=Ru(n,t),e.hashHi^=Pu(n,t);let r=He(t);if(r===nn){let a=vn(gn(t),Fn(t));v(e.monLocations,a)===n&&(e.monLocations[a]=-1)}else if(r===dn){let a=Oe(t);(a===1||a===2)&&(e.freeMana[a-1]=v(e.freeMana,a-1)-1),Zk(e,n)}}if(e.cells[n]=o,o!==0){e.hashLo^=Ru(n,o),e.hashHi^=Pu(n,o);let r=He(o);if(r===nn)e.monLocations[vn(gn(o),Fn(o))]=n;else if(r===dn){let a=Oe(o);(a===1||a===2)&&(e.freeMana[a-1]=v(e.freeMana,a-1)+1),Jk(e,n)}}}}c(je,"setCell");function gu(e){return Ga(gn(e),Fn(e),Rn(e),0,0)}c(gu,"plainMonCell");function Zr(e,n,o){return Ga(gn(e),Fn(e),Rn(e),n,o)}c(Zr,"carryingMonCell");function kf(e,n){e.potions[n]=v(e.potions,n)+1}c(kf,"addPotion");function Lp(e,n,o,t){if(Oe(n)===0&&We(n)===0&&t===xt){je(e,o,Zr(n,0,po));return}je(e,o,n),kf(e,Fn(n))}c(Lp,"collectConsumableAt");function eT(e,n){e.active===0?e.whiteScore+=n:e.blackScore+=n}c(eT,"addScore");function jp(e){if(e.actionsUsed<Vn){e.actionsUsed+=1;return}e.potions[e.active]=v(e.potions,e.active)-1}c(jp,"consumeAction");function Tf(e,n){let o=gn(n),t=Fn(n),r=v(Ip,vn(o,t));je(e,r,Ga(o,t,2,0,0))}c(Tf,"faintMonAt");function nT(e){let n=fe(e.cells,Ba);He(n)===nn&&Oe(n)===0&&We(n)===0?je(e,Ba,Zr(n,Hn,0)):je(e,Ba,tr(Hn))}c(nT,"supermanaBackToBase");function oT(e,n,o){let t=Oe(n);t===Hn?nT(e):t!==0&&je(e,o,tr(t)),We(n)===po&&je(e,o,0)}c(oT,"releaseFaintedCarry");function Kp(e,n,o){Tf(e,n),oT(e,n,o)}c(Kp,"faintTargetAndReleaseCarry");function qp(e,n,o){eT(e,Wo(o,e.active));let t=fe(e.cells,n);He(t)===nn?je(e,n,gu(t)):je(e,n,0)}c(qp,"scoreCarriedManaAt");function tT(e,n){let o=nt(n),t=Co(n),r=fe(e.cells,o),a=fe(e.cells,t),i=Oe(r);if(e.monsMoves+=1,je(e,o,0),je(e,t,r),a!==0){let s=He(a);s===dn?(i!==0&&je(e,o,tr(i)),je(e,t,Zr(r,Oe(a),0))):s===_n&&We(a)===to&&Lp(e,r,t,Zi(n))}i!==0&&ct(we(e.squares,t))&&qp(e,t,i)}c(tT,"applyMonMove");function rT(e,n){let o=nt(n),t=Co(n),r=Oe(fe(e.cells,o)),a=fe(e.cells,t);e.manaMoves+=1,je(e,o,0),je(e,t,tr(r)),a!==0&&je(e,t,Zr(a,r,0)),ct(we(e.squares,t))&&qp(e,t,r)}c(rT,"applyManaMove");function aT(e,n){let o=Co(n),t=fe(e.cells,o);jp(e),je(e,o,0),Kp(e,t,o)}c(aT,"applyMysticAction");function iT(e,n){let o=nt(n),t=Co(n),r=Zi(n),a=r===Hp?Xn:Ka(n),i=fe(e.cells,o),s=fe(e.cells,t),u=v(Ip,vn(gn(i),Fn(i))),p=We(s)!==po||a===Xn||a===u;return je(e,o,0),a===Xn?je(e,t,gu(i)):je(e,t,0),jp(e),s!==0&&(Kp(e,s,t),We(s)===po&&Tf(e,i)),a!==Xn&&(r===xt?je(e,a,Zr(i,0,po)):(je(e,a,gu(i)),r===Jr&&kf(e,Fn(i)))),p}c(iT,"applyDemonAction");function sT(e,n){let o=nt(n),t=Co(n),r=fe(e.cells,o),a=fe(e.cells,t);je(e,t,0),je(e,o,gu(r)),Kp(e,a,t)}c(sT,"applyBombAttack");function uT(e,n){let o=Co(n),t=Ka(n),r=Zi(n),a=fe(e.cells,o),i=fe(e.cells,t),s=Oe(a);if(jp(e),je(e,o,0),je(e,t,a),i!==0){let u=He(a);if(u===nn){let p=He(i);p===dn?(s!==0&&je(e,o,tr(s)),je(e,t,Zr(a,Oe(i),0))):p===_n&&Lp(e,a,t,r)}else u===dn?je(e,t,Zr(i,s,0)):u===_n&&Lp(e,i,t,r)}s!==0&&ct(we(e.squares,t))&&qp(e,t,s)}c(uT,"applySpiritAction");function zp(e){let n=Np(e.whiteScore,e.blackScore);return n===void 0?-1:rn(n)}c(zp,"positionWinner");function Rf(e){return Eu(e.firstTurn,e.actionsUsed,v(e.potions,e.active))}c(Rf,"canUseAction");function Pf(e,n){return v(e.freeMana,e.active)===0?!1:Dp(e.firstTurn,e.monsMoves,e.manaMoves,e.actionsUsed,v(e.potions,e.active),n!==0,!0)}c(Pf,"manaStartsAllowed");function qa(e,n){if(!Va(we(e.squares,n)))return!1;let o=fe(e.cells,n);return o===0||He(o)===nn&&gn(o)===zn&&Oe(o)===0&&We(o)===0}c(qa,"manaMoveAllowed");function cT(e){let n=e.active+1;for(let o=0;o<e.manaCount;o+=1){let t=v(e.manaIndices,o),r=fe(e.cells,t);if(He(r)!==dn||Oe(r)!==n)continue;let a=v(On.starts,t),i=v(On.counts,t);for(let s=0;s<i;s+=1){let u=v(On.list,a+s);if(qa(e,u))return!0}}return!1}c(cT,"hasMovableFreeRegularMana");function pT(e){let o=!(!e.firstTurn&&ur(e.firstTurn,e.manaMoves)&&!It(e.monsMoves))||v(e.freeMana,e.active)!==0&&cT(e);return _p(e.firstTurn,e.monsMoves,e.manaMoves,o)}c(pT,"shouldAdvanceTurn");function lT(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<Ot;o+=1){let t=v(e.monLocations,vn(o,n));if(t<0)continue;let r=fe(e.cells,t),a=Rn(r);a===0||Oe(r)!==0||We(r)!==0||je(e,t,Ga(gn(r),Fn(r),a-1,Oe(r),We(r)))}}c(lT,"advanceTurn");function wf(e,n){let o=e,t=ja(n),r=!0;switch(t){case lt:tT(o,n);break;case vu:rT(o,n);break;case Gp:aT(o,n);break;case et:r=iT(o,n);break;case cr:uT(o,n);break;case Vp:sT(o,n);break;default:throw new RangeError(`unsupported fast move type: ${t}`)}let a=zp(o);return a===-1&&pT(o)&&lT(o),r?a:Up}c(wf,"applyFastMove");function Af(e){switch(e){case K.Bomb:return po;case K.Potion:return sf;case K.BombOrPotion:return to}}c(Af,"consumableCode");function Ef(e){return e.kind==="supermana"?Hn:rn(e.color)===0?zi:$i}c(Ef,"manaCode");var gf=2147483647;function vf(e,n,o){if(!Number.isSafeInteger(o)||o<0||n.whitePotionsCount>gf-o||n.blackPotionsCount>gf-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(qn(a)!==void 0&&(r+=1,r>e.manaIndices.length))return!1;let i=G(a);if(i===void 0)continue;let s=vn(Xo[i.kind],rn(i.color));if(t[s]!==0)return!1;t[s]=1}try{dT(e,n)}catch(a){if(Wa(a))return!1;throw a}return!0}c(vf,"tryLoadPosition");function dT(e,n){let o;try{o=new Uint16Array(121)}catch(r){Jo(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]=Su(a.mon,0,0);break;case"mana":o[r]=tr(Ef(a.mana));break;case"mon-with-mana":o[r]=Su(a.mon,Ef(a.mana),0);break;case"mon-with-consumable":o[r]=Su(a.mon,0,Af(a.consumable));break;case"consumable":o[r]=cf(Af(a.consumable));break}}e.reset({cells:o,squares:hu(n.variant()),whiteScore:n.whiteScore,blackScore:n.blackScore,active:rn(n.activeColor),monsMoves:n.monsMovesCount,manaMoves:n.manaMovesCount,actionsUsed:n.actionsUsedCount,potions:[n.whitePotionsCount,n.blackPotionsCount],firstTurn:n.isFirstTurn()})}c(dT,"loadPosition");function Iu(e){return{kind:"location",location:_a(e)}}c(Iu,"locationInput");function mT(e){return{kind:"modifier",modifier:e===xt?Ye.SelectBomb:Ye.SelectPotion}}c(mT,"modifierInput");function $p(e){let n=ja(e),o=[Iu(nt(e)),Iu(Co(e))];n===cr?o.push(Iu(Ka(e))):n===et&&Ka(e)!==Xn&&o.push(Iu(Ka(e)));let t=Zi(e);return(t===xt||t===Jr)&&(n===lt||n===et||n===cr)&&o.push(mT(t)),o}c($p,"moveToInputs");var xu=1e6,fT=-2147483648,yT=2147483647,ST=["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","manaStepQueue1","manaStepQueue2","manaStepQueue3","manaStepQueue4","manaStepQueue5","manaStepWinThreat","drainerTripTurn1","drainerTripTurn2","drainerTripTurn3","drainerTripTurn4","supermanaCarrier","scoreShape10","scoreShape20","scoreShape21","scoreShape30","scoreShape31","scoreShape32","tripGradient","raceHalfTurn","threatMoverScaleSpare","threatMoverScaleFew","tripTwoPointScale"];function Du(e){if(typeof e!="object"||e===null||Array.isArray(e))throw new TypeError("fast evaluation weights must be an object");let n=e,o={scoreUnit:0,potion:0,bomb:0,activeMon:0,faintMon:0,faintDrainer:0,faintCooldownStep:0,drainerCloseToMana:0,drainerCloseToOwnPool:0,drainerCloseToSupermana:0,carrierCloseToPool:0,carrierPointBonus:0,carrierScoresThisTurn:0,carrierScoresNextTurn:0,winningCarrier:0,drainerPickupScoresThisTurn:0,manaToOwnerPool:0,manaPointsAttraction:0,manaDrainerControl:0,supermanaDrainerControl:0,monCloseToCenter:0,spiritCloseToEnemy:0,spiritOnOwnBase:0,angelCloseToDrainer:0,angelGuardingDrainer:0,attackerCloseToEnemyDrainer:0,drainerThreatImmediate:0,drainerThreatWalk:0,carrierThreatFactor:0,manaToNearestPool:0,manaStepQueue1:0,manaStepQueue2:0,manaStepQueue3:0,manaStepQueue4:0,manaStepQueue5:0,manaStepWinThreat:0,drainerTripTurn1:0,drainerTripTurn2:0,drainerTripTurn3:0,drainerTripTurn4:0,supermanaCarrier:0,scoreShape10:0,scoreShape20:0,scoreShape21:0,scoreShape30:0,scoreShape31:0,scoreShape32:0,tripGradient:0,raceHalfTurn:0,threatMoverScaleSpare:0,threatMoverScaleFew:0,tripTwoPointScale:0};for(let t of ST){let r=n[t];if(typeof r!="number")throw new TypeError(`weights.${t} must be a number`);if(!Number.isSafeInteger(r)||r<-xu||r>xu)throw new RangeError(`weights.${t} must be a safe integer from -${xu} through ${xu}`);o[t]=r}return Object.freeze(o)}c(Du,"normalizeEvalWeights");var lr=Du({scoreUnit:12e3,potion:240,bomb:1200,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:2100,drainerThreatWalk:720,carrierThreatFactor:2,manaToNearestPool:0,manaStepQueue1:3600,manaStepQueue2:2500,manaStepQueue3:1050,manaStepQueue4:800,manaStepQueue5:800,manaStepWinThreat:8e3,drainerTripTurn1:4200,drainerTripTurn2:2200,drainerTripTurn3:1e3,drainerTripTurn4:400,supermanaCarrier:4e3,scoreShape10:-6824,scoreShape20:-6978,scoreShape21:-3085,scoreShape30:-8259,scoreShape31:-4275,scoreShape32:-1052,tripGradient:400,raceHalfTurn:900,threatMoverScaleSpare:25,threatMoverScaleFew:55,tripTwoPointScale:290}),Wn=99,ro=Math.max(Wn+1,11),Of=3,Bo=be+2,Nu=oe+1,Yp=0,_f=1,Xp=2,pr=3,Ff=3,Wf=Nu,Dt=6,If=Dt*2+1,es=6,Qp=2,xf=12;function Nt(e){let n=dr(ro);for(let o=0;o<ro;o+=1)n[o]=Math.trunc(e/(o+1));return n}c(Nt,"distanceTable");function hT(e){let n=dr(ro),o=e.manaToNearestPool;for(let t=0;t<ro;t+=1){let r=t<=1?e.manaStepQueue1:t===2?e.manaStepQueue2:t===3?e.manaStepQueue3:t===4?e.manaStepQueue4:e.manaStepQueue5;n[t]=r+Math.trunc(o/(t+1))}return n}c(hT,"manaStepQueueTable");function bT(e){let n=dr(Bo*Bo),o=new Set,t=c((r,a,i)=>{if(r===a)throw new RangeError("score shape cells must be off the diagonal");let s=r*Bo+a,u=a*Bo+r;if(o.has(s)||o.has(u))throw new RangeError("score shape cells must be written once");o.add(s),o.add(u),n[s]=i,n[u]=-i},"set");t(1,0,e.scoreShape10),t(2,0,e.scoreShape20),t(2,1,e.scoreShape21),t(3,0,e.scoreShape30),t(3,1,e.scoreShape31),t(3,2,e.scoreShape32);for(let r=0;r+1<Bo;r+=1)for(let a=0;a<Bo;a+=1)if(e.scoreUnit+v(n,(r+1)*Bo+a)-v(n,r*Bo+a)<0)throw new RangeError("score shape corrections must keep the score monotone");return n}c(bT,"scoreShapeTable");function Bf(e){let n=dr(ro);for(let o=0;o<ro;o+=1){let t=1+Math.ceil(o/oe);n[o]=t<=1?e.drainerTripTurn1:t===2?e.drainerTripTurn2:t===3?e.drainerTripTurn3:e.drainerTripTurn4}return n}c(Bf,"drainerTripTable");function CT(e){let n=Bf(e);for(let o=0;o<ro;o+=1)n[o]=Vf(v(n,o),e.tripTwoPointScale,"two-point trip");return n}c(CT,"twoPointTripTable");function MT(e){let n=dr(If);for(let o=0;o<If;o+=1)n[o]=(o-Dt)*e;return n}c(MT,"raceTable");function kT(e){let n=dr(ro);for(let o=0;o<ro;o+=1){let t=o>xf?xf:o;n[o]=t*e}return n}c(kT,"tripStepTable");function TT(e){let n=dr(Of*ro);for(let o=0;o<Of;o+=1){let t=o*ro;for(let r=0;r<ro;r+=1)n[t+r]=Math.trunc(o*e/(r+1))}return n}c(TT,"manaPointsAttractionTable");function Lf(e,n){return n===Yp?100:n===Xp?e.threatMoverScaleSpare:e.threatMoverScaleFew}c(Lf,"moverScale");function Gf(e,n,o){let t=e*n;if(!Number.isSafeInteger(t))throw new RangeError(`${o} derived value requires a safe integer product`);return Math.trunc(t/100)}c(Gf,"scaledSafeInteger");function Vf(e,n,o){let t=Gf(e,n,o);if(t<fT||t>yT)throw new RangeError(`${o} derived value must fit a signed 32-bit integer`);return t}c(Vf,"scaledInt32");function RT(e){let n=dr(2*pr);for(let o=0;o<2;o+=1){let t=o===1?e.carrierThreatFactor:1;for(let r=0;r<pr;r+=1)n[o*pr+r]=Vf(e.drainerThreatImmediate*t,Lf(e,r),"immediate threat")}return n}c(RT,"threatImmediateTable");function PT(e){let n=wT(2*pr*Nu);for(let o=0;o<2;o+=1){let t=o===1?e.carrierThreatFactor:1;for(let r=0;r<pr;r+=1){let a=Lf(e,r),i=(o*pr+r)*Nu;for(let s=0;s<Nu;s+=1)n[i+s]=Gf(Math.trunc(e.drainerThreatWalk*t*(oe+1-s)/oe),a,"walking threat")}}return n}c(PT,"threatWalkTable");function dr(e){try{return new Int32Array(e)}catch(n){Jo(n)}}c(dr,"createInt32Table");function wT(e){try{return new Float64Array(e)}catch(n){Jo(n)}}c(wT,"createFloat64Table");function AT(e,n){let o=Dt*Math.abs(e.raceHalfTurn);if(o===0)return;let t=be-Qp;for(let r=0;r<t;r+=1){let a=e.scoreUnit+v(n,t*Bo+r)-v(n,(t-1)*Bo+r);if(o>a)throw new RangeError("race correction must not outweigh the point that opens the endgame band")}}c(AT,"assertRaceStaysMonotone");function Zp(e){let n=bT(e);return AT(e,n),{weights:e,manaPointsAttraction:TT(e.manaPointsAttraction),manaToOwnerPool:Nt(e.manaToOwnerPool),manaToNearestPool:hT(e),scoreShape:n,drainerTrip:Bf(e),drainerTripTwoPoint:CT(e),race:MT(e.raceHalfTurn),tripStep:kT(e.tripGradient),carrierCloseToPool:Nt(e.carrierCloseToPool),drainerCloseToMana:Nt(e.drainerCloseToMana),drainerCloseToOwnPool:Nt(e.drainerCloseToOwnPool),drainerCloseToSupermana:Nt(e.drainerCloseToSupermana),angelCloseToDrainer:Nt(e.angelCloseToDrainer),spiritCloseToEnemy:Nt(e.spiritCloseToEnemy),monCloseToCenter:Nt(e.monCloseToCenter),attackerCloseToEnemyDrainer:Nt(e.attackerCloseToEnemyDrainer),threatImmediate:RT(e),threatWalk:PT(e)}}c(Zp,"createEvalTables");var _u=Zp(lr),Nf=new WeakMap;function Hf(e){if(e===lr)return lr;if(!Object.isFrozen(e))return Du(e);let n=Nf.get(e);return n===void 0&&(n=Du(e),Nf.set(e,n)),n}c(Hf,"memoizedNormalizedEvalWeights");var Df=new WeakMap;function Uf(e){if(e===lr)return _u;let n=Df.get(e);return n===void 0&&(n=Zp(e),Df.set(e,n)),n}c(Uf,"memoizedEvalTables");var _t=1e6;function jf(e,n){return we(pf,n*121+e)}c(jf,"ownPoolDistance");var Kf=Int32Array.of(0,10,110,120);function ET(e,n){for(let o=0;o<Kf.length;o+=1){let t=v(Kf,o);if(Yn(n,t)===1&&qa(e,t))return!0}return!1}c(ET,"hasAdjacentScoringPool");function qf(e,n,o,t){return v(n,o>t?o-t:0)-v(e.tripStep,o)}c(qf,"tripValue");function gT(e){return we(lf,e)}c(gT,"centerDistance");var Jp=new WeakMap,ns,za;function vT(e,n){if(e?.length!==n.length)return!1;for(let o=0;o<n.length;o+=1)if(we(e,o)!==we(n,o))return!1;return!0}c(vT,"sameSquareContent");function OT(e){try{let n=new Uint8Array(14641).fill(Wn),o=new Int32Array(121),t=new Int32Array(121),r=[],a=[];for(let i=0;i<121;i+=1){let s=v(rr.starts,i),u=v(rr.counts,i);for(let m=0;m<121;m+=1){let d=Wn;for(let f=0;f<u;f+=1){let y=v(rr.list,s+f);if(we(e,y)>=En)continue;let b=Yn(m,y);b<d&&(d=b)}n[i*121+m]=d}o[i]=r.length;let p=v(ar.starts,i),l=v(ar.counts,i);for(let m=0;m<l;m+=1){let d=v(ar.list,p+m);if(we(e,d)>=En)continue;let f=Mu(i,d),y=we(e,f);y===ut||y>=En||(r.push(d),a.push(f))}t[i]=r.length-v(o,i)}return{mysticSteps:n,demonStarts:o,demonCounts:t,demonOrigins:new Int32Array(r),demonBetween:new Int32Array(a)}}catch(n){Jo(n)}}c(OT,"buildAttackTables");function IT(e){if(e===ns&&za!==void 0)return za;let n=Jp.get(e);if(n!==void 0)return ns=e,za=n,n;if(za!==void 0&&vT(ns,e)){let t=za;return Jp.set(e,t),ns=e,t}let o=OT(e);return Jp.set(e,o),ns=e,za=o,o}c(IT,"attackTablesFor");function xT(e,n,o,t){if(!La(fe(e.cells,n)))return Wn;let r=o^1,a=Wn,i=IT(e.squares);for(let s=0;s<Ot;s+=1){let u=v(e.monLocations,vn(s,r));if(u<0)continue;let p=fe(e.cells,u);if(He(p)!==nn)continue;if(We(p)===po){let d=Yn(u,n)-3,f=d<0?0:d;if(f===0)return 0;f<a&&(a=f);continue}if(Rn(p)!==0||We(p)!==0||t||Oe(p)!==0)continue;if(s===mu){let d=we(i.mysticSteps,n*121+u);if(d===0)return 0;d<a&&(a=d);continue}if(s!==Yi)continue;let l=v(i.demonStarts,n),m=v(i.demonCounts,n);for(let d=0;d<m;d+=1){let f=v(i.demonBetween,l+d);if(f!==u&&fe(e.cells,f)!==0)continue;let y=Yn(u,v(i.demonOrigins,l+d));if(y===0)return 0;y<a&&(a=y)}}return a}c(xT,"estimatedAttackSteps");function zf(e,n,o=0){let t=n.weights,r=(e.whiteScore-e.blackScore)*t.scoreUnit+v(n.scoreShape,e.whiteScore*Bo+e.blackScore)+(v(e.potions,0)-v(e.potions,1))*t.potion,a=v(e.monLocations,vn(zn,0)),i=v(e.monLocations,vn(zn,1)),s=a>=0&&Rn(fe(e.cells,a))===0,u=i>=0&&Rn(fe(e.cells,i))===0,p=Wn,l=Wn,m=Wn,d=Wn,f=Wn,y=Wn,b=oe-e.monsMoves,C=o!==0,h=be-e.whiteScore,k=be-e.blackScore,M=0,T=es,P=es,E=es,O=es,g=!1,x=!1;if(C){if(a>=0){let q=fe(e.cells,a);g=Rn(q)<=1&&Oe(q)===0&&We(q)===0}if(i>=0){let q=fe(e.cells,i);x=Rn(q)<=1&&Oe(q)===0&&We(q)===0}}let _=0,U=0,j=!1,z=!1,J=0,W=0,re=0,Se=0;for(let q=0;q<e.manaCount;q+=1){let Y=v(e.manaIndices,q),Ie=fe(e.cells,Y);if(He(Ie)!==dn)continue;let ie=Oe(Ie),ye=s?Yn(a,Y):Wn,pe=u?Yn(i,Y):Wn;ye<p&&(p=ye),pe<l&&(l=pe);let Le=we(pt,Y);if(s){let $=ye+Le;ie===zi&&$<m?m=$:ie!==zi&&$<f&&(f=$)}if(u){let $=pe+Le;ie===$i&&$<d?d=$:ie!==$i&&$<y&&(y=$)}if(C){let $=!1;if(ie!==Hn&&Le<=1&&ET(e,Y)&&($=!0,ie-1===0?J<2&&(J+=1):W<2&&(W+=1)),g&&(s?ye:Yn(a,Y))+Le<=oe){let en=Wo(ie,0);en>_?(_=en,j=$&&ie-1===0):en===_&&!($&&ie-1===0)&&(j=!1)}if(x&&(u?pe:Yn(i,Y))+Le<=oe){let en=Wo(ie,1);en>U?(U=en,z=$&&ie-1===1):en===U&&!($&&ie-1===1)&&(z=!1)}}let Tn=pe-ye;if(Tn>4&&(Tn=4),Tn<-4&&(Tn=-4),t.manaPointsAttraction!==0){let $=n.manaPointsAttraction;s&&(r+=v($,Wo(ie,0)*ro+ye)),u&&(r-=v($,Wo(ie,1)*ro+pe))}if(ie===Hn)r+=t.supermanaDrainerControl*Tn;else{let $=ie-1,he=$===0?1:-1;r+=he*v(n.manaToOwnerPool,jf(Y,$)),r+=he*v(n.manaToNearestPool,Le),r+=t.manaDrainerControl*Tn,Le<=2&&($===0?h:k)<=1&&(M|=$===0?1:2),$===0?Le<T&&(T=Le):Le<P&&(P=Le)}}M!==0&&(r+=t.manaStepWinThreat*(((M&1)===0?0:1)-((M&2)===0?0:1)));for(let q=0;q<oo;q+=1){let Y=q===0?1:-1,Ie=q^1;for(let ie=0;ie<Ot;ie+=1){let ye=v(e.monLocations,vn(ie,q));if(ye<0)continue;let pe=fe(e.cells,ye);if(He(pe)!==nn)continue;let Le=Rn(pe);Le!==0&&(r-=Y*((ie===zn?t.faintDrainer:t.faintMon)+t.faintCooldownStep*Le));let Tn=we(e.squares,ye);Le===0&&Tn<En&&(r+=Y*t.activeMon);let $=Oe(pe);if($!==0){let he=Wo($,q),en=we(pt,ye);r+=Y*(v(n.carrierCloseToPool,en)+he*t.carrierPointBonus),$===Hn&&(r+=Y*t.supermanaCarrier),q===e.active&&en<=b?r+=Y*t.carrierScoresThisTurn*he:q!==e.active&&en<=oe&&(r+=Y*t.carrierScoresNextTurn*he,C&&(q===0?he>re&&(re=he):he>Se&&(Se=he)));let Dn=q===0?e.whiteScore:e.blackScore;he>=be-Dn&&(r+=Y*t.winningCarrier)}else We(pe)===po&&(r+=Y*t.bomb);if(Le===0)if(ie===zn){let he=0,en=q===0?p:l,Dn=q===0?m:d,at=q===0?f:y,Xt=Dn<at?Dn:at,Hr=q===e.active?b:oe,au=n.drainerTrip,Oa=$!==0?we(pt,ye):We(pe)!==0?Wn:Dn;$===0&&We(pe)===0&&at<Wn&&(Dn>=Wn||qf(n,n.drainerTripTwoPoint,at,Hr)>qf(n,n.drainerTrip,Dn,Hr))&&(au=n.drainerTripTwoPoint,Oa=at),he-=v(n.tripStep,Oa);let De=Oa>Hr?Oa-Hr:0,iu=1+((De+oe-1)/oe|0);q===0?iu<E&&(E=iu):iu<O&&(O=iu),he+=v(au,De),he+=v(n.drainerCloseToMana,en),he+=v(n.drainerCloseToOwnPool,jf(ye,q)),he+=v(n.drainerCloseToSupermana,Yn(ye,Ba)),$===0&&We(pe)===0&&q===e.active&&Xt<=b&&(he+=t.drainerPickupScoresThisTurn),r+=Y*he;let Lm=Ji(e,q,ye),Mp=xT(e,ye,q,Lm),pk=$!==0,lk=q!==e.active||b===0?Yp:b>=Ff?Xp:_f,Gm=(pk?pr:0)+lk;Mp===0?r-=Y*v(n.threatImmediate,Gm):Mp<=oe&&(r-=Y*(n.threatWalk[Gm*Wf+Mp]??0)),Lm&&(r+=Y*t.angelGuardingDrainer)}else if(ie===Xi){let he=q===0?a:i;he>=0&&(r+=Y*v(n.angelCloseToDrainer,Yn(ye,he)))}else if(ie===du){let he=Wn;for(let en=0;en<Ot;en+=1){let Dn=v(e.monLocations,vn(en,Ie));if(Dn<0)continue;let at=fe(e.cells,Dn);if(Rn(at)!==0)continue;let Xt=Yn(ye,Dn);Xt<he&&(he=Xt)}r+=Y*v(n.spiritCloseToEnemy,he),Tn>=En&&(r-=Y*t.spiritOnOwnBase)}else{r+=Y*v(n.monCloseToCenter,gT(ye));let he=Ie===0?a:i,en=Ie===0?s:u;he>=0&&en&&(r+=Y*v(n.attackerCloseToEnemyDrainer,Yn(ye,he)))}}}if(t.raceHalfTurn!==0&&(h<k?h:k)<=Qp){let q=e.manaMoves>0?1:0,Y=T+(e.active===0?q:0),Ie=P+(e.active===1?q:0),ie=E<Y?E:Y,pe=(O<Ie?O:Ie)*2+(e.active===1?0:1)-(ie*2+(e.active===0?0:1)),Le=pe>Dt?Dt:pe<-Dt?-Dt:pe;r+=v(n.race,Le+Dt)}if(C){let q=e.active^1,Y=q===0?1:-1,Ie=q===0?_:U,ie=q===0?re:Se,ye=q===0?J:W,pe=ye>0,Le=q===0?j:z,Tn=ye>=2||ye===1&&!Le,$=Ie;$>0&&Tn&&($+=1);let he=ie;he>0&&pe&&(he+=1),he>$&&($=he),pe&&$<1&&($=1);let en=q===0?e.whiteScore:e.blackScore;$>0&&en+$>=be&&(r+=Y*o)}return r}c(zf,"evaluateWithTables");var Ft=704,Fu=1073741824;function rs(e,n){return n?e+Fu:e}c(rs,"encodeGeneratedMoves");function os(e){return e>=Fu?e-Fu:e}c(os,"generatedMoveCount");function ts(e){return e>=Fu}c(ts,"generatedMovesHadRawStartOption");function el(e,n){return He(e)===nn&&Fn(e)!==n&&Rn(e)===0}c(el,"isEnemyAwakeMon");function nl(e){let n=131072;return Oe(e)!==0&&(n+=1<<20),gn(e)===zn&&(n+=1<<19),n}c(nl,"damagingAttackKey");function NT(e,n,o){let t=fe(e.cells,o),r=we(e.squares,o),a=He(n),i=a===nn,s=Oe(n),u=We(n),p=t===0?-1:He(t),l=p===nn&&(Oe(t)!==0||We(t)!==0);if(p===nn)if(l){if(a!==_n||u!==to)return 0}else{if(i)return 0;if(a===dn){if(gn(t)!==zn||Rn(t)!==0)return 0}else if(u!==to)return 0}else if(p===dn){if(!i||gn(n)!==zn||Rn(n)!==0)return 0}else if(p===_n&&(We(t)!==to||!i))return 0;if(r>=En){if(!i||fu(r)!==gn(n)||yu(r)!==Fn(n)||s!==0||u!==0)return 0}else if(r===ut){let m=p===dn&&Oe(t)===Hn,d=i&&gn(n)===zn;if(!(s===Hn||s===0&&d&&(t===0||m)||d&&m))return 0}return t===0?1:i?s===0&&u===0?p===_n?We(t)===to?2:0:1:s!==0?p===_n?We(t)===to?1:0:1:p!==_n||We(t)!==to?0:1:a===dn?p!==nn||l?0:1:p!==nn?0:l?u===to?1:0:2}c(NT,"spiritDestinationOptionCount");function DT(e,n,o,t,r,a){let i=r,s=!1,u=gn(o),p=Fn(o),l=Oe(o),m=We(o),d=e.active,f=we(pt,n),y=u===zn?1024:0,b=v(On.starts,n),C=v(On.counts,n);for(let h=0;h<C;h+=1){let k=v(On.list,b+h),M=fe(e.cells,k),T=we(e.squares,k),P=M===0?-1:He(M),E;if(l!==0)P===nn?E=!1:P===dn||P===_n?E=!0:E=Va(T)||T===ut&&l===Hn;else if(m!==0)P===_n?E=!0:P===-1?E=Va(T):E=!1;else{let g;P===nn?g=!1:P===dn?g=u===zn:g=!0,g?T>=En?E=fu(T)===u&&yu(T)===p:T===ut?E=u===zn&&(M===0||P===dn&&Oe(M)===Hn):E=!0:E=!1}if(!E||(s=!0,P===_n&&We(M)!==to))continue;let O=0;l!==0&&ct(T)&&(O+=(1<<21)+Wo(l,d)*(1<<18)),M!==0&&(P===dn?O+=65536+Wo(Oe(M),d)*512:P===_n&&(O+=16384)),l!==0?O+=(f-we(pt,k))*2048+4096:O+=y,P===_n&&We(M)===to&&l===0&&m===0?(a[i]=O,t[i]=Un(lt,n,k,Xn,xt),i+=1,a[i]=O,t[i]=Un(lt,n,k,Xn,Jr),i+=1):(a[i]=O,t[i]=Un(lt,n,k,Xn,dt),i+=1)}return rs(i,s)}c(DT,"generateMonMoves");function _T(e,n,o,t,r){let a=e.active,i=t,s=!1,u=v(rr.starts,n),p=v(rr.counts,n);for(let l=0;l<p;l+=1){let m=v(rr.list,u+l),d=fe(e.cells,m);el(d,a)&&(Ji(e,a^1,m)||(s=!0,La(d)&&(r[i]=nl(d),o[i]=Un(Gp,n,m,Xn,dt),i+=1)))}return rs(i,s)}c(_T,"generateMysticMoves");function FT(e,n,o,t,r){let a=e.active,i=t,s=!1,u=Yi,p=a,l=v(ar.starts,n),m=v(ar.counts,n);for(let d=0;d<m;d+=1){let f=v(ar.list,l+d),y=fe(e.cells,f);if(!el(y,a)||Ji(e,a^1,f))continue;let b=Mu(n,f);if(fe(e.cells,b)!==0)continue;let C=we(e.squares,b);if(C===ut||C>=En||(s=!0,!La(y)))continue;let h=nl(y),k=we(e.squares,f),M=Oe(y);if(!(M!==0&&M!==Hn||k===ut||k>=En)){r[i]=h,o[i]=Un(et,n,f,Xn,dt),i+=1;continue}let P=i,E=v(On.starts,f),O=v(On.counts,f);for(let g=0;g<O;g+=1){let x=v(On.list,E+g),_=fe(e.cells,x),U=_===0?-1:He(_);if(U!==-1&&U!==_n)continue;let j=we(e.squares,x);(Va(j)||j>=En&&fu(j)===u&&yu(j)===p)&&(U===_n?We(_)===to?(r[i]=h,o[i]=Un(et,n,f,x,xt),i+=1,r[i]=h,o[i]=Un(et,n,f,x,Jr),i+=1):(r[i]=h,o[i]=Un(et,n,f,x,Hp),i+=1):(r[i]=h,o[i]=Un(et,n,f,x,dt),i+=1))}i===P&&(r[i]=h,o[i]=Un(et,n,f,Xn,dt),i+=1)}return rs(i,s)}c(FT,"generateDemonMoves");function WT(e,n,o,t,r){let a=t,i=!1,s=e.active,u=v(bu.starts,n),p=v(bu.counts,n);for(let l=0;l<p;l+=1){let m=v(bu.list,u+l),d=fe(e.cells,m);if(d===0||He(d)===nn&&Rn(d)!==0)continue;i=!0;let f=Oe(d),y=He(d)===dn,b=we(pt,m),C=(1<<21)+Wo(f,s)*(1<<18),h=v(On.starts,m),k=v(On.counts,m);for(let M=0;M<k;M+=1){let T=v(On.list,h+M),P=NT(e,d,T);if(P===0)continue;let E=0;f!==0&&ct(we(e.squares,T))?E+=8192+C:y&&BT(e,T,b,s)&&(E+=40960),P===2?(r[a]=E,o[a]=Un(cr,n,m,T,xt),a+=1,r[a]=E,o[a]=Un(cr,n,m,T,Jr),a+=1):(r[a]=E,o[a]=Un(cr,n,m,T,dt),a+=1)}}return rs(a,i)}c(WT,"generateSpiritMoves");function BT(e,n,o,t){if(we(pt,n)<o)return!0;let r=fe(e.cells,n);return He(r)===nn&&gn(r)===zn&&Fn(r)===t&&Rn(r)===0}c(BT,"advancesMana");function LT(e,n,o,t,r){let a=e.active,i=t,s=!1,u=v(Cu.starts,n),p=v(Cu.counts,n);for(let l=0;l<p;l+=1){let m=v(Cu.list,u+l),d=fe(e.cells,m);el(d,a)&&(s=!0,La(d)&&(r[i]=nl(d),o[i]=Un(Vp,n,m,Xn,dt),i+=1))}return rs(i,s)}c(LT,"generateBombMoves");function GT(e,n,o,t,r){let a=t,i=v(On.starts,n),s=v(On.counts,n);for(let u=0;u<s;u+=1){let p=v(On.list,i+u),l=we(e.squares,p);qa(e,p)&&(r[a]=ct(l)?(1<<21)+(1<<18):16,o[a]=Un(vu,n,p,Xn,dt),a+=1)}return a}c(GT,"generateManaMoves");function VT(e,n,o,t,r){let a=t;if(we(pt,n)!==1)return a;let i=v(On.starts,n),s=v(On.counts,n);for(let u=0;u<s;u+=1){let p=v(On.list,i+u),l=we(e.squares,p);!ct(l)||!qa(e,p)||(r[a]=(1<<21)+(1<<18),o[a]=Un(vu,n,p,Xn,dt),a+=1)}return a}c(VT,"generateWinningManaMoves");var HT=new Int32Array(Ft);function ol(e,n,o=HT){let t=e.active,r=It(e.monsMoves),a=Rf(e),i=0,s=0;for(let u=0;u<Ot;u+=1){let p=v(e.monLocations,vn(u,t));if(p<0)continue;let l=fe(e.cells,p);if(He(l)!==nn)continue;let m=!1,d=Oe(l),f=We(l),y=d!==0||f!==0;if(!(!y&&Rn(l)!==0)){if(r){let b=DT(e,p,l,n,i,o);i=os(b),m||=ts(b)}if(y){if(f===po){let b=LT(e,p,n,i,o);i=os(b),m||=ts(b)}}else if(we(e.squares,p)<En&&a){if(u===mu){let C=_T(e,p,n,i,o);i=os(C),m||=ts(C)}else if(u===Yi){let C=FT(e,p,n,i,o);i=os(C),m||=ts(C)}else if(u===du){let C=WT(e,p,n,i,o);i=os(C),m||=ts(C)}}m&&(s+=1)}}if(Pf(e,s)){let u=t+1;for(let p=0;p<e.manaCount;p+=1){let l=v(e.manaIndices,p),m=fe(e.cells,l);He(m)===dn&&Oe(m)===u&&(i=GT(e,l,n,i,o))}}else if(v(e.freeMana,t)!==0&&ur(e.firstTurn,e.manaMoves)&&(t===0?e.whiteScore:e.blackScore)+1>=be){let u=t+1;for(let p=0;p<e.manaCount;p+=1){let l=v(e.manaIndices,p),m=fe(e.cells,l);He(m)===dn&&Oe(m)===u&&(i=VT(e,l,n,i,o))}}if(i>n.length)throw new RangeError(`fast move buffer capacity exceeded: generated ${i} moves for ${n.length} slots`);return i}c(ol,"generateMoves");var mt=48,Wu=mt-2,mr=_t-mt-1,Bu=Object.freeze({lateMoveReduction:!0,lateMoveIndex:3,lateMoveDeepIndex:8,moveCountPruning:!0,moveCountDepth:3,moveCountBase:4,moveCountFactor:5,futilityMargin:900,aspirationDelta:0,aspirationMinDepth:3,winsNextTurnThreat:0}),$f=new WeakMap;function Qf(e){if(!(Object.isFrozen(e)&&(e.tuning===void 0||Object.isFrozen(e.tuning))))return Yf(e);let o=$f.get(e);return o===void 0&&(o=Yf(e),$f.set(e,o)),o}c(Qf,"memoizedSearchLimits");function Yf(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>Wu)throw new RangeError(`maxDepth must be a safe integer from 0 through ${Wu}`);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?Bu:UT(r)})}c(Yf,"normalizeSearchLimits");function UT(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:Xf(n,"lateMoveReduction"),lateMoveIndex:Wt(n,"lateMoveIndex",Ft),lateMoveDeepIndex:Wt(n,"lateMoveDeepIndex",Ft),moveCountPruning:Xf(n,"moveCountPruning"),moveCountDepth:Wt(n,"moveCountDepth",Wu),moveCountBase:Wt(n,"moveCountBase",Ft),moveCountFactor:Wt(n,"moveCountFactor",Ft),futilityMargin:Wt(n,"futilityMargin",mr),aspirationDelta:Wt(n,"aspirationDelta",mr),aspirationMinDepth:Wt(n,"aspirationMinDepth",Wu),winsNextTurnThreat:Wt(n,"winsNextTurnThreat",mr)})}c(UT,"normalizeSearchTuning");function Xf(e,n){let o=e[n];if(typeof o!="boolean")throw new TypeError(`tuning.${n} must be a boolean`);return o}c(Xf,"normalizedTuningBoolean");function Wt(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(Wt,"normalizedTuningInteger");var as=new Int32Array(0);function is(e){try{return new Int32Array(e)}catch(n){if(n instanceof RangeError)return;throw n}}c(is,"tryAllocateTranspositionPart");var Lu=class{static{c(this,"TranspositionTable")}keyLo=as;keyHi=as;score=as;info=as;move=as;entries=0;generation=1;mask=0;deactivate(){this.mask=0}prepare(n){if(this.keyLo.length!==0)return this.mask=1048575,!0;if(n())return!1;let o=is(1048576);if(o===void 0||n())return!1;let t=is(1048576);if(t===void 0||n())return!1;let r=is(1048576);if(r===void 0||n())return!1;let a=is(1048576);if(a===void 0||n())return!1;let i=is(1048576);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=1048575,!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}};var jT=16,ss=1<<jT,KT=ss-1,qT=1<<30,Zf=0,Jf=1,ey=2,zT=3,ny=4194303,$T=511,YT=32768,XT=1<<28,QT=1<<24,ZT=1<<23,fr=_t*2,oy=c(()=>!1,"NO_TIMEOUT"),iy=oo,sy=oe+1,uy=or+1,cy=Vn+1,py=2,tl=4,JT=iy*sy*uy*cy*py*tl*tl;if(Tu.length!==xp.length||Tu.length<JT)throw new RangeError("fast scalar hash table is too small for the configured state space");function eR(e,n){if(e===n)return!0;if(e?.length!==n.length)return!1;for(let o=0;o<n.length;o+=1)if(we(e,o)!==we(n,o))return!1;return!0}c(eR,"sameSquares");var Gu=class{static{c(this,"FastSearcher")}#e=[];#o=[];#n=[];#t;#r=new Int32Array(mt*2);#a=new Int32Array(oo*121*121);#u=new Int32Array(mt+1);#s=new Int32Array(ss);#c=new Int32Array(ss);#d=new Int32Array(ss);#f=new Float64Array(ss);#m=0;#y;#p=0;#S;#i=_u;#h=Bu;#k=0;#C=0;#R=0;#l=!1;#A=!1;#b=0;#P=oy;constructor(){this.#t=new Lu;for(let n=0;n<=mt;n+=1)this.#e.push(new Ou),this.#o.push(new Int32Array(Ft)),this.#n.push(new Int32Array(Ft))}get root(){return $n(this.#e,0)}get size(){return this.#t.entries}search(n,o,t=lr){let r=Qf(n),a=Hf(t);if(this.#A=!1,this.#b=0,zp(this.root)!==-1)return{move:0,score:0,depth:0,nodes:0,supported:!0};this.#i=Uf(a);let i=r.tuning;this.#h=i,this.#k=i.winsNextTurnThreat;let s=!eR(this.#S,this.root.squares);(a!==this.#y||i.winsNextTurnThreat!==this.#p||s)&&(this.#y=a,this.#p=i.winsNextTurnThreat,this.#S=this.root.squares,this.#m>=qT&&(this.#m=0,this.#d.fill(0)),this.#m+=1),this.#C=0,this.#R=r.maxNodes,this.#l=!1,this.#P=o,this.#t.deactivate();try{this.#r.fill(0),this.#a.fill(0);let u=0,p=0,l=0;for(let m=1;m<=r.maxDepth;m+=1){if(m===2){if(this.#C>=this.#R||!this.#t.prepare(this.#P)){this.#l=!0;break}this.#N()}let d=-fr,f=fr;i.aspirationDelta>0&&l>0&&m>=i.aspirationMinDepth&&(d=p-i.aspirationDelta,f=p+i.aspirationDelta);let y=this.#g(m,u,d,f),b=0;for(;!this.#M()&&y.move!==0&&(y.score<=d||y.score>=f)&&(d>-fr||f<fr);){b+=1;let C=i.aspirationDelta*(1<<b);y.score<=d&&(d=b>=2?-fr:y.score-C),y.score>=f&&(f=b>=2?fr:y.score+C),y=this.#g(m,y.move,d,f)}if(y.move===0)break;if(this.#M()){l===0&&(u=y.move,p=y.score);break}if(u=y.move,p=y.score,l=m,!y.selective&&p>=_t-mt)break}return{move:u,score:p,depth:l,nodes:this.#C,supported:!this.#A}}finally{this.#t.deactivate(),this.#i=_u,this.#h=Bu,this.#k=0,this.#P=oy}}#N(){this.#t.generation+=1,this.#t.generation>ny&&this.#t.clear()}#g(n,o,t,r){let a=$n(this.#e,0),i=$n(this.#o,0),s=ol(a,i,$n(this.#n,0));if(s===0)return{move:0,score:0,selective:!1};this.#I(a,i,s,0,o);let u=$n(this.#n,0),p=t,l=0,m=-fr,d=!1;for(let f=0;f<s;f+=1){this.#x(i,u,f,s);let y=v(i,f),b,C=this.#b,h;if(f===0?(b=this.#T(a,y,0,n-1,p,r),h=this.#b!==C):(b=this.#T(a,y,0,n-1,p,p+1),h=this.#b!==C,b>p&&!this.#M()&&(C=this.#b,b=this.#T(a,y,0,n-1,p,r),h=this.#b!==C)),this.#M()||(b>m&&(m=b,l=y,d=h,b>p&&(p=b)),p>=r))break}return l===0&&(l=v(i,0),m=0,d=!0),{move:l,score:m,selective:d}}#T(n,o,t,r,a,i){let s=$n(this.#e,t+1);s.copyFrom(n),this.#u[t]=o;let u=wf(s,o);return u===Up?(this.#A=!0,this.#l=!0,0):u!==-1?u===n.active?_t-t:-(_t-t):s.active===n.active?this.#v(r,t+1,a,i):-this.#v(r,t+1,-i,-a)}#v(n,o,t,r){if(!this.#E())return 0;let a=$n(this.#e,o);if(o>=mt-2)return this.#w(a);if(n<=0)return this.#w(a);let i=t,s=this.#D(a,o),u=ty(a),p=ry(a,u,s),l=ay(a,u,s),m=this.#t,d=(p^l*3)&m.mask,f=0,y=v(m.info,d),b=v(m.keyLo,d)===p&&v(m.keyHi,d)===l&&(y>>>8&ny)===m.generation;if(b&&(f=v(m.move,d),(y>>2&63)>=n)){let re=v(m.score,d),Se=y&3;if(Se===Zf||Se===Jf&&re>=r||Se===ey&&re<=i)return re}let C=this.#h,h=$n(this.#o,o),k=ol(a,h,$n(this.#n,o));if(k===0)return this.#w(a,p,l);s!==0&&(k=this.#_(h,k,s,o)),this.#I(a,h,k,o,f);let M=$n(this.#n,o),T=k;if(C.moveCountPruning&&n<=C.moveCountDepth){let W=C.moveCountBase+C.moveCountFactor*n;W<T&&(T=W)}let P=n<=2;if(P&&!this.#E()||this.#M())return 0;let E=!1,O=!1,g=-fr,x=0,_=this.#b;for(let W=0;W<k;W+=1){this.#x(h,M,W,k);let re=v(h,W),Se=v(M,W)>=YT;if(!Se&&x!==0){let Y=W>=T;if(!Y&&P&&(E||(O=this.#O(a,p,l)+C.futilityMargin*n<=t,E=!0),Y=O),Y){this.#b+=1;break}}let q;if(W===0)q=this.#T(a,re,o,n-1,i,r);else{let Y=0;C.lateMoveReduction&&!Se&&n>=3&&W>=C.lateMoveIndex&&(Y=W>=C.lateMoveDeepIndex?2:1,Y>=n&&(Y=n-1)),q=this.#T(a,re,o,n-1-Y,i,i+1),!this.#M()&&q>i&&(Y>0||q<r)&&(q=this.#T(a,re,o,n-1,i,r))}if(this.#M())return 0;if(q>g&&(g=q,x=re),q>i&&(i=q),i>=r){this.#F(a,re,o,n,Se);break}}if(x===0)return this.#w(a);let j=this.#b!==_?zT:g>=r?Jf:g<=t?ey:Zf,z=g,J=n;if(z<_t-mt&&z>-_t+mt){let W=y>>2&63;(!b||J>=W)&&(y===0&&v(m.info,d)===0&&(m.entries+=1),m.keyLo[d]=p,m.keyHi[d]=l,m.score[d]=z,m.info[d]=m.generation<<8|J<<2|j,m.move[d]=x)}return g}#D(n,o){if(o===0)return 0;let t=v(this.#u,o-1);return ja(t)===lt&&$n(this.#e,o-1).active===n.active?t:0}#_(n,o,t,r){let a=nt(t),i=Co(t),s=$n(this.#n,r),u=0;for(let p=0;p<o;p+=1){let l=v(n,p);if(ja(l)===lt&&l<t){let m=nt(l),d=Co(l);if(m!==a&&m!==i&&d!==a&&d!==i)continue}n[u]=l,s[u]=v(s,p),u+=1}return u===0?o:u}#M(){return this.#l}#E(){return this.#l?!1:this.#C>=this.#R?(this.#l=!0,!1):(this.#C+=1,(this.#C&$T)===0&&this.#P()?(this.#l=!0,!1):!0)}#O(n,o,t){let r=o,a=t;if(r===void 0||a===void 0){let p=ty(n);r=ry(n,p),a=ay(n,p)}let i=(r^a*3)&KT,s;v(this.#d,i)===this.#m&&v(this.#s,i)===r&&v(this.#c,i)===a?s=this.#f[i]??0:(s=zf(n,this.#i,this.#k),this.#s[i]=r,this.#c[i]=a,this.#f[i]=s,this.#d[i]=this.#m);let u=n.active===0?s:-s;return u>mr?mr:u<-mr?-mr:u}#w(n,o,t){return this.#E()?this.#O(n,o,t):0}#F(n,o,t,r,a){if(a)return;let i=t*2;v(this.#r,i)!==o&&(this.#r[i+1]=v(this.#r,i),this.#r[i]=o);let s=n.active*121*121+nt(o)*121+Co(o),u=v(this.#a,s)+r*r;this.#a[s]=u>1<<20?1<<20:u}#I(n,o,t,r,a){let i=$n(this.#n,r),s=v(this.#r,r*2),u=v(this.#r,r*2+1),p=n.active*121*121;for(let l=0;l<t;l+=1){let m=v(o,l),d=v(i,l);if(m===a)d+=XT;else if(m===s)d+=QT;else if(m===u)d+=ZT;else{let f=v(this.#a,p+nt(m)*121+Co(m));d+=f>8191?8191:f}i[l]=d}}#x(n,o,t,r){let a=t,i=v(o,t);for(let u=t+1;u<r;u+=1){let p=v(o,u);p>i&&(i=p,a=u)}if(a===t)return;let s=v(n,t);n[t]=v(n,a),n[a]=s,o[a]=v(o,t),o[t]=i}};function ty(e){let n=v(e.potions,0),o=v(e.potions,1),t=n>2?3:n,a=o>2?3:o;return a=t+tl*a,a=(e.firstTurn?1:0)+py*a,a=e.actionsUsed+cy*a,a=e.manaMoves+uy*a,a=e.monsMoves+sy*a,e.active+iy*a}c(ty,"scalarIndex");function ry(e,n,o=0){return e.hashLo^v(Tu,n)^e.whiteScore*2654435761^e.blackScore*2135587861^v(e.potions,0)^Math.imul(o,668265261)}c(ry,"stateKeyLo");function ay(e,n,o=0){return e.hashHi^v(xp,n)^e.whiteScore*2246822507^e.blackScore*3266489909^v(e.potions,1)^Math.imul(o,374761393)}c(ay,"stateKeyHi");function ly(){return globalThis.WeakRef}c(ly,"systemWeakRefConstructor");function nR(){try{return new Ou}catch(e){if(e instanceof RangeError)return Fa;throw e}}c(nR,"tryCreateDefaultFastPosition");function oR(e){let n=ly();return n===void 0?void 0:new n(e)}c(oR,"systemWeakFastSearcher");var rl=class{static{c(this,"FastSearcherPool")}#e;run(n){let o=this.#e?.deref();if(o===void 0)try{o=new Gu}catch(t){if(t instanceof RangeError)return Fa;throw t}this.#e=void 0;try{return n(o)}catch(t){if(Wa(t))return Fa;throw t}finally{this.#o(o)}}#o(n){this.#e??=oR(n)}},tR=new rl,rR=Object.freeze({lateMoveReduction:!0,lateMoveIndex:2,lateMoveDeepIndex:6,moveCountPruning:!0,moveCountDepth:3,moveCountBase:7,moveCountFactor:7,futilityMargin:900,aspirationDelta:600,aspirationMinDepth:2,winsNextTurnThreat:0}),aR=Object.freeze({lateMoveReduction:!0,lateMoveIndex:2,lateMoveDeepIndex:6,moveCountPruning:!0,moveCountDepth:3,moveCountBase:7,moveCountFactor:7,futilityMargin:900,aspirationDelta:600,aspirationMinDepth:2,winsNextTurnThreat:2500}),iR=Object.freeze({lateMoveReduction:!0,lateMoveIndex:3,lateMoveDeepIndex:8,moveCountPruning:!0,moveCountDepth:3,moveCountBase:4,moveCountFactor:5,futilityMargin:900,aspirationDelta:0,aspirationMinDepth:3,winsNextTurnThreat:0}),sR=Object.freeze({fast:Object.freeze({budgetMs:16,limits:Object.freeze({maxDepth:40,maxNodes:38400,tuning:aR})}),normal:Object.freeze({budgetMs:75,limits:Object.freeze({maxDepth:40,maxNodes:184e3,tuning:rR})}),pro:Object.freeze({budgetMs:460,limits:Object.freeze({maxDepth:40,maxNodes:2e6,tuning:iR})})});function al(e,n,o){let t=sR[o];return o!=="pro"&&ly()===void 0?{kind:"unsupported",fallbackInputs:[]}:e.session.withUnrecordedDeadlineIfAbsent(t.budgetMs,()=>{if(e.session.checkpoint())return{kind:"supported",inputs:[]};if(n.winnerColor()!==void 0)return{kind:"supported",inputs:[]};let r=e.session.now()+t.budgetMs,a=c(()=>e.session.checkpoint()?!0:e.session.now()<r?!1:(e.session.checkpoint(),!0),"deadlineReached"),i=nR();if(Wa(i))return{kind:"unsupported",fallbackInputs:[]};if(o!=="pro"&&a())return{kind:"supported",inputs:[]};if(!vf(i,n,t.limits.maxDepth))return{kind:"unsupported",fallbackInputs:[]};if(o==="pro"?e.session.checkpoint():a())return{kind:"supported",inputs:[]};let s=tR.run(u=>{if(!(o!=="pro"&&a())&&(u.root.copyFrom(i),!(o==="pro"?e.session.checkpoint():a())))return u.search(t.limits,a,lr)});return Wa(s)?{kind:"unsupported",fallbackInputs:[]}:s===void 0?{kind:"supported",inputs:[]}:(e.session.checkpoint(),s.supported?{kind:"supported",inputs:s.move===0?[]:$p(s.move)}:{kind:"unsupported",fallbackInputs:s.depth>0&&s.move!==0?$p(s.move):[]})})}c(al,"selectPackedFastSelection");function dy(e,n){return al(e,n,"pro")}c(dy,"selectProFastSelection");function my(e){return e===void 0?void 0:{i:e.i,j:e.j}}c(my,"detachedLocation");function il(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(il,"detachedLocations");function ea(e){let n=e;return n===R.White?0:n===R.Black?1:void 0}c(ea,"boardColorIndex");var $a=class{constructor(n=vt,o,t,r=!1){this.variant=n;if(t!==void 0){this.storage=t;return}let a=o??tf(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:Ur(i)),occupiedEntries:void 0,categoryDerived:void 0}}variant;static{c(this,"Board")}storage;get items(){return[...this.storage.itemSlots]}static fromItems(n,o){return new yr(o,n)}fork(){let n=new yr(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(Zo(n))return this.storage.itemSlots[Q(n)]}itemAtIndex(n){return this.storage.itemSlots[n]}squareAt(n){return zr(n),Op(n,this.variant)}allMonsBases(){return Xr}supermanaBase(){return Ki}allMonsLocations(n){let o=ea(n);return o===void 0?[]:il(this.getCategoryDerived().monsLocations[o])}allFreeRegularManaLocations(n){let o=ea(n);return o===void 0?[]:il(this.getCategoryDerived().freeRegularManaLocations[o])}base(n){return rf(n.kind,n.color)}faintedMonsLocations(n){let o=ea(n);return o===void 0?[]:il(this.getCategoryDerived().faintedMonsLocations[o])}findMana(n){let o=ea(n);if(o!==void 0)return my(this.getCategoryDerived().freeRegularManaLocations[o][0])}findAwakeAngel(n){let o=ea(n);if(o!==void 0)return my(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(!qm(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=vp[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 l=0;l<121;l+=1){let m=this.storage.itemSlots[l];if(m!==void 0){let d=vp[l];if(d!==void 0){let f=G(m);if(f!==void 0){let y=ea(f.color);if(y===void 0)continue;(y===0?n:o).push(d),m.kind==="mon"&&H(f)?(y===0?a:i).push(d):f.kind===w.Angel&&!H(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=ea(m.mana.color);y!==void 0&&(y===0?t:r).push(d)}}}}let p={monsLocations:[n,o],freeRegularManaLocations:[t,r],faintedMonsLocations:[a,i],awakeAngelLocations:[s,u]};return this.storage.categoryDerived=p,p}entries(){return this.getOccupiedEntries().values()}},yr=class extends $a{static{c(this,"MutableBoard")}#e;delete(n){zr(n),this.storage.itemSlots[Q(n)]=void 0,this.storage.occupiedEntries=void 0,this.storage.categoryDerived=void 0}set(n,o){zr(n),this.storage.itemSlots[Q(n)]=Ur(o),this.storage.occupiedEntries=void 0,this.storage.categoryDerived=void 0}readonlyView(){return this.#e??=new $a(this.variant,void 0,this.storage),this.#e}};function fy(e,n){return e.variant!==n.variant?!1:e.itemsEqual(n)}c(fy,"boardEquals");function us(e){return e===R.White?"w":"b"}c(us,"colorFen");function Lo(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 w.Demon:return"e";case w.Drainer:return"d";case w.Angel:return"a";case w.Spirit:return"s";case w.Mystic:return"y"}})();return`${e.color===R.White?n.toUpperCase():n}${e.cooldown}`}c(Lo,"monFen");function uR(e,n){let o,t;switch(e.charCodeAt(n)){case 69:o=R.White,t=w.Demon;break;case 101:o=R.Black,t=w.Demon;break;case 68:o=R.White,t=w.Drainer;break;case 100:o=R.Black,t=w.Drainer;break;case 65:o=R.White,t=w.Angel;break;case 97:o=R.Black,t=w.Angel;break;case 83:o=R.White,t=w.Spirit;break;case 115:o=R.Black,t=w.Spirit;break;case 89:o=R.White,t=w.Mystic;break;case 121:o=R.Black,t=w.Mystic;break;default:return}let r=e.charCodeAt(n+1);return r<48||r>50?void 0:jr(t,o,r-48)}c(uR,"parseMonFenAt");function na(e){return e.kind==="supermana"?"U":e.color===R.White?"M":"m"}c(na,"manaFen");function yy(e){switch(e){case 77:return Na(R.White);case 109:return Na(R.Black);case 85:return Qt;default:return}}c(yy,"parseManaCode");function Sy(e){switch(e){case K.Potion:return"P";case K.Bomb:return"B";case K.BombOrPotion:return"Q"}}c(Sy,"consumableFen");function hy(e){switch(e){case 80:return K.Potion;case 66:return K.Bomb;case 81:return K.BombOrPotion;default:return}}c(hy,"parseConsumableCode");function Ya(e){switch(e.kind){case"mon":return`${Lo(e.mon)}x`;case"mana":return`xx${na(e.mana)}`;case"mon-with-mana":return`${Lo(e.mon)}${na(e.mana)}`;case"mon-with-consumable":return`${Lo(e.mon)}${Sy(e.consumable)}`;case"consumable":return`xx${Sy(e.consumable)}`}}c(Ya,"itemFen");function by(e,n){let o=e.charCodeAt(n),t=e.charCodeAt(n+2);if(o===120){if(e.charCodeAt(n+1)!==120)return;let s=yy(t);if(s!==void 0)return it(s);let u=hy(t);return u===void 0?void 0:Vi(u)}let r=uR(e,n);if(r===void 0)return;let a=yy(t);if(a!==void 0)return Qo(r,a);let i=hy(t);return i!==void 0?Gi(r,i):t===120?Kn(r):void 0}c(by,"parseItemFenAt");var Cy=be+1,cR=Object.freeze(["","n01","n02","n03","n04","n05","n06","n07","n08","n09","n10","n11"]);function pR(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+=My(a),a=0),n+=Ya(i)}a>0&&(n+=My(a))}return n}c(pR,"boardFen");function lR(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 l=e.charCodeAt(a+1)-48,m=e.charCodeAt(a+2)-48;if(l<0||l>9||m<0||m>9)return;let d=l*10+m;if(d<1||s+d>11)return;s+=d,a+=3,u=!0;continue}if(a+2>=o||s>=11)return;let p=by(e,a);if(p===void 0)return;r[i*11+s]=p,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 yr(t,r,void 0,!0)}c(lR,"parseBoardFenRange");function ky(e){let n=`${e.whiteScore} ${e.blackScore} ${us(e.activeColor)} ${e.actionsUsedCount} ${e.manaMovesCount} ${e.monsMovesCount} ${e.whitePotionsCount} ${e.blackPotionsCount} ${e.turnNumber} ${pR(e.board)}`,o=e.board.variant;return o===vt?n:`${n} ${ji(o)}`}c(ky,"gameFen");function Ty(e){let n=0,o=c(h=>{let k=n,M=0,T=!1;for(;n<e.length;){let P=e.charCodeAt(n);if(P===32)break;if(P<48||P>57)return-1;if(n===k)T=P===48;else if(T)return-1;if(M=M*10+(P-48),!Number.isSafeInteger(M))return-1;n+=1}if(n===k)return-1;if(h){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?R.White:a===98?R.Black:void 0;if(i===void 0||e.charCodeAt(n+1)!==32)return;n+=2;let s=o(!0),u=o(!0),p=o(!0),l=o(!0),m=o(!0),d=o(!0);if(t<0||r<0||s<0||u<0||p<0||l<0||m<0||d<0||t>Cy||r>Cy||s>Vn||u>or||p>oe||d<1)return;let f=n;for(;n<e.length&&e.charCodeAt(n)!==32;)n+=1;let y=n,b=vt;if(n<e.length){n+=1;let h=o(!1),k=of(h);if(k===void 0||k===vt)return;b=k}let C=lR(e,f,y,b);if(C!==void 0)return{board:C,whiteScore:t,blackScore:r,activeColor:i,actionsUsedCount:s,manaMovesCount:u,monsMovesCount:p,whitePotionsCount:l,blackPotionsCount:m,turnNumber:d}}c(Ty,"parseGameFen");function My(e){return cR[e]??""}c(My,"emptyRunFen");function Ry(e){return{whiteScore:e.whiteScore,blackScore:e.blackScore,activeColor:e.activeColor,actionsUsedCount:e.actionsUsedCount,manaMovesCount:e.manaMovesCount,monsMovesCount:e.monsMovesCount,whitePotionsCount:e.whitePotionsCount,blackPotionsCount:e.blackPotionsCount}}c(Ry,"copyRulesCounters");function Vu(e,n,o,t){let r=e[n]+o;return t&&!Number.isSafeInteger(r)?!1:(e[n]=r,!0)}c(Vu,"addCounter");function sl(e,n,o,t){if(e.actionsUsedCount<Vn)return e.actionsUsedCount+=1,{valid:!0};let r=e.activeColor===R.White?"whitePotionsCount":"blackPotionsCount";return t&&e[r]<=0?{valid:!1}:(e[r]-=1,{valid:!0,potionUse:{from:n,to:o}})}c(sl,"consumeAction");function ul(e,n,o,t){switch(n.kind){case"mon-move":return{valid:Vu(e,"monsMovesCount",1,t)};case"mana-move":return{valid:Vu(e,"manaMovesCount",1,t)};case"mana-scored":{let r=e.activeColor===R.White?"whiteScore":"blackScore";return{valid:Vu(e,r,Fe(n.mana,e.activeColor),t)}}case"mystic-action":return sl(e,n.from,n.to,t);case"demon-action":{let a=o.find(i=>i.kind==="demon-additional-step")?.to??n.to;return sl(e,a,a,t)}case"spirit-target-move":return sl(e,n.by,n.to,t);case"pickup-potion":{let r=G(n.by);if(r===void 0)return{valid:!0};let a=r.color===R.White?"whitePotionsCount":"blackPotionsCount";return{valid:Vu(e,a,1,t)}}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":return{valid:!0}}}c(ul,"projectEventCounters");function cl(e,n){let o=Ry(e);for(let r of n)if(!ul(o,r,n,!0).valid)return!1;if(e.turnNumber<Number.MAX_SAFE_INTEGER)return!0;let t={...e,board:e.board.fork(),turnNumber:Number.MAX_SAFE_INTEGER-1};return!Hu(t,n).turnAdvanced}c(cl,"canApplyRulesEvents");function dR(e,n,o,t){let r=ul(e,n,o,!1);switch(r.valid&&r.potionUse!==void 0&&t.push({kind:"use-potion",...r.potionUse}),n.kind){case"mon-move":e.board.delete(n.from),e.board.set(n.to,n.item);break;case"mana-move":e.board.delete(n.from),e.board.set(n.to,it(n.mana));break;case"mana-scored":{let a=e.board.get(n.at);if(a!==void 0){let i=G(a);i===void 0?e.board.delete(n.at):e.board.set(n.at,Kn(i))}break}case"mystic-action":e.board.delete(n.to);break;case"demon-action":{e.board.delete(n.from),o.find(i=>i.kind==="demon-additional-step")?.to===void 0?e.board.set(n.to,Kn(n.demon)):e.board.delete(n.to);break}case"demon-additional-step":e.board.set(n.to,Kn(n.demon));break;case"spirit-target-move":e.board.delete(n.from),e.board.set(n.to,n.item);break;case"pickup-bomb":e.board.set(n.at,Gi(n.by,K.Bomb));break;case"pickup-potion":{if(G(n.by)===void 0)break;e.board.set(n.at,n.by);break}case"pickup-mana":e.board.set(n.at,Qo(n.by,n.mana));break;case"mon-fainted":e.board.set(n.to,Kn(jm(n.mon)));break;case"mana-dropped":e.board.set(n.at,it(n.mana));break;case"supermana-back-to-base":{let a=e.board.get(n.to);e.board.set(n.to,a?.kind==="mon"?Qo(a.mon,Qt):it(Qt));break}case"bomb-attack":e.board.delete(n.to),e.board.set(n.from,Kn(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(dR,"applyEvent");function mR(e,n){e.activeColor=B(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:G(t);if(r===void 0)continue;let a=Km(r);H(a)||n.push({kind:"mon-awake",mon:a,at:o}),e.board.set(o,Kn(a))}}c(mR,"advanceTurn");function Hu(e,n){let o=[];for(let a of n)dR(e,a,n,o);let t=wu(e),r=!1;return t!==void 0?o.push({kind:"game-over",winner:t}):Cf(e)&&(mR(e,o),r=!0),{events:[...n,...o],turnAdvanced:r,winner:t}}c(Hu,"applyRulesEvents");var cs=Symbol("cache-miss"),Ay=Symbol("cached-undefined"),Uu=Object.freeze({completionViability:16384,secondInputOptions:4096,secondStage:8192,thirdStage:8192});function fR(e){return e===void 0?void 0:[e[0].map(Kr),e[1].map(Da)]}c(fR,"copyStageResult");function Py(e){return e===void 0?Ay:[e[0].map(Kr),e[1].map(Da)]}c(Py,"storeStageResult");function wy(e){return e===Ay?void 0:fR(e)}c(wy,"copyStoredStageResult");function ju(e,n,o,t){e.size>=t&&!e.has(n)&&e.clear(),e.set(n,o)}c(ju,"setBounded");var Ku=class{static{c(this,"RulesQueryCache")}#e;#o;#n;#t;#r;invalidate(){this.#e=void 0,this.#o=void 0,this.#n=void 0,this.#t=void 0,this.#r=void 0}getStartSuggestion(n){let o=this.#e?.[n];return o===void 0?void 0:Ep(o)}setStartSuggestion(n,o){(this.#e??=new Array(4))[n]=Ep(o)}getCompletionViability(n){return this.#o?.get(n)}setCompletionViability(n,o){ju(this.#o??=new Map,n,o,Uu.completionViability)}getSecondInputOptions(n){let o=this.#n?.get(n);return o===void 0?void 0:o.map(Da)}setSecondInputOptions(n,o){ju(this.#n??=new Map,n,o.map(Da),Uu.secondInputOptions)}lookupSecondStage(n){let o=this.#t?.get(n);return o===void 0?cs:wy(o)}setSecondStage(n,o){ju(this.#t??=new Map,n,Py(o),Uu.secondStage)}lookupThirdStage(n){let o=this.#r?.get(n);return o===void 0?cs:wy(o)}setThirdStage(n,o){ju(this.#r??=new Map,n,Py(o),Uu.thirdStage)}};function ps(e){return e.map(n=>({fen:n.fen,color:n.color,events:n.events.map(Kr)}))}c(ps,"copyTrackingEntries");var qu=class e{static{c(this,"GameHistory")}#e=[];#o=[];#n=!0;#t;#r=!0;constructor(n=!1){this.#t=n}get takebackFens(){return[...this.#e]}get trackingEntries(){return ps(this.#o)}get movesVerified(){return this.#n}get verboseTrackingEnabled(){return this.#t}get eventApplicationTrackingEnabled(){return this.#r||this.#t}copy(){let n=new e(this.#t);return n.#e=[...this.#e],n.#o=ps(this.#o),n.#n=this.#n,n.#r=this.#r,n}fork(){let n=new e(!1);return n.#n=this.#n,n.#r=!1,n}resetForLoadedFen(){this.#a()}resetForBoardReplacement(){this.#a()}#a(){this.#e=[],this.#o=[],this.#n=!1}replace(n){n.takebackFens!==void 0&&(this.#e=[...n.takebackFens]),n.trackingEntries!==void 0&&(this.#o=ps(n.trackingEntries)),n.movesVerified!==void 0&&(this.#n=n.movesVerified),n.verboseTrackingEnabled!==void 0&&(this.#t=n.verboseTrackingEnabled,n.verboseTrackingEnabled||(this.#o=[]))}setTakebackTracking(n){this.#r=n,n||(this.#e=[])}setVerboseTracking(n){this.#t=n,n||(this.#o=[])}canTakeback(n,o){return this.#r&&this.#e.length>1&&n===o}prepareTakeback(n,o){if(!this.canTakeback(n,o))return;let t=this.#e[this.#e.length-2];if(t!==void 0)return{previousFen:t,takebackFens:this.#e.slice(0,-1),trackingEntries:ps(this.#o.slice(0,-1))}}commitTakeback(n){this.#e=[...n.takebackFens],this.#o=ps(n.trackingEntries)}beginEventApplication(n,o){if(!this.#r||this.#e.length!==0)return;let t=n();this.#e.push(t),this.#t&&this.#o.length===0&&this.#o.push({fen:t,color:o,events:[]})}completeEventApplication(n){let o,t=c(()=>o??=n.snapshotFen(),"snapshotFen");this.#r&&(n.winner!==void 0?this.#e=[]:n.turnAdvanced?this.#e=[t()]:this.#e.push(t())),this.#t&&this.#o.push({fen:t(),color:n.color,events:n.events.map(Kr)})}};var Ey=Object.freeze({includeManaStartsWithPotionAction:!1}),jn=Object.freeze({includeManaStartsWithPotionAction:!0});function Mo(e,n,o){return o===void 0?{input:e,kind:n}:{input:e,kind:n,actorMonItem:o}}c(Mo,"nextInput");function gy(e){let n=[],o;for(let t of e)t.kind!==o&&(n.push(t),o=t.kind);return n}c(gy,"firstOptionFromEachKindGroup");function pl(e,n){return e!==void 0&&ne(e,n)===1}c(pl,"isLocationGuardedByAngelLocation");function vy(e,n,o,t){if(o!==void 0){for(let a of e)if(_e(a,o))return t(o)?[Mo({kind:"location",location:o},n)]:[];return[]}let r=[];for(let a of e)t(a)&&r.push(Mo({kind:"location",location:a},n));return r}c(vy,"nextInputsFromLocations");function Oy(e,n,o,t){let r=e.board.squareAt(n),a=[];switch(o.kind){case"mon":{let i=o.mon;if(i.color!==e.activeColor||H(i))break;if(e.playerCanMoveMon()&&a.push(...e.nextInputsFromLocations(me(n),ge.MonMove,t,s=>{let u=e.board.get(s),p=e.board.squareAt(s),l;switch(u?.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":l=!1;break;case"mana":l=i.kind===w.Drainer;break;case"consumable":case void 0:l=!0;break}if(!l)return!1;switch(p.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":return i.kind===w.Drainer&&(u===void 0||u.kind==="mana"&&u.mana.kind==="supermana");case"mon-base":return p.monKind===i.kind&&p.color===i.color}})),r.kind!=="mon-base"&&e.playerCanUseAction())switch(i.kind){case w.Angel:case w.Drainer:break;case w.Mystic:{let s=e.board.findAwakeAngel(B(e.activeColor));a.push(...e.nextInputsFromLocations(No(n),ge.MysticAction,t,u=>{let p=e.board.get(u);if(p===void 0||pl(s,u))return!1;let l=G(p);return l!==void 0&&i.color!==l.color&&!H(l)}));break}case w.Demon:{let s=e.board.findAwakeAngel(B(e.activeColor));a.push(...e.nextInputsFromLocations(Do(n),ge.DemonAction,t,u=>{let p=e.board.get(u),l=Zt(n,u),m=e.board.squareAt(l);if(p===void 0||pl(s,u)||e.board.get(l)!==void 0||m.kind==="supermana-base"||m.kind==="mon-base")return!1;let d=G(p);return d!==void 0&&i.color!==d.color&&!H(d)}));break}case w.Spirit:a.push(...e.nextInputsFromLocations(_o(n),ge.SpiritTargetCapture,t,s=>{let u=e.board.get(s);return u===void 0?!1:st(u)}));break}break}case"mana":o.mana.kind==="regular"&&o.mana.color===e.activeColor&&e.playerCanMoveMana()&&a.push(...e.nextInputsFromLocations(me(n),ge.ManaMove,t,i=>Fp(e.board,i)));break;case"mon-with-mana":o.mon.color===e.activeColor&&e.playerCanMoveMon()&&a.push(...e.nextInputsFromLocations(me(n),ge.MonMove,t,i=>{let s=e.board.get(i),u=e.board.squareAt(i);switch(s?.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return!1;case"mana":case"consumable":return!0;case void 0:return Qr(u)?!0:u.kind==="supermana-base"&&o.mana.kind==="supermana"}}));break;case"mon-with-consumable":{let i=o.mon;if(i.color!==e.activeColor)break;e.playerCanMoveMon()&&a.push(...e.nextInputsFromLocations(me(n),ge.MonMove,t,s=>{let u=e.board.get(s),p=e.board.squareAt(s);switch(u?.kind){case"mon":case"mana":case"mon-with-mana":case"mon-with-consumable":return!1;case"consumable":return!0;case void 0:return Qr(p)}})),o.consumable===K.Bomb&&a.push(...e.nextInputsFromLocations(Jt(n),ge.BombAttack,t,s=>{let u=e.board.get(s),p=u===void 0?void 0:G(u);return p!==void 0&&i.color!==p.color&&!H(p)}));break}case"consumable":break}return a}c(Oy,"generateSecondInputOptions");function Iy(e,n,o,t,r){let a=[],i=[],s=e.board.squareAt(r),u=e.board.get(r);switch(n){case ge.MonMove:{let p=G(o);if(p===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 l=qn(o);l!==void 0&&i.push({kind:"mana-dropped",mana:l,at:t}),i.push({kind:"pickup-mana",mana:u.mana,by:p,at:r});break}case"consumable":switch(u.consumable){case K.Bomb:case K.Potion:return;case K.BombOrPotion:qr(o)!==void 0||qn(o)!==void 0?i.push({kind:"pickup-potion",by:o,at:r}):(a.push(Mo({kind:"modifier",modifier:Ye.SelectBomb},ge.SelectConsumable,o)),a.push(Mo({kind:"modifier",modifier:Ye.SelectPotion},ge.SelectConsumable,o)));break}break}if(s.kind==="mana-pool"){let l=qn(o);l!==void 0&&i.push({kind:"mana-scored",mana:l,at:r})}break}case ge.ManaMove:{if(o.kind!=="mana")return;let p=o.mana;if(i.push({kind:"mana-move",mana:p,from:t,to:r}),u!==void 0){if(u.kind!=="mon")return;i.push({kind:"pickup-mana",mana:p,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:p,at:r});break;case"mon-base":case"supermana-base":return}break}case ge.MysticAction:{if(o.kind!=="mon")return;if(i.push({kind:"mystic-action",mystic:o.mon,from:t,to:r}),u!==void 0){let p=G(u);if(p===void 0)return;if(i.push({kind:"mon-fainted",mon:p,from:r,to:e.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:e.board.supermanaBase()})),u.kind==="mon-with-consumable")switch(u.consumable){case K.Bomb:i.push({kind:"bomb-explosion",at:r});break;case K.Potion:case K.BombOrPotion:return}}break}case ge.DemonAction:{if(o.kind!=="mon")return;let p=o.mon;i.push({kind:"demon-action",demon:p,from:t,to:r});let l=!1;if(u!==void 0){let m=G(u);if(m===void 0)return;if(i.push({kind:"mon-fainted",mon:m,from:r,to:e.board.base(m)}),u.kind==="mon-with-mana"&&(u.mana.kind==="regular"?(l=!0,i.push({kind:"mana-dropped",mana:u.mana,at:r})):i.push({kind:"supermana-back-to-base",from:r,to:e.board.supermanaBase()})),u.kind==="mon-with-consumable")switch(u.consumable){case K.Bomb:i.push({kind:"bomb-explosion",at:r}),i.push({kind:"mon-fainted",mon:p,from:r,to:e.board.base(p)});break;case K.Potion:case K.BombOrPotion:return}}if((s.kind==="supermana-base"||s.kind==="mon-base")&&(l=!0),l)for(let m of me(r)){let d=e.board.get(m),f=e.board.squareAt(m);d!==void 0&&d.kind!=="consumable"||(Qr(f)?a.push(Mo({kind:"location",location:m},ge.DemonAdditionalStep)):f.kind==="mon-base"&&f.monKind===p.kind&&f.color===p.color&&a.push(Mo({kind:"location",location:m},ge.DemonAdditionalStep)))}break}case ge.SpiritTargetCapture:{if(u===void 0)return;let p=G(u),l=qn(u);a.push(...e.nextInputsFromLocations(me(r),ge.SpiritTargetMove,void 0,m=>{let d=e.board.get(m),f=e.board.squareAt(m);if(!Ua(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 l?.kind==="supermana"||l===void 0&&p?.kind===w.Drainer&&(d===void 0||y)||p?.kind===w.Drainer&&y}case"mon-base":return p?.kind===f.monKind&&p.color===f.color&&l===void 0&&qr(u)===void 0}}));break}case ge.BombAttack:{let p=G(o);if(p===void 0)return;if(i.push({kind:"bomb-attack",by:p,from:t,to:r}),u!==void 0){let l=G(u);if(l===void 0)return;if(i.push({kind:"mon-fainted",mon:l,from:r,to:e.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:e.board.supermanaBase()})),u.kind==="mon-with-consumable")switch(u.consumable){case K.Bomb:i.push({kind:"bomb-explosion",at:r});break;case K.Potion:case K.BombOrPotion:return}}break}case ge.DemonAdditionalStep:case ge.SpiritTargetMove:case ge.SelectConsumable:break}return[i,a]}c(Iy,"compileSecondInput");function xy(e,n,o,t,r){let a=e.get(r),i=[],s=[];switch(n.kind){case ge.SpiritTargetMove:{if(n.input.kind!=="location"||a===void 0)return;let u=n.input.location,p=e.get(u),l=e.squareAt(u);if(s.push({kind:"spirit-target-move",item:a,from:r,to:u,by:t}),p!==void 0)switch(a.kind){case"mon":switch(p.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return;case"mana":s.push({kind:"pickup-mana",mana:p.mana,by:a.mon,at:u});break;case"consumable":switch(p.consumable){case K.Potion:case K.Bomb:return;case K.BombOrPotion:i.push(Mo({kind:"modifier",modifier:Ye.SelectBomb},ge.SelectConsumable,a)),i.push(Mo({kind:"modifier",modifier:Ye.SelectPotion},ge.SelectConsumable,a));break}break}break;case"mana":if(p.kind!=="mon")return;s.push({kind:"pickup-mana",mana:a.mana,by:p.mon,at:u});break;case"mon-with-mana":switch(p.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:p.mana,by:a.mon,at:u});break;case"consumable":switch(p.consumable){case K.Potion:case K.Bomb:return;case K.BombOrPotion:s.push({kind:"pickup-potion",by:a,at:u});break}break}break;case"mon-with-consumable":if(p.kind!=="consumable"||p.consumable!==K.BombOrPotion)return;s.push({kind:"pickup-potion",by:a,at:u});break;case"consumable":switch(p.kind){case"mana":case"consumable":return;case"mon":i.push(Mo({kind:"modifier",modifier:Ye.SelectBomb},ge.SelectConsumable,p)),i.push(Mo({kind:"modifier",modifier:Ye.SelectPotion},ge.SelectConsumable,p));break;case"mon-with-mana":case"mon-with-consumable":switch(a.consumable){case K.Potion:case K.Bomb:return;case K.BombOrPotion:s.push({kind:"pickup-potion",by:p,at:u});break}break}break}if(l.kind==="mana-pool"){let m=qn(a);m!==void 0&&s.push({kind:"mana-scored",mana:m,at:u})}break}case ge.DemonAdditionalStep:{if(n.input.kind!=="location")return;let u=G(o);if(u===void 0)return;let p=n.input.location;s.push({kind:"demon-additional-step",demon:u,from:r,to:p});let l=e.get(p);if(l?.kind==="consumable")switch(l.consumable){case K.Potion:case K.Bomb:return;case K.BombOrPotion:i.push(Mo({kind:"modifier",modifier:Ye.SelectBomb},ge.SelectConsumable,o)),i.push(Mo({kind:"modifier",modifier:Ye.SelectPotion},ge.SelectConsumable,o));break}break}case ge.SelectConsumable:{if(n.input.kind!=="modifier")return;let u=G(o);if(u===void 0)return;switch(n.input.modifier){case Ye.SelectBomb:s.push({kind:"pickup-bomb",by:u,at:r});break;case Ye.SelectPotion:s.push({kind:"pickup-potion",by:o,at:r});break}break}case ge.MonMove:case ge.ManaMove:case ge.MysticAction:case ge.DemonAction:case ge.SpiritTargetCapture:case ge.BombAttack:return}return[s,i]}c(xy,"compileThirdInput");function Ny(e,n,o){if(e.kind!=="modifier"||n.input.kind!=="location")return;let r=o.find(i=>Et(i.input,e))?.actorMonItem,a=r===void 0?void 0:G(r);if(!(r===void 0||a===void 0))switch(e.modifier){case Ye.SelectBomb:return{kind:"pickup-bomb",by:a,at:n.input.location};case Ye.SelectPotion:return{kind:"pickup-potion",by:r,at:n.input.location}}}c(Ny,"compileFourthInput");function Dy(e,n,o){let t=[],r=Array.from({length:121},()=>!1),a=c(i=>{let s=o([{kind:"location",location:i}]);if(s.kind!=="next-input-options"||s.nextInputs.length===0)return;let u=Q(i);r[u]||(r[u]=!0,t.push(i))},"addWhenValid");for(let i of e.board.allMonsLocations(e.activeColor))a(i);if(bf(e,t.length!==0,n.includeManaStartsWithPotionAction))for(let i of e.board.allFreeRegularManaLocations(e.activeColor))a(i);return t.length===0?{kind:"invalid-input"}:{kind:"locations-to-start-from",locations:t}}c(Dy,"suggestedInputToStartWith");function _y(e,n,o,t,r,a){let i=n[0];if(i?.kind!=="location")return{kind:"invalid-input"};let s=i.location,u=e.board().get(s);if(u===void 0)return{kind:"invalid-input"};let p=n[1];if(p!==void 0&&p.kind!=="location")return{kind:"invalid-input"};let l=a&&e.requiresCounterCapacityFiltering(),m=e.secondInputOptions(s,u,o,o?void 0:p?.location);if(p===void 0){let O=t&&!l?gy(m):m,g=e.applicableInputOptions(n,O,r,l,t);return g.length===0?{kind:"invalid-input"}:{kind:"next-input-options",nextInputs:g}}let d=p.location,f=m.find(O=>Et(O.input,p));if(f===void 0)return{kind:"invalid-input"};let y=n[2],b=e.processSecondInput(f.kind,u,s,d,o),C=b?.[0]??[],h=b?.[1]??[];if(y===void 0){if(h.length!==0){let O=e.applicableInputOptions(n,h,r,l,t);return O.length===0?{kind:"invalid-input"}:{kind:"next-input-options",nextInputs:O}}return C.length===0?{kind:"invalid-input"}:e.resolveEvents(C,o)}let k=h.find(O=>Et(O.input,y));if(k===void 0)return{kind:"invalid-input"};let M=n[3],T=e.processThirdInput(k,u,s,d,o);C.push(...T?.[0]??[]);let P=T?.[1]??[];if(M===void 0){if(P.length!==0){let O=e.applicableInputOptions(n,P,r,l,t);return O.length===0?{kind:"invalid-input"}:{kind:"next-input-options",nextInputs:O}}return C.length===0?{kind:"invalid-input"}:e.resolveEvents(C,o)}let E=Ny(M,k,P);return E===void 0?{kind:"invalid-input"}:(C.push(E),e.resolveEvents(C,o))}c(_y,"dispatchStagedInput");var ko=class e{static{c(this,"MonsGame")}#e;#o;#n;#t;constructor(n=!1,o=vt,t){let r=t===void 0?new yr(o):t.fork();this.#e={board:r,whiteScore:0,blackScore:0,activeColor:R.White,actionsUsedCount:0,manaMovesCount:0,monsMovesCount:0,whitePotionsCount:0,blackPotionsCount:0,turnNumber:1},this.#o=new qu(n),this.#n=new Ku,this.#t={board:c(()=>this.board,"board"),requiresCounterCapacityFiltering:c(()=>this.#c(),"requiresCounterCapacityFiltering"),secondInputOptions:c((...a)=>this.#m(...a),"secondInputOptions"),processSecondInput:c((...a)=>this.#y(...a),"processSecondInput"),processThirdInput:c((...a)=>this.#p(...a),"processThirdInput"),applicableInputOptions:c((...a)=>this.#d(...a),"applicableInputOptions"),resolveEvents:c((...a)=>this.#S(...a),"resolveEvents")}}get board(){return this.#e.board.readonlyView()}get whiteScore(){return this.#e.whiteScore}get blackScore(){return this.#e.blackScore}get activeColor(){return this.#e.activeColor}get actionsUsedCount(){return this.#e.actionsUsedCount}get manaMovesCount(){return this.#e.manaMovesCount}get monsMovesCount(){return this.#e.monsMovesCount}get whitePotionsCount(){return this.#e.whitePotionsCount}get blackPotionsCount(){return this.#e.blackPotionsCount}get turnNumber(){return this.#e.turnNumber}get takebackFens(){return this.#o.takebackFens}get isMovesVerified(){return this.#o.movesVerified}get withVerboseTracking(){return this.#o.verboseTrackingEnabled}get verboseTrackingEntities(){return this.#o.trackingEntries}replaceHistory(n){this.#o.replace(n)}#r(n){this.#e.whiteScore=n.whiteScore,this.#e.blackScore=n.blackScore,this.#e.activeColor=n.activeColor,this.#e.actionsUsedCount=n.actionsUsedCount,this.#e.manaMovesCount=n.manaMovesCount,this.#e.monsMovesCount=n.monsMovesCount,this.#e.whitePotionsCount=n.whitePotionsCount,this.#e.blackPotionsCount=n.blackPotionsCount,this.#e.turnNumber=n.turnNumber}static#a(n,o){return new e(n,o.variant,o)}static newSimulationState(n){let o=e.#a(!1,n.board);return o.#r(n),o.#o.setTakebackTracking(!1),o}static fromFen(n,o=!1){let t=Ty(n);if(t===void 0)return;let r=e.#a(o,t.board);return r.#r(t),r.#o.resetForLoadedFen(),r}fen(){return ky(this)}copy(){let n=e.#a(this.withVerboseTracking,this.board);return n.#r(this),n.#o=this.#o.copy(),n}fork(){let n=e.#a(!1,this.board);return n.#r(this),n.#o=this.#o.fork(),n}variant(){return this.board.variant}replaceBoardItems(n){let o=Array.from({length:121},()=>{});for(let[r,a]of n)o[Q(r)]=a;let t=$a.fromItems(o,this.variant());this.#e.board=t,this.#o.resetForBoardReplacement(),this.invalidateProcessInputCache()}setTakebackHistoryTracking(n){this.#o.setTakebackTracking(n),this.invalidateProcessInputCache()}invalidateProcessInputCache(){this.#n.invalidate()}setVerboseTracking(n){this.#o.setVerboseTracking(n)}#u(n){let o=n.board.fork();this.#e.board=o,this.#r(n),this.invalidateProcessInputCache()}canTakeback(n){return this.#o.canTakeback(this.activeColor,n)}processInput(n,o,t){return this.processInputWithStartOptions(n,o,t,void 0)}processInputWithStartOptions(n,o,t,r){return this.#s(n,o,t,r??Ey)}inspectInputGrammar(n,o){return this.#s(n,!0,!1,o,!1)}#s(n,o,t,r,a=!0){if(n.length>At||this.winnerColor()!==void 0)return{kind:"invalid-input"};if(n.length===0){let s=(a?2:0)|(r.includeManaStartsWithPotionAction?1:0),u=this.#n.getStartSuggestion(s);if(u!==void 0)return u;let p=Dy(this,r,l=>this.#s(l,!0,!0,r,a));return this.#n.setStartSuggestion(s,p),p}let i=n[0];if(n.length===1&&i?.kind==="takeback"){let s=this.#o.prepareTakeback(this.activeColor,this.activeColor);if(s===void 0)return{kind:"invalid-input"};let u=e.fromFen(s.previousFen,!1);return u===void 0?{kind:"invalid-input"}:o?{kind:"events",events:[{kind:"takeback"}]}:(this.#u(u),this.#o.commitTakeback(s),{kind:"events",events:[{kind:"takeback"}]})}return _y(this.#t,n,o,t,r,a)}#c(){return this.turnNumber===Number.MAX_SAFE_INTEGER||this.whitePotionsCount===Number.MAX_SAFE_INTEGER||this.blackPotionsCount===Number.MAX_SAFE_INTEGER}#d(n,o,t,r,a){if(!r)return o;let i=c(u=>this.#f([...n,u.input],t),"applicable");if(!a)return o.filter(i);let s=o.find(i);return s===void 0?[]:[s]}#f(n,o){let t=`${o.includeManaStartsWithPotionAction?1:0}|${pn(n)}`,r=this.#n.getCompletionViability(t);if(r!==void 0)return r;let a=this.#s(n,!0,!1,o,!1),i=(()=>{switch(a.kind){case"invalid-input":return!1;case"events":return cl(this.#e,a.events);case"locations-to-start-from":return a.locations.some(s=>this.#f([...n,{kind:"location",location:s}],o));case"next-input-options":return a.nextInputs.some(s=>this.#f([...n,s.input],o))}})();return this.#n.setCompletionViability(t,i),i}#m(n,o,t,r){let a=String(Q(n)),i=this.#n.getSecondInputOptions(a);if(i!==void 0)return i;let s=Oy(this,n,o,r);return t&&this.#n.setSecondInputOptions(a,s),s}#y(n,o,t,r,a){let i=`${n}|${cu(o)}|${Q(t)}|${Q(r)}`,s=this.#n.lookupSecondStage(i);if(s!==cs)return s;let u=Iy(this,n,o,t,r);return a&&this.#n.setSecondStage(i,u),u}#p(n,o,t,r,a){let i=`${gp(n.input)}|${n.kind}|${n.actorMonItem===void 0?"":cu(n.actorMonItem)}|${cu(o)}|${Q(t)}|${Q(r)}`,s=this.#n.lookupThirdStage(i);if(s!==cs)return s;let u=xy(this.board,n,o,t,r);return a&&this.#n.setThirdStage(i,u),u}#S(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}}applyAndAddResultingEvents(n){return this.#i(n,this.#o.eventApplicationTrackingEnabled)}forkAndApplyEventsForSimulation(n){let o=this.fork(),t=o.#i(n,!1);return t===void 0?void 0:{game:o,events:t}}#i(n,o){if(!cl(this.#e,n))return;if(this.invalidateProcessInputCache(),!o)return Hu(this.#e,n).events;let t=c(()=>this.fen(),"snapshotFen");this.#o.beginEventApplication(t,this.activeColor);let r=Hu(this.#e,n);return this.#o.completeEventApplication({snapshotFen:t,color:this.activeColor,events:r.events,turnAdvanced:r.turnAdvanced,winner:r.winner}),r.events}nextInputsFromLocations(n,o,t,r){return vy(n,o,t,r)}availableMoveKinds(){let n=new Map;return n.set(bo.MonMove,oe-this.monsMovesCount),n.set(bo.Action,0),n.set(bo.Potion,0),n.set(bo.ManaMove,0),this.turnNumber===1||(n.set(bo.Action,Vn-this.actionsUsedCount),n.set(bo.Potion,this.playerPotionsCount()),n.set(bo.ManaMove,or-this.manaMovesCount)),n}winnerColor(){return wu(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(B(this.activeColor)).length>n.board.faintedMonsLocations(B(n.activeColor)).length}isFirstTurn(){return Ha(this)}playerPotionsCount(){return Au(this)}playerCanMoveMon(){return yf(this)}playerCanMoveMana(){return Sf(this)}playerCanUseAction(){return hf(this)}};var Be=Object.freeze({Baseline:"baseline",Production:"production"});function D(e){return e.planner.mode===Be.Production}c(D,"productionEnabled");function Xa(e,n){let o=e.board.get(e.board.base({kind:w.Spirit,color:n,cooldown:0})),t=o===void 0?void 0:G(o);return t?.kind===w.Spirit&&t.color===n&&!H(t)}c(Xa,"hasAwakeSpiritOnBase");function oa(e,n){return!e.isFirstTurn()&&e.playerCanMoveMon()&&Xa(e,n)}c(oa,"shouldPreferSpiritDevelopment");function te(e){return e.winsImmediately||e.scoresSupermanaThisTurn||e.scoresOpponentManaThisTurn||e.safeSupermanaPickupNow||e.safeOpponentManaPickupNow}c(te,"hasConcreteScoreSurface");function X(e){return e.safeSupermanaPickupNow||e.safeOpponentManaPickupNow||e.supermanaProgress||e.opponentManaProgress}c(X,"hasProgressSurface");function N(e){return e.manaHandoffToOpponent||e.ownDrainerVulnerable&&!e.classes.drainerSafetyRecover&&!e.attacksOpponentDrainer&&!te(e)}c(N,"rootIsUnsafe");function F(e){return e.spiritDevelopment&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow}c(F,"isPlainSpiritDevelopmentRoot");function ta(e,n,o){let t=e.findAwakeAngel(n);return t!==void 0&&ne(t,o)===1}c(ta,"exactIsLocationGuardedByAngel");function Qa(e,n,o){let t=Math.abs(n.i-o.i),r=Math.abs(n.j-o.j),a=Zt(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(Qa,"demonHasLineAttack");var Sr=1,hr=2,Za=4,Ja=8,yt=16,ls=Sr|hr|Za|Ja|yt;function $e(){return{utility:0,sameTurnScore:!1,sameTurnScoreValue:0,sameTurnOpponentManaScore:!1,sameTurnOpponentManaScoreValue:0,supermanaProgress:!1,opponentManaProgress:!1,nextTurnSetupGain:0}}c($e,"defaultSpiritSummary");function ft(){return{scorePathWindow:{bestSteps:void 0,multiPressure:0},immediateWindow:{bestScore:0,multiPressure:0},bestDrainerPickup:void 0,bestCarrierSteps:void 0,bestDrainerToManaSteps:void 0,spirit:$e()}}c(ft,"defaultColorSummary");function br(){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(br,"defaultTurnSummary");function St(){return{safeSupermanaProgress:!1,safeSupermanaProgressSteps:void 0,safeOpponentManaProgress:!1,safeOpponentManaProgressSteps:void 0,spiritAssistedScore:!1,spiritAssistedScoreValue:0,spiritAssistedDenial:!1,spiritAssistedDenialValue:0,sameTurnScoreWindowValue:0}}c(St,"defaultTurnTacticalProjection");function Cr(){return{budget:{remainingMonMoves:0,canUseAction:!1,canMoveMana:!1},turn:St(),delta:{sameTurnScoreWindowValue:0,spiritGain:0,opponentWindowDenyGain:0,drainerAttackAvailable:!1,drainerSafety:0,safeSupermanaProgressSteps:void 0,safeOpponentManaProgressSteps:void 0},opponentCanWinImmediately:!1}}c(Cr,"defaultOpportunityContext");var Bt=class{static{c(this,"ExactStrategicAnalysis")}white;black;constructor(n=ft(),o=ft()){this.white=n,this.black=o}colorSummary(n){return n===R.White?this.white:this.black}};var Wy=Object.freeze({hi:0,lo:0});function ao(e,n){return{hi:e>>>0,lo:n>>>0}}c(ao,"hash64");function ds(e){if(!Number.isInteger(e)||e<0||e>4294967295)throw new RangeError("hash low word must be an unsigned 32-bit integer");return ao(0,e)}c(ds,"hash64FromLowWord");function ll(e){if(!Number.isSafeInteger(e)||e<0)throw new RangeError("hash integer must be a nonnegative safe integer");return ao(Math.floor(e/4294967296),e)}c(ll,"hash64FromNonnegativeInteger");function ms(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,p=t*a+Math.floor(s/65536)+(Math.imul(e.hi,n.lo)>>>0)+(Math.imul(e.lo,n.hi)>>>0);return ao(p,u)}c(ms,"hash64Mul");function fs(e,n){return ao(e.hi^n.hi,e.lo^n.lo)}c(fs,"hash64Xor");function By(e,n){let o=n>>>0&63;if(o===0)return ao(e.hi,e.lo);if(o===32)return ao(e.lo,e.hi);if(o<32)return ao(e.hi<<o|e.lo>>>32-o,e.lo<<o|e.hi>>>32-o);let t=o-32;return ao(e.lo<<t|e.hi>>>32-t,e.hi<<t|e.lo>>>32-t)}c(By,"hash64RotateLeft");function dl(e,n){return e.hi===n.hi&&e.lo===n.lo}c(dl,"hash64Equals");function Ly(e){return e.hi===0&&e.lo===0}c(Ly,"hash64IsZero");function Gy(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(Gy,"hash64CompareUnsigned");function zu(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(zu,"hash64Bucket");function yR(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(yR,"createEntry");function SR(e,n){return e===n||e!==e&&n!==n}c(SR,"sameValueZero");function Fy(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)&&SR(e.qualifier,s)}c(Fy,"entryMatches");function hR(e){if(!Number.isSafeInteger(e)||e<1)throw new RangeError("Hash64 table capacity must be a positive safe integer");return e}c(hR,"validateCapacity");var xe=class{static{c(this,"Hash64Table")}#e=new Map;#o;#n=0;constructor(n){this.#o=hR(n)}get capacity(){return this.#o}get size(){return this.#n}clear(){this.#e.clear(),this.#n=0}has(n,o=0,t,r){return this.#t(this.#e.get(zu(n)),n,o,t,r)!==void 0}get(n,o=0,t,r){return this.#t(this.#e.get(zu(n)),n,o,t,r)?.value}set(n,o,t=0,r,a){let i=zu(n),s=this.#e.get(i),u=this.#t(s,n,t,r,a);if(u!==void 0)return u.value=o,this;this.#n>=this.#o&&(this.clear(),s=void 0);let p=yR(n,o,t,r,a);return p.next=s,this.#e.set(i,p),this.#n+=1,this}delete(n,o=0,t,r){let a=zu(n),i=this.#e.get(a);if(i===void 0)return!1;let s=n.hi,u=n.lo,p=t!==void 0,l=t?.hi??0,m=t?.lo??0,d,f=i;for(;f!==void 0;){if(!Fy(f,s,u,o,p,l,m,r)){d=f,f=f.next;continue}return d===void 0?f.next===void 0?this.#e.delete(a):this.#e.set(a,f.next):d.next=f.next,this.#n-=1,!0}return!1}#t(n,o,t,r,a){let i=o.hi,s=o.lo,u=r!==void 0,p=r?.hi??0,l=r?.lo??0;for(;n!==void 0;){if(Fy(n,i,s,t,u,p,l,a))return n;n=n.next}}},To=class{static{c(this,"Hash64Set")}#e;constructor(n){this.#e=new xe(n)}get capacity(){return this.#e.capacity}get size(){return this.#e.size}clear(){this.#e.clear()}has(n,o=0,t,r){return this.#e.has(n,o,t,r)}add(n,o=0,t,r){return this.#e.set(n,!0,o,t,r),this}delete(n,o=0,t,r){return this.#e.delete(n,o,t,r)}};var $u=512,Vy=8192,Hy=8192,Uy=8192,jy=8192,Ky=8192,qy=8192,ei=4096,zy=4096,Yu=2048,bR=Symbol("exact-session-caches"),ml=class{static{c(this,"ExactSessionCaches")}attackReach=new xe(Vy);walkThreat=new xe(qy);drainerSafety=new xe(Uy);carrierSteps=new xe(Hy);drainerToMana=new xe(jy);pickupPath=new xe(Ky);strategicAnalysis=new xe($u);turnSummary=new xe($u);turnTacticalProjection=new xe($u);secureMana=new xe(ei);spiritReach=new xe(zy);spiritTacticalSummary=new xe(Yu);capacity=Vy+qy+Uy+Hy+jy+Ky+$u*3+ei+zy+Yu;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()}};function ke(e){return e.caches.session.getOrCreate(bR,()=>new ml)}c(ke,"exactCaches");function In(e){return e===R.White?0:1}c(In,"colorKey");function xn(...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(xn,"exactCacheTag");function Xu(e){ke(e).clear()}c(Xu,"clearExactStateAnalysisCache");var Go=Object.freeze({kind:"none"}),ni=Object.freeze({kind:"bomb"});function CR(e){switch(e.kind){case"none":return 0;case"bomb":return 1;case"mana":return e.mana.kind==="supermana"?2:e.mana.color===R.White?3:4}}c(CR,"payloadSlot");function Ro(e,n){return Q(e)*5+CR(n)}c(Ro,"payloadSeenSlot");function MR(e,n,o){switch(e.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":return n===w.Drainer;case"mon-base":return e.monKind===n&&e.color===o}}c(MR,"squareAllowsEmptyMon");function kR(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(kR,"squareAllowsManaCarrier");function ra(e,n,o,t,r,a){let i=e.get(r);switch(t.kind){case"none":{if(i===void 0)return MR(e.squareAt(r),n,o)?Go:void 0;switch(i.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return;case"mana":return n===w.Drainer?{kind:"mana",mana:i.mana}:void 0;case"consumable":return i.consumable===K.BombOrPotion?a?ni:Go:void 0}}case"mana":{if(i===void 0)return kR(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===K.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 ni;case"supermana-base":case"mon-base":return}return i.kind==="consumable"&&i.consumable===K.BombOrPotion?ni:void 0}}}c(ra,"actorPayloadAfterMoveCompute");function fl(e,n,o,t,r,a,i,s,u){if(e.session.checkpoint())return;let p=[{location:o,payload:a,steps:0}],l=new Uint8Array(605);l[Ro(o,a)]=1;let m=0;for(;m<p.length;){let d=p[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 me(d.location)){let y=ra(n,t,r,d.payload,f,i);if(y===void 0)continue;let b=Ro(f,y);l[b]===0&&(l[b]=1,p.push({location:f,payload:y,steps:d.steps+1}))}}}c(fl,"shortestPayloadState");var aa=class{static{c(this,"AttackReachSummary")}#e;#o;#n;constructor(){this.#e=new Uint8Array(121),this.#o=new Uint8Array(121),this.#n=new Uint8Array(121)}canAttackTarget(n){let o=Q(n);return(this.#o[o]??0)>0||(this.#n[o]??0)===0&&(this.#e[o]??0)>0}immediateThreats(n){let o=Q(n);return[this.#e[o]??0,this.#o[o]??0]}markGuarded(n,o){this.#n[Q(n)]=o?1:0}addActionThreat(n){let o=Q(n);this.#e[o]=Math.min(255,(this.#e[o]??0)+1)}addBombThreat(n){let o=Q(n);this.#o[o]=Math.min(255,(this.#o[o]??0)+1)}};function $y(e,n,o,t,r,a){if(!(t.kind==="mana"||e.get(r)?.kind==="mana"))return ra(e,n,o,t,r,a)}c($y,"exactAttackPayloadAfterMove");function TR(e,n,o){return e.squareAt(o).kind!=="mon-base"&&(_e(o,n)||e.get(o)===void 0)}c(TR,"exactAttackActionSourceAvailable");function Yy(e,n,o,t){let r;switch(n){case w.Mystic:r=No(t);break;case w.Demon:r=Do(t);break;case w.Drainer:case w.Angel:case w.Spirit:return}let a;for(let i of r){if(!TR(e,o,i)||n===w.Demon&&e.get(Zt(i,t))!==void 0)continue;let s=ne(o,i);a=a===void 0?s:Math.min(a,s)}return a}c(Yy,"exactAttackActionStepsLowerBound");function RR(e,n,o,t,r,a,i,s){if(a.kind==="bomb")return Math.max(ne(r,n)-3,0);if(a.kind==="mana")return;let u=o?void 0:Yy(e,i,r,n);if(s)for(let p of t){let l=ne(r,p)+Math.max(ne(p,n)-3,0);u=u===void 0?l:Math.min(u,l)}return u}c(RR,"exactAttackRemainingStepsLowerBound");function Xy(e){let n=[];for(let[o,t]of e.entries())t.kind==="consumable"&&t.consumable===K.BombOrPotion&&n.push(o);return n}c(Xy,"bombPickupLocations");function Qy(e,n,o,t,r,a,i,s,u){if(e.session.checkpoint())return!1;if(i.kind==="mon-with-consumable"&&i.consumable===K.Bomb&&ne(a,o)<=t+3)return!0;if(!r){let p=Yy(n,s.kind,a,o);if(p!==void 0&&p<=t)return!0}if(i.kind==="mon-with-mana")return!1;for(let p of u){if(e.session.checkpoint())return!1;let l=ne(a,p);if(!(l>t)&&ne(p,o)<=t-l+3)return!0}return!1}c(Qy,"exactAttackTargetPlausibleForAttacker");function PR(e,n,o,t,r,a,i){if(a<0||!i||n.get(r)===void 0||e.session.checkpoint())return!1;let s=ta(n,t,r),u=Xy(n);for(let[p,l]of n.entries()){if(e.session.checkpoint())return!1;let m=G(l);if(!(m?.color!==o||H(m))&&Qy(e,n,r,a,s,p,l,m,u))return!0}return!1}c(PR,"exactAttackTargetPlausibleOnBoard");function Qu(e,n){let o=[];for(let[t,r]of e.entries())G(r)?.color===n&&o.push(t);return o}c(Qu,"attackReachSummaryTargetLocations");function Zu(e,n,o,t,r,a){let i=new aa;if(t<0||!r||a.length===0||e.session.checkpoint())return i;for(let s of a){if(e.session.checkpoint())return new aa;let u=n.get(s),p=u===void 0?void 0:G(u);p!==void 0&&i.markGuarded(s,ta(n,p.color,s))}for(let[s,u]of n.entries()){if(e.session.checkpoint())return new aa;let p=G(u);if(p?.color!==o||H(p))continue;let l=u.kind!=="mon-with-mana",m=u.kind==="mon-with-consumable"&&u.consumable===K.Bomb?ni:Go,d=[{location:s,payload:m,steps:0}],f=new Uint8Array(605);f[Ro(s,m)]=1;let y=0;for(;y<d.length;){let b=d[y];if(y+=1,b===void 0)break;if(e.session.checkpoint())return new aa;if(!(b.steps>t)){if(b.payload.kind==="bomb")for(let C of a)ne(b.location,C)<=3&&i.addBombThreat(C);if(n.squareAt(b.location).kind!=="mon-base")for(let C of a)(p.kind===w.Mystic&&Math.abs(b.location.i-C.i)===2&&Math.abs(b.location.j-C.j)===2||p.kind===w.Demon&&Qa(n,b.location,C))&&i.addActionThreat(C);if(b.steps!==t)for(let C of me(b.location)){let h=$y(n,p.kind,p.color,b.payload,C,l);if(h===void 0)continue;let k=Ro(C,h);f[k]===0&&(f[k]=1,d.push({location:C,payload:h,steps:b.steps+1}))}}}}return e.session.checkpoint()?new aa:i}c(Zu,"attackReachSummaryForTargets");function Zy(e,n,o,t,r,a){return Zu(e,n,o,r,a,Qu(n,t))}c(Zy,"attackReachSummary");function wR(e,n,o,t,r,a){if(e.session.checkpoint())return!1;let i=ta(n,t,r),s=Xy(n);for(let[u,p]of n.entries()){if(e.session.checkpoint())return!1;let l=G(p);if(l?.color!==o||H(l)||!Qy(e,n,r,a,i,u,p,l,s))continue;let m=p.kind!=="mon-with-mana",d=p.kind==="mon-with-consumable"&&p.consumable===K.Bomb?ni:Go,f=[{location:u,payload:d,steps:0}],y=new Uint8Array(605);y[Ro(u,d)]=1;let b=0;for(;b<f.length;){let C=f[b];if(b+=1,C===void 0||e.session.checkpoint())return!1;if(C.steps>a)continue;if(C.payload.kind==="bomb"&&n.get(r)!==void 0&&ne(C.location,r)<=3||n.squareAt(C.location).kind!=="mon-base"&&!i&&(l.kind===w.Mystic&&Math.abs(C.location.i-r.i)===2&&Math.abs(C.location.j-r.j)===2||l.kind===w.Demon&&Qa(n,C.location,r)))return!0;if(C.steps===a)continue;let h=RR(n,r,i,s,C.location,C.payload,l.kind,m);if(!(h!==void 0&&C.steps+h>a))for(let k of me(C.location)){let M=$y(n,l.kind,l.color,C.payload,k,m);if(M===void 0)continue;let T=Ro(k,M);y[T]===0&&(y[T]=1,f.push({location:k,payload:M,steps:C.steps+1}))}}}return!1}c(wR,"canAttackTargetOnBoardUncached");function Mr(e,n,o,t,r,a,i,s){if(i<0||!s||n.get(a)===void 0||e.session.checkpoint())return!1;let u=xn(In(t),In(r),Q(a),i,1),p=u===void 0?void 0:ke(e).attackReach.get(o,u);if(p!==void 0)return p;if(!PR(e,n,t,r,a,i,s))return e.session.cacheWriteAllowed&&u!==void 0&&ke(e).attackReach.set(o,!1,u),!1;let l=wR(e,n,t,r,a,i);return e.session.cacheWriteAllowed?(u!==void 0&&ke(e).attackReach.set(o,l,u),l):!1}c(Mr,"canAttackTargetOnBoardWithHash");var oS=1779033703,tS=4089235721,rS=2654435761,aS=2246822535,iS=2496678331,sS=321982955,AR=2654435769,ER=2135587861,uS=3210233709,cS=484763065,pS=2496678331,lS=321982955,gR=11;function kr(e,n,o,t,r){let a=o&65535,i=o>>>16,s=r&65535,u=r>>>16,p=a*s,l=(p>>>16)+i*s+a*u;e.lo=(p&65535|(l&65535)<<16)>>>0,e.hi=i*u+Math.floor(l/65536)+(Math.imul(n,r)>>>0)+(Math.imul(o,t)>>>0)>>>0}c(kr,"multiplyInto");function oi(e,n,o,t){e.hi=(n^n>>>t)>>>0,e.lo=(o^(o>>>t|n<<32-t))>>>0}c(oi,"xorShiftRightInto");function dS(e,n,o){oi(e,n,o,30),kr(e,e.hi,e.lo,uS,cS),oi(e,e.hi,e.lo,27),kr(e,e.hi,e.lo,pS,lS),oi(e,e.hi,e.lo,31)}c(dS,"mixBoardHashInto");function yl(e,n,o){let t=o+ER>>>0,r=n+AR+(t<o>>>0?1:0)>>>0;oi(e,r,t,30),kr(e,e.hi,e.lo,uS,cS),oi(e,e.hi,e.lo,27),kr(e,e.hi,e.lo,pS,lS),oi(e,e.hi,e.lo,31)}c(yl,"mixSearchHashInto");function Ju(e){return e===R.White?1:2}c(Ju,"exactHashColorBits");function vR(e){switch(e){case w.Demon:return 1;case w.Drainer:return 2;case w.Angel:return 3;case w.Spirit:return 4;case w.Mystic:return 5}}c(vR,"exactHashMonKindBits");function ri(e){return e.kind==="supermana"?2:1|Ju(e.color)<<4}c(ri,"exactHashManaBits");function Jy(e){return e.kind==="supermana"?32:16|Ju(e.color)}c(Jy,"exactSearchHashManaBits");function eS(e){switch(e){case K.Bomb:return 1;case K.Potion:return 2;case K.BombOrPotion:return 3}}c(eS,"exactHashConsumableBits");function nS(e){switch(e){case K.Potion:return 1;case K.Bomb:return 2;case K.BombOrPotion:return 3}}c(nS,"exactSearchHashConsumableBits");function ti(e){return(vR(e.kind)|Ju(e.color)<<4|(e.cooldown&255)<<gR)>>>0}c(ti,"exactHashMonBits");function OR(e){let n;switch(e.kind){case"mon":n=256|ti(e.mon);break;case"mana":n=512|ri(e.mana);break;case"mon-with-mana":n=768|ti(e.mon)|ri(e.mana)<<16;break;case"mon-with-consumable":n=1024|ti(e.mon)|eS(e.consumable)<<16;break;case"consumable":n=1280|eS(e.consumable);break}return n>>>0}c(OR,"exactHashItemBits");function IR(e){let n;switch(e.kind){case"mon":n=256|ti(e.mon);break;case"mana":n=512|Jy(e.mana);break;case"mon-with-mana":n=768|ti(e.mon)|Jy(e.mana)<<16;break;case"mon-with-consumable":n=1024|ti(e.mon)|nS(e.consumable)<<16;break;case"consumable":n=1280|nS(e.consumable);break}return n>>>0}c(IR,"exactSearchHashItemBits");function ht(e,n,o){yl(e,Math.floor(n/4294967296),(n^o)>>>0)}c(ht,"mixSearchFieldInto");function xR(e,n){let o=ji(n),t=o>>>0,r=t+2242054355>>>0,a=Math.floor(o/4294967296)+608135816+(r<t?1:0)>>>0;dS(e,a,r)}c(xR,"exactBoardVariantHashInto");function Qe(e){let n={hi:0,lo:0};xR(n,e.variant);let o=(oS^n.hi)>>>0,t=(tS^n.lo)>>>0;for(let[r,a]of e.entries()){kr(n,0,Q(r)+1,rS,aS);let i=n.hi,s=n.lo;kr(n,0,OR(a),iS,sS),dS(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(Qe,"exactBoardHash");function ue(e){let n={hi:0,lo:0},o=oS,t=tS;for(let[r,a]of e.board.entries()){kr(n,0,Q(r)+1,rS,aS),yl(n,n.hi,n.lo^IR(a)),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0;let i=(o<<17|t>>>15)>>>0,s=(t<<17|o>>>15)>>>0;kr(n,i,s,iS,sS),o=n.hi,t=n.lo}return ht(n,e.whiteScore,17),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0,ht(n,e.blackScore,35),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0,ht(n,Ju(e.activeColor),53),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0,ht(n,e.actionsUsedCount,71),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0,ht(n,e.manaMovesCount,89),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0,ht(n,e.monsMovesCount,107),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0,ht(n,e.whitePotionsCount,125),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0,ht(n,e.blackPotionsCount,143),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0,ht(n,e.turnNumber,161),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0,ht(n,ji(e.variant()),179),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0,yl(n,o,t),n}c(ue,"exactSearchStateHash");function ec(e,n,o,t){if(e.session.checkpoint())return[1,1];let r=0,a=0;for(let i of No(t)){if(e.session.checkpoint())return[1,1];let s=n.get(i),u=s===void 0?void 0:G(s);u?.kind===w.Mystic&&u.color!==o&&!H(u)&&n.squareAt(i).kind!=="mon-base"&&(r+=1)}for(let i of Do(t)){if(e.session.checkpoint())return[1,1];let s=n.get(i),u=s===void 0?void 0:G(s);u?.kind===w.Demon&&u.color!==o&&!H(u)&&n.squareAt(i).kind!=="mon-base"&&Qa(n,i,t)&&(r+=1)}for(let i of Jt(t)){if(e.session.checkpoint())return[1,1];let s=n.get(i);s?.kind==="mon-with-consumable"&&s.consumable===K.Bomb&&s.mon.color!==o&&!H(s.mon)&&n.squareAt(i).kind!=="mon-base"&&(a+=1)}return e.session.checkpoint()?[1,1]:[r,a]}c(ec,"drainerImmediateThreats");function mS(e,n,o,t,r){if(e.session.checkpoint())return!0;let[a,i]=ec(e,n,o,t);return e.session.checkpoint()?!0:r?i>0:a+i>0}c(mS,"isDrainerUnderImmediateThreat");function NR(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===K.Bomb&&i.mon.color!==o&&!H(i.mon)&&n.squareAt(a).kind!=="mon-base"&&ne(a,t)<=4)return!0;return!1}for(let[a,i]of n.entries()){if(e.session.checkpoint())return!1;let s=G(i);if(!(s===void 0||s.color===o||H(s)||n.squareAt(a).kind==="mon-base")){if(s.kind===w.Mystic||s.kind===w.Demon)for(let u=-1;u<=1;u+=1)for(let p=-1;p<=1;p+=1){if(u===0&&p===0)continue;let l={i:a.i+u,j:a.j+p};if(l.i<0||l.i>10||l.j<0||l.j>10||n.get(l)!==void 0)continue;let m=n.squareAt(l);if(!(m.kind==="mon-base"||m.kind==="supermana-base")&&(s.kind===w.Mystic&&Math.abs(l.i-t.i)===2&&Math.abs(l.j-t.j)===2||s.kind===w.Demon&&Qa(n,l,t)))return!0}if(i.kind==="mon-with-consumable"&&i.consumable===K.Bomb&&ne(a,t)<=4)return!0}}return!1}c(NR,"isDrainerUnderWalkThreatUncached");function ai(e,n,o,t,r,a){if(e.session.checkpoint())return!0;let i=xn(In(t),Q(r),a?1:0),s=i===void 0?void 0:ke(e).walkThreat.get(o,i);if(s!==void 0)return s||e.session.checkpoint();let u=NR(e,n,t,r,a);return e.session.cacheWriteAllowed?(i!==void 0&&ke(e).walkThreat.set(o,u,i),u):!0}c(ai,"isDrainerUnderWalkThreatWithHash");function nc(e,n,o,t,r){if(e.session.checkpoint())return!1;let a=ta(n,t,r),i=Mr(e,n,o,B(t),t,r,oe,!0);return e.session.checkpoint()?!1:!i&&!ai(e,n,o,t,r,a)&&!e.session.checkpoint()}c(nc,"isDrainerExactlySafeNextTurnOnBoardWithHash");function ii(e,n,o,t){return nc(e,n,Qe(n),o,t)}c(ii,"isDrainerExactlySafeNextTurnOnBoard");function Lt(e,n){for(let[o,t]of e.entries()){let r=G(t);if(r?.color===n&&r.kind===w.Drainer&&!H(r))return o}}c(Lt,"findAwakeDrainer");function oc(e,n,o,t){if(e.session.checkpoint())return 0;let r=xn(In(t)),a=r===void 0?void 0:ke(e).drainerSafety.get(o,r);if(a!==void 0)return a;let i=Lt(n,t),s=0;if(i!==void 0){let u=ta(n,t,i),[p,l]=ec(e,n,t,i),m=u?l>0:p+l>0,d=ai(e,n,o,t,i,u);s=nc(e,n,o,t,i)?m||d?1:2:m||d?-2:-1}return e.session.cacheWriteAllowed?(r!==void 0&&ke(e).drainerSafety.set(o,s,r),s):0}c(oc,"exactOwnDrainerSafetyScoreWithHash");function ia(e,n,o,t,r,a){if(e.session.checkpoint()||a!==void 0&&a<0)return;let i=xn(Q(o),ri(t));if(i!==void 0&&ke(e).carrierSteps.has(r,i)){let u=ke(e).carrierSteps.get(r,i);return a===void 0||u===void 0||u<=a?u:void 0}let s=fl(e,n,o,w.Drainer,R.White,{kind:"mana",mana:t},!1,a,(u,p)=>p.kind==="mana"&&n.squareAt(u).kind==="mana-pool");if(e.session.cacheWriteAllowed)return i!==void 0&&(a===void 0||s!==void 0)&&ke(e).carrierSteps.set(r,s,i),s}c(ia,"exactCarrierStepsToAnyPoolWithHash");function fS(e,n,o,t){if(e.session.checkpoint())return;let r=Qe(n),a=xn(In(o),Q(t));if(a!==void 0&&ke(e).drainerToMana.has(r,a))return ke(e).drainerToMana.get(r,a);let i=fl(e,n,t,w.Drainer,o,Go,!1,void 0,(s,u)=>u.kind==="mana");if(e.session.cacheWriteAllowed)return a!==void 0&&ke(e).drainerToMana.set(r,i,a),i}c(fS,"exactDrainerToAnyManaSteps");function DR(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(DR,"pickupPathBeats");function tc(e,n,o,t,r,a){if(e.session.checkpoint())return;let i=xn(In(o),Q(t),r??-1);if(i!==void 0&&ke(e).pickupPath.has(a,i))return ke(e).pickupPath.get(a,i);let s=[{location:t,payload:Go,steps:0}],u=new Uint8Array(605);u[Ro(t,Go)]=1;let p,l=0;for(;l<s.length;){let m=s[l];if(l+=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};DR(d,p)&&(p=d)}if(!(r!==void 0&&m.steps>=r))for(let d of me(m.location)){let f=ra(n,w.Drainer,o,m.payload,d,!1);if(f===void 0||f.kind==="bomb")continue;let y=Ro(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&&ke(e).pickupPath.set(a,p,i),p}c(tc,"exactBestDrainerPickupPathWithHash");function rc(e,n,o){if(e.session.checkpoint())return;let t=Qe(n),r;for(let[a,i]of n.entries()){if(e.session.checkpoint())return;let s=G(i);if(s?.color!==o||H(s))continue;let u;i.kind==="mon-with-mana"?u=ia(e,n,a,i.mana,t):(i.kind==="mon"||i.kind==="mon-with-consumable")&&s.kind===w.Drainer&&(u=tc(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(rc,"exactBestScoreStepsOnBoard");function Sl(e,n,o,t){if(t<0||e.session.checkpoint())return 0;let r=Qe(n),a=0;for(let[i,s]of n.entries()){if(e.session.checkpoint())return 0;let u=G(s);if(!(u?.color!==o||H(u))){if(s.kind==="mon-with-mana")ia(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===w.Drainer){let p=tc(e,n,o,i,t,r);p!==void 0&&(a=Math.max(a,p.manaValue))}if(a>=2)return a}}return a}c(Sl,"exactBestImmediateScoreOnBoard");function _R(e){let n=0,o=0;for(let[,t]of e.board.entries())t.kind!=="mana"||t.mana.kind!=="regular"||(t.mana.color===R.White?n+=1:o+=1);return{hash:ue(e),whiteRegularManaCount:n,blackRegularManaCount:o}}c(_R,"secureManaStateKey");function hl(e,n,o){let t;for(let[r,a]of e.entries()){if(a.kind!=="mana"||!ze(a.mana,n))continue;let i=ne(o,r);t=t===void 0?i:Math.min(t,i)}return t}c(hl,"exactDistanceToWantedManaStepsLowerBound");function yS(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(yS,"applySecureDrainerWalk");function FR(e,n,o,t){let r=_R(e);return{hash:r.hash,tag:xn(r.whiteRegularManaCount,r.blackRegularManaCount,In(n),ri(t),Q(o))}}c(FR,"secureSpecificManaQueryKey");function WR(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&&ii(e,n.board,o,t))return 0;if(n.activeColor!==o||!n.playerCanMoveMon())return;let u=Math.max(oe-n.monsMovesCount,0);if(!s){let l=hl(n.board,r,t);if(l===void 0||l>u)return}let p;for(let l of me(t)){if(e.session.checkpoint())return;if(!s){let f=n.board.get(l);if(!(f?.kind==="mana"&&ze(f.mana,r))){let b=hl(n.board,r,l);if(b===void 0||b>u-1)continue}}let m=yS(e,n,t,l);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=Lt(m.after.board,o);if(f===void 0)continue;let y=ac(e,m.after,o,f,r,a);if(e.session.checkpoint())return;y!==void 0&&(d=y+1)}if(d!==void 0&&(p===void 0||d<p)&&(p=d,d===1))break}return p}c(WR,"secureSpecificManaStepsInGameUncached");function ac(e,n,o,t,r,a){if(e.session.checkpoint())return;let i=FR(n,o,t,r);if(i.tag!==void 0&&ke(e).secureMana.has(i.hash,i.tag))return ke(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=WR(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&&ke(e).secureMana.set(i.hash,s,i.tag),s}c(ac,"secureSpecificManaStepsInGame");function ys(e,n,o,t,r){if(r<0||e.session.checkpoint())return;let a=Lt(n,o);if(a===void 0)return;let i=n.get(a);if(!(i?.kind==="mon-with-mana"&&ze(i.mana,t))){let l=hl(n,t,a);if(l===void 0||l>r)return}let u=Math.max(0,Math.min(oe,oe-r)),p=ko.newSimulationState({board:n.fork(),whiteScore:0,blackScore:0,activeColor:o,actionsUsedCount:Vn,manaMovesCount:0,monsMovesCount:u,whitePotionsCount:0,blackPotionsCount:0,turnNumber:2});return ac(e,p,o,a,t,new To(ei))}c(ys,"exactSecureSpecificManaStepsOnBoard");function ic(e,n,o,t,r){if(e.session.checkpoint())return;let a=n.fork(),i=t,s=ac(e,a,o,i,r,new To(ei));if(s===void 0||e.session.checkpoint())return;let u=[];for(;s>0;){let p;for(let l of me(i)){if(e.session.checkpoint())return;let m=yS(e,a,i,l);if(e.session.checkpoint())return;if(m===void 0)continue;if(s===1&&m.scoredMana!==void 0&&ze(m.scoredMana,r)){p={next:l,after:m.after,steps:0};break}let d=Lt(m.after.board,o);if(d===void 0)continue;let f=ac(e,m.after,o,d,r,new To(ei));if(e.session.checkpoint())return;if(f===s-1){p={next:l,after:m.after,steps:f};break}}if(p===void 0)return;u.push(p.next),a=p.after,i=p.next,s=p.steps}return u}c(ic,"exactSecureSpecificManaPathFrom");var SS=6;function bl(e,n,o,t,r){if(r<0||e.session.checkpoint())return[];let a=Qe(n),i=xn(Q(o),In(t),r),s=i===void 0?void 0:ke(e).spiritReach.get(a,i);if(s!==void 0)return s;let u=[],p=[[o,0]],l=new Uint8Array(121);l[Q(o)]=1;let m=0;for(;m<p.length;){let f=p[m];if(m+=1,f===void 0||e.session.checkpoint())return[];let[y,b]=f;if(u.push([y,b]),!(b>=r))for(let C of me(y)){if(e.session.checkpoint())return[];let h=Q(C);if(l[h]!==0)continue;let k=n.get(C),M=n.squareAt(C),T=!1;k===void 0?T=M.kind==="regular"||M.kind==="consumable-base"||M.kind==="mana-base"||M.kind==="mana-pool"||M.kind==="mon-base"&&M.monKind===w.Spirit&&M.color===t:T=k.kind==="consumable"&&k.consumable===K.BombOrPotion,T&&(l[h]=1,p.push([C,b+1]))}}if(!e.session.cacheWriteAllowed)return[];let d=Object.freeze(u.map(([f,y])=>Object.freeze([f,y])));return i!==void 0&&ke(e).spiritReach.set(a,d,i),d}c(bl,"reachableSpiritPositions");function Cl(e,n,o){let t=e.get(o),r=G(n),a=qn(n);if(!Ua(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===w.Drainer;case"mon-base":return r?.kind===i.monKind&&r.color===i.color&&a===void 0&&qr(n)===void 0}}c(Cl,"spiritDestinationAllowed");function hS(e,n,o,t,r){if(t<0||!r||e.session.checkpoint())return $e();let a=$e();for(let[i,s]of n.entries()){if(e.session.checkpoint())return $e();let u=G(s);if(!(u?.color!==o||u.kind!==w.Spirit||H(u)))for(let[p]of bl(e,n,i,o,t)){if(e.session.checkpoint())return $e();if(n.squareAt(p).kind==="mon-base")continue;let l=0,m=0,d=!1,f=!1;for(let b of _o(p)){let C=n.get(b);if(!(C===void 0||!st(C)||!me(b).some(h=>Cl(n,C,h))))if(l+=1,C.kind==="mana")C.mana.kind==="supermana"?(d=!0,m=Math.max(m,2)):C.mana.color===B(o)&&(f=!0,m=Math.max(m,2));else{let h=G(C);h?.color===o&&h.kind===w.Drainer&&!H(h)?m=Math.max(m,2):h!==void 0&&h.color!==o&&!H(h)&&(m=Math.max(m,1))}}let y=Math.max(Math.min(l,SS),Math.min(1+m,SS));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()?$e():a}c(hS,"exactPassiveSpiritSummary");function BR(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,p=s?Fe({kind:"regular",color:B(o)},o):0,l=[{location:t,payload:Go,steps:0}],m=new Uint8Array(605);m[Ro(t,Go)]=1;let d=0,f=0,y=0;for(;y<l.length;){let b=l[y];if(y+=1,b===void 0||e.session.checkpoint())return{bestScore:0,bestOpponentManaScore:0};if(b.payload.kind==="mana"&&n.squareAt(b.location).kind==="mana-pool"){let C=Fe(b.payload.mana,o);if(i&&C>=a&&(d=Math.max(d,C)),s&&b.payload.mana.kind==="regular"&&b.payload.mana.color===B(o)&&(f=Math.max(f,C)),(!i||d>=u)&&(!s||f>=p))return{bestScore:d,bestOpponentManaScore:f}}if(!(b.steps>=r))for(let C of me(b.location)){if(e.session.checkpoint())return{bestScore:0,bestOpponentManaScore:0};let h=ra(n,w.Drainer,o,b.payload,C,!1);if(h===void 0||h.kind==="bomb")continue;let k=Ro(C,h);m[k]===0&&(m[k]=1,l.push({location:C,payload:h,steps:b.steps+1}))}}return{bestScore:d,bestOpponentManaScore:f}}c(BR,"exactDrainerImmediateTacticalWindow");function Ml(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:B(o)},p=r?Fe({kind:"supermana"},o):0,l=a?Fe(u,o):0,m=Qe(n),d=0,f=0;for(let[y,b]of n.entries()){if(e.session.checkpoint())return{bestScore:0,bestOpponentManaScore:0};let C=G(b);if(!(C?.color!==o||H(C))){if(b.kind==="mon-with-mana"){let h=Fe(b.mana,o),k=r&&h>=s,M=a&&ze(b.mana,u);if(!k&&!M)continue;let T=ia(e,n,y,b.mana,m,t);if(e.session.checkpoint())return{bestScore:0,bestOpponentManaScore:0};if(T===void 0)continue;k&&(d=Math.max(d,h)),M&&(f=Math.max(f,h))}else if(C.kind===w.Drainer&&(b.kind==="mon"||b.kind==="mon-with-consumable")){let h=BR(e,n,o,y,t,s,r,a);if(e.session.checkpoint())return{bestScore:0,bestOpponentManaScore:0};r&&(d=Math.max(d,h.bestScore)),a&&(f=Math.max(f,h.bestOpponentManaScore))}if((!r||d>=p)&&(!a||f>=l))return{bestScore:d,bestOpponentManaScore:f}}}return e.session.checkpoint()?{bestScore:0,bestOpponentManaScore:0}:{bestScore:d,bestOpponentManaScore:f}}c(Ml,"exactBestImmediateTacticalWindow");function bS(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 p=o;o.kind==="mon"&&i?.kind==="mana"?p=Qo(o.mon,i.mana):o.kind==="mana"&&i?.kind==="mon"?p=Qo(i.mon,o.mana):o.kind==="mon-with-mana"&&i?.kind==="mana"?(e.set(n,{kind:"mana",mana:o.mana}),p=Qo(o.mon,i.mana)):o.kind==="consumable"&&i?.kind==="mon"?p=Kn(i.mon):o.kind==="mon"&&i?.kind==="consumable"?p=Kn(o.mon):o.kind==="mon-with-mana"&&i?.kind==="consumable"?p=Qo(o.mon,o.mana):o.kind==="mon-with-consumable"&&i?.kind==="consumable"&&(p={kind:"mon-with-consumable",mon:o.mon,consumable:K.Bomb});let l=0,m=0,d=qn(p);if(u.kind==="mana-pool"&&d!==void 0){l=Fe(d,r),d.kind==="regular"&&d.color===B(r)&&(m=l);let f=G(p);if(f===void 0)return e.delete(t),{undo:s,scoreDelta:l,opponentManaScoreDelta:m};p=Kn(f)}return e.set(t,p),{undo:s,scoreDelta:l,opponentManaScoreDelta:m}}c(bS,"applySpiritMovePreviewInPlace");function CS(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(CS,"undoSpiritMovePreview");var si=1,ui=2,Ss=4,MS=si|ui|Ss;function LR(e,n){let o=(n&si)!==0,t=(n&ui)!==0,r=(n&Ss)!==0;return{...$e(),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(LR,"tacticalSpiritSummaryForFields");function kl(e,n,o,t,r,a){if(a&=MS,t<0||a===0||!r||e.session.checkpoint())return $e();let i=Qe(n),s=xn(In(o),t,Number(r),a),u=s===void 0?void 0:ke(e).spiritTacticalSummary.get(i,s);if(u!==void 0)return u;for(let l=1;l<=MS;l+=1){if(l===a||(l&a)!==a)continue;let m=xn(In(o),t,Number(r),l),d=m===void 0?void 0:ke(e).spiritTacticalSummary.get(i,m);if(d===void 0)continue;let f=LR(d,a);return e.session.cacheWriteAllowed?(s!==void 0&&ke(e).spiritTacticalSummary.set(i,f,s),f):$e()}let p=GR(e,n,o,t,r,a);return e.session.cacheWriteAllowed?(s!==void 0&&ke(e).spiritTacticalSummary.set(i,p,s),p):$e()}c(kl,"exactTacticalSpiritSummary");function GR(e,n,o,t,r,a){if(!r||e.session.checkpoint())return $e();let i=(a&si)!==0,s=(a&ui)!==0,u=(a&Ss)!==0,p=Ml(e,n,o,t,i,s);if(e.session.checkpoint())return $e();let l=i?Fe({kind:"supermana"},o):0,m=s?Fe({kind:"regular",color:B(o)},o):0,d=$e(),f=new xe(Yu);for(let[y,b]of n.entries()){if(e.session.checkpoint())return $e();let C=G(b);if(!(C?.color!==o||C.kind!==w.Spirit||H(C)))for(let[h,k]of bl(e,n,y,o,t)){if(e.session.checkpoint())return $e();if(n.squareAt(h).kind==="mon-base")continue;let M=n.fork();_e(h,y)||(M.delete(y),M.set(h,b));let T=t-k;for(let P of _o(h)){if(e.session.checkpoint())return $e();let E=M.get(P);if(!(E===void 0||!st(E)))for(let O of me(P)){if(e.session.checkpoint())return $e();if(!Cl(M,E,O))continue;let g=bS(M,P,E,O,o);try{if(e.session.checkpoint())return $e();let x=Math.max(d.sameTurnScoreValue,p.bestScore,g.scoreDelta),_=Math.max(d.sameTurnOpponentManaScoreValue,p.bestOpponentManaScore,g.opponentManaScoreDelta),U=i&&x<l,j=s&&_<m,z={bestScore:0,bestOpponentManaScore:0};if(U||j){let re=U?x+1:1,Se=Qe(M),q=xn(In(o),T,re,Number(U),Number(j)),Y=q===void 0?void 0:f.get(Se,q);if(Y!==void 0)z=Y;else{if(z=Ml(e,M,o,T,U,j,re),e.session.checkpoint())return $e();q!==void 0&&f.set(Se,z,q)}}if(e.session.checkpoint())return $e();let J=Math.max(g.scoreDelta,z.bestScore),W=Math.max(g.opponentManaScoreDelta,z.bestOpponentManaScore);if(i&&(g.scoreDelta>0||J>p.bestScore)&&(d={...d,sameTurnScore:!0,sameTurnScoreValue:Math.max(d.sameTurnScoreValue,J)}),s&&(g.opponentManaScoreDelta>0||W>p.bestOpponentManaScore)&&(d={...d,sameTurnOpponentManaScore:!0,sameTurnOpponentManaScoreValue:Math.max(d.sameTurnOpponentManaScoreValue,W)}),u&&!d.supermanaProgress){let Se=E.kind==="mana"&&E.mana.kind==="supermana"&&g.scoreDelta>0;if(!Se&&(Se=ys(e,M,o,{kind:"supermana"},T)!==void 0,e.session.checkpoint()))return $e();Se&&(d={...d,supermanaProgress:!0})}if(u&&!d.opponentManaProgress){let re=g.opponentManaScoreDelta>0;if(!re&&(re=ys(e,M,o,{kind:"regular",color:B(o)},T)!==void 0,e.session.checkpoint()))return $e();re&&(d={...d,opponentManaProgress:!0})}if(e.session.checkpoint())return $e();if((!i||d.sameTurnScoreValue>=l)&&(!s||d.sameTurnOpponentManaScoreValue>=m)&&(!u||d.supermanaProgress&&d.opponentManaProgress))return d}finally{CS(M,g.undo)}}}}}return e.session.checkpoint()?$e():d}c(GR,"exactTacticalSpiritSummaryUncached");function VR(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(VR,"multiPressureFromSteps");function HR(e){return(e[1]??0)*70+(e[2]??0)*35}c(HR,"multiPressureFromScores");function kS(e,n,o){if(e.session.checkpointWithReserve(20))return ft();let t=n.activeColor===o?Math.max(oe-n.monsMovesCount,0):oe,r=n.activeColor===o?n.playerCanUseAction():!0,a=Qe(n.board),i=[],s;for(let[y,b]of n.board.entries()){if(e.session.checkpoint())return ft();if(b.kind!=="mon-with-mana"||b.mon.color!==o||H(b.mon))continue;let C=ia(e,n.board,y,b.mana,a);C!==void 0&&(s=s===void 0?C:Math.min(s,C),i.push(C))}let u=Lt(n.board,o),p=u===void 0?void 0:tc(e,n.board,o,u,void 0,a);if(e.session.checkpointWithReserve(20))return ft();let l=u===void 0?void 0:fS(e,n.board,o,u);p!==void 0&&i.push(p.totalMoves),i.sort((y,b)=>y-b);let m=i.filter((y,b)=>b===0||i[b-1]!==y),d=[];for(let[y,b]of n.board.entries()){if(e.session.checkpoint())return ft();if(b.kind!=="mon-with-mana"||b.mon.color!==o||H(b.mon))continue;let C=ia(e,n.board,y,b.mana,a,t);C!==void 0&&C<=t&&d.push(Fe(b.mana,o))}p!==void 0&&p.totalMoves<=t&&d.push(p.manaValue);let f=hS(e,n.board,o,t,r);return e.session.checkpointWithReserve(20)?ft():(d.sort((y,b)=>b-y),{scorePathWindow:{bestSteps:m[0],multiPressure:VR(m)},immediateWindow:{bestScore:d[0]??0,multiPressure:HR(d)},bestDrainerPickup:p,bestCarrierSteps:s,bestDrainerToManaSteps:l,spirit:f})}c(kS,"buildColorSummary");function UR(e,n){if(e.session.checkpointWithReserve(20))return new Bt;let o=kS(e,n,R.White);if(e.session.checkpointWithReserve(20))return new Bt;let t=kS(e,n,R.Black);return e.session.checkpointWithReserve(20)?new Bt:new Bt(o,t)}c(UR,"buildExactStrategicAnalysis");function sa(e,n,o){if(e.session.checkpointWithReserve(20))return new Bt;let t=ke(e).strategicAnalysis.get(o);if(t!==void 0)return t;let r=UR(e,n);return e.session.cacheWriteAllowed?(ke(e).strategicAnalysis.set(o,r),r):new Bt}c(sa,"exactStrategicAnalysisWithSearchHash");function ci(e,n){return sa(e,n,ue(n))}c(ci,"exactStrategicAnalysis");function sc(e,n,o,t){let r=n.activeColor===o?Math.max(oe-n.monsMovesCount,0):oe;return ys(e,n.board,o,t,r)}c(sc,"exactSecureSpecificManaStepsThisTurn");function TS(e,n,o,t){let r=Lt(n.board,B(o));return r===void 0?!1:Mr(e,n.board,t,o,B(o),r,n.activeColor===o?Math.max(oe-n.monsMovesCount,0):oe,n.activeColor===o?n.playerCanUseAction():!0)}c(TS,"canAttackOpponentDrainerExactWithHash");function jR(e,n){let o=(n&Sr)!==0,t=(n&hr)!==0,r=(n&Za)!==0,a=(n&Ja)!==0,i=(n&yt)!==0,s=i&&(t||a),u=r||i,p=a||s,l=o?e.safeSupermanaProgressSteps:void 0,m=t?e.safeOpponentManaProgressSteps:void 0,d=p&&e.spiritAssistedDenial;return{safeSupermanaProgress:l!==void 0,safeSupermanaProgressSteps:l,safeOpponentManaProgress:m!==void 0||d,safeOpponentManaProgressSteps:m,spiritAssistedScore:u&&e.spiritAssistedScore,spiritAssistedScoreValue:u?e.spiritAssistedScoreValue:0,spiritAssistedDenial:d,spiritAssistedDenialValue:p?e.spiritAssistedDenialValue:0,sameTurnScoreWindowValue:i?e.sameTurnScoreWindowValue:0}}c(jR,"turnTacticalProjectionForFlags");function KR(e,n,o){if(e.session.checkpointWithReserve(20))return St();let t=n.activeColor,r=Math.max(oe-n.monsMovesCount,0),a=(o&Sr)!==0,i=(o&hr)!==0,s=(o&Za)!==0,u=(o&Ja)!==0,p=(o&yt)!==0,l=p&&(i||u),m=0;(s||p)&&(m|=si),(u||l)&&(m|=ui);let d=m===0?$e():kl(e,n.board,t,r,n.playerCanUseAction(),m);if(e.session.checkpointWithReserve(20))return St();let f=a?sc(e,n,t,{kind:"supermana"}):void 0;if(e.session.checkpointWithReserve(20))return St();let y=i?sc(e,n,t,{kind:"regular",color:B(t)}):void 0;if(e.session.checkpointWithReserve(20))return St();let b=p?Math.max(Sl(e,n.board,t,r),d.sameTurnScoreValue,l?d.sameTurnOpponentManaScoreValue:0):0;return e.session.checkpointWithReserve(20)?St():{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:b}}c(KR,"buildExactTurnTacticalProjection");function Po(e,n,o,t,r){if(r===0||n.activeColor!==o||e.session.checkpointWithReserve(20))return St();let a=Math.max(oe-n.monsMovesCount,0),i=xn(In(o),a,n.playerCanUseAction()?1:0,r),s=i===void 0?void 0:ke(e).turnTacticalProjection.get(t,i);if(s!==void 0)return s;for(let p=1;p<=ls;p+=1){if(p===r||(p&r)!==r)continue;let l=xn(In(o),a,n.playerCanUseAction()?1:0,p),m=l===void 0?void 0:ke(e).turnTacticalProjection.get(t,l);if(m!==void 0){let d=jR(m,r);return e.session.cacheWriteAllowed?(i!==void 0&&ke(e).turnTacticalProjection.set(t,d,i),d):St()}}let u=KR(e,n,r);return e.session.cacheWriteAllowed?(i!==void 0&&ke(e).turnTacticalProjection.set(t,u,i),u):St()}c(Po,"exactTurnTacticalProjectionWithSearchHash");function RS(e,n,o,t){return Po(e,n,o,t,yt).sameTurnScoreWindowValue}c(RS,"exactSameTurnScoreWindowWithSearchHash");function qR(e,n){if(e.session.checkpointWithReserve(20))return br();let o=n.activeColor,t=Math.max(oe-n.monsMovesCount,0),r=kl(e,n.board,o,t,n.playerCanUseAction(),si|ui|Ss);if(e.session.checkpointWithReserve(20))return br();let a=sc(e,n,o,{kind:"supermana"});if(e.session.checkpointWithReserve(20))return br();let i=sc(e,n,o,{kind:"regular",color:B(o)});if(e.session.checkpointWithReserve(20))return br();let s=Math.max(Sl(e,n.board,o,t),r.sameTurnScoreValue,r.sameTurnOpponentManaScoreValue),u=Qe(n.board),p={canAttackOpponentDrainer:TS(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:rc(e,n.board,o)};return e.session.checkpointWithReserve(20)?br():p}c(qR,"buildExactTurnSummary");function zR(e,n,o,t){if(n.activeColor!==o||e.session.checkpointWithReserve(20))return br();let r=ke(e).turnSummary.get(t);if(r!==void 0)return r;let a=qR(e,n);return e.session.cacheWriteAllowed?(ke(e).turnSummary.set(t,a),a):br()}c(zR,"exactTurnSummaryWithSearchHash");function Tl(e,n,o){return zR(e,n,o,ue(n))}c(Tl,"exactTurnSummary");function PS(e,n,o){return Tl(e,n,o).canAttackOpponentDrainer}c(PS,"canAttackOpponentDrainerThisTurn");function pi(e,n,o,t){if(n.activeColor!==o||e.session.checkpointWithReserve(20))return Cr();let r={remainingMonMoves:Math.max(oe-n.monsMovesCount,0),canUseAction:n.playerCanUseAction(),canMoveMana:n.playerCanMoveMana()},a=Qe(n.board),i=Po(e,n,o,t,ls);if(e.session.checkpointWithReserve(20))return Cr();let s=oc(e,n.board,a,o);if(e.session.checkpointWithReserve(20))return Cr();let u=B(o),p=u===R.White?n.whiteScore:n.blackScore,l=Math.max(be-p,0),m=sa(e,n,t).colorSummary(u).immediateWindow.bestScore;if(e.session.checkpointWithReserve(20))return Cr();let d=l>0&&m>=l,f=l>0&&i.sameTurnScoreWindowValue>0?Math.min(i.sameTurnScoreWindowValue,l):0,y={budget:r,turn:i,delta:{sameTurnScoreWindowValue:i.sameTurnScoreWindowValue,spiritGain:Math.max(i.spiritAssistedScoreValue,i.spiritAssistedDenialValue),opponentWindowDenyGain:f,drainerAttackAvailable:TS(e,n,o,a),drainerSafety:s,safeSupermanaProgressSteps:i.safeSupermanaProgressSteps,safeOpponentManaProgressSteps:i.safeOpponentManaProgressSteps},opponentCanWinImmediately:d};return e.session.checkpointWithReserve(20)?Cr():y}c(pi,"exactOpportunityContextWithSearchHash");function Te(e,n,o){return pi(e,n,o,ue(n))}c(Te,"exactOpportunityContext");var ua=4096,li=256,di=Number.MAX_SAFE_INTEGER,uc=ao(342167472,1939669891),hs=ao(256,435),wS=ao(4294967295,4294967295),AS=ao(4294967295,4294967294),Ke=Object.freeze({Baseline:"baseline",Production:"production"}),Rl=Object.freeze({[Ke.Baseline]:0,[Ke.Production]:1}),S=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"}),Gt=Object.freeze([S.ImmediateScore,S.DenyOpponentWindow,S.DrainerKill,S.DrainerSafetyRecovery,S.SpiritImpact,S.SafeSupermanaProgress,S.SafeOpponentManaProgress,S.ManaTempo]),ES=Object.freeze({[S.ImmediateScore]:1,[S.DenyOpponentWindow]:2,[S.DrainerKill]:3,[S.SafeSupermanaProgress]:4,[S.SafeOpponentManaProgress]:5,[S.DrainerSafetyRecovery]:6,[S.SpiritImpact]:7,[S.ManaTempo]:8});function Pl(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(Pl,"createTurnUtility");var Bn=Object.freeze(Pl()),hn=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"}),ee=Object.freeze({NoPlan:"no-plan",BudgetExceeded:"budget-exceeded"}),ca=Object.freeze({scoreGain:0,denyGain:0,drainerSafetyDelta:0,spiritOnlySetup:!1,endsNonnegativeDrainerSafety:!1,opponentImmediateWindowAfter:0});function bs(e,n){return e<n?-1:e>n?1:0}c(bs,"compareNumber");function gS(e){switch(e.kind){case"takeback":return 0;case"location":return 1;case"modifier":return 2}}c(gS,"inputTag");function wl(e,n){return bs(e.i,n.i)||bs(e.j,n.j)}c(wl,"compareLocations");function vS(e,n){return cc(e.input,n.input)}c(vS,"compareNextInputs");function cc(e,n){let o=bs(gS(e),gS(n));return o!==0?o:e.kind==="location"&&n.kind==="location"?wl(e.location,n.location):e.kind==="modifier"&&n.kind==="modifier"?bs(wp[e.modifier],wp[n.modifier]):0}c(cc,"compareInputs");function io(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=cc(r,a);if(i!==0)return i}return bs(e.length,n.length)}c(io,"compareInputChains");function Al(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(Al,"lexicographicValues");function bt(e){return e.denyGain>=0}c(bt,"utilityHasNonnegativeDenyGain");function pa(e){return e.drainerSafety>0||e.avoidImmediateLoss>0}c(pa,"utilitySupportsTemporaryRiskRecovery");function mo(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(mo,"utilityStrictlyDominatesOverrideAxes");function Vo(e,n){if(!mo(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(Vo,"utilityPassesOverrideGuard");function Ho(e,n){return so(e,n)>=0&&e.evalScore+192>=n.evalScore}c(Ho,"utilitySupportsFamilyFallback");function Tr(e,n){return e.winState>n.winState||e.avoidImmediateLoss>n.avoidImmediateLoss||e.denyGain>n.denyGain||e.drainerAttack>n.drainerAttack||e.drainerSafety>n.drainerSafety}c(Tr,"utilityImprovesNonScoreOverrideAxes");function xS(e,n,o){return e.scoreDelta>=n.scoreDelta+o}c(xS,"utilityHasScoreDeltaForce");function ot(e,n,o){return se(e,n)>=0&&e.evalScore+o>=n.evalScore}c(ot,"utilitySupportsPrimaryAxesEvalTolerance");function on(e,n){return e<n?-1:e>n?1:0}c(on,"compareNumber");function Ms(e,n){let o=Math.min(e.length,n.length);for(let t=0;t<o;t+=1){let r=on(e[t]??0,n[t]??0);if(r!==0)return r}return on(e.length,n.length)}c(Ms,"compareTuples");function El(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(El,"copyPlan");function la(e,n){let o=on(e.length,n.length);if(o!==0)return o;for(let t=0;t<e.length;t+=1){let r=io(e[t]??[],n[t]??[]);if(r!==0)return r}return 0}c(la,"compareChunks");function Cs(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(Cs,"actionKeyTuple");function gl(e){let[n,o,t,r]=Cs(e);return`${n}:${Q(o)}:${t===void 0?-1:Q(t)}:${r===void 0?-2:Q(r)}`}c(gl,"actionKey");function NS(e,n){let o=on(e.i,n.i);return o!==0?o:on(e.j,n.j)}c(NS,"compareLocations");function OS(e,n){return e===void 0?n===void 0?0:-1:n===void 0?1:NS(e,n)}c(OS,"compareOptionalLocations");function da(e,n){let o=Cs(e),t=Cs(n);return on(o[0],t[0])||NS(o[1],t[1])||OS(o[2],t[2])||OS(o[3],t[3])}c(da,"compareActionKeys");function so(e,n){return Ms([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(so,"compareTurnUtilities");function se(e,n){return Ms([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(se,"compareUtilityPrimaryAxes");function lo(e){return Gt.indexOf(e)}c(lo,"familyRank");function IS(e){return e.avoidImmediateLoss<0?0:e.drainerSafety<0||e.scoreDelta<0?1:2}c(IS,"headOpeningRiskClass");function $R(e,n,o){return(e===S.SafeSupermanaProgress||e===S.SafeOpponentManaProgress)&&IS(n)!==IS(o)}c($R,"shouldCompareHeadOpeningUtility");function YR(e,n,o,t,r,a){let i=se(e,t);return i!==0||o===a&&$R(o,n,r)&&(i=se(n,r),i!==0||(i=on(n.evalScore,r.evalScore),i!==0))?i:on(e.evalScore,t.evalScore)}c(YR,"comparePlanRank");function XR(e,n){return Ms([+(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(XR,"comparePackageMeta");function Qn(e,n){let o=YR(e.utility,e.headUtility,e.headFamily,n.utility,n.headUtility,n.headFamily);return o!==0||(o=XR(e.packageMeta,n.packageMeta),o!==0)||(o=on(lo(n.goalFamily),lo(e.goalFamily)),o!==0)||(o=on(lo(n.headFamily),lo(e.headFamily)),o!==0)?o:(o=on(n.actions.length,e.actions.length),o!==0?o:la(e.compiledChunks,n.compiledChunks))}c(Qn,"turnEngineComparePlans");var DS=["id","formula","material","position","mana","race","threat"],vl=["useHeuristicFormula","includeRegularManaMoveWindows","includeMatchPointWindow","nextTurnWindowScaleBp","doubleConfirmedScore"],Ol=["confirmedScore","faintedMon","faintedDrainer","faintedCooldownStep","hasConsumable","activeMon"],Il=["drainerAtRisk","manaCloseToSamePool","monWithManaCloseToAnyPool","extraForSupermana","extraForOpponentsMana","drainerCloseToMana","drainerHoldingMana","drainerCloseToOwnPool","drainerCloseToSupermana","monCloseToCenter","spiritCloseToEnemy","spiritOnOwnBasePenalty","angelGuardingDrainer","angelCloseToFriendlyDrainer"],xl=["regularManaToOwnerPool","regularManaDrainerControl","supermanaDrainerControl","supermanaRaceControl","opponentManaDenial","manaCarrierAtRisk","manaCarrierGuarded","manaCarrierOneStepFromPool","supermanaCarrierOneStepFromPoolExtra","immediateWinningCarrier"],Nl=["scoreRacePathProgress","opponentScoreRacePathProgress","scoreRaceMultiPath","opponentScoreRaceMultiPath","immediateScoreWindow","opponentImmediateScoreWindow","immediateScoreMultiWindow","opponentImmediateScoreMultiWindow"],Dl=["drainerBestManaPath","drainerPickupScoreThisTurn","manaCarrierScoreThisTurn","drainerImmediateThreat","spiritActionUtility","drainerDangerBoolean","manaCarrierDangerBoolean","drainerWalkThreatBoolean","manaCarrierWalkThreatBoolean","opponentDrainerAttackBonus","attackerCloseToOpponentDrainer"];var _S=Object.freeze({default:"[[true,false,false,5000,true],[1000,-500,-800,0,110,50],[-350,500,800,120,100,300,350,180,120,210,160,180,180,120],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0]]","balanced-distance":"[[true,false,false,5000,true],[1000,-520,-900,-80,105,45],[-420,520,820,130,120,330,370,280,180,180,220,180,280,180],[0,0,0,0,0,0,0,160,80,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0]]","mana-race-lite":"[[true,false,false,5000,true],[1000,-520,-900,-70,105,45],[-420,420,820,130,120,330,370,290,200,180,220,180,290,180],[150,15,26,0,0,-150,70,220,120,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0]]","finisher-balanced":"[[true,false,false,5000,true],[1000,-520,-900,-80,105,45],[-420,520,820,130,120,330,370,280,180,180,220,180,280,180],[0,0,0,0,0,0,0,220,110,360],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0]]","finisher-aggressive":"[[true,false,false,5000,true],[1000,-520,-900,-80,105,45],[-420,520,820,130,120,330,370,280,180,180,220,180,280,180],[0,0,0,0,0,0,0,250,130,540],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0]]","mana-race-lite-d2":"[[true,false,false,5000,true],[1000,-520,-900,-70,105,45],[-420,380,820,130,120,330,370,320,200,180,220,180,290,180],[170,18,26,0,0,-210,95,260,150,300],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0]]","tactical-balanced":"[[true,false,false,5000,true],[1000,-520,-900,-120,105,45],[-420,520,820,130,120,330,370,280,180,180,230,180,300,180],[0,0,0,0,0,-200,110,240,150,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0]]","tactical-aggressive":"[[true,false,false,5000,true],[1000,-520,-900,-160,105,45],[-420,520,820,130,120,330,370,280,180,180,250,180,320,180],[0,0,0,0,0,-260,140,320,220,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0]]","runtime-fast-context":"[[false,false,false,5000,true],[920,-520,-900,-70,105,45],[-420,380,820,130,120,360,430,320,200,180,220,180,290,180],[170,18,26,0,0,-285,145,320,210,520],[165,150,60,90,240,220,80,120],[250,210,290,-220,56,0,0,0,0,0,0]]","runtime-fast-context-potion":"[[false,false,false,5000,true],[920,-520,-900,-70,320,45],[-420,380,820,130,120,360,430,320,200,180,220,180,290,180],[170,18,26,0,0,-285,145,320,210,520],[165,150,60,90,240,220,80,120],[250,210,290,-220,72,0,0,0,0,0,0]]","runtime-fast-boolean":"[[false,false,false,5000,true],[920,-520,-900,-70,105,45],[-420,380,820,130,120,360,430,320,200,180,220,180,290,180],[170,18,26,30,0,-285,145,320,210,520],[165,150,60,90,240,220,80,120],[250,210,290,-220,56,-400,-300,0,0,0,0]]","runtime-fast-boolean-potion":"[[false,false,false,5000,true],[920,-520,-900,-70,320,45],[-420,380,820,130,120,360,430,320,200,180,220,180,290,180],[170,18,26,30,0,-285,145,320,210,520],[165,150,60,90,240,220,80,120],[250,210,290,-220,72,-400,-300,0,0,0,0]]","runtime-normal.base.balanced":"[[false,false,false,5000,true],[900,-520,-900,-80,105,45],[-420,520,820,130,120,360,470,280,180,180,220,260,120,180],[0,0,0,30,24,0,0,160,80,0],[86,184,0,0,96,245,0,0],[58,90,150,-55,86,0,0,0,0,0,0]]","runtime-normal.base.tactical":"[[false,false,false,5000,true],[900,-520,-900,-120,105,45],[-420,520,820,130,120,390,500,280,180,180,230,260,180,180],[0,0,0,34,30,-200,110,240,150,0],[94,220,0,0,102,310,0,0],[84,110,180,-90,90,0,0,0,0,0,0]]","runtime-normal.base.tactical-aggressive":"[[false,false,false,5000,true],[890,-520,-900,-160,105,45],[-420,520,820,130,120,410,520,280,180,180,250,260,190,180],[0,0,0,40,34,-260,140,320,220,0],[104,255,0,0,114,360,0,0],[96,130,220,-120,94,0,0,0,0,0,0]]","runtime-normal.base.finisher":"[[false,false,false,5000,true],[930,-520,-900,-80,105,45],[-420,520,820,130,120,375,500,280,180,180,220,260,170,180],[0,0,0,32,28,0,0,220,110,360],[170,170,0,0,275,235,0,0],[72,120,240,0,88,0,0,0,0,0,0]]","runtime-normal.base.finisher-aggressive":"[[false,false,false,5000,true],[940,-520,-900,-80,105,45],[-420,520,820,130,120,395,520,280,180,180,220,260,180,180],[0,0,0,36,30,0,0,250,130,540],[195,185,0,0,330,265,0,0],[84,140,280,0,90,0,0,0,0,0,0]]","runtime-normal.boolean.balanced":"[[false,false,false,5000,true],[900,-520,-900,-80,105,45],[-420,520,820,130,120,360,470,280,180,180,220,260,120,180],[0,0,0,30,24,0,0,160,80,0],[86,184,0,0,96,245,0,0],[58,90,150,-55,86,-1200,-800,0,0,0,0]]","runtime-normal.boolean.tactical":"[[false,false,false,5000,true],[900,-520,-900,-120,105,45],[-420,520,820,130,120,390,500,280,180,180,230,260,180,180],[0,0,0,34,30,-200,110,240,150,0],[94,220,0,0,102,310,0,0],[84,110,180,-90,90,-1200,-800,0,0,0,0]]","runtime-normal.boolean.tactical-aggressive":"[[false,false,false,5000,true],[890,-520,-900,-160,105,45],[-420,520,820,130,120,410,520,280,180,180,250,260,190,180],[0,0,0,40,34,-260,140,320,220,0],[104,255,0,0,114,360,0,0],[96,130,220,-120,94,-1200,-800,0,0,0,0]]","runtime-normal.boolean.finisher":"[[false,false,false,5000,true],[930,-520,-900,-80,105,45],[-420,520,820,130,120,375,500,280,180,180,220,260,170,180],[0,0,0,32,28,0,0,220,110,360],[170,170,0,0,275,235,0,0],[72,120,240,0,88,-1200,-800,0,0,0,0]]","runtime-normal.boolean.finisher-aggressive":"[[false,false,false,5000,true],[940,-520,-900,-80,105,45],[-420,520,820,130,120,395,520,280,180,180,220,260,180,180],[0,0,0,36,30,0,0,250,130,540],[195,185,0,0,330,265,0,0],[84,140,280,0,90,-1200,-800,0,0,0,0]]","runtime-normal-walk-balanced":"[[false,false,false,5000,true],[900,-520,-900,-80,105,45],[-420,520,820,130,120,360,470,280,180,180,220,260,120,180],[0,0,0,30,24,0,0,160,80,0],[86,184,0,0,96,245,0,0],[58,90,150,-55,86,-1200,-800,-300,-150,0,0]]","runtime-normal-walk-tactical":"[[false,false,false,5000,true],[900,-520,-900,-120,105,45],[-420,520,820,130,120,390,500,280,180,180,230,260,180,180],[0,0,0,34,30,-200,110,240,150,0],[94,220,0,0,102,310,0,0],[84,110,180,-90,90,-1200,-800,-300,-150,0,0]]","runtime-normal-walk-tactical-aggressive":"[[false,false,false,5000,true],[890,-520,-900,-160,105,45],[-420,520,820,130,120,410,520,280,180,180,250,260,190,180],[0,0,0,40,34,-260,140,320,220,0],[104,255,0,0,114,360,0,0],[96,130,220,-120,94,-1200,-800,-300,-150,0,0]]","runtime-normal-walk-finisher":"[[false,false,false,5000,true],[930,-520,-900,-80,105,45],[-420,520,820,130,120,375,500,280,180,180,220,260,170,180],[0,0,0,32,28,0,0,220,110,360],[170,170,0,0,275,235,0,0],[72,120,240,0,88,-1200,-800,-300,-150,0,0]]","runtime-normal-walk-finisher-aggressive":"[[false,false,false,5000,true],[940,-520,-900,-80,105,45],[-420,520,820,130,120,395,520,280,180,180,220,260,180,180],[0,0,0,36,30,0,0,250,130,540],[195,185,0,0,330,265,0,0],[84,140,280,0,90,-1200,-800,-300,-150,0,0]]","runtime-normal-attacker-balanced":"[[false,false,false,5000,true],[900,-520,-900,-80,105,45],[-420,520,820,130,120,360,470,280,180,180,220,260,120,180],[0,0,0,30,24,0,0,160,80,0],[86,184,0,0,96,245,0,0],[58,90,150,-55,86,-1200,-800,0,0,0,200]]","runtime-normal-attacker-tactical":"[[false,false,false,5000,true],[900,-520,-900,-120,105,45],[-420,520,820,130,120,390,500,280,180,180,230,260,180,180],[0,0,0,34,30,-200,110,240,150,0],[94,220,0,0,102,310,0,0],[84,110,180,-90,90,-1200,-800,0,0,0,200]]","runtime-normal-attacker-tactical-aggressive":"[[false,false,false,5000,true],[890,-520,-900,-160,105,45],[-420,520,820,130,120,410,520,280,180,180,250,260,190,180],[0,0,0,40,34,-260,140,320,220,0],[104,255,0,0,114,360,0,0],[96,130,220,-120,94,-1200,-800,0,0,0,200]]","runtime-normal-attacker-finisher":"[[false,false,false,5000,true],[930,-520,-900,-80,105,45],[-420,520,820,130,120,375,500,280,180,180,220,260,170,180],[0,0,0,32,28,0,0,220,110,360],[170,170,0,0,275,235,0,0],[72,120,240,0,88,-1200,-800,0,0,0,200]]","runtime-normal-attacker-finisher-aggressive":"[[false,false,false,5000,true],[940,-520,-900,-80,105,45],[-420,520,820,130,120,395,520,280,180,180,220,260,180,180],[0,0,0,36,30,0,0,250,130,540],[195,185,0,0,330,265,0,0],[84,140,280,0,90,-1200,-800,0,0,0,200]]"});var _l=1e4,FS=2e4,QR=/^[a-z0-9]+(?:[.-][a-z0-9]+)*$/,WS=new Map(Object.entries(_S)),Fl=new WeakSet;function Wl(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(Wl,"validateExactKeys");function BS(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}`)}c(BS,"validateProfileId");function ks(e,n,o){Wl(e,n,o);for(let[t,r]of Object.entries(n))if(!Number.isSafeInteger(r)||Math.abs(r)>_l)throw new RangeError(`${e}.${t} must be a safe integer between -${_l} and ${_l}`)}c(ks,"validateNumericSection");function ZR(e){Wl("formula",e,vl);for(let[n,o]of Object.entries(e))if(n==="nextTurnWindowScaleBp"){if(typeof o!="number"||!Number.isSafeInteger(o)||o<0||o>FS)throw new RangeError(`formula.nextTurnWindowScaleBp must be an integer between 0 and ${FS}`)}else if(typeof o!="boolean")throw new TypeError(`formula.${n} must be a boolean`)}c(ZR,"validateFormula");function JR(e){return JSON.stringify([vl.map(n=>e.formula[n]),Ol.map(n=>e.material[n]),Il.map(n=>e.position[n]),xl.map(n=>e.mana[n]),Nl.map(n=>e.race[n]),Dl.map(n=>e.threat[n])])}c(JR,"profileSignature");function eP(e){let n=JR(e),o=WS.get(e.id);if(o!==void 0&&o!==n)throw new RangeError(`scoring profile id ${e.id} is already registered with different weights`);WS.set(e.id,n)}c(eP,"registerProfileIdentity");function Nn(e){return Object.freeze(e)}c(Nn,"freezeScoringSection");function Pn(e){BS(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:Nn({...n.formula,...e.formula}),material:Nn({...n.material,...e.material}),position:Nn({...n.position,...e.position}),mana:Nn({...n.mana,...e.mana}),race:Nn({...n.race,...e.race}),threat:Nn({...n.threat,...e.threat})};Ts(o);let t=Object.freeze(o);return Fl.add(t),t}c(Pn,"defineScoringProfile");function Ts(e){if(typeof e!="object"||e===null)throw new TypeError("scoring profile must be an object");let n=e;Wl("scoring profile",n,DS),BS(n.id),ZR(n.formula),ks("material",n.material,Ol),ks("position",n.position,Il),ks("mana",n.mana,xl),ks("race",n.race,Nl),ks("threat",n.threat,Dl),eP(n)}c(Ts,"validateScoringProfile");function mi(e){return e.id}c(mi,"scoringProfileId");function Rs(e){if(Ts(e),Fl.has(e))return e;let n=Object.freeze({id:e.id,formula:Nn({...e.formula}),material:Nn({...e.material}),position:Nn({...e.position}),mana:Nn({...e.mana}),race:Nn({...e.race}),threat:Nn({...e.threat})});return Ts(n),Fl.add(n),n}c(Rs,"normalizeScoringProfile");function LS(e){let n=uc,o=[e.ownSeedCap,e.ownBeam,e.perNodeFamilyCap,e.stepCap,e.opponentSeedCap,e.opponentBeam,e.replySeedCap,e.replyBeam,e.expansionCap,Number(e.enableSpiritFamily),Rl[e.mode]+1,Number(e.enableLazyOracleScoreWindowProjection)];for(let t of o)n=ms(fs(n,ll(t)),hs);for(let t of mi(e.scoringWeights))n=ms(fs(n,ll(t.codePointAt(0)??0)),hs);return n}c(LS,"configFingerprint");function pc(e,n,o){return{stateHash:ue(e),modeTag:Rl[n],configFingerprint:LS(o)}}c(pc,"cacheKeyForMode");function lc(e,n){return pc(e,n.mode,n)}c(lc,"cacheKey");function GS(e,n,o){return{configFingerprint:LS(o),startTag:e.hi*2+rn(n),startLow:e.lo}}c(GS,"createUtilityCacheIdentity");function VS(e,n){return{stateHash:e,configFingerprint:n.configFingerprint,startTag:n.startTag,startLow:n.startLow}}c(VS,"utilityCacheKey");var nP=Symbol("turn-engine-caches"),Bl=class{static{c(this,"TurnEngineCaches")}continuation=new xe(ua);oracle=new xe(ua);utility=new xe(ua);bestPlan=new xe(ua);noPlan=new To(ua);capacity=ua*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()}};function Zn(e){return e.caches.engine.getOrCreate(nP,()=>new Bl)}c(Zn,"turnEngineCaches");function Ll(e,n){return e.get(n.stateHash,n.modeTag,n.configFingerprint)}c(Ll,"turnCacheGet");function HS(e,n){return e.has(n.stateHash,n.modeTag,n.configFingerprint)}c(HS,"turnCacheHas");function dc(e,n,o){e.set(n.stateHash,o,n.modeTag,n.configFingerprint)}c(dc,"turnCacheSet");function US(e,n){e.add(n.stateHash,n.modeTag,n.configFingerprint)}c(US,"turnCacheAdd");function Gl(e,n){e.delete(n.stateHash,n.modeTag,n.configFingerprint)}c(Gl,"turnCacheDelete");function mc(e){Zn(e).clear()}c(mc,"clearTurnEnginePlanCache");var Vl=Math.trunc(6710886375e-2),jS=-Vl;function Hl(e){return Number.isNaN(e)?0:e<=-2147483648?-2147483648:e>=2147483647?2147483647:Math.trunc(e)}c(Hl,"clampScore");function fc(e){return Number.isNaN(e)?0:e<=jS?jS:e>=Vl?Vl:Math.trunc(e)}c(fc,"clampHeuristicScore");function A(e,n){return Hl(e+n)}c(A,"saturatingScoreAdd");function L(e,n){return Hl(e-n)}c(L,"saturatingScoreSubtract");function Ze(e,n){return Hl(e*n)}c(Ze,"saturatingScoreMultiply");function oP(e,n){let o=e.kind!=="mon-with-mana"&&(n.kind===w.Mystic||n.kind===w.Demon||e.kind==="mon-with-consumable"),t=n.kind===w.Mystic||n.kind===w.Demon,r=e.kind==="mon-with-consumable"&&e.consumable===K.Bomb;return[o,t,r]}c(oP,"scoringDangerSourceFlags");function KS(e){return Math.max(Math.min(e.i,Math.abs(gt-e.i)),Math.min(e.j,Math.abs(gt-e.j)))+1}c(KS,"distanceToAnyClosestPool");function Ln(e){return e===R.White?0:1}c(Ln,"colorSlot");function tP(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=KS(o)-1;if(n.manaEntries.push({location:o,mana:t.mana,scoreSteps:r}),t.mana.kind==="regular"){let a=Ln(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=Ln(r.color);if(r.kind===w.Drainer&&n.drainerTargetLocations[a].push(o),H(r))break;t.kind==="mon-with-mana"&&n.liveManaCarriers[a].push({location:o,mana:t.mana,scoreSteps:KS(o)-1}),n.liveMonLocations[a].push(o),r.kind===w.Drainer&&n.liveDrainerLocations[a].push(o),r.kind===w.Angel&&n.liveAngelLocations[a].push(o);let[i,s,u]=oP(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(tP,"scoringBoardSummary");function rP(e){return{candidates:e.manaEntries.slice(),regularManaMoveScores:[e.regularManaMoveScores[0],e.regularManaMoveScores[1]]}}c(rP,"manaPathSnapshot");var yc=class{static{c(this,"ScoringEvalContext")}#e;#o;#n;#t;#r;#a;#u;#s;#c;#d;#f;#m;#y=-1;#p;#S=-1;#i;#h;#k;constructor(n,o,t){this.#e=n,this.#o=o,this.#n=o.board,this.#t=t.allowExactStrategic,this.#r=t.useAttackReachSummary??!1,this.#a=t.narrowAttackReachTargets??!1,this.#u=t.narrowAttackReachToDrainers??!1}get boardHash(){return this.#s??=Qe(this.#n),this.#s}get execution(){return this.#e}get game(){return this.#o}get board(){return this.#n}get allowExactStrategic(){return this.#t}boardSummary(){return this.#c??=tP(this.#n),this.#c}manaPathSnapshot(){return this.#d??=rP(this.boardSummary()),this.#d}exactAnalysis(){if(this.#t)return this.#f??=ci(this.#e,this.#o),this.#f}#C(n){return this.#m??=[Qu(this.#n,R.White),Qu(this.#n,R.Black)],this.#m[Ln(n)]}#R(n){return this.boardSummary().drainerTargetLocations[Ln(n)]}#l(n,o,t,r,a){let i=Number.isInteger(t)&&t>=0&&t<=65535?t*16+rn(n)+rn(o)*2+Number(r)*4+Number(a)*8:void 0;if(i!==void 0){let u=this.#k?.get(i);if(u!==void 0)return u}let s;return a?s=Zu(this.#e,this.#n,n,t,r,this.#R(o)):this.#a?s=Zu(this.#e,this.#n,n,t,r,this.#C(o)):s=Zy(this.#e,this.#n,n,o,t,r),i!==void 0&&(this.#k??=new Map).set(i,s),s}drainerImmediateThreats(n,o){if(this.#r)return this.#l(B(n),n,0,!0,this.#u).immediateThreats(o);let t=Q(o)+(n===R.Black?121:0);if(this.#h!==void 0){let a=this.#h.get(t);if(a!==void 0)return a}else{if(t===this.#y&&this.#p!==void 0)return this.#p;if(t===this.#S&&this.#i!==void 0)return this.#i}let r=ec(this.#e,this.#n,n,o);if(this.#h!==void 0)this.#h.set(t,r);else if(this.#y<0)this.#y=t,this.#p=r;else if(this.#S<0)this.#S=t,this.#i=r;else{let a=new Map;this.#p!==void 0&&a.set(this.#y,this.#p),this.#i!==void 0&&a.set(this.#S,this.#i),a.set(t,r),this.#h=a,this.#p=void 0,this.#i=void 0}return r}canAttackTargetOnBoard(n,o,t,r,a){if(this.#r){let i=this.#n.get(t),s=i===void 0?void 0:G(i);if(this.#u&&s?.color===o&&s.kind===w.Drainer)return this.#l(n,o,r,a,!0).canAttackTarget(t);if(!this.#u)return this.#l(n,o,r,a,!1).canAttackTarget(t)}return Mr(this.#e,this.#n,this.boardHash,n,o,t,r,a)}};function qS(e){return!e.exactDangerThreat&&!e.walkThreat}c(qS,"exactSafe");function Ul(e){return e.angelNearby&&!e.exactDangerThreat}c(Ul,"guardedAgainstExactAttack");function Uo(e){if(e===void 0)throw new Error("exact strategic analysis should be available");return e}c(Uo,"requireExactSummary");function jl(e,n,o,t){return o===t?e:n}c(jl,"exactSummaryForScoring");function Kl(e,n,o,t){return n.kind===w.Spirit&&!H(n)&&_e(o,e.base(n))?t:0}c(Kl,"spiritOnOwnBasePenalty");function ql(e,n){let o=Math.min(4,Math.max(0,e.nextTurnSetupGain)),t=0;return o>0&&(t=A(t,Math.trunc(Ze(Math.max(0,n.race.scoreRacePathProgress),o)/4)),t=A(t,Math.trunc(Ze(Math.max(0,n.race.opponentScoreRacePathProgress),o)/6)),t=A(t,Math.trunc(Ze(Math.max(0,n.race.scoreRaceMultiPath),o)/8)),t=A(t,Math.trunc(Ze(Math.max(0,n.race.opponentScoreRaceMultiPath),o)/10))),e.supermanaProgress&&!e.sameTurnScore&&(t=A(A(t,Ze(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,Ze(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(ql,"exactSpiritPressureBonus");function zl(e,n){let o=0;for(let t of _o(n)){let r=e.get(t);r!==void 0&&st(r)&&(o+=1)}return o}c(zl,"heuristicSpiritActionUtility");function Sc(e,n,o){let t;for(let r of e.candidates){let i=ne(o,r.location)+r.scoreSteps,s=Fe(r.mana,n);if(t===void 0){t=[i,s];continue}let u=i*3-s,p=t[0]*3-t[1];(u<p||u===p&&s>t[1])&&(t=[i,s])}return t}c(Sc,"bestDrainerPickupPathWithSnapshot");function aP(e,n,o,t){let r=t.boardSummary(),a=11,i=11;for(let u of r.manaEntries)a=Math.min(a,ne(u.location,n));for(let u of r.dangerSources[Ln(B(e))]){if(o){u.heuristicThreat&&(i=Math.min(i,ne(u.location,n)));continue}let p=2147483647;if(u.exactActionThreat&&(p=ne(u.location,n)),u.exactBombThreat){let l=Math.max(1,ne(u.location,n)-2);p=Math.min(p,l)}i=Math.min(i,p)}if(o)for(let u of r.looseConsumableLocations)i=Math.min(i,ne(u,n));let s=r.liveAngelLocations[Ln(e)].some(u=>ne(u,n)===1);return o?[i,a,s]:[Math.max(1,i),Math.max(1,a),s]}c(aP,"drainerDistancesWithContext");function $l(e,n,o,t,r){let a=r.board,[i,s,u]=aP(e,n,o,r),p=o?mS(r.execution,a,e,n,u):r.canAttackTargetOnBoard(B(e),e,n,oe,!0),l=t&&!p&&ai(r.execution,a,r.boardHash,e,n,u);return{riskDanger:o?Math.max(1,i):p?1:Math.max(1,i),minMana:s,angelNearby:u,exactDangerThreat:p,walkThreat:l}}c($l,"drainerSafetySnapshotWithContext");function Yl(e,n,o){return o.drainerImmediateThreats(e,n)}c(Yl,"drainerImmediateThreatsWithContext");function zS(e,n,o){let t=11;for(let r of o.boardSummary().liveMonLocations[Ln(B(e))])t=Math.min(t,ne(r,n));return Math.max(1,t)}c(zS,"nearestEnemyMonDistanceWithContext");function Vt(e,n,o){let t=11;for(let r of o.boardSummary().liveDrainerLocations[Ln(e)])t=Math.min(t,ne(r,n));return Math.max(1,t)}c(Vt,"nearestFriendlyDrainerDistanceWithContext");function $S(e,n){return ne(e,n)+1}c($S,"distanceToLocation");function Xl(e){return Math.max(1,Math.abs(pu-e.i))+1}c(Xl,"distanceToCenter");function YS(e){return Math.max(Math.min(e.i,Math.abs(gt-e.i)),Math.min(e.j,Math.abs(gt-e.j)))+1}c(YS,"distanceToAnyClosestPool");function Ps(e,n){let o=n===R.White?gt:0;return Math.max(Math.abs(o-e.i),Math.min(e.j,Math.abs(gt-e.j)))+1}c(Ps,"distanceToClosestPool");function fo(e,n){return Math.trunc(Math.trunc(e)*Math.trunc(n)/1e4)}c(fo,"scaleByBp");function Ql(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(Ql,"insertLowestStep");function Zl(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(Zl,"insertTopScore");function XS(e,n,o,t){if(!t)return o.scorePathWindow;let a=e.boardSummary().regularManaScorePathSteps[Ln(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(XS,"exactScorePathWindowForContext");function QS(e,n,o,t){let r=e.boardSummary(),a=[2147483647,2147483647,2147483647];for(let u of r.liveManaCarriers[Ln(n)])Ql(a,u.scoreSteps+1);if(o){let u=e.manaPathSnapshot();for(let p of r.liveDrainerLocations[Ln(n)]){let l=Sc(u,n,p);l!==void 0&&Ql(a,l[0]+1)}}if(t){let u=r.regularManaScorePathSteps[Ln(n)];u!==void 0&&Ql(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(QS,"scorePathWindowToAnyPoolForContext");function hc(e,n,o,t){if(!t)return o.immediateWindow;let r=e.boardSummary().regularManaMoveScores[Ln(n)];return{bestScore:Math.max(o.immediateWindow.bestScore,r),multiPressure:o.immediateWindow.multiPressure}}c(hc,"exactImmediateScoreWindowForContext");function ZS(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[Ln(n)])u.scoreSteps<=o&&Zl(s,Fe(u.mana,n));if(t){let u=e.manaPathSnapshot();for(let p of i.liveDrainerLocations[Ln(n)]){let l=0;for(let m of u.candidates)ne(p,m.location)+m.scoreSteps<=o&&(l=Math.max(l,Fe(m.mana,n)));l>0&&Zl(s,l)}}if(r&&a){let u=i.regularManaMoveScores[Ln(n)];u>0&&Zl(s,u)}return{bestScore:s[0]??0,multiPressure:(s[1]??0)*70+(s[2]??0)*35}}c(ZS,"immediateScoreWindowSummaryForContext");function JS(e,n,o,t,r,a,i,s){let u=s,p=t?QS(o,e,!1,r):XS(o,e,Uo(a),r),l=t?QS(o,B(e),!1,r):XS(o,B(e),Uo(i),r);return p.bestSteps!==void 0&&(u=u+fo(Math.trunc(n.race.scoreRacePathProgress/Math.max(1,p.bestSteps)),1e4),t||(u=u+fo(Math.trunc(n.race.scoreRaceMultiPath*p.multiPressure/100),1e4))),l.bestSteps!==void 0&&(u=u+-fo(Math.trunc(n.race.opponentScoreRacePathProgress/Math.max(1,l.bestSteps)),1e4),t||(u=u+-fo(Math.trunc(n.race.opponentScoreRaceMultiPath*l.multiPressure/100),1e4))),u}c(JS,"scorePreferabilityRaceWindows");function eh(e,n,o,t,r,a,i,s,u,p,l,m,d){let f=o.game,y=d;if(f.activeColor===e){let b=t?ZS(o,e,s,!1,r,r&&f.playerCanMoveMana()):hc(o,e,Uo(u),r&&f.playerCanMoveMana());if(y=y+fo(n.race.immediateScoreWindow*b.bestScore,1e4),!t){y=y+fo(Math.trunc(n.race.immediateScoreMultiWindow*b.multiPressure/100),1e4);let C=hc(o,B(e),Uo(p),r);y=y+-fo(Math.trunc(n.race.opponentImmediateScoreWindow*C.bestScore*i/1e4),1e4),y=y+-fo(Math.trunc(n.race.opponentImmediateScoreMultiWindow*C.multiPressure*i/1e6),1e4),a&&(l+b.bestScore>=be&&(y=y+n.mana.immediateWinningCarrier),m+C.bestScore>=be&&(y=y+-n.mana.immediateWinningCarrier))}}else{let b=t?ZS(o,B(e),s,!1,r,r&&f.playerCanMoveMana()):hc(o,B(e),Uo(p),r&&f.playerCanMoveMana());if(y=y+-fo(n.race.opponentImmediateScoreWindow*b.bestScore,1e4),!t){y=y+-fo(Math.trunc(n.race.opponentImmediateScoreMultiWindow*b.multiPressure/100),1e4);let C=hc(o,e,Uo(u),r);y=y+fo(Math.trunc(n.race.immediateScoreWindow*C.bestScore*i/1e4),1e4),y=y+fo(Math.trunc(n.race.immediateScoreMultiWindow*C.multiPressure*i/1e6),1e4),a&&(m+b.bestScore>=be&&(y=y+-n.mana.immediateWinningCarrier),l+C.bestScore>=be&&(y=y+n.mana.immediateWinningCarrier))}}return y}c(eh,"scorePreferabilityImmediateWindows");var iP=2500,sP=2500,uP=9200,cP=2,Jl=new Set(Xr.map(Q));function Rr(e,n,o,t,r){let a=new yc(e,n,{allowExactStrategic:r});return pP(a,o,t)}c(Rr,"evaluatePreferabilityWithWeightsAndExactPolicy");function pP(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(),p=Math.max(0,oe-t.monsMovesCount),l=r?void 0:e.exactAnalysis(),m=l?.colorSummary(n),d=l?.colorSummary(B(n)),f=n===R.White?t.whiteScore:t.blackScore,y=n===R.White?t.blackScore:t.whiteScore,b=n===R.White?t.whiteScore-t.blackScore:t.blackScore-t.whiteScore,C=n===R.White?t.whitePotionsCount-t.blackPotionsCount:t.blackPotionsCount-t.whitePotionsCount,h=b*o.material.confirmedScore+C*o.material.hasConsumable;return o.formula.doubleConfirmedScore&&(h=h*o.material.confirmedScore),h=lP(n,o,e,r,u,p,l,m,d,h),h=JS(n,o,e,r,a,m,d,h),fc(eh(n,o,e,r,a,i,s,p,m,d,f,y,h))}c(pP,"evaluatePreferabilityWithContext");function lP(e,n,o,t,r,a,i,s,u,p){let l=o.game,m=p,d=c(h=>{m=m+h},"addScore"),f=c((h,k)=>{d(h*k)},"addSigned"),y=c((h,k,M)=>{d(Math.trunc(h*k/M))},"addSignedRatio"),b=c((h,k,M,T)=>{let P=$l(h.color,k,t,n.threat.drainerWalkThreatBoolean!==0,o);if(y(M,n.position.drainerCloseToMana,P.minMana),y(M,n.position.drainerCloseToOwnPool,Ps(k,h.color)),y(M,n.position.drainerCloseToSupermana,$S(k,r)),Ul(P)?f(M,n.position.angelGuardingDrainer):y(M,n.position.drainerAtRisk,P.riskDanger),T||!t){let g=t?Sc(o.manaPathSnapshot(),h.color,k):i?.colorSummary(h.color).bestDrainerPickup;if(g!==void 0){let x="pathSteps"in g?g.pathSteps:g[0],_="totalMoves"in g?g.totalMoves:x+1,U="manaValue"in g?g.manaValue:g[1];y(M,n.threat.drainerBestManaPath*U,x+1),h.color===l.activeColor&&_<=a&&f(M,n.threat.drainerPickupScoreThisTurn*U)}}if(n.threat.drainerImmediateThreat!==0){let[g,x]=Yl(h.color,k,o),_=P.angelNearby?x:g+x;_>0&&f(M,n.threat.drainerImmediateThreat*_)}let O=(n.threat.drainerDangerBoolean!==0||n.threat.drainerWalkThreatBoolean!==0)&&P.exactDangerThreat;n.threat.drainerDangerBoolean!==0&&O&&(f(M,n.threat.drainerDangerBoolean),M===-1&&d(n.threat.opponentDrainerAttackBonus)),n.threat.drainerWalkThreatBoolean!==0&&!O&&P.walkThreat&&f(M,n.threat.drainerWalkThreatBoolean)},"evaluateDrainer"),C=c((h,k,M)=>{let T=zS(h.color,k,o);y(M,n.position.spiritCloseToEnemy,T),f(-M,Kl(l.board,h,k,n.position.spiritOnOwnBasePenalty));let P=t?4:6,E,O;if(t)E=zl(l.board,k),O=0;else{let g=jl(Uo(s),Uo(u),h.color,e).spirit;E=g.utility,O=ql(g,n)}f(M,n.threat.spiritActionUtility*Math.min(E,P)),f(M,O)},"evaluateSpirit");for(let[h,k]of l.board.entries())switch(k.kind){case"mon":{let M=k.mon,T=M.color===e?1:-1;H(M)?(f(T,M.kind===w.Drainer?n.material.faintedDrainer:n.material.faintedMon),f(T,n.material.faintedCooldownStep*M.cooldown)):M.kind===w.Drainer?b(M,h,T,!0):M.kind===w.Spirit?C(M,h,T):M.kind===w.Angel?y(T,n.position.angelCloseToFriendlyDrainer,Vt(M.color,h,o)):y(T,n.position.monCloseToCenter,Xl(h)),n.threat.attackerCloseToOpponentDrainer!==0&&!H(M)&&(M.kind===w.Demon||M.kind===w.Mystic)&&y(T,n.threat.attackerCloseToOpponentDrainer,Vt(B(M.color),h,o)),Jl.has(Q(h))||f(T,n.material.activeMon);break}case"mon-with-consumable":{let M=k.mon,T=M.color===e?1:-1;f(T,n.material.hasConsumable),M.kind===w.Drainer?b(M,h,T,!1):M.kind===w.Spirit?C(M,h,T):M.kind===w.Angel?y(T,n.position.angelCloseToFriendlyDrainer,Vt(M.color,h,o)):y(T,n.position.monCloseToCenter,Xl(h)),n.threat.attackerCloseToOpponentDrainer!==0&&!H(M)&&(M.kind===w.Demon||M.kind===w.Mystic||k.consumable===K.Bomb)&&y(T,n.threat.attackerCloseToOpponentDrainer,Vt(B(M.color),h,o)),!t&&!Jl.has(Q(h))&&f(T,n.material.activeMon);break}case"mana":{d(Math.trunc(n.position.manaCloseToSamePool/Ps(h,e)));let M;if(k.mana.kind==="regular"){let T=k.mana.color,P=T===e?1:-1,E=Ps(h,T),O=Vt(T,h,o),g=Vt(B(T),h,o),x=Math.min(4,Math.max(-4,g-O));M=P*(Math.trunc(n.mana.regularManaToOwnerPool/E)+n.mana.regularManaDrainerControl*x),!t&&T===B(e)&&(M=M+n.mana.opponentManaDenial*-x)}else{let T=Vt(e,h,o),P=Vt(B(e),h,o),E=Math.min(4,Math.max(-4,P-T));M=n.mana.supermanaDrainerControl*E+(t?0:n.mana.supermanaRaceControl*E)}d(M);break}case"mon-with-mana":{let{mon:M,mana:T}=k,P=M.color===e?1:-1,E=YS(h),O=T.kind==="supermana"?n.position.extraForSupermana:T.color===e?0:n.position.extraForOpponentsMana;if(f(P,n.position.drainerHoldingMana),y(P,n.position.monWithManaCloseToAnyPool+O,E),E<=2){let _=T.kind==="supermana"?n.mana.manaCarrierOneStepFromPool+n.mana.supermanaCarrierOneStepFromPoolExtra:n.mana.manaCarrierOneStepFromPool;f(P,_),(M.color===R.White?l.whiteScore:l.blackScore)+Fe(T,M.color)>=be&&f(P,n.mana.immediateWinningCarrier)}let g=!t&&M.kind===w.Drainer&&(T.kind==="supermana"||T.color!==M.color),x=$l(M.color,h,t,n.threat.manaCarrierWalkThreatBoolean!==0||g,o);if(y(P,n.mana.manaCarrierAtRisk,x.riskDanger),Ul(x)&&f(P,n.mana.manaCarrierGuarded),!t&&M.kind===w.Drainer&&g){let _;T.kind==="supermana"?_=Ze(n.mana.supermanaRaceControl,iP):T.color!==M.color?_=Ze(n.mana.opponentManaDenial,sP):_=0,_=Math.min(uP,Math.max(0,_));let U=M.color===R.White?l.blackScore:l.whiteScore,j=Math.max(0,be-cP);if(_>0&&qS(x)&&U<=j){let z=Ze(n.material.confirmedScore,2);f(P,fo(z,_))}}if(M.color===l.activeColor&&E-1<=a&&f(P,n.threat.manaCarrierScoreThisTurn),M.kind===w.Drainer){y(P,n.position.drainerCloseToOwnPool,Ps(h,M.color));let[_,U]=Yl(M.color,h,o),j=x.angelNearby?U:_+U;j>0&&f(P,n.threat.drainerImmediateThreat*j);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(M.kind===w.Spirit){f(-P,Kl(l.board,M,h,n.position.spiritOnOwnBasePenalty));let _=t?4:6,U,j;if(t)U=zl(l.board,h),j=0;else{let z=jl(Uo(s),Uo(u),M.color,e).spirit;U=z.utility,j=ql(z,n)}f(P,n.threat.spiritActionUtility*Math.min(U,_)),f(P,j)}!t&&!Jl.has(Q(h))&&f(P,n.material.activeMon);break}case"consumable":break}return m}c(lP,"scorePreferabilityBoardItems");function yi(e,n,o,t){return Si(e,n,ue(n),o,t)}c(yi,"createTurnUtilityEvalContext");function Si(e,n,o,t,r){return{execution:e,start:n,startHash:o,perspective:t,config:r,cacheIdentity:GS(o,t,r)}}c(Si,"createTurnUtilityEvalContextWithSearchHash");function ws(e,n,o,t,r){if(e.session.checkpoint())return Bn;let a=dP(e,n,o,t,r);return e.session.checkpoint()?Bn:a}c(ws,"turnEngineEvaluateStateUtility");function dP(e,n,o,t,r){if(e.session.checkpoint())return Bn;let a=yi(e,o,t,r);return th(a,n,ue(n))}c(dP,"evaluateStateUtilityFromInputs");function ma(e,n,o,t){return e.session.checkpoint()?bc():mP(e,n,o,t)}c(ma,"turnOracleContextWithSearchHash");function mP(e,n,o,t){let r=Zn(e).oracle.get(t,rn(o));if(r!==void 0)return e.session.checkpoint()?bc():r;let a=sa(e,n,t);if(e.session.checkpoint())return bc();let i=pi(e,n,o,t);if(e.session.checkpoint())return bc();let s={opportunity:i,strategic:a.colorSummary(o),opponentImmediateWindow:a.colorSummary(B(o)).immediateWindow.bestScore};return e.session.cacheWriteAllowed&&Zn(e).oracle.set(t,s,rn(o)),s}c(mP,"turnOracleContextAfterCheckpoint");function bc(){return{opportunity:Cr(),strategic:ft(),opponentImmediateWindow:0}}c(bc,"emptyOracleContext");function fi(e,n,o,t){if(e.session.checkpoint())return 0;let r=RS(e,n,o,t);return e.session.checkpoint()?0:r}c(fi,"activeTurnScoreWindowWithSearchHash");function oh(e,n,o){return fi(e,n,o,ue(n))}c(oh,"activeTurnScoreWindow");function fP(e,n){let o=e.winnerColor();return o===void 0?0:o===n?2:-2}c(fP,"winnerState");function yo(e,n,o){return n.winnerColor()!==void 0||n.activeColor!==B(o)?!1:Cc(e,n,o,ue(n))}c(yo,"opponentCanWinImmediately");function Cc(e,n,o,t){let r=B(o);if(n.winnerColor()!==void 0||n.activeColor!==r)return!1;let a=L(be,Ue(n,r));return a<=0||fi(e,n,r,t)>=a}c(Cc,"opponentCanWinImmediatelyWithSearchHash");function Ne(e,n,o){return oc(e,n,Qe(n),o)}c(Ne,"ownDrainerSafetyScore");function Jn(e,n){for(let[o,t]of e.entries()){let r=G(t);if(r?.color===n&&r.kind===w.Drainer&&!H(r))return o}}c(Jn,"findAwakeDrainerLocation");function nh(e,n,o,t){let r=Jn(n,o);if(r===void 0)return!1;let a=n.get(r);return a?.kind==="mon-with-mana"&&ze(a.mana,t)&&ii(e,n,o,r)}c(nh,"ownDrainerCarriesSafeMana");function bn(e,n,o){return e.execution.session.checkpoint()?Bn:th(e,n,o)}c(bn,"evaluateStateUtilityWithSearchHash");function th(e,n,o){let{execution:t,start:r,perspective:a,config:i}=e,s=VS(o,e.cacheIdentity),u=Zn(t).utility.get(s.stateHash,s.startTag,s.configFingerprint,s.startLow);if(u!==void 0)return t.session.checkpoint()?Bn:u;let p=Ue(n,a),l=Ue(r,a),m=L(p,l),d=ma(t,n,a,o);if(t.session.cancelled)return Bn;let f=d.strategic.scorePathWindow.bestSteps,y=f===void 0?0:Ze(Math.max(33-f,0),22),b=A(Ze(d.strategic.immediateWindow.bestScore,110),Ze(d.strategic.immediateWindow.multiPressure,18)),C={kind:"supermana"},h={kind:"regular",color:B(a)},k=nh(t,n.board,a,C)?380:0,M=nh(t,n.board,a,h)?300:0,T=B(a),P=fi(t,r,T,e.startHash);if(t.session.cancelled)return Bn;let O=n.activeColor===T?fi(t,n,T,o):d.opponentImmediateWindow;if(t.session.cancelled)return Bn;let x=L(P,O),_=Ne(t,n.board,a),U=_<0?Ze(Math.min(Math.abs(_),2147483647),900):0,j=L(be,Ue(r,T)),z=L(be,Ue(n,T)),J=j>0&&P>=j&&(z<=0||O<z),W=Rr(t,n,a,i.scoringWeights,!1);if(t.session.checkpoint())return Bn;let re=Pl({winState:fP(n,a),avoidImmediateLoss:Cc(t,n,a,o)?-1:1,scoreDelta:L(A(A(A(A(Ze(m,2400),y),b),k),M),U),denyGain:A(Ze(x,220),J?1500:0),drainerAttack:Jn(n.board,B(a))===void 0?1:0,drainerSafety:_,evalScore:W});return t.session.cacheWriteAllowed&&Zn(t).utility.set(s.stateHash,re,s.startTag,s.configFingerprint,s.startLow),re}c(th,"evaluateStateUtilityAfterCheckpoint");function Pr(e,n,o,t,r){return yP(bn(e,n,o),t,r)}c(Pr,"quickOrderScoreWithSearchHash");function yP(e,n,o){let t=(()=>{switch(n){case S.ImmediateScore:return 1e3;case S.DenyOpponentWindow:return 960;case S.DrainerKill:return 920;case S.DrainerSafetyRecovery:return 860;case S.SpiritImpact:return 820;case S.SafeSupermanaProgress:return 760;case S.SafeOpponentManaProgress:return 720;case S.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(yP,"quickOrderScoreForUtility");function As(e){let n=new Map;return e.forEach((o,t)=>{let r=pn(o);n.has(r)||n.set(r,t)}),n}c(As,"allowedRankMap");function ah(e,n,o,t,r,a){let i=o.compiledChunks[0],s=i===void 0?void 0:nr(n,i);return{rank:r,allowedLength:a,firstStepOpponentImmediateLoss:s!==void 0&&yo(e,s,t),firstStepDrainerSafety:s===void 0?Math.trunc(-2147483648/4):Ne(e,s.board,t)}}c(ah,"allowedHeadSelectionMeta");function rh(e,n){return A(e.evalScore,Ze(Math.min(Math.max(n.allowedLength-n.rank,0),96),12))}c(rh,"allowedHeadRankAdjustedEval");function Mc(e,n,o,t){let r=se(e.utility,o.utility);return r!==0||(r=Ms([+!n.firstStepOpponentImmediateLoss,n.firstStepDrainerSafety],[+!t.firstStepOpponentImmediateLoss,t.firstStepDrainerSafety]),r!==0)||(r=on(rh(e.utility,n),rh(o.utility,t)),r!==0)?r:(r=Qn(e,o),r!==0?r:on(t.rank,n.rank))}c(Mc,"compareAllowedHeadPlans");var SP=Object.freeze({sortBranches:!1,allowedFirstLocations:void 0});function hP(e,n,o,t){let r=e.forkAndApplyEventsForSimulation(o);r!==void 0&&t.push({inputs:n.slice(),game:r.game,events:r.events})}c(hP,"appendAppliedTransition");function kc(e,n,o,t,r,a,i){if(e.checkpoint()){t.length=0;return}if(t.length>=r||o.length>At)return;let s=n.processInputWithStartOptions(o,!0,!1,a);if(s.kind==="invalid-input")return;if(s.kind==="events"){if(i.allowedFirstLocations!==void 0&&o.length===0)return;hP(n,o,s.events,t);return}if(s.kind==="locations-to-start-from"){let p=i.sortBranches?Al(s.locations,wl):s.locations;for(let l of p){if(t.length>=r)break;o.length===0&&i.allowedFirstLocations!==void 0&&i.allowedFirstLocations[Q(l)]!==1||(o.push({kind:"location",location:l}),kc(e,n,o,t,r,a,i),o.pop())}return}let u=i.sortBranches?Al(s.nextInputs,vS):s.nextInputs;for(let p of u){if(t.length>=r)break;let l=p.input;o.length===0&&i.allowedFirstLocations!==void 0&&(l.kind!=="location"||i.allowedFirstLocations[Q(l.location)]!==1)||(o.push(l),kc(e,n,o,t,r,a,i),o.pop())}}c(kc,"collectTransitions");function ih(e){let n=new Uint8Array(121);for(let o of e)n[Q(o)]=1;return n}c(ih,"locationMask");function bP(e,n){let o=e.inputs[0];return o?.kind==="location"&&n[Q(o.location)]===1}c(bP,"startsAtMaskedLocation");function ed(e,n,o,t,r){if(r.length===0)return wo(e,n,o,t);let a=ih(r),i=Math.max(Math.floor(o/2),Math.max(0,o-60)),s=Math.max(0,o-i),u=[],p=[];for(let l of wo(e,n,o,t))if(bP(l,a)?u.length<i&&u.push(l):p.length<s&&p.push(l),u.length>=i&&(s===0||p.length>=s))break;return u.push(...p),u}c(ed,"enumerateLegalTransitionsWithPriority");function wo(e,n,o,t=jn){if(e.session.checkpoint()||o<=0)return[];let r=[];return kc(e.session,n.fork(),[],r,o,t,SP),e.session.cancelled?[]:(r.sort((a,i)=>io(a.inputs,i.inputs)),r)}c(wo,"enumerateLegalTransitions");function Tc(e,n,o,t=jn,r){if(o<=0||e.session.checkpoint())return[];let a={sortBranches:!0,allowedFirstLocations:r===void 0?void 0:ih(r)},i=[];return kc(e.session,n.fork(),[],i,o,t,a),e.session.checkpoint()?[]:i}c(Tc,"enumerateLegalTransitionsLexicographicBounded");function sh(e){let n=G(e);return n!==void 0&&(n.kind===w.Mystic||n.kind===w.Demon)}c(sh,"actorCanAttackFromItem");function nd(e){let n=G(e);return n!==void 0&&!H(n)&&e.kind==="mon-with-consumable"&&e.consumable===K.Bomb}c(nd,"actorCanBombFromItem");function CP(e,n){return e!==void 0&&ne(e,n)===1}c(CP,"locationGuardedByAngel");function MP(e,n,o){let t=Zt(n,o),r=e.squareAt(t);return e.get(t)===void 0&&r.kind!=="supermana-base"&&r.kind!=="mon-base"}c(MP,"demonAttackPathClear");function od(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:G(a);if(i?.color!==B(r)||H(i)||CP(e.findAwakeAngel(B(r)),o))return!1;let s=G(t);return s?.kind===w.Mystic?No(n).some(u=>_e(u,o)):s?.kind===w.Demon&&Do(n).some(u=>_e(u,o))&&MP(e,n,o)}c(od,"actorCanAttackTargetNow");function td(e,n,o,t,r){if(!Jt(n).some(s=>_e(s,o))||!nd(t)||G(t)?.color!==r)return!1;let a=e.get(o),i=a===void 0?void 0:G(a);return i?.color===B(r)&&!H(i)}c(td,"actorCanBombTargetNow");function uh(e,n,o){let t=e.get(o),r=e.squareAt(o),a=G(n),i=qn(n);if(!Ua(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===w.Drainer;case"mon-base":return a?.kind===r.monKind&&a.color===r.color&&i===void 0&&qr(n)===void 0}}c(uh,"spiritDestinationAllowed");function ch(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===w.Drainer&&!H(o.mon)}c(ch,"manaMoveDestinationAllowed");function ph(e,n){for(let[o,t]of e.entries())if(t.kind==="mana"&&ze(t.mana,n))return o}c(ph,"nearestWantedManaLocation");function wr(e,n,o){let t=e.get(n),r=t===void 0?void 0:G(t);if(r===void 0)return!1;let a=e.get(o);if(a!==void 0&&G(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===w.Drainer;case"mon-base":return r.kind===i.monKind&&r.color===i.color}}c(wr,"walkDestinationPlausible");function Ar(e,n){return e.activeColor===n?Math.max(oe-e.monsMovesCount,0):oe}c(Ar,"remainingMovesForColor");function wn(e,n){let o=n===R.Black?0:10;return Math.min(ne(e,{i:o,j:0}),ne(e,{i:o,j:10}))}c(wn,"distanceToNearestPool");function lh(e,n,o,t){let r=B(o);return Ne(e,n.board,o)<0||oh(e,n,r)>0||Ue(n,r)>=be-2||n.board.get(t)?.kind==="mon-with-mana"||wn(t,r)<=3}c(lh,"opponentDrainerKillIsHighValue");function Er(e){return e.kind!=="score-carry"?gl(e):`${gl(e)}:${e.wanted.kind}:${e.wanted.kind==="regular"?e.wanted.color:"s"}`}c(Er,"actionIdentity");function rd(e,n,o){return e.some(t=>(t.kind==="mon-move"||t.kind==="demon-additional-step")&&_e(t.from,n)&&_e(t.to,o))}c(rd,"movedActorTo");function kP(e,n,o,t){return e.some(r=>r.kind==="mystic-action"||r.kind==="demon-action"?_e(r.from,n)&&_e(r.to,o):r.kind==="mon-fainted"&&r.mon.color===B(t)&&_e(r.to,o))}c(kP,"attackEventsMatch");function TP(e,n,o){for(let[,t]of e.board.entries())if(t.kind==="mon-with-mana"&&t.mon.color===n&&!H(t.mon)&&ze(t.mana,o))return!0;return!1}c(TP,"actorOrSuccessorCarries");function ad(e,n,o,t,r,a){switch(a.kind){case"walk":return rd(t,a.actor,a.to)&&!RP(t);case"attack":return kP(t,a.actor,a.target,r);case"spirit-shift":return t.some(i=>i.kind==="spirit-target-move"&&_e(i.by,a.actor)&&_e(i.from,a.target)&&_e(i.to,a.destination));case"bomb":return t.some(i=>i.kind==="bomb-attack"&&_e(i.from,a.actor)&&_e(i.to,a.target));case"move-mana":return t.some(i=>i.kind==="mana-move"&&_e(i.from,a.from)&&_e(i.to,a.to));case"score-carry":return rd(t,a.actor,a.step)&&(t.some(i=>i.kind==="mana-scored"&&ze(i.mana,a.wanted))||TP(o,r,a.wanted));case"safety-retreat":return rd(t,a.actor,a.to)&&Ne(e,o.board,r)>Ne(e,n.board,r)}}c(ad,"transitionMatchesAction");function mh(e,n,o,t,r,a){let i=Ze(L(Ue(o,r),Ue(n,r)),500);switch(i=A(i,Ze(Ne(e,o.board,r),180)),!yo(e,n,r)&&yo(e,o,r)&&(i=L(i,2200)),a.kind){case"walk":i=A(i,Ze(ne(a.actor,a.to),-20));break;case"attack":PP(t,r)&&(i=A(i,1600)),dh(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":dh(t,r)&&(i=A(i,1e3));break;case"move-mana":i=A(i,Ze(L(wn(a.from,r),wn(a.to,r)),160));break;case"score-carry":i=A(i,Ze(Fe(a.wanted,r),200));break;case"safety-retreat":i=A(i,Ze(Ne(e,o.board,r),260));break}return i}c(mh,"transitionScore");function RP(e){return e.some(n=>n.kind==="mystic-action"||n.kind==="demon-action"||n.kind==="bomb-attack"||n.kind==="spirit-target-move")}c(RP,"eventsIncludeNonWalkAction");function dh(e,n){return e.some(o=>o.kind==="mon-fainted"&&o.mon.color===B(n))}c(dh,"eventsIncludeAnyFaint");function PP(e,n){return e.some(o=>o.kind==="mon-fainted"&&o.mon.color===B(n)&&o.mon.kind===w.Drainer)}c(PP,"eventsIncludeOpponentDrainerFaint");var Ht=class{static{c(this,"TransitionCompilePool")}#e;transitions;limit;priorityLocations;constructor(n,o,t,r){if(this.#e=n,this.limit=wP(r),n.session.checkpoint()){this.transitions=[],this.priorityLocations=[];return}let a=new Set,i=[];for(let s of t)for(let u of EP(s.action)){let p=Q(u);a.has(p)||(a.add(p),i.push(u))}this.priorityLocations=i,this.transitions=ed(n,o,this.limit,jn,i),n.session.checkpoint()&&(this.transitions=[])}expand(n){if(this.#e.session.checkpoint()||this.transitions.length<this.limit||this.limit>=li)return!1;let o=Math.min(this.limit*2,li);if(o<=this.limit)return!1;let t=ed(this.#e,n,o,jn,this.priorityLocations);return this.#e.session.checkpoint()?!1:(this.transitions=t,this.limit=o,!0)}};function wP(e){return Math.min(Math.max(Math.max(e.ownSeedCap,e.opponentSeedCap)*12,24),96)}c(wP,"compileLimitForConfig");function AP(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(AP,"directInputsForAction");function yh(e,n,o,t){if(e.session.checkpoint())return;let r=AP(t),a=Xe(n,r);if(!(a===void 0||e.session.checkpoint())&&ad(e,n,a.game,a.events,o,t))return[a.game,r]}c(yh,"compileActionDirect");function fh(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||!ad(e,n,s.game,s.events,o,t))continue;let u=mh(e,n,s.game,s.events,o,t),p=a===void 0?void 0:r[a[1]];(a===void 0||u>a[0]||u===a[0]&&p!==void 0&&io(s.inputs,p.inputs)<0)&&(a=[u,i])}return a}c(fh,"bestTransitionForAction");function Sh(e,n,o,t,r){let a=fh(e,n,o,t,r.transitions);if(a===void 0&&r.expand(n)&&(a=fh(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(Sh,"compileActionFromPoolFallback");function hi(e,n,o,t,r){let a=yh(e,n,o,t);return a!==void 0?a:e.session.cancelled?void 0:Sh(e,n,o,t,r)}c(hi,"compileActionFromPool");function id(e,n,o,t,r){let a=yh(e,n,o,t);if(a!==void 0)return a;if(e.session.cancelled)return;let i=new Ht(e,n,[{family:S.ManaTempo,action:t,priority:0}],r);return Sh(e,n,o,t,i)}c(id,"compileAction");function EP(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(EP,"actionPriorityLocations");function sd(e,n,o){return bh(e,n,o,{kind:"supermana"},S.SafeSupermanaProgress,8900)}c(sd,"safeSupermanaProgressSeeds");function ud(e,n,o){return bh(e,n,o,{kind:"regular",color:B(o)},S.SafeOpponentManaProgress,8600)}c(ud,"safeOpponentManaProgressSeeds");function hh(e,n,o,t,r){if(e.session.checkpoint())return{progressSteps:void 0,scorePathBestSteps:void 0,sameTurnScoreWindowValue:0};let a=B(o),i=t.kind==="supermana"?Sr|yt:t.color===a?hr:0,s=Po(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:rc(e,n.board,o),sameTurnScoreWindowValue:s.sameTurnScoreWindowValue}}c(hh,"safeProgressExactSnapshot");function bh(e,n,o,t,r,a){if(e.session.checkpoint())return[];let i=Jn(n.board,o);if(i===void 0)return[];let s=[],u=hh(e,n,o,t,ue(n));if(e.session.cancelled)return[];let p=Ne(e,n.board,o),l=ic(e,n,o,i,t),m=l?.[0];if(m!==void 0&&s.push({family:r,action:{kind:"score-carry",actor:i,wanted:t,step:m},priority:a+Math.max(22-(l?.length??0),0)*120}),e.session.checkpoint())return[];if(Ar(n,o)>0){let f=ph(n.board,t);if(f!==void 0){let y=ne(i,f),b=u.progressSteps??33,C=u.scorePathBestSteps??33;for(let h of me(i)){if(e.session.checkpoint())return[];if(!wr(n.board,i,h))continue;let k=Xe(n,[{kind:"location",location:i},{kind:"location",location:h}]);if(k===void 0||yo(e,k.game,o))continue;let M=hh(e,k.game,o,t,ue(k.game));if(e.session.cancelled)return[];let P=Ne(e,k.game.board,o),E=M.progressSteps??33,O=M.scorePathBestSteps??33,g=E<b||E<=b&&O<C;if(!g&&P<p)continue;let x=a-180+Math.max(y-ne(h,f),0)*110+(P-p)*120;g&&(x+=(b-E)*220+(C-O)*180),t.kind==="supermana"&&M.sameTurnScoreWindowValue>0&&(x+=M.sameTurnScoreWindowValue*260),s.push({family:r,action:{kind:"walk",actor:i,to:h},priority:x})}}}let d=n.board.get(i);if(d?.kind==="mon-with-mana"&&ze(d.mana,t)){let f=wn(i,o);for(let y of me(i)){let b=wn(y,o);b>f||s.push({family:r,action:{kind:"score-carry",actor:i,wanted:t,step:y},priority:a+Math.max(f-b,0)*150})}}return s}c(bh,"safeProgressSeeds");function cd(e,n,o){let t=Jn(n.board,o);if(t===void 0)return[];let r=Ne(e,n.board,o),a=[];for(let i of me(t)){let s=Xe(n,[{kind:"location",location:t},{kind:"location",location:i}]);if(s===void 0)continue;let u=Ne(e,s.game.board,o);u<=r||a.push({family:S.DrainerSafetyRecovery,action:{kind:"safety-retreat",actor:t,to:i},priority:8300+Math.abs(r)*220+(u-r)*260})}return a}c(cd,"safetyRecoverySeeds");function Es(e,n,o){if(Ar(n,o)<=0)return[];let t=[],r=Ne(e,n.board,o),a=Jn(n.board,o);if(a!==void 0){let i=wn(a,o);for(let s of me(a)){if(!wr(n.board,a,s))continue;let u=Xe(n,[{kind:"location",location:a},{kind:"location",location:s}]);if(u===void 0||yo(e,u.game,o))continue;let p=Ne(e,u.game.board,o);if(p<r)continue;let l=wn(s,o);t.push({family:p>r?S.DrainerSafetyRecovery:S.ManaTempo,action:{kind:"walk",actor:a,to:s},priority:7200+Math.max(i-l,0)*140+(p-r)*240})}}if(t.length!==0)return t;for(let[i,s]of n.board.entries()){let u=G(s);if(!(u?.color!==o||H(u)))for(let p of me(i)){if(!wr(n.board,i,p))continue;let l=Xe(n,[{kind:"location",location:i},{kind:"location",location:p}]);l===void 0||yo(e,l.game,o)||t.push({family:S.ManaTempo,action:{kind:"walk",actor:i,to:p},priority:6800})}}return t}c(Es,"fallbackWalkSeeds");function gP(e,n,o){let t=Jn(n.board,o);if(t===void 0)return;let r=Ne(e,n.board,o),a;for(let i of me(t)){if(!wr(n.board,t,i))continue;let s=Xe(n,[{kind:"location",location:t},{kind:"location",location:i}]);if(s===void 0)continue;let u=Ne(e,s.game.board,o);if(u<=r)continue;let p=8300+Math.abs(r)*220+(u-r)*260;a=a===void 0?p:Math.max(a,p)}return a}c(gP,"bestFollowUpSafetyRecoveryPriority");function Ch(e,n,o,t){if(t.mode!==Ke.Production||Ar(n,o)<=0)return[];let r=Jn(n.board,o);if(r===void 0)return[];let a=Ne(e,n.board,o),i=wn(r,o),s=[];for(let u of me(r)){if(!wr(n.board,r,u))continue;let p=Xe(n,[{kind:"location",location:r},{kind:"location",location:u}]);if(p===void 0||yo(e,p.game,o))continue;let l=Ne(e,p.game.board,o),m=wn(u,o);if(l>=a||m>=i)continue;let d=gP(e,p.game,o);d!==void 0&&s.push({family:S.ManaTempo,action:{kind:"walk",actor:r,to:u},priority:8e3+Math.max(i-m,0)*260+Math.trunc(d/20)-Math.max(a-l,0)*120})}return s}c(Ch,"riskyRecoverySetupSeeds");function yn(e,n){return e===void 0||e.includes(n)}c(yn,"familyAllowed");function pd(e,n){let o=[];for(let[t,r]of e.board.entries()){if(r.kind!=="mon-with-mana"||r.mon.color!==n||H(r.mon))continue;let a=wn(t,n);for(let i of me(t)){let s=wn(i,n);s>a||o.push({family:S.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(pd,"immediateScoreSeeds");function ld(e,n,o){let t=B(o),r=fi(e,n,t,ue(n));if(r<=0&&!yo(e,n,o))return[];let a=Mh(n,o,S.DenyOpponentWindow,9400+r*240),i=Jn(n.board,o);if(i===void 0)return a;let s=Ne(e,n.board,o),u=wn(i,o);for(let p of me(i))wn(p,o)>u+1&&s>=0||a.push({family:S.DenyOpponentWindow,action:{kind:"safety-retreat",actor:i,to:p},priority:9100+Math.abs(s)*220});return a}c(ld,"denyWindowSeeds");function dd(e,n,o){let t=Jn(n.board,B(o));return t===void 0||!lh(e,n,o,t)?[]:Mh(n,o,S.DrainerKill,9e3)}c(dd,"drainerKillSeeds");function Mh(e,n,o,t){let r=Jn(e.board,B(n));if(r===void 0)return[];let a=[],i=e.playerCanUseAction(),s=Ar(e,n);for(let[u,p]of e.board.entries()){let l=G(p);if(l?.color!==n||H(l))continue;let m=i&&sh(p),d=i&&nd(p);if(m&&od(e.board,u,r,p,n)&&a.push({family:o,action:{kind:"attack",actor:u,target:r},priority:t}),d&&td(e.board,u,r,p,n)&&a.push({family:o,action:{kind:"bomb",actor:u,target:r},priority:t-80}),!(s<=0||!m&&!d)){for(let f of me(u))if(!(ne(f,r)>=ne(u,r))){if(o===S.DrainerKill){let y=e.board.fork();if(y.delete(u),y.set(f,p),!(m&&od(y,f,r,p,n)||d&&td(y,f,r,p,n)))continue}a.push({family:o,action:{kind:"walk",actor:u,to:f},priority:t-200+(ne(u,r)-ne(f,r))*80})}}}return a}c(Mh,"attackFamilySeeds");function gr(e,n,o,t,r){let a=0;return e&&(a|=Sr),n&&(a|=hr),o&&(a|=Za),t&&(a|=Ja),r&&(a|=yt),a}c(gr,"tacticalProjectionFlags");function vP(e){switch(e){case"safe-progress-only":return gr(!0,!1,!1,!1,!1);case"opponent-progress-only":return gr(!1,!0,!1,!1,!1);case"drainer-opportunity":return gr(!1,!0,!1,!0,!1);case"spirit-score-only":return gr(!1,!1,!0,!1,!1);case"spirit-opportunity":return gr(!0,!1,!0,!1,!1)}}c(vP,"tacticalProjectionProfileFlags");function OP(e,n,o,t,r){let a=n,i=o&&e!==w.Spirit,s=t,u=r&&e===w.Spirit,p=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:gr(a,i,u,r&&i,a||u),projectionProfile:p,needsScoreWindow:a||u}}c(OP,"oracleWalkActorCapabilities");function kh(e,n,o,t){let r=sa(e,n,t).colorSummary(o).spirit;return[r.nextTurnSetupGain,r.utility]}c(kh,"strategicSpiritSignalWithSearchHash");function md(e,n,o,t,r,a){if(e.session.checkpoint()||Ar(n,o)<=0)return[];let i=yn(r,S.SafeSupermanaProgress),s=yn(r,S.SafeOpponentManaProgress),u=yn(r,S.DrainerSafetyRecovery),p=yn(r,S.SpiritImpact);if(!i&&!s&&!u&&!p)return[];let l=t.turn,m=[0,0];if(p&&(m=kh(e,n,o,ue(n))),e.session.checkpoint())return[];let d=i||u?Ne(e,n.board,o):0,f=l.safeSupermanaProgressSteps??33,y=l.safeOpponentManaProgressSteps??33,b=Jn(n.board,o),C=[],h=a.enableLazyOracleScoreWindowProjection;for(let[k,M]of n.board.entries()){if(e.session.checkpoint())return[];let T=G(M);if(T?.color!==o||H(T)||b!==void 0&&_e(k,b))continue;let P=OP(T.kind,i,s,u,p);if(!(!P.canEmitSupermana&&!P.canEmitOpponentMana&&!P.canEmitSafety&&!P.canEmitSpirit))for(let E of me(k)){if(e.session.checkpoint())return[];if(!wr(n.board,k,E))continue;let O=Xe(n,[{kind:"location",location:k},{kind:"location",location:E}]);if(O===void 0||yo(e,O.game,o))continue;let g=P.canEmitSpirit,x=h?P.projectionProfile!==void 0:P.tacticalFlags!==0,_=h&&P.needsScoreWindow,U=x||_||g?ue(O.game):void 0,j;if(x){if(U===void 0)throw new Error("oracle walk projection requires a state hash");let ie=P.tacticalFlags;if(h){if(P.projectionProfile===void 0)throw new Error("lazy oracle projection requires a profile");ie=vP(P.projectionProfile)}j=Po(e,O.game,o,U,ie)}if(e.session.cancelled)return[];let z=[0,0];if(g){if(U===void 0)throw new Error("oracle Spirit analysis requires a state hash");z=kh(e,O.game,o,U)}let J=P.canEmitSupermana||P.canEmitSafety?Ne(e,O.game.board,o):d,W=j===void 0?f:j.safeSupermanaProgressSteps??33,re=j===void 0?y:j.safeOpponentManaProgressSteps??33,Se,q=c(()=>{if(Se!==void 0)return Se;if(h){if(U===void 0)throw new Error("oracle score-window projection requires a state hash");Se=Po(e,O.game,o,U,yt).sameTurnScoreWindowValue}else Se=j?.sameTurnScoreWindowValue??0;return Se},"loadAfterScoreWindow");P.canEmitSupermana&&W<f&&C.push({family:S.SafeSupermanaProgress,action:{kind:"walk",actor:k,to:E},priority:8250+(f-W)*240+(J-d)*100+q()*160});let Y=P.canEmitOpponentMana&&re<y,Ie=p&&(P.canEmitSpirit||P.canEmitOpponentMana)&&(j?.spiritAssistedDenialValue??0)>l.spiritAssistedDenialValue;if(Y||Ie){let ie=T.kind===w.Spirit?S.SpiritImpact:S.SafeOpponentManaProgress;yn(r,ie)&&C.push({family:ie,action:{kind:"walk",actor:k,to:E},priority:8e3+(Y?Math.max(y-re,0)*240:0)+(Ie?Math.max((j?.spiritAssistedDenialValue??0)-l.spiritAssistedDenialValue,0)*180:0)})}if(P.canEmitSpirit){let ie=z[0]-m[0],ye=z[1]-m[1],pe=ie>0||ye>0,Le=(j?.spiritAssistedScoreValue??0)>l.spiritAssistedScoreValue,Tn=h?!Le&&!pe&&q()>l.sameTurnScoreWindowValue:(j?.sameTurnScoreWindowValue??0)>l.sameTurnScoreWindowValue;if(Le||Tn||pe){let $=(j?.spiritAssistedScoreValue??0)-l.spiritAssistedScoreValue,he=q()-l.sameTurnScoreWindowValue;C.push({family:S.SpiritImpact,action:{kind:"walk",actor:k,to:E},priority:8100+$*200+he*220+ie*320+ye*180})}}P.canEmitSafety&&J>d&&C.push({family:S.DrainerSafetyRecovery,action:{kind:"walk",actor:k,to:E},priority:8050+(J-d)*260})}}return C}c(md,"oracleWalkSeeds");function Th(e,n){let o=e??33,t=n??33;return t>=o?0:(o-t)*220}c(Th,"progressPriorityBonus");function fd(e,n,o,t){if(e.session.checkpoint()||!t.enableSpiritFamily||!n.playerCanUseAction())return[];let r=gr(!0,!0,!0,!0,!0),a=Po(e,n,o,ue(n),r);if(e.session.checkpoint())return[];let i=Ne(e,n.board,o),s=[];for(let[u,p]of n.board.entries()){if(e.session.checkpoint())return[];let l=G(p);if(!(l?.color!==o||l.kind!==w.Spirit||H(l)||n.board.squareAt(u).kind==="mon-base"))for(let m of _o(u)){if(e.session.checkpoint())return[];let d=n.board.get(m);if(!(d===void 0||!st(d)))for(let f of me(m)){if(e.session.checkpoint())return[];if(!uh(n.board,d,f))continue;let y=Xe(n,[{kind:"location",location:u},{kind:"location",location:m},{kind:"location",location:f}]);if(y===void 0)continue;let b=7600;G(d)?.color===B(o)&&(b+=400);let h=qn(d);h?.kind==="supermana"&&(b+=600),h?.kind==="regular"&&h.color===B(o)&&(b+=460);let k=Po(e,y.game,o,ue(y.game),r);if(e.session.checkpoint())return[];k.sameTurnScoreWindowValue>a.sameTurnScoreWindowValue&&(b+=(k.sameTurnScoreWindowValue-a.sameTurnScoreWindowValue)*280),k.spiritAssistedScore&&(b+=900+k.spiritAssistedScoreValue*120),k.safeSupermanaProgress&&(b+=700+Th(a.safeSupermanaProgressSteps,k.safeSupermanaProgressSteps)),k.safeOpponentManaProgress&&(b+=760+Th(a.safeOpponentManaProgressSteps,k.safeOpponentManaProgressSteps)),k.spiritAssistedDenial&&(b+=820+k.spiritAssistedDenialValue*140);let M=Ne(e,y.game.board,o);M>i&&(b+=(M-i)*160),b+=Math.max(11-ne(f,m),0)*20,s.push({family:S.SpiritImpact,action:{kind:"spirit-shift",actor:u,target:m,destination:f},priority:b})}}}return s.sort((u,p)=>{let l=on(p.priority,u.priority);return l!==0?l:da(u.action,p.action)}),s.slice(0,12)}c(fd,"spiritImpactSeeds");function yd(e,n){if(!e.playerCanMoveMana()||Jn(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 me(t)){if(!ch(e.board,a))continue;let i=wn(t,n)-wn(a,n),s=B(n),u=wn(t,s)-wn(a,s);i<=0||u>0||o.push({family:S.ManaTempo,action:{kind:"move-mana",from:t,to:a},priority:6900+i*200-Math.max(u,0)*200})}return o}c(yd,"manaTempoSeeds");function IP(e){switch(e){case S.ImmediateScore:return hn.ImmediateScore;case S.DenyOpponentWindow:return hn.TacticalDeny;case S.DrainerKill:return hn.DrainerKill;case S.SafeSupermanaProgress:return hn.SafeSupermanaProgress;case S.SafeOpponentManaProgress:return hn.SafeOpponentManaProgress;case S.DrainerSafetyRecovery:return hn.DrainerSafetyRecovery;case S.SpiritImpact:return hn.SpiritImpact;case S.ManaTempo:return hn.ManaTempo}}c(IP,"opportunityKindForFamily");function xP(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(xP,"opportunityBudgetForAction");function NP(e,n){return n.monMovesNeeded<=e.remainingMonMoves&&(!n.needsAction||e.canUseAction)&&(!n.needsManaMove||e.canMoveMana)}c(NP,"budgetAllowsOpportunity");function DP(e,n){let o=33,t=e.family===S.SafeSupermanaProgress?Math.max(o-(n.delta.safeSupermanaProgressSteps??o),0):0,r=e.family===S.SafeOpponentManaProgress?Math.max(o-(n.delta.safeOpponentManaProgressSteps??o),0):0;return{sameTurnScoreWindowGain:n.delta.sameTurnScoreWindowValue,spiritGain:e.family===S.SpiritImpact?Math.max(n.delta.spiritGain,1):0,opponentWindowDenyGain:e.family===S.DenyOpponentWindow||e.family===S.DrainerKill?Math.max(n.delta.opponentWindowDenyGain,1):0,drainerAttack:(e.family===S.DrainerKill||e.family===S.DenyOpponentWindow)&&n.delta.drainerAttackAvailable,drainerSafetyDelta:e.family===S.DrainerSafetyRecovery?Math.max(-n.delta.drainerSafety,0):0,supermanaProgressGain:t,opponentManaProgressGain:r}}c(DP,"opportunityDeltaForSeed");function _P(e,n){return{kind:IP(e.family),family:e.family,action:e.action,priority:e.priority,budget:xP(e.action),delta:DP(e,n)}}c(_P,"turnOpportunityFromSeed");function gs(e,n){let o=(()=>{switch(e.kind){case hn.ImmediateScore:return 12e3;case hn.TacticalDeny:return 11400;case hn.DrainerKill:return 11200;case hn.DrainerSafetyRecovery:return 10400;case hn.SpiritImpact:return 9800;case hn.SafeSupermanaProgress:return 9400;case hn.SafeOpponentManaProgress:return 9200;case hn.ManaTempo:return 8e3}})(),t=e.kind===hn.ImmediateScore||e.kind===hn.TacticalDeny||e.kind===hn.DrainerKill||e.kind===hn.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(gs,"opportunityScore");function vs(e,n,o,t,r,a){if(e.session.checkpoint()||n.activeColor!==o)return[];let i=pi(e,n,o,ue(n));if(e.session.checkpoint())return[];let s=i.opponentCanWinImmediately||i.delta.drainerSafety<0,u=[];if(yn(a,S.ImmediateScore)&&u.push(...pd(n,o)),e.session.checkpoint())return[];if(yn(a,S.DenyOpponentWindow)&&u.push(...ld(e,n,o)),e.session.checkpoint())return[];if(yn(a,S.DrainerKill)&&u.push(...dd(e,n,o)),e.session.checkpoint())return[];if(yn(a,S.SafeSupermanaProgress)&&u.push(...sd(e,n,o)),e.session.checkpoint())return[];if(yn(a,S.SafeOpponentManaProgress)&&u.push(...ud(e,n,o)),e.session.checkpoint())return[];if(yn(a,S.DrainerSafetyRecovery)&&u.push(...cd(e,n,o)),e.session.checkpoint())return[];if(yn(a,S.ManaTempo)&&u.push(...Ch(e,n,o,t)),e.session.checkpoint())return[];if((yn(a,S.SafeSupermanaProgress)||yn(a,S.SafeOpponentManaProgress)||yn(a,S.DrainerSafetyRecovery)||yn(a,S.SpiritImpact))&&u.push(...md(e,n,o,i,a,t)),e.session.checkpoint())return[];if(yn(a,S.SpiritImpact)&&u.push(...fd(e,n,o,t)),e.session.checkpoint())return[];if(yn(a,S.ManaTempo)&&u.push(...yd(n,o)),e.session.checkpoint())return[];if((yn(a,S.ManaTempo)||yn(a,S.DrainerSafetyRecovery))&&u.push(...Es(e,n,o).filter(f=>yn(a,f.family))),e.session.checkpoint())return[];let p=new Map;for(let f of u){if(e.session.checkpoint())return[];let y=_P(f,i);if(!NP(i.budget,y.budget)||s&&y.kind===hn.ManaTempo&&!y.delta.drainerAttack&&y.delta.drainerSafetyDelta<=0)continue;let b=p.get(y.family)??[];b.push(y),p.set(y.family,b)}for(let f of p.values())f.sort((y,b)=>{let C=on(gs(b,s),gs(y,s));return C!==0?C:da(y.action,b.action)});let l=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 b of Gt){let C=p.get(b);if(C===void 0)continue;let h=l.get(b)??0;for(;h<C.length;){let k=C[h];if(h+=1,k!==void 0&&!m.has(Er(k.action))){m.add(Er(k.action)),d.push(k),y=!0;break}}if(l.set(b,h),d.length>=Math.max(r,1))return d}if(!y)break}return d}c(vs,"discoverTurnOpportunities");function bi(e,n,o,t,r){if(e.session.checkpoint()||n.activeColor!==o)return[];if(t.mode===Ke.Production){let l=vs(e,n,o,t,r).map(({family:m,action:d,priority:f})=>({family:m,action:d,priority:f}));return e.session.checkpoint()?[]:l}let a=[];if(a.push(...pd(n,o)),e.session.checkpoint())return[];if(a.push(...ld(e,n,o)),e.session.checkpoint())return[];if(a.push(...dd(e,n,o)),e.session.checkpoint())return[];if(a.push(...sd(e,n,o)),e.session.checkpoint())return[];if(a.push(...ud(e,n,o)),e.session.checkpoint())return[];if(a.push(...cd(e,n,o)),e.session.checkpoint())return[];if(a.push(...md(e,n,o,pi(e,n,o,ue(n)),void 0,t)),e.session.checkpoint())return[];if(a.push(...fd(e,n,o,t)),e.session.checkpoint())return[];if(a.push(...yd(n,o)),e.session.checkpoint())return[];let i=new Map;for(let l of a){if(e.session.checkpoint())return[];let m=i.get(l.family)??[];m.push(l),i.set(l.family,m)}for(let l of i.values())l.sort((m,d)=>{let f=on(d.priority,m.priority);return f!==0?f:da(m.action,d.action)});let s=new Set,u=new Map,p=[];for(let l=0;l<Math.max(t.perNodeFamilyCap,1);l+=1){if(e.session.checkpoint())return[];let m=!1;for(let d of Gt){let f=i.get(d);if(f===void 0)continue;let y=u.get(d)??0;for(;y<f.length;){let b=f[y];if(y+=1,b!==void 0&&!s.has(Er(b.action))){s.add(Er(b.action)),p.push(b),m=!0;break}}if(u.set(d,y),p.length>=Math.max(r,1))return p}if(!m)break}return p}c(bi,"generateActionSeeds");function Sd(e){return Math.min(Math.max(e.stepCap,1),6)}c(Sd,"bundleChunkCapForConfig");function Pc(e){return Math.min(Math.max(e.stepCap,1),4)}c(Pc,"bundlePlanCapForConfig");function hd(e,n){return lo(n)<lo(e)?n:e}c(hd,"mergePlanFamily");function FP(e,n,o){if(o===n||o===e)return!0;switch(e){case S.ImmediateScore:return o===S.ImmediateScore||o===S.DrainerSafetyRecovery||o===S.SafeSupermanaProgress||o===S.SafeOpponentManaProgress;case S.DenyOpponentWindow:case S.DrainerKill:return o===S.ImmediateScore||o===S.DenyOpponentWindow||o===S.DrainerKill||o===S.DrainerSafetyRecovery||o===S.SafeSupermanaProgress||o===S.SafeOpponentManaProgress;case S.DrainerSafetyRecovery:return o===S.ImmediateScore||o===S.DrainerSafetyRecovery||o===S.SafeSupermanaProgress||o===S.SafeOpponentManaProgress||o===S.ManaTempo;case S.SpiritImpact:return o===S.ImmediateScore||o===S.DenyOpponentWindow||o===S.SpiritImpact||o===S.SafeSupermanaProgress||o===S.SafeOpponentManaProgress||o===S.DrainerSafetyRecovery;case S.SafeSupermanaProgress:case S.SafeOpponentManaProgress:return o===S.ImmediateScore||o===S.DrainerSafetyRecovery||o===S.SafeSupermanaProgress||o===S.SafeOpponentManaProgress||o===S.DenyOpponentWindow||o===S.SpiritImpact;case S.ManaTempo:return o===S.ImmediateScore||o===S.DrainerSafetyRecovery||o===S.SafeSupermanaProgress||o===S.SafeOpponentManaProgress||o===S.SpiritImpact||o===S.ManaTempo}}c(FP,"macroFollowupFamilyAllowed");function Rc(e,n,o){let t=0;return o===n&&(t+=420),o===e&&(t+=220),o===S.ImmediateScore&&(t+=640),e===S.SpiritImpact&&(o===S.SpiritImpact||o===S.ImmediateScore||o===S.SafeSupermanaProgress||o===S.SafeOpponentManaProgress)&&(t+=180),(e===S.SafeSupermanaProgress||e===S.SafeOpponentManaProgress)&&(o===S.SafeSupermanaProgress||o===S.SafeOpponentManaProgress||o===S.ImmediateScore)&&(t+=180),e===S.DrainerSafetyRecovery&&(o===S.DrainerSafetyRecovery||o===S.SafeSupermanaProgress||o===S.SafeOpponentManaProgress||o===S.ImmediateScore)&&(t+=160),t}c(Rc,"macroFollowupFamilyBonus");function bd(e,n){return Gt.filter(o=>FP(e,n,o))}c(bd,"macroFollowupFamilies");function wh(e,n,o,t,r,a,i,s){let u=ma(e,n,t,o),p=u.opportunity.opponentCanWinImmediately||u.opportunity.delta.drainerSafety<0,l=new Set(s.map(Er)),m=vs(e,n,t,r,Math.max(Math.max(r.ownSeedCap,r.perNodeFamilyCap*3),8),bd(a,i)).filter(d=>!l.has(Er(d.action)));return m.sort((d,f)=>{let y=on(gs(f,p)+Rc(a,i,f.family),gs(d,p)+Rc(a,i,d.family));return y!==0?y:da(d.action,f.action)}),m.slice(0,Math.max(Math.max(r.perNodeFamilyCap,1)*2,4))}c(wh,"macroFollowupSeedCandidates");function Rh(e,n){let o=33;return Math.max((e??o)-(n??o),0)}c(Rh,"progressStepGain");function Cd(e,n,o,t,r,a){if(e.session.checkpoint())return Ph();let i=ma(e,o,r,t);return e.session.cancelled?Ph():{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:Ne(e,o.board,r)-Ne(e,n.board,r),supermanaProgressGain:Rh(a.opportunity.delta.safeSupermanaProgressSteps,i.opportunity.delta.safeSupermanaProgressSteps),opponentManaProgressGain:Rh(a.opportunity.delta.safeOpponentManaProgressSteps,i.opportunity.delta.safeOpponentManaProgressSteps)}}c(Cd,"macroOpportunityDelta");function Ph(){return{sameTurnScoreWindowGain:0,spiritGain:0,opponentWindowDenyGain:0,drainerAttack:!1,drainerSafetyDelta:0,supermanaProgressGain:0,opponentManaProgressGain:0}}c(Ph,"emptyOpportunityDelta");function Md(e,n,o,t,r,a){return A(a,Math.max(-2147483648,Math.min(2147483647,Math.trunc(Pr(e,n,o,t,r)/1024))))}c(Md,"macroPriorityFromState");function Ci(e,n){return By(ms(fs(e,n),hs),11)}c(Ci,"macroSignatureMix");function Ah(e){let n=uc;for(let o of e){let[t,r,a,i]=Cs(o);n=Ci(n,ds(t)),n=Ci(n,ds(Q(r))),n=Ci(n,a===void 0?wS:ds(Q(a))),n=Ci(n,i===void 0?AS:ds(Q(i)))}return n}c(Ah,"macroSignatureForActions");function Eh(e,n){return Ci(Ci(e,n.endSnapshot.stateHash),n.signature)}c(Eh,"macroPlanSignature");function fa(e,n){let o=on(n.order,e.order);return o!==0?o:la(e.node.compiledChunks,n.node.compiledChunks)}c(fa,"compareOrderedNodes");function WP(e,n,o,t,r,a){if(e.session.checkpoint())return;let i=ma(e,n,o,r.startHash);if(e.session.cancelled)return;let s=id(e,n,o,a.action,t);if(s===void 0||e.session.checkpoint())return;let u=s[0],p=ue(u),l=bn(r,u,p);if(e.session.cancelled)return;let d=[a.action],f=[s[1]],y=a.family,b=new To(di);for(b.add(r.startHash),b.add(p);u.activeColor===o&&u.winnerColor()===void 0&&f.length<Sd(t);){if(e.session.checkpoint())return;let M=ma(e,u,o,p);if(e.session.cancelled)return;let P=bn(r,u,p);if(e.session.cancelled)return;let O=M.opportunity.delta.drainerSafety<0||P.drainerSafety<0||Ne(e,u.board,o)<0,g;for(let x of wh(e,u,p,o,t,a.family,y,d)){if(e.session.checkpoint())return;let _=id(e,u,o,x.action,t);if(_===void 0||e.session.checkpoint())continue;let[U,j]=_,z=ue(U);if(b.has(z))continue;let J=Cd(e,u,U,z,o,M),W=hd(y,x.family),re=bn(r,U,z);if(e.session.cancelled)return;let q=J.sameTurnScoreWindowGain+J.spiritGain+J.opponentWindowDenyGain+Math.max(J.drainerSafetyDelta,0)+J.supermanaProgressGain+J.opponentManaProgressGain+(J.drainerAttack?2:0),Y=O&&(x.family===S.DrainerSafetyRecovery||x.family===S.ImmediateScore||x.family===S.SafeSupermanaProgress||x.family===S.SafeOpponentManaProgress);if(q<=0&&so(re,P)<=0&&U.activeColor===o&&!Y)continue;let Ie=O?(()=>{switch(x.family){case S.DrainerSafetyRecovery:return 960;case S.ImmediateScore:return 820;case S.SafeSupermanaProgress:case S.SafeOpponentManaProgress:return 360;case S.DenyOpponentWindow:case S.DrainerKill:return 220;case S.SpiritImpact:case S.ManaTempo:return 0}})():0,ie=Md(r,U,z,W,f.length+1,x.priority+Rc(a.family,y,x.family))+Ie+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);(g===void 0||ie>g.score||ie===g.score&&lo(W)<lo(g.goalFamily))&&(g={score:ie,opportunity:x,after:U,afterHash:z,chunk:j,goalFamily:W})}if(g===void 0)break;d.push(g.opportunity.action),f.push(g.chunk),y=g.goalFamily,u=g.after,p=g.afterHash,b.add(p)}if(e.session.checkpoint())return;let C={stateHash:p},h=Cd(e,n,u,p,o,i);if(!e.session.cancelled)return{headFamily:a.family,goalFamily:y,priority:Md(r,u,p,y,f.length,a.priority),delta:h,actions:d,compiledChunks:f,endGame:u.fork(),endSnapshot:C,headUtility:l,signature:Ah(d)}}c(WP,"buildMacroFromHeadOpportunity");function gh(e,n,o,t,r,a,i){if(e.session.checkpoint())return[];let s=[],u=new To(di),p=vs(e,n,o,t,Math.max(Math.max(a,t.perNodeFamilyCap*3),8),i);if(e.session.checkpoint())return[];for(let l of p){if(e.session.checkpoint())return[];let m=WP(e,n,o,t,r,l);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((l,m)=>{let d=c(b=>b.priority+b.delta.sameTurnScoreWindowGain*280+b.delta.spiritGain*220+b.delta.opponentWindowDenyGain*240+b.delta.drainerSafetyDelta*220+b.delta.supermanaProgressGain*120+b.delta.opponentManaProgressGain*112+(b.delta.drainerAttack?820:0)+(Sd(t)-b.compiledChunks.length)*8,"score"),f=on(d(m),d(l));if(f!==0)return f;let y=on(lo(l.goalFamily),lo(m.goalFamily));return y!==0?y:la(l.compiledChunks,m.compiledChunks)}),e.session.checkpoint()?[]:s.slice(0,Math.max(a,1))}c(gh,"discoverMacroOpportunities");function BP(e,n){return{actions:n.actions,compiledChunks:n.compiledChunks,endGame:n.game.fork(),utility:bn(e,n.game,n.stateHash),headUtility:n.headUtility,headFamily:n.headFamily,goalFamily:n.goalFamily,packageMeta:ca}}c(BP,"macroNodeToPlan");function vh(e,n,o,t,r,a,i,s,u){if(e.session.checkpoint())return{status:ee.BudgetExceeded};let p=0,l=!1,m=Math.min(Math.max(s,1),Pc(t)),d=gh(e,n,o,t,r,a);if(e.session.checkpoint())return{status:ee.BudgetExceeded};if(d.length===0)return{status:ee.NoPlan};let f=new xe(di),y=[];for(let h of d){if(e.session.checkpoint())return{status:ee.BudgetExceeded};if(p+=1,p>u){l=!0;break}let k=Pr(r,h.endGame,h.endSnapshot.stateHash,h.goalFamily,h.compiledChunks.length);if(e.session.cancelled)return{status:ee.BudgetExceeded};let M=f.get(h.endSnapshot.stateHash,0,h.signature);M!==void 0&&k<=M||(f.set(h.endSnapshot.stateHash,k,0,h.signature),y.push({order:k,node:{game:h.endGame,stateHash:h.endSnapshot.stateHash,actions:h.actions,compiledChunks:h.compiledChunks,headUtility:h.headUtility,headFamily:h.headFamily,goalFamily:h.goalFamily,signature:h.signature}}))}if(y.length===0)return{status:l?ee.BudgetExceeded:ee.NoPlan};y.sort(fa),y=y.slice(0,Math.max(i,1));let b=[];for(let h=1;h<m;h+=1){if(e.session.checkpoint())return{status:ee.BudgetExceeded};let k=[],M=!1,T=!1;for(let P of y){let E=P.node;if(e.session.checkpoint())return{status:ee.BudgetExceeded};if(E.game.winnerColor()!==void 0||E.game.activeColor!==o){b.push(E);continue}let O=Si(e,E.game,E.stateHash,o,t),g=gh(e,E.game,o,t,O,a,bd(E.headFamily,E.goalFamily));if(e.session.checkpoint())return{status:ee.BudgetExceeded};if(g.length===0){b.push(E);continue}let x=!1;for(let _ of g){if(e.session.checkpoint())return{status:ee.BudgetExceeded};if(p+=1,p>u){b.push(E),l=!0,T=!0;break}let U=[...E.actions,..._.actions],j=[...E.compiledChunks,..._.compiledChunks],z=hd(E.goalFamily,_.goalFamily),J=Eh(E.signature,_),W=Pr(r,_.endGame,_.endSnapshot.stateHash,z,j.length);if(e.session.cancelled)return{status:ee.BudgetExceeded};let re=f.get(_.endSnapshot.stateHash,0,J);re!==void 0&&W<=re||(f.set(_.endSnapshot.stateHash,W,0,J),k.push({order:W,node:{game:_.endGame,stateHash:_.endSnapshot.stateHash,actions:U,compiledChunks:j,headUtility:E.headUtility,headFamily:E.headFamily,goalFamily:z,signature:J}}),M=!0,x=!0)}if(T)break;x||b.push(E)}if(T){k.sort(fa),y=k.slice(0,Math.max(i,1));break}if(!M||k.length===0){y=[];break}k.sort(fa),y=k.slice(0,Math.max(i,1))}if(b.push(...y.map(({node:h})=>h)),e.session.checkpoint())return{status:ee.BudgetExceeded};if(b.length===0)return{status:l?ee.BudgetExceeded:ee.NoPlan};let C=b.map(h=>BP(r,h));return e.session.checkpoint()?{status:ee.BudgetExceeded}:(C.sort((h,k)=>-Qn(h,k)),{status:"ok",plans:C})}c(vh,"generateMacroPlans");function Oh(e,n,o,t,r,a,i,s,u){if(e.session.checkpoint())return{status:ee.BudgetExceeded};let p=0,l=bi(e,n,o,t,a);if(e.session.checkpoint())return{status:ee.BudgetExceeded};if(l.length===0)return{status:ee.NoPlan};let m=new Ht(e,n,l,t);if(e.session.checkpoint())return{status:ee.BudgetExceeded};let d=new xe(di),f=[];for(let C of l){if(e.session.checkpoint())return{status:ee.BudgetExceeded};let h=hi(e,n,o,C.action,m);if(h===void 0)continue;if(e.session.checkpoint())return{status:ee.BudgetExceeded};if(p+=1,p>u)return{status:ee.BudgetExceeded};let[k,M]=h,T=ue(k),P=Pr(r,k,T,C.family,1),E=d.get(T);if(E!==void 0&&P<=E)continue;d.set(T,P);let O=bn(r,k,T);if(e.session.cancelled)return{status:ee.BudgetExceeded};f.push({order:P,node:{game:k,stateHash:T,actions:[C.action],compiledChunks:[M],headUtility:O,headFamily:C.family,goalFamily:C.family}})}if(f.length===0)return{status:ee.NoPlan};f.sort(fa),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:ee.BudgetExceeded};let h=[],k=!1;for(let M of f){let T=M.node;if(e.session.checkpoint())return{status:ee.BudgetExceeded};if(T.game.winnerColor()!==void 0||T.game.activeColor!==o){y.push(T);continue}let P=bi(e,T.game,o,t,a);if(e.session.checkpoint())return{status:ee.BudgetExceeded};if(P.length===0){y.push(T);continue}let E=new Ht(e,T.game,P,t);if(e.session.checkpoint())return{status:ee.BudgetExceeded};let O=!1;for(let g of P){if(e.session.checkpoint())return{status:ee.BudgetExceeded};let x=hi(e,T.game,o,g.action,E);if(x===void 0)continue;if(e.session.checkpoint())return{status:ee.BudgetExceeded};if(p+=1,p>u)return{status:ee.BudgetExceeded};let[_,U]=x,j=[...T.actions,g.action],z=[...T.compiledChunks,U],J=ue(_),W=Pr(r,_,J,T.goalFamily,j.length);if(e.session.cancelled)return{status:ee.BudgetExceeded};let re=d.get(J);re!==void 0&&W<=re||(d.set(J,W),h.push({order:W,node:{game:_,stateHash:J,actions:j,compiledChunks:z,headUtility:T.headUtility,headFamily:T.headFamily,goalFamily:T.goalFamily}}),k=!0,O=!0)}O||y.push(T)}if(!k||h.length===0){f=[];break}h.sort(fa),f=h.slice(0,Math.max(i,1))}if(y.push(...f.map(({node:C})=>C)),e.session.checkpoint())return{status:ee.BudgetExceeded};if(y.length===0)return{status:ee.NoPlan};let b=y.map(C=>({actions:[...C.actions],compiledChunks:C.compiledChunks.map(h=>h.slice()),endGame:C.game.fork(),utility:bn(r,C.game,C.stateHash),headUtility:C.headUtility,headFamily:C.headFamily,goalFamily:C.goalFamily,packageMeta:ca}));return e.session.checkpoint()?{status:ee.BudgetExceeded}:(b.sort((C,h)=>-Qn(C,h)),{status:"ok",plans:b})}c(Oh,"generateTurnPlans");function ya(e,n,o,t,r,a,i,s,u){if(e.session.checkpoint())return{status:ee.BudgetExceeded};let p=t.mode===Ke.Production?vh(e,n,o,t,r,a,i,Math.min(s,Pc(t)),u):Oh(e,n,o,t,r,a,i,s,u);return e.session.checkpoint()?{status:ee.BudgetExceeded}:p}c(ya,"generatePlansForMode");function Ih(e,n){return Math.min(e,Math.min(Math.max(Math.max(n,0)*2,4),8))}c(Ih,"replyShortlistLength");function vr(e,n,o,t,r){if(e.session.checkpoint())return Bn;let a=n.endGame,i=ue(a),s=B(o);if(a.winnerColor()!==void 0||a.activeColor!==s)return bn(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)},p=Si(e,a,i,s,u),l=ya(e,a,s,u,p,u.ownSeedCap,u.ownBeam,u.stepCap,u.expansionCap);if(e.session.checkpoint())return Bn;if(l.status!=="ok")return bn(r,a,i);let m=l.plans,d=Ih(m.length,u.ownBeam),f=m[0];if(f===void 0)return bn(r,a,i);let y=ue(f.endGame),b=bn(p,f.endGame,y);for(let E of m.slice(1,d)){if(e.session.checkpoint())return Bn;let O=ue(E.endGame),g=bn(p,E.endGame,O),x=so(g,b);(x>0||x===0&&la(E.compiledChunks,f.compiledChunks)<0)&&(f=E,y=O,b=g)}let C=f.endGame;if(C.winnerColor()!==void 0||C.activeColor!==o||t.replySeedCap===0)return bn(r,C,y);let h={...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=Si(e,C,y,o,h),M=ya(e,C,o,h,k,h.ownSeedCap,h.ownBeam,h.stepCap,h.expansionCap);if(e.session.checkpoint())return Bn;if(M.status!=="ok")return bn(r,C,y);let T=M.plans,P;for(let E of T.slice(0,Ih(T.length,h.ownBeam))){let O=ue(E.endGame),g=bn(r,E.endGame,O);(P===void 0||so(g,P)>0)&&(P=g)}return P??bn(r,C,y)}c(vr,"evaluatePlanWithReplies");function xh(e,n,o,t,r){if(e.session.checkpoint())return;let a=bi(e,n,o,t,Math.min(Math.max(t.ownSeedCap,1)*2,li));if(e.session.checkpoint()||(a.length===0&&(a=Es(e,n,o)),a.length===0||e.session.checkpoint()))return;let i=new Ht(e,n,a,t),s;for(let u of a){if(e.session.checkpoint())return;let p=hi(e,n,o,u.action,i);if(p===void 0)continue;if(e.session.checkpoint())return;let[l,m]=p,d=ue(l),f=bn(r,l,d),y={actions:[u.action],compiledChunks:[m.slice()],endGame:l.fork(),utility:f,headUtility:f,headFamily:u.family,goalFamily:u.family,packageMeta:ca};if(e.session.cancelled||(y.utility=vr(e,y,o,t,r),e.session.cancelled))return;(s===void 0||Qn(y,s)>0)&&(s=y)}return e.session.checkpoint()?void 0:s}c(xh,"fallbackSingleActionPlan");function Nh(e,n,o,t,r,a){if(e.session.checkpoint())return;let i=bi(e,n,o,t,Math.min(Math.max(t.ownSeedCap,1)*2,li));if(e.session.checkpoint()||(i.length===0&&(i=Es(e,n,o)),e.session.checkpoint()||i.length===0))return;let s=As(a),u=new Ht(e,n,i,t);if(e.session.checkpoint())return;let p;for(let l of i){if(e.session.checkpoint())return;let m=hi(e,n,o,l.action,u);if(m===void 0)continue;if(e.session.checkpoint())return;let[d,f]=m,y=s.get(pn(f));if(y===void 0)continue;let b=ue(d),C=bn(r,d,b),h={actions:[l.action],compiledChunks:[f.slice()],endGame:d.fork(),utility:C,headUtility:C,headFamily:l.family,goalFamily:l.family,packageMeta:ca};if(e.session.cancelled||(h.utility=vr(e,h,o,t,r),e.session.cancelled))return;let M={rank:y,allowedLength:a.length,firstStepOpponentImmediateLoss:Cc(e,d,o,b),firstStepDrainerSafety:Ne(e,d.board,o)};(p===void 0||Mc(h,M,p.plan,p.meta)>0)&&(p={plan:h,meta:M})}return e.session.checkpoint()?void 0:p?.plan}c(Nh,"fallbackSingleActionPlanFromAllowedHeads");function kd(e,n,o,t){if(e.session.checkpoint())return{status:ee.BudgetExceeded};let r=yi(e,n,o,t),a=ya(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:ee.BudgetExceeded};if(a.status===ee.BudgetExceeded)return a;let i;if(a.status==="ok")i=a.plans;else{let u=xh(e,n,o,t,r);return e.session.checkpoint()?{status:ee.BudgetExceeded}:u===void 0?{status:ee.NoPlan}:{status:"ok",plan:u}}if(t.mode===Ke.Production&&i.length>1){i.sort((d,f)=>-Qn(d,f));let u=Math.min(i.length,Math.min(Math.max(Math.max(t.ownBeam,1)*2,6),12)),p=t.ownBeam>=4?2:1,l=new Map,m=[];for(let d of i){let f=`${pn(d.compiledChunks[0]??[])}:${d.headFamily}:${d.goalFamily}`,y=l.get(f)??0;if(!(y>=p)&&(l.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:ee.BudgetExceeded};if(u.utility=vr(e,u,o,t,r),e.session.cancelled)return{status:ee.BudgetExceeded};(s===void 0||Qn(u,s)>0)&&(s=u)}return e.session.checkpoint()?{status:ee.BudgetExceeded}:s===void 0?{status:ee.NoPlan}:{status:"ok",plan:s}}c(kd,"buildBestPlan");function Dh(e,n,o){if(e.session.checkpoint())return;let t=Ll(Zn(e).bestPlan,o);if(t===void 0)return;let r=t.compiledChunks[0],a=r!==void 0&&nr(n,r)!==void 0;if(!e.session.checkpoint()){if(!a){e.session.cacheWriteAllowed&&Gl(Zn(e).bestPlan,o);return}return El(t)}}c(Dh,"cachedBestPlanIfLegal");function LP(e,n,o){if(e.session.checkpoint())return;let t=lc(n,o),r=Ll(Zn(e).continuation,t);if(r===void 0)return;let a=nr(n,r)!==void 0;if(!e.session.checkpoint()){if(!a){e.session.cacheWriteAllowed&&Gl(Zn(e).continuation,t);return}return r.slice()}}c(LP,"cachedStepIfLegal");function wc(e,n,o){if(e.session.checkpoint())return;let t=LP(e,n,o);return e.session.checkpoint()?void 0:t}c(wc,"turnEngineCachedStep");function _h(e,n,o,t,r){e.session.checkpoint()||!e.session.cacheWriteAllowed||dc(Zn(e).continuation,pc(n,o,t),r.slice())}c(_h,"turnEngineStoreCachedStep");function Ko(e,n,o,t){if(e.session.checkpoint()||n.activeColor!==o)return;let r=lc(n,t);if(HS(Zn(e).noPlan,r))return;let a=Dh(e,n,r);if(a!==void 0)return e.session.checkpoint()?void 0:a;let i=kd(e,n,o,t);if(!e.session.checkpoint())switch(i.status){case ee.NoPlan:e.session.cacheWriteAllowed&&US(Zn(e).noPlan,r);return;case ee.BudgetExceeded:return;case"ok":return e.session.cacheWriteAllowed?(dc(Zn(e).bestPlan,r,El(i.plan)),i.plan):void 0}}c(Ko,"turnEngineCandidatePlan");function Fh(e,n,o,t){if(e.session.checkpoint()||n.activeColor!==o)return;let r=kd(e,n,o,t);return e.session.checkpoint()||r.status!=="ok"?void 0:r.plan}c(Fh,"turnEngineCandidatePlanLive");function GP(e,n,o,t,r,a,i){let s=As(i),u;for(let p of a){if(e.session.checkpoint())return;let l=p.compiledChunks[0];if(l===void 0)continue;let m=s.get(pn(l));if(m===void 0)continue;if(p.utility=vr(e,p,o,t,r),e.session.cancelled)return;let d=ah(e,n,p,o,m,i.length);(u===void 0||Mc(p,d,u.plan,u.meta)>0)&&(u={plan:p,meta:d})}return u?.plan}c(GP,"bestPlanFromAllowedHeads");function VP(e,n,o,t,r){if(e.session.checkpoint())return{status:ee.BudgetExceeded};let a=yi(e,n,o,t),i=ya(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:ee.BudgetExceeded};if(i.status===ee.BudgetExceeded)return i;if(i.status==="ok"){let u=GP(e,n,o,t,a,i.plans,r);if(e.session.checkpoint())return{status:ee.BudgetExceeded};if(u!==void 0)return{status:"ok",plan:u}}let s=Nh(e,n,o,t,a,r);return e.session.checkpoint()?{status:ee.BudgetExceeded}:s===void 0?{status:ee.NoPlan}:{status:"ok",plan:s}}c(VP,"buildBestPlanFromAllowedHeads");function Td(e,n,o,t,r){if(e.session.checkpoint()||n.activeColor!==o||r.length===0)return;let a=As(r),i=Dh(e,n,lc(n,t)),s=i?.compiledChunks[0];if(s!==void 0&&a.has(pn(s)))return i;let u=VP(e,n,o,t,r);return e.session.checkpoint()||u.status!=="ok"?void 0:u.plan}c(Td,"turnEngineCandidatePlanFromAllowedHeads");function Wh(e,n,o,t,r,a){if(e.session.checkpoint()||n.activeColor!==o||a.length===0)return;let i=new Set(a.map(pn)),s=wc(e,n,r);if(s!==void 0&&i.has(pn(s)))return s;let u=Td(e,n,o,r,a);if(!(u===void 0||e.session.checkpoint())&&(Lh(e,n,o,t,u,r),!e.session.cancelled))return u.compiledChunks[0]?.slice()}c(Wh,"turnEngineNextInputsFromAllowedHeads");function Bh(e,n,o,t,r,a){e.session.checkpoint()||Lh(e,n,o,t,r,a)}c(Bh,"turnEngineCommitPlan");function Lh(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 p=r.compiledChunks[u];if(p===void 0)continue;if(u>0&&t===Ke.Production){let m=Ko(e,i,o,a);if(m?.compiledChunks[0]===void 0||e.session.checkpoint()||io(m.compiledChunks[0],p)!==0)break}if(!e.session.cacheWriteAllowed)return;dc(Zn(e).continuation,pc(i,t,a),p.slice());let l=nr(i,p);if(l?.activeColor!==s)break;i=l}}c(Lh,"registerPlanContinuations");function Ac(e,n,o,t,r){if(e.session.checkpoint())return Bn;let a=yi(e,n,t,r),i=vr(e,o,t,r,a);return e.session.checkpoint()?Bn:i}c(Ac,"turnEngineEvaluatePlanWithReplies");var Ec=4096,HP=Symbol("reply-risk-session-caches"),Rd=class{static{c(this,"ReplyRiskSessionCaches")}snapshots=new xe(Ec);spiritFollowupFloors=new xe(Ec);selectedOverrideUtilities=new xe(Ec);capacity=Ec*3;get size(){return this.snapshots.size+this.spiritFollowupFloors.size+this.selectedOverrideUtilities.size}clear(){this.snapshots.clear(),this.spiritFollowupFloors.clear(),this.selectedOverrideUtilities.clear()}};function Sa(e){return e.caches.session.getOrCreate(HP,()=>new Rd)}c(Sa,"replyRiskCaches");function Pd(e,n){return e.get(n.hash,n.tag,n.secondary,n.qualifier)}c(Pd,"cacheGet");function wd(e,n,o){e.set(n.hash,o,n.tag,n.secondary,n.qualifier)}c(wd,"cacheSet");function Os(e,n,o,t){let r=t.evaluation.weights;if(!Number.isInteger(o)||o<0||o>65535)return;let a=o+rn(n)*65536;return{hash:ue(e),tag:a,qualifier:`string:${mi(r)}`}}c(Os,"replyRiskCacheKey");function Gh(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===Ke.Production)<<10|Number(o)<<11|Number(e.enableLazyOracleScoreWindowProjection)<<12;return ao(a,r)}c(Gh,"selectedOverrideConfigKey");function Ad(e){Sa(e).clear()}c(Ad,"clearReplyRiskCache");function Vh(e,n){return Pd(Sa(e).snapshots,n)}c(Vh,"cachedReplyRiskSnapshot");function Hh(e,n,o){wd(Sa(e).snapshots,n,o)}c(Hh,"storeReplyRiskSnapshot");function Uh(e,n){return Pd(Sa(e).spiritFollowupFloors,n)}c(Uh,"cachedSpiritFollowupFloor");function jh(e,n,o){wd(Sa(e).spiritFollowupFloors,n,o)}c(jh,"storeSpiritFollowupFloor");function Kh(e,n){return Pd(Sa(e).selectedOverrideUtilities,n)}c(Kh,"cachedSelectedOverrideUtility");function qh(e,n,o){wd(Sa(e).selectedOverrideUtilities,n,o)}c(qh,"storeSelectedOverrideUtility");function Or(e){return e.planner.mode===Be.Production?Ke.Production:Ke.Baseline}c(Or,"turnEngineModeFromAutomoveConfig");function Ut(e){return Math.max(Math.trunc(e),1)}c(Ut,"positiveCap");function Ao(e){return{mode:Or(e),ownSeedCap:Ut(e.planner.ownSeedCap),ownBeam:Ut(e.planner.ownBeam),perNodeFamilyCap:Ut(e.planner.perNodeFamilyCap),stepCap:Ut(e.planner.stepCap),opponentSeedCap:Ut(e.planner.opponentSeedCap),opponentBeam:Ut(e.planner.opponentBeam),replySeedCap:Ut(e.planner.replySeedCap),replyBeam:Ut(e.planner.replyBeam),expansionCap:Ut(e.planner.expansionCap),enableSpiritFamily:e.planner.spiritFamily,scoringWeights:e.evaluation.weights,enableLazyOracleScoreWindowProjection:!1}}c(Ao,"turnEngineConfigFromAutomoveConfig");function eo(e){return e.planner.enabled&&e.planner.mode===Be.Production&&e.planner.secondaryAnalysis}c(eo,"productionSecondaryAnalysisLive");function So(e){return e.activeColor===R.White&&e.turnNumber<=3&&!e.playerCanUseAction()&&!e.playerCanMoveMana()&&(e.monsMovesCount===0||e.monsMovesCount===3)}c(So,"productionIsEarlyWhiteTurnStart");function gc(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(gc,"applyEarlyWhiteTurnEngineLimits");function UP(e){let n=e.mode===Ke.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(UP,"applyTurnEngineRerankLimits");function Ir(e){return UP(Ao(e))}c(Ir,"turnEngineRerankConfigFromAutomoveConfig");var zh=700;function $h(e,n){let o=Ao(n);o.mode===Ke.Production&&n.planner.lowBudgetGuard&&So(e)&&(o=gc(o));let t=o.mode===Ke.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($h,"projectionTurnEngineConfig");var Is=Math.trunc(14022),Yh=140,Xh=3,Qh=8,Zh=600,Jh=180,xs=6,Ns=2200,eb=220,nb=140,ob=2500,tb=340,vc=260,rb=240,ab=420,ib=210,sb=360,ub=220,cb=140,xr=Object.freeze({maxExtensionsPerPath:1,extensionNodeShareBp:1500,quiescenceNodes:120,quiescenceEnumerationLimit:12,futilityMargin:2300,transpositionCapacity:12e3,evaluationCacheCapacity:32768}),Oc=Object.freeze({fast:Object.freeze({depth:2,maxVisitedNodes:480}),normal:Object.freeze({depth:3,maxVisitedNodes:3800}),pro:Object.freeze({depth:4,maxVisitedNodes:Is})});var pb=1e6,Ed=1e4,jP=["budget","search","planner","evaluation","replyRisk","policy"],KP=["preference","depth","maxVisitedNodes","exactLiteRootCalls","exactLiteStaticCalls","extensionNodeShareBp","quiescenceNodes"],qP=["depth","maxVisitedNodes","exactLiteRootCalls","exactLiteStaticCalls","extensionNodeShareBp","quiescenceNodes"],zP=["rootEnumerationLimit","rootBranchLimit","nodeEnumerationLimit","nodeBranchLimit","twoPassRootAllocation","volatilityFocus","selectiveExtensions","maxExtensionsPerPath","quietReductions","quietReductionDepthThreshold","quiescence","quiescenceEnumerationLimit","futilityPruning","futilityMargin","transpositionTable","transpositionCapacity","exactLiteChecks","exactRootAnalysis"],$P=["twoPassRootAllocation","volatilityFocus","selectiveExtensions","quietReductions","quiescence","futilityPruning","transpositionTable","exactLiteChecks","exactRootAnalysis"],YP=["rootEnumerationLimit","rootBranchLimit","nodeEnumerationLimit","nodeBranchLimit","maxExtensionsPerPath","quietReductionDepthThreshold","quiescenceEnumerationLimit","futilityMargin","transpositionCapacity"],XP=["enabled","rerankHeads","lowBudgetGuard","midTurnTacticalGuard","secondaryAnalysis","selectedFollowupProjection","mode","ownSeedCap","ownBeam","perNodeFamilyCap","stepCap","opponentSeedCap","opponentBeam","replySeedCap","replyBeam","expansionCap","spiritFamily"],QP=["enabled","rerankHeads","lowBudgetGuard","midTurnTacticalGuard","secondaryAnalysis","selectedFollowupProjection","spiritFamily"],ZP=["ownSeedCap","ownBeam","perNodeFamilyCap","stepCap","opponentSeedCap","opponentBeam","replySeedCap","replyBeam","expansionCap"],JP=["weights","cacheCapacity","rootManaHandoffPenalty","rootBacktrackPenalty","potionSpendPenalty","supermanaProgressBonus","supermanaScoreBonus","opponentManaProgressBonus","opponentManaScoreBonus","softManaHandoffPenalty","softRoundtripPenalty"],ew=["cacheCapacity","rootManaHandoffPenalty","rootBacktrackPenalty","potionSpendPenalty","supermanaProgressBonus","supermanaScoreBonus","opponentManaProgressBonus","opponentManaScoreBonus","softManaHandoffPenalty","softRoundtripPenalty"],nw=["enabled","scoreMargin","shortlistLimit","replyLimit","nodeShareBp","antiHelpScoreMargin","antiHelpReplyLimit","safetyRerank","deepSafetyFloor","deterministicTiebreak","preferCleanRoots","lateSafeManaRootPreference"],ow=["enabled","safetyRerank","deepSafetyFloor","deterministicTiebreak","preferCleanRoots","lateSafeManaRootPreference"],tw=["scoreMargin","shortlistLimit","replyLimit","nodeShareBp","antiHelpScoreMargin","antiHelpReplyLimit"],rw=["targetedDrainerAttackFallback","forcedTacticalPrepass","preferSpiritDevelopment","hardSpiritDeployment","supermanaPrepassException","drainerSafetyScoreMargin","efficiencyScoreMargin"],aw=["targetedDrainerAttackFallback","forcedTacticalPrepass","preferSpiritDevelopment","hardSpiritDeployment","supermanaPrepassException"],iw=["drainerSafetyScoreMargin","efficiencyScoreMargin"];function lb(e,n){if(n===null||typeof n!="object"||Array.isArray(n))throw new TypeError(`${e} must be a plain object`)}c(lb,"requireRecord");function db(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(db,"validateExactKeys");function Mi(e,n,o){for(let t of o){let r=n[t];if(typeof r!="number"||!Number.isSafeInteger(r)||r<0||r>pb)throw new RangeError(`${e}.${t} must be an integer from 0 through ${pb}`)}}c(Mi,"validateConfigNumbers");function Ic(e,n,o){for(let t of o)if(typeof n[t]!="boolean")throw new TypeError(`${e}.${t} must be a boolean`)}c(Ic,"validateConfigBooleans");function gd(e){lb("automove config",e),db("automove config",e,jP);for(let[t,r]of[["budget",KP],["search",zP],["planner",XP],["evaluation",JP],["replyRisk",nw],["policy",rw]]){let a=e[t];lb(`${t} config`,a),db(`${t} config`,a,r)}let n=e;if(Ts(n.evaluation.weights),!Object.prototype.hasOwnProperty.call(Oc,n.budget.preference))throw new RangeError(`unknown automove preference: ${n.budget.preference}`);let o=e.planner.mode;if(o!==Be.Baseline&&o!==Be.Production)throw new RangeError(`unknown planner mode: ${String(o)}`);if(Mi("budget",n.budget,qP),Mi("search",n.search,YP),Mi("planner",n.planner,ZP),Mi("evaluation",n.evaluation,ew),Mi("replyRisk",n.replyRisk,tw),Mi("policy",n.policy,iw),Ic("search",n.search,$P),Ic("planner",n.planner,QP),Ic("replyRisk",n.replyRisk,ow),Ic("policy",n.policy,aw),n.budget.depth<1||n.budget.depth>5)throw new RangeError(`budget.depth must be from ${1} through ${5}`);if(n.budget.maxVisitedNodes<1||n.budget.maxVisitedNodes>18e4)throw new RangeError(`budget.maxVisitedNodes must be from 1 through ${18e4}`);if(n.search.transpositionCapacity<1)throw new RangeError("search.transpositionCapacity must be positive");if(n.budget.extensionNodeShareBp>Ed||n.replyRisk.nodeShareBp>Ed)throw new RangeError(`basis-point shares must not exceed ${Ed}`)}c(gd,"validateAutomoveConfig");function qo(e){return Object.freeze(e)}c(qo,"freezeSection");function mb(e){let n=Rs(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 gd(o),o}c(mb,"defineAutomoveConfig");function Re(e,n){let o=(()=>{if(n.evaluation===void 0)return e.evaluation;let r=Rs(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 gd(t),t}c(Re,"patchAutomoveConfig");var tt=Object.freeze({scoutDepth:2,scoutMinNodes:96,focusCount:3,focusBudgetShareBp:7e3,focusScoreMargin:2e3,narrowSpreadFallback:700,volatilityMargin:600,volatilityKeep:2});function fb(e,n){let o=15;if(e>=o||n<=0)return 0;let t=Math.min(oe,Math.max(0,Math.trunc(e)));return(oe-t)*Math.trunc(n)}c(fb,"rootProgressStepSoftBonus");function sw(e){let n=0;return e.supermanaProgress&&!e.scoresSupermanaThisTurn&&!e.safeSupermanaPickupNow&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&(n=A(A(n,520),fb(e.safeSupermanaProgressSteps,48))),e.opponentManaProgress&&!e.scoresOpponentManaThisTurn&&!e.safeOpponentManaPickupNow&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&(n=A(A(n,480),fb(e.safeOpponentManaProgressSteps,40))),n}c(sw,"rootScoutProgressBonus");function hb(e){return A(A(Math.trunc(e.heuristic),Math.trunc(Math.trunc(e.efficiency)/2)),sw(e))}c(hb,"rootFocusScoutScore");function uw(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(uw,"rootVolatilityScore");function tn(e,n){let o=15,t=e<o,r=n<o;return t?!r||e<n:!1}c(tn,"rootProgressStepsBetter");function ba(e,n){let o=33,t=e<o,r=n<o;return t?!r||e<n:!1}c(ba,"rootScorePathStepsBetter");function yb(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?tn(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps):e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.opponentManaProgress&&n.opponentManaProgress&&e.safeOpponentManaProgressSteps!==n.safeOpponentManaProgressSteps?tn(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps):o&&e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.scorePathBestSteps!==n.scorePathBestSteps?ba(e.scorePathBestSteps,n.scorePathBestSteps):e.supermanaProgress!==n.supermanaProgress?e.supermanaProgress:e.supermanaProgress&&n.supermanaProgress&&e.safeSupermanaProgressSteps!==n.safeSupermanaProgressSteps?tn(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps):e.opponentManaProgress!==n.opponentManaProgress?e.opponentManaProgress:e.opponentManaProgress&&n.opponentManaProgress&&e.safeOpponentManaProgressSteps!==n.safeOpponentManaProgressSteps?tn(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(yb,"isBetterTacticalRootCandidate");function bb(e,n,o){return yb(e,n,o)?-1:yb(n,e,o)?1:0}c(bb,"compareTacticalRootCandidateOrder");function Id(e,n){return bb(e,n,!0)}c(Id,"compareTacticalRootCandidates");function Cb(e,n){return bb(e,n,!1)}c(Cb,"compareTacticalRootCandidatesIgnoringScorePath");function Od(e,n){return e===n?0:e>n?-1:1}c(Od,"compareScoresDescending");function ha(e,n){let o=e[n];if(o===void 0)throw new RangeError(`root focus index ${n} is out of bounds`);return o}c(ha,"valueAt");function _c(e,n,o){return Od(n[1],o[1])||Id(ha(e,n[0]),ha(e,o[0]))||n[0]-o[0]}c(_c,"compareRankedRootIndices");function Mb(e,n,o){let t=[];if(o!==void 0&&t.push(o),n!==void 0)for(let i of n)t.some(s=>le(s,i))||t.push(i);let r=[...e],a=0;for(let i of t){let s=r.findIndex(p=>le(p.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(Mb,"prioritizeRootInputs");function cw(e,n){return Number.isFinite(e)?Math.max(0,Math.trunc(e)):n}c(cw,"nonnegativeInteger");function vd(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(vd,"clampInteger");function Sb(e){return e.planner.mode===Be.Production&&e.planner.enabled}c(Sb,"isProductionMode");function Dc(e,n,o){return{candidates:Mb(e,n,o),scoutVisitedNodes:0}}c(Dc,"prioritizedRootResult");function pw(e,n){let o=e.search.volatilityFocus||e.budget.depth<=3?1:vd(e.budget.depth,1,tt.scoutDepth),t=vd(1e4-tt.focusBudgetShareBp,500,4e3),r=n;if(o>1){let a=Math.max(0,e.budget.maxVisitedNodes-1);if(a<tt.scoutMinNodes)return;r=vd(Math.trunc(e.budget.maxVisitedNodes*t/1e4),tt.scoutMinNodes,a)}if(!(r<n))return Re(e,{budget:{depth:o,maxVisitedNodes:r},search:{selectiveExtensions:!1,quietReductions:!1}})}c(pw,"createRootScoutConfig");function lw(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 p=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(p.score),t=Math.min(o.budget.maxVisitedNodes,Math.max(t,cw(p.visitedNodes,t)))}else u=hb(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(lw,"runRootScout");function xd(e,n){return n??hb(e)}c(xd,"effectiveScoutScore");function dw(e,n){let o=e.map((t,r)=>[r,xd(t,n[r])]);return o.sort((t,r)=>_c(e,t,r)),o}c(dw,"rankedRootIndices");function mw(e,n){if(e.length<n)return!1;let o=e[0]?.[1]??-2147483648,t=e[n-1]?.[1]??-2147483648;return L(o,t)<=tt.narrowSpreadFallback}c(mw,"hasNarrowScoutSpread");function fw(e,n,o,t,r,a){let{config:i,forcedInputs:s,perspective:u,priorityInputs:p}=e,l=Array.from({length:n.length}).fill(!1);for(let[m]of o.slice(0,a))l[m]=!0;if(Sb(i)&&a<=3&&!o.slice(0,a).some(([d])=>{let f=ha(n,d);return f.spiritDevelopment&&!f.spiritSameTurnScoreSetupNow&&!f.spiritOwnManaSetupNow})){let d=o.slice(0,a+3).map(([f])=>f).filter(f=>{let y=ha(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)l[f]=!0}for(let[m,d]of o)d+tt.focusScoreMargin<r||(l[m]=!0);for(let[m,d]of n.entries())d.attacksOpponentDrainer&&(l[m]=!0),(d.scoresSupermanaThisTurn||d.scoresOpponentManaThisTurn||d.safeSupermanaPickupNow||d.safeOpponentManaPickupNow||d.spiritSameTurnScoreSetupNow||d.sameTurnScoreWindowValue>0||d.spiritOwnManaSetupNow)&&(l[m]=!0),Sb(i)&&d.ownDrainerVulnerable&&!d.ownDrainerWalkVulnerable&&!d.manaHandoffToOpponent&&!d.hasRoundtrip&&d.game.activeColor===u&&e.qualifiesDrainerSafetyRecoveryPlan?.(d)===!0&&(l[m]=!0);if(p!==void 0)for(let m of p){let d=n.findIndex(f=>le(f.inputs,m));d>=0&&(l[d]=!0)}if(s!==void 0){let m=n.findIndex(d=>le(d.inputs,s));m>=0&&(l[m]=!0)}if(i.search.volatilityFocus){let m=n.map((f,y)=>{let b=t[y];return{index:y,volatility:uw(f),scoutScore:xd(f,b)}}).filter(({volatility:f})=>f>0).sort((f,y)=>Od(f.volatility,y.volatility)||Od(f.scoutScore,y.scoutScore)||f.index-y.index);for(let{index:f}of m.slice(0,Math.max(tt.volatilityKeep,1)))l[f]=!0;let d=m[0]?.volatility;if(d!==void 0)for(let{index:f,volatility:y,scoutScore:b}of m){if(y+tt.volatilityMargin<d)break;b+tt.focusScoreMargin<r||(l[f]=!0)}}return l}c(fw,"selectFocusedRootIndices");function kb(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<=tt.focusCount||n.budget.depth<=1)return Dc(r,o,t);let a=pw(n,r.length);if(a===void 0)return Dc(r,o,t);let i=lw(e,r,a);if(i.status==="cancelled")return{candidates:[],scoutVisitedNodes:i.visitedNodes};let s=Math.min(tt.focusCount,r.length),u=dw(r,i.scores);if(mw(u,s)){let d=u.map(([f])=>ha(r,f));return Dc(d,o,t)}let p=fw(e,r,u,i.scores,u[0]?.[1]??-2147483648,s);if(!p.some(Boolean))return Dc(r,o,t);let l=p.flatMap((d,f)=>{if(!d)return[];let y=ha(r,f);return[[f,xd(y,i.scores[f])]]});l.sort((d,f)=>_c(r,d,f));let m=l.map(([d])=>ha(r,d));return{candidates:Mb(m,o,t),scoutVisitedNodes:Math.min(i.visitedNodes,n.budget.maxVisitedNodes)}}c(kb,"focusedRootCandidates");var yw=40;function Tb(e,n){let o=e[n];if(o===void 0)throw new RangeError(`root selector index ${n} is out of bounds`);return o}c(Tb,"valueAt");function Ti(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??=o(e.attacksOpponentDrainer,n.attacksOpponentDrainer,!0),t??=o(e.ownDrainerVulnerable,n.ownDrainerVulnerable,!1),t??=o(e.classes.immediateScore,n.classes.immediateScore,!0),t??=o(e.scoresSupermanaThisTurn,n.scoresSupermanaThisTurn,!0),t??=o(e.scoresOpponentManaThisTurn,n.scoresOpponentManaThisTurn,!0),t??=o(e.safeSupermanaPickupNow,n.safeSupermanaPickupNow,!0),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??=o(e.spiritOwnManaSetupNow,n.spiritOwnManaSetupNow,!0),t!==void 0?t:e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.supermanaProgress&&n.supermanaProgress&&e.safeSupermanaProgressSteps!==n.safeSupermanaProgressSteps?tn(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps)?-1:1:e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.opponentManaProgress&&n.opponentManaProgress&&e.safeOpponentManaProgressSteps!==n.safeOpponentManaProgressSteps?tn(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps)?-1:1:e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.scorePathBestSteps!==n.scorePathBestSteps?ba(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?tn(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?tn(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps)?-1:1:(t=o(e.manaHandoffToOpponent,n.manaHandoffToOpponent,!1),t??=o(e.hasRoundtrip,n.hasRoundtrip,!1),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(Ti,"compareTacticalEvaluatedRoots");function ae(e,n,o){let t=Tb(e,n),r=Tb(e,o);return t.score!==r.score?t.score>r.score?-1:1:Ti(t,r)||n-o}c(ae,"compareRankedEvaluatedRootIndices");function Rb(e,n){let o=n[0]??0;for(let t of n)ae(e,t,o)<0&&(o=t);return o}c(Rb,"bestScoredRootIndex");function Ri(e,n){let o=F(e),t=F(n);if(o===t)return;let r=o?n:e,a=o?e:n,i=!o;if(!(N(r)||r.hasRoundtrip||r.score<A(a.score,yw)||r.sameTurnScoreWindowValue<a.sameTurnScoreWindowValue))return i?1:-1}c(Ri,"spiritScoreChallengeOrder");function Ca(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(Ca,"compareProductionRules");function Pi(e,n,o){let t=e[n],r=e[o];return t===void 0||r===void 0?n-o:r.score-t.score||Ti(t,r)||n-o}c(Pi,"compareRankedReplyRiskEvaluations");function Cn(e,n){return tn(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps)||tn(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps)||e.spiritSetupGain>n.spiritSetupGain}c(Cn,"rootProgressOrSetupBetter");function Nd(e){return e.classes.immediateScore||e.classes.drainerAttack||e.classes.drainerSafetyRecover}c(Nd,"isTacticalPriorityRoot");function Eo(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=Ti(t,r);return a!==0?a<0?1:-1:n===o?0:n<o?1:-1}c(Eo,"rankedRootOrder");function go(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(go,"sameNonTacticalProgressLane");function wi(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||=f.winsImmediately)}if(i&&L(r,a)>zh)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)=>Pi(n,d,f)),u.length===0)return u;let p=Math.max(1,t.replyRisk.shortlistLimit);if(u.length>p)if(D(t)){let d=u.slice(0,p),f=d.some(h=>{let k=n[h];return k!==void 0&&(k.spiritDevelopment||k.spiritSameTurnScoreSetupNow||k.spiritOwnManaSetupNow)}),y=n[u[0]??-1]?.score??r,b=[];if(!f){let h=u.slice(p).find(k=>{let M=n[k];return M!==void 0&&L(y,M.score)<=64&&(M.spiritDevelopment||M.spiritSameTurnScoreSetupNow||M.spiritOwnManaSetupNow)});h!==void 0&&b.push(h)}if([...d,...b].some(h=>{let k=n[h];return k!==void 0&&F(k)})){let h=0;for(let k of u.slice(p)){let M=n[k];if(M!==void 0&&F(M)&&L(y,M.score)<=64&&!b.includes(k)&&(b.push(k),h+=1,h>=2))break}}u=[...d,...b]}else u=u.slice(0,p);let l=u[0],m=l===void 0?void 0:n[l];if(D(t)&&m!==void 0&&N(m)&&X(m)){let d=o.filter(f=>!u.includes(f)).filter(f=>{let y=n[f];return y!==void 0&&!N(y)&&go(y,m)&&L(m.score,y.score)<=320}).sort((f,y)=>Pi(n,f,y))[0];d!==void 0&&u.push(d)}return u.sort((d,f)=>Pi(n,d,f)),u}c(wi,"replyRiskGuardShortlistIndices");function Dd(e,n,o){return D(o)&&F(e)&&F(n)&&!N(e)&&!N(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(Dd,"isSafePlainSpiritPair");function Ds(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(Ds,"shortlistHasPair");function Fc(e,n,o){return!D(o)||n.length<2?!1:Ds(e,n,(t,r)=>Dd(t,r,o))}c(Fc,"safePlainSpiritCompetition");function _d(){return{allowsImmediateOpponentWin:!0,opponentReachesMatchPoint:!0,worstReplyScore:-Math.trunc(268435455/2)}}c(_d,"conservativeSnapshot");function rt(e,n,o,t){return Rr(e,n,o,t.evaluation.weights,!1)}c(rt,"evaluateReplyRiskGame");function Mn(e,n,o,t,r){if(e.session.checkpoint())return _d();let a=Math.max(1,Math.trunc(r)),i=Os(n,o,a,t);if(i!==void 0){let p=Vh(e,i);if(p!==void 0)return p}let s=n.winnerColor(),u;if(s!==void 0){let p=s===o;u={allowsImmediateOpponentWin:!p,opponentReachesMatchPoint:!p,worstReplyScore:p?Math.trunc(268435455/2):-Math.trunc(268435455/2)}}else if(n.activeColor===o)u={allowsImmediateOpponentWin:!1,opponentReachesMatchPoint:!1,worstReplyScore:rt(e,n,o,t)};else{let p=wo(e,n,a);if(e.session.checkpoint())return _d();if(p.length===0)u={allowsImmediateOpponentWin:!1,opponentReachesMatchPoint:!1,worstReplyScore:Math.trunc(268435455/4)};else{let l=!1,m=!1,d=2147483647,f=!1;for(let y of p){if(e.session.checkpoint())return _d();let b=y.game;f=!0;let C=o===R.White?b.blackScore:b.whiteScore;be-C<=1&&(m=!0);let h=b.winnerColor(),k;if(h===o?k=Math.trunc(268435455/2):h!==void 0?(l=!0,m=!0,k=-Math.trunc(268435455/2)):k=rt(e,b,o,t),d=Math.min(d,k),l)break}(!f||d===2147483647)&&(d=rt(e,n,o,t)),u={allowsImmediateOpponentWin:l,opponentReachesMatchPoint:m,worstReplyScore:d}}}return e.session.cacheWriteAllowed&&i!==void 0&&Hh(e,i,u),u}c(Mn,"rootReplyRiskSnapshot");var Fd=Object.freeze({});function jt(e,n){return e.game.activeColor===n&&e.game.winnerColor()===void 0}c(jt,"canTurnEngineProjectReplyRiskRoot");function Bc(e){return e===S.ImmediateScore||e===S.DenyOpponentWindow||e===S.DrainerKill}c(Bc,"isTacticalTurnEngineFamily");function wb(e){return Bc(e)||e===S.SpiritImpact||e===S.DrainerSafetyRecovery}c(wb,"isInformativeReplyRiskProjectionFamily");function Sw(e,n,o,t){return!t.planner.enabled||!D(t)||!jt(e,o)||F(e)||n.plan.headFamily===S.SpiritImpact&&!e.spiritDevelopment&&e.ownDrainerVulnerable?!1:wb(n.plan.headFamily)?!0:(n.plan.headFamily===S.SafeSupermanaProgress||n.plan.headFamily===S.SafeOpponentManaProgress)&&X(e)}c(Sw,"shouldUseReplyRiskProjectionForRoot");function Wd(e,n,o,t,r,a){let i=o!==void 0&&Sw(n,o,t,r)?o.plan.endGame:n.game;return Mn(e,i,t,r,a)}c(Wd,"rootReplyRiskSnapshotWithProjection");function Pb(e,n){return so(e,n)>=0?e:n}c(Pb,"maxTurnUtility");function Ab(e,n,o,t,r,a){let i=ws(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 Ac(e,n,s,t,r)}c(Ab,"turnEngineRootPlanUtilityWithConfig");function Ct(e,n,o,t,r,a,i=Fd){return i.evaluateTurnEngineRootUtility?.(n,o,t,a)??Ab(e,n,o,t,Ao(r),a)}c(Ct,"turnEngineRootPlanUtility");function Lc(e,n,o,t,r,a,i=Fd){let s=i.evaluateTurnEngineRootUtility?.(n,o,t,a);if(s!==void 0)return s;let u=$h(o.game,r),p=Os(o.game,t,ES[a],r),l=Gh(u,r.planner.selectedFollowupProjection,r.planner.secondaryAnalysis),m=p===void 0||l===void 0?void 0:{...p,secondary:l};if(m!==void 0){let y=Kh(e,m);if(y!==void 0)return y}let d=ws(e,o.game,n,t,u),f;if(!eo(r))f=d;else{let y=Ab(e,n,o,t,u,a);if(!r.planner.selectedFollowupProjection||!jt(o,t))f=Pb(y,d);else{let b=o.ownDrainerVulnerable||o.spiritDevelopment||o.spiritSameTurnScoreSetupNow||o.spiritOwnManaSetupNow||X(o),C=o.game.activeColor===R.Black&&(a===S.ManaTempo||a===S.DrainerSafetyRecovery)&&!b&&!N(o)&&!o.manaHandoffToOpponent&&!o.hasRoundtrip&&!o.winsImmediately&&!o.attacksOpponentDrainer;if(!b&&!C)f=y;else{let h=Ko(e,o.game,t,u);f=h===void 0?y:Pb(h.utility,y)}}}return e.session.cacheWriteAllowed&&m!==void 0&&qh(e,m,f),f}c(Lc,"turnEngineSelectedOverrideUtility");function Eb(e,n,o,t,r){if(!eo(r)||o.length<2)return new Map;let a=Fc(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&&F(y)&&jt(y,t)});if(!s&&!u)return new Map;let p;u?p=a?r.planner.lowBudgetGuard?Math.min(o.length,4):o.length:Math.min(o.length,r.planner.lowBudgetGuard?4:8):p=Math.min(o.length,r.planner.lowBudgetGuard?3:6);let l=Ir(r),m=Ao(r),d=new Map;for(let f of o.slice(0,p)){if(e.session.checkpoint())return new Map;let y=n[f];if(y===void 0||!jt(y,t))continue;let C=D(r)&&y.ownDrainerVulnerable&&!y.manaHandoffToOpponent&&!y.hasRoundtrip?m:l,h=Ko(e,y.game,t,C);h!==void 0&&d.set(f,{plan:h})}return u&&!s&&!a&&![...d.values()].some(({plan:f})=>wb(f.headFamily))?new Map:d}c(Eb,"turnEngineReplyRiskProjections");function Wc(e,n){return jt(e,n)&&!F(e)&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&!N(e)&&!e.hasRoundtrip}c(Wc,"canChallengeSpiritPreferenceRoot");function Ma(e,n){return jt(e,n)&&!F(e)&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&!e.manaHandoffToOpponent&&!e.hasRoundtrip}c(Ma,"canChallengeSpiritPreferenceRootWithRecovery");function gb(e,n,o,t,r){if(!eo(r))return new Map;let a=r.planner.lowBudgetGuard?4:6,i=o.filter(f=>{let y=n[f];return y!==void 0&&F(y)&&jt(y,t)}).sort((f,y)=>Pi(n,f,y)).slice(0,a),s=r.planner.lowBudgetGuard?2:4,u=o.filter(f=>{let y=n[f];return y!==void 0&&(Wc(y,t)||Ma(y,t))}).sort((f,y)=>Pi(n,f,y)).slice(0,s),p=[...i];for(let f of u)p.includes(f)||p.push(f);if(p.length<2)return new Map;let l=Ir(r),m=Ao(r),d=new Map;for(let f of p){let y=n[f];if(y===void 0)continue;let C=Ma(y,t)&&!Wc(y,t)?m:l,h=Ko(e,y.game,t,C);h!==void 0&&d.set(f,{plan:h})}return d}c(gb,"buildSpiritRootProjections");function Je(e,n,o,t){if(e.session.checkpoint())return 0;let r=n.winnerColor();if(r!==void 0)return r===o?Math.trunc(268435455/2):-Math.trunc(268435455/2);let a=Os(n,o,1,t);if(a!==void 0){let s=Uh(e,a);if(s!==void 0)return s}let i=rt(e,n,o,t);return e.session.cacheWriteAllowed&&a!==void 0&&jh(e,a,i),i}c(Je,"spiritFollowupFloorScore");function I(e){return te(e)?S.ImmediateScore:e.attacksOpponentDrainer?S.DrainerKill:e.classes.drainerSafetyRecover?S.DrainerSafetyRecovery:e.spiritSameTurnScoreSetupNow||e.spiritOwnManaSetupNow||e.spiritDevelopment?S.SpiritImpact:e.supermanaProgress?S.SafeSupermanaProgress:e.opponentManaProgress?S.SafeOpponentManaProgress:S.ManaTempo}c(I,"rootFamily");var sn=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 Gc=[[sn.PreserveSpiritRepresentative,e=>e.spiritSameTurnScoreSetupNow||e.spiritOwnManaSetupNow],[sn.PreserveSpiritRepresentative,F],[sn.PreserveSafeProgressRepresentative,e=>I(e)===S.SafeSupermanaProgress],[sn.PreserveSafeProgressRepresentative,e=>I(e)===S.SafeOpponentManaProgress],[sn.PreserveManaTempoRepresentative,e=>I(e)===S.ManaTempo]];function kn(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(kn,"memoizedByIndex");function Sn(e,...n){return n.includes(e)}c(Sn,"isTurnPlanFamilyOneOf");function Ai(e,n,o){let t=e[o],r=n[o];return t!==void 0&&r!==void 0&&Et(t,r)}c(Ai,"sameInputAt");function mn(e){return!N(e)&&!e.hasRoundtrip}c(mn,"advisorRootIsSafe");function fn(e,n,o,t,r){return Lc(e,n,o,t,r,I(o))}c(fn,"rootUtility");function Mt(e,n,o,t,r){return Ct(e,n,o,t,r,I(o))}c(Mt,"rootMoveUtility");function vo(e,n){return se(e,n)>=0||Ho(e,n)}c(vo,"utilityCompetes");function vb(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(vb,"utilitiesEqual");function kt(e,n){return{inputs:[...e.inputs],family:I(e),rootRank:e.rootRank,reason:n}}c(kt,"entry");function Oo(e,n){e.some(o=>le(o.inputs,n.inputs))||e.push(n)}c(Oo,"pushUnique");function Bd(e,n,o){return _c(e,[n,0],[o,0])}c(Bd,"compareRankedRootMoveIndices");function Ob(e,n){return e.heuristic!==n.heuristic?e.heuristic>n.heuristic?-1:1:Id(e,n)||io(e.inputs,n.inputs)}c(Ob,"compareRootMoveSearchPriority");function Ld(e,n){return Re(e,{planner:{mode:n}})}c(Ld,"withPlannerMode");function Gd(e,n){return Re(Ld(e,n),{replyRisk:{enabled:!1}})}c(Gd,"withoutReplyRiskGuard");function Ae(e,n,o,t){return n.filter(r=>{let a=e[r];return a!==void 0&&o(a,r)}).sort(t)[0]}c(Ae,"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 Vd(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(Vd,"compareRootRankThenScoreThenRanked");function uo(e,n){let o=Te(e,n,n.activeColor);return o.delta.sameTurnScoreWindowValue===0&&o.delta.opponentWindowDenyGain===0&&!o.delta.drainerAttackAvailable}c(uo,"exactContextIsQuiet");var hw=Object.freeze(["mana-scored","pickup-mana","mon-fainted","use-potion","pickup-bomb","pickup-potion","bomb-attack","bomb-explosion"]),bw=Object.freeze(["mana-scored","pickup-mana","mon-fainted","use-potion","bomb-attack","bomb-explosion","spirit-target-move","supermana-back-to-base"]);function Ib(e,n){return e.some(o=>n.includes(o.kind))}c(Ib,"hasEventKind");function _s(e){return Ib(e,hw)}c(_s,"hasMaterialEvent");function xb(e){return Ib(e,bw)}c(xb,"isQuiescenceTacticalTransition");var Cw=16384,Kt=15,Mw=120,kw=40,Nb=90,Db=22,Tw=Symbol("move-efficiency-cache");function Wb(e){return e.caches.session.getOrCreate(Tw,()=>new xe(Cw))}c(Wb,"moveEfficiencyCache");function Rw(e,n,o){return rn(e)|Number(n)<<1|Number(o)<<2}c(Rw,"snapshotCacheTag");function _b(e){return{safeSupermanaProgress:!1,safeSupermanaProgressSteps:void 0,safeOpponentManaProgress:!1,safeOpponentManaProgressSteps:void 0,spiritAssistedScore:!1,spiritAssistedScoreValue:0,spiritAssistedDenial:!1,spiritAssistedDenialValue:0,sameTurnScoreWindowValue:e}}c(_b,"defaultTacticalProjection");function Hc(e){let n=10;return Math.max(Math.min(e.i,n-e.i),Math.min(e.j,n-e.j))+1}c(Hc,"distanceToAnyPoolStepsForEfficiency");function qt(e,n){let o=10,t=n===R.White?o:0;return Math.max(Math.abs(t-e.i),Math.min(e.j,o-e.j))+1}c(qt,"distanceToColorPoolStepsForEfficiency");function Fb(e,n){let o;for(let[t,r]of e.board.entries()){let a=G(r);if(!(a?.color!==n||a.kind!==w.Drainer||H(a)))for(let[i,s]of e.board.entries()){if(s.kind!=="mana")continue;let u=ne(t,i)-1;o=o===void 0?u:Math.min(o,u)}}return o}c(Fb,"approximateBestDrainerToManaSteps");function Vc(e,n){if(e.activeColor!==n)return 0;let o=Math.max(0,oe-e.monsMovesCount),t=0;for(let[r,a]of e.board.entries()){if(a.kind!=="mon-with-mana"||a.mon.color!==n||H(a.mon))continue;Hc(r)-1<=o&&(t=Math.max(t,Fe(a.mana,n)))}return t}c(Vc,"approximateSameTurnScoreWindowValue");function Pw(e,n,o,t,r,a,i){let s=a?ci(e,n):void 0,u=s?.colorSummary(o),p=s?.colorSummary(t),l=ls,m=r&&n.activeColor===o?Po(e,n,o,i,l):_b(u?.immediateWindow.bestScore??Vc(n,o)),d=r&&n.activeColor===t?Po(e,n,t,i,l):_b(p?.immediateWindow.bestScore??Vc(n,t)),f=u?.bestDrainerToManaSteps??Fb(n,o)??Kt,y=p?.bestDrainerToManaSteps??Fb(n,t)??Kt;return{myBestCarrierSteps:u?.bestCarrierSteps??Kt,opponentBestCarrierSteps:p?.bestCarrierSteps??Kt,myBestDrainerToManaSteps:f,opponentBestDrainerToManaSteps:y,myCarrierCount:0,opponentCarrierCount:0,mySpiritOnBase:!1,opponentSpiritOnBase:!1,mySpiritActionTargets:u?.spirit.utility??0,opponentSpiritActionTargets:p?.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??Kt,opponentSafeSupermanaProgressSteps:d.safeSupermanaProgressSteps??Kt,mySafeOpponentManaProgressSteps:m.safeOpponentManaProgressSteps??Kt,opponentSafeOpponentManaProgressSteps:d.safeOpponentManaProgressSteps??Kt}}c(Pw,"initializeMoveEfficiencySnapshot");function ww(e,n,o,t){let r=e.board.base({kind:w.Spirit,color:n,cooldown:0}),a=e.board.base({kind:w.Spirit,color:o,cooldown:0});for(let[i,s]of e.board.entries()){if(s.kind==="mon-with-mana"){if(H(s.mon))continue;let u=Hc(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"||H(s.mon)||s.mon.kind!==w.Spirit||(s.mon.color===n?t.mySpiritOnBase=_e(i,r):t.opponentSpiritOnBase=_e(i,a))}}c(ww,"observeMoveEfficiencyBoard");function Bb(e,n,o,t,r,a){let i=B(o),s=Pw(e,n,o,i,t,r,a);return ww(n,o,i,s),s}c(Bb,"buildMoveEfficiencySnapshot");function Uc(e,n,o,t,r,a){let i=Wb(e),s=Rw(o,t,r),u=i.get(a,s);if(u!==void 0)return u;let p=Bb(e,n,o,t,r,a);return e.session.cacheWriteAllowed&&i.set(a,p,s),p}c(Uc,"moveEfficiencySnapshotWithHash");function Aw(e,n,o,t,r,a){return Bb(e,n,o,t,r,a)}c(Aw,"moveEfficiencySnapshotUncachedWithHash");function Lb(e){Wb(e).clear()}c(Lb,"clearMoveEfficiencyCache");function Nr(e,n,o,t,r=Kt){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(Nr,"stepProgressDelta");function ka(e){let n=[];for(let o of e){if(o.kind!=="mon-move")continue;let t=G(o.item);if(t!==void 0){if(n.some(r=>_e(r.from,o.to)&&_e(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(ka,"hasRoundtripMonMove");function Ew(e,n,o){return fy(e.board,n.board)&&e.whiteScore===n.whiteScore&&e.blackScore===n.blackScore&&e.whitePotionsCount===n.whitePotionsCount&&e.blackPotionsCount===n.blackPotionsCount&&!_s(o)}c(Ew,"isNoEffectTurnTransition");function gw(e,n){let o=B(n);return e.some(t=>t.kind==="mon-fainted"&&t.mon.kind===w.Drainer&&t.mon.color===o)}c(gw,"eventsIncludeOpponentDrainerFainted");function Ta(e,n,o){if(o<=0)return 0;let t=0,r=B(n);for(let a of e){if(a.kind!=="mana-move")continue;let i=qt(a.from,n),s=qt(a.to,n),u=qt(a.from,r),p=qt(a.to,r),l=Math.max(u-p,0),m=Math.max(i-s,0);if(l>m){let d=l-m;t=t+d*Fe(a.mana,r)*o}}return t}c(Ta,"manaHandoffPenalty");function vw(e,n,o){let t=o;return t=t+Nr(e.myBestCarrierSteps,n.myBestCarrierSteps,90,130),t=t-Nr(e.opponentBestCarrierSteps,n.opponentBestCarrierSteps,80,120),t=t+Nr(e.myBestDrainerToManaSteps,n.myBestDrainerToManaSteps,34,50),t=t-Nr(e.opponentBestDrainerToManaSteps,n.opponentBestDrainerToManaSteps,30,44),t=t+(n.myCarrierCount-e.myCarrierCount)*55,t=t-(n.opponentCarrierCount-e.opponentCarrierCount)*48,t}c(vw,"applyCarrierAndDrainerEfficiencyDelta");function Ow(e,n,o){let t=o;return e.mySpiritOnBase&&!n.mySpiritOnBase&&(t=t+Nb),!e.opponentSpiritOnBase&&n.opponentSpiritOnBase&&(t=t+Math.trunc(Nb/3)),t=t+(n.mySpiritActionTargets-e.mySpiritActionTargets)*Db,t=t-(n.opponentSpiritActionTargets-e.opponentSpiritActionTargets)*Math.trunc(Db/2),t}c(Ow,"applySpiritEfficiencyDelta");function Iw(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(Iw,"applyScoreWindowEfficiencyDelta");function xw(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+Nr(e.mySafeSupermanaProgressSteps,n.mySafeSupermanaProgressSteps,26,40),t=t-Nr(e.opponentSafeSupermanaProgressSteps,n.opponentSafeSupermanaProgressSteps,22,36),t=t+Nr(e.mySafeOpponentManaProgressSteps,n.mySafeOpponentManaProgressSteps,22,34),t=t-Nr(e.opponentSafeOpponentManaProgressSteps,n.opponentSafeOpponentManaProgressSteps,18,30),t}c(xw,"applySafeProgressEfficiencyDelta");function Nw(e,n,o,t,r,a){let i=a,s=t.some(u=>u.kind==="mana-scored")||gw(t,o);return r.applyRootManaHandoffGuard&&!s&&(i=i-Ta(t,o,r.rootManaHandoffPenalty)),Ew(e,n,t)?i=i-Mw:!_s(t)&&i<=0&&(i=i-kw),r.applyBacktrackPenalty&&r.rootBacktrackPenalty>0&&ka(t)&&(i=i-r.rootBacktrackPenalty),i}c(Nw,"applyRootEfficiencyPenalties");function Dw(e,n,o,t,r,a,i){let s=0;return s=vw(r,a,s),s=Ow(r,a,s),s=Iw(r,a,s),s=xw(r,a,s),i.isRoot&&(s=Nw(e,n,o,t,i,s)),s}c(Dw,"moveEfficiencyDeltaFromBeforeSnapshotWithAfterSnapshot");function jc(e,n,o,t,r,a,i,s){let u=Aw(e,o,t,s.includeTacticalExact&&o.activeColor===t,s.includeStrategicExact,i);return Dw(n,o,t,r,a,u,s)}c(jc,"moveEfficiencyDeltaFromBeforeSnapshot");function Gb(e,n){for(let[o,t]of e.board.entries()){let r=G(t);if(r?.color===n&&r.kind===w.Drainer)return{location:o,mon:r}}}c(Gb,"findDrainer");function Gn(e,n,o){let t=Gb(n,o);if(t===void 0)return!1;if(H(t.mon))return!0;if(n.isFirstTurn())return!1;let r=Qe(n.board);return Mr(e,n.board,r,B(o),o,t.location,oe,!0)}c(Gn,"isOwnDrainerVulnerable");function _w(e,n){let o=B(n);for(let[t,r]of e.board.entries()){let a=G(r);if(a?.color===o&&a.kind===w.Drainer&&!H(a))return t}}c(_w,"opponentAwakeDrainerLocation");function Fw(e,n,o){let t=o===w.Mystic?No(n):Do(n),r=2147483647;for(let a of t)r=Math.min(r,ne(e,a));return r}c(Fw,"minimumStepsToAttackSource");function Kc(e,n){let o=[],t=_w(e,n);if(t===void 0)return o;let r=Math.max(0,oe-e.monsMovesCount);if(r<=0)return o;let a=B(n),i=e.board.findAwakeAngel(a),s=i!==void 0&&ne(i,t)===1,u=[];for(let[p,l]of e.board.entries())l.kind==="consumable"&&l.consumable===K.BombOrPotion&&u.push(p);for(let[p,l]of e.board.entries()){let m=G(l);if(m?.color!==n||H(m))continue;if(l.kind==="mon-with-consumable"&&l.consumable===K.Bomb&&ne(p,t)<=r+3){o.push(p);continue}if(!s&&(m.kind===w.Mystic||m.kind===w.Demon)&&Fw(p,t,m.kind)<=r){o.push(p);continue}for(let f of u){let y=ne(p,f);if(y>r)continue;let b=r-y;if(ne(f,t)<=b+3){o.push(p);break}}}return o}c(Kc,"potentialDrainerAttackerLocations");function Ww(e,n){return Kc(e,n).length>0}c(Ww,"hasPotentialDrainerAttacker");function Vb(e,n){return e.activeColor===n&&e.playerCanUseAction()&&Ww(e,n)}c(Vb,"approximateCanAttackOpponentDrainerThisTurn");function Hb(e,n,o){let t=Gb(n,o);if(t===void 0||H(t.mon)||Gn(e,n,o))return!1;let r=Qe(n.board),a=n.board.findAwakeAngel(o),i=a!==void 0&&ne(a,t.location)===1;return ai(e,n.board,r,o,t.location,i)}c(Hb,"isOwnDrainerWalkVulnerable");function Ub(e,n,o,t,r,a){let i=o[0];if(i===void 0||a(i)&&mn(i))return;let s=Mt(e,n,i,t,r);return o.map((u,p)=>p).filter(u=>{let p=o[u];return p!==void 0&&a(p)&&mn(p)&&vo(Mt(e,n,p,t,r),s)}).sort((u,p)=>Bd(o,u,p))[0]}c(Ub,"findRootMoveRepresentative");function jb(e,n){let o=e[0];if(!(o===void 0||!D(n)||!F(o)||!mn(o)))return e.map((t,r)=>r).filter(t=>{let r=e[t];return r!==void 0&&I(r)===S.SpiritImpact&&!F(r)&&Pe(r.inputs,o.inputs)&&r.efficiency===o.efficiency&&mn(r)&&!r.winsImmediately&&!r.attacksOpponentDrainer&&!r.scoresSupermanaThisTurn&&!r.scoresOpponentManaThisTurn&&!r.safeSupermanaPickupNow&&!r.safeOpponentManaPickupNow&&r.sameTurnScoreWindowValue===0}).sort((t,r)=>Bd(e,t,r))[0]}c(jb,"sameOpeningSetupRepresentative");function Hd(e,n,o,t){return D(t)&&e.activeColor===R.Black&&e.turnNumber===6&&e.monsMovesCount===0&&e.playerCanUseAction()&&e.playerCanMoveMana()&&I(n)===S.SpiritImpact&&I(o)===S.SpiritImpact&&F(n)&&o.spiritOwnManaSetupNow&&!o.spiritSameTurnScoreSetupNow&&Pe(n.inputs,o.inputs)&&n.ownDrainerVulnerable===o.ownDrainerVulnerable&&n.ownDrainerWalkVulnerable===o.ownDrainerWalkVulnerable&&!n.manaHandoffToOpponent&&!o.manaHandoffToOpponent&&!n.hasRoundtrip&&!o.hasRoundtrip&&!te(n)&&!te(o)&&!n.attacksOpponentDrainer&&!o.attacksOpponentDrainer&&n.sameTurnScoreWindowValue===0&&o.sameTurnScoreWindowValue===0&&!n.supermanaProgress&&!o.supermanaProgress&&!n.opponentManaProgress&&!o.opponentManaProgress}c(Hd,"isBlackTurnSixPlainSpiritSetupPair");function Bw(e,n){let o=e.fork(),t=[];for(let r of n.compiledChunks){let a=Xe(o,r);if(a===void 0)return;o=a.game,t.push(...a.events)}return{game:o,events:t}}c(Bw,"projectedPlanState");function Lw(e,n,o,t,r,a,i,s){let u=o[0];if(u===void 0||u.winsImmediately&&!t.winsImmediately)return!1;let p=N(u),l=N(t),m=Mt(e,n,u,a,i),d=Bw(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()),b=d!==void 0&&Ta(d.events,a,Math.max(i.evaluation.rootManaHandoffPenalty,1))>0,C=d!==void 0&&ka(d.events),h=d!==void 0&&d.game.winnerColor()!==a&&Gn(e,d.game,a),k=y&&!b&&!C&&!h&&s.compiledChunks.length>1&&s.goalFamily!==S.ManaTempo&&(se(s.utility,m)>=0||Vo(s.utility,m)||ot(s.utility,m,160)||s.goalFamily===S.ImmediateScore&&Tr(s.utility,m)),M=s.headFamily===S.SafeSupermanaProgress||s.headFamily===S.SafeOpponentManaProgress,T=M&&s.goalFamily===S.ImmediateScore&&s.compiledChunks.length>1,P=!r&&T&&!l&&o.slice(0,3).some(W=>{let re=W.spiritDevelopment||W.spiritSameTurnScoreSetupNow||W.spiritOwnManaSetupNow||W.safeSupermanaPickupNow||W.safeOpponentManaPickupNow||W.winsImmediately||W.scoresSupermanaThisTurn||W.scoresOpponentManaThisTurn;return!N(W)&&re&&se(s.headUtility,Mt(e,n,W,a,i))<0}),E=!r&&T&&o.slice(0,3).some(W=>W.spiritSameTurnScoreSetupNow||W.spiritOwnManaSetupNow||W.sameTurnScoreWindowValue>0),O=!r&&T&&o.slice(0,3).some(W=>!N(W)&&X(W)),g=!r&&T&&!p&&!te(u)&&!u.attacksOpponentDrainer&&!u.spiritDevelopment&&!u.spiritSameTurnScoreSetupNow&&!u.spiritOwnManaSetupNow&&!X(u),x=!r&&T&&!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(W=>X(W)&&W.sameTurnScoreWindowValue===0&&!W.spiritSameTurnScoreSetupNow&&!W.spiritOwnManaSetupNow).length>=3,_=r&&s.headFamily===S.SpiritImpact&&s.goalFamily===S.ImmediateScore&&F(t)&&!t.attacksOpponentDrainer&&!te(t)&&o.slice(0,3).some(W=>le(W.inputs,t.inputs)||!F(W)||W.attacksOpponentDrainer||te(W)?!1:W.spiritSetupGain>=t.spiritSetupGain&&W.safeSupermanaProgressSteps<=t.safeSupermanaProgressSteps&&W.safeOpponentManaProgressSteps<=t.safeOpponentManaProgressSteps&&se(Mt(e,n,W,a,i),s.headUtility)>=0);k=k&&!P&&!E&&!O&&!g;let U=o.slice(0,3).every(W=>{let re=Mt(e,n,W,a,i);return Vo(s.utility,re)&&(!l||N(W))})||k,j=t.spiritSameTurnScoreSetupNow||t.sameTurnScoreWindowValue>0||t.attacksOpponentDrainer||te(t),z=s.headFamily===S.SpiritImpact&&o.slice(0,4).filter(W=>Hd(n,t,W,i)).length>=2;if(x||_||s.headFamily===S.DrainerKill&&!t.attacksOpponentDrainer||M&&!X(t)&&!k||!U&&s.headFamily===S.SpiritImpact&&!j&&!t.spiritOwnManaSetupNow&&!z)return!1;let J=o.slice(0,3).some(W=>W.spiritDevelopment||W.spiritSameTurnScoreSetupNow||W.spiritOwnManaSetupNow);return s.headFamily===S.SpiritImpact&&!J&&!j&&!t.spiritOwnManaSetupNow&&!U&&!z?!1:!l||p||U}c(Lw,"injectedCandidatePassesRootGate");function Kb(e,n,o,t,r,a,i){let s=a.compiledChunks[0];if(s===void 0)return;let u=[...s],p=r.find(h=>le(h.inputs,u)),l=p??i.buildInjectedRootCandidate?.(n,o,t,u,a),m=c(()=>({inputs:u,family:a.headFamily,admitted:!1,reason:sn.RejectInjectedMacroRoot}),"rejected");if(l===void 0||!Lw(e,n,r,l,p!==void 0,o,t,a))return m();let d=p===void 0?[...r,l]:[...r];p===void 0&&d.sort(Ob);let f=r[0],y=d.findIndex(h=>le(h.inputs,u)),b=d[y];if(f===void 0||b===void 0)return m();let C=le(b.inputs,f.inputs);if(!C){let h=Mt(e,n,f,o,t),k=Mt(e,n,b,o,t),M=se(a.utility,h)>0||se(a.headUtility,h)>0||se(k,h)>0||mo(a.utility,h)||mo(k,h),T=b.winsImmediately&&!f.winsImmediately||b.attacksOpponentDrainer&&!f.attacksOpponentDrainer||(b.scoresSupermanaThisTurn||b.scoresOpponentManaThisTurn)&&!(f.scoresSupermanaThisTurn||f.scoresOpponentManaThisTurn)||b.sameTurnScoreWindowValue>f.sameTurnScoreWindowValue&&b.sameTurnScoreWindowValue>0||!N(b)&&N(f)||b.classes.drainerSafetyRecover&&f.ownDrainerVulnerable&&!f.classes.drainerSafetyRecover||X(b)&&!X(f)&&!N(b),P=a.headFamily===S.SpiritImpact&&a.goalFamily===S.SpiritImpact&&r.slice(0,4).filter(E=>Hd(n,b,E,t)).length>=2&&se(k,h)>=0&&L(f.heuristic,b.heuristic)<=8;C=M||T||P}return C&&p===void 0&&r.splice(0,r.length,...d),{inputs:u,family:I(b),admitted:C,reason:C?sn.AdmitInjectedMacroRoot:sn.RejectInjectedMacroRoot}}c(Kb,"evaluateInjectedRoot");function qb(e,n,o,t,r,a,i={}){if(!D(t)||r.length===0||e.session.checkpoint()||n.activeColor===R.Black&&n.turnNumber===2&&n.monsMovesCount<=1&&n.playerCanUseAction()&&n.playerCanMoveMana())return;let s=[],u=[],p=r[0];if(p===void 0)return;Oo(s,kt(p,sn.RankedRoot));for(let[f,y]of Gc){if(e.session.checkpoint())return;let b=Ub(e,n,r,o,t,y),C=b===void 0?void 0:r[b];if(C===void 0)continue;let h=kt(C,f);Oo(u,h),Oo(s,h)}let l=jb(r,t),m=l===void 0?void 0:r[l];if(m!==void 0){let f=kt(m,sn.PreserveSpiritRepresentative);Oo(u,f),Oo(s,f)}let d=a===void 0?void 0:Kb(e,n,o,t,r,a,i);if(d?.admitted){let f=r.find(y=>le(y.inputs,d.inputs));f!==void 0&&Oo(s,kt(f,sn.AdmitInjectedMacroRoot))}return e.session.checkpoint()?void 0:{orderedShortlist:s,preservedFamilyRepresentatives:u,approvedRoot:void 0,injectedRoot:d}}c(qb,"productionRootAdvisorPresearch");function Ei(e){let n=[];e.injectedRoot?.admitted&&n.push([...e.injectedRoot.inputs]);for(let o of e.preservedFamilyRepresentatives)n.some(t=>le(t,o.inputs))||n.push([...o.inputs]);return n}c(Ei,"productionRootAdvisorPriorityInputs");var zo=15,Fs=33;function zb(e,n){let o=0,t=zo;for(let[r,a]of e.board.entries()){if(a.kind!=="mon-with-mana"||a.mon.color!==n||H(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(zb,"carrierSnapshot");function Gw(e,n,o){let[t,r]=zb(e,o),[a,i]=zb(n,o);return a>t||i<r&&i<zo}c(Gw,"hasCarrierProgress");function Vw(e,n){return e.board.base({kind:w.Spirit,color:n,cooldown:0})}c(Vw,"spiritBase");function Hw(e,n){let o=Vw(e,n);for(let[t,r]of e.board.entries()){let a=G(r);if(!_e(t,o)&&a?.kind===w.Spirit&&a.color===n&&!H(a))return!0}return!1}c(Hw,"hasAwakeSpiritOffBase");function Ud(e,n,o,t){return t.some(r=>r.kind==="spirit-target-move")||Xa(e,o)&&Hw(n,o)}c(Ud,"hasSpiritDevelopment");function Uw(e,n,o,t){return t.some(r=>r.kind==="mana-scored")||Ue(n,o)>Ue(e,o)}c(Uw,"isImmediateScore");function jd(e,n){return e.some(o=>o.kind==="mon-fainted"&&o.mon.kind===w.Drainer&&o.mon.color===B(n))}c(jd,"attacksDrainer");function qc(e,n,o,t,r=Gn(e,n,t),a=Gn(e,o.game,t)){let i=Uw(n,o.game,t,o.events),s=jd(o.events,t),u=r&&!a,p=Gw(n,o.game,t),l=_s(o.events),m=Ud(n,o.game,t,o.events);return{immediateScore:i,drainerAttack:s,drainerSafetyRecover:u,carrierProgress:p,material:l,quiet:!i&&!s&&!u&&!p&&!l&&!m}}c(qc,"classifyTransition");function zc(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(zc,"orderingEventBonus");function Kd(e,n){return e.some(o=>o.kind==="mana-scored"&&n(o.mana))}c(Kd,"scoresMana");function qd(e,n){return e.some(o=>o.kind==="pickup-mana"&&n(o.mana))}c(qd,"picksUpMana");function zd(e,n,o){return e.some(t=>t.kind==="mana-move"&&o(t.mana)&&qt(t.to,n)<qt(t.from,n))}c(zd,"manaMovedToward");function Ws(e,n,o){return e.some(t=>t.kind==="spirit-target-move"&&t.item.kind==="mana"&&o(t.item.mana)&&qt(t.to,n)<qt(t.from,n))}c(Ws,"spiritMovesManaToward");function Ra(e,n,o,t){let r=Qe(n.board);for(let[a,i]of n.board.entries())if(i.kind==="mon-with-mana"&&i.mon.kind===w.Drainer&&i.mon.color===o&&!H(i.mon)&&ze(i.mana,t))return nc(e,n.board,r,o,a);return!1}c(Ra,"safeCarrierForMana");function gi(e,n,o,t,r){return Ws(o,t,a=>ze(a,r))||o.some(a=>a.kind==="spirit-target-move"&&a.item.kind==="mana"&&ze(a.item.mana,r))&&Ra(e,n,t,r)}c(gi,"spiritManaSetup");function $b(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===w.Drainer&&!H(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!==w.Drainer||H(a.mon)))for(let[i,s]of e.board.entries()){if(s.kind!=="mana"||!ze(s.mana,o))continue;let u=ne(r,i);t=t===void 0?u:Math.min(t,u)}}return t}c($b,"approximateSpecificManaProgressSteps");function jw(e,n){let o;for(let[t,r]of e.board.entries()){if(r.kind!=="mon-with-mana"||r.mon.color!==n||H(r.mon))continue;let a=Math.max(0,Hc(t)-1);o=o===void 0?a:Math.min(o,a)}return o}c(jw,"approximateBestCarrierSteps");function $c(e,n,o,t=!1){let r=t?ci(e,n).colorSummary(o):void 0,a=Math.max(0,oe-n.monsMovesCount),i=$b(n,o,{kind:"supermana"}),s=$b(n,o,{kind:"regular",color:B(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??Vc(n,o),scorePathBestSteps:r?.scorePathWindow.bestSteps??jw(n,o)}}c($c,"approximateActiveTurnSummary");function Xb(e,n){let o=n.activeColor,t=$c(e,n,o);return t.sameTurnScoreWindowValue>0||Vb(n,o)||t.safeSupermanaProgress||t.safeOpponentManaProgress}c(Xb,"hasProTacticalPotential");function Qb(e,n,o,t,r){if(n.activeColor===o)return t?Tl(e,n,o):$c(e,n,o,r)}c(Qb,"rootTurnSummary");function $d(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($d,"liveSpiritSetupGain");function Yb(e,n){if(e>=zo||n<=0)return 0;let o=Math.max(0,Math.min(oe,e));return(oe-o)*n}c(Yb,"rootProgressBonus");function Zb(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,Yb(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,Yb(n.safeOpponentManaProgressSteps,6))),n.manaHandoffToOpponent&&(o=L(o,Math.max(0,e.evaluation.softManaHandoffPenalty))),n.hasRoundtrip&&(o=L(o,Math.max(0,e.evaluation.softRoundtripPenalty))),o}c(Zb,"rootSoftPriority");function $o(e,n){return e===n?0:e?-1:1}c($o,"compareBooleanPreferred");function Yc(e,n){let o=e<zo,t=n<zo;return o!==t?o?-1:1:o?e-n:0}c(Yc,"progressStepsOrder");function Kw(e,n){let o=e<Fs,t=n<Fs;return o!==t?o?-1:1:o?e-n:0}c(Kw,"scorePathStepsOrder");function Jb(e,n){let o=$o(e.winsImmediately,n.winsImmediately);if(o!==0||(o=$o(e.attacksOpponentDrainer,n.attacksOpponentDrainer),o!==0)||(o=$o(!e.ownDrainerVulnerable,!n.ownDrainerVulnerable),o!==0)||(o=$o(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=$o(t[0],t[1]),o!==0)return o;return e.sameTurnScoreWindowValue!==n.sameTurnScoreWindowValue?n.sameTurnScoreWindowValue-e.sameTurnScoreWindowValue:(o=$o(e.spiritSameTurnScoreSetupNow,n.spiritSameTurnScoreSetupNow),o!==0||(o=$o(e.spiritOwnManaSetupNow,n.spiritOwnManaSetupNow),o!==0)||e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.supermanaProgress&&n.supermanaProgress&&(o=Yc(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps),o!==0)||e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.opponentManaProgress&&n.opponentManaProgress&&(o=Yc(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps),o!==0)||e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&(o=Kw(e.scorePathBestSteps,n.scorePathBestSteps),o!==0)||(o=$o(e.supermanaProgress,n.supermanaProgress),o!==0)||e.supermanaProgress&&n.supermanaProgress&&(o=Yc(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps),o!==0)||(o=$o(e.opponentManaProgress,n.opponentManaProgress),o!==0)||e.opponentManaProgress&&n.opponentManaProgress&&(o=Yc(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps),o!==0)||(o=$o(!e.manaHandoffToOpponent,!n.manaHandoffToOpponent),o!==0)||(o=$o(!e.hasRoundtrip,!n.hasRoundtrip),o!==0)||(o=$o(e.spiritDevelopment,n.spiritDevelopment),o!==0)?o:e.efficiency!==n.efficiency?n.efficiency-e.efficiency:n.heuristic-e.heuristic)}c(Jb,"tacticalRootOrder");function Bs(e,n){if(e.heuristic!==n.heuristic)return n.heuristic-e.heuristic;let o=Jb(e,n);return o!==0?o:io(e.inputs,n.inputs)}c(Bs,"compareRootCandidates");function qw(e,n){switch(n){case 0:return e.classes.immediateScore;case 1:return e.classes.drainerAttack;default:return e.classes.drainerSafetyRecover}}c(qw,"hasPriorityClass");function e0(e,n){if(e.length<=n)return[...e];if(n<=0)return[];let o=new Set,t=[],r=c(p=>{o.add(p),t.includes(p)||t.push(p)},"markPriority");for(let p=0;p<3;p+=1){let l=e.findIndex(m=>qw(m,p));l>=0&&r(l)}let a=-1;for(let p=0;p<e.length;p+=1){let l=e[p];if(l===void 0||l.sameTurnScoreWindowValue<=0)continue;let m=e[a];(m===void 0||Jb(l,m)<0)&&(a=p)}a>=0&&r(a);for(let p=0;p<e.length;p+=1){let l=e[p];if(l===void 0)continue;let m=l.scoresSupermanaThisTurn||l.scoresOpponentManaThisTurn||l.safeSupermanaPickupNow||l.safeOpponentManaPickupNow||l.spiritSameTurnScoreSetupNow||l.sameTurnScoreWindowValue>0||l.spiritOwnManaSetupNow,d=l.supermanaProgress&&l.safeSupermanaProgressSteps<zo||l.opponentManaProgress&&l.safeOpponentManaProgressSteps<zo;(m||d)&&o.add(p)}let i=[],s=new Set,u=c(p=>{if(i.length>=n||s.has(p))return;let l=e[p];l!==void 0&&(i.push(l),s.add(p))},"append");for(let p of t)u(p);for(let p=0;p<e.length;p+=1)o.has(p)&&u(p);for(let p=0;p<e.length;p+=1)u(p);return i}c(e0,"truncateWithClassCoverage");var zw=4,$w=6,Yw=600,Xw=1800,Qw=220,Zw=280;function Ls(e,n){let o=new Set(e.map(t=>pn(t.inputs)));for(let t of n)o.has(pn(t.inputs))||(o.add(pn(t.inputs)),e.push(t))}c(Ls,"appendUniqueTransitions");function n0(e){return e.budget.depth>=3?$w:zw}c(n0,"forcedAttackCandidatesLimit");function Jw(e){return e.budget.depth>=3?Xw:Yw}c(Jw,"forcedAttackNodeBudget");function eA(e){return e.budget.depth>=3?Zw:Qw}c(eA,"forcedAttackEnumLimit");function o0(e){return e.budget.depth>=3?8:4}c(o0,"spiritSetupFallbackCandidatesLimit");function nA(e){return e.budget.depth>=3?256:128}c(nA,"spiritSetupFallbackEnumLimit");function Yd(e){return e.budget.depth>=3?8:4}c(Yd,"safeDrainerPickupFallbackCandidatesLimit");function t0(e){return e.budget.depth>=3?8:4}c(t0,"drainerSafetyFallbackCandidatesLimit");function oA(e){return e.budget.depth>=3?192:96}c(oA,"drainerSafetyFallbackEnumLimit");function r0(e){return e.budget.depth>=3?24:12}c(r0,"genericRootFallbackEnumLimit");function Xd(e,n,o){let t=[];for(let[r,a]of e.board.entries()){let i=G(a);i?.color===n&&!H(i)&&(o===void 0||i.kind===o)&&t.push(r)}return t}c(Xd,"awakeMonLocations");function Qd(e,n,o,t){return Ws(o,t,r=>r.kind==="regular"&&r.color===t)||gi(e,n,o,t,{kind:"supermana"})||gi(e,n,o,t,{kind:"regular",color:B(t)})}c(Qd,"hasSpiritScoringManaSetup");function a0(e,n,o,t,r){if(e.session.checkpoint()||!n.playerCanUseAction())return[];let a=Xd(n,o,w.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 p=Tc(e,n,nA(t),jn,[u]);if(e.session.cancelled)return[];for(let l of p){if(e.session.checkpoint())return[];if(s.length>=i)break;Qd(e,l.game,l.events,o)&&s.push(l)}}return s}c(a0,"collectTargetedSpiritSetupInputs");function i0(e,n,o,t,r){if(e.session.checkpoint())return[];let a=Xd(n,o);if(a.length===0)return[];let i=Math.max(1,r),s=[],u=new Set;for(let p of a){if(e.session.checkpoint())return[];if(s.length>=i)break;let l=Tc(e,n,oA(t),jn,[p]);if(e.session.cancelled)return[];for(let m of l){if(e.session.checkpoint())return[];if(s.length>=i)break;if(Gn(e,m.game,o))continue;let d=pn(m.inputs);u.has(d)||(u.add(d),s.push(m))}}return s.sort((p,l)=>io(p.inputs,l.inputs)),s}c(i0,"collectTargetedDrainerSafetyInputs");function s0(e,n){return e.some(o=>o.kind==="pickup-mana"&&ze(o.mana,n))}c(s0,"eventsPickupWantedMana");function tA(e,n){return e.some(o=>o.kind==="mana-scored"&&ze(o.mana,n))}c(tA,"eventsScoreWantedMana");function Zd(e,n,o,t){return s0(n.events,t)&&Ra(e,n.game,o,t)}c(Zd,"transitionHasSafeDrainerPickup");function Jd(e,n,o,t,r){if(e.session.checkpoint()||!n.playerCanMoveMon())return[];let a=Xd(n,o,w.Drainer);if(a.length===0)return[];let i=Math.max(1,t),s=[],u=new Set;for(let p of a){if(e.session.checkpoint())return[];if(s.length>=i)break;let l=ic(e,n,o,p,r);if(e.session.cancelled)return[];if(l===void 0||l.length===0)continue;let m=[{kind:"location",location:{i:p.i,j:p.j}},...l.map(f=>({kind:"location",location:{i:f.i,j:f.j}}))],d=Xe(n,m);if(d!==void 0&&s0(d.events,r)&&(Ra(e,d.game,o,r)||tA(d.events,r))){let f=pn(m);u.has(f)||(u.add(f),s.push({inputs:m,game:d.game,events:d.events}))}}return s.sort((p,l)=>io(p.inputs,l.inputs)),s}c(Jd,"collectTargetedSafeDrainerPickupInputs");function u0(e,n){return e.playerCanMoveMon()&&Kc(e,n).length>0}c(u0,"canAttemptForcedDrainerAttackFallback");function rA(e,n,o,t,r){if(e.session.checkpoint()||n.activeColor!==o||t.remaining===0)return!1;let a=ue(n);if(r.has(a))return!0;t.remaining=Math.max(0,t.remaining-1);let i=PS(e,n,o);return i&&e.session.cacheWriteAllowed&&r.add(a),i}c(rA,"canAttackOpponentDrainerBeforeTurnEnds");function c0(e,n,o,t,r,a){if(e.session.checkpoint())return[];let i=a?Kc(n,o):void 0;if(a&&i?.length===0)return[];let s=a?2:1,u=eA(t)*s,p={remaining:Jw(t)*s},l=new To(Math.max(1,p.remaining)),m=Tc(e,n,u,jn,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(jd(y.events,o)){f.push(y);continue}y.game.activeColor===o&&rA(e,y.game,o,p,l)&&f.push(y)}return f}c(c0,"collectDrainerAttackInputs");function aA(e){return e.some(n=>["mana-move","mana-scored","pickup-mana","mana-dropped","supermana-back-to-base"].includes(n.kind))}c(aA,"rootTransitionRequiresExactLiteProgress");function iA(e){return e.some(n=>n.kind==="spirit-target-move"||n.kind==="mon-move"&&G(n.item)?.kind===w.Spirit)}c(iA,"rootTransitionRequiresExactLiteSpiritWindow");function p0(e){return aA(e)||iA(e)}c(p0,"transitionRequiresExactLite");function l0(e,n,o,t){let r=e.budget.exactLiteRootCalls,a=e.budget.exactLiteStaticCalls;return e.search.exactLiteChecks&&r>0&&p0(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),Re(e,{budget:{exactLiteRootCalls:r,exactLiteStaticCalls:a},search:{exactRootAnalysis:e.search.exactLiteChecks?r>0&&p0(o.events):e.search.exactRootAnalysis}})}c(l0,"withExactLiteBudgetedTransitionConfig");function d0(e,n,o){let t=ue(n);return Uc(e,n,o,!1,!1,t)}c(d0,"rootCandidateSourceSnapshot");function em(e,n,o,t,r,a,i){if(e.session.checkpoint())return;let s=o.game,u=ue(s),p=jc(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 l=Gn(e,s,t),m=!1,d=qc(e,n,o,t,a,l),f=Kd(o.events,$=>$.kind==="supermana"),y=Kd(o.events,$=>$.kind==="regular"&&$.color!==t),b=qd(o.events,$=>$.kind==="supermana"),C=qd(o.events,$=>$.kind==="regular"&&$.color!==t),h=Qb(e,s,t,r.search.exactRootAnalysis,r.search.exactLiteChecks&&r.budget.exactLiteStaticCalls>0),k=b&&Ra(e,s,t,{kind:"supermana"}),M=C&&Ra(e,s,t,{kind:"regular",color:B(t)}),T=gi(e,s,o.events,t,{kind:"supermana"}),P=gi(e,s,o.events,t,{kind:"regular",color:B(t)}),E=f||b||zd(o.events,t,$=>$.kind==="supermana")||T||(h?.safeSupermanaProgress??!1)||(h?.spiritAssistedSupermanaProgress??!1),O=y||C||zd(o.events,t,$=>$.kind==="regular"&&$.color!==t)||P||(h?.safeOpponentManaProgress??!1)||(h?.spiritAssistedOpponentManaProgress??!1)||(h?.spiritAssistedDenial??!1),g=h?.safeSupermanaProgressSteps??zo,x=h?.safeOpponentManaProgressSteps??zo,_=h?.scorePathBestSteps??Fs,U=h?.sameTurnScoreWindowValue??0,j=Ud(n,s,t,o.events),z=o.events.some($=>$.kind==="spirit-target-move")&&s.activeColor===t&&U>0,J=Ws(o.events,t,$=>$.kind==="regular"&&$.color===t)||T||P,W=$d(h,j,z,J),re=s.winnerColor()===t,Se=d.drainerAttack,Y=!(re||Se||f||y||h?.spiritAssistedScore===!0)&&Ta(o.events,t,Math.max(0,r.evaluation.rootManaHandoffPenalty))>0,Ie=ka(o.events),ie=Zb(r,{supermanaProgress:E,opponentManaProgress:O,safeSupermanaProgressSteps:g,safeOpponentManaProgressSteps:x,scoresSupermanaThisTurn:f,scoresOpponentManaThisTurn:y,ownDrainerVulnerable:l,manaHandoffToOpponent:Y,hasRoundtrip:Ie}),ye=Gs(s,t,Math.max(0,r.budget.depth-1),r.budget.depth),pe=ye??Rr(e,s,t,r.evaluation.weights,!1);pe=A(pe,zc(n.activeColor,t,o.events)),pe=A(pe,ie);let Le=o.events.some($=>$.kind==="use-potion"),Tn=re||Se||Ue(s,t)>=Ue(n,t)+2||f||y||h?.spiritAssistedScore===!0||!l&&(E||O);return Le&&!Tn&&(pe=L(pe,Math.max(0,r.evaluation.potionSpendPenalty))),ye===void 0&&(pe=fc(pe)),{inputs:o.inputs,game:s,events:o.events,stateHash:u,heuristic:pe,efficiency:p,winsImmediately:re,attacksOpponentDrainer:Se,ownDrainerVulnerable:l,ownDrainerWalkVulnerable:m,spiritDevelopment:j,keepsAwakeSpiritOnBase:Xa(n,t)&&Xa(s,t),manaHandoffToOpponent:Y,hasRoundtrip:Ie,scoresSupermanaThisTurn:f,scoresOpponentManaThisTurn:y,safeSupermanaPickupNow:k,safeOpponentManaPickupNow:M,safeSupermanaProgressSteps:g,safeOpponentManaProgressSteps:x,scorePathBestSteps:_,sameTurnScoreWindowValue:U,spiritSetupGain:W,spiritSameTurnScoreSetupNow:z,spiritOwnManaSetupNow:J,supermanaProgress:E,opponentManaProgress:O,policyPriority:ie,classes:d}}c(em,"buildRootCandidate");function m0(e,n,o,t,r){let a=[...r],i=Xe(n,a);if(i===void 0)return;let s=em(e,n,{inputs:a,game:i.game,events:i.events},o,t,Gn(e,n,o),()=>d0(e,n,o));return s===void 0?void 0:{...s,rootRank:0}}c(m0,"buildRootCandidateForInputs");function ho(e,n,o,t){if(e.session.checkpoint())return[];let r=n.fen(),a=Gn(e,n,o),i=wo(e,n,t.search.rootEnumerationLimit,jn);if(a&&!i.some(M=>!Gn(e,M.game,o))&&Ls(i,i0(e,n,o,t,t0(t))),e.session.checkpoint())return[];let s=$c(e,n,o,!1),u=$d(s,!1,!1,!1);if(e.session.checkpoint())return[];let p={kind:"supermana"};if(s.safeSupermanaProgress&&!i.some(M=>Zd(e,M,o,p))&&Ls(i,Jd(e,n,o,Yd(t),p)),e.session.checkpoint())return[];let l={kind:"regular",color:B(o)};if(s.safeOpponentManaProgress&&!i.some(M=>Zd(e,M,o,l))&&Ls(i,Jd(e,n,o,Yd(t),l)),e.session.checkpoint())return[];if((t.policy.hardSpiritDeployment||t.policy.preferSpiritDevelopment)&&(oa(n,o)||u>0||s.spiritAssistedSupermanaProgress||s.spiritAssistedOpponentManaProgress)&&!i.some(M=>Qd(e,M.game,M.events,o))&&Ls(i,a0(e,n,o,t,o0(t))),e.session.cancelled)return[];let m={rootCalls:t.budget.exactLiteRootCalls,staticCalls:t.budget.exactLiteStaticCalls},d,f=c(()=>(d??=d0(e,n,o),d),"getSourceSnapshot"),y=[],b=c(M=>{for(let T of M){if(e.session.checkpoint())return!1;let P=l0(t,o,T,m),E=em(e,n,T,o,P,a,f);if(e.session.checkpoint())return!1;E!==void 0&&y.push(E)}return!0},"appendCandidates");if(!b(i))return[];if(y.length===0){let M=wo(e,n,r0(t),jn);if(e.session.checkpoint()||!b(M))return[]}let C=y.map((M,T)=>({...M,rootRank:T}));C.sort(Bs);let h=C.some(M=>M.winsImmediately),k;if(!h&&!C.some(M=>M.attacksOpponentDrainer)&&u0(n,o)){let M=c0(e,n,o,t,n0(t),t.policy.targetedDrainerAttackFallback);if(e.session.checkpoint())return[];if(M.length>0){k=new Set(M.map(P=>pn(P.inputs)));let T=new Set(C.map(P=>pn(P.inputs)));for(let P of M){if(e.session.checkpoint())return[];let E=pn(P.inputs);if(T.has(E))continue;T.add(E);let O=l0(t,o,P,m),g=em(e,n,P,o,O,a,f);if(e.session.checkpoint())return[];g!==void 0&&C.push({...g,rootRank:0})}C.sort(Bs),h=C.some(P=>P.winsImmediately)}}if(!h&&C.some(M=>M.attacksOpponentDrainer)?C=C.filter(M=>M.attacksOpponentDrainer):k!==void 0&&(C=C.filter(M=>k.has(pn(M.inputs)))),C=e0(C,t.search.rootBranchLimit),C=C.map((M,T)=>({...M,rootRank:T})),n.fen()!==r)throw new Error("root candidate enumeration mutated its source game");return e.session.checkpoint()?[]:C}c(ho,"rankRootCandidates");function Gs(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(Gs,"terminalSearchScore");var f0=110;function y0(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(y0,"classPriority");function S0(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=y0(n.classes)-y0(e.classes);return t!==0?t:-Gy(e.hash,n.hash)}c(S0,"compareRankedChildren");function h0(e,n,o){return o?A(e,f0)>=n:e<=A(n,f0)}c(h0,"childWithinCoverageMargin");function nm(e){return e.classes.immediateScore||e.classes.drainerAttack||e.classes.drainerSafetyRecover||e.classes.carrierProgress||e.orderingEfficiency>0&&!e.classes.material}c(nm,"isPriorityChild");function b0(e,n,o,t=!0){if(e.length<=n||n===0)return[...e];let r=e[n-1]?.heuristic??0,a=e.findIndex((u,p)=>p>=n&&nm(u)&&(t||h0(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,p)=>i[p]===!0)}c(b0,"truncateChildrenWithCoverage");function C0(e,n,o=!0){if(e.length<3||e.slice(0,2).some(nm))return;let t=e[1]?.heuristic??0,r=e.findIndex((a,i)=>i<2||!nm(a)?!1:o||h0(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(C0,"enforceTacticalChildTop2");function M0(e,n,o){return!o.material&&e<=0&&!n&&!o.immediateScore&&!o.drainerAttack&&!o.drainerSafetyRecover&&!o.carrierProgress}c(M0,"isQuietReductionCandidate");function k0(e,n,o){return e||n>0&&!o.quiet&&!o.material}c(k0,"isSelectiveExtensionCandidate");var sA=2400,uA=32768,cA=Symbol("preferability-cache");function T0(e){return e.caches.session.getOrCreate(cA,()=>new xe(uA))}c(T0,"preferabilityCache");function om(e,n,o,t,r,a=ue(n)){let i=T0(e),s=rn(o),u=mi(t.evaluation.weights),p=i.get(a,s,void 0,u);if(p!==void 0)return r.cacheHits+=1,p;let l=Rr(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,l,s,void 0,u)),l}c(om,"cachedPreferability");function pA(e,n,o,t){if(n.execution.session.checkpoint())return[];let r=e.activeColor===n.perspective,a=e.activeColor,i=Uc(n.execution,e,n.perspective,!1,!1,o),s=Gn(n.execution,e,a),u=[];for(let p of wo(n.execution,e,n.config.search.nodeEnumerationLimit)){if(n.execution.session.checkpoint())return[];let l=ue(p.game),m=Gn(n.execution,p.game,a),d=qc(n.execution,e,p,a,s,m),f=jc(n.execution,e,p.game,a,p.events,i,l,{isRoot:!1,applyBacktrackPenalty:!1,applyRootManaHandoffGuard:!1,includeTacticalExact:!1,includeStrategicExact:!1,rootBacktrackPenalty:n.config.evaluation.rootBacktrackPenalty,rootManaHandoffPenalty:n.config.evaluation.rootManaHandoffPenalty}),y=Gs(p.game,n.perspective,0,n.config.budget.depth)??om(n.execution,p.game,n.perspective,n.config,n.stats,l);y=A(y,zc(a,n.perspective,p.events)),t!==void 0&&dl(l,t)&&(y=A(y,sA));let b=s!==m||p.events.some(C=>C.kind==="mana-scored"||C.kind==="mon-fainted"&&C.mon.kind===w.Drainer);u.push({game:p.game,hash:l,heuristic:y,orderingEfficiency:f,tacticalExtensionTrigger:b,quietReductionCandidate:M0(f,b,d),classes:d})}return u.sort((p,l)=>S0(p,l,r)),C0(u,r,!0),b0(u,n.config.search.nodeBranchLimit,r,!0)}c(pA,"rankedChildren");function vi(e,n,o){return Gs(e,o.perspective,0,o.config.budget.depth)??om(o.execution,e,o.perspective,o.config,o.stats,n)}c(vi,"staticScore");function lA(e,n,o,t,r){let a=vi(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 p 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(!xb(p.events))continue;r.stats.visitedNodes+=1;let l=ue(p.game),m=om(r.execution,p.game,r.perspective,r.config,r.stats,l);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(lA,"quiescenceScore");function Xc(e,n,o,t,r,a,i){let s=Gs(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 vi(e,n,i);if(o<=0)return i.config.search.quiescence&&i.stats.quiescenceNodes<i.config.budget.quiescenceNodes?lA(e,n,t,r,i):vi(e,n,i);let u=t,p=r,l=u,m=p,d,f=i.config.search.transpositionTable?i.transposition.get(n):void 0;if(f!==void 0&&(i.stats.cacheHits+=1,Ly(f.bestChildHash)||(d=f.bestChildHash),f.depth>=o&&(f.bound==="exact"||(f.bound==="lower"?u=Math.max(u,f.score):p=Math.min(p,f.score),u>=p))))return f.score;let y=e.activeColor===i.perspective;if(i.config.search.futilityPruning&&o===1&&!Xb(i.execution,e)){let M=vi(e,n,i);if(y&&A(M,i.config.search.futilityMargin)<u||!y&&L(M,i.config.search.futilityMargin)>p)return M}let b=pA(e,i,n,d);if(b.length===0)return vi(e,n,i);let C=y?-2147483648:2147483647,h=Wy,k=!1;for(let M of b){if(i.stats.visitedNodes>=i.config.budget.maxVisitedNodes){k=!0;break}let T=Math.max(0,o-1),P=a;i.config.search.selectiveExtensions&&k0(M.tacticalExtensionTrigger,M.orderingEfficiency,M.classes)&&P>0&&(i.extensionNodeBudget===0||i.stats.extensionNodes<i.extensionNodeBudget)?(T=o,P-=1,i.extensionNodeBudget>0&&(i.stats.extensionNodes+=1)):i.config.search.quietReductions&&M.quietReductionCandidate&&o>=i.config.search.quietReductionDepthThreshold&&(T=Math.max(0,o-2)),i.stats.visitedNodes+=1;let E=Xc(M.game,M.hash,T,u,p,P,i);if((y&&E>C||!y&&E<C)&&(C=E,h=M.hash),y?u=Math.max(u,C):p=Math.min(p,C),u>=p||i.execution.session.checkpoint())break}if((C===-2147483648||C===2147483647)&&(C=vi(e,n,i)),i.config.search.transpositionTable&&!k&&i.execution.session.cacheWriteAllowed){let M=C<=l?"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:h})}return C}c(Xc,"boundedSearch");function tm(e,n,o){return{execution:e,perspective:n,config:o,transposition:new xe(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(tm,"createSearchContext");function dA(e){let n=ue(e.game);return dl(n,e.stateHash)?e:{...e,stateHash:n}}c(dA,"candidateWithCurrentStateHash");function mA(e,n){return e.score>n.score||e.score===n.score&&Bs(e,n)<0}c(mA,"betterEvaluation");function fA(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:Xc(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||mA(s,t))&&(t=s),r=Math.max(r,i)}return{evaluations:o,best:t}}c(fA,"evaluateFocusedRoots");function R0(e,n,o,t,r){let a=tm(e,o,r),i=ue(n);return Xc(n,i,Math.max(0,t),-2147483648,2147483647,r.search.maxExtensionsPerPath,a)}c(R0,"evaluateSearchScore");function rm(e,n,o,t,r,a={},i=t.search.transpositionTable){let s=n.fen(),u=r?r.map(dA):ho(e,n,o,t),p,l=kb({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=>(p??=tm(e,o,Re(m.config,{search:{transpositionTable:m.useTranspositionTable}})),p.stats.visitedNodes=Math.max(p.stats.visitedNodes,m.visitedNodes),{score:Xc(m.candidate.game,m.candidate.stateHash,m.depth,m.alpha,2147483647,0,p),visitedNodes:p.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:l.candidates,scoutVisitedNodes:l.scoutVisitedNodes}}c(rm,"focusRootCandidatesForSearch");function am(e,n,o,t,r,a={}){let i=n.fen(),s=rm(e,n,o,t,r,a),u=s.candidates,p=tm(e,o,t);p.stats.visitedNodes=s.scoutVisitedNodes;let{evaluations:l,best:m}=fA(u,p);if(n.fen()!==i)throw new Error("bounded search mutated its source game");return{best:m,evaluations:l,visitedNodes:p.stats.visitedNodes,cacheHits:p.stats.cacheHits,timedOut:p.execution.session.cancelled}}c(am,"searchRootCandidates");function im(e){T0(e).clear(),Lb(e),Xu(e)}c(im,"clearSearchCaches");function Pa(e){return e===Ke.Production}c(Pa,"turnEngineModeUsesMacroPlans");function Vs(e){return e.planner.enabled&&e.planner.mode===Be.Production}c(Vs,"productionTurnEngineLive");function Qc(e){return Vs(e)&&e.planner.lowBudgetGuard}c(Qc,"productionLowBudgetGuardLive");function P0(e){return Vs(e)&&e.planner.midTurnTacticalGuard}c(P0,"productionMidTurnTacticalGuardLive");function w0(e){return e.activeColor===R.White&&e.turnNumber===1&&e.isFirstTurn()&&e.monsMovesCount===1&&!e.playerCanUseAction()&&!e.playerCanMoveMana()}c(w0,"productionIsWhiteTurnOneManaOnlyFollowup");function A0(e,n){return Vs(n)&&e.activeColor===R.White&&e.turnNumber>=3&&e.monsMovesCount===0&&e.playerCanUseAction()&&e.playerCanMoveMana()}c(A0,"productionUseFreshLiveHeadPlan");function Hs(e,n){if(n.activeColor!==R.Black||n.turnNumber!==2||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana())return!1;let o=Te(e,n,n.activeColor);return!o.opponentCanWinImmediately&&o.delta.sameTurnScoreWindowValue<=0&&o.delta.opponentWindowDenyGain<=0&&!o.delta.drainerAttackAvailable&&o.delta.drainerSafety>=2}c(Hs,"productionIsSafeEarlyBlackOpeningState");function E0(e,n){if(So(n)||n.playerCanUseAction()||n.playerCanMoveMana())return!1;let o=Te(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(E0,"shouldSkipProductionLowBudgetState");function g0(e,n){if(n.activeColor!==R.White||n.turnNumber!==3||n.monsMovesCount===0||n.monsMovesCount>2||!n.playerCanUseAction()||!n.playerCanMoveMana()||So(n))return!1;let o=Te(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(g0,"shouldDisableProductionMidTurnTacticalEngine");function v0(e,n){return!Qc(n)||e.activeColor!==R.Black||e.turnNumber!==2||e.monsMovesCount>1||e.playerCanUseAction()&&e.playerCanMoveMana()?n:Re(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(v0,"applyProductionLowBudgetSearchClamp");function Dr(e,n){let o=Ao(n);return!Pa(o.mode)||!n.planner.lowBudgetGuard||!So(e)?o:gc(o)}c(Dr,"turnEngineConfigForGame");function O0(e,n,o,t,r){if(!D(r)||!go(e,o)||n.allowsImmediateOpponentWin||t.allowsImmediateOpponentWin||n.opponentReachesMatchPoint||t.opponentReachesMatchPoint)return;let a=!N(e),i=!N(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}c(O0,"safeProgressSiblingOrder");function I0(e,n,o,t,r,a,i){if(!D(i)||!go(e,o))return;let s=N(e),u=N(o);if(s===u||r===void 0||a===void 0)return;let p=s?e:o,l=s?n:t,m=s?r:a,d=s?o:e,f=s?t:n,y=s?a:r;if(!(l.allowsImmediateOpponentWin||l.opponentReachesMatchPoint||f.allowsImmediateOpponentWin||f.opponentReachesMatchPoint||m.plan.goalFamily!==S.ImmediateScore||se(m.plan.utility,y.plan.utility)<0||A(l.worstReplyScore,160)<f.worstReplyScore||A(p.score,32)<d.score))return s?1:-1}c(I0,"riskyRecoveryProgressSiblingOrder");function _r(e,n){return Pe(e.inputs,n.inputs)}c(_r,"sameFirstInput");function wa(e,n,o){return D(o)&&_r(e,n)&&e.efficiency===n.efficiency&&Math.abs(e.score-n.score)<=128&&!N(e)&&!N(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(wa,"sameOpeningSafeSetupPair");function x0(e,n,o,t,r){return D(r)&&e.spiritOwnManaSetupNow&&!o.spiritDevelopment&&!o.spiritSameTurnScoreSetupNow&&!o.spiritOwnManaSetupNow&&wa(e,o,r)&&e.rootRank+3<=o.rootRank&&A(e.score,128)>=o.score&&A(n.worstReplyScore,160)>=t.worstReplyScore}c(x0,"omittedSameOpeningSetupCompetes");function N0(e,n,o,t,r){if(!D(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,p=a?o:e,l=a?t:n,m=p.supermanaProgress||p.opponentManaProgress||p.spiritOwnManaSetupNow||p.spiritSameTurnScoreSetupNow||p.spiritDevelopment;if(!(N(s)||u.allowsImmediateOpponentWin||u.opponentReachesMatchPoint||l.allowsImmediateOpponentWin||l.opponentReachesMatchPoint||s.manaHandoffToOpponent||s.hasRoundtrip||p.winsImmediately||p.attacksOpponentDrainer||!m||A(s.score,144)<p.score||A(u.worstReplyScore,192)<l.worstReplyScore))return a?1:-1}c(N0,"safePickupOrder");function D0(e,n,o,t,r){return Dd(e,o,r)&&!n.allowsImmediateOpponentWin&&!t.allowsImmediateOpponentWin&&!n.opponentReachesMatchPoint&&!t.opponentReachesMatchPoint}c(D0,"safePlainSpiritReplyRiskPair");function _0(e,n,o){return!D(o)||n.length<2?!1:Ds(e,n,(t,r)=>go(t,r)&&N(t)!==N(r))}c(_0,"safeProgressCompetition");function sm(e,n,o,t){if(!D(t)||e.activeColor!==R.White||e.turnNumber>3||e.monsMovesCount<1||!e.playerCanUseAction()||!e.playerCanMoveMana())return!1;let r=n.spiritOwnManaSetupNow&&n.opponentManaProgress&&!F(n),a=o.spiritOwnManaSetupNow&&o.opponentManaProgress&&!F(o);if(r===a)return!1;let i=r?[n,o]:[o,n],[s,u]=i;return F(u)?_r(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(sm,"isProductionModeWhiteSpiritFollowupSetupPair");function Zc(e,n,o,t){return Ds(n,o,(r,a)=>sm(e,r,a,t))}c(Zc,"whiteSpiritFollowupSetupCompetition");function Us(e){return I(e)===S.ManaTempo&&e.sameTurnScoreWindowValue>0&&!e.winsImmediately&&!e.attacksOpponentDrainer&&!e.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&!e.manaHandoffToOpponent&&!e.hasRoundtrip}c(Us,"nonConcreteManaWindowRoot");function F0(e,n,o,t){return!D(t)||o.length<2||e.activeColor!==R.Black||e.turnNumber>4?!1:Ds(n,o,(r,a)=>{let i=Us(r),s=Us(a);if(i===s)return!1;let u=i?r:a,p=i?a:r;return u.sameTurnScoreWindowValue<=1&&p.sameTurnScoreWindowValue===0&&I(p)===S.ManaTempo&&p.ownDrainerVulnerable===u.ownDrainerVulnerable&&p.ownDrainerWalkVulnerable===u.ownDrainerWalkVulnerable&&!p.manaHandoffToOpponent&&!p.hasRoundtrip&&Cn(p,u)&&A(p.score,192)>=u.score})}c(F0,"blackManaWindowProgressCompetition");function W0(e,n,o){if(!D(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&&L(t[0]??0,t[1]??0)<=64}c(W0,"closePositiveScoreCompetition");function Fr(e,n,o,t,r,a,i,s){let u=o[t],p=o[r];if(!eo(i)||n.turnNumber>3||u===void 0||p===void 0||!F(u)||!F(p)||N(u)||N(p)||u.manaHandoffToOpponent||p.manaHandoffToOpponent||u.hasRoundtrip||p.hasRoundtrip||u.supermanaProgress||u.opponentManaProgress||p.supermanaProgress||p.opponentManaProgress||u.sameTurnScoreWindowValue>0||p.sameTurnScoreWindowValue>0||u.spiritSameTurnScoreSetupNow||p.spiritSameTurnScoreSetupNow||u.spiritOwnManaSetupNow||p.spiritOwnManaSetupNow||Math.abs(u.score-p.score)>224)return;let l=s.get(t)??Je(e,u.game,a,i);s.set(t,l);let m=s.get(r)??Je(e,p.game,a,i);return s.set(r,m),l>=A(m,32)?1:m>=A(l,32)?-1:0}c(Fr,"spiritFollowupFloorOrder");function Oi(e,n,o,t){return D(t)&&e.activeColor===R.Black&&e.turnNumber<=4&&F(n)&&o.spiritOwnManaSetupNow&&!o.spiritSameTurnScoreSetupNow&&_r(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(Oi,"isProductionModeBlackPlainSpiritFollowupSetupPair");function Jc(e,n,o,t,r,a,i,s,u,p){let l=o[t],m=o[a];if(l===void 0||m===void 0)return;let d,f,y,b,C,h,k;if(Oi(n,l,m,u))d=l,f=r,y=m,b=i,C=t,h=a,k=!0;else if(Oi(n,m,l,u))d=m,f=i,y=l,b=r,C=a,h=t,k=!1;else return;if(f.allowsImmediateOpponentWin||b.allowsImmediateOpponentWin||f.opponentReachesMatchPoint||b.opponentReachesMatchPoint)return;let M=p.get(C)??Je(e,d.game,s,u);p.set(C,M);let T=p.get(h)??Je(e,y.game,s,u);if(p.set(h,T),y.rootRank<=d.rootRank&&A(y.score,64)>=d.score&&y.spiritSetupGain>=A(d.spiritSetupGain,32)&&A(b.worstReplyScore,192)>=f.worstReplyScore&&A(T,32)>=M)return k?-1:1;if(!(A(f.worstReplyScore,192)<b.worstReplyScore||M<A(T,32)&&d.score<y.score))return k?1:-1}c(Jc,"blackPlainSpiritFollowupReplyOrder");function ep(e,n,o,t,r,a,i,s,u,p){let l=o[t],m=o[a];if(!D(u)||n.activeColor!==R.Black||n.turnNumber>2||l===void 0||m===void 0||!F(l)||!F(m)||!_r(l,m)||l.ownDrainerVulnerable!==m.ownDrainerVulnerable||l.manaHandoffToOpponent!==m.manaHandoffToOpponent||l.hasRoundtrip!==m.hasRoundtrip||l.spiritSameTurnScoreSetupNow||m.spiritSameTurnScoreSetupNow||l.spiritOwnManaSetupNow||m.spiritOwnManaSetupNow||l.winsImmediately||m.winsImmediately||l.attacksOpponentDrainer||m.attacksOpponentDrainer||r.allowsImmediateOpponentWin||i.allowsImmediateOpponentWin||r.opponentReachesMatchPoint||i.opponentReachesMatchPoint)return;let d=p.get(t)??Je(e,l.game,s,u);p.set(t,d);let f=p.get(a)??Je(e,m.game,s,u);p.set(a,f);let y=r.worstReplyScore>=A(i.worstReplyScore,96)&&A(d,32)>=f&&A(l.score,48)>=m.score,b=i.worstReplyScore>=A(r.worstReplyScore,96)&&A(f,32)>=d&&A(m.score,48)>=l.score;if(y===b){let C=r.worstReplyScore<A(i.worstReplyScore,96)&&d<A(f,96),h=i.worstReplyScore<A(r.worstReplyScore,96)&&f<A(d,96);return C&&h&&l.score!==m.score?l.score>m.score?1:-1:void 0}return y?1:-1}c(ep,"earlyBlackPlainSpiritSiblingOrder");function B0(e,n,o,t,r,a){if(!D(a)||e.activeColor!==R.Black||e.turnNumber>4||o.allowsImmediateOpponentWin||r.allowsImmediateOpponentWin||o.opponentReachesMatchPoint||r.opponentReachesMatchPoint)return;let i=I(n),s=I(t),u=c(h=>h===S.ManaTempo||h===S.SafeSupermanaProgress||h===S.SafeOpponentManaProgress,"allowed");if(!u(i)||!u(s)||Math.abs(n.rootRank-t.rootRank)>8)return;let p=X(n),l=X(t),m=Cn(n,t)||p&&!l,d=Cn(t,n)||l&&!p;if(m===d)return;let f=Us(n),y=Us(t);if(f!==y){let h=f?n:t,k=f?o:r,M=f?t:n,T=f?r:o;if(h.sameTurnScoreWindowValue<=1&&M.sameTurnScoreWindowValue===0&&I(M)===S.ManaTempo&&M.ownDrainerVulnerable===h.ownDrainerVulnerable&&M.ownDrainerWalkVulnerable===h.ownDrainerWalkVulnerable&&!M.manaHandoffToOpponent&&!M.hasRoundtrip&&Cn(M,h)&&A(T.worstReplyScore,96)>=k.worstReplyScore&&A(M.score,192)>=h.score)return f?-1:1}let b=A(o.worstReplyScore,240)>=r.worstReplyScore,C=A(r.worstReplyScore,240)>=o.worstReplyScore;if(m&&n.score>t.score&&b)return 1;if(d&&t.score>n.score&&C)return-1}c(B0,"earlyBlackManaProgressReplyOrder");function L0(e,n,o,t,r,a,i,s,u,p){let l=o[t],m=o[a];if(!D(u)||n.activeColor!==R.Black||n.turnNumber>4||l===void 0||m===void 0)return;let d=F(l),f=F(m),y=I(l)===S.ManaTempo,b=I(m)===S.ManaTempo;if(d===f||y===b)return;let C=d?l:m,h=d?r:i,k=d?t:a,M=d?m:l,T=d?i:r,P=d?a:t;if(!_r(C,M)||C.ownDrainerVulnerable!==M.ownDrainerVulnerable||C.ownDrainerWalkVulnerable!==M.ownDrainerWalkVulnerable||h.allowsImmediateOpponentWin||T.allowsImmediateOpponentWin||h.opponentReachesMatchPoint||T.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||A(C.score,24)<M.score||A(h.worstReplyScore,192)<T.worstReplyScore)return;let E=p.get(k)??Je(e,C.game,s,u);p.set(k,E);let O=p.get(P)??Je(e,M.game,s,u);if(p.set(P,O),!(A(E,32)<O))return d?1:-1}c(L0,"earlyBlackPlainSpiritManaReplyOrder");function G0(e,n,o,t,r,a,i,s,u,p){if(!eo(u))return;let l=o[t],m=o[a];if(l===void 0||m===void 0)return;let d=F(l),f=F(m);if(d===f)return;let y=d?m:l,b=d?i:r,C=d?a:t,h=d?l:m,k=d?r:i,M=d?t:a;if(N(y)||N(h)||b.allowsImmediateOpponentWin||k.allowsImmediateOpponentWin||b.opponentReachesMatchPoint||k.opponentReachesMatchPoint||y.manaHandoffToOpponent||h.manaHandoffToOpponent||y.hasRoundtrip||h.hasRoundtrip||y.ownDrainerVulnerable||h.ownDrainerVulnerable||y.ownDrainerWalkVulnerable||h.ownDrainerWalkVulnerable||y.spiritSameTurnScoreSetupNow||y.spiritOwnManaSetupNow||h.spiritSameTurnScoreSetupNow||h.spiritOwnManaSetupNow||y.winsImmediately||h.winsImmediately||y.attacksOpponentDrainer||h.attacksOpponentDrainer||y.sameTurnScoreWindowValue>0||h.sameTurnScoreWindowValue>0)return;let T=p.get(C)??Je(e,y.game,s,u);p.set(C,T);let P=p.get(M)??Je(e,h.game,s,u);p.set(M,P);let E=A(b.worstReplyScore,192)>=k.worstReplyScore,O=n.turnNumber<=2&&!y.supermanaProgress&&!y.opponentManaProgress&&y.score>=A(h.score,48)&&b.worstReplyScore>=96&&T>=P;if(!(A(y.score,32)<h.score||!E&&!O)&&(T>=A(P,48)||O))return d?-1:1}c(G0,"safeNonSpiritFollowupOrder");function V0(e,n,o,t,r,a){if(!sm(e,n,t,a))return;let i=n.spiritOwnManaSetupNow&&n.opponentManaProgress&&!F(n),s=i?n:t,u=i?o:r,p=i?t:n,l=i?r:o;if(!_r(s,p)||s.efficiency!==p.efficiency||s.ownDrainerVulnerable!==p.ownDrainerVulnerable||s.ownDrainerWalkVulnerable!==p.ownDrainerWalkVulnerable||s.manaHandoffToOpponent||p.manaHandoffToOpponent||s.hasRoundtrip||p.hasRoundtrip||s.winsImmediately||p.winsImmediately||s.attacksOpponentDrainer||p.attacksOpponentDrainer||s.scoresSupermanaThisTurn||p.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||p.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||p.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||p.safeOpponentManaPickupNow||s.sameTurnScoreWindowValue>0||p.sameTurnScoreWindowValue>0||s.supermanaProgress||p.supermanaProgress||u.allowsImmediateOpponentWin||l.allowsImmediateOpponentWin||u.opponentReachesMatchPoint||l.opponentReachesMatchPoint)return;let m=e.turnNumber===3&&e.monsMovesCount===1?192:96;if(!(A(s.score,96)<p.score||A(u.worstReplyScore,m)<l.worstReplyScore||s.rootRank>p.rootRank+8))return i?1:-1}c(V0,"whiteSpiritFollowupSetupReplyOrder");function zt(e,n){let o=e[n];if(o===void 0)throw new RangeError(`production selector index ${n} is out of bounds`);return o}c(zt,"valueAt");function js(e,n){return e.safeSupermanaPickupNow&&!n.safeSupermanaPickupNow||e.safeOpponentManaPickupNow&&!n.safeOpponentManaPickupNow}c(js,"hasPickupUpgrade");function Ks(e){return X(e)||e.scoresSupermanaThisTurn||e.scoresOpponentManaThisTurn}c(Ks,"rootHasProgressSurface");function Ii(e){return I(e)===S.ManaTempo&&e.sameTurnScoreWindowValue>0&&e.sameTurnScoreWindowValue<=1&&!te(e)&&!e.attacksOpponentDrainer&&!e.manaHandoffToOpponent&&!e.hasRoundtrip}c(Ii,"isProductionModeNonConcreteManaWindowRoot");function np(e,n,o){for(let[t,r]of n.board.entries()){let a=G(r);if(!(a?.kind!==w.Drainer||a.color!==o))return H(a)?!0:n.isFirstTurn()?!1:!ii(e,n.board,o,t)}return!1}c(np,"ownDrainerVulnerableNextTurn");function H0(e,n){let{game:o,config:t,plan:r,candidateIndex:a,candidate:i,selected:s,candidateUnsafe:u,selectedUnsafe:p,candidateProgress:l,selectedProgress:m,scoreGap:d,sameTurnWindowBetter:f,drainerAttackBetter:y,scoresNowBetter:b,safetyRecoverBetter:C,spiritWindowBetter:h,spiritDevelopmentBetter:k,progressBetter:M,selectedSpiritPhase:T,selectedFamily:P,blackSpiritPair:E,blackTurnSixRouteChangePlainSpirit:O}=e,{selectedUtility:g,pickupUpgrade:x,strategicAxesBetter:_,projectedDeferredRecoveryWithoutConcreteGain:U,safeRootBlocksPlainSpirit:j,safeRootBlocksPlainSpiritProgress:z,plainSpiritSiblingRegresses:J,allowNonConcreteWhiteProgress:W,whiteSetupRecoveryBlocksUtilityOverride:re}=n;switch(Or(t)){case Ke.Baseline:switch(r.headFamily){case S.ImmediateScore:return(i.winsImmediately||b||f)&&d<=280;case S.DenyOpponentWindow:return f||C||y;case S.DrainerKill:return y&&d<=180;case S.DrainerSafetyRecovery:return C&&so(r.utility,g)>=0&&d<=140;case S.SpiritImpact:return a<=(r.compiledChunks.length>1?12:6)&&d<=120&&(h||k||T&&so(r.utility,g)>=0);case S.SafeSupermanaProgress:case S.SafeOpponentManaProgress:return!T&&a<=(r.compiledChunks.length>1?3:1)&&d<=80&&(M||so(r.utility,g)>=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 S.ManaTempo:return!1;default:return!1}case Ke.Production:switch(r.headFamily){case S.ImmediateScore:return(i.winsImmediately||b||f||a<=16&&Vo(r.utility,g)&&(!u||p))&&d<=360;case S.DenyOpponentWindow:return f||C||y||a<=16&&d<=220&&!u&&Vo(r.utility,g);case S.DrainerKill:return i.attacksOpponentDrainer&&a<=16&&d<=260&&(y||so(r.utility,g)>=0);case S.DrainerSafetyRecovery:return i.classes.drainerSafetyRecover&&a<=16&&d<=240&&(C||s.ownDrainerVulnerable&&!i.ownDrainerVulnerable||eo(t)&&Ho(r.utility,g)&&(p||!u)&&!re);case S.SpiritImpact:{let Se=Ho(r.utility,g),q=Vo(r.utility,g);if(j||z||J||(s.spiritSameTurnScoreSetupNow||s.spiritOwnManaSetupNow||s.sameTurnScoreWindowValue>0)&&!E&&!p&&!u&&!i.spiritSameTurnScoreSetupNow&&!i.spiritOwnManaSetupNow&&i.sameTurnScoreWindowValue<=s.sameTurnScoreWindowValue&&i.spiritSetupGain<=s.spiritSetupGain&&!b&&!y)return!1;let Ie=O||d<=220&&(h||k||i.spiritOwnManaSetupNow&&!s.spiritOwnManaSetupNow&&Se||q||T&&Se);return a<=(r.compiledChunks.length>1?16:10)&&Ie}case S.SafeSupermanaProgress:case S.SafeOpponentManaProgress:{let Se=se(r.utility,g),q=(l||p)&&Ho(r.utility,g),Y=!p&&!T&&!m,Ie=!p&&m,ie=P===S.SafeSupermanaProgress||P===S.SafeOpponentManaProgress,ye=_||xS(r.utility,g,220);if(p&&u&&!T&&!m&&l&&d>0&&!x&&!C&&!b&&!y&&!f&&!ye||U)return!1;let pe=W||So(o)&&F(s)&&!p&&!u&&l&&a<=2&&d<=96&&(Se>0||Se>=0&&ot(r.utility,g,64)),Le=!T||p||pe,Tn=d>48&&!p&&!u,$=!Ie&&!Y||!Tn||_||x,he=!u&&q&&(p||!T&&!m)&&(!Y||d<=32||_||x),en=q&&mo(r.utility,g)&&(!Y||_),Dn=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&&(Le&&M&&$||pe||x||en&&(!Tn||_||js(i,s))&&(!Ie||_||js(i,s)||M&&!T)||he||Le&&Dn&&d<=(ie?32:64)&&$)}case S.ManaTempo:return!1}}}c(H0,"acceptTurnEngineHeadByModeAndFamily");var qe=Object.freeze({EarlySafeManaBlocksSpirit:"early-safe-mana-blocks-spirit",BlackTurnStartSafeManaBlocksPlainSpirit:"black-turn-start-safe-mana-blocks-plain-spirit",WhiteTurnStartSafeManaBlocksPlainSpirit:"white-turn-start-safe-mana-blocks-plain-spirit",WhiteLateSafeManaBlocksPlainSpirit:"white-late-safe-mana-blocks-plain-spirit",BlackNoActionVulnerableProgressHead:"black-no-action-vulnerable-progress-head",BlackEarlySameWindowManaHead:"black-early-same-window-mana-head",BlackNoActionWindowedVulnerableManaHead:"black-no-action-windowed-vulnerable-mana-head",BlackLateWindowedVulnerableManaHead:"black-late-windowed-vulnerable-mana-head",BlackEarlyProgressBlocksMana:"black-early-progress-blocks-mana",BlackEarlyProgressBlocksNonConcreteWindow:"black-early-progress-blocks-non-concrete-window",EarlyBlackSafeManaBlocksWeakerMana:"early-black-safe-mana-blocks-weaker-mana",BlackQuietManaBlocksLowerScoredMana:"black-quiet-mana-blocks-lower-scored-mana",WhiteSameWindowManaBlocksLowerScoredMana:"white-same-window-mana-blocks-lower-scored-mana",WhiteMidTurnManaBlocksLowerScoredWindowMana:"white-mid-turn-mana-blocks-lower-scored-window-mana",WhiteMidTurnSpiritSetupBlocksWindowMana:"white-mid-turn-spirit-setup-blocks-window-mana",WhiteTurnStartSpiritSetupBlocksWindowMana:"white-turn-start-spirit-setup-blocks-window-mana",WhiteSafeManaBlocksDeferredRecoveryProgress:"white-safe-mana-blocks-deferred-recovery-progress",VulnerableWhiteManaHead:"vulnerable-white-mana-head",BlackLateSafeProgressBlocksQuietMana:"black-late-safe-progress-blocks-quiet-mana",BlackRecoveryRootBlocksNonConcreteWindow:"black-recovery-root-blocks-non-concrete-window",WhiteRecoveryRootBlocksNonConcreteWindow:"white-recovery-root-blocks-non-concrete-window",CandidateUnsafeWithoutProjectedOverride:"candidate-unsafe-without-projected-override",SelectedUtilityDominatesPlan:"selected-utility-dominates-plan",NonProgressHeadWithoutOverride:"non-progress-head-without-override",DrainerKillWithoutAttack:"drainer-kill-without-attack",WhiteVulnerableProgressBlocksImmediateScore:"white-vulnerable-progress-blocks-immediate-score",SpiritHeadWithoutImpact:"spirit-head-without-impact"});function U0(e){let{game:n,plan:o,candidate:t,selected:r,macroMode:a,candidateUnsafe:i,selectedUnsafe:s,candidateProgress:u,selectedProgress:p,scoreGap:l,sameTurnWindowBetter:m,drainerAttackBetter:d,scoresNowBetter:f,candidateSpiritTactical:y,selectedSpiritPhase:b,candidateFamily:C,selectedFamily:h,selectedUtilityValue:k}=e,M=a&&o.headFamily===S.ImmediateScore&&n.activeColor===R.Black&&n.turnNumber<=4&&n.monsMovesCount===0&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&i&&!s&&!t.winsImmediately&&!f&&!d&&t.sameTurnScoreWindowValue<=r.sameTurnScoreWindowValue,T=c(()=>a&&n.activeColor===R.White&&n.turnNumber===3&&n.monsMovesCount<=2&&n.playerCanUseAction()&&n.playerCanMoveMana()&&o.headFamily===S.SpiritImpact&&h===S.ManaTempo&&!s&&!i&&!r.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&t.spiritDevelopment&&t.spiritOwnManaSetupNow&&!t.spiritSameTurnScoreSetupNow&&!t.winsImmediately&&!t.attacksOpponentDrainer&&!te(t)&&t.sameTurnScoreWindowValue===0,"earlySafeManaBlocksSpirit"),P=c(()=>a&&n.activeColor===R.Black&&n.turnNumber>=5&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()&&o.headFamily===S.SpiritImpact&&h===S.ManaTempo&&!b&&F(t)&&!u&&!y&&Pe(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&&l>96,"blackTurnStartSafeManaBlocksPlainSpirit"),E=c(()=>a&&n.activeColor===R.White&&n.turnNumber>=5&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()&&o.headFamily===S.SpiritImpact&&h===S.ManaTempo&&!s&&!i&&!b&&F(t)&&u&&!y&&Pe(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,"whiteTurnStartSafeManaBlocksPlainSpirit"),O=c(()=>a&&n.activeColor===R.White&&n.turnNumber>=5&&n.monsMovesCount>=1&&o.headFamily===S.SpiritImpact&&h===S.ManaTempo&&!b&&F(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,"whiteLateSafeManaBlocksPlainSpirit"),g=c(()=>a&&n.activeColor===R.Black&&n.turnNumber>=6&&n.monsMovesCount===0&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&(C===S.SafeSupermanaProgress||C===S.SafeOpponentManaProgress)&&h===S.ManaTempo&&!b&&!t.spiritDevelopment&&!t.spiritSameTurnScoreSetupNow&&!t.spiritOwnManaSetupNow&&t.sameTurnScoreWindowValue===0&&r.sameTurnScoreWindowValue===0&&!te(t)&&!te(r)&&t.ownDrainerVulnerable&&!r.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===r.ownDrainerWalkVulnerable&&t.manaHandoffToOpponent===r.manaHandoffToOpponent&&t.hasRoundtrip===r.hasRoundtrip&&!f&&!d&&!m,"blackNoActionVulnerableProgressHead"),x=c(()=>a&&n.activeColor===R.Black&&n.turnNumber<=4&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&C===S.ManaTempo&&h===S.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&&!te(t)&&!te(r)&&!f&&!d,"blackEarlySameWindowManaHead"),_=c(()=>a&&n.activeColor===R.Black&&n.turnNumber>=6&&n.monsMovesCount===0&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&C===S.ManaTempo&&h===S.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&&!te(t)&&!te(r)&&!f&&!d,"blackNoActionWindowedVulnerableManaHead"),U=c(()=>a&&n.activeColor===R.Black&&n.turnNumber>=8&&n.monsMovesCount>=1&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&C===S.ManaTempo&&h===S.ManaTempo&&Pe(t.inputs,r.inputs)&&t.sameTurnScoreWindowValue>0&&r.sameTurnScoreWindowValue===0&&t.ownDrainerVulnerable&&!r.ownDrainerVulnerable&&!te(t)&&!te(r)&&L(t.score,r.score)<=32&&!f&&!d,"blackLateWindowedVulnerableManaHead");if(T())return{kind:"reject",reason:qe.EarlySafeManaBlocksSpirit};if(P())return{kind:"reject",reason:qe.BlackTurnStartSafeManaBlocksPlainSpirit};if(E())return{kind:"reject",reason:qe.WhiteTurnStartSafeManaBlocksPlainSpirit};if(O())return{kind:"reject",reason:qe.WhiteLateSafeManaBlocksPlainSpirit};if(g())return{kind:"reject",reason:qe.BlackNoActionVulnerableProgressHead};if(x())return{kind:"reject",reason:qe.BlackEarlySameWindowManaHead};if(_())return{kind:"reject",reason:qe.BlackNoActionWindowedVulnerableManaHead};if(U())return{kind:"reject",reason:qe.BlackLateWindowedVulnerableManaHead};let j=js(t,r),z=c(()=>a&&n.activeColor===R.Black&&n.turnNumber<=4&&C===S.ManaTempo&&(h===S.ManaTempo||h===S.SafeSupermanaProgress||h===S.SafeOpponentManaProgress)&&!t.winsImmediately&&!t.attacksOpponentDrainer&&!t.spiritDevelopment&&!t.spiritSameTurnScoreSetupNow&&!t.spiritOwnManaSetupNow&&!j&&l>0&&(Cn(r,t)||p&&!u),"blackEarlyProgressBlocksMana"),J=c(()=>a&&n.activeColor===R.Black&&n.turnNumber<=4&&(o.headFamily===S.SafeSupermanaProgress||o.headFamily===S.SafeOpponentManaProgress)&&C===S.ManaTempo&&h===S.ManaTempo&&t.sameTurnScoreWindowValue>0&&r.sameTurnScoreWindowValue===0&&!t.winsImmediately&&!f&&!d&&!j&&r.ownDrainerVulnerable===t.ownDrainerVulnerable&&r.ownDrainerWalkVulnerable===t.ownDrainerWalkVulnerable&&r.manaHandoffToOpponent===t.manaHandoffToOpponent&&r.hasRoundtrip===t.hasRoundtrip&&Cn(r,t)&&l>=-192&&!Tr(o.utility,k()),"blackEarlyProgressBlocksNonConcreteWindow");return z()?{kind:"reject",reason:qe.BlackEarlyProgressBlocksMana}:J()?{kind:"reject",reason:qe.BlackEarlyProgressBlocksNonConcreteWindow}:{kind:"continue",facts:{narrowUnsafeBlackManaScore:M,pickupUpgrade:j}}}c(U0,"evaluateInitialHeadGuards");function j0(e,n){let{game:o,plan:t,candidate:r,selected:a,macroMode:i,candidateUnsafe:s,selectedUnsafe:u,candidateProgress:p,selectedProgress:l,exactContext:m,sameTurnWindowBetter:d,drainerAttackBetter:f,scoresNowBetter:y,selectedSpiritPhase:b,candidateFamily:C,selectedFamily:h}=e,{pickupUpgrade:k,selectedUtility:M}=n,T=c(()=>i&&o.activeColor===R.Black&&o.turnNumber<=4&&o.monsMovesCount>=1&&o.playerCanUseAction()&&o.playerCanMoveMana()&&t.headFamily===S.ManaTempo&&t.goalFamily===S.SpiritImpact&&C===S.ManaTempo&&h===S.ManaTempo&&!s&&!u&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!te(r)&&!te(a)&&r.sameTurnScoreWindowValue===a.sameTurnScoreWindowValue&&!p&&!l&&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,"earlyBlackSafeManaBlocksWeakerMana"),P=c(()=>i&&o.activeColor===R.Black&&o.turnNumber<=6&&o.monsMovesCount>=1&&o.playerCanMoveMana()&&(t.headFamily===S.ManaTempo||t.headFamily===S.SafeSupermanaProgress||t.headFamily===S.SafeOpponentManaProgress)&&C===S.ManaTempo&&h===S.ManaTempo&&s===u&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!te(r)&&!te(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,"blackQuietManaBlocksLowerScoredMana"),E=c(()=>i&&o.activeColor===R.White&&o.turnNumber===5&&o.monsMovesCount===0&&o.playerCanMoveMana()&&(t.headFamily===S.SafeSupermanaProgress||t.headFamily===S.SafeOpponentManaProgress)&&t.goalFamily===S.ImmediateScore&&C===S.ManaTempo&&h===S.ManaTempo&&s===u&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!te(r)&&!te(a)&&r.sameTurnScoreWindowValue>0&&r.sameTurnScoreWindowValue===a.sameTurnScoreWindowValue&&!p&&!l&&r.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&r.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&Pe(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,"whiteSameWindowManaBlocksLowerScoredMana"),O=c(()=>i&&o.activeColor===R.White&&o.turnNumber===5&&o.monsMovesCount>=1&&o.playerCanMoveMana()&&(t.headFamily===S.ImmediateScore||t.headFamily===S.SafeSupermanaProgress||t.headFamily===S.SafeOpponentManaProgress)&&t.goalFamily===S.ImmediateScore&&C===S.ManaTempo&&h===S.ManaTempo&&s===u&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!te(r)&&!te(a)&&r.sameTurnScoreWindowValue>0&&r.sameTurnScoreWindowValue===a.sameTurnScoreWindowValue&&!p&&!l&&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,"whiteMidTurnManaBlocksLowerScoredWindowMana"),g=c(()=>i&&o.activeColor===R.White&&o.turnNumber===5&&o.monsMovesCount>=1&&o.playerCanUseAction()&&o.playerCanMoveMana()&&(t.headFamily===S.SafeSupermanaProgress||t.headFamily===S.SafeOpponentManaProgress)&&t.goalFamily===S.ImmediateScore&&C===S.ManaTempo&&h===S.SpiritImpact&&s===u&&!r.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&a.spiritDevelopment&&a.spiritSameTurnScoreSetupNow&&a.spiritOwnManaSetupNow&&a.spiritSetupGain>=A(r.spiritSetupGain,64)&&!te(r)&&!te(a)&&r.sameTurnScoreWindowValue>0&&r.sameTurnScoreWindowValue===a.sameTurnScoreWindowValue&&!p&&!l&&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,"whiteMidTurnSpiritSetupBlocksWindowMana"),x=c(()=>i&&o.activeColor===R.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===S.SafeSupermanaProgress||t.headFamily===S.SafeOpponentManaProgress)&&t.goalFamily===S.ImmediateScore&&Ii(r)&&h===S.SpiritImpact&&s&&!u&&!r.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&a.spiritDevelopment&&a.spiritSameTurnScoreSetupNow&&!a.spiritOwnManaSetupNow&&a.spiritSetupGain>=A(r.spiritSetupGain,96)&&!te(r)&&!te(a)&&r.sameTurnScoreWindowValue===a.sameTurnScoreWindowValue&&!p&&!l&&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,"whiteTurnStartSpiritSetupBlocksWindowMana"),_=c(()=>i&&o.activeColor===R.White&&o.turnNumber===5&&o.monsMovesCount>=1&&!o.playerCanUseAction()&&o.playerCanMoveMana()&&(t.headFamily===S.SafeSupermanaProgress||t.headFamily===S.SafeOpponentManaProgress)&&t.goalFamily===S.DrainerSafetyRecovery&&C===S.ManaTempo&&h===S.ManaTempo&&!s&&!u&&!p&&!l&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!te(r)&&!te(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&&L(r.score,a.score)<=128&&!y&&!f&&!d&&!k&&!ot(t.headUtility,M,192),"whiteSafeManaBlocksDeferredRecoveryProgress"),U=c(()=>i&&o.activeColor===R.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===S.ManaTempo&&t.goalFamily===S.ImmediateScore&&C===S.ManaTempo&&(h===S.SafeSupermanaProgress||h===S.SafeOpponentManaProgress)&&!s&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!te(r)&&!te(a)&&r.sameTurnScoreWindowValue===0&&a.sameTurnScoreWindowValue===0&&!p&&l&&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,"blackLateSafeProgressBlocksQuietMana"),j=c(()=>i&&o.activeColor===R.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===S.ImmediateScore&&t.goalFamily===S.ImmediateScore&&Ii(r)&&h===S.DrainerSafetyRecovery&&a.classes.drainerSafetyRecover&&!u&&!a.ownDrainerVulnerable&&!a.ownDrainerWalkVulnerable&&!te(a)&&!a.attacksOpponentDrainer&&!b&&a.sameTurnScoreWindowValue===0&&!a.manaHandoffToOpponent&&!a.hasRoundtrip&&Pe(r.inputs,a.inputs)&&r.ownDrainerVulnerable&&!r.classes.drainerSafetyRecover&&a.safeSupermanaProgressSteps<=r.safeSupermanaProgressSteps&&a.safeOpponentManaProgressSteps<=r.safeOpponentManaProgressSteps&&a.scorePathBestSteps>r.scorePathBestSteps&&!y&&!f&&!k,"blackRecoveryRootBlocksNonConcreteWindow"),z=c(()=>i&&o.activeColor===R.White&&o.turnNumber===3&&o.monsMovesCount===0&&!o.playerCanUseAction()&&o.playerCanMoveMana()&&(t.headFamily===S.SafeSupermanaProgress||t.headFamily===S.SafeOpponentManaProgress)&&t.goalFamily===S.ImmediateScore&&Ii(r)&&h===S.DrainerSafetyRecovery&&a.classes.drainerSafetyRecover&&!u&&!a.ownDrainerVulnerable&&!a.ownDrainerWalkVulnerable&&!te(a)&&!a.attacksOpponentDrainer&&!b&&a.sameTurnScoreWindowValue===0&&!a.manaHandoffToOpponent&&!a.hasRoundtrip&&Pe(r.inputs,a.inputs)&&r.ownDrainerVulnerable&&!r.classes.drainerSafetyRecover&&a.safeSupermanaProgressSteps<=r.safeSupermanaProgressSteps&&a.safeOpponentManaProgressSteps<=r.safeOpponentManaProgressSteps&&a.scorePathBestSteps>r.scorePathBestSteps&&!y&&!f&&!k,"whiteRecoveryRootBlocksNonConcreteWindow"),J=c(()=>i&&o.activeColor===R.White&&o.turnNumber===3&&o.monsMovesCount>=1&&o.playerCanMoveMana()&&(t.headFamily===S.ManaTempo||t.headFamily===S.SafeSupermanaProgress||t.headFamily===S.SafeOpponentManaProgress)&&t.goalFamily===S.DrainerSafetyRecovery&&C===S.ManaTempo&&h===S.ManaTempo&&s&&!u&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!te(r)&&!te(a)&&r.sameTurnScoreWindowValue===0&&a.sameTurnScoreWindowValue===0&&r.manaHandoffToOpponent===a.manaHandoffToOpponent&&r.hasRoundtrip===a.hasRoundtrip&&!y&&!f&&!d&&!k,"vulnerableWhiteManaHead");if(T())return qe.EarlyBlackSafeManaBlocksWeakerMana;if(P())return qe.BlackQuietManaBlocksLowerScoredMana;if(E())return qe.WhiteSameWindowManaBlocksLowerScoredMana;if(O())return qe.WhiteMidTurnManaBlocksLowerScoredWindowMana;if(g())return qe.WhiteMidTurnSpiritSetupBlocksWindowMana;if(x())return qe.WhiteTurnStartSpiritSetupBlocksWindowMana;if(_())return qe.WhiteSafeManaBlocksDeferredRecoveryProgress;if(J())return qe.VulnerableWhiteManaHead;if(U())return qe.BlackLateSafeProgressBlocksQuietMana;if(j())return qe.BlackRecoveryRootBlocksNonConcreteWindow;if(z())return qe.WhiteRecoveryRootBlocksNonConcreteWindow}c(j0,"firstRejectedManaAndRecoveryHeadGuard");function um(e,n,o,t,r,a){return Lc(e,n,o,t,r,I(o),a)}c(um,"turnEngineSelectedUtility");function K0(e,n,o,t,r){let a=n.fork(),i=[];for(let m of r.compiledChunks){let d=Xe(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(),p=Ta(i,o,Math.max(t.evaluation.rootManaHandoffPenalty,1))>0,l=a.winnerColor()!==o&&np(e,a,o);return u&&!p&&!ka(i)&&!l}c(K0,"projectedPlanIsSafelyCompleted");function q0(e,n,o){let{game:t,perspective:r,config:a,plan:i,candidateIndex:s,candidate:u,selected:p,macroMode:l,candidateUnsafe:m,selectedUnsafe:d,candidateProgress:f,selectedProgress:y,scoreGap:b,sameTurnWindowBetter:C,drainerAttackBetter:h,scoresNowBetter:k,candidateSpiritTactical:M,progressBetter:T,selectedSpiritPhase:P,selectedFamily:E,whiteSpiritSetupGain:O}=n,{narrowUnsafeBlackManaScore:g,pickupUpgrade:x,nearTieProgress:_,primaryAxesOrder:U,strategicAxesBetter:j,selectedUtility:z}=o,J=l&&K0(e,t,r,a,i),W=se(i.utility,z)>=0,re=se(i.headUtility,z)>=0,Se=l&&(i.headFamily===S.SafeSupermanaProgress||i.headFamily===S.SafeOpponentManaProgress)&&t.activeColor===R.White&&t.turnNumber>=5&&t.monsMovesCount<=1&&!t.playerCanUseAction()&&t.playerCanMoveMana()&&!m&&!d&&f&&y&&!P&&_&&b>48&&U===0&&!x&&!j,q=!d&&(p.safeSupermanaPickupNow||p.safeOpponentManaPickupNow)&&(i.headFamily===S.SafeSupermanaProgress||i.headFamily===S.SafeOpponentManaProgress)&&!x&&!re,Y=d&&m&&!P&&!y&&f&&(i.headFamily===S.SafeSupermanaProgress||i.headFamily===S.SafeOpponentManaProgress)&&i.goalFamily===S.DrainerSafetyRecovery&&!u.classes.drainerSafetyRecover&&u.ownDrainerVulnerable&&!x&&!k&&!h&&!C&&b>48,Ie=t.activeColor===R.Black&&i.headFamily===S.SpiritImpact&&!d&&!m&&!y&&!P&&!f&&!M&&!u.spiritOwnManaSetupNow&&b>96&&!j,ie=t.activeColor===R.Black&&i.headFamily===S.SpiritImpact&&!d&&!m&&!y&&!P&&F(u)&&f&&!M&&!T&&u.safeSupermanaProgressSteps>=p.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps>=p.safeOpponentManaProgressSteps&&u.ownDrainerVulnerable===p.ownDrainerVulnerable&&u.manaHandoffToOpponent===p.manaHandoffToOpponent&&u.hasRoundtrip===p.hasRoundtrip&&!k&&!h&&b>64&&!j,ye=i.headFamily===S.SpiritImpact&&!d&&!m&&F(p)&&F(u)&&b>=0&&!T&&u.spiritSetupGain<=p.spiritSetupGain&&u.safeSupermanaProgressSteps>=p.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps>=p.safeOpponentManaProgressSteps&&u.ownDrainerVulnerable===p.ownDrainerVulnerable&&u.manaHandoffToOpponent===p.manaHandoffToOpponent&&u.hasRoundtrip===p.hasRoundtrip&&!k&&!h&&!M,pe=J&&!p.winsImmediately&&i.goalFamily!==S.ManaTempo&&s<=(i.compiledChunks.length>1?16:10)&&W&&(Vo(i.utility,z)||ot(i.utility,z,96))&&(m||i.compiledChunks.length>1||Tr(i.utility,z))&&!Ie&&!ie&&!ye&&!q&&!Y&&!g&&!Se;if(c(()=>m&&!d&&!pe,"candidateUnsafeWithoutProjectedOverride")())return{kind:"reject",reason:qe.CandidateUnsafeWithoutProjectedOverride};if(c(()=>l&&se(z,i.utility)>0&&!O,"selectedUtilityDominatesPlan")())return{kind:"reject",reason:qe.SelectedUtilityDominatesPlan};let $=l&&(i.headFamily===S.SafeSupermanaProgress||i.headFamily===S.SafeOpponentManaProgress)&&!f&&So(t)&&F(p)&&!d&&(!m||pe)&&s<=3&&u.score>=p.score&&ot(i.utility,z,64);if(O)return{kind:"accept"};if(c(()=>l&&(i.headFamily===S.SafeSupermanaProgress||i.headFamily===S.SafeOpponentManaProgress)&&!f&&!pe&&!$,"nonProgressHeadWithoutOverride")())return{kind:"reject",reason:qe.NonProgressHeadWithoutOverride};if(c(()=>l&&i.headFamily===S.DrainerKill&&!u.attacksOpponentDrainer,"drainerKillWithoutAttack")())return{kind:"reject",reason:qe.DrainerKillWithoutAttack};let Dn=l&&t.activeColor===R.White&&i.headFamily===S.DrainerSafetyRecovery&&p.spiritOwnManaSetupNow&&!u.spiritOwnManaSetupNow&&!d&&!m&&p.sameTurnScoreWindowValue===0&&u.sameTurnScoreWindowValue===0&&p.spiritSetupGain>=A(u.spiritSetupGain,48)&&!k&&!h&&!C;if(c(()=>l&&t.activeColor===R.White&&(i.headFamily===S.SafeSupermanaProgress||i.headFamily===S.SafeOpponentManaProgress)&&i.goalFamily===S.ImmediateScore&&E===S.ManaTempo&&!y&&f&&p.ownDrainerVulnerable&&u.ownDrainerVulnerable&&p.ownDrainerWalkVulnerable===u.ownDrainerWalkVulnerable&&p.manaHandoffToOpponent===u.manaHandoffToOpponent&&p.hasRoundtrip===u.hasRoundtrip&&!p.spiritDevelopment&&!u.spiritDevelopment&&!p.spiritSameTurnScoreSetupNow&&!u.spiritSameTurnScoreSetupNow&&!p.spiritOwnManaSetupNow&&!u.spiritOwnManaSetupNow&&!k&&!h&&!C&&!x&&!u.classes.drainerSafetyRecover&&u.safeSupermanaProgressSteps+1>=p.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps+1>=p.safeOpponentManaProgressSteps&&u.score<=A(p.score,16)&&!j,"whiteVulnerableProgressBlocksImmediateScore")())return{kind:"reject",reason:qe.WhiteVulnerableProgressBlocksImmediateScore};let Xt=i.headFamily===S.ImmediateScore||i.headFamily===S.DenyOpponentWindow||i.headFamily===S.DrainerKill||i.headFamily===S.DrainerSafetyRecovery&&eo(a);return l&&!p.winsImmediately&&Xt&&Vo(i.utility,z)&&!Dn&&(!m||d)?{kind:"accept"}:c(()=>i.headFamily===S.SpiritImpact&&!M&&!u.spiritDevelopment&&!u.spiritOwnManaSetupNow&&!pe,"spiritHeadWithoutImpact")()?{kind:"reject",reason:qe.SpiritHeadWithoutImpact}:pe?{kind:"accept"}:{kind:"delegate",policy:{selectedUtility:z,pickupUpgrade:x,strategicAxesBetter:j,projectedDeferredRecoveryWithoutConcreteGain:Y,safeRootBlocksPlainSpirit:Ie,safeRootBlocksPlainSpiritProgress:ie,plainSpiritSiblingRegresses:ye,allowNonConcreteWhiteProgress:$,whiteSetupRecoveryBlocksUtilityOverride:Dn}}}c(q0,"evaluateProjectedHeadGuards");function yA(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=se(r.utility,a()),u=Tr(r.utility,a()),p=a();return{...n,nearTieProgress:i,primaryAxesOrder:s,strategicAxesBetter:u,selectedUtility:p}}c(yA,"deriveOrderedHeadFacts");function z0(e,n){let o=U0(n);if(o.kind==="reject")return!1;let t=yA(n,o.facts);if(j0(n,t)!==void 0)return!1;let r=q0(e,n,t);return r.kind==="accept"?!0:r.kind==="reject"?!1:H0(n,r.policy)}c(z0,"acceptTurnEngineHeadAfterOrderedGuards");function SA(e){let{game:n,plan:o,candidate:t,macroMode:r,selectedProgress:a,candidateFamily:i,selectedFamily:s,selectedUtilityValue:u,candidateUtilityValue:p,blackTurnSixRouteChangePlainSpirit:l,whiteSpiritSetupGain:m}=e;if(!r)return!0;let d=u(),f=p();if(n.activeColor===R.Black&&n.turnNumber<=6&&(o.headFamily===S.SafeSupermanaProgress||o.headFamily===S.SafeOpponentManaProgress)&&o.goalFamily===S.ImmediateScore&&i===S.ManaTempo&&s===S.SpiritImpact&&Ii(t)&&a&&se(o.headUtility,d)<0)return!1;let b=se(o.utility,d)>0&&(mo(o.utility,d)||mo(o.headUtility,d)),C=se(f,d)>0&&mo(f,d);return l||m||b||C}c(SA,"passesTurnEngineMacroDominanceGuard");function $0(e,n,o,t,r,a,i,s){let u=i.compiledChunks[0];if(u===void 0)return!1;let p=r.findIndex(pe=>le(pe.inputs,u)),l=r.findIndex(pe=>le(pe.inputs,a));if(p<0||l<0)return!1;if(p===l)return!0;let m=zt(r,p),d=zt(r,l);if(d.winsImmediately&&!m.winsImmediately)return!1;let f=Pa(Or(t)),y=N(m),b=N(d),C=Ks(m),h=Ks(d),k=Te(e,n,n.activeColor),M=L(d.score,m.score),T=m.sameTurnScoreWindowValue>d.sameTurnScoreWindowValue,P=m.attacksOpponentDrainer&&!d.attacksOpponentDrainer,E=(m.scoresSupermanaThisTurn||m.scoresOpponentManaThisTurn)&&!(d.scoresSupermanaThisTurn||d.scoresOpponentManaThisTurn),O=m.classes.drainerSafetyRecover&&!d.classes.drainerSafetyRecover&&d.ownDrainerVulnerable&&!m.ownDrainerVulnerable,g=m.spiritSameTurnScoreSetupNow&&!d.spiritSameTurnScoreSetupNow&&m.sameTurnScoreWindowValue>=d.sameTurnScoreWindowValue,x=m.spiritDevelopment&&!d.spiritDevelopment,_=m.spiritSameTurnScoreSetupNow||m.sameTurnScoreWindowValue>0||m.attacksOpponentDrainer||m.scoresSupermanaThisTurn||m.scoresOpponentManaThisTurn||m.safeSupermanaPickupNow||m.safeOpponentManaPickupNow,U=(tn(m.safeSupermanaProgressSteps,d.safeSupermanaProgressSteps)||tn(m.safeOpponentManaProgressSteps,d.safeOpponentManaProgressSteps))&&!d.winsImmediately&&!d.attacksOpponentDrainer&&!d.spiritSameTurnScoreSetupNow,j=d.spiritDevelopment||d.spiritSameTurnScoreSetupNow||d.spiritOwnManaSetupNow,z=I(m),J=I(d),W=null,re=c(()=>(W??=um(e,n,d,o,t,s),W),"selectedUtilityValue"),Se=null,q=c(()=>(Se??=um(e,n,m,o,t,s),Se),"candidateUtilityValue"),Y=f&&i.headFamily===S.SpiritImpact&&Oi(n,m,d,t)&&m.score>d.score,Ie=f&&n.activeColor===R.White&&i.headFamily===S.SpiritImpact&&!b&&!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&&!E&&!P&&M<=96,ie=f&&n.activeColor===R.Black&&n.turnNumber===6&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()&&i.headFamily===S.SpiritImpact&&i.goalFamily===S.SpiritImpact&&p<=1&&y===b&&F(m)&&!C&&!_&&J===S.ManaTempo&&b&&!d.spiritDevelopment&&!d.spiritSameTurnScoreSetupNow&&!d.spiritOwnManaSetupNow&&!h&&!te(d)&&d.sameTurnScoreWindowValue===0&&!Pe(m.inputs,d.inputs)&&m.ownDrainerVulnerable===d.ownDrainerVulnerable&&m.ownDrainerWalkVulnerable===d.ownDrainerWalkVulnerable&&m.manaHandoffToOpponent===d.manaHandoffToOpponent&&m.hasRoundtrip===d.hasRoundtrip&&M<=1024&&ot(q(),re(),64),ye={game:n,perspective:o,config:t,plan:i,candidateIndex:p,candidate:m,selected:d,macroMode:f,candidateUnsafe:y,selectedUnsafe:b,candidateProgress:C,selectedProgress:h,exactContext:k,scoreGap:M,sameTurnWindowBetter:T,drainerAttackBetter:P,scoresNowBetter:E,safetyRecoverBetter:O,spiritWindowBetter:g,spiritDevelopmentBetter:x,candidateSpiritTactical:_,progressBetter:U,selectedSpiritPhase:j,candidateFamily:z,selectedFamily:J,selectedUtilityValue:re,candidateUtilityValue:q,blackSpiritPair:Y,whiteSpiritSetupGain:Ie,blackTurnSixRouteChangePlainSpirit:ie};return SA(ye)?z0(e,ye):!1}c($0,"acceptTurnEngineHeadAfterSearch");function op(e,n){let o=e.find(t=>le(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(op,"allowedRerankOverrideCandidate");function Aa(e,n,o,t,r,a){return qb(e,n,o,t,r,a,{buildInjectedRootCandidate:c((i,s,u,p)=>m0(e,i,s,t,p),"buildInjectedRootCandidate")})}c(Aa,"productionRootAdvisorPresearch");function tp(e,n,o,t,r,a,i){let u=Aa(e,n,o,t,[...r],a)?.approvedRoot?.inputs;return u!==void 0&&!le(u,i)}c(tp,"advisorConflictsWithChoice");function hA(e,n){let o;return e.forEach((t,r)=>{n(t)&&(o===void 0||Cb(t,zt(e,o))<0)&&(o=r)}),o}c(hA,"bestTacticalRootIndex");function cm(e,n,o,t,r){if(!r.policy.forcedTacticalPrepass||t.length===0)return;let a=c(d=>{let f=hA(t,d);return f===void 0?void 0:[...zt(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"),p=r.policy.supermanaPrepassException&&t.some(u),l=s||p;if(r.policy.supermanaPrepassException&&(i=a(d=>d.scoresSupermanaThisTurn),i!==void 0||(i=a(u),i!==void 0))||!l&&(i=a(d=>d.attacksOpponentDrainer),i!==void 0)||!l&&np(e,n,o)&&(i=a(d=>!d.ownDrainerVulnerable),i!==void 0))return i;let m=o===R.White?n.blackScore:n.whiteScore;if(be-m<=1)return a(d=>d.classes.immediateScore)}c(cm,"forcedTacticalPrepassChoice");function pm(e,n,o){let t=e.findIndex(p=>le(p.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=zt(e,t),i=L(r.heuristic,a.heuristic);if(o===Ke.Baseline)return t<=2&&i<=96&&!N(a);let s=a.winsImmediately||a.attacksOpponentDrainer||a.classes.drainerSafetyRecover||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.spiritDevelopment||a.scoresSupermanaThisTurn||a.scoresOpponentManaThisTurn||a.safeSupermanaPickupNow||a.safeOpponentManaPickupNow||tn(a.safeSupermanaProgressSteps,r.safeSupermanaProgressSteps)||tn(a.safeOpponentManaProgressSteps,r.safeOpponentManaProgressSteps),u=N(a);return!u&&t<=4&&i<=128||!u&&s&&t<=8&&i<=224||!u&&N(r)&&t<=10&&i<=256}c(pm,"acceptTurnEngineCachedStep");function rp(e,n,o){return Pa(o)&&pm(e,n,o)&&le(e[0]?.inputs??[],n)}c(rp,"shouldResumeTurnEngineCachedStep");function Y0(e,n,o){return o.planner.mode!==Be.Production||!o.planner.lowBudgetGuard||n.length===0||So(e)?!1:!e.playerCanUseAction()&&!e.playerCanMoveMana()&&e.monsMovesCount>=4?!0:e.activeColor===R.Black&&e.turnNumber===2&&e.monsMovesCount<=1}c(Y0,"shouldSkipProductionHeadPlanForRootContext");function X0(e,n,o,t,r){if(r.planner.mode!==Be.Production||!r.planner.lowBudgetGuard||o.length===0||!(So(n)||Hs(e,n)))return;let i=t.compiledChunks[0];if(i===void 0)return;let s=o.findIndex(y=>le(y.inputs,i));if(s<0)return;let u=zt(o,s);if(N(u))return;let p=o[0];if(p===void 0||p.winsImmediately||p.attacksOpponentDrainer||p.classes.drainerSafetyRecover)return;let l=L(p.heuristic,u.heuristic),m=t.headFamily===S.SafeSupermanaProgress||t.headFamily===S.SafeOpponentManaProgress||t.headFamily===S.DrainerSafetyRecovery,d=F(p),f=Ks(u);if(s===0&&m)return[...u.inputs];if(So(n)&&d&&!N(p)&&f&&s<=2&&l<=96)return[...u.inputs];if(Hs(e,n)&&s<=1&&l<=96&&(f||u.spiritDevelopment))return[...u.inputs]}c(X0,"forcedLowBudgetTurnEnginePrepassChoice");function ap(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(ap,"shouldInvokeTurnHeadRerank");function ip(e,n){let o=e.findIndex(b=>le(b.inputs,n)),t=e[0];if(o<0||t===void 0)return!1;let r=N(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=zt(e,o);if(a.winsImmediately)return!0;if(t.winsImmediately||N(a))return!1;let i=a.attacksOpponentDrainer||a.scoresSupermanaThisTurn||a.scoresOpponentManaThisTurn||a.safeSupermanaPickupNow||a.safeOpponentManaPickupNow,s=a.sameTurnScoreWindowValue>0||a.spiritSameTurnScoreSetupNow,u=L(t.heuristic,a.heuristic),p=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),l=a.safeSupermanaProgressSteps<t.safeSupermanaProgressSteps||a.safeOpponentManaProgressSteps<t.safeOpponentManaProgressSteps,m=!a.ownDrainerVulnerable&&t.ownDrainerVulnerable||!a.manaHandoffToOpponent&&t.manaHandoffToOpponent,d=a.supermanaProgress||a.opponentManaProgress||l;if(d&&!i&&!s&&!a.classes.drainerSafetyRecover&&!a.spiritSameTurnScoreSetupNow)return(m||r)&&o<=4&&u<=180;let y=m&&l&&o<=5&&u<=220;return i||s||a.classes.drainerSafetyRecover||d?a.ownDrainerVulnerable&&!a.classes.drainerSafetyRecover?!1:(p||l&&(m||r)||a.classes.drainerSafetyRecover&&t.ownDrainerVulnerable&&!a.ownDrainerVulnerable||a.spiritSameTurnScoreSetupNow&&a.sameTurnScoreWindowValue>t.sameTurnScoreWindowValue)&&o<=6&&u<=520||p&&o<=8&&u<=640:y}c(ip,"classifyTurnEngineRerankOverride");function bA(e,n,o,t,r,a){if(!Pa(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=nr(n,i);if(u?.activeColor!==o)return;let p=Dr(u,t),l=ho(e,u,o,t);rp(l,s,r)&&_h(e,u,r,p,s)}c(bA,"seedTurnEngineFollowupCacheIfSafe");function xi(e,n,o,t,r,a,i){Bh(e,n,o,r,a,i),bA(e,n,o,t,r,a)}c(xi,"commitPlanAndSeedFollowup");function Q0(e){return!e.winsImmediately&&!e.attacksOpponentDrainer&&!Nd(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(Q0,"isFlatLateManaOnlyReplyRoot");function nC(e,n,o,t,r,a){if(!D(a)||!a.replyRisk.lateSafeManaRootPreference||e.activeColor!==R.White||e.turnNumber<6||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana()||o.allowsImmediateOpponentWin||r.allowsImmediateOpponentWin||o.opponentReachesMatchPoint||r.opponentReachesMatchPoint||!Q0(n)||!Q0(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||L(s.score,i.score)>16||Math.abs(s.rootRank-i.rootRank)>4||s.efficiency<=i.efficiency))return u?1:-1}c(nC,"lateSafeManaRootOrder");function Z0(e,n,o,t,r,a){let i=Math.max(0,Ue(n,o)-t),s=n.winnerColor();if(s!==void 0){let b=s===o;return{allowsImmediateOpponentWin:!b,opponentReachesMatchPoint:!b,opponentMaxScoreGain:b?0:be,myScoreGain:i,worstReplyScore:b?Math.trunc(268435455/2):-Math.trunc(268435455/2)}}if(n.activeColor===o)return{allowsImmediateOpponentWin:!1,opponentReachesMatchPoint:!1,opponentMaxScoreGain:0,myScoreGain:i,worstReplyScore:rt(e,n,o,r)};let u=o===R.White?R.Black:R.White,p=Ue(n,u),l=wo(e,n,Math.max(1,Math.trunc(a)));if(l.length===0)return{allowsImmediateOpponentWin:!1,opponentReachesMatchPoint:!1,opponentMaxScoreGain:0,myScoreGain:i,worstReplyScore:Math.trunc(268435455/4)};let m=!1,d=!1,f=0,y=2147483647;for(let b of l){let C=b.game,h=Ue(C,u);f=Math.max(f,Math.max(0,h-p)),be-h<=1&&(d=!0);let k=C.winnerColor(),M;if(k===o?M=Math.trunc(268435455/2):k!==void 0?(m=!0,d=!0,M=-Math.trunc(268435455/2)):M=rt(e,C,o,r),y=Math.min(y,M),m)break}return y===2147483647&&(y=rt(e,n,o,r)),{allowsImmediateOpponentWin:m,opponentReachesMatchPoint:d,opponentMaxScoreGain:f,myScoreGain:i,worstReplyScore:y}}c(Z0,"normalRootSafetySnapshot");function J0(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(J0,"betterNormalRootSafetyCandidate");function eC(e){return!e.winsImmediately&&!e.attacksOpponentDrainer&&!Nd(e)&&!e.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&e.sameTurnScoreWindowValue===0}c(eC,"quietNonTacticalReplyRiskRoot");function CA(e,n,o,t,r){if(e.session.checkpoint())return 0;let a=n.winnerColor();if(a!==void 0)return a===o?Math.trunc(268435455/2):-Math.trunc(268435455/2);if(n.activeColor===o)return rt(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),p=Re(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)}}),l=wo(e,n,Math.max(1,Math.trunc(r)));if(e.session.cancelled)return 0;if(l.length===0)return Math.trunc(268435455/4);let m=2147483647;for(let d of l){if(e.session.checkpoint())return 0;let f=d.game.winnerColor(),y=f===o?Math.trunc(268435455/2):f!==void 0?-Math.trunc(268435455/2):R0(e,d.game,o,1,p);if(e.session.checkpoint())return 0;m=Math.min(m,y)}return m===2147483647?rt(e,n,o,t):m}c(CA,"normalRootSafetyDeepFloorScore");function oC(e,n,o,t,r,a,i,s){if(!D(s)||!s.replyRisk.safetyRerank||!eC(o)||!eC(r)||Math.abs(o.rootRank-r.rootRank)>8||Math.abs(o.score-r.score)>160||Math.abs(t.worstReplyScore-a.worstReplyScore)>320||!(X(o)||X(r)||o.spiritOwnManaSetupNow||r.spiritOwnManaSetupNow||o.spiritSameTurnScoreSetupNow||r.spiritSameTurnScoreSetupNow||go(o,r)||wa(o,r,s)))return;let p=Math.min(36,Math.max(12,Math.trunc(s.search.nodeEnumerationLimit))),l=Ue(n,i),m=Z0(e,o.game,i,l,s,p),d=Z0(e,r.game,i,l,s,p);if(m.allowsImmediateOpponentWin!==d.allowsImmediateOpponentWin||m.opponentReachesMatchPoint!==d.opponentReachesMatchPoint||m.opponentMaxScoreGain!==d.opponentMaxScoreGain||m.myScoreGain!==d.myScoreGain||m.worstReplyScore!==d.worstReplyScore){if(J0(m,o.score,d,r.score))return 1;if(J0(d,r.score,m,o.score))return-1}let y=be-Ue(n,i),b=be-Ue(n,i===R.White?R.Black:R.White);if(s.replyRisk.deepSafetyFloor&&(y<=3||b<=3)){let C=c(M=>CA(e,M,i,s,p),"floor"),h=C(o.game),k=C(r.game);if(h!==k)return h>k?1:-1}}c(oC,"normalSafetyReplyOrder");function tC(e,n,o,t){if(e.winsImmediately!==o.winsImmediately)return e.winsImmediately;if(e.attacksOpponentDrainer!==o.attacksOpponentDrainer)return e.attacksOpponentDrainer;if(n.allowsImmediateOpponentWin!==t.allowsImmediateOpponentWin)return!n.allowsImmediateOpponentWin;if(n.opponentReachesMatchPoint!==t.opponentReachesMatchPoint)return!n.opponentReachesMatchPoint}c(tC,"immediateReplyRiskDecision");function rC(e,n,o,t,r,a,i,s,u){if(i.game!==void 0){let y=nC(i.game,n,o,t,r,a);if(y!==void 0)return y>0}let p=I0(n,o,t,r,i.candidateProjection,i.incumbentProjection,a);if(p!==void 0)return p>0;let l=O0(n,o,t,r,a);if(l!==void 0)return l>0;if(i.game!==void 0){let y=B0(i.game,n,o,t,r,a);if(y!==void 0)return y>0}if(s!==void 0){let y=s.game,b=s.evaluations,C=s.candidateIndex,h=s.incumbentIndex,k=s.perspective,M=L0(e,y,b,C,o,h,r,k,a,u);if(M!==void 0)return M>0;let T=G0(e,y,b,C,o,h,r,k,a,u);if(T!==void 0)return T>0;let P=Jc(e,y,b,C,o,h,r,k,a,u);if(P!==void 0)return P>0;let E=ep(e,y,b,C,o,h,r,k,a,u);if(E!==void 0)return E>0;let O=V0(y,n,o,t,r,a);if(O!==void 0)return O>0}let m=N0(n,o,t,r,a);if(m!==void 0)return m>0;if(i.game!==void 0&&i.perspective!==void 0){let y=oC(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}}c(rC,"contextualReplyRiskDecision");function Wr(e){return Gt.length-lo(e)-1}c(Wr,"closeSpiritGoalFamilyPriority");function MA(e,n){return e.plan.headFamily!==S.SpiritImpact||n.plan.headFamily!==S.SpiritImpact?0:Wr(e.plan.goalFamily)-Wr(n.plan.goalFamily)}c(MA,"compareCloseSpiritGoalFamily");function Br(e,n,o){if(o){let t=se(e.plan.headUtility,n.plan.headUtility);if(t!==0||(t=se(e.plan.utility,n.plan.utility),t!==0))return t;let r=e.plan.headFamily===S.SpiritImpact,a=n.plan.headFamily===S.SpiritImpact;if(r!==a)return r?1:-1;if(t=MA(e,n),t!==0)return t}return Qn(e.plan,n.plan)}c(Br,"compareSpiritProjectionPlans");function qs(e,n,o,t,r){if(!D(r))return;let a=n.plan.headFamily===S.SpiritImpact,i=t.plan.headFamily===S.SpiritImpact;if(a===i)return;let s=a?o:e,u=a?t:n,p=a?e:o,l=a?n:t,m=Wr(l.plan.goalFamily),d=Wr(u.plan.goalFamily);if(!(m>Wr(S.SpiritImpact)||d<m||s.worstReplyScore<A(p.worstReplyScore,128)||se(u.plan.utility,l.plan.utility)<0&&!Ho(u.plan.utility,l.plan.utility)))return a?-1:1}c(qs,"mixedPlainSpiritReplyFloorOrder");function lm(e,n,o,t,r,a,i,s,u,p){if(!eo(u))return;let l=r.plan.headFamily===S.SpiritImpact,m=i.plan.headFamily===S.SpiritImpact;if(l===m)return;let d=o[t],f=o[a];if(d===void 0||f===void 0)return;let y=l?f:d,b=l?i:r,C=l?d:f,h=l?r:i,k=!l,M=Fr(e,n,o,t,a,s,u,p),T=k?t:a,P=k?a:t,E=Wr(b.plan.goalFamily),O=Wr(h.plan.goalFamily);return E>=O&&O<=Wr(S.SpiritImpact)&&y.score>=C.score&&Eo(o,T,P)>0&&se(b.plan.utility,h.plan.utility)>=0?k?1:-1:O>E&&se(h.plan.utility,b.plan.utility)>=0&&se(h.plan.headUtility,b.plan.headUtility)>=0?k?-1:1:(b.plan.headFamily===S.SafeSupermanaProgress||b.plan.headFamily===S.SafeOpponentManaProgress||b.plan.headFamily===S.DrainerSafetyRecovery)&&(M===0||Ho(b.plan.utility,h.plan.utility))&&y.score>=C.score&&Qn(b.plan,h.plan)>0?k?1:-1:l?1:-1}c(lm,"mixedPlainSpiritProjectionOrder");function aC(e,n,o,t,r,a,i,s,u){if(!D(s)||t.length<2)return;let p=t.filter(m=>{let d=o[m];return d!==void 0&&F(d)});if(p.length<2||p.some(m=>!a.has(m)))return;let l=p[0];if(l!==void 0){for(let m of p.slice(1)){let d=o[m],f=o[l],y=a.get(m),b=a.get(l),C=r.get(m),h=r.get(l);if(d===void 0||f===void 0||y===void 0||b===void 0||C===void 0||h===void 0)continue;let k=ep(e,n,o,m,C,l,h,i,s,u);k??=qs(C,y,h,b,s),k??=lm(e,n,o,m,y,l,b,i,s,u),k===void 0&&(y.plan.headFamily===S.SpiritImpact&&b.plan.headFamily===S.SpiritImpact?k=Br(y,b,Math.abs(d.score-f.score)<=192):(k=Fr(e,n,o,m,l,i,s,u),k??=Eo(o,m,l))),k>0&&(l=m)}return l}}c(aC,"plainSpiritReplyRiskPick");function Ni(e,n,o,t){let r=F(e),a=F(o);if(r===a||n===void 0||t===void 0)return;let i=r?o:e,s=r?t:n,u=r?e:o,p=r?n:t,l=N(i),m=N(u),d=l&&!m&&(pa(s.plan.utility)&&se(s.plan.utility,p.plan.utility)>=0&&Ho(s.plan.utility,p.plan.utility)||s.plan.goalFamily===S.ImmediateScore&&se(s.plan.utility,p.plan.utility)>=0);if(!(l&&!m&&!d)){if(d)return r?-1:1;if(!(s.plan.headFamily===S.SpiritImpact||!Vo(s.plan.utility,p.plan.utility)||se(s.plan.headUtility,p.plan.headUtility)<0||se(s.plan.utility,p.plan.utility)<=0))return r?-1:1}}c(Ni,"spiritProjectionChallengeOrder");function iC(e,n,o,t,r,a,i,s,u){if(!D0(n,o,t,r,a))return;if(i.candidateProjection!==void 0&&i.incumbentProjection!==void 0&&Math.abs(n.score-t.score)<=16&&n.efficiency===t.efficiency){let l=qs(o,i.candidateProjection,r,i.incumbentProjection,a);if(l!==void 0)return l>0;if(s!==void 0){let d=lm(e,s.game,s.evaluations,s.candidateIndex,i.candidateProjection,s.incumbentIndex,i.incumbentProjection,s.perspective,a,u);if(d!==void 0)return d>0}if(i.candidateProjection.plan.headFamily===S.SpiritImpact||i.incumbentProjection.plan.headFamily===S.SpiritImpact){let d=Br(i.candidateProjection,i.incumbentProjection,Math.abs(n.score-t.score)<=192);if(d!==0)return d>0}}if(s!==void 0){let l=Fr(e,s.game,s.evaluations,s.candidateIndex,s.incumbentIndex,s.perspective,a,u);return l!==void 0&&l!==0?l>0:Eo(s.evaluations,s.candidateIndex,s.incumbentIndex)>0}if(n.score!==t.score)return n.score>t.score;let p=Ti(n,t);return p<0||p===0&&n.rootRank<t.rootRank}c(iC,"plainSpiritReplyRiskDecision");function sC(e,n,o,t){if(o===void 0)return;let r=Fr(e,o.game,o.evaluations,o.candidateIndex,o.incumbentIndex,o.perspective,n,t);return r!==void 0&&r!==0?r>0:void 0}c(sC,"sharedSpiritFollowupDecision");function uC(e,n,o,t,r,a){if(D(r)&&Math.abs(n.worstReplyScore-t.worstReplyScore)>240)return n.worstReplyScore>t.worstReplyScore;if(D(r)&&e.policyPriority!==o.policyPriority&&e.efficiency>=o.efficiency)return e.policyPriority>o.policyPriority;if(r.replyRisk.deterministicTiebreak&&e.spiritOwnManaSetupNow!==o.spiritOwnManaSetupNow){let i=wa(e,o,r);if(!D(r)||i||Math.abs(n.worstReplyScore-t.worstReplyScore)<=120)return e.spiritOwnManaSetupNow}if(r.replyRisk.deterministicTiebreak&&e.spiritOwnManaSetupNow&&o.spiritOwnManaSetupNow&&e.supermanaProgress&&o.supermanaProgress&&e.safeSupermanaProgressSteps!==o.safeSupermanaProgressSteps)return tn(e.safeSupermanaProgressSteps,o.safeSupermanaProgressSteps);if(r.replyRisk.deterministicTiebreak&&e.spiritOwnManaSetupNow&&o.spiritOwnManaSetupNow&&e.opponentManaProgress&&o.opponentManaProgress&&e.safeOpponentManaProgressSteps!==o.safeOpponentManaProgressSteps)return tn(e.safeOpponentManaProgressSteps,o.safeOpponentManaProgressSteps);if(r.replyRisk.deterministicTiebreak&&e.spiritOwnManaSetupNow&&o.spiritOwnManaSetupNow&&e.scorePathBestSteps!==o.scorePathBestSteps)return ba(e.scorePathBestSteps,o.scorePathBestSteps);if(r.replyRisk.deterministicTiebreak&&e.spiritDevelopment!==o.spiritDevelopment){let i=Ni(e,a.candidateProjection,o,a.incumbentProjection);if(i!==void 0)return i>0;let s=Ri(e,o);if(s!==void 0&&(!D(r)||Math.abs(n.worstReplyScore-t.worstReplyScore)<=120))return s>0;if(!D(r)||Math.abs(n.worstReplyScore-t.worstReplyScore)<=120)return e.spiritDevelopment}if(a.candidateProjection!==void 0&&a.incumbentProjection!==void 0){let i=Math.abs(n.worstReplyScore-t.worstReplyScore)<=100,s=!n.allowsImmediateOpponentWin&&!t.allowsImmediateOpponentWin&&!n.opponentReachesMatchPoint&&!t.opponentReachesMatchPoint,u=Bc(a.candidateProjection.plan.headFamily)||Bc(a.incumbentProjection.plan.headFamily),p=e.spiritOwnManaSetupNow||o.spiritOwnManaSetupNow||e.spiritSameTurnScoreSetupNow||o.spiritSameTurnScoreSetupNow||e.spiritDevelopment||o.spiritDevelopment;if(D(r)&&F(e)&&F(o)&&i&&bt(a.candidateProjection.plan.utility)&&bt(a.incumbentProjection.plan.utility)&&s){let d=Br(a.candidateProjection,a.incumbentProjection,Math.abs(e.score-o.score)<=192);if(d!==0)return d>0}if(D(r)&&e.spiritDevelopment&&o.spiritDevelopment&&!e.spiritSameTurnScoreSetupNow&&!o.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&!o.spiritOwnManaSetupNow&&i&&s){let d=Br(a.candidateProjection,a.incumbentProjection,Math.abs(e.score-o.score)<=192);if(d!==0)return d>0}if(u&&s&&i&&!p){let d=Qn(a.candidateProjection.plan,a.incumbentProjection.plan);if(d!==0)return d>0}}return e.policyPriority!==o.policyPriority?e.policyPriority>o.policyPriority:n.worstReplyScore!==t.worstReplyScore?n.worstReplyScore>t.worstReplyScore:e.score!==o.score?e.score>o.score:e.efficiency!==o.efficiency?e.efficiency>o.efficiency:!1}c(uC,"finalReplyRiskDecision");function dm(e,n,o,t,r,a,i={}){let s=tC(n,o,t,r);if(s!==void 0)return s;let p=i.game!==void 0&&i.evaluations!==void 0&&i.candidateIndex!==void 0&&i.incumbentIndex!==void 0&&i.perspective!==void 0?i:void 0,l=i.spiritFollowupScores??new Map,m=rC(e,n,o,t,r,a,i,p,l);if(m!==void 0)return m;let d=iC(e,n,o,t,r,a,i,p,l);if(d!==void 0)return d;let f=sC(e,a,p,l);return f!==void 0?f:uC(n,o,t,r,a,i)}c(dm,"isBetterReplyRiskCandidate");function zs(e,n,o){return D(o)&&I(e)===S.ManaTempo&&I(n)===S.ManaTempo&&e.efficiency===n.efficiency&&!e.ownDrainerVulnerable&&!n.ownDrainerVulnerable&&!e.ownDrainerWalkVulnerable&&!n.ownDrainerWalkVulnerable&&!N(e)&&!N(n)&&go(e,n)}c(zs,"isProductionModeWhiteManaSiblingPair");function sp(e,n,o,t,r,a){if(!D(a)||n.activeColor!==R.White||n.turnNumber!==3||n.monsMovesCount<4)return;let i=[...t].filter(d=>{let f=o[d];return f!==void 0&&I(f)===S.ManaTempo&&!f.ownDrainerVulnerable&&!f.ownDrainerWalkVulnerable&&!N(f)&&!f.manaHandoffToOpponent&&!f.hasRoundtrip&&!f.winsImmediately&&!f.attacksOpponentDrainer&&f.sameTurnScoreWindowValue===0&&!f.scoresSupermanaThisTurn&&!f.scoresOpponentManaThisTurn&&!f.safeSupermanaPickupNow&&!f.safeOpponentManaPickupNow}).sort((d,f)=>-Eo(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,S.ManaTempo),p,l,m=!1;return o.forEach((d,f)=>{let y=zs(d,s,a)&&L(s.score,d.score)<=24&&Math.abs(s.rootRank-d.rootRank)<=4&&d.rootRank<s.rootRank;if(t.includes(f)||I(d)!==S.ManaTempo||d.ownDrainerVulnerable||d.ownDrainerWalkVulnerable||N(d)||d.manaHandoffToOpponent||d.hasRoundtrip||d.winsImmediately||d.attacksOpponentDrainer||d.sameTurnScoreWindowValue>0||d.scoresSupermanaThisTurn||d.scoresOpponentManaThisTurn||d.safeSupermanaPickupNow||d.safeOpponentManaPickupNow||!y&&d.score<L(s.score,96)||d.rootRank>=s.rootRank&&!y)return;let b=Ct(e,n,d,r,a,S.ManaTempo),h=se(b,u)>0||mo(b,u);if(!h&&!y)return;let k=p,M=l,T=k===void 0||M===void 0;if(k!==void 0&&M!==void 0){let P=o[k];if(P===void 0)T=!0;else{let E=zs(P,s,a)&&L(s.score,P.score)<=24&&Math.abs(s.rootRank-P.rootRank)<=4&&P.rootRank<s.rootRank;if(h!==m)T=h;else if(h){let O=se(b,M);T=O>0||O===0&&Eo(o,f,k)>0}else y&&E?T=d.rootRank<P.rootRank||d.rootRank===P.rootRank&&Eo(o,f,k)>0:T=y}}T&&(p=f,l=b,m=h)}),p}c(sp,"productionWhiteTurnFourManaSiblingReentry");function Di(e,n,o,t,r,a,i=t){if(!a.replyRisk.enabled||e.session.checkpoint())return;let s=wi(e,o,t,a);if(s.length===0)return;let u=sp(e,n,o,s,r,a);u!==void 0&&!s.includes(u)&&(s=[...s,u].sort((h,k)=>-Eo(o,h,k)));let p=Math.max(s.length,1,Math.trunc(a.budget.maxVisitedNodes*Math.max(0,a.replyRisk.nodeShareBp)/1e4)),l=Math.min(Math.max(1,a.replyRisk.replyLimit),Math.max(1,Math.trunc(p/s.length))),m=Eb(e,o,s,r,a),d=new Map;for(let h of s){if(e.session.checkpoint())return;let k=o[h];if(k===void 0)continue;let M=m.get(h);if(M!==void 0){d.set(h,Wd(e,k,M,r,a,l));continue}let P=a.planner.enabled&&D(a)&&jt(k,r)&&!F(k)?k.game:void 0;d.set(h,Mn(e,P??k.game,r,a,l))}let f=new Map,y=aC(e,n,o,s,d,m,r,a,f);if(s.every(h=>{let k=o[h];return k!==void 0&&F(k)}))return y;if(D(a)&&s.every(h=>{let k=d.get(h);return k!==void 0&&!k.allowsImmediateOpponentWin&&!k.opponentReachesMatchPoint})&&!Fc(o,s,a)&&!Zc(n,o,s,a)&&!_0(o,s,a)&&!F0(n,o,s,a)&&!W0(o,s,a)){let h=[...s].sort((T,P)=>{let E=d.get(T)?.worstReplyScore??-2147483648;return(d.get(P)?.worstReplyScore??-2147483648)-E||-Eo(o,T,P)}),k=h[0],M=h[1];if(k!==void 0&&(M===void 0||(d.get(k)?.worstReplyScore??-2147483648)>(d.get(M)?.worstReplyScore??-2147483648)))return k}let b=y??s.find(h=>d.has(h));if(b===void 0)return;for(let h of s){if(h===b)continue;let k=o[h],M=o[b],T=d.get(h),P=d.get(b);k!==void 0&&M!==void 0&&T!==void 0&&P!==void 0&&dm(e,k,T,M,P,a,{candidateProjection:m.get(h),incumbentProjection:m.get(b),game:n,evaluations:o,candidateIndex:h,incumbentIndex:b,perspective:r,spiritFollowupScores:f})&&(b=h)}if(D(a)&&y!==void 0&&y!==b){let h=d.get(y),k=d.get(b),M=m.get(y),T=m.get(b);h!==void 0&&k!==void 0&&M!==void 0&&T!==void 0&&(qs(h,M,k,T,a)??-1)>0&&(b=y)}let C=o[b];if(D(a)&&C!==void 0&&!C.spiritDevelopment&&!C.spiritSameTurnScoreSetupNow&&!C.spiritOwnManaSetupNow&&b>=4){let h=i.filter(k=>!s.includes(k)).filter(k=>{let M=o[k];return M!==void 0&&M.spiritOwnManaSetupNow&&M.rootRank+3<=C.rootRank&&wa(M,C,a)}).sort((k,M)=>-Eo(o,k,M))[0];if(h!==void 0){let k=o[h],M=d.get(b);if(k!==void 0&&M!==void 0){let T=Wd(e,k,void 0,r,a,l);(x0(k,T,C,M,a)||dm(e,k,T,C,M,a,{incumbentProjection:m.get(b),game:n,evaluations:o,candidateIndex:h,incumbentIndex:b,perspective:r,spiritFollowupScores:f}))&&(b=h)}}}return e.session.checkpoint()?void 0:b}c(Di,"pickRootWithReplyRiskGuard");var co=Object.freeze({SafeProgress:"safe-progress",FollowupProgress:"followup-progress",RiskyScore:"risky-score",NegativeDeny:"negative-deny",Score:"score",Projection:"projection",RiskyRecovery:"risky-recovery"}),cC=Object.freeze([co.SafeProgress,co.FollowupProgress,co.RiskyScore,co.NegativeDeny,co.Score,co.Projection,co.RiskyRecovery]),Yo=Object.freeze({SpiritSetup:"spirit-setup",ProjectionChallenge:"projection-challenge",Projection:"projection",FollowupFloor:"followup-floor"});var pC=700,kA=180;function de(e,n){let o=e[n];if(o===void 0)throw new RangeError(`root selector index ${n} is out of bounds`);return o}c(de,"valueAt");function lC(e,n,o){if(!Number.isInteger(n)||n<0||n>=e.length)throw new RangeError(`${o} selected an invalid root`)}c(lC,"assertRootIndex");function Lr(e,n){let o=n;for(let t of e)o=Math.max(o,t);return o}c(Lr,"maxValue");function TA(e){let n;for(let o of e)n=n===void 0?o:Math.min(n,o);return n}c(TA,"minValue");function ym(e,n){return n===R.White?e.whitePotionsCount:e.blackPotionsCount}c(ym,"potionsForColor");function RA(e,n){return e.activeColor===n&&!e.isFirstTurn()&&!e.playerCanMoveMon()&&e.actionsUsedCount>=Vn&&e.playerCanMoveMana()&&ym(e,n)>0}c(RA,"shouldPreferPotionTakebackLines");function dC(e,n,o){return ym(n.game,o)<ym(e,o)}c(dC,"rootSpendsPotion");function PA(e,n,o){return n.winsImmediately||n.attacksOpponentDrainer||Ue(n.game,o)>=A(Ue(e,o),2)||n.scoresSupermanaThisTurn||n.scoresOpponentManaThisTurn||!n.ownDrainerVulnerable&&(n.supermanaProgress||n.opponentManaProgress)}c(PA,"rootPotionSpendCompensated");function mC(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(mC,"immediateOpponentWin");function Sm(e){return e.planner.mode===Be.Production}c(Sm,"isProductionMode");function up(e,n,o,t,r){return{game:e,roots:n,candidateIndices:o,perspective:t,config:r}}c(up,"selectionContext");function wA(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(wA,"evaluateProductionCompetitionRules");function mm(e,n,o,t,r,a,i){let s=!1,u=up(e,n,o,t,r);for(let p of cC)Sm(r)&&wA(a.productionPolicy,p,u)&&(p!=="negative-deny"||i?.()!==!0)&&(s=!0);return s}c(mm,"anyProductionCompetition");function AA(e,n,o){let t=e.candidateIndices.filter(r=>!de(e.roots,r).spiritDevelopment);return n.some(r=>t.every(a=>{let i=Ca(Yo.SpiritSetup,{...e,candidateIndex:r,incumbentIndex:a},o);return i!==void 0&&i>0}))}c(AA,"spiritSetupOverridesNegativeDeny");function fm(e,n,o,t){let r=TA(n.map(a=>o(de(e,a))).filter(a=>a<t));return r===void 0?[...n]:n.filter(a=>o(de(e,a))===r)}c(fm,"retainBestKnownSteps");function _i(e,n,o,t,r={}){if(n.length===0)return[];let a=n.map((s,u)=>u),i=!1;if(a.some(s=>de(n,s).winsImmediately))return a.filter(s=>de(n,s).winsImmediately);if(a.some(s=>de(n,s).attacksOpponentDrainer)&&(a=a.filter(s=>de(n,s).attacksOpponentDrainer),i=!0),!i&&!a.some(s=>de(n,s).classes.immediateScore)){let s=Lr(a.flatMap(u=>{let p=de(n,u);return!p.ownDrainerVulnerable&&!p.manaHandoffToOpponent?[p.sameTurnScoreWindowValue]:[]}),0);if(s>0){let u=a.filter(p=>{let l=de(n,p);return l.sameTurnScoreWindowValue===s&&!l.ownDrainerVulnerable&&!l.manaHandoffToOpponent});u.length>0&&(a=u)}}if(!i&&a.some(s=>de(n,s).safeSupermanaPickupNow)?a=a.filter(s=>{let u=de(n,s);return u.scoresSupermanaThisTurn||u.safeSupermanaPickupNow}):!i&&a.some(s=>de(n,s).safeOpponentManaPickupNow)&&(a=a.filter(s=>{let u=de(n,s);return u.scoresOpponentManaThisTurn||u.safeOpponentManaPickupNow})),!i&&!a.some(s=>de(n,s).classes.immediateScore)){let s=Lr(a.flatMap(p=>{let l=de(n,p);return l.spiritSameTurnScoreSetupNow&&!l.ownDrainerVulnerable&&!l.manaHandoffToOpponent?[l.sameTurnScoreWindowValue]:[]}),0),u=Lr(a.flatMap(p=>{let l=de(n,p);return!l.spiritSameTurnScoreSetupNow&&!l.ownDrainerVulnerable&&!l.manaHandoffToOpponent?[l.sameTurnScoreWindowValue]:[]}),0);s>u&&(a=a.filter(p=>{let l=de(n,p);return l.spiritSameTurnScoreSetupNow&&l.sameTurnScoreWindowValue===s&&!l.ownDrainerVulnerable&&!l.manaHandoffToOpponent}))}if(!i&&!a.some(s=>de(n,s).classes.immediateScore)&&a.some(s=>{let u=de(n,s);return u.sameTurnScoreWindowValue>0&&!u.ownDrainerVulnerable&&!u.manaHandoffToOpponent})){let s=Lr(a.map(u=>de(n,u).sameTurnScoreWindowValue),0);if(s>0){let u=a.filter(p=>{let l=de(n,p);return l.sameTurnScoreWindowValue===s&&!l.ownDrainerVulnerable&&!l.manaHandoffToOpponent});u.length>0&&(a=u)}}if(!i){let s=a.filter(u=>{let p=de(n,u);return p.spiritOwnManaSetupNow&&!p.ownDrainerVulnerable&&!p.manaHandoffToOpponent});if(s.length>0&&!mm(e,n,a,o,t,r,()=>AA(up(e,n,a,o,t),s,r.productionPolicy))){let u=s.filter(p=>de(n,p).supermanaProgress);if(u.length>0)a=fm(n,u,p=>p.safeSupermanaProgressSteps,15);else{let p=s.filter(l=>de(n,l).opponentManaProgress);a=p.length>0?fm(n,p,l=>l.safeOpponentManaProgressSteps,15):fm(n,s,l=>l.scorePathBestSteps,33)}}}if(t.policy.hardSpiritDeployment&&!i&&oa(e,o)&&!a.some(u=>{let p=de(n,u);return p.scoresSupermanaThisTurn||p.scoresOpponentManaThisTurn||p.safeSupermanaPickupNow||p.safeOpponentManaPickupNow})&&!mm(e,n,a,o,t,r)){let u=a.filter(p=>{let l=de(n,p);return l.spiritOwnManaSetupNow&&!l.ownDrainerVulnerable&&!l.manaHandoffToOpponent});if(u.length>0)a=u;else{let p=Ue(e,o),l=a.filter(m=>!de(n,m).keepsAwakeSpiritOnBase);if(l.length>0){let m=l.filter(b=>{let C=de(n,b);return!C.ownDrainerVulnerable&&!C.manaHandoffToOpponent}),d=m.length>0?m:l,f=a.some(b=>{let C=de(n,b);return C.keepsAwakeSpiritOnBase&&Ue(C.game,o)>p}),y=d.some(b=>Ue(de(n,b).game,o)>p);(!f||y)&&(a=d)}}}if(!i){let s=[...a],u=Lr(a.map(m=>de(n,m).score),-2147483648),p=Math.max(t.policy.drainerSafetyScoreMargin,0),l=a.filter(m=>{let d=de(n,m);return!d.ownDrainerVulnerable&&d.score+p>=u});if(l.length>0&&(a=l,Sm(t))){let m=up(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(lC(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&&oa(e,o)&&a.some(s=>de(n,s).spiritDevelopment)&&!a.some(u=>{let p=de(n,u);return p.scoresSupermanaThisTurn||p.scoresOpponentManaThisTurn||p.safeSupermanaPickupNow||p.safeOpponentManaPickupNow})&&!mm(e,n,a,o,t,r)){let u=Lr(a.map(l=>de(n,l).score),-2147483648),p=a.filter(l=>{let m=de(n,l);return m.spiritOwnManaSetupNow&&m.score+pC>=u});if(p.length>0)a=p;else{let l=a.filter(m=>{let d=de(n,m);return d.spiritDevelopment&&d.score+pC>=u});l.length>0&&(a=l)}}if(!i&&a.length>1&&RA(e,o)){let s=Lr(a.map(p=>de(n,p).score),-2147483648),u=a.filter(p=>de(n,p).score+kA>=s);if(u.length>1){let p=new Map,l=c(d=>{let f=p.get(d);if(f!==void 0)return f;let y=mC(de(n,d),d,o,t,r);return p.set(d,y),y},"allowsLoss");if(u.some(d=>{let f=de(n,d);return!dC(e,f,o)&&!l(d)})){let d=new Set(u),f=a.filter(y=>{let b=de(n,y);return b.winsImmediately||!d.has(y)||!dC(e,b,o)||PA(e,b,o)});f.length>0&&(a=f)}}}if(a.length>1){let s=Lr(a.map(l=>de(n,l).score),-2147483648),u=Math.max(t.replyRisk.antiHelpScoreMargin,0),p=a.filter(l=>de(n,l).score+u>=s);if(p.length>1){let l=new Map,m=c(f=>{let y=l.get(f);if(y!==void 0)return y;let b=mC(de(n,f),f,o,t,r);return l.set(f,b),b},"allowsLoss");if(p.some(f=>{let y=de(n,f);return!y.manaHandoffToOpponent&&!y.hasRoundtrip&&!m(f)})){let f=new Set(p),y=a.filter(b=>{let C=de(n,b);return C.winsImmediately||!f.has(b)||!C.manaHandoffToOpponent&&!C.hasRoundtrip});y.length>0&&(a=y)}}}if(Sm(t)){let s=up(e,n,[...a],o,t),u=!1;for(let p of r.productionPolicy?.finalReentryRules??[]){let l=p.select({...s,selectedIndices:a});if(l.kind!=="continue")for(let m of l.indices)lC(n,m,`Production rule ${p.id}`),a.includes(m)||(a.push(m),u=!0)}u&&a.sort((p,l)=>ae(n,p,l))}return a}c(_i,"filteredRootCandidateIndices");var fC=80;function $s(e,n){let o=e[n];if(o===void 0)throw new RangeError(`root selector index ${n} is out of bounds`);return o}c($s,"valueAt");function yC(e,n,o){if(!Number.isInteger(n)||n<0||n>=e.length)throw new RangeError(`${o} selected an invalid root`)}c(yC,"assertRootIndex");function EA(e,n){let o=n;for(let t of e)o=Math.max(o,t);return o}c(EA,"maxValue");function $t(e){return e.planner.mode===Be.Production}c($t,"isProductionMode");function SC(e,n,o,t,r){return{game:e,roots:n,candidateIndices:o,perspective:t,config:r}}c(SC,"selectionContext");function Fi(e,n,o,t,r,a={}){if(a.checkpoint?.()===!0||n.length===0||o.length===0)return;let i=SC(e,n,o,t,r);if(r.replyRisk.enabled){let y=a.pickReplyRiskGuardedIndex?.(i);if(y!==void 0){if(yC(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=EA(o.map(y=>$s(n,y).score),-2147483648),u=Math.max(r.policy.efficiencyScoreMargin,0),p=Rb(n,o),l=-2147483648,m=-2147483648,d=r.policy.preferSpiritDevelopment&&oa(e,t),f=$t(r)&&o.filter(y=>F($s(n,y))).length>=2;for(let y of o){if(a.checkpoint?.()===!0)return;let b=$s(n,y),C=$s(n,p),h=$t(r)&&e.turnNumber<=3&&F(b)&&F(C)&&L(s,b.score)<=16,k=$t(r)?Ca(Yo.SpiritSetup,{...i,candidateIndex:y,incumbentIndex:p},a.productionPolicy):void 0,M=!$t(r)||k===void 0||k>=0;if(b.score+u<s&&!h)continue;let T=d&&b.spiritDevelopment!==C.spiritDevelopment?Ri(b,C):void 0;T===void 0&&$t(r)&&d&&b.spiritDevelopment!==C.spiritDevelopment&&Math.abs(b.score-C.score)<=320&&(T=Ca(Yo.ProjectionChallenge,{...i,candidateIndex:y,incumbentIndex:p},a.productionPolicy));let P=T===void 0&&d&&b.spiritDevelopment&&!C.spiritDevelopment&&M,E=!d||b.spiritDevelopment===C.spiritDevelopment||T!==void 0||$t(r)&&M&&(b.spiritOwnManaSetupNow||b.spiritSameTurnScoreSetupNow),O=b.spiritSameTurnScoreSetupNow&&!C.spiritSameTurnScoreSetupNow&&M,g=b.spiritSameTurnScoreSetupNow===C.spiritSameTurnScoreSetupNow,x=b.spiritOwnManaSetupNow&&!C.spiritOwnManaSetupNow&&M,_=b.spiritOwnManaSetupNow===C.spiritOwnManaSetupNow,U=d&&b.spiritDevelopment&&C.spiritDevelopment&&b.spiritSetupGain>C.spiritSetupGain,j=!d||!b.spiritDevelopment||!C.spiritDevelopment||b.spiritSetupGain===C.spiritSetupGain,z=f&&F(b)&&F(C),J=$t(r)&&(d||z)&&b.spiritDevelopment&&C.spiritDevelopment?Ca(Yo.Projection,{...i,candidateIndex:y,incumbentIndex:p},a.productionPolicy):void 0,W=$t(r)?Ca(Yo.FollowupFloor,{...i,candidateIndex:y,incumbentIndex:p},a.productionPolicy):void 0,re=b.spiritOwnManaSetupNow&&C.spiritOwnManaSetupNow&&b.supermanaProgress&&C.supermanaProgress&&tn(b.safeSupermanaProgressSteps,C.safeSupermanaProgressSteps),Se=!b.spiritOwnManaSetupNow||!C.spiritOwnManaSetupNow||!b.supermanaProgress||!C.supermanaProgress||b.safeSupermanaProgressSteps===C.safeSupermanaProgressSteps,q=b.spiritOwnManaSetupNow&&C.spiritOwnManaSetupNow&&b.opponentManaProgress&&C.opponentManaProgress&&tn(b.safeOpponentManaProgressSteps,C.safeOpponentManaProgressSteps),Y=!b.spiritOwnManaSetupNow||!C.spiritOwnManaSetupNow||!b.opponentManaProgress||!C.opponentManaProgress||b.safeOpponentManaProgressSteps===C.safeOpponentManaProgressSteps,Ie=b.spiritOwnManaSetupNow&&C.spiritOwnManaSetupNow&&ba(b.scorePathBestSteps,C.scorePathBestSteps),ie=!b.spiritOwnManaSetupNow||!C.spiritOwnManaSetupNow||b.scorePathBestSteps===C.scorePathBestSteps,ye=tn(b.safeSupermanaProgressSteps,C.safeSupermanaProgressSteps),pe=b.safeSupermanaProgressSteps===C.safeSupermanaProgressSteps,Le=tn(b.safeOpponentManaProgressSteps,C.safeOpponentManaProgressSteps),Tn=b.safeOpponentManaProgressSteps===C.safeOpponentManaProgressSteps,$=b.sameTurnScoreWindowValue>C.sameTurnScoreWindowValue,he=b.sameTurnScoreWindowValue===C.sameTurnScoreWindowValue,en=!b.manaHandoffToOpponent&&C.manaHandoffToOpponent,Dn=b.manaHandoffToOpponent===C.manaHandoffToOpponent,at=!b.hasRoundtrip&&C.hasRoundtrip,Xt=b.hasRoundtrip===C.hasRoundtrip,Hr=b.policyPriority>A(C.policyPriority,fC),au=A(b.policyPriority,fC)>=C.policyPriority,Oa=b.efficiency>l||b.efficiency===l&&b.score>m,De;(T??0)>0?De=!0:(T??0)<0?De=!1:Hr?De=!0:au?$?De=!0:he?O?De=!0:g?x?De=!0:_?U?De=!0:j?(W??0)>0?De=!0:(W??0)<0?De=!1:(J??0)>0?De=!0:(J??0)<0?De=!1:re?De=!0:Se?q?De=!0:Y?Ie?De=!0:ie?ye?De=!0:pe?Le?De=!0:Tn?en?De=!0:Dn?at?De=!0:Xt?De=Oa: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||E&&De)&&(p=y,l=b.efficiency,m=b.score)}return p}c(Fi,"pickBaselineRootIndexFromCandidateIndices");function gA(e,n,o,t,r={}){if(r.checkpoint?.()===!0||n.length===0)return;if($t(t)){let i=n.map((u,p)=>p),s=r.productionPolicy?.rootPicker;if(s!==void 0){let u=s.select(SC(e,n,i,o,t));if(u.kind==="select")return yC(n,u.index,`Production rule ${s.id}`),r.cancelled?.()===!0?void 0:u.index}}let a=_i(e,n,o,t,r);return a.length===0&&(a=n.map((i,s)=>s)),Fi(e,n,a,o,t,r)}c(gA,"pickBaselineRootIndex");function hC(e,n,o,t,r={}){let a=gA(e,n,o,t,r);return a===void 0?[]:[...$s(n,a).inputs]}c(hC,"pickBaselineRootInputs");function vA(e,n,o,t,r,a,i,s){let u=o[r];if(u===void 0||!F(u))return!1;let p=kn(m=>{let d=o[m];return d===void 0?-2147483648:Je(e,d.game,a,i)},s),l=!1;for(let m of t){let d=o[m];if(d===void 0||n.activeColor!==R.Black||n.turnNumber>4||!d.spiritOwnManaSetupNow||d.spiritSameTurnScoreSetupNow||!Pe(u.inputs,d.inputs)||u.ownDrainerVulnerable!==d.ownDrainerVulnerable||u.ownDrainerWalkVulnerable!==d.ownDrainerWalkVulnerable||!mn(u)||!mn(d)||te(u)||te(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=p(r),b=p(m);l||=y>=A(b,32)||u.score>=d.score&&y>=b}return l}c(vA,"blackPlainSpiritRepresentativeCompetes");function bC(e,n,o,t,r,a,i,s,u){let p=o[r];return p===void 0?!1:a!==sn.PreserveSpiritRepresentative?!0:p.spiritSameTurnScoreSetupNow||p.spiritOwnManaSetupNow||vA(e,n,o,t,r,i,s,u)}c(bC,"representativeCompetesInApproval");function CC(e,n,o,t,r,a,i){let s=t[0];if(s===void 0||t.some(l=>{let m=o[l];return m!==void 0&&i(m)&&mn(m)}))return;let u=o[s];if(u===void 0)return;let p=fn(e,n,u,r,a);return o.map((l,m)=>m).filter(l=>{let m=o[l];return m!==void 0&&i(m)&&mn(m)&&vo(fn(e,n,m,r,a),p)}).sort((l,m)=>ae(o,l,m))[0]}c(CC,"findScoredRepresentative");function MC(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&&!F(a)&&mn(a)&&o.some(i=>Zc(e,n,[r,i],t))}).sort((r,a)=>ae(n,r,a))[0]}c(MC,"whiteFollowupRepresentative");function hm(e,n,o,t,r){if(!D(r)||!r.planner.enabled||!r.planner.secondaryAnalysis||o.length<2||!o.every(d=>{let f=n[d];return f!==void 0&&F(f)&&mn(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=kn(d=>{let f=n[d];return f===void 0?-2147483648:Je(e,f.game,t,r)}),p=Math.max(...o.map(u)),l=n.map((d,f)=>f).filter(d=>!o.includes(d)),m=l.filter(d=>{let f=n[d];return f!==void 0&&mn(f)&&!f.ownDrainerVulnerable&&!f.ownDrainerWalkVulnerable&&!f.spiritDevelopment&&!f.spiritSameTurnScoreSetupNow&&!f.spiritOwnManaSetupNow&&A(f.score,32)>=i&&u(d)>=A(p,32)}).sort((d,f)=>u(f)-u(d)||ae(n,d,f))[0];return m!==void 0?m:l.filter(d=>{let f=n[d];return f!==void 0&&mn(f)&&!f.ownDrainerVulnerable&&!f.ownDrainerWalkVulnerable&&!f.spiritDevelopment&&!f.spiritSameTurnScoreSetupNow&&!f.spiritOwnManaSetupNow&&X(f)&&f.policyPriority>0&&f.score>=i&&f.rootRank+2<=s}).sort((d,f)=>ae(n,d,f))[0]}c(hm,"plainSpiritClusterProgressReentry");function bm(e,n,o,t,r,a){if(!D(a)||!a.planner.enabled)return;let i=t.find(l=>{let m=o[l];return m!==void 0&&mn(m)&&X(m)&&m.policyPriority>0}),s=i===void 0?void 0:o[i];if(s===void 0)return;let u,p;return o.forEach((l,m)=>{if(t.includes(m)||!N(l)||l.ownDrainerWalkVulnerable||l.manaHandoffToOpponent||l.hasRoundtrip||!go(l,s)||l.score+32<s.score||l.game.activeColor!==r||l.game.winnerColor()!==void 0)return;let d=fn(e,n,l,r,a);pa(d)&&(p===void 0||se(d,p)>0||vb(d,p)&&u!==void 0&&ae(o,m,u)<0)&&(u=m,p=d)}),u}c(bm,"riskyRecoveryReentry");function OA(e,n,o,t){if(!D(t)||e.activeColor!==R.Black||e.turnNumber!==6||!e.playerCanMoveMana()||o.length===0||!o.every(i=>{let s=n[i];return s!==void 0&&I(s)===S.ManaTempo&&N(s)&&!s.winsImmediately&&!s.attacksOpponentDrainer&&!te(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)&&I(s)===S.SpiritImpact&&F(s)&&!te(s)&&!s.attacksOpponentDrainer&&s.sameTurnScoreWindowValue===0&&!s.manaHandoffToOpponent&&!s.hasRoundtrip&&s.rootRank+4<=r&&L(a,s.score)<=1024}).sort((i,s)=>ae(n,i,s))[0]}c(OA,"blackTurnSixSpiritReentry");function IA(e,n,o,t){if(!D(t))return;let r=o[0],a=r===void 0?void 0:e[r];if(!(a===void 0||!N(a)||!X(a)))return n.filter(i=>{let s=e[i];return s!==void 0&&!o.includes(i)&&mn(s)&&go(s,a)&&L(a.score,s.score)<=320}).sort((i,s)=>ae(e,i,s))[0]}c(IA,"safeProgressSiblingReentry");function xA(e,n,o,t,r){if(!D(r)||n.activeColor!==R.Black||n.turnNumber<6||n.monsMovesCount!==0||n.playerCanUseAction()||!n.playerCanMoveMana()||t.length===0)return;let a=Te(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&&(I(s)===S.SafeSupermanaProgress||I(s)===S.SafeOpponentManaProgress)&&mn(s)})))return o.map((i,s)=>s).filter(i=>{let s=o[i],u=s===void 0?void 0:I(s);return s!==void 0&&!t.includes(i)&&(u===S.SafeSupermanaProgress||u===S.SafeOpponentManaProgress)&&!s.manaHandoffToOpponent&&!s.hasRoundtrip&&!s.winsImmediately&&!s.attacksOpponentDrainer&&!te(s)&&s.sameTurnScoreWindowValue===0&&s.score>=0}).sort((i,s)=>{let u=o[i],p=o[s];return u?.score!==p?.score?(p?.score??-2147483648)-(u?.score??-2147483648):ae(o,i,s)})[0]}c(xA,"blackNoActionSafeProgressReentry");function NA(e,n,o,t){if(!D(t)||e.activeColor!==R.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&&I(u)===S.ManaTempo&&mn(u)&&!u.winsImmediately&&!u.attacksOpponentDrainer&&!te(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)||I(u)!==S.ManaTempo||u.manaHandoffToOpponent||u.hasRoundtrip||u.winsImmediately||u.attacksOpponentDrainer||te(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:L(a.score,u.score)<=192}).sort((s,u)=>ae(n,s,u))[0]}c(NA,"blackNoActionManaSiblingReentry");function kC(e,n,o,t,r,a,i){let s=[],u=c(p=>{p!==void 0&&!s.includes(p)&&s.push(p)},"add");return u(hm(e,o,t,a,i)),u(bm(e,n,o,t,a,i)),u(OA(n,o,r,i)),u(IA(o,t,r,i)),u(xA(e,n,o,r,i)),u(NA(n,o,r,i)),u(sp(e,n,o,r,a,i)),s}c(kC,"collectAdvisorReentries");function Cm(e,n,o,t,r,a){return t.spiritDevelopment||!(o.spiritOwnManaSetupNow||o.spiritSameTurnScoreSetupNow)||o.sameTurnScoreWindowValue>t.sameTurnScoreWindowValue||o.score>=t.score||n.activeColor===R.Black&&n.turnNumber<=2&&o.spiritOwnManaSetupNow&&!o.spiritSameTurnScoreSetupNow&&I(t)===S.ManaTempo&&!te(o)&&!te(t)&&!o.attacksOpponentDrainer&&!t.attacksOpponentDrainer&&mn(o)&&mn(t)&&A(o.score,64)>=t.score&&o.spiritSetupGain>=A(t.spiritSetupGain,48)&&o.rootRank<=t.rootRank?!0:se(fn(e,n,o,r,a),fn(e,n,t,r,a))>=0}c(Cm,"spiritSetupCompetes");function TC(e,n,o,t){let r=n.roots[o],a=n.roots[t];return r!==void 0&&a!==void 0&&Cm(e,n.game,r,a,n.perspective,n.config)}c(TC,"spiritSetupCompetesWithRoot");function RC(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&&(te(r)||r.attacksOpponentDrainer||r.sameTurnScoreWindowValue>0)&&r.score>=o})}c(RC,"riskyScoreCompetition");function Mm(e,n,o,t,r){if(!r.planner.enabled||!D(r)||!o.ownDrainerVulnerable||!Ma(o,t))return;let a=fn(e,n,o,t,r);return pa(a)?a:void 0}c(Mm,"projectedRiskyRecoveryUtility");function km(e,n){return pa(e)&&se(e,n)>=0&&Ho(e,n)}c(km,"projectedRecoveryUtilityCompetes");function PC(e){if(!D(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(PC,"safeProgressCompetition");function wC(e,n){if(!eo(n.config)||n.candidateIndices.length<2)return!1;let o=n.candidateIndices.filter(s=>{let u=n.roots[s];return u!==void 0&&F(u)&&!N(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=kn(s=>{let u=n.roots[s];return u===void 0?-2147483648:Je(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&&!N(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)})}c(wC,"followupProgressCompetition");function DA(e){return e.winsImmediately||e.attacksOpponentDrainer||e.scoresSupermanaThisTurn||e.scoresOpponentManaThisTurn||e.safeSupermanaPickupNow||e.safeOpponentManaPickupNow||e.sameTurnScoreWindowValue>0}c(DA,"hasNonSpiritScoreCompetitionSurface");function AC(e){if(!D(e.config))return!1;let n=e.candidateIndices.filter(o=>{let t=e.roots[o];return t!==void 0&&F(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&&DA(t)&&n.every(r=>{let a=e.roots[r];return a!==void 0&&(Ri(t,a)??0)>0})})}c(AC,"scoreCompetition");function EC(e,n){return e.candidateIndices.filter(o=>{let t=e.roots[o];return t!==void 0&&F(t)&&n.has(o)}).sort((o,t)=>ae(e.roots,o,t))}c(EC,"projectedSpiritIndices");function gC(e,n){if(!e.config.planner.enabled||!D(e.config)||n.size<2)return!1;let o=EC(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=Wc(i,e.perspective),p=Ma(i,e.perspective)&&s.plan.headFamily===S.DrainerSafetyRecovery;return(u||p)&&Math.abs(i.score-t.score)<=320&&(Ni(i,s,t,r)??0)>0})}c(gC,"projectionCompetition");function vC(e,n){if(!e.config.planner.enabled||!D(e.config))return!1;let o=EC(e,n).slice(0,3);if(o.length===0||o.some(r=>{let a=n.get(r);return a!==void 0&&bt(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(vC,"negativeDenyCompetition");function OC(e,n){if(!n.config.planner.enabled||!D(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=>fn(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=Mm(e,n.game,i,n.perspective,n.config);return s!==void 0&&r.every(u=>km(s,u))})}c(OC,"riskyRecoveryCompetition");function IC(e,n,o){if(!eo(n.config)||o.length===0||!o.every(s=>{let u=n.roots[s];return u!==void 0&&F(u)&&!N(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=kn(s=>{let u=n.roots[s];return u===void 0?-2147483648:Je(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&&!N(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 p=a(s),l=a(u);return p!==l?p>l?-1:1:ae(n.roots,s,u)})[0]}c(IC,"safeProgressReentryAfterSafetyPrefilter");var Ys=Object.freeze({kind:"continue"}),_A=Object.freeze({kind:"select"});function Ea(e){return e?_A:Ys}c(Ea,"competitionResult");function Wi(e){return e===void 0?Ys:{kind:"compare",order:e}}c(Wi,"comparisonResult");function Tm(e){return e.length===0?Ys:{kind:"select",indices:e}}c(Tm,"indexSelectionResult");function cp(e){return Object.freeze(e.map(n=>Object.freeze(n)))}c(cp,"freezeRules");function pp(e){let n=new Map,o=new Map,t=c(p=>{let l=`${p.perspective}:${p.candidateIndices.join(",")}`,m=n.get(l);if(m!==void 0)return m;let d=gb(e,p.roots,p.candidateIndices,p.perspective,p.config);return n.set(l,d),d},"projections"),r=c(p=>{let l=Math.max(...p.candidateIndices.map(h=>p.roots[h]?.score??-2147483648)),m=Math.max(p.config.policy.drainerSafetyScoreMargin,0),d=p.config.planner.enabled&&D(p.config)?p.candidateIndices.filter(h=>{let k=p.roots[h];return k!==void 0&&k.ownDrainerVulnerable&&!k.manaHandoffToOpponent&&!k.hasRoundtrip&&k.score+m>=l&&Ma(k,p.perspective)}):[],f=D(p.config)&&p.selectedIndices.length>0&&d.length>0?p.selectedIndices.map(h=>p.roots[h]).filter(h=>h!==void 0).map(h=>fn(e,p.game,h,p.perspective,p.config)).sort((h,k)=>so(k,h))[0]:void 0,y=Math.max(...p.selectedIndices.map(h=>p.roots[h]?.score??-2147483648)),b=[...p.selectedIndices];for(let h of d){let k=p.roots[h];if(k===void 0)continue;let M=k.attacksOpponentDrainer||k.classes.drainerSafetyRecover||k.sameTurnScoreWindowValue>0||k.spiritSameTurnScoreSetupNow||k.spiritOwnManaSetupNow||X(k);if(L(y,k.score)>(M?48:24))continue;let P=Mm(e,p.game,k,p.perspective,p.config);P===void 0||f!==void 0&&!km(P,f)||b.includes(h)||b.push(h)}let C=IC(e,p,b);return C!==void 0&&!b.includes(C)&&(b.push(C),b.sort((h,k)=>ae(p.roots,h,k))),b.filter(h=>!p.selectedIndices.includes(h))},"safetyReentries"),a=cp([{id:"competition.safe-progress",kind:co.SafeProgress,evaluate:c(p=>Ea(PC(p)),"evaluate")},{id:"competition.followup-progress",kind:co.FollowupProgress,evaluate:c(p=>Ea(wC(e,p)),"evaluate")},{id:"competition.risky-score",kind:co.RiskyScore,evaluate:c(p=>Ea(RC(p)),"evaluate")},{id:"competition.negative-deny",kind:co.NegativeDeny,evaluate:c(p=>Ea(vC(p,t(p))),"evaluate")},{id:"competition.score",kind:co.Score,evaluate:c(p=>Ea(AC(p)),"evaluate")},{id:"competition.projection",kind:co.Projection,evaluate:c(p=>Ea(gC(p,t(p))),"evaluate")},{id:"competition.risky-recovery",kind:co.RiskyRecovery,evaluate:c(p=>Ea(OC(e,p)),"evaluate")}]),i=cp([{id:"safety-reentry.recovery-and-progress",select:c(p=>Tm(r(p)),"select")}]),s=cp([{id:"final-reentry.plain-spirit-progress",select(p){let l=hm(e,p.roots,p.candidateIndices,p.perspective,p.config);return Tm(l===void 0?[]:[l])}},{id:"final-reentry.risky-recovery",select(p){let l=bm(e,p.game,p.roots,p.candidateIndices,p.perspective,p.config);return Tm(l===void 0?[]:[l])}}]),u=cp([{id:"comparison.spirit-setup",phase:Yo.SpiritSetup,compare(p){return Wi(TC(e,p,p.candidateIndex,p.incumbentIndex)?1:-1)}},{id:"comparison.projection-challenge",phase:Yo.ProjectionChallenge,compare(p){let l=p.roots[p.candidateIndex],m=p.roots[p.incumbentIndex];if(l===void 0||m===void 0)return Ys;let d=t(p);return Wi(Ni(l,d.get(p.candidateIndex),m,d.get(p.incumbentIndex)))}},{id:"comparison.projection",phase:Yo.Projection,compare(p){let l=t(p),m=l.get(p.candidateIndex),d=l.get(p.incumbentIndex);if(m===void 0&&d===void 0)return Ys;if(m===void 0)return Wi(-1);if(d===void 0)return Wi(1);let f=p.roots[p.candidateIndex],y=p.roots[p.incumbentIndex];return Wi(Br(m,d,f!==void 0&&y!==void 0&&Math.abs(f.score-y.score)<=192))}},{id:"comparison.followup-floor",phase:Yo.FollowupFloor,compare(p){return Wi(Fr(e,p.game,p.roots,p.candidateIndex,p.incumbentIndex,p.perspective,p.config,o))}}]);return Object.freeze({competitionRules:a,safetyReentryRules:i,finalReentryRules:s,comparisonRules:u})}c(pp,"buildRootPolicy");function ce(e){return!e.winsImmediately&&!e.attacksOpponentDrainer&&!e.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&!e.manaHandoffToOpponent&&!e.hasRoundtrip}c(ce,"rootIsNonTactical");function xC(e,n,o,t,r,a){if(!D(a)||n.activeColor!==R.Black||n.turnNumber!==4||n.monsMovesCount!==0||n.playerCanUseAction()||!n.playerCanMoveMana())return;let i=Te(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||I(s)!==S.ManaTempo||s.rootRank!==0||!s.ownDrainerVulnerable||!ce(s)))return Ae(o,t,(u,p)=>p!==r&&I(u)===S.ManaTempo&&u.rootRank>s.rootRank&&u.rootRank<=s.rootRank+2&&u.sameTurnScoreWindowValue===s.sameTurnScoreWindowValue&&u.ownDrainerVulnerable===s.ownDrainerVulnerable&&u.ownDrainerWalkVulnerable===s.ownDrainerWalkVulnerable&&ce(u)&&u.score>=L(s.score,96)&&u.scorePathBestSteps>s.scorePathBestSteps,(u,p)=>un(o,u,p))}c(xC,"blackTurnFourWindowManaSiblingOverride");function NC(e,n,o,t,r,a,i){if(!D(i)||n.activeColor!==R.Black||r===a||!t.includes(a))return;let s=o[r],u=o[a];if(s===void 0||u===void 0)return;let p=I(s),l=I(u),m=Te(e,n,n.activeColor),d=ce(s),f=ce(u);return n.turnNumber>=6&&n.monsMovesCount>=2&&n.playerCanUseAction()&&n.playerCanMoveMana()&&m.delta.sameTurnScoreWindowValue===0&&m.delta.opponentWindowDenyGain===0&&!m.delta.drainerAttackAvailable&&p===S.SpiritImpact&&l===S.ManaTempo&&F(s)&&!X(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&&p===S.SpiritImpact&&l===S.SpiritImpact&&d&&f&&s.spiritOwnManaSetupNow&&u.spiritOwnManaSetupNow&&!s.spiritSameTurnScoreSetupNow&&!u.spiritSameTurnScoreSetupNow&&!N(s)&&!N(u)&&Pe(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)&&p===S.ManaTempo&&l===S.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(NC,"blackBaselineAlignmentOverride");function DC(e,n,o,t,r,a){if(!D(a)||n.activeColor!==R.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=Te(e,n,n.activeColor);if(s.delta.sameTurnScoreWindowValue!==0||s.delta.opponentWindowDenyGain!==0||s.delta.drainerAttackAvailable||I(i)!==S.SpiritImpact||!F(i)||X(i)||!ce(i)||!i.ownDrainerVulnerable)return;let u=Ld(a,Be.Baseline),p;if(u.replyRisk.enabled&&(p=Di(e,n,o,t,n.activeColor,u)),p??=Fi(n,o,t,n.activeColor,u),p===void 0||p===r||!t.includes(p))return;let l=o[p];if(l===void 0||I(l)!==S.ManaTempo||!ce(l)||!l.ownDrainerVulnerable||i.ownDrainerWalkVulnerable!==l.ownDrainerWalkVulnerable||i.safeSupermanaProgressSteps!==l.safeSupermanaProgressSteps||i.safeOpponentManaProgressSteps!==l.safeOpponentManaProgressSteps||i.scorePathBestSteps!==l.scorePathBestSteps||l.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,l.game,n.activeColor,a,m);if(!(d.allowsImmediateOpponentWin||f.allowsImmediateOpponentWin||d.opponentReachesMatchPoint||f.opponentReachesMatchPoint||f.worstReplyScore<A(d.worstReplyScore,32)))return p}c(DC,"blackTurnStartGuardedBaselineManaOverride");function _C(e,n,o,t,r,a,i){if(!D(i)||n.activeColor!==R.White||n.turnNumber!==3||r===a)return;let s=o[r],u=o[a];if(s===void 0||u===void 0)return;let p=Te(e,n,n.activeColor);return n.monsMovesCount>=3&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&t.includes(a)&&p.delta.sameTurnScoreWindowValue===0&&p.delta.opponentWindowDenyGain===0&&!p.delta.drainerAttackAvailable&&I(s)===S.ManaTempo&&I(u)===S.ManaTempo&&ce(s)&&ce(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}c(_C,"whiteTurnThreeBaselineAlignmentOverride");function FC(e,n,o,t,r,a){if(!D(a)||n.activeColor!==R.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=Te(e,n,n.activeColor);if(!s.delta.drainerAttackAvailable||s.delta.sameTurnScoreWindowValue!==0||s.delta.opponentWindowDenyGain!==0||n.monsMovesCount<2||!n.playerCanUseAction()||!n.playerCanMoveMana()||I(i)!==S.SpiritImpact||!i.spiritDevelopment||i.spiritSameTurnScoreSetupNow||!i.spiritOwnManaSetupNow||!ce(i)||N(i)||i.ownDrainerVulnerable||i.ownDrainerWalkVulnerable)return;let u=o.map((p,l)=>l);return Ae(o,u,(p,l)=>l!==r&&!t.includes(l)&&I(p)===S.ManaTempo&&!p.spiritDevelopment&&!p.spiritSameTurnScoreSetupNow&&!p.spiritOwnManaSetupNow&&ce(p)&&!N(p)&&!p.ownDrainerVulnerable&&!p.ownDrainerWalkVulnerable&&p.safeSupermanaProgressSteps===i.safeSupermanaProgressSteps&&p.safeOpponentManaProgressSteps===i.safeOpponentManaProgressSteps&&p.scorePathBestSteps===i.scorePathBestSteps&&p.inputs.length>=3&&p.rootRank<=i.rootRank+2,(p,l)=>un(o,p,l))}c(FC,"whiteTurnThreeAttackBridgeEscape");function Rm(e,n,o,t,r,a){let i=n.activeColor===R.Black&&n.turnNumber===2||n.activeColor===R.White&&n.turnNumber===3;if(!D(a)||!n.playerCanMoveMana()||o.length===0||!i||!uo(e,n))return;let s=o[r];if(s===void 0)return;let u=I(s);if(!(!Sn(u,S.ManaTempo,S.SpiritImpact)||s.winsImmediately||s.attacksOpponentDrainer||s.sameTurnScoreWindowValue>0||s.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||s.manaHandoffToOpponent||s.hasRoundtrip||N(s)))return Ae(o,t,(p,l)=>l!==r&&I(p)===u&&Pe(p.inputs,s.inputs)&&!p.winsImmediately&&!p.attacksOpponentDrainer&&p.sameTurnScoreWindowValue===0&&!p.scoresSupermanaThisTurn&&!p.scoresOpponentManaThisTurn&&!p.safeSupermanaPickupNow&&!p.safeOpponentManaPickupNow&&!p.manaHandoffToOpponent&&!p.hasRoundtrip&&!N(p)&&p.spiritDevelopment===s.spiritDevelopment&&p.spiritSameTurnScoreSetupNow===s.spiritSameTurnScoreSetupNow&&p.spiritOwnManaSetupNow===s.spiritOwnManaSetupNow&&p.supermanaProgress===s.supermanaProgress&&p.opponentManaProgress===s.opponentManaProgress&&p.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&p.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps&&p.scorePathBestSteps===s.scorePathBestSteps&&p.spiritSetupGain===s.spiritSetupGain&&p.ownDrainerVulnerable===s.ownDrainerVulnerable&&p.ownDrainerWalkVulnerable===s.ownDrainerWalkVulnerable&&p.score>=A(s.score,8)&&p.rootRank<=s.rootRank+8,(p,l)=>{let m=o[p],d=o[l];return m===void 0||d===void 0?p-l:m.score!==d.score?m.score>d.score?-1:1:m.rootRank!==d.rootRank?m.rootRank>d.rootRank?-1:1:-ae(o,p,l)})}c(Rm,"earlySameLaneHigherScoreOverride");function WC(e,n,o,t,r,a){if(!D(a)||n.activeColor!==R.White||n.turnNumber!==5||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0)return;let i=Te(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||!Sn(I(u),S.SafeSupermanaProgress,S.SafeOpponentManaProgress)||N(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 Ae(o,t,(p,l)=>l!==r&&I(p)===S.SpiritImpact&&p.spiritOwnManaSetupNow&&!p.spiritSameTurnScoreSetupNow&&X(p)&&!N(p)&&!p.winsImmediately&&!p.attacksOpponentDrainer&&p.sameTurnScoreWindowValue===0&&!p.scoresSupermanaThisTurn&&!p.scoresOpponentManaThisTurn&&!p.safeSupermanaPickupNow&&!p.safeOpponentManaPickupNow&&p.manaHandoffToOpponent===u.manaHandoffToOpponent&&p.hasRoundtrip===u.hasRoundtrip&&p.ownDrainerVulnerable===u.ownDrainerVulnerable&&p.ownDrainerWalkVulnerable===u.ownDrainerWalkVulnerable&&L(u.score,p.score)<=96&&p.spiritSetupGain>=A(u.spiritSetupGain,48)&&p.safeSupermanaProgressSteps<=u.safeSupermanaProgressSteps+1&&p.safeOpponentManaProgressSteps<=u.safeOpponentManaProgressSteps+1&&p.rootRank<=u.rootRank+4,(p,l)=>un(o,p,l))}c(WC,"whiteTurnFiveWeakWindowSetupOverride");function ga(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(ga,"replyLimitForRoots");function BC(e,n,o,t,r,a,i){if(!D(i)||n.activeColor!==R.Black||n.turnNumber<6||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0)return;let s=o[r];if(s===void 0||I(s)!==S.SpiritImpact||!F(s)||!X(s)||s.winsImmediately||s.attacksOpponentDrainer||s.sameTurnScoreWindowValue>0||s.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||s.manaHandoffToOpponent||s.hasRoundtrip||N(s))return;let u=ga(t.length,i),p=Mn(e,s.game,a,i,u);if(p.allowsImmediateOpponentWin||p.opponentReachesMatchPoint)return;let l=kn(k=>{let M=o[k];return fn(e,n,M??s,a,i)}),m=kn(k=>{let M=o[k];return Mn(e,M?.game??s.game,a,i,u)},new Map([[r,p]])),d=kn(k=>{let M=o[k];return Je(e,M?.game??s.game,a,i)}),f=l(r),y=d(r),b=Te(e,n,n.activeColor),C=b.delta.sameTurnScoreWindowValue<=1&&b.delta.opponentWindowDenyGain<=1,h;for(let k of t){if(k===r)continue;let M=o[k];if(M===void 0||I(M)!==S.SpiritImpact||!M.spiritOwnManaSetupNow||M.spiritSameTurnScoreSetupNow||!X(M)||M.winsImmediately||M.attacksOpponentDrainer||M.sameTurnScoreWindowValue>0||M.scoresSupermanaThisTurn||M.scoresOpponentManaThisTurn||M.safeSupermanaPickupNow||M.safeOpponentManaPickupNow||M.manaHandoffToOpponent||M.hasRoundtrip||N(M)||!Pe(M.inputs,s.inputs)||M.supermanaProgress!==s.supermanaProgress||M.opponentManaProgress!==s.opponentManaProgress||M.ownDrainerVulnerable!==s.ownDrainerVulnerable||M.ownDrainerWalkVulnerable!==s.ownDrainerWalkVulnerable)continue;let T=l(k),P=m(k),E=d(k),O=vo(T,f)||Cn(M,s),g=C&&M.spiritSetupGain>s.spiritSetupGain&&M.score>=L(s.score,512);if(!g&&!O||P.allowsImmediateOpponentWin||P.opponentReachesMatchPoint||!g&&A(P.worstReplyScore,320)<p.worstReplyScore||!g&&A(E,32)<y)continue;if(h===void 0){h=k;continue}let x=o[h];if(x===void 0){h=k;continue}let _;if(C)_=M.score>x.score||M.score===x.score&&(M.spiritSetupGain>x.spiritSetupGain||M.spiritSetupGain===x.spiritSetupGain&&ae(o,k,h)<0);else{let U=se(T,l(h)),j=m(h),z=d(h);U>0?_=!0:U!==0?_=!1:P.worstReplyScore!==j.worstReplyScore?_=P.worstReplyScore>j.worstReplyScore:E!==z?_=E>z:M.spiritSetupGain!==x.spiritSetupGain?_=M.spiritSetupGain>x.spiritSetupGain:M.score!==x.score?_=M.score>x.score:_=ae(o,k,h)<0}_&&(h=k)}return h}c(BC,"blackSetupProgressCompetitionOverride");function LC(e,n,o,t,r,a,i){if(!D(i)||n.activeColor!==R.White||n.turnNumber!==3||n.monsMovesCount<3||o.length===0)return;let s=o[r];if(s===void 0||I(s)!==S.ManaTempo||s.ownDrainerVulnerable||s.ownDrainerWalkVulnerable||s.manaHandoffToOpponent||s.hasRoundtrip||s.winsImmediately||s.attacksOpponentDrainer||s.sameTurnScoreWindowValue>0||s.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||N(s))return;let u=Ct(e,n,s,a,i,S.ManaTempo),p=kn(f=>{let y=o[f];return y===void 0?void 0:Ct(e,n,y,a,i,S.ManaTempo)}),l,m=u,d=!1;for(let f of t){if(f===r)continue;let y=o[f];if(y===void 0)continue;let b=zs(y,s,i)&&L(s.score,y.score)<=24&&Math.abs(s.rootRank-y.rootRank)<=4&&y.rootRank<s.rootRank;if(I(y)!==S.ManaTempo||y.ownDrainerVulnerable||y.ownDrainerWalkVulnerable||y.manaHandoffToOpponent||y.hasRoundtrip||y.winsImmediately||y.attacksOpponentDrainer||y.sameTurnScoreWindowValue>0||y.scoresSupermanaThisTurn||y.scoresOpponentManaThisTurn||y.safeSupermanaPickupNow||y.safeOpponentManaPickupNow||!b&&y.score<L(s.score,96)||N(y)||y.rootRank>=s.rootRank&&!b)continue;let C=p(f);if(C===void 0)continue;let k=se(C,u)>0||mo(C,u);if(!k&&!b)continue;let M=l===void 0;if(l!==void 0){let T=o[l];if(T===void 0)M=!0;else{let P=zs(T,s,i)&&L(s.score,T.score)<=24&&Math.abs(s.rootRank-T.rootRank)<=4&&T.rootRank<s.rootRank;if(k!==d)M=k;else if(k){let E=se(C,m);M=E>0||E===0&&ae(o,f,l)<0}else b&&P?M=y.rootRank<T.rootRank||y.rootRank===T.rootRank&&ae(o,f,l)<0:M=b}}M&&(l=f,m=C,d=k)}return l}c(LC,"whiteManaCompetitionOverride");function GC(e,n,o,t,r,a){if(!D(a)||n.activeColor!==R.White||n.turnNumber<5||n.monsMovesCount!==0||n.playerCanUseAction()||!n.playerCanMoveMana()||!uo(e,n))return;let i=o[r];if(!(i===void 0||!Sn(I(i),S.SafeSupermanaProgress,S.SafeOpponentManaProgress)||!i.ownDrainerVulnerable||!ce(i)||i.sameTurnScoreWindowValue>0))return Ae(o,t,(s,u)=>u!==r&&I(s)===S.ManaTempo&&!N(s)&&!s.ownDrainerVulnerable&&!s.ownDrainerWalkVulnerable&&ce(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))}c(GC,"whiteNoActionSafeProgressManaOverride");function Tt(e){return I(e)===S.ManaTempo&&e.sameTurnScoreWindowValue>0&&e.sameTurnScoreWindowValue<=1&&!e.winsImmediately&&!e.attacksOpponentDrainer&&!e.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&!e.manaHandoffToOpponent&&!e.hasRoundtrip}c(Tt,"isNonConcreteManaWindowRoot");function FA(e,n,o,t){return D(t)&&e.activeColor===R.White&&e.turnNumber>=5&&e.monsMovesCount===0&&e.playerCanUseAction()&&e.playerCanMoveMana()&&I(n)===S.SpiritImpact&&!n.spiritSameTurnScoreSetupNow&&!n.spiritOwnManaSetupNow&&X(n)&&ce(n)&&n.sameTurnScoreWindowValue===0&&Tt(o)&&n.ownDrainerVulnerable===o.ownDrainerVulnerable&&n.ownDrainerWalkVulnerable===o.ownDrainerWalkVulnerable}c(FA,"isWhiteSpiritProgressWindowPair");function VC(e,n,o,t,r,a,i){if(!D(i)||n.activeColor!==R.White||n.turnNumber<5||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0)return;let s=o[r];if(s===void 0||!Tt(s))return;let u=Te(e,n,n.activeColor),p=u.delta.sameTurnScoreWindowValue<=1&&u.delta.opponentWindowDenyGain<=1,l=ga(t.length,i),m=Mn(e,s.game,a,i,l);if(m.allowsImmediateOpponentWin||m.opponentReachesMatchPoint)return;let d=fn(e,n,s,a,i),f=Je(e,s.game,a,i),y=kn(h=>{let k=o[h];return k===void 0?void 0:Mn(e,k.game,a,i,l)},new Map([[r,m]])),b=kn(h=>{let k=o[h];return k===void 0?void 0:Je(e,k.game,a,i)},new Map([[r,f]])),C;for(let h of t){if(h===r)continue;let k=o[h];if(k===void 0||!FA(n,k,s,i)||k.rootRank>s.rootRank+8)continue;let M=y(h),T=b(h);if(M===void 0||T===void 0)continue;let P=Cn(k,s),E=p&&P&&k.score>=L(s.score,32),O=vo(fn(e,n,k,a,i),d)||P;if(!(M.allowsImmediateOpponentWin||M.opponentReachesMatchPoint||!E&&!O||!E&&A(M.worstReplyScore,192)<m.worstReplyScore||!E&&A(T,32)<f))if(C===void 0)C=h;else{let g=y(C),x=b(C);(g===void 0||x===void 0||T>x||T===x&&M.worstReplyScore>g.worstReplyScore||T===x&&M.worstReplyScore===g.worstReplyScore&&ae(o,h,C)<0)&&(C=h)}}return C}c(VC,"whiteWindowProgressCompetitionOverride");function HC(e,n,o,t,r){if(!D(r)||e.activeColor!==R.White||e.turnNumber<5||e.monsMovesCount!==0||!e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||I(a)!==S.SpiritImpact||!F(a)||!X(a)||!ce(a)||a.sameTurnScoreWindowValue>0||N(a)))return Ae(n,o,(i,s)=>s!==t&&I(i)===S.ManaTempo&&!i.spiritDevelopment&&!i.spiritSameTurnScoreSetupNow&&!i.spiritOwnManaSetupNow&&ce(i)&&i.sameTurnScoreWindowValue===0&&!N(i)&&Pe(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],p=n[s];return u===void 0||p===void 0?i-s:u.score!==p.score?u.score>p.score?-1:1:ae(n,i,s)})}c(HC,"whiteActionManaClusterOverride");function UC(e,n,o,t,r,a,i){if(!D(i)||n.activeColor!==R.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||I(s)!==S.SpiritImpact||!s.spiritOwnManaSetupNow||s.spiritSameTurnScoreSetupNow||!ce(s)||s.sameTurnScoreWindowValue>0||N(s))return;let u=fn(e,n,s,a,i);return Ae(o,o.map((p,l)=>l),(p,l)=>l===r||I(p)!==S.ManaTempo||p.spiritDevelopment||p.spiritSameTurnScoreSetupNow||p.spiritOwnManaSetupNow||p.ownDrainerVulnerable||p.ownDrainerWalkVulnerable||!ce(p)||p.sameTurnScoreWindowValue!==0||N(p)||p.rootRank>s.rootRank+2||p.safeSupermanaProgressSteps>s.safeSupermanaProgressSteps||p.safeOpponentManaProgressSteps>s.safeOpponentManaProgressSteps||p.scorePathBestSteps>s.scorePathBestSteps?!1:se(fn(e,n,p,a,i),u)>0||p.score>=A(s.score,512),(p,l)=>ae(o,p,l))}c(UC,"whiteFollowupManaOverride");function lp(e){return e.activeColor===R.Black&&e.turnNumber>=8&&e.monsMovesCount===0&&e.playerCanUseAction()&&e.playerCanMoveMana()}c(lp,"isLateBlackActionManaTurnStart");function WA(e,n,o,t){return D(t)&&lp(e)&&I(n)===S.SpiritImpact&&n.spiritDevelopment&&!n.spiritSameTurnScoreSetupNow&&!n.spiritOwnManaSetupNow&&n.sameTurnScoreWindowValue===0&&ce(n)&&!N(n)&&I(o)===S.ManaTempo&&o.sameTurnScoreWindowValue===0&&ce(o)&&!N(o)&&Pe(n.inputs,o.inputs)}c(WA,"isLateBlackSpiritFollowupManaPair");function jC(e,n,o,t,r){if(!D(r)||!lp(e)||n.length===0)return;let a=n[t];if(!(a===void 0||I(a)!==S.ManaTempo))return Ae(n,o,(i,s)=>s!==t&&WA(e,i,a,r)&&L(a.score,i.score)<=512&&i.rootRank<a.rootRank&&Math.abs(a.rootRank-i.rootRank)<=16,(i,s)=>un(n,i,s))}c(jC,"blackLateFollowupCompetitionOverride");function KC(e,n,o,t,r,a){if(!D(a)||!lp(n)||t.length===0||o.length===0||!uo(e,n))return;let i=o[r];if(!(i===void 0||I(i)!==S.ManaTempo||i.spiritDevelopment||i.spiritSameTurnScoreSetupNow||i.spiritOwnManaSetupNow||X(i)||!ce(i)||i.sameTurnScoreWindowValue>0||N(i)||i.ownDrainerVulnerable||i.ownDrainerWalkVulnerable))return Ae(o,t,(s,u)=>u!==r&&I(s)===S.SpiritImpact&&s.spiritOwnManaSetupNow&&!s.spiritSameTurnScoreSetupNow&&!X(s)&&ce(s)&&s.sameTurnScoreWindowValue===0&&!N(s)&&!s.ownDrainerVulnerable&&!s.ownDrainerWalkVulnerable&&s.spiritSetupGain>=A(i.spiritSetupGain,64)&&L(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 p=o[s],l=o[u];return p===void 0||l===void 0?s-u:p.rootRank!==l.rootRank?p.rootRank<l.rootRank?-1:1:p.spiritSetupGain!==l.spiritSetupGain?p.spiritSetupGain>l.spiritSetupGain?-1:1:ae(o,s,u)})}c(KC,"blackLateReplyRiskSetupOverride");function qC(e,n,o,t,r,a,i){if(!D(i)||!lp(n)||t.length===0||o.length===0)return;let s=Te(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 p=o[r];if(p===void 0)return;let l=I(p);if(!Sn(l,S.SafeSupermanaProgress,S.SafeOpponentManaProgress)||!X(p)||p.spiritDevelopment||p.spiritSameTurnScoreSetupNow||p.spiritOwnManaSetupNow||!ce(p)||p.sameTurnScoreWindowValue>0||N(p)||p.ownDrainerVulnerable||p.ownDrainerWalkVulnerable)return;let m=fn(e,n,p,a,i);return Ae(o,t,(d,f)=>f!==r&&I(d)===S.SpiritImpact&&d.spiritOwnManaSetupNow&&!d.spiritSameTurnScoreSetupNow&&X(d)&&ce(d)&&d.sameTurnScoreWindowValue===0&&d.manaHandoffToOpponent===p.manaHandoffToOpponent&&d.hasRoundtrip===p.hasRoundtrip&&!N(d)&&d.ownDrainerVulnerable===p.ownDrainerVulnerable&&d.ownDrainerWalkVulnerable===p.ownDrainerWalkVulnerable&&d.supermanaProgress===p.supermanaProgress&&d.opponentManaProgress===p.opponentManaProgress&&vo(fn(e,n,d,a,i),m)&&L(p.score,d.score)<=32&&d.spiritSetupGain>=A(p.spiritSetupGain,64)&&d.rootRank<=p.rootRank+4,(d,f)=>{let y=o[d],b=o[f];return y===void 0||b===void 0?d-f:y.score!==b.score?y.score>b.score?-1:1:y.spiritSetupGain!==b.spiritSetupGain?y.spiritSetupGain>b.spiritSetupGain?-1:1:y.rootRank!==b.rootRank?y.rootRank<b.rootRank?-1:1:ae(o,d,f)})}c(qC,"blackLateWeakWindowSafeProgressSetupOverride");function BA(e,n,o,t){return D(t)&&e.activeColor===R.Black&&e.turnNumber<=4&&I(n)===S.SpiritImpact&&!n.spiritSameTurnScoreSetupNow&&!n.spiritOwnManaSetupNow&&X(n)&&!n.winsImmediately&&!n.attacksOpponentDrainer&&!n.scoresSupermanaThisTurn&&!n.scoresOpponentManaThisTurn&&!n.safeSupermanaPickupNow&&!n.safeOpponentManaPickupNow&&!n.manaHandoffToOpponent&&!n.hasRoundtrip&&Tt(o)&&n.ownDrainerVulnerable===o.ownDrainerVulnerable&&n.ownDrainerWalkVulnerable===o.ownDrainerWalkVulnerable}c(BA,"isBlackSpiritProgressWindowPair");function zC(e,n,o,t,r,a,i,s){if(!D(s)||n.activeColor!==R.Black||o.length===0)return;let u=o[a];if(u===void 0||I(u)!==S.ManaTempo||a>1&&!(n.turnNumber<=2&&n.playerCanUseAction()&&n.playerCanMoveMana()))return;let p=Tt(u);if(u.winsImmediately||u.attacksOpponentDrainer||u.sameTurnScoreWindowValue>0&&!p||u.scoresSupermanaThisTurn||u.scoresOpponentManaThisTurn||u.safeSupermanaPickupNow||u.safeOpponentManaPickupNow)return;let l=Ct(e,n,u,i,s,S.ManaTempo),m=N(u),d=X(u),f=ga(t.length,s),y=kn(M=>{let T=o[M];return T===void 0?void 0:Mn(e,T.game,i,s,f)}),b=new Map,C=kn(M=>{let T=o[M];return T===void 0?void 0:Je(e,T.game,i,s)},b),h=[];for(let M of r){if(M===a)continue;let T=o[M];if(T===void 0)continue;let P=I(T),E=T.spiritOwnManaSetupNow||T.spiritSameTurnScoreSetupNow,O=P===S.SpiritImpact&&!E&&X(T),x=Sn(P,S.SafeSupermanaProgress,S.SafeOpponentManaProgress)&&!p,_=E&&!p&&n.turnNumber<=4;if(!_&&!x&&!O)continue;let U=fn(e,n,T,i,s),j=X(T),z=Cn(T,u)||j&&!d;if(P===S.SpiritImpact&&!m&&!N(T)&&I(u)===S.ManaTempo&&!d&&!u.spiritDevelopment&&!u.spiritSameTurnScoreSetupNow&&!u.spiritOwnManaSetupNow&&T.spiritDevelopment&&!T.spiritSameTurnScoreSetupNow&&!T.spiritOwnManaSetupNow&&j&&!T.winsImmediately&&!T.attacksOpponentDrainer&&!T.scoresSupermanaThisTurn&&!T.scoresOpponentManaThisTurn&&!T.safeSupermanaPickupNow&&!T.safeOpponentManaPickupNow&&!T.manaHandoffToOpponent&&!T.hasRoundtrip&&T.sameTurnScoreWindowValue===0&&T.score<=u.score)continue;let W=x&&n.turnNumber<=6&&u.score<0&&T.score>=0&&z,re=!1;if(O&&p&&BA(n,T,u,s)&&T.rootRank<=u.rootRank+8){let Y=y(M),Ie=y(a),ie=C(M),ye=C(a);re=Y!==void 0&&Ie!==void 0&&ie!==void 0&&ye!==void 0&&!Y.allowsImmediateOpponentWin&&!Ie.allowsImmediateOpponentWin&&!Y.opponentReachesMatchPoint&&!Ie.opponentReachesMatchPoint&&Cn(T,u)&&A(Y.worstReplyScore,192)>=Ie.worstReplyScore&&A(ie,32)>=ye}if(!vo(U,l)&&!W&&!re||N(T)&&!m&&!_&&!W&&!re)continue;let q=_&&Cm(e,n,T,u,i,s);(z||q||re)&&h.push(M)}return h.map(M=>{let T=o[M];if(T===void 0||!T.spiritOwnManaSetupNow||T.spiritSameTurnScoreSetupNow)return M;let P=y(M);return P===void 0?M:t.filter(O=>{let g=o[O];if(O===M||g===void 0||!Oi(n,g,T,s))return!1;let x=y(O);return x!==void 0&&(Jc(e,n,o,O,x,M,P,i,s,b)??0)>0}).sort((O,g)=>{let x=o[O],_=o[g],U=y(O),j=y(g);if(x===void 0||_===void 0||U===void 0||j===void 0)return O-g;if(U.worstReplyScore!==j.worstReplyScore)return U.worstReplyScore>j.worstReplyScore?-1:1;let z=C(O)??-2147483648,J=C(g)??-2147483648;return z!==J?z>J?-1:1:x.score!==_.score?x.score>_.score?-1:1:ae(o,O,g)})[0]??M}).sort((M,T)=>ae(o,M,T))[0]}c(zC,"blackFamilyCompetitionOverride");function $C(e,n,o,t,r){if(!D(r)||e.activeColor!==R.Black||e.turnNumber<8||e.monsMovesCount===0||e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(a===void 0||I(a)!==S.ManaTempo||!Tt(a)||!a.ownDrainerVulnerable||a.ownDrainerWalkVulnerable)return;let i=X(a);return Ae(n,o,(s,u)=>{let p=X(s),l=Cn(s,a)||p&&!i;return u!==t&&I(s)===S.ManaTempo&&Pe(s.inputs,a.inputs)&&s.sameTurnScoreWindowValue===0&&!s.ownDrainerVulnerable&&!s.ownDrainerWalkVulnerable&&ce(s)&&!N(s)&&(a.rootRank>0||l)&&L(a.score,s.score)<=32&&s.rootRank<=a.rootRank+2},(s,u)=>un(n,s,u))}c($C,"blackLateWindowManaSafetyOverride");function YC(e,n,o,t,r){if(!D(r)||n.activeColor!==R.Black||n.turnNumber<8||n.monsMovesCount<3||n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0)return;let a=Te(e,n,n.activeColor);if(a.delta.sameTurnScoreWindowValue===0&&a.delta.opponentWindowDenyGain===0)return;let i=o[t];if(!(i===void 0||I(i)!==S.ManaTempo||i.sameTurnScoreWindowValue!==0||!ce(i)||N(i)))return Ae(o,o.map((s,u)=>u),(s,u)=>u!==t&&I(s)===S.ManaTempo&&Tt(s)&&s.rootRank===0&&s.ownDrainerVulnerable&&!s.ownDrainerWalkVulnerable&&L(i.score,s.score)<=256,(s,u)=>ae(o,s,u))}c(YC,"blackLateWindowCompetitionOverride");function XC(e,n,o,t,r){if(!D(r)||e.activeColor!==R.Black||e.turnNumber<12||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||I(a)!==S.DrainerSafetyRecovery||!a.spiritDevelopment||!X(a)||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.sameTurnScoreWindowValue>0||!ce(a)||N(a)||a.inputs.length<3))return Ae(n,o,(i,s)=>s!==t&&I(i)===S.SpiritImpact&&i.spiritDevelopment&&!i.spiritSameTurnScoreSetupNow&&!i.spiritOwnManaSetupNow&&X(i)&&ce(i)&&i.sameTurnScoreWindowValue===0&&i.inputs.length>=3&&Ai(i.inputs,a.inputs,0)&&Ai(i.inputs,a.inputs,1)&&L(a.score,i.score)<=1024&&i.rootRank<=a.rootRank+2&&Cn(i,a),(i,s)=>ae(n,i,s))}c(XC,"blackLateRecoveryProgressCompetitionOverride");function QC(e,n,o,t,r){if(!D(r)||e.activeColor!==R.Black||e.turnNumber>2||!e.playerCanUseAction()||!e.playerCanMoveMana())return;let a=n[t];if(!(a===void 0||I(a)!==S.SpiritImpact||!a.spiritOwnManaSetupNow||a.spiritSameTurnScoreSetupNow||a.winsImmediately||a.attacksOpponentDrainer||a.scoresSupermanaThisTurn||a.scoresOpponentManaThisTurn||a.safeSupermanaPickupNow||a.safeOpponentManaPickupNow||a.sameTurnScoreWindowValue>0||a.manaHandoffToOpponent||a.hasRoundtrip||N(a)||a.inputs.length<2))return Ae(n,o,(i,s)=>s!==t&&I(i)===S.SpiritImpact&&i.spiritOwnManaSetupNow&&!i.spiritSameTurnScoreSetupNow&&!i.winsImmediately&&!i.attacksOpponentDrainer&&!i.scoresSupermanaThisTurn&&!i.scoresOpponentManaThisTurn&&!i.safeSupermanaPickupNow&&!i.safeOpponentManaPickupNow&&i.sameTurnScoreWindowValue===0&&!i.manaHandoffToOpponent&&!i.hasRoundtrip&&!N(i)&&i.inputs.length>=2&&Ai(i.inputs,a.inputs,0)&&Ai(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(QC,"blackOpeningSetupSiblingOverride");function ZC(e,n,o,t,r,a){if(!D(a)||n.activeColor!==R.Black||n.turnNumber!==2||n.monsMovesCount<2||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0||!uo(e,n))return;let i=o[r];if(!(i===void 0||I(i)!==S.SpiritImpact||!F(i)||X(i)||i.spiritSameTurnScoreSetupNow||i.spiritOwnManaSetupNow||i.winsImmediately||i.attacksOpponentDrainer||i.sameTurnScoreWindowValue>0||i.scoresSupermanaThisTurn||i.scoresOpponentManaThisTurn||i.safeSupermanaPickupNow||i.safeOpponentManaPickupNow||i.manaHandoffToOpponent||i.hasRoundtrip||N(i)))return Ae(o,t,(s,u)=>u!==r&&I(s)===S.ManaTempo&&!s.spiritDevelopment&&!s.spiritSameTurnScoreSetupNow&&!s.spiritOwnManaSetupNow&&!X(s)&&!s.winsImmediately&&!s.attacksOpponentDrainer&&s.sameTurnScoreWindowValue===0&&!s.scoresSupermanaThisTurn&&!s.scoresOpponentManaThisTurn&&!s.safeSupermanaPickupNow&&!s.safeOpponentManaPickupNow&&!s.manaHandoffToOpponent&&!s.hasRoundtrip&&!N(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)=>Vd(o,s,u))}c(ZC,"blackEarlySafeManaFollowupOverride");function JC(e,n,o,t,r,a){if(!D(a)||n.activeColor!==R.Black||n.turnNumber!==2||n.monsMovesCount>1||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0||!uo(e,n))return;let i=o[r];if(!(i===void 0||I(i)!==S.ManaTempo||X(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||N(i)))return Ae(o,t,(s,u)=>u!==r&&I(s)===S.SpiritImpact&&F(s)&&!X(s)&&!s.spiritSameTurnScoreSetupNow&&!s.spiritOwnManaSetupNow&&!s.winsImmediately&&!s.attacksOpponentDrainer&&s.sameTurnScoreWindowValue===0&&!s.scoresSupermanaThisTurn&&!s.scoresOpponentManaThisTurn&&!s.safeSupermanaPickupNow&&!s.safeOpponentManaPickupNow&&!s.manaHandoffToOpponent&&!s.hasRoundtrip&&!N(s)&&s.rootRank>i.rootRank&&s.rootRank<=i.rootRank+4&&s.score>=L(i.score,32)&&s.spiritSetupGain>=A(i.spiritSetupGain,16)&&s.scorePathBestSteps>=i.scorePathBestSteps&&s.ownDrainerVulnerable===i.ownDrainerVulnerable&&s.ownDrainerWalkVulnerable===i.ownDrainerWalkVulnerable,(s,u)=>{let p=o[s],l=o[u];return p===void 0||l===void 0?s-u:p.score!==l.score?p.score>l.score?-1:1:p.spiritSetupGain!==l.spiritSetupGain?p.spiritSetupGain>l.spiritSetupGain?-1:1:p.rootRank!==l.rootRank?p.rootRank<l.rootRank?-1:1:ae(o,s,u)})}c(JC,"blackEarlyPlainSpiritFollowupOverride");function eM(e,n,o,t,r,a){if(!D(a)||n.activeColor!==R.Black||n.turnNumber!==4||n.monsMovesCount===0||n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0||!uo(e,n))return;let i=o[r];if(!(i===void 0||!Sn(I(i),S.ManaTempo,S.SafeSupermanaProgress,S.SafeOpponentManaProgress)||!i.ownDrainerVulnerable||i.winsImmediately||i.attacksOpponentDrainer||i.sameTurnScoreWindowValue>0||i.scoresSupermanaThisTurn||i.scoresOpponentManaThisTurn||i.safeSupermanaPickupNow||i.safeOpponentManaPickupNow||i.manaHandoffToOpponent||i.hasRoundtrip))return Ae(o,t,(s,u)=>u!==r&&I(s)===S.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)=>Vd(o,s,u))}c(eM,"blackTurnFourVulnerableProgressManaOverride");function nM(e,n,o,t,r,a){if(!D(a)||n.activeColor!==R.Black||n.turnNumber!==6||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0)return;let i=Te(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||!Sn(I(s),S.SafeSupermanaProgress,S.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 Ae(o,t,(u,p)=>p!==r&&I(u)===S.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&&L(s.score,u.score)<=160&&u.rootRank<=s.rootRank+4,(u,p)=>un(o,u,p))}c(nM,"blackTurnSixAttackVulnerableProgressManaOverride");function oM(e,n,o,t,r,a){if(!D(a)||n.activeColor!==R.Black||n.turnNumber!==4||n.monsMovesCount===0||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0||!uo(e,n))return;let i=o[r];if(!(i===void 0||I(i)!==S.SpiritImpact||!F(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 Ae(o,t,(s,u)=>u!==r&&I(s)===S.SpiritImpact&&s.spiritOwnManaSetupNow&&!s.spiritSameTurnScoreSetupNow&&!s.winsImmediately&&!s.attacksOpponentDrainer&&s.sameTurnScoreWindowValue===0&&!s.scoresSupermanaThisTurn&&!s.scoresOpponentManaThisTurn&&!s.safeSupermanaPickupNow&&!s.safeOpponentManaPickupNow&&!s.manaHandoffToOpponent&&!s.hasRoundtrip&&Pe(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))}c(oM,"blackTurnFourSetupClusterOverride");function tM(e,n,o,t,r,a){if(!D(a)||n.activeColor!==R.Black||n.turnNumber<6||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0||!uo(e,n))return;let i=o[r];if(!(i===void 0||I(i)!==S.SpiritImpact||!F(i)||X(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 Ae(o,t,(s,u)=>u!==r&&I(s)===S.SpiritImpact&&s.spiritOwnManaSetupNow&&!s.spiritSameTurnScoreSetupNow&&!X(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&&Pe(s.inputs,i.inputs)&&s.spiritSetupGain>=A(i.spiritSetupGain,32)&&s.score>=L(i.score,96)&&s.rootRank<=i.rootRank+4,(s,u)=>{let p=o[s],l=o[u];return p===void 0||l===void 0?s-u:p.score!==l.score?p.score>l.score?-1:1:p.spiritSetupGain!==l.spiritSetupGain?p.spiritSetupGain>l.spiritSetupGain?-1:1:p.rootRank!==l.rootRank?p.rootRank<l.rootRank?-1:1:ae(o,s,u)})}c(tM,"blackPlainSpiritSetupCompetitionOverride");function rM(e,n,o,t,r,a){if(!D(a)||n.activeColor!==R.Black||n.turnNumber<6||n.monsMovesCount!==0||n.playerCanUseAction()||!n.playerCanMoveMana())return;let i=Te(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||I(s)!==S.ManaTempo||s.winsImmediately||s.attacksOpponentDrainer||s.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||s.sameTurnScoreWindowValue>0||s.manaHandoffToOpponent||s.hasRoundtrip||s.score<0))return Ae(o,t,(u,p)=>p!==r&&Sn(I(u),S.SafeSupermanaProgress,S.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,p)=>{let l=o[u],m=o[p];return l===void 0||m===void 0?u-p:l.score!==m.score?l.score>m.score?-1:1:l.rootRank!==m.rootRank?l.rootRank<m.rootRank?-1:1:ae(o,u,p)})}c(rM,"blackNoActionProgressOverride");function aM(e,n,o,t,r){if(!D(r)||e.activeColor!==R.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(!(I(a)!==S.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 Ae(n,o,(s,u)=>u===t||I(s)!==S.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:L(a.score,s.score)<=192,(s,u)=>un(n,s,u))}c(aM,"blackNoActionManaSiblingOverride");function iM(e,n,o,t,r,a){if(!D(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=Te(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||!Tt(s)||!s.ownDrainerVulnerable||s.ownDrainerWalkVulnerable||s.spiritDevelopment||s.spiritSameTurnScoreSetupNow||s.spiritOwnManaSetupNow))return Ae(o,o.map((u,p)=>p),(u,p)=>p!==t&&I(u)===S.DrainerSafetyRecovery&&u.classes.drainerSafetyRecover&&!N(u)&&!u.ownDrainerVulnerable&&!u.ownDrainerWalkVulnerable&&!u.spiritDevelopment&&!u.spiritSameTurnScoreSetupNow&&!u.spiritOwnManaSetupNow&&ce(u)&&u.sameTurnScoreWindowValue===0&&Pe(u.inputs,s.inputs)&&(!r.requireSameProgressSteps||u.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps)&&u.rootRank<=s.rootRank&&u.scorePathBestSteps>s.scorePathBestSteps,(u,p)=>un(o,u,p))}c(iM,"noActionRecoveryOverride");function sM(e,n,o,t,r){return iM(e,n,o,t,{color:R.White,turnNumber:3,monsMoves:{kind:"exact",count:0},rejectDrainerAttack:!1,requireSameProgressSteps:!1},r)}c(sM,"whiteTurnThreeNoActionRecoveryOverride");function uM(e,n,o,t,r){return iM(e,n,o,t,{color:R.Black,turnNumber:4,monsMoves:{kind:"minimum",count:1},rejectDrainerAttack:!0,requireSameProgressSteps:!0},r)}c(uM,"blackTurnFourWeakWindowRecoveryOverride");function cM(e,n,o,t,r){if(!D(r)||e.activeColor!==R.White||e.turnNumber!==3||e.monsMovesCount!==1||!e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||!Sn(I(a),S.SafeSupermanaProgress,S.SafeOpponentManaProgress)||N(a)||!ce(a)||a.spiritDevelopment||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.sameTurnScoreWindowValue>0))return Ae(n,o,(i,s)=>{let u=L(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&&I(i)===S.SpiritImpact&&i.spiritOwnManaSetupNow&&!i.spiritSameTurnScoreSetupNow&&X(i)&&!N(i)&&ce(i)&&i.sameTurnScoreWindowValue===0&&i.manaHandoffToOpponent===a.manaHandoffToOpponent&&i.hasRoundtrip===a.hasRoundtrip&&i.ownDrainerVulnerable===a.ownDrainerVulnerable&&i.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&(L(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],p=n[s];return u===void 0||p===void 0?i-s:u.score!==p.score?u.score>p.score?-1:1:u.spiritSetupGain!==p.spiritSetupGain?u.spiritSetupGain<p.spiritSetupGain?-1:1:u.rootRank!==p.rootRank?u.rootRank<p.rootRank?-1:1:ae(n,i,s)})}c(cM,"whiteEarlySafeProgressSetupCompetitionOverride");function pM(e,n,o,t,r,a){if(!D(a)||n.activeColor!==R.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||I(i)!==S.SpiritImpact||!i.spiritOwnManaSetupNow||i.spiritSameTurnScoreSetupNow||!ce(i)||i.sameTurnScoreWindowValue>0||N(i)||Te(e,n,n.activeColor).delta.sameTurnScoreWindowValue===0))return Ae(o,o.map((u,p)=>p),(u,p)=>p!==r&&I(u)===S.ManaTempo&&!u.ownDrainerVulnerable&&!u.ownDrainerWalkVulnerable&&!u.spiritDevelopment&&!u.spiritSameTurnScoreSetupNow&&!u.spiritOwnManaSetupNow&&u.sameTurnScoreWindowValue===0&&ce(u)&&!N(u),(u,p)=>ae(o,u,p))}c(pM,"whiteEarlySetupCompetitionOverride");function LA(e,n,o,t){return D(t)&&e.activeColor===R.White&&e.turnNumber>=8&&e.monsMovesCount===0&&e.playerCanUseAction()&&e.playerCanMoveMana()&&I(n)===S.SpiritImpact&&n.spiritDevelopment&&!n.spiritSameTurnScoreSetupNow&&n.sameTurnScoreWindowValue===0&&ce(n)&&!N(n)&&Sn(I(o),S.SafeSupermanaProgress,S.ManaTempo)&&!o.spiritDevelopment&&o.sameTurnScoreWindowValue===0&&ce(o)&&!N(o)&&Pe(n.inputs,o.inputs)}c(LA,"isLateWhiteSpiritFollowupSafeProgressPair");function lM(e,n,o,t){if(!D(t)||e.activeColor!==R.White||e.turnNumber<8||e.monsMovesCount!==0||!e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let r=n[o];if(r===void 0||!Sn(I(r),S.SafeSupermanaProgress,S.ManaTempo))return;let a=n.map((s,u)=>u).filter(s=>{let u=n[s];return s!==o&&u!==void 0&&LA(e,u,r,t)&&L(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 p=n[s],l=n[u];return p===void 0||l===void 0?s-u:i&&p.spiritOwnManaSetupNow!==l.spiritOwnManaSetupNow?p.spiritOwnManaSetupNow?-1:1:i&&p.spiritSetupGain!==l.spiritSetupGain?p.spiritSetupGain>l.spiritSetupGain?-1:1:un(n,s,u)})[0]}c(lM,"whiteLateFollowupCompetitionOverride");function dM(e,n,o,t,r,a,i){if(!D(i)||n.activeColor!==R.White||n.turnNumber<5||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0)return;let s=o[r];if(s===void 0||I(s)!==S.SpiritImpact||!F(s)||!X(s)||!ce(s)||s.sameTurnScoreWindowValue>0||N(s))return;let u=ga(t.length,i),p=Mn(e,s.game,a,i,u);if(p.allowsImmediateOpponentWin||p.opponentReachesMatchPoint)return;let l=kn(C=>{let h=o[C];return h===void 0?void 0:fn(e,n,h,a,i)}),m=kn(C=>{let h=o[C];return h===void 0?void 0:Mn(e,h.game,a,i,u)},new Map([[r,p]])),d=kn(C=>{let h=o[C];return h===void 0?void 0:Je(e,h.game,a,i)}),f=l(r),y=d(r);if(f===void 0||y===void 0)return;let b;for(let C of t){if(C===r)continue;let h=o[C];if(h===void 0||I(h)!==S.SpiritImpact||!h.spiritOwnManaSetupNow||h.spiritSameTurnScoreSetupNow||!X(h)||!mn(h)||!ce(h)||h.sameTurnScoreWindowValue>0||!Pe(h.inputs,s.inputs)||h.ownDrainerVulnerable!==s.ownDrainerVulnerable||h.ownDrainerWalkVulnerable!==s.ownDrainerWalkVulnerable)continue;let k=h.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&h.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps&&h.manaHandoffToOpponent===s.manaHandoffToOpponent&&h.hasRoundtrip===s.hasRoundtrip&&L(s.score,h.score)<=64&&h.spiritSetupGain>=A(s.spiritSetupGain,32)&&h.rootRank<=s.rootRank+2,M=l(C),T=m(C),P=d(C);if(M===void 0||T===void 0||P===void 0)continue;let E=!T.allowsImmediateOpponentWin&&!T.opponentReachesMatchPoint&&L(s.score,h.score)<=128&&A(T.worstReplyScore,320)>=p.worstReplyScore&&A(P,32)>=y&&h.rootRank<=s.rootRank+4&&(vo(M,f)||Cn(h,s));if(!k&&!E)continue;if(b===void 0){b=C;continue}let O=o[b],g=l(b),x=m(b),_=d(b);if(O===void 0||g===void 0||x===void 0||_===void 0){b=C;continue}let U=se(M,g);(U>0||U>=0&&P>_||U>=0&&P===_&&T.worstReplyScore>x.worstReplyScore||P===_&&T.worstReplyScore===x.worstReplyScore&&h.spiritSetupGain>O.spiritSetupGain||P===_&&T.worstReplyScore===x.worstReplyScore&&h.spiritSetupGain===O.spiritSetupGain&&ae(o,C,b)<0)&&(b=C)}return b}c(dM,"whiteSetupProgressCompetitionOverride");function mM(e,n,o,t,r){if(!D(r)||e.activeColor!==R.White||e.turnNumber!==3||e.monsMovesCount!==1||!e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||I(a)!==S.SpiritImpact||!F(a)||!X(a)||!ce(a)||a.sameTurnScoreWindowValue>0||N(a)))return Ae(n,o,(i,s)=>s!==t&&I(i)===S.SpiritImpact&&i.spiritOwnManaSetupNow&&!i.spiritSameTurnScoreSetupNow&&X(i)&&ce(i)&&i.sameTurnScoreWindowValue===0&&!N(i)&&Pe(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&&L(a.score,i.score)<=64&&i.spiritSetupGain>=A(a.spiritSetupGain,32)&&i.rootRank<=a.rootRank+4,(i,s)=>{let u=n[i],p=n[s];return u===void 0||p===void 0?i-s:u.score!==p.score?u.score>p.score?-1:1:u.rootRank!==p.rootRank?u.rootRank<p.rootRank?-1:1:ae(n,i,s)})}c(mM,"whiteEarlyFollowupSetupCompetitionOverride");function fM(e,n,o,t,r){if(!D(r)||n.activeColor!==R.White||n.turnNumber!==3||n.monsMovesCount!==1||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0||!uo(e,n))return;let a=o[t];if(!(a===void 0||I(a)!==S.SpiritImpact||!a.spiritOwnManaSetupNow||a.spiritSameTurnScoreSetupNow||!X(a)||!ce(a)||a.sameTurnScoreWindowValue>0||N(a)))return Ae(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&&I(i)===S.SpiritImpact&&i.spiritOwnManaSetupNow&&!i.spiritSameTurnScoreSetupNow&&X(i)&&ce(i)&&i.sameTurnScoreWindowValue===0&&!N(i)&&Pe(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>=L(a.score,64)&&i.rootRank<=a.rootRank+8&&u},(i,s)=>{let u=o[i],p=o[s];if(u===void 0||p===void 0)return i-s;let l=a.safeSupermanaProgressSteps-u.safeSupermanaProgressSteps,m=a.safeSupermanaProgressSteps-p.safeSupermanaProgressSteps;if(l!==m)return l>m?-1:1;let d=L(a.spiritSetupGain,u.spiritSetupGain),f=L(a.spiritSetupGain,p.spiritSetupGain);return d!==f?d>f?-1:1:u.score!==p.score?u.score>p.score?-1:1:u.rootRank!==p.rootRank?u.rootRank<p.rootRank?-1:1:ae(o,i,s)})}c(fM,"whiteEarlySetupSiblingProgressOverride");function yM(e,n,o,t,r){if(!D(r)||e.activeColor!==R.White||e.turnNumber!==3||e.monsMovesCount!==1||e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||!Sn(I(a),S.SafeSupermanaProgress,S.SafeOpponentManaProgress)||!a.ownDrainerVulnerable||a.ownDrainerWalkVulnerable||!ce(a)||a.spiritDevelopment||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.sameTurnScoreWindowValue>0))return Ae(n,o,(i,s)=>s!==t&&Sn(I(i),S.SafeSupermanaProgress,S.SafeOpponentManaProgress)&&!i.ownDrainerVulnerable&&!i.ownDrainerWalkVulnerable&&ce(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>=L(a.score,32),(i,s)=>un(n,i,s))}c(yM,"whiteEarlyNoActionProgressCompetitionOverride");function SM(e,n,o,t,r){if(!D(r)||e.activeColor!==R.White||e.turnNumber<5||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||!Sn(I(a),S.SafeSupermanaProgress,S.SafeOpponentManaProgress)||!a.ownDrainerVulnerable||a.ownDrainerWalkVulnerable||!ce(a)||a.spiritDevelopment||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.sameTurnScoreWindowValue>0))return Ae(n,o,(i,s)=>s!==t&&I(i)===S.ManaTempo&&!i.ownDrainerVulnerable&&!i.ownDrainerWalkVulnerable&&!i.spiritDevelopment&&!i.spiritSameTurnScoreSetupNow&&!i.spiritOwnManaSetupNow&&i.sameTurnScoreWindowValue===0&&ce(i)&&!N(i)&&L(a.score,i.score)<=64&&Math.abs(a.rootRank-i.rootRank)<=6,(i,s)=>un(n,i,s))}c(SM,"whiteManaOnlyCompetitionOverride");function hM(e,n,o,t,r){if(!D(r)||e.activeColor!==R.White||e.turnNumber!==3||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||!Sn(I(a),S.SafeSupermanaProgress,S.SafeOpponentManaProgress)||N(a)||!ce(a)||a.spiritDevelopment||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.sameTurnScoreWindowValue>0))return Ae(n,o,(i,s)=>s!==t&&Sn(I(i),S.SafeSupermanaProgress,S.SafeOpponentManaProgress)&&!N(i)&&ce(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>=L(a.score,32)&&Cn(i,a),(i,s)=>un(n,i,s))}c(hM,"whiteTurnThreeSafeProgressSurfaceOverride");var GA=Object.freeze({kind:"continue"});function bM(e,n,o){return Object.freeze({id:e,evaluate(t){let r=o(t);return r===void 0?GA:{kind:"select",index:r,reason:n}}})}c(bM,"selectionRule");function ve(e,n){return bM(e,sn.ApprovedFamilyCompetition,n)}c(ve,"familyRule");function Pm(e,n){return bM(e,sn.ApprovedBaselineSelector,n)}c(Pm,"baselineRule");var VA=Object.freeze([ve("black-family-competition",e=>zC(e.execution,e.game,e.roots,e.replyRiskShortlist,e.selectionIndices,e.chosenIndex,e.perspective,e.config)),ve("black-opening-setup-sibling",e=>QC(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-early-safe-mana-followup",e=>ZC(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-early-plain-spirit-followup",e=>JC(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-turn-four-vulnerable-progress-mana",e=>eM(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-turn-six-attack-vulnerable-progress-mana",e=>nM(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-turn-four-setup-cluster",e=>oM(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-opening-early-same-lane-higher-score",e=>Rm(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-setup-progress-competition",e=>BC(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.perspective,e.config)),ve("black-plain-spirit-setup-competition",e=>tM(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-no-action-progress",e=>rM(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-no-action-mana-sibling",e=>aM(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-turn-four-window-mana-sibling",e=>xC(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-turn-four-weak-window-recovery",e=>uM(e.execution,e.game,e.roots,e.chosenIndex,e.config)),Pm("black-baseline-alignment",e=>e.baselineIndex===void 0?void 0:NC(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.baselineIndex,e.config)),Pm("black-turn-start-guarded-baseline-mana",e=>DC(e.execution,e.game,e.roots,e.candidateIndices,e.chosenIndex,e.config)),ve("black-late-window-mana-safety",e=>$C(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-late-window-competition",e=>YC(e.execution,e.game,e.roots,e.chosenIndex,e.config)),ve("black-late-recovery-progress-competition",e=>XC(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-followup-mana",e=>UC(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.perspective,e.config)),ve("white-mana-competition",e=>LC(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.perspective,e.config)),ve("white-no-action-safe-progress-mana",e=>GC(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-window-progress-competition",e=>VC(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.perspective,e.config)),ve("white-action-mana-cluster",e=>HC(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-setup-progress-competition",e=>dM(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.perspective,e.config)),ve("white-early-followup-setup-competition",e=>mM(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-opening-early-same-lane-higher-score",e=>Rm(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-early-setup-sibling-progress",e=>fM(e.execution,e.game,e.roots,e.chosenIndex,e.config)),ve("white-early-safe-progress-setup-competition",e=>cM(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-early-no-action-progress-competition",e=>yM(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-turn-three-safe-progress-surface",e=>hM(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Pm("white-turn-three-baseline-alignment",e=>e.baselineIndex===void 0?void 0:_C(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.baselineIndex,e.config)),ve("white-turn-three-attack-bridge-escape",e=>FC(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-turn-three-no-action-recovery",e=>sM(e.execution,e.game,e.roots,e.chosenIndex,e.config)),ve("white-mana-only-competition",e=>SM(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-turn-five-weak-window-setup",e=>WC(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-early-setup-competition",e=>pM(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-late-followup-competition",e=>lM(e.game,e.roots,e.chosenIndex,e.config)),ve("black-late-followup-competition",e=>jC(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-late-reply-risk-setup",e=>KC(e.execution,e.game,e.roots,e.replyRiskShortlist,e.chosenIndex,e.config)),ve("black-late-weak-window-safe-progress-setup",e=>qC(e.execution,e.game,e.roots,e.replyRiskShortlist,e.chosenIndex,e.perspective,e.config))]);function HA(e,n,o){let t=n;for(let r of o){let a=r.evaluate({...e,chosenIndex:t.index});a.kind==="select"&&(t={index:a.index,reason:a.reason})}return t}c(HA,"applyAdvisorSelectionRuleRegistry");function CM(e,n){return HA(e,n,VA)}c(CM,"applyAdvisorSelectionRules");function MM(e,n,o,t,r,a,i,s=sn.OmittedRootReentry){let u=e[i];if(u===void 0)return;let p=kt(u,s);Oo(o,p),t.includes(i)||t.push(i),r.includes(i)||r.push(i),a.includes(i)||a.push(i),Oo(n,p)}c(MM,"addAdvisorReentry");function kM(e,n,o,t,r){if(!D(r)||o.length===0||e.session.checkpoint())return;let a=pp(e),i=_i(n,o,t,r,{rootReplyRiskSnapshot:c((g,x,_,U)=>Mn(e,g,x,r,U),"rootReplyRiskSnapshot"),productionPolicy:a});i.length===0&&(i=o.map((g,x)=>x));let s=r.replyRisk.enabled?wi(e,o,i,r):[...i];s.length===0&&(s=[...i]);let u=[...s],p=[...s],l=[...i],m=[],d=[];for(let g of s){let x=o[g];x!==void 0&&Oo(m,kt(x,sn.ReplyRiskShortlist))}let f=new Map;for(let[g,x]of Gc){if(e.session.checkpoint())return;let _=CC(e,n,o,s,t,r,x),U=_===void 0?void 0:o[_];if(_===void 0||U===void 0)continue;let j=kt(U,g);Oo(d,j),s.includes(_)||s.push(_),l.includes(_)||l.push(_),Oo(m,j),bC(e,n,o,s,_,g,t,r,f)&&!p.includes(_)&&p.push(_)}let y=MC(n,o,s,r);y!==void 0&&MM(o,m,d,s,l,p,y,sn.PreserveSpiritRepresentative);for(let g of kC(e,n,o,i,s,t,r))MM(o,m,d,s,l,p,g);l.sort((g,x)=>ae(o,g,x));let b=Gd(r,Be.Baseline),C=Fi(n,o,i,t,b),h=Gd(r,r.planner.mode),k,M;r.replyRisk.enabled&&(k=Di(e,n,o,p,t,r,l)),k!==void 0?M=sn.ApprovedReplyRiskGuard:(k=Fi(n,o,l,t,h,{productionPolicy:a}),M=sn.ApprovedBaselineSelector);let T=CM({execution:e,game:n,roots:o,replyRiskShortlist:u,selectionIndices:l,candidateIndices:i,perspective:t,config:r,baselineIndex:C},{index:k??s[0]??i[0]??0,reason:M}),P=T.index;M=T.reason;let E=o[P];if(E===void 0||e.session.checkpoint())return;let O=kt(E,M);return{index:P,decision:{orderedShortlist:m,preservedFamilyRepresentatives:d,approvedRoot:O,injectedRoot:void 0}}}c(kM,"productionRootAdvisorPostsearch");function TM(e,n){let o=Object.freeze({id:"root-picker.advisor-postsearch",select(t){let r=kM(e,t.game,t.roots,t.perspective,n)?.index;return r===void 0?{kind:"continue"}:{kind:"select",index:r}}});return Object.freeze({...pp(e),rootPicker:o})}c(TM,"productionRootPolicy");function wm(e,n,o,t){let r=t.length===0?{}:{priorityInputs:t};if(!Vs(o))return r;let a=Ir(o),i=Ao(o);return{...r,qualifiesPlainSpiritPlan:c(s=>{let u=Ko(e,s.game,n,a);return u?.headFamily===S.SpiritImpact&&bt(u.utility)},"qualifiesPlainSpiritPlan"),qualifiesDrainerSafetyRecoveryPlan:c(s=>Ko(e,s.game,n,i)?.headFamily===S.DrainerSafetyRecovery,"qualifiesDrainerSafetyRecoveryPlan")}}c(wm,"searchRootOptions");function RM(e,n,o,t=!0){let r=n.fen(),a=Re(o,{search:{transpositionTable:t}}),i=n.activeColor,s=ho(e,n,i,a);if(e.session.cancelled||s.length===0)return[];let u=a.planner.enabled?Ko(e,n,i,Dr(n,a)):void 0,p=Aa(e,n,i,a,s,u),l=p===void 0?[]:Ei(p),m=am(e,n,i,a,s,wm(e,i,a,l));if(n.fen()!==r)throw new Error("runtime root focus mutated its source game");return[...m.evaluations]}c(RM,"focusedScoredRootsForRuntime");function PM(e,n,o,t){let r=n.fen(),a=n.activeColor,i=ho(e,n,a,o),s=o.planner.enabled?Ko(e,n,a,Dr(n,o)):void 0,u=Aa(e,n,a,o,i,s),p=u===void 0?[]:Ei(u),l=rm(e,n,a,o,i,wm(e,a,o,p),!0);if(n.fen()!==r)throw new Error("runtime root-rank focus mutated its source game");let m=l.candidates.findIndex(d=>le(d.inputs,t));return m<0?void 0:m}c(PM,"focusedCandidateRankForRuntimeInputs");function Am(e,n){return{checkpoint:c(()=>e.session.checkpoint(),"checkpoint"),cancelled:c(()=>e.session.cancelled,"cancelled"),rootReplyRiskSnapshot:c((o,t,r,a)=>Mn(e,o,t,n,a),"rootReplyRiskSnapshot"),pickReplyRiskGuardedIndex:c(o=>Di(e,o.game,o.roots,o.candidateIndices,o.perspective,n),"pickReplyRiskGuardedIndex"),productionPolicy:TM(e,n)}}c(Am,"rootSelectorOptions");function Em(e,n,o,t,r,a){let i=am(e,n,o,t,r,wm(e,o,t,a));if(e.session.cancelled)return{inputs:[],evaluations:[]};let s=[...i.evaluations];return s.length===0?{inputs:[],evaluations:s}:{inputs:hC(n,s,o,t,Am(e,t)),evaluations:s}}c(Em,"searchAndSelectRoot");function wM(e,n,o,t,r,a){if(r.length<=1||!t.planner.rerankHeads||!ap(r))return;let i=r.map(u=>u.inputs),s=a?.compiledChunks[0];return a!==void 0&&s!==void 0&&i.some(u=>le(u,s))?a:Td(e,n,o,Ir(t),i)}c(wM,"tryTurnHeadRerank");function AM(e,n,o,t,r,a,i){let s=a?.compiledChunks[0];if(!(s===void 0||!ip(r,s)||!op(r,s)||tp(e,n,o,t,r,i,s)))return[...s]}c(AM,"acceptedRerankInputs");function EM(e,n,o,t){if(e.session.checkpoint())return[];im(e),Ad(e);let r=Re(o,{search:{transpositionTable:t}}),a=n.activeColor,i=Dr(n,r),s;if(Qc(r)&&(s=wc(e,n,i),s===void 0&&E0(e,n)&&(r=Re(r,{planner:{enabled:!1}}))),P0(r)&&g0(e,n)&&(s=void 0,r=Re(r,{planner:{enabled:!1}})),Qc(r)&&Hs(e,n)&&(r=Re(r,{planner:{secondaryAnalysis:!1,selectedFollowupProjection:!1}})),r=v0(n,r),!r.planner.enabled&&r.planner.mode===Be.Production&&w0(n))return EM(e,n,Re(r,{planner:{mode:Be.Baseline}}),t);let u=ho(e,n,a,r);if(e.session.cancelled||u.length===0)return[];if(r.planner.enabled){let d=Or(r),f=s??wc(e,n,i),y=f!==void 0&&pm(u,f,d)?f:void 0,b=Dr(n,r),h=Y0(n,u,r)?void 0:A0(n,r)?Fh(e,n,a,b):Ko(e,n,a,b);if(e.session.checkpoint())return[];if(d===Ke.Production&&y!==void 0){if(rp(u,y,d))return[...y];if(h?.compiledChunks[0]!==void 0&&le(h.compiledChunks[0],y))return xi(e,n,a,r,d,h,b),[...y]}let k=wM(e,n,a,r,u,h),M=AM(e,n,a,r,u,k,h);if(M!==void 0&&k!==void 0)return xi(e,n,a,r,d,k,b),M;let T=cm(e,n,a,u,r);if(T!==void 0)return h?.compiledChunks[0]!==void 0&&le(h.compiledChunks[0],T)&&xi(e,n,a,r,d,h,b),T;if(h!==void 0){let x=X0(e,n,u,h,r);if(x!==void 0)return xi(e,n,a,r,d,h,b),x}let P=Aa(e,n,a,r,u,h),E=P===void 0?[]:Ei(P),O=Em(e,n,a,r,u,E);if(O.inputs.length===0)return[];let g=O.inputs;return h!==void 0&&$0(e,n,a,r,O.evaluations,g,h)&&(g=[...h.compiledChunks[0]??g]),y!==void 0&&le(y,g)?[...g]:(h?.compiledChunks[0]!==void 0&&le(h.compiledChunks[0],g)&&xi(e,n,a,r,d,h,b),[...g])}if(u.length>1&&r.planner.rerankHeads&&ap(u)){let d=u.map(y=>y.inputs),f=Wh(e,n,a,Or(r),Ir(r),d);if(f!==void 0&&ip(u,f)&&op(u,f)&&!tp(e,n,a,r,u,void 0,f))return[...f]}let p=cm(e,n,a,u,r);if(p!==void 0)return p;let l=Aa(e,n,a,r,u,void 0),m=l===void 0?[]:Ei(l);return Em(e,n,a,r,u,m).inputs}c(EM,"smartSearchBestInputsInternal");function gM(e){Xu(e),im(e),Ad(e),mc(e)}c(gM,"clearProductionSelectorCaches");function dp(e,n,o,t=!0){let r=n.fen(),a=EM(e,n,o,t);if(n.fen()!==r)throw new Error("smart search mutated its source game");return[...a]}c(dp,"smartSearchBestInputs");var UA=Nn({useHeuristicFormula:!0,includeRegularManaMoveWindows:!1,includeMatchPointWindow:!1,nextTurnWindowScaleBp:5e3,doubleConfirmedScore:!0}),jA=Nn({confirmedScore:1e3,faintedMon:-500,faintedDrainer:-800,faintedCooldownStep:0,hasConsumable:110,activeMon:50}),KA=Nn({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}),qA=Nn({regularManaToOwnerPool:0,regularManaDrainerControl:0,supermanaDrainerControl:0,supermanaRaceControl:0,opponentManaDenial:0,manaCarrierAtRisk:0,manaCarrierGuarded:0,manaCarrierOneStepFromPool:0,supermanaCarrierOneStepFromPoolExtra:0,immediateWinningCarrier:0}),zA=Nn({scoreRacePathProgress:0,opponentScoreRacePathProgress:0,scoreRaceMultiPath:0,opponentScoreRaceMultiPath:0,immediateScoreWindow:0,opponentImmediateScoreWindow:0,immediateScoreMultiWindow:0,opponentImmediateScoreMultiWindow:0}),$A=Nn({drainerBestManaPath:0,drainerPickupScoreThisTurn:0,manaCarrierScoreThisTurn:0,drainerImmediateThreat:0,spiritActionUtility:0,drainerDangerBoolean:0,manaCarrierDangerBoolean:0,drainerWalkThreatBoolean:0,manaCarrierWalkThreatBoolean:0,opponentDrainerAttackBonus:0,attackerCloseToOpponentDrainer:0}),gm=Rs({id:"default",formula:UA,material:jA,position:KA,mana:qA,race:zA,threat:$A}),Gr=Pn({id:"balanced-distance",base:gm,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}}),YA=Pn({id:"mana-race-lite",base:Gr,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}}),vM=Pn({id:"finisher-balanced",base:Gr,mana:{manaCarrierOneStepFromPool:220,supermanaCarrierOneStepFromPoolExtra:110,immediateWinningCarrier:360}}),OM=Pn({id:"finisher-aggressive",base:Gr,mana:{manaCarrierOneStepFromPool:250,supermanaCarrierOneStepFromPoolExtra:130,immediateWinningCarrier:540}}),vm=Pn({id:"mana-race-lite-d2",base:YA,position:{manaCloseToSamePool:380,drainerCloseToOwnPool:320},mana:{regularManaToOwnerPool:170,regularManaDrainerControl:18,manaCarrierAtRisk:-210,manaCarrierGuarded:95,manaCarrierOneStepFromPool:260,supermanaCarrierOneStepFromPoolExtra:150,immediateWinningCarrier:300}}),Om=Pn({id:"tactical-balanced",base:Gr,material:{faintedCooldownStep:-120},position:{spiritCloseToEnemy:230,angelGuardingDrainer:300},mana:{manaCarrierAtRisk:-200,manaCarrierGuarded:110,manaCarrierOneStepFromPool:240,supermanaCarrierOneStepFromPoolExtra:150}}),IM=Pn({id:"tactical-aggressive",base:Om,material:{faintedCooldownStep:-160},position:{spiritCloseToEnemy:250,angelGuardingDrainer:320},mana:{manaCarrierAtRisk:-260,manaCarrierGuarded:140,manaCarrierOneStepFromPool:320,supermanaCarrierOneStepFromPoolExtra:220}}),xM=Pn({id:"runtime-fast-context",base:vm,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}}),mp=Pn({id:"runtime-fast-context-potion",base:xM,material:{hasConsumable:320},threat:{spiritActionUtility:72}}),fp=Pn({id:"runtime-fast-boolean",base:xM,mana:{supermanaRaceControl:30},threat:{drainerDangerBoolean:-400,manaCarrierDangerBoolean:-300}}),NM=Pn({id:"runtime-fast-boolean-potion",base:fp,material:{hasConsumable:320},threat:{spiritActionUtility:72}});function Ee(e,n,o){return Math.min(o,Math.max(n,Math.trunc(e)))}c(Ee,"clamp");function Bi(e,n){return Math.max(0,e-n)}c(Bi,"subtractSaturating");function va(e,n,o){return Math.trunc(e*n/o)}c(va,"scaleFloor");function QA(e,n,o){let t=Ee(Math.trunc(n),1,5),r=Ee(Math.trunc(o),32,18e4),a=Ee(Math.trunc(r/24),4,28),i=Ee(Math.trunc(r/40),4,18),s=Ee(a*5,a,180),u=Ee(i*3,i,96);return mb({budget:{preference:e,depth:t,maxVisitedNodes:r,exactLiteRootCalls:0,exactLiteStaticCalls:0,extensionNodeShareBp:xr.extensionNodeShareBp,quiescenceNodes:xr.quiescenceNodes},search:{rootEnumerationLimit:s,rootBranchLimit:a,nodeEnumerationLimit:u,nodeBranchLimit:i,twoPassRootAllocation:!1,volatilityFocus:!1,selectiveExtensions:!1,maxExtensionsPerPath:xr.maxExtensionsPerPath,quietReductions:!1,quietReductionDepthThreshold:3,quiescence:!1,quiescenceEnumerationLimit:xr.quiescenceEnumerationLimit,futilityPruning:!1,futilityMargin:xr.futilityMargin,transpositionTable:!0,transpositionCapacity:xr.transpositionCapacity,exactLiteChecks:!1,exactRootAnalysis:!1},planner:{enabled:!1,rerankHeads:!1,lowBudgetGuard:!1,midTurnTacticalGuard:!1,secondaryAnalysis:!0,selectedFollowupProjection:!0,mode:Be.Baseline,ownSeedCap:0,ownBeam:0,perNodeFamilyCap:0,stepCap:0,opponentSeedCap:0,opponentBeam:0,replySeedCap:0,replyBeam:0,expansionCap:0,spiritFamily:!1},evaluation:{weights:gm,cacheCapacity:xr.evaluationCacheCapacity,rootManaHandoffPenalty:eb,rootBacktrackPenalty:nb,potionSpendPenalty:t>=3?vc:tb,supermanaProgressBonus:rb,supermanaScoreBonus:ab,opponentManaProgressBonus:ib,opponentManaScoreBonus:sb,softManaHandoffPenalty:ub,softRoundtripPenalty:cb},replyRisk:{enabled:!1,scoreMargin:Yh,shortlistLimit:Xh,replyLimit:Qh,nodeShareBp:Zh,antiHelpScoreMargin:Jh,antiHelpReplyLimit:xs,safetyRerank:!1,deepSafetyFloor:!1,deterministicTiebreak:!1,preferCleanRoots:!1,lateSafeManaRootPreference:!1},policy:{targetedDrainerAttackFallback:!1,forcedTacticalPrepass:!0,preferSpiritDevelopment:!0,hardSpiritDeployment:!1,supermanaPrepassException:!1,drainerSafetyScoreMargin:Ns,efficiencyScoreMargin:ob}})}c(QA,"automoveConfigFromBudget");function ZA(e){if(e.budget.depth>=3){let n=Ee(e.search.rootBranchLimit+10,6,36),o=Ee(Bi(e.search.nodeBranchLimit,11),6,18);return Re(e,{search:{rootBranchLimit:n,nodeBranchLimit:o,rootEnumerationLimit:Ee(n*6,n,220),nodeEnumerationLimit:Ee(o*4,o,108)},evaluation:{weights:Gr}})}return Re(e,{evaluation:{weights:vm}})}c(ZA,"withRuntimeSearchShape");function JA(e){let n=Ee(e.search.rootBranchLimit+8,8,40),o=Ee(Bi(e.search.nodeBranchLimit,2),6,18);return Re(e,{search:{rootBranchLimit:n,nodeBranchLimit:o,rootEnumerationLimit:Ee(n*6,n,240),nodeEnumerationLimit:Ee(o*4,o,108)}})}c(JA,"withFastWideRootShape");function eE(e){let n=Ee(e.search.rootBranchLimit,8,36),o=Ee(e.search.nodeBranchLimit+3,9,18);return Re(e,{search:{rootBranchLimit:n,nodeBranchLimit:o,rootEnumerationLimit:Ee(n*6,n,220),nodeEnumerationLimit:Ee(o*6,o,132)}})}c(eE,"withNormalDeeperShape");function DM(e){let n=Oc[e],o=ZA(QA(e,n.depth,n.maxVisitedNodes));if(e==="fast")return Re(JA(o),{search:{twoPassRootAllocation:!1,selectiveExtensions:!1,quietReductions:!0,volatilityFocus:!1},evaluation:{weights:mp,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:xs,safetyRerank:!1,deepSafetyFloor:!1,deterministicTiebreak:!1,preferCleanRoots:!1},policy:{forcedTacticalPrepass:!0,preferSpiritDevelopment:!0,hardSpiritDeployment:!1,supermanaPrepassException:!0,drainerSafetyScoreMargin:Ns,efficiencyScoreMargin:1700}});let t=eE(o);if(e==="normal"){let i=Ee(va(t.budget.maxVisitedNodes,3,2),t.budget.maxVisitedNodes,18e4),s=Ee(va(i,112,100),i,18e4),u=Ee(Bi(t.search.rootBranchLimit,1),12,38),p=Ee(t.search.nodeBranchLimit+2,8,18);return Re(t,{budget:{maxVisitedNodes:s},search:{rootBranchLimit:u,nodeBranchLimit:p,rootEnumerationLimit:Ee(u*6,u,240),nodeEnumerationLimit:Ee((p+2)*6,p,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=Ee(t.search.rootBranchLimit,14,34),a=Ee(t.search.nodeBranchLimit,9,15);return Re(t,{budget:{maxVisitedNodes:Is},search:{rootBranchLimit:r,nodeBranchLimit:a,rootEnumerationLimit:Ee(r*6,r,204),nodeEnumerationLimit:Ee((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(DM,"automoveConfigFromPreference");var Xs=Object.freeze({balanced:Pn({id:"runtime-normal.base.balanced",base:Gr,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:Pn({id:"runtime-normal.base.tactical",base:Om,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:Pn({id:"runtime-normal.base.tactical-aggressive",base:IM,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:Pn({id:"runtime-normal.base.finisher",base:vM,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:Pn({id:"runtime-normal.base.finisher-aggressive",base:OM,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 Qs(e,n){return Pn({id:e,base:n,threat:{drainerDangerBoolean:-1200,manaCarrierDangerBoolean:-800}})}c(Qs,"withBooleanDrainer");var Rt=Object.freeze({balanced:Qs("runtime-normal.boolean.balanced",Xs.balanced),tactical:Qs("runtime-normal.boolean.tactical",Xs.tactical),tacticalAggressive:Qs("runtime-normal.boolean.tactical-aggressive",Xs.tacticalAggressive),finisher:Qs("runtime-normal.boolean.finisher",Xs.finisher),finisherAggressive:Qs("runtime-normal.boolean.finisher-aggressive",Xs.finisherAggressive)});function Zs(e,n){return Pn({id:e,base:n,threat:{drainerWalkThreatBoolean:-300,manaCarrierWalkThreatBoolean:-150}})}c(Zs,"withMediumWalkThreat");function Js(e,n){return Pn({id:e,base:n,threat:{attackerCloseToOpponentDrainer:200}})}c(Js,"withAttackerProximity");function _M(e,n,o,t,r,a){let[i,s]=e.activeColor===R.White?[e.whiteScore,e.blackScore]:[e.blackScore,e.whiteScore],u=be-i,p=be-s,l=i-s;return u<=1?a:p<=1?t:u<=2?r:p<=2||l<=-1?o:n}c(_M,"phaseProfile");var eu=Object.freeze({balanced:Object.freeze({weights:Zs("runtime-normal-walk-balanced",Rt.balanced)}),tactical:Object.freeze({weights:Zs("runtime-normal-walk-tactical",Rt.tactical)}),tacticalAggressive:Object.freeze({weights:Zs("runtime-normal-walk-tactical-aggressive",Rt.tacticalAggressive)}),finisher:Object.freeze({weights:Zs("runtime-normal-walk-finisher",Rt.finisher)}),finisherAggressive:Object.freeze({weights:Zs("runtime-normal-walk-finisher-aggressive",Rt.finisherAggressive)})}),nu=Object.freeze({balanced:Object.freeze({weights:Js("runtime-normal-attacker-balanced",Rt.balanced)}),tactical:Object.freeze({weights:Js("runtime-normal-attacker-tactical",Rt.tactical)}),tacticalAggressive:Object.freeze({weights:Js("runtime-normal-attacker-tactical-aggressive",Rt.tacticalAggressive)}),finisher:Object.freeze({weights:Js("runtime-normal-attacker-finisher",Rt.finisher)}),finisherAggressive:Object.freeze({weights:Js("runtime-normal-attacker-finisher-aggressive",Rt.finisherAggressive)})});function FM(e,n){return n<3?Object.freeze({weights:fp}):_M(e,eu.balanced,eu.tactical,eu.tacticalAggressive,eu.finisher,eu.finisherAggressive)}c(FM,"runtimePhaseAdaptiveWalkThreatMediumScoringProfile");function WM(e,n){return n<3?Object.freeze({weights:fp}):_M(e,nu.balanced,nu.tactical,nu.tacticalAggressive,nu.finisher,nu.finisherAggressive)}c(WM,"runtimePhaseAdaptiveAttackerProximityScoringProfile");function nE(e,n){let o=n.budget.depth<3?NM:FM(e,n.budget.depth).weights;return Re(n,{evaluation:{weights:o},budget:{maxVisitedNodes:n.budget.depth>=3?va(n.budget.maxVisitedNodes,120,100):n.budget.maxVisitedNodes}})}c(nE,"withRuntimeScoringWeights");function oE(e){let n=Ee(e.search.rootBranchLimit+5,12,40),o=Ee(Bi(e.search.nodeBranchLimit,2),8,18);return Re(e,{search:{rootBranchLimit:n,nodeBranchLimit:o,rootEnumerationLimit:Ee(n*6,n,240),nodeEnumerationLimit:Ee(o*4,o,108),twoPassRootAllocation:!1,selectiveExtensions:!1,quietReductions:!0,volatilityFocus:!1},evaluation:{weights:mp,rootManaHandoffPenalty:300,rootBacktrackPenalty:220,potionSpendPenalty:vc,supermanaProgressBonus:320,supermanaScoreBonus:600,opponentManaProgressBonus:200,opponentManaScoreBonus:310,softManaHandoffPenalty:280,softRoundtripPenalty:220},replyRisk:{scoreMargin:125,shortlistLimit:4,replyLimit:10,nodeShareBp:650,antiHelpScoreMargin:220,antiHelpReplyLimit:xs,safetyRerank:!1,deepSafetyFloor:!1,deterministicTiebreak:!1,preferCleanRoots:!1},policy:{hardSpiritDeployment:!1,supermanaPrepassException:!0,drainerSafetyScoreMargin:Ns,efficiencyScoreMargin:1700}})}c(oE,"applyRuntimeNormalFastPolicyBlock");function tE(e){let n=oE(e),o=Ee(n.search.rootBranchLimit+2,12,40);return Re(n,{budget:{exactLiteRootCalls:1,exactLiteStaticCalls:1,maxVisitedNodes:va(n.budget.maxVisitedNodes,130,100)},search:{exactLiteChecks:!0,rootBranchLimit:o,rootEnumerationLimit:Ee(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(tE,"applyRuntimeNormalFastCoreBudgetSpendProfile");function rE(e,n){let o=Ee(n.search.rootBranchLimit,14,34),t=Ee(n.search.nodeBranchLimit,9,15);return Re(n,{budget:{maxVisitedNodes:va(Is,9,8)},search:{rootBranchLimit:Math.min(o+1,16),nodeBranchLimit:Math.min(t+1,12),rootEnumerationLimit:Ee(o*6,o,204),nodeEnumerationLimit:Ee((t+2)*6,t,132),futilityPruning:!0,quietReductions:!0,quietReductionDepthThreshold:2,selectiveExtensions:!0,quiescence:!0},planner:{rerankHeads:!0},evaluation:{weights:WM(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(rE,"applyProPrimaryProfile");function aE(e){return Re(e,{budget:{exactLiteRootCalls:0,exactLiteStaticCalls:0},search:{exactLiteChecks:!1}})}c(aE,"withPreExactRuntimePolicy");function Pt(e){return Re(e,{planner:{rerankHeads:!1,enabled:!0,mode:Be.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(Pt,"withProductionPlanner");function Io(e,n){let o=nE(e,DM(n));return n==="pro"&&(o=rE(e,o)),o=aE(o),n==="normal"&&(o=tE(o)),o}c(Io,"automoveConfigForGame");function iE(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(iE,"randomIndex");function BM(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(BM,"nextInputsForPrompt");function LM(e,n){let o=[];for(;;){let t=n.processInputWithStartOptions(o,!1,!1,jn);if(t.kind==="invalid-input")return{output:t,inputFen:""};if(t.kind==="events")return{output:t,inputFen:er(o)};let r=BM(t);if(r===void 0||r.length===0)return{output:{kind:"invalid-input"},inputFen:""};if(o.length===At)return{output:{kind:"invalid-input"},inputFen:""};let a=r[iE(e,r.length)];if(a===void 0)return{output:{kind:"invalid-input"},inputFen:""};o.push(a)}}c(LM,"randomAutomove");function Vr(e){let n=e.fork(),o=[],t=c(()=>{let r=o.length===0?n.processInputWithStartOptions(o,!0,!1,jn):n.inspectInputGrammar(o,jn);if(r.kind==="invalid-input")return!1;if(r.kind==="events")return o.length!==0&&Xe(n,o)!==void 0;if(o.length===At)return!1;let a=BM(r);if(a===void 0||a.length===0)return!1;a.sort(cc);for(let i of a){if(o.push(i),t())return!0;o.pop()}return!1},"findFirstApplicableCompletion");return t()?o:[]}c(Vr,"deterministicLegalFallbackInputs");function GM(e){gM(e)}c(GM,"clearTimedOutSelectionCaches");function no(e,n,o){if(e.session.checkpoint())return[];let t=[...dp(e,n,o,!0)];if(t.length>0)return t;if(e.session.checkpoint())return[];let r=LM(e,n.fork());return r.output.kind==="events"?$r(r.inputFen)??[]:[]}c(no,"selectSearchInputs");function yp(e,n,o){return e.session.checkpoint()?[]:(o.planner.enabled&&mc(e),no(e,n,o))}c(yp,"selectSearchInputsWithFreshPlanCache");function VM(e,n,o){if(o.length===0)return;let t=n.activeColor===R.Black&&n.turnNumber===4&&n.monsMovesCount===2&&n.playerCanUseAction()&&n.playerCanMoveMana(),r=n.activeColor===R.Black&&n.turnNumber>=4&&n.monsMovesCount>=3&&n.playerCanUseAction()&&n.playerCanMoveMana();if(!t&&!r)return;let a=no(e,n,Io(n,"pro"));if(!(a.length===0||le(a,o)))return t&&a.length===3&&a[2]?.kind==="modifier"&&a[2].modifier===Ye.SelectBomb||r?a:void 0}c(VM,"selectLateBlackFallbackInputs");function HM(e,n){return Gn(e,n,n.activeColor)||Hb(e,n,n.activeColor)}c(HM,"ownDrainerUnsafe");function Im(e,n,o,t){let r=Ao(t),a=ws(e,o.game,n,n.activeColor,r),i=I(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 Ac(e,n,s,n.activeColor,r)}c(Im,"evaluateSelectedUtility");function ou(e,n){return e.find(o=>le(o.inputs,n))}c(ou,"findRoot");function Sp(e){return!e.opponentCanWinImmediately&&e.delta.sameTurnScoreWindowValue===1&&e.delta.opponentWindowDenyGain===1&&!e.delta.drainerAttackAvailable&&e.delta.drainerSafety<0}c(Sp,"whiteDenyFallbackContextEligible");function tu(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&&I(e)===S.ManaTempo}c(tu,"safeQuietManaTempoRoot");function xm(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(xm,"confirmBaselineContextEligible");function Nm(e,n,o,t){let r=Pt(o),a=RM(e,n,r,!0),i=a.findIndex(p=>le(p.inputs,t));if(i<0)return;let s=_i(n,a,n.activeColor,r,Am(e,r));if(!s.includes(i))return;let u=wi(e,a,s,r);if(u.includes(i))return{config:r,roots:a,productionIndex:i,candidateIndices:s,shortlist:u}}c(Nm,"productionRuntimeCompetition");function Dm(e){return Re(e,{planner:{enabled:!1,rerankHeads:!0,mode:Be.Baseline}})}c(Dm,"searchOnlyBaselineConfig");function UM(e,n){if(n.activeColor===R.White&&n.turnNumber<=3&&!n.playerCanUseAction()&&!n.playerCanMoveMana()&&(n.monsMovesCount===0||n.monsMovesCount===3)||n.activeColor===R.White&&n.turnNumber===1&&n.monsMovesCount===2&&!n.playerCanUseAction()&&!n.playerCanMoveMana()||n.activeColor===R.White&&n.turnNumber===3&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()||n.activeColor===R.White&&n.turnNumber===3&&n.monsMovesCount>=3&&n.playerCanUseAction()&&n.playerCanMoveMana())return no(e,n,Io(n,"pro"));let t=n.activeColor===R.White&&n.turnNumber===3&&n.monsMovesCount===1&&!n.playerCanUseAction()&&n.playerCanMoveMana();if(!(!(n.activeColor===R.White&&n.turnNumber===3&&n.monsMovesCount>0&&!t&&(n.playerCanUseAction()||n.playerCanMoveMana()))||!HM(e,n)))return no(e,n,Io(n,"fast"))}c(UM,"selectEarlyWhiteFallbackInputs");function jM(e,n,o){if(!(!(n.activeColor===R.White&&n.turnNumber===3&&(n.monsMovesCount===1||n.monsMovesCount===2)&&n.playerCanUseAction()&&n.playerCanMoveMana())||Te(e,n,n.activeColor).delta.sameTurnScoreWindowValue<=0))return yp(e,n,Pt(o))}c(jM,"selectScoreWindowTacticalFallbackInputs");function KM(e,n){return n.activeColor===R.Black&&n.turnNumber===2&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()||n.activeColor===R.Black&&n.turnNumber===2&&n.monsMovesCount>0&&!n.playerCanUseAction()&&n.playerCanMoveMana()||n.activeColor===R.Black&&n.turnNumber===4&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()?no(e,n,Io(n,"pro")):void 0}c(KM,"selectUnconditionalBlackFallbackInputs");function qM(e,n,o,t){if(!(n.activeColor===R.White&&n.turnNumber===3&&n.monsMovesCount===2&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&t.length>0)||!xm(Te(e,n,n.activeColor)))return;let a=Nm(e,n,o,t);if(a?.candidateIndices.length!==2||a.shortlist.length!==a.candidateIndices.length)return;let i=no(e,n,Dm(a.config));if(i.length===0||le(i,t))return;let s=a.roots.findIndex(l=>le(l.inputs,i));if(!a.candidateIndices.includes(s)||!a.shortlist.includes(s))return;let u=a.roots[a.productionIndex],p=a.roots[s];if(!(u===void 0||p===void 0))return u.score===p.score&&u.spiritSetupGain===p.spiritSetupGain&&u.safeSupermanaProgressSteps===p.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps===p.safeOpponentManaProgressSteps&&u.scorePathBestSteps===p.scorePathBestSteps&&tu(u)&&tu(p)?i:void 0}c(qM,"selectWhiteConfirmBaselineTiebreakInputs");function zM(e,n,o,t){if(!(n.activeColor===R.White&&n.turnNumber===3&&n.monsMovesCount>=3&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&t.length>0)||!xm(Te(e,n,n.activeColor)))return;let a=Nm(e,n,o,t);if(a===void 0)return;let i=no(e,n,Dm(a.config));if(i.length===0||le(i,t))return;let s=a.roots.findIndex(l=>le(l.inputs,i));if(!a.candidateIndices.includes(s)||!a.shortlist.includes(s))return;let u=a.roots[a.productionIndex],p=a.roots[s];if(!(u===void 0||p===void 0))return p.score>=u.score&&p.rootRank<u.rootRank&&u.spiritSetupGain===p.spiritSetupGain&&u.safeSupermanaProgressSteps===p.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps===p.safeOpponentManaProgressSteps&&u.scorePathBestSteps===p.scorePathBestSteps&&tu(u)&&tu(p)?i:void 0}c(zM,"selectWhiteConfirmBaselineBetterInputs");function $M(e,n,o,t){if(!(n.activeColor===R.White&&n.turnNumber===5&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()&&t.length>0))return;let a=Te(e,n,n.activeColor);if(!Sp(a))return;let i=Pt(o),s=ou(ho(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=Io(n,"pro"),p=no(e,n,u);if(p.length===0||le(p,t))return;let l=ou(ho(e,n,n.activeColor,u),p);if(!(l===void 0||!l.spiritDevelopment||l.spiritSameTurnScoreSetupNow||!X(l)||l.winsImmediately||l.attacksOpponentDrainer||l.scoresSupermanaThisTurn||l.scoresOpponentManaThisTurn||l.safeSupermanaPickupNow||l.safeOpponentManaPickupNow||l.manaHandoffToOpponent||l.hasRoundtrip||!l.ownDrainerVulnerable||l.ownDrainerWalkVulnerable||l.sameTurnScoreWindowValue!==0))return p}c($M,"selectWhiteEarlyBaselineFallbackInputs");function YM(e,n,o,t){if(!(n.activeColor===R.White&&n.turnNumber===3&&n.monsMovesCount===1&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&t.length>0))return;let a=Te(e,n,n.activeColor);if(!Sp(a))return;let i=Pt(o),s=ou(ho(e,n,n.activeColor,i),t);if(s===void 0||!bt(Im(e,n,s,i)))return;let u=Re(i,{planner:{enabled:!1,rerankHeads:!0,mode:Be.Baseline}}),p=no(e,n,u);return p.length===0||le(p,t)?void 0:p}c(YM,"selectWhiteNonnegativeDenyFallbackInputs");function XM(e,n,o,t){if(!(n.activeColor===R.White&&n.turnNumber===3&&n.monsMovesCount===1&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&t.length>0))return;let a=Te(e,n,n.activeColor);if(!Sp(a))return;let i=Pt(o),s=ou(ho(e,n,n.activeColor,i),t);if(s===void 0||bt(Im(e,n,s,i)))return;let u=Io(n,"pro"),p=Re(i,{planner:{enabled:!1,rerankHeads:!0,ownSeedCap:u.planner.ownSeedCap,ownBeam:u.planner.ownBeam,perNodeFamilyCap:u.planner.perNodeFamilyCap,stepCap:u.planner.stepCap}}),l=no(e,n,p);if(!(l.length===0||le(l,t)))return PM(e,n,p,l)===0?l:void 0}c(XM,"selectWhiteNegativeDenyFallbackInputs");var QM=Object.freeze({kind:"continue"});function ZM(e){return{kind:"select",inputs:e}}c(ZM,"selectProductionGuard");function Yt(e){return e===void 0?QM:ZM(e)}c(Yt,"guardResult");var JM=Object.freeze([Object.freeze({id:"early-white-fallback",evaluate:c((e,n)=>Yt(UM(e,n)),"evaluate")}),Object.freeze({id:"score-window-tactical-fallback",evaluate:c((e,n,o)=>Yt(jM(e,n,o)),"evaluate")}),Object.freeze({id:"unconditional-black-fallback",evaluate:c((e,n)=>Yt(KM(e,n)),"evaluate")})]),ek=Object.freeze([Object.freeze({id:"white-early-baseline-fallback",evaluate:c((e,n,o,t)=>Yt($M(e,n,o,t)),"evaluate")}),Object.freeze({id:"white-nonnegative-deny-fallback",evaluate:c((e,n,o,t)=>Yt(YM(e,n,o,t)),"evaluate")}),Object.freeze({id:"white-negative-deny-fallback",evaluate:c((e,n,o,t)=>Yt(XM(e,n,o,t)),"evaluate")}),Object.freeze({id:"white-confirm-baseline-tiebreak",evaluate:c((e,n,o,t)=>Yt(qM(e,n,o,t)),"evaluate")}),Object.freeze({id:"white-confirm-baseline-better",evaluate:c((e,n,o,t)=>Yt(zM(e,n,o,t)),"evaluate")}),Object.freeze({id:"late-black-fallback",evaluate:c((e,n,o,t)=>Yt(VM(e,n,t)),"evaluate")})]);function nk(e,n,o,t){for(let a of JM){if(e.session.checkpoint())return[];let i=a.evaluate(e,n,o);if(i.kind==="select")return[...i.inputs]}let r=yp(e,n,t);if(e.session.checkpoint())return[];for(let a of ek){if(e.session.checkpoint())return[];let i=a.evaluate(e,n,o,r);if(i.kind==="select")return[...i.inputs]}return r}c(nk,"selectProductionPolicyInputs");var sE=200,uE=100,cE=550;function ok(e,n,o){return e.session.withDeadlineIfAbsent(Vm,()=>{if(e.session.checkpoint())return Vr(n);let t=al(e,n,o);return t.kind==="supported"?t.inputs.length===0||e.session.checkpoint()?Vr(n):t.inputs:pE(e,n,o,t.fallbackInputs.length>0?t.fallbackInputs:Vr(n))})}c(ok,"selectStrategicSearchInputsWithDeadline");function pE(e,n,o,t){if(e.session.checkpoint())return t;let r=no(e,n,Io(n,o));return r.length===0||e.session.checkpoint()?t:r}c(pE,"selectCanonicalStrategicInputs");function lE(e,n){let o=Io(n,"fast"),t=e.session.withCooperativeSubdeadline(sE,()=>[...dp(e,n,o,!0)]);return t===void 0&&GM(e),t}c(lE,"selectFastPreferenceBankInputs");function dE(e,n,o){let t=o.length>0?o:Vr(n);if(e.session.checkpoint())return t;let r=lE(e,n);if(r!==void 0&&r.length>0){if(e.session.checkpoint())return t;t=r}if(e.session.checkpointWithReserve(uE))return t;let a=Io(n,"pro"),i=Pt(a),s=nk(e,n,a,i);return s.length===0||e.session.checkpoint()?t:s}c(dE,"selectCanonicalProductionInputs");function tk(e,n){return e.session.withDeadlineIfAbsent(cE,()=>{let o=dy(e,n);return o.kind==="supported"?o.inputs:dE(e,n,o.fallbackInputs)})}c(tk,"selectProductionInputsWithDeadline");function rk(e,n,o){let t=n.fen(),r=o==="pro"?tk(e,n):ok(e,n,o),a=r.length===0?Vr(n):r,i=Xe(n,a),s=a;if(i===void 0&&(s=Vr(n),i=Xe(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:er(s)}}c(rk,"suggestMove");function mE(e){switch(e.kind){case"mon-move":return`mm ${Ya(e.item)} ${Ge(e.from)} ${Ge(e.to)}`;case"mana-move":return`mma ${na(e.mana)} ${Ge(e.from)} ${Ge(e.to)}`;case"mana-scored":return`ms ${na(e.mana)} ${Ge(e.at)}`;case"mystic-action":return`ma ${Lo(e.mystic)} ${Ge(e.from)} ${Ge(e.to)}`;case"demon-action":return`da ${Lo(e.demon)} ${Ge(e.from)} ${Ge(e.to)}`;case"demon-additional-step":return`das ${Lo(e.demon)} ${Ge(e.from)} ${Ge(e.to)}`;case"spirit-target-move":return`stm ${Ya(e.item)} ${Ge(e.from)} ${Ge(e.to)} ${Ge(e.by)}`;case"pickup-bomb":return`pb ${Lo(e.by)} ${Ge(e.at)}`;case"pickup-potion":return`pp ${Ya(e.by)} ${Ge(e.at)}`;case"use-potion":return`up ${Ge(e.from)} ${Ge(e.to)}`;case"pickup-mana":return`pm ${na(e.mana)} ${Lo(e.by)} ${Ge(e.at)}`;case"mon-fainted":return`mf ${Lo(e.mon)} ${Ge(e.from)} ${Ge(e.to)}`;case"mana-dropped":return`md ${na(e.mana)} ${Ge(e.at)}`;case"supermana-back-to-base":return`sb ${Ge(e.from)} ${Ge(e.to)}`;case"bomb-attack":return`ba ${Lo(e.by)} ${Ge(e.from)} ${Ge(e.to)}`;case"mon-awake":return`maw ${Lo(e.mon)} ${Ge(e.at)}`;case"bomb-explosion":return`be ${Ge(e.at)}`;case"next-turn":return`nt ${us(e.color)}`;case"game-over":return`go ${us(e.winner)}`;case"takeback":return"z"}}c(mE,"eventFen");function ak(e){return e.map(mE).join(" ")}c(ak,"eventArrayFen");function hp(e){let n={i:e.row,j:e.column};if(!Number.isInteger(e.row)||!Number.isInteger(e.column)||!Zo(n))throw new RangeError(`position must contain integer row and column values from 0 through ${10}`);return n}c(hp,"toEnginePosition");function cn(e){return{row:e.i,column:e.j}}c(cn,"fromEnginePosition");function wt(e){return{kind:e.kind,color:e.color,cooldown:e.cooldown}}c(wt,"fromEngineMon");function ru(e){return e.kind==="supermana"?{kind:"supermana"}:{kind:"regular",color:e.color}}c(ru,"fromEngineMana");function Li(e){switch(e.kind){case"mon":return{kind:"mon",mon:wt(e.mon)};case"mana":return{kind:"mana",mana:ru(e.mana)};case"mon-with-mana":return{kind:"mon",mon:wt(e.mon),carrying:{kind:"mana",mana:ru(e.mana)}};case"mon-with-consumable":return{kind:"mon",mon:wt(e.mon),carrying:{kind:"consumable",consumable:e.consumable}};case"consumable":return{kind:"consumable",consumable:e.consumable}}}c(Li,"fromEngineItem");function ik(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(ik,"fromEngineSquare");function _m(e){switch(e.kind){case"takeback":return{kind:"takeback"};case"position":return{kind:"location",location:hp(e.position)};case"modifier":return{kind:"modifier",modifier:e.modifier}}}c(_m,"toEngineInput");function Fm(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(Fm,"fromEngineInput");function fE(e){let n=Fm(e.input),o=e.actorMonItem===void 0?{}:{actor:Li(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(fE,"fromEngineInputOption");function bp(e){switch(e.kind){case"mon-move":return{kind:e.kind,item:Li(e.item),from:cn(e.from),to:cn(e.to)};case"mana-move":return{kind:e.kind,mana:ru(e.mana),from:cn(e.from),to:cn(e.to)};case"mana-scored":case"mana-dropped":return{kind:e.kind,mana:ru(e.mana),at:cn(e.at)};case"mystic-action":return{kind:e.kind,mystic:wt(e.mystic),from:cn(e.from),to:cn(e.to)};case"demon-action":case"demon-additional-step":return{kind:e.kind,demon:wt(e.demon),from:cn(e.from),to:cn(e.to)};case"spirit-target-move":return{kind:e.kind,item:Li(e.item),from:cn(e.from),to:cn(e.to),by:cn(e.by)};case"pickup-bomb":return{kind:e.kind,by:wt(e.by),at:cn(e.at)};case"pickup-potion":return{kind:e.kind,by:Li(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:ru(e.mana),by:wt(e.by),at:cn(e.at)};case"mon-fainted":return{kind:e.kind,mon:wt(e.mon),from:cn(e.from),to:cn(e.to)};case"bomb-attack":return{kind:e.kind,by:wt(e.by),from:cn(e.from),to:cn(e.to)};case"mon-awake":return{kind:e.kind,mon:wt(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(bp,"fromEngineEvent");function Wm(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(fE)};case"events":return{kind:"complete",inputFen:n,events:e.events.map(bp)}}}c(Wm,"fromEngineOutput");function sk(e){return{monMoves:e.get(bo.MonMove)??0,manaMoves:e.get(bo.ManaMove)??0,actions:e.get(bo.Action)??0,potions:e.get(bo.Potion)??0}}c(sk,"availableMoveCountsFromEngine");function yE(e){if(e!=="")return $r(e)}c(yE,"parseReplayMove");function Cp(e,n,o,t){let r=0,a=0;for(;r<n.length||a<o.length;){let i=e.activeColor===R.White,p=(i?n:o)[i?r:a];if(p===void 0)return{status:"missing-move",whiteMovesProcessed:r,blackMovesProcessed:a};let l=yE(p);if(l===void 0)return{status:"invalid-move",whiteMovesProcessed:r,blackMovesProcessed:a};let m=e.processInput(l,!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(Cp,"replayInterleavedMoves");var Bm=class e{static{c(this,"Game")}#e;#o=new uu;constructor(n={}){let{variant:o=Me.Classic}=n;if(!hE(o))throw new TypeError(`unsupported game variant: ${String(o)}`);this.#e=new ko(!0,o)}static#n(n){let o=new e({variant:n.variant()});return o.#e=n,o}static fromFen(n){let o=ko.fromFen(n,!0);if(o?.fen()===n)return e.#n(o)}get variant(){return this.#e.variant()}get activeColor(){return this.#e.activeColor}get turnNumber(){return this.#e.turnNumber}get scores(){return{[R.White]:this.#e.whiteScore,[R.Black]:this.#e.blackScore}}get potions(){return{[R.White]:this.#e.whitePotionsCount,[R.Black]:this.#e.blackPotionsCount}}get winner(){return this.#e.winnerColor()}get historyVerified(){return this.#e.isMovesVerified}get takebackFens(){return[...this.#e.takebackFens]}get trackingEntries(){return this.#e.verboseTrackingEntities.map(n=>({fen:n.fen,color:n.color,events:n.events.map(bp),eventsFen:ak(n.events)}))}toFen(){return this.#e.fen()}preview(n){let o=n.map(_m);return this.#t(o,er(o))}play(n){let o=n.map(_m);return this.#r(o,er(o))}playFen(n){let o=$r(n);return o===void 0?{kind:"invalid",inputFen:n}:this.#r(o,er(o))}#t(n,o){let t=n.length===1&&n[0]?.kind==="takeback"?this.#e.copy():this.#e.fork();return Wm(t.processInput(n,!1,!1),o)}#r(n,o){let t=Wm(this.#e.processInput(n,!1,!1),o);return t.kind==="complete"?t:{kind:"invalid",inputFen:o}}itemAt(n){let o=this.#e.board.get(hp(n));return o===void 0?void 0:Li(o)}squareAt(n){return ik(this.#e.board.squareAt(hp(n)))}contentPositions(){let n=new Map;for(let[o]of this.#e.board.entries())n.set(uk(o.i,o.j),{row:o.i,column:o.j});for(let o of this.#e.board.allMonsBases())n.set(uk(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(!SE(n))throw new TypeError(`unsupported color: ${String(n)}`);return this.#e.canTakeback(n)}takeback(){return this.play([{kind:"takeback"}])}previousTurn(n){let o=this.#e.verboseTrackingEntities;if(o.length<=1)return;let t=o.slice(0,-1),r=t[t.length-1],a=ko.fromFen(r?.fen??this.#e.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(u=>{let p=ko.fromFen(u,!1);return p?.fen()!==u||p.variant()!==a.variant()}))return a.replaceHistory({takebackFens:s,trackingEntries:t,verboseTrackingEnabled:!0,movesVerified:this.#e.isMovesVerified}),e.#n(a)}verifyHistory(n){let o=new ko(!0,this.#e.variant());return Cp(o,n.white,n.black).status!=="complete"||o.fen()!==this.#e.fen()?!1:(this.#e.replaceHistory({takebackFens:o.takebackFens,trackingEntries:o.verboseTrackingEntities,movesVerified:!0}),!0)}isLaterThan(n){return this.#e.isLaterThan(n.#e)}availableMoveCounts(){return sk(this.#e.availableMoveKinds())}suggestMove(n){if(!bE(n))throw new TypeError(`unsupported automove preference: ${String(n)}`);let o=this.#o.run(r=>rk(r,this.#e,n));if(o.output.kind!=="events")return;let t=$r(o.inputFen);if(t!==void 0)return{inputs:t.map(Fm),inputFen:o.inputFen,events:o.output.events.map(bp)}}};function SE(e){return e===R.White||e===R.Black}c(SE,"isColor");function hE(e){return Object.values(Me).includes(e)}c(hE,"isGameVariant");function bE(e){return e==="fast"||e==="normal"||e==="pro"}c(bE,"isAutomovePreference");function uk(e,n){return`${e},${n}`}c(uk,"positionKey");function CE(e){let n=ck(e.white.fen),o=ck(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?R.Black:R.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 ko(!1,n.variant()),i;return Cp(a,e.white.moves,e.black.moves,(s,{whiteMovesProcessed:u,blackMovesProcessed:p})=>{let l=s.winnerColor();if(l===void 0)return!0;let m=l===R.White?u===e.white.moves.length:p===e.black.moves.length,d=l===R.White?t:r;return i=m&&d===s.fen()?{kind:"winner",winner:l}:{kind:"invalid"},!1}),i??{kind:"invalid"}}c(CE,"resolveMatch");function ck(e){let n=ko.fromFen(e,!1);return n?.fen()===e?n:void 0}c(ck,"submittedGame");export{R as Color,K as Consumable,Bm as Game,Me as GameVariant,Ye as Modifier,w as MonKind,CE as resolveMatch};
|