{"version":3,"mappings":"ggCAAqB,UAAoB,CACrC,MAAMA,EAAU,SAAS,cAAc,MAAM,EAAE,QAC/C,GAAIA,GAAWA,EAAQ,UAAYA,EAAQ,SAAS,eAAe,EAC/D,OAEJ,UAAWC,KAAQ,SAAS,iBAAiB,2BAA2B,EACpEC,EAAeD,CAAI,EAEvB,IAAI,iBAAkBE,GAAc,CAChC,UAAWC,KAAYD,EACnB,GAAIC,EAAS,OAAS,YAGtB,UAAWC,KAAQD,EAAS,WACpBC,EAAK,UAAY,QAAUA,EAAK,MAAQ,iBACxCH,EAAeG,CAAI,CAGvC,CAAK,EAAE,QAAQ,SAAU,CAAE,UAAW,GAAM,QAAS,EAAI,CAAE,EACvD,SAASC,EAAaC,EAAQ,CAC1B,MAAMC,EAAY,GAClB,OAAID,EAAO,YACPC,EAAU,UAAYD,EAAO,WAC7BA,EAAO,iBACPC,EAAU,eAAiBD,EAAO,gBAClCA,EAAO,cAAgB,kBACvBC,EAAU,YAAc,UACnBD,EAAO,cAAgB,YAC5BC,EAAU,YAAc,OAExBA,EAAU,YAAc,cACrBA,CACV,CACD,SAASN,EAAeD,EAAM,CAC1B,GAAIA,EAAK,GAEL,OACJA,EAAK,GAAK,GAEV,MAAMO,EAAYF,EAAaL,CAAI,EACnC,MAAMA,EAAK,KAAMO,CAAS,CAC7B,CACL,KCtBoB,QAClB,OAAO,SAAS,WAAa,aAE3B,OAAO,SAAS,WAAa,SAE7B,OAAO,SAAS,SAAS,MACvB,wDACF,CACJ,EAsHO,SAASC,IAAa,CACvB,kBAAmB,WACrB,UAAU,cAAc,MACrB,KAAMC,GAAiB,CACtBA,EAAa,WAAW,EACzB,EACA,MAAOC,GAAU,CACR,cAAMA,EAAM,OAAO,EAC5B,CAEP,CCvIO,MAAMC,GAAWC,GAAS,gBAAkC,EAEtDC,GACXC,IACI,CACJ,OAAQ,iBACR,iBAAkB,CAACA,CACrB,GAGaC,GAAc,CACzBC,EACAC,IACY,SACZ,MAAMC,GAAgBC,OAAe,iBAAf,cAA+B,OAAO,QAAtC,OAA+C,GAC9D,SAAU,KAAMC,GAAMF,EAAc,QAAQE,CAAC,EAAI,EAAE,CAC5D,EClCaC,GAAgB,CAAC,CAAE,UAA8B,CACxDC,GACFC,GAAQ,KAAK,CACX,QAAS,WACT,OACD,CAEL,EAEaC,GAAuB,CAClCC,EACAC,IACG,CACG,QAAaC,iBAIhB,CAAE,OAAQ,EAAG,eAAgB,EAAG,MAAO,OAAW,EAErDC,oBAAU,IAAM,CACV,MACJ,MAAMC,EAAyB,IAAM,CACnC,GAAI,SAAS,OACXC,EAAa,KAAK,UACb,CACL,GAAI,CAACA,EAAY,OAEjB,MAAMC,GAAiB,KAAK,IAAI,EAAID,GAAc,IAElDE,EAAW,QAAQ,gBAAkBD,EACrCC,EAAW,QAAQ,QAAU,EAEhBF,QACf,GAEO,iCAAiB,mBAAoBD,CAAsB,EAE7D,IAAM,CACF,6BAAoB,mBAAoBA,CAAsB,EACzE,EACC,CAACG,CAAU,CAAC,EAET,QAAqBC,sBAAY,IAAM,CAChCD,UAAQ,MAAQ,KAAK,IAAI,GACnC,CAACA,CAAU,CAAC,EAETE,EAAmBD,sBAAY,IAAM,CACrC,IAACD,EAAW,QAAQ,MAAO,OAE/B,MAAMG,GAAiB,KAAK,MAAQH,EAAW,QAAQ,OAAS,IAC1DI,EAAcD,EAAgBH,EAAW,QAAQ,eAEnDG,EAAgB,GAAKC,EAAc,GAEvCb,GAAQ,MAAME,EAAW,CACvB,GAAGC,EACH,kBAAmBM,EAAW,QAAQ,OACtC,WAAYA,EAAW,QAAQ,eAC/B,WAAYG,EACZ,SAAUC,EACX,CACA,GAACJ,EAAYP,EAAWC,CAAM,CAAC,EAE3B,OAAE,qBAAoB,mBAC/B,EC9DaW,GAAYA,CAAC,CAAEC,UAAoC,IAAM,CACpE,MAAMC,EAASC,KACTC,EAAWC,kBACf,WAAMH,WAAOI,MAAMC,QAAQC,MAAM,EAAE,EAAEC,QAA/BP,cAAsCQ,UAC5C,CAACR,EAAOI,MAAMC,OAAO,CACvB,EAEAhB,2BAAU,IAAM,CACAP,IAAEC,KAAMmB,EAAU,GAC/B,CAACA,CAAQ,CAAC,EAENH,CACT,ECFaU,GAAeC,IAC1BC,GACYC,KACRC,KAAMC,OACNC,QAAUF,GAAe,CACnBD,GAAEC,OAAM,CACd,CACF,GACA,CAAEG,KAAM,OAAQC,QAASC,GAAkB,IAAMC,YAAY,CAAE,CACjE,CACF,EAEaC,GAAgBV,IAC3BC,GACYC,KACRS,MAAO,CACLC,KAAMC,OAAOC,WAAW,8BAA8B,EAAEnB,QACpD,OACA,QACJoB,aAAc,SAChB,EACAC,SAAWL,GAAiB,CACtBT,GAAES,QAAO,CACf,CACF,GACA,CAAEL,KAAM,QAASC,QAASC,GAAkB,IAAMC,YAAY,CAAE,CAClE,CACF,ECtCaQ,GAAc,CAAE,GAAI,KAAM,GAAI,KAAM,GAAI,IAAK,GAAI,IAAK,GAAI,CAAE,EAEnEC,GAAc,SAAS,eAAe,MAAM,EAErCC,GAAqB,CAChC,OAAQ,UACR,OAAQ,UACR,UAAW,UACX,KAAM,UACN,MAAO,UACP,IAAK,UACL,OAAQ,UACR,KAAM,UACN,KAAM,SACR,EAEMC,EAAgB,IAAM,CACpB,QAAcC,EAAM,UAAW,GAAI,EAElC,OACL,GAAI,eAAeC,IACnB,GAAI,eAAeA,IACnB,GAAI,gBAAgBA,IACpB,IAAK,oBAAoBA,IACzB,IAAK,oBAAoBA,IACzB,IAAK,oBAAoBA,IACzB,IAAK,iBAAiBA,IAEtB,KAAM,aAAaD,EAAM,UAAW,GAAI,uBAAuBA,EAC7D,UACA,OAEF,MAAO,aAAaA,EAAM,UAAW,GAAI,uBAAuBA,EAC9D,UACA,OAEF,SAAU,aAAaA,EACrB,UACA,GACF,2BAA2BA,EAAM,UAAW,GAAI,IAChD,OAAQ,wBAAwBA,EAAM,UAAW,GAAI,IAEzD,EAEME,GAAcb,GAAc,SAAW,QACvCc,EAAYD,GAAY,aACxBE,EAAYF,GAAY,KAEjBZ,EAAQe,GAAY,CAC/B,YAAa,CACX,OAAQT,EACV,EACA,WAAY,CACV,WAAY,oBACZ,GAAI,CACF,SAAU,OACV,WAAY,IACZ,aAAc,OACd,OAAQ,CACV,EACA,GAAI,CACF,SAAU,OACV,WAAY,GACd,EACA,GAAI,CACF,SAAU,SACV,WAAY,GACd,EACA,GAAI,CACF,SAAU,SACV,WAAY,GACd,EACA,GAAI,CACF,SAAU,OACV,WAAY,GACd,CACF,EACA,QAAS,CACP,KAAMQ,EACN,QAAS,CACP,KAAMD,EACN,aAAc,SAChB,EACA,UAAW,CACT,KACEC,IAAc,QACVE,EAAQH,EAAW,EAAG,EACtBI,EAAOJ,EAAW,EAAG,CAC7B,EACA,WAAY,CACV,QACEC,IAAc,QACVE,EAAQH,EAAW,GAAI,EACvBI,EAAOJ,EAAW,GAAI,EAC5B,MACEC,IAAc,QAAUE,EAAQH,EAAW,CAAC,EAAII,EAAOJ,EAAW,EAAG,CACzE,EACA,KAAM,CACJ,QAASC,IAAc,QAAU,UAAY,SAC/C,CACF,EACA,OAAQ,CACN,QAAS,CACP,OAAQ,MACV,CACF,EACA,MAAO,CACL,aAAc,EAChB,EACA,WAAY,CACV,UAAW,CACT,eAAgB,CACd,KAAM,CACJ,UAAWL,IAAgB,MAC3B,gBACEK,IAAc,QACVJ,EAAMM,EAAQH,EAAW,EAAG,EAAG,EAAG,EAClCH,EAAMO,EAAOJ,EAAW,EAAG,EAAG,EAAG,EACvC,eAAgB,YAClB,CACF,CACF,EACA,UAAW,CACT,aAAc,CACZ,UAAWN,EACb,CACF,EACA,UAAW,CACT,eAAgB,CACd,KAAM,CACJ,aAAc,IACd,SAAU,SAIZ,EACA,SAAU,CACR,eAAgB,EAChB,gBAAiB,EACjB,iBAAkB,EAClB,kBAAmB,EACnB,SAAU,CACR,eAAgB,EAChB,gBAAiB,EACjB,iBAAkB,EAClB,kBAAmB,CACrB,CAIF,CACF,CACF,EACA,QAAS,CACP,eAAgB,CACd,KAAM,CACJ,UAAWE,IAAgB,KAC3B,aAAc,GACd,gBACEK,IAAc,QACVE,EAAQH,EAAW,CAAC,EACpBI,EAAOJ,EAAW,EAAG,CAC7B,CACF,CACF,EACA,WAAY,CACV,aAAc,CACZ,UAAWN,EACb,CACF,EACA,QAAS,CACP,eAAgB,CACd,KAAM,CACJ,UAAWE,IAAgB,KAC3B,OAAQ,CACV,CACF,CACF,EACA,SAAU,CACR,eAAgB,CACd,KAAM,CACJ,UAAWA,IAAgB,MAC3B,OAAQ,CACV,CACF,EACA,aAAc,CACZ,UAAW,CACb,CACF,EACA,QAAS,CACP,eAAgB,CACd,KAAM,CACJ,OAAQ,CACV,CACF,CACF,EACA,gBAAiB,CACf,eAAgB,CACd,KAAM,CACJ,MAAO,OACT,CACF,CACF,EACA,gBAAiB,CACf,eAAgB,CACd,KAAM,CACJ,aAAc,CAChB,CACF,CACF,EACA,UAAW,CACT,eAAgB,CACd,aAAc,CACZ,MAAOI,CACT,CACF,CACF,EACA,iBAAkB,CAChB,eAAgB,CACd,eAAgB,CACd,YAAaH,EAAMG,EAAW,EAAG,CACnC,CACF,CACF,EACA,UAAW,CACT,eAAgB,CACd,KAAM,CACJ,MAAO,GACP,OAAQ,GACR,QAAS,EACT,QAAS,OACT,WAAY,EACZ,YAAa,CACf,EACA,WAAY,CACV,QAAS,EACT,WAAY,CACV,UAAW,kBACb,EACA,gBAAiB,CACf,UAAW,kBACb,CACF,EACA,MAAO,CACL,MAAO,GACP,OAAQ,GACR,aAAc,CAChB,EACA,MAAO,CACL,aAAc,EAChB,CACF,CACF,CACF,CACF,CAAC,ECxPYK,GAAmBA,IAAM,CACpC,KAAM,CAACC,EAAQC,CAAS,EAAIC,EAA6B,mBAEzDrD,2BAAU,IAAM,CACdkC,OAAOoB,kBAAoB,CACzBC,UAAW,SACXC,SAAU,gBACVC,KAAM,OACNC,WAAY,aACZC,YAAa,iBACb,IAAIR,OAAOS,EAAY,CACrBR,EAAUQ,CAAE,CACd,GAGIlF,QAASmF,SAASC,cAAc,QAAQ,EAE9CpF,EAAOqF,IAAM,wCACbrF,EAAOsF,MAAQ,GAEftF,EAAOuF,OAAS,IAAM,GAEbC,cAAKC,YAAYzF,CAAM,EAE1B0F,QAAQP,SAASC,cAAc,OAAO,EAC5CM,SAAMC,UAAY,4CACTH,cAAKC,YAAYC,CAAK,EAExB,IAAM,CACFE,cAAKC,YAAY7F,CAAM,EAEpC,EAAG,CAAE,KAGF8F,EAAU,CACTC,MAAM,UACNL,MAAO,CACLM,SAAU,WACVC,OAAQ,IACRC,IAAK,MACLC,MAAO,MACPC,gBAAiB9C,EAAM+C,QAAQC,WAAWC,QAC1CC,aAAc,MACdC,QAAShC,GAAUA,EAAS,EAAI,QAAU,MAC5C,EAAEzC,WAGF,OAAK0E,UAAU,eAAc1E,WAC1B2E,GAAK,CACJC,aAAcnC,EACdsB,MAAM,YACNW,UAAU,eACVG,QAASA,IAAM,CACbnC,EAAU3B,MAAS,CACrB,EAAEf,SAEF8E,EAACC,GAAmB,IACf,EACJ,EACK,CAEhB,EClEaC,GAAU,mCAEVC,GAASC,GAAM,OAAO,CACjC,WACA,iBAAkB,CAChB,UAAY9F,GAAW+F,aAAU/F,EAAQ,CAAE,YAAa,QAAS,CACnE,CACF,CAAC,EAED6F,GAAO,aAAa,QAAQ,IAAKG,IAC1B/G,GAAS,QAGd+G,EAAO,QAAU,CACf,cAAe,UAAU/G,GAAS,QAClC,GAAG+G,EAAO,UAGLA,EACR,ECrBY,SAAQC,EAAE,KAAK,CAC1B,oBACA,mBACA,gBACA,cACF,CAAC,EACYC,GAAWD,EAAE,OAAO,CAC/B,IAAKA,EAAE,OAAO,EACd,QAASA,EAAE,OAAO,EAClB,QAASA,EAAE,OAAO,EAClB,MAAOA,EAAE,OAAO,EAChB,UAAWA,EAAE,OAAO,EACpB,SAAUA,EAAE,OAAO,EACnB,MAAOE,EACT,CAAC,EACYC,GAAkBH,EAAE,OAAO,CACtC,IAAKA,EAAE,MAAMA,EAAE,MAAM,CAACA,EAAE,SAAUA,EAAE,OAAO,CAAC,CAAC,CAAC,EAC9C,IAAKA,EAAE,OAAO,EACd,KAAMA,EAAE,OAAO,CACjB,CAAC,EACYI,EAAsBJ,EAChC,OAAO,CAAE,OAAQA,EAAE,MAAMG,EAAe,EAAG,EAC3C,UACUE,GAAWL,EAAE,KAAK,CAAC,KAAM,IAAI,CAAC,EAC9BM,GAAaN,EAAE,OAAO,CACjC,MAAOA,EAAE,OAAO,EAChB,SAAUA,EAAE,OAAO,EAAE,SAAS,EAC9B,WAAYA,EAAE,OAAO,EACrB,UAAWA,EAAE,OAAO,EACpB,KAAMK,GAAS,SAAS,EACxB,MAAOH,GAAM,SAAS,CACxB,CAAC,EACYK,GAAaP,EAAE,OAAO,CAAE,MAAOE,EAAO,GACtCM,GAAOR,EAAE,OAAO,CAAE,IAAKA,EAAE,OAAO,EAAG,KAAMA,EAAE,OAAO,CAAG,GACrDS,GAAkBT,EAAE,OAAO,CACtC,UAAWA,EAAE,OAAO,EACpB,UAAWA,EAAE,OAAO,EACpB,eAAgBA,EAAE,OAAO,CAC3B,CAAC,EACYU,GAAkBV,EAAE,OAAO,CAAE,eAAgBA,EAAE,SAAU,EACzDW,GAAOX,EAAE,KAAK,CAAC,QAAS,OAAQ,OAAQ,SAAS,CAAC,EAClDY,GAAaZ,EAAE,OAAO,CACjC,MAAOA,EAAE,MAAMA,EAAE,QAAQ,EACzB,aAAcA,EAAE,MAAMA,EAAE,MAAM,CAACS,GAAiBC,EAAe,CAAC,CAAC,EACjE,MAAOV,EAAE,MAAMM,EAAU,EACzB,KAAMK,GAAK,SAAS,EACpB,KAAMX,EAAE,OAAO,CACjB,CAAC,EACYa,GAAeb,EAAE,OAAO,CACnC,KAAMQ,GACN,cAAeR,EAAE,MAAMA,EAAE,QAAQ,EACjC,eAAgBA,EAAE,MAAMA,EAAE,QAAQ,EAClC,eAAgBA,EAAE,OAAO,CAC3B,CAAC,EACYc,GAAad,EAAE,OAAO,CACjC,MAAOA,EAAE,MAAMA,EAAE,QAAQ,EACzB,aAAcA,EAAE,MAAMA,EAAE,MAAM,CAACS,GAAiBC,EAAe,CAAC,CAAC,EACjE,MAAOV,EAAE,MAAMM,EAAU,EACzB,KAAMK,GAAK,SAAS,CACtB,CAAC,EACYI,EAAef,EAAE,OAAO,CACnC,IAAKA,EAAE,OAAO,EACd,KAAMQ,GACN,KAAMR,EAAE,OAAO,CACjB,CAAC,EACYgB,GAAwBhB,EAAE,OAAO,CAAE,KAAMA,EAAE,SAAU,EACrDiB,EAAiBjB,EAAE,OAAO,CACrC,IAAKA,EAAE,OAAO,EACd,KAAMA,EAAE,OAAO,EACf,KAAMgB,GACN,yBAA0BhB,EAAE,OAAO,CACrC,CAAC,EACYkB,GAAclB,EAAE,KAAK,CAChC,UACA,sBACA,YACA,WACA,YACA,WACA,kBACA,WACA,OACF,CAAC,EACYmB,GAAcnB,EAAE,KAAK,CAChC,UACA,aACA,SACA,aACA,WACA,OACF,CAAC,EACYoB,GAAYpB,EAAE,KAAK,CAAC,UAAU,CAAC,EAC/BqB,GAAoBrB,EAAE,OAAO,CACxC,aAAcA,EAAE,OAAO,EACvB,WAAYA,EAAE,OAAO,CACvB,CAAC,EACYsB,GAAiBtB,EAAE,OAAO,CACrC,UAAWA,EAAE,MAAM,CAACe,EAAcE,CAAc,CAAC,EACjD,UAAWjB,EAAE,MAAM,CAACe,EAAcE,CAAc,CAAC,EACjD,WAAYjB,EAAE,OAAO,EACrB,qBAAsBA,EAAE,OAAO,EAAE,SAAS,EAC1C,SAAUA,EAAE,OAAO,EACnB,SAAUA,EAAE,OAAS,QAAM,SAAS,EACpC,OAAQkB,GACR,UAAWlB,EAAE,QAAQ,EACrB,eAAgBA,EAAE,OAAO,EACzB,iBAAkBA,EAAE,OAAO,EAAE,SAAS,EACtC,oBAAqBA,EAAE,OAAO,EAAE,SAAS,EACzC,qBAAsBA,EAAE,MAAMA,EAAE,MAAMA,EAAE,QAAQ,CAAC,CAAC,EAAE,SAAS,EAC7D,WAAYA,EAAE,OAAO,EAAE,SAAS,EAChC,yBAA0BA,EAAE,OAAO,EAAE,SAAS,EAC9C,SAAUA,EAAE,QAAQ,EACpB,gBAAiBA,EAAE,OAAO,EAAE,SAAS,EACrC,yBAA0BA,EAAE,OAAO,EAAE,SAAS,EAC9C,0BAA2BA,EAAE,OAAO,EAAE,SAAS,EAC/C,qBAAsBA,EAAE,OAAO,EAAE,SAAS,EAC1C,sBAAuBA,EAAE,OAAO,EAAE,SAAS,EAC3C,0BAA2BA,EAAE,OAAO,EAAE,SAAS,EAC/C,2BAA4BA,EAAE,OAAO,EAAE,SAAS,EAChD,6BAA8BA,EAAE,OAAO,EAAE,SAAS,EAClD,yBAA0BA,EAAE,OAAO,EAAE,SAAS,EAC9C,iBAAkBA,EAAE,OAAS,QAAM,SAAS,EAC5C,iBAAkBA,EAAE,OAAS,QAAM,SAAS,EAC5C,WAAYA,EAAE,MAAMA,EAAE,OAAO,CAAC,EAAE,SAAS,EACzC,WAAYA,EAAE,MAAMA,EAAE,OAAO,CAAC,EAAE,SAAS,EACzC,WAAYA,EAAE,OAAO,EAAE,SAAS,EAChC,IAAKA,EAAE,MAAMA,EAAE,OAAO,CAAC,EAAE,SAAS,EAClC,yBAA0BA,EAAE,QAAQ,EAAE,SAAS,EAC/C,WAAYA,EAAE,OAAS,QAAM,SAAS,EACtC,aAAcmB,GAAY,SAAS,EACnC,0BAA2BnB,EAAE,OAAO,EAAE,SAAS,EAC/C,gBAAiBA,EAAE,OAAO,EAAE,SAAS,EACrC,WAAYoB,GAAU,SAAS,EAC/B,QAASpB,EAAE,QAAQ,EAAE,SAAS,EAC9B,WAAYA,EAAE,OAAO,EACrB,WAAYA,EAAE,MAAMA,EAAE,QAAQ,EAC9B,UAAWA,EAAE,OAAO,EACpB,SAAUA,EAAE,QAAQ,EAAE,SAAS,EAC/B,iBAAkBA,EAAE,OAAO,EAAE,SAAS,EACtC,kBAAmBA,EAAE,OAAO,EAAE,SAAS,EACvC,mBAAoBA,EAAE,OAAO,EAAE,SAAS,EACxC,uBAAwBA,EAAE,OAAO,EAAE,SAAS,EAC5C,wBAAyBA,EAAE,OAAO,EAAE,SAAS,EAC7C,KAAMA,EAAE,QAAQ,EAAE,SAAS,EAC3B,oBAAqBqB,GAAkB,SAAS,EAChD,kBAAmBrB,EAAE,OAAO,EAAE,SAAS,EACvC,IAAKA,EAAE,OAAO,EACd,UAAWA,EAAE,OAAO,EAAE,SAAS,EAC/B,OAAQA,EAAE,OAAO,EAAE,SAAS,CAC9B,CAAC,EACYuB,GAAcvB,EAAE,OAAO,CAClC,UAAWA,EAAE,MAAM,CAACe,EAAcE,CAAc,CAAC,EACjD,UAAWjB,EAAE,MAAM,CAACe,EAAcE,CAAc,CAAC,EACjD,KAAMjB,EAAE,SAAS,SAAS,EAAE,QAAQ,IAAI,EACxC,SAAUA,EAAE,SAAS,SAAS,EAAE,QAAQ,KAAK,EAC7C,QAASA,EAAE,UAAU,SAAS,EAAE,QAAQ,EAAI,EAC5C,oBAAqBA,EAAE,OAAO,EAC9B,WAAYA,EAAE,OAAO,EACrB,kBAAmBA,EAAE,OAAO,EAAE,SAAS,EACvC,wBAAyBA,EAAE,OAAO,EAAE,SAAS,EAC7C,sBAAuBA,EAAE,OAAO,EAAE,SAAS,EAC3C,SAAUA,EAAE,SAAS,IAAM,WAAW,UAAQ,GAAG,EACjD,KAAMA,EAAE,QAAQ,EAAE,SAAS,EAC3B,aAAcA,EAAE,QAAQ,EAAE,SAAS,EACnC,kBAAmBA,EAAE,OAAO,EAAE,SAAS,CACzC,CAAC,EACYwB,EAAQxB,EAAE,OAAO,CAC5B,UAAWA,EAAE,MAAM,CAACe,EAAcE,CAAc,CAAC,EACjD,UAAWjB,EAAE,MAAM,CAACe,EAAcE,CAAc,CAAC,EACjD,WAAYjB,EAAE,OAAO,EACrB,qBAAsBA,EAAE,OAAO,EAAE,SAAS,EAC1C,SAAUA,EAAE,OAAO,EACnB,SAAUA,EAAE,OAAS,QAAM,SAAS,EACpC,OAAQkB,GACR,UAAWlB,EAAE,QAAQ,EACrB,eAAgBA,EAAE,OAAO,EACzB,iBAAkBA,EAAE,OAAO,EAAE,SAAS,EACtC,oBAAqBA,EAAE,OAAO,EAAE,SAAS,EACzC,qBAAsBA,EAAE,MAAMA,EAAE,MAAMA,EAAE,QAAQ,CAAC,CAAC,EAAE,SAAS,EAC7D,WAAYA,EAAE,OAAO,EAAE,SAAS,EAChC,yBAA0BA,EAAE,OAAO,EAAE,SAAS,EAC9C,SAAUA,EAAE,QAAQ,EACpB,gBAAiBA,EAAE,OAAO,EAAE,SAAS,EACrC,yBAA0BA,EAAE,OAAO,EAAE,SAAS,EAC9C,0BAA2BA,EAAE,OAAO,EAAE,SAAS,EAC/C,qBAAsBA,EAAE,OAAO,EAAE,SAAS,EAC1C,sBAAuBA,EAAE,OAAO,EAAE,SAAS,EAC3C,0BAA2BA,EAAE,OAAO,EAAE,SAAS,EAC/C,2BAA4BA,EAAE,OAAO,EAAE,SAAS,EAChD,6BAA8BA,EAAE,OAAO,EAAE,SAAS,EAClD,yBAA0BA,EAAE,OAAO,EAAE,SAAS,EAC9C,iBAAkBA,EAAE,OAAS,QAAM,SAAS,EAC5C,iBAAkBA,EAAE,OAAS,QAAM,SAAS,EAC5C,WAAYA,EAAE,MAAMA,EAAE,OAAO,CAAC,EAAE,SAAS,EACzC,WAAYA,EAAE,MAAMA,EAAE,OAAO,CAAC,EAAE,SAAS,EACzC,WAAYA,EAAE,OAAO,EAAE,SAAS,EAChC,IAAKA,EAAE,MAAMA,EAAE,OAAO,CAAC,EAAE,SAAS,EAClC,yBAA0BA,EAAE,QAAQ,EAAE,SAAS,EAC/C,WAAYA,EAAE,OAAS,QAAM,SAAS,EACtC,aAAcmB,GAAY,SAAS,EACnC,0BAA2BnB,EAAE,OAAO,EAAE,SAAS,EAC/C,gBAAiBA,EAAE,OAAO,EAAE,SAAS,EACrC,WAAYoB,GAAU,SAAS,EAC/B,QAASpB,EAAE,QAAQ,EAAE,SAAS,EAC9B,WAAYA,EAAE,OAAO,EACrB,WAAYA,EAAE,MAAMA,EAAE,QAAQ,EAC9B,UAAWA,EAAE,OAAO,EACpB,SAAUA,EAAE,QAAQ,EAAE,SAAS,EAC/B,iBAAkBA,EAAE,OAAO,EAAE,SAAS,EACtC,kBAAmBA,EAAE,OAAO,EAAE,SAAS,EACvC,mBAAoBA,EAAE,OAAO,EAAE,SAAS,EACxC,uBAAwBA,EAAE,OAAO,EAAE,SAAS,EAC5C,wBAAyBA,EAAE,OAAO,EAAE,SAAS,EAC7C,KAAMA,EAAE,QAAQ,EAAE,SAAS,EAC3B,oBAAqBqB,GAAkB,SAAS,EAChD,kBAAmBrB,EAAE,OAAO,EAAE,SAAS,EACvC,IAAKA,EAAE,OAAO,CAChB,CAAC,EACYyB,GAAczB,EACxB,OAAO,CACN,iBAAkBA,EAAE,OAAO,EAAE,IAAI,EACjC,iBAAkBA,EAAE,OAAO,EAAE,IAAI,EACjC,WAAYA,EAAE,MAAMA,EAAE,QAAQ,EAC9B,WAAYA,EAAE,MAAMA,EAAE,QAAQ,CAChC,CAAC,EACA,QAAQ,EACE0B,GAAiB1B,EAC3B,OAAO,CAAE,UAAWA,EAAE,SAAU,aAAcA,EAAE,OAAS,EAAC,EAC1D,QAAQ,EACE2B,GAAmB3B,EAAE,OAAO,CACvC,WAAYA,EAAE,OAAO,EACrB,SAAUA,EAAE,OAAO,EAAE,IAAI,EACzB,oBAAqBA,EAAE,OAAO,EAC9B,SAAUA,EAAE,OAAO,EACnB,gBAAiB0B,GAAe,SAAS,CAC3C,CAAC,EACYE,GAAmD5B,EAAE,OAAO,CACvE,MAAOA,EAAE,MAAMA,EAAE,WAAW,IAAI,CAAC,CACnC,CAAC,EAC+BA,EAAE,OAAO,CAAE,UAAWA,EAAE,SAAU,EACrD,SAAmBA,EAAE,OAAO,CACvC,UAAWA,EAAE,MAAM,CAACe,EAAcE,CAAc,CAAC,EACjD,UAAWjB,EAAE,MAAM,CAACe,EAAcE,CAAc,CAAC,EACjD,WAAYjB,EAAE,OAAO,EACrB,OAAQA,EAAE,QAAQ,EAAE,SAAS,EAC7B,aAAcA,EAAE,UAAU,SAAS,EAAE,QAAQ,EAAI,EACjD,UAAWA,EAAE,OAAO,EAAE,SAAS,CACjC,CAAC,EACY6B,GAAY7B,EACtB,OAAO,CACN,eAAgBA,EAAE,OAAO,EACzB,cAAeA,EAAE,OAAO,EACxB,eAAgBA,EAAE,OAAO,EACzB,gBAAiBA,EAAE,OAAO,EAC1B,UAAWA,EAAE,OAAO,EACpB,WAAYA,EAAE,OAAO,CACvB,CAAC,EACA,QAAQ,EACE8B,GAAe9B,EAAE,OAAO,CACnC,UAAWA,EAAE,OAAO,EACpB,eAAgBA,EAAE,OAAO,EACzB,eAAgBA,EAAE,OAAO,EACzB,aAAcA,EAAE,OAAO,EACvB,SAAUA,EAAE,OAAO,EACnB,IAAKA,EAAE,OAAO,EACd,IAAKA,EAAE,OAAO,EACd,IAAKA,EAAE,OAAO,CAChB,CAAC,EACY+B,GAAuB/B,EAAE,OAAO,CAC3C,KAAMA,EAAE,OAAO,EACf,KAAMgB,GACN,yBAA0BhB,EAAE,OAAO,CACrC,CAAC,EACYgC,GAAqBhC,EAAE,OAAO,CAAE,KAAMQ,GAAM,KAAMR,EAAE,OAAO,EAAG,EAC9DiC,GAAajC,EAAE,KAAK,CAAC,KAAM,OAAQ,IAAI,CAAC,EACxCkC,GAAclC,EACxB,OAAO,CACN,UAAWA,EAAE,OAAO,EACpB,UAAWA,EAAE,OAAO,EACpB,YAAaA,EAAE,QAAQ,EACvB,aAAcA,EAAE,QAAQ,EACxB,SAAUA,EAAE,OAAO,EACnB,SAAUA,EAAE,OAAO,EACnB,QAASA,EAAE,OAAO,EAClB,SAAUA,EAAE,OAAO,EACnB,aAAcA,EAAE,OAAO,EACvB,UAAWA,EAAE,OAAO,EACpB,SAAUA,EAAE,OAAO,EACnB,YAAaA,EAAE,OAAO,EACtB,cAAeA,EAAE,OAAO,CAC1B,CAAC,EACA,QAAQ,EACEmC,GAA0BnC,EAAE,OAAO,CAC9C,IAAKA,EAAE,OAAO,EACd,QAASA,EAAE,OAAO,EAClB,KAAMA,EAAE,OAAO,EACf,cAAeA,EAAE,QAAQ,EACzB,YAAaiC,GAAW,WAAW,QAAQ,IAAI,EAC/C,UAAWjC,EAAE,UAAU,SAAS,EAAE,QAAQ,EAAI,EAC9C,UAAWA,EAAE,OAAO,EACpB,UAAWA,EAAE,OAAO,EAAE,SAAS,EAC/B,aAAckC,GAAY,SAAS,CACrC,CAAC,EACYE,GAAqBpC,EAAE,OAAO,CACzC,IAAKA,EAAE,OAAO,EACd,QAASA,EAAE,OAAO,EAClB,KAAMA,EAAE,OAAO,EACf,cAAeA,EAAE,QAAQ,EACzB,YAAaiC,GAAW,WAAW,QAAQ,IAAI,EAC/C,UAAWjC,EAAE,UAAU,SAAS,EAAE,QAAQ,EAAI,EAC9C,UAAWA,EAAE,OAAO,EACpB,aAAckC,GAAY,SAAS,CACrC,CAAC,EACYG,GAAgBrC,EAAE,OAAO,CACpC,IAAKA,EAAE,OAAO,EACd,IAAKA,EAAE,MAAMA,EAAE,MAAMA,EAAE,SAAS,CAAC,EACjC,KAAMA,EAAE,OAAO,EACf,oBAAqBA,EAAE,OAAO,CAChC,CAAC,EACYsC,GAAatC,EAAE,OAAO,CACjC,UAAWA,EAAE,OAAO,EACpB,KAAMA,EAAE,OAAO,EACf,MAAOA,EAAE,OAAO,CAClB,CAAC,EACYuC,GAAYvC,EAAE,OAAO,CAChC,KAAMA,EAAE,OAAO,EACf,uBAAwBA,EAAE,OAAO,EAAE,IAAI,EACvC,sBAAuBA,EAAE,OAAO,EAAE,IAAI,EACtC,OAAQA,EAAE,OAAO,EAAE,SAAS,EAC5B,MAAOA,EAAE,OAAO,EAAE,SAAS,CAC7B,CAAC,EACYwC,GAAaxC,EAAE,OAAO,CACjC,MAAOuC,GACP,EAAGvC,EAAE,OAAO,EAAE,IAAI,EAClB,EAAGA,EAAE,OAAO,EAAE,IAAI,EAClB,MAAOA,EAAE,OAAO,EAAE,IAAI,EACtB,OAAQA,EAAE,OAAO,EAAE,IAAI,EACvB,MAAOA,EAAE,OAAO,EAAE,SAAS,CAC7B,CAAC,EACYyC,GAAQzC,EAAE,OAAO,CAC5B,KAAMA,EAAE,OAAO,EACf,aAAcA,EAAE,MAAMwC,EAAU,EAChC,QAASxC,EAAE,OAAO,EAClB,IAAKA,EAAE,OAAO,CAChB,CAAC,EACY0C,GAAc1C,EAAE,OAAO,CAClC,KAAMA,EAAE,OAAO,EACf,aAAcA,EAAE,MAAMwC,EAAU,CAClC,CAAC,EACYG,GAAQ3C,EAAE,OAAO,CAC5B,SAAUA,EAAE,OAAO,EACnB,cAAeA,EAAE,OAAO,EAAE,IAAI,EAC9B,KAAMuC,GACN,eAAgBvC,EAAE,OAAO,EAAE,IAAI,EAC/B,cAAeA,EAAE,OAAO,EAAE,IAAI,EAC9B,KAAMA,EAAE,OAAO,EAAE,SAAS,EAC1B,WAAYA,EAAE,OAAO,EAAE,SAAS,EAChC,MAAOA,EAAE,OAAO,EAAE,SAAS,EAC3B,IAAKA,EAAE,OAAO,CAChB,CAAC,EACY4C,GAAc5C,EAAE,OAAO,CAClC,SAAUA,EAAE,OAAO,EACnB,cAAeA,EAAE,OAAO,EAAE,IAAI,EAC9B,KAAMuC,GACN,eAAgBvC,EAAE,OAAO,EAAE,IAAI,EAC/B,cAAeA,EAAE,OAAO,EAAE,IAAI,EAC9B,KAAMA,EAAE,OAAO,EAAE,SAAS,EAC1B,MAAOA,EAAE,OAAO,EAAE,SAAS,EAC3B,aAAcA,EAAE,OAAO,CAAE,GAAE,UAAU,SAAS,CAChD,CAAC,EACY6C,GAAW7C,EAAE,OAAO,CAC/B,OAAQA,EAAE,QAAQ,EAAE,SAAS,EAC7B,KAAMA,EAAE,OAAO,EACf,UAAWA,EAAE,MAAMA,EAAE,QAAQ,EAC7B,gBAAiBA,EAAE,OAAO,EAC1B,IAAKA,EAAE,OAAO,CAChB,CAAC,EAC6BA,EAAE,OAAO,CAAE,KAAMA,EAAE,SAAU,EAC9C,SAAeA,EAAE,OAAO,CACnC,IAAKA,EAAE,OAAO,EACd,OAAQA,EAAE,QAAQ,EAAE,SAAS,EAC7B,KAAMA,EAAE,OAAO,EACf,WAAYA,EAAE,OAAO,EAAE,IAAI,EAC3B,UAAWA,EAAE,MAAMA,EAAE,QAAQ,EAC7B,gBAAiBA,EAAE,OAAO,CAC5B,CAAC,EACY8C,GAAiB9C,EAAE,OAAO,CACrC,SAAUA,EAAE,OAAO,EACnB,cAAeA,EAAE,OAAO,EAAE,IAAI,EAC9B,KAAMuC,GACN,eAAgBvC,EAAE,OAAO,EAAE,IAAI,EAC/B,cAAeA,EAAE,OAAO,EAAE,IAAI,EAC9B,KAAMA,EAAE,OAAO,EAAE,SAAS,EAC1B,WAAYA,EAAE,OAAO,EAAE,SAAS,EAChC,MAAOA,EAAE,OAAO,EAAE,SAAS,EAC3B,IAAKA,EAAE,OAAO,EACd,MAAOwB,CACT,CAAC,EACYuB,GAAqB/C,EAAE,OAAO,CACzC,IAAKA,EAAE,OAAO,EACd,KAAMA,EAAE,OAAO,EACf,OAAQA,EAAE,MAAM8C,EAAc,EAC9B,gBAAiB9C,EAAE,OAAO,CAC5B,CAAC,EACYgD,GAAiBhD,EAC3B,OAAO,CACN,KAAMA,EAAE,OAAO,EACf,OAAQA,EAAE,QAAQ,EAClB,UAAWA,EAAE,MAAMA,EAAE,QAAQ,CAC/B,CAAC,EACA,QAAQ,EACkBA,EAAE,OAAO,CAAE,SAAUA,EAAE,SAAU,EACjD,SAAWA,EAAE,KAAK,CAC7B,OACA,eACA,MACA,YACA,SACA,aACA,aACA,aACA,MACF,CAAC,EACYiD,GAAQjD,EAAE,KAAK,CAC1B,MACA,OACA,QACA,SACA,SACA,QACA,OACF,CAAC,EACYkD,GAAelD,EAAE,OAAO,CACnC,KAAMmD,GACN,OAAQnD,EAAE,MAAMA,EAAE,MAAMA,EAAE,QAAQ,CAAC,EACnC,MAAOiD,GACP,SAAUjD,EAAE,QAAQ,EAAE,SAAS,EAC/B,KAAMA,EAAE,OAAO,EAAE,SAAS,EAC1B,SAAUA,EAAE,OAAO,EAAE,SAAS,EAC9B,MAAOA,EAAE,OAAO,EAAE,SAAS,CAC7B,CAAC,EACYoD,GAAgBpD,EAAE,OAAO,CACpC,SAAUA,EAAE,OAAO,EACnB,YAAaA,EAAE,OAAO,EACtB,MAAOA,EAAE,OAAO,EAAE,IAAI,EACtB,OAAQA,EAAE,MAAMkD,EAAY,CAC9B,CAAC,EACYG,GAAUrD,EAAE,OAAO,CAC9B,IAAKA,EAAE,OAAO,EACd,SAAUA,EAAE,OAAO,EACnB,YAAaA,EAAE,OAAO,EACtB,MAAOA,EAAE,OAAO,EAAE,IAAI,EACtB,OAAQA,EAAE,MAAMkD,EAAY,CAC9B,CAAC,EACYI,GAAStD,EAAE,OAAO,CAC7B,IAAKA,EAAE,OAAO,EACd,KAAMA,EAAE,OAAO,EACf,MAAOA,EAAE,MAAMe,CAAY,EAC3B,mBAAoBf,EAAE,QAAQ,EAAE,SAAS,CAC3C,CAAC,EACYuD,GAAcvD,EAAE,OAAO,CAClC,GAAIA,EAAE,OAAO,EAAE,IAAI,EACnB,cAAeA,EAAE,OAAS,QAAM,SAAS,EACzC,aAAcA,EAAE,MAAMA,EAAE,QAAQ,EAChC,WAAYA,EAAE,OAAO,CACvB,CAAC,EACYwD,GAAkBxD,EAAE,OAAO,CACtC,IAAKA,EAAE,OAAO,EACd,SAAUA,EAAE,OAAO,EACnB,MAAOA,EAAE,OAAO,EAAE,IAAI,EACtB,MAAOA,EAAE,OAAO,EAAE,IAAI,EACtB,KAAMA,EAAE,OAAO,EAAE,IAAI,EACrB,cAAeA,EAAE,MAAMuD,EAAW,CACpC,CAAC,EACYE,GAAkBzD,EAAE,OAAO,CACtC,SAAUA,EAAE,OAAO,EAAE,IAAI,EACzB,UAAWA,EAAE,OAAO,CACtB,CAAC,EACY0D,GAAc1D,EAAE,OAAO,CAClC,IAAKA,EAAE,OAAO,EACd,SAAUA,EAAE,OAAO,EACnB,QAASA,EAAE,OAAO,EAClB,QAASA,EAAE,OAAO,EAAE,IAAI,EACxB,yBAA0BA,EAAE,MAAMyD,EAAe,CACnD,CAAC,EACYE,GAAoB3D,EAAE,OAAO,CACxC,SAAUA,EAAE,OAAO,EACnB,QAASA,EAAE,OAAO,EAClB,QAASA,EAAE,OAAO,EAAE,IAAI,EACxB,yBAA0BA,EAAE,MAAMyD,EAAe,CACnD,CAAC,EACYG,GAA0B5D,EAAE,OAAO,CAC9C,OAAQA,EAAE,KAAK,CAAC,sBAAsB,CAAC,CACzC,CAAC,EACkCA,EAChC,OAAO,CAAE,aAAcA,EAAE,OAAO,EAAG,EACnC,QAAQ,EACE,SAAWA,EAAE,KAAK,CAAC,UAAW,WAAY,UAAW,YAAY,CAAC,EAClE6D,EAAS7D,EAAE,OAAO,CAC7B,UAAWA,EAAE,OAAO,EAAE,SAAS,EAC/B,UAAWA,EAAE,OAAO,EAAE,SAAS,EAC/B,KAAMA,EAAE,OAAO,EACf,SAAU8D,GACV,MAAO9D,EAAE,MAAMe,CAAY,EAC3B,WAAYf,EAAE,MAAMA,EAAE,QAAQ,EAC9B,IAAKA,EAAE,OAAO,CAChB,CAAC,EACY+D,GAAM/D,EAAE,OAAO,CAC1B,MAAOA,EAAE,OAAO,EAAE,IAAI,EACtB,IAAKA,EAAE,OAAS,QAAM,SAAS,EAC/B,UAAWA,EAAE,OAAO,EAAE,SAAS,EAC/B,UAAWA,EAAE,OAAO,EAAE,SAAS,EAC/B,UAAWA,EAAE,OAAO,EAAE,SAAS,EAC/B,SAAUA,EAAE,OAAO,EAAE,SAAS,EAC9B,IAAKA,EAAE,MAAMA,EAAE,MAAMA,EAAE,SAAS,CAAC,CACnC,CAAC,EACYgE,GAAchE,EAAE,OAAO,CAClC,IAAKA,EAAE,OAAO,EACd,QAASA,EAAE,OAAO,EAClB,SAAUA,EAAE,OAAO,EACnB,OAAQ6D,EACR,UAAW7D,EAAE,OAAO,EACpB,aAAcA,EAAE,OAAO,EACvB,SAAUA,EAAE,OAAO,EACnB,aAAcA,EAAE,OAAO,EAAE,SAAS,EAClC,KAAMA,EAAE,MAAM,CAACA,EAAE,MAAM+D,EAAG,EAAG/D,EAAE,OAAO,CAAC,CAAC,EACxC,eAAgBA,EAAE,MAAMA,EAAE,MAAMA,EAAE,QAAQ,CAAC,EAC3C,QAASA,EAAE,MAAMA,EAAE,MAAMA,EAAE,OAAO,CAAC,CAAC,EAAE,SAAS,CACjD,CAAC,EACYiE,GAAejE,EAAE,OAAO,CACnC,UAAWA,EAAE,OAAO,EAAE,SAAS,EAC/B,UAAWA,EAAE,OAAO,EAAE,SAAS,EAC/B,KAAMA,EAAE,OAAO,EACf,SAAU8D,GACV,MAAO9D,EAAE,MAAMe,CAAY,EAC3B,IAAKf,EAAE,OAAO,CAChB,CAAC,EACYkE,GAAelE,EAAE,OAAO,CACnC,UAAWA,EAAE,OAAO,EAAE,SAAS,EAC/B,UAAWA,EAAE,OAAO,EAAE,SAAS,EAC/B,KAAMA,EAAE,OAAO,EACf,SAAU8D,GACV,MAAO9D,EAAE,MAAMe,CAAY,CAC7B,CAAC,EACYoD,GAAenE,EAAE,OAAO,CACnC,WAAYA,EAAE,OAAO,EACrB,SAAUA,EAAE,MAAMA,EAAE,QAAQ,EAC5B,UAAWA,EAAE,SAAS,SAAS,EAAE,QAAQ,qBAAqB,EAC9D,QAASA,EAAE,SAAS,SAAS,EAAE,QAAQ,qBAAqB,EAC5D,YAAaA,EAAE,QAAQ,EAAE,SAAS,CACpC,CAAC,EACYoE,GAAmBpE,EAAE,OAAO,CACvC,yBAA0BA,EAAE,MAAMA,EAAE,QAAQ,CAC9C,CAAC,EACYqE,GAAarE,EAAE,KAAK,CAAC,QAAS,SAAS,CAAC,EACxCsE,GAAyBtE,EAAE,OAAO,CAC7C,YAAaqE,GACb,aAAcrE,EAAE,OAAO,CACzB,CAAC,EACYuE,GAAWvE,EAAE,KAAK,CAAC,OAAQ,QAAS,OAAQ,WAAY,SAAS,CAAC,EAClEwE,GAAiBxE,EAAE,KAAK,CACnC,UACA,aACA,WACA,OACF,CAAC,EACYyE,GAAmBzE,EAAE,OAAO,CACvC,IAAKA,EAAE,OAAO,EACd,SAAUA,EAAE,OAAO,EAAE,SAAS,EAC9B,YAAaA,EAAE,OAAO,EACtB,KAAMA,EAAE,OAAO,EACf,SAAUuE,GAAS,WAAW,QAAQ,UAAU,EAChD,QAASvE,EAAE,MAAMA,EAAE,MAAMA,EAAE,QAAQ,CAAC,CAAC,EAAE,SAAS,EAChD,QAASA,EAAE,OAAO,EAClB,KAAMA,EAAE,OAAO,EACf,WAAYA,EAAE,OAAO,EACrB,gBAAiBA,EAAE,OAAO,EAAE,SAAS,EACrC,OAAQwE,GACR,SAAUxE,EAAE,OAAO,EAAE,SAAS,EAC9B,UAAWA,EAAE,OAAO,EAAE,SAAS,EAC/B,aAAcA,EAAE,OAAO,EAAE,SAAS,CACpC,CAAC,EACY0E,GAAiB1E,EAAE,OAAO,CACrC,SAAUA,EAAE,OAAO,EAAE,SAAS,EAC9B,YAAaA,EAAE,OAAO,EACtB,KAAMA,EAAE,OAAO,EACf,SAAUuE,GAAS,WAAW,QAAQ,UAAU,EAChD,QAASvE,EAAE,MAAMA,EAAE,MAAMA,EAAE,QAAQ,CAAC,CAAC,EAAE,SAAS,CAClD,CAAC,EACY2E,GAAW3E,EAAE,OAAO,CAC/B,IAAKA,EAAE,OAAO,EACd,SAAUA,EAAE,OAAO,EAAE,SAAS,EAC9B,YAAaA,EAAE,OAAO,EACtB,KAAMA,EAAE,OAAO,EACf,SAAUuE,GAAS,WAAW,QAAQ,UAAU,EAChD,QAASvE,EAAE,MAAMA,EAAE,MAAMA,EAAE,QAAQ,CAAC,CAAC,EAAE,SAAS,EAChD,QAASA,EAAE,OAAO,EAClB,KAAMA,EAAE,OAAO,EACf,WAAYA,EAAE,OAAO,EACrB,gBAAiBA,EAAE,OAAO,EAAE,SAAS,EACrC,OAAQwE,GACR,SAAUxE,EAAE,OAAO,EAAE,SAAS,EAC9B,UAAWA,EAAE,OAAO,EAAE,SAAS,CACjC,CAAC,EAC6BA,EAAE,OAAO,CAAE,aAAcA,EAAE,UAAW,EAC9CA,EAAE,OAAO,CAC7B,MAAOA,EAAE,OAAO,EAAE,IAAI,EACtB,EAAGA,EAAE,OAAO,EACZ,EAAGA,EAAE,OAAO,CACd,CAAC,EACwBA,EAAE,KAAK,CAC9B,WACA,YACA,OACA,QACA,YACA,YACF,CAAC,EAEM,MAAM4E,GAAYC,GAAQ,CAC/B,CACE,OAAQ,MACR,KAAM,UACN,MAAO,wBACP,cAAe,OACf,WAAY,CACV,CACE,KAAM,uBACN,KAAM,QACN,OAAQ7E,EAAE,QAAQ,EAAE,SAAS,CAC/B,CACF,EACA,SAAUA,EAAE,MAAMyC,EAAK,EACvB,OAAQ,CACN,CACE,OAAQ,IACR,YAAa,mBACb,OAAQrC,CACV,CACF,CACF,EACA,CACE,OAAQ,OACR,KAAM,UACN,MAAO,yBACP,cAAe,OACf,WAAY,CACV,CACE,KAAM,OACN,KAAM,OACN,OAAQsC,EACV,CACF,EACA,SAAUD,GACV,OAAQ,CACN,CACE,OAAQ,IACR,YAAa,mBACb,OAAQrC,CACV,CACF,CACF,EACA,CACE,OAAQ,MACR,KAAM,oBACN,MAAO,sCACP,cAAe,OACf,WAAY,CACV,CACE,KAAM,OACN,KAAM,OACN,OAAQqC,EACV,EACA,CACE,KAAM,WACN,KAAM,OACN,OAAQzC,EAAE,OAAO,CACnB,CACF,EACA,SAAUyC,GACV,OAAQ,CACN,CACE,OAAQ,IACR,YAAa,mBACb,OAAQrC,CACV,CACF,CACF,EACA,CACE,OAAQ,SACR,KAAM,oBACN,MAAO,wCACP,cAAe,OACf,WAAY,CACV,CACE,KAAM,WACN,KAAM,OACN,OAAQJ,EAAE,OAAO,CACnB,CACF,EACA,SAAUA,EAAE,OAAO,CAAE,GAAE,QAAQ,EAC/B,OAAQ,CACN,CACE,OAAQ,IACR,YAAa,mBACb,OAAQI,CACV,CACF,CACF,EACA,CACE,OAAQ,MACR,KAAM,SACN,MAAO,sBACP,cAAe,OACf,SAAUJ,EAAE,MAAMQ,EAAI,CACxB,EACA,CACE,OAAQ,OACR,KAAM,SACN,MAAO,yBACP,cAAe,OACf,WAAY,CACV,CACE,KAAM,OACN,KAAM,OACN,OAAQI,EACV,CACF,EACA,SAAUC,GACV,OAAQ,CACN,CACE,OAAQ,IACR,YAAa,mBACb,OAAQT,CACV,CACF,CACF,EACA,CACE,OAAQ,QACR,KAAM,kBACN,MAAO,6CACP,cAAe,OACf,WAAY,CACV,CACE,KAAM,OACN,KAAM,OACN,OAAQU,EACV,EACA,CACE,KAAM,UACN,KAAM,OACN,OAAQd,EAAE,OAAO,CACnB,CACF,EACA,SAAUa,GACV,OAAQ,CACN,CACE,OAAQ,IACR,YAAa,mBACb,OAAQT,CACV,CACF,CACF,EACA,CACE,OAAQ,MACR,KAAM,0BACN,MAAO,0CACP,cAAe,OACf,WAAY,CACV,CACE,KAAM,UACN,KAAM,OACN,OAAQJ,EAAE,OAAO,CACnB,EACA,CACE,KAAM,SACN,KAAM,QACN,OAAQA,EAAE,KAAK,CACb,UACA,sBACA,YACA,WACA,YACA,WACA,kBACA,WACA,QACD,CACH,EACA,CACE,KAAM,OACN,KAAM,QACN,OAAQA,EAAE,KAAK,CAAC,KAAM,MAAO,MAAO,IAAI,CAAC,EAAE,WAAW,QAAQ,IAAI,CACpE,CACF,EACA,SAAUA,EAAE,MAAMsB,EAAc,EAChC,OAAQ,CACN,CACE,OAAQ,IACR,YAAa,mBACb,OAAQlB,CACV,CACF,CACF,EACA,CACE,OAAQ,OACR,KAAM,0BACN,MAAO,4CACP,cAAe,OACf,WAAY,CACV,CACE,KAAM,OACN,KAAM,OACN,OAAQmB,EACV,EACA,CACE,KAAM,UACN,KAAM,OACN,OAAQvB,EAAE,OAAO,CACnB,CACF,EACA,SAAUwB,EACV,OAAQ,CACN,CACE,OAAQ,IACR,YAAa,mBACb,OAAQpB,CACV,CACF,CACF,EACA,CACE,OAAQ,MACR,KAAM,oCACN,MAAO,mDACP,cAAe,OACf,WAAY,CACV,CACE,KAAM,UACN,KAAM,OACN,OAAQJ,EAAE,OAAO,CACnB,EACA,CACE,KAAM,WACN,KAAM,OACN,OAAQA,EAAE,OAAO,CACnB,CACF,EACA,SAAUwB,EACV,OAAQ,CACN,CACE,OAAQ,IACR,YAAa,mBACb,OAAQpB,CACV,CACF,CACF,EACA,CACE,OAAQ,SACR,KAAM,oCACN,MAAO,yDACP,cAAe,OACf,WAAY,CACV,CACE,KAAM,UACN,KAAM,OACN,OAAQJ,EAAE,OAAO,CACnB,EACA,CACE,KAAM,WACN,KAAM,OACN,OAAQA,EAAE,OAAO,CACnB,CACF,EACA,SAAUA,EAAE,OAAO,CAAE,GAAE,QAAQ,EAC/B,OAAQ,CACN,CACE,OAAQ,IACR,YAAa,mBACb,OAAQI,CACV,CACF,CACF,EACA,CACE,OAAQ,QACR,KAAM,oCACN,MAAO,wDACP,cAAe,OACf,WAAY,CACV,CACE,KAAM,OACN,KAAM,OACN,OAAQqB,EACV,EACA,CACE,KAAM,UACN,KAAM,OACN,OAAQzB,EAAE,OAAO,CACnB,EACA,CACE,KAAM,WACN,KAAM,OACN,OAAQA,EAAE,OAAO,CACnB,CACF,EACA,SAAUwB,EACV,OAAQ,CACN,CACE,OAAQ,IACR,YAAa,mBACb,OAAQpB,CACV,CACF,CACF,EACA,CACE,OAAQ,MACR,KAAM,iDACN,MACE,6EACF,cAAe,OACf,WAAY,CACV,CACE,KAAM,UACN,KAAM,OACN,OAAQJ,EAAE,OAAO,CACnB,EACA,CACE,KAAM,WACN,KAAM,OACN,OAAQA,EAAE,OAAO,CACnB,EACA,CACE,KAAM,WACN,KAAM,QACN,OAAQA,EAAE,OAAO,CACnB,EACA,CACE,KAAM,WACN,KAAM,QACN,OAAQA,EAAE,OAAO,CACnB,CACF,EACA,SAAUA,EAAE,QAAQ,EACpB,OAAQ,CACN,CACE,OAAQ,IACR,YAAa,mBACb,OAAQI,CACV,CACF,CACF,EACA,CACE,OAAQ,MACR,KAAM,4CACN,MACE,sEACF,cAAe,OACf,WAAY,CACV,CACE,KAAM,OACN,KAAM,OACN,OAAQJ,EAAE,OAAO,CAAE,GAAE,QAAQ,CAC/B,EACA,CACE,KAAM,UACN,KAAM,OACN,OAAQA,EAAE,OAAO,CACnB,EACA,CACE,KAAM,WACN,KAAM,OACN,OAAQA,EAAE,OAAO,CACnB,CACF,EACA,SAAUA,EAAE,OAAO,CAAE,GAAE,QAAQ,EAC/B,OAAQ,CACN,CACE,OAAQ,IACR,YAAa,mBACb,OAAQI,CACV,CACF,CACF,EACA,CACE,OAAQ,MACR,KAAM,2CACN,MAAO,iEACP,cAAe,OACf,WAAY,CACV,CACE,KAAM,UACN,KAAM,OACN,OAAQJ,EAAE,OAAO,CACnB,EACA,CACE,KAAM,WACN,KAAM,OACN,OAAQA,EAAE,OAAO,CACnB,CACF,EACA,SAAUA,EAAE,MAAM2C,EAAK,EACvB,OAAQ,CACN,CACE,OAAQ,IACR,YAAa,mBACb,OAAQvC,CACV,CACF,CACF,EACA,CACE,OAAQ,OACR,KAAM,2CACN,MAAO,oEACP,cAAe,OACf,WAAY,CACV,CACE,KAAM,OACN,KAAM,OACN,OAAQwC,EACV,EACA,CACE,KAAM,UACN,KAAM,OACN,OAAQ5C,EAAE,OAAO,CACnB,EACA,CACE,KAAM,WACN,KAAM,OACN,OAAQA,EAAE,OAAO,CACnB,CACF,EACA,SAAU2C,GACV,OAAQ,CACN,CACE,OAAQ,IACR,YAAa,mBACb,OAAQvC,CACV,CACF,CACF,EACA,CACE,OAAQ,MACR,KAAM,qDACN,MACE,+EACF,cAAe,OACf,WAAY,CACV,CACE,KAAM,OACN,KAAM,OACN,OAAQuC,EACV,EACA,CACE,KAAM,UACN,KAAM,OACN,OAAQ3C,EAAE,OAAO,CACnB,EACA,CACE,KAAM,WACN,KAAM,OACN,OAAQA,EAAE,OAAO,CACnB,EACA,CACE,KAAM,WACN,KAAM,OACN,OAAQA,EAAE,OAAO,CACnB,CACF,EACA,SAAU2C,GACV,OAAQ,CACN,CACE,OAAQ,IACR,YAAa,mBACb,OAAQvC,CACV,CACF,CACF,EACA,CACE,OAAQ,SACR,KAAM,qDACN,MACE,iFACF,cAAe,OACf,WAAY,CACV,CACE,KAAM,UACN,KAAM,OACN,OAAQJ,EAAE,OAAO,CACnB,EACA,CACE,KAAM,WACN,KAAM,OACN,OAAQA,EAAE,OAAO,CACnB,EACA,CACE,KAAM,WACN,KAAM,OACN,OAAQA,EAAE,OAAO,CACnB,CACF,EACA,SAAUA,EAAE,OAAO,CAAE,GAAE,QAAQ,EAC/B,OAAQ,CACN,CACE,OAAQ,IACR,YAAa,mBACb,OAAQI,CACV,CACF,CACF,EACA,CACE,OAAQ,MACR,KAAM,sDACN,MACE,oFACF,cAAe,OACf,WAAY,CACV,CACE,KAAM,WACN,KAAM,OACN,OAAQJ,EAAE,OAAO,CACnB,EACA,CACE,KAAM,UACN,KAAM,OACN,OAAQA,EAAE,OAAO,CACnB,EACA,CACE,KAAM,UACN,KAAM,QACN,OAAQA,EAAE,OAAS,QAAM,SAAS,CACpC,EACA,CACE,KAAM,QACN,KAAM,QACN,OAAQA,EAAE,OAAS,QAAM,SAAS,CACpC,CACF,EACA,SAAUA,EAAE,MAAMwD,EAAe,EACjC,OAAQ,CACN,CACE,OAAQ,IACR,YAAa,mBACb,OAAQpD,CACV,CACF,CACF,EACA,CACE,OAAQ,MACR,KAAM,0CACN,MAAO,8DACP,cAAe,OACf,WAAY,CACV,CACE,KAAM,UACN,KAAM,OACN,OAAQJ,EAAE,OAAO,CACnB,EACA,CACE,KAAM,WACN,KAAM,OACN,OAAQA,EAAE,OAAO,CACnB,CACF,EACA,SAAUA,EAAE,OAAO,EACnB,OAAQ,CACN,CACE,OAAQ,IACR,YAAa,mBACb,OAAQI,CACV,CACF,CACF,EACA,CACE,OAAQ,OACR,KAAM,6CACN,MAAO,oEACP,cAAe,OACf,WAAY,CACV,CACE,KAAM,WACN,KAAM,OACN,OAAQJ,EAAE,OAAO,CACnB,EACA,CACE,KAAM,UACN,KAAM,OACN,OAAQA,EAAE,OAAO,CACnB,CACF,EACA,SAAU4D,GACV,OAAQ,CACN,CACE,OAAQ,IACR,YAAa,mBACb,OAAQxD,CACV,CACF,CACF,EACA,CACE,OAAQ,MACR,KAAM,iEACN,MACE,+FACF,cAAe,OACf,WAAY,CACV,CACE,KAAM,WACN,KAAM,OACN,OAAQJ,EAAE,OAAO,CACnB,EACA,CACE,KAAM,UACN,KAAM,OACN,OAAQA,EAAE,OAAO,CACnB,EACA,CACE,KAAM,UACN,KAAM,OACN,OAAQA,EAAE,OAAO,CACnB,CACF,EACA,SAAU0D,GACV,OAAQ,CACN,CACE,OAAQ,IACR,YAAa,mBACb,OAAQtD,CACV,CACF,CACF,EACA,CACE,OAAQ,MACR,KAAM,iEACN,MACE,kGACF,cAAe,OACf,WAAY,CACV,CACE,KAAM,OACN,KAAM,OACN,OAAQsD,EACV,EACA,CACE,KAAM,WACN,KAAM,OACN,OAAQ1D,EAAE,OAAO,CACnB,EACA,CACE,KAAM,UACN,KAAM,OACN,OAAQA,EAAE,OAAO,CACnB,EACA,CACE,KAAM,UACN,KAAM,OACN,OAAQA,EAAE,OAAO,CACnB,CACF,EACA,SAAU0D,GACV,OAAQ,CACN,CACE,OAAQ,IACR,YAAa,mBACb,OAAQtD,CACV,CACF,CACF,EACA,CACE,OAAQ,OACR,KAAM,iEACN,MACE,mGACF,cAAe,OACf,WAAY,CACV,CACE,KAAM,OACN,KAAM,OACN,OAAQuD,EACV,EACA,CACE,KAAM,WACN,KAAM,OACN,OAAQ3D,EAAE,OAAO,CACnB,EACA,CACE,KAAM,UACN,KAAM,OACN,OAAQA,EAAE,OAAO,CACnB,EACA,CACE,KAAM,UACN,KAAM,OACN,OAAQA,EAAE,OAAO,CACnB,CACF,EACA,SAAU0D,GACV,OAAQ,CACN,CACE,OAAQ,IACR,YAAa,mBACb,OAAQtD,CACV,CACF,CACF,EACA,CACE,OAAQ,OACR,KAAM,8DACN,MACE,mFACF,cAAe,OACf,WAAY,CACV,CACE,KAAM,WACN,KAAM,OACN,OAAQJ,EAAE,OAAO,CACnB,EACA,CACE,KAAM,UACN,KAAM,OACN,OAAQA,EAAE,OAAO,CACnB,EACA,CACE,KAAM,UACN,KAAM,OACN,OAAQA,EAAE,OAAO,CACnB,CACF,EACA,SAAUA,EAAE,KAAK,EACjB,OAAQ,CACN,CACE,OAAQ,IACR,YAAa,mBACb,OAAQI,CACV,CACF,CACF,EACA,CACE,OAAQ,MACR,KAAM,4DACN,MACE,4EACF,cAAe,OACf,WAAY,CACV,CACE,KAAM,WACN,KAAM,OACN,OAAQJ,EAAE,OAAO,CACnB,EACA,CACE,KAAM,UACN,KAAM,OACN,OAAQA,EAAE,OAAO,CACnB,EACA,CACE,KAAM,UACN,KAAM,OACN,OAAQA,EAAE,OAAO,CACnB,CACF,EACA,SAAUA,EAAE,MAAMgE,EAAW,EAC7B,OAAQ,CACN,CACE,OAAQ,IACR,YAAa,mBACb,OAAQ5D,CACV,CACF,CACF,EACA,CACE,OAAQ,MACR,KAAM,iDACN,MACE,uEACF,cAAe,OACf,WAAY,CACV,CACE,KAAM,WACN,KAAM,OACN,OAAQJ,EAAE,OAAO,CACnB,EACA,CACE,KAAM,UACN,KAAM,OACN,OAAQA,EAAE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","names":["relList","link","processPreload","mutations","mutation","node","getFetchOpts","script","fetchOpts","unregister","registration","error","keycloak","Keycloak","keycloakInitOptions","debug","hasAnyRoles","userRoles","keycloakClient","keycloakRoles","_b","r","trackPageView","page","ReactGA","useLongEventTracking","eventName","params","useRef","useEffect","handleVisibilityChange","leaveStart","leaveDuration","eventState","useCallback","registerEventEnd","eventDuration","netDuration","Analytics","children","router","useRouter","pathName","useMemo","state","matches","slice","pop","pathname","useClubStore","create","persist","set","club","undefined","setClub","name","storage","createJSONStorage","localStorage","useThemeStore","theme","mode","window","matchMedia","primaryColor","setTheme","breakpoints","rootElement","customAccentColors","customShadows","alpha","transparent","storedTheme","mainColor","themeMode","createTheme","lighten","darken","ChangeCrabWidget","unseen","setUnseen","useState","changecrab_config","projectid","selector","type","emptycolor","activecolor","us","document","createElement","src","async","onload","head","appendChild","style","innerHTML","body","removeChild","IconButton","color","position","zIndex","top","right","backgroundColor","palette","background","default","borderRadius","display","className","Badge","badgeContent","onClick","_jsx","NotificationsIcon","baseURL","replay","axios","stringify","config","z","ClubUser","Group","ValidationError","HTTPValidationError","Language","UserCreate","UserUpdate","Club","TestMatchCreate","TestMatchAccess","Plan","ClubCreate","ClubResponse","ClubUpdate","TeamWithClub","ClubForStandaloneTeam","StandaloneTeam","MatchStatus","StatsStatus","StatsInfo","YoutubeLiveStream","MatchWithImage","MatchCreate","Match","MatchUpdate","TimeDifference","DoubleMatchCheck","Body_sponsor_upload_clubs__club_id__sponsor_post","MatchUrls","SharingModel","StandaloneTeamCreate","TeamWithClubCreate","BoxVersion","DeviceState","RecordingSystemOutAdmin","RecordingSystemOut","CustomRoiMask","PitchImage","EventType","BoardEvent","Board","BoardCreate","Event","EventCreate","Playlist","EventWithMatch","PlaylistWithEvents","PlaylistUpdate","Color","DrawingShape","ToolType","DrawingCreate","Drawing","League","TrackReview","ReviewSituation","TrackAssignment","Assignments","AssignmentsCreate","KickoffTrackingResponse","Player","Position","HIR","PlayerStats","PlayerUpdate","PlayerCreate","ShareRequest","ReplayUserUpdate","DeviceType","PushNotificationDevice","ClipType","DownloadStatus","DownloadWithLink","DownloadCreate","Download","endpoints","makeApi","LocalMatchCreate","PlaylistView","api","Zodios","apiHooks","ZodiosHooks","useDownloads","useListenDownloads","isDownloadsUnfinished","setDownloadsUnfinished","data","isUnfinished","download","useDownloadsCreate","queryClient","useQueryClient","key","useDownloadsAcknowledge","newDownloads","produce","previousDownloads","draft","t","index","useDownloadsDelete","downloadFile","file","Promise","resolve","setTimeout","id","href","target","click","revokeObjectURL","parentNode","downloadedFiles","Set","DownloadsMenu","isOpen","setOpen","anchorEl","setAnchorEl","setError","downloads","mutateAsync","mutateAcknowledge","mutateDelete","doneDownloads","filter","d","status","has","_id","length","errorCount","reduce","acc","count","download_url","add","all","map","allFinished","every","finishedCount","totalProgress","progress","_Fragment","_jsxs","e","currentTarget","bottom","paper","DownloadIcon","CircularProgress","size","variant","value","FormattedMessage","Popover","open","onClose","anchorOrigin","vertical","horizontal","List","ListItem","secondaryAction","CloseIcon","ListItemIcon","ListItemText","primary","values","Snackbar","autoHideDuration","Alert","severity","initializeGA","userId","lang","license","useHeadingStore","heading","isSupportedLocale","locale","messages","LOCALE_LABELS","code","text","currentLocale","navigator","language","useLocaleStore","setLocale","useLocale","noClubSet","currentClub","userBelongsToCurrentlySetClub","allClubs","c","includes","Header","useAxios","useKeycloak","subject","tokenParsed","userLicense","club_cred","tenent","plan","resourceAccess","roles","webkit","messageHandlers","userInfo","postMessage","token","BoxIcon","SvgIcon","Link","forwardRef","props","ref","LinkNeedFix","_ref","Zone14Icon","fontSize","points","useAuth","hasRole","role","isDemo","clubId","tokenWithLicense","idTokenParsed","some","logout","hasAdminRole","hasAnalystRole","hasCoachRole","hasLocalVideoRole","hasMatchDownloaderRole","hasMatchPlannerRole","hasPainterRole","hasViewerRole","hasStatsViewerRole","hasShareRole","hasDeviceManagerRole","hasTrainingPlannerRole","hasUserManagerRole","hasPreviewRole","hasSoundRole","isAuthenticated","authenticated","useMenuOpenStore","isMenuOpen","toggleMenuOpen","useMenuOpen","useResponsive","isMobile","useMediaQuery","isNotMobile","drawerHidden","drawerWidth","useStyles","makeStyles","createStyles","drawer","width","flexShrink","whiteSpace","down","borderRight","drawerOpen","transition","transitions","easing","sharp","duration","enteringScreen","drawerClose","leavingScreen","overflowX","up","toolbar","alignItems","padding","spacing","mixins","listItemButton","flexDirection","main","listItemIcon","minWidth","Sidebar","classes","muitheme","useTheme","location","useLocation","getValueFromPath","path","startsWith","setValue","openSub","Boolean","handleClick","event","handleClose","Paper","sx","left","BottomNavigation","onChange","newValue","showLabels","BottomNavigationAction","label","icon","PlayCircleOutlineIcon","component","to","SmartphoneIcon","SubscriptionsIcon","DateRangeIcon","MoreVertIcon","Menu","MenuItem","GroupIcon","reload","DarkModeSharp","LightModeSharp","SettingsIcon","ExitToAppIcon","Drawer","clsx","direction","ChevronRightIcon","ChevronLeftIcon","height","disabled","disablePadding","ListItemButton","disableTypography","Divider","bottomNavigationHeight","content","flexGrow","minHeight","marginLeft","marginBottom","contentShift","Layout","Splash","Grid","container","justifyContent","item","DB_VERSION","_MyDexie","Dexie","exists","db","MyDexie","__publicField","Zone14Videos","clearPlaylistFromCache","eventIds","playlistId","clearOldPlaylistsFromCache","now","routes","import","then","module","matchesModule","__vitePreload","addLocalMatchModule","matchDetailModule","statsModule","statsCorrectionModule","liveTaggingList","liveTaggingDetail","playlistsOverviewModule","playlistDetailModule","playersModule","matchCalendarModule","addMatchModule","addSharedMatchModule","usersModule","addUsersModule","devicesModule","devicesAdminModule","deviceDetailModule","settingsModule","element","Navigate","IntroductionModal","modal","activeStep","setActiveStep","maxSteps","steps","handleNext","handlePrev","Dialog","fullScreen","maxWidth","DialogTitle","grey","DialogContent","Box","MobileStepper","nextButton","Button","KeyboardArrowRightIcon","backButton","KeyboardArrowLeftIcon","Stepper","step","Step","StepLabel","title","textAlign","overflow","video","maxHeight","autoPlay","loop","muted","Typography","pt","mr","useMutateUser","getKeyByPath","useMutation","user","patch","onMutate","cancelQueries","previousUser","getQueryData","updatedUser","setQueryData","onError","onSuccess","invalidateQueries","useIntroductionModal","replayUser","isLoading","useGet","refetchOnMount","refetchOnWindowFocus","refetchOnReconnect","introductionModals","shownIntroductionScreens","existingIntroductionModals","introductionModal","mutate","isLoadingMutate","setShown","IntroductionModalProvider","currentModal","PendingLoader","showSlow","setShowSlowLoad","slowTimer","superSlowTimer","omgSlowTimer","clearTimeout","ReactLocation","QueryClient","App","configureAxiosHooks","initialize","ReactKeycloakProvider","authClient","initOptions","onTokens","hotjar","initialized","identify","QueryClientProvider","client","Router","defaultPendingMs","defaultPendingMinMs","defaultPendingElement","IntlProvider","StyledEngineProvider","injectFirst","ThemeProvider","CssBaseline","Outlet","ReactQueryDevtools","initialIsOpen","Sentry","environment","dsn","integrations","BrowserTracing","tracesSampleRate","ReactDOM","getElementById","serviceWorker"],"sources":["../../vite/modulepreload-polyfill","../../src/lib/service-worker.ts","../../src/lib/keycloak.ts","../../src/features/app/analytics/index.ts","../../src/features/app/components/Analytics.tsx","../../src/features/club/store/index.tsx","../../src/styles/theme.ts","../../src/features/releasenotes/components/ChangeCrabWidget.tsx","../../src/lib/axios.ts","../../src/api/generated.ts","../../src/api/index.ts","../../src/features/downloads/api/hooks.ts","../../src/features/downloads/components/DownloadsMenu.tsx","../../src/lib/google-analytics.ts","../../src/utils/headingStore.ts","../../src/i18n/index.ts","../../src/features/app/hooks/useLocale.tsx","../../src/features/app/components/Header.tsx","../../src/features/app/components/BoxIcon.tsx","../../src/components/Link.tsx","../../src/features/app/components/Zone14Icon.tsx","../../src/features/app/hooks/useAuth.tsx","../../src/features/app/hooks/useMenuOpen.tsx","../../src/features/app/hooks/useResponsive.tsx","../../src/features/app/components/Sidebar.tsx","../../src/features/app/components/Layout.tsx","../../src/features/app/components/Splash.tsx","../../src/lib/dexie.ts","../../src/features/playlists/cache/clear.ts","../../src/features/app/routes/index.tsx","../../src/components/IntroductionModal.tsx","../../src/features/app/hooks/useIntroductionModal.tsx","../../src/features/app/components/IntroductionModalProvider.tsx","../../src/features/app/components/PendingLoader.tsx","../../src/features/app/pages/App.tsx","../../src/index.tsx"],"sourcesContent":["__VITE_IS_MODERN__&&(function polyfill() {\n const relList = document.createElement('link').relList;\n if (relList && relList.supports && relList.supports('modulepreload')) {\n return;\n }\n for (const link of document.querySelectorAll('link[rel=\"modulepreload\"]')) {\n processPreload(link);\n }\n new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type !== 'childList') {\n continue;\n }\n for (const node of mutation.addedNodes) {\n if (node.tagName === 'LINK' && node.rel === 'modulepreload')\n processPreload(node);\n }\n }\n }).observe(document, { childList: true, subtree: true });\n function getFetchOpts(script) {\n const fetchOpts = {};\n if (script.integrity)\n fetchOpts.integrity = script.integrity;\n if (script.referrerpolicy)\n fetchOpts.referrerPolicy = script.referrerpolicy;\n if (script.crossorigin === 'use-credentials')\n fetchOpts.credentials = 'include';\n else if (script.crossorigin === 'anonymous')\n fetchOpts.credentials = 'omit';\n else\n fetchOpts.credentials = 'same-origin';\n return fetchOpts;\n }\n function processPreload(link) {\n if (link.ep)\n // ep marker = processed\n return;\n link.ep = true;\n // prepopulate the load record\n const fetchOpts = getFetchOpts(link);\n fetch(link.href, fetchOpts);\n }\n}());","/* eslint-disable eslint-comments/disable-enable-pair */\n/* eslint-disable no-console */\n/* eslint-disable @typescript-eslint/no-use-before-define */\n/* eslint-disable no-param-reassign */\n/* eslint-disable promise/no-nesting */\n/* eslint-disable promise/always-return */\n/* eslint-disable promise/catch-or-return */\n\n// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/,\n ),\n)\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void\n onUpdate?: (registration: ServiceWorkerRegistration) => void\n}\n\nexport function register(config?: Config) {\n if (import.meta.env.PROD && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(\n import.meta.env.PUBLIC_URL ?? '',\n window.location.href,\n )\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${import.meta.env.PUBLIC_URL}/service-worker.js`\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config)\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA',\n )\n })\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config)\n }\n })\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n navigator.serviceWorker\n .register(swUrl)\n .then((registration) => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing\n if (installingWorker == null) {\n return\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.',\n )\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration)\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.')\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration)\n }\n }\n }\n }\n }\n })\n .catch((error) => {\n console.error('Error during service worker registration:', error)\n })\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' },\n })\n .then((response) => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type')\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister().then(() => {\n window.location.reload()\n })\n })\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config)\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.',\n )\n })\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then((registration) => {\n registration.unregister()\n })\n .catch((error) => {\n console.error(error.message)\n })\n }\n}\n","import Keycloak, { KeycloakInitOptions } from 'keycloak-js'\n\nexport const roles = [\n 'admin',\n 'analyst',\n 'coach',\n 'local_video',\n 'match_downloader',\n 'match_planner',\n 'painter',\n 'viewer',\n 'device_manager',\n 'stats_viewer',\n 'sharer',\n 'training_planner',\n 'user_manager',\n 'preview',\n 'sound',\n] as const\nexport type Roles = typeof roles[number]\n\nexport const keycloak = Keycloak(import.meta.env.VITE_KEYCLOAK_FILE)\n\nexport const keycloakInitOptions: (debug: boolean) => KeycloakInitOptions = (\n debug,\n) => ({\n onLoad: 'login-required',\n checkLoginIframe: !debug,\n})\n\n// for React components use the custom hook `useAuth()`\nexport const hasAnyRoles = (\n userRoles: Roles[],\n keycloakClient: Keycloak.KeycloakInstance,\n): boolean => {\n const keycloakRoles = keycloakClient.resourceAccess?.replay.roles ?? []\n return userRoles.some((r) => keycloakRoles.indexOf(r) > -1)\n}\n\n// for React components use the custom hook `useAuth()`\nexport const hasAllRoles = (\n userRoles: Roles[],\n keycloakClient: Keycloak.KeycloakInstance,\n): boolean => {\n const keycloakRoles = keycloakClient.resourceAccess?.replay.roles ?? []\n return userRoles.every((r) => keycloakRoles.indexOf(r) > -1)\n}\n","import { useCallback, useEffect, useRef } from 'react'\nimport ReactGA from 'react-ga4'\n\nexport const trackPageView = ({ page }: { page?: string }) => {\n if (page) {\n ReactGA.send({\n hitType: 'pageview',\n page,\n })\n }\n}\n\nexport const useLongEventTracking = (\n eventName: string,\n params: { [key: string]: string },\n) => {\n const eventState = useRef<{\n leaves: number\n leavesDuration: number\n start: number | undefined\n }>({ leaves: 0, leavesDuration: 0, start: undefined })\n\n useEffect(() => {\n let leaveStart: number | undefined\n const handleVisibilityChange = () => {\n if (document.hidden) {\n leaveStart = Date.now()\n } else {\n if (!leaveStart) return\n\n const leaveDuration = (Date.now() - leaveStart) / 1000\n\n eventState.current.leavesDuration += leaveDuration\n eventState.current.leaves += 1\n\n leaveStart = undefined\n }\n }\n document.addEventListener('visibilitychange', handleVisibilityChange)\n\n return () => {\n document.removeEventListener('visibilitychange', handleVisibilityChange)\n }\n }, [eventState])\n\n const registerEventStart = useCallback(() => {\n eventState.current.start = Date.now()\n }, [eventState])\n\n const registerEventEnd = useCallback(() => {\n if (!eventState.current.start) return\n\n const eventDuration = (Date.now() - eventState.current.start) / 1000\n const netDuration = eventDuration - eventState.current.leavesDuration\n\n if (eventDuration < 1 || netDuration < 0) return // net duration < 0 normally only happens on hot reload\n\n ReactGA.event(eventName, {\n ...params,\n left_during_event: eventState.current.leaves,\n leave_time: eventState.current.leavesDuration,\n total_time: eventDuration,\n net_time: netDuration,\n })\n }, [eventState, eventName, params])\n\n return { registerEventStart, registerEventEnd }\n}\n","import { useEffect, useMemo } from 'react'\nimport { useRouter } from '@tanstack/react-location'\n\nimport { trackPageView } from 'features/app/analytics'\n\nexport const Analytics = ({ children }: { children: JSX.Element }) => {\n const router = useRouter()\n const pathName = useMemo(\n () => router.state.matches.slice(-1).pop()?.pathname,\n [router.state.matches],\n )\n\n useEffect(() => {\n trackPageView({ page: pathName })\n }, [pathName])\n\n return children\n}\n","import { createJSONStorage, persist } from 'zustand/middleware'\nimport { create } from 'zustand'\n\nimport { Club, Theme } from '../types'\n\ntype ClubStore = {\n club?: Club\n setClub: (club: Club) => void\n}\n\ntype ThemeStore = {\n theme: Theme\n setTheme: (theme: Theme) => void\n}\n\nexport const useClubStore = create()(\n persist(\n (set) => ({\n club: undefined,\n setClub: (club: Club) => {\n set({ club })\n },\n }),\n { name: 'club', storage: createJSONStorage(() => localStorage) },\n ),\n)\n\nexport const useThemeStore = create()(\n persist(\n (set) => ({\n theme: {\n mode: window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light',\n primaryColor: '#FF4500',\n },\n setTheme: (theme: Theme) => {\n set({ theme })\n },\n }),\n { name: 'theme', storage: createJSONStorage(() => localStorage) },\n ),\n)\n","import { alpha, createTheme, darken, lighten } from '@mui/material/styles'\n\nimport { useThemeStore } from 'features/club/store'\n\nexport const breakpoints = { xl: 1600, lg: 1200, md: 768, sm: 640, xs: 0 }\n\nconst rootElement = document.getElementById('root')\n\nexport const customAccentColors = {\n orange: '#FF4500',\n purple: '#6800FF',\n turquoise: '#00FFCC',\n blue: '#0028FF',\n green: '#00FF35',\n red: '#FF0023',\n yellow: '#FFC100',\n pink: '#FF00E7',\n grey: '#7C7C7C',\n}\n\nconst customShadows = () => {\n const transparent = alpha('#000000', 0.16)\n\n return {\n z1: `0 1px 2px 0 ${transparent}`,\n z4: `0 4px 8px 0 ${transparent}`,\n z8: `0 8px 16px 0 ${transparent}`,\n z12: `0 12px 24px -4px ${transparent}`,\n z16: `0 16px 32px -4px ${transparent}`,\n z20: `0 20px 40px -4px ${transparent}`,\n z24: `0 24px 48px 0 ${transparent}`,\n //\n card: `0 0 2px 0 ${alpha('#000000', 0.08)}, 0 12px 24px -4px ${alpha(\n '#000000',\n 0.08,\n )}`,\n paper: `0 0 2px 0 ${alpha('#000000', 0.08)}, 0 12px 24px -4px ${alpha(\n '#000000',\n 0.08,\n )}`,\n dropdown: `0 0 2px 0 ${alpha(\n '#000000',\n 0.24,\n )}, -20px 20px 40px -4px ${alpha('#000000', 0.24)}`,\n dialog: `-40px 40px 80px -8px ${alpha('#000000', 0.24)}`,\n }\n}\n\nconst storedTheme = useThemeStore.getState().theme\nconst mainColor = storedTheme.primaryColor\nconst themeMode = storedTheme.mode\n\nexport const theme = createTheme({\n breakpoints: {\n values: breakpoints,\n },\n typography: {\n fontFamily: 'Inter, sans-serif',\n h1: {\n fontSize: '2rem',\n fontWeight: 700,\n marginBottom: '1rem',\n zIndex: 2,\n },\n h2: {\n fontSize: '2rem',\n fontWeight: 500,\n },\n h3: {\n fontSize: '1.5rem',\n fontWeight: 500,\n },\n h4: {\n fontSize: '1.2rem',\n fontWeight: 500,\n },\n h5: {\n fontSize: '1rem',\n fontWeight: 500,\n },\n },\n palette: {\n mode: themeMode,\n primary: {\n main: mainColor,\n contrastText: '#FFFFFF',\n },\n secondary: {\n main:\n themeMode === 'light'\n ? lighten(mainColor, 0.5)\n : darken(mainColor, 0.5),\n },\n background: {\n default:\n themeMode === 'light'\n ? lighten(mainColor, 0.96)\n : darken(mainColor, 0.96),\n paper:\n themeMode === 'light' ? lighten(mainColor, 1) : darken(mainColor, 0.8),\n },\n text: {\n primary: themeMode === 'light' ? '#000000' : '#FFFFFF',\n },\n },\n mixins: {\n toolbar: {\n height: '64px',\n },\n },\n shape: {\n borderRadius: 16,\n },\n components: {\n MuiAppBar: {\n styleOverrides: {\n root: {\n boxShadow: customShadows().paper,\n backgroundColor:\n themeMode === 'light'\n ? alpha(lighten(mainColor, 0.9), 0.9)\n : alpha(darken(mainColor, 0.9), 0.9),\n backdropFilter: 'blur(10px)',\n },\n },\n },\n MuiDialog: {\n defaultProps: {\n container: rootElement,\n },\n },\n MuiButton: {\n styleOverrides: {\n root: {\n borderRadius: 1000,\n fontSize: '0.75rem',\n /* '& .MuiSvgIcon-root': {\n color: '#FFFFFF',\n }, */\n },\n outlined: {\n borderTopWidth: 2,\n borderLeftWidth: 2,\n borderRightWidth: 2,\n borderBottomWidth: 2,\n ':hover': {\n borderTopWidth: 2,\n borderLeftWidth: 2,\n borderRightWidth: 2,\n borderBottomWidth: 2,\n },\n /* '& .MuiSvgIcon-root': {\n color: mainColor,\n }, */\n },\n },\n },\n MuiList: {\n styleOverrides: {\n root: {\n boxShadow: customShadows().card,\n borderRadius: 16,\n backgroundColor:\n themeMode === 'light'\n ? lighten(mainColor, 1)\n : darken(mainColor, 0.8),\n },\n },\n },\n MuiPopover: {\n defaultProps: {\n container: rootElement,\n },\n },\n MuiCard: {\n styleOverrides: {\n root: {\n boxShadow: customShadows().card,\n zIndex: 2,\n },\n },\n },\n MuiPaper: {\n styleOverrides: {\n root: {\n boxShadow: customShadows().paper,\n zIndex: 2,\n },\n },\n defaultProps: {\n elevation: 0,\n },\n },\n MuiGrid: {\n styleOverrides: {\n root: {\n zIndex: 2,\n },\n },\n },\n MuiListItemIcon: {\n styleOverrides: {\n root: {\n color: 'unset',\n },\n },\n },\n MuiNativeSelect: {\n styleOverrides: {\n root: {\n borderRadius: 1,\n },\n },\n },\n MuiSelect: {\n styleOverrides: {\n iconOutlined: {\n color: mainColor,\n },\n },\n },\n MuiOutlinedInput: {\n styleOverrides: {\n notchedOutline: {\n borderColor: alpha(mainColor, 0.5),\n },\n },\n },\n MuiSwitch: {\n styleOverrides: {\n root: {\n width: 32,\n height: 20,\n padding: 0,\n display: 'flex',\n marginLeft: 8,\n marginRight: 8,\n },\n switchBase: {\n padding: 2,\n ':checked': {\n transform: 'translateX(12px)',\n },\n '&.Mui-checked': {\n transform: 'translateX(12px)',\n },\n },\n thumb: {\n width: 16,\n height: 16,\n borderRadius: 8,\n },\n track: {\n borderRadius: 32,\n },\n },\n },\n },\n})\n","import { Badge, IconButton } from '@mui/material'\nimport { useEffect, useState } from 'react'\nimport { NotificationsSharp as NotificationsIcon } from '@mui/icons-material'\n\nimport { theme } from 'styles/theme'\n\nimport { ChangeCrabWindow } from '../changeCrabTypes'\n\ndeclare let window: ChangeCrabWindow\n\nexport const ChangeCrabWidget = () => {\n const [unseen, setUnseen] = useState()\n\n useEffect(() => {\n window.changecrab_config = {\n projectid: 'fBpCdy',\n selector: '.changebubble',\n type: 'full',\n emptycolor: 'rgb(0 0 0)',\n activecolor: 'rgb(255 74 28)',\n set unseen(us: number) {\n setUnseen(us)\n },\n }\n\n const script = document.createElement('script')\n\n script.src = 'https://changecrab.com/embed/embed.js'\n script.async = true\n\n script.onload = () => {}\n\n document.head.appendChild(script)\n\n const style = document.createElement('style')\n style.innerHTML = `.crab-count { display: none !important; }`\n document.head.appendChild(style)\n\n return () => {\n document.body.removeChild(script)\n }\n }, [])\n\n return (\n 0 ? 'block' : 'none',\n }}\n >\n {/* eslint-disable-next-line tailwindcss/no-custom-classname */}\n
\n {\n setUnseen(undefined)\n }}\n >\n \n \n
\n \n )\n}\n","import axios from 'axios'\nimport { stringify } from 'qs'\n\nimport { keycloak } from 'lib/keycloak'\n\nexport const baseURL = `${import.meta.env.VITE_REPLAY_API}/replay/v1/`\n\nexport const replay = axios.create({\n baseURL,\n paramsSerializer: {\n serialize: (params) => stringify(params, { arrayFormat: 'comma' }),\n },\n})\n\nreplay.interceptors.request.use((config) => {\n if (!keycloak.token) return config\n\n // eslint-disable-next-line no-param-reassign\n config.headers = {\n Authorization: `Bearer ${keycloak.token}`,\n ...config.headers,\n }\n\n return config\n})\n","import { makeApi } from '@zodios/core'\nimport { z } from 'zod'\n\nexport const Group = z.enum([\n 'replay/club-admin',\n 'replay/education',\n 'replay/player',\n 'replay/coach',\n])\nexport const ClubUser = z.object({\n _id: z.string(),\n user_id: z.string(),\n club_id: z.string(),\n email: z.string(),\n firstName: z.string(),\n lastName: z.string(),\n group: Group,\n})\nexport const ValidationError = z.object({\n loc: z.array(z.union([z.string(), z.number()])),\n msg: z.string(),\n type: z.string(),\n})\nexport const HTTPValidationError = z\n .object({ detail: z.array(ValidationError) })\n .partial()\nexport const Language = z.enum(['de', 'en'])\nexport const UserCreate = z.object({\n email: z.string(),\n password: z.string().optional(),\n first_name: z.string(),\n last_name: z.string(),\n lang: Language.optional(),\n group: Group.optional(),\n})\nexport const UserUpdate = z.object({ group: Group })\nexport const Club = z.object({ _id: z.string(), name: z.string() })\nexport const TestMatchCreate = z.object({\n team_home: z.string(),\n team_away: z.string(),\n recording_path: z.string(),\n})\nexport const TestMatchAccess = z.object({ access_club_id: z.string() })\nexport const Plan = z.enum(['basic', 'live', 'demo', 'sharing'])\nexport const ClubCreate = z.object({\n teams: z.array(z.string()),\n test_matches: z.array(z.union([TestMatchCreate, TestMatchAccess])),\n users: z.array(UserCreate),\n plan: Plan.optional(),\n name: z.string(),\n})\nexport const ClubResponse = z.object({\n club: Club,\n created_teams: z.array(z.string()),\n added_user_ids: z.array(z.string()),\n user_passwords: z.string(),\n})\nexport const ClubUpdate = z.object({\n teams: z.array(z.string()),\n test_matches: z.array(z.union([TestMatchCreate, TestMatchAccess])),\n users: z.array(UserCreate),\n plan: Plan.optional(),\n})\nexport const TeamWithClub = z.object({\n _id: z.string(),\n club: Club,\n name: z.string(),\n})\nexport const ClubForStandaloneTeam = z.object({ name: z.string() })\nexport const StandaloneTeam = z.object({\n _id: z.string(),\n name: z.string(),\n club: ClubForStandaloneTeam,\n custom_team_from_club_id: z.string(),\n})\nexport const MatchStatus = z.enum([\n 'planned',\n 'ready_for_recording',\n 'recording',\n 'recorded',\n 'uploading',\n 'uploaded',\n 'post_processing',\n 'finished',\n 'error',\n])\nexport const StatsStatus = z.enum([\n 'pending',\n 'processing',\n 'review',\n 'finalizing',\n 'finished',\n 'error',\n])\nexport const StatsInfo = z.enum(['red_card'])\nexport const YoutubeLiveStream = z.object({\n broadcast_id: z.string(),\n stream_url: z.string(),\n})\nexport const MatchWithImage = z.object({\n team_home: z.union([TeamWithClub, StandaloneTeam]),\n team_away: z.union([TeamWithClub, StandaloneTeam]),\n start_time: z.string(),\n recording_start_time: z.string().optional(),\n end_time: z.string(),\n duration: z.number().int().optional(),\n status: MatchStatus,\n recording: z.boolean(),\n recording_path: z.string(),\n recording_system: z.string().optional(),\n recording_system_id: z.string().optional(),\n recording_system_roi: z.array(z.array(z.unknown())).optional(),\n upload_url: z.string().optional(),\n upload_url_creation_time: z.string().optional(),\n uploaded: z.boolean(),\n upload_progress: z.number().optional(),\n upload_progress_tactical: z.number().optional(),\n upload_progress_panoramic: z.number().optional(),\n upload_progress_left: z.number().optional(),\n upload_progress_right: z.number().optional(),\n upload_progress_goal_left: z.number().optional(),\n upload_progress_goal_right: z.number().optional(),\n post_processing_trigger_time: z.number().optional(),\n post_processing_progress: z.number().optional(),\n kickoff_1st_half: z.number().int().optional(),\n kickoff_2nd_half: z.number().int().optional(),\n goals_home: z.array(z.number()).optional(),\n goals_away: z.array(z.number()).optional(),\n created_by: z.string().optional(),\n fov: z.array(z.number()).optional(),\n left_right_config_mix_up: z.boolean().optional(),\n left_ahead: z.number().int().optional(),\n stats_status: StatsStatus.optional(),\n stats_processing_progress: z.number().optional(),\n stats_error_msg: z.string().optional(),\n stats_info: StatsInfo.optional(),\n is_home: z.boolean().optional(),\n belongs_to: z.string(),\n has_access: z.array(z.string()),\n share_key: z.string(),\n archived: z.boolean().optional(),\n livestream_token: z.string().optional(),\n stream_left_token: z.string().optional(),\n stream_right_token: z.string().optional(),\n stream_goal_left_token: z.string().optional(),\n stream_goal_right_token: z.string().optional(),\n live: z.boolean().optional(),\n youtube_live_stream: YoutubeLiveStream.optional(),\n sponsors_image_id: z.string().optional(),\n _id: z.string(),\n thumbnail: z.string().optional(),\n sprite: z.string().optional(),\n})\nexport const MatchCreate = z.object({\n team_home: z.union([TeamWithClub, StandaloneTeam]),\n team_away: z.union([TeamWithClub, StandaloneTeam]),\n lang: z.string().optional().default('en'),\n timezone: z.string().optional().default('UTC'),\n is_home: z.boolean().optional().default(true),\n recording_system_id: z.string(),\n start_time: z.string(),\n end_time_calendar: z.string().optional(),\n recording_system_roi_id: z.string().optional(),\n shared_with_league_id: z.string().optional(),\n duration: z.number().int().optional().default(110),\n live: z.boolean().optional(),\n youtube_live: z.boolean().optional(),\n sponsors_image_id: z.string().optional(),\n})\nexport const Match = z.object({\n team_home: z.union([TeamWithClub, StandaloneTeam]),\n team_away: z.union([TeamWithClub, StandaloneTeam]),\n start_time: z.string(),\n recording_start_time: z.string().optional(),\n end_time: z.string(),\n duration: z.number().int().optional(),\n status: MatchStatus,\n recording: z.boolean(),\n recording_path: z.string(),\n recording_system: z.string().optional(),\n recording_system_id: z.string().optional(),\n recording_system_roi: z.array(z.array(z.unknown())).optional(),\n upload_url: z.string().optional(),\n upload_url_creation_time: z.string().optional(),\n uploaded: z.boolean(),\n upload_progress: z.number().optional(),\n upload_progress_tactical: z.number().optional(),\n upload_progress_panoramic: z.number().optional(),\n upload_progress_left: z.number().optional(),\n upload_progress_right: z.number().optional(),\n upload_progress_goal_left: z.number().optional(),\n upload_progress_goal_right: z.number().optional(),\n post_processing_trigger_time: z.number().optional(),\n post_processing_progress: z.number().optional(),\n kickoff_1st_half: z.number().int().optional(),\n kickoff_2nd_half: z.number().int().optional(),\n goals_home: z.array(z.number()).optional(),\n goals_away: z.array(z.number()).optional(),\n created_by: z.string().optional(),\n fov: z.array(z.number()).optional(),\n left_right_config_mix_up: z.boolean().optional(),\n left_ahead: z.number().int().optional(),\n stats_status: StatsStatus.optional(),\n stats_processing_progress: z.number().optional(),\n stats_error_msg: z.string().optional(),\n stats_info: StatsInfo.optional(),\n is_home: z.boolean().optional(),\n belongs_to: z.string(),\n has_access: z.array(z.string()),\n share_key: z.string(),\n archived: z.boolean().optional(),\n livestream_token: z.string().optional(),\n stream_left_token: z.string().optional(),\n stream_right_token: z.string().optional(),\n stream_goal_left_token: z.string().optional(),\n stream_goal_right_token: z.string().optional(),\n live: z.boolean().optional(),\n youtube_live_stream: YoutubeLiveStream.optional(),\n sponsors_image_id: z.string().optional(),\n _id: z.string(),\n})\nexport const MatchUpdate = z\n .object({\n kickoff_1st_half: z.number().int(),\n kickoff_2nd_half: z.number().int(),\n goals_home: z.array(z.number()),\n goals_away: z.array(z.number()),\n })\n .partial()\nexport const TimeDifference = z\n .object({ time_back: z.string(), time_forward: z.string() })\n .partial()\nexport const DoubleMatchCheck = z.object({\n start_time: z.string(),\n duration: z.number().int(),\n recording_system_id: z.string(),\n timezone: z.string(),\n time_difference: TimeDifference.optional(),\n})\nexport const Body_sponsor_upload_clubs__club_id__sponsor_post = z.object({\n files: z.array(z.instanceof(File)),\n})\nexport const UrlCheckResponse = z.object({ video_url: z.string() })\nexport const LocalMatchCreate = z.object({\n team_home: z.union([TeamWithClub, StandaloneTeam]),\n team_away: z.union([TeamWithClub, StandaloneTeam]),\n start_time: z.string(),\n upload: z.boolean().optional(),\n local_upload: z.boolean().optional().default(true),\n video_url: z.string().optional(),\n})\nexport const MatchUrls = z\n .object({\n panoramic_view: z.string(),\n tactical_view: z.string(),\n goal_left_view: z.string(),\n goal_right_view: z.string(),\n left_view: z.string(),\n right_view: z.string(),\n })\n .partial()\nexport const SharingModel = z.object({\n share_key: z.string(),\n shared_by_user: z.string(),\n shared_by_club: z.string(),\n shared_match: z.string(),\n match_id: z.string(),\n exp: z.string(),\n iat: z.string(),\n _id: z.string(),\n})\nexport const StandaloneTeamCreate = z.object({\n name: z.string(),\n club: ClubForStandaloneTeam,\n custom_team_from_club_id: z.string(),\n})\nexport const TeamWithClubCreate = z.object({ club: Club, name: z.string() })\nexport const BoxVersion = z.enum(['v1', 'v1.2', 'v2'])\nexport const DeviceState = z\n .object({\n heartbeat: z.string(),\n device_id: z.string(),\n left_camera: z.boolean(),\n right_camera: z.boolean(),\n cpu_temp: z.number(),\n gpu_temp: z.number(),\n ao_temp: z.number(),\n pll_temp: z.number(),\n thermal_temp: z.number(),\n fan_state: z.number(),\n disk_use: z.number(),\n internet_up: z.number(),\n internet_down: z.number(),\n })\n .partial()\nexport const RecordingSystemOutAdmin = z.object({\n _id: z.string(),\n club_id: z.string(),\n name: z.string(),\n fixed_mounted: z.boolean(),\n box_version: BoxVersion.optional().default('v1'),\n plannable: z.boolean().optional().default(true),\n device_id: z.string(),\n club_name: z.string().optional(),\n device_state: DeviceState.optional(),\n})\nexport const RecordingSystemOut = z.object({\n _id: z.string(),\n club_id: z.string(),\n name: z.string(),\n fixed_mounted: z.boolean(),\n box_version: BoxVersion.optional().default('v1'),\n plannable: z.boolean().optional().default(true),\n device_id: z.string(),\n device_state: DeviceState.optional(),\n})\nexport const CustomRoiMask = z.object({\n _id: z.string(),\n roi: z.array(z.array(z.unknown())),\n name: z.string(),\n recording_system_id: z.string(),\n})\nexport const PitchImage = z.object({\n timestamp: z.string(),\n left: z.string(),\n right: z.string(),\n})\nexport const EventType = z.object({\n name: z.string(),\n default_seconds_before: z.number().int(),\n default_seconds_after: z.number().int(),\n hotkey: z.string().optional(),\n color: z.string().optional(),\n})\nexport const BoardEvent = z.object({\n event: EventType,\n x: z.number().int(),\n y: z.number().int(),\n width: z.number().int(),\n height: z.number().int(),\n color: z.string().optional(),\n})\nexport const Board = z.object({\n name: z.string(),\n board_events: z.array(BoardEvent),\n user_id: z.string(),\n _id: z.string(),\n})\nexport const BoardCreate = z.object({\n name: z.string(),\n board_events: z.array(BoardEvent),\n})\nexport const Event = z.object({\n match_id: z.string(),\n ms_from_start: z.number().int(),\n type: EventType,\n seconds_before: z.number().int(),\n seconds_after: z.number().int(),\n note: z.string().optional(),\n belongs_to: z.string().optional(),\n color: z.string().optional(),\n _id: z.string(),\n})\nexport const EventCreate = z.object({\n match_id: z.string(),\n ms_from_start: z.number().int(),\n type: EventType,\n seconds_before: z.number().int(),\n seconds_after: z.number().int(),\n note: z.string().optional(),\n color: z.string().optional(),\n browser_info: z.object({}).partial().optional(),\n})\nexport const Playlist = z.object({\n pinned: z.boolean().optional(),\n name: z.string(),\n event_ids: z.array(z.string()),\n belongs_to_club: z.string(),\n _id: z.string(),\n})\nexport const PlaylistCreate = z.object({ name: z.string() })\nexport const PlaylistView = z.object({\n _id: z.string(),\n pinned: z.boolean().optional(),\n name: z.string(),\n clip_count: z.number().int(),\n event_ids: z.array(z.string()),\n belongs_to_club: z.string(),\n})\nexport const EventWithMatch = z.object({\n match_id: z.string(),\n ms_from_start: z.number().int(),\n type: EventType,\n seconds_before: z.number().int(),\n seconds_after: z.number().int(),\n note: z.string().optional(),\n belongs_to: z.string().optional(),\n color: z.string().optional(),\n _id: z.string(),\n match: Match,\n})\nexport const PlaylistWithEvents = z.object({\n _id: z.string(),\n name: z.string(),\n events: z.array(EventWithMatch),\n belongs_to_club: z.string(),\n})\nexport const PlaylistUpdate = z\n .object({\n name: z.string(),\n pinned: z.boolean(),\n event_ids: z.array(z.string()),\n })\n .partial()\nexport const PlaylistEvent = z.object({ event_id: z.string() })\nexport const ToolType = z.enum([\n 'area',\n 'area_ellipse',\n 'pen',\n 'highlight',\n 'circle',\n 'arrow_full',\n 'arrow_wave',\n 'arrow_dash',\n 'text',\n])\nexport const Color = z.enum([\n 'red',\n 'blue',\n 'green',\n 'yellow',\n 'orange',\n 'black',\n 'white',\n])\nexport const DrawingShape = z.object({\n type: ToolType,\n points: z.array(z.array(z.number())),\n color: Color,\n finished: z.boolean().optional(),\n text: z.string().optional(),\n rotation: z.number().optional(),\n scale: z.number().optional(),\n})\nexport const DrawingCreate = z.object({\n event_id: z.string(),\n playlist_id: z.string(),\n at_ms: z.number().int(),\n shapes: z.array(DrawingShape),\n})\nexport const Drawing = z.object({\n _id: z.string(),\n event_id: z.string(),\n playlist_id: z.string(),\n at_ms: z.number().int(),\n shapes: z.array(DrawingShape),\n})\nexport const League = z.object({\n _id: z.string(),\n name: z.string(),\n teams: z.array(TeamWithClub),\n sharing_obligation: z.boolean().optional(),\n})\nexport const TrackReview = z.object({\n id: z.number().int(),\n last_track_id: z.number().int().optional(),\n bounding_box: z.array(z.number()),\n confidence: z.number(),\n})\nexport const ReviewSituation = z.object({\n _id: z.string(),\n match_id: z.string(),\n index: z.number().int(),\n frame: z.number().int(),\n team: z.number().int(),\n track_reviews: z.array(TrackReview),\n})\nexport const TrackAssignment = z.object({\n track_id: z.number().int(),\n player_id: z.string(),\n})\nexport const Assignments = z.object({\n _id: z.string(),\n match_id: z.string(),\n team_id: z.string(),\n team_no: z.number().int(),\n track_player_assignments: z.array(TrackAssignment),\n})\nexport const AssignmentsCreate = z.object({\n match_id: z.string(),\n team_id: z.string(),\n team_no: z.number().int(),\n track_player_assignments: z.array(TrackAssignment),\n})\nexport const KickoffTrackingResponse = z.object({\n reason: z.enum(['no_kickoff_times_set']),\n})\nexport const TrackingUrlResponse = z\n .object({ tracking_url: z.string() })\n .partial()\nexport const Position = z.enum(['defense', 'midfield', 'striker', 'goalkeeper'])\nexport const Player = z.object({\n jersey_no: z.string().optional(),\n player_no: z.string().optional(),\n name: z.string(),\n position: Position,\n teams: z.array(TeamWithClub),\n belongs_to: z.array(z.string()),\n _id: z.string(),\n})\nexport const HIR = z.object({\n start: z.number().int(),\n end: z.number().int().optional(),\n avg_speed: z.number().optional(),\n min_speed: z.number().optional(),\n max_speed: z.number().optional(),\n distance: z.number().optional(),\n pos: z.array(z.array(z.unknown())),\n})\nexport const PlayerStats = z.object({\n _id: z.string(),\n team_id: z.string(),\n match_id: z.string(),\n player: Player,\n max_speed: z.number(),\n median_speed: z.number(),\n distance: z.number(),\n tracked_time: z.number().optional(),\n hirs: z.union([z.array(HIR), z.number()]),\n frames_covered: z.array(z.array(z.number())),\n heatmap: z.array(z.array(z.number())).optional(),\n})\nexport const PlayerUpdate = z.object({\n jersey_no: z.string().optional(),\n player_no: z.string().optional(),\n name: z.string(),\n position: Position,\n teams: z.array(TeamWithClub),\n _id: z.string(),\n})\nexport const PlayerCreate = z.object({\n jersey_no: z.string().optional(),\n player_no: z.string().optional(),\n name: z.string(),\n position: Position,\n teams: z.array(TeamWithClub),\n})\nexport const ShareRequest = z.object({\n share_with: z.string(),\n team_ids: z.array(z.string()),\n date_from: z.string().optional().default('2024-01-01T00:00:00'),\n date_to: z.string().optional().default('2024-01-01T00:00:00'),\n with_events: z.boolean().optional(),\n})\nexport const ReplayUserUpdate = z.object({\n shownIntroductionScreens: z.array(z.string()),\n})\nexport const DeviceType = z.enum(['apple', 'android'])\nexport const PushNotificationDevice = z.object({\n device_type: DeviceType,\n device_token: z.string(),\n})\nexport const ClipType = z.enum(['left', 'right', 'pano', 'tactical', 'section'])\nexport const DownloadStatus = z.enum([\n 'pending',\n 'processing',\n 'finished',\n 'error',\n])\nexport const DownloadWithLink = z.object({\n _id: z.string(),\n event_id: z.string().optional(),\n playlist_id: z.string(),\n name: z.string(),\n clipType: ClipType.optional().default('tactical'),\n section: z.array(z.array(z.unknown())).optional(),\n user_id: z.string(),\n hash: z.string(),\n created_at: z.string(),\n acknowledged_at: z.string().optional(),\n status: DownloadStatus,\n progress: z.number().optional(),\n error_msg: z.string().optional(),\n download_url: z.string().optional(),\n})\nexport const DownloadCreate = z.object({\n event_id: z.string().optional(),\n playlist_id: z.string(),\n name: z.string(),\n clipType: ClipType.optional().default('tactical'),\n section: z.array(z.array(z.unknown())).optional(),\n})\nexport const Download = z.object({\n _id: z.string(),\n event_id: z.string().optional(),\n playlist_id: z.string(),\n name: z.string(),\n clipType: ClipType.optional().default('tactical'),\n section: z.array(z.array(z.unknown())).optional(),\n user_id: z.string(),\n hash: z.string(),\n created_at: z.string(),\n acknowledged_at: z.string().optional(),\n status: DownloadStatus,\n progress: z.number().optional(),\n error_msg: z.string().optional(),\n})\nexport const DownloadUpdate = z.object({ acknowledged: z.boolean() })\nexport const HIRPos = z.object({\n frame: z.number().int(),\n x: z.number(),\n y: z.number(),\n})\nexport const VideoType = z.enum([\n 'tactical',\n 'panoramic',\n 'left',\n 'right',\n 'goal_left',\n 'goal_right',\n])\n\nexport const endpoints = makeApi([\n {\n method: 'get',\n path: '/boards',\n alias: 'get_boards_boards_get',\n requestFormat: 'json',\n parameters: [\n {\n name: 'create_if_not_exists',\n type: 'Query',\n schema: z.boolean().optional(),\n },\n ],\n response: z.array(Board),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'post',\n path: '/boards',\n alias: 'save_board_boards_post',\n requestFormat: 'json',\n parameters: [\n {\n name: 'body',\n type: 'Body',\n schema: BoardCreate,\n },\n ],\n response: Board,\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'put',\n path: '/boards/:board_id',\n alias: 'replace_board_boards__board_id__put',\n requestFormat: 'json',\n parameters: [\n {\n name: 'body',\n type: 'Body',\n schema: Board,\n },\n {\n name: 'board_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: Board,\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'delete',\n path: '/boards/:board_id',\n alias: 'delete_board_boards__board_id__delete',\n requestFormat: 'json',\n parameters: [\n {\n name: 'board_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: z.object({}).partial(),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'get',\n path: '/clubs',\n alias: 'get_clubs_clubs_get',\n requestFormat: 'json',\n response: z.array(Club),\n },\n {\n method: 'post',\n path: '/clubs',\n alias: 'create_club_clubs_post',\n requestFormat: 'json',\n parameters: [\n {\n name: 'body',\n type: 'Body',\n schema: ClubCreate,\n },\n ],\n response: ClubResponse,\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'patch',\n path: '/clubs/:club_id',\n alias: 'update_club_endpoint_clubs__club_id__patch',\n requestFormat: 'json',\n parameters: [\n {\n name: 'body',\n type: 'Body',\n schema: ClubUpdate,\n },\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: ClubResponse,\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'get',\n path: '/clubs/:club_id/matches',\n alias: 'get_matches_clubs__club_id__matches_get',\n requestFormat: 'json',\n parameters: [\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'status',\n type: 'Query',\n schema: z.enum([\n 'planned',\n 'ready_for_recording',\n 'recording',\n 'recorded',\n 'uploading',\n 'uploaded',\n 'post_processing',\n 'finished',\n 'error',\n ]),\n },\n {\n name: 'type',\n type: 'Query',\n schema: z.enum(['eq', 'gte', 'lte', 'ne']).optional().default('eq'),\n },\n ],\n response: z.array(MatchWithImage),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'post',\n path: '/clubs/:club_id/matches',\n alias: 'create_match_clubs__club_id__matches_post',\n requestFormat: 'json',\n parameters: [\n {\n name: 'body',\n type: 'Body',\n schema: MatchCreate,\n },\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: Match,\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'get',\n path: '/clubs/:club_id/matches/:match_id',\n alias: 'get_match_clubs__club_id__matches__match_id__get',\n requestFormat: 'json',\n parameters: [\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'match_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: Match,\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'delete',\n path: '/clubs/:club_id/matches/:match_id',\n alias: 'delete_match_clubs__club_id__matches__match_id__delete',\n requestFormat: 'json',\n parameters: [\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'match_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: z.object({}).partial(),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'patch',\n path: '/clubs/:club_id/matches/:match_id',\n alias: 'update_match_clubs__club_id__matches__match_id__patch',\n requestFormat: 'json',\n parameters: [\n {\n name: 'body',\n type: 'Body',\n schema: MatchUpdate,\n },\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'match_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: Match,\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'get',\n path: '/clubs/:club_id/matches/:match_id/announcement',\n alias:\n 'get_announcement_image_clubs__club_id__matches__match_id__announcement_get',\n requestFormat: 'json',\n parameters: [\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'match_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'language',\n type: 'Query',\n schema: z.string(),\n },\n {\n name: 'timezone',\n type: 'Query',\n schema: z.string(),\n },\n ],\n response: z.unknown(),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'put',\n path: '/clubs/:club_id/matches/:match_id/archive',\n alias:\n 'delete_archive_match_clubs__club_id__matches__match_id__archive_put',\n requestFormat: 'json',\n parameters: [\n {\n name: 'body',\n type: 'Body',\n schema: z.object({}).partial(),\n },\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'match_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: z.object({}).partial(),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'get',\n path: '/clubs/:club_id/matches/:match_id/events',\n alias: 'get_match_events_clubs__club_id__matches__match_id__events_get',\n requestFormat: 'json',\n parameters: [\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'match_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: z.array(Event),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'post',\n path: '/clubs/:club_id/matches/:match_id/events',\n alias: 'create_match_event_clubs__club_id__matches__match_id__events_post',\n requestFormat: 'json',\n parameters: [\n {\n name: 'body',\n type: 'Body',\n schema: EventCreate,\n },\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'match_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: Event,\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'put',\n path: '/clubs/:club_id/matches/:match_id/events/:event_id',\n alias:\n 'replace_match_event_clubs__club_id__matches__match_id__events__event_id__put',\n requestFormat: 'json',\n parameters: [\n {\n name: 'body',\n type: 'Body',\n schema: Event,\n },\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'match_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'event_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: Event,\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'delete',\n path: '/clubs/:club_id/matches/:match_id/events/:event_id',\n alias:\n 'delete_match_event_clubs__club_id__matches__match_id__events__event_id__delete',\n requestFormat: 'json',\n parameters: [\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'match_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'event_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: z.object({}).partial(),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'get',\n path: '/clubs/:club_id/matches/:match_id/review-situations',\n alias:\n 'get_correction_situation_clubs__club_id__matches__match_id__review_situations_get',\n requestFormat: 'json',\n parameters: [\n {\n name: 'match_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'team_no',\n type: 'Query',\n schema: z.number().int().optional(),\n },\n {\n name: 'index',\n type: 'Query',\n schema: z.number().int().optional(),\n },\n ],\n response: z.array(ReviewSituation),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'get',\n path: '/clubs/:club_id/matches/:match_id/share',\n alias: 'get_share_link_clubs__club_id__matches__match_id__share_get',\n requestFormat: 'json',\n parameters: [\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'match_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: z.string(),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'post',\n path: '/clubs/:club_id/matches/:match_id/tracking',\n alias: 'kickoff_tracking_clubs__club_id__matches__match_id__tracking_post',\n requestFormat: 'json',\n parameters: [\n {\n name: 'match_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: KickoffTrackingResponse,\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'get',\n path: '/clubs/:club_id/matches/:match_id/tracking/:team_id/assignment',\n alias:\n 'get_tracking_assignment_clubs__club_id__matches__match_id__tracking__team_id__assignment_get',\n requestFormat: 'json',\n parameters: [\n {\n name: 'match_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'team_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: Assignments,\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'put',\n path: '/clubs/:club_id/matches/:match_id/tracking/:team_id/assignment',\n alias:\n 'update_tracking_assignment_clubs__club_id__matches__match_id__tracking__team_id__assignment_put',\n requestFormat: 'json',\n parameters: [\n {\n name: 'body',\n type: 'Body',\n schema: Assignments,\n },\n {\n name: 'match_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'team_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: Assignments,\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'post',\n path: '/clubs/:club_id/matches/:match_id/tracking/:team_id/assignment',\n alias:\n 'create_tracking_assignment_clubs__club_id__matches__match_id__tracking__team_id__assignment_post',\n requestFormat: 'json',\n parameters: [\n {\n name: 'body',\n type: 'Body',\n schema: AssignmentsCreate,\n },\n {\n name: 'match_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'team_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: Assignments,\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'post',\n path: '/clubs/:club_id/matches/:match_id/tracking/:team_id/process',\n alias:\n 'generate_data_clubs__club_id__matches__match_id__tracking__team_id__process_post',\n requestFormat: 'json',\n parameters: [\n {\n name: 'match_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'team_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: z.void(),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'get',\n path: '/clubs/:club_id/matches/:match_id/tracking/:team_id/stats',\n alias:\n 'get_stats_clubs__club_id__matches__match_id__tracking__team_id__stats_get',\n requestFormat: 'json',\n parameters: [\n {\n name: 'match_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'team_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: z.array(PlayerStats),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'get',\n path: '/clubs/:club_id/matches/:match_id/tracking/url',\n alias:\n 'get_tracking_url_clubs__club_id__matches__match_id__tracking_url_get',\n requestFormat: 'json',\n parameters: [\n {\n name: 'match_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: z.object({ tracking_url: z.string() }).partial(),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'get',\n path: '/clubs/:club_id/matches/:match_id/url',\n alias: 'get_match_url_clubs__club_id__matches__match_id__url_get',\n requestFormat: 'json',\n parameters: [\n {\n name: 'match_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'video_type',\n type: 'Query',\n schema: z.enum([\n 'tactical',\n 'panoramic',\n 'left',\n 'right',\n 'goal_left',\n 'goal_right',\n ]),\n },\n ],\n response: z.string(),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'get',\n path: '/clubs/:club_id/matches/:match_id/urls',\n alias: 'get_match_urls_clubs__club_id__matches__match_id__urls_get',\n requestFormat: 'json',\n parameters: [\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'match_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: MatchUrls,\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'get',\n path: '/clubs/:club_id/matches/:match_id/video.m3u8',\n alias:\n 'get_match_playlist_clubs__club_id__matches__match_id__video_m3u8_get',\n requestFormat: 'json',\n parameters: [\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'match_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'token',\n type: 'Query',\n schema: z.string(),\n },\n ],\n response: z.string(),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'post',\n path: '/clubs/:club_id/matches/access',\n alias: 'add_access_match_clubs__club_id__matches_access_post',\n requestFormat: 'json',\n parameters: [\n {\n name: 'body',\n type: 'Body',\n schema: z.unknown(),\n },\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'share_key',\n type: 'Query',\n schema: z.string(),\n },\n ],\n response: Match,\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'post',\n path: '/clubs/:club_id/matches/local',\n alias: 'create_local_match_clubs__club_id__matches_local_post',\n requestFormat: 'json',\n parameters: [\n {\n name: 'body',\n type: 'Body',\n schema: LocalMatchCreate,\n },\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: z.unknown(),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'delete',\n path: '/clubs/:club_id/matches/local/:match_id/delete-with-events',\n alias:\n 'delete_local_match_with_events_clubs__club_id__matches_local__match_id__delete_with_events_delete',\n requestFormat: 'json',\n parameters: [\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'match_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: z.void(),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'post',\n path: '/clubs/:club_id/matches/local/urlcheck',\n alias: 'check_video_url_clubs__club_id__matches_local_urlcheck_post',\n requestFormat: 'json',\n parameters: [\n {\n name: 'body',\n type: 'Body',\n schema: z.string(),\n },\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: z.object({ video_url: z.string() }),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'get',\n path: '/clubs/:club_id/overlapping',\n alias: 'overlapping_matches_clubs__club_id__overlapping_get',\n requestFormat: 'json',\n parameters: [\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'start_time',\n type: 'Query',\n schema: z.string(),\n },\n {\n name: 'duration',\n type: 'Query',\n schema: z.number().int(),\n },\n {\n name: 'recording_system_id',\n type: 'Query',\n schema: z.string(),\n },\n {\n name: 'timezone',\n type: 'Query',\n schema: z.string(),\n },\n ],\n response: z.union([z.array(DoubleMatchCheck), z.object({}).partial()]),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'get',\n path: '/clubs/:club_id/players',\n alias: 'get_players_clubs__club_id__players_get',\n requestFormat: 'json',\n parameters: [\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'team_id',\n type: 'Query',\n schema: z.string().optional(),\n },\n ],\n response: z.array(Player),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'put',\n path: '/clubs/:club_id/players',\n alias: 'update_players_clubs__club_id__players_put',\n requestFormat: 'json',\n parameters: [\n {\n name: 'body',\n type: 'Body',\n schema: z.array(PlayerUpdate),\n },\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: z.array(Player),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'post',\n path: '/clubs/:club_id/players',\n alias: 'create_player_clubs__club_id__players_post',\n requestFormat: 'json',\n parameters: [\n {\n name: 'body',\n type: 'Body',\n schema: PlayerCreate,\n },\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: Player,\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'put',\n path: '/clubs/:club_id/players/:player_id',\n alias: 'update_player_clubs__club_id__players__player_id__put',\n requestFormat: 'json',\n parameters: [\n {\n name: 'body',\n type: 'Body',\n schema: PlayerUpdate,\n },\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'player_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: Player,\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'delete',\n path: '/clubs/:club_id/players/:player_id',\n alias: 'delete_player_clubs__club_id__players__player_id__delete',\n requestFormat: 'json',\n parameters: [\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'player_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: z.void(),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'get',\n path: '/clubs/:club_id/playlists',\n alias: 'get_playlists_clubs__club_id__playlists_get',\n requestFormat: 'json',\n parameters: [\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: z.array(Playlist),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'post',\n path: '/clubs/:club_id/playlists',\n alias: 'add_new_playlist_clubs__club_id__playlists_post',\n requestFormat: 'json',\n parameters: [\n {\n name: 'body',\n type: 'Body',\n schema: z.object({ name: z.string() }),\n },\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: Playlist,\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'get',\n path: '/clubs/:club_id/playlists/:playlist_id',\n alias: 'get_playlist_detail_clubs__club_id__playlists__playlist_id__get',\n requestFormat: 'json',\n parameters: [\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'playlist_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: PlaylistWithEvents,\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'delete',\n path: '/clubs/:club_id/playlists/:playlist_id',\n alias: 'delete_playlist_clubs__club_id__playlists__playlist_id__delete',\n requestFormat: 'json',\n parameters: [\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'playlist_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: z.void(),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'patch',\n path: '/clubs/:club_id/playlists/:playlist_id',\n alias: 'update_playlist_clubs__club_id__playlists__playlist_id__patch',\n requestFormat: 'json',\n parameters: [\n {\n name: 'body',\n type: 'Body',\n schema: PlaylistUpdate,\n },\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'playlist_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: Playlist,\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'get',\n path: '/clubs/:club_id/playlists/:playlist_id/clips/:event_id',\n alias:\n 'get_clip_clubs__club_id__playlists__playlist_id__clips__event_id__get',\n requestFormat: 'json',\n parameters: [\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'playlist_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'event_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'type',\n type: 'Query',\n schema: z.enum(['panoramic', 'tactical']),\n },\n {\n name: 'cache_break',\n type: 'Query',\n schema: z.boolean().optional(),\n },\n {\n name: 'keep_timestamps',\n type: 'Query',\n schema: z.boolean().optional().default(true),\n },\n ],\n response: z.void(),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'post',\n path: '/clubs/:club_id/playlists/:playlist_id/events/:event_id/drawing',\n alias:\n 'add_drawing_clubs__club_id__playlists__playlist_id__events__event_id__drawing_post',\n requestFormat: 'json',\n parameters: [\n {\n name: 'body',\n type: 'Body',\n schema: DrawingCreate,\n },\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'playlist_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'event_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: Drawing,\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'put',\n path: '/clubs/:club_id/playlists/:playlist_id/events/:event_id/drawing/:drawing_id',\n alias:\n 'update_drawing_clubs__club_id__playlists__playlist_id__events__event_id__drawing__drawing_id__put',\n requestFormat: 'json',\n parameters: [\n {\n name: 'body',\n type: 'Body',\n schema: Drawing,\n },\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'playlist_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'event_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'drawing_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: Drawing,\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'delete',\n path: '/clubs/:club_id/playlists/:playlist_id/events/:event_id/drawing/:drawing_id',\n alias:\n 'delete_drawing_clubs__club_id__playlists__playlist_id__events__event_id__drawing__drawing_id__delete',\n requestFormat: 'json',\n parameters: [\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'playlist_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'event_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'drawing_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: z.object({}).partial(),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'post',\n path: '/clubs/:club_id/playlists/:playlist_id/events/add',\n alias:\n 'add_playlist_event_clubs__club_id__playlists__playlist_id__events_add_post',\n requestFormat: 'json',\n parameters: [\n {\n name: 'body',\n type: 'Body',\n schema: z.object({ event_id: z.string() }),\n },\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'playlist_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: z.object({}).partial(),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'get',\n path: '/clubs/:club_id/playlists/:playlist_id/events/drawings',\n alias:\n 'get_drawings_clubs__club_id__playlists__playlist_id__events_drawings_get',\n requestFormat: 'json',\n parameters: [\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'playlist_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: z.array(Drawing),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'post',\n path: '/clubs/:club_id/playlists/:playlist_id/events/remove',\n alias:\n 'remove_playlist_event_clubs__club_id__playlists__playlist_id__events_remove_post',\n requestFormat: 'json',\n parameters: [\n {\n name: 'body',\n type: 'Body',\n schema: z.object({ event_id: z.string() }),\n },\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'playlist_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: z.object({}).partial(),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'get',\n path: '/clubs/:club_id/playlists/views',\n alias: 'get_playlist_views_clubs__club_id__playlists_views_get',\n requestFormat: 'json',\n parameters: [\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'team_name',\n type: 'Query',\n schema: z.string().optional(),\n },\n {\n name: 'search',\n type: 'Query',\n schema: z.string().optional(),\n },\n {\n name: 'pinned',\n type: 'Query',\n schema: z.boolean().optional(),\n },\n ],\n response: z.array(PlaylistView),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'get',\n path: '/clubs/:club_id/recording_systems',\n alias: 'get_recording_systems_clubs__club_id__recording_systems_get',\n requestFormat: 'json',\n parameters: [\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: z.array(RecordingSystemOut),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'get',\n path: '/clubs/:club_id/recording_systems/:recording_system_id/rois',\n alias:\n 'get_rois_clubs__club_id__recording_systems__recording_system_id__rois_get',\n requestFormat: 'json',\n parameters: [\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'recording_system_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: z.array(CustomRoiMask),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'post',\n path: '/clubs/:club_id/sponsor',\n alias: 'sponsor_upload_clubs__club_id__sponsor_post',\n requestFormat: 'form-data',\n parameters: [\n {\n name: 'body',\n type: 'Body',\n schema: Body_sponsor_upload_clubs__club_id__sponsor_post,\n },\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: z.unknown(),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'get',\n path: '/clubs/:club_id/teams/:team_id/leagues',\n alias: 'get_leagues_clubs__club_id__teams__team_id__leagues_get',\n description: `Retrieve leagues for a specific team.\nArgs:\n club_id (str): The ID of the club.\n team_id (str): The ID of the team.\n db (deps.ReplayDb, optional): The database dependency. Defaults to Depends(deps.get_db).\n user (User, optional): The user with required permissions. \n Defaults to Depends(get_user_with_permission(["coach", "analyst", "device_manager"])).\nReturns:\n List[League]: A list of League objects representing the leagues found for the team.\nRaises:\n HTTPException: If no leagues are found for the team.`,\n requestFormat: 'json',\n parameters: [\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'team_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: z.array(League),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'post',\n path: '/clubs/:club_id/teams/standalone',\n alias: 'create_standalone_team_clubs__club_id__teams_standalone_post',\n requestFormat: 'json',\n parameters: [\n {\n name: 'body',\n type: 'Body',\n schema: StandaloneTeamCreate,\n },\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: StandaloneTeam,\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'post',\n path: '/clubs/:club_id/teams/with-club',\n alias: 'create_team_with_club_clubs__club_id__teams_with_club_post',\n requestFormat: 'json',\n parameters: [\n {\n name: 'body',\n type: 'Body',\n schema: TeamWithClubCreate,\n },\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: TeamWithClub,\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'get',\n path: '/clubs/:club_id/users',\n alias: 'get_users_clubs__club_id__users_get',\n requestFormat: 'json',\n parameters: [\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: z.array(ClubUser),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'post',\n path: '/clubs/:club_id/users',\n alias: 'create_user_clubs__club_id__users_post',\n requestFormat: 'json',\n parameters: [\n {\n name: 'body',\n type: 'Body',\n schema: UserCreate,\n },\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: UserCreate,\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'delete',\n path: '/clubs/:club_id/users/:user_id',\n alias: 'delete_user_clubs__club_id__users__user_id__delete',\n requestFormat: 'json',\n parameters: [\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'user_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: z.unknown(),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'patch',\n path: '/clubs/:club_id/users/:user_id',\n alias: 'update_user_clubs__club_id__users__user_id__patch',\n requestFormat: 'json',\n parameters: [\n {\n name: 'body',\n type: 'Body',\n schema: UserUpdate,\n },\n {\n name: 'club_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'user_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: z.unknown(),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'get',\n path: '/downloads',\n alias: 'get_downloads_downloads_get',\n requestFormat: 'json',\n parameters: [\n {\n name: 'acknowledged',\n type: 'Query',\n schema: z.boolean().optional(),\n },\n ],\n response: z.array(DownloadWithLink),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'post',\n path: '/downloads',\n alias: 'create_download_downloads_post',\n requestFormat: 'json',\n parameters: [\n {\n name: 'body',\n type: 'Body',\n schema: DownloadCreate,\n },\n ],\n response: Download,\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'delete',\n path: '/downloads/:id',\n alias: 'delete_download_downloads__id__delete',\n requestFormat: 'json',\n parameters: [\n {\n name: 'id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: z.void(),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'patch',\n path: '/downloads/:id',\n alias: 'update_download_downloads__id__patch',\n requestFormat: 'json',\n parameters: [\n {\n name: 'body',\n type: 'Body',\n schema: z.object({ acknowledged: z.boolean() }),\n },\n {\n name: 'id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: Download,\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'get',\n path: '/groups',\n alias: 'get_user_groups_groups_get',\n requestFormat: 'json',\n response: z.array(z.string()),\n },\n {\n method: 'get',\n path: '/matches/:match_id/process',\n alias: 'post_processing_match_matches__match_id__process_get',\n requestFormat: 'json',\n parameters: [\n {\n name: 'match_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'version',\n type: 'Query',\n schema: z.enum(['v1', 'v2', 'v3']).optional().default('v3'),\n },\n {\n name: 'mode',\n type: 'Query',\n schema: z\n .enum(['train', 'player_follow'])\n .optional()\n .default('player_follow'),\n },\n ],\n response: z.object({}).partial(),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'get',\n path: '/matches/:match_id/process-stats',\n alias: 'post_processing_stats_matches__match_id__process_stats_get',\n requestFormat: 'json',\n parameters: [\n {\n name: 'match_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'max_frames',\n type: 'Query',\n schema: z.number().int().optional(),\n },\n {\n name: 'reset_now',\n type: 'Query',\n schema: z.boolean().optional(),\n },\n ],\n response: z.object({}).partial(),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'get',\n path: '/matches/export/',\n alias: 'export_matches_matches_export__get',\n requestFormat: 'json',\n response: z.object({}).partial(),\n },\n {\n method: 'post',\n path: '/migrate-fov',\n alias: 'migrate_fov_migrate_fov_post',\n requestFormat: 'json',\n parameters: [\n {\n name: 'date_from',\n type: 'Query',\n schema: z.string().optional().default('2025-01-01T00:00:00'),\n },\n {\n name: 'date_to',\n type: 'Query',\n schema: z.string().optional().default('2030-01-01T00:00:00'),\n },\n ],\n response: z.unknown(),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'post',\n path: '/migrate-users',\n alias: 'migrate_users_migrate_users_post',\n requestFormat: 'json',\n response: z.unknown(),\n },\n {\n method: 'post',\n path: '/partner-share',\n alias: 'partner_share_partner_share_post',\n requestFormat: 'json',\n parameters: [\n {\n name: 'body',\n type: 'Body',\n schema: ShareRequest,\n },\n ],\n response: z.unknown(),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'get',\n path: '/recording_systems/:recording_system_id/device_state/request',\n alias:\n 'request_device_state_recording_systems__recording_system_id__device_state_request_get',\n requestFormat: 'json',\n parameters: [\n {\n name: 'recording_system_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: z.object({}).partial(),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'get',\n path: '/recording_systems/:recording_system_id/generate_masks',\n alias:\n 'request_device_generate_masks_recording_systems__recording_system_id__generate_masks_get',\n requestFormat: 'json',\n parameters: [\n {\n name: 'recording_system_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: z.object({}).partial(),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'get',\n path: '/recording_systems/:recording_system_id/matches/:match_id/upload_sponsor_image',\n alias:\n 'upload_matchsponsor_recording_systems__recording_system_id__matches__match_id__upload_sponsor_image_get',\n requestFormat: 'json',\n parameters: [\n {\n name: 'recording_system_id',\n type: 'Path',\n schema: z.string(),\n },\n {\n name: 'match_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: z.unknown(),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'get',\n path: '/recording_systems/:recording_system_id/pitch_img',\n alias:\n 'get_pitch_image_recording_systems__recording_system_id__pitch_img_get',\n requestFormat: 'json',\n parameters: [\n {\n name: 'recording_system_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: PitchImage,\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'get',\n path: '/recording_systems/:recording_system_id/pitch_img/request',\n alias:\n 'request_pitch_image_recording_systems__recording_system_id__pitch_img_request_get',\n requestFormat: 'json',\n parameters: [\n {\n name: 'recording_system_id',\n type: 'Path',\n schema: z.string(),\n },\n ],\n response: z.object({}).partial(),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'get',\n path: '/recording_systems/admin',\n alias: 'get_recording_systems_admin_recording_systems_admin_get',\n requestFormat: 'json',\n response: z.array(RecordingSystemOutAdmin),\n },\n {\n method: 'get',\n path: '/share-info',\n alias: 'get_share_info_share_info_get',\n requestFormat: 'json',\n parameters: [\n {\n name: 'share_key',\n type: 'Query',\n schema: z.string(),\n },\n {\n name: 'token',\n type: 'Query',\n schema: z.string(),\n },\n ],\n response: SharingModel,\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'get',\n path: '/teams/standalone',\n alias: 'get_standalone_teams_teams_standalone_get',\n requestFormat: 'json',\n parameters: [\n {\n name: 'club_id',\n type: 'Query',\n schema: z.string(),\n },\n ],\n response: z.array(StandaloneTeam),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'get',\n path: '/teams/with-club',\n alias: 'get_teams_with_club_teams_with_club_get',\n requestFormat: 'json',\n parameters: [\n {\n name: 'club_id',\n type: 'Query',\n schema: z.string(),\n },\n ],\n response: z.array(TeamWithClub),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'get',\n path: '/users/current_user',\n alias: 'get_user_users_current_user_get',\n requestFormat: 'json',\n response: ReplayUserUpdate,\n },\n {\n method: 'patch',\n path: '/users/current_user',\n alias: 'update_user_users_current_user_patch',\n requestFormat: 'json',\n parameters: [\n {\n name: 'body',\n type: 'Body',\n schema: ReplayUserUpdate,\n },\n ],\n response: z.unknown(),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n {\n method: 'post',\n path: '/users/current_user/register_device',\n alias: 'register_device_users_current_user_register_device_post',\n requestFormat: 'json',\n parameters: [\n {\n name: 'body',\n type: 'Body',\n schema: PushNotificationDevice,\n },\n ],\n response: z.unknown(),\n errors: [\n {\n status: 422,\n description: `Validation Error`,\n schema: HTTPValidationError,\n },\n ],\n },\n])\n","import { Zodios } from '@zodios/core'\nimport { ZodiosHooks } from '@zodios/react'\n\nimport { replay } from 'lib/axios'\n\nimport { endpoints } from './generated'\n\nexport const api = new Zodios(endpoints, { axiosInstance: replay })\n\nexport const apiHooks = new ZodiosHooks('replay', api)\n","import { useEffect, useState } from 'react'\nimport { useMutation, useQueryClient } from '@tanstack/react-query'\nimport { produce } from 'immer'\n\nimport { api, apiHooks } from 'api'\n\nimport { Download, DownloadCreate } from '../types'\n\nexport const useDownloads = () => {\n return apiHooks.useGet('/downloads', { queries: { acknowledged: false } })\n}\n\nexport const useListenDownloads = () => {\n const [isDownloadsUnfinished, setDownloadsUnfinished] = useState(true)\n const { data } = apiHooks.useGet(\n '/downloads',\n {\n queries: { acknowledged: false },\n },\n { refetchInterval: isDownloadsUnfinished ? 10000 : false },\n )\n\n useEffect(() => {\n if (data === undefined) return\n // check if any of the downloads are not acknowledged\n const isUnfinished = data.some((download) => !download.acknowledged_at)\n\n setDownloadsUnfinished(isUnfinished)\n }, [data])\n\n return { data }\n}\n\nexport const useDownloadsCreate = () => {\n const queryClient = useQueryClient()\n\n const key = apiHooks.getKeyByPath('get', '/downloads', {\n queries: { acknowledged: false },\n })\n\n return useMutation(\n ({ download }: { download: DownloadCreate }) =>\n api.post('/downloads', download),\n {\n // Always refetch after error or success:\n onSettled: () => {\n queryClient.invalidateQueries(key)\n },\n },\n )\n}\n\nexport const useDownloadsAcknowledge = () => {\n const queryClient = useQueryClient()\n\n const key = apiHooks.getKeyByPath('get', '/downloads', {\n queries: { acknowledged: false },\n })\n\n return useMutation(\n ({ download }) =>\n api.patch(\n '/downloads/:id',\n { acknowledged: true },\n { params: { id: download._id } },\n ),\n {\n // When mutate is called:\n onMutate: async ({ download }: { download: Download }) => {\n queryClient.cancelQueries(key)\n\n const previousDownloads = queryClient.getQueryData(key) as Download[]\n\n const newDownloads = produce(previousDownloads, (draft) => {\n const index = draft.findIndex((t) => t._id === download._id)\n draft.splice(index, 1)\n })\n\n queryClient.setQueryData(key, newDownloads)\n\n return { previousDownloads }\n },\n // Always refetch after error or success:\n onSettled: () => {\n queryClient.invalidateQueries(key)\n },\n },\n )\n}\n\nexport const useDownloadsDelete = () => {\n const queryClient = useQueryClient()\n\n const key = apiHooks.getKeyByPath('get', '/downloads', {\n queries: { acknowledged: false },\n })\n\n return useMutation(\n ({ download }) =>\n api.delete('/downloads/:id', undefined, { params: { id: download._id } }),\n {\n // When mutate is called:\n onMutate: async ({ download }: { download: Download }) => {\n queryClient.cancelQueries(key)\n\n const previousDownloads = queryClient.getQueryData(key) as Download[]\n\n const newDownloads = produce(previousDownloads, (draft) => {\n const index = draft.findIndex((t) => t._id === download._id)\n draft.splice(index, 1)\n })\n\n queryClient.setQueryData(key, newDownloads)\n\n return { previousDownloads }\n },\n // Always refetch after error or success:\n onSettled: () => {\n queryClient.invalidateQueries(key)\n },\n },\n )\n}\n","import {\n Alert,\n Badge,\n CircularProgress,\n IconButton,\n List,\n ListItem,\n ListItemIcon,\n ListItemText,\n Popover,\n Snackbar,\n} from '@mui/material'\nimport {\n CloseSharp as CloseIcon,\n DownloadSharp as DownloadIcon,\n} from '@mui/icons-material'\nimport { useEffect, useState } from 'react'\nimport { FormattedMessage } from 'react-intl'\n\nimport { theme } from 'styles/theme'\n\nimport {\n useDownloadsAcknowledge,\n useDownloadsDelete,\n useListenDownloads,\n} from '../api/hooks'\n\nconst downloadFile = async (name: string, file: string) =>\n new Promise((resolve) => {\n setTimeout(() => {\n // Create a link and set the URL using `createObjectURL`\n const link = document.createElement('a')\n link.id = `download-link-${name}`\n link.style.display = 'none'\n link.href = file\n link.download = name\n link.target = '_blank'\n\n // It needs to be added to the DOM so it can be clicked\n document.body.appendChild(link)\n\n link.click()\n\n URL.revokeObjectURL(link.href)\n link.parentNode?.removeChild(link)\n resolve(null)\n }, 0)\n })\n\nconst downloadedFiles = new Set()\n\nexport const DownloadsMenu = () => {\n const [isOpen, setOpen] = useState(false)\n\n const [anchorEl, setAnchorEl] = useState(null)\n\n const [error, setError] = useState()\n\n const { data: downloads } = useListenDownloads()\n\n const { mutateAsync: mutateAcknowledge } = useDownloadsAcknowledge()\n\n const { mutateAsync: mutateDelete } = useDownloadsDelete()\n\n useEffect(() => {\n const handleFinished = async () => {\n if (!downloads) return\n\n const doneDownloads = downloads.filter(\n (d) =>\n (d.status === 'finished' || d.status === 'error') &&\n !downloadedFiles.has(d._id),\n )\n\n if (doneDownloads.length === 0) return\n\n const errorCount = await downloads.reduce(async (acc, download) => {\n const count = await acc\n\n if (download.status === 'finished' && download.download_url)\n await downloadFile(download.name, download.download_url)\n\n if (download.status === 'error') return count + 1\n\n downloadedFiles.add(download._id)\n\n return count\n }, Promise.resolve(0))\n\n // this will trigger a re-render and therefore we need to make sure with `doneDownloads` that we don't re-download these files\n await Promise.all(\n doneDownloads.map((download) => mutateAcknowledge({ download })),\n )\n\n if (errorCount > 0) {\n setError('downloads.error')\n }\n }\n handleFinished()\n }, [mutateAcknowledge, downloads])\n\n useEffect(() => {\n if (downloads && downloads.length !== 0) return\n setAnchorEl(null)\n setOpen(false)\n }, [downloads])\n\n if (!downloads) return null\n\n if (downloads.length === 0 && !error) return null\n\n const allFinished = downloads.every((d) => d.status === 'finished')\n\n const finishedCount = downloads.filter((d) => d.status === 'finished').length\n\n const totalProgress =\n downloads.reduce((acc, d) => acc + (d.progress ?? 0), 0) / downloads.length\n\n return (\n <>\n {\n setAnchorEl(e.currentTarget)\n setOpen(true)\n }}\n style={{\n position: 'fixed',\n right: '16px',\n bottom: '16px',\n zIndex: 100,\n backgroundColor: theme.palette.background.paper,\n borderRadius: '8px',\n }}\n >\n \n
\n \n {!allFinished && (\n \n )}\n
\n
\n \n \n \n \n {\n setAnchorEl(null)\n setOpen(false)\n }}\n anchorOrigin={{\n vertical: 'top',\n horizontal: 'right',\n }}\n >\n \n {downloads.map((d) => (\n {\n await mutateDelete({ download: d })\n }}\n >\n \n \n }\n >\n \n
\n \n {(d.status === 'pending' || d.status === 'processing') && (\n \n )}\n
\n
\n \n }\n />\n \n ))}\n
\n \n {\n setError(undefined)\n }}\n >\n \n \n \n \n \n )\n}\n","import ReactGA from 'react-ga4'\n\nexport const initializeGA = (\n userId: string,\n club: string,\n lang: string,\n license: string,\n) => {\n if (import.meta.env.VITE_GA_MEASUREMENT_ID) {\n ReactGA.initialize(import.meta.env.VITE_GA_MEASUREMENT_ID, {\n testMode: import.meta.env.DEV,\n // gaOptions: {\n // debug_mode: true,\n // },\n // gtagOptions: {\n // debug_mode: true,\n // },\n })\n\n ReactGA.set({\n user_id: userId,\n user_properties: {\n club,\n lang,\n license,\n },\n })\n }\n}\n","import { create } from 'zustand'\n\ntype HeadingStore = {\n heading: string\n setHeading: (heading: string) => void\n}\n\nexport const useHeadingStore = create()((set) => ({\n heading: '',\n setHeading: (heading: string) => {\n set({ heading })\n },\n}))\n","import ar from 'i18n/messages/ar.json'\nimport de from 'i18n/messages/de.json'\nimport en from 'i18n/messages/en.json'\nimport es from 'i18n/messages/es.json'\nimport hr from 'i18n/messages/hr.json'\nimport nl from 'i18n/messages/nl.json'\n\nexport type Locale = 'en' | 'de' | 'es' | 'nl' | 'ar' | 'hr'\n\nexport const isSupportedLocale = (locale: string): locale is Locale => {\n return ['en', 'de', 'es', 'nl', 'ar', 'hr'].includes(locale)\n}\n\ntype Messages = {\n en: typeof en\n de: typeof de\n es: typeof es\n nl: typeof nl\n ar: typeof ar\n hr: typeof hr\n}\n\nexport const messages: Messages = {\n en,\n de,\n es,\n nl,\n ar,\n hr,\n}\n","import { createJSONStorage, persist } from 'zustand/middleware'\nimport { create } from 'zustand'\n\nimport { Locale, isSupportedLocale } from 'i18n'\n\nexport const LOCALE_LABELS = [\n {\n code: 'en',\n text: 'EN',\n },\n {\n code: 'de',\n text: 'DE',\n },\n {\n code: 'es',\n text: 'ES',\n },\n {\n code: 'nl',\n text: 'NL',\n },\n {\n code: 'ar',\n text: 'AR',\n },\n {\n code: 'hr',\n text: 'HR',\n },\n]\n\n// type Hook = () => [Locale, (locale: Locale) => void]\n\ntype LocaleStore = {\n locale: Locale\n setLocale: (locale: Locale) => void\n}\n\n// const stateLink = createState(\n// (navigator.language.slice(0, 2) as Locale) !== null\n// ? (navigator.language.slice(0, 2) as Locale)\n// : 'en',\n// ).attach(Persistence('locale-key'))\nconst currentLocale = navigator.language.slice(0, 2) as Locale\n\nexport const useLocaleStore = create()(\n persist(\n (set) => ({\n locale: isSupportedLocale(currentLocale) ? currentLocale : 'en',\n setLocale: (locale: Locale) => {\n set({ locale })\n },\n }),\n { name: 'locale-key', storage: createJSONStorage(() => localStorage) },\n ),\n)\n\nexport const useLocale = (): [Locale, (locale: Locale) => void] => {\n const state = useLocaleStore()\n return [state.locale, state.setLocale]\n}\n","import { FormattedMessage } from 'react-intl'\nimport useAxios from 'axios-hooks'\nimport { useEffect } from 'react'\nimport { useKeycloak } from '@react-keycloak/web'\n\nimport { Club } from 'features/club/types'\nimport { initializeGA } from 'lib/google-analytics'\nimport { theme } from 'styles/theme'\nimport { useClubStore } from 'features/club/store'\nimport { useHeadingStore } from 'utils/headingStore'\n\nimport { useLocale } from '../hooks/useLocale'\n\n// Add a type declaration for window.webkit\ninterface WebkitWindow extends Window {\n webkit?: {\n messageHandlers?: {\n userInfo: {\n postMessage: (message: any) => void\n }\n }\n }\n}\n\ndeclare const window: WebkitWindow\n\nconst noClubSet = (currentClub: Club | undefined) => !currentClub\nconst userBelongsToCurrentlySetClub = (\n currentClub: Club | undefined,\n allClubs: Club[],\n) => currentClub && allClubs.map((c) => c._id).includes(currentClub._id)\n\nexport const Header = () => {\n const { club, setClub } = useClubStore()\n const heading = useHeadingStore((state) => state.heading)\n // const [countdown, setCountdown] = useState('')\n // const [openDialog, setOpenDialog] = useState(false)\n const [locale] = useLocale()\n const [{ data: allClubs }] = useAxios('clubs')\n const { keycloak } = useKeycloak()\n\n // TODO: move to a more general place!\n useEffect(() => {\n if (!allClubs) return\n\n if (noClubSet(club) || !userBelongsToCurrentlySetClub(club, allClubs)) {\n setClub(allClubs[0])\n }\n }, [club, allClubs, setClub])\n\n useEffect(() => {\n if (!keycloak.subject || club === undefined) return\n const { license } = keycloak.tokenParsed as { license: Array }\n let userLicense = 'basic'\n license.map((club_cred: any) => {\n if (club_cred.tenent === club._id) {\n userLicense = club_cred.plan\n }\n return null\n })\n\n const keycloakRoles = keycloak.resourceAccess?.replay.roles ?? []\n if (!keycloakRoles.includes('zone14')) {\n initializeGA(keycloak.subject, club.name, locale, userLicense)\n }\n\n // Send info to native app\n if (\n window.webkit &&\n window.webkit.messageHandlers &&\n window.webkit.messageHandlers.userInfo\n ) {\n window.webkit.messageHandlers.userInfo.postMessage({\n userId: keycloak.subject,\n token: keycloak.token,\n })\n }\n }, [keycloak, club, locale])\n\n // useEffect(() => {\n // const countdownDate = new Date('2024-04-04T09:00:00').getTime()\n\n // const interval = setInterval(() => {\n // const now = new Date().getTime()\n // const distance = countdownDate - now\n\n // const days = Math.floor(distance / (1000 * 60 * 60 * 24))\n // const hours =\n // days * 24 +\n // Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60))\n // const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60))\n // const seconds = Math.floor((distance % (1000 * 60)) / 1000)\n\n // setCountdown(`${hours}h ${minutes}m ${seconds}s `)\n // }, 1000)\n\n // return () => clearInterval(interval) // Clear interval on component unmount\n // }, [])\n\n return (\n \n {/* \n \n */}\n

\n {heading && }\n

\n
\n {/* setOpenDialog(true)}\n className=\"text-left text-xs md:text-sm\"\n >\n Design Preview ✨\n
\n {countdown}\n \n setOpenDialog(false)}>\n Replay in fancy 💅✨\n \n \n }} />\n \n \n \n \n \n */}\n \n )\n}\n","import { SvgIcon } from '@mui/material'\n\nexport const BoxIcon = () => (\n \n \n \n \n \n)\n","import { Link as LinkNeedFix, LinkProps } from '@tanstack/react-location'\nimport { forwardRef } from 'react'\n\nexport const Link = forwardRef((props, ref) => {\n return \n})\n","import { SvgIcon } from '@mui/material'\n\nexport const Zone14Icon = () => (\n \n \n \n \n \n \n)\n","import { useCallback, useMemo } from 'react'\nimport { useKeycloak } from '@react-keycloak/web'\n\nimport { Roles } from 'lib/keycloak'\n\ntype UserAuth = {\n hasAdminRole: boolean\n hasAnalystRole: boolean\n hasCoachRole: boolean\n hasLocalVideoRole: boolean\n hasMatchDownloaderRole: boolean\n hasMatchPlannerRole: boolean\n hasShareRole: boolean\n hasPainterRole: boolean\n hasViewerRole: boolean\n hasStatsViewerRole: boolean\n hasDeviceManagerRole: boolean\n hasTrainingPlannerRole: boolean\n hasUserManagerRole: boolean\n hasPreviewRole: boolean\n hasSoundRole: boolean\n isAuthenticated: boolean\n isDemo: (clubId: string) => boolean\n logout: () => void\n}\n\ntype KeycloakWithLicense = Keycloak.KeycloakTokenParsed & {\n license: {\n tenent: string\n plan: string\n }[]\n}\n\n// To be used inside UI components. For routing, use the helpers in `keycloak.ts`\nexport const useAuth = (): UserAuth => {\n const { keycloak } = useKeycloak()\n\n const keycloakRoles = useMemo(\n () => keycloak.resourceAccess?.replay.roles ?? [],\n [keycloak.resourceAccess?.replay.roles],\n )\n\n const hasRole = useCallback(\n (role: Roles) => keycloakRoles.includes(role),\n [keycloakRoles],\n )\n\n const isDemo = useCallback(\n (clubId: string) => {\n // idtoken parsed is [{tenent: '5f72fa2fe846b29f5f24be8c', plan: 'live'}]\n // check if the tenent is the demo club\n const tokenWithLicense = keycloak.idTokenParsed as KeycloakWithLicense\n if (tokenWithLicense && tokenWithLicense.license) {\n return tokenWithLicense.license.some(\n (token: { tenent: string; plan: string }) =>\n token.tenent === clubId && token.plan === 'demo',\n )\n }\n return false\n },\n [keycloak],\n )\n\n const logout = useCallback(() => {\n keycloak.logout()\n }, [keycloak])\n\n return useMemo(\n () => ({\n hasAdminRole: hasRole('admin'),\n hasAnalystRole: hasRole('analyst'),\n hasCoachRole: hasRole('coach'),\n hasLocalVideoRole: hasRole('local_video'),\n hasMatchDownloaderRole: hasRole('match_downloader'),\n hasMatchPlannerRole: hasRole('match_planner'),\n hasPainterRole: hasRole('painter'),\n hasViewerRole: hasRole('viewer'),\n hasStatsViewerRole: hasRole('stats_viewer'),\n hasShareRole: hasRole('sharer'),\n hasDeviceManagerRole: hasRole('device_manager'),\n hasTrainingPlannerRole: hasRole('training_planner'),\n hasUserManagerRole: hasRole('user_manager'),\n hasPreviewRole: hasRole('preview'),\n hasSoundRole: hasRole('sound'),\n isAuthenticated: keycloak.authenticated ?? false,\n isDemo,\n logout,\n }),\n [hasRole, isDemo, keycloak.authenticated, logout],\n )\n}\n","import { create } from 'zustand'\n\ntype MenuOpenStore = {\n isMenuOpen: boolean\n toggleMenuOpen: () => void\n}\n\nexport const useMenuOpenStore = create()((set) => ({\n isMenuOpen: false,\n toggleMenuOpen: () => {\n set(({ isMenuOpen }) => ({\n isMenuOpen: !isMenuOpen,\n }))\n },\n}))\n\nexport const useMenuOpen = (): [boolean, () => void] => {\n const state = useMenuOpenStore()\n\n return [state.isMenuOpen, state.toggleMenuOpen]\n}\n","import { useMediaQuery } from '@mui/material'\n\nexport const useResponsive = () => {\n const isMobile = useMediaQuery('(max-width: 767px)')\n const isNotMobile = useMediaQuery('(min-width: 768px)')\n\n return { isMobile, isNotMobile }\n}\n","import {\n BottomNavigation,\n BottomNavigationAction,\n Divider,\n Drawer,\n IconButton,\n List,\n ListItem,\n ListItemButton,\n ListItemIcon,\n ListItemText,\n Menu,\n MenuItem,\n Paper,\n Theme,\n useTheme,\n} from '@mui/material'\nimport {\n ChevronLeftSharp as ChevronLeftIcon,\n ChevronRightSharp as ChevronRightIcon,\n DarkModeSharp,\n DateRangeSharp as DateRangeIcon,\n ExitToAppSharp as ExitToAppIcon,\n GroupSharp as GroupIcon,\n LightModeSharp,\n MoreVertSharp as MoreVertIcon,\n PlayCircleOutlineSharp as PlayCircleOutlineIcon,\n SettingsSharp as SettingsIcon,\n SmartphoneSharp as SmartphoneIcon,\n SubscriptionsSharp as SubscriptionsIcon,\n} from '@mui/icons-material'\nimport { createStyles, makeStyles } from '@mui/styles'\nimport { FormattedMessage } from 'react-intl'\nimport clsx from 'clsx'\nimport { useLocation } from 'react-use'\nimport { useState } from 'react'\n\nimport { useClubStore, useThemeStore } from 'features/club/store'\nimport { BoxIcon } from 'features/app/components/BoxIcon'\nimport { Link } from 'components/Link'\nimport { Zone14Icon } from 'features/app/components/Zone14Icon'\nimport { useAuth } from 'features/app/hooks/useAuth'\nimport { useMenuOpen } from 'features/app/hooks/useMenuOpen'\nimport { useResponsive } from 'features/app/hooks/useResponsive'\n\nconst drawerHidden = 100\nconst drawerWidth = 240\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n drawer: {\n width: drawerWidth,\n flexShrink: 0,\n whiteSpace: 'nowrap',\n [theme.breakpoints.down('md')]: {\n display: 'none',\n },\n borderRight: 'none',\n color: theme.palette.text.primary,\n },\n drawerOpen: {\n width: drawerWidth,\n transition: theme.transitions.create('width', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.enteringScreen,\n }),\n display: 'flex',\n },\n drawerClose: {\n transition: theme.transitions.create('width', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n overflowX: 'hidden',\n width: drawerHidden,\n [theme.breakpoints.up('md')]: {\n width: drawerHidden,\n },\n borderRight: 'none',\n // backgroundColor: 'rgba(255,255,255,0.2)',\n },\n toolbar: {\n [theme.breakpoints.up('md')]: {\n display: 'none',\n },\n display: 'flex',\n alignItems: 'center',\n /* justifyContent: 'flex-end', */\n padding: theme.spacing(0, 1),\n // necessary for content to be below app bar\n ...theme.mixins.toolbar,\n },\n listItemButton: {\n [theme.breakpoints.up('md')]: {\n flexDirection: 'column',\n },\n borderRadius: '24px',\n '&:hover': {\n Color: theme.palette.primary.main, // TODO: find out why not working!\n },\n },\n listItemIcon: {\n [theme.breakpoints.up('md')]: {\n minWidth: 'auto',\n },\n },\n }),\n)\n\nexport const Sidebar = () => {\n const { club } = useClubStore()\n const classes = useStyles()\n const muitheme = useTheme()\n const [open, toggleMenuOpen] = useMenuOpen()\n const {\n hasUserManagerRole,\n hasDeviceManagerRole,\n hasAnalystRole,\n hasCoachRole,\n hasViewerRole,\n hasMatchPlannerRole,\n logout,\n } = useAuth()\n\n const { isMobile } = useResponsive()\n\n const { theme, setTheme } = useThemeStore()\n\n const location = useLocation()\n\n const getValueFromPath = (path: string | undefined) => {\n if (path && path.startsWith('/matches')) return 0\n if (path && path.startsWith('/live')) return 1\n if (path && path.startsWith('/playlists')) return 2\n if (path && path.startsWith('/matchcalendar')) return 3\n return -1\n }\n\n const [value, setValue] = useState(getValueFromPath(location.pathname))\n\n // const [value, setValue] = useState(0)\n const [anchorEl, setAnchorEl] = useState(null)\n const openSub = Boolean(anchorEl)\n\n const handleClick = (event: React.MouseEvent) => {\n setAnchorEl(event.currentTarget)\n }\n\n const handleClose = () => {\n setAnchorEl(null)\n }\n\n if (!isMobile) {\n return (\n {\n if (isMobile) {\n toggleMenuOpen()\n }\n }}\n className={clsx([\n classes.drawer,\n open && classes.drawerOpen,\n !open && classes.drawerClose,\n ])}\n classes={{\n paper: clsx([\n open && classes.drawerOpen,\n !open && classes.drawerClose,\n ]),\n }}\n >\n
\n {\n // the click event fires 2 times, one from the drawer's onClick, if we don't stop it here\n if (!isMobile) {\n toggleMenuOpen()\n }\n }}\n >\n {muitheme.direction === 'rtl' ? (\n \n ) : (\n \n )}\n \n
\n {!isMobile && (\n \n \n \n )}\n

\n {' '}\n {club?.name}\n

\n \n {/* */}\n \n {(hasCoachRole || hasAnalystRole || hasViewerRole) && (\n \n \n \n \n \n }\n disableTypography\n style={{ fontSize: '0.85rem' }}\n />\n \n \n )}\n {(hasCoachRole || hasAnalystRole) && (\n \n \n \n \n \n }\n disableTypography\n style={{ fontSize: '0.85rem' }}\n />\n \n \n )}\n {(hasCoachRole || hasAnalystRole || hasViewerRole) && (\n \n \n \n \n \n }\n disableTypography\n style={{ fontSize: '0.85rem' }}\n />\n \n \n )}\n {(hasCoachRole || hasMatchPlannerRole) && (\n \n \n \n \n \n }\n disableTypography\n style={{ fontSize: '0.85rem' }}\n />\n \n \n )}\n {hasUserManagerRole && (\n \n \n \n \n \n }\n disableTypography\n style={{ fontSize: '0.85rem' }}\n />\n \n \n )}\n {hasDeviceManagerRole && (\n \n \n \n \n \n }\n disableTypography\n style={{ fontSize: '0.85rem' }}\n />\n \n \n )}\n \n {\n setTheme({\n mode: theme.mode === 'light' ? 'dark' : 'light',\n primaryColor: theme.primaryColor,\n })\n window.location.reload()\n }}\n >\n \n {theme.mode === 'light' ? (\n \n ) : (\n \n )}\n \n \n ) : (\n \n )\n }\n disableTypography\n style={{ fontSize: '0.85rem' }}\n />\n \n \n \n \n \n \n \n \n }\n disableTypography\n style={{ fontSize: '0.85rem' }}\n />\n \n \n \n \n \n \n \n }\n disableTypography\n style={{ fontSize: '0.85rem' }}\n />\n \n \n \n \n )\n }\n\n return (\n \n {\n setValue(newValue)\n }}\n showLabels\n sx={{\n '& .MuiBottomNavigationAction-label': { fontSize: '0.65rem' },\n }}\n >\n {(hasCoachRole || hasAnalystRole || hasViewerRole) && (\n }\n icon={}\n component={Link}\n to=\"/matches\"\n sx={{\n '& .MuiBottomNavigationAction-label': {\n fontSize: '0.65rem',\n whiteSpace: 'nowrap',\n },\n }}\n />\n )}\n {(hasCoachRole || hasAnalystRole) && (\n }\n icon={}\n component={Link}\n to=\"/live\"\n sx={{\n '& .MuiBottomNavigationAction-label': {\n fontSize: '0.65rem',\n whiteSpace: 'nowrap',\n },\n }}\n />\n )}\n {(hasCoachRole || hasAnalystRole || hasViewerRole) && (\n }\n icon={}\n component={Link}\n to=\"/playlists\"\n sx={{\n '& .MuiBottomNavigationAction-label': {\n fontSize: '0.65rem',\n whiteSpace: 'nowrap',\n },\n }}\n />\n )}\n {(hasCoachRole || hasMatchPlannerRole) && (\n }\n icon={}\n component={Link}\n to=\"/matchcalendar\"\n sx={{\n '& .MuiBottomNavigationAction-label': {\n fontSize: '0.65rem',\n whiteSpace: 'nowrap',\n },\n }}\n />\n )}\n }\n icon={}\n onClick={handleClick}\n sx={{\n '& .MuiBottomNavigationAction-label': {\n fontSize: '0.65rem',\n whiteSpace: 'nowrap',\n },\n }}\n />\n \n \n {hasUserManagerRole && (\n \n \n \n \n } />\n \n )}\n {hasDeviceManagerRole && (\n \n \n \n \n } />\n \n )}\n {\n setTheme({\n mode: theme.mode === 'light' ? 'dark' : 'light',\n primaryColor: theme.primaryColor,\n })\n window.location.reload()\n handleClose()\n }}\n >\n \n {theme.mode === 'light' ? : }\n \n \n ) : (\n \n )\n }\n />\n \n \n \n \n \n } />\n \n \n \n \n \n } />\n \n \n \n )\n}\n","import { createStyles, makeStyles } from '@mui/styles'\nimport { ReactNode } from 'react'\nimport { Theme } from '@mui/material'\nimport clsx from 'clsx'\n\nimport { ChangeCrabWidget } from 'features/releasenotes/components/ChangeCrabWidget'\nimport { DownloadsMenu } from 'features/downloads/components/DownloadsMenu'\nimport { Header } from 'features/app/components/Header'\nimport { Sidebar } from 'features/app/components/Sidebar'\nimport { useMenuOpen } from 'features/app/hooks/useMenuOpen'\n\nimport './App.css'\n\nconst drawerHidden = 100\nconst drawerWidth = 240\n\nconst bottomNavigationHeight = 56\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n content: {\n flexGrow: 1,\n padding: theme.spacing(2),\n height: '100%',\n minHeight: 'calc(100vh - 80px)',\n [theme.breakpoints.down('md')]: {\n width: '100%',\n },\n [theme.breakpoints.up('md')]: {\n marginLeft: `${drawerHidden}px`,\n width: `calc(100% - ${drawerHidden}px)`,\n },\n backgroundColor: theme.palette.background.default,\n [theme.breakpoints.down('sm')]: {\n marginBottom: `${bottomNavigationHeight}px`,\n },\n },\n contentShift: {\n [theme.breakpoints.up('md')]: {\n marginLeft: drawerWidth,\n width: `calc(100% - ${drawerWidth}px)`,\n transition: theme.transitions.create(['width', 'margin'], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.enteringScreen,\n }),\n },\n },\n }),\n)\n\nexport const Layout = ({ children }: { children: ReactNode }) => {\n const classes = useStyles()\n const [open] = useMenuOpen()\n return (\n
\n
\n \n \n \n \n {children}\n \n
\n )\n}\n","import { CircularProgress, Grid } from '@mui/material'\nimport { ReactNode } from 'react'\n\nimport { useAuth } from 'features/app/hooks/useAuth'\n\ntype SplashProps = {\n children: ReactNode\n}\n\nexport const Splash = (props: SplashProps) => {\n const { children } = props\n\n const { isAuthenticated } = useAuth()\n\n return (\n
\n {isAuthenticated ? (\n children\n ) : (\n \n \n \n \n \n )}\n
\n )\n}\n","/* eslint-disable eslint-comments/disable-enable-pair */\n/* eslint-disable max-classes-per-file */\n/* eslint-disable consistent-return */\n/* eslint-disable promise/always-return */\n/* eslint-disable promise/no-nesting */\n// TODO: get rid of Dexie and use https://github.com/jakearchibald/idb\nimport Dexie, { Table } from 'dexie'\n\n// IMPORTANT! - When you need to modify the schema, also update the version number\n// --> https://dexie.org/docs/Tutorial/Understanding-the-basics#modify-schema\nexport const DB_VERSION = 13\n\n// This is needed so we can drop all previous data\n// NOTE: https://github.com/dexie/Dexie.js/issues/349\nclass MyDexie extends Dexie {\n private static readonly targetVersion = DB_VERSION\n\n public open() {\n if (this.isOpen()) return super.open()\n\n return Dexie.Promise.resolve()\n .then(() => Dexie.exists(this.name))\n .then((exists) => {\n if (!exists) {\n // no need to check database version since it doesn't exist\n return\n }\n\n // Open separate instance of dexie to get current database version\n return new Dexie(this.name).open().then(async (db) => {\n if (db.verno >= MyDexie.targetVersion) {\n // database up to date (or newer)\n return db.close()\n }\n\n // eslint-disable-next-line no-console\n console.log(\n `Database schema out of date, resetting all data. (currentVersion: ${db.verno}, expectedVersion: ${MyDexie.targetVersion})`,\n )\n await db.delete()\n\n // ensure the delete was successful\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const exists = await Dexie.exists(this.name)\n if (exists) {\n throw new Error('Failed to remove mock backend database.')\n }\n })\n })\n .then(() => super.open())\n }\n}\n\nexport interface Clips {\n eventId: string\n type: 'panoramic' | 'tactical'\n blob: Blob\n timestamp: number\n}\n\nexport interface Playlists {\n playlistId: string\n timestamp: number\n}\n\nexport class Zone14Videos extends MyDexie {\n clips!: Table\n\n playlists!: Table\n\n constructor() {\n super('zone14EventClips')\n this.version(DB_VERSION).stores({\n clips: '[eventId+type], timestamp', // Primary key and indexed props\n playlists: 'playlistId, timestamp', // Primary key and indexed props\n })\n }\n}\n\nexport const db = new Zone14Videos()\n","import { db } from 'lib/dexie'\n\nexport const clearPlaylistFromCache = async (params: {\n playlistId: string\n eventIds: string[]\n}) => {\n const { playlistId, eventIds } = params\n\n await db.clips.where('eventId').anyOf(eventIds).delete()\n await db.playlists.where('playlistId').anyOf([playlistId]).delete()\n}\n\nexport const clearOldPlaylistsFromCache = async () => {\n const oneWeekInMs = 1000 * 60 * 60 * 24 * 7\n const now = Date.now()\n\n await db.playlists\n .where('timestamp')\n .belowOrEqual(now - oneWeekInMs)\n .delete()\n await db.clips\n .where('timestamp')\n .belowOrEqual(now - oneWeekInMs)\n .delete()\n}\n","import { Navigate, Route } from '@tanstack/react-location'\n\nexport const routes: Route[] = [\n // matches\n {\n path: 'matches',\n children: [\n {\n path: '/',\n import: () =>\n import('features/matches/routes/matchesModule').then(\n (module) => module.matchesModule,\n ),\n },\n {\n path: 'add',\n import: () =>\n import('features/matches/routes/addLocalMatchModule').then(\n (module) => module.addLocalMatchModule,\n ),\n },\n {\n path: ':matchId',\n children: [\n {\n path: '/',\n\n import: () =>\n import('features/matches/routes/matchDetailModule').then(\n (module) => module.matchDetailModule,\n ),\n },\n {\n path: 'stats',\n children: [\n {\n path: ':teamId',\n children: [\n {\n path: '/',\n import: () =>\n import('features/matches/routes/statsModule').then(\n (module) => module.statsModule,\n ),\n },\n {\n path: '/review',\n children: [\n {\n path: '/',\n import: () =>\n import(\n 'features/review/routes/statsCorrectionModule'\n ).then((module) => module.statsCorrectionModule),\n },\n {\n path: ':situationIndex',\n import: () =>\n import(\n 'features/review/routes/statsCorrectionModule'\n ).then((module) => module.statsCorrectionModule),\n },\n ],\n },\n ],\n },\n ],\n },\n ],\n },\n ],\n },\n\n // livetagging\n {\n path: 'live',\n children: [\n {\n path: '/',\n import: () =>\n import('features/tagging/routes/liveTaggingListModule').then(\n (module) => module.liveTaggingList,\n ),\n },\n {\n path: ':matchId',\n import: () =>\n import('features/tagging/routes/liveTaggingDetailModule').then(\n (module) => module.liveTaggingDetail,\n ),\n },\n ],\n },\n\n // playlists\n {\n path: 'playlists',\n children: [\n {\n path: '/',\n import: () =>\n import('features/playlists/routes/playlistsOverviewModule').then(\n (module) => module.playlistsOverviewModule,\n ),\n },\n {\n path: ':playlistId',\n import: () =>\n import('features/playlists/routes/playlistsDetailModule').then(\n (module) => module.playlistDetailModule,\n ),\n },\n ],\n },\n\n // players\n {\n path: 'players',\n children: [\n {\n path: '/',\n import: () =>\n import('features/players/routes/playersModule').then(\n (module) => module.playersModule,\n ),\n },\n ],\n },\n\n // calendar\n {\n path: 'matchcalendar',\n children: [\n {\n path: '/',\n import: () =>\n import('features/calendar/routes/matchCalendarModule').then(\n (module) => module.matchCalendarModule,\n ),\n },\n {\n path: 'add',\n import: () =>\n import('features/calendar/routes/addMatchModule').then(\n (module) => module.addMatchModule,\n ),\n },\n ],\n },\n\n {\n path: 'sharing',\n children: [\n {\n path: ':shareKey',\n import: () =>\n import('features/sharing/routes/addSharedMatchModule').then(\n (module) => module.addSharedMatchModule,\n ),\n },\n ],\n },\n\n //\n // users\n {\n path: 'users',\n children: [\n {\n path: '/',\n import: () =>\n import('features/users/routes/usersModule').then(\n (module) => module.usersModule,\n ),\n },\n {\n path: 'add',\n import: () =>\n import('features/users/routes/addUsersModule').then(\n (module) => module.addUsersModule,\n ),\n },\n ],\n },\n\n // devices\n {\n path: 'devices',\n children: [\n {\n path: '/',\n import: () =>\n import('features/devices/routes/devicesModule').then(\n (module) => module.devicesModule,\n ),\n },\n {\n path: 'admin',\n import: () =>\n import('features/devices/routes/devicesAdminModule').then(\n (module) => module.devicesAdminModule,\n ),\n },\n {\n path: ':deviceId',\n import: () =>\n import('features/devices/routes/deviceDetailModule').then(\n (module) => module.deviceDetailModule,\n ),\n },\n ],\n },\n\n // settings\n {\n path: 'settings',\n children: [\n {\n path: '/',\n import: () =>\n import('features/settings/routes/settingsModule').then(\n (module) => module.settingsModule,\n ),\n },\n ],\n },\n // {\n // path: 'under-construction',\n // children: [\n // {\n // path: '/',\n // import: () =>\n // import(\n // 'features/under-construction/routes/underConstructionModule'\n // ).then((module) => module.underConstructionModule),\n // },\n // ],\n // },\n\n // fallback -- passing no route is equivalent to passing `path: '*'`\n {\n element: ,\n },\n]\n","/* eslint-disable eslint-comments/disable-enable-pair */\n/* eslint-disable no-nested-ternary */\nimport {\n Box,\n Button,\n Dialog,\n DialogContent,\n DialogTitle,\n IconButton,\n MobileStepper,\n Step,\n StepLabel,\n Stepper,\n Typography,\n} from '@mui/material'\nimport {\n CloseSharp as CloseIcon,\n KeyboardArrowLeftSharp as KeyboardArrowLeftIcon,\n KeyboardArrowRightSharp as KeyboardArrowRightIcon,\n} from '@mui/icons-material'\nimport { FormattedMessage } from 'react-intl'\nimport { useState } from 'react'\n\nimport { IntroductionModalObj } from 'features/app/hooks/useIntroductionModal'\nimport { useResponsive } from 'features/app/hooks/useResponsive'\n\ntype IntroductionModalProps = {\n modal: IntroductionModalObj\n onClose: () => void\n}\n\nexport const IntroductionModal = ({\n modal,\n onClose,\n}: IntroductionModalProps) => {\n const { isMobile } = useResponsive()\n const [activeStep, setActiveStep] = useState(0)\n const maxSteps = modal.steps.length\n\n const handleNext = () => {\n if (activeStep === maxSteps - 1) {\n onClose()\n } else {\n setActiveStep(activeStep + 1)\n }\n }\n const handlePrev = () => {\n setActiveStep(activeStep - 1)\n }\n\n return (\n \n \n \n theme.palette.grey[500],\n }}\n >\n \n \n \n \n \n {isMobile && (\n \n {activeStep === modal.steps.length - 1 ? 'Finish' : 'Next'}{' '}\n \n \n }\n backButton={\n \n Back\n \n }\n />\n )}\n\n {!isMobile && (\n \n {modal.steps.map((step) => {\n return (\n \n \n \n \n \n )\n })}\n \n )}\n\n
\n \n \n
\n \n \n \n {!isMobile && (\n \n \n Back\n \n \n \n )}\n \n
\n
\n
\n )\n}\n","import { useMutation, useQueryClient } from '@tanstack/react-query'\nimport { useMemo } from 'react'\n\nimport { api, apiHooks } from 'api'\n\n// eslint-disable-next-line no-restricted-imports\nimport existingIntroductionModals from '../../../resources/IntroductionModal/introductionModals.json'\n\nimport { ReplayUserUpdate } from './useIntroductionModalTypes'\n\nexport type ItroductionModalStep = {\n title: string\n video: string\n text: string\n}\n\nexport type IntroductionModalObj = {\n id: string\n heading: string\n steps: Array\n}\n\nconst useMutateUser = () => {\n const queryClient = useQueryClient()\n\n const key = apiHooks.getKeyByPath('get', '/users/current_user', {})\n\n return useMutation(({ user }) => api.patch('/users/current_user', user), {\n // When mutate is called:\n onMutate: async ({ user }: { user: ReplayUserUpdate }) => {\n queryClient.cancelQueries(key)\n\n const previousUser = queryClient.getQueryData(key)\n\n const updatedUser = { ...previousUser, ...user }\n\n queryClient.setQueryData(key, updatedUser)\n\n return { previousUser }\n },\n onError: () => {\n // don't do anything on error to not bother the user if there is a problem at the server\n },\n onSuccess: () => {\n // normally we would invalidate the onSettled, here we only do on success\n queryClient.invalidateQueries(key)\n },\n })\n}\n\nexport const useIntroductionModal = () => {\n const { data: replayUser, isLoading } = apiHooks.useGet(\n '/users/current_user',\n undefined,\n {\n refetchOnMount: false,\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n },\n )\n\n const introductionModals = useMemo(() => {\n if (replayUser === undefined) return undefined\n\n if (replayUser.shownIntroductionScreens.length === 0)\n return existingIntroductionModals\n\n return existingIntroductionModals.filter(\n (introductionModal) =>\n !replayUser.shownIntroductionScreens.includes(introductionModal.id),\n )\n }, [replayUser])\n\n const { mutate, isLoading: isLoadingMutate } = useMutateUser()\n\n const setShown = (id: string) => {\n const user: ReplayUserUpdate = {\n shownIntroductionScreens: [id],\n }\n return mutate({ user })\n }\n\n return { introductionModals, isLoading, isLoadingMutate, setShown }\n}\n","import { ReactNode } from 'react'\n// import { useRouter } from '@tanstack/react-location'\n\nimport { IntroductionModal } from 'components/IntroductionModal'\n\nimport { useIntroductionModal } from '../hooks/useIntroductionModal'\n\nexport const IntroductionModalProvider = ({\n children,\n}: {\n children: ReactNode\n}) => {\n // TODO: use if going to use route-dependent screens!\n // const router = useRouter()\n /* const pathName = useMemo(\n () => router.state.matches.slice(-1).pop()?.pathname,\n [router.state.matches],\n ) */\n\n const { introductionModals, setShown } = useIntroductionModal()\n\n const currentModal =\n introductionModals && introductionModals.length > 0\n ? introductionModals[0]\n : undefined\n\n const handleClose = () => {\n if (currentModal !== undefined) {\n setShown(currentModal.id)\n }\n }\n return (\n <>\n {currentModal !== undefined && (\n \n )}\n {children}\n \n )\n}\n","import { useEffect, useState } from 'react'\nimport { CircularProgress } from '@mui/material'\nimport { FormattedMessage } from 'react-intl'\n\ntype SlowType = 'slow' | 'superslow' | 'omg'\n\nexport const PendingLoader = () => {\n const [showSlow, setShowSlowLoad] = useState()\n\n useEffect(() => {\n const slowTimer = setTimeout(() => setShowSlowLoad('slow'), 3000)\n const superSlowTimer = setTimeout(() => setShowSlowLoad('superslow'), 15000)\n const omgSlowTimer = setTimeout(() => setShowSlowLoad('omg'), 25000)\n\n return () => {\n clearTimeout(slowTimer)\n clearTimeout(superSlowTimer)\n clearTimeout(omgSlowTimer)\n }\n }, [setShowSlowLoad])\n\n return (\n
\n \n {showSlow === 'slow' && (\n <>\n 👀\n \n )}\n {showSlow === 'superslow' && (\n <>\n 🐌\n \n )}\n {showSlow === 'omg' && (\n <>\n 🤔\n \n )}\n
\n )\n}\n","import * as Sentry from '@sentry/react'\nimport { Outlet, ReactLocation, Router } from '@tanstack/react-location'\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query'\nimport { StyledEngineProvider, ThemeProvider } from '@mui/material/styles'\nimport { CssBaseline } from '@mui/material'\nimport { IntlProvider } from 'react-intl'\nimport { ReactKeycloakProvider } from '@react-keycloak/web'\nimport { ReactQueryDevtools } from '@tanstack/react-query-devtools'\nimport { configure as configureAxiosHooks } from 'axios-hooks'\nimport { hotjar } from 'react-hotjar'\nimport { useEffect } from 'react'\n\nimport { keycloak, keycloakInitOptions } from 'lib/keycloak'\nimport { Analytics } from 'features/app/components/Analytics'\n// import { GTagProvider } from 'components/GTag'\nimport { Layout } from 'features/app/components/Layout'\nimport { Splash } from 'features/app/components/Splash'\nimport { clearOldPlaylistsFromCache } from 'features/playlists/cache/clear'\nimport { messages } from 'i18n'\nimport { replay } from 'lib/axios'\nimport { routes } from 'features/app/routes'\nimport { theme } from 'styles/theme'\nimport { useLocale } from 'features/app/hooks/useLocale'\n\nimport { IntroductionModalProvider } from '../components/IntroductionModalProvider'\nimport { PendingLoader } from '../components/PendingLoader'\n\nconst location = new ReactLocation()\nconst queryClient = new QueryClient()\n\nconst App = () => {\n const [locale] = useLocale()\n\n useEffect(() => {\n configureAxiosHooks({ axios: replay })\n clearOldPlaylistsFromCache()\n\n document.body.style.backgroundColor = theme.palette.background.default\n\n if (import.meta.env.VITE_HOTJAR_ID) {\n hotjar.initialize(\n import.meta.env.VITE_HOTJAR_ID,\n import.meta.env.VITE_HOTJAR_SNIPPET_VERSION,\n import.meta.env.DEV,\n )\n }\n })\n\n return (\n {\n if (hotjar.initialized()) {\n hotjar.identify(keycloak.subject || null, {})\n }\n }}\n >\n \n }\n >\n \n {/* FIXME: can remove after refactoring everything to using emotion as the style engine https://mui.com/guides/migration-v4/#style-library */}\n \n \n \n \n {/* */}\n \n \n \n \n \n \n \n {/* */}\n \n \n \n \n \n \n \n \n )\n}\n\n// eslint-disable-next-line import/no-default-export\nexport default Sentry.withProfiler(App)\n","import * as ReactDOM from 'react-dom'\nimport * as Sentry from '@sentry/react'\nimport { BrowserTracing } from '@sentry/tracing'\n\nimport * as serviceWorker from 'lib/service-worker'\nimport App from 'features/app/pages/App'\n\nimport './index.css'\n\nSentry.init({\n environment: import.meta.env.VITE_SENTRY_ENVIRONMENT,\n dsn: 'https://33541389e9194800b2d674b739fd5f1b@o1354496.ingest.sentry.io/6638224',\n integrations: [new BrowserTracing()],\n\n // Set tracesSampleRate to 1.0 to capture 100%\n // of transactions for performance monitoring.\n // We recommend adjusting this value in production\n tracesSampleRate: 1.0,\n})\n\nReactDOM.render(, document.getElementById('root'))\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister()\n"],"file":"assets/index.0643f1c9.js"}