{"version":3,"file":"options.38b83375.js","mappings":"4pCAAO,IAAKA,EAAW,SAAXA,GAAW,OAAXA,EAAAA,EAAW,eAAXA,EAAAA,EAAW,uCAAXA,EAAAA,EAAW,uBAAXA,CAAW,MAMhB,SAASC,IACd,OAAIC,eAAeC,eAAuBH,EAAYI,KAEnB,IAA/BF,eAAeG,YACVL,EAAYM,SAGdN,EAAYO,gBACrB,CAKO,SAASC,EAAcC,GAA0E,IAAAC,EAAAC,EAAAC,EAAAC,EACtG,MAAM,SAAEC,EAAWC,OAAOC,SAASF,SAAQ,MAAEG,EAAQF,OAAOC,SAASE,OAAM,iBAAEC,GAAmB,GAASV,EAKtC,IAAAW,GAHxD,QAAXV,GAAAC,EAAAI,QAAOM,YAAI,IAAAX,GAAXA,EAAAY,KAAAX,EAAc,MAAO,YAAa,GAAGG,IAAWG,EAAMM,OAAS,IAAM,KAAKN,EAAMO,QAAQ,MAAO,OACpF,QAAXZ,GAAAC,EAAAE,QAAOM,YAAI,IAAAT,GAAXA,EAAAU,KAAAT,EAAc,QAAS,aAEnBM,GAAoBlB,MAAqBD,EAAYM,YACxC,QAAfc,EAAAL,OAAOU,gBAAQ,IAAAL,GAAfA,EAAiBM,MAAMC,MAAK,IAAMF,SAASG,kBAE/C,C,8GCfO,SAASC,EAAUC,GAA6C,IAA5C,SAAEC,EAAQ,MAAEC,EAAK,KAAEC,EAAI,SAAEC,GAAiBJ,EACnE,OACEK,EAAAA,EAAAA,MAAA,OAAKC,UAAU,gCAA+BL,SAAA,CAC3CC,IACCK,EAAAA,EAAAA,KAACC,EAAAA,GAAS,CAACL,KAAK,QAAQG,UAAU,gCAA+BL,SAC9DC,IAIJO,EAAAA,SAAeC,IAAIT,GAAWU,IAC6B,IAAAC,EAA1D,OAAIH,EAAAA,eAAqBE,IAAUA,EAAME,OAASC,EAAAA,GACzCL,EAAAA,aAAmBE,EAAO,CAC/BR,OACAC,WACAW,MAAwB,QAAnBH,EAAED,EAAMhC,MAAMoC,aAAK,IAAAH,EAAAA,EAAI,kBAC5BN,UAAWU,IAAWL,EAAMhC,MAAM2B,UAAW,CAE3C,sCAAuCK,EAAMhC,MAAMsC,OACnD,kCAAmCN,EAAMhC,MAAMsC,WAK9CN,CAAK,MAIpB,CAEO,MAAMO,EAAmBJ,EAAAA,E,2FChCzB,SAASK,EAAOnB,GAAgE,IAA/D,YAAEoB,EAAW,cAAEC,EAAa,aAAEC,KAAiB3C,GAAcqB,EACnF,OACEO,EAAAA,EAAAA,KAAA,UAAS5B,EAAO2B,UAAWiB,IAAW,2DAA4D5C,EAAM2B,WAAWL,UACjHI,EAAAA,EAAAA,MAAA,OAAKC,UAAU,4EAA2EL,SAAA,EACxFM,EAAAA,EAAAA,KAAA,OACED,UAAWiB,IAAW,4BAA6B,CACjD,kBAAkBC,EAAAA,EAAAA,QACjBvB,SAEFmB,IAEFC,IAAiBd,EAAAA,EAAAA,KAAA,OAAKD,UAAU,oBAAmBL,SAAEoB,KACtDd,EAAAA,EAAAA,KAAA,OAAKD,UAAU,oBAAmBL,SAAEqB,QAI5C,C,uECjBO,SAASG,EAAWzB,GAAoC,IAAnC,MAAE0B,EAAK,KAAEvB,EAAO,UAAiBH,EAC3D,OACEO,EAAAA,EAAAA,KAAA,OAAKD,UAAU,kCAAiCL,SAC7CyB,EAAMhB,KAAIiB,IAAA,IAAC,MAAEzB,EAAK,KAAE0B,EAAI,SAAEC,EAAQ,eAAEC,GAAgBH,EAAA,OACnDpB,EAAAA,EAAAA,KAACO,EAAAA,GAAM,CAELiB,GAAIC,EAAAA,GACJC,GAAIL,EACJE,eAAgBA,EAChBf,MAAM,MACNX,SAAS,OACTa,OAAQY,EACR1B,KAAMA,EAAKF,SAEVC,GATI0B,EAUE,KAIjB,C,sECzBO,SAASM,IACd,MAAMC,EAAY1B,EAAAA,OAA6B,OACxC2B,EAAUC,GAAe5B,EAAAA,UAAe,GAuB/C,OArBAA,EAAAA,WAAgB,KACd,IAAK0B,EAAUG,QAAS,OAExB,MAAMC,EAAWC,KAAS,WACxB,MAAMC,EAAgBN,EAAUG,QAChC,IAAKG,EAAe,OAEpB,MAAMC,EAAyBC,WAAWC,iBAAiBH,GAAeI,KACpEC,EAA0BL,EAAcM,wBAAwBF,IAEtER,EAAYS,IAA4BJ,EAC1C,GAAG,KAKH,OAHAH,IACAS,SAASC,iBAAiB,SAAUV,GAE7B,KACLS,SAASE,oBAAoB,SAAUX,EAAS,CACjD,GACA,IAEI9B,EAAAA,SACL,KAAM,CACJ0B,YACAC,cAEF,CAACA,GAEL,C,gFC9BO,SAASe,EAAiBxE,GAC/B,MAAM,aAAEyE,GAAe,EAAK,mBAAEC,GAAqB,GAAS1E,QAAAA,EAAS,CAAC,EAChE2E,EAAgB7C,EAAAA,OAAa2C,GAC7BlE,GAAWqE,EAAAA,EAAAA,MAEXC,EAAkB/C,EAAAA,aAAkB,KACxCgD,EAAAA,GAAuB,CAAEzE,SAAUE,EAASF,SAAUG,MAAOD,EAASE,QAAS,GAC9E,CAACF,EAASF,SAAUE,EAASE,SAQhC,OANAqB,EAAAA,WAAgB,KACT4C,IACDC,EAAchB,SAASkB,IAC3BF,EAAchB,SAAU,EAAI,GAC3B,CAACe,EAAoBG,EAAiBJ,IAElCI,CACT,C,2FChBO,SAASE,EAAa/E,GAC3B,MAAM,UAAEwD,EAAS,SAAEC,IAAaF,EAAAA,EAAAA,KAEhC,OACE3B,EAAAA,EAAAA,KAAA,OAAKoD,IAAKxB,EAAW7B,UAAWiB,IAAW5C,EAAM2B,UAAW,4CAA4CL,UACtGM,EAAAA,EAAAA,KAAA,OACED,UAAWiB,IAAW,0BAA2B,CAC/C,8CAA+Ca,EAC/C,aAAcA,OAKxB,C,sICXA,MAAMwB,EAAa,IACbC,EAAkB,CAAEC,aAAcF,GAClCG,EAAiB,CAAED,aAAcF,EAAYI,UAAW,GAEjDC,EAAqDC,OAAOC,OAAO,CAC9E,CAACC,EAAAA,GAASC,WAAY,CACpBC,GAAIF,EAAAA,GAASC,UACbE,MAAOC,EAAAA,GAAWC,MAClBC,KAAM,aACNC,aAAeC,GACTA,EAAKC,OAASC,EAAAA,GAAQC,UAAkB,KACd,IAAvBH,EAAKI,IAAIC,UAAkBrB,GAAasB,EAAAA,EAAAA,IAAaN,EAAKI,IAAIC,UAAWpB,IAGpF,CAACO,EAAAA,GAASe,WAAY,CACpBb,GAAIF,EAAAA,GAASe,UACbZ,MAAOC,EAAAA,GAAWC,MAClBC,KAAM,WACNU,gBAAkBR,GACZA,EAAKC,OAASC,EAAAA,GAAQC,WACC,IAAvBH,EAAKI,IAAIC,UAD+B,KAErCL,EAAKI,IAAIK,WAElBV,aAAeC,GACTA,EAAKC,OAASC,EAAAA,GAAQC,UAAkB,KACjB,IAAvBH,EAAKI,IAAIC,UAAwBrB,GAGnCrD,EAAAA,EAAAA,KAAC+E,EAAAA,EAAY,CAACC,MAAOX,EAAKI,IAAIK,WAAY/D,aAAc,KAAKrB,UAC1DiF,EAAAA,EAAAA,IAAaN,EAAKI,IAAIK,WAAY,IAAKxB,EAAiB2B,cAAc,OAK/E,CAACpB,EAAAA,GAASqB,WAAY,CACpBnB,GAAIF,EAAAA,GAASqB,UACblB,MAAOC,EAAAA,GAAWC,MAClBC,KAAM,WACNU,gBAAkBR,IAChB,GAAIA,EAAKC,OAASC,EAAAA,GAAQC,UAAW,OAAO,KAC5C,GAAkC,iBAAvBH,EAAKI,IAAIC,WAAiD,IAAvBL,EAAKI,IAAIC,UAAiB,OAAO,KAC/E,MAAMS,EAAYd,EAAKI,IAAIC,UAAYL,EAAKI,IAAIK,WAChD,OAA8C,KAAtCT,EAAKI,IAAIC,UAAYS,EAAY,EAAQ,EAEnDf,aAAeC,IACb,GAAIA,EAAKC,OAASC,EAAAA,GAAQC,UAAW,OAAO,KAC5C,GAAkC,iBAAvBH,EAAKI,IAAIC,WAAiD,IAAvBL,EAAKI,IAAIC,UAAiB,OAAOrB,EAE/E,MAAM8B,EAAYd,EAAKI,IAAIC,UAAYL,EAAKI,IAAIK,WAC1CM,EAAgD,KAAtCf,EAAKI,IAAIC,UAAYS,EAAY,GAEjD,OACEnF,EAAAA,EAAAA,KAAC+E,EAAAA,EAAY,CAACC,MAAOI,EAAQrE,aAAa,IAAGrB,UAC1CiF,EAAAA,EAAAA,IAAaS,EAAQ,IAAK9B,EAAiB2B,cAAc,KAC7C,GAIrB,CAACpB,EAAAA,GAASwB,UAAW,CACnBtB,GAAIF,EAAAA,GAASwB,SACbrB,MAAOC,EAAAA,GAAWC,MAClBC,KAAM,MACNC,aAAeC,GACTA,EAAKC,OAASC,EAAAA,GAAQC,UAAkB,KAClB,IAAtBH,EAAKI,IAAIa,SAAuBjC,GAC7BsB,EAAAA,EAAAA,IAAaN,EAAKI,IAAIa,SAAUhC,IAG3C,CAACO,EAAAA,GAAS0B,UAAW,CACnBxB,GAAIF,EAAAA,GAAS0B,SACbvB,MAAOC,EAAAA,GAAWC,MAClBC,KAAM,MACNC,aAAeC,GACTA,EAAKC,OAASC,EAAAA,GAAQC,UAAkB,KAClB,IAAtBH,EAAKI,IAAIe,SAAuBnC,GAC7BsB,EAAAA,EAAAA,IAAaN,EAAKI,IAAIe,SAAUlC,IAG3C,CAACO,EAAAA,GAAS4B,QAAS,CACjB1B,GAAIF,EAAAA,GAAS4B,OACbzB,MAAOC,EAAAA,GAAWC,MAClBC,KAAM,SACNC,aAAeC,GACTA,EAAKC,OAASC,EAAAA,GAAQC,UAAkB,MACrCG,EAAAA,EAAAA,IAAaN,EAAKI,IAAIiB,WAAY,IAAKpC,EAAiBG,UAAW,KAG9E,CAACI,EAAAA,GAAS8B,cAAe,CACvB5B,GAAIF,EAAAA,GAAS8B,aACb3B,MAAOC,EAAAA,GAAWC,MAClBC,KAAM,YACNC,aAAeC,GACTA,EAAKC,OAASC,EAAAA,GAAQC,UAAkB,MACrCG,EAAAA,EAAAA,IAAaN,EAAKI,IAAImB,aAAc,IAAKtC,EAAiBG,UAAW,KAGhF,CAACI,EAAAA,GAASgC,aAAc,CACtB9B,GAAIF,EAAAA,GAASgC,YACb7B,MAAOC,EAAAA,GAAWC,MAClBC,KAAM,SACNpE,UAAW,OACXqE,aAAeC,IAASM,EAAAA,EAAAA,IAAaN,EAAKI,IAAIqB,OAAQxC,IAExD,CAACO,EAAAA,GAASkC,gBAAiB,CACzBhC,GAAIF,EAAAA,GAASkC,eACb/B,MAAOC,EAAAA,GAAWC,MAClBC,KAAM,SACNpE,UAAW,OACXqE,aAAeC,IAAS2B,EAAAA,EAAAA,IAAW3B,EAAKI,IAAIwB,OAAQC,EAAAA,GAAiBC,EAAAA,KAEvE,CAACtC,EAAAA,GAASuC,cAAe,CACvBrC,GAAIF,EAAAA,GAASuC,aACbpC,MAAOC,EAAAA,GAAWoC,KAClBlC,KAAM,gBACNpE,UAAW,OACX8E,gBAAkBR,GAAS,GAAGA,EAAKiC,SAASjC,EAAKI,IAAIwB,SAAS5B,EAAKI,IAAIqB,SACvE1B,aAAeC,IAAS,IAAAkC,EACtB,IAAKlC,EAAKI,IAAK,OAAOpB,EACtB,MAAMyC,GAA4B,IAAlBzB,EAAKI,IAAIqB,QAAeU,WAAWC,SAAS,EAAG,KAE/D,OACE3G,EAAAA,EAAAA,MAAA,QAAMC,UAAU,mCAAkCL,SAAA,CACpC,QADoC6G,EAC/ClC,EAAKiC,cAAM,IAAAC,OAAA,EAAXA,EAAapH,QAAQ,IAAK,IAC1BkF,EAAKI,IAAIwB,OACT5B,EAAKC,OAASC,EAAAA,GAAQmC,KAAO,IAAM,IACnCZ,IACI,GAIb,CAACjC,EAAAA,GAAS8C,WAAY,CACpB5C,GAAIF,EAAAA,GAAS8C,UACb3C,MAAOC,EAAAA,GAAWC,MAClBC,KAAM,aACNpE,UAAW,OACX8E,gBAAkBR,GACZA,EAAKC,OAASC,EAAAA,GAAQC,UAAkB,KACrC,IAAIoC,KAAKvC,EAAKI,IAAIoC,UAE3BzC,aAAeC,GACTA,EAAKC,OAASC,EAAAA,GAAQC,UAAkB,KACjB,IAAvBH,EAAKI,IAAIC,UAAwBrB,GAC9B2C,EAAAA,EAAAA,IAAW,IAAIY,KAAKvC,EAAKI,IAAIoC,UAAWC,EAAAA,KAGnD,CAACjD,EAAAA,GAASkD,IAAK,CACbhD,GAAIF,EAAAA,GAASkD,GACb/C,MAAOC,EAAAA,GAAWC,MAClBC,KAAM,KACNC,aAAeC,GACTA,EAAKC,OAASC,EAAAA,GAAQC,UAAkB,KACvCH,EAAKI,IAAIuC,IACPrC,EAAAA,EAAAA,IAA2B,IAAdN,EAAKI,IAAIuC,GAAU1D,GAAmB,IADjCD,GAI7B,CAACQ,EAAAA,GAASoD,OAAQ,CAChBlD,GAAIF,EAAAA,GAASoD,MACbjD,MAAOC,EAAAA,GAAWC,MAClBC,KAAM,QACNC,aAAeC,GACTA,EAAKC,OAASC,EAAAA,GAAQC,UAAkB,KACvCH,EAAKI,IAAIyC,OACPvC,EAAAA,EAAAA,IAAaN,EAAKI,IAAIyC,MAAO1D,GADRH,GAIhC,CAACQ,EAAAA,GAASsD,OAAQ,CAChBpD,GAAIF,EAAAA,GAASsD,MACbnD,MAAOC,EAAAA,GAAWC,MAClBC,KAAM,QACNC,aAAeC,GACTA,EAAKC,OAASC,EAAAA,GAAQC,UAAkB,KACvCH,EAAKI,IAAI2C,OACPzC,EAAAA,EAAAA,IAAaN,EAAKI,IAAI2C,MAAO5D,GADRH,GAIhC,CAACQ,EAAAA,GAASwD,OAAQ,CAChBtD,GAAIF,EAAAA,GAASwD,MACbrD,MAAOC,EAAAA,GAAWC,MAClBC,KAAM,QACNC,aAAeC,GACTA,EAAKC,OAASC,EAAAA,GAAQC,UAAkB,KACvCH,EAAKI,IAAI6C,OACP3C,EAAAA,EAAAA,IAAaN,EAAKI,IAAI6C,MAAO9D,GADRH,GAIhC,CAACQ,EAAAA,GAAS0D,MAAO,CACfxD,GAAIF,EAAAA,GAAS0D,KACbvD,MAAOC,EAAAA,GAAWC,MAClBC,KAAM,OACNC,aAAeC,GACTA,EAAKC,OAASC,EAAAA,GAAQC,UAAkB,KACvCH,EAAKI,IAAI+C,MACP7C,EAAAA,EAAAA,IAAaN,EAAKI,IAAI+C,KAAMhE,GADRH,GAI/B,CAACQ,EAAAA,GAAS4D,KAAM,CACd1D,GAAIF,EAAAA,GAAS4D,IACbzD,MAAOC,EAAAA,GAAWC,MAClBC,KAAM,MACNC,aAAeC,GACTA,EAAKC,OAASC,EAAAA,GAAQC,UAAkB,KACvCH,EAAKI,IAAIiD,KACP/C,EAAAA,EAAAA,IAAaN,EAAKI,IAAIiD,IAAKlE,GADRH,I,iFChNzB,MAAMsE,EAAiB,aACjBzB,EAAkB,SAClBC,EAAmB,aACnBW,EAAwB,wBACxBc,EAA2B,WAC3BC,EAAmB,M,8LCAhC,MAAMC,EAAyB,CAC7B,CAACC,EAAAA,GAAaC,cAAe,SAC7B,CAACD,EAAAA,GAAaE,mBAAoB,uBAG9BC,EAAgE,CACpEH,EAAAA,GAAaC,aACbD,EAAAA,GAAaE,mBAUf,SAASE,IACP,MAAMC,GAAeC,EAAAA,EAAAA,KAErB,OAAOH,EAAkB/H,KAAK6E,IAAK,OACjCrF,MAAOmI,EAAuB9C,GAC9B3D,KAAM,gBAAeiH,EAAAA,EAAAA,GAAkB,IAClCF,EACHG,GAAIvD,EACJwD,IAfeD,EAeCvD,EAfWwD,EAeJJ,EAAaI,GAdpCD,IAAOE,EAAAA,GAAeC,YAAcF,IAAOG,EAAAA,GAAYC,KAClDD,EAAAA,GAAYE,YAEdL,OAaLlH,SAAU8G,EAAaG,KAAOvD,EAC9BzD,gBAAgB,GAlBpB,IAAqBgH,EAAYC,CAmB7B,GACJ,CAEO,SAASM,IACd,OAAO9I,EAAAA,EAAAA,KAACkB,EAAAA,EAAW,CAACC,MAAOgH,KAC7B,C,wECjCO,SAASY,EAAmBtJ,GAAgF,IAA/E,WAAEuJ,EAAU,QAAEC,GAA+DxJ,EAC/G,MAAO2I,IAAgBc,EAAAA,EAAAA,MAEjBC,EAAYjJ,EAAAA,SAAc,KAC9B,MAAMkJ,EAAY,IAAIC,gBAAgBjB,GAOtC,OANAgB,EAAUE,IACRC,EAAAA,GAAaC,KACb,CAACb,EAAAA,GAAYc,cAAed,EAAAA,GAAYe,cAAcC,SAASP,EAAUQ,IAAIL,EAAAA,GAAaC,OACtFb,EAAAA,GAAYc,cACZd,EAAAA,GAAYE,aAEXO,CAAS,GACf,CAAChB,IAEEyB,EAAW3J,EAAAA,SAAc,KAC7B,MAAMkJ,EAAY,IAAIC,gBAAgBjB,GAOtC,OANAgB,EAAUE,IACRC,EAAAA,GAAaC,KACb,CAACb,EAAAA,GAAYc,cAAed,EAAAA,GAAYe,cAAcC,SAASP,EAAUQ,IAAIL,EAAAA,GAAaC,OACtFb,EAAAA,GAAYe,aACZf,EAAAA,GAAYmB,YAEXV,CAAS,GACf,CAAChB,IAEE2B,EAAW7J,EAAAA,SAAc,KAC7B,MAAMkJ,EAAY,IAAIC,gBAAgBjB,GAItC,OAHAgB,EAAUE,IAAIC,EAAAA,GAAaC,KAAMb,EAAAA,GAAYC,MAC7CQ,EAAUY,OAAOT,EAAAA,GAAaU,QAC9Bb,EAAUY,OAAOT,EAAAA,GAAaW,QACvBd,CAAS,GACf,CAAChB,IAEJ,OACEtI,EAAAA,EAAAA,MAACN,EAAAA,EAAU,CAACG,MAAM,OAAMD,SAAA,EACtBM,EAAAA,EAAAA,KAACW,EAAAA,EAAgB,CACfa,GAAIC,EAAAA,GACJf,OAAQ,CAACiI,EAAAA,GAAYE,YAAaF,EAAAA,GAAYc,eAAeE,SAASX,GACtEtH,GAAI,IAAIyH,IAAYzJ,SACrB,WAGDM,EAAAA,EAAAA,KAACW,EAAAA,EAAgB,CACfa,GAAIC,EAAAA,GACJf,OAAQ,CAACiI,EAAAA,GAAYmB,WAAYnB,EAAAA,GAAYe,cAAcC,SAASX,GACpEtH,GAAI,IAAImI,IAAWnK,SACpB,SAGAuJ,IAAYR,EAAAA,GAAe0B,QAC1BnK,EAAAA,EAAAA,KAACW,EAAAA,EAAgB,CACfa,GAAIC,EAAAA,GACJjB,MAAM,kBACNE,OAAQsI,IAAeL,EAAAA,GAAYC,KACnClH,GAAI,IAAIqI,IAAWrK,SACpB,OAGC,OAGV,C,eC/DO,SAAS0K,EAAgBC,GAC9B,OAAOnK,EAAAA,SAAc,KAAMoK,EAAAA,EAAAA,IAAkBD,IAAS,CAACA,GACzD,C,iFC6BO,SAASE,EAAQ9K,GAON,IAPO,UACvBiF,EAAS,SACTmC,EAAQ,SACR2D,EAAQ,UACRC,EAAS,WACTC,EAAazG,EAAAA,GAAW0G,OAAM,oBAC9BC,GAAsB,GACRnL,EACd,GAAiB,OAAboH,GAAmC,OAAdnC,EAAoB,OAAO,KAEpD,MAAMmG,GAAOC,EAAAA,EAAAA,IAAmB,IAAXjE,GACfkE,GAAgBC,EAAAA,EAAAA,IAAuBH,EAAM,YAC7CI,GAAgBD,EAAAA,EAAAA,IAAuBH,EAAM,YAEnD,OACE/K,EAAAA,EAAAA,MAACoL,EAAAA,GAAQ,CAAAxL,SAAA,EACPI,EAAAA,EAAAA,MAACqL,EAAAA,GAAS,CAACC,QAASZ,EAAUxG,MAAOC,EAAAA,GAAWC,MAAOnE,UAAU,uCAAsCL,SAAA,CAAC,UAChGM,EAAAA,EAAAA,KAAA,QAAMD,UAAU,mCAAkCL,SAAC,MAAQ,IAAEqL,EAAe,KAClF/K,EAAAA,EAAAA,KAAA,QAAMD,UAAU,mCAAkCL,SAAC,MAAQ,IAAEuL,EAAc,SAE5EL,IAAuB5K,EAAAA,EAAAA,KAAA,UACxBA,EAAAA,EAAAA,KAACmL,EAAAA,GAAS,CAACnH,MAAO0G,EAAY3K,UAAU,cAAaL,UAClDiF,EAAAA,EAAAA,IAAaD,KAEfkG,IAAuB5K,EAAAA,EAAAA,KAAA,UACxBA,EAAAA,EAAAA,KAACmL,EAAAA,GAAS,CAACC,QAASX,MAG1B,CCtDO,SAASY,EAAgB5L,GAMN,IANO,QAC/B6L,EAAO,OACPC,EAAM,cACNC,EAAa,gBACbC,GAAkB,KACfrN,GACmBqB,EACtB,OACEO,EAAAA,EAAAA,KAACmL,EAAAA,GAAS,IACJ/M,EACJ2B,UAAWU,IAAWrC,EAAM2B,UAAW,gCAAiC,CACtE,oEAAqE0L,EACrE,+DAAgEH,EAChE,+DAAgEC,EAChE,6IACEC,EACF,gBAAiBA,GAAiBF,EAClC,iBAAkBE,GAAiBD,KAI3C,CCMA,MAAMG,EAA0C,CAC9C7H,EAAAA,GAASC,UACTD,EAAAA,GAASe,UACTf,EAAAA,GAASqB,UACTrB,EAAAA,GAASwB,SACTxB,EAAAA,GAAS0B,SACT1B,EAAAA,GAAS4B,OACT5B,EAAAA,GAAS8B,cACTxF,KAAK4D,IAAE,IACJL,EAAAA,EAAUK,GACb4H,WAAY5H,EACZA,GAAI,QAAQL,EAAAA,EAAUK,GAAIA,KAC1B6H,QAASrH,EAAAA,GAAQmC,KACjB3G,UAAWU,IAAW,CACpB,iBAAkBsD,IAAOF,EAAAA,GAASC,UAClC,iBAAkB,CAACD,EAAAA,GAASe,UAAWf,EAAAA,GAAS8B,cAAcgE,SAAS5F,GACvE,uBAAwBA,IAAOF,EAAAA,GAASqB,gBAItC2G,EAAyCH,EAAoBvL,KAAK2L,IAAM,IACzEA,EACH/H,GAAI,OAAO+H,EAAOH,aAClBA,WAAYG,EAAOH,WACnBC,QAASrH,EAAAA,GAAQwH,QAGbC,EAAgD,CACpDnI,EAAAA,GAASC,UACTD,EAAAA,GAASkD,GACTlD,EAAAA,GAASoD,MACTpD,EAAAA,GAASsD,MACTtD,EAAAA,GAASwD,MACTxD,EAAAA,GAAS0D,KACT1D,EAAAA,GAAS4D,KACTtH,KAAK4D,IAAE,IACJL,EAAAA,EAAUK,GACb4H,WAAY5H,EACZA,GAAI,QAAQL,EAAAA,EAAUK,GAAIA,KAC1B6H,QAASrH,EAAAA,GAAQmC,KACjB3G,UAAWU,IAAW,CACpB,iBAAkBsD,IAAOF,EAAAA,GAASC,UAClC,iBAAkB,CAACD,EAAAA,GAASe,UAAWf,EAAAA,GAAS8B,cAAcgE,SAAS5F,GACvE,uBAAwBA,IAAOF,EAAAA,GAASqB,gBAItC+G,EAA+CD,EAA0B7L,KAAK2L,IAAM,IACrFA,EACH/H,GAAI,OAAO+H,EAAOH,aAClBA,WAAYG,EAAOH,WACnBC,QAASrH,EAAAA,GAAQwH,QAGbG,EAA0B,KAEhC,SAASC,EAAYC,GACnB,OAAQ3H,IACN,MAAM4H,EAAsD,mBAA3BD,EAAOvH,gBAAiCuH,EAAOvH,qBAAkByH,EAElG,OAAQF,EAAOR,SACb,KAAKrH,EAAAA,GAAQC,UACX,OAAI6H,EACKA,EAAkB,CAAE/H,KAAMC,EAAAA,GAAQC,UAAWC,QAEF,QAAlDhF,EAAQgF,EAAI2H,EAAOT,mBAA+B,IAAAlM,EAAAA,EAAsB,KADnE,IAAAA,EAGT,KAAK8E,EAAAA,GAAQmC,KACX,OAAIjC,EAAIxF,MAAQoN,EACPA,EAAkB,CAAE/H,KAAMC,EAAAA,GAAQmC,KAAMjC,IAAKA,EAAIxF,OAEJ,QAApDsN,EAAe,QAAfC,EAAO/H,EAAIxF,YAAI,IAAAuN,OAAA,EAARA,EAAWJ,EAAOT,mBAA2B,IAAAY,EAAAA,EAAI,KADnD,IAAAA,EAAAC,EAGT,KAAKjI,EAAAA,GAAQwH,IACX,OAAItH,EAAIgI,KAAOJ,EACNA,EAAkB,CAAE/H,KAAMC,EAAAA,GAAQwH,IAAKtH,IAAKA,EAAIgI,MAEJ,QAAnDC,EAAc,QAAdC,EAAOlI,EAAIgI,WAAG,IAAAE,OAAA,EAAPA,EAAUP,EAAOT,mBAA2B,IAAAe,EAAAA,EAAI,KADlD,IAAAA,EAAAC,EAGT,QACE,OAAO,KACX,CAEJ,CA6DO,SAASC,EAAUxL,GAYN,IAZO,UACzBrB,EAAS,KACT8M,EAAI,UACJnI,EAAS,SACTmC,EAAQ,aACRiG,EAAejJ,EAAAA,GAASgC,YAAW,kBACnCkH,EAAoBD,IAAiBjJ,EAAAA,GAASgC,YAAW,eACzDmH,EAAc,YACdC,EAAW,QACXhE,EAAO,WACPiE,EAAU,aACVC,GACgB/L,EAChB,MAAMgM,EAAenE,IAAYR,EAAAA,GAAeC,WAAasD,EAA4BN,EACnF2B,EAAcpE,IAAYR,EAAAA,GAAeC,WAAauD,EAA2BJ,GAChFyB,EAAeC,GAAoBrN,EAAAA,SAAekN,EAAalO,SAC/DkJ,IAAgBc,EAAAA,EAAAA,MACjBsE,EAAkB9I,QAAAA,EAAa,EAErCxE,EAAAA,WAAgB,KACd,MAAMuN,EAAsBA,KACtB/O,OAAOgP,YAAcxB,GAA2BoB,IAAkBF,EAAalO,OAAS,EAC1FqO,EAAiBH,EAAalO,QACrBR,OAAOgP,WAAaxB,GAA2BoB,IAAkBF,EAAalO,QACvFqO,EAAiBH,EAAalO,OAAS,EACzC,EAMF,OAHAuO,IACA/O,OAAOgE,iBAAiB,SAAU+K,GAE3B,KACL/O,OAAOiE,oBAAoB,SAAU8K,EAAoB,CAC1D,IAGH,MAAME,EAAyBzN,EAAAA,SAC7B,KAAM,IACDwD,EAAAA,EAAUoJ,GACbnB,WAAYmB,EACZlB,QAASrH,EAAAA,GAAQC,aAEnB,CAACsI,IAGGc,EAAa1N,EAAAA,SACjB,IAAM,IAAIkN,EAAcO,KAA2BN,IACnD,CAACD,EAAcC,EAAaM,IAGxBE,EAAa3N,EAAAA,SAAc,ICpO5B,SAAwB4N,EAAmBC,GAChD,MAAMC,EAAsB,GACtBC,EAASH,EAAQI,QAAQC,MAAK,CAACC,EAAGC,IAAMD,EAAEL,GAAWM,EAAEN,KAE7D,IAAK,MAAMjC,KAAUmC,EAAQ,KAAAK,EAC3B,IAAIC,EAAOP,EAAOA,EAAO9O,OAAS,IAC1B,QAAJoP,EAAAC,SAAI,IAAAD,OAAA,EAAJA,EAAOP,MAAajC,EAAOiC,KAC7BQ,EAAO,CAAEzI,OAAQgG,EAAOhG,OAAQG,OAAQ6F,EAAO7F,OAAQhH,KAAM,KAAMwN,IAAK,MACxEuB,EAAO1O,KAAKiP,IAGVzC,EAAOxL,OAASkO,EAAAA,GAAW9H,KAC7B6H,EAAKtP,KAAO6M,EAEZyC,EAAK9B,IAAMX,CAEf,CAEA,OAAOkC,CACT,CDiNyCS,CAAe5B,EAAMC,IAAe,CAACD,EAAMC,KAEhFD,KAAM6B,EAAS,KACfP,EAAI,WACJQ,IACEC,EAAAA,EAAAA,IAAa,CACf/B,KAAMgB,EACNgB,QAASjB,EACTkB,aAAaC,EAAAA,EAAAA,IAAsBnB,EAAYV,GAC/Cf,gBAMI6C,EAAkB9O,EAAAA,SAAc,KACpC,MAAM+O,EAAYlC,GAAqBoB,EAAK/B,OAAOrI,KAAO4J,EAAuB5J,GAEjF,IAAKkL,EAAW,MAAO,CAAEA,YAAWC,UAAW,GAO/C,MAAO,CAAED,YAAWE,MAJlBhB,EAAKiB,YAAcC,EAAAA,GAAcC,UAC7BZ,EAAUa,eAAezD,GAAWA,EAAOhG,OAAS0H,IACpDkB,EAAUa,eAAezD,GAAWA,EAAOhG,OAAS0H,IAErB,GACpC,CAACT,EAAmBoB,EAAK/B,OAAOrI,GAAIoK,EAAKiB,UAAWzB,EAAuB5J,GAAI2K,EAAWlB,IAEvFgC,EAAgBtP,EAAAA,SACpB,KAAM,CACJwE,UAAW8I,EACX3G,WACA2D,SAAU8C,EACV7C,UAAW6C,KAEb,CAACE,EAAiB3G,EAAUyG,IAG9B,OACExN,EAAAA,EAAAA,MAAC2P,EAAAA,GAAK,CAAC1P,UAAWU,IAAWV,EAAW,eAAgB2P,YAAa,EAAEhQ,SAAA,EACrEI,EAAAA,EAAAA,MAAC6P,EAAAA,GAAS,CAAC5P,UAAWU,IAAWwM,EAAa,CAAE,yBAA0BD,IAAkBtN,SAAA,CACzF0N,EAAajN,KAAKiM,IACjBpM,EAAAA,EAAAA,KAAC4P,EAAAA,GAAmB,CAElB5L,MAAOoI,EAAOpI,MACdjE,UAAWU,IAAW2L,EAAOrM,UAAW,kDACxCuB,SAAU8K,EAAOrI,KAAOoK,EAAK/B,OAAOrI,GACpCqL,UAAWjB,EAAKiB,UAChBS,QAASA,KACiB,mBAAjB1C,EAA8BA,EAAaf,EAAQ+B,EAAMQ,GAAcA,EAAWvC,EAAO,EAChG1M,SAED0M,EAAOjI,MATHiI,EAAOrI,OAahB/D,EAAAA,EAAAA,KAAA,MAAID,UAAU,SACdC,EAAAA,EAAAA,KAAC4P,EAAAA,GAAmB,CAClB5L,MAAOC,EAAAA,GAAW0G,OAClBrJ,SAAUqM,EAAuB5J,KAAOoK,EAAK/B,OAAOrI,GACpDqL,UAAWjB,EAAKiB,UAChBS,QAASA,KACiB,mBAAjB1C,EACHA,EAAaQ,EAAwBQ,EAAMQ,GAC3CA,EAAWhB,EAAuB,EAExC5N,UAAU,OAAML,SAEfiO,EAAuBxJ,QAE1BnE,EAAAA,EAAAA,KAAA,MAAID,UAAU,QAEbsN,EAAYlN,KAAKiM,IAChBpM,EAAAA,EAAAA,KAAC4P,EAAAA,GAAmB,CAElB5L,MAAOoI,EAAOpI,MACdjE,UAAWU,IAAW2L,EAAOrM,UAAW,gDACxCuB,SAAU8K,EAAOrI,KAAOoK,EAAK/B,OAAOrI,GACpCqL,UAAWjB,EAAKiB,UAChBS,QAASA,KACiB,mBAAjB1C,EAA8BA,EAAaf,EAAQ+B,EAAMQ,GAAcA,EAAWvC,EAAO,EAChG1M,SAED0M,EAAOjI,MATHiI,EAAOrI,SAcjBiL,EAAgBC,WAAaD,EAAgBG,MAAQ,IACpDnP,EAAAA,EAAAA,KAAC8P,EAAAA,GAAS,CAAApQ,UACRM,EAAAA,EAAAA,KAACuK,EAAQ,IAAKiF,OAIlBxP,EAAAA,EAAAA,KAAC8P,EAAAA,GAAS,CAAApQ,SACPgP,EAAUvO,KAAI,CAAC2L,EAAQqD,KAAU,IAAAY,EAAAC,EAChC,MACMC,EADoBjB,EAAgBC,WAAaD,EAAgBG,QAAUA,GACrCH,EAAgBG,MAAQT,EAAUxP,OAAS,EACjFgR,EAAczP,IAAW,CAAE,WAAYwP,IACvCE,GAAaC,EAAAA,EAAAA,IAAYtD,EAAc1E,EAAc0D,GAErDrH,GACJ3E,EAAAA,EAAAA,MAACoL,EAAAA,GAAQ,CAACnL,UAAU,8BAA6BL,SAAA,CAC9CoM,EAAO7M,MACNe,EAAAA,EAAAA,KAACqQ,EAAc,CACbxB,QAASzB,EACT9I,KAAMC,EAAAA,GAAQmC,KACdoF,OAAQA,EAAO7M,KACfuM,cAAeM,EAAOhG,OAAS0H,EAC/BzN,UAAWmQ,KAGblQ,EAAAA,EAAAA,KAACqL,EAAgB,CAACD,QAASgC,EAAalO,OAAQuM,kBAAuC,QAArBsE,EAACrB,EAAUS,EAAQ,UAAE,IAAAY,IAApBA,EAAsB9Q,SAG3Fe,EAAAA,EAAAA,KAAA,MAAID,UAAU,kBACdC,EAAAA,EAAAA,KAACqL,EAAgB,CAACC,SAAO,EAACC,QAAM,EAACvH,MAAOC,EAAAA,GAAW0G,OAAQ5K,UAAWmQ,EAAYxQ,UAChFM,EAAAA,EAAAA,KAACyB,EAAAA,GAAI,CAACC,GAAI,IAAIyO,IAAcpQ,UAAU,WAAUL,SAC7CiO,EAAuBvJ,aAAa,CAAEE,KAAMC,EAAAA,GAAQC,UAAWC,IAAKqH,SAGzE9L,EAAAA,EAAAA,KAAA,MAAID,UAAU,iBAEb+L,EAAOW,KACNzM,EAAAA,EAAAA,KAACqQ,EAAc,CACbxB,QAASxB,EACT/I,KAAMC,EAAAA,GAAQwH,IACdD,OAAQA,EAAOW,IACfjB,cAAeM,EAAOhG,OAAS0H,EAC/BzN,UAAWmQ,KAGblQ,EAAAA,EAAAA,KAACqL,EAAgB,CAACD,QAASiC,EAAYnO,OAAQuM,kBAAuC,QAArBuE,EAACtB,EAAUS,EAAQ,UAAE,IAAAa,IAApBA,EAAsBvD,SA9BrC,GAAGX,EAAO7F,UAAU6F,EAAOhG,UAmCpF,OAAImK,GAEAnQ,EAAAA,EAAAA,MAACI,EAAAA,SAAc,CAAAR,SAAA,CACZ+E,EACAwL,IAAkBjQ,EAAAA,EAAAA,KAACuK,EAAQ,IAAKiF,MAFd,GAAG1D,EAAO7F,UAAU6F,EAAOhG,UAO7CrB,CAAG,MAIbuK,EAAgBC,WAAaD,EAAgBG,QAAUT,EAAUxP,OAAS,IACzEc,EAAAA,EAAAA,KAAC8P,EAAAA,GAAS,CAAApQ,UACRM,EAAAA,EAAAA,KAACuK,EAAQ,IAAKiF,QAKxB,CASA,SAASa,EAAcC,GAAqF,IAApF,QAAEzB,EAAO,KAAEvK,EAAI,OAAEwH,EAAM,cAAEN,EAAa,UAAEzL,KAAc3B,GAA4BkS,EACxG,OACEtQ,EAAAA,EAAAA,KAAAuQ,EAAAA,SAAA,CAAA7Q,SACGmP,EAAQ1O,KAAI,CAACiM,EAAQ+C,KACpB,MAAM7D,EAAoB,IAAV6D,EACV5D,EAAS4D,IAAUN,EAAQ3P,OAAS,EAE1C,OACEsR,EAAAA,EAAAA,eAACnF,EAAgB,IACXjN,EACJqS,IAAKrE,EAAOrI,GACZyH,cAAelH,IAASC,EAAAA,GAAQmC,KAAO4E,GAAWE,EAAgBD,GAAUC,EAC5EF,QAASA,EACTC,OAAQA,EACRvH,MAAOoI,EAAOpI,MACdjE,UAAWU,IAAWV,EAAWqM,EAAOrM,YAEvCqM,EAAOhI,aAAa,CAAEE,OAAMG,IAAKqH,IACjB,KAK7B,C,yBEtZO,SAAS4E,EAAYjR,GAKK,IAL+B,aAC9DkR,EAAY,SACZC,EAAQ,QACR9C,EAAO,SACP+C,GAC6BpR,EAM7B,MAAOqR,EAAaC,GAAkB7Q,EAAAA,SAAe0Q,GAKrD,OAJA1Q,EAAAA,WAAgB,KACd6Q,EAAeH,EAAS,GACvB,CAACA,KAGF5Q,EAAAA,EAAAA,KAACgR,EAAAA,GAAM,CACLjR,UAAU,SACVkR,UAAU,SACV,aAAY,GAAGvN,EAAAA,EAAUiN,GAAcxM,cACvCa,MAAO8L,EACP3P,MAAO2M,EACP+C,SAAWK,IACTH,EAAeG,EAAKlM,OACpB6L,EAASK,EAAK,GAItB,CClCO,SAASC,EAAU1R,GAA6E,IAA5E,cAAE2R,EAAa,SAAEC,GAAyD5R,EACnG,MAAO,CAAE6R,IAAmBpI,EAAAA,EAAAA,MAEtBqI,EAAgBrR,EAAAA,SACpB,IAAMmR,EAASlR,KAAK2L,IAAM,CAAQnM,OAAOqG,EAAAA,EAAAA,IAAW8F,EAAQnE,EAAAA,GAAgBxB,EAAAA,IAAmBnB,MAAO8G,OACtG,CAACuF,IAGH,OACErR,EAAAA,EAAAA,KAAC0Q,EAAY,CACXC,aAAc9M,EAAAA,GAASkC,eACvB6K,SAAUQ,EACVtD,QAASyD,EACTV,SAAW/E,IACTwF,GAAiBE,IACf,MAAMC,EAAW,IAAIpI,gBAAgBmI,GAErC,OADAC,EAASnI,IAAIC,EAAAA,GAAaW,OAAQ4B,EAAO9G,OAClCyM,CAAQ,GACf,GAIV,C,eCvBO,SAASC,EAAYjS,GAA2E,IAA1E,cAAEkS,EAAa,QAAEC,GAAuDnS,EACnG,MAAO,CAAE6R,IAAmBpI,EAAAA,EAAAA,MAEtBqI,EAAgBrR,EAAAA,SACpB,IAAM0R,EAAQzR,KAAK2L,IAAM,CAAQnM,MAAO,MAAOgF,EAAAA,EAAAA,IAAamH,GAAS9G,MAAO8G,OAC5E,CAAC8F,IAGH,OACE5R,EAAAA,EAAAA,KAAC0Q,EAAY,CACXC,aAAc9M,EAAAA,GAASgC,YACvB+K,SAAUe,EACV7D,QAASyD,EACTV,SAAW/E,IACTwF,GAAiBE,IACf,MAAMC,EAAW,IAAIpI,gBAAgBmI,GAErC,OADAC,EAASnI,IAAIC,EAAAA,GAAaU,OAAQ6B,EAAO9G,MAAMwB,YACxCiL,CAAQ,GACf,GAIV,CCvBe,SAASI,EAAUpS,GAAwC,IAAvC,UAAEM,GAAmCN,EACtE,MAAO2I,IAAgBc,EAAAA,EAAAA,OACjB,OAAE5C,EAAM,OAAEwL,EAAM,OAAEhM,IAAWwE,EAAAA,EAAAA,IAAkBlC,GAE/C2J,EAAY7R,EAAAA,SAChB,IACE,kBACA,IAAImJ,gBAAgB,CAClB2I,EAAG1L,EACH2L,EAAGH,QAAAA,EAAU,GACbI,EAAGpM,EAASA,EAAOU,WAAa,MAEpC,CAACF,EAAQwL,EAAQhM,IAGnB,OACEhG,EAAAA,EAAAA,MAAA,OAAKC,UAAWiB,IAAW,6CAA8CjB,GAAWL,SAAA,CAAC,8BAEnFM,EAAAA,EAAAA,KAAA,KACEqB,KAAM0Q,EACNhS,UAAU,WACV8P,QAASA,KACPnR,OAAOM,MAAQN,OAAOM,KAAK,QAAS,WAAY,CAAEmT,eAAgB,UAAW,EAC7EzS,SACH,aAKP,CC1BO,SAAS0S,EACdnJ,EACArK,GAEA,MAAMyT,GAAWC,EAAAA,EAAAA,MACjB,OAAOpS,EAAAA,aACL,SACEkM,EACA+B,EACAQ,GAGG,IAFH4D,EAAcC,UAAAtT,OAAA,QAAAoN,IAAAkG,UAAA,GAAAA,UAAA,GAAG,GACjBC,EAAqBD,UAAAtT,OAAA,QAAAoN,IAAAkG,UAAA,IAAAA,UAAA,GAErB,MAAMf,EAAW,IAAIpI,gBAAgBzK,EAAMyL,QACrCqI,EAAcD,EAAe5K,EAAAA,GAAmBuE,EAAOrI,GACvD4O,EACJxE,EAAK/B,OAAOrI,KAAOqI,EAAOrI,IAAMoK,EAAKiB,YAAcC,EAAAA,GAAcC,UAC7D,IAAIiD,IAASG,IACb,GAAGH,IAASG,IAEZE,EAAW,IAAKhU,EAAMiU,MAAO,CAAC5J,GAAU0J,GAE9ClB,EAASnI,IAAIC,EAAAA,GAAauJ,OAAOC,EAAAA,EAAAA,IAAcH,IAC/CjE,EAAWvC,GACXiG,EAAS,IAAIZ,IAAY,CAAEuB,oBAAoB,GACjD,GACA,CAACX,EAAUzT,EAAMiU,MAAOjU,EAAMyL,OAAQpB,GAE1C,CChCO,SAASgK,EAAoBhK,EAAyBrK,EAA2BsU,GACtF,OAAOhT,EAAAA,SAAc,IACftB,EAAMiU,MAAM5J,GACPrK,EAAMiU,MAAM5J,GAEdiK,GACN,CAACA,EAActU,EAAOqK,GAC3B,CCIO,SAASkK,EAAU1T,GAA0F,IAAzF,QAAEqO,EAAO,UAAEpJ,EAAS,SAAEmC,KAAazI,GAAoDqB,EAChH,MAAMqN,EAAe1O,EAAMgV,OAASzK,EAAAA,GAAYE,YAAchF,EAAAA,GAASgC,YAAchC,EAAAA,GAASkC,eACxF4K,EAAevS,EAAMgV,OAASzK,EAAAA,GAAYE,YAAchF,EAAAA,GAASkC,eAAiBlC,EAAAA,GAASgC,aAC1FuC,IAAgBc,EAAAA,EAAAA,MACjBtK,EAAQwL,EAAgBhC,GACxB8E,EAAa+F,EAAoB7U,EAAM6K,QAASrK,EAAOkO,GACvDuG,GAAsBC,EAAAA,EAAAA,IAAcpG,EAAYJ,GAChDyG,EAAoBnB,EAAqBhU,EAAM6K,QAASrK,GAQ9D,OACEkB,EAAAA,EAAAA,MAAAyQ,EAAAA,SAAA,CAAA7Q,SAAA,EACEI,EAAAA,EAAAA,MAAA,OAAAJ,SAAA,EACEM,EAAAA,EAAAA,KAAA,OAAKD,UAAU,wCAAuCL,UACpDI,EAAAA,EAAAA,MAAA,OAAKC,UAAU,iCAAgCL,SAAA,EAC7CI,EAAAA,EAAAA,MAAA,OAAKC,UAAU,2CAA0CL,SAAA,EACvDM,EAAAA,EAAAA,KAAA,MAAID,UAAU,sCAAqCL,SAAC,WACpDM,EAAAA,EAAAA,KAAA,OAAKD,UAAU,+CAA8CL,SAAEgE,EAAAA,EAAUiN,GAAcxM,WAEzFrE,EAAAA,EAAAA,MAAA,OAAKC,UAAU,gBAAeL,SAAA,CAC3BtB,EAAMgV,OAASzK,EAAAA,GAAYE,cAC1B7I,EAAAA,EAAAA,KAACmR,EAAU,CAACC,cAAehT,EAAMgT,cAAeC,SAAUjT,EAAMiT,WAEjEjT,EAAMgV,OAASzK,EAAAA,GAAYc,gBAC1BzJ,EAAAA,EAAAA,KAAC0R,EAAY,CAACC,cAAevT,EAAMuT,cAAeC,QAASxT,EAAMwT,cAGrE5R,EAAAA,EAAAA,KAAA,OAAKD,UAAU,SAAQL,UACrBM,EAAAA,EAAAA,KAAA,MAAID,UAAU,iDAAgDL,SAAC,iBAKrEM,EAAAA,EAAAA,KAACmD,EAAAA,EAAY,CAACpD,UAAU,qCACxBC,EAAAA,EAAAA,KAAA,OAAKD,UAAU,eAAcL,UAC3BM,EAAAA,EAAAA,KAAC4M,EAAU,CAETI,gBAAc,EACdjN,UAAU,UACVkN,YAAY,YACZJ,KAAMiB,EACNpJ,UAAWA,EACXmC,SAAUA,EACViG,aAAcA,EACd7D,QAAS7K,EAAM6K,QACfiE,WAAYmG,EACZlG,aAAcA,CAACf,EAAQ+B,EAAMQ,IA1Cd6E,EACvBpH,EACA+B,EACAQ,IACG4E,EAAkBnH,EAAQ+B,EAAMQ,EAAY,GAAIvC,EAAOrI,KAAO+I,GAsCb0G,CAAiBpH,EAAQ+B,EAAMQ,IAVtEvQ,EAAMgV,YAcjBpT,EAAAA,EAAAA,KAAC6R,EAAU,CAAC9R,UAAU,wBAG5B,CCvDA,SAAS0T,EAAsBrH,EAA+BhO,GAC5D,OAAOgO,EAAOhI,aAAahG,EAC7B,CAEA,SAASsV,EAAqBpP,EAAegC,EAAwB5B,GACnE,OAAQ0H,GAAmC3H,IAAgB,IAAAkP,EACzD,MAAsC,mBAA3BvH,EAAOvH,gBACTuH,EAAOvH,gBAAgB,CAAEP,OAAMI,YAAWD,QAGV,QAAzCkP,EAAOlP,EAAI2H,EAAOrI,WAAuB,IAAA4P,EAAAA,EAAI,IAAI,CAErD,CA+BO,SAASC,EAAYnU,GAaN,IAbO,KAC3B6E,EAAOC,EAAAA,GAAQmC,KAAI,OACnBJ,EAAM,UACN5B,EAAS,SACTmC,EAAQ,QACRgI,EAAO,QACPf,EAAO,kBACPf,GAAoB,EAAI,WACxBG,EAAU,eACVF,EAAc,YACdC,EAAW,aACX7I,EAAeqP,EAAqB,aACpCtG,GACkB1N,EAClB,MAAM,KAAEoN,EAAI,KAAEsB,EAAI,WAAEQ,IAAekF,EAAAA,EAAAA,IAA2B,CAC5DhH,KAAMiB,EACNe,UACAC,aAAaC,EAAAA,EAAAA,IAAsBF,EAAS3B,GAC5Cf,YAAauH,EAAqBpP,EAAMgC,EAAQ5B,GAChDwI,eAKI8B,EAAkB9O,EAAAA,SAAc,KAGpC,KAFkB6M,GAAqBoB,EAAK/B,OAAOrI,KAAOF,EAAAA,GAASgC,cAE5B,iBAAdnB,EAAwB,MAAO,CAAEuK,WAAW,EAAOC,UAAW,GAOvF,MAAO,CAAED,WAAW,EAAME,MAJxBhB,EAAKiB,YAAcC,EAAAA,GAAcC,UAC7BzC,EAAK0C,eAAezD,GAAWA,EAAOhG,OAASpB,IAC/CmI,EAAK0C,eAAezD,GAAWA,EAAOhG,OAASpB,IAEV,GAC1C,CAACqI,EAAmBoB,EAAK/B,OAAOrI,GAAIoK,EAAKiB,UAAW1K,EAAWmI,IAE5D2C,EAAgBtP,EAAAA,SACpB,KAAM,CACJwE,UAAWA,QAAAA,EAAa,KACxBmC,SAAUA,QAAAA,EAAY,KACtB2D,SAAU,EACVC,UAAW,EACXG,qBAAqB,EACrBF,WAAYzG,EAAAA,GAAWC,SAEzB,CAACQ,EAAWmC,IAGd,OACE/G,EAAAA,EAAAA,MAAC2P,EAAAA,GAAK,CAAC1P,UAAU,qCAAqC2P,YAAa,EAAEhQ,SAAA,EACnEM,EAAAA,EAAAA,KAAC2P,EAAAA,GAAS,CAAC5P,UAAWU,IAAWwM,EAAa,CAAE,yBAA0BD,IAAkBtN,SACzFmP,EAAQ1O,KAAKiM,IACZpM,EAAAA,EAAAA,KAAC4P,EAAAA,GAAmB,CAElB5L,MAAOoI,EAAOpI,MACdjE,UAAWU,IACT2L,EAAOrM,UACP,4EAEFuB,SAAU8K,EAAOrI,KAAOoK,EAAK/B,OAAOrI,GACpCqL,UAAWjB,EAAKiB,UAChBS,QAASA,IACiB,mBAAjB1C,EAA8BA,EAAaf,EAAQ+B,EAAMQ,GAAcA,EAAWvC,GAC1F1M,SAEA0M,EAAOjI,MAZHiI,EAAOrI,SAiBlB/D,EAAAA,EAAAA,KAAC8P,EAAAA,GAAS,CAAApQ,SACPmN,EAAK1M,KAAI,CAAC2L,EAAQoD,KACjB,MAAMuB,EAAM,GAAG3E,EAAOtG,YAAYsG,EAAO7F,UAAU6F,EAAOhG,UAAUoJ,IAC9D1D,EACiB,iBAAd9G,IACNJ,IAASC,EAAAA,GAAQmC,KAAOoF,EAAOhG,OAASpB,EAAYoH,EAAOhG,OAASpB,GAEjEuL,EADoBjB,EAAgBC,WAAaD,EAAgBG,QAAUD,GACrCF,EAAgBG,MAAQtC,EAAK3N,OAAS,EAE5EuF,GACJzE,EAAAA,EAAAA,KAACkL,EAAAA,GAAQ,CAAWnL,UAAU,8BAA6BL,SACxDmP,EAAQ1O,KAAI,CAACiM,EAAQ+C,KACpBnP,EAAAA,EAAAA,KAACqL,EAAgB,CAEfC,QAAmB,IAAV6D,EACT5D,OAAQ4D,IAAUN,EAAQ3P,OAAS,EACnC8E,MAAOoI,EAAOpI,MACdwH,cAAyB,IAAV2D,GAAe3D,EAC9BzL,UAAWU,IAAW,CAAE,WAAYwP,IAAkBvQ,SAErD0E,EAAagI,EAAQ,CAAE9H,KAAMA,EAAMgC,SAAQ5B,YAAWD,IAAKqH,KAPvDM,EAAOrI,OAHH0M,GAgBjB,OAAIR,GAEAnQ,EAAAA,EAAAA,MAACI,EAAAA,SAAc,CAAAR,SAAA,CACZ+E,EACAwL,IAAkBjQ,EAAAA,EAAAA,KAACuK,EAAQ,IAAKiF,MAFdiB,GAOlBhM,CAAG,QAKpB,CClJA,MAAMqP,EAAe,CAACjQ,EAAAA,GAASuC,aAAcvC,EAAAA,GAAS8C,WAChDoN,GAAuB,CAC3BlQ,EAAAA,GAASC,UACTD,EAAAA,GAASwB,SACTxB,EAAAA,GAAS0B,SACT1B,EAAAA,GAASe,UACTf,EAAAA,GAASqB,UACTrB,EAAAA,GAAS4B,OACT5B,EAAAA,GAAS8B,cAGLqO,GAAsB,CAC1BnQ,EAAAA,GAASC,UACTD,EAAAA,GAASkD,GACTlD,EAAAA,GAASoD,MACTpD,EAAAA,GAASsD,MACTtD,EAAAA,GAASwD,MACTxD,EAAAA,GAAS0D,KACT1D,EAAAA,GAAS4D,KAGLwM,GAAyB,IAAIH,EAAcjQ,EAAAA,GAASgC,eAAgBkO,IAAsB5T,KAC7F4D,GAAOL,EAAAA,EAAUK,KAEdmQ,GAA2B,IAAIJ,EAAcjQ,EAAAA,GAASkC,kBAAmBgO,IAAsB5T,KAClG4D,GAAOL,EAAAA,EAAUK,KAGdoQ,GAAwB,IAAIL,EAAcjQ,EAAAA,GAASgC,eAAgBmO,IAAqB7T,KAAK4D,GAAOL,EAAAA,EAAUK,KAC9GqQ,GAA0B,IAAIN,EAAcjQ,EAAAA,GAASkC,kBAAmBiO,IAAqB7T,KAChG4D,GAAOL,EAAAA,EAAUK,KAmCb,SAASsQ,GAAUjW,GACxB,MAAOgK,IAAgBc,EAAAA,EAAAA,MACjBD,EAAU7K,EAAM6K,QAChBqL,EAAiBpU,EAAAA,SAAc,IAnCvC,SAA2BkI,GACzB,MAAO,CAACgE,EAA+BhO,KACrC,OAAQgO,EAAOrI,IACb,KAAKF,EAAAA,GAASgC,YACd,KAAKhC,EAAAA,GAASkC,eACZ,MAAMoK,GAAaC,EAAAA,EAAAA,IAAYhE,EAAOrI,GAAIqE,EAAchK,EAAMqG,KAE9D,OACEzE,EAAAA,EAAAA,KAACyB,EAAAA,GAAI,CAACC,GAAI,IAAIyO,IAAcpQ,UAAU,WAAUL,SAC7C0M,EAAOhI,aAAahG,KAG3B,QACE,OAAOgO,EAAOhI,aAAahG,GAC/B,CAEJ,CAmB6CmW,CAAkBnM,IAAe,CAACA,IACvEoM,EAAepW,EAAMgV,OAASzK,EAAAA,GAAYmB,WAC1C+E,EAnBR,SAAoB5F,EAAyBuL,GAC3C,OAAIvL,IAAYR,EAAAA,GAAeC,WACtB8L,EAAeL,GAAwBC,GAEvCI,EAAeP,GAAyBC,EAEnD,CAakBO,CAAWxL,EAASuL,GAC9BE,EAAaF,EAAe3Q,EAAAA,GAASgC,YAAchC,EAAAA,GAASkC,eAC5D4K,EAAe6D,EAAe3Q,EAAAA,GAASkC,eAAiBlC,EAAAA,GAASgC,YACjEjH,EAAQwL,EAAgBhC,GAExB8E,EAhBR,SAAsByH,GACpB,IAAKA,EAAUhL,SAAS,KAAM,OAAOgL,EACrC,MAAOpC,EAAQqC,GAAQD,EAAUE,MAAM,IAAK,GAC5C,OAAOtC,EAAOuC,WAAW,KAAO,IAAIF,IAASA,CAC/C,CAYqBG,CADQ9B,EAAoB7U,EAAM6K,QAASrK,EAAO8V,IAE/DrB,GAAsBC,EAAAA,EAAAA,IAAcpG,EAAYwH,GAChDnB,EAAoBnB,EAAqBnJ,EAASrK,GAElD4U,EAAmBA,CACvBpH,EACA+B,EACAQ,EACAqG,KAEAzB,EAAkBnH,EAAQ+B,EAAMQ,EAAYvC,EAAOrI,KAAO2Q,EAAa,GAAKM,EAAY5I,EAAOrI,KAAO2Q,EAAW,EAGnH,OACE5U,EAAAA,EAAAA,MAAAyQ,EAAAA,SAAA,CAAA7Q,SAAA,EACEI,EAAAA,EAAAA,MAAA,OAAAJ,SAAA,EACEM,EAAAA,EAAAA,KAAA,OAAKD,UAAU,qDACfC,EAAAA,EAAAA,KAAA,OAAKD,UAAU,+CAA8CL,UAC3DI,EAAAA,EAAAA,MAAA,OAAKC,UAAU,2CAA0CL,SAAA,EACvDM,EAAAA,EAAAA,KAAA,OAAKD,UAAU,0CAAyCL,SAAEgE,EAAAA,EAAUiN,GAAcxM,QAClFrE,EAAAA,EAAAA,MAAA,OAAKC,UAAU,gBAAeL,SAAA,CAC3BtB,EAAMgV,OAASzK,EAAAA,GAAYmB,aAC1B9J,EAAAA,EAAAA,KAACmR,EAAU,CAACC,cAAehT,EAAMgT,cAAeC,SAAUjT,EAAMiT,WAEjEjT,EAAMgV,OAASzK,EAAAA,GAAYe,eAC1B1J,EAAAA,EAAAA,KAAC0R,EAAY,CAACC,cAAevT,EAAMuT,cAAeC,QAASxT,EAAMwT,cAGrE5R,EAAAA,EAAAA,KAAA,OAAKD,UAAU,iBAInBD,EAAAA,EAAAA,MAAA,OAAAJ,SAAA,EACEM,EAAAA,EAAAA,KAACmD,EAAAA,EAAY,CAACpD,UAAU,qCACxBD,EAAAA,EAAAA,MAAA,OAAKC,UAAU,gCAA+BL,SAAA,EAC5CM,EAAAA,EAAAA,KAAA,OAAKD,UAAU,0DAAyDL,UACtEM,EAAAA,EAAAA,KAAA,MAAID,UAAU,kFAAiFL,SAAC,aAElGM,EAAAA,EAAAA,KAAC4T,EAAY,CAEX5G,gBAAc,EACdC,YAAY,iBACZ3G,OAAQlI,EAAMkI,OACd5B,UAAWtG,EAAMsG,UACjBmC,SAAUzI,EAAMyI,SAChBgI,QAASA,EACTvK,KAAMC,EAAAA,GAAQmC,KACdoH,QAAS1P,EAAM0P,QAAQmH,QAAQnJ,GAAWA,EAAOxL,OAASkO,EAAAA,GAAW9H,OACrEtC,aAAckQ,EACdpH,WAAYmG,EACZlG,aAAcA,CAACf,EAAQ+B,EAAMQ,IAAe6E,EAAiBpH,EAAQ+B,EAAMQ,EAAY,UAXlFvQ,EAAMgV,aAgBjBtT,EAAAA,EAAAA,MAAA,OAAAJ,SAAA,EACEM,EAAAA,EAAAA,KAAA,MAAID,UAAU,4GAA2GL,SAAC,UAG1HM,EAAAA,EAAAA,KAACmD,EAAAA,EAAY,CAACpD,UAAU,qCACxBC,EAAAA,EAAAA,KAAA,OAAKD,UAAU,uBAAsBL,UACnCM,EAAAA,EAAAA,KAAC4T,EAAY,CAEX5G,gBAAc,EACdC,YAAY,iBACZ3G,OAAQlI,EAAMkI,OACd5B,UAAWtG,EAAMsG,UACjBmC,SAAUzI,EAAMyI,SAChBgI,QAASA,EACTvK,KAAMC,EAAAA,GAAQwH,IACd+B,QAAS1P,EAAM0P,QAAQmH,QAAQnJ,GAAWA,EAAOxL,OAASkO,EAAAA,GAAWzC,MACrE3H,aAAckQ,EACdpH,WAAYmG,EACZlG,aAAcA,CAACf,EAAQ+B,EAAMQ,IAAe6E,EAAiBpH,EAAQ+B,EAAMQ,EAAY,SAXlFvQ,EAAMgV,eAgBnBpT,EAAAA,EAAAA,KAAC6R,EAAU,CAAC9R,UAAU,wBAG5B,C,gBCjLA,MAAMmV,GAAchV,EAAAA,MAAW,IAAM,2DAE9B,SAASiV,GAAS1V,GAAiC,IAAhC,QAAEqO,GAA4BrO,EACtD,OACEO,EAAAA,EAAAA,KAAAuQ,EAAAA,SAAA,CAAA7Q,UACEI,EAAAA,EAAAA,MAAA,OAAKC,UAAU,0BAAyBL,SAAA,EACtCM,EAAAA,EAAAA,KAAA,OAAKD,UAAU,iEAAgEL,UAC7EM,EAAAA,EAAAA,KAACE,EAAAA,SAAc,CACbkV,UACEpV,EAAAA,EAAAA,KAAA,OAAKD,UAAU,mDAAkDL,UAC/DM,EAAAA,EAAAA,KAACqV,GAAAA,EAAO,MAEX3V,UAEDM,EAAAA,EAAAA,KAACkV,GAAW,CAACrI,KAAMiB,SAGvB9N,EAAAA,EAAAA,KAAC6R,EAAU,QAInB,CCXA,MAAMyD,GAA2B,IAElB,SAASC,KAAU,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GAChChT,EAAAA,EAAAA,KAEA,MAAM,KAAEiK,IAASgJ,EAAAA,EAAAA,MACXC,GAAcC,EAAAA,EAAAA,OACb3N,IAAgBc,EAAAA,EAAAA,MACjBtK,EAAQwL,EAAgBhC,GAc9B,OAZAlI,EAAAA,WAAgB,KACM8V,EAAAA,EAAAA,GAAgC,CAAEC,SAAUX,KAA4B,MAEjE,IAArBY,UAAUC,QACdL,EAAYM,YAAY,KAMzB,CAACxX,EAAMkT,OAAQlT,EAAMkH,SAEjBjI,eAAewY,yBACpBvW,EAAAA,EAAAA,MAAAyQ,EAAAA,SAAA,CAAA7Q,SAAA,EACEM,EAAAA,EAAAA,KAACsW,EAAAA,EAAkB,CACjBzV,aAAab,EAAAA,EAAAA,KAAC8I,EAAmB,IACjC/H,aACE8L,SAAa,QAAT2I,EAAJ3I,EAAMiB,eAAO,IAAA0H,GAAbA,EAAetW,QACbc,EAAAA,EAAAA,KAAC+I,EAAmB,CAACE,QAASrK,EAAM0B,KAAM0I,WAAsB,QAAZyM,EAAE5I,aAAI,EAAJA,EAAMuG,YAAI,IAAAqC,EAAAA,EAAI9M,EAAAA,GAAYE,mBAC9EyD,KAGRtM,EAAAA,EAAAA,KAAA,OAAKD,UAAU,YAAWL,SACvBmN,SAAa,QAAT6I,EAAJ7I,EAAMiB,eAAO,IAAA4H,GAAbA,EAAexW,QACdc,EAAAA,EAAAA,KAACuW,GAAc,IAAK1J,EAAM5D,QAASrK,EAAM0B,QAEzCN,EAAAA,EAAAA,KAAA,OAAKD,UAAU,gEAA+DL,SAAC,oDAOrFM,EAAAA,EAAAA,KAAA,OAAKD,UAAU,YAAWL,SACvBmN,SAAa,QAAT8I,EAAJ9I,EAAMiB,eAAO,IAAA6H,GAAbA,EAAezW,QACdY,EAAAA,EAAAA,MAAAyQ,EAAAA,SAAA,CAAA7Q,SAAA,EACEM,EAAAA,EAAAA,KAAA,OACED,UAAWU,IAAW,kDAAmD,CACvE,UAAUoM,aAAI,EAAJA,EAAMuG,QAASzK,EAAAA,GAAYC,OACpClJ,UAEHM,EAAAA,EAAAA,KAAC+I,EAAmB,CAACE,QAASrK,EAAM0B,KAAM0I,WAAsB,QAAZ4M,EAAE/I,aAAI,EAAJA,EAAMuG,YAAI,IAAAwC,EAAAA,EAAIjN,EAAAA,GAAYE,iBAElF7I,EAAAA,EAAAA,KAACuW,GAAc,IAAK1J,EAAM5D,QAASrK,EAAM0B,WAG3CN,EAAAA,EAAAA,KAAA,OAAKD,UAAU,gEAA+DL,SAAC,+CAMvF,CAEA,SAAS6W,GAAenY,GACtB,OAAQA,EAAMgV,MACZ,KAAKzK,EAAAA,GAAYC,KACf,OAAO5I,EAAAA,EAAAA,KAACmV,GAAS,IAAK/W,IACxB,KAAKuK,EAAAA,GAAYmB,WACjB,KAAKnB,EAAAA,GAAYe,aACf,OAAO1J,EAAAA,EAAAA,KAACqU,GAAS,IAAKjW,IACxB,KAAKuK,EAAAA,GAAYc,cACjB,QACE,OAAOzJ,EAAAA,EAAAA,KAACmT,EAAU,IAAK/U,IAE7B,C,iFCxFO,IAAKmL,EAAY,SAAZA,GAAY,OAAZA,EAAY,WAAZA,EAAY,WAAZA,EAAY,WAAZA,EAAY,UAAZA,EAAY,UAAZA,EAAY,UAAZA,CAAY,MASZd,EAAc,SAAdA,GAAc,OAAdA,EAAc,YAAdA,EAAc,iBAAdA,CAAc,MAKdE,EAAW,SAAXA,GAAW,OAAXA,EAAW,yBAAXA,EAAW,6BAAXA,EAAW,uBAAXA,EAAW,2BAAXA,EAAW,YAAXA,CAAW,MAQX6F,EAAU,SAAVA,GAAU,OAAVA,EAAU,YAAVA,EAAU,UAAVA,CAAU,MAiEV3K,EAAQ,SAARA,GAAQ,OAARA,EAAQ,4BAARA,EAAQ,sBAARA,EAAQ,uBAARA,EAAQ,sBAARA,EAAQ,oBAARA,EAAQ,oBAARA,EAAQ,oBAARA,EAAQ,4BAARA,EAAQ,qBAARA,EAAQ,wBAARA,EAAQ,qBAARA,EAAQ,QAARA,EAAQ,cAARA,EAAQ,cAARA,EAAQ,cAARA,EAAQ,YAARA,EAAQ,UAARA,CAAQ,MAoBRU,EAAO,SAAPA,GAAO,OAAPA,EAAAA,EAAO,yBAAPA,EAAAA,EAAO,eAAPA,EAAAA,EAAO,aAAPA,CAAO,K,gJC1GnB,MAAMiS,EAAY,IAElB,SAASC,EAAWC,GAClB,IAAKA,EAAO,MAAO,CAAC,EACpB,MAAMC,EAAQD,EAAM7B,MAAM2B,GAC1B,IAAII,EAAaC,EAGjB,OAFqB,IAAjBF,EAAMzX,OAAc0X,EAAcC,EAAkBF,EAAM,IACxDC,EAAaC,GAAmBF,EAC/B,CACL,CAAClO,EAAAA,GAAe0B,QAASyM,EACzB,CAACnO,EAAAA,GAAeC,YAAamO,EAEjC,CAEO,SAAS9D,EAAc+D,GAE5B,MADY,CAACA,EAAIrO,EAAAA,GAAe0B,QAAS2M,EAAIrO,EAAAA,GAAeC,aACjDqO,KAAKP,EAClB,CAIO,SAASlM,EAAkB1L,GAAwB,IAAAa,EACxD,MAAMqG,EAASkR,OAAOpY,EAAMgL,IAAIL,EAAAA,GAAaU,SAE7C,MAAO,CACLI,OAAQ1G,OAAOsT,YAAYrY,EAAMsY,WACjC5Q,OAAQ1H,EAAMgL,IAAIL,EAAAA,GAAa4N,QAC/BrF,OAAQlT,EAAMgL,IAAIL,EAAAA,GAAaW,QAC/B2I,MAAO4D,EAAW7X,EAAMgL,IAAIL,EAAAA,GAAauJ,QACzChN,OAAQkR,OAAOI,SAAStR,GAAUA,EAAS,KAC3CsN,KAAmC,QAA/B3T,EAAGb,EAAMgL,IAAIL,EAAAA,GAAaC,aAAK,IAAA/J,EAAAA,EAAoBkJ,EAAAA,GAAYE,YACnEvI,KAAM1B,EAAMgL,IAAIL,EAAAA,GAAa8N,MAEjC,CAEO,SAAS/D,EAAcT,EAAeyE,GAC3C,OAAKA,EACDzE,IAAUhL,EAAAA,GAAyByP,EACnCzE,IAAU,IAAIhL,EAAAA,KAA2B,IAAIyP,IAC1CzE,EAHgBA,CAIzB,CAEO,SAASzC,EAAYmH,EAAoBnP,EAA+B0D,GAC7E,MAAMqE,EAAa,IAAI9G,gBAAgBjB,GAEvC,OAAQA,EAAawB,IAAIL,EAAAA,GAAaC,OACpC,KAAKb,EAAAA,GAAYc,cACf0G,EAAW7G,IAAIC,EAAAA,GAAaC,KAAMb,EAAAA,GAAYE,aAC9C,MACF,KAAKF,EAAAA,GAAYmB,WACfqG,EAAW7G,IAAIC,EAAAA,GAAaC,KAAMb,EAAAA,GAAYe,cAC9C,MACF,KAAKf,EAAAA,GAAYe,aACfyG,EAAW7G,IAAIC,EAAAA,GAAaC,KAAMb,EAAAA,GAAYmB,YAC9C,MACF,KAAKnB,EAAAA,GAAYE,YACjB,QACEsH,EAAW7G,IAAIC,EAAAA,GAAaC,KAAMb,EAAAA,GAAYc,eAWlD,OARI8N,IAAa1T,EAAAA,GAASkC,gBACxBoK,EAAWnG,OAAOT,EAAAA,GAAaU,QAC/BkG,EAAW7G,IAAIC,EAAAA,GAAaW,QAAQlE,EAAAA,EAAAA,IAAW8F,EAAO7F,OAAQC,EAAAA,GAAiByB,EAAAA,OAE/EwI,EAAWnG,OAAOT,EAAAA,GAAaW,QAC/BiG,EAAW7G,IAAIC,EAAAA,GAAaU,OAAQ6B,EAAOhG,OAAOU,aAG7C2J,CACT,C,sEChEO,SAASmG,EAAkB7W,GAAuC,IAAtC,YAAEoB,EAAW,aAAEE,GAAqBtB,EACrE,OAAOO,EAAAA,EAAAA,KAACY,EAAAA,EAAO,CAACb,UAAU,wBAAwBc,YAAaA,EAAaE,aAAcA,GAC5F,C,kBCVA,IAAIyW,EAAI,EAAQ,OACZC,EAAiB,uBACjBC,EAAmB,EAAQ,OAI/BF,EAAE,CAAEG,OAAQ,QAASC,OAAO,GAAQ,CAClCrI,cAAe,SAAuBsI,GACpC,OAAOJ,EAAeK,KAAMD,EAAYrF,UAAUtT,OAAS,EAAIsT,UAAU,QAAKlG,EAChF,IAGFoL,EAAiB,gB","sources":["webpack://@finviz/website/./js/app/shared/tracking.ts","webpack://@finviz/website/./js/main/components/ChipSwitch.tsx","webpack://@finviz/website/./js/main/components/SubMenu/SubMenu.tsx","webpack://@finviz/website/./js/main/components/SubMenu/SubMenuTabs.tsx","webpack://@finviz/website/./js/main/hooks/use-sticky-shadow.ts","webpack://@finviz/website/./js/main/hooks/use-track-pageview.ts","webpack://@finviz/website/./js/main/modules/options/components/StickyShadow.tsx","webpack://@finviz/website/./js/main/modules/options/constants/columns.tsx","webpack://@finviz/website/./js/main/modules/options/constants/common.ts","webpack://@finviz/website/./js/main/modules/quote/components/QuoteOptionsTabMenu.tsx","webpack://@finviz/website/./js/main/modules/options/components/OptionsViewSwitcher.tsx","webpack://@finviz/website/./js/main/modules/options/hooks/useOptionsQuery.ts","webpack://@finviz/website/./js/main/modules/options/components/PriceRow.tsx","webpack://@finviz/website/./js/main/modules/options/components/TableColumn.tsx","webpack://@finviz/website/./js/main/modules/options/components/ChainTable.tsx","webpack://@finviz/website/./js/main/modules/options/utils/options.ts","webpack://@finviz/website/./js/main/modules/options/components/FilterSelect.tsx","webpack://@finviz/website/./js/main/modules/options/components/DateFilter.tsx","webpack://@finviz/website/./js/main/modules/options/components/StrikeFilter.tsx","webpack://@finviz/website/./js/main/modules/options/components/ViewFooter.tsx","webpack://@finviz/website/./js/main/modules/options/hooks/useOptionsSortChange.ts","webpack://@finviz/website/./js/main/modules/options/hooks/useOptionsSortOrder.ts","webpack://@finviz/website/./js/main/modules/options/routes/ChainRoute.tsx","webpack://@finviz/website/./js/main/modules/options/components/OptionsTable.tsx","webpack://@finviz/website/./js/main/modules/options/routes/ListRoute.tsx","webpack://@finviz/website/./js/main/modules/options/routes/PlotRoute.tsx","webpack://@finviz/website/./js/main/modules/options/index.tsx","webpack://@finviz/website/./js/main/modules/options/types.tsx","webpack://@finviz/website/./js/main/modules/options/utils/query.ts","webpack://@finviz/website/./js/main/modules/quote/components/QuoteStickySubMenu.tsx","webpack://@finviz/website/../node_modules/core-js/modules/es.array.find-last-index.js"],"sourcesContent":["export enum AdsProvider {\r\n None,\r\n InvestingChannel,\r\n Freestar,\r\n}\r\n\r\nexport function getAdsProvider() {\r\n if (FinvizSettings.hasUserPremium) return AdsProvider.None\r\n\r\n if (FinvizSettings.adsProvider === 2) {\r\n return AdsProvider.Freestar\r\n }\r\n\r\n return AdsProvider.InvestingChannel\r\n}\r\n\r\n/**\r\n * Tracks virtual page views to google analytics and freestar\r\n */\r\nexport function trackPageView(props: { pathname?: string; query?: string; freestarPageView?: boolean }) {\r\n const { pathname = window.location.pathname, query = window.location.search, freestarPageView = true } = props\r\n\r\n window.gtag?.('set', 'page_path', `${pathname}${query.length ? '?' : ''}${query.replace(/^\\?/, '')}`)\r\n window.gtag?.('event', 'page_view')\r\n\r\n if (freestarPageView && getAdsProvider() === AdsProvider.Freestar) {\r\n window.freestar?.queue.push(() => freestar.trackPageview())\r\n }\r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { Button, ButtonComponentProps, ButtonProps } from './button'\r\nimport { Paragraph } from './typography'\r\n\r\ninterface Props {\r\n children: (React.ReactElement | null)[]\r\n label?: string\r\n size?: ButtonProps['size']\r\n rounding?: ButtonProps['rounding']\r\n}\r\n\r\nexport function ChipSwitch({ children, label, size, rounding }: Props) {\r\n return (\r\n
\r\n {label && (\r\n \r\n {label}\r\n \r\n )}\r\n\r\n {React.Children.map(children, (child: React.ReactElement | null) => {\r\n if (React.isValidElement(child) && child.type === Button) {\r\n return React.cloneElement(child, {\r\n size,\r\n rounding,\r\n theme: child.props.theme ?? 'chipTransparent',\r\n className: classnames(child.props.className, {\r\n // @todo - these style should be applied globally onto all chipTransparent buttons\r\n '!text-gray-600 dark:!text-gray-400': !child.props.active,\r\n '!text-gray-800 dark:!text-white': child.props.active,\r\n }),\r\n })\r\n }\r\n\r\n return child\r\n })}\r\n
\r\n )\r\n}\r\n\r\nexport const ChipSwitchButton = Button\r\n","import classNames from 'classnames'\r\nimport { isRedesignEnabled } from 'finviz-charts/app/utils'\r\nimport * as React from 'react'\r\n\r\ninterface Props extends React.HTMLProps {\r\n leftContent?: React.ReactNode\r\n middleContent?: React.ReactNode\r\n rightContent?: React.ReactNode\r\n}\r\n\r\nexport function SubMenu({ leftContent, middleContent, rightContent, ...props }: Props) {\r\n return (\r\n
\r\n
\r\n \r\n {leftContent}\r\n
\r\n {middleContent &&
{middleContent}
}\r\n
{rightContent}
\r\n
\r\n \r\n )\r\n}\r\n","import { Link } from 'react-router-dom'\r\n\r\nimport { Button, ButtonSizeType } from '../button'\r\n\r\ninterface Props {\r\n items: Array<{ label: string; href: string; isActive: boolean; reloadDocument?: boolean }>\r\n size?: ButtonSizeType\r\n}\r\n\r\nexport function SubMenuTabs({ items, size = 'medium' }: Props) {\r\n return (\r\n
\r\n {items.map(({ label, href, isActive, reloadDocument }) => (\r\n \r\n {label}\r\n \r\n ))}\r\n
\r\n )\r\n}\r\n","import throttle from 'lodash.throttle'\r\nimport * as React from 'react'\r\n\r\nexport function useStickyShadow() {\r\n const stickyRef = React.useRef(null)\r\n const [isSticky, setIsSticky] = React.useState(false)\r\n\r\n React.useEffect(() => {\r\n if (!stickyRef.current) return\r\n\r\n const onScroll = throttle(function () {\r\n const stickyElement = stickyRef.current\r\n if (!stickyElement) return\r\n\r\n const elementStickyTopOffset = parseFloat(getComputedStyle(stickyElement).top)\r\n const elementCurrentTopOffset = stickyElement.getBoundingClientRect().top\r\n\r\n setIsSticky(elementCurrentTopOffset === elementStickyTopOffset)\r\n }, 100)\r\n\r\n onScroll()\r\n document.addEventListener('scroll', onScroll)\r\n\r\n return () => {\r\n document.removeEventListener('scroll', onScroll)\r\n }\r\n }, [])\r\n\r\n return React.useMemo(\r\n () => ({\r\n stickyRef,\r\n isSticky,\r\n }),\r\n [isSticky]\r\n )\r\n}\r\n","import * as React from 'react'\r\nimport { useLocation } from 'react-router-dom'\r\n\r\nimport * as tracking from '../../app/shared/tracking'\r\n\r\nexport function useTrackPageView(props?: { trackInitial?: boolean; trackAutomatically?: boolean }) {\r\n const { trackInitial = false, trackAutomatically = true } = props ?? {}\r\n const initialRender = React.useRef(trackInitial)\r\n const location = useLocation()\r\n\r\n const handleTrackView = React.useCallback(() => {\r\n tracking.trackPageView({ pathname: location.pathname, query: location.search })\r\n }, [location.pathname, location.search])\r\n\r\n React.useEffect(() => {\r\n if (!trackAutomatically) return\r\n if (initialRender.current) handleTrackView()\r\n initialRender.current = true\r\n }, [trackAutomatically, handleTrackView, trackInitial])\r\n\r\n return handleTrackView\r\n}\r\n","import classNames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { useStickyShadow } from '../../../hooks/use-sticky-shadow'\r\n\r\nexport function StickyShadow(props: React.HTMLProps) {\r\n const { stickyRef, isSticky } = useStickyShadow()\r\n\r\n return (\r\n
\r\n \r\n
\r\n )\r\n}\r\n","import { formatDate } from '../../../../app/header/utils'\r\nimport { RedGreenText } from '../../../components/RedGreenText'\r\nimport { TableAlign } from '../../../components/Table'\r\nimport { formatNumber } from '../../../util'\r\nimport { ColumnId, RowKind, TableColumnDefinition } from '../types'\r\nimport { DATE_FORMAT_INT, DATE_FORMAT_VIEW, DATE_FORMAT_VIEW_LONG } from './common'\r\n\r\nconst NULL_VALUE = '-'\r\nconst FORMAT_SETTINGS = { defaultValue: NULL_VALUE }\r\nconst GREEK_SETTINGS = { defaultValue: NULL_VALUE, fractions: 4 }\r\n\r\nexport const columnMap: Record = Object.freeze({\r\n [ColumnId.LastClose]: {\r\n id: ColumnId.LastClose,\r\n align: TableAlign.Right,\r\n name: 'Last Close',\r\n renderColumn: (args) => {\r\n if (args.kind === RowKind.OptionRow) return null\r\n return args.row.lastClose === 0 ? NULL_VALUE : formatNumber(args.row.lastClose, FORMAT_SETTINGS)\r\n },\r\n },\r\n [ColumnId.ChangeUsd]: {\r\n id: ColumnId.ChangeUsd,\r\n align: TableAlign.Right,\r\n name: 'Change $',\r\n getValueForSort: (args) => {\r\n if (args.kind === RowKind.OptionRow) return null\r\n if (args.row.lastClose === 0) return null\r\n return args.row.lastChange\r\n },\r\n renderColumn: (args) => {\r\n if (args.kind === RowKind.OptionRow) return null\r\n if (args.row.lastClose === 0) return NULL_VALUE\r\n\r\n return (\r\n \r\n {formatNumber(args.row.lastChange, { ...FORMAT_SETTINGS, showPlusSign: true })}\r\n \r\n )\r\n },\r\n },\r\n [ColumnId.ChangePct]: {\r\n id: ColumnId.ChangePct,\r\n align: TableAlign.Right,\r\n name: 'Change %',\r\n getValueForSort: (args) => {\r\n if (args.kind === RowKind.OptionRow) return null\r\n if (typeof args.row.lastClose !== 'number' || args.row.lastClose === 0) return null\r\n const prevClose = args.row.lastClose - args.row.lastChange\r\n return (args.row.lastClose / prevClose - 1) * 100\r\n },\r\n renderColumn: (args) => {\r\n if (args.kind === RowKind.OptionRow) return null\r\n if (typeof args.row.lastClose !== 'number' || args.row.lastClose === 0) return NULL_VALUE\r\n\r\n const prevClose = args.row.lastClose - args.row.lastChange\r\n const change = (args.row.lastClose / prevClose - 1) * 100\r\n\r\n return (\r\n \r\n {formatNumber(change, { ...FORMAT_SETTINGS, showPlusSign: true })}\r\n \r\n )\r\n },\r\n },\r\n [ColumnId.BidPrice]: {\r\n id: ColumnId.BidPrice,\r\n align: TableAlign.Right,\r\n name: 'Bid',\r\n renderColumn: (args) => {\r\n if (args.kind === RowKind.OptionRow) return null\r\n if (args.row.bidPrice === 0) return NULL_VALUE\r\n return formatNumber(args.row.bidPrice, FORMAT_SETTINGS)\r\n },\r\n },\r\n [ColumnId.AskPrice]: {\r\n id: ColumnId.AskPrice,\r\n align: TableAlign.Right,\r\n name: 'Ask',\r\n renderColumn: (args) => {\r\n if (args.kind === RowKind.OptionRow) return null\r\n if (args.row.askPrice === 0) return NULL_VALUE\r\n return formatNumber(args.row.askPrice, FORMAT_SETTINGS)\r\n },\r\n },\r\n [ColumnId.Volume]: {\r\n id: ColumnId.Volume,\r\n align: TableAlign.Right,\r\n name: 'Volume',\r\n renderColumn: (args) => {\r\n if (args.kind === RowKind.OptionRow) return null\r\n return formatNumber(args.row.lastVolume, { ...FORMAT_SETTINGS, fractions: 0 })\r\n },\r\n },\r\n [ColumnId.OpenInterest]: {\r\n id: ColumnId.OpenInterest,\r\n align: TableAlign.Right,\r\n name: 'Open Int.',\r\n renderColumn: (args) => {\r\n if (args.kind === RowKind.OptionRow) return null\r\n return formatNumber(args.row.openInterest, { ...FORMAT_SETTINGS, fractions: 0 })\r\n },\r\n },\r\n [ColumnId.StrikePrice]: {\r\n id: ColumnId.StrikePrice,\r\n align: TableAlign.Right,\r\n name: 'Strike',\r\n className: 'w-28',\r\n renderColumn: (args) => formatNumber(args.row.strike, FORMAT_SETTINGS),\r\n },\r\n [ColumnId.ExpirationDate]: {\r\n id: ColumnId.ExpirationDate,\r\n align: TableAlign.Right,\r\n name: 'Expiry',\r\n className: 'w-28',\r\n renderColumn: (args) => formatDate(args.row.exDate, DATE_FORMAT_INT, DATE_FORMAT_VIEW),\r\n },\r\n [ColumnId.ContractName]: {\r\n id: ColumnId.ContractName,\r\n align: TableAlign.Left,\r\n name: 'Contract Name',\r\n className: 'w-44',\r\n getValueForSort: (args) => `${args.ticker}${args.row.exDate}${args.row.strike}`,\r\n renderColumn: (args) => {\r\n if (!args.row) return NULL_VALUE\r\n const strike = (args.row.strike * 1000).toString().padStart(8, '0')\r\n\r\n return (\r\n \r\n {args.ticker?.replace('-', '')}\r\n {args.row.exDate}\r\n {args.kind === RowKind.Call ? 'C' : 'P'}\r\n {strike}\r\n \r\n )\r\n },\r\n },\r\n [ColumnId.LastTrade]: {\r\n id: ColumnId.LastTrade,\r\n align: TableAlign.Right,\r\n name: 'Last Trade',\r\n className: 'w-44',\r\n getValueForSort: (args) => {\r\n if (args.kind === RowKind.OptionRow) return null\r\n return new Date(args.row.lastTime)\r\n },\r\n renderColumn: (args) => {\r\n if (args.kind === RowKind.OptionRow) return null\r\n if (args.row.lastClose === 0) return NULL_VALUE\r\n return formatDate(new Date(args.row.lastTime), DATE_FORMAT_VIEW_LONG)\r\n },\r\n },\r\n [ColumnId.IV]: {\r\n id: ColumnId.IV,\r\n align: TableAlign.Right,\r\n name: 'IV',\r\n renderColumn: (args) => {\r\n if (args.kind === RowKind.OptionRow) return null\r\n if (!args.row.iv) return NULL_VALUE\r\n return formatNumber(args.row.iv * 100, FORMAT_SETTINGS) + '%'\r\n },\r\n },\r\n [ColumnId.Delta]: {\r\n id: ColumnId.Delta,\r\n align: TableAlign.Right,\r\n name: 'Delta',\r\n renderColumn: (args) => {\r\n if (args.kind === RowKind.OptionRow) return null\r\n if (!args.row.delta) return NULL_VALUE\r\n return formatNumber(args.row.delta, GREEK_SETTINGS)\r\n },\r\n },\r\n [ColumnId.Gamma]: {\r\n id: ColumnId.Gamma,\r\n align: TableAlign.Right,\r\n name: 'Gamma',\r\n renderColumn: (args) => {\r\n if (args.kind === RowKind.OptionRow) return null\r\n if (!args.row.gamma) return NULL_VALUE\r\n return formatNumber(args.row.gamma, GREEK_SETTINGS)\r\n },\r\n },\r\n [ColumnId.Theta]: {\r\n id: ColumnId.Theta,\r\n align: TableAlign.Right,\r\n name: 'Theta',\r\n renderColumn: (args) => {\r\n if (args.kind === RowKind.OptionRow) return null\r\n if (!args.row.theta) return NULL_VALUE\r\n return formatNumber(args.row.theta, GREEK_SETTINGS)\r\n },\r\n },\r\n [ColumnId.Vega]: {\r\n id: ColumnId.Vega,\r\n align: TableAlign.Right,\r\n name: 'Vega',\r\n renderColumn: (args) => {\r\n if (args.kind === RowKind.OptionRow) return null\r\n if (!args.row.vega) return NULL_VALUE\r\n return formatNumber(args.row.vega, GREEK_SETTINGS)\r\n },\r\n },\r\n [ColumnId.Rho]: {\r\n id: ColumnId.Rho,\r\n align: TableAlign.Right,\r\n name: 'Rho',\r\n renderColumn: (args) => {\r\n if (args.kind === RowKind.OptionRow) return null\r\n if (!args.row.rho) return NULL_VALUE\r\n return formatNumber(args.row.rho, GREEK_SETTINGS)\r\n },\r\n },\r\n})\r\n","export const DATE_FORMAT_DB = 'yyyy-MM-dd'\r\nexport const DATE_FORMAT_INT = 'yyMMdd'\r\nexport const DATE_FORMAT_VIEW = 'MM/dd/yyyy'\r\nexport const DATE_FORMAT_VIEW_LONG = 'MMM dd, yyyy, hh:mm a'\r\nexport const DATE_FORMAT_SCATTER_PLOT = '%m/%d/%Y'\r\nexport const LINK_COLUMN_NAME = 'link'\r\n","import { decodeQueryString, encodeQueryString } from '../../../../app/queryString'\r\nimport { SubMenuTabs } from '../../../components/SubMenu/SubMenuTabs'\r\nimport { OptionsSubpage, OptionsView } from '../../options/types'\r\nimport { QuoteSubview } from '../types'\r\n\r\nconst OPTIONS_SECTION_LABELS = {\r\n [QuoteSubview.OptionsChain]: 'Prices',\r\n [QuoteSubview.OptionsVolatility]: 'Volatility & Greeks',\r\n}\r\n\r\nconst OPTIONS_MENU_TABS: Array = [\r\n QuoteSubview.OptionsChain,\r\n QuoteSubview.OptionsVolatility,\r\n]\r\n\r\nfunction getProperOV(ty: string, ov: string): string {\r\n if (ty === OptionsSubpage.Volatility && ov === OptionsView.Plot) {\r\n return OptionsView.ChainByDate\r\n }\r\n return ov\r\n}\r\n\r\nfunction getOptionsMenuTabs() {\r\n const searchParams = decodeQueryString()\r\n\r\n return OPTIONS_MENU_TABS.map((value) => ({\r\n label: OPTIONS_SECTION_LABELS[value],\r\n href: `/quote.ashx?${encodeQueryString({\r\n ...searchParams,\r\n ty: value,\r\n ov: getProperOV(value, searchParams.ov),\r\n })}`,\r\n isActive: searchParams.ty === value,\r\n reloadDocument: true,\r\n }))\r\n}\r\n\r\nexport function QuoteOptionsTabMenu() {\r\n return \r\n}\r\n","import * as React from 'react'\r\nimport { Link, useSearchParams } from 'react-router-dom'\r\n\r\nimport { ChipSwitch, ChipSwitchButton } from '../../../components/ChipSwitch'\r\nimport { OptionsQuery, OptionsSubpage, OptionsView } from '../types'\r\n\r\nexport function OptionsViewSwitcher({ activeView, subpage }: { activeView: OptionsView; subpage: OptionsSubpage }) {\r\n const [searchParams] = useSearchParams()\r\n\r\n const chainLink = React.useMemo(() => {\r\n const newParams = new URLSearchParams(searchParams)\r\n newParams.set(\r\n OptionsQuery.View,\r\n [OptionsView.ChainByStrike, OptionsView.ListByStrike].includes(newParams.get(OptionsQuery.View) as OptionsView)\r\n ? OptionsView.ChainByStrike\r\n : OptionsView.ChainByDate\r\n )\r\n return newParams\r\n }, [searchParams])\r\n\r\n const listLink = React.useMemo(() => {\r\n const newParams = new URLSearchParams(searchParams)\r\n newParams.set(\r\n OptionsQuery.View,\r\n [OptionsView.ChainByStrike, OptionsView.ListByStrike].includes(newParams.get(OptionsQuery.View) as OptionsView)\r\n ? OptionsView.ListByStrike\r\n : OptionsView.ListByDate\r\n )\r\n return newParams\r\n }, [searchParams])\r\n\r\n const plotLink = React.useMemo(() => {\r\n const newParams = new URLSearchParams(searchParams)\r\n newParams.set(OptionsQuery.View, OptionsView.Plot)\r\n newParams.delete(OptionsQuery.Strike)\r\n newParams.delete(OptionsQuery.Expiry)\r\n return newParams\r\n }, [searchParams])\r\n\r\n return (\r\n \r\n \r\n Chain\r\n \r\n \r\n List\r\n \r\n {subpage === OptionsSubpage.Prices ? (\r\n \r\n 3D\r\n \r\n ) : null}\r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { OptionsParsedQuery, parseOptionsQuery } from '../utils/query'\r\n\r\nexport function useOptionsQuery(params: URLSearchParams): OptionsParsedQuery {\r\n return React.useMemo(() => parseOptionsQuery(params), [params])\r\n}\r\n","import { getDate, getFormattedDateString } from '../../../../app/header/utils'\r\nimport { TableAlign, TableCell, TableRow } from '../../../components/Table'\r\nimport { formatNumber } from '../../../util'\r\n\r\ninterface PriceRowProps {\r\n /**\r\n * Price to show\r\n */\r\n lastClose: number | null\r\n\r\n /**\r\n * Date when the last price was valid to.\r\n *\r\n * @default current time\r\n */\r\n lastTime: number | null\r\n\r\n /**\r\n * Column span for the left column with date\r\n */\r\n leftSpan?: number\r\n\r\n /**\r\n * Column span for the right column, which is empty\r\n */\r\n rightSpan?: number\r\n\r\n priceAlign?: TableAlign\r\n\r\n /**\r\n * Show additional empty cells around lastClose cell\r\n */\r\n showAdditionalCells?: boolean\r\n}\r\n\r\nexport function PriceRow({\r\n lastClose,\r\n lastTime,\r\n leftSpan,\r\n rightSpan,\r\n priceAlign = TableAlign.Center,\r\n showAdditionalCells = true,\r\n}: PriceRowProps) {\r\n if (lastTime === null || lastClose === null) return null\r\n\r\n const date = getDate(lastTime * 1000)\r\n const formattedDate = getFormattedDateString(date, 'dateOnly')\r\n const formattedTime = getFormattedDateString(date, 'timeOnly')\r\n\r\n return (\r\n \r\n \r\n Price {formattedDate}{' '}\r\n {formattedTime} ET\r\n \r\n {showAdditionalCells && }\r\n \r\n {formatNumber(lastClose)}\r\n \r\n {showAdditionalCells && }\r\n \r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\n\r\nimport { TableCell, TableCellProps } from '../../../components/Table'\r\n\r\nexport interface OptionsTableCellProps extends TableCellProps {\r\n isHighlighted?: boolean\r\n isBorderVisible?: boolean\r\n}\r\n\r\nexport function OptionsTableCell({\r\n isFirst,\r\n isLast,\r\n isHighlighted,\r\n isBorderVisible = true,\r\n ...props\r\n}: OptionsTableCellProps) {\r\n return (\r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport React from 'react'\r\nimport { Link, useSearchParams } from 'react-router-dom'\r\n\r\nimport {\r\n Table,\r\n TableAlign,\r\n TableBody,\r\n TableHead,\r\n TableHeaderSortable,\r\n TableRow,\r\n getDefaultSortFromUrl,\r\n useTableSort,\r\n} from '../../../components/Table'\r\nimport { SortByShape } from '../../../hooks/use-sort-data'\r\nimport { SortDirection, SortableValue } from '../../../types'\r\nimport { columnMap } from '../constants/columns'\r\nimport { ColumnId, Option, OptionRow, OptionsSubpage, RowKind, TableColumnDefinition } from '../types'\r\nimport { mergeOptionsBy } from '../utils/options'\r\nimport { getViewLink } from '../utils/query'\r\nimport { PriceRow } from './PriceRow'\r\nimport { OptionsTableCell, OptionsTableCellProps } from './TableColumn'\r\n\r\nexport interface ChainTableColumn extends Omit {\r\n /**\r\n * The sort hook internally compares `id` key, and because we have the same\r\n * columns on each side, we need them to be unique, so we keep the original id\r\n */\r\n id: string\r\n originalId: ColumnId\r\n /**\r\n * Used in sorting to distinguish between calls and puts columns\r\n */\r\n rowKind: RowKind\r\n}\r\n\r\nconst CALL_OPTION_COLUMNS: ChainTableColumn[] = [\r\n ColumnId.LastClose,\r\n ColumnId.ChangeUsd,\r\n ColumnId.ChangePct,\r\n ColumnId.BidPrice,\r\n ColumnId.AskPrice,\r\n ColumnId.Volume,\r\n ColumnId.OpenInterest,\r\n].map((id) => ({\r\n ...columnMap[id],\r\n originalId: id,\r\n id: `call_${columnMap[id].id}`,\r\n rowKind: RowKind.Call,\r\n className: classnames({\r\n 'w-22 xl:w-auto': id === ColumnId.LastClose,\r\n 'w-20 xl:w-auto': [ColumnId.ChangeUsd, ColumnId.OpenInterest].includes(id),\r\n 'hidden xl:table-cell': id === ColumnId.ChangePct,\r\n }),\r\n}))\r\n\r\nconst PUT_OPTION_COLUMNS: ChainTableColumn[] = CALL_OPTION_COLUMNS.map((option) => ({\r\n ...option,\r\n id: `put_${option.originalId}`,\r\n originalId: option.originalId,\r\n rowKind: RowKind.Put,\r\n}))\r\n\r\nconst CALL_OPTION_GREEK_COLUMNS: ChainTableColumn[] = [\r\n ColumnId.LastClose,\r\n ColumnId.IV,\r\n ColumnId.Delta,\r\n ColumnId.Gamma,\r\n ColumnId.Theta,\r\n ColumnId.Vega,\r\n ColumnId.Rho,\r\n].map((id) => ({\r\n ...columnMap[id],\r\n originalId: id,\r\n id: `call_${columnMap[id].id}`,\r\n rowKind: RowKind.Call,\r\n className: classnames({\r\n 'w-22 xl:w-auto': id === ColumnId.LastClose,\r\n 'w-20 xl:w-auto': [ColumnId.ChangeUsd, ColumnId.OpenInterest].includes(id),\r\n 'hidden xl:table-cell': id === ColumnId.ChangePct,\r\n }),\r\n}))\r\n\r\nconst PUT_OPTION_GREEK_COLUMNS: ChainTableColumn[] = CALL_OPTION_GREEK_COLUMNS.map((option) => ({\r\n ...option,\r\n id: `put_${option.originalId}`,\r\n originalId: option.originalId,\r\n rowKind: RowKind.Put,\r\n}))\r\n\r\nconst FULL_COLUMNS_BREAKPOINT = 1280\r\n\r\nfunction valueGetter(column: ChainTableColumn) {\r\n return (row: OptionRow) => {\r\n const customValueGetter = typeof column.getValueForSort === 'function' ? column.getValueForSort : undefined\r\n\r\n switch (column.rowKind) {\r\n case RowKind.OptionRow:\r\n if (customValueGetter) {\r\n return customValueGetter({ kind: RowKind.OptionRow, row })\r\n } else {\r\n return (row[column.originalId as keyof typeof row] as SortableValue) ?? null\r\n }\r\n case RowKind.Call:\r\n if (row.call && customValueGetter) {\r\n return customValueGetter({ kind: RowKind.Call, row: row.call })\r\n } else {\r\n return row.call?.[column.originalId as keyof Option] ?? null\r\n }\r\n case RowKind.Put:\r\n if (row.put && customValueGetter) {\r\n return customValueGetter({ kind: RowKind.Put, row: row.put })\r\n } else {\r\n return row.put?.[column.originalId as keyof Option] ?? null\r\n }\r\n default:\r\n return null\r\n }\r\n }\r\n}\r\n\r\ninterface ChainTableProps {\r\n className?: string\r\n\r\n /**\r\n * Type of table, display either prices or volatility & greeks\r\n */\r\n subpage: OptionsSubpage\r\n\r\n /**\r\n * Options rows which are displayed in the table.\r\n */\r\n data: Option[]\r\n\r\n /**\r\n * `id` of the column which is displayed as the middle column between\r\n * calls and puts.\r\n *\r\n * @default ColumnId.StrikePrice\r\n */\r\n middleColumn?: ColumnId.StrikePrice | ColumnId.ExpirationDate\r\n\r\n /**\r\n * When enabled, a row with current price will be added to the table at the\r\n * position of the price. The row will only be visible when ordering by the\r\n * middle column.\r\n *\r\n * @default middleColumn === ColumnId.StrikePrice\r\n */\r\n isPriceRowEnabled?: boolean\r\n\r\n /**\r\n * Last close for current ticker. Used to add highlight on calls/puts and as\r\n * a row in the middle of the table which displays the current price.\r\n */\r\n lastClose: number | null\r\n\r\n /**\r\n * Time when the `lastClose` was valid. Displayed in current price row.\r\n */\r\n lastTime: number | null\r\n\r\n /**\r\n * Whether headers should become sticky\r\n */\r\n isHeaderSticky?: boolean\r\n headerClass?: string\r\n\r\n /**\r\n * Sorting key (column id, with optional dash prefix for descending)\r\n */\r\n tableOrder: string\r\n\r\n onSortChange?: (\r\n column: ChainTableColumn,\r\n sort: SortByShape,\r\n changeSort: (newSort: ChainTableColumn, direction?: SortDirection) => void\r\n ) => void\r\n}\r\n\r\nexport function ChainTable({\r\n className,\r\n data,\r\n lastClose,\r\n lastTime,\r\n middleColumn = ColumnId.StrikePrice,\r\n isPriceRowEnabled = middleColumn === ColumnId.StrikePrice,\r\n isHeaderSticky,\r\n headerClass,\r\n subpage,\r\n tableOrder,\r\n onSortChange,\r\n}: ChainTableProps) {\r\n const CALL_COLUMNS = subpage === OptionsSubpage.Volatility ? CALL_OPTION_GREEK_COLUMNS : CALL_OPTION_COLUMNS\r\n const PUT_COLUMNS = subpage === OptionsSubpage.Volatility ? PUT_OPTION_GREEK_COLUMNS : PUT_OPTION_COLUMNS\r\n const [columnsLength, setColumnsLength] = React.useState(CALL_COLUMNS.length)\r\n const [searchParams] = useSearchParams()\r\n const tickerLastClose = lastClose ?? 0\r\n\r\n React.useEffect(() => {\r\n const updateColumnsLength = () => {\r\n if (window.innerWidth >= FULL_COLUMNS_BREAKPOINT && columnsLength === CALL_COLUMNS.length - 1) {\r\n setColumnsLength(CALL_COLUMNS.length)\r\n } else if (window.innerWidth < FULL_COLUMNS_BREAKPOINT && columnsLength === CALL_COLUMNS.length) {\r\n setColumnsLength(CALL_COLUMNS.length - 1)\r\n }\r\n }\r\n\r\n updateColumnsLength()\r\n window.addEventListener('resize', updateColumnsLength)\r\n\r\n return () => {\r\n window.removeEventListener('resize', updateColumnsLength)\r\n }\r\n })\r\n\r\n const middleColumnDefinition = React.useMemo(\r\n () => ({\r\n ...columnMap[middleColumn],\r\n originalId: middleColumn,\r\n rowKind: RowKind.OptionRow,\r\n }),\r\n [middleColumn]\r\n )\r\n\r\n const allColumns = React.useMemo(\r\n () => [...CALL_COLUMNS, middleColumnDefinition, ...PUT_COLUMNS],\r\n [CALL_COLUMNS, PUT_COLUMNS, middleColumnDefinition]\r\n )\r\n\r\n const mergedData = React.useMemo(() => mergeOptionsBy(data, middleColumn), [data, middleColumn])\r\n const {\r\n data: tableRows,\r\n sort,\r\n changeSort,\r\n } = useTableSort({\r\n data: mergedData,\r\n columns: allColumns,\r\n defaultSort: getDefaultSortFromUrl(allColumns, tableOrder),\r\n valueGetter,\r\n })\r\n\r\n /**\r\n * We display current price as a row between strike prices\r\n */\r\n const currentPriceRow = React.useMemo(() => {\r\n const isVisible = isPriceRowEnabled && sort.column.id === middleColumnDefinition.id\r\n\r\n if (!isVisible) return { isVisible, rowIndex: -1 }\r\n\r\n const rowIndex =\r\n sort.direction === SortDirection.Ascending\r\n ? tableRows.findLastIndex((option) => option.strike < tickerLastClose)\r\n : tableRows.findLastIndex((option) => option.strike > tickerLastClose)\r\n\r\n return { isVisible, index: rowIndex }\r\n }, [isPriceRowEnabled, sort.column.id, sort.direction, middleColumnDefinition.id, tableRows, tickerLastClose])\r\n\r\n const priceRowProps = React.useMemo(\r\n () => ({\r\n lastClose: tickerLastClose,\r\n lastTime,\r\n leftSpan: columnsLength,\r\n rightSpan: columnsLength,\r\n }),\r\n [tickerLastClose, lastTime, columnsLength]\r\n )\r\n\r\n return (\r\n \r\n \r\n {CALL_COLUMNS.map((column) => (\r\n {\r\n typeof onSortChange === 'function' ? onSortChange(column, sort, changeSort) : changeSort(column)\r\n }}\r\n >\r\n {column.name}\r\n \r\n ))}\r\n\r\n
\r\n {\r\n typeof onSortChange === 'function'\r\n ? onSortChange(middleColumnDefinition, sort, changeSort)\r\n : changeSort(middleColumnDefinition)\r\n }}\r\n className=\"w-28\"\r\n >\r\n {middleColumnDefinition.name}\r\n \r\n \r\n\r\n {PUT_COLUMNS.map((column) => (\r\n {\r\n typeof onSortChange === 'function' ? onSortChange(column, sort, changeSort) : changeSort(column)\r\n }}\r\n >\r\n {column.name}\r\n \r\n ))}\r\n \r\n\r\n {currentPriceRow.isVisible && currentPriceRow.index < 0 && (\r\n \r\n \r\n \r\n )}\r\n\r\n \r\n {tableRows.map((option, index) => {\r\n const isCurrentPriceRow = currentPriceRow.isVisible && currentPriceRow.index === index\r\n const showPriceAfter = isCurrentPriceRow && currentPriceRow.index < tableRows.length - 1\r\n const columnClass = classnames({ 'border-b': showPriceAfter })\r\n const middleLink = getViewLink(middleColumn, searchParams, option)\r\n\r\n const row = (\r\n \r\n {option.call ? (\r\n \r\n ) : (\r\n \r\n )}\r\n\r\n \r\n \r\n \r\n {middleColumnDefinition.renderColumn({ kind: RowKind.OptionRow, row: option })}\r\n \r\n \r\n \r\n\r\n {option.put ? (\r\n tickerLastClose}\r\n className={columnClass}\r\n />\r\n ) : (\r\n \r\n )}\r\n \r\n )\r\n\r\n if (showPriceAfter) {\r\n return (\r\n \r\n {row}\r\n {showPriceAfter && }\r\n \r\n )\r\n }\r\n\r\n return row\r\n })}\r\n \r\n\r\n {currentPriceRow.isVisible && currentPriceRow.index === tableRows.length - 1 && (\r\n \r\n \r\n \r\n )}\r\n
\r\n )\r\n}\r\n\r\ninterface ChainOptionRowProps extends Omit {\r\n columns: ChainTableColumn[]\r\n kind: RowKind.Call | RowKind.Put\r\n option: Option\r\n isHighlighted?: boolean\r\n}\r\n\r\nfunction ChainOptionRow({ columns, kind, option, isHighlighted, className, ...props }: ChainOptionRowProps) {\r\n return (\r\n <>\r\n {columns.map((column, index) => {\r\n const isFirst = index === 0\r\n const isLast = index === columns.length - 1\r\n\r\n return (\r\n \r\n {column.renderColumn({ kind, row: option })}\r\n \r\n )\r\n })}\r\n \r\n )\r\n}\r\n","import { ColumnId, Option, OptionRow, OptionType } from '../types'\r\n\r\nexport function mergeOptionsBy(options: Option[], mergeBy: ColumnId.StrikePrice | ColumnId.ExpirationDate) {\r\n const result: OptionRow[] = []\r\n const sorted = options.slice().sort((a, b) => a[mergeBy] - b[mergeBy])\r\n\r\n for (const option of sorted) {\r\n let last = result[result.length - 1]\r\n if (last?.[mergeBy] !== option[mergeBy]) {\r\n last = { strike: option.strike, exDate: option.exDate, call: null, put: null }\r\n result.push(last)\r\n }\r\n\r\n if (option.type === OptionType.Call) {\r\n last.call = option\r\n } else {\r\n last.put = option\r\n }\r\n }\r\n\r\n return result\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { Select, SelectItem } from '../../../components'\r\nimport { columnMap } from '../constants/columns'\r\nimport { ColumnId } from '../types'\r\n\r\ninterface FilterSelectProps {\r\n filterColumn: ColumnId\r\n selected?: ValueType\r\n options: Array>\r\n onChange: (value: SelectItem) => void\r\n}\r\n\r\nexport function FilterSelect({\r\n filterColumn,\r\n selected,\r\n options,\r\n onChange,\r\n}: FilterSelectProps) {\r\n /**\r\n * `selected` comes from loader. We set the selection to state in order to have\r\n * immediate response to user action. We also need to set the selection in an effect\r\n * so that back/forward works correctly.\r\n */\r\n const [filterValue, setFilterValue] = React.useState(selected)\r\n React.useEffect(() => {\r\n setFilterValue(selected)\r\n }, [selected])\r\n\r\n return (\r\n {\r\n setFilterValue(item.value)\r\n onChange(item)\r\n }}\r\n />\r\n )\r\n}\r\n","import * as React from 'react'\r\nimport { useSearchParams } from 'react-router-dom'\r\n\r\nimport { formatDate } from '../../../../app/header/utils'\r\nimport { DATE_FORMAT_DB, DATE_FORMAT_VIEW } from '../constants/common'\r\nimport { ColumnId, OptionsQuery } from '../types'\r\nimport { FilterSelect } from './FilterSelect'\r\n\r\nexport function DateFilter({ currentExpiry, expiries }: { currentExpiry: string; expiries: string[] }) {\r\n const [, setSearchParams] = useSearchParams()\r\n\r\n const filterOptions = React.useMemo(\r\n () => expiries.map((option) => ({ label: formatDate(option, DATE_FORMAT_DB, DATE_FORMAT_VIEW), value: option })),\r\n [expiries]\r\n )\r\n\r\n return (\r\n {\r\n setSearchParams((prev) => {\r\n const newQuery = new URLSearchParams(prev)\r\n newQuery.set(OptionsQuery.Expiry, option.value)\r\n return newQuery\r\n })\r\n }}\r\n />\r\n )\r\n}\r\n","import * as React from 'react'\r\nimport { useSearchParams } from 'react-router-dom'\r\n\r\nimport { formatNumber } from '../../../util'\r\nimport { ColumnId, OptionsQuery } from '../types'\r\nimport { FilterSelect } from './FilterSelect'\r\n\r\nexport function StrikeFilter({ currentStrike, strikes }: { currentStrike: number; strikes: number[] }) {\r\n const [, setSearchParams] = useSearchParams()\r\n\r\n const filterOptions = React.useMemo(\r\n () => strikes.map((option) => ({ label: '$ ' + formatNumber(option), value: option })),\r\n [strikes]\r\n )\r\n\r\n return (\r\n {\r\n setSearchParams((prev) => {\r\n const newQuery = new URLSearchParams(prev)\r\n newQuery.set(OptionsQuery.Strike, option.value.toString())\r\n return newQuery\r\n })\r\n }}\r\n />\r\n )\r\n}\r\n","import classNames from 'classnames'\r\nimport React from 'react'\r\nimport { useSearchParams } from 'react-router-dom'\r\n\r\nimport { parseOptionsQuery } from '../utils/query'\r\n\r\nexport default function ViewFooter({ className }: { className?: string }) {\r\n const [searchParams] = useSearchParams()\r\n const { ticker, expiry, strike } = parseOptionsQuery(searchParams)\r\n\r\n const exportUrl = React.useMemo(\r\n () =>\r\n 'export/options?' +\r\n new URLSearchParams({\r\n t: ticker,\r\n e: expiry ?? '',\r\n s: strike ? strike.toString() : '',\r\n }),\r\n [ticker, expiry, strike]\r\n )\r\n\r\n return (\r\n
\r\n Options delayed 15 minutes\r\n {\r\n window.gtag && window.gtag('event', 'download', { event_category: 'export' })\r\n }}\r\n >\r\n export\r\n \r\n
\r\n )\r\n}\r\n","import * as React from 'react'\r\nimport { useNavigate } from 'react-router-dom'\r\n\r\nimport { SortByShape } from '../../../hooks/use-sort-data'\r\nimport { SortDirection } from '../../../types'\r\nimport { LINK_COLUMN_NAME } from '../constants/common'\r\nimport { OptionsQuery, OptionsSubpage } from '../types'\r\nimport { OptionsParsedQuery, orderToString } from '../utils/query'\r\n\r\nexport function useOptionsSortChange(\r\n subpage: OptionsSubpage,\r\n query: OptionsParsedQuery\r\n) {\r\n const navigate = useNavigate()\r\n return React.useCallback(\r\n (\r\n column: SortColumnType,\r\n sort: SortByShape,\r\n changeSort: (newSort: SortColumnType, direction?: SortDirection) => void,\r\n prefix: string = '',\r\n isLinkColumn: boolean = false\r\n ) => {\r\n const newQuery = new URLSearchParams(query.params)\r\n const urlColumnId = isLinkColumn ? LINK_COLUMN_NAME : column.id\r\n const urlOrderValue =\r\n sort.column.id === column.id && sort.direction === SortDirection.Ascending\r\n ? `-${prefix}${urlColumnId}`\r\n : `${prefix}${urlColumnId}`\r\n\r\n const newOrder = { ...query.order, [subpage]: urlOrderValue }\r\n\r\n newQuery.set(OptionsQuery.Order, orderToString(newOrder))\r\n changeSort(column)\r\n navigate(`?${newQuery}`, { preventScrollReset: true })\r\n },\r\n [navigate, query.order, query.params, subpage]\r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { OptionsSubpage } from '../types'\r\nimport { OptionsParsedQuery } from '../utils/query'\r\n\r\nexport function useOptionsSortOrder(subpage: OptionsSubpage, query: OptionsParsedQuery, defaultOrder: string) {\r\n return React.useMemo(() => {\r\n if (query.order[subpage]) {\r\n return query.order[subpage]\r\n }\r\n return defaultOrder\r\n }, [defaultOrder, query, subpage])\r\n}\r\n","import { useSearchParams } from 'react-router-dom'\r\n\r\nimport { SortByShape } from '../../../hooks/use-sort-data'\r\nimport { SortDirection } from '../../../types'\r\nimport { ChainTable, ChainTableColumn } from '../components/ChainTable'\r\nimport { DateFilter } from '../components/DateFilter'\r\nimport { StickyShadow } from '../components/StickyShadow'\r\nimport { StrikeFilter } from '../components/StrikeFilter'\r\nimport ViewFooter from '../components/ViewFooter'\r\nimport { columnMap } from '../constants/columns'\r\nimport { useOptionsQuery } from '../hooks/useOptionsQuery'\r\nimport { useOptionsSortChange } from '../hooks/useOptionsSortChange'\r\nimport { useOptionsSortOrder } from '../hooks/useOptionsSortOrder'\r\nimport { ColumnId, OptionsByDateLoader, OptionsByStrikeLoader, OptionsView } from '../types'\r\nimport { evalLinkOrder } from '../utils/query'\r\n\r\nexport function ChainRoute({ options, lastClose, lastTime, ...props }: OptionsByDateLoader | OptionsByStrikeLoader) {\r\n const middleColumn = props.view === OptionsView.ChainByDate ? ColumnId.StrikePrice : ColumnId.ExpirationDate\r\n const filterColumn = props.view === OptionsView.ChainByDate ? ColumnId.ExpirationDate : ColumnId.StrikePrice\r\n const [searchParams] = useSearchParams()\r\n const query = useOptionsQuery(searchParams)\r\n const tableOrder = useOptionsSortOrder(props.subpage, query, middleColumn)\r\n const effectiveTableOrder = evalLinkOrder(tableOrder, middleColumn)\r\n const optionsSortChange = useOptionsSortChange(props.subpage, query)\r\n\r\n const handleSortChange = (\r\n column: ChainTableColumn,\r\n sort: SortByShape,\r\n changeSort: (newSort: any, direction?: SortDirection) => void\r\n ) => optionsSortChange(column, sort, changeSort, '', column.id === middleColumn)\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n
\r\n

Calls

\r\n
{columnMap[filterColumn].name}
\r\n
\r\n
\r\n {props.view === OptionsView.ChainByDate && (\r\n \r\n )}\r\n {props.view === OptionsView.ChainByStrike && (\r\n \r\n )}\r\n
\r\n
\r\n

Puts

\r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n handleSortChange(column, sort, changeSort)}\r\n />\r\n
\r\n
\r\n \r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport {\r\n Table,\r\n TableAlign,\r\n TableBody,\r\n TableHead,\r\n TableHeaderSortable,\r\n TableRow,\r\n getDefaultSortFromUrl,\r\n useTableSortWithAutoupdate,\r\n} from '../../../components/Table'\r\nimport { SortByShape } from '../../../hooks/use-sort-data'\r\nimport { SortDirection } from '../../../types'\r\nimport { CallKind, ColumnId, ColumnRendererProps, Option, RowKind, TableColumnDefinition } from '../types'\r\nimport { PriceRow } from './PriceRow'\r\nimport { OptionsTableCell } from './TableColumn'\r\n\r\nfunction defaultColumnRenderer(column: TableColumnDefinition, props: ColumnRendererProps) {\r\n return column.renderColumn(props)\r\n}\r\n\r\nfunction getColumnValueGetter(kind: RowKind, ticker?: string | null, lastClose?: number | null) {\r\n return (column: TableColumnDefinition) => (row: Option) => {\r\n if (typeof column.getValueForSort === 'function') {\r\n return column.getValueForSort({ kind, lastClose, row } as CallKind)\r\n }\r\n\r\n return row[column.id as keyof typeof row] ?? null\r\n }\r\n}\r\n\r\ninterface OptionsTableProps {\r\n kind?: RowKind\r\n ticker: string | null\r\n lastClose?: number | null\r\n lastTime?: number | null\r\n options: Option[]\r\n columns: TableColumnDefinition[]\r\n isPriceRowEnabled?: boolean\r\n\r\n /**\r\n * Sorting key (column id, with optional dash prefix for descending)\r\n */\r\n tableOrder: string\r\n\r\n /**\r\n * Whether headers should become sticky\r\n */\r\n isHeaderSticky?: boolean\r\n headerClass?: string\r\n\r\n renderColumn?: (column: TableColumnDefinition, props: ColumnRendererProps) => React.ReactNode\r\n\r\n onSortChange?: (\r\n column: TableColumnDefinition,\r\n sort: SortByShape,\r\n changeSort: (newSort: TableColumnDefinition, direction?: SortDirection) => void\r\n ) => void\r\n}\r\n\r\nexport function OptionsTable({\r\n kind = RowKind.Call,\r\n ticker,\r\n lastClose,\r\n lastTime,\r\n columns,\r\n options,\r\n isPriceRowEnabled = true,\r\n tableOrder,\r\n isHeaderSticky,\r\n headerClass,\r\n renderColumn = defaultColumnRenderer,\r\n onSortChange,\r\n}: OptionsTableProps) {\r\n const { data, sort, changeSort } = useTableSortWithAutoupdate({\r\n data: options,\r\n columns,\r\n defaultSort: getDefaultSortFromUrl(columns, tableOrder),\r\n valueGetter: getColumnValueGetter(kind, ticker, lastClose),\r\n tableOrder,\r\n })\r\n /**\r\n * We display current price as a row between strike prices\r\n */\r\n const currentPriceRow = React.useMemo(() => {\r\n const isVisible = isPriceRowEnabled && sort.column.id === ColumnId.StrikePrice\r\n\r\n if (!isVisible || typeof lastClose !== 'number') return { isVisible: false, rowIndex: -1 }\r\n\r\n const rowIndex =\r\n sort.direction === SortDirection.Ascending\r\n ? data.findLastIndex((option) => option.strike < lastClose)\r\n : data.findLastIndex((option) => option.strike > lastClose)\r\n\r\n return { isVisible: true, index: rowIndex }\r\n }, [isPriceRowEnabled, sort.column.id, sort.direction, lastClose, data])\r\n\r\n const priceRowProps = React.useMemo(\r\n () => ({\r\n lastClose: lastClose ?? null,\r\n lastTime: lastTime ?? null,\r\n leftSpan: 2,\r\n rightSpan: 7,\r\n showAdditionalCells: false,\r\n priceAlign: TableAlign.Right,\r\n }),\r\n [lastClose, lastTime]\r\n )\r\n\r\n return (\r\n \r\n \r\n {columns.map((column) => (\r\n \r\n typeof onSortChange === 'function' ? onSortChange(column, sort, changeSort) : changeSort(column)\r\n }\r\n >\r\n {column.name}\r\n \r\n ))}\r\n \r\n\r\n \r\n {data.map((option, rowIndex) => {\r\n const key = `${option.askPrice}-${option.exDate}-${option.strike}-${rowIndex}`\r\n const isHighlighted =\r\n typeof lastClose === 'number' &&\r\n (kind === RowKind.Call ? option.strike < lastClose : option.strike > lastClose)\r\n const isCurrentPriceRow = currentPriceRow.isVisible && currentPriceRow.index === rowIndex\r\n const showPriceAfter = isCurrentPriceRow && currentPriceRow.index < data.length - 1\r\n\r\n const row = (\r\n \r\n {columns.map((column, index) => (\r\n \r\n {renderColumn(column, { kind: kind, ticker, lastClose, row: option } as ColumnRendererProps)}\r\n \r\n ))}\r\n \r\n )\r\n\r\n if (showPriceAfter) {\r\n return (\r\n \r\n {row}\r\n {showPriceAfter && }\r\n \r\n )\r\n }\r\n\r\n return row\r\n })}\r\n \r\n
\r\n )\r\n}\r\n","import * as React from 'react'\r\nimport { Link, useSearchParams } from 'react-router-dom'\r\n\r\nimport { SortByShape } from '../../../hooks/use-sort-data'\r\nimport { SortDirection } from '../../../types'\r\nimport { DateFilter } from '../components/DateFilter'\r\nimport { OptionsTable } from '../components/OptionsTable'\r\nimport { StickyShadow } from '../components/StickyShadow'\r\nimport { StrikeFilter } from '../components/StrikeFilter'\r\nimport ViewFooter from '../components/ViewFooter'\r\nimport { columnMap } from '../constants/columns'\r\nimport { useOptionsQuery } from '../hooks/useOptionsQuery'\r\nimport { useOptionsSortChange } from '../hooks/useOptionsSortChange'\r\nimport { useOptionsSortOrder } from '../hooks/useOptionsSortOrder'\r\nimport {\r\n ColumnId,\r\n ColumnRendererProps,\r\n OptionType,\r\n OptionsByDateLoader,\r\n OptionsByStrikeLoader,\r\n OptionsSubpage,\r\n OptionsView,\r\n RowKind,\r\n TableColumnDefinition,\r\n} from '../types'\r\nimport { evalLinkOrder, getViewLink } from '../utils/query'\r\n\r\nconst LEFT_COLUMNS = [ColumnId.ContractName, ColumnId.LastTrade]\r\nconst RIGHT_PRICES_COLUMNS = [\r\n ColumnId.LastClose,\r\n ColumnId.BidPrice,\r\n ColumnId.AskPrice,\r\n ColumnId.ChangeUsd,\r\n ColumnId.ChangePct,\r\n ColumnId.Volume,\r\n ColumnId.OpenInterest,\r\n]\r\n\r\nconst RIGHT_GREEK_COLUMNS = [\r\n ColumnId.LastClose,\r\n ColumnId.IV,\r\n ColumnId.Delta,\r\n ColumnId.Gamma,\r\n ColumnId.Theta,\r\n ColumnId.Vega,\r\n ColumnId.Rho,\r\n]\r\n\r\nconst BY_DATE_PRICES_COLUMNS = [...LEFT_COLUMNS, ColumnId.StrikePrice, ...RIGHT_PRICES_COLUMNS].map(\r\n (id) => columnMap[id]\r\n)\r\nconst BY_STRIKE_PRICES_COLUMNS = [...LEFT_COLUMNS, ColumnId.ExpirationDate, ...RIGHT_PRICES_COLUMNS].map(\r\n (id) => columnMap[id]\r\n)\r\n\r\nconst BY_DATE_GREEK_COLUMNS = [...LEFT_COLUMNS, ColumnId.StrikePrice, ...RIGHT_GREEK_COLUMNS].map((id) => columnMap[id])\r\nconst BY_STRIKE_GREEK_COLUMNS = [...LEFT_COLUMNS, ColumnId.ExpirationDate, ...RIGHT_GREEK_COLUMNS].map(\r\n (id) => columnMap[id]\r\n)\r\n\r\nfunction getColumnRenderer(searchParams: URLSearchParams) {\r\n return (column: TableColumnDefinition, props: ColumnRendererProps) => {\r\n switch (column.id) {\r\n case ColumnId.StrikePrice:\r\n case ColumnId.ExpirationDate:\r\n const middleLink = getViewLink(column.id, searchParams, props.row)\r\n\r\n return (\r\n \r\n {column.renderColumn(props)}\r\n \r\n )\r\n default:\r\n return column.renderColumn(props)\r\n }\r\n }\r\n}\r\n\r\nfunction getColumns(subpage: OptionsSubpage, isByDateList: boolean): TableColumnDefinition[] {\r\n if (subpage === OptionsSubpage.Volatility) {\r\n return isByDateList ? BY_DATE_GREEK_COLUMNS : BY_STRIKE_GREEK_COLUMNS\r\n } else {\r\n return isByDateList ? BY_DATE_PRICES_COLUMNS : BY_STRIKE_PRICES_COLUMNS\r\n }\r\n}\r\n\r\nfunction removePrefix(sortOrder: string) {\r\n if (!sortOrder.includes('_')) return sortOrder\r\n const [prefix, rest] = sortOrder.split('_', 2)\r\n return prefix.startsWith('-') ? `-${rest}` : rest\r\n}\r\n\r\nexport function ListRoute(props: OptionsByDateLoader | OptionsByStrikeLoader) {\r\n const [searchParams] = useSearchParams()\r\n const subpage = props.subpage\r\n const columnRenderer = React.useMemo(() => getColumnRenderer(searchParams), [searchParams])\r\n const isByDateList = props.view === OptionsView.ListByDate\r\n const columns = getColumns(subpage, isByDateList)\r\n const linkColumn = isByDateList ? ColumnId.StrikePrice : ColumnId.ExpirationDate\r\n const filterColumn = isByDateList ? ColumnId.ExpirationDate : ColumnId.StrikePrice\r\n const query = useOptionsQuery(searchParams)\r\n const prefixedTableOrder = useOptionsSortOrder(props.subpage, query, linkColumn)\r\n const tableOrder = removePrefix(prefixedTableOrder)\r\n const effectiveTableOrder = evalLinkOrder(tableOrder, linkColumn)\r\n const optionsSortChange = useOptionsSortChange(subpage, query)\r\n\r\n const handleSortChange = (\r\n column: TableColumnDefinition,\r\n sort: SortByShape,\r\n changeSort: (newSort: any, direction?: SortDirection) => void,\r\n sortPrefix: string\r\n ) => {\r\n optionsSortChange(column, sort, changeSort, column.id === linkColumn ? '' : sortPrefix, column.id === linkColumn)\r\n }\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n
\r\n
{columnMap[filterColumn].name}
\r\n
\r\n {props.view === OptionsView.ListByDate && (\r\n \r\n )}\r\n {props.view === OptionsView.ListByStrike && (\r\n \r\n )}\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n

Calls

\r\n
\r\n option.type === OptionType.Call)}\r\n renderColumn={columnRenderer}\r\n tableOrder={effectiveTableOrder}\r\n onSortChange={(column, sort, changeSort) => handleSortChange(column, sort, changeSort, 'call_')}\r\n />\r\n
\r\n
\r\n\r\n
\r\n

\r\n Puts\r\n

\r\n \r\n
\r\n option.type === OptionType.Put)}\r\n renderColumn={columnRenderer}\r\n tableOrder={effectiveTableOrder}\r\n onSortChange={(column, sort, changeSort) => handleSortChange(column, sort, changeSort, 'put_')}\r\n />\r\n
\r\n
\r\n
\r\n \r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { Loading } from '../../../components/loading'\r\nimport ViewFooter from '../components/ViewFooter'\r\nimport { OptionsLoaderData } from '../types'\r\n\r\nconst ScatterPlot = React.lazy(() => import('../components/ScatterPlot'))\r\n\r\nexport function PlotRoute({ options }: OptionsLoaderData) {\r\n return (\r\n <>\r\n
\r\n
\r\n \r\n \r\n
\r\n }\r\n >\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\nimport { useRevalidator, useSearchParams } from 'react-router-dom'\r\n\r\nimport { intervalCallbackOnWindowVisible } from '../../../app/shared/documentVisibility'\r\nimport { useTrackPageView } from '../../hooks/use-track-pageview'\r\nimport { useCachedLoaderData } from '../../hooks/useCachedLoaderData'\r\nimport { QuoteOptionsTabMenu } from '../quote/components/QuoteOptionsTabMenu'\r\nimport { QuoteStickySubMenu } from '../quote/components/QuoteStickySubMenu'\r\nimport { OptionsViewSwitcher } from './components/OptionsViewSwitcher'\r\nimport { useOptionsQuery } from './hooks/useOptionsQuery'\r\nimport { ChainRoute } from './routes/ChainRoute'\r\nimport { ListRoute } from './routes/ListRoute'\r\nimport { PlotRoute } from './routes/PlotRoute'\r\nimport { OptionsLoaderData, OptionsSubpage, OptionsView } from './types'\r\n\r\nconst OPTIONS_REFRESH_INTERVAL = 60 * 1000\r\n\r\nexport default function Options() {\r\n useTrackPageView()\r\n\r\n const { data } = useCachedLoaderData()\r\n const revalidator = useRevalidator()\r\n const [searchParams] = useSearchParams()\r\n const query = useOptionsQuery(searchParams)\r\n\r\n React.useEffect(() => {\r\n const unsubscribe = intervalCallbackOnWindowVisible({ interval: OPTIONS_REFRESH_INTERVAL }, () => {\r\n // Do a false check so that browsers which don’t support this just continue\r\n if (navigator.onLine === false) return\r\n revalidator.revalidate()\r\n })\r\n\r\n return unsubscribe\r\n // Reset the refetch interval after every expiry change\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [query.expiry, query.strike])\r\n\r\n return FinvizSettings.hasOptionsGreeksEnabled ? (\r\n <>\r\n }\r\n rightContent={\r\n data?.options?.length ? (\r\n \r\n ) : undefined\r\n }\r\n />\r\n
\r\n {data?.options?.length ? (\r\n \r\n ) : (\r\n
\r\n Options are not available for this stock.\r\n
\r\n )}\r\n
\r\n \r\n ) : (\r\n
\r\n {data?.options?.length ? (\r\n <>\r\n \r\n \r\n
\r\n \r\n \r\n ) : (\r\n
\r\n Options are not available for this stock.\r\n
\r\n )}\r\n \r\n )\r\n}\r\n\r\nfunction OptionsContent(props: OptionsLoaderData & { subpage: OptionsSubpage; view: OptionsView }) {\r\n switch (props.view) {\r\n case OptionsView.Plot:\r\n return \r\n case OptionsView.ListByDate:\r\n case OptionsView.ListByStrike:\r\n return \r\n case OptionsView.ChainByStrike:\r\n default:\r\n return \r\n }\r\n}\r\n","import { TableAlign } from '../../components/Table'\r\nimport { SortableColumn } from '../../hooks/use-sort-data'\r\n\r\nexport enum OptionsQuery {\r\n Ticker = 't',\r\n Expiry = 'e',\r\n Strike = 's',\r\n Order = 'o',\r\n View = 'ov',\r\n Type = 'ty',\r\n}\r\n\r\nexport enum OptionsSubpage {\r\n Prices = 'oc',\r\n Volatility = 'ocv',\r\n}\r\n\r\nexport enum OptionsView {\r\n ChainByDate = 'chain_date',\r\n ChainByStrike = 'chain_strike',\r\n ListByDate = 'list_date',\r\n ListByStrike = 'list_strike',\r\n Plot = 'plot',\r\n}\r\n\r\nexport enum OptionType {\r\n Call = 'call',\r\n Put = 'put',\r\n}\r\n\r\nexport interface Option {\r\n type: OptionType\r\n ticker: string\r\n exDate: number\r\n strike: number\r\n openInterest: number\r\n averageVolume: number\r\n bidPrice: number\r\n askPrice: number\r\n lastClose: number\r\n lastChange: number\r\n lastSize: number\r\n lastVolume: number\r\n lastTime: string\r\n iv: number | null\r\n delta: number | null\r\n gamma: number | null\r\n theta: number | null\r\n vega: number | null\r\n rho: number | null\r\n}\r\n\r\nexport interface OptionRow {\r\n strike: number\r\n exDate: number\r\n call: Option | null\r\n put: Option | null\r\n}\r\n\r\nexport interface LoaderBase {\r\n ticker: string | null\r\n options: Option[]\r\n lastClose: number | null\r\n lastTime: number | null\r\n hasData?: boolean\r\n}\r\n\r\nexport interface OptionsByDateLoader extends LoaderBase {\r\n subpage: OptionsSubpage\r\n view: OptionsView.ChainByDate | OptionsView.ListByDate\r\n expiries: string[]\r\n currentExpiry: string\r\n}\r\n\r\nexport interface OptionsByStrikeLoader extends LoaderBase {\r\n subpage: OptionsSubpage\r\n view: OptionsView.ChainByStrike | OptionsView.ListByStrike\r\n strikes: number[]\r\n currentStrike: number\r\n}\r\n\r\nexport interface PlotLoader {\r\n subpage: OptionsSubpage\r\n view: OptionsView.Plot\r\n optionable: boolean\r\n options: Option[]\r\n}\r\n\r\nexport type OptionsLoaderData = OptionsByDateLoader | OptionsByStrikeLoader | PlotLoader\r\n\r\nexport enum ColumnId {\r\n ContractName = 'contractName',\r\n LastClose = 'lastClose',\r\n ChangeUsd = 'lastChange',\r\n ChangePct = 'changePct',\r\n BidPrice = 'bidPrice',\r\n AskPrice = 'askPrice',\r\n Volume = 'lastVolume',\r\n OpenInterest = 'openInterest',\r\n StrikePrice = 'strike',\r\n ExpirationDate = 'exDate',\r\n LastTrade = 'lastTime',\r\n IV = 'iv',\r\n Delta = 'delta',\r\n Gamma = 'gamma',\r\n Theta = 'theta',\r\n Vega = 'vega',\r\n Rho = 'rho',\r\n}\r\n\r\nexport enum RowKind {\r\n OptionRow, // Base row which includes both call and put. Used to render strike price\r\n Call,\r\n Put,\r\n}\r\n\r\ninterface OptionRowKind {\r\n ticker?: string\r\n lastClose?: number | null\r\n kind: RowKind.OptionRow\r\n row: OptionRow\r\n}\r\n\r\nexport interface CallKind {\r\n ticker?: string\r\n lastClose?: number | null\r\n kind: RowKind.Call\r\n row: Option\r\n}\r\n\r\ninterface PutKind {\r\n ticker?: string\r\n lastClose?: number | null\r\n kind: RowKind.Put\r\n row: Option\r\n}\r\n\r\nexport type ColumnRendererProps = CallKind | PutKind | OptionRowKind\r\n\r\nexport interface TableColumnDefinition extends SortableColumn {\r\n name: string\r\n align?: TableAlign\r\n className?: string\r\n renderColumn: (props: ColumnRendererProps) => React.ReactNode\r\n}\r\n\r\nexport type MappedSubpageOrders = { [key in OptionsSubpage]?: string }\r\n","import { formatDate } from '../../../../app/header/utils'\r\nimport { DATE_FORMAT_DB, DATE_FORMAT_INT, LINK_COLUMN_NAME } from '../constants/common'\r\nimport { ColumnId, MappedSubpageOrders, Option, OptionRow, OptionsQuery, OptionsSubpage, OptionsView } from '../types'\r\n\r\nconst DELIMITER = '|'\r\n\r\nfunction parseOrder(input: string | null): MappedSubpageOrders {\r\n if (!input) return {}\r\n const parts = input.split(DELIMITER)\r\n let pricesOrder, volatilityOrder\r\n if (parts.length === 1) pricesOrder = volatilityOrder = parts[0]\r\n else [pricesOrder, volatilityOrder] = parts\r\n return {\r\n [OptionsSubpage.Prices]: pricesOrder,\r\n [OptionsSubpage.Volatility]: volatilityOrder,\r\n }\r\n}\r\n\r\nexport function orderToString(obj: MappedSubpageOrders): string {\r\n const arr = [obj[OptionsSubpage.Prices], obj[OptionsSubpage.Volatility]]\r\n return arr.join(DELIMITER)\r\n}\r\n\r\nexport type OptionsParsedQuery = ReturnType\r\n\r\nexport function parseOptionsQuery(query: URLSearchParams) {\r\n const strike = Number(query.get(OptionsQuery.Strike))\r\n\r\n return {\r\n params: Object.fromEntries(query.entries()) as Record, // Re-export the original query as key/val\r\n ticker: query.get(OptionsQuery.Ticker)!, // Validated on BE\r\n expiry: query.get(OptionsQuery.Expiry),\r\n order: parseOrder(query.get(OptionsQuery.Order)),\r\n strike: Number.isFinite(strike) ? strike : null,\r\n view: (query.get(OptionsQuery.View) as OptionsView) ?? OptionsView.ChainByDate,\r\n type: query.get(OptionsQuery.Type) as OptionsSubpage,\r\n }\r\n}\r\n\r\nexport function evalLinkOrder(order: string, linkAlias: string) {\r\n if (!linkAlias) return order\r\n if (order === LINK_COLUMN_NAME) return linkAlias\r\n if (order === `-${LINK_COLUMN_NAME}`) return `-${linkAlias}`\r\n return order\r\n}\r\n\r\nexport function getViewLink(columnId: ColumnId, searchParams: URLSearchParams, option: Option | OptionRow) {\r\n const middleLink = new URLSearchParams(searchParams)\r\n\r\n switch (searchParams.get(OptionsQuery.View)) {\r\n case OptionsView.ChainByStrike:\r\n middleLink.set(OptionsQuery.View, OptionsView.ChainByDate)\r\n break\r\n case OptionsView.ListByDate:\r\n middleLink.set(OptionsQuery.View, OptionsView.ListByStrike)\r\n break\r\n case OptionsView.ListByStrike:\r\n middleLink.set(OptionsQuery.View, OptionsView.ListByDate)\r\n break\r\n case OptionsView.ChainByDate:\r\n default:\r\n middleLink.set(OptionsQuery.View, OptionsView.ChainByStrike)\r\n }\r\n\r\n if (columnId === ColumnId.ExpirationDate) {\r\n middleLink.delete(OptionsQuery.Strike)\r\n middleLink.set(OptionsQuery.Expiry, formatDate(option.exDate, DATE_FORMAT_INT, DATE_FORMAT_DB))\r\n } else {\r\n middleLink.delete(OptionsQuery.Expiry)\r\n middleLink.set(OptionsQuery.Strike, option.strike.toString())\r\n }\r\n\r\n return middleLink\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { SubMenu } from '../../../components/SubMenu/SubMenu'\r\n\r\ninterface Props {\r\n leftContent?: React.ReactNode\r\n rightContent?: React.ReactNode\r\n}\r\n\r\nexport function QuoteStickySubMenu({ leftContent, rightContent }: Props) {\r\n return \r\n}\r\n","'use strict';\nvar $ = require('../internals/export');\nvar $findLastIndex = require('../internals/array-iteration-from-last').findLastIndex;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.findLastIndex` method\n// https://tc39.es/ecma262/#sec-array.prototype.findlastindex\n$({ target: 'Array', proto: true }, {\n findLastIndex: function findLastIndex(callbackfn /* , that = undefined */) {\n return $findLastIndex(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\naddToUnscopables('findLastIndex');\n"],"names":["AdsProvider","getAdsProvider","FinvizSettings","hasUserPremium","None","adsProvider","Freestar","InvestingChannel","trackPageView","props","_window$gtag","_window","_window$gtag2","_window2","pathname","window","location","query","search","freestarPageView","_window$freestar","gtag","call","length","replace","freestar","queue","push","trackPageview","ChipSwitch","_ref","children","label","size","rounding","_jsxs","className","_jsx","Paragraph","React","map","child","_child$props$theme","type","Button","theme","classnames","active","ChipSwitchButton","SubMenu","leftContent","middleContent","rightContent","classNames","isRedesignEnabled","SubMenuTabs","items","_ref2","href","isActive","reloadDocument","as","Link","to","useStickyShadow","stickyRef","isSticky","setIsSticky","current","onScroll","throttle","stickyElement","elementStickyTopOffset","parseFloat","getComputedStyle","top","elementCurrentTopOffset","getBoundingClientRect","document","addEventListener","removeEventListener","useTrackPageView","trackInitial","trackAutomatically","initialRender","useLocation","handleTrackView","tracking","StickyShadow","ref","NULL_VALUE","FORMAT_SETTINGS","defaultValue","GREEK_SETTINGS","fractions","columnMap","Object","freeze","ColumnId","LastClose","id","align","TableAlign","Right","name","renderColumn","args","kind","RowKind","OptionRow","row","lastClose","formatNumber","ChangeUsd","getValueForSort","lastChange","RedGreenText","value","showPlusSign","ChangePct","prevClose","change","BidPrice","bidPrice","AskPrice","askPrice","Volume","lastVolume","OpenInterest","openInterest","StrikePrice","strike","ExpirationDate","formatDate","exDate","DATE_FORMAT_INT","DATE_FORMAT_VIEW","ContractName","Left","ticker","_args$ticker","toString","padStart","Call","LastTrade","Date","lastTime","DATE_FORMAT_VIEW_LONG","IV","iv","Delta","delta","Gamma","gamma","Theta","theta","Vega","vega","Rho","rho","DATE_FORMAT_DB","DATE_FORMAT_SCATTER_PLOT","LINK_COLUMN_NAME","OPTIONS_SECTION_LABELS","QuoteSubview","OptionsChain","OptionsVolatility","OPTIONS_MENU_TABS","getOptionsMenuTabs","searchParams","decodeQueryString","encodeQueryString","ty","ov","OptionsSubpage","Volatility","OptionsView","Plot","ChainByDate","QuoteOptionsTabMenu","OptionsViewSwitcher","activeView","subpage","useSearchParams","chainLink","newParams","URLSearchParams","set","OptionsQuery","View","ChainByStrike","ListByStrike","includes","get","listLink","ListByDate","plotLink","delete","Strike","Expiry","Prices","useOptionsQuery","params","parseOptionsQuery","PriceRow","leftSpan","rightSpan","priceAlign","Center","showAdditionalCells","date","getDate","formattedDate","getFormattedDateString","formattedTime","TableRow","TableCell","colSpan","OptionsTableCell","isFirst","isLast","isHighlighted","isBorderVisible","CALL_OPTION_COLUMNS","originalId","rowKind","PUT_OPTION_COLUMNS","option","Put","CALL_OPTION_GREEK_COLUMNS","PUT_OPTION_GREEK_COLUMNS","FULL_COLUMNS_BREAKPOINT","valueGetter","column","customValueGetter","undefined","_row$call","_row$call2","put","_row$put","_row$put2","ChainTable","data","middleColumn","isPriceRowEnabled","isHeaderSticky","headerClass","tableOrder","onSortChange","CALL_COLUMNS","PUT_COLUMNS","columnsLength","setColumnsLength","tickerLastClose","updateColumnsLength","innerWidth","middleColumnDefinition","allColumns","mergedData","options","mergeBy","result","sorted","slice","sort","a","b","_last","last","OptionType","mergeOptionsBy","tableRows","changeSort","useTableSort","columns","defaultSort","getDefaultSortFromUrl","currentPriceRow","isVisible","rowIndex","index","direction","SortDirection","Ascending","findLastIndex","priceRowProps","Table","cellPadding","TableHead","TableHeaderSortable","onClick","TableBody","_tableRows","_tableRows2","showPriceAfter","columnClass","middleLink","getViewLink","ChainOptionRow","_ref3","_Fragment","_createElement","key","FilterSelect","filterColumn","selected","onChange","filterValue","setFilterValue","Select","placement","item","DateFilter","currentExpiry","expiries","setSearchParams","filterOptions","prev","newQuery","StrikeFilter","currentStrike","strikes","ViewFooter","expiry","exportUrl","t","e","s","event_category","useOptionsSortChange","navigate","useNavigate","prefix","arguments","isLinkColumn","urlColumnId","urlOrderValue","newOrder","order","Order","orderToString","preventScrollReset","useOptionsSortOrder","defaultOrder","ChainRoute","view","effectiveTableOrder","evalLinkOrder","optionsSortChange","handleSortChange","defaultColumnRenderer","getColumnValueGetter","_row","OptionsTable","useTableSortWithAutoupdate","LEFT_COLUMNS","RIGHT_PRICES_COLUMNS","RIGHT_GREEK_COLUMNS","BY_DATE_PRICES_COLUMNS","BY_STRIKE_PRICES_COLUMNS","BY_DATE_GREEK_COLUMNS","BY_STRIKE_GREEK_COLUMNS","ListRoute","columnRenderer","getColumnRenderer","isByDateList","getColumns","linkColumn","sortOrder","rest","split","startsWith","removePrefix","sortPrefix","filter","ScatterPlot","PlotRoute","fallback","Loading","OPTIONS_REFRESH_INTERVAL","Options","_data$options","_data$view","_data$options2","_data$options3","_data$view2","useCachedLoaderData","revalidator","useRevalidator","intervalCallbackOnWindowVisible","interval","navigator","onLine","revalidate","hasOptionsGreeksEnabled","QuoteStickySubMenu","OptionsContent","DELIMITER","parseOrder","input","parts","pricesOrder","volatilityOrder","obj","join","Number","fromEntries","entries","Ticker","isFinite","Type","linkAlias","columnId","$","$findLastIndex","addToUnscopables","target","proto","callbackfn","this"],"sourceRoot":""}