@betorigami/game-calculations 0.0.0-sha-0f5e855-20251203034813 → 0.0.0-sha-9faea50-20251204110704

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- var ee=Object.create;var{getPrototypeOf:te,defineProperty:Z,getOwnPropertyNames:pr,getOwnPropertyDescriptor:oe}=Object,Or=Object.prototype.hasOwnProperty;var C=(r,e,t)=>{t=r!=null?ee(te(r)):{};let o=e||!r||!r.__esModule?Z(t,"default",{value:r,enumerable:!0}):t;for(let i of pr(r))if(!Or.call(o,i))Z(o,i,{get:()=>r[i],enumerable:!0});return o},Rr=new WeakMap,ie=(r)=>{var e=Rr.get(r),t;if(e)return e;if(e=Z({},"__esModule",{value:!0}),r&&typeof r==="object"||typeof r==="function")pr(r).map((o)=>!Or.call(e,o)&&Z(e,o,{get:()=>r[o],enumerable:!(t=oe(r,o))||t.enumerable}));return Rr.set(r,e),e};var ne=(r,e)=>{for(var t in e)Z(r,t,{get:e[t],enumerable:!0,configurable:!0,set:(o)=>e[t]=()=>o})};var Ue={};ne(Ue,{validateRouletteGameInputs:()=>Me,validateAdvancedDiceInputs:()=>Re,plinkoMultipliers:()=>X,diamondsMultipliers:()=>Kr,calculateBaccaratBetAmount:()=>Gr,WheelSegments:()=>K,WheelRiskLevel:()=>y,Wheel:()=>Wr,VALID_SUITS:()=>Sr,VALID_RANKS:()=>Ir,VALID_EUROPEAN_STREETS:()=>er,VALID_EUROPEAN_STRAIGHTS:()=>P,VALID_EUROPEAN_SPLITS:()=>g,VALID_EUROPEAN_DOUBLE_STREETS:()=>ar,VALID_EUROPEAN_CORNERS:()=>or,VALID_AMERICAN_STREETS:()=>tr,VALID_AMERICAN_STRAIGHTS:()=>W,VALID_AMERICAN_SPLITS:()=>rr,VALID_AMERICAN_DOUBLE_STREETS:()=>Er,VALID_AMERICAN_CORNERS:()=>ir,TOP_COLUMN:()=>Pr,RouletteType:()=>F,Roulette:()=>qr,RollType:()=>dr,RED_NUMBERS:()=>kr,RANDOM_MIN_VALUE:()=>h,RANDOM_MAX_VALUE:()=>H,PlinkoRiskLevel:()=>Q,Plinko:()=>Hr,Parity:()=>S,PLINKO_ROW_COUNTS:()=>Se,PAYOUT_MULTIPLIERS:()=>Ur,OrigamiGame:()=>O,Mines:()=>vr,MIN_WIN_CHANCE:()=>ur,MIDDLE_COLUMN:()=>Fr,MAX_WIN_CHANCE:()=>Br,Limbo:()=>wr,KenoRiskLevel:()=>br,Keno:()=>Nr,Half:()=>T,GameErrorCode:()=>fr,GameError:()=>E,Game:()=>R,EuropeanRoulette:()=>Ar,EUROPEAN_HOUSE_EDGE:()=>jr,EFFECTIVE_RANGE:()=>z,Dozen:()=>G,DiceDirection:()=>_r,Dice:()=>Dr,DiamondsResultType:()=>yr,Diamonds:()=>Zr,Column:()=>m,Color:()=>I,BaccaratOutcome:()=>Tr,BaccaratBetType:()=>mr,Baccarat:()=>Cr,BOTTOM_COLUMN:()=>Yr,BLACK_NUMBERS:()=>$r,AmericanRoulette:()=>lr,AdvancedDice:()=>xr,AMERICAN_HOUSE_EDGE:()=>zr,AMERICAN_BASKET:()=>nr});module.exports=ie(Ue);var O;((c)=>{c.DICE="DICE";c.MINES="MINES";c.KENO="KENO";c.LIMBO="LIMBO";c.ADVANCED_DICE="ADVANCED_DICE";c.BACCARAT="BACCARAT";c.DIAMONDS="DIAMONDS";c.PLINKO="PLINKO";c.ROULETTE="ROULETTE";c.WHEEL="WHEEL"})(O||={});class R{gameId;constructor(r){this.gameId=r}getGameResult(r){return this.determineGameResult(r)}}var v=require("big.js");var fr;((e)=>e.INPUT_VALIDATION_ERROR="INPUT_VALIDATION_ERROR")(fr||={});class E extends Error{static createValidationError(r){return new E("INPUT_VALIDATION_ERROR",r)}static isGameError(r){return r instanceof E}errorCode;constructor(r,e){super(e);this.errorCode=r}}var h=0,H=1e4,z=10001,ur=0.01,Br=98,ae=(r)=>{if(r<h)throw E.createValidationError(`Lower bound ${r} is below minimum allowed value ${h}`)},Ee=(r)=>{if(r>H)throw E.createValidationError(`Upper bound ${r} is above maximum allowed value ${H}`)},w=(r)=>{if(ae(r.lower),Ee(r.upper),r.lower>=r.upper)throw E.createValidationError(`Lower bound ${r.lower} must be less than ${r.upper}`)},ce=(r,e)=>{let[t,o]=r.lower<=e.lower?[r,e]:[e,r];if(t.upper>o.lower)throw E.createValidationError("Bounds must not overlap")},Ae=(r,e)=>e>=r.lower&&e<=r.upper,le=(r)=>r.upper-r.lower+1,$=(r,e)=>e>r.lower&&e<r.upper,j=(r)=>r.upper-r.lower-1,dr;((o)=>{o.ROLL_BETWEEN="ROLL_BETWEEN";o.ROLL_OUTSIDE="ROLL_OUTSIDE";o.ROLL_BETWEEN_TWO="ROLL_BETWEEN_TWO"})(dr||={});var sr=(r)=>{let t=(()=>{switch(r.mode){case"ROLL_BETWEEN":return w(r.bounds),j(r.bounds);case"ROLL_OUTSIDE":return w(r.bounds),z-le(r.bounds);case"ROLL_BETWEEN_TWO":return w(r.firstBounds),w(r.secondBounds),ce(r.firstBounds,r.secondBounds),j(r.firstBounds)+j(r.secondBounds)}})(),o=v.Big(t).div(z).mul(100);if(o.lt(ur))throw E.createValidationError("Win chance too low");if(o.gt(Br))throw E.createValidationError("Win chance too high");return o},Re=(r)=>{sr(r)};class xr extends R{constructor(){super("ADVANCED_DICE")}determineGameResult({generator:r,edge:e,gameInputs:t}){let o=sr(t),i=r.getRandomInt({min:h,max:H}),n=i.value;return{isFinished:!0,payoutMultiplier:(()=>{switch(t.mode){case"ROLL_BETWEEN":return $(t.bounds,n);case"ROLL_OUTSIDE":return!Ae(t.bounds,n);case"ROLL_BETWEEN_TWO":return $(t.firstBounds,n)||$(t.secondBounds,n)}})()?new v.Big(100-e).div(o):new v.Big(0),outputs:{result:i.values},randomValues:i}}}var L=C(require("big.js"));var Sr=["Clubs","Diamonds","Hearts","Spades"],Ir=["Ace","2","3","4","5","6","7","8","9","10","Jack","Queen","King"],Tr;((o)=>{o.PLAYER_WIN="PLAYER_WIN";o.TIE="TIE";o.BANKER_WIN="BANKER_WIN"})(Tr||={});var mr;((o)=>{o.PLAYER="PLAYER";o.TIE="TIE";o.BANKER="BANKER"})(mr||={});var pe={["PLAYER_WIN"]:{betType:"PLAYER",multiplier:2},["TIE"]:{betType:"TIE",multiplier:8},["BANKER_WIN"]:{betType:"BANKER",multiplier:1.95}},Gr=(r)=>{return new L.default(0).add(r.bets.reduce((t,o)=>t.add(o.amount),new L.default(0)))};class Cr extends R{constructor(){super("BACCARAT")}determineGameResult({generator:r,gameInputs:e,edge:t}){if(t!==1)throw new Error("Baccarat is only available at 1% edge.");this.validateGameInputs(e);let o=r.getRandomIntsWithReplacement({min:0,max:51,count:6}),i=o.values,n=i.slice(0,3),a=i.slice(3,6),l=[],A=0;for(let u of n.slice(0,2)){let d=this.mapRandomValueToCard(u),V=this.mapRandomValueToCardValue(u);l.push(d),A=(A+V)%10}let p=[],c=0;for(let u of a.slice(0,2)){let d=this.mapRandomValueToCard(u),V=this.mapRandomValueToCardValue(u);p.push(d),c=(c+V)%10}if(!this.isNaturalWin(A,c)){let u=this.shouldDrawThirdPlayerCard(A),d=null;if(u)d=this.mapRandomValueToCardValue(n[2]),l.push(this.mapRandomValueToCard(n[2])),A=(A+d)%10;if(this.shouldDrawThirdBankerCard(c,d))p.push(this.mapRandomValueToCard(a[2])),c=(c+this.mapRandomValueToCardValue(a[2]))%10}let f;if(A===c)f="TIE";else f=A>c?"PLAYER_WIN":"BANKER_WIN";let B=Gr(e),{betType:M,multiplier:gr}=pe[f],re=new L.default(0).add(e.bets.filter((u)=>u.type===M).reduce((u,d)=>u.add(d.amount.mul(gr)),new L.default(0)));return{isFinished:!0,payoutMultiplier:B.gt(0)?re.div(B):new L.default(0),outputs:{playerCards:l,playerHandValue:A,bankerCards:p,bankerHandValue:c,gameOutcome:f,result:o.values},randomValues:o}}validateGameInputs(r){if(r.bets.length===0)throw new Error("Must place at least a single bet.");if(!r.bets.every((e)=>e.amount.gte(0)))throw new Error("Invalid bet.")}mapRandomValueToCard(r){let e=Sr[Math.floor(r/13)],t=Ir[r%13];return{suit:e,rank:t}}isNaturalWin(r,e){let t=[8,9];return t.includes(r)||t.includes(e)}mapRandomValueToCardValue(r){let e=r%13;if(e===0)return 1;if(e>=10)return 10;return e+1}shouldDrawThirdPlayerCard(r){return r<=5}shouldDrawThirdBankerCard(r,e){if(e===null)return r<=5;if(r<=2)return!0;if(r===3)return e!==8;if(r===4)return[2,3,4,5,6,7].includes(e);if(r===5)return[4,5,6,7].includes(e);if(r===6)return[6,7].includes(e);return!1}}var Lr=C(require("big.js"));class s{multipliers;constructor(r){this.multipliers=r}getMultipliers(r){let e=this.multipliers.get(r);if(e===void 0)throw new Error(`Multipliers for ${r} not found`);return e}getAllMultipliers(){return Array.from(this.multipliers.entries()).map(([r,e])=>({edge:r,multipliers:e}))}}var yr;((a)=>{a.PAIR="PAIR";a.TWO_PAIR="TWO_PAIR";a.THREE_OF_A_KIND="THREE_OF_A_KIND";a.FULL_HOUSE="FULL_HOUSE";a.FOUR_OF_A_KIND="FOUR_OF_A_KIND";a.FIVE_OF_A_KIND="FIVE_OF_A_KIND"})(yr||={});var Oe={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:4.3,FOUR_OF_A_KIND:5,FIVE_OF_A_KIND:50},fe={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:4,FOUR_OF_A_KIND:4.8,FIVE_OF_A_KIND:50},ue={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:3.7,FOUR_OF_A_KIND:4.6,FIVE_OF_A_KIND:50},Be={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:3.4,FOUR_OF_A_KIND:4.4,FIVE_OF_A_KIND:50},de={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:2.8,FULL_HOUSE:3.2,FOUR_OF_A_KIND:3.6,FIVE_OF_A_KIND:50},Kr=new s(new Map([[1,Oe],[2,fe],[3,ue],[4,Be],[8,de]])),se={2:"PAIR",3:"THREE_OF_A_KIND",4:"FOUR_OF_A_KIND",5:"FIVE_OF_A_KIND"};class Zr extends R{constructor(){super("DIAMONDS")}determineGameResult({generator:r,edge:e}){let t=r.getRandomIntsWithReplacement({min:0,max:6,count:5}),o=Kr.getMultipliers(e),i=t.values,n=this.calculatePayoutMultiplier(o,i);return{isFinished:!0,payoutMultiplier:Lr.default(n),outputs:{result:t.values},randomValues:t}}calculatePayoutMultiplier(r,e){let t=new Map;for(let n of e){let a=t.get(n)||0;t.set(n,a+1)}let o=[...t.values()].filter((n)=>n>1),i=this.classifyResult(o);return i===null?0:r[i]}classifyResult(r){if(r.length>2)throw new Error(`Unexpected number of repeats ${r.length}`);let[e,t]=r;if(e===void 0)return null;if(t===void 0){let o=se[e];if(o===void 0)throw new Error(`Unexpected single diamond repeat count: ${e}`);return o}return e===3||t===3?"FULL_HOUSE":"TWO_PAIR"}}var U=C(require("big.js"));var _r;((t)=>{t.ABOVE="ABOVE";t.BELOW="BELOW"})(_r||={});class Dr extends R{constructor(){super("DICE")}determineGameResult({generator:r,edge:e,gameInputs:t}){let o=r.getRandomInt({min:0,max:1e4}),i=o.min,l=o.max-i+1-1,A=t.direction==="ABOVE"?l-t.selectedValue:t.selectedValue,p=new U.default(A).div(l).mul(100);return{isFinished:!0,payoutMultiplier:(t.direction==="ABOVE"?o.value>t.selectedValue:o.value<t.selectedValue)?new U.default(100-e).div(p):new U.default(0),outputs:{result:o.values},randomValues:o}}}var q=C(require("big.js"));var br;((i)=>{i.CLASSIC="CLASSIC";i.LOW_RISK="LOW_RISK";i.MEDIUM_RISK="MEDIUM_RISK";i.HIGH_RISK="HIGH_RISK"})(br||={});var xe={[1]:{["CLASSIC"]:[0,3.96],["LOW_RISK"]:[0.7,1.85],["MEDIUM_RISK"]:[0.4,2.75],["HIGH_RISK"]:[0,3.96]},[2]:{["CLASSIC"]:[0,1.9,4.5],["LOW_RISK"]:[0,2,3.8],["MEDIUM_RISK"]:[0,1.8,5.1],["HIGH_RISK"]:[0,0,17.1]},[3]:{["CLASSIC"]:[0,1,3.1,10.4],["LOW_RISK"]:[0,1.1,1.38,26],["MEDIUM_RISK"]:[0,0,2.8,50],["HIGH_RISK"]:[0,0,0,81.5]},[4]:{["CLASSIC"]:[0,0.8,1.8,5,22.5],["LOW_RISK"]:[0,0,2.2,7.9,90],["MEDIUM_RISK"]:[0,0,1.7,10,100],["HIGH_RISK"]:[0,0,0,10,259]},[5]:{["CLASSIC"]:[0,0.25,1.4,4.1,16.5,36],["LOW_RISK"]:[0,0,1.5,4.2,13,300],["MEDIUM_RISK"]:[0,0,1.4,4,14,390],["HIGH_RISK"]:[0,0,0,4.5,48,450]},[6]:{["CLASSIC"]:[0,0,1,3.68,7,16.5,40],["LOW_RISK"]:[0,0,1.1,2,6.2,100,700],["MEDIUM_RISK"]:[0,0,0,3,9,180,710],["HIGH_RISK"]:[0,0,0,0,11,350,710]},[7]:{["CLASSIC"]:[0,0,0.47,3,4.5,14,31,60],["LOW_RISK"]:[0,0,1.1,1.6,3.5,15,225,700],["MEDIUM_RISK"]:[0,0,0,2,7,30,400,800],["HIGH_RISK"]:[0,0,0,0,7,90,400,800]},[8]:{["CLASSIC"]:[0,0,0,2.2,4,13,22,55,70],["LOW_RISK"]:[0,0,1.1,1.5,2,5.5,39,100,800],["MEDIUM_RISK"]:[0,0,0,2,4,11,67,400,900],["HIGH_RISK"]:[0,0,0,0,5,20,270,600,900]},[9]:{["CLASSIC"]:[0,0,0,1.55,3,8,15,44,60,85],["LOW_RISK"]:[0,0,1.1,1.3,1.7,2.5,7.5,50,250,1000],["MEDIUM_RISK"]:[0,0,0,2,2.5,5,15,100,500,1000],["HIGH_RISK"]:[0,0,0,0,4,11,56,500,800,1000]},[10]:{["CLASSIC"]:[0,0,0,1.4,2.25,4.5,8,17,50,80,100],["LOW_RISK"]:[0,0,1.1,1.2,1.3,1.8,3.5,13,50,250,1000],["MEDIUM_RISK"]:[0,0,0,1.6,2,4,7,26,100,500,1000],["HIGH_RISK"]:[0,0,0,0,3.5,8,13,63,500,800,1000]}};class Nr extends R{multiplierOverrides;get multipliers(){return this.multiplierOverrides??xe}constructor(r){super("KENO");this.multiplierOverrides=r;if(r)this.validateMultiplierOverrides(r)}determineGameResult({generator:r,edge:e,gameInputs:t}){if(e!==1&&!this.multiplierOverrides)throw new Error("Multiplier overrides must be specified if an edge of 1% is not desirable");if(t.selectedNumbers.length===0)throw new Error("No numbers selected");if(t.selectedNumbers.length>10)throw new Error("Maximum of 10 numbers can be selected");for(let a of t.selectedNumbers){if(a%1!==0)throw new Error("Only integers can be selected");if(a<0||a>39)throw new Error("Invalid number selected")}let o=r.getUniqueRandomInts({min:0,max:39,count:10}),i=t.selectedNumbers.filter((a)=>o.values.includes(a));return{isFinished:!0,payoutMultiplier:i.length>0?new q.default(this.multipliers[t.selectedNumbers.length][t.riskLevel][i.length]??0):new q.default(0),outputs:{result:o.values},randomValues:o}}validateMultiplierOverrides(r){for(let[e,t]of Object.entries(r)){let o=Number(e);for(let[i,n]of Object.entries(t))if(n.length!==o+1)throw new Error(`Invalid count of multipliers for tiles ${o} and risk level ${i}. Expected ${o+1}, but got ${n.length}`)}}}var x=C(require("big.js"));var Mr=(r,e)=>{return r.gt(e)?r:e};var Vr=(r,e)=>{return r.lt(e)?r:e};class wr extends R{constructor(){super("LIMBO")}determineGameResult({generator:r,edge:e,gameInputs:t}){let o=r.getRandomInt({min:1,max:4294967295}),i=o.max,n=new x.default(16777216),a=new x.default(1),l=new x.default(1e6),A=o.value,p=new x.default(A-1).div(i),c=(100-e)/100,f=n.div(p.mul(n).plus(1)).mul(c),B=Mr(a,Vr(f,l));return{isFinished:!0,payoutMultiplier:B.gte(t.targetMultiplier)?new x.default(t.targetMultiplier):new x.default(0),outputs:{randomMultiplier:B,result:o.values},randomValues:o}}}var _=C(require("big.js"));var J=(r,e)=>{if(e<0||r<0||e>r)throw new Error("Invalid input: ensure 0 ≤ r ≤ n and n ≥ 0.");if(e>r-e)e=r-e;let t=1;for(let o=1;o<=e;o++)t=t*(r-o+1)/o;return t};class vr extends R{constructor(){super("MINES")}determineGameResult({generator:r,edge:e,gameInputs:t}){if(t.minesCount<=0||t.minesCount>24)throw new Error("Must select between 1 and 24 mines.");if(t.selectedTiles.length>25-t.minesCount)throw new Error("Cannot select more tiles than available safe tiles (total tiles minus mines).");let a=r.getUniqueRandomInts({min:1,max:25,count:t.minesCount}),l=a.values.some((M)=>t.selectedTiles.includes(M)),A=t.hasCashedOut||l,p=(100-e)/100,c=new _.default(J(25-t.minesCount,t.selectedTiles.length)).div(new _.default(J(25,t.selectedTiles.length))),B=t.hasCashedOut&&!l?new _.default(p).div(c):new _.default(0);return{isFinished:A,payoutMultiplier:B,outputs:{result:a.values},randomValues:a}}}var hr=require("big.js");var Q;((o)=>{o.LOW_RISK="LOW_RISK";o.MEDIUM_RISK="MEDIUM_RISK";o.HIGH_RISK="HIGH_RISK"})(Q||={});var Se=[8,9,10,11,12,13,14,15,16],Ie={LOW_RISK:{8:[6,2.1,1.1,1,0.5,1,1.1,2.1,6],9:[6,2,1.6,1,0.7,0.7,1,1.6,2,6],10:[9,3,1.4,1.1,1,0.5,1,1.1,1.4,3,9],11:[8,3,1.9,1.3,1,0.7,0.7,1,1.3,1.9,3,8],12:[10,3,1.6,1.4,1.1,1,0.5,1,1.1,1.4,1.6,3,10],13:[8,4,3,1.9,1.2,0.9,0.7,0.7,0.9,1.2,1.9,3,4,8],14:[7,4,1.9,1.4,1.3,1.1,1,0.5,1,1.1,1.3,1.4,1.9,4,7],15:[15,8,3,2,1.5,1.1,1,0.7,0.7,1,1.1,1.5,2,3,8,15],16:[16,9,2,1.4,1.4,1.2,1.1,1,0.5,1,1.1,1.2,1.4,1.4,2,9,16]},MEDIUM_RISK:{8:[13,3,1.3,0.7,0.4,0.7,1.3,3,13],9:[18,4,1.7,0.9,0.5,0.5,0.9,1.7,4,18],10:[22,5,2,1.4,0.6,0.4,0.6,1.4,2,5,22],11:[24,6,3,1.8,0.7,0.5,0.5,0.7,1.8,3,6,24],12:[33,11,4,2,1.1,0.6,0.3,0.6,1.1,2,4,11,33],13:[43,13,6,3,1.3,0.7,0.4,0.4,0.7,1.3,3,6,13,43],14:[58,15,7,4,1.9,1,0.5,0.2,0.5,1,1.9,4,7,15,58],15:[88,18,11,5,3,1.3,0.5,0.3,0.3,0.5,1.3,3,5,11,18,88],16:[110,41.1,10,5,3,1.5,1,0.5,0.3,0.5,1,1.5,3,5,10,41.1,110]},HIGH_RISK:{8:[29,4,1.5,0.3,0.2,0.3,1.5,4,29],9:[43,7,2,0.6,0.2,0.2,0.6,2,7,43],10:[76,10,3,0.9,0.3,0.2,0.3,0.9,3,10,76],11:[120,13.9,5.2,1.4,0.4,0.2,0.2,0.4,1.4,5.2,13.9,120],12:[170,23.8,8.1,2,0.7,0.2,0.2,0.2,0.7,2,8.1,23.8,170],13:[260,36.7,11,4,1,0.2,0.2,0.2,0.2,1,4,11,36.7,260],14:[420,56.1,18,5,1.9,0.3,0.2,0.2,0.2,0.3,1.9,5,18,56.1,420],15:[620,82.8,27,8,3,0.5,0.2,0.2,0.2,0.2,0.5,3,8,27,82.8,620],16:[1000,129.9,26.1,9,4,2,0.2,0.2,0.2,0.2,0.2,2,4,9,26.1,129.9,1000]}},Te={LOW_RISK:{8:[6,1.9,1.1,1,0.5,1,1.1,1.9,6],9:[6,1.7,1.6,1,0.7,0.7,1,1.6,1.7,6],10:[9,2.5,1.4,1.1,1,0.5,1,1.1,1.4,2.5,9],11:[9,2.5,1.8,1.3,1,0.7,0.7,1,1.3,1.8,2.5,9],12:[10,3.2,1.6,1.3,1.1,1,0.5,1,1.1,1.3,1.6,3.2,10],13:[8,3.7,2.9,1.8,1.2,0.9,0.7,0.7,0.9,1.2,1.8,2.9,3.7,8],14:[7,4,1.8,1.2,1.3,1.1,1,0.5,1,1.1,1.3,1.2,1.8,4,7],15:[15,7.6,2.8,2,1.4,1.1,1,0.7,0.7,1,1.1,1.4,2,2.8,7.6,15],16:[16,9,1.7,1.2,1.3,1.2,1.1,1,0.5,1,1.1,1.2,1.3,1.2,1.7,9,16]},MEDIUM_RISK:{8:[13,3.2,1.4,0.6,0.4,0.6,1.4,3.2,13],9:[18,3.7,1.7,0.9,0.5,0.5,0.9,1.7,3.7,18],10:[22,5,1.9,1.4,0.6,0.4,0.6,1.4,1.9,5,22],11:[24,6,2.8,1.8,0.7,0.5,0.5,0.7,1.8,2.8,6,24],12:[33,11.1,4,1.9,1.1,0.6,0.3,0.6,1.1,1.9,4,11.1,33],13:[43,13.7,6.1,2.8,1.3,0.7,0.4,0.4,0.7,1.3,2.8,6.1,13.7,43],14:[58,13.7,6.7,3.9,1.9,1,0.5,0.2,0.5,1,1.9,3.9,6.7,13.7,58],15:[88,17.7,10.8,5,2.9,1.3,0.5,0.3,0.3,0.5,1.3,2.9,5,10.8,17.7,88],16:[110,40.5,9.8,4.8,2.9,1.5,1,0.5,0.3,0.5,1,1.5,2.9,4.8,9.8,40.5,110]},HIGH_RISK:{8:[29,3.8,1.5,0.3,0.2,0.3,1.5,3.8,29],9:[43,7.1,1.9,0.6,0.2,0.2,0.6,1.9,7.1,43],10:[76,9.9,2.9,0.9,0.3,0.2,0.3,0.9,2.9,9.9,76],11:[120,13.4,5.1,1.4,0.4,0.2,0.2,0.4,1.4,5.1,13.4,120],12:[170,23.2,7.9,2,0.7,0.2,0.2,0.2,0.7,2,7.9,23.2,170],13:[260,36.6,10.5,4,1,0.2,0.2,0.2,0.2,1,4,10.5,36.6,260],14:[420,55.5,17.6,4.9,1.9,0.3,0.2,0.2,0.2,0.3,1.9,4.9,17.6,55.5,420],15:[620,82.3,26.8,7.7,3,0.5,0.2,0.2,0.2,0.2,0.5,3,7.7,26.8,82.3,620],16:[1000,129.8,25.2,8.6,4,2,0.2,0.2,0.2,0.2,0.2,2,4,8.6,25.2,129.8,1000]}},me={LOW_RISK:{8:[6,2.2,1.1,1,0.4,1,1.1,2.2,6],9:[6,1.8,1.5,1,0.7,0.7,1,1.5,1.8,6],10:[9,2.4,1.3,1.1,1,0.5,1,1.1,1.3,2.4,9],11:[8,2.7,1.9,1.2,1,0.7,0.7,1,1.2,1.9,2.7,8],12:[10,3.3,1.6,1.2,1.1,1,0.5,1,1.1,1.2,1.6,3.3,10],13:[8,3.8,2.9,1.9,1.1,0.9,0.7,0.7,0.9,1.1,1.9,2.9,3.8,8],14:[7,3.9,2,1.4,1.3,1.1,1,0.4,1,1.1,1.3,1.4,2,3.9,7],15:[15,7.9,2.5,2,1.3,1.1,1,0.7,0.7,1,1.1,1.3,2,2.5,7.9,15],16:[16,8.9,1.9,1.4,1.4,1.2,1.1,1,0.4,1,1.1,1.2,1.4,1.4,1.9,8.9,16]},MEDIUM_RISK:{8:[13,3.5,1.2,0.7,0.3,0.7,1.2,3.5,13],9:[18,3.8,1.6,0.9,0.5,0.5,0.9,1.6,3.8,18],10:[22,5.2,2,1.3,0.6,0.4,0.6,1.3,2,5.2,22],11:[24,5.6,2.7,1.8,0.7,0.5,0.5,0.7,1.8,2.7,5.6,24],12:[33,11.3,4,1.8,1.1,0.6,0.3,0.6,1.1,1.8,4,11.3,33],13:[43,12.9,5.7,2.8,1.3,0.7,0.4,0.4,0.7,1.3,2.8,5.7,12.9,43],14:[58,13.7,6.9,3.9,1.8,1,0.5,0.2,0.5,1,1.8,3.9,6.9,13.7,58],15:[88,18,10.9,4.9,2.8,1.3,0.5,0.3,0.3,0.5,1.3,2.8,4.9,10.9,18,88],16:[110,39.9,9.9,5,2.9,1.4,1,0.5,0.3,0.5,1,1.4,2.9,5,9.9,39.9,110]},HIGH_RISK:{8:[29,4,1.4,0.3,0.2,0.3,1.4,4,29],9:[43,7.3,2,0.5,0.2,0.2,0.5,2,7.3,43],10:[76,9.8,2.8,0.9,0.3,0.2,0.3,0.9,2.8,9.8,76],11:[120,13.5,4.9,1.4,0.4,0.2,0.2,0.4,1.4,4.9,13.5,120],12:[170,23.3,7.9,1.9,0.7,0.2,0.2,0.2,0.7,1.9,7.9,23.3,170],13:[260,36.2,10.4,3.9,1,0.2,0.2,0.2,0.2,1,3.9,10.4,36.2,260],14:[420,54.8,17.9,4.9,1.8,0.3,0.2,0.2,0.2,0.3,1.8,4.9,17.9,54.8,420],15:[620,81.9,26.6,7.7,2.9,0.5,0.2,0.2,0.2,0.2,0.5,2.9,7.7,26.6,81.9,620],16:[1000,130,24.9,8.4,3.9,2,0.2,0.2,0.2,0.2,0.2,2,3.9,8.4,24.9,130,1000]}},Ge={LOW_RISK:{8:[6,2,1.1,1,0.4,1,1.1,2,6],9:[6,1.9,1.4,1,0.7,0.7,1,1.4,1.9,6],10:[9,2.8,1.1,1.1,1,0.5,1,1.1,1.1,2.8,9],11:[8,2.7,1.7,1.2,1,0.7,0.7,1,1.2,1.7,2.7,8],12:[10,2.7,1.4,1.2,1.1,1,0.5,1,1.1,1.2,1.4,2.7,10],13:[8,3.5,2.8,1.9,1.3,0.9,0.6,0.6,0.9,1.3,1.9,2.8,3.5,8],14:[7,3.3,1.6,1.3,1.3,1.1,1,0.4,1,1.1,1.3,1.3,1.6,3.3,7],15:[15,8,2.9,2,1.4,1.2,1,0.6,0.6,1,1.2,1.4,2,2.9,8,15],16:[16,9.1,2.2,1.4,1.2,1.2,1.1,1,0.4,1,1.1,1.2,1.2,1.4,2.2,9.1,16]},MEDIUM_RISK:{8:[13,2.9,1.2,0.7,0.4,0.7,1.2,2.9,13],9:[18,3.5,1.6,0.9,0.5,0.5,0.9,1.6,3.5,18],10:[22,4.7,2,1.3,0.6,0.4,0.6,1.3,2,4.7,22],11:[24,5.7,2.5,1.8,0.7,0.5,0.5,0.7,1.8,2.5,5.7,24],12:[33,10.7,3.8,1.8,1.1,0.6,0.3,0.6,1.1,1.8,3.8,10.7,33],13:[43,12.6,5.6,2.7,1.3,0.7,0.4,0.4,0.7,1.3,2.7,5.6,12.6,43],14:[58,13.7,6.4,3.8,1.8,1,0.5,0.2,0.5,1,1.8,3.8,6.4,13.7,58],15:[88,17.7,10.7,4.9,2.7,1.3,0.5,0.3,0.3,0.5,1.3,2.7,4.9,10.7,17.7,88],16:[110,39.7,9.6,4.8,2.8,1.4,1,0.5,0.3,0.5,1,1.4,2.8,4.8,9.6,39.7,110]},HIGH_RISK:{8:[29,3.9,1.4,0.3,0.2,0.3,1.4,3.9,29],9:[43,6.9,1.8,0.6,0.2,0.2,0.6,1.8,6.9,43],10:[76,9.8,2.7,0.9,0.3,0.2,0.3,0.9,2.7,9.8,76],11:[120,13.1,5.1,1.3,0.4,0.2,0.2,0.4,1.3,5.1,13.1,120],12:[170,22.7,7.7,1.9,0.7,0.2,0.2,0.2,0.7,1.9,7.7,22.7,170],13:[260,35.9,10.3,3.8,1,0.2,0.2,0.2,0.2,1,3.8,10.3,35.9,260],14:[420,54.2,17.5,4.8,1.8,0.3,0.2,0.2,0.2,0.3,1.8,4.8,17.5,54.2,420],15:[620,80.6,26.1,7.8,2.8,0.5,0.2,0.2,0.2,0.2,0.5,2.8,7.8,26.1,80.6,620],16:[1000,129.7,24.7,8.2,3.8,2,0.2,0.2,0.2,0.2,0.2,2,3.8,8.2,24.7,129.7,1000]}},Ce={LOW_RISK:{8:[5,1.8,1,1,0.4,1,1,1.8,5],9:[5,1.7,1.2,1,0.7,0.7,1,1.2,1.7,5],10:[9,2.8,1.2,1,1,0.4,1,1,1.2,2.8,9],11:[8,2.5,1.6,1,1,0.7,0.7,1,1,1.6,2.5,8],12:[10,2.5,1.3,1.3,1,1,0.4,1,1,1.3,1.3,2.5,10],13:[8,4.1,2.8,1.8,1.1,0.9,0.6,0.6,0.9,1.1,1.8,2.8,4.1,8],14:[7,3.3,1.7,1.2,1.2,1,1,0.4,1,1,1.2,1.2,1.7,3.3,7],15:[15,7.3,2.9,1.9,1.4,1,1,0.6,0.6,1,1,1.4,1.9,2.9,7.3,15],16:[16,8.7,2,1.5,1.3,1,1.1,1,0.3,1,1.1,1,1.3,1.5,2,8.7,16]},MEDIUM_RISK:{8:[13,2.6,1.1,0.7,0.4,0.7,1.1,2.6,13],9:[17,3.3,1.4,0.9,0.5,0.5,0.9,1.4,3.3,17],10:[21,4.1,1.7,1.3,0.6,0.4,0.6,1.3,1.7,4.1,21],11:[23,5.6,2.4,1.6,0.7,0.5,0.5,0.7,1.6,2.4,5.6,23],12:[32,10.2,3.7,1.7,1.1,0.6,0.2,0.6,1.1,1.7,3.7,10.2,32],13:[42,11.7,5.3,2.5,1.2,0.7,0.4,0.4,0.7,1.2,2.5,5.3,11.7,42],14:[56,13.2,5.9,3.6,1.6,1,0.5,0.2,0.5,1,1.6,3.6,5.9,13.2,56],15:[86,17.3,10,4.6,2.6,1.2,0.5,0.3,0.3,0.5,1.2,2.6,4.6,10,17.3,86],16:[107,39,9.9,4.5,2.4,1.3,1,0.5,0.3,0.5,1,1.3,2.4,4.5,9.9,39,107]},HIGH_RISK:{8:[28,3.3,1.4,0.3,0.2,0.3,1.4,3.3,28],9:[42,6.7,1.6,0.6,0.2,0.2,0.6,1.6,6.7,42],10:[74,9.6,2.6,0.9,0.3,0.1,0.3,0.9,2.6,9.6,74],11:[116,12.7,4.8,1.2,0.4,0.2,0.2,0.4,1.2,4.8,12.7,116],12:[165,20.9,7.2,1.8,0.7,0.2,0.2,0.2,0.7,1.8,7.2,20.9,165],13:[252,33.9,10.1,3.4,1,0.2,0.2,0.2,0.2,1,3.4,10.1,33.9,252],14:[407,51.9,16.3,4.6,1.7,0.3,0.2,0.2,0.2,0.3,1.7,4.6,16.3,51.9,407],15:[600,76.9,24.9,7.4,2.6,0.5,0.2,0.2,0.2,0.2,0.5,2.6,7.4,24.9,76.9,600],16:[1000,122,24.5,8,3.7,1.8,0.2,0.2,0.2,0.2,0.2,1.8,3.7,8,24.5,122,1000]}},X=new s(new Map([[1,Ie],[2,Te],[3,me],[4,Ge],[8,Ce]]));class Hr extends R{constructor(){super("PLINKO")}determineGameResult({generator:r,gameInputs:e,edge:t}){if(e.numberOfRows%1>0)throw new Error("Number of rows must be an integer");if(e.numberOfRows<8||e.numberOfRows>16)throw new Error("Number of rows must be between 8 and 16");let o=e.numberOfRows,a=X.getMultipliers(t)[e.riskLevel][o],l=r.getRandomIntsWithReplacement({min:0,max:1,count:e.numberOfRows}),p=l.values.reduce((f,B)=>f+B,0),c=a[p];if(c===void 0)throw new Error(`No payout found for end position ${p}`);return{isFinished:!0,payoutMultiplier:hr.Big(c),outputs:{result:l.values},randomValues:l}}}var N=require("big.js");var P=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36],W=[37,...P],g=[[0,1],[0,2],[0,3],[1,2],[1,4],[2,3],[2,5],[3,6],[4,5],[4,7],[5,6],[5,8],[6,9],[7,8],[7,10],[8,9],[8,11],[9,12],[10,11],[10,13],[11,12],[11,14],[12,15],[13,14],[13,16],[14,15],[14,17],[15,18],[16,17],[16,19],[17,18],[17,20],[18,21],[19,20],[19,22],[20,21],[20,23],[21,24],[22,23],[22,25],[23,24],[23,26],[24,27],[25,26],[25,28],[26,27],[26,29],[27,30],[28,29],[28,31],[29,30],[29,32],[30,33],[31,32],[31,34],[32,33],[32,35],[33,36],[34,35],[35,36]],rr=[[0,1],[0,2],[0,37],[2,37],[3,37],[1,2],[1,4],[2,3],[2,5],[3,6],[4,5],[4,7],[5,6],[5,8],[6,9],[7,8],[7,10],[8,9],[8,11],[9,12],[10,11],[10,13],[11,12],[11,14],[12,15],[13,14],[13,16],[14,15],[14,17],[15,18],[16,17],[16,19],[17,18],[17,20],[18,21],[19,20],[19,22],[20,21],[20,23],[21,24],[22,23],[22,25],[23,24],[23,26],[24,27],[25,26],[25,28],[26,27],[26,29],[27,30],[28,29],[28,31],[29,30],[29,32],[30,33],[31,32],[31,34],[32,33],[32,35],[33,36],[34,35],[35,36]],er=[[0,1,2],[0,2,3],[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18],[19,20,21],[22,23,24],[25,26,27],[28,29,30],[31,32,33],[34,35,36]],tr=[[0,1,2],[0,2,37],[1,2,3],[2,3,37],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18],[19,20,21],[22,23,24],[25,26,27],[28,29,30],[31,32,33],[34,35,36]],or=[[0,1,2,3],[1,2,4,5],[2,3,5,6],[4,5,7,8],[5,6,8,9],[7,8,10,11],[8,9,11,12],[10,11,13,14],[11,12,14,15],[13,14,16,17],[14,15,17,18],[16,17,19,20],[17,18,20,21],[19,20,22,23],[20,21,23,24],[22,23,25,26],[23,24,26,27],[25,26,28,29],[26,27,29,30],[28,29,31,32],[29,30,32,33],[31,32,34,35],[32,33,35,36]],ir=[[1,2,4,5],[2,3,5,6],[4,5,7,8],[5,6,8,9],[7,8,10,11],[8,9,11,12],[10,11,13,14],[11,12,14,15],[13,14,16,17],[14,15,17,18],[16,17,19,20],[17,18,20,21],[19,20,22,23],[20,21,23,24],[22,23,25,26],[23,24,26,27],[25,26,28,29],[26,27,29,30],[28,29,31,32],[29,30,32,33],[31,32,34,35],[32,33,35,36]],nr=[0,1,2,3,37],ar=[[1,2,3,4,5,6],[4,5,6,7,8,9],[7,8,9,10,11,12],[10,11,12,13,14,15],[13,14,15,16,17,18],[16,17,18,19,20,21],[19,20,21,22,23,24],[22,23,24,25,26,27],[25,26,27,28,29,30],[28,29,30,31,32,33],[31,32,33,34,35,36]],Er=[[1,2,3,4,5,6],[4,5,6,7,8,9],[7,8,9,10,11,12],[10,11,12,13,14,15],[13,14,15,16,17,18],[16,17,18,19,20,21],[19,20,21,22,23,24],[22,23,24,25,26,27],[25,26,27,28,29,30],[28,29,30,31,32,33],[31,32,33,34,35,36]],S;((t)=>{t.EVEN="EVEN";t.ODD="ODD"})(S||={});var I;((t)=>{t.RED="RED";t.BLACK="BLACK"})(I||={});var T;((t)=>{t.LOW="LOW";t.HIGH="HIGH"})(T||={});var m;((o)=>{o.TOP="TOP";o.MIDDLE="MIDDLE";o.BOTTOM="BOTTOM"})(m||={});var G;((o)=>{o.FIRST="FIRST";o.SECOND="SECOND";o.THIRD="THIRD"})(G||={});var F;((t)=>{t.AMERICAN="AMERICAN";t.EUROPEAN="EUROPEAN"})(F||={});var Y=(r)=>{if(r.straightBets.length===0&&r.splitBets.length===0&&r.streetBets.length===0&&r.cornerBets.length===0&&r.doubleStreetBets.length===0&&r.parityBets.length===0&&r.colorBets.length===0&&r.halfBets.length===0&&r.columnBets.length===0&&r.dozenBets.length===0)throw E.createValidationError("Must place at least a single bet.");if(!r.straightBets.every((e)=>e.amount.gte(0)&&D(e.value)))throw E.createValidationError("Invalid straight bet.");if(!r.splitBets.every((e)=>e.amount.gte(0)&&Le(e.values)))throw E.createValidationError("Invalid split bet.");if(!r.streetBets.every((e)=>e.amount.gte(0)&&ye(e.values)))throw E.createValidationError("Invalid street bet.");if(!r.cornerBets.every((e)=>e.amount.gte(0)&&Ke(e.values)))throw E.createValidationError("Invalid corner bet.");if(!r.doubleStreetBets.every((e)=>e.amount.gte(0)&&Ze(e.values)))throw E.createValidationError("Invalid double street bet.");if(!r.parityBets.every((e)=>e.amount.gte(0)&&Object.values(S).includes(e.parity)))throw E.createValidationError("Invalid parity bet.");if(!r.colorBets.every((e)=>e.amount.gte(0)&&Object.values(I).includes(e.color)))throw E.createValidationError("Invalid color bet.");if(!r.halfBets.every((e)=>e.amount.gte(0)&&Object.values(T).includes(e.half)))throw E.createValidationError("Invalid half bet.");if(!r.columnBets.every((e)=>e.amount.gte(0)&&Object.values(m).includes(e.column)))throw E.createValidationError("Invalid column bet.");if(!r.dozenBets.every((e)=>e.amount.gte(0)&&Object.values(G).includes(e.dozen)))throw E.createValidationError("Invalid dozen bet.")},D=(r)=>{return P.includes(r)},Le=(r)=>{if(r.length!==2)return!1;if(!r.every(D))return!1;return g.some(([e,t])=>e===r[0]&&t===r[1])},ye=(r)=>{if(r.length!==3)return!1;if(!r.every(D))return!1;return er.some(([e,t,o])=>e===r[0]&&t===r[1]&&o===r[2])},Ke=(r)=>{if(r.length!==4)return!1;if(!r.every(D))return!1;return or.some(([e,t,o,i])=>e===r[0]&&t===r[1]&&o===r[2]&&i===r[3])},Ze=(r)=>{if(r.length!==6)return!1;if(!r.every(D))return!1;return ar.some(([e,t,o,i,n,a])=>e===r[0]&&t===r[1]&&o===r[2]&&i===r[3]&&n===r[4]&&a===r[5])};var k=(r)=>{if(r.straightBets.length===0&&r.splitBets.length===0&&r.streetBets.length===0&&r.cornerBets.length===0&&r.basketBets.length===0&&r.doubleStreetBets.length===0&&r.parityBets.length===0&&r.colorBets.length===0&&r.halfBets.length===0&&r.columnBets.length===0&&r.dozenBets.length===0)throw E.createValidationError("Must place at least a single bet.");if(!r.straightBets.every((e)=>e.amount.gte(0)&&b(e.value)))throw E.createValidationError("Invalid straight bet.");if(!r.splitBets.every((e)=>e.amount.gte(0)&&_e(e.values)))throw E.createValidationError("Invalid split bet.");if(!r.streetBets.every((e)=>e.amount.gte(0)&&De(e.values)))throw E.createValidationError("Invalid street bet.");if(!r.cornerBets.every((e)=>e.amount.gte(0)&&be(e.values)))throw E.createValidationError("Invalid corner bet.");if(!r.basketBets.every((e)=>e.amount.gte(0)))throw E.createValidationError("Invalid basket bet.");if(!r.doubleStreetBets.every((e)=>e.amount.gte(0)&&Ne(e.values)))throw E.createValidationError("Invalid double street bet.");if(!r.parityBets.every((e)=>e.amount.gte(0)&&Object.values(S).includes(e.parity)))throw E.createValidationError("Invalid parity bet.");if(!r.colorBets.every((e)=>e.amount.gte(0)&&Object.values(I).includes(e.color)))throw E.createValidationError("Invalid color bet.");if(!r.halfBets.every((e)=>e.amount.gte(0)&&Object.values(T).includes(e.half)))throw E.createValidationError("Invalid half bet.");if(!r.columnBets.every((e)=>e.amount.gte(0)&&Object.values(m).includes(e.column)))throw E.createValidationError("Invalid column bet.");if(!r.dozenBets.every((e)=>e.amount.gte(0)&&Object.values(G).includes(e.dozen)))throw E.createValidationError("Invalid dozen bet.")},b=(r)=>{return W.includes(r)};function _e(r){if(r.length!==2)return!1;if(!r.every(b))return!1;return rr.some(([e,t])=>e===r[0]&&t===r[1])}var De=(r)=>{if(r.length!==3)return!1;if(!r.every(b))return!1;return tr.some(([e,t,o])=>e===r[0]&&t===r[1]&&o===r[2])},be=(r)=>{if(r.length!==4)return!1;if(!r.every(b))return!1;return ir.some(([e,t,o,i])=>e===r[0]&&t===r[1]&&o===r[2]&&i===r[3])},Ne=(r)=>{if(r.length!==6)return!1;if(!r.every(b))return!1;return Er.some(([e,t,o,i,n,a])=>e===r[0]&&t===r[1]&&o===r[2]&&i===r[3]&&n===r[4]&&a===r[5])};var Ur={straightBets:36,splitBets:18,streetBets:12,cornerBets:9,basketBets:7,doubleStreetBets:6,parityBets:2,colorBets:2,halfBets:2,columnBets:3,dozenBets:3},Pr=[3,6,9,12,15,18,21,24,27,30,33,36],Fr=[2,5,8,11,14,17,20,23,26,29,32,35],Yr=[1,4,7,10,13,16,19,22,25,28,31,34],kr=[1,3,5,7,9,12,14,16,18,19,21,23,25,27,30,32,34,36],$r=[2,4,6,8,10,11,13,15,17,20,22,24,26,28,29,31,33,35],jr=2.7,zr=5.3;class cr extends R{constructor(){super("ROULETTE")}determineGameResult({generator:r,gameInputs:e}){this.validateInputs(e);let t=r.getRandomInt({min:0,max:this.maxNumber}),o=t.value,i=this.determineBetOutcomes(e,o),n=this.getBetTotals(e),a=this.getBetTotals(i.winningBets),l=this.calculateTotalBetAmount(n),A=this.calculateTotalPayout(a),p=l.gt(0)?A.div(l):new N.Big(0);return{outputs:{betOutcomes:i,result:t.values},payoutMultiplier:p,isFinished:!0,randomValues:t}}determineBetOutcomes(r,e){let t={},o={};for(let i of Object.keys(r)){let n=r[i],a=this.betPredicates[i],{winning:l,losing:A}=this.partitionBets(n,a,e);t[i]=l,o[i]=A}return{winningBets:t,losingBets:o}}partitionBets(r,e,t){return{winning:r.filter((o)=>e(o,t)),losing:r.filter((o)=>!e(o,t))}}calculateTotalAmount(r){return r.reduce((e,t)=>e.plus(t.amount),new N.Big(0))}isWinningStraightBet(r,e){return r.value===e}isWinningSplitBet(r,e){return r.values.some((t)=>t===e)}isWinningStreetBet(r,e){return r.values.some((t)=>t===e)}isWinningCornerBet(r,e){return r.values.some((t)=>t===e)}isWinningDoubleStreetBet(r,e){return r.values.some((t)=>t===e)}isWinningColorBet(r,e){let t=r;return kr.includes(e)&&t.color==="RED"||$r.includes(e)&&t.color==="BLACK"}isWinningHalfBet(r,e){let t=r;if(e>0&&e<=18&&t.half==="LOW")return!0;if(e>18&&e<=36&&t.half==="HIGH")return!0;return!1}isWinningColumnBet(r,e){let t=r;return Pr.includes(e)&&t.column==="TOP"||Fr.includes(e)&&t.column==="MIDDLE"||Yr.includes(e)&&t.column==="BOTTOM"}isWinningDozenBet(r,e){let t=r;if(e>0&&e<=12&&t.dozen==="FIRST")return!0;if(e>12&&e<=24&&t.dozen==="SECOND")return!0;if(e>24&&e<=36&&t.dozen==="THIRD")return!0;return!1}isWinningParityBet(r,e){let t=r;if(e===0||e===37)return!1;let o=e%2===0?"EVEN":"ODD";return t.parity===o}getBetTotals(r){let e={};for(let t of Object.keys(r))e[t]=this.calculateTotalAmount(r[t]);return e}calculateTotalPayout(r){return Object.entries(r).reduce((e,[t,o])=>{let n=Ur[t];return e.plus(o.mul(n||0))},new N.Big(0))}calculateTotalBetAmount(r){return Object.values(r).reduce((e,t)=>e.plus(t),new N.Big(0))}}class Ar extends cr{maxNumber=36;validateInputs(r){Y(r)}betPredicates={straightBets:this.isWinningStraightBet,splitBets:this.isWinningSplitBet,streetBets:this.isWinningStreetBet,cornerBets:this.isWinningCornerBet,doubleStreetBets:this.isWinningDoubleStreetBet,parityBets:this.isWinningParityBet,colorBets:this.isWinningColorBet,halfBets:this.isWinningHalfBet,columnBets:this.isWinningColumnBet,dozenBets:this.isWinningDozenBet}}class lr extends cr{maxNumber=37;validateInputs(r){k(r)}betPredicates={straightBets:this.isWinningStraightBet,splitBets:this.isWinningSplitBet,streetBets:this.isWinningStreetBet,cornerBets:this.isWinningCornerBet,basketBets:this.isWinningBasketBet,doubleStreetBets:this.isWinningDoubleStreetBet,parityBets:this.isWinningParityBet,colorBets:this.isWinningColorBet,halfBets:this.isWinningHalfBet,columnBets:this.isWinningColumnBet,dozenBets:this.isWinningDozenBet};isWinningBasketBet(r,e){return nr.some((t)=>t===e)}}class qr extends R{europeanGame;americanGame;constructor(){super("ROULETTE");this.europeanGame=new Ar,this.americanGame=new lr}determineGameResult(r){let{gameInputs:e,...t}=r;if(r.edge===jr&&e.type==="EUROPEAN"){let o=this.europeanGame.determineGameResult({...t,gameInputs:e.inputs}),{betOutcomes:i}=o.outputs;return{...o,outputs:{type:"european",betOutcomes:i,result:o.outputs.result}}}if(r.edge===zr&&e.type==="AMERICAN"){let o=this.americanGame.determineGameResult({...t,gameInputs:e.inputs}),{betOutcomes:i}=o.outputs;return{...o,outputs:{type:"american",betOutcomes:i,result:o.outputs.result}}}throw new Error("Only European & American Roulette games are supported")}}var Me=(r)=>{if(r.type==="EUROPEAN")Y(r.inputs);else k(r.inputs)};var Xr=require("big.js");var y;((o)=>{o.LOW_RISK="LOW_RISK";o.MEDIUM_RISK="MEDIUM_RISK";o.HIGH_RISK="HIGH_RISK"})(y||={});var K;((n)=>{n[n.TEN=10]="TEN";n[n.TWENTY=20]="TWENTY";n[n.THIRTY=30]="THIRTY";n[n.FORTY=40]="FORTY";n[n.FIFTY=50]="FIFTY"})(K||={});var Ve={LOW_RISK:{10:{ZERO:0,A:1.2,B:1.5},20:{ZERO:0,A:1.2,B:1.5},30:{ZERO:0,A:1.2,B:1.5},40:{ZERO:0,A:1.2,B:1.5},50:{ZERO:0,A:1.2,B:1.5}},MEDIUM_RISK:{10:{ZERO:0,A:1.5,B:1.9,C:2,D:3},20:{ZERO:0,A:1.5,B:1.8,C:2,D:3},30:{ZERO:0,A:1.5,B:1.7,C:2,D:3,E:4},40:{ZERO:0,A:1.5,B:1.6,C:2,D:3},50:{ZERO:0,A:1.5,B:2,C:3,D:5}},HIGH_RISK:{10:{ZERO:0,A:9.9},20:{ZERO:0,A:19.8},30:{ZERO:0,A:29.7},40:{ZERO:0,A:39.6},50:{ZERO:0,A:49.5}}},we={LOW_RISK:{10:{ZERO:0,A:1.2,B:1.4},20:{ZERO:0,A:1.2,B:1.4},30:{ZERO:0,A:1.2,B:1.4},40:{ZERO:0,A:1.2,B:1.4},50:{ZERO:0,A:1.2,B:1.4}},MEDIUM_RISK:{10:{ZERO:0,A:1.4,B:1.9,C:2,D:3.1},20:{ZERO:0,A:1.5,B:1.8,C:1.9,D:3.4},30:{ZERO:0,A:1.5,B:1.7,C:1.9,D:3,E:4.3},40:{ZERO:0,A:1.5,B:1.6,C:2,D:2.9},50:{ZERO:0,A:1.5,B:2,C:3,D:4.5}},HIGH_RISK:{10:{ZERO:0,A:9.8},20:{ZERO:0,A:19.6},30:{ZERO:0,A:29.4},40:{ZERO:0,A:39.2},50:{ZERO:0,A:49}}},ve={LOW_RISK:{10:{ZERO:0,A:1.15,B:1.65},20:{ZERO:0,A:1.15,B:1.65},30:{ZERO:0,A:1.15,B:1.65},40:{ZERO:0,A:1.15,B:1.65},50:{ZERO:0,A:1.15,B:1.65}},MEDIUM_RISK:{10:{ZERO:0,A:1.4,B:1.9,C:2,D:3},20:{ZERO:0,A:1.4,B:1.6,C:2,D:3},30:{ZERO:0,A:1.4,B:1.7,C:2,D:3,E:4},40:{ZERO:0,A:1.5,B:1.6,C:2,D:2.8},50:{ZERO:0,A:1.5,B:2,C:2.7,D:4.9}},HIGH_RISK:{10:{ZERO:0,A:9.7},20:{ZERO:0,A:19.4},30:{ZERO:0,A:29.1},40:{ZERO:0,A:38.8},50:{ZERO:0,A:48.5}}},he={LOW_RISK:{10:{ZERO:0,A:1.15,B:1.55},20:{ZERO:0,A:1.15,B:1.55},30:{ZERO:0,A:1.15,B:1.55},40:{ZERO:0,A:1.15,B:1.55},50:{ZERO:0,A:1.15,B:1.55}},MEDIUM_RISK:{10:{ZERO:0,A:1.4,B:1.8,C:2,D:3},20:{ZERO:0,A:1.3,B:1.5,C:2,D:3},30:{ZERO:0,A:1.4,B:1.6,C:2,D:2.9,E:4},40:{ZERO:0,A:1.5,B:1.6,C:2,D:2.7},50:{ZERO:0,A:1.5,B:2,C:2.6,D:4.8}},HIGH_RISK:{10:{ZERO:0,A:9.6},20:{ZERO:0,A:19.2},30:{ZERO:0,A:28.8},40:{ZERO:0,A:38.4},50:{ZERO:0,A:48}}},He={LOW_RISK:{10:{ZERO:0,A:1.1,B:1.5},20:{ZERO:0,A:1.1,B:1.5},30:{ZERO:0,A:1.1,B:1.45},40:{ZERO:0,A:1.1,B:1.45},50:{ZERO:0,A:1.1,B:1.45}},MEDIUM_RISK:{10:{ZERO:0,A:1.3,B:1.7,C:1.9,D:3},20:{ZERO:0,A:1.3,B:1.4,C:1.9,D:3},30:{ZERO:0,A:1.3,B:1.7,C:1.9,D:2.8,E:3.8},40:{ZERO:0,A:1.4,B:1.8,C:1.9,D:2.6},50:{ZERO:0,A:1.4,B:1.9,C:2.6,D:4.6}},HIGH_RISK:{10:{ZERO:0,A:9.2},20:{ZERO:0,A:18.4},30:{ZERO:0,A:27.6},40:{ZERO:0,A:36.8},50:{ZERO:0,A:46}}},Jr=new s(new Map([[1,Ve],[2,we],[3,ve],[4,he],[8,He]]));var Qr={LOW_RISK:{10:["B","A","A","A","ZERO","A","A","A","A","ZERO"],20:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"],30:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"],40:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"],50:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"]},MEDIUM_RISK:{10:["ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","D"],20:["A","ZERO","C","ZERO","B","ZERO","C","ZERO","C","ZERO","A","ZERO","C","ZERO","C","ZERO","D","ZERO","C","ZERO"],30:["A","ZERO","C","ZERO","A","ZERO","C","ZERO","D","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","C","ZERO","A","ZERO","C","ZERO","E","ZERO","A","ZERO","C","ZERO"],40:["C","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO","C","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO","C","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO"],50:["A","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","B","ZERO","A","ZERO","D","ZERO","A","ZERO","B","ZERO","A","ZERO"]},HIGH_RISK:{10:[...Array(9).fill("ZERO"),"A"],20:[...Array(19).fill("ZERO"),"A"],30:[...Array(29).fill("ZERO"),"A"],40:[...Array(39).fill("ZERO"),"A"],50:[...Array(49).fill("ZERO"),"A"]}};class Wr extends R{constructor(){super("WHEEL")}determineGameResult({generator:r,gameInputs:e,edge:t}){if(!Object.values(K).includes(e.segments))throw new Error("Invalid segments value");if(!Object.values(y).includes(e.riskLevel))throw new Error("Invalid risk level");let i=Jr.getMultipliers(t)[e.riskLevel];if(i===void 0)throw new Error(`No multipliers found for risk level ${e.riskLevel}`);let n=i[e.segments];if(n===void 0)throw new Error(`No multipliers found for segment ${e.segments}`);let a=Qr[e.riskLevel];if(a===void 0)throw new Error(`No patterns found for risk level ${e.riskLevel}`);let l=a[e.segments];if(l===void 0)throw new Error(`No patterns found for segment ${e.segments}`);let A=r.getRandomInt({min:0,max:l.length-1}),p=l[A.value];if(p===void 0)throw new Error(`No pattern found for segment ${e.segments} and value ${A.value}`);let c=n[p];if(c===void 0)throw new Error(`No payout found for picked segment ${p}`);return{isFinished:!0,payoutMultiplier:new Xr.Big(c),outputs:{result:A.values},randomValues:A}}}
1
+ var ee=Object.create;var{getPrototypeOf:te,defineProperty:Z,getOwnPropertyNames:pr,getOwnPropertyDescriptor:oe}=Object,Or=Object.prototype.hasOwnProperty;var L=(r,e,t)=>{t=r!=null?ee(te(r)):{};let o=e||!r||!r.__esModule?Z(t,"default",{value:r,enumerable:!0}):t;for(let i of pr(r))if(!Or.call(o,i))Z(o,i,{get:()=>r[i],enumerable:!0});return o},Rr=new WeakMap,ie=(r)=>{var e=Rr.get(r),t;if(e)return e;if(e=Z({},"__esModule",{value:!0}),r&&typeof r==="object"||typeof r==="function")pr(r).map((o)=>!Or.call(e,o)&&Z(e,o,{get:()=>r[o],enumerable:!(t=oe(r,o))||t.enumerable}));return Rr.set(r,e),e};var ne=(r,e)=>{for(var t in e)Z(r,t,{get:e[t],enumerable:!0,configurable:!0,set:(o)=>e[t]=()=>o})};var Ue={};ne(Ue,{validateRouletteGameInputs:()=>Me,validateAdvancedDiceInputs:()=>Re,plinkoMultipliers:()=>X,diamondsMultipliers:()=>yr,calculateBaccaratBetAmount:()=>Cr,WheelSegments:()=>y,WheelRiskLevel:()=>K,Wheel:()=>Wr,VALID_SUITS:()=>Sr,VALID_RANKS:()=>Tr,VALID_EUROPEAN_STREETS:()=>er,VALID_EUROPEAN_STRAIGHTS:()=>P,VALID_EUROPEAN_SPLITS:()=>g,VALID_EUROPEAN_DOUBLE_STREETS:()=>ar,VALID_EUROPEAN_CORNERS:()=>or,VALID_AMERICAN_STREETS:()=>tr,VALID_AMERICAN_STRAIGHTS:()=>W,VALID_AMERICAN_SPLITS:()=>rr,VALID_AMERICAN_DOUBLE_STREETS:()=>Er,VALID_AMERICAN_CORNERS:()=>ir,TOP_COLUMN:()=>Pr,RouletteType:()=>F,Roulette:()=>qr,RollType:()=>dr,RED_NUMBERS:()=>kr,RANDOM_MIN_VALUE:()=>h,RANDOM_MAX_VALUE:()=>H,PlinkoRiskLevel:()=>Q,Plinko:()=>Hr,Parity:()=>S,PLINKO_ROW_COUNTS:()=>Se,PAYOUT_MULTIPLIERS:()=>Ur,OrigamiGame:()=>O,Mines:()=>vr,MIN_WIN_CHANCE:()=>ur,MIDDLE_COLUMN:()=>Fr,MAX_WIN_CHANCE:()=>Br,Limbo:()=>wr,KenoRiskLevel:()=>br,Keno:()=>Nr,Half:()=>I,GameErrorCode:()=>fr,GameError:()=>E,Game:()=>R,EuropeanRoulette:()=>Ar,EUROPEAN_HOUSE_EDGE:()=>jr,EFFECTIVE_RANGE:()=>z,Dozen:()=>C,DiceDirection:()=>_r,Dice:()=>Dr,DiamondsResultType:()=>Kr,Diamonds:()=>Zr,Column:()=>G,Color:()=>T,BaccaratOutcome:()=>Ir,BaccaratBetType:()=>Gr,Baccarat:()=>Lr,BOTTOM_COLUMN:()=>Yr,BLACK_NUMBERS:()=>$r,AmericanRoulette:()=>lr,AdvancedDice:()=>xr,AMERICAN_HOUSE_EDGE:()=>zr,AMERICAN_BASKET:()=>nr});module.exports=ie(Ue);var O;((c)=>{c.DICE="DICE";c.MINES="MINES";c.KENO="KENO";c.LIMBO="LIMBO";c.ADVANCED_DICE="ADVANCED_DICE";c.BACCARAT="BACCARAT";c.DIAMONDS="DIAMONDS";c.PLINKO="PLINKO";c.ROULETTE="ROULETTE";c.WHEEL="WHEEL"})(O||={});class R{gameId;constructor(r){this.gameId=r}getGameResult(r){return this.determineGameResult(r)}}var v=require("big.js");var fr;((e)=>e.INPUT_VALIDATION_ERROR="INPUT_VALIDATION_ERROR")(fr||={});class E extends Error{static createValidationError(r){return new E("INPUT_VALIDATION_ERROR",r)}static isGameError(r){return r instanceof E}errorCode;constructor(r,e){super(e);this.errorCode=r}}var h=0,H=1e4,z=10001,ur=0.01,Br=98,ae=(r)=>{if(r<h)throw E.createValidationError(`Lower bound ${r} is below minimum allowed value ${h}`)},Ee=(r)=>{if(r>H)throw E.createValidationError(`Upper bound ${r} is above maximum allowed value ${H}`)},w=(r)=>{if(ae(r.lower),Ee(r.upper),r.lower>=r.upper)throw E.createValidationError(`Lower bound ${r.lower} must be less than ${r.upper}`)},ce=(r,e)=>{let[t,o]=r.lower<=e.lower?[r,e]:[e,r];if(t.upper>o.lower)throw E.createValidationError("Bounds must not overlap")},Ae=(r,e)=>e>=r.lower&&e<=r.upper,le=(r)=>r.upper-r.lower+1,$=(r,e)=>e>r.lower&&e<r.upper,j=(r)=>r.upper-r.lower-1,dr;((o)=>{o.ROLL_BETWEEN="ROLL_BETWEEN";o.ROLL_OUTSIDE="ROLL_OUTSIDE";o.ROLL_BETWEEN_TWO="ROLL_BETWEEN_TWO"})(dr||={});var sr=(r)=>{let t=(()=>{switch(r.mode){case"ROLL_BETWEEN":return w(r.bounds),j(r.bounds);case"ROLL_OUTSIDE":return w(r.bounds),z-le(r.bounds);case"ROLL_BETWEEN_TWO":return w(r.firstBounds),w(r.secondBounds),ce(r.firstBounds,r.secondBounds),j(r.firstBounds)+j(r.secondBounds)}})(),o=v.Big(t).div(z).mul(100);if(o.lt(ur))throw E.createValidationError("Win chance too low");if(o.gt(Br))throw E.createValidationError("Win chance too high");return o},Re=(r)=>{sr(r)};class xr extends R{constructor(){super("ADVANCED_DICE")}determineGameResult({generator:r,edge:e,gameInputs:t}){let o=sr(t),i=r.getRandomInt({min:h,max:H}),n=i.value;return{isFinished:!0,payoutMultiplier:(()=>{switch(t.mode){case"ROLL_BETWEEN":return $(t.bounds,n);case"ROLL_OUTSIDE":return!Ae(t.bounds,n);case"ROLL_BETWEEN_TWO":return $(t.firstBounds,n)||$(t.secondBounds,n)}})()?new v.Big(100-e).div(o):new v.Big(0),outputs:{result:i.values},randomValues:i}}}var m=L(require("big.js"));var Sr=["Clubs","Diamonds","Hearts","Spades"],Tr=["Ace","2","3","4","5","6","7","8","9","10","Jack","Queen","King"],Ir;((o)=>{o.PLAYER_WIN="PLAYER_WIN";o.TIE="TIE";o.BANKER_WIN="BANKER_WIN"})(Ir||={});var Gr;((o)=>{o.PLAYER="PLAYER";o.TIE="TIE";o.BANKER="BANKER"})(Gr||={});var pe={["PLAYER_WIN"]:{betType:"PLAYER",multiplier:2},["TIE"]:{betType:"TIE",multiplier:8},["BANKER_WIN"]:{betType:"BANKER",multiplier:1.95}},Cr=(r)=>{return new m.default(0).add(r.bets.reduce((t,o)=>t.add(o.amount),new m.default(0)))};class Lr extends R{constructor(){super("BACCARAT")}determineGameResult({generator:r,gameInputs:e,edge:t}){if(t!==1)throw new Error("Baccarat is only available at 1% edge.");this.validateGameInputs(e);let o=r.getRandomIntsWithReplacement({min:0,max:51,count:6}),i=o.values,n=i.slice(0,3),a=i.slice(3,6),l=[],A=0;for(let u of n.slice(0,2)){let d=this.mapRandomValueToCard(u),V=this.mapRandomValueToCardValue(u);l.push(d),A=(A+V)%10}let p=[],c=0;for(let u of a.slice(0,2)){let d=this.mapRandomValueToCard(u),V=this.mapRandomValueToCardValue(u);p.push(d),c=(c+V)%10}if(!this.isNaturalWin(A,c)){let u=this.shouldDrawThirdPlayerCard(A),d=null;if(u)d=this.mapRandomValueToCardValue(n[2]),l.push(this.mapRandomValueToCard(n[2])),A=(A+d)%10;if(this.shouldDrawThirdBankerCard(c,d))p.push(this.mapRandomValueToCard(a[2])),c=(c+this.mapRandomValueToCardValue(a[2]))%10}let f;if(A===c)f="TIE";else f=A>c?"PLAYER_WIN":"BANKER_WIN";let B=Cr(e),{betType:M,multiplier:gr}=pe[f],re=new m.default(0).add(e.bets.filter((u)=>u.type===M).reduce((u,d)=>u.add(d.amount.mul(gr)),new m.default(0)));return{isFinished:!0,payoutMultiplier:B.gt(0)?re.div(B):new m.default(0),outputs:{playerCards:l,playerHandValue:A,bankerCards:p,bankerHandValue:c,gameOutcome:f,result:o.values},randomValues:o}}validateGameInputs(r){if(r.bets.length===0)throw new Error("Must place at least a single bet.");if(!r.bets.every((e)=>e.amount.gte(0)))throw new Error("Invalid bet.")}mapRandomValueToCard(r){let e=Sr[Math.floor(r/13)],t=Tr[r%13];return{suit:e,rank:t}}isNaturalWin(r,e){let t=[8,9];return t.includes(r)||t.includes(e)}mapRandomValueToCardValue(r){let e=r%13;if(e===0)return 1;if(e>=10)return 10;return e+1}shouldDrawThirdPlayerCard(r){return r<=5}shouldDrawThirdBankerCard(r,e){if(e===null)return r<=5;if(r<=2)return!0;if(r===3)return e!==8;if(r===4)return[2,3,4,5,6,7].includes(e);if(r===5)return[4,5,6,7].includes(e);if(r===6)return[6,7].includes(e);return!1}}var mr=L(require("big.js"));class s{multipliers;constructor(r){this.multipliers=r}getMultipliers(r){let e=this.multipliers.get(r);if(e===void 0)throw new Error(`Multipliers for ${r} not found`);return e}getAllMultipliers(){return Array.from(this.multipliers.entries()).map(([r,e])=>({edge:r,multipliers:e}))}}var Kr;((a)=>{a.PAIR="PAIR";a.TWO_PAIR="TWO_PAIR";a.THREE_OF_A_KIND="THREE_OF_A_KIND";a.FULL_HOUSE="FULL_HOUSE";a.FOUR_OF_A_KIND="FOUR_OF_A_KIND";a.FIVE_OF_A_KIND="FIVE_OF_A_KIND"})(Kr||={});var Oe={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:4.3,FOUR_OF_A_KIND:5,FIVE_OF_A_KIND:50},fe={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:4,FOUR_OF_A_KIND:4.8,FIVE_OF_A_KIND:50},ue={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:3.7,FOUR_OF_A_KIND:4.6,FIVE_OF_A_KIND:50},Be={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:3.4,FOUR_OF_A_KIND:4.4,FIVE_OF_A_KIND:50},de={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:2.8,FULL_HOUSE:3.2,FOUR_OF_A_KIND:3.6,FIVE_OF_A_KIND:50},yr=new s(new Map([[1,Oe],[2,fe],[3,ue],[4,Be],[8,de]])),se={2:"PAIR",3:"THREE_OF_A_KIND",4:"FOUR_OF_A_KIND",5:"FIVE_OF_A_KIND"};class Zr extends R{constructor(){super("DIAMONDS")}determineGameResult({generator:r,edge:e}){let t=r.getRandomIntsWithReplacement({min:0,max:6,count:5}),o=yr.getMultipliers(e),i=t.values,n=this.calculatePayoutMultiplier(o,i);return{isFinished:!0,payoutMultiplier:mr.default(n),outputs:{result:t.values},randomValues:t}}calculatePayoutMultiplier(r,e){let t=new Map;for(let n of e){let a=t.get(n)||0;t.set(n,a+1)}let o=[...t.values()].filter((n)=>n>1),i=this.classifyResult(o);return i===null?0:r[i]}classifyResult(r){if(r.length>2)throw new Error(`Unexpected number of repeats ${r.length}`);let[e,t]=r;if(e===void 0)return null;if(t===void 0){let o=se[e];if(o===void 0)throw new Error(`Unexpected single diamond repeat count: ${e}`);return o}return e===3||t===3?"FULL_HOUSE":"TWO_PAIR"}}var U=L(require("big.js"));var _r;((t)=>{t.ABOVE="ABOVE";t.BELOW="BELOW"})(_r||={});class Dr extends R{constructor(){super("DICE")}determineGameResult({generator:r,edge:e,gameInputs:t}){let o=r.getRandomInt({min:0,max:1e4}),i=o.min,l=o.max-i+1-1,A=t.direction==="ABOVE"?l-t.selectedValue:t.selectedValue,p=new U.default(A).div(l).mul(100);return{isFinished:!0,payoutMultiplier:(t.direction==="ABOVE"?o.value>t.selectedValue:o.value<t.selectedValue)?new U.default(100-e).div(p):new U.default(0),outputs:{result:o.values},randomValues:o}}}var q=L(require("big.js"));var br;((i)=>{i.CLASSIC="CLASSIC";i.LOW_RISK="LOW_RISK";i.MEDIUM_RISK="MEDIUM_RISK";i.HIGH_RISK="HIGH_RISK"})(br||={});var xe={[1]:{["CLASSIC"]:[0,3.96],["LOW_RISK"]:[0.7,1.85],["MEDIUM_RISK"]:[0.4,2.75],["HIGH_RISK"]:[0,3.96]},[2]:{["CLASSIC"]:[0,1.9,4.5],["LOW_RISK"]:[0,2,3.8],["MEDIUM_RISK"]:[0,1.8,5.1],["HIGH_RISK"]:[0,0,17.1]},[3]:{["CLASSIC"]:[0,1,3.1,10.4],["LOW_RISK"]:[0,1.1,1.38,26],["MEDIUM_RISK"]:[0,0,2.8,50],["HIGH_RISK"]:[0,0,0,81.5]},[4]:{["CLASSIC"]:[0,0.8,1.8,5,22.5],["LOW_RISK"]:[0,0,2.2,7.9,90],["MEDIUM_RISK"]:[0,0,1.7,10,100],["HIGH_RISK"]:[0,0,0,10,259]},[5]:{["CLASSIC"]:[0,0.25,1.4,4.1,16.5,36],["LOW_RISK"]:[0,0,1.5,4.2,13,300],["MEDIUM_RISK"]:[0,0,1.4,4,14,390],["HIGH_RISK"]:[0,0,0,4.5,48,450]},[6]:{["CLASSIC"]:[0,0,1,3.68,7,16.5,40],["LOW_RISK"]:[0,0,1.1,2,6.2,100,700],["MEDIUM_RISK"]:[0,0,0,3,9,180,710],["HIGH_RISK"]:[0,0,0,0,11,350,710]},[7]:{["CLASSIC"]:[0,0,0.47,3,4.5,14,31,60],["LOW_RISK"]:[0,0,1.1,1.6,3.5,15,225,700],["MEDIUM_RISK"]:[0,0,0,2,7,30,400,800],["HIGH_RISK"]:[0,0,0,0,7,90,400,800]},[8]:{["CLASSIC"]:[0,0,0,2.2,4,13,22,55,70],["LOW_RISK"]:[0,0,1.1,1.5,2,5.5,39,100,800],["MEDIUM_RISK"]:[0,0,0,2,4,11,67,400,900],["HIGH_RISK"]:[0,0,0,0,5,20,270,600,900]},[9]:{["CLASSIC"]:[0,0,0,1.55,3,8,15,44,60,85],["LOW_RISK"]:[0,0,1.1,1.3,1.7,2.5,7.5,50,250,1000],["MEDIUM_RISK"]:[0,0,0,2,2.5,5,15,100,500,1000],["HIGH_RISK"]:[0,0,0,0,4,11,56,500,800,1000]},[10]:{["CLASSIC"]:[0,0,0,1.4,2.25,4.5,8,17,50,80,100],["LOW_RISK"]:[0,0,1.1,1.2,1.3,1.8,3.5,13,50,250,1000],["MEDIUM_RISK"]:[0,0,0,1.6,2,4,7,26,100,500,1000],["HIGH_RISK"]:[0,0,0,0,3.5,8,13,63,500,800,1000]}};class Nr extends R{multiplierOverrides;get multipliers(){return this.multiplierOverrides??xe}constructor(r){super("KENO");this.multiplierOverrides=r;if(r)this.validateMultiplierOverrides(r)}determineGameResult({generator:r,edge:e,gameInputs:t}){if(e!==1&&!this.multiplierOverrides)throw new Error("Multiplier overrides must be specified if an edge of 1% is not desirable");if(t.selectedNumbers.length===0)throw new Error("No numbers selected");if(t.selectedNumbers.length>10)throw new Error("Maximum of 10 numbers can be selected");for(let a of t.selectedNumbers){if(a%1!==0)throw new Error("Only integers can be selected");if(a<0||a>39)throw new Error("Invalid number selected")}let o=r.getUniqueRandomInts({min:0,max:39,count:10}),i=t.selectedNumbers.filter((a)=>o.values.includes(a));return{isFinished:!0,payoutMultiplier:i.length>0?new q.default(this.multipliers[t.selectedNumbers.length][t.riskLevel][i.length]??0):new q.default(0),outputs:{result:o.values},randomValues:o}}validateMultiplierOverrides(r){for(let[e,t]of Object.entries(r)){let o=Number(e);for(let[i,n]of Object.entries(t))if(n.length!==o+1)throw new Error(`Invalid count of multipliers for tiles ${o} and risk level ${i}. Expected ${o+1}, but got ${n.length}`)}}}var x=L(require("big.js"));var Mr=(r,e)=>{return r.gt(e)?r:e};var Vr=(r,e)=>{return r.lt(e)?r:e};class wr extends R{constructor(){super("LIMBO")}determineGameResult({generator:r,edge:e,gameInputs:t}){let o=r.getRandomInt({min:1,max:4294967295}),i=o.max,n=new x.default(16777216),a=new x.default(1),l=new x.default(1e6),A=o.value,p=new x.default(A-1).div(i),c=(100-e)/100,f=n.div(p.mul(n).plus(1)).mul(c),B=Mr(a,Vr(f,l));return{isFinished:!0,payoutMultiplier:B.gte(t.targetMultiplier)?new x.default(t.targetMultiplier):new x.default(0),outputs:{randomMultiplier:B,result:o.values},randomValues:o}}}var _=L(require("big.js"));var J=(r,e)=>{if(e<0||r<0||e>r)throw new Error("Invalid input: ensure 0 ≤ r ≤ n and n ≥ 0.");if(e>r-e)e=r-e;let t=1;for(let o=1;o<=e;o++)t=t*(r-o+1)/o;return t};class vr extends R{constructor(){super("MINES")}determineGameResult({generator:r,edge:e,gameInputs:t}){if(t.minesCount<=0||t.minesCount>24)throw new Error("Must select between 1 and 24 mines.");if(t.selectedTiles.length>25-t.minesCount)throw new Error("Cannot select more tiles than available safe tiles (total tiles minus mines).");let a=r.getUniqueRandomInts({min:1,max:25,count:t.minesCount}),l=a.values.some((M)=>t.selectedTiles.includes(M)),A=t.hasCashedOut||l,p=(100-e)/100,c=new _.default(J(25-t.minesCount,t.selectedTiles.length)).div(new _.default(J(25,t.selectedTiles.length))),B=t.hasCashedOut&&!l?new _.default(p).div(c):new _.default(0);return{isFinished:A,payoutMultiplier:B,outputs:{result:a.values},randomValues:a}}}var hr=require("big.js");var Q;((o)=>{o.LOW_RISK="LOW_RISK";o.MEDIUM_RISK="MEDIUM_RISK";o.HIGH_RISK="HIGH_RISK"})(Q||={});var Se=[8,9,10,11,12,13,14,15,16],Te={LOW_RISK:{8:[6,2.1,1.1,1,0.5,1,1.1,2.1,6],9:[6,2,1.6,1,0.7,0.7,1,1.6,2,6],10:[9,3,1.4,1.1,1,0.5,1,1.1,1.4,3,9],11:[8,3,1.9,1.3,1,0.7,0.7,1,1.3,1.9,3,8],12:[10,3,1.6,1.4,1.1,1,0.5,1,1.1,1.4,1.6,3,10],13:[8,4,3,1.9,1.2,0.9,0.7,0.7,0.9,1.2,1.9,3,4,8],14:[7,4,1.9,1.4,1.3,1.1,1,0.5,1,1.1,1.3,1.4,1.9,4,7],15:[15,8,3,2,1.5,1.1,1,0.7,0.7,1,1.1,1.5,2,3,8,15],16:[16,9,2,1.4,1.4,1.2,1.1,1,0.5,1,1.1,1.2,1.4,1.4,2,9,16]},MEDIUM_RISK:{8:[13,3,1.3,0.7,0.4,0.7,1.3,3,13],9:[18,4,1.7,0.9,0.5,0.5,0.9,1.7,4,18],10:[22,5,2,1.4,0.6,0.4,0.6,1.4,2,5,22],11:[24,6,3,1.8,0.7,0.5,0.5,0.7,1.8,3,6,24],12:[33,11,4,2,1.1,0.6,0.3,0.6,1.1,2,4,11,33],13:[43,13,6,3,1.3,0.7,0.4,0.4,0.7,1.3,3,6,13,43],14:[58,15,7,4,1.9,1,0.5,0.2,0.5,1,1.9,4,7,15,58],15:[88,18,11,5,3,1.3,0.5,0.3,0.3,0.5,1.3,3,5,11,18,88],16:[110,41.1,10,5,3,1.5,1,0.5,0.3,0.5,1,1.5,3,5,10,41.1,110]},HIGH_RISK:{8:[29,4,1.5,0.3,0.2,0.3,1.5,4,29],9:[43,7,2,0.6,0.2,0.2,0.6,2,7,43],10:[76,10,3,0.9,0.3,0.2,0.3,0.9,3,10,76],11:[120,13.9,5.2,1.4,0.4,0.2,0.2,0.4,1.4,5.2,13.9,120],12:[170,23.8,8.1,2,0.7,0.2,0.2,0.2,0.7,2,8.1,23.8,170],13:[260,36.7,11,4,1,0.2,0.2,0.2,0.2,1,4,11,36.7,260],14:[420,56.1,18,5,1.9,0.3,0.2,0.2,0.2,0.3,1.9,5,18,56.1,420],15:[620,82.8,27,8,3,0.5,0.2,0.2,0.2,0.2,0.5,3,8,27,82.8,620],16:[1000,129.9,26.1,9,4,2,0.2,0.2,0.2,0.2,0.2,2,4,9,26.1,129.9,1000]}},Ie={LOW_RISK:{8:[6,1.9,1.1,1,0.5,1,1.1,1.9,6],9:[6,1.7,1.6,1,0.7,0.7,1,1.6,1.7,6],10:[9,2.5,1.4,1.1,1,0.5,1,1.1,1.4,2.5,9],11:[9,2.5,1.8,1.3,1,0.7,0.7,1,1.3,1.8,2.5,9],12:[10,3.2,1.6,1.3,1.1,1,0.5,1,1.1,1.3,1.6,3.2,10],13:[8,3.7,2.9,1.8,1.2,0.9,0.7,0.7,0.9,1.2,1.8,2.9,3.7,8],14:[7,4,1.8,1.2,1.3,1.1,1,0.5,1,1.1,1.3,1.2,1.8,4,7],15:[15,7.6,2.8,2,1.4,1.1,1,0.7,0.7,1,1.1,1.4,2,2.8,7.6,15],16:[16,9,1.7,1.2,1.3,1.2,1.1,1,0.5,1,1.1,1.2,1.3,1.2,1.7,9,16]},MEDIUM_RISK:{8:[13,3.2,1.4,0.6,0.4,0.6,1.4,3.2,13],9:[18,3.7,1.7,0.9,0.5,0.5,0.9,1.7,3.7,18],10:[22,5,1.9,1.4,0.6,0.4,0.6,1.4,1.9,5,22],11:[24,6,2.8,1.8,0.7,0.5,0.5,0.7,1.8,2.8,6,24],12:[33,11.1,4,1.9,1.1,0.6,0.3,0.6,1.1,1.9,4,11.1,33],13:[43,13.7,6.1,2.8,1.3,0.7,0.4,0.4,0.7,1.3,2.8,6.1,13.7,43],14:[58,13.7,6.7,3.9,1.9,1,0.5,0.2,0.5,1,1.9,3.9,6.7,13.7,58],15:[88,17.7,10.8,5,2.9,1.3,0.5,0.3,0.3,0.5,1.3,2.9,5,10.8,17.7,88],16:[110,40.5,9.8,4.8,2.9,1.5,1,0.5,0.3,0.5,1,1.5,2.9,4.8,9.8,40.5,110]},HIGH_RISK:{8:[29,3.8,1.5,0.3,0.2,0.3,1.5,3.8,29],9:[43,7.1,1.9,0.6,0.2,0.2,0.6,1.9,7.1,43],10:[76,9.9,2.9,0.9,0.3,0.2,0.3,0.9,2.9,9.9,76],11:[120,13.4,5.1,1.4,0.4,0.2,0.2,0.4,1.4,5.1,13.4,120],12:[170,23.2,7.9,2,0.7,0.2,0.2,0.2,0.7,2,7.9,23.2,170],13:[260,36.6,10.5,4,1,0.2,0.2,0.2,0.2,1,4,10.5,36.6,260],14:[420,55.5,17.6,4.9,1.9,0.3,0.2,0.2,0.2,0.3,1.9,4.9,17.6,55.5,420],15:[620,82.3,26.8,7.7,3,0.5,0.2,0.2,0.2,0.2,0.5,3,7.7,26.8,82.3,620],16:[1000,129.8,25.2,8.6,4,2,0.2,0.2,0.2,0.2,0.2,2,4,8.6,25.2,129.8,1000]}},Ge={LOW_RISK:{8:[6,2.2,1.1,1,0.4,1,1.1,2.2,6],9:[6,1.8,1.5,1,0.7,0.7,1,1.5,1.8,6],10:[9,2.4,1.3,1.1,1,0.5,1,1.1,1.3,2.4,9],11:[8,2.7,1.9,1.2,1,0.7,0.7,1,1.2,1.9,2.7,8],12:[10,3.3,1.6,1.2,1.1,1,0.5,1,1.1,1.2,1.6,3.3,10],13:[8,3.8,2.9,1.9,1.1,0.9,0.7,0.7,0.9,1.1,1.9,2.9,3.8,8],14:[7,3.9,2,1.4,1.3,1.1,1,0.4,1,1.1,1.3,1.4,2,3.9,7],15:[15,7.9,2.5,2,1.3,1.1,1,0.7,0.7,1,1.1,1.3,2,2.5,7.9,15],16:[16,8.9,1.9,1.4,1.4,1.2,1.1,1,0.4,1,1.1,1.2,1.4,1.4,1.9,8.9,16]},MEDIUM_RISK:{8:[13,3.5,1.2,0.7,0.3,0.7,1.2,3.5,13],9:[18,3.8,1.6,0.9,0.5,0.5,0.9,1.6,3.8,18],10:[22,5.2,2,1.3,0.6,0.4,0.6,1.3,2,5.2,22],11:[24,5.6,2.7,1.8,0.7,0.5,0.5,0.7,1.8,2.7,5.6,24],12:[33,11.3,4,1.8,1.1,0.6,0.3,0.6,1.1,1.8,4,11.3,33],13:[43,12.9,5.7,2.8,1.3,0.7,0.4,0.4,0.7,1.3,2.8,5.7,12.9,43],14:[58,13.7,6.9,3.9,1.8,1,0.5,0.2,0.5,1,1.8,3.9,6.9,13.7,58],15:[88,18,10.9,4.9,2.8,1.3,0.5,0.3,0.3,0.5,1.3,2.8,4.9,10.9,18,88],16:[110,39.9,9.9,5,2.9,1.4,1,0.5,0.3,0.5,1,1.4,2.9,5,9.9,39.9,110]},HIGH_RISK:{8:[29,4,1.4,0.3,0.2,0.3,1.4,4,29],9:[43,7.3,2,0.5,0.2,0.2,0.5,2,7.3,43],10:[76,9.8,2.8,0.9,0.3,0.2,0.3,0.9,2.8,9.8,76],11:[120,13.5,4.9,1.4,0.4,0.2,0.2,0.4,1.4,4.9,13.5,120],12:[170,23.3,7.9,1.9,0.7,0.2,0.2,0.2,0.7,1.9,7.9,23.3,170],13:[260,36.2,10.4,3.9,1,0.2,0.2,0.2,0.2,1,3.9,10.4,36.2,260],14:[420,54.8,17.9,4.9,1.8,0.3,0.2,0.2,0.2,0.3,1.8,4.9,17.9,54.8,420],15:[620,81.9,26.6,7.7,2.9,0.5,0.2,0.2,0.2,0.2,0.5,2.9,7.7,26.6,81.9,620],16:[1000,130,24.9,8.4,3.9,2,0.2,0.2,0.2,0.2,0.2,2,3.9,8.4,24.9,130,1000]}},Ce={LOW_RISK:{8:[6,2,1.1,1,0.4,1,1.1,2,6],9:[6,1.9,1.4,1,0.7,0.7,1,1.4,1.9,6],10:[9,2.8,1.1,1.1,1,0.5,1,1.1,1.1,2.8,9],11:[8,2.7,1.7,1.2,1,0.7,0.7,1,1.2,1.7,2.7,8],12:[10,2.7,1.4,1.2,1.1,1,0.5,1,1.1,1.2,1.4,2.7,10],13:[8,3.5,2.8,1.9,1.3,0.9,0.6,0.6,0.9,1.3,1.9,2.8,3.5,8],14:[7,3.3,1.6,1.3,1.3,1.1,1,0.4,1,1.1,1.3,1.3,1.6,3.3,7],15:[15,8,2.9,2,1.4,1.2,1,0.6,0.6,1,1.2,1.4,2,2.9,8,15],16:[16,9.1,2.2,1.4,1.2,1.2,1.1,1,0.4,1,1.1,1.2,1.2,1.4,2.2,9.1,16]},MEDIUM_RISK:{8:[13,2.9,1.2,0.7,0.4,0.7,1.2,2.9,13],9:[18,3.5,1.6,0.9,0.5,0.5,0.9,1.6,3.5,18],10:[22,4.7,2,1.3,0.6,0.4,0.6,1.3,2,4.7,22],11:[24,5.7,2.5,1.8,0.7,0.5,0.5,0.7,1.8,2.5,5.7,24],12:[33,10.7,3.8,1.8,1.1,0.6,0.3,0.6,1.1,1.8,3.8,10.7,33],13:[43,12.6,5.6,2.7,1.3,0.7,0.4,0.4,0.7,1.3,2.7,5.6,12.6,43],14:[58,13.7,6.4,3.8,1.8,1,0.5,0.2,0.5,1,1.8,3.8,6.4,13.7,58],15:[88,17.7,10.7,4.9,2.7,1.3,0.5,0.3,0.3,0.5,1.3,2.7,4.9,10.7,17.7,88],16:[110,39.7,9.6,4.8,2.8,1.4,1,0.5,0.3,0.5,1,1.4,2.8,4.8,9.6,39.7,110]},HIGH_RISK:{8:[29,3.9,1.4,0.3,0.2,0.3,1.4,3.9,29],9:[43,6.9,1.8,0.6,0.2,0.2,0.6,1.8,6.9,43],10:[76,9.8,2.7,0.9,0.3,0.2,0.3,0.9,2.7,9.8,76],11:[120,13.1,5.1,1.3,0.4,0.2,0.2,0.4,1.3,5.1,13.1,120],12:[170,22.7,7.7,1.9,0.7,0.2,0.2,0.2,0.7,1.9,7.7,22.7,170],13:[260,35.9,10.3,3.8,1,0.2,0.2,0.2,0.2,1,3.8,10.3,35.9,260],14:[420,54.2,17.5,4.8,1.8,0.3,0.2,0.2,0.2,0.3,1.8,4.8,17.5,54.2,420],15:[620,80.6,26.1,7.8,2.8,0.5,0.2,0.2,0.2,0.2,0.5,2.8,7.8,26.1,80.6,620],16:[1000,129.7,24.7,8.2,3.8,2,0.2,0.2,0.2,0.2,0.2,2,3.8,8.2,24.7,129.7,1000]}},Le={LOW_RISK:{8:[5,1.8,1,1,0.4,1,1,1.8,5],9:[5,1.7,1.2,1,0.7,0.7,1,1.2,1.7,5],10:[9,2.8,1.2,1,1,0.4,1,1,1.2,2.8,9],11:[8,2.5,1.6,1,1,0.7,0.7,1,1,1.6,2.5,8],12:[10,2.5,1.3,1.3,1,1,0.4,1,1,1.3,1.3,2.5,10],13:[8,4.1,2.8,1.8,1.1,0.9,0.6,0.6,0.9,1.1,1.8,2.8,4.1,8],14:[7,3.3,1.7,1.2,1.2,1,1,0.4,1,1,1.2,1.2,1.7,3.3,7],15:[15,7.3,2.9,1.9,1.4,1,1,0.6,0.6,1,1,1.4,1.9,2.9,7.3,15],16:[16,8.7,2,1.5,1.3,1,1.1,1,0.3,1,1.1,1,1.3,1.5,2,8.7,16]},MEDIUM_RISK:{8:[13,2.6,1.1,0.7,0.4,0.7,1.1,2.6,13],9:[17,3.3,1.4,0.9,0.5,0.5,0.9,1.4,3.3,17],10:[21,4.1,1.7,1.3,0.6,0.4,0.6,1.3,1.7,4.1,21],11:[23,5.6,2.4,1.6,0.7,0.5,0.5,0.7,1.6,2.4,5.6,23],12:[32,10.2,3.7,1.7,1.1,0.6,0.2,0.6,1.1,1.7,3.7,10.2,32],13:[42,11.7,5.3,2.5,1.2,0.7,0.4,0.4,0.7,1.2,2.5,5.3,11.7,42],14:[56,13.2,5.9,3.6,1.6,1,0.5,0.2,0.5,1,1.6,3.6,5.9,13.2,56],15:[86,17.3,10,4.6,2.6,1.2,0.5,0.3,0.3,0.5,1.2,2.6,4.6,10,17.3,86],16:[107,39,9.9,4.5,2.4,1.3,1,0.5,0.3,0.5,1,1.3,2.4,4.5,9.9,39,107]},HIGH_RISK:{8:[28,3.3,1.4,0.3,0.2,0.3,1.4,3.3,28],9:[42,6.7,1.6,0.6,0.2,0.2,0.6,1.6,6.7,42],10:[74,9.6,2.6,0.9,0.3,0.1,0.3,0.9,2.6,9.6,74],11:[116,12.7,4.8,1.2,0.4,0.2,0.2,0.4,1.2,4.8,12.7,116],12:[165,20.9,7.2,1.8,0.7,0.2,0.2,0.2,0.7,1.8,7.2,20.9,165],13:[252,33.9,10.1,3.4,1,0.2,0.2,0.2,0.2,1,3.4,10.1,33.9,252],14:[407,51.9,16.3,4.6,1.7,0.3,0.2,0.2,0.2,0.3,1.7,4.6,16.3,51.9,407],15:[600,76.9,24.9,7.4,2.6,0.5,0.2,0.2,0.2,0.2,0.5,2.6,7.4,24.9,76.9,600],16:[1000,122,24.5,8,3.7,1.8,0.2,0.2,0.2,0.2,0.2,1.8,3.7,8,24.5,122,1000]}},X=new s(new Map([[1,Te],[2,Ie],[3,Ge],[4,Ce],[8,Le]]));class Hr extends R{constructor(){super("PLINKO")}determineGameResult({generator:r,gameInputs:e,edge:t}){if(e.numberOfRows%1>0)throw new Error("Number of rows must be an integer");if(e.numberOfRows<8||e.numberOfRows>16)throw new Error("Number of rows must be between 8 and 16");let o=e.numberOfRows,a=X.getMultipliers(t)[e.riskLevel][o],l=r.getRandomIntsWithReplacement({min:0,max:1,count:e.numberOfRows}),p=l.values.reduce((f,B)=>f+B,0),c=a[p];if(c===void 0)throw new Error(`No payout found for end position ${p}`);return{isFinished:!0,payoutMultiplier:hr.Big(c),outputs:{result:l.values},randomValues:l}}}var N=require("big.js");var P=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36],W=[37,...P],g=[[0,1],[0,2],[0,3],[1,2],[1,4],[2,3],[2,5],[3,6],[4,5],[4,7],[5,6],[5,8],[6,9],[7,8],[7,10],[8,9],[8,11],[9,12],[10,11],[10,13],[11,12],[11,14],[12,15],[13,14],[13,16],[14,15],[14,17],[15,18],[16,17],[16,19],[17,18],[17,20],[18,21],[19,20],[19,22],[20,21],[20,23],[21,24],[22,23],[22,25],[23,24],[23,26],[24,27],[25,26],[25,28],[26,27],[26,29],[27,30],[28,29],[28,31],[29,30],[29,32],[30,33],[31,32],[31,34],[32,33],[32,35],[33,36],[34,35],[35,36]],rr=[[0,1],[0,2],[0,37],[2,37],[3,37],[1,2],[1,4],[2,3],[2,5],[3,6],[4,5],[4,7],[5,6],[5,8],[6,9],[7,8],[7,10],[8,9],[8,11],[9,12],[10,11],[10,13],[11,12],[11,14],[12,15],[13,14],[13,16],[14,15],[14,17],[15,18],[16,17],[16,19],[17,18],[17,20],[18,21],[19,20],[19,22],[20,21],[20,23],[21,24],[22,23],[22,25],[23,24],[23,26],[24,27],[25,26],[25,28],[26,27],[26,29],[27,30],[28,29],[28,31],[29,30],[29,32],[30,33],[31,32],[31,34],[32,33],[32,35],[33,36],[34,35],[35,36]],er=[[0,1,2],[0,2,3],[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18],[19,20,21],[22,23,24],[25,26,27],[28,29,30],[31,32,33],[34,35,36]],tr=[[0,1,2],[0,2,37],[1,2,3],[2,3,37],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18],[19,20,21],[22,23,24],[25,26,27],[28,29,30],[31,32,33],[34,35,36]],or=[[0,1,2,3],[1,2,4,5],[2,3,5,6],[4,5,7,8],[5,6,8,9],[7,8,10,11],[8,9,11,12],[10,11,13,14],[11,12,14,15],[13,14,16,17],[14,15,17,18],[16,17,19,20],[17,18,20,21],[19,20,22,23],[20,21,23,24],[22,23,25,26],[23,24,26,27],[25,26,28,29],[26,27,29,30],[28,29,31,32],[29,30,32,33],[31,32,34,35],[32,33,35,36]],ir=[[1,2,4,5],[2,3,5,6],[4,5,7,8],[5,6,8,9],[7,8,10,11],[8,9,11,12],[10,11,13,14],[11,12,14,15],[13,14,16,17],[14,15,17,18],[16,17,19,20],[17,18,20,21],[19,20,22,23],[20,21,23,24],[22,23,25,26],[23,24,26,27],[25,26,28,29],[26,27,29,30],[28,29,31,32],[29,30,32,33],[31,32,34,35],[32,33,35,36]],nr=[0,1,2,3,37],ar=[[1,2,3,4,5,6],[4,5,6,7,8,9],[7,8,9,10,11,12],[10,11,12,13,14,15],[13,14,15,16,17,18],[16,17,18,19,20,21],[19,20,21,22,23,24],[22,23,24,25,26,27],[25,26,27,28,29,30],[28,29,30,31,32,33],[31,32,33,34,35,36]],Er=[[1,2,3,4,5,6],[4,5,6,7,8,9],[7,8,9,10,11,12],[10,11,12,13,14,15],[13,14,15,16,17,18],[16,17,18,19,20,21],[19,20,21,22,23,24],[22,23,24,25,26,27],[25,26,27,28,29,30],[28,29,30,31,32,33],[31,32,33,34,35,36]],S;((t)=>{t.EVEN="EVEN";t.ODD="ODD"})(S||={});var T;((t)=>{t.RED="RED";t.BLACK="BLACK"})(T||={});var I;((t)=>{t.LOW="LOW";t.HIGH="HIGH"})(I||={});var G;((o)=>{o.TOP="TOP";o.MIDDLE="MIDDLE";o.BOTTOM="BOTTOM"})(G||={});var C;((o)=>{o.FIRST="FIRST";o.SECOND="SECOND";o.THIRD="THIRD"})(C||={});var F;((t)=>{t.AMERICAN="AMERICAN";t.EUROPEAN="EUROPEAN"})(F||={});var Y=(r)=>{if(r.straightBets.length===0&&r.splitBets.length===0&&r.streetBets.length===0&&r.cornerBets.length===0&&r.doubleStreetBets.length===0&&r.parityBets.length===0&&r.colorBets.length===0&&r.halfBets.length===0&&r.columnBets.length===0&&r.dozenBets.length===0)throw E.createValidationError("Must place at least a single bet.");if(!r.straightBets.every((e)=>e.amount.gte(0)&&D(e.value)))throw E.createValidationError("Invalid straight bet.");if(!r.splitBets.every((e)=>e.amount.gte(0)&&me(e.values)))throw E.createValidationError("Invalid split bet.");if(!r.streetBets.every((e)=>e.amount.gte(0)&&Ke(e.values)))throw E.createValidationError("Invalid street bet.");if(!r.cornerBets.every((e)=>e.amount.gte(0)&&ye(e.values)))throw E.createValidationError("Invalid corner bet.");if(!r.doubleStreetBets.every((e)=>e.amount.gte(0)&&Ze(e.values)))throw E.createValidationError("Invalid double street bet.");if(!r.parityBets.every((e)=>e.amount.gte(0)&&Object.values(S).includes(e.parity)))throw E.createValidationError("Invalid parity bet.");if(!r.colorBets.every((e)=>e.amount.gte(0)&&Object.values(T).includes(e.color)))throw E.createValidationError("Invalid color bet.");if(!r.halfBets.every((e)=>e.amount.gte(0)&&Object.values(I).includes(e.half)))throw E.createValidationError("Invalid half bet.");if(!r.columnBets.every((e)=>e.amount.gte(0)&&Object.values(G).includes(e.column)))throw E.createValidationError("Invalid column bet.");if(!r.dozenBets.every((e)=>e.amount.gte(0)&&Object.values(C).includes(e.dozen)))throw E.createValidationError("Invalid dozen bet.")},D=(r)=>{return P.includes(r)},me=(r)=>{if(r.length!==2)return!1;if(!r.every(D))return!1;return g.some(([e,t])=>e===r[0]&&t===r[1])},Ke=(r)=>{if(r.length!==3)return!1;if(!r.every(D))return!1;return er.some(([e,t,o])=>e===r[0]&&t===r[1]&&o===r[2])},ye=(r)=>{if(r.length!==4)return!1;if(!r.every(D))return!1;return or.some(([e,t,o,i])=>e===r[0]&&t===r[1]&&o===r[2]&&i===r[3])},Ze=(r)=>{if(r.length!==6)return!1;if(!r.every(D))return!1;return ar.some(([e,t,o,i,n,a])=>e===r[0]&&t===r[1]&&o===r[2]&&i===r[3]&&n===r[4]&&a===r[5])};var k=(r)=>{if(r.straightBets.length===0&&r.splitBets.length===0&&r.streetBets.length===0&&r.cornerBets.length===0&&r.basketBets.length===0&&r.doubleStreetBets.length===0&&r.parityBets.length===0&&r.colorBets.length===0&&r.halfBets.length===0&&r.columnBets.length===0&&r.dozenBets.length===0)throw E.createValidationError("Must place at least a single bet.");if(!r.straightBets.every((e)=>e.amount.gte(0)&&b(e.value)))throw E.createValidationError("Invalid straight bet.");if(!r.splitBets.every((e)=>e.amount.gte(0)&&_e(e.values)))throw E.createValidationError("Invalid split bet.");if(!r.streetBets.every((e)=>e.amount.gte(0)&&De(e.values)))throw E.createValidationError("Invalid street bet.");if(!r.cornerBets.every((e)=>e.amount.gte(0)&&be(e.values)))throw E.createValidationError("Invalid corner bet.");if(!r.basketBets.every((e)=>e.amount.gte(0)))throw E.createValidationError("Invalid basket bet.");if(!r.doubleStreetBets.every((e)=>e.amount.gte(0)&&Ne(e.values)))throw E.createValidationError("Invalid double street bet.");if(!r.parityBets.every((e)=>e.amount.gte(0)&&Object.values(S).includes(e.parity)))throw E.createValidationError("Invalid parity bet.");if(!r.colorBets.every((e)=>e.amount.gte(0)&&Object.values(T).includes(e.color)))throw E.createValidationError("Invalid color bet.");if(!r.halfBets.every((e)=>e.amount.gte(0)&&Object.values(I).includes(e.half)))throw E.createValidationError("Invalid half bet.");if(!r.columnBets.every((e)=>e.amount.gte(0)&&Object.values(G).includes(e.column)))throw E.createValidationError("Invalid column bet.");if(!r.dozenBets.every((e)=>e.amount.gte(0)&&Object.values(C).includes(e.dozen)))throw E.createValidationError("Invalid dozen bet.")},b=(r)=>{return W.includes(r)};function _e(r){if(r.length!==2)return!1;if(!r.every(b))return!1;return rr.some(([e,t])=>e===r[0]&&t===r[1])}var De=(r)=>{if(r.length!==3)return!1;if(!r.every(b))return!1;return tr.some(([e,t,o])=>e===r[0]&&t===r[1]&&o===r[2])},be=(r)=>{if(r.length!==4)return!1;if(!r.every(b))return!1;return ir.some(([e,t,o,i])=>e===r[0]&&t===r[1]&&o===r[2]&&i===r[3])},Ne=(r)=>{if(r.length!==6)return!1;if(!r.every(b))return!1;return Er.some(([e,t,o,i,n,a])=>e===r[0]&&t===r[1]&&o===r[2]&&i===r[3]&&n===r[4]&&a===r[5])};var Ur={straightBets:36,splitBets:18,streetBets:12,cornerBets:9,basketBets:7,doubleStreetBets:6,parityBets:2,colorBets:2,halfBets:2,columnBets:3,dozenBets:3},Pr=[3,6,9,12,15,18,21,24,27,30,33,36],Fr=[2,5,8,11,14,17,20,23,26,29,32,35],Yr=[1,4,7,10,13,16,19,22,25,28,31,34],kr=[1,3,5,7,9,12,14,16,18,19,21,23,25,27,30,32,34,36],$r=[2,4,6,8,10,11,13,15,17,20,22,24,26,28,29,31,33,35],jr=2.7,zr=5.3;class cr extends R{constructor(){super("ROULETTE")}determineGameResult({generator:r,gameInputs:e}){this.validateInputs(e);let t=r.getRandomInt({min:0,max:this.maxNumber}),o=t.value,i=this.determineBetOutcomes(e,o),{payoutMultiplier:n}=this.getPayoutDetails(e,o);return{outputs:{betOutcomes:i,result:t.values},payoutMultiplier:n,isFinished:!0,randomValues:t}}getPayoutDetails(r,e){let t=this.determineBetOutcomes(r,e),o=this.getBetTotals(r),i=this.getBetTotals(t.winningBets),n=this.calculateTotalBetAmount(o),a=this.calculateTotalPayout(i);return{payoutMultiplier:n.gt(0)?a.div(n):new N.Big(0),payoutAmount:a}}determineBetOutcomes(r,e){let t={},o={};for(let i of Object.keys(r)){let n=r[i],a=this.betPredicates[i],{winning:l,losing:A}=this.partitionBets(n,a,e);t[i]=l,o[i]=A}return{winningBets:t,losingBets:o}}partitionBets(r,e,t){return{winning:r.filter((o)=>e(o,t)),losing:r.filter((o)=>!e(o,t))}}calculateTotalAmount(r){return r.reduce((e,t)=>e.plus(t.amount),new N.Big(0))}isWinningStraightBet(r,e){return r.value===e}isWinningSplitBet(r,e){return r.values.some((t)=>t===e)}isWinningStreetBet(r,e){return r.values.some((t)=>t===e)}isWinningCornerBet(r,e){return r.values.some((t)=>t===e)}isWinningDoubleStreetBet(r,e){return r.values.some((t)=>t===e)}isWinningColorBet(r,e){let t=r;return kr.includes(e)&&t.color==="RED"||$r.includes(e)&&t.color==="BLACK"}isWinningHalfBet(r,e){let t=r;if(e>0&&e<=18&&t.half==="LOW")return!0;if(e>18&&e<=36&&t.half==="HIGH")return!0;return!1}isWinningColumnBet(r,e){let t=r;return Pr.includes(e)&&t.column==="TOP"||Fr.includes(e)&&t.column==="MIDDLE"||Yr.includes(e)&&t.column==="BOTTOM"}isWinningDozenBet(r,e){let t=r;if(e>0&&e<=12&&t.dozen==="FIRST")return!0;if(e>12&&e<=24&&t.dozen==="SECOND")return!0;if(e>24&&e<=36&&t.dozen==="THIRD")return!0;return!1}isWinningParityBet(r,e){let t=r;if(e===0||e===37)return!1;let o=e%2===0?"EVEN":"ODD";return t.parity===o}getBetTotals(r){let e={};for(let t of Object.keys(r))e[t]=this.calculateTotalAmount(r[t]);return e}calculateTotalPayout(r){return Object.entries(r).reduce((e,[t,o])=>{let n=Ur[t];return e.plus(o.mul(n||0))},new N.Big(0))}calculateTotalBetAmount(r){return Object.values(r).reduce((e,t)=>e.plus(t),new N.Big(0))}}class Ar extends cr{maxNumber=36;validateInputs(r){Y(r)}betPredicates={straightBets:this.isWinningStraightBet,splitBets:this.isWinningSplitBet,streetBets:this.isWinningStreetBet,cornerBets:this.isWinningCornerBet,doubleStreetBets:this.isWinningDoubleStreetBet,parityBets:this.isWinningParityBet,colorBets:this.isWinningColorBet,halfBets:this.isWinningHalfBet,columnBets:this.isWinningColumnBet,dozenBets:this.isWinningDozenBet}}class lr extends cr{maxNumber=37;validateInputs(r){k(r)}betPredicates={straightBets:this.isWinningStraightBet,splitBets:this.isWinningSplitBet,streetBets:this.isWinningStreetBet,cornerBets:this.isWinningCornerBet,basketBets:this.isWinningBasketBet,doubleStreetBets:this.isWinningDoubleStreetBet,parityBets:this.isWinningParityBet,colorBets:this.isWinningColorBet,halfBets:this.isWinningHalfBet,columnBets:this.isWinningColumnBet,dozenBets:this.isWinningDozenBet};isWinningBasketBet(r,e){return nr.some((t)=>t===e)}}class qr extends R{europeanGame;americanGame;constructor(){super("ROULETTE");this.europeanGame=new Ar,this.americanGame=new lr}determineGameResult(r){let{gameInputs:e,...t}=r;if(r.edge===jr&&e.type==="EUROPEAN"){let o=this.europeanGame.determineGameResult({...t,gameInputs:e.inputs}),{betOutcomes:i}=o.outputs;return{...o,outputs:{type:"european",betOutcomes:i,result:o.outputs.result}}}if(r.edge===zr&&e.type==="AMERICAN"){let o=this.americanGame.determineGameResult({...t,gameInputs:e.inputs}),{betOutcomes:i}=o.outputs;return{...o,outputs:{type:"american",betOutcomes:i,result:o.outputs.result}}}throw new Error("Only European & American Roulette games are supported")}}var Me=(r)=>{if(r.type==="EUROPEAN")Y(r.inputs);else k(r.inputs)};var Xr=require("big.js");var K;((o)=>{o.LOW_RISK="LOW_RISK";o.MEDIUM_RISK="MEDIUM_RISK";o.HIGH_RISK="HIGH_RISK"})(K||={});var y;((n)=>{n[n.TEN=10]="TEN";n[n.TWENTY=20]="TWENTY";n[n.THIRTY=30]="THIRTY";n[n.FORTY=40]="FORTY";n[n.FIFTY=50]="FIFTY"})(y||={});var Ve={LOW_RISK:{10:{ZERO:0,A:1.2,B:1.5},20:{ZERO:0,A:1.2,B:1.5},30:{ZERO:0,A:1.2,B:1.5},40:{ZERO:0,A:1.2,B:1.5},50:{ZERO:0,A:1.2,B:1.5}},MEDIUM_RISK:{10:{ZERO:0,A:1.5,B:1.9,C:2,D:3},20:{ZERO:0,A:1.5,B:1.8,C:2,D:3},30:{ZERO:0,A:1.5,B:1.7,C:2,D:3,E:4},40:{ZERO:0,A:1.5,B:1.6,C:2,D:3},50:{ZERO:0,A:1.5,B:2,C:3,D:5}},HIGH_RISK:{10:{ZERO:0,A:9.9},20:{ZERO:0,A:19.8},30:{ZERO:0,A:29.7},40:{ZERO:0,A:39.6},50:{ZERO:0,A:49.5}}},we={LOW_RISK:{10:{ZERO:0,A:1.2,B:1.4},20:{ZERO:0,A:1.2,B:1.4},30:{ZERO:0,A:1.2,B:1.4},40:{ZERO:0,A:1.2,B:1.4},50:{ZERO:0,A:1.2,B:1.4}},MEDIUM_RISK:{10:{ZERO:0,A:1.4,B:1.9,C:2,D:3.1},20:{ZERO:0,A:1.5,B:1.8,C:1.9,D:3.4},30:{ZERO:0,A:1.5,B:1.7,C:1.9,D:3,E:4.3},40:{ZERO:0,A:1.5,B:1.6,C:2,D:2.9},50:{ZERO:0,A:1.5,B:2,C:3,D:4.5}},HIGH_RISK:{10:{ZERO:0,A:9.8},20:{ZERO:0,A:19.6},30:{ZERO:0,A:29.4},40:{ZERO:0,A:39.2},50:{ZERO:0,A:49}}},ve={LOW_RISK:{10:{ZERO:0,A:1.15,B:1.65},20:{ZERO:0,A:1.15,B:1.65},30:{ZERO:0,A:1.15,B:1.65},40:{ZERO:0,A:1.15,B:1.65},50:{ZERO:0,A:1.15,B:1.65}},MEDIUM_RISK:{10:{ZERO:0,A:1.4,B:1.9,C:2,D:3},20:{ZERO:0,A:1.4,B:1.6,C:2,D:3},30:{ZERO:0,A:1.4,B:1.7,C:2,D:3,E:4},40:{ZERO:0,A:1.5,B:1.6,C:2,D:2.8},50:{ZERO:0,A:1.5,B:2,C:2.7,D:4.9}},HIGH_RISK:{10:{ZERO:0,A:9.7},20:{ZERO:0,A:19.4},30:{ZERO:0,A:29.1},40:{ZERO:0,A:38.8},50:{ZERO:0,A:48.5}}},he={LOW_RISK:{10:{ZERO:0,A:1.15,B:1.55},20:{ZERO:0,A:1.15,B:1.55},30:{ZERO:0,A:1.15,B:1.55},40:{ZERO:0,A:1.15,B:1.55},50:{ZERO:0,A:1.15,B:1.55}},MEDIUM_RISK:{10:{ZERO:0,A:1.4,B:1.8,C:2,D:3},20:{ZERO:0,A:1.3,B:1.5,C:2,D:3},30:{ZERO:0,A:1.4,B:1.6,C:2,D:2.9,E:4},40:{ZERO:0,A:1.5,B:1.6,C:2,D:2.7},50:{ZERO:0,A:1.5,B:2,C:2.6,D:4.8}},HIGH_RISK:{10:{ZERO:0,A:9.6},20:{ZERO:0,A:19.2},30:{ZERO:0,A:28.8},40:{ZERO:0,A:38.4},50:{ZERO:0,A:48}}},He={LOW_RISK:{10:{ZERO:0,A:1.1,B:1.5},20:{ZERO:0,A:1.1,B:1.5},30:{ZERO:0,A:1.1,B:1.45},40:{ZERO:0,A:1.1,B:1.45},50:{ZERO:0,A:1.1,B:1.45}},MEDIUM_RISK:{10:{ZERO:0,A:1.3,B:1.7,C:1.9,D:3},20:{ZERO:0,A:1.3,B:1.4,C:1.9,D:3},30:{ZERO:0,A:1.3,B:1.7,C:1.9,D:2.8,E:3.8},40:{ZERO:0,A:1.4,B:1.8,C:1.9,D:2.6},50:{ZERO:0,A:1.4,B:1.9,C:2.6,D:4.6}},HIGH_RISK:{10:{ZERO:0,A:9.2},20:{ZERO:0,A:18.4},30:{ZERO:0,A:27.6},40:{ZERO:0,A:36.8},50:{ZERO:0,A:46}}},Jr=new s(new Map([[1,Ve],[2,we],[3,ve],[4,he],[8,He]]));var Qr={LOW_RISK:{10:["B","A","A","A","ZERO","A","A","A","A","ZERO"],20:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"],30:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"],40:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"],50:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"]},MEDIUM_RISK:{10:["ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","D"],20:["A","ZERO","C","ZERO","B","ZERO","C","ZERO","C","ZERO","A","ZERO","C","ZERO","C","ZERO","D","ZERO","C","ZERO"],30:["A","ZERO","C","ZERO","A","ZERO","C","ZERO","D","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","C","ZERO","A","ZERO","C","ZERO","E","ZERO","A","ZERO","C","ZERO"],40:["C","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO","C","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO","C","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO"],50:["A","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","B","ZERO","A","ZERO","D","ZERO","A","ZERO","B","ZERO","A","ZERO"]},HIGH_RISK:{10:[...Array(9).fill("ZERO"),"A"],20:[...Array(19).fill("ZERO"),"A"],30:[...Array(29).fill("ZERO"),"A"],40:[...Array(39).fill("ZERO"),"A"],50:[...Array(49).fill("ZERO"),"A"]}};class Wr extends R{constructor(){super("WHEEL")}determineGameResult({generator:r,gameInputs:e,edge:t}){if(!Object.values(y).includes(e.segments))throw new Error("Invalid segments value");if(!Object.values(K).includes(e.riskLevel))throw new Error("Invalid risk level");let i=Jr.getMultipliers(t)[e.riskLevel];if(i===void 0)throw new Error(`No multipliers found for risk level ${e.riskLevel}`);let n=i[e.segments];if(n===void 0)throw new Error(`No multipliers found for segment ${e.segments}`);let a=Qr[e.riskLevel];if(a===void 0)throw new Error(`No patterns found for risk level ${e.riskLevel}`);let l=a[e.segments];if(l===void 0)throw new Error(`No patterns found for segment ${e.segments}`);let A=r.getRandomInt({min:0,max:l.length-1}),p=l[A.value];if(p===void 0)throw new Error(`No pattern found for segment ${e.segments} and value ${A.value}`);let c=n[p];if(c===void 0)throw new Error(`No payout found for picked segment ${p}`);return{isFinished:!0,payoutMultiplier:new Xr.Big(c),outputs:{result:A.values},randomValues:A}}}
package/dist/index.d.ts CHANGED
@@ -1624,7 +1624,14 @@ declare abstract class BaseRoulette<TInputs extends {
1624
1624
  protected abstract readonly maxNumber: number;
1625
1625
  protected abstract validateInputs(inputs: TInputs): void;
1626
1626
  protected abstract readonly betPredicates: Record<keyof TInputs, BetPredicate>;
1627
- protected determineBetOutcomes(inputs: TInputs, result: number): TOutputs["betOutcomes"];
1627
+ getPayoutDetails(gameInputs: TInputs, gameResult: number): {
1628
+ payoutMultiplier: Big$1.Big;
1629
+ payoutAmount: Big$1.Big;
1630
+ };
1631
+ protected determineBetOutcomes(inputs: TInputs, result: number): {
1632
+ winningBets: TInputs;
1633
+ losingBets: TInputs;
1634
+ };
1628
1635
  private partitionBets;
1629
1636
  protected calculateTotalAmount(bets: {
1630
1637
  amount: Big$1.Big;
@@ -1640,7 +1647,7 @@ declare abstract class BaseRoulette<TInputs extends {
1640
1647
  protected isWinningDozenBet(bet: BaseBet, gameResult: number): boolean;
1641
1648
  protected isWinningParityBet(bet: BaseBet, gameResult: number): boolean;
1642
1649
  protected getBetTotals(inputs: TInputs): Record<keyof TInputs, Big$1.Big>;
1643
- protected calculateTotalPayout(totals: Record<keyof TInputs, Big$1.Big>): Big$1.Big;
1650
+ calculateTotalPayout(totals: Record<keyof TInputs, Big$1.Big>): Big$1.Big;
1644
1651
  protected calculateTotalBetAmount(totals: Record<keyof TInputs, Big$1.Big>): Big$1.Big;
1645
1652
  }
1646
1653
  export declare class EuropeanRoulette extends BaseRoulette<EuropeanRouletteGameInputs, EuropeanRouletteGameOutputs> {
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- var u;((c)=>{c.DICE="DICE";c.MINES="MINES";c.KENO="KENO";c.LIMBO="LIMBO";c.ADVANCED_DICE="ADVANCED_DICE";c.BACCARAT="BACCARAT";c.DIAMONDS="DIAMONDS";c.PLINKO="PLINKO";c.ROULETTE="ROULETTE";c.WHEEL="WHEEL"})(u||={});class R{gameId;constructor(r){this.gameId=r}getGameResult(r){return this.determineGameResult(r)}}import{Big as H}from"big.js";var Br;((e)=>e.INPUT_VALIDATION_ERROR="INPUT_VALIDATION_ERROR")(Br||={});class E extends Error{static createValidationError(r){return new E("INPUT_VALIDATION_ERROR",r)}static isGameError(r){return r instanceof E}errorCode;constructor(r,e){super(e);this.errorCode=r}}var U=0,P=1e4,z=10001,dr=0.01,sr=98,xr=(r)=>{if(r<U)throw E.createValidationError(`Lower bound ${r} is below minimum allowed value ${U}`)},Sr=(r)=>{if(r>P)throw E.createValidationError(`Upper bound ${r} is above maximum allowed value ${P}`)},b=(r)=>{if(xr(r.lower),Sr(r.upper),r.lower>=r.upper)throw E.createValidationError(`Lower bound ${r.lower} must be less than ${r.upper}`)},Ir=(r,e)=>{let[t,o]=r.lower<=e.lower?[r,e]:[e,r];if(t.upper>o.lower)throw E.createValidationError("Bounds must not overlap")},Tr=(r,e)=>e>=r.lower&&e<=r.upper,mr=(r)=>r.upper-r.lower+1,v=(r,e)=>e>r.lower&&e<r.upper,h=(r)=>r.upper-r.lower-1,Gr;((o)=>{o.ROLL_BETWEEN="ROLL_BETWEEN";o.ROLL_OUTSIDE="ROLL_OUTSIDE";o.ROLL_BETWEEN_TWO="ROLL_BETWEEN_TWO"})(Gr||={});var q=(r)=>{let t=(()=>{switch(r.mode){case"ROLL_BETWEEN":return b(r.bounds),h(r.bounds);case"ROLL_OUTSIDE":return b(r.bounds),z-mr(r.bounds);case"ROLL_BETWEEN_TWO":return b(r.firstBounds),b(r.secondBounds),Ir(r.firstBounds,r.secondBounds),h(r.firstBounds)+h(r.secondBounds)}})(),o=H(t).div(z).mul(100);if(o.lt(dr))throw E.createValidationError("Win chance too low");if(o.gt(sr))throw E.createValidationError("Win chance too high");return o},Ve=(r)=>{q(r)};class Cr extends R{constructor(){super("ADVANCED_DICE")}determineGameResult({generator:r,edge:e,gameInputs:t}){let o=q(t),i=r.getRandomInt({min:U,max:P}),n=i.value;return{isFinished:!0,payoutMultiplier:(()=>{switch(t.mode){case"ROLL_BETWEEN":return v(t.bounds,n);case"ROLL_OUTSIDE":return!Tr(t.bounds,n);case"ROLL_BETWEEN_TWO":return v(t.firstBounds,n)||v(t.secondBounds,n)}})()?new H(100-e).div(o):new H(0),outputs:{result:i.values},randomValues:i}}}import C from"big.js";var Lr=["Clubs","Diamonds","Hearts","Spades"],yr=["Ace","2","3","4","5","6","7","8","9","10","Jack","Queen","King"],Kr;((o)=>{o.PLAYER_WIN="PLAYER_WIN";o.TIE="TIE";o.BANKER_WIN="BANKER_WIN"})(Kr||={});var Zr;((o)=>{o.PLAYER="PLAYER";o.TIE="TIE";o.BANKER="BANKER"})(Zr||={});var _r={["PLAYER_WIN"]:{betType:"PLAYER",multiplier:2},["TIE"]:{betType:"TIE",multiplier:8},["BANKER_WIN"]:{betType:"BANKER",multiplier:1.95}},Dr=(r)=>{return new C(0).add(r.bets.reduce((t,o)=>t.add(o.amount),new C(0)))};class br extends R{constructor(){super("BACCARAT")}determineGameResult({generator:r,gameInputs:e,edge:t}){if(t!==1)throw new Error("Baccarat is only available at 1% edge.");this.validateGameInputs(e);let o=r.getRandomIntsWithReplacement({min:0,max:51,count:6}),i=o.values,n=i.slice(0,3),a=i.slice(3,6),l=[],A=0;for(let f of n.slice(0,2)){let d=this.mapRandomValueToCard(f),D=this.mapRandomValueToCardValue(f);l.push(d),A=(A+D)%10}let p=[],c=0;for(let f of a.slice(0,2)){let d=this.mapRandomValueToCard(f),D=this.mapRandomValueToCardValue(f);p.push(d),c=(c+D)%10}if(!this.isNaturalWin(A,c)){let f=this.shouldDrawThirdPlayerCard(A),d=null;if(f)d=this.mapRandomValueToCardValue(n[2]),l.push(this.mapRandomValueToCard(n[2])),A=(A+d)%10;if(this.shouldDrawThirdBankerCard(c,d))p.push(this.mapRandomValueToCard(a[2])),c=(c+this.mapRandomValueToCardValue(a[2]))%10}let O;if(A===c)O="TIE";else O=A>c?"PLAYER_WIN":"BANKER_WIN";let B=Dr(e),{betType:_,multiplier:fr}=_r[O],ur=new C(0).add(e.bets.filter((f)=>f.type===_).reduce((f,d)=>f.add(d.amount.mul(fr)),new C(0)));return{isFinished:!0,payoutMultiplier:B.gt(0)?ur.div(B):new C(0),outputs:{playerCards:l,playerHandValue:A,bankerCards:p,bankerHandValue:c,gameOutcome:O,result:o.values},randomValues:o}}validateGameInputs(r){if(r.bets.length===0)throw new Error("Must place at least a single bet.");if(!r.bets.every((e)=>e.amount.gte(0)))throw new Error("Invalid bet.")}mapRandomValueToCard(r){let e=Lr[Math.floor(r/13)],t=yr[r%13];return{suit:e,rank:t}}isNaturalWin(r,e){let t=[8,9];return t.includes(r)||t.includes(e)}mapRandomValueToCardValue(r){let e=r%13;if(e===0)return 1;if(e>=10)return 10;return e+1}shouldDrawThirdPlayerCard(r){return r<=5}shouldDrawThirdBankerCard(r,e){if(e===null)return r<=5;if(r<=2)return!0;if(r===3)return e!==8;if(r===4)return[2,3,4,5,6,7].includes(e);if(r===5)return[4,5,6,7].includes(e);if(r===6)return[6,7].includes(e);return!1}}import Nr from"big.js";class s{multipliers;constructor(r){this.multipliers=r}getMultipliers(r){let e=this.multipliers.get(r);if(e===void 0)throw new Error(`Multipliers for ${r} not found`);return e}getAllMultipliers(){return Array.from(this.multipliers.entries()).map(([r,e])=>({edge:r,multipliers:e}))}}var Mr;((a)=>{a.PAIR="PAIR";a.TWO_PAIR="TWO_PAIR";a.THREE_OF_A_KIND="THREE_OF_A_KIND";a.FULL_HOUSE="FULL_HOUSE";a.FOUR_OF_A_KIND="FOUR_OF_A_KIND";a.FIVE_OF_A_KIND="FIVE_OF_A_KIND"})(Mr||={});var Vr={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:4.3,FOUR_OF_A_KIND:5,FIVE_OF_A_KIND:50},wr={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:4,FOUR_OF_A_KIND:4.8,FIVE_OF_A_KIND:50},vr={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:3.7,FOUR_OF_A_KIND:4.6,FIVE_OF_A_KIND:50},hr={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:3.4,FOUR_OF_A_KIND:4.4,FIVE_OF_A_KIND:50},Hr={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:2.8,FULL_HOUSE:3.2,FOUR_OF_A_KIND:3.6,FIVE_OF_A_KIND:50},Ur=new s(new Map([[1,Vr],[2,wr],[3,vr],[4,hr],[8,Hr]])),Pr={2:"PAIR",3:"THREE_OF_A_KIND",4:"FOUR_OF_A_KIND",5:"FIVE_OF_A_KIND"};class Fr extends R{constructor(){super("DIAMONDS")}determineGameResult({generator:r,edge:e}){let t=r.getRandomIntsWithReplacement({min:0,max:6,count:5}),o=Ur.getMultipliers(e),i=t.values,n=this.calculatePayoutMultiplier(o,i);return{isFinished:!0,payoutMultiplier:Nr(n),outputs:{result:t.values},randomValues:t}}calculatePayoutMultiplier(r,e){let t=new Map;for(let n of e){let a=t.get(n)||0;t.set(n,a+1)}let o=[...t.values()].filter((n)=>n>1),i=this.classifyResult(o);return i===null?0:r[i]}classifyResult(r){if(r.length>2)throw new Error(`Unexpected number of repeats ${r.length}`);let[e,t]=r;if(e===void 0)return null;if(t===void 0){let o=Pr[e];if(o===void 0)throw new Error(`Unexpected single diamond repeat count: ${e}`);return o}return e===3||t===3?"FULL_HOUSE":"TWO_PAIR"}}import F from"big.js";var Yr;((t)=>{t.ABOVE="ABOVE";t.BELOW="BELOW"})(Yr||={});class kr extends R{constructor(){super("DICE")}determineGameResult({generator:r,edge:e,gameInputs:t}){let o=r.getRandomInt({min:0,max:1e4}),i=o.min,l=o.max-i+1-1,A=t.direction==="ABOVE"?l-t.selectedValue:t.selectedValue,p=new F(A).div(l).mul(100);return{isFinished:!0,payoutMultiplier:(t.direction==="ABOVE"?o.value>t.selectedValue:o.value<t.selectedValue)?new F(100-e).div(p):new F(0),outputs:{result:o.values},randomValues:o}}}import J from"big.js";var $r;((i)=>{i.CLASSIC="CLASSIC";i.LOW_RISK="LOW_RISK";i.MEDIUM_RISK="MEDIUM_RISK";i.HIGH_RISK="HIGH_RISK"})($r||={});var jr={[1]:{["CLASSIC"]:[0,3.96],["LOW_RISK"]:[0.7,1.85],["MEDIUM_RISK"]:[0.4,2.75],["HIGH_RISK"]:[0,3.96]},[2]:{["CLASSIC"]:[0,1.9,4.5],["LOW_RISK"]:[0,2,3.8],["MEDIUM_RISK"]:[0,1.8,5.1],["HIGH_RISK"]:[0,0,17.1]},[3]:{["CLASSIC"]:[0,1,3.1,10.4],["LOW_RISK"]:[0,1.1,1.38,26],["MEDIUM_RISK"]:[0,0,2.8,50],["HIGH_RISK"]:[0,0,0,81.5]},[4]:{["CLASSIC"]:[0,0.8,1.8,5,22.5],["LOW_RISK"]:[0,0,2.2,7.9,90],["MEDIUM_RISK"]:[0,0,1.7,10,100],["HIGH_RISK"]:[0,0,0,10,259]},[5]:{["CLASSIC"]:[0,0.25,1.4,4.1,16.5,36],["LOW_RISK"]:[0,0,1.5,4.2,13,300],["MEDIUM_RISK"]:[0,0,1.4,4,14,390],["HIGH_RISK"]:[0,0,0,4.5,48,450]},[6]:{["CLASSIC"]:[0,0,1,3.68,7,16.5,40],["LOW_RISK"]:[0,0,1.1,2,6.2,100,700],["MEDIUM_RISK"]:[0,0,0,3,9,180,710],["HIGH_RISK"]:[0,0,0,0,11,350,710]},[7]:{["CLASSIC"]:[0,0,0.47,3,4.5,14,31,60],["LOW_RISK"]:[0,0,1.1,1.6,3.5,15,225,700],["MEDIUM_RISK"]:[0,0,0,2,7,30,400,800],["HIGH_RISK"]:[0,0,0,0,7,90,400,800]},[8]:{["CLASSIC"]:[0,0,0,2.2,4,13,22,55,70],["LOW_RISK"]:[0,0,1.1,1.5,2,5.5,39,100,800],["MEDIUM_RISK"]:[0,0,0,2,4,11,67,400,900],["HIGH_RISK"]:[0,0,0,0,5,20,270,600,900]},[9]:{["CLASSIC"]:[0,0,0,1.55,3,8,15,44,60,85],["LOW_RISK"]:[0,0,1.1,1.3,1.7,2.5,7.5,50,250,1000],["MEDIUM_RISK"]:[0,0,0,2,2.5,5,15,100,500,1000],["HIGH_RISK"]:[0,0,0,0,4,11,56,500,800,1000]},[10]:{["CLASSIC"]:[0,0,0,1.4,2.25,4.5,8,17,50,80,100],["LOW_RISK"]:[0,0,1.1,1.2,1.3,1.8,3.5,13,50,250,1000],["MEDIUM_RISK"]:[0,0,0,1.6,2,4,7,26,100,500,1000],["HIGH_RISK"]:[0,0,0,0,3.5,8,13,63,500,800,1000]}};class zr extends R{multiplierOverrides;get multipliers(){return this.multiplierOverrides??jr}constructor(r){super("KENO");this.multiplierOverrides=r;if(r)this.validateMultiplierOverrides(r)}determineGameResult({generator:r,edge:e,gameInputs:t}){if(e!==1&&!this.multiplierOverrides)throw new Error("Multiplier overrides must be specified if an edge of 1% is not desirable");if(t.selectedNumbers.length===0)throw new Error("No numbers selected");if(t.selectedNumbers.length>10)throw new Error("Maximum of 10 numbers can be selected");for(let a of t.selectedNumbers){if(a%1!==0)throw new Error("Only integers can be selected");if(a<0||a>39)throw new Error("Invalid number selected")}let o=r.getUniqueRandomInts({min:0,max:39,count:10}),i=t.selectedNumbers.filter((a)=>o.values.includes(a));return{isFinished:!0,payoutMultiplier:i.length>0?new J(this.multipliers[t.selectedNumbers.length][t.riskLevel][i.length]??0):new J(0),outputs:{result:o.values},randomValues:o}}validateMultiplierOverrides(r){for(let[e,t]of Object.entries(r)){let o=Number(e);for(let[i,n]of Object.entries(t))if(n.length!==o+1)throw new Error(`Invalid count of multipliers for tiles ${o} and risk level ${i}. Expected ${o+1}, but got ${n.length}`)}}}import x from"big.js";var Q=(r,e)=>{return r.gt(e)?r:e};var X=(r,e)=>{return r.lt(e)?r:e};class qr extends R{constructor(){super("LIMBO")}determineGameResult({generator:r,edge:e,gameInputs:t}){let o=r.getRandomInt({min:1,max:4294967295}),i=o.max,n=new x(16777216),a=new x(1),l=new x(1e6),A=o.value,p=new x(A-1).div(i),c=(100-e)/100,O=n.div(p.mul(n).plus(1)).mul(c),B=Q(a,X(O,l));return{isFinished:!0,payoutMultiplier:B.gte(t.targetMultiplier)?new x(t.targetMultiplier):new x(0),outputs:{randomMultiplier:B,result:o.values},randomValues:o}}}import N from"big.js";var Y=(r,e)=>{if(e<0||r<0||e>r)throw new Error("Invalid input: ensure 0 ≤ r ≤ n and n ≥ 0.");if(e>r-e)e=r-e;let t=1;for(let o=1;o<=e;o++)t=t*(r-o+1)/o;return t};class Jr extends R{constructor(){super("MINES")}determineGameResult({generator:r,edge:e,gameInputs:t}){if(t.minesCount<=0||t.minesCount>24)throw new Error("Must select between 1 and 24 mines.");if(t.selectedTiles.length>25-t.minesCount)throw new Error("Cannot select more tiles than available safe tiles (total tiles minus mines).");let a=r.getUniqueRandomInts({min:1,max:25,count:t.minesCount}),l=a.values.some((_)=>t.selectedTiles.includes(_)),A=t.hasCashedOut||l,p=(100-e)/100,c=new N(Y(25-t.minesCount,t.selectedTiles.length)).div(new N(Y(25,t.selectedTiles.length))),B=t.hasCashedOut&&!l?new N(p).div(c):new N(0);return{isFinished:A,payoutMultiplier:B,outputs:{result:a.values},randomValues:a}}}import{Big as ee}from"big.js";var W;((o)=>{o.LOW_RISK="LOW_RISK";o.MEDIUM_RISK="MEDIUM_RISK";o.HIGH_RISK="HIGH_RISK"})(W||={});var pt=[8,9,10,11,12,13,14,15,16],Qr={LOW_RISK:{8:[6,2.1,1.1,1,0.5,1,1.1,2.1,6],9:[6,2,1.6,1,0.7,0.7,1,1.6,2,6],10:[9,3,1.4,1.1,1,0.5,1,1.1,1.4,3,9],11:[8,3,1.9,1.3,1,0.7,0.7,1,1.3,1.9,3,8],12:[10,3,1.6,1.4,1.1,1,0.5,1,1.1,1.4,1.6,3,10],13:[8,4,3,1.9,1.2,0.9,0.7,0.7,0.9,1.2,1.9,3,4,8],14:[7,4,1.9,1.4,1.3,1.1,1,0.5,1,1.1,1.3,1.4,1.9,4,7],15:[15,8,3,2,1.5,1.1,1,0.7,0.7,1,1.1,1.5,2,3,8,15],16:[16,9,2,1.4,1.4,1.2,1.1,1,0.5,1,1.1,1.2,1.4,1.4,2,9,16]},MEDIUM_RISK:{8:[13,3,1.3,0.7,0.4,0.7,1.3,3,13],9:[18,4,1.7,0.9,0.5,0.5,0.9,1.7,4,18],10:[22,5,2,1.4,0.6,0.4,0.6,1.4,2,5,22],11:[24,6,3,1.8,0.7,0.5,0.5,0.7,1.8,3,6,24],12:[33,11,4,2,1.1,0.6,0.3,0.6,1.1,2,4,11,33],13:[43,13,6,3,1.3,0.7,0.4,0.4,0.7,1.3,3,6,13,43],14:[58,15,7,4,1.9,1,0.5,0.2,0.5,1,1.9,4,7,15,58],15:[88,18,11,5,3,1.3,0.5,0.3,0.3,0.5,1.3,3,5,11,18,88],16:[110,41.1,10,5,3,1.5,1,0.5,0.3,0.5,1,1.5,3,5,10,41.1,110]},HIGH_RISK:{8:[29,4,1.5,0.3,0.2,0.3,1.5,4,29],9:[43,7,2,0.6,0.2,0.2,0.6,2,7,43],10:[76,10,3,0.9,0.3,0.2,0.3,0.9,3,10,76],11:[120,13.9,5.2,1.4,0.4,0.2,0.2,0.4,1.4,5.2,13.9,120],12:[170,23.8,8.1,2,0.7,0.2,0.2,0.2,0.7,2,8.1,23.8,170],13:[260,36.7,11,4,1,0.2,0.2,0.2,0.2,1,4,11,36.7,260],14:[420,56.1,18,5,1.9,0.3,0.2,0.2,0.2,0.3,1.9,5,18,56.1,420],15:[620,82.8,27,8,3,0.5,0.2,0.2,0.2,0.2,0.5,3,8,27,82.8,620],16:[1000,129.9,26.1,9,4,2,0.2,0.2,0.2,0.2,0.2,2,4,9,26.1,129.9,1000]}},Xr={LOW_RISK:{8:[6,1.9,1.1,1,0.5,1,1.1,1.9,6],9:[6,1.7,1.6,1,0.7,0.7,1,1.6,1.7,6],10:[9,2.5,1.4,1.1,1,0.5,1,1.1,1.4,2.5,9],11:[9,2.5,1.8,1.3,1,0.7,0.7,1,1.3,1.8,2.5,9],12:[10,3.2,1.6,1.3,1.1,1,0.5,1,1.1,1.3,1.6,3.2,10],13:[8,3.7,2.9,1.8,1.2,0.9,0.7,0.7,0.9,1.2,1.8,2.9,3.7,8],14:[7,4,1.8,1.2,1.3,1.1,1,0.5,1,1.1,1.3,1.2,1.8,4,7],15:[15,7.6,2.8,2,1.4,1.1,1,0.7,0.7,1,1.1,1.4,2,2.8,7.6,15],16:[16,9,1.7,1.2,1.3,1.2,1.1,1,0.5,1,1.1,1.2,1.3,1.2,1.7,9,16]},MEDIUM_RISK:{8:[13,3.2,1.4,0.6,0.4,0.6,1.4,3.2,13],9:[18,3.7,1.7,0.9,0.5,0.5,0.9,1.7,3.7,18],10:[22,5,1.9,1.4,0.6,0.4,0.6,1.4,1.9,5,22],11:[24,6,2.8,1.8,0.7,0.5,0.5,0.7,1.8,2.8,6,24],12:[33,11.1,4,1.9,1.1,0.6,0.3,0.6,1.1,1.9,4,11.1,33],13:[43,13.7,6.1,2.8,1.3,0.7,0.4,0.4,0.7,1.3,2.8,6.1,13.7,43],14:[58,13.7,6.7,3.9,1.9,1,0.5,0.2,0.5,1,1.9,3.9,6.7,13.7,58],15:[88,17.7,10.8,5,2.9,1.3,0.5,0.3,0.3,0.5,1.3,2.9,5,10.8,17.7,88],16:[110,40.5,9.8,4.8,2.9,1.5,1,0.5,0.3,0.5,1,1.5,2.9,4.8,9.8,40.5,110]},HIGH_RISK:{8:[29,3.8,1.5,0.3,0.2,0.3,1.5,3.8,29],9:[43,7.1,1.9,0.6,0.2,0.2,0.6,1.9,7.1,43],10:[76,9.9,2.9,0.9,0.3,0.2,0.3,0.9,2.9,9.9,76],11:[120,13.4,5.1,1.4,0.4,0.2,0.2,0.4,1.4,5.1,13.4,120],12:[170,23.2,7.9,2,0.7,0.2,0.2,0.2,0.7,2,7.9,23.2,170],13:[260,36.6,10.5,4,1,0.2,0.2,0.2,0.2,1,4,10.5,36.6,260],14:[420,55.5,17.6,4.9,1.9,0.3,0.2,0.2,0.2,0.3,1.9,4.9,17.6,55.5,420],15:[620,82.3,26.8,7.7,3,0.5,0.2,0.2,0.2,0.2,0.5,3,7.7,26.8,82.3,620],16:[1000,129.8,25.2,8.6,4,2,0.2,0.2,0.2,0.2,0.2,2,4,8.6,25.2,129.8,1000]}},Wr={LOW_RISK:{8:[6,2.2,1.1,1,0.4,1,1.1,2.2,6],9:[6,1.8,1.5,1,0.7,0.7,1,1.5,1.8,6],10:[9,2.4,1.3,1.1,1,0.5,1,1.1,1.3,2.4,9],11:[8,2.7,1.9,1.2,1,0.7,0.7,1,1.2,1.9,2.7,8],12:[10,3.3,1.6,1.2,1.1,1,0.5,1,1.1,1.2,1.6,3.3,10],13:[8,3.8,2.9,1.9,1.1,0.9,0.7,0.7,0.9,1.1,1.9,2.9,3.8,8],14:[7,3.9,2,1.4,1.3,1.1,1,0.4,1,1.1,1.3,1.4,2,3.9,7],15:[15,7.9,2.5,2,1.3,1.1,1,0.7,0.7,1,1.1,1.3,2,2.5,7.9,15],16:[16,8.9,1.9,1.4,1.4,1.2,1.1,1,0.4,1,1.1,1.2,1.4,1.4,1.9,8.9,16]},MEDIUM_RISK:{8:[13,3.5,1.2,0.7,0.3,0.7,1.2,3.5,13],9:[18,3.8,1.6,0.9,0.5,0.5,0.9,1.6,3.8,18],10:[22,5.2,2,1.3,0.6,0.4,0.6,1.3,2,5.2,22],11:[24,5.6,2.7,1.8,0.7,0.5,0.5,0.7,1.8,2.7,5.6,24],12:[33,11.3,4,1.8,1.1,0.6,0.3,0.6,1.1,1.8,4,11.3,33],13:[43,12.9,5.7,2.8,1.3,0.7,0.4,0.4,0.7,1.3,2.8,5.7,12.9,43],14:[58,13.7,6.9,3.9,1.8,1,0.5,0.2,0.5,1,1.8,3.9,6.9,13.7,58],15:[88,18,10.9,4.9,2.8,1.3,0.5,0.3,0.3,0.5,1.3,2.8,4.9,10.9,18,88],16:[110,39.9,9.9,5,2.9,1.4,1,0.5,0.3,0.5,1,1.4,2.9,5,9.9,39.9,110]},HIGH_RISK:{8:[29,4,1.4,0.3,0.2,0.3,1.4,4,29],9:[43,7.3,2,0.5,0.2,0.2,0.5,2,7.3,43],10:[76,9.8,2.8,0.9,0.3,0.2,0.3,0.9,2.8,9.8,76],11:[120,13.5,4.9,1.4,0.4,0.2,0.2,0.4,1.4,4.9,13.5,120],12:[170,23.3,7.9,1.9,0.7,0.2,0.2,0.2,0.7,1.9,7.9,23.3,170],13:[260,36.2,10.4,3.9,1,0.2,0.2,0.2,0.2,1,3.9,10.4,36.2,260],14:[420,54.8,17.9,4.9,1.8,0.3,0.2,0.2,0.2,0.3,1.8,4.9,17.9,54.8,420],15:[620,81.9,26.6,7.7,2.9,0.5,0.2,0.2,0.2,0.2,0.5,2.9,7.7,26.6,81.9,620],16:[1000,130,24.9,8.4,3.9,2,0.2,0.2,0.2,0.2,0.2,2,3.9,8.4,24.9,130,1000]}},gr={LOW_RISK:{8:[6,2,1.1,1,0.4,1,1.1,2,6],9:[6,1.9,1.4,1,0.7,0.7,1,1.4,1.9,6],10:[9,2.8,1.1,1.1,1,0.5,1,1.1,1.1,2.8,9],11:[8,2.7,1.7,1.2,1,0.7,0.7,1,1.2,1.7,2.7,8],12:[10,2.7,1.4,1.2,1.1,1,0.5,1,1.1,1.2,1.4,2.7,10],13:[8,3.5,2.8,1.9,1.3,0.9,0.6,0.6,0.9,1.3,1.9,2.8,3.5,8],14:[7,3.3,1.6,1.3,1.3,1.1,1,0.4,1,1.1,1.3,1.3,1.6,3.3,7],15:[15,8,2.9,2,1.4,1.2,1,0.6,0.6,1,1.2,1.4,2,2.9,8,15],16:[16,9.1,2.2,1.4,1.2,1.2,1.1,1,0.4,1,1.1,1.2,1.2,1.4,2.2,9.1,16]},MEDIUM_RISK:{8:[13,2.9,1.2,0.7,0.4,0.7,1.2,2.9,13],9:[18,3.5,1.6,0.9,0.5,0.5,0.9,1.6,3.5,18],10:[22,4.7,2,1.3,0.6,0.4,0.6,1.3,2,4.7,22],11:[24,5.7,2.5,1.8,0.7,0.5,0.5,0.7,1.8,2.5,5.7,24],12:[33,10.7,3.8,1.8,1.1,0.6,0.3,0.6,1.1,1.8,3.8,10.7,33],13:[43,12.6,5.6,2.7,1.3,0.7,0.4,0.4,0.7,1.3,2.7,5.6,12.6,43],14:[58,13.7,6.4,3.8,1.8,1,0.5,0.2,0.5,1,1.8,3.8,6.4,13.7,58],15:[88,17.7,10.7,4.9,2.7,1.3,0.5,0.3,0.3,0.5,1.3,2.7,4.9,10.7,17.7,88],16:[110,39.7,9.6,4.8,2.8,1.4,1,0.5,0.3,0.5,1,1.4,2.8,4.8,9.6,39.7,110]},HIGH_RISK:{8:[29,3.9,1.4,0.3,0.2,0.3,1.4,3.9,29],9:[43,6.9,1.8,0.6,0.2,0.2,0.6,1.8,6.9,43],10:[76,9.8,2.7,0.9,0.3,0.2,0.3,0.9,2.7,9.8,76],11:[120,13.1,5.1,1.3,0.4,0.2,0.2,0.4,1.3,5.1,13.1,120],12:[170,22.7,7.7,1.9,0.7,0.2,0.2,0.2,0.7,1.9,7.7,22.7,170],13:[260,35.9,10.3,3.8,1,0.2,0.2,0.2,0.2,1,3.8,10.3,35.9,260],14:[420,54.2,17.5,4.8,1.8,0.3,0.2,0.2,0.2,0.3,1.8,4.8,17.5,54.2,420],15:[620,80.6,26.1,7.8,2.8,0.5,0.2,0.2,0.2,0.2,0.5,2.8,7.8,26.1,80.6,620],16:[1000,129.7,24.7,8.2,3.8,2,0.2,0.2,0.2,0.2,0.2,2,3.8,8.2,24.7,129.7,1000]}},re={LOW_RISK:{8:[5,1.8,1,1,0.4,1,1,1.8,5],9:[5,1.7,1.2,1,0.7,0.7,1,1.2,1.7,5],10:[9,2.8,1.2,1,1,0.4,1,1,1.2,2.8,9],11:[8,2.5,1.6,1,1,0.7,0.7,1,1,1.6,2.5,8],12:[10,2.5,1.3,1.3,1,1,0.4,1,1,1.3,1.3,2.5,10],13:[8,4.1,2.8,1.8,1.1,0.9,0.6,0.6,0.9,1.1,1.8,2.8,4.1,8],14:[7,3.3,1.7,1.2,1.2,1,1,0.4,1,1,1.2,1.2,1.7,3.3,7],15:[15,7.3,2.9,1.9,1.4,1,1,0.6,0.6,1,1,1.4,1.9,2.9,7.3,15],16:[16,8.7,2,1.5,1.3,1,1.1,1,0.3,1,1.1,1,1.3,1.5,2,8.7,16]},MEDIUM_RISK:{8:[13,2.6,1.1,0.7,0.4,0.7,1.1,2.6,13],9:[17,3.3,1.4,0.9,0.5,0.5,0.9,1.4,3.3,17],10:[21,4.1,1.7,1.3,0.6,0.4,0.6,1.3,1.7,4.1,21],11:[23,5.6,2.4,1.6,0.7,0.5,0.5,0.7,1.6,2.4,5.6,23],12:[32,10.2,3.7,1.7,1.1,0.6,0.2,0.6,1.1,1.7,3.7,10.2,32],13:[42,11.7,5.3,2.5,1.2,0.7,0.4,0.4,0.7,1.2,2.5,5.3,11.7,42],14:[56,13.2,5.9,3.6,1.6,1,0.5,0.2,0.5,1,1.6,3.6,5.9,13.2,56],15:[86,17.3,10,4.6,2.6,1.2,0.5,0.3,0.3,0.5,1.2,2.6,4.6,10,17.3,86],16:[107,39,9.9,4.5,2.4,1.3,1,0.5,0.3,0.5,1,1.3,2.4,4.5,9.9,39,107]},HIGH_RISK:{8:[28,3.3,1.4,0.3,0.2,0.3,1.4,3.3,28],9:[42,6.7,1.6,0.6,0.2,0.2,0.6,1.6,6.7,42],10:[74,9.6,2.6,0.9,0.3,0.1,0.3,0.9,2.6,9.6,74],11:[116,12.7,4.8,1.2,0.4,0.2,0.2,0.4,1.2,4.8,12.7,116],12:[165,20.9,7.2,1.8,0.7,0.2,0.2,0.2,0.7,1.8,7.2,20.9,165],13:[252,33.9,10.1,3.4,1,0.2,0.2,0.2,0.2,1,3.4,10.1,33.9,252],14:[407,51.9,16.3,4.6,1.7,0.3,0.2,0.2,0.2,0.3,1.7,4.6,16.3,51.9,407],15:[600,76.9,24.9,7.4,2.6,0.5,0.2,0.2,0.2,0.2,0.5,2.6,7.4,24.9,76.9,600],16:[1000,122,24.5,8,3.7,1.8,0.2,0.2,0.2,0.2,0.2,1.8,3.7,8,24.5,122,1000]}},g=new s(new Map([[1,Qr],[2,Xr],[3,Wr],[4,gr],[8,re]]));class te extends R{constructor(){super("PLINKO")}determineGameResult({generator:r,gameInputs:e,edge:t}){if(e.numberOfRows%1>0)throw new Error("Number of rows must be an integer");if(e.numberOfRows<8||e.numberOfRows>16)throw new Error("Number of rows must be between 8 and 16");let o=e.numberOfRows,a=g.getMultipliers(t)[e.riskLevel][o],l=r.getRandomIntsWithReplacement({min:0,max:1,count:e.numberOfRows}),p=l.values.reduce((O,B)=>O+B,0),c=a[p];if(c===void 0)throw new Error(`No payout found for end position ${p}`);return{isFinished:!0,payoutMultiplier:ee(c),outputs:{result:l.values},randomValues:l}}}import{Big as w}from"big.js";var k=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36],rr=[37,...k],er=[[0,1],[0,2],[0,3],[1,2],[1,4],[2,3],[2,5],[3,6],[4,5],[4,7],[5,6],[5,8],[6,9],[7,8],[7,10],[8,9],[8,11],[9,12],[10,11],[10,13],[11,12],[11,14],[12,15],[13,14],[13,16],[14,15],[14,17],[15,18],[16,17],[16,19],[17,18],[17,20],[18,21],[19,20],[19,22],[20,21],[20,23],[21,24],[22,23],[22,25],[23,24],[23,26],[24,27],[25,26],[25,28],[26,27],[26,29],[27,30],[28,29],[28,31],[29,30],[29,32],[30,33],[31,32],[31,34],[32,33],[32,35],[33,36],[34,35],[35,36]],tr=[[0,1],[0,2],[0,37],[2,37],[3,37],[1,2],[1,4],[2,3],[2,5],[3,6],[4,5],[4,7],[5,6],[5,8],[6,9],[7,8],[7,10],[8,9],[8,11],[9,12],[10,11],[10,13],[11,12],[11,14],[12,15],[13,14],[13,16],[14,15],[14,17],[15,18],[16,17],[16,19],[17,18],[17,20],[18,21],[19,20],[19,22],[20,21],[20,23],[21,24],[22,23],[22,25],[23,24],[23,26],[24,27],[25,26],[25,28],[26,27],[26,29],[27,30],[28,29],[28,31],[29,30],[29,32],[30,33],[31,32],[31,34],[32,33],[32,35],[33,36],[34,35],[35,36]],or=[[0,1,2],[0,2,3],[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18],[19,20,21],[22,23,24],[25,26,27],[28,29,30],[31,32,33],[34,35,36]],ir=[[0,1,2],[0,2,37],[1,2,3],[2,3,37],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18],[19,20,21],[22,23,24],[25,26,27],[28,29,30],[31,32,33],[34,35,36]],nr=[[0,1,2,3],[1,2,4,5],[2,3,5,6],[4,5,7,8],[5,6,8,9],[7,8,10,11],[8,9,11,12],[10,11,13,14],[11,12,14,15],[13,14,16,17],[14,15,17,18],[16,17,19,20],[17,18,20,21],[19,20,22,23],[20,21,23,24],[22,23,25,26],[23,24,26,27],[25,26,28,29],[26,27,29,30],[28,29,31,32],[29,30,32,33],[31,32,34,35],[32,33,35,36]],ar=[[1,2,4,5],[2,3,5,6],[4,5,7,8],[5,6,8,9],[7,8,10,11],[8,9,11,12],[10,11,13,14],[11,12,14,15],[13,14,16,17],[14,15,17,18],[16,17,19,20],[17,18,20,21],[19,20,22,23],[20,21,23,24],[22,23,25,26],[23,24,26,27],[25,26,28,29],[26,27,29,30],[28,29,31,32],[29,30,32,33],[31,32,34,35],[32,33,35,36]],Er=[0,1,2,3,37],cr=[[1,2,3,4,5,6],[4,5,6,7,8,9],[7,8,9,10,11,12],[10,11,12,13,14,15],[13,14,15,16,17,18],[16,17,18,19,20,21],[19,20,21,22,23,24],[22,23,24,25,26,27],[25,26,27,28,29,30],[28,29,30,31,32,33],[31,32,33,34,35,36]],Ar=[[1,2,3,4,5,6],[4,5,6,7,8,9],[7,8,9,10,11,12],[10,11,12,13,14,15],[13,14,15,16,17,18],[16,17,18,19,20,21],[19,20,21,22,23,24],[22,23,24,25,26,27],[25,26,27,28,29,30],[28,29,30,31,32,33],[31,32,33,34,35,36]],S;((t)=>{t.EVEN="EVEN";t.ODD="ODD"})(S||={});var I;((t)=>{t.RED="RED";t.BLACK="BLACK"})(I||={});var T;((t)=>{t.LOW="LOW";t.HIGH="HIGH"})(T||={});var m;((o)=>{o.TOP="TOP";o.MIDDLE="MIDDLE";o.BOTTOM="BOTTOM"})(m||={});var G;((o)=>{o.FIRST="FIRST";o.SECOND="SECOND";o.THIRD="THIRD"})(G||={});var $;((t)=>{t.AMERICAN="AMERICAN";t.EUROPEAN="EUROPEAN"})($||={});var M=(r)=>{if(r.straightBets.length===0&&r.splitBets.length===0&&r.streetBets.length===0&&r.cornerBets.length===0&&r.doubleStreetBets.length===0&&r.parityBets.length===0&&r.colorBets.length===0&&r.halfBets.length===0&&r.columnBets.length===0&&r.dozenBets.length===0)throw E.createValidationError("Must place at least a single bet.");if(!r.straightBets.every((e)=>e.amount.gte(0)&&L(e.value)))throw E.createValidationError("Invalid straight bet.");if(!r.splitBets.every((e)=>e.amount.gte(0)&&oe(e.values)))throw E.createValidationError("Invalid split bet.");if(!r.streetBets.every((e)=>e.amount.gte(0)&&ie(e.values)))throw E.createValidationError("Invalid street bet.");if(!r.cornerBets.every((e)=>e.amount.gte(0)&&ne(e.values)))throw E.createValidationError("Invalid corner bet.");if(!r.doubleStreetBets.every((e)=>e.amount.gte(0)&&ae(e.values)))throw E.createValidationError("Invalid double street bet.");if(!r.parityBets.every((e)=>e.amount.gte(0)&&Object.values(S).includes(e.parity)))throw E.createValidationError("Invalid parity bet.");if(!r.colorBets.every((e)=>e.amount.gte(0)&&Object.values(I).includes(e.color)))throw E.createValidationError("Invalid color bet.");if(!r.halfBets.every((e)=>e.amount.gte(0)&&Object.values(T).includes(e.half)))throw E.createValidationError("Invalid half bet.");if(!r.columnBets.every((e)=>e.amount.gte(0)&&Object.values(m).includes(e.column)))throw E.createValidationError("Invalid column bet.");if(!r.dozenBets.every((e)=>e.amount.gte(0)&&Object.values(G).includes(e.dozen)))throw E.createValidationError("Invalid dozen bet.")},L=(r)=>{return k.includes(r)},oe=(r)=>{if(r.length!==2)return!1;if(!r.every(L))return!1;return er.some(([e,t])=>e===r[0]&&t===r[1])},ie=(r)=>{if(r.length!==3)return!1;if(!r.every(L))return!1;return or.some(([e,t,o])=>e===r[0]&&t===r[1]&&o===r[2])},ne=(r)=>{if(r.length!==4)return!1;if(!r.every(L))return!1;return nr.some(([e,t,o,i])=>e===r[0]&&t===r[1]&&o===r[2]&&i===r[3])},ae=(r)=>{if(r.length!==6)return!1;if(!r.every(L))return!1;return cr.some(([e,t,o,i,n,a])=>e===r[0]&&t===r[1]&&o===r[2]&&i===r[3]&&n===r[4]&&a===r[5])};var V=(r)=>{if(r.straightBets.length===0&&r.splitBets.length===0&&r.streetBets.length===0&&r.cornerBets.length===0&&r.basketBets.length===0&&r.doubleStreetBets.length===0&&r.parityBets.length===0&&r.colorBets.length===0&&r.halfBets.length===0&&r.columnBets.length===0&&r.dozenBets.length===0)throw E.createValidationError("Must place at least a single bet.");if(!r.straightBets.every((e)=>e.amount.gte(0)&&y(e.value)))throw E.createValidationError("Invalid straight bet.");if(!r.splitBets.every((e)=>e.amount.gte(0)&&Ee(e.values)))throw E.createValidationError("Invalid split bet.");if(!r.streetBets.every((e)=>e.amount.gte(0)&&ce(e.values)))throw E.createValidationError("Invalid street bet.");if(!r.cornerBets.every((e)=>e.amount.gte(0)&&Ae(e.values)))throw E.createValidationError("Invalid corner bet.");if(!r.basketBets.every((e)=>e.amount.gte(0)))throw E.createValidationError("Invalid basket bet.");if(!r.doubleStreetBets.every((e)=>e.amount.gte(0)&&le(e.values)))throw E.createValidationError("Invalid double street bet.");if(!r.parityBets.every((e)=>e.amount.gte(0)&&Object.values(S).includes(e.parity)))throw E.createValidationError("Invalid parity bet.");if(!r.colorBets.every((e)=>e.amount.gte(0)&&Object.values(I).includes(e.color)))throw E.createValidationError("Invalid color bet.");if(!r.halfBets.every((e)=>e.amount.gte(0)&&Object.values(T).includes(e.half)))throw E.createValidationError("Invalid half bet.");if(!r.columnBets.every((e)=>e.amount.gte(0)&&Object.values(m).includes(e.column)))throw E.createValidationError("Invalid column bet.");if(!r.dozenBets.every((e)=>e.amount.gte(0)&&Object.values(G).includes(e.dozen)))throw E.createValidationError("Invalid dozen bet.")},y=(r)=>{return rr.includes(r)};function Ee(r){if(r.length!==2)return!1;if(!r.every(y))return!1;return tr.some(([e,t])=>e===r[0]&&t===r[1])}var ce=(r)=>{if(r.length!==3)return!1;if(!r.every(y))return!1;return ir.some(([e,t,o])=>e===r[0]&&t===r[1]&&o===r[2])},Ae=(r)=>{if(r.length!==4)return!1;if(!r.every(y))return!1;return ar.some(([e,t,o,i])=>e===r[0]&&t===r[1]&&o===r[2]&&i===r[3])},le=(r)=>{if(r.length!==6)return!1;if(!r.every(y))return!1;return Ar.some(([e,t,o,i,n,a])=>e===r[0]&&t===r[1]&&o===r[2]&&i===r[3]&&n===r[4]&&a===r[5])};var Re={straightBets:36,splitBets:18,streetBets:12,cornerBets:9,basketBets:7,doubleStreetBets:6,parityBets:2,colorBets:2,halfBets:2,columnBets:3,dozenBets:3},pe=[3,6,9,12,15,18,21,24,27,30,33,36],Oe=[2,5,8,11,14,17,20,23,26,29,32,35],fe=[1,4,7,10,13,16,19,22,25,28,31,34],ue=[1,3,5,7,9,12,14,16,18,19,21,23,25,27,30,32,34,36],Be=[2,4,6,8,10,11,13,15,17,20,22,24,26,28,29,31,33,35],de=2.7,se=5.3;class j extends R{constructor(){super("ROULETTE")}determineGameResult({generator:r,gameInputs:e}){this.validateInputs(e);let t=r.getRandomInt({min:0,max:this.maxNumber}),o=t.value,i=this.determineBetOutcomes(e,o),n=this.getBetTotals(e),a=this.getBetTotals(i.winningBets),l=this.calculateTotalBetAmount(n),A=this.calculateTotalPayout(a),p=l.gt(0)?A.div(l):new w(0);return{outputs:{betOutcomes:i,result:t.values},payoutMultiplier:p,isFinished:!0,randomValues:t}}determineBetOutcomes(r,e){let t={},o={};for(let i of Object.keys(r)){let n=r[i],a=this.betPredicates[i],{winning:l,losing:A}=this.partitionBets(n,a,e);t[i]=l,o[i]=A}return{winningBets:t,losingBets:o}}partitionBets(r,e,t){return{winning:r.filter((o)=>e(o,t)),losing:r.filter((o)=>!e(o,t))}}calculateTotalAmount(r){return r.reduce((e,t)=>e.plus(t.amount),new w(0))}isWinningStraightBet(r,e){return r.value===e}isWinningSplitBet(r,e){return r.values.some((t)=>t===e)}isWinningStreetBet(r,e){return r.values.some((t)=>t===e)}isWinningCornerBet(r,e){return r.values.some((t)=>t===e)}isWinningDoubleStreetBet(r,e){return r.values.some((t)=>t===e)}isWinningColorBet(r,e){let t=r;return ue.includes(e)&&t.color==="RED"||Be.includes(e)&&t.color==="BLACK"}isWinningHalfBet(r,e){let t=r;if(e>0&&e<=18&&t.half==="LOW")return!0;if(e>18&&e<=36&&t.half==="HIGH")return!0;return!1}isWinningColumnBet(r,e){let t=r;return pe.includes(e)&&t.column==="TOP"||Oe.includes(e)&&t.column==="MIDDLE"||fe.includes(e)&&t.column==="BOTTOM"}isWinningDozenBet(r,e){let t=r;if(e>0&&e<=12&&t.dozen==="FIRST")return!0;if(e>12&&e<=24&&t.dozen==="SECOND")return!0;if(e>24&&e<=36&&t.dozen==="THIRD")return!0;return!1}isWinningParityBet(r,e){let t=r;if(e===0||e===37)return!1;let o=e%2===0?"EVEN":"ODD";return t.parity===o}getBetTotals(r){let e={};for(let t of Object.keys(r))e[t]=this.calculateTotalAmount(r[t]);return e}calculateTotalPayout(r){return Object.entries(r).reduce((e,[t,o])=>{let n=Re[t];return e.plus(o.mul(n||0))},new w(0))}calculateTotalBetAmount(r){return Object.values(r).reduce((e,t)=>e.plus(t),new w(0))}}class lr extends j{maxNumber=36;validateInputs(r){M(r)}betPredicates={straightBets:this.isWinningStraightBet,splitBets:this.isWinningSplitBet,streetBets:this.isWinningStreetBet,cornerBets:this.isWinningCornerBet,doubleStreetBets:this.isWinningDoubleStreetBet,parityBets:this.isWinningParityBet,colorBets:this.isWinningColorBet,halfBets:this.isWinningHalfBet,columnBets:this.isWinningColumnBet,dozenBets:this.isWinningDozenBet}}class Rr extends j{maxNumber=37;validateInputs(r){V(r)}betPredicates={straightBets:this.isWinningStraightBet,splitBets:this.isWinningSplitBet,streetBets:this.isWinningStreetBet,cornerBets:this.isWinningCornerBet,basketBets:this.isWinningBasketBet,doubleStreetBets:this.isWinningDoubleStreetBet,parityBets:this.isWinningParityBet,colorBets:this.isWinningColorBet,halfBets:this.isWinningHalfBet,columnBets:this.isWinningColumnBet,dozenBets:this.isWinningDozenBet};isWinningBasketBet(r,e){return Er.some((t)=>t===e)}}class xe extends R{europeanGame;americanGame;constructor(){super("ROULETTE");this.europeanGame=new lr,this.americanGame=new Rr}determineGameResult(r){let{gameInputs:e,...t}=r;if(r.edge===de&&e.type==="EUROPEAN"){let o=this.europeanGame.determineGameResult({...t,gameInputs:e.inputs}),{betOutcomes:i}=o.outputs;return{...o,outputs:{type:"european",betOutcomes:i,result:o.outputs.result}}}if(r.edge===se&&e.type==="AMERICAN"){let o=this.americanGame.determineGameResult({...t,gameInputs:e.inputs}),{betOutcomes:i}=o.outputs;return{...o,outputs:{type:"american",betOutcomes:i,result:o.outputs.result}}}throw new Error("Only European & American Roulette games are supported")}}var ht=(r)=>{if(r.type==="EUROPEAN")M(r.inputs);else V(r.inputs)};import{Big as Ce}from"big.js";var K;((o)=>{o.LOW_RISK="LOW_RISK";o.MEDIUM_RISK="MEDIUM_RISK";o.HIGH_RISK="HIGH_RISK"})(K||={});var Z;((n)=>{n[n.TEN=10]="TEN";n[n.TWENTY=20]="TWENTY";n[n.THIRTY=30]="THIRTY";n[n.FORTY=40]="FORTY";n[n.FIFTY=50]="FIFTY"})(Z||={});var Se={LOW_RISK:{10:{ZERO:0,A:1.2,B:1.5},20:{ZERO:0,A:1.2,B:1.5},30:{ZERO:0,A:1.2,B:1.5},40:{ZERO:0,A:1.2,B:1.5},50:{ZERO:0,A:1.2,B:1.5}},MEDIUM_RISK:{10:{ZERO:0,A:1.5,B:1.9,C:2,D:3},20:{ZERO:0,A:1.5,B:1.8,C:2,D:3},30:{ZERO:0,A:1.5,B:1.7,C:2,D:3,E:4},40:{ZERO:0,A:1.5,B:1.6,C:2,D:3},50:{ZERO:0,A:1.5,B:2,C:3,D:5}},HIGH_RISK:{10:{ZERO:0,A:9.9},20:{ZERO:0,A:19.8},30:{ZERO:0,A:29.7},40:{ZERO:0,A:39.6},50:{ZERO:0,A:49.5}}},Ie={LOW_RISK:{10:{ZERO:0,A:1.2,B:1.4},20:{ZERO:0,A:1.2,B:1.4},30:{ZERO:0,A:1.2,B:1.4},40:{ZERO:0,A:1.2,B:1.4},50:{ZERO:0,A:1.2,B:1.4}},MEDIUM_RISK:{10:{ZERO:0,A:1.4,B:1.9,C:2,D:3.1},20:{ZERO:0,A:1.5,B:1.8,C:1.9,D:3.4},30:{ZERO:0,A:1.5,B:1.7,C:1.9,D:3,E:4.3},40:{ZERO:0,A:1.5,B:1.6,C:2,D:2.9},50:{ZERO:0,A:1.5,B:2,C:3,D:4.5}},HIGH_RISK:{10:{ZERO:0,A:9.8},20:{ZERO:0,A:19.6},30:{ZERO:0,A:29.4},40:{ZERO:0,A:39.2},50:{ZERO:0,A:49}}},Te={LOW_RISK:{10:{ZERO:0,A:1.15,B:1.65},20:{ZERO:0,A:1.15,B:1.65},30:{ZERO:0,A:1.15,B:1.65},40:{ZERO:0,A:1.15,B:1.65},50:{ZERO:0,A:1.15,B:1.65}},MEDIUM_RISK:{10:{ZERO:0,A:1.4,B:1.9,C:2,D:3},20:{ZERO:0,A:1.4,B:1.6,C:2,D:3},30:{ZERO:0,A:1.4,B:1.7,C:2,D:3,E:4},40:{ZERO:0,A:1.5,B:1.6,C:2,D:2.8},50:{ZERO:0,A:1.5,B:2,C:2.7,D:4.9}},HIGH_RISK:{10:{ZERO:0,A:9.7},20:{ZERO:0,A:19.4},30:{ZERO:0,A:29.1},40:{ZERO:0,A:38.8},50:{ZERO:0,A:48.5}}},me={LOW_RISK:{10:{ZERO:0,A:1.15,B:1.55},20:{ZERO:0,A:1.15,B:1.55},30:{ZERO:0,A:1.15,B:1.55},40:{ZERO:0,A:1.15,B:1.55},50:{ZERO:0,A:1.15,B:1.55}},MEDIUM_RISK:{10:{ZERO:0,A:1.4,B:1.8,C:2,D:3},20:{ZERO:0,A:1.3,B:1.5,C:2,D:3},30:{ZERO:0,A:1.4,B:1.6,C:2,D:2.9,E:4},40:{ZERO:0,A:1.5,B:1.6,C:2,D:2.7},50:{ZERO:0,A:1.5,B:2,C:2.6,D:4.8}},HIGH_RISK:{10:{ZERO:0,A:9.6},20:{ZERO:0,A:19.2},30:{ZERO:0,A:28.8},40:{ZERO:0,A:38.4},50:{ZERO:0,A:48}}},Ge={LOW_RISK:{10:{ZERO:0,A:1.1,B:1.5},20:{ZERO:0,A:1.1,B:1.5},30:{ZERO:0,A:1.1,B:1.45},40:{ZERO:0,A:1.1,B:1.45},50:{ZERO:0,A:1.1,B:1.45}},MEDIUM_RISK:{10:{ZERO:0,A:1.3,B:1.7,C:1.9,D:3},20:{ZERO:0,A:1.3,B:1.4,C:1.9,D:3},30:{ZERO:0,A:1.3,B:1.7,C:1.9,D:2.8,E:3.8},40:{ZERO:0,A:1.4,B:1.8,C:1.9,D:2.6},50:{ZERO:0,A:1.4,B:1.9,C:2.6,D:4.6}},HIGH_RISK:{10:{ZERO:0,A:9.2},20:{ZERO:0,A:18.4},30:{ZERO:0,A:27.6},40:{ZERO:0,A:36.8},50:{ZERO:0,A:46}}},pr=new s(new Map([[1,Se],[2,Ie],[3,Te],[4,me],[8,Ge]]));var Or={LOW_RISK:{10:["B","A","A","A","ZERO","A","A","A","A","ZERO"],20:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"],30:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"],40:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"],50:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"]},MEDIUM_RISK:{10:["ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","D"],20:["A","ZERO","C","ZERO","B","ZERO","C","ZERO","C","ZERO","A","ZERO","C","ZERO","C","ZERO","D","ZERO","C","ZERO"],30:["A","ZERO","C","ZERO","A","ZERO","C","ZERO","D","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","C","ZERO","A","ZERO","C","ZERO","E","ZERO","A","ZERO","C","ZERO"],40:["C","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO","C","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO","C","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO"],50:["A","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","B","ZERO","A","ZERO","D","ZERO","A","ZERO","B","ZERO","A","ZERO"]},HIGH_RISK:{10:[...Array(9).fill("ZERO"),"A"],20:[...Array(19).fill("ZERO"),"A"],30:[...Array(29).fill("ZERO"),"A"],40:[...Array(39).fill("ZERO"),"A"],50:[...Array(49).fill("ZERO"),"A"]}};class Le extends R{constructor(){super("WHEEL")}determineGameResult({generator:r,gameInputs:e,edge:t}){if(!Object.values(Z).includes(e.segments))throw new Error("Invalid segments value");if(!Object.values(K).includes(e.riskLevel))throw new Error("Invalid risk level");let i=pr.getMultipliers(t)[e.riskLevel];if(i===void 0)throw new Error(`No multipliers found for risk level ${e.riskLevel}`);let n=i[e.segments];if(n===void 0)throw new Error(`No multipliers found for segment ${e.segments}`);let a=Or[e.riskLevel];if(a===void 0)throw new Error(`No patterns found for risk level ${e.riskLevel}`);let l=a[e.segments];if(l===void 0)throw new Error(`No patterns found for segment ${e.segments}`);let A=r.getRandomInt({min:0,max:l.length-1}),p=l[A.value];if(p===void 0)throw new Error(`No pattern found for segment ${e.segments} and value ${A.value}`);let c=n[p];if(c===void 0)throw new Error(`No payout found for picked segment ${p}`);return{isFinished:!0,payoutMultiplier:new Ce(c),outputs:{result:A.values},randomValues:A}}}export{ht as validateRouletteGameInputs,Ve as validateAdvancedDiceInputs,g as plinkoMultipliers,Ur as diamondsMultipliers,Dr as calculateBaccaratBetAmount,Z as WheelSegments,K as WheelRiskLevel,Le as Wheel,Lr as VALID_SUITS,yr as VALID_RANKS,or as VALID_EUROPEAN_STREETS,k as VALID_EUROPEAN_STRAIGHTS,er as VALID_EUROPEAN_SPLITS,cr as VALID_EUROPEAN_DOUBLE_STREETS,nr as VALID_EUROPEAN_CORNERS,ir as VALID_AMERICAN_STREETS,rr as VALID_AMERICAN_STRAIGHTS,tr as VALID_AMERICAN_SPLITS,Ar as VALID_AMERICAN_DOUBLE_STREETS,ar as VALID_AMERICAN_CORNERS,pe as TOP_COLUMN,$ as RouletteType,xe as Roulette,Gr as RollType,ue as RED_NUMBERS,U as RANDOM_MIN_VALUE,P as RANDOM_MAX_VALUE,W as PlinkoRiskLevel,te as Plinko,S as Parity,pt as PLINKO_ROW_COUNTS,Re as PAYOUT_MULTIPLIERS,u as OrigamiGame,Jr as Mines,dr as MIN_WIN_CHANCE,Oe as MIDDLE_COLUMN,sr as MAX_WIN_CHANCE,qr as Limbo,$r as KenoRiskLevel,zr as Keno,T as Half,Br as GameErrorCode,E as GameError,R as Game,lr as EuropeanRoulette,de as EUROPEAN_HOUSE_EDGE,z as EFFECTIVE_RANGE,G as Dozen,Yr as DiceDirection,kr as Dice,Mr as DiamondsResultType,Fr as Diamonds,m as Column,I as Color,Kr as BaccaratOutcome,Zr as BaccaratBetType,br as Baccarat,fe as BOTTOM_COLUMN,Be as BLACK_NUMBERS,Rr as AmericanRoulette,Cr as AdvancedDice,se as AMERICAN_HOUSE_EDGE,Er as AMERICAN_BASKET};
1
+ var u;((c)=>{c.DICE="DICE";c.MINES="MINES";c.KENO="KENO";c.LIMBO="LIMBO";c.ADVANCED_DICE="ADVANCED_DICE";c.BACCARAT="BACCARAT";c.DIAMONDS="DIAMONDS";c.PLINKO="PLINKO";c.ROULETTE="ROULETTE";c.WHEEL="WHEEL"})(u||={});class R{gameId;constructor(r){this.gameId=r}getGameResult(r){return this.determineGameResult(r)}}import{Big as H}from"big.js";var Br;((e)=>e.INPUT_VALIDATION_ERROR="INPUT_VALIDATION_ERROR")(Br||={});class E extends Error{static createValidationError(r){return new E("INPUT_VALIDATION_ERROR",r)}static isGameError(r){return r instanceof E}errorCode;constructor(r,e){super(e);this.errorCode=r}}var U=0,P=1e4,z=10001,dr=0.01,sr=98,xr=(r)=>{if(r<U)throw E.createValidationError(`Lower bound ${r} is below minimum allowed value ${U}`)},Sr=(r)=>{if(r>P)throw E.createValidationError(`Upper bound ${r} is above maximum allowed value ${P}`)},b=(r)=>{if(xr(r.lower),Sr(r.upper),r.lower>=r.upper)throw E.createValidationError(`Lower bound ${r.lower} must be less than ${r.upper}`)},Tr=(r,e)=>{let[t,o]=r.lower<=e.lower?[r,e]:[e,r];if(t.upper>o.lower)throw E.createValidationError("Bounds must not overlap")},Ir=(r,e)=>e>=r.lower&&e<=r.upper,Gr=(r)=>r.upper-r.lower+1,v=(r,e)=>e>r.lower&&e<r.upper,h=(r)=>r.upper-r.lower-1,Cr;((o)=>{o.ROLL_BETWEEN="ROLL_BETWEEN";o.ROLL_OUTSIDE="ROLL_OUTSIDE";o.ROLL_BETWEEN_TWO="ROLL_BETWEEN_TWO"})(Cr||={});var q=(r)=>{let t=(()=>{switch(r.mode){case"ROLL_BETWEEN":return b(r.bounds),h(r.bounds);case"ROLL_OUTSIDE":return b(r.bounds),z-Gr(r.bounds);case"ROLL_BETWEEN_TWO":return b(r.firstBounds),b(r.secondBounds),Tr(r.firstBounds,r.secondBounds),h(r.firstBounds)+h(r.secondBounds)}})(),o=H(t).div(z).mul(100);if(o.lt(dr))throw E.createValidationError("Win chance too low");if(o.gt(sr))throw E.createValidationError("Win chance too high");return o},Ve=(r)=>{q(r)};class Lr extends R{constructor(){super("ADVANCED_DICE")}determineGameResult({generator:r,edge:e,gameInputs:t}){let o=q(t),i=r.getRandomInt({min:U,max:P}),n=i.value;return{isFinished:!0,payoutMultiplier:(()=>{switch(t.mode){case"ROLL_BETWEEN":return v(t.bounds,n);case"ROLL_OUTSIDE":return!Ir(t.bounds,n);case"ROLL_BETWEEN_TWO":return v(t.firstBounds,n)||v(t.secondBounds,n)}})()?new H(100-e).div(o):new H(0),outputs:{result:i.values},randomValues:i}}}import L from"big.js";var mr=["Clubs","Diamonds","Hearts","Spades"],Kr=["Ace","2","3","4","5","6","7","8","9","10","Jack","Queen","King"],yr;((o)=>{o.PLAYER_WIN="PLAYER_WIN";o.TIE="TIE";o.BANKER_WIN="BANKER_WIN"})(yr||={});var Zr;((o)=>{o.PLAYER="PLAYER";o.TIE="TIE";o.BANKER="BANKER"})(Zr||={});var _r={["PLAYER_WIN"]:{betType:"PLAYER",multiplier:2},["TIE"]:{betType:"TIE",multiplier:8},["BANKER_WIN"]:{betType:"BANKER",multiplier:1.95}},Dr=(r)=>{return new L(0).add(r.bets.reduce((t,o)=>t.add(o.amount),new L(0)))};class br extends R{constructor(){super("BACCARAT")}determineGameResult({generator:r,gameInputs:e,edge:t}){if(t!==1)throw new Error("Baccarat is only available at 1% edge.");this.validateGameInputs(e);let o=r.getRandomIntsWithReplacement({min:0,max:51,count:6}),i=o.values,n=i.slice(0,3),a=i.slice(3,6),l=[],A=0;for(let f of n.slice(0,2)){let d=this.mapRandomValueToCard(f),D=this.mapRandomValueToCardValue(f);l.push(d),A=(A+D)%10}let p=[],c=0;for(let f of a.slice(0,2)){let d=this.mapRandomValueToCard(f),D=this.mapRandomValueToCardValue(f);p.push(d),c=(c+D)%10}if(!this.isNaturalWin(A,c)){let f=this.shouldDrawThirdPlayerCard(A),d=null;if(f)d=this.mapRandomValueToCardValue(n[2]),l.push(this.mapRandomValueToCard(n[2])),A=(A+d)%10;if(this.shouldDrawThirdBankerCard(c,d))p.push(this.mapRandomValueToCard(a[2])),c=(c+this.mapRandomValueToCardValue(a[2]))%10}let O;if(A===c)O="TIE";else O=A>c?"PLAYER_WIN":"BANKER_WIN";let B=Dr(e),{betType:_,multiplier:fr}=_r[O],ur=new L(0).add(e.bets.filter((f)=>f.type===_).reduce((f,d)=>f.add(d.amount.mul(fr)),new L(0)));return{isFinished:!0,payoutMultiplier:B.gt(0)?ur.div(B):new L(0),outputs:{playerCards:l,playerHandValue:A,bankerCards:p,bankerHandValue:c,gameOutcome:O,result:o.values},randomValues:o}}validateGameInputs(r){if(r.bets.length===0)throw new Error("Must place at least a single bet.");if(!r.bets.every((e)=>e.amount.gte(0)))throw new Error("Invalid bet.")}mapRandomValueToCard(r){let e=mr[Math.floor(r/13)],t=Kr[r%13];return{suit:e,rank:t}}isNaturalWin(r,e){let t=[8,9];return t.includes(r)||t.includes(e)}mapRandomValueToCardValue(r){let e=r%13;if(e===0)return 1;if(e>=10)return 10;return e+1}shouldDrawThirdPlayerCard(r){return r<=5}shouldDrawThirdBankerCard(r,e){if(e===null)return r<=5;if(r<=2)return!0;if(r===3)return e!==8;if(r===4)return[2,3,4,5,6,7].includes(e);if(r===5)return[4,5,6,7].includes(e);if(r===6)return[6,7].includes(e);return!1}}import Nr from"big.js";class s{multipliers;constructor(r){this.multipliers=r}getMultipliers(r){let e=this.multipliers.get(r);if(e===void 0)throw new Error(`Multipliers for ${r} not found`);return e}getAllMultipliers(){return Array.from(this.multipliers.entries()).map(([r,e])=>({edge:r,multipliers:e}))}}var Mr;((a)=>{a.PAIR="PAIR";a.TWO_PAIR="TWO_PAIR";a.THREE_OF_A_KIND="THREE_OF_A_KIND";a.FULL_HOUSE="FULL_HOUSE";a.FOUR_OF_A_KIND="FOUR_OF_A_KIND";a.FIVE_OF_A_KIND="FIVE_OF_A_KIND"})(Mr||={});var Vr={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:4.3,FOUR_OF_A_KIND:5,FIVE_OF_A_KIND:50},wr={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:4,FOUR_OF_A_KIND:4.8,FIVE_OF_A_KIND:50},vr={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:3.7,FOUR_OF_A_KIND:4.6,FIVE_OF_A_KIND:50},hr={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:3.4,FOUR_OF_A_KIND:4.4,FIVE_OF_A_KIND:50},Hr={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:2.8,FULL_HOUSE:3.2,FOUR_OF_A_KIND:3.6,FIVE_OF_A_KIND:50},Ur=new s(new Map([[1,Vr],[2,wr],[3,vr],[4,hr],[8,Hr]])),Pr={2:"PAIR",3:"THREE_OF_A_KIND",4:"FOUR_OF_A_KIND",5:"FIVE_OF_A_KIND"};class Fr extends R{constructor(){super("DIAMONDS")}determineGameResult({generator:r,edge:e}){let t=r.getRandomIntsWithReplacement({min:0,max:6,count:5}),o=Ur.getMultipliers(e),i=t.values,n=this.calculatePayoutMultiplier(o,i);return{isFinished:!0,payoutMultiplier:Nr(n),outputs:{result:t.values},randomValues:t}}calculatePayoutMultiplier(r,e){let t=new Map;for(let n of e){let a=t.get(n)||0;t.set(n,a+1)}let o=[...t.values()].filter((n)=>n>1),i=this.classifyResult(o);return i===null?0:r[i]}classifyResult(r){if(r.length>2)throw new Error(`Unexpected number of repeats ${r.length}`);let[e,t]=r;if(e===void 0)return null;if(t===void 0){let o=Pr[e];if(o===void 0)throw new Error(`Unexpected single diamond repeat count: ${e}`);return o}return e===3||t===3?"FULL_HOUSE":"TWO_PAIR"}}import F from"big.js";var Yr;((t)=>{t.ABOVE="ABOVE";t.BELOW="BELOW"})(Yr||={});class kr extends R{constructor(){super("DICE")}determineGameResult({generator:r,edge:e,gameInputs:t}){let o=r.getRandomInt({min:0,max:1e4}),i=o.min,l=o.max-i+1-1,A=t.direction==="ABOVE"?l-t.selectedValue:t.selectedValue,p=new F(A).div(l).mul(100);return{isFinished:!0,payoutMultiplier:(t.direction==="ABOVE"?o.value>t.selectedValue:o.value<t.selectedValue)?new F(100-e).div(p):new F(0),outputs:{result:o.values},randomValues:o}}}import J from"big.js";var $r;((i)=>{i.CLASSIC="CLASSIC";i.LOW_RISK="LOW_RISK";i.MEDIUM_RISK="MEDIUM_RISK";i.HIGH_RISK="HIGH_RISK"})($r||={});var jr={[1]:{["CLASSIC"]:[0,3.96],["LOW_RISK"]:[0.7,1.85],["MEDIUM_RISK"]:[0.4,2.75],["HIGH_RISK"]:[0,3.96]},[2]:{["CLASSIC"]:[0,1.9,4.5],["LOW_RISK"]:[0,2,3.8],["MEDIUM_RISK"]:[0,1.8,5.1],["HIGH_RISK"]:[0,0,17.1]},[3]:{["CLASSIC"]:[0,1,3.1,10.4],["LOW_RISK"]:[0,1.1,1.38,26],["MEDIUM_RISK"]:[0,0,2.8,50],["HIGH_RISK"]:[0,0,0,81.5]},[4]:{["CLASSIC"]:[0,0.8,1.8,5,22.5],["LOW_RISK"]:[0,0,2.2,7.9,90],["MEDIUM_RISK"]:[0,0,1.7,10,100],["HIGH_RISK"]:[0,0,0,10,259]},[5]:{["CLASSIC"]:[0,0.25,1.4,4.1,16.5,36],["LOW_RISK"]:[0,0,1.5,4.2,13,300],["MEDIUM_RISK"]:[0,0,1.4,4,14,390],["HIGH_RISK"]:[0,0,0,4.5,48,450]},[6]:{["CLASSIC"]:[0,0,1,3.68,7,16.5,40],["LOW_RISK"]:[0,0,1.1,2,6.2,100,700],["MEDIUM_RISK"]:[0,0,0,3,9,180,710],["HIGH_RISK"]:[0,0,0,0,11,350,710]},[7]:{["CLASSIC"]:[0,0,0.47,3,4.5,14,31,60],["LOW_RISK"]:[0,0,1.1,1.6,3.5,15,225,700],["MEDIUM_RISK"]:[0,0,0,2,7,30,400,800],["HIGH_RISK"]:[0,0,0,0,7,90,400,800]},[8]:{["CLASSIC"]:[0,0,0,2.2,4,13,22,55,70],["LOW_RISK"]:[0,0,1.1,1.5,2,5.5,39,100,800],["MEDIUM_RISK"]:[0,0,0,2,4,11,67,400,900],["HIGH_RISK"]:[0,0,0,0,5,20,270,600,900]},[9]:{["CLASSIC"]:[0,0,0,1.55,3,8,15,44,60,85],["LOW_RISK"]:[0,0,1.1,1.3,1.7,2.5,7.5,50,250,1000],["MEDIUM_RISK"]:[0,0,0,2,2.5,5,15,100,500,1000],["HIGH_RISK"]:[0,0,0,0,4,11,56,500,800,1000]},[10]:{["CLASSIC"]:[0,0,0,1.4,2.25,4.5,8,17,50,80,100],["LOW_RISK"]:[0,0,1.1,1.2,1.3,1.8,3.5,13,50,250,1000],["MEDIUM_RISK"]:[0,0,0,1.6,2,4,7,26,100,500,1000],["HIGH_RISK"]:[0,0,0,0,3.5,8,13,63,500,800,1000]}};class zr extends R{multiplierOverrides;get multipliers(){return this.multiplierOverrides??jr}constructor(r){super("KENO");this.multiplierOverrides=r;if(r)this.validateMultiplierOverrides(r)}determineGameResult({generator:r,edge:e,gameInputs:t}){if(e!==1&&!this.multiplierOverrides)throw new Error("Multiplier overrides must be specified if an edge of 1% is not desirable");if(t.selectedNumbers.length===0)throw new Error("No numbers selected");if(t.selectedNumbers.length>10)throw new Error("Maximum of 10 numbers can be selected");for(let a of t.selectedNumbers){if(a%1!==0)throw new Error("Only integers can be selected");if(a<0||a>39)throw new Error("Invalid number selected")}let o=r.getUniqueRandomInts({min:0,max:39,count:10}),i=t.selectedNumbers.filter((a)=>o.values.includes(a));return{isFinished:!0,payoutMultiplier:i.length>0?new J(this.multipliers[t.selectedNumbers.length][t.riskLevel][i.length]??0):new J(0),outputs:{result:o.values},randomValues:o}}validateMultiplierOverrides(r){for(let[e,t]of Object.entries(r)){let o=Number(e);for(let[i,n]of Object.entries(t))if(n.length!==o+1)throw new Error(`Invalid count of multipliers for tiles ${o} and risk level ${i}. Expected ${o+1}, but got ${n.length}`)}}}import x from"big.js";var Q=(r,e)=>{return r.gt(e)?r:e};var X=(r,e)=>{return r.lt(e)?r:e};class qr extends R{constructor(){super("LIMBO")}determineGameResult({generator:r,edge:e,gameInputs:t}){let o=r.getRandomInt({min:1,max:4294967295}),i=o.max,n=new x(16777216),a=new x(1),l=new x(1e6),A=o.value,p=new x(A-1).div(i),c=(100-e)/100,O=n.div(p.mul(n).plus(1)).mul(c),B=Q(a,X(O,l));return{isFinished:!0,payoutMultiplier:B.gte(t.targetMultiplier)?new x(t.targetMultiplier):new x(0),outputs:{randomMultiplier:B,result:o.values},randomValues:o}}}import N from"big.js";var Y=(r,e)=>{if(e<0||r<0||e>r)throw new Error("Invalid input: ensure 0 ≤ r ≤ n and n ≥ 0.");if(e>r-e)e=r-e;let t=1;for(let o=1;o<=e;o++)t=t*(r-o+1)/o;return t};class Jr extends R{constructor(){super("MINES")}determineGameResult({generator:r,edge:e,gameInputs:t}){if(t.minesCount<=0||t.minesCount>24)throw new Error("Must select between 1 and 24 mines.");if(t.selectedTiles.length>25-t.minesCount)throw new Error("Cannot select more tiles than available safe tiles (total tiles minus mines).");let a=r.getUniqueRandomInts({min:1,max:25,count:t.minesCount}),l=a.values.some((_)=>t.selectedTiles.includes(_)),A=t.hasCashedOut||l,p=(100-e)/100,c=new N(Y(25-t.minesCount,t.selectedTiles.length)).div(new N(Y(25,t.selectedTiles.length))),B=t.hasCashedOut&&!l?new N(p).div(c):new N(0);return{isFinished:A,payoutMultiplier:B,outputs:{result:a.values},randomValues:a}}}import{Big as ee}from"big.js";var W;((o)=>{o.LOW_RISK="LOW_RISK";o.MEDIUM_RISK="MEDIUM_RISK";o.HIGH_RISK="HIGH_RISK"})(W||={});var pt=[8,9,10,11,12,13,14,15,16],Qr={LOW_RISK:{8:[6,2.1,1.1,1,0.5,1,1.1,2.1,6],9:[6,2,1.6,1,0.7,0.7,1,1.6,2,6],10:[9,3,1.4,1.1,1,0.5,1,1.1,1.4,3,9],11:[8,3,1.9,1.3,1,0.7,0.7,1,1.3,1.9,3,8],12:[10,3,1.6,1.4,1.1,1,0.5,1,1.1,1.4,1.6,3,10],13:[8,4,3,1.9,1.2,0.9,0.7,0.7,0.9,1.2,1.9,3,4,8],14:[7,4,1.9,1.4,1.3,1.1,1,0.5,1,1.1,1.3,1.4,1.9,4,7],15:[15,8,3,2,1.5,1.1,1,0.7,0.7,1,1.1,1.5,2,3,8,15],16:[16,9,2,1.4,1.4,1.2,1.1,1,0.5,1,1.1,1.2,1.4,1.4,2,9,16]},MEDIUM_RISK:{8:[13,3,1.3,0.7,0.4,0.7,1.3,3,13],9:[18,4,1.7,0.9,0.5,0.5,0.9,1.7,4,18],10:[22,5,2,1.4,0.6,0.4,0.6,1.4,2,5,22],11:[24,6,3,1.8,0.7,0.5,0.5,0.7,1.8,3,6,24],12:[33,11,4,2,1.1,0.6,0.3,0.6,1.1,2,4,11,33],13:[43,13,6,3,1.3,0.7,0.4,0.4,0.7,1.3,3,6,13,43],14:[58,15,7,4,1.9,1,0.5,0.2,0.5,1,1.9,4,7,15,58],15:[88,18,11,5,3,1.3,0.5,0.3,0.3,0.5,1.3,3,5,11,18,88],16:[110,41.1,10,5,3,1.5,1,0.5,0.3,0.5,1,1.5,3,5,10,41.1,110]},HIGH_RISK:{8:[29,4,1.5,0.3,0.2,0.3,1.5,4,29],9:[43,7,2,0.6,0.2,0.2,0.6,2,7,43],10:[76,10,3,0.9,0.3,0.2,0.3,0.9,3,10,76],11:[120,13.9,5.2,1.4,0.4,0.2,0.2,0.4,1.4,5.2,13.9,120],12:[170,23.8,8.1,2,0.7,0.2,0.2,0.2,0.7,2,8.1,23.8,170],13:[260,36.7,11,4,1,0.2,0.2,0.2,0.2,1,4,11,36.7,260],14:[420,56.1,18,5,1.9,0.3,0.2,0.2,0.2,0.3,1.9,5,18,56.1,420],15:[620,82.8,27,8,3,0.5,0.2,0.2,0.2,0.2,0.5,3,8,27,82.8,620],16:[1000,129.9,26.1,9,4,2,0.2,0.2,0.2,0.2,0.2,2,4,9,26.1,129.9,1000]}},Xr={LOW_RISK:{8:[6,1.9,1.1,1,0.5,1,1.1,1.9,6],9:[6,1.7,1.6,1,0.7,0.7,1,1.6,1.7,6],10:[9,2.5,1.4,1.1,1,0.5,1,1.1,1.4,2.5,9],11:[9,2.5,1.8,1.3,1,0.7,0.7,1,1.3,1.8,2.5,9],12:[10,3.2,1.6,1.3,1.1,1,0.5,1,1.1,1.3,1.6,3.2,10],13:[8,3.7,2.9,1.8,1.2,0.9,0.7,0.7,0.9,1.2,1.8,2.9,3.7,8],14:[7,4,1.8,1.2,1.3,1.1,1,0.5,1,1.1,1.3,1.2,1.8,4,7],15:[15,7.6,2.8,2,1.4,1.1,1,0.7,0.7,1,1.1,1.4,2,2.8,7.6,15],16:[16,9,1.7,1.2,1.3,1.2,1.1,1,0.5,1,1.1,1.2,1.3,1.2,1.7,9,16]},MEDIUM_RISK:{8:[13,3.2,1.4,0.6,0.4,0.6,1.4,3.2,13],9:[18,3.7,1.7,0.9,0.5,0.5,0.9,1.7,3.7,18],10:[22,5,1.9,1.4,0.6,0.4,0.6,1.4,1.9,5,22],11:[24,6,2.8,1.8,0.7,0.5,0.5,0.7,1.8,2.8,6,24],12:[33,11.1,4,1.9,1.1,0.6,0.3,0.6,1.1,1.9,4,11.1,33],13:[43,13.7,6.1,2.8,1.3,0.7,0.4,0.4,0.7,1.3,2.8,6.1,13.7,43],14:[58,13.7,6.7,3.9,1.9,1,0.5,0.2,0.5,1,1.9,3.9,6.7,13.7,58],15:[88,17.7,10.8,5,2.9,1.3,0.5,0.3,0.3,0.5,1.3,2.9,5,10.8,17.7,88],16:[110,40.5,9.8,4.8,2.9,1.5,1,0.5,0.3,0.5,1,1.5,2.9,4.8,9.8,40.5,110]},HIGH_RISK:{8:[29,3.8,1.5,0.3,0.2,0.3,1.5,3.8,29],9:[43,7.1,1.9,0.6,0.2,0.2,0.6,1.9,7.1,43],10:[76,9.9,2.9,0.9,0.3,0.2,0.3,0.9,2.9,9.9,76],11:[120,13.4,5.1,1.4,0.4,0.2,0.2,0.4,1.4,5.1,13.4,120],12:[170,23.2,7.9,2,0.7,0.2,0.2,0.2,0.7,2,7.9,23.2,170],13:[260,36.6,10.5,4,1,0.2,0.2,0.2,0.2,1,4,10.5,36.6,260],14:[420,55.5,17.6,4.9,1.9,0.3,0.2,0.2,0.2,0.3,1.9,4.9,17.6,55.5,420],15:[620,82.3,26.8,7.7,3,0.5,0.2,0.2,0.2,0.2,0.5,3,7.7,26.8,82.3,620],16:[1000,129.8,25.2,8.6,4,2,0.2,0.2,0.2,0.2,0.2,2,4,8.6,25.2,129.8,1000]}},Wr={LOW_RISK:{8:[6,2.2,1.1,1,0.4,1,1.1,2.2,6],9:[6,1.8,1.5,1,0.7,0.7,1,1.5,1.8,6],10:[9,2.4,1.3,1.1,1,0.5,1,1.1,1.3,2.4,9],11:[8,2.7,1.9,1.2,1,0.7,0.7,1,1.2,1.9,2.7,8],12:[10,3.3,1.6,1.2,1.1,1,0.5,1,1.1,1.2,1.6,3.3,10],13:[8,3.8,2.9,1.9,1.1,0.9,0.7,0.7,0.9,1.1,1.9,2.9,3.8,8],14:[7,3.9,2,1.4,1.3,1.1,1,0.4,1,1.1,1.3,1.4,2,3.9,7],15:[15,7.9,2.5,2,1.3,1.1,1,0.7,0.7,1,1.1,1.3,2,2.5,7.9,15],16:[16,8.9,1.9,1.4,1.4,1.2,1.1,1,0.4,1,1.1,1.2,1.4,1.4,1.9,8.9,16]},MEDIUM_RISK:{8:[13,3.5,1.2,0.7,0.3,0.7,1.2,3.5,13],9:[18,3.8,1.6,0.9,0.5,0.5,0.9,1.6,3.8,18],10:[22,5.2,2,1.3,0.6,0.4,0.6,1.3,2,5.2,22],11:[24,5.6,2.7,1.8,0.7,0.5,0.5,0.7,1.8,2.7,5.6,24],12:[33,11.3,4,1.8,1.1,0.6,0.3,0.6,1.1,1.8,4,11.3,33],13:[43,12.9,5.7,2.8,1.3,0.7,0.4,0.4,0.7,1.3,2.8,5.7,12.9,43],14:[58,13.7,6.9,3.9,1.8,1,0.5,0.2,0.5,1,1.8,3.9,6.9,13.7,58],15:[88,18,10.9,4.9,2.8,1.3,0.5,0.3,0.3,0.5,1.3,2.8,4.9,10.9,18,88],16:[110,39.9,9.9,5,2.9,1.4,1,0.5,0.3,0.5,1,1.4,2.9,5,9.9,39.9,110]},HIGH_RISK:{8:[29,4,1.4,0.3,0.2,0.3,1.4,4,29],9:[43,7.3,2,0.5,0.2,0.2,0.5,2,7.3,43],10:[76,9.8,2.8,0.9,0.3,0.2,0.3,0.9,2.8,9.8,76],11:[120,13.5,4.9,1.4,0.4,0.2,0.2,0.4,1.4,4.9,13.5,120],12:[170,23.3,7.9,1.9,0.7,0.2,0.2,0.2,0.7,1.9,7.9,23.3,170],13:[260,36.2,10.4,3.9,1,0.2,0.2,0.2,0.2,1,3.9,10.4,36.2,260],14:[420,54.8,17.9,4.9,1.8,0.3,0.2,0.2,0.2,0.3,1.8,4.9,17.9,54.8,420],15:[620,81.9,26.6,7.7,2.9,0.5,0.2,0.2,0.2,0.2,0.5,2.9,7.7,26.6,81.9,620],16:[1000,130,24.9,8.4,3.9,2,0.2,0.2,0.2,0.2,0.2,2,3.9,8.4,24.9,130,1000]}},gr={LOW_RISK:{8:[6,2,1.1,1,0.4,1,1.1,2,6],9:[6,1.9,1.4,1,0.7,0.7,1,1.4,1.9,6],10:[9,2.8,1.1,1.1,1,0.5,1,1.1,1.1,2.8,9],11:[8,2.7,1.7,1.2,1,0.7,0.7,1,1.2,1.7,2.7,8],12:[10,2.7,1.4,1.2,1.1,1,0.5,1,1.1,1.2,1.4,2.7,10],13:[8,3.5,2.8,1.9,1.3,0.9,0.6,0.6,0.9,1.3,1.9,2.8,3.5,8],14:[7,3.3,1.6,1.3,1.3,1.1,1,0.4,1,1.1,1.3,1.3,1.6,3.3,7],15:[15,8,2.9,2,1.4,1.2,1,0.6,0.6,1,1.2,1.4,2,2.9,8,15],16:[16,9.1,2.2,1.4,1.2,1.2,1.1,1,0.4,1,1.1,1.2,1.2,1.4,2.2,9.1,16]},MEDIUM_RISK:{8:[13,2.9,1.2,0.7,0.4,0.7,1.2,2.9,13],9:[18,3.5,1.6,0.9,0.5,0.5,0.9,1.6,3.5,18],10:[22,4.7,2,1.3,0.6,0.4,0.6,1.3,2,4.7,22],11:[24,5.7,2.5,1.8,0.7,0.5,0.5,0.7,1.8,2.5,5.7,24],12:[33,10.7,3.8,1.8,1.1,0.6,0.3,0.6,1.1,1.8,3.8,10.7,33],13:[43,12.6,5.6,2.7,1.3,0.7,0.4,0.4,0.7,1.3,2.7,5.6,12.6,43],14:[58,13.7,6.4,3.8,1.8,1,0.5,0.2,0.5,1,1.8,3.8,6.4,13.7,58],15:[88,17.7,10.7,4.9,2.7,1.3,0.5,0.3,0.3,0.5,1.3,2.7,4.9,10.7,17.7,88],16:[110,39.7,9.6,4.8,2.8,1.4,1,0.5,0.3,0.5,1,1.4,2.8,4.8,9.6,39.7,110]},HIGH_RISK:{8:[29,3.9,1.4,0.3,0.2,0.3,1.4,3.9,29],9:[43,6.9,1.8,0.6,0.2,0.2,0.6,1.8,6.9,43],10:[76,9.8,2.7,0.9,0.3,0.2,0.3,0.9,2.7,9.8,76],11:[120,13.1,5.1,1.3,0.4,0.2,0.2,0.4,1.3,5.1,13.1,120],12:[170,22.7,7.7,1.9,0.7,0.2,0.2,0.2,0.7,1.9,7.7,22.7,170],13:[260,35.9,10.3,3.8,1,0.2,0.2,0.2,0.2,1,3.8,10.3,35.9,260],14:[420,54.2,17.5,4.8,1.8,0.3,0.2,0.2,0.2,0.3,1.8,4.8,17.5,54.2,420],15:[620,80.6,26.1,7.8,2.8,0.5,0.2,0.2,0.2,0.2,0.5,2.8,7.8,26.1,80.6,620],16:[1000,129.7,24.7,8.2,3.8,2,0.2,0.2,0.2,0.2,0.2,2,3.8,8.2,24.7,129.7,1000]}},re={LOW_RISK:{8:[5,1.8,1,1,0.4,1,1,1.8,5],9:[5,1.7,1.2,1,0.7,0.7,1,1.2,1.7,5],10:[9,2.8,1.2,1,1,0.4,1,1,1.2,2.8,9],11:[8,2.5,1.6,1,1,0.7,0.7,1,1,1.6,2.5,8],12:[10,2.5,1.3,1.3,1,1,0.4,1,1,1.3,1.3,2.5,10],13:[8,4.1,2.8,1.8,1.1,0.9,0.6,0.6,0.9,1.1,1.8,2.8,4.1,8],14:[7,3.3,1.7,1.2,1.2,1,1,0.4,1,1,1.2,1.2,1.7,3.3,7],15:[15,7.3,2.9,1.9,1.4,1,1,0.6,0.6,1,1,1.4,1.9,2.9,7.3,15],16:[16,8.7,2,1.5,1.3,1,1.1,1,0.3,1,1.1,1,1.3,1.5,2,8.7,16]},MEDIUM_RISK:{8:[13,2.6,1.1,0.7,0.4,0.7,1.1,2.6,13],9:[17,3.3,1.4,0.9,0.5,0.5,0.9,1.4,3.3,17],10:[21,4.1,1.7,1.3,0.6,0.4,0.6,1.3,1.7,4.1,21],11:[23,5.6,2.4,1.6,0.7,0.5,0.5,0.7,1.6,2.4,5.6,23],12:[32,10.2,3.7,1.7,1.1,0.6,0.2,0.6,1.1,1.7,3.7,10.2,32],13:[42,11.7,5.3,2.5,1.2,0.7,0.4,0.4,0.7,1.2,2.5,5.3,11.7,42],14:[56,13.2,5.9,3.6,1.6,1,0.5,0.2,0.5,1,1.6,3.6,5.9,13.2,56],15:[86,17.3,10,4.6,2.6,1.2,0.5,0.3,0.3,0.5,1.2,2.6,4.6,10,17.3,86],16:[107,39,9.9,4.5,2.4,1.3,1,0.5,0.3,0.5,1,1.3,2.4,4.5,9.9,39,107]},HIGH_RISK:{8:[28,3.3,1.4,0.3,0.2,0.3,1.4,3.3,28],9:[42,6.7,1.6,0.6,0.2,0.2,0.6,1.6,6.7,42],10:[74,9.6,2.6,0.9,0.3,0.1,0.3,0.9,2.6,9.6,74],11:[116,12.7,4.8,1.2,0.4,0.2,0.2,0.4,1.2,4.8,12.7,116],12:[165,20.9,7.2,1.8,0.7,0.2,0.2,0.2,0.7,1.8,7.2,20.9,165],13:[252,33.9,10.1,3.4,1,0.2,0.2,0.2,0.2,1,3.4,10.1,33.9,252],14:[407,51.9,16.3,4.6,1.7,0.3,0.2,0.2,0.2,0.3,1.7,4.6,16.3,51.9,407],15:[600,76.9,24.9,7.4,2.6,0.5,0.2,0.2,0.2,0.2,0.5,2.6,7.4,24.9,76.9,600],16:[1000,122,24.5,8,3.7,1.8,0.2,0.2,0.2,0.2,0.2,1.8,3.7,8,24.5,122,1000]}},g=new s(new Map([[1,Qr],[2,Xr],[3,Wr],[4,gr],[8,re]]));class te extends R{constructor(){super("PLINKO")}determineGameResult({generator:r,gameInputs:e,edge:t}){if(e.numberOfRows%1>0)throw new Error("Number of rows must be an integer");if(e.numberOfRows<8||e.numberOfRows>16)throw new Error("Number of rows must be between 8 and 16");let o=e.numberOfRows,a=g.getMultipliers(t)[e.riskLevel][o],l=r.getRandomIntsWithReplacement({min:0,max:1,count:e.numberOfRows}),p=l.values.reduce((O,B)=>O+B,0),c=a[p];if(c===void 0)throw new Error(`No payout found for end position ${p}`);return{isFinished:!0,payoutMultiplier:ee(c),outputs:{result:l.values},randomValues:l}}}import{Big as w}from"big.js";var k=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36],rr=[37,...k],er=[[0,1],[0,2],[0,3],[1,2],[1,4],[2,3],[2,5],[3,6],[4,5],[4,7],[5,6],[5,8],[6,9],[7,8],[7,10],[8,9],[8,11],[9,12],[10,11],[10,13],[11,12],[11,14],[12,15],[13,14],[13,16],[14,15],[14,17],[15,18],[16,17],[16,19],[17,18],[17,20],[18,21],[19,20],[19,22],[20,21],[20,23],[21,24],[22,23],[22,25],[23,24],[23,26],[24,27],[25,26],[25,28],[26,27],[26,29],[27,30],[28,29],[28,31],[29,30],[29,32],[30,33],[31,32],[31,34],[32,33],[32,35],[33,36],[34,35],[35,36]],tr=[[0,1],[0,2],[0,37],[2,37],[3,37],[1,2],[1,4],[2,3],[2,5],[3,6],[4,5],[4,7],[5,6],[5,8],[6,9],[7,8],[7,10],[8,9],[8,11],[9,12],[10,11],[10,13],[11,12],[11,14],[12,15],[13,14],[13,16],[14,15],[14,17],[15,18],[16,17],[16,19],[17,18],[17,20],[18,21],[19,20],[19,22],[20,21],[20,23],[21,24],[22,23],[22,25],[23,24],[23,26],[24,27],[25,26],[25,28],[26,27],[26,29],[27,30],[28,29],[28,31],[29,30],[29,32],[30,33],[31,32],[31,34],[32,33],[32,35],[33,36],[34,35],[35,36]],or=[[0,1,2],[0,2,3],[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18],[19,20,21],[22,23,24],[25,26,27],[28,29,30],[31,32,33],[34,35,36]],ir=[[0,1,2],[0,2,37],[1,2,3],[2,3,37],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18],[19,20,21],[22,23,24],[25,26,27],[28,29,30],[31,32,33],[34,35,36]],nr=[[0,1,2,3],[1,2,4,5],[2,3,5,6],[4,5,7,8],[5,6,8,9],[7,8,10,11],[8,9,11,12],[10,11,13,14],[11,12,14,15],[13,14,16,17],[14,15,17,18],[16,17,19,20],[17,18,20,21],[19,20,22,23],[20,21,23,24],[22,23,25,26],[23,24,26,27],[25,26,28,29],[26,27,29,30],[28,29,31,32],[29,30,32,33],[31,32,34,35],[32,33,35,36]],ar=[[1,2,4,5],[2,3,5,6],[4,5,7,8],[5,6,8,9],[7,8,10,11],[8,9,11,12],[10,11,13,14],[11,12,14,15],[13,14,16,17],[14,15,17,18],[16,17,19,20],[17,18,20,21],[19,20,22,23],[20,21,23,24],[22,23,25,26],[23,24,26,27],[25,26,28,29],[26,27,29,30],[28,29,31,32],[29,30,32,33],[31,32,34,35],[32,33,35,36]],Er=[0,1,2,3,37],cr=[[1,2,3,4,5,6],[4,5,6,7,8,9],[7,8,9,10,11,12],[10,11,12,13,14,15],[13,14,15,16,17,18],[16,17,18,19,20,21],[19,20,21,22,23,24],[22,23,24,25,26,27],[25,26,27,28,29,30],[28,29,30,31,32,33],[31,32,33,34,35,36]],Ar=[[1,2,3,4,5,6],[4,5,6,7,8,9],[7,8,9,10,11,12],[10,11,12,13,14,15],[13,14,15,16,17,18],[16,17,18,19,20,21],[19,20,21,22,23,24],[22,23,24,25,26,27],[25,26,27,28,29,30],[28,29,30,31,32,33],[31,32,33,34,35,36]],S;((t)=>{t.EVEN="EVEN";t.ODD="ODD"})(S||={});var T;((t)=>{t.RED="RED";t.BLACK="BLACK"})(T||={});var I;((t)=>{t.LOW="LOW";t.HIGH="HIGH"})(I||={});var G;((o)=>{o.TOP="TOP";o.MIDDLE="MIDDLE";o.BOTTOM="BOTTOM"})(G||={});var C;((o)=>{o.FIRST="FIRST";o.SECOND="SECOND";o.THIRD="THIRD"})(C||={});var $;((t)=>{t.AMERICAN="AMERICAN";t.EUROPEAN="EUROPEAN"})($||={});var M=(r)=>{if(r.straightBets.length===0&&r.splitBets.length===0&&r.streetBets.length===0&&r.cornerBets.length===0&&r.doubleStreetBets.length===0&&r.parityBets.length===0&&r.colorBets.length===0&&r.halfBets.length===0&&r.columnBets.length===0&&r.dozenBets.length===0)throw E.createValidationError("Must place at least a single bet.");if(!r.straightBets.every((e)=>e.amount.gte(0)&&m(e.value)))throw E.createValidationError("Invalid straight bet.");if(!r.splitBets.every((e)=>e.amount.gte(0)&&oe(e.values)))throw E.createValidationError("Invalid split bet.");if(!r.streetBets.every((e)=>e.amount.gte(0)&&ie(e.values)))throw E.createValidationError("Invalid street bet.");if(!r.cornerBets.every((e)=>e.amount.gte(0)&&ne(e.values)))throw E.createValidationError("Invalid corner bet.");if(!r.doubleStreetBets.every((e)=>e.amount.gte(0)&&ae(e.values)))throw E.createValidationError("Invalid double street bet.");if(!r.parityBets.every((e)=>e.amount.gte(0)&&Object.values(S).includes(e.parity)))throw E.createValidationError("Invalid parity bet.");if(!r.colorBets.every((e)=>e.amount.gte(0)&&Object.values(T).includes(e.color)))throw E.createValidationError("Invalid color bet.");if(!r.halfBets.every((e)=>e.amount.gte(0)&&Object.values(I).includes(e.half)))throw E.createValidationError("Invalid half bet.");if(!r.columnBets.every((e)=>e.amount.gte(0)&&Object.values(G).includes(e.column)))throw E.createValidationError("Invalid column bet.");if(!r.dozenBets.every((e)=>e.amount.gte(0)&&Object.values(C).includes(e.dozen)))throw E.createValidationError("Invalid dozen bet.")},m=(r)=>{return k.includes(r)},oe=(r)=>{if(r.length!==2)return!1;if(!r.every(m))return!1;return er.some(([e,t])=>e===r[0]&&t===r[1])},ie=(r)=>{if(r.length!==3)return!1;if(!r.every(m))return!1;return or.some(([e,t,o])=>e===r[0]&&t===r[1]&&o===r[2])},ne=(r)=>{if(r.length!==4)return!1;if(!r.every(m))return!1;return nr.some(([e,t,o,i])=>e===r[0]&&t===r[1]&&o===r[2]&&i===r[3])},ae=(r)=>{if(r.length!==6)return!1;if(!r.every(m))return!1;return cr.some(([e,t,o,i,n,a])=>e===r[0]&&t===r[1]&&o===r[2]&&i===r[3]&&n===r[4]&&a===r[5])};var V=(r)=>{if(r.straightBets.length===0&&r.splitBets.length===0&&r.streetBets.length===0&&r.cornerBets.length===0&&r.basketBets.length===0&&r.doubleStreetBets.length===0&&r.parityBets.length===0&&r.colorBets.length===0&&r.halfBets.length===0&&r.columnBets.length===0&&r.dozenBets.length===0)throw E.createValidationError("Must place at least a single bet.");if(!r.straightBets.every((e)=>e.amount.gte(0)&&K(e.value)))throw E.createValidationError("Invalid straight bet.");if(!r.splitBets.every((e)=>e.amount.gte(0)&&Ee(e.values)))throw E.createValidationError("Invalid split bet.");if(!r.streetBets.every((e)=>e.amount.gte(0)&&ce(e.values)))throw E.createValidationError("Invalid street bet.");if(!r.cornerBets.every((e)=>e.amount.gte(0)&&Ae(e.values)))throw E.createValidationError("Invalid corner bet.");if(!r.basketBets.every((e)=>e.amount.gte(0)))throw E.createValidationError("Invalid basket bet.");if(!r.doubleStreetBets.every((e)=>e.amount.gte(0)&&le(e.values)))throw E.createValidationError("Invalid double street bet.");if(!r.parityBets.every((e)=>e.amount.gte(0)&&Object.values(S).includes(e.parity)))throw E.createValidationError("Invalid parity bet.");if(!r.colorBets.every((e)=>e.amount.gte(0)&&Object.values(T).includes(e.color)))throw E.createValidationError("Invalid color bet.");if(!r.halfBets.every((e)=>e.amount.gte(0)&&Object.values(I).includes(e.half)))throw E.createValidationError("Invalid half bet.");if(!r.columnBets.every((e)=>e.amount.gte(0)&&Object.values(G).includes(e.column)))throw E.createValidationError("Invalid column bet.");if(!r.dozenBets.every((e)=>e.amount.gte(0)&&Object.values(C).includes(e.dozen)))throw E.createValidationError("Invalid dozen bet.")},K=(r)=>{return rr.includes(r)};function Ee(r){if(r.length!==2)return!1;if(!r.every(K))return!1;return tr.some(([e,t])=>e===r[0]&&t===r[1])}var ce=(r)=>{if(r.length!==3)return!1;if(!r.every(K))return!1;return ir.some(([e,t,o])=>e===r[0]&&t===r[1]&&o===r[2])},Ae=(r)=>{if(r.length!==4)return!1;if(!r.every(K))return!1;return ar.some(([e,t,o,i])=>e===r[0]&&t===r[1]&&o===r[2]&&i===r[3])},le=(r)=>{if(r.length!==6)return!1;if(!r.every(K))return!1;return Ar.some(([e,t,o,i,n,a])=>e===r[0]&&t===r[1]&&o===r[2]&&i===r[3]&&n===r[4]&&a===r[5])};var Re={straightBets:36,splitBets:18,streetBets:12,cornerBets:9,basketBets:7,doubleStreetBets:6,parityBets:2,colorBets:2,halfBets:2,columnBets:3,dozenBets:3},pe=[3,6,9,12,15,18,21,24,27,30,33,36],Oe=[2,5,8,11,14,17,20,23,26,29,32,35],fe=[1,4,7,10,13,16,19,22,25,28,31,34],ue=[1,3,5,7,9,12,14,16,18,19,21,23,25,27,30,32,34,36],Be=[2,4,6,8,10,11,13,15,17,20,22,24,26,28,29,31,33,35],de=2.7,se=5.3;class j extends R{constructor(){super("ROULETTE")}determineGameResult({generator:r,gameInputs:e}){this.validateInputs(e);let t=r.getRandomInt({min:0,max:this.maxNumber}),o=t.value,i=this.determineBetOutcomes(e,o),{payoutMultiplier:n}=this.getPayoutDetails(e,o);return{outputs:{betOutcomes:i,result:t.values},payoutMultiplier:n,isFinished:!0,randomValues:t}}getPayoutDetails(r,e){let t=this.determineBetOutcomes(r,e),o=this.getBetTotals(r),i=this.getBetTotals(t.winningBets),n=this.calculateTotalBetAmount(o),a=this.calculateTotalPayout(i);return{payoutMultiplier:n.gt(0)?a.div(n):new w(0),payoutAmount:a}}determineBetOutcomes(r,e){let t={},o={};for(let i of Object.keys(r)){let n=r[i],a=this.betPredicates[i],{winning:l,losing:A}=this.partitionBets(n,a,e);t[i]=l,o[i]=A}return{winningBets:t,losingBets:o}}partitionBets(r,e,t){return{winning:r.filter((o)=>e(o,t)),losing:r.filter((o)=>!e(o,t))}}calculateTotalAmount(r){return r.reduce((e,t)=>e.plus(t.amount),new w(0))}isWinningStraightBet(r,e){return r.value===e}isWinningSplitBet(r,e){return r.values.some((t)=>t===e)}isWinningStreetBet(r,e){return r.values.some((t)=>t===e)}isWinningCornerBet(r,e){return r.values.some((t)=>t===e)}isWinningDoubleStreetBet(r,e){return r.values.some((t)=>t===e)}isWinningColorBet(r,e){let t=r;return ue.includes(e)&&t.color==="RED"||Be.includes(e)&&t.color==="BLACK"}isWinningHalfBet(r,e){let t=r;if(e>0&&e<=18&&t.half==="LOW")return!0;if(e>18&&e<=36&&t.half==="HIGH")return!0;return!1}isWinningColumnBet(r,e){let t=r;return pe.includes(e)&&t.column==="TOP"||Oe.includes(e)&&t.column==="MIDDLE"||fe.includes(e)&&t.column==="BOTTOM"}isWinningDozenBet(r,e){let t=r;if(e>0&&e<=12&&t.dozen==="FIRST")return!0;if(e>12&&e<=24&&t.dozen==="SECOND")return!0;if(e>24&&e<=36&&t.dozen==="THIRD")return!0;return!1}isWinningParityBet(r,e){let t=r;if(e===0||e===37)return!1;let o=e%2===0?"EVEN":"ODD";return t.parity===o}getBetTotals(r){let e={};for(let t of Object.keys(r))e[t]=this.calculateTotalAmount(r[t]);return e}calculateTotalPayout(r){return Object.entries(r).reduce((e,[t,o])=>{let n=Re[t];return e.plus(o.mul(n||0))},new w(0))}calculateTotalBetAmount(r){return Object.values(r).reduce((e,t)=>e.plus(t),new w(0))}}class lr extends j{maxNumber=36;validateInputs(r){M(r)}betPredicates={straightBets:this.isWinningStraightBet,splitBets:this.isWinningSplitBet,streetBets:this.isWinningStreetBet,cornerBets:this.isWinningCornerBet,doubleStreetBets:this.isWinningDoubleStreetBet,parityBets:this.isWinningParityBet,colorBets:this.isWinningColorBet,halfBets:this.isWinningHalfBet,columnBets:this.isWinningColumnBet,dozenBets:this.isWinningDozenBet}}class Rr extends j{maxNumber=37;validateInputs(r){V(r)}betPredicates={straightBets:this.isWinningStraightBet,splitBets:this.isWinningSplitBet,streetBets:this.isWinningStreetBet,cornerBets:this.isWinningCornerBet,basketBets:this.isWinningBasketBet,doubleStreetBets:this.isWinningDoubleStreetBet,parityBets:this.isWinningParityBet,colorBets:this.isWinningColorBet,halfBets:this.isWinningHalfBet,columnBets:this.isWinningColumnBet,dozenBets:this.isWinningDozenBet};isWinningBasketBet(r,e){return Er.some((t)=>t===e)}}class xe extends R{europeanGame;americanGame;constructor(){super("ROULETTE");this.europeanGame=new lr,this.americanGame=new Rr}determineGameResult(r){let{gameInputs:e,...t}=r;if(r.edge===de&&e.type==="EUROPEAN"){let o=this.europeanGame.determineGameResult({...t,gameInputs:e.inputs}),{betOutcomes:i}=o.outputs;return{...o,outputs:{type:"european",betOutcomes:i,result:o.outputs.result}}}if(r.edge===se&&e.type==="AMERICAN"){let o=this.americanGame.determineGameResult({...t,gameInputs:e.inputs}),{betOutcomes:i}=o.outputs;return{...o,outputs:{type:"american",betOutcomes:i,result:o.outputs.result}}}throw new Error("Only European & American Roulette games are supported")}}var ht=(r)=>{if(r.type==="EUROPEAN")M(r.inputs);else V(r.inputs)};import{Big as Le}from"big.js";var y;((o)=>{o.LOW_RISK="LOW_RISK";o.MEDIUM_RISK="MEDIUM_RISK";o.HIGH_RISK="HIGH_RISK"})(y||={});var Z;((n)=>{n[n.TEN=10]="TEN";n[n.TWENTY=20]="TWENTY";n[n.THIRTY=30]="THIRTY";n[n.FORTY=40]="FORTY";n[n.FIFTY=50]="FIFTY"})(Z||={});var Se={LOW_RISK:{10:{ZERO:0,A:1.2,B:1.5},20:{ZERO:0,A:1.2,B:1.5},30:{ZERO:0,A:1.2,B:1.5},40:{ZERO:0,A:1.2,B:1.5},50:{ZERO:0,A:1.2,B:1.5}},MEDIUM_RISK:{10:{ZERO:0,A:1.5,B:1.9,C:2,D:3},20:{ZERO:0,A:1.5,B:1.8,C:2,D:3},30:{ZERO:0,A:1.5,B:1.7,C:2,D:3,E:4},40:{ZERO:0,A:1.5,B:1.6,C:2,D:3},50:{ZERO:0,A:1.5,B:2,C:3,D:5}},HIGH_RISK:{10:{ZERO:0,A:9.9},20:{ZERO:0,A:19.8},30:{ZERO:0,A:29.7},40:{ZERO:0,A:39.6},50:{ZERO:0,A:49.5}}},Te={LOW_RISK:{10:{ZERO:0,A:1.2,B:1.4},20:{ZERO:0,A:1.2,B:1.4},30:{ZERO:0,A:1.2,B:1.4},40:{ZERO:0,A:1.2,B:1.4},50:{ZERO:0,A:1.2,B:1.4}},MEDIUM_RISK:{10:{ZERO:0,A:1.4,B:1.9,C:2,D:3.1},20:{ZERO:0,A:1.5,B:1.8,C:1.9,D:3.4},30:{ZERO:0,A:1.5,B:1.7,C:1.9,D:3,E:4.3},40:{ZERO:0,A:1.5,B:1.6,C:2,D:2.9},50:{ZERO:0,A:1.5,B:2,C:3,D:4.5}},HIGH_RISK:{10:{ZERO:0,A:9.8},20:{ZERO:0,A:19.6},30:{ZERO:0,A:29.4},40:{ZERO:0,A:39.2},50:{ZERO:0,A:49}}},Ie={LOW_RISK:{10:{ZERO:0,A:1.15,B:1.65},20:{ZERO:0,A:1.15,B:1.65},30:{ZERO:0,A:1.15,B:1.65},40:{ZERO:0,A:1.15,B:1.65},50:{ZERO:0,A:1.15,B:1.65}},MEDIUM_RISK:{10:{ZERO:0,A:1.4,B:1.9,C:2,D:3},20:{ZERO:0,A:1.4,B:1.6,C:2,D:3},30:{ZERO:0,A:1.4,B:1.7,C:2,D:3,E:4},40:{ZERO:0,A:1.5,B:1.6,C:2,D:2.8},50:{ZERO:0,A:1.5,B:2,C:2.7,D:4.9}},HIGH_RISK:{10:{ZERO:0,A:9.7},20:{ZERO:0,A:19.4},30:{ZERO:0,A:29.1},40:{ZERO:0,A:38.8},50:{ZERO:0,A:48.5}}},Ge={LOW_RISK:{10:{ZERO:0,A:1.15,B:1.55},20:{ZERO:0,A:1.15,B:1.55},30:{ZERO:0,A:1.15,B:1.55},40:{ZERO:0,A:1.15,B:1.55},50:{ZERO:0,A:1.15,B:1.55}},MEDIUM_RISK:{10:{ZERO:0,A:1.4,B:1.8,C:2,D:3},20:{ZERO:0,A:1.3,B:1.5,C:2,D:3},30:{ZERO:0,A:1.4,B:1.6,C:2,D:2.9,E:4},40:{ZERO:0,A:1.5,B:1.6,C:2,D:2.7},50:{ZERO:0,A:1.5,B:2,C:2.6,D:4.8}},HIGH_RISK:{10:{ZERO:0,A:9.6},20:{ZERO:0,A:19.2},30:{ZERO:0,A:28.8},40:{ZERO:0,A:38.4},50:{ZERO:0,A:48}}},Ce={LOW_RISK:{10:{ZERO:0,A:1.1,B:1.5},20:{ZERO:0,A:1.1,B:1.5},30:{ZERO:0,A:1.1,B:1.45},40:{ZERO:0,A:1.1,B:1.45},50:{ZERO:0,A:1.1,B:1.45}},MEDIUM_RISK:{10:{ZERO:0,A:1.3,B:1.7,C:1.9,D:3},20:{ZERO:0,A:1.3,B:1.4,C:1.9,D:3},30:{ZERO:0,A:1.3,B:1.7,C:1.9,D:2.8,E:3.8},40:{ZERO:0,A:1.4,B:1.8,C:1.9,D:2.6},50:{ZERO:0,A:1.4,B:1.9,C:2.6,D:4.6}},HIGH_RISK:{10:{ZERO:0,A:9.2},20:{ZERO:0,A:18.4},30:{ZERO:0,A:27.6},40:{ZERO:0,A:36.8},50:{ZERO:0,A:46}}},pr=new s(new Map([[1,Se],[2,Te],[3,Ie],[4,Ge],[8,Ce]]));var Or={LOW_RISK:{10:["B","A","A","A","ZERO","A","A","A","A","ZERO"],20:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"],30:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"],40:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"],50:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"]},MEDIUM_RISK:{10:["ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","D"],20:["A","ZERO","C","ZERO","B","ZERO","C","ZERO","C","ZERO","A","ZERO","C","ZERO","C","ZERO","D","ZERO","C","ZERO"],30:["A","ZERO","C","ZERO","A","ZERO","C","ZERO","D","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","C","ZERO","A","ZERO","C","ZERO","E","ZERO","A","ZERO","C","ZERO"],40:["C","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO","C","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO","C","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO"],50:["A","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","B","ZERO","A","ZERO","D","ZERO","A","ZERO","B","ZERO","A","ZERO"]},HIGH_RISK:{10:[...Array(9).fill("ZERO"),"A"],20:[...Array(19).fill("ZERO"),"A"],30:[...Array(29).fill("ZERO"),"A"],40:[...Array(39).fill("ZERO"),"A"],50:[...Array(49).fill("ZERO"),"A"]}};class me extends R{constructor(){super("WHEEL")}determineGameResult({generator:r,gameInputs:e,edge:t}){if(!Object.values(Z).includes(e.segments))throw new Error("Invalid segments value");if(!Object.values(y).includes(e.riskLevel))throw new Error("Invalid risk level");let i=pr.getMultipliers(t)[e.riskLevel];if(i===void 0)throw new Error(`No multipliers found for risk level ${e.riskLevel}`);let n=i[e.segments];if(n===void 0)throw new Error(`No multipliers found for segment ${e.segments}`);let a=Or[e.riskLevel];if(a===void 0)throw new Error(`No patterns found for risk level ${e.riskLevel}`);let l=a[e.segments];if(l===void 0)throw new Error(`No patterns found for segment ${e.segments}`);let A=r.getRandomInt({min:0,max:l.length-1}),p=l[A.value];if(p===void 0)throw new Error(`No pattern found for segment ${e.segments} and value ${A.value}`);let c=n[p];if(c===void 0)throw new Error(`No payout found for picked segment ${p}`);return{isFinished:!0,payoutMultiplier:new Le(c),outputs:{result:A.values},randomValues:A}}}export{ht as validateRouletteGameInputs,Ve as validateAdvancedDiceInputs,g as plinkoMultipliers,Ur as diamondsMultipliers,Dr as calculateBaccaratBetAmount,Z as WheelSegments,y as WheelRiskLevel,me as Wheel,mr as VALID_SUITS,Kr as VALID_RANKS,or as VALID_EUROPEAN_STREETS,k as VALID_EUROPEAN_STRAIGHTS,er as VALID_EUROPEAN_SPLITS,cr as VALID_EUROPEAN_DOUBLE_STREETS,nr as VALID_EUROPEAN_CORNERS,ir as VALID_AMERICAN_STREETS,rr as VALID_AMERICAN_STRAIGHTS,tr as VALID_AMERICAN_SPLITS,Ar as VALID_AMERICAN_DOUBLE_STREETS,ar as VALID_AMERICAN_CORNERS,pe as TOP_COLUMN,$ as RouletteType,xe as Roulette,Cr as RollType,ue as RED_NUMBERS,U as RANDOM_MIN_VALUE,P as RANDOM_MAX_VALUE,W as PlinkoRiskLevel,te as Plinko,S as Parity,pt as PLINKO_ROW_COUNTS,Re as PAYOUT_MULTIPLIERS,u as OrigamiGame,Jr as Mines,dr as MIN_WIN_CHANCE,Oe as MIDDLE_COLUMN,sr as MAX_WIN_CHANCE,qr as Limbo,$r as KenoRiskLevel,zr as Keno,I as Half,Br as GameErrorCode,E as GameError,R as Game,lr as EuropeanRoulette,de as EUROPEAN_HOUSE_EDGE,z as EFFECTIVE_RANGE,C as Dozen,Yr as DiceDirection,kr as Dice,Mr as DiamondsResultType,Fr as Diamonds,G as Column,T as Color,yr as BaccaratOutcome,Zr as BaccaratBetType,br as Baccarat,fe as BOTTOM_COLUMN,Be as BLACK_NUMBERS,Rr as AmericanRoulette,Lr as AdvancedDice,se as AMERICAN_HOUSE_EDGE,Er as AMERICAN_BASKET};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@betorigami/game-calculations",
3
- "version": "0.0.0-sha-0f5e855-20251203034813",
3
+ "version": "0.0.0-sha-9faea50-20251204110704",
4
4
  "type": "module",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.mjs",