{"version":3,"file":"static/js/main.5b94b5d1.js","mappings":";oCAUA,IAAMA,EAAgB,2EAChBC,EAAiB,CACrB,GACA,iCACA,qBACA,qBACA,qBACA,qBACA,eACA,2BACA,qBACA,4BAEIC,EAAgB,CACpB,GACA,qBACA,2BACA,qBACA,iCACA,qBACA,4BAOF,SAASC,EAAUC,GACjB,IAAIC,EAAS,GACPC,EAAMF,EAAKG,OAGjB,GAAID,EAFW,EAEG,CAEhB,IAAME,EAAgBF,EAJT,EAIwB,EAC/BG,EAAeL,EAAKM,MAAM,EAAGF,GAC7BG,EAAiBP,EAAKM,MAAMF,GAClC,OAAOL,EAASM,GAAgB,2BAASN,EAASQ,GAElD,IAAK,IAAIC,EAAI,EAAGA,EAAIN,EAAKM,IAAK,CAC5B,IAAMC,EAAQT,EAAKQ,GACfC,EAAQ,IACVR,GAAUJ,EAAeY,GAASX,EAAcI,EAAMM,EAAI,IAKhE,OAAOP,EAOT,SAASS,EAAYC,GACnB,IAAIV,EAASU,EAab,OARAV,GAFAA,EAASA,EAAOW,QAAQ,mDAAY,uBAEpBA,QAAQ,uCAAU,yCAGvBT,OADM,GAEfF,EAAOE,OAASF,EAAOY,YAAY,oCAFpB,IAGfZ,EAASA,EAAOa,OAAO,EAAGb,EAAOE,OAHlB,GAGuC,4BAGjDF,EAyEW,MAAlBc,EAAOC,UACPD,EAAOC,QAzCT,SAAmBC,GACjB,IAAIhB,EAASL,EAGb,GAAIsB,MAAMD,GAAM,OAAOhB,EAEvB,GAAIgB,GAAOE,OAAOC,iBAAkB,OAAOnB,EAQ3C,IAAMoB,EAAUC,KAAKC,MAAMN,GAAKO,WAE1BC,EAAYH,KAAKI,MAAMT,EAAM,EAAI,KAAKO,WAKtCG,EAAUC,MAAMC,KAAKR,GAASS,IAAIX,QAElCY,EAAYH,MAAMC,KAAKJ,GAAWK,IAAIX,QAGxCa,EAAOjC,EAAS4B,GAChBM,EAASlC,EAASgC,GAStB,OA1DF,SAAkBC,EAAMC,GAatB,MAVa,KAATD,GAA0B,KAAXC,EACRrC,EACS,KAAToC,GAA0B,KAAXC,EACfD,EAAAA,6CACS,KAATA,GAA0B,KAAXC,EACfA,EAAS,uCAETD,EAAO,qBAAQC,EAAS,uCA8C1BC,CAJTF,EAAOtB,EAAWsB,GAClBC,EAASvB,EAAWuB,yBC3ItB,IACWE,EAAAA,EAkBT,SAASC,GACXA,EAAOC,QAAU,QACjB,IAAIC,EAAIhB,KAER,SAASiB,EAAQC,EAAKC,GAAK,IAAI,IAAIjC,EAAI,EAAGkC,EAAI,EAAGlC,EAAIgC,EAAIrC,SAAUK,EAAGkC,EAAID,EAAIC,EAAIF,EAAIhC,GAAI,OAAOkC,EACjG,SAASC,EAAaC,EAAGC,EAAGC,EAAIC,EAAIC,GAClC,GAAS,IAANH,EAAS,OAAOC,EACnB,GAAS,IAAND,EAAS,OAAOE,EAEnB,IADA,IAAIE,EAAM,EAAIL,EAAGM,EAAKH,EACdI,EAAI,EAAGA,EAAIN,IAAKM,EACtBD,EAAKH,EAAKI,EAAIF,EAAMD,EAAOF,EAC3BA,EAAKC,EAAIA,EAAKG,EAEhB,OAAOA,EAET,SAASE,EAAaC,EAASC,EAASC,EAAMC,EAASR,GACrD,OAAO,SAAgBJ,EAAEC,GACvB,GAAGW,EAAS,CACV,GAAS,IAANZ,EAAS,OAAmB,GAAXY,GAAe,IAAYC,EAAAA,EAC1C,GAAGb,EAAI,EAAG,OAAOc,IAExB,OAAS,IAANb,EAAgBQ,EAAQT,GAClB,IAANC,EAAgBS,EAAQV,GACxBC,EAAI,EAAUa,IAGVf,EAAaC,EAFpBC,GAAG,EACMQ,EAAQT,GAASU,EAAQV,GACAI,IAGtC,IAAIW,EAAW,WACb,IAAIC,EAAI,WAEJC,EAAS,CAAC,aAAgB,YAAe,aAAc,YAAa,aAAc,aAAaC,UAC/FC,EAAS,CAAC,YAAe,WAAc,YAAa,YAAa,YAAa,GAAKD,UACnFE,EAAS,CAAC,GAAM,cAAiB,gBAAkB,eAAiB,gBAAiBF,UACrFG,EAAS,EAAE,aAAiB,gBAAkB,eAAiB,gBAAkB,eAAgBH,UAErG,SAAST,EAAQT,GACf,IAAIsB,EAAE,EAAGC,EAAG,EAAGC,EAAG,EAAGC,EAAIzB,EAAIA,EAC7B,GAAGA,EAAI,EAGLsB,GAFAC,EAAK5B,EAAQsB,EAAQQ,KACrBD,EAAK7B,EAAQwB,EAAQM,QAEhB,CACL,IAAIC,EAAK1B,EAAI,WAEbuB,EAAK5B,EAAQyB,EADbK,EAAI,GAAKA,GAETD,EAAK7B,EAAQ0B,EAAQI,GACrBH,EAAI5B,EAAEiC,KAAKX,EAAEhB,IAAIN,EAAEkC,IAAIF,GAAIH,EAAG7B,EAAEmC,IAAIH,GAAIF,EAAG,EAAExB,GAE/C,OAAOsB,EAGT,IAAIQ,EAAS,CAAC,aAAgB,WAAc,aAAc,YAAa,YAAc,aAAaZ,UAC9Fa,EAAS,CAAC,aAAgB,WAAc,YAAa,YAAa,YAAa,GAAKb,UACpFc,EAAS,CAAC,EAAK,WAAc,eAAiB,gBAAkB,eAAgBd,UAChFe,EAAS,CAAC,cAAgB,eAAiB,gBAAkB,aAAe,eAAgBf,UAEhG,SAASR,EAAQV,GACf,IAAIsB,EAAE,EAAGC,EAAG,EAAGC,EAAG,EAAGC,EAAIzB,EAAEA,EAAG0B,EAAKhC,EAAEwC,IAAIlC,GAAK,YAY9C,OAXGtB,KAAKwD,IAAIlC,GAAI,EAGdsB,GAFAC,EAAKvB,EAAEL,EAAQmC,EAAQL,KACvBD,EAAK7B,EAAQoC,EAAQN,KAIrBF,EAAG5B,EAAQqC,EADXP,EAAI,GAAKA,GAETD,EAAG7B,EAAQsC,EAAQR,GACnBH,EAAE5B,EAAEiC,KAAKX,EAAEtB,EAAEwC,IAAIlC,KAAKN,EAAEkC,IAAIF,GAAIH,EAAG7B,EAAEmC,IAAIH,GAAIF,EAAG,EAAE9B,EAAEwC,IAAIlC,IACrDA,EAAI,IAAGsB,GAAKA,IAEVA,EAGT,OAAO,SAASP,EAAQf,EAAGC,GAEzB,GADAA,EAAIvB,KAAKI,MAAMmB,IACXkC,SAASnC,GAAI,OAAO1B,MAAM0B,GAAKA,EAAI,EACvC,GAAGC,EAAI,EAAG,OAASA,EAAE,GAAI,EAAE,GAAGc,EAAQf,GAAIC,GAC1C,GAAGD,EAAI,EAAG,OAASC,EAAE,GAAI,EAAE,GAAGc,GAASf,EAAGC,GAC1C,GAAS,IAANA,EAAS,OAAOQ,EAAQT,GAC3B,GAAS,IAANC,EAAS,OAAOS,EAAQV,GAC3B,GAAS,IAANA,EAAS,OAAO,EAEnB,IAAIoC,EAAI,EACR,GAAGpC,EAAIC,EACLmC,EAAMrC,EAAaC,EAAGC,EAAGQ,EAAQT,GAAIU,EAAQV,IAAI,OAC5C,CAML,IALA,IACIqC,GAAK,EACLC,EAAI,EAAKC,EAAI,EACbC,EAAG,EAAKC,EAAM,EACdC,EAAM,EAAI1C,EACL2C,EALH,EAAEjD,EAAEf,OAAOsB,EAAEP,EAAEf,MAAMe,EAAEiC,KAAK,GAAG1B,KAAK,GAK7B0C,EAAE,EAAEA,IACfF,EAAIE,EAAED,EAAIF,EAAGF,EACbA,EAAIE,EACJA,EAAGC,EACC/C,EAAEwC,IAAIM,GAAM,OACdA,GAAM,MACNF,GAAO,MACPF,GAAO,MACPG,GAAO,OAELF,IAAME,GAAOC,GACjBH,GAAMA,EACFM,GAAK1C,IAAGmC,EAAIE,GAGlBF,GADAG,EAAI,EAAIA,EAAIC,EAGd,OAAOJ,GAhFI,GAmFXQ,EAAW,WACb,IAAI5B,EAAI,WAEJC,EAAS,EAAE,WAAc,YAAe,YAAa,aAAc,YAAa,aAAaC,UAC7FC,EAAS,CAAC,YAAe,YAAa,YAAa,WAAa,YAAa,GAAKD,UAClFE,EAAS,CAAC,GAAM,cAAiB,gBAAkB,eAAiB,gBAAiBF,UACrFG,EAAS,EAAE,aAAiB,gBAAkB,eAAiB,gBAAkB,eAAgBH,UAiBjGY,EAAS,EAAE,aAAiB,aAAkB,YAAiB,aAAiB,YAAgB,aAAgBZ,UAChHa,EAAS,CAAC,YAAiB,aAAiB,WAAiB,YAAgB,WAAgB,YAAgB,GAAGb,UAChHc,EAAS,CAAC,EAAK,WAAc,eAAiB,gBAAkB,eAAgBd,UAChFe,EAAS,CAAC,cAAgB,eAAiB,gBAAkB,aAAe,eAAgBf,UAiBhG,OAAOV,GAnCP,SAAiBR,GACf,IAAIsB,EAAE,EAAGC,EAAG,EAAGC,EAAG,EAAGC,EAAIzB,EAAIA,EAAG0B,EAAK1B,EAAI,WAWzC,OAVGA,EAAI,EAGLsB,GAFAC,EAAK5B,EAAQsB,EAAQQ,KACrBD,EAAK7B,EAAQwB,EAAQM,IACTT,EAAID,EAAQf,EAAE,GAAKN,EAAEmD,IAAI7C,IAGrCuB,EAAK5B,EAAQyB,EADbK,EAAI,GAAKA,GAETD,EAAK7B,EAAQ0B,EAAQI,GACrBH,EAAI5B,EAAEiC,KAAKX,EAAEhB,IAAIN,EAAEmC,IAAIH,GAAIH,EAAG7B,EAAEkC,IAAIF,GAAIF,EAAG,EAAExB,IAExCsB,KAQT,SAAiBtB,GACf,IAAIsB,EAAE,EAAGC,EAAG,EAAGC,EAAG,EAAGC,EAAIzB,EAAEA,EAAG0B,EAAK1B,EAAI,YAWvC,OAVGA,EAAI,EAGLsB,GAFAC,EAAKvB,EAAEL,EAAQmC,EAAQL,KACvBD,EAAK7B,EAAQoC,EAAQN,IACTT,GAAKD,EAAQf,EAAE,GAAKN,EAAEmD,IAAI7C,GAAK,EAAIA,IAG/CuB,EAAG5B,EAAQqC,EADXP,EAAI,GAAKA,GAETD,EAAG7B,EAAQsC,EAAQR,GACnBH,EAAE5B,EAAEiC,KAAKX,EAAEhB,IAAIN,EAAEmC,IAAIH,GAAIH,EAAG7B,EAAEkC,IAAIF,GAAIF,EAAG,EAAExB,IAEtCsB,IAG6B,EAAW,GAAI,GA3CxC,GA6CXwB,EAAW,WACb,IAAIC,EAAO,CAAC,EAAK,UAAW,UAAW,UAAW,SAAW,SAAa,UAAY7B,UAClF8B,EAAO,CAAC,UAAY,UAAc,WAAc,UAAa,WAAc,UAAc,WAAe,UAAc,WAAa9B,UAOnI+B,EAAO,CAAC,GAAK,UAAY,UAAY,UAAY,UAAc,UAAa,UAAY/B,UACxFgC,EAAO,CAAC,WAAa,WAAe,UAAa,WAAc,UAAc,WAAe,UAAc,WAAe,WAAahC,UAO1I,OAAO,SAAS4B,EAAQ9C,EAAGC,GAEzB,GAAS,KADTA,EAAIvB,KAAKI,MAAMmB,IACH,OAfd,SAAiBD,GACf,OAAGA,GAAK,KAAaL,EAAQoD,EAAM/C,EAAEA,EAAF,SAC5BN,EAAEyD,IAAIzD,EAAEwC,IAAIlC,IAAIN,EAAEiC,KAAKjC,EAAEwC,IAAIlC,IAAIL,EAAQqD,EAAM,KAAKtD,EAAEwC,IAAIlC,IAa9CS,CAAQT,GAC3B,GAAS,IAANC,EAAS,OARd,SAAiBD,GACf,OAAGA,EAAI,KAAaA,EAAIL,EAAQsD,EAAMjD,EAAEA,EAAF,UAC9BA,EAAI,GAAK,EAAI,GAAKN,EAAEyD,IAAIzD,EAAEwC,IAAIlC,IAAIN,EAAEiC,KAAKjC,EAAEwC,IAAIlC,IAAIL,EAAQuD,EAAM,KAAKxD,EAAEwC,IAAIlC,IAMjEU,CAAQV,GAC3B,GAAGC,EAAI,EAAG,OAAOa,IACjB,GAAgB,IAAbpB,EAAEwC,IAAIlC,GAAU,OAAO,EAC1B,GAAGA,GAAKa,EAAAA,EAAU,OAAOA,EAAAA,EAEzB,IAAe8B,EAAXP,EAAM,EAAQM,EAAM,EAAIhD,EAAEwC,IAAIlC,GAAIoD,EAAM,EAAKC,EAAG,EAAKC,EAAI,EAE7D,IAAKX,EADC,EAAEjD,EAAEZ,OAAOmB,EAAEP,EAAEZ,MAAMY,EAAEiC,KAAK,GAAG1B,KAAK,GACjC0C,EAAE,EAAEA,IACXW,EAAIX,EAAED,EAAIW,EAAKD,EACfA,EAAIC,EAAIA,EAAGC,EACP5D,EAAEwC,IAAImB,GAAM,OACdA,GAAM,MACND,GAAO,MACPhB,GAAO,OAENO,GAAK1C,IAAGmC,EAAMgB,GAGnB,OADAhB,GAAOU,EAAQ9C,EAAG,GAAKqD,EAChBrD,EAAI,GAAMC,EAAE,GAAMmC,EAAMA,GAtCpB,GA2CXmB,EAAW,WACb,IAAIR,EAAO,EAAE,UAAY,SAAY,UAAY,SAAc,UAAa,QAAY,OAAS7B,UAC7F8B,EAAO,CAAC,YAAa,UAAc,WAAe,UAAc,WAAc,SAAa,UAAY9B,UAOvG+B,EAAO,CAAC,EAAK,WAAa,WAAa,WAAa,WAAe,WAAc,SAAW/B,UAC5FgC,EAAO,CAAC,WAAY,WAAa,SAAc,WAAe,UAAa,WAAc,UAAYhC,UAOzG,OAAOV,GAbP,SAAiBR,GACf,OAAGA,GAAK,GAAWN,EAAEmD,IAAI7C,EAAE,GAAK8C,EAAQ9C,EAAE,GAAKL,EAAQoD,EAAM/C,EAAEA,EAAE,GAC1DN,EAAEyD,KAAKnD,GAAKN,EAAEiC,KAAK3B,GAAKL,EAAQqD,EAAM,EAAEhD,MAMjD,SAAiBA,GACf,OAAGA,GAAK,EAAUN,EAAEmD,IAAI7C,EAAE,GAAK8C,EAAQ9C,EAAE,GAAM,EAAEA,EAAKL,EAAQsD,EAAMjD,EAAEA,EAAE,GACjEN,EAAEyD,KAAKnD,GAAGN,EAAEiC,KAAK3B,GAAGL,EAAQuD,EAAM,EAAElD,KAGP,EAAW,EAAG,GAjBvC,GAmBfR,EAAOuB,QAAUA,EACjBvB,EAAOoD,QAAUA,EACjBpD,EAAOsD,QAAUA,EACjBtD,EAAO+D,QAAUA,GA9OoB,qBAAzBC,qBAENjE,EAAQnB,GAWVmB,EAAiB,qtDChBd,IAAMkE,EAAU,4BCDnBC,EAAiB,GACfC,EAAe,IAAI,EAAAC,aAEnB,SAAUC,EAAaC,GAC3B,IAAMC,EAAYD,EAAOlF,WACzB,GAAI8E,EAAeM,eAAeD,GAChC,OAAOL,EAAeK,GAEtB,IAAME,EAAYN,EAAaO,QAAQH,GAEvC,OADAL,EAAeK,GAAaE,EACrBA,wWCILE,EACJ,gEACWC,EACX,oDAEI,SAAUC,EACdP,EACAQ,QAAA,IAAAA,IAAAA,GAAA,GAEA,IACE,IAAMC,EAAMV,EAAaC,GAMzB,OALmBU,EACjBD,EAAIE,MACJ,GACAF,EAAIG,MAAMC,YAGZ,MAAOC,GAIP,GAAIA,EAAEC,UAAYV,EACZG,IACF,QACKF,EACD,2BAA2BN,EAAOlF,WADpC,wNAOC,CACL,IAAIkG,EAAY,GACZR,IACFQ,EACE,iKAGJ,QACKV,EAAAA,yBACsBN,EAAOlF,WAD7BwF,kDAE6C,EAAAX,QAF7CW,4EAIDU,IAKR,MAAO,GAGH,SAAUN,EAA0BD,EAAKlH,EAAQsH,GACrD,OAAQJ,EAAIQ,MACV,IAAK,cACH,IAAK,IAAInH,EAAI,EAAGA,EAAI2G,EAAIE,MAAMlH,OAAQK,IACpC4G,EAA0BD,EAAIE,MAAM7G,GAAIP,EAAQsH,GAElD,MACF,IAAK,cACH,IAAMK,EAAQT,EAAIE,MAClB,IAAS7G,EAAI,EAAGA,EAAIoH,EAAMzH,OAAQK,IAAK,CACrC,IAAMqH,EAAOD,EAAMpH,GAGnB,OAAQqH,EAAKF,MACX,IAAK,YAIL,IAAK,qBAEL,IAAK,YACL,IAAK,oBACL,IAAK,cACL,IAAK,eACL,IAAK,kBACH,SAGJ,IAAMG,EAAOD,EACb,OAAQC,EAAKH,MACX,IAAK,YACHI,EAAwBD,EAAKT,MAAOpH,EAAQsH,GAC5C,MACF,IAAK,MACH,IAAwB,IAApBO,EAAKE,WACP,MAAMC,MAAMlB,IAEd,QAAQe,EAAKT,OAAO,SAACa,GACnB,GAAoB,kBAATA,EACTH,EAAwBG,EAAMjI,EAAQsH,OACjC,CAEL,IAAMY,EAAQD,EAEd,IAAmB,IAAfX,EACF,IACE,IAAIa,EAAYD,EAAMtG,KACtBuG,GAAaD,EAAME,GACnBD,IAEAL,EAAwBK,EAAWnI,EAAQsH,OAI1C,CAEH,IACMa,EAAYD,EAAMtG,KACtBuG,GAAaD,EAAME,IAAMD,EAAYE,EACrCF,IAEAL,EAAwBK,EAAWnI,EAAQsH,GAI7C,GAAIY,EAAME,IAAMC,EASd,IARA,IAAMC,EACJJ,EAAMtG,MAAQyG,EACVH,EAAMtG,KACNyG,EACAE,EAAcL,EAAME,GACpBI,EAAYC,EAAyBH,GACrCI,EAAYD,EAAyBF,GAGrCI,EAAaH,EACjBG,GAAcD,EACdC,IAEA3I,EAAO2I,GAAcA,OAM/B,MACF,IAAK,QACHxB,EAA0BU,EAAKT,MAAOpH,EAAQsH,GAC9C,MAEF,QACE,MAAMU,MAAM,wBAIhB,IAAMY,OACgBC,IAApBhB,EAAKiB,YAAwD,IAA5BjB,EAAKiB,WAAWC,QACnD,GAGiB,UAAdlB,EAAKH,OAA8C,IAA1BsB,EAAgBnB,IAE3B,UAAdA,EAAKH,OAA6C,IAAzBkB,EAE1B,MAGJ,MAEF,QACE,MAAMZ,MAAM,yBAIhB,OAAO,QAAOhI,GAGhB,SAAS8H,EACPG,EACAjI,EACAsH,GAEA,IAAM2B,EAAmBR,EAAyBR,GAClDjI,EAAOiJ,GAAoBA,GAER,IAAf3B,GAKN,SAA0BW,EAAcjI,GACtC,IAAMkJ,EAAOC,OAAOC,aAAanB,GAC3BoB,EAAYH,EAAKI,cAEvB,GAAID,IAAcH,EAAM,CAEtBlJ,EADMiJ,EAAmBR,EAAyBY,EAAUE,WAAW,KAC5CN,MACtB,CACL,IAEQA,EAFFO,EAAYN,EAAKO,cACvB,GAAID,IAAcN,EAEhBlJ,EADMiJ,EAAmBR,EAAyBe,EAAUD,WAAW,KAC5CN,GAf7BS,CAAiBzB,EAAMjI,GAoB3B,SAAS2J,EAASC,EAASC,GACzB,OAAO,QAAKD,EAAQxC,OAAO,SAAC0C,GAC1B,GAA2B,kBAAhBA,EACT,OAAO,QAASD,EAAiBC,GAGjC,IAAM,EAAaA,EACnB,YAIQjB,KAHN,QACEgB,GACA,SAACE,GAAe,SAAMnI,MAAQmI,GAAcA,GAAc,EAA1C,SAO1B,SAASf,EAAgB9B,GACvB,SAAIA,EAAI4B,YAAyC,IAA3B5B,EAAI4B,WAAWC,YAIhC7B,EAAIE,SAIF,QAAQF,EAAIE,QACf,QAAMF,EAAIE,MAAO4B,GACjBA,EAAgB9B,EAAIE,QAG1B,kBAGE,WAAoByC,GAApB,MACE,cAAO,YADW,EAAAA,gBAAAA,EAFpB,EAAAG,OAAiB,IA2CnB,OA5C6B,OAO3B,YAAAC,cAAA,SAAcC,GAEZ,IAAmB,IAAfC,KAAKH,MAAT,CAMA,OAAQE,EAAKxC,MACX,IAAK,YAEH,YADAyC,KAAKC,eAAeF,GAEtB,IAAK,oBAEH,YADAC,KAAKE,uBAAuBH,GAIhC,YAAMD,cAAa,UAACC,KAGtB,YAAAI,eAAA,SAAeJ,IACT,QAASC,KAAKN,gBAAiBK,EAAK9C,SACtC+C,KAAKH,OAAQ,IAIjB,YAAAO,SAAA,SAASL,GACHA,EAAKnC,gBACsCc,IAAzCc,EAASO,EAAMC,KAAKN,mBACtBM,KAAKH,OAAQ,QAG8BnB,IAAzCc,EAASO,EAAMC,KAAKN,mBACtBM,KAAKH,OAAQ,IAIrB,EA5CA,CAA6B,EAAAQ,mBA8CvB,SAAUC,EACdC,EACA7D,GAEA,GAAIA,aAAmB8D,OAAQ,CAC7B,IAAMzD,EAAMV,EAAaK,GACnB+D,EAAiB,IAAIC,EAAeH,GAE1C,OADAE,EAAeE,MAAM5D,GACd0D,EAAeZ,MAEtB,YAGSnB,KAFP,QAAUhC,GAAS,SAACqC,GAClB,OAAO,QAASwB,EAAoBxB,EAAMK,WAAW,6WCpQvDwB,EAAU,UACHC,EAAe,cACfC,EAAQ,QAsBVC,EACmC,mBAA/B,IAAIP,OAAO,QAASQ,OAU7B,SAAUC,EACdC,EACAC,GAmBA,IAMIC,EANEC,GATNF,GAAU,QAASA,EAAS,CAC1BG,UAAWP,EACXQ,OAAO,EACPC,UAAU,EACVC,iBAAkB,OAClBC,yBAA0B,CAAC,KAAM,MACjCL,OAAQ,SAACM,EAAKC,GAAW,OAAAA,QAGJP,OAEvBA,EAAO,mCAAmC,YA6gC5C,WACE,IAAI,QAAQQ,GAA4B,CACtCA,EAA4B,IAAIrK,MAAM,OACtC,IAAK,IAAIpB,EAAI,EAAGA,EAAI,MAAOA,IAEzByL,EAA0BzL,GAAKA,EAAI,IAAM,OAASA,EAAI,KAAOA,GAjhC/D0L,MAIFT,EAAO,mBAAmB,WACxBD,GAAoB,QAAOF,GAAY,SAACa,GACtC,OAAOA,EAAQ,UAAcC,EAAMC,SAIvC,IACIC,EAgFAC,EACAC,EACAC,EACAC,EACAC,EAwCAC,EAqBAC,EACAC,EACAC,EACAC,EArJAC,GAAY,EAEhBxB,EAAO,sBAAsB,WAC3BwB,GAAY,EACZX,GAAyB,QAAId,GAAmB,SAACW,GAC/C,IAAIe,EAAcf,EAAQ,QAG1B,IAAI,QAASe,GAAc,CACzB,IAAIC,EAAeD,EAAYE,OAC/B,OAC0B,IAAxBD,EAAahN,QAEI,MAAjBgN,GACiB,MAAjBA,GACiB,MAAjBA,GACCD,EAAY3F,WAIW,IAAxB4F,EAAahN,QACO,OAApBgN,EAAa,KAEZ,QACC,CACE,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEFA,EAAa,IAQR5B,EAAQG,UACX2B,EAAcH,GACdI,EAAgBJ,GAJbC,EAAa,GA9BbA,EAoCJ,IAAI,QAAWD,GAGpB,OAFAD,GAAY,EAEL,CAAEM,KAAML,GACV,IAAI,QAAIA,EAAa,QAG1B,OAFAD,GAAY,EAELC,EACF,GAA2B,kBAAhBA,EAA0B,CAC1C,GAA2B,IAAvBA,EAAY/M,OACd,OAAO+M,EAEP,IAAIM,EAAsBN,EAAYtM,QACpC,sBACA,QAEE6M,EAAgB,IAAI7C,OAAO4C,GAC/B,OAAOjC,EAAQG,UACX2B,EAAcI,GACdH,EAAgBG,GAGtB,MAAMxF,MAAM,8BAUlBwD,EAAO,gBAAgB,WACrBc,GAAmB,QACjBf,GACA,SAACW,GAAa,OAAAA,EAAA,gBAGhBK,GAAoB,QAAIhB,GAAmB,SAACkC,GAC1C,IAAIC,EAAYD,EAAME,MAEtB,GAAID,IAAcvB,EAAMyB,QAAxB,CAEO,IAAI,QAASF,GAClB,OAAOA,EACF,IAAI,QAAYA,GACrB,OAAO,EAEP,MAAM1F,MAAM,4BAIhBwE,GAA2B,QAAIjB,GAAmB,SAACkC,GACjD,IAAII,EAAgBJ,EAAMK,WAE1B,GAAID,EAEF,OADmB,QAAQtC,EAAmBsC,MAKlDpB,GAAuB,QACrBlB,GACA,SAACkC,GAAe,OAAAA,EAAA,aAGlBf,GAAsB,QAAInB,GAAmB,SAACkC,GAC5C,eAAIA,EAAO,kBAKfjC,EAAO,4BAA4B,WACjC,IAAMuC,EAA0BC,EAC9B1C,EAAQO,0BAEVc,GAAgC,QAAIpB,GAAmB,SAAC0C,GAAY,YACnC,eAA7B3C,EAAQM,mBACVe,GAAgC,QAAIpB,GAAmB,SAAC0C,GACtD,OAAI,QAAIA,EAAS,eACRA,EAAQC,aAG+C,IAA5DC,EAAsBF,EAASF,GAExBtD,EAAiBsD,EAAyBE,EAAQlD,cAH3D,SAcRS,EAAO,mBAAmB,WACxBoB,GAAuB,QAAIrB,EAAmB6C,GAC9CvB,GAAoB,QAAIR,EAAwBgC,GAEhDvB,GAAc,QACZvB,GACA,SAAC+C,EAAKb,GACJ,IAAIC,EAAYD,EAAME,MAItB,OAHI,QAASD,IAAgBA,IAAcvB,EAAMyB,UAC/CU,EAAIZ,GAAa,IAEZY,IAET,IAGFvB,GAAqB,QAAIV,GAAwB,SAAC1J,EAAG4L,GACnD,MAAO,CACL1H,QAASwF,EAAuBkC,GAChCC,UAAWhC,EAAyB+B,GACpCE,kBAAmB9B,EAA8B4B,GACjDG,SAAU9B,EAAqB2B,GAC/BI,MAAO9B,EAAkB0B,GACzBK,MAAOrC,EAAkBgC,GACzBM,KAAMpC,EAAqB8B,GAC3BO,IAAKpC,EAAoB6B,GACzBQ,aAAczC,EAAiBiC,GAC/BS,UAAWzD,EAAkBgD,UAKnC,IAAIU,GAAiB,EACjBC,EAA+B,GAoFnC,OAlFK5D,EAAQK,UACXH,EAAO,2BAA2B,WAChC0D,GAA+B,QAC7B3D,GACA,SAACvL,EAAQmP,EAAaZ,GACpB,GAAmC,kBAAxBY,EAAYpE,QAAsB,CAC3C,IACMqE,EAAe3G,EADJ0G,EAAYpE,QAAQxB,WAAW,IAEhD8F,EAAiBrP,EAAQoP,EAAcrC,EAAmBwB,SACrD,IAAI,QAAQY,EAAYG,kBAAmB,CAChD,IAAI,GACJ,QAAQH,EAAYG,kBAAkB,SAACC,GACrC,IAIMC,EAAmB/G,EAHF,kBAAd8G,EACHA,EAAUhG,WAAW,GACrBgG,GAMF,IAAqBC,IACvB,EAAmBA,EACnBH,EACErP,EACAwP,EACAzC,EAAmBwB,aAIpB,IAAI,QAASY,EAAYpE,SAC9B,GAAIoE,EAAYpE,QAAQ0E,QACtBR,GAAiB,EACb3D,EAAQrE,sBACV,QACKF,EACD,yBAAyBoI,EAAYpE,QAAQxJ,WAD/C,oQAOC,CACL,IAAImO,EAAiB1I,EACnBmI,EAAYpE,QACZO,EAAQrE,sBAKN,QAAQyI,KAIVT,GAAiB,IAEnB,QAAQS,GAAgB,SAACzH,GACvBoH,EAAiBrP,EAAQiI,EAAM8E,EAAmBwB,YAIlDjD,EAAQrE,sBACV,QACKF,EACD,iBAAiBoI,EAAY7L,KAD/B,iPAMJ2L,GAAiB,EAGnB,OAAOjP,IAET,OAINwL,EAAO,gBAAgB,WACrB0D,GAA+B,QAAUA,MAGpC,CACLpC,YAAaA,EACbC,mBAAoBA,EACpBmC,6BAA8BA,EAC9BlC,UAAWA,EACXiC,eAAgBA,GAId,SAAUU,EACdtE,EACAuE,GAEA,IAAIC,EAAS,GAETC,EA8CA,SACJzE,GAEA,IAAI0E,GAA+B,QAAO1E,GAAY,SAACa,GACrD,QAAQ,QAAIA,EAAUnB,MAGpB8E,GAAS,QAAIE,GAA8B,SAAC7D,GAC9C,MAAO,CACL1E,QACE,iBACA0E,EAAS5I,KACT,uCACFoE,KAAMsI,EAAyBC,gBAC/B5E,WAAY,CAACa,OAIbgE,GAAQ,QAAW7E,EAAY0E,GACnC,MAAO,CAAEF,OAAM,EAAEK,MAAK,GAjEFC,CAAoB9E,GACxCwE,EAASA,EAAOO,OAAON,EAAcD,QAErC,IAAIQ,EAiEA,SACJhF,GAEA,IAAIiF,GAA+B,QAAOjF,GAAY,SAACa,GACrD,IAAIrF,EAAUqF,EAAQ,QACtB,QACG,QAASrF,MACT,QAAWA,MACX,QAAIA,EAAS,WACb,QAASA,MAIVgJ,GAAS,QAAIS,GAA8B,SAACpE,GAC9C,MAAO,CACL1E,QACE,iBACA0E,EAAS5I,KADT,0JAIFoE,KAAMsI,EAAyBO,gBAC/BlF,WAAY,CAACa,OAIbgE,GAAQ,QAAW7E,EAAYiF,GACnC,MAAO,CAAET,OAAM,EAAEK,MAAK,GA3FFM,CAAoBV,EAAcI,OAClDO,EAAkBJ,EAAcH,MAapC,OAVAL,GAFAA,EAASA,EAAOO,OAAOC,EAAcR,SAErBO,OAalB,SACE/E,GAEA,IAAIwE,EAAS,GACTa,GAAqB,QAAOrF,GAAY,SAAC8D,GAC3C,eAASA,EAAW,YAatB,OAVAU,EAASA,EAAOO,OAuEZ,SACJ/E,GAEA,oFACE,EAAArB,OAAQ,IAKV,OAN8B,OAG5B,YAAA2G,eAAA,SAAezG,GACbC,KAAKH,OAAQ,GAEjB,EANA,CAA8B,EAAAQ,mBAQ1BoG,GAAe,QAAOvF,GAAY,SAACa,GACrC,IAAMrF,EAAUqF,EAAQ,QAExB,IACE,IAAM2E,EAAYrK,EAAaK,GACzBiK,EAAmB,IAAIC,EAG7B,OAFAD,EAAiBhG,MAAM+F,GAEhBC,EAAiB9G,MACxB,MAAOzC,GAGP,OAAOyJ,EAAaC,KAAKpK,EAAQsG,YAkBrC,OAda,QAAIyD,GAAc,SAAC1E,GAC9B,MAAO,CACL1E,QACE,oDAEA0E,EAAS5I,KAFT,+IAMFoE,KAAMsI,EAAyBkB,iBAC/B7F,WAAY,CAACa,OA5GMiF,CAAqBT,IAE5Cb,EAASA,EAAOO,OAyIZ,SACJ/E,GAEA,oFACE,EAAArB,OAAQ,IAKV,OANgC,OAG9B,YAAAoH,iBAAA,SAAiBlH,GACfC,KAAKH,OAAQ,GAEjB,EANA,CAAgC,EAAAQ,mBAQ5BoG,GAAe,QAAOvF,GAAY,SAACa,GACrC,IAAMrF,EAAUqF,EAAQ,QACxB,IACE,IAAM2E,EAAYrK,EAAaK,GACzBwK,EAAqB,IAAIC,EAG/B,OAFAD,EAAmBvG,MAAM+F,GAElBQ,EAAmBrH,MAC1B,MAAOzC,GAGP,OAAOgK,EAAeN,KAAKpK,EAAQsG,YAkBvC,OAda,QAAIyD,GAAc,SAAC1E,GAC9B,MAAO,CACL1E,QACE,oDAEA0E,EAAS5I,KAFT,yJAMFoE,KAAMsI,EAAyBwB,iBAC/BnG,WAAY,CAACa,OA7KMuF,CAAuBf,IAE9Cb,EAASA,EAAOO,OAkLZ,SACJ/E,GAEA,IAAIqG,GAAe,QAAOrG,GAAY,SAACa,GACrC,IAAIrF,EAAUqF,EAAQ,QACtB,OAAOrF,aAAmB8D,SAAW9D,EAAQ8K,WAAa9K,EAAQ+K,WAcpE,OAXa,QAAIF,GAAc,SAACxF,GAC9B,MAAO,CACL1E,QACE,iBACA0E,EAAS5I,KACT,oEACFoE,KAAMsI,EAAyB6B,wBAC/BxG,WAAY,CAACa,OAjMM4F,CAAqBpB,IAE5Cb,EAASA,EAAOO,OAuMZ,SACJ/E,GAEA,IAAIrB,EAAQ,GACR+H,GAAoB,QAAI1G,GAAY,SAAC2G,GACvC,OAAO,QACL3G,GACA,SAACrL,EAAQiS,GACP,OACED,EAAUjH,QAAQoC,SAAW8E,EAAUlH,QAAQoC,SAC9C,QAASnD,EAAOiI,IACjBA,EAAUlH,UAAYoB,EAAMC,KAI5BpC,EAAM6E,KAAKoD,GACXjS,EAAO6O,KAAKoD,IAGPjS,IAET,OAIJ+R,GAAoB,QAAQA,GAE5B,IAAIG,GAAoB,QAAOH,GAAmB,SAACI,GACjD,OAAOA,EAAiBjS,OAAS,KAoBnC,OAjBa,QAAIgS,GAAmB,SAACE,GACnC,IAAIC,GAAiB,QAAID,GAAgB,SAAClG,GACxC,OAAOA,EAAS5I,QAIlB,MAAO,CACLkE,QACE,8BAHsB,QAAM4K,GAAiBrH,QAG7C,wDACsDsH,EAAeC,KACnE,MACD,MACH5K,KAAMsI,EAAyBuC,yBAC/BlH,WAAY+G,MAnPOI,CAAsB9B,IAE7Cb,EAASA,EAAOO,OA2GZ,SACJ/E,GAEA,IAAIoH,GAAqB,QAAOpH,GAAY,SAACa,GAE3C,OADcA,EAAQ,QACP+E,KAAK,OActB,OAXa,QAAIwB,GAAoB,SAACvG,GACpC,MAAO,CACL1E,QACE,iBACA0E,EAAS5I,KACT,qDACFoE,KAAMsI,EAAyB0C,oBAC/BrH,WAAY,CAACa,OA1HMyG,CAAsBjC,IAEtCb,EA/BgB+C,CAAsBnC,IAE7CZ,EAASA,EAAOO,OAmRZ,SACJ/E,GAEA,IAAIwH,GAAe,QAAOxH,GAAY,SAACoC,GACrC,KAAK,QAAIA,EAAO,SACd,OAAO,EAET,IAAImB,EAAQnB,EAAME,MAElB,OAAOiB,IAAUzC,EAAMyB,SAAWgB,IAAUzC,EAAMC,MAAO,QAASwC,MAcpE,OAXa,QAAIiE,GAAc,SAAC3G,GAC9B,MAAO,CACL1E,QACE,iBACA0E,EAAS5I,KACT,gEACFoE,KAAMsI,EAAyB8C,yBAC/BzH,WAAY,CAACa,OAtSM6G,CAAqBtC,IAE5CZ,EAASA,EAAOO,OA2SZ,SACJ/E,EACA2H,GAEA,IAAIC,GAAe,QAAO5H,GAAY,SAACoC,GACrC,YACsB5E,IAApB4E,EAAMyF,aAA4B,QAASF,EAAYvF,EAAMyF,cAejE,OAXa,QAAID,GAAc,SAAChF,GAI9B,MAAO,CACLzG,QAHA,iBAAiByG,EAAQ3K,KAAI,8DAA8D2K,EAAQiF,UAAnG,yBAIAxL,KAAMsI,EAAyBmD,yBAC/B9H,WAAY,CAAC4C,OA3TfmF,CAAwB3C,EAAiBb,IAG3CC,EAASA,EAAOO,OA+TZ,SACJ/E,GAEA,IAAMwE,EAAS,GAETwD,GAAc,QAClBhI,GACA,SAACrL,EAAQiO,EAASM,GAChB,IAAM1H,EAAUoH,EAAQlD,QAExB,OAAIlE,IAAYsF,EAAMC,MAMlB,QAASvF,GACX7G,EAAO6O,KAAK,CAAEnO,IAAKmG,EAAS0H,IAAG,EAAES,UAAWf,KACnC,QAASpH,IA8C1B,SAAoBJ,GAElB,IAAM6M,EAAY,CAChB,IACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEF,YACoEzK,KAAlE,QAAKyK,GAAW,SAACpK,GAAS,WAAAzC,EAAO0G,OAAOoG,QAAQrK,MAhEdsK,CAAW3M,IACzC7G,EAAO6O,KAAK,CAAEnO,IAAKmG,EAAQsG,OAAQoB,IAAG,EAAES,UAAWf,KAR5CjO,IAYX,IAoBF,OAjBA,QAAQqL,GAAY,SAAC4C,EAASwF,IAC5B,QAAQJ,GAAa,SAAC,OAAE3S,EAAG,MAAE6N,EAAG,MAAES,EAAS,YACzC,GAAIyE,EAAUlF,GAkBpB,SAAuB7N,EAAamG,GAElC,IAAI,QAASA,GAAU,CACrB,IAAM6M,EAAc7M,EAAQyG,KAAK5M,GACjC,OAAuB,OAAhBgT,GAA8C,IAAtBA,EAAYC,MACtC,IAAI,QAAW9M,GAEpB,OAAOA,EAAQnG,EAAK,EAAG,GAAI,IACtB,IAAI,QAAImG,EAAS,QAEtB,OAAOA,EAAQyG,KAAK5M,EAAK,EAAG,GAAI,IAC3B,GAAuB,kBAAZmG,EAChB,OAAOA,IAAYnG,EAEnB,MAAMsH,MAAM,wBAhCW4L,CAAclT,EAAKuN,EAAQlD,SAAU,CACxD,IAAIe,EACF,YAAYkD,EAAU1L,KAAtB,uEAC6C2K,EAAQ3K,KADrD,6GAIFuM,EAAOhB,KAAK,CACVrH,QAASsE,EACTpE,KAAMsI,EAAyB6D,oBAC/BxI,WAAY,CAAC4C,EAASe,YAMvBa,EA1WgBiE,CAAwBrD,IAExCZ,EAgFT,IAAMmB,EAAe,YAoErB,IAAMO,EAAiB,iBA+PjB,SAAUlE,EAAgBxG,GAC9B,IAAIQ,EAAQR,EAAQS,WAAa,IAAM,GAGvC,OAAO,IAAIqD,OAAO,OAAO9D,EAAQsG,OAAM,IAAK9F,GAGxC,SAAU+F,EAAcvG,GAC5B,IAAIQ,EAAQR,EAAQS,WAAa,KAAO,IAGxC,OAAO,IAAIqD,OAAO,GAAG9D,EAAQsG,OAAU9F,GA+DnC,SAAU0M,EACdC,EACAC,EACApI,GAEA,IAAMqI,EAAW,GACbC,GAAkB,EAChBC,GAAgB,SACpB,SAAQ,QAAUJ,EAAgBK,OAAO,SAACC,GAAa,OAAAA,OAGnDC,GAAqB,QACzBH,GACA,SAAClI,GAAa,OAAAA,EAAQ,UAAcC,EAAMC,MAEtCoI,EAAsBxG,EAAanC,GAsCzC,OArCIoI,IACF,QAAQM,GAAoB,SAACtG,GAC3B,IAAMwG,EAAYtG,EAAsBF,EAASuG,GACjD,IAAkB,IAAdC,EAAqB,CACvB,IAAMjN,EAsJR,SACJyG,EACAyG,GAQA,GAAIA,EAAQC,QAAU3E,EAAyB4E,oBAC7C,MACE,2FAC4B3G,EAAQ3K,KADpC,gCAEkBoR,EAAQG,OAF1B,yGAKG,GAAIH,EAAQC,QAAU3E,EAAyB8E,kBACpD,MACE,sGAC4B7G,EAAQ3K,KADpC,kHAKF,MAAM0E,MAAM,wBA9KQ+M,CAA2B9G,EAASwG,GAC9CO,EAAoB,CACxBxN,QAAO,EACPE,KAAM+M,EAAUE,MAChB3F,UAAWf,GAEbiG,EAASrF,KAAKmG,QAGV,QAAI/G,EAAS,gBACa,IAAxBA,EAAQC,cACViG,GAAkB,GAGhB1J,EAAiB+J,EAAqBvG,EAAQlD,WAChDoJ,GAAkB,MAOxBF,IAAeE,GACjBD,EAASrF,KAAK,CACZrH,QACE,uRAKFE,KAAMsI,EAAyBiF,uBAG5Bf,EAwBH,SAAU9F,EAAgBY,GAC9B,IAAInI,EAAUmI,EAAUjE,QAExB,IAAI,QAASlE,GACX,OAAO,EACF,IAAI,QAAWA,GAEpB,OAAO,EACF,IAAI,QAAIA,EAAS,QAEtB,OAAO,EACF,IAAI,QAASA,GAClB,OAAO,EAEP,MAAMmB,MAAM,wBAIV,SAAUqG,EAAexH,GAC7B,UAAI,QAASA,IAA+B,IAAnBA,EAAQ3G,SACxB2G,EAAQ0C,WAAW,GASvB,IAAM2L,EAAwD,CAEnEjE,KAAM,SAAUkE,GAEd,IADA,IAAIlV,EAAMkV,EAAKjV,OACNK,EAAI4J,KAAKiL,UAAW7U,EAAIN,EAAKM,IAAK,CACzC,IAAI8U,EAAIF,EAAK5L,WAAWhJ,GACxB,GAAU,KAAN8U,EAEF,OADAlL,KAAKiL,UAAY7U,EAAI,GACd,EACF,GAAU,KAAN8U,EAMT,OAL+B,KAA3BF,EAAK5L,WAAWhJ,EAAI,GACtB4J,KAAKiL,UAAY7U,EAAI,EAErB4J,KAAKiL,UAAY7U,EAAI,GAEhB,EAGX,OAAO,GAGT6U,UAAW,GAGb,SAASjH,EACPF,EACAF,GASA,IAAI,QAAIE,EAAS,eAGf,OAAO,EAGP,IAAI,QAASA,EAAQlD,SAAU,CAC7B,IACEN,EAAiBsD,EAAyBE,EAAQlD,SAClD,MAAOxD,GAEP,MAAO,CACLoN,MAAO3E,EAAyB4E,oBAChCC,OAAQtN,EAAEC,SAGd,OAAO,EACF,IAAI,QAASyG,EAAQlD,SAE1B,OAAO,EACF,GAAIqD,EAAgBH,GAEzB,MAAO,CAAE0G,MAAO3E,EAAyB8E,mBAEzC,MAAM9M,MAAM,wBAiClB,SAASgG,EAAasH,GASpB,OARkB,QAAIA,GAAc,SAACC,GACnC,OAAI,QAASA,IAAgBA,EAAYrV,OAAS,EACzCqV,EAAYhM,WAAW,GAEvBgM,KAOb,SAASlG,EAAiBxN,EAAK2T,EAAKpO,QACjByB,IAAbhH,EAAI2T,GACN3T,EAAI2T,GAAO,CAACpO,GAEZvF,EAAI2T,GAAK3G,KAAKzH,GAIX,IAAMiB,EAAqB,IAiB5B,SAAUI,EAAyBgN,GACvC,OAAOA,EAAWpN,EACdoN,EACAzJ,EAA0ByJ,GAWhC,IAAIzJ,EAA4B,GClmC1B,SAAU0J,EAAuBC,EAAaC,GAClD,IAAMC,EAAeF,EAAY5G,aACjC,OAAI8G,IAAiBD,EAAe7G,eAIJ,IAA5B6G,EAAeE,WACqC,IAApDF,EAAeG,mBAAmBF,GAOlC,SAAUG,EAAmCC,EAAOhI,GACxD,OAAOgI,EAAMlH,eAAiBd,EAAQc,aAGjC,IAAImH,EAAoB,EAClBC,EAAkB,GAEzB,SAAUC,EAAkB/K,GAEhC,IAAIgL,EAcA,SAA2BhL,GAC/B,IAAIrL,GAAS,QAASqL,GAElBiL,EAAajL,EACbkL,GAAY,EAChB,KAAOA,GAAW,CAChBD,GAAa,SACX,SAAQ,QAAIA,GAAY,SAACnH,GAAgB,OAAAA,EAAA,gBAG3C,IAAIqH,GAAgB,QAAWF,EAAYtW,GAE3CA,EAASA,EAAOoQ,OAAOoG,IAEnB,QAAQA,GACVD,GAAY,EAEZD,EAAaE,EAGjB,OAAOxW,EAlCoByW,CAAiBpL,IAqCxC,SAAkCA,IACtC,QAAQA,GAAY,SAAC8D,GAuEjB,IAA0ClB,EAtEvCyI,EAAoBvH,KACvBgH,EAAgBD,GAAqB/G,EAC9BA,EAAaJ,aAAemH,KAKnCS,EAAsBxH,MACrB,QAAQA,EAAYyH,cAIrBzH,EAAYyH,WAAa,CAACzH,EAAYyH,aAGnCD,EAAsBxH,KACzBA,EAAYyH,WAAa,IAsDiB3I,EAnDPkB,GAoDhC,QAAIlB,EAAS,qBAnDhBkB,EAAY0H,gBAAkB,IAsD9B,SACJ5I,GAEA,OAAO,QAAIA,EAAS,sBAtDb6I,CAAmC3H,KACtCA,EAAY4G,mBAAqB,OA5DrCgB,CAAwBV,GA2EpB,SAAkChL,IACtC,QAAQA,GAAY,SAAC8D,GACnB6H,EAA8B,GAAI7H,MA1EpC8H,CAAwBZ,GA8DpB,SAAqChL,IACzC,QAAQA,GAAY,SAAC8D,GAEnBA,EAAY0H,gBAAkB,IAC9B,QAAQ1H,EAAY4G,oBAAoB,SAACmB,EAAK1B,GAC5CrG,EAAY0H,gBAAgBhI,KAAKsH,EAAgBX,GAAKzG,oBAlE1DoI,CAA2Bd,IAE3B,QAAQA,GAAsB,SAACpI,GAC7BA,EAAQ6H,SAAW7H,EAAQ4I,gBAAgB3W,OAAS,KA0ElD,SAAU8W,EACdI,EACAC,IAEA,QAAQD,GAAM,SAACE,GACbD,EAAStB,mBAAmBuB,EAASvI,eAAgB,MAGvD,QAAQsI,EAAST,YAAY,SAACW,GAC5B,IAAMC,EAAUJ,EAAKhH,OAAOiH,IAEvB,QAASG,EAASD,IACrBP,EAA8BQ,EAASD,MAKvC,SAAUb,EAAoBzI,GAClC,OAAO,QAAIA,EAAS,gBAGhB,SAAU0I,EAAsB1I,GACpC,OAAO,QAAIA,EAAS,cAahB,SAAUwJ,EAAYxJ,GAC1B,OAAO,QAAIA,EAAS,gBC3Jf,IC+CK+B,ED/CC0H,EAAwD,CACnEC,iCAAA,SAAiC1B,GAC/B,MAAO,uDAAuDA,EAAM2B,MAAK,8BAG3EC,iCAAA,SACEC,EACAC,EACA7X,EACA8X,EACAC,GAEA,MACE,2BAA2BH,EAASI,OAClCH,GACD,iBAAiBA,EAFlB,aAE+C7X,EAAM,kBCgC3D,SAAY8P,GACV,yCACA,yCACA,2CACA,yDACA,2DACA,2DACA,2DACA,qFACA,yFACA,+GACA,8FACA,4CACA,kDACA,oDACA,kDACA,kDACA,8CAjBF,CAAYA,IAAAA,EAAwB,KAwBpC,IAAMmI,EAAqC,CACzCC,+BAA+B,EAC/BxM,iBAAkB,OAClByM,uBAAwB,YACxBxM,yBAA0B,CAAC,KAAM,MACjC5E,qBAAqB,EACrB0E,UAAU,EACV2M,qBAAsBZ,EACtBa,eAAe,EACfC,iBAAiB,GAGnBC,OAAOC,OAAOP,GAEd,iBA0BE,WACYnE,EACV2E,GAFF,WAIE,QAFA,IAAAA,IAAAA,EAAA,GADU,KAAA3E,gBAAAA,EArBL,KAAA4E,sBAAiD,GACjD,KAAAC,uBAAkD,GAE/C,KAAA9L,mBAA0B,GAC1B,KAAAmC,6BAAoC,GAEpC,KAAAmF,MAAkB,GAElB,KAAAvH,YAA+C,GAEjD,KAAA6L,YAAuB9P,EACvB,KAAAiQ,iBAA2B,EAC3B,KAAAC,eAAyB,EACzB,KAAA/L,WAAqB,EACrB,KAAAgM,mBAA0B,GAUV,mBAAXL,EACT,MAAM3Q,MACJ,8HAMJmC,KAAKwO,QAAS,QAAMR,EAAsBQ,GAE1C,IAAMM,EAAe9O,KAAKwO,OAAOJ,eACZ,IAAjBU,GACF9O,KAAK+O,kBAAoB1V,EAAAA,EACzB2G,KAAKoO,eAAgB,GACY,kBAAjBU,IAChB9O,KAAK+O,kBAAoBD,EACzB9O,KAAKoO,eAAgB,GAEvBpO,KAAKgP,iBAAmB,EAExBhP,KAAKiP,WAAW,qBAAqB,WACnC,IAAIC,EACAC,GAAoB,EACxB,EAAKF,WAAW,yBAAyB,WACvC,GACE,EAAKT,OAAON,yBACZF,EAAqBE,uBAGrB,EAAKM,OAAON,uBAAyBnD,OAErC,GACE,EAAKyD,OAAO9M,2BACZsM,EAAqBtM,yBAErB,MAAM7D,MACJ,oLAMN,GAAI2Q,EAAOhN,UAAYgN,EAAO1R,oBAC5B,MAAMe,MACJ,sEAIJ,EAAK8Q,gBAAkB,kBAAkB7H,KACvC,EAAK0H,OAAO/M,kBAEd,EAAKmN,cAAgB,QAAQ9H,KAAK,EAAK0H,OAAO/M,mBAG1C,QAAQoI,KACVqF,EAAwB,CAAEhF,MAAO,KAChBA,MAAjB,aAAuC,QACxBL,GAEfqF,EAAgB,YAAiBrO,IAGjCsO,GAAoB,EACpBD,GAAmB,QACUrF,QAKG,IAAhC,EAAK2E,OAAOH,kBACd,EAAKY,WAAW,wBAAwB,WACtC,EAAKR,sBAAwB,EAAKA,sBAAsBxI,OH+nB5D,SACJ4D,EACAC,EACApI,GAEA,IAAIgE,EAAS,GAoDb,OAjDK,QAAImE,EAAiBhJ,IACxB6E,EAAOhB,KAAK,CACVrH,QACE,+FAGFE,KAAMsI,EAAyBuJ,yCAG9B,QAAIvF,EAAiB/I,IACxB4E,EAAOhB,KAAK,CACVrH,QACE,yFAGFE,KAAMsI,EAAyBwJ,2CAKjC,QAAIxF,EAAiB/I,KACrB,QAAI+I,EAAiBhJ,MACpB,QAAIgJ,EAAgBK,MAAOL,EAAgByF,cAE5C5J,EAAOhB,KAAK,CACVrH,QACE,gEAAoEwM,EAAgByF,YAApF,0BAEF/R,KACEsI,EAAyB0J,sDAI3B,QAAI1F,EAAiB/I,KACvB,QAAQ+I,EAAgBK,OAAO,SAACsF,EAAeC,IAC7C,QAAQD,GAAe,SAACxK,EAAa0K,IAC/B,QAAY1K,IACdU,EAAOhB,KAAK,CACVrH,QACE,sEACIoS,EAAY,gBAAgBC,EAAO,MACzCnS,KACEsI,EAAyB8J,kDAO9BjK,EGvrBGkK,CACEV,EACA,EAAKP,gBACL,EAAKH,OAAO9M,8BAKlB,EAAKuN,WAAW,+BAA+B,WAC7C,EAAKP,uBAAyB,EAAKA,uBAAuBzI,OACxD2D,EACEsF,EACA,EAAKP,gBACL,EAAKH,OAAO9M,+BAOpBwN,EAAiBhF,MAAQgF,EAAiBhF,MACtCgF,EAAiBhF,MACjB,IAIJ,QAAQgF,EAAiBhF,OAAO,SAACsF,EAAeC,GAC9CP,EAAiBhF,MAAMuF,IAAgB,QACrCD,GACA,SAACxK,GAAgB,wBAIrB,IAAI6K,GAAe,QAAKX,EAAiBhF,OAwDzC,IAtDA,QACEgF,EAAiBhF,OACjB,SAAC4F,EAAyBC,GACxB,EAAKd,WAAW,UAAUc,EAAW,gBAAgB,WAiBjD,IAAI,GAhBN,EAAK7F,MAAMxF,KAAKqL,IAEoB,IAAhC,EAAKvB,OAAOH,iBACd,EAAKY,WAAW,oBAAoB,WAClC,EAAKR,sBAAwB,EAAKA,sBAAsBxI,OACtDT,EAA8BsK,EAAYD,QAQ5C,QAAQ,EAAKpB,0BACfxC,EAAkB6D,GAGlB,EAAKb,WAAW,qBAAqB,WACnC,EAAoBhO,EAAkB6O,EAAY,CAChDpO,yBAA0B,EAAK8M,OAC5B9M,yBACHD,iBAAkB+M,EAAO/M,iBACzB3E,oBAAqB0R,EAAO1R,oBAC5B0E,SAAUgN,EAAOhN,SACjBH,OAAQ,EAAK4N,WAAWe,KAAK,QAIjC,EAAKpN,mBAAmBmN,GACtB,EAAkBnN,mBAEpB,EAAKmC,6BAA6BgL,GAChC,EAAkBhL,6BAEpB,EAAKpC,aAAc,QACjB,EAAKA,YACL,EAAkBA,aAGpB,EAAKE,UAAY,EAAkBA,WAAa,EAAKA,UAErD,EAAKgM,mBAAmBkB,GACtB,EAAkBjL,sBAM5B,EAAKwK,YAAcJ,EAAiBI,cAGjC,QAAQ,EAAKb,yBACb,EAAKD,OAAOP,8BACb,CACA,IAGIgC,GAHiB,QAAI,EAAKxB,uBAAuB,SAACyB,GACpD,OAAOA,EAAM7S,WAE2B8K,KACxC,6BAEF,MAAM,IAAItK,MACR,4CAA8CoS,IAKlD,QAAQ,EAAKvB,wBAAwB,SAAC7D,IACpC,QAAcA,EAAkBxN,YAGlC,EAAK4R,WAAW,wCAAwC,WAwBtD,GApBIlO,GACF,EAAKoP,UAAiB,KACtB,EAAKC,MAAQ,EAAKC,gBAElB,EAAKC,gBAAkB,KACvB,EAAKF,MAAQ,EAAKG,eAGhBpB,IACF,EAAKqB,YAAc,OAGQ,IAAzB,EAAK7B,kBACP,EAAK8B,iBAAmB,OAGC,IAAvB,EAAK7B,gBACP,EAAK8B,iCAAmC,MAGtC,QAAQ5J,KAAK,EAAK0H,OAAO/M,kBAC3B,EAAKkP,oBAAsB,EAAKC,qBAC3B,GAAI,aAAa9J,KAAK,EAAK0H,OAAO/M,kBACvC,EAAKkP,oBAAsB,EAAKE,yBAC3B,KAAI,cAAc/J,KAAK,EAAK0H,OAAO/M,kBAGxC,MAAM5D,MACJ,8CAA8C,EAAK2Q,OAAO/M,iBAAgB,KAH5E,EAAKkP,oBAAsB,EAAKG,sBAO9B,EAAKjO,WACP,EAAKkO,SAAW,EAAKC,kBACrB,EAAKC,cAAgB,EAAKC,0BAE1B,EAAKH,SAAW,EAAKI,0BACrB,EAAKF,cAAgB,EAAKG,0BAI9B,EAAKnC,WAAW,gCAAgC,WAC9C,IAAMoC,GAAmB,QACvB,EAAKxC,oBACL,SAACyC,EAAmBxM,EAAgByM,GAIlC,OAHuB,IAAnBzM,GACFwM,EAAkB5M,KAAK6M,GAElBD,IAET,IAGF,GAAI9C,EAAO1R,uBAAwB,QAAQuU,GACzC,MAAMxT,MACJ,kBAAkBwT,EAAiBlJ,KACjC,MADF,oOASN,EAAK8G,WAAW,0BAA0B,WL7V9C/S,EAAiB,MKiWb,EAAK+S,WAAW,oBAAoB,YAClC,QAAiB,SAsiBzB,OAjiBS,YAAAuC,SAAP,SACExG,EACAyG,GAEA,QAFA,IAAAA,IAAAA,EAAsBzR,KAAKsP,eAEtB,QAAQtP,KAAKyO,uBAAwB,CACxC,IAGIwB,GAHiB,QAAIjQ,KAAKyO,uBAAuB,SAACyB,GACpD,OAAOA,EAAM7S,WAE2B8K,KACxC,6BAEF,MAAM,IAAItK,MACR,uEACEoS,GAMN,OAFgBjQ,KAAK0R,iBAAiB1G,EAAMyG,IAOtC,YAAAC,iBAAR,SAAyB1G,EAAcyG,GAAvC,IACMrb,EACF+E,EACAwW,EACAC,EACAC,EACAC,EACAC,EACAC,EACAvN,EACAX,EACAmO,EACAC,EAEAvQ,EACAyO,EAfJ,OAgBM+B,EAAUnH,EACVoH,EAAYD,EAAQpc,OACpBsc,EAAS,EACTC,EAAqB,EAKrBC,EAAwBvS,KAAK6C,UAC7B,EACA3L,KAAKC,MAAM6T,EAAKjV,OAAS,IACzByc,EAAgB,IAAIhb,MAAM+a,GAC1B7M,EAAyB,GACzBmI,EAAO7N,KAAK2O,gBAAkB,OAAIjQ,EAClCoP,EAAS9N,KAAK2O,gBAAkB,OAAIjQ,EACpC+T,EHggBF,SAA2B9P,GAG/B,IAAI+P,EAAoB,GACpBC,GAAY,QAAKhQ,GAarB,OAXA,QAAQgQ,GAAW,SAACC,GAClB,IAAIC,EAAiBlQ,EAAYiQ,GAGjC,KAAI,QAAQC,GAGV,MAAMhV,MAAM,wBAFZ6U,EAAaE,GAAW,MAMrBF,EGjhBaI,CAAiB9S,KAAK2C,aACpCmH,EAAa9J,KAAK2O,gBAChBoE,EAAwB/S,KAAKwO,OAAON,uBAEtC8E,EAAyB,EACzBpQ,EAAqB,GACrBqQ,EAAmC,GAEnCC,EAAY,GAEVC,EAAa,GACnB7E,OAAOC,OAAO4E,GACd,IAAIC,OAAsB1U,EAE1B,SAAS2U,IACP,OAAOzQ,EAGT,SAAS0Q,EAA6BhI,GACpC,IAAMxM,EAAmBR,EAAyBgN,GAC5CiI,EACJN,EAAiCnU,GACnC,YAAyBJ,IAArB6U,EACKJ,EAEAI,EAIX,IAoEIC,EApEAC,EAAW,SAACC,GAEd,GACuB,IAArBR,EAAUnd,aAGuB2I,IAAjCgV,EAAS7O,UAAUkE,UACnB,CAGA,IAAI,EAAM,EAAKyF,OAAOL,qBAAqBX,iCACzCkG,GAGFhO,EAAOhB,KAAK,CACV2N,OAAQqB,EAAS9F,YACjBC,UACyBnP,IAAvBgV,EAASC,UAA0BD,EAASC,eAAYjV,EAC1DoP,YAC2BpP,IAAzBgV,EAASE,YACLF,EAASE,iBACTlV,EACN3I,OAAQ2d,EAASjG,MAAM1X,OACvBsH,QAAS,QAEN,CACL6V,EAAUvO,MACV,IAAIkP,GAAU,QAAKX,GACnBtQ,EAAqB,EAAKA,mBAAmBiR,GAC7CZ,EAAmC,EAAKlO,6BACtC8O,GAEFb,EAAyBpQ,EAAmB7M,OAC5C,IAAM+d,EACJ,EAAKjF,mBAAmBgF,KAAqC,IAAzB,EAAKrF,OAAOhN,SAGhD4R,EADEH,GAAoCa,EAChBR,EAEAD,IAK5B,SAASU,EAAUF,GACjBX,EAAUxO,KAAKmP,GACfZ,EAAmCjT,KAAK+E,6BACtC8O,GAGFjR,EAAqB5C,KAAK4C,mBAAmBiR,GAC7Cb,EAAyBpQ,EAAmB7M,OAE5Cid,EAAyBpQ,EAAmB7M,OAC5C,IAAM+d,EACJ9T,KAAK6O,mBAAmBgF,KAAqC,IAAzB7T,KAAKwO,OAAOhN,SAGhD4R,EADEH,GAAoCa,EAChBR,EAEAD,EAU1B,IAJAU,EAAUC,KAAKhU,KAAMyR,GAIdY,EAASD,GAAW,CACzBP,EAAe,KAEf,IAAIoC,EAAe9B,EAAQ/S,WAAWiT,GAChC6B,EAA2Bd,EAAoBa,GACjDE,EAAuBD,EAAyBne,OAEpD,IAAKK,EAAI,EAAGA,EAAI+d,EAAsB/d,IAAK,CAEzC,IAAI0M,GADJ0Q,EAAaU,EAAyB9d,IACTsG,QAyB7B,GAxBAoV,EAAU,MAIa,KADnBsC,GAAiBZ,EAAWhP,OAE1ByP,IAAiBG,KAEnBvC,EAAe/O,IAEgB,IAAxB0Q,EAAWjP,SAEN,QADd6L,EAAQtN,EAAYK,KAAKgP,EAASE,EAAQG,EAAeC,KAEvDZ,EAAezB,EAAM,QACC1R,IAAlB0R,EAAM0B,UACRA,EAAU1B,EAAM0B,UAGlBD,EAAe,MAGjB7R,KAAKsQ,gBAAgBxN,EAAauP,GAClCR,EAAe7R,KAAKoQ,MAAMtN,EAAakI,EAAMqH,IAG1B,OAAjBR,EAAuB,CAIzB,QAAqBnT,KADrBkT,EAAe4B,EAAWnP,WACM,CAG9B,IAAIgQ,EAAkBzR,EAAmBgP,GACrC0C,EAAmBD,EAAgB3X,QACvCqV,EAAa,MAIoB,IAA7BsC,EAAgB9P,SAOJ,QANd6L,EAAQkE,EAAiBnR,KACvBgP,EACAE,EACAG,EACAC,KAGAd,EAAgBvB,EAAM,QACA1R,IAAlB0R,EAAM0B,UACRC,EAAa3B,EAAM0B,UAGrBH,EAAgB,MAGlB3R,KAAKsQ,gBAAgBgE,EAAkBjC,GACvCV,EAAgB3R,KAAKoQ,MAAMkE,EAAkBtJ,EAAMqH,IAGjDV,GAAiBA,EAAc5b,OAAS8b,EAAa9b,SACvD8b,EAAeF,EACfG,EAAUC,EACVyB,EAAaa,GAGjB,OAKJ,GAAqB,OAAjBxC,EAAuB,CAoCzB,GAnCAG,EAAcH,EAAa9b,YAEb2I,KADd+F,EAAQ+O,EAAW/O,SAEjBX,EAAU0P,EAAW5O,aAGrBqN,EAAWjS,KAAK2Q,oBACdkB,EACAQ,EACAvO,EACA0P,EAAW3O,UACXgJ,EACAC,EACAkE,GAGFhS,KAAKiR,cAAcgB,EAAUH,IAGf,IAAVrN,EACF6N,EAAqBtS,KAAK+Q,SACxByB,EACAF,EACAL,GAGFQ,EAAOhO,GAAOC,KAAKuN,IAGvBjH,EAAOhL,KAAKmQ,UAAUnF,EAAMgH,GAC5BK,GAAkBL,EAGlBlE,EAAS9N,KAAKyQ,iBAAiB3C,EAAQkE,IAEpB,IAAflI,IAAwD,IAAjC0J,EAAWlP,kBAA4B,CAChE,IAAIiQ,EAAkB,EAClBC,OAAe,EACfC,OAAe,EACnB1B,EAAsB9H,UAAY,EAClC,IAE0B,KADxBuJ,EAAkBzB,EAAsBjM,KAAK+K,MAE3C4C,EAAkB1B,EAAsB9H,UAAY,EACpDsJ,YAEyB,IAApBC,GAEe,IAApBD,IACF1G,GAAc0G,EACdzG,EAASkE,EAAcyC,EACvBzU,KAAK0Q,iCACHuB,EACAxN,EACAgQ,EACAF,EACA1G,EACAC,EACAkE,IAKNhS,KAAKwQ,YAAYgD,EAAYC,EAAUM,EAAW9B,OAC7C,CAML,IAJA,IAAIyC,EAAmBrC,EACnBsC,EAAY9G,EACZ+G,EAAc9G,EACd+G,IAAmB,GACfA,IAAoBxC,EAASD,GAMnC,IAJcD,EAAQ/S,WAAWiT,GAEjCrH,EAAOhL,KAAKmQ,UAAUnF,EAAM,GAC5BqH,IACKlX,EAAI,EAAGA,EAAI6X,EAAwB7X,IAAK,CAC3C,IAIIiZ,GAJA,GAAaxR,EAAmBzH,GAChC2H,EAAc,GAAWpG,QAkB7B,IAduB,KADnB0X,GAAiB,GAAW5P,OAE1B2N,EAAQ/S,WAAWiT,KAAY+B,KAEjCS,IAAmB,IAEY,IAAxB,GAAWtQ,SACpBsQ,GAEE,OADA/R,EAAYK,KAAKgP,EAASE,EAAQG,EAAeC,IAGnDzS,KAAKsQ,gBAAgBxN,EAAauP,GAClCwC,GAA8C,OAA3B/R,EAAYK,KAAK6H,KAGb,IAArB6J,GACF,MAKN3C,EAAYG,EAASqC,EAErB/S,EAAM3B,KAAKwO,OAAOL,qBAAqBT,iCACrCyE,EACAuC,EACAxC,EACAyC,EACAC,GAEFlP,EAAOhB,KAAK,CACV2N,OAAQqC,EACR7G,KAAM8G,EACN7G,OAAQ8G,EACR7e,OAAQmc,EACR7U,QAASsE,KAYf,OALK3B,KAAK6C,YAER2P,EAAczc,OAASuc,GAGlB,CACLwC,OAAQtC,EACRC,OAAQA,EACR/M,OAAQA,IAIJ,YAAA8K,YAAR,SAAoBhC,EAAQiF,EAAUM,EAAW9B,GAC/C,IAAmB,IAAfzD,EAAO7J,IAAc,CAGvB,IAAIoQ,EAAWvG,EAAO9J,KACtB+O,EAASxB,QACQvT,IAAbqW,GACFhB,EAAUC,KAAKhU,KAAM+U,aAEErW,IAAhB8P,EAAO9J,MAChBqP,EAAUC,KAAKhU,KAAMwO,EAAO9J,OAIxB,YAAAyL,UAAR,SAAkBnF,EAAMjV,GACtB,OAAOiV,EAAKgK,UAAUjf,IAGhB,YAAAua,gBAAR,SAAwBhU,EAAQ2Y,GAC9B3Y,EAAO2O,UAAYgK,GAIb,YAAAvE,iCAAR,SACEuB,EACAxN,EACAyQ,EACAX,EACA1G,EACAC,EACAkE,GAEA,IAAImD,EAAcC,OACJ1W,IAAV+F,IAGF2Q,GADAD,EAAeD,IAAclD,EAAc,IACR,EAAI,EACb,IAApBuC,IAA0C,IAAjBY,IAE7BlD,EAASoD,QAAUxH,EAAOuH,EAG1BnD,EAASqD,UAAYxH,EAAS,EAAKsH,KAMjC,YAAA3E,iBAAR,SAAyB8E,EAAWvD,GAClC,OAAOuD,EAAYvD,GAKb,YAAArB,oBAAR,eAA4B,sDAC1B,OAAO,MAGD,YAAAG,sBAAR,SAA8BrD,EAAOG,EAAahJ,EAAcC,GAC9D,MAAO,CACL4I,MAAK,EACLG,YAAW,EACXhJ,aAAY,EACZC,UAAS,IAIL,YAAAgM,qBAAR,SACEpD,EACAG,EACAhJ,EACAC,EACA8O,EACAC,GAEA,MAAO,CACLnG,MAAK,EACLG,YAAW,EACX+F,UAAS,EACTC,YAAW,EACXhP,aAAY,EACZC,UAAS,IAIL,YAAA+L,gBAAR,SACEnD,EACAG,EACAhJ,EACAC,EACA8O,EACAC,EACA5B,GAEA,MAAO,CACLvE,MAAK,EACLG,YAAW,EACX4H,UAAW5H,EAAcoE,EAAc,EACvC2B,UAAS,EACT0B,QAAS1B,EACTC,YAAW,EACX0B,UAAW1B,EAAc5B,EAAc,EACvCpN,aAAY,EACZC,UAAS,IAML,YAAAkM,SAAR,SAAiB0E,EAAajM,EAAOkM,GACnC,OAAO,KAGD,YAAA1E,kBAAR,SAA0ByE,EAAajM,EAAOkM,GAE5C,OADAD,EAAY/Q,KAAKgR,GACVlM,GAGD,YAAA2H,0BAAR,SAAkCsE,EAAajM,EAAOkM,GAGpD,OAFAD,EAAYjM,GAASkM,IACrBlM,GAMM,YAAAyH,cAAR,SAAsBnF,EAAegG,KAE7B,YAAAV,sBAAR,SAA8BtF,EAAegG,KAErC,YAAAZ,wBAAR,SAAgCpF,EAAegG,GAC7B,OAAZA,IACFhG,EAAMgG,QAAUA,IAKZ,YAAA1B,MAAR,SAAc1T,EAAiBsO,EAAcqH,GAC3C,OAAO,MAGD,YAAAhC,cAAR,SAAsB3T,EAAiBsO,EAAcqH,GAEnD,OAAc,IADF3V,EAAQoK,KAAKkE,GAEhBA,EAAKgK,UAAU3C,EAAQ3V,EAAQuO,WAEjC,MAGD,YAAAsF,cAAR,SAAsB7T,EAASsO,GAC7B,IAAIzB,EAAc7M,EAAQyG,KAAK6H,GAC/B,OAAuB,OAAhBzB,EAAuBA,EAAY,GAAKA,GAKjD,YAAA0F,WAAA,SAAc0G,EAAmBC,GAG/B,IAA2B,IAAvB5V,KAAKoO,cAAwB,CAC/BpO,KAAKgP,kBACL,IAAM6G,EAAS,IAAIre,MAAMwI,KAAKgP,gBAAkB,GAAG7G,KAAK,MACpDnI,KAAKgP,gBAAkBhP,KAAK+O,mBAC9B+G,QAAQza,IAAOwa,EAAM,WAAQF,EAAS,KAElC,OAAkB,QAAMC,GAAtBG,EAAI,OAAE9Y,EAAK,QAEb+Y,EAAcD,EAAO,GAAKD,QAAQG,KAAOH,QAAQza,IAKvD,OAJI2E,KAAKgP,gBAAkBhP,KAAK+O,mBAC9BiH,EAAeH,EAAM,QAAQF,EAAS,WAAWI,EAAI,MAEvD/V,KAAKgP,kBACE/R,EAEP,OAAO2Y,KA9zBG,EAAAnS,QACZ,6LAGY,EAAAxB,GAAK,iBA6zBrB,EAl0BA,GClFM,SAAUiU,EAAWpS,GACzB,OAAIqS,GAAcrS,GACTA,EAAQsS,MAERtS,EAAQ3K,KAIb,SAAUkd,GAAUvS,GACxB,OAAOA,EAAQ3K,KAGX,SAAUgd,GAAcG,GAC5B,OAAO,QAAeA,EAAKF,QAA+B,KAAfE,EAAKF,MAGlD,IAAMG,GAAS,SACT9J,GAAa,aACb2J,GAAQ,QACR5S,GAAQ,QACRuF,GAAY,YACZyN,GAAW,WACX7S,GAAa,aACbI,GAAc,cACdoB,GAAmB,mBAEnB,SAAUsR,GAAYjI,GAC1B,OAGF,SAA6BA,GAC3B,IAAI9R,EAAU8R,EAAO9R,QAEjBmI,EAA4B,GAChCA,EAAU1L,KAAOqV,EAAOrV,MAEnB,QAAYuD,KACfmI,EAAUjE,QAAUlE,GAGtB,IAAI,QAAI8R,EAAQ+H,IACd,KACE,6IAKA,QAAI/H,EAAQ/B,MAEd5H,EAAU4H,WAAkB+B,EAAM,YAGpCvC,EAAkB,CAACpH,KAEf,QAAI2J,EAAQ4H,MACdvR,EAAUuR,MAAQ5H,EAAM,QAGtB,QAAIA,EAAQhL,MACdqB,EAAUrB,MAAQgL,EAAM,QAGtB,QAAIA,EAAQgI,MACd3R,EAAU2R,SAAWhI,EAAM,WAGzB,QAAIA,EAAQzF,MACdlE,EAAUkE,UAAYyF,EAAM,YAG1B,QAAIA,EAAQ7K,MACdkB,EAAUlB,WAAa6K,EAAM,aAG3B,QAAIA,EAAQzK,MACdc,EAAUd,YAAcyK,EAAM,cAG5B,QAAIA,EAAQrJ,MACdN,EAAUM,iBAAmBqJ,EAAM,kBAGrC,OAAO3J,EAvDA6R,CAAoBlI,GA0DtB,IAAMmI,GAAMF,GAAY,CAAEtd,KAAM,MAAOuD,QAASsF,EAAMC,KAGvD,SAAU0O,GACd7M,EACA2J,EACAG,EACA4H,EACA7B,EACA0B,EACAzB,EACA0B,GAEA,MAAO,CACL7H,MAAK,EACLG,YAAW,EACX4H,UAAS,EACT7B,UAAS,EACT0B,QAAO,EACPzB,YAAW,EACX0B,UAAS,EACT1Q,aAAoBd,EAASc,aAC7BC,UAAWf,GAIT,SAAU8S,GAAa9K,EAAehI,GAC1C,OAAOyH,EAAuBO,EAAOhI,GA1BvCmI,EAAkB,CAAC0K,4WCjFnB,cASE,WAAsBE,GAAA,KAAAA,YAAAA,EAQxB,OAfE,sBAAW,yBAAU,KAArB,WACE,OAAO7W,KAAK6W,iBAEd,SAAsB5Z,GACpB+C,KAAK6W,YAAc5Z,mCAKrB,YAAA6Z,OAAA,SAAOC,GACLA,EAAQpW,MAAMX,OACd,QAAQA,KAAKgX,YAAY,SAACC,GACxBA,EAAKH,OAAOC,OAGlB,EAjBA,GAmBA,eAOE,WAAY5V,GAAZ,MAKE,YAAM,KAAG,YAPJ,EAAAiD,IAAc,GAQnB,QACE,GACA,QAAKjD,GAAS,SAAC9I,GAAM,gBAAAA,QAmB3B,OAjCU,QAkBR,sBAAI,yBAAU,KAId,WACE,YAA4BqG,IAAxBsB,KAAKkX,eACAlX,KAAKkX,eAAeF,WAEtB,QART,SAAeA,qCAWf,YAAAF,OAAA,SAAOC,GACLA,EAAQpW,MAAMX,OAGlB,EAlCA,CACUmX,IAmCV,eAIE,WAAYhW,GAAZ,MAKE,YAAMA,EAAQ6V,aAAW,YAPpB,EAAA7E,QAAkB,IAQvB,QACE,GACA,QAAKhR,GAAS,SAAC9I,GAAM,gBAAAA,QAG3B,OAf0B,QAe1B,EAfA,CAA0B8e,IAiB1B,eAGE,WAAYhW,GAAZ,MAIE,YAAMA,EAAQ6V,aAAW,YANpB,EAAAI,mBAA6B,GAOlC,QACE,GACA,QAAKjW,GAAS,SAAC9I,GAAM,gBAAAA,QAG3B,OAbiC,QAajC,EAbA,CAAiC8e,IAejC,eAME,WAAYhW,GAAZ,MAKE,YAAMA,EAAQ6V,aAAW,YARpB,EAAA5S,IAAc,GASnB,QACE,GACA,QAAKjD,GAAS,SAAC9I,GAAM,gBAAAA,QAG3B,OAhBU,QAgBV,EAjBA,CACU8e,IAkBV,eAME,WAAYhW,GAAZ,MAKE,YAAMA,EAAQ6V,aAAW,YARpB,EAAA5S,IAAc,GASnB,QACE,GACA,QAAKjD,GAAS,SAAC9I,GAAM,gBAAAA,QAG3B,OAhBU,QAgBV,EAjBA,CACU8e,IAkBV,eAME,WAAYhW,GAAZ,MAKE,YAAMA,EAAQ6V,aAAW,YAPpB,EAAA5S,IAAc,GAQnB,QACE,GACA,QAAKjD,GAAS,SAAC9I,GAAM,gBAAAA,QAG3B,OAhBU,QAgBV,EAjBA,CACU8e,IAkBV,eAOE,WAAYhW,GAAZ,MAKE,YAAMA,EAAQ6V,aAAW,YARpB,EAAA5S,IAAc,GASnB,QACE,GACA,QAAKjD,GAAS,SAAC9I,GAAM,gBAAAA,QAG3B,OAjBU,QAiBV,EAlBA,CACU8e,IAmBV,eAME,WAAYhW,GAAZ,MAKE,YAAMA,EAAQ6V,aAAW,YAPpB,EAAA5S,IAAc,GAQnB,QACE,GACA,QAAKjD,GAAS,SAAC9I,GAAM,gBAAAA,QAG3B,OAhBU,QAgBV,EAjBA,CACU8e,IAkBV,eAeE,WAAYhW,GAAZ,MAOE,YAAMA,EAAQ6V,aAAW,YAnBpB,EAAA5S,IAAc,EACd,EAAAgT,mBAA6B,EAC7B,EAAAC,eAAyB,GAkB9B,QACE,GACA,QAAKlW,GAAS,SAAC9I,GAAM,gBAAAA,QAG3B,OA3BU,QAOR,sBAAW,yBAAU,KAArB,WACE,OAAO2H,KAAK6W,iBAEd,SAAsB5Z,GACpB+C,KAAK6W,YAAc5Z,mCAgBvB,EA5BA,CACUka,IA6BV,cAIE,WAAYhW,GAFL,KAAAiD,IAAc,GAGnB,QACEpE,MACA,QAAKmB,GAAS,SAAC9I,GAAM,gBAAAA,MAO3B,OAHE,YAAAye,OAAA,SAAOC,GACLA,EAAQpW,MAAMX,OAElB,EAdA,GA2DM,SAAUsX,GAAiBC,GAC/B,OAAO,QAAIA,EAAUC,IAGjB,SAAUA,GAAoBzX,GAClC,SAAS0X,EAAkBT,GACzB,OAAO,QAAIA,EAAYQ,IAGzB,GAAIzX,aAAgB2X,GAClB,MAA+B,CAC7Bna,KAAM,cACNpE,KAAM4G,EAAK4X,gBACXvT,IAAKrE,EAAKqE,KAEP,GAAIrE,aAAgB6X,GACzB,MAAyB,CACvBra,KAAM,cACNyZ,WAAYS,EAAkB1X,EAAKiX,aAEhC,GAAIjX,aAAgB8X,GACzB,MAAyB,CACvBta,KAAM,SACN6G,IAAKrE,EAAKqE,IACV4S,WAAYS,EAAkB1X,EAAKiX,aAEhC,GAAIjX,aAAgB+X,GACzB,MAAyB,CACvBva,KAAM,sBACN6G,IAAKrE,EAAKqE,IACV4S,WAAYS,EAAkB1X,EAAKiX,aAEhC,GAAIjX,aAAgBgY,GACzB,MAAyC,CACvCxa,KAAM,mCACN6G,IAAKrE,EAAKqE,IACV4T,UACER,GAAoB,IAAIS,GAAS,CAAEC,aAAcnY,EAAKiY,aAExDhB,WAAYS,EAAkB1X,EAAKiX,aAEhC,GAAIjX,aAAgBoY,GACzB,MAAyC,CACvC5a,KAAM,0BACN6G,IAAKrE,EAAKqE,IACV4T,UACER,GAAoB,IAAIS,GAAS,CAAEC,aAAcnY,EAAKiY,aAExDhB,WAAYS,EAAkB1X,EAAKiX,aAEhC,GAAIjX,aAAgBqY,GACzB,MAAyB,CACvB7a,KAAM,aACN6G,IAAKrE,EAAKqE,IACV4S,WAAYS,EAAkB1X,EAAKiX,aAEhC,GAAIjX,aAAgBsY,GACzB,MAAyB,CACvB9a,KAAM,cACN6G,IAAKrE,EAAKqE,IACV4S,WAAYS,EAAkB1X,EAAKiX,aAEhC,GAAIjX,aAAgBkY,GAAU,CACnC,IAAIK,EAA0C,CAC5C/a,KAAM,WACNpE,KAAM4G,EAAKmY,aAAa/e,KACxBof,MAAOrC,EAAWnW,EAAKmY,cACvB9T,IAAKrE,EAAKqE,KAGR1H,EAAUqD,EAAKmY,aAAatX,QAOhC,OANIb,EAAKmY,aAAatX,UACpB0X,EAAmB5b,SAAU,QAASA,GAC5BA,EAASsG,OACftG,GAGC4b,EACF,GAAIvY,aAAgByY,GACzB,MAA4B,CAC1Bjb,KAAM,OACNpE,KAAM4G,EAAK5G,KACXgZ,QAASpS,EAAKoS,QACd6E,WAAYS,EAAkB1X,EAAKiX,aAGrC,MAAMnZ,MAAM,wBC9VhB,gCAiIA,OAhIE,YAAA4a,KAAA,SAAKxB,EAA0ByB,GAA/B,gBAA+B,IAAAA,IAAAA,EAAA,KAC7B,QAAQzB,EAAKD,YAAY,SAAC2B,EAAsBnP,GAC9C,IAAIoP,GAAW,QAAK3B,EAAKD,WAAYxN,EAAQ,GAE7C,GAAImP,aAAmBjB,GACrB,EAAKmB,YAAYF,EAASC,EAAUF,QAC/B,GAAIC,aAAmBV,GAC5B,EAAKa,aAAaH,EAASC,EAAUF,QAChC,GAAIC,aAAmBf,GAC5B,EAAKmB,SAASJ,EAASC,EAAUF,QAC5B,GAAIC,aAAmBd,GAC5B,EAAKmB,WAAWL,EAASC,EAAUF,QAC9B,GAAIC,aAAmBb,GAC5B,EAAKmB,eAAeN,EAASC,EAAUF,QAClC,GAAIC,aAAmBZ,GAC5B,EAAKmB,kBAAkBP,EAASC,EAAUF,QACrC,GAAIC,aAAmBR,GAC5B,EAAKgB,YAAYR,EAASC,EAAUF,QAC/B,GAAIC,aAAmBP,GAC5B,EAAKgB,SAAST,EAASC,EAAUF,OAC5B,MAAIC,aAAmBN,IAG5B,MAAMxa,MAAM,wBAFZ,EAAKwb,OAAOV,EAASC,EAAUF,QAOrC,YAAAI,aAAA,SACEQ,EACAV,EACAF,KAGF,YAAAG,YAAA,SACEU,EACAX,EACAF,KAGF,YAAAK,SAAA,SACES,EACAZ,EACAF,GAGA,IAAIe,EAAab,EAAS3S,OAAOyS,GACjC1Y,KAAKyY,KAAKe,EAAeC,IAG3B,YAAAT,WAAA,SACEU,EACAd,EACAF,GAGA,IAAIe,EAAab,EAAS3S,OAAOyS,GACjC1Y,KAAKyY,KAAKiB,EAAiBD,IAG7B,YAAAR,eAAA,SACEU,EACAf,EACAF,GAGA,IAAIkB,EAAoC,CACtC,IAAI/B,GAAO,CAAEb,WAAY2C,EAAe3C,cACxC/Q,OAAY2S,EAAeF,GAC7B1Y,KAAKyY,KAAKkB,EAAgBC,IAG5B,YAAAV,kBAAA,SACEW,EACAjB,EACAF,GAGA,IAAIoB,EAAwBC,GAC1BF,EACAjB,EACAF,GAEF1Y,KAAKyY,KAAKoB,EAAmBC,IAG/B,YAAAV,SAAA,SACEY,EACApB,EACAF,GAGA,IAAIuB,EAA8B,CAChC,IAAIpC,GAAO,CAAEb,WAAYgD,EAAShD,cAClC/Q,OAAY2S,EAAeF,GAC7B1Y,KAAKyY,KAAKuB,EAAUC,IAGtB,YAAAd,YAAA,SACEe,EACAtB,EACAF,GAGA,IAAIyB,EAAkBJ,GACpBG,EACAtB,EACAF,GAEF1Y,KAAKyY,KAAKyB,EAAaC,IAGzB,YAAAd,OAAA,SACEe,EACAxB,EACAF,GAHF,WAMMe,EAAab,EAAS3S,OAAOyS,IAEjC,QAAQ0B,EAAOpD,YAAY,SAACqD,GAI1B,IAAIC,EAAc,IAAI1C,GAAY,CAAEZ,WAAY,CAACqD,KACjD,EAAK5B,KAAK6B,EAAkBb,OAGlC,EAjIA,GAmIA,SAASM,GAA+BQ,EAAY3B,EAAUF,GAY5D,MAXiB,CACf,IAAIb,GAAO,CACTb,WAAY,CAAC,IAAIiB,GAAS,CAAEC,aAAcqC,EAAWvC,aAAc/R,OACjEsU,EAAWvD,eAI8B/Q,OACxC2S,EACAF,GCjJT,gCAmDA,OAlDS,YAAA/X,MAAP,SAAaZ,GACX,IAAMya,EAAeza,EACrB,OAAQya,EAAQC,aACd,KAAK/C,GACH,OAAO1X,KAAK0a,iBAAiBF,GAC/B,KAAK5C,GACH,OAAO5X,KAAK2a,iBAAiBH,GAC/B,KAAK3C,GACH,OAAO7X,KAAK4a,YAAYJ,GAC1B,KAAK1C,GACH,OAAO9X,KAAK6a,yBAAyBL,GACvC,KAAKzC,GACH,OAAO/X,KAAK8a,sCAAsCN,GACpD,KAAKrC,GACH,OAAOnY,KAAK+a,6BAA6BP,GAC3C,KAAKpC,GACH,OAAOpY,KAAKgb,gBAAgBR,GAC9B,KAAKnC,GACH,OAAOrY,KAAKib,iBAAiBT,GAC/B,KAAKvC,GACH,OAAOjY,KAAKkb,cAAcV,GAC5B,KAAKhC,GACH,OAAOxY,KAAKmb,UAAUX,GAExB,QACE,MAAM3c,MAAM,0BAIX,YAAA6c,iBAAP,SAAwB3a,KAEjB,YAAA4a,iBAAP,SAAwB5a,KAEjB,YAAA6a,YAAP,SAAmB7a,KAEZ,YAAAib,gBAAP,SAAuBjb,KAEhB,YAAA8a,yBAAP,SAAgC9a,KAEzB,YAAA+a,sCAAP,SACE/a,KAGK,YAAAgb,6BAAP,SAAoChb,KAE7B,YAAAkb,iBAAP,SAAwBlb,KAEjB,YAAAmb,cAAP,SAAqBnb,KAEd,YAAAob,UAAP,SAAiBpb,KACnB,EAnDA,sWCgBM,SAAUqb,GACdnE,EACAoE,GAMA,YANA,IAAAA,IAAAA,EAAA,OAGEpE,aAAgBY,IAChBZ,aAAgBmB,IAChBnB,aAAgBkB,MAQdlB,aAAgBoB,IAEX,OAAmBpB,EAAMD,YAAY,SAAC2B,GAC3C,OAAOyC,GAAezC,EAAS0C,QAExBpE,aAAgBS,KAAe,QAAS2D,EAAgBpE,MAGxDA,aAAgBE,KACrBF,aAAgBS,IAClB2D,EAAe3W,KAAKuS,IAEf,QACgBA,EAAMD,YAC3B,SAAC2B,GACC,OAAOyC,GAAezC,EAAS0C,SAYjC,SAAUC,GAAqBrE,GAEnC,GAAIA,aAAgBS,GAClB,MAAO,UACF,GAAIT,aAAgBY,GACzB,MAAO,SACF,GAAIZ,aAAgBoB,GACzB,MAAO,KACF,GAAIpB,aAAgBa,GACzB,MAAO,eACF,GAAIb,aAAgBc,GACzB,MAAO,mBACF,GAAId,aAAgBkB,GACzB,MAAO,WACF,GAAIlB,aAAgBmB,GACzB,MAAO,OACF,GAAInB,aAAgBgB,GACzB,MAAO,UAEP,MAAMpa,MAAM,wBAIhB,qFAES,EAAAma,UAAY,IACZ,EAAAuD,WAAa,CAClBC,OAAQ,GACRC,YAAa,GACbC,WAAY,GACZC,wBAAyB,GACzBC,oBAAqB,GACrBC,iCAAkC,MAuDtC,OAhEgD,QAY9C,YAAAC,MAAA,WACE9b,KAAKub,WAAa,CAChBC,OAAQ,GACRC,YAAa,GACbC,WAAY,GACZC,wBAAyB,GACzBC,oBAAqB,GACrBC,iCAAkC,KAI/B,YAAAX,cAAP,SAAqB5B,GACnB,IAAMjO,EAAMiO,EAASpB,aAAa/e,KAAO6G,KAAKgY,UAAY,YACrD,QAAIhY,KAAKub,WAAYlQ,KACxBrL,KAAKub,WAAWlQ,GAAO,IAEzBrL,KAAKub,WAAWlQ,GAAK3G,KAAK4U,IAGrB,YAAAoB,iBAAP,SAAwBqB,GACtB,IAAM1Q,EAAM0Q,EAAQpE,gBAAkB3X,KAAKgY,UAAY,YAClD,QAAIhY,KAAKub,WAAYlQ,KACxBrL,KAAKub,WAAWlQ,GAAO,IAEzBrL,KAAKub,WAAWlQ,GAAK3G,KAAKqX,IAGrB,YAAAnB,YAAP,SAAmBY,GACjBxb,KAAKub,WAAWC,OAAO9W,KAAK8W,IAGvB,YAAAT,6BAAP,SAAoCiB,GAClChc,KAAKub,WAAWI,wBAAwBjX,KAAKsX,IAGxC,YAAAnB,yBAAP,SAAgCoB,GAC9Bjc,KAAKub,WAAWK,oBAAoBlX,KAAKuX,IAGpC,YAAAnB,sCAAP,SACEoB,GAEAlc,KAAKub,WAAWM,iCAAiCnX,KAAKwX,IAGjD,YAAAlB,gBAAP,SAAuBmB,GACrBnc,KAAKub,WAAWG,WAAWhX,KAAKyX,IAG3B,YAAAlB,iBAAP,SAAwBmB,GACtBpc,KAAKub,WAAWE,YAAY/W,KAAK0X,IAErC,EAhEA,CAAgDC,IAkE1CC,GAAmB,IAAIC,GC5JvB,SAAUC,GAAMvF,GAEpB,GAAIA,aAAgBS,GASlB,OAAO8E,GAAoBvF,EAAMC,gBAC5B,GAAID,aAAgBgB,GACzB,MAyCK,CAzC6BhB,EAyCnBiB,cAxCV,GDFH,SAAyBjB,GAC7B,OACEA,aAAgBW,IAChBX,aAAgBY,IAChBZ,aAAgBmB,IAChBnB,aAAgBa,IAChBb,aAAgBc,IAChBd,aAAgBkB,IAChBlB,aAAgBgB,IAChBhB,aAAgBuB,GCPPiE,CAAexF,GACxB,OAQE,SAA2BA,GAC/B,IAIIyF,EAJAC,EAAwB,GACxBC,EAAM3F,EAAKD,WACX6F,EAAiB,EACjBC,EAAyBF,EAAI7mB,OAAS8mB,EAGtCE,GAA0B,EAE9B,KAAOD,GAA0BC,GAE/BA,EAA0B3B,GAD1BsB,EAAcE,EAAIC,IAElBF,EAAWA,EAAS1W,OAAOuW,GAAME,IACjCG,GAAkC,EAClCC,EAAyBF,EAAI7mB,OAAS8mB,EAGxC,OAAO,QAAKF,GAzBHK,CAAqC/F,GACvC,GD+CH,SAA0BA,GAC9B,OAAOA,aAAgBoB,GChDZ4E,CAAgBhG,GACzB,OA0BE,SAA4BA,GAChC,IAAIiG,GAAuC,QACzCjG,EAAKD,YACL,SAACmG,GACC,OAAOX,GAAMW,MAGjB,OAAO,SAAK,QAAmBD,IAjCtBE,CAAsCnG,GAE7C,MAAMpZ,MAAM,wBCvBT,IAAI,GAAK,4WCQhB,eAGE,WAAoBwf,GAApB,MACE,cAAO,YADW,EAAAA,QAAAA,EAFb,EAAAC,QAAU,KAgCnB,OAjCyC,QAOvC,YAAAC,aAAA,WAEE,OADAvd,KAAKyY,KAAKzY,KAAKqd,SACRrd,KAAKsd,SAGd,YAAAxE,aAAA,SACEQ,EACAV,EACAF,KAKF,YAAAG,YAAA,SACEU,EACAX,EACAF,GAEA,IAuBF8E,EACAC,EAxBMC,GAuBNF,EAtBkCjE,EAAQrC,eAuB1CuG,EAvB0DlE,EAAQnV,IAyB3DoZ,EAAMrkB,KAAOskB,EAAoB,GAxBpCzd,KAAKqd,QAAQlkB,MACXwkB,EAA0B/E,EAAS3S,OAAOyS,GAE1CkF,EAAuBpB,GADZ,IAAI5E,GAAY,CAAEZ,WAAY2G,KAE7C3d,KAAKsd,QAAQI,GAAcE,GAE/B,EAjCA,CAAyCC,ICSlC,IAAMC,GAA0D,CACrEC,0BAAA,SAA0B,OAAEC,EAAQ,WAAEC,EAAM,SAAU,WAAU,WAQ9D,MAFU,cALK9H,GAAc6H,GAEzB,UAAO9H,EAAW8H,GAAS,OAC3B,wBAAqBA,EAAS7kB,KAAI,QAEJ,sBAAmB8kB,EAAOxQ,MAAK,SAKnEyQ,8BAAA,SAA8B,OAAEC,EAAc,iBAAU,WACtD,MAAO,6CAA+CA,EAAe1Q,OAGvE2Q,wBAAA,SAAwB,OACtBC,EAAmB,sBACnBJ,EAAM,SAENK,GADQ,WACa,yBAGjBC,GAFI,WAEQ,eAGZC,EAAY,kBADC,QAAMP,GAAQxQ,MACiB,IAEhD,GAAI6Q,EACF,OAAOC,EAAYD,EAAwBE,EAE3C,IAAIC,GAAoB,QACtBJ,GACA,SAACxoB,EAAQ6oB,GAAiB,OAAA7oB,EAAOoQ,OAAP,KAC1B,IAEE0Y,GAA0B,QAC5BF,GACA,SAACG,GACC,WAAI,QAAIA,GAAU,SAACC,GAAkB,OAAA3I,EAAA,MAA2B/N,KAC9D,MACD,OAUL,OAAOoW,GAJqB,4CAJC,QAC3BI,GACA,SAACG,EAAS1a,GAAQ,YAAKA,EAAM,GAAC,KAAZ,KAE0E+D,KAC5F,OAGyCqW,GAI/CO,sBAAA,SAAsB,OACpBC,EAAsB,yBACtBf,EAAM,SACNK,EAAqB,wBAGjBC,GAFI,WAEQ,eAGZC,EAAY,kBADC,QAAMP,GAAQxQ,MACiB,IAEhD,OAAI6Q,EACKC,EAAYD,EAAwBE,EAapCD,GAHL,mGAR4B,QAC5BS,GACA,SAACJ,GACC,WAAI,QAAIA,GAAU,SAACC,GAAkB,OAAA3I,EAAA,MAA2B/N,KAC9D,KACD,OAIyBA,KAAK,MAAK,KAEGqW,IAKjDlQ,OAAOC,OAAOuP,IAEP,IAAMmB,GAA4E,CACvFC,uBAAA,SACEC,EACAC,GASA,MANE,gEACAA,EAAczH,gBADd,gCAIAwH,EAAahmB,KACb,OAKOkmB,GAA8E,CACzFC,yBAAA,SACEH,EACAI,GAcA,IAXEtI,EAWIuI,EAAeL,EAAahmB,KAC5BsmB,GAAgB,QAAMF,GACtB/V,EAAQiW,EAAcrb,IACtBsb,EAAUpE,GAAqBmE,GACjCE,GAfF1I,EAe6CwI,aAbzBxH,GACXhB,EAAKiB,aAAa/e,KAChB8d,aAAgBS,GAClBT,EAAKU,gBAEL,GAWPhW,EAAM,KAAK+d,GADUlW,EAAQ,EACWA,EAAQ,IAAE,OACpDmW,EAAgB,oBAAoBA,EAAa,KAAO,IAAE,+CAG5CJ,EAAexpB,OAAM,oCACaypB,EAAY,gJAQ9D,OAFA7d,GADAA,EAAMA,EAAInL,QAAQ,UAAW,MACnBA,QAAQ,SAAU,OAK9BopB,4BAAA,SAA4BC,GAQ1B,MANE,iHAC2EA,EAAK1mB,KADhF,gPASJ2mB,qCAAA,SAAqC3e,GAMnC,IAAM4e,GAAU,QAAI5e,EAAQ6e,YAAY,SAACC,GACvC,OAAA/J,EAAW+J,MACX9X,KAAK,MACD+X,EACwB,IAA5B/e,EAAQsa,YAAYrX,IAAY,GAAKjD,EAAQsa,YAAYrX,IAU3D,MARE,4BAA4BjD,EAAQgf,iBAAiBhY,KACnD,MADF,2CAGS+X,EAAU,aAAa/e,EAAQge,aAAahmB,KAHrD,aAII4mB,EAJJ,sKAWJK,+BAAA,SAA+Bjf,GAM7B,IAAI4e,GAAU,QAAI5e,EAAQ6e,YAAY,SAACK,GACrC,OAAAnK,EAAWmK,MACXlY,KAAK,MACH+X,EAC0B,IAA5B/e,EAAQsa,YAAYrX,IAAY,GAAKjD,EAAQsa,YAAYrX,IACvDkc,EACF,qCAAqCnf,EAAQgf,iBAAiBhY,KAC5D,MACD,WAAW+X,EAFZ,aAGY/e,EAAQge,aAAahmB,KAHjC,aAII4mB,EAAO,8DAMb,OAJAO,GACEA,oHAMJC,0BAAA,SAA0Bpf,GAIxB,IAAIue,EAAUpE,GAAqBna,EAAQua,YAS3C,OAR+B,IAA3Bva,EAAQua,WAAWtX,MACrBsb,GAAWve,EAAQua,WAAWtX,KAI9B,mBAAmBsb,EAAO,kBAAkBve,EAAQge,aAAahmB,KAAjE,yEAQJqnB,oBAAA,SAAoBrf,GAKlB,MAAO,cAGTsf,2BAAA,SAA2Btf,GAUzB,MAJE,kCAAiCA,EAAQuf,eAAiB,GAA1D,WACUvf,EAAQsa,YAAYrX,IAAG,aAAajD,EAAQge,aAAahmB,KADnE,mEAOJwnB,8BAAA,SAA8Bxf,GAU5B,MALE,8DACMA,EAAQsa,YAAYrX,IAAG,aAC3BjD,EAAQge,aAAahmB,KAAI,kBACVgI,EAAQsa,YAAYzE,WAAWjhB,OAAS,GAAC,kBAK9D6qB,wBAAA,SAAwBzf,GAItB,IAAM0f,EAAW1f,EAAQge,aAAahmB,KAetC,MANE,4CACU0nB,EADV,kIAJyBA,EAAQ,WAJnBC,EAAA,GACd3f,EAAQ4f,mBACR,SAACC,GAAa,OAAAA,EAAA,QAGb/a,OAAO,CAAC4a,IACR1Y,KAAK,aAEN,oIAWJ8Y,0BAAA,SAA0B9f,GAKxB,MAAO,cAGT+f,4BAAA,SAA4B/f,GAa1B,MAFe,kCANXA,EAAQge,wBAAwB3G,GACvBrX,EAAQge,aAAahmB,KAErBgI,EAAQge,cAGmC,2CAA2Che,EAAQggB,YAAW,0WCtS1H,mBAIE,WACUC,EACAC,GAFV,MAIE,cAAO,YAHC,EAAAD,cAAAA,EACA,EAAAC,eAAAA,EALH,EAAA3b,OAAgD,KAmCzD,OApC4C,QAWnC,YAAA4b,YAAP,uBACE,SAAQ,QAAOthB,KAAKohB,gBAAgB,SAACnK,GACnC,EAAKsK,aAAetK,EACpBA,EAAKH,OAAO,OAIT,YAAA4D,iBAAP,SAAwB3a,GACtB,IAAIyhB,EAAMxhB,KAAKohB,cAAcrhB,EAAK4X,iBAElC,GAAK6J,EAYHzhB,EAAKmX,eAAiBsK,MAZd,CACR,IAAI7f,EAAM3B,KAAKqhB,eAAenC,uBAC5Blf,KAAKuhB,aACLxhB,GAEFC,KAAK0F,OAAOhB,KAAK,CACfrH,QAASsE,EACTpE,KAAMkkB,GAA0BC,uBAChCb,SAAU7gB,KAAKuhB,aAAapoB,KAC5BwoB,kBAAmB5hB,EAAK4X,oBAMhC,EApCA,CAA4C0E,uWCsF5C,eAIE,WAAYgB,EAAyBpQ,GAArC,MACE,YAAMoQ,EAASpQ,IAAK,YADe,EAAAA,KAAAA,EAH7B,EAAA2U,iBAAmB,GACnB,EAAAC,uBAAyB,EAI/B,EAAKD,iBAAmB,EAAK3U,KAAK6U,QAAQ3oB,KAC1C,EAAK0oB,uBAAyB,EAAK5U,KAAK8U,oBAoB5C,OA3B0C,QAUxC,YAAAjJ,aAAA,SACEQ,EACAV,EACAF,GAEA,GACE1Y,KAAKgiB,eACL1I,EAASpB,aAAa/e,OAAS6G,KAAK4hB,kBACpCtI,EAASlV,MAAQpE,KAAK6hB,yBACrB7hB,KAAKH,MACN,CACA,IAAI8d,EAAW/E,EAAS3S,OAAOyS,GAC3BuJ,EAAW,IAAIrK,GAAY,CAAEZ,WAAY2G,IAC7C3d,KAAKkiB,iBAAmB1F,GAAMyF,GAC9BjiB,KAAKH,OAAQ,IAGnB,EA3BA,CAzEA,YAUE,WAAsBwd,EAAyBpQ,GAA/C,MACE,cAAO,YADa,EAAAoQ,QAAAA,EAAyB,EAAApQ,KAAAA,EATrC,EAAAiV,iBAAgC,GAIhC,EAAAC,mBAAqB,GACrB,EAAAC,yBAA2B,EAC3B,EAAAviB,OAAQ,EACR,EAAAmiB,eAAgB,IA+D5B,OAvE+D,QAc7D,YAAAzE,aAAA,WAGE,GAFAvd,KAAKH,OAAQ,EAETG,KAAKiN,KAAKoV,UAAU,KAAOriB,KAAKqd,QAAQlkB,KAC1C,MAAM0E,MAAM,uDAcd,OAVAmC,KAAKqiB,WAAY,QAASriB,KAAKiN,KAAKoV,WAAW3oB,UAC/CsG,KAAKsiB,iBAAkB,QAAStiB,KAAKiN,KAAKqV,iBAAiB5oB,UAG3DsG,KAAKqiB,UAAU1d,MACf3E,KAAKsiB,gBAAgB3d,MAErB3E,KAAKuiB,qBACLviB,KAAKyY,KAAKzY,KAAKqd,SAERrd,KAAKkiB,kBAGd,YAAAzJ,KAAA,SAAKxB,EAA0ByB,QAAA,IAAAA,IAAAA,EAAA,IAExB1Y,KAAKH,OACR,YAAM4Y,KAAI,UAACxB,EAAMyB,IAIrB,YAAAG,YAAA,SACEU,EACAX,EACAF,GAGA,GACEa,EAAQrC,eAAe/d,OAAS6G,KAAKmiB,oBACrC5I,EAAQnV,MAAQpE,KAAKoiB,yBACrB,CACA,IAAIzE,EAAW/E,EAAS3S,OAAOyS,GAC/B1Y,KAAKuiB,qBACLviB,KAAKyY,KAAKc,EAAQrC,eAAqByG,KAI3C,YAAA4E,mBAAA,YAEM,QAAQviB,KAAKqiB,YAGfriB,KAAKmiB,mBAAqB,GAC1BniB,KAAKoiB,yBAA2B,EAChCpiB,KAAKgiB,eAAgB,IAErBhiB,KAAKmiB,mBAAqBniB,KAAKqiB,UAAU1d,MACzC3E,KAAKoiB,yBAA2BpiB,KAAKsiB,gBAAgB3d,QAG3D,EAvEA,CAA+DkZ,KAkH/D,eAOE,WAAsB2E,EAAyBtC,GAA/C,MACE,cAAO,YADa,EAAAsC,QAAAA,EAAyB,EAAAtC,WAAAA,EANrC,EAAArqB,OAAS,CACjBiW,WAAOpN,EACPwhB,gBAAYxhB,EACZ+jB,iBAAa/jB,KAWjB,OAf+D,QAW7D,YAAA6e,aAAA,WAEE,OADAvd,KAAKyY,KAAKzY,KAAKwiB,SACRxiB,KAAKnK,QAEhB,EAfA,CAA+DgoB,IAiB/D,2EAiBA,OAjBiD,QAC/C,YAAAzE,SAAA,SACEY,EACApB,EACAF,GAEA,GAAIsB,EAAS5V,MAAQpE,KAAKkgB,WAAY,CACpC,IAAIwC,GAAiB,QAAO9J,EAAS3S,OAAOyS,IAC5C1Y,KAAKnK,OAAO4sB,iBAAiC/jB,IAAnBgkB,EACtBA,aAA0BzK,KAC5BjY,KAAKnK,OAAOiW,MAAQ4W,EAAexK,aACnClY,KAAKnK,OAAOqqB,WAAawC,EAAete,UAG1C,YAAMgV,SAAQ,UAACY,EAAUpB,EAAUF,IAGzC,EAjBA,CAAiDiK,IAmBjD,2EAiBA,OAjBoD,QAClD,YAAAxJ,YAAA,SACEe,EACAtB,EACAF,GAEA,GAAIwB,EAAY9V,MAAQpE,KAAKkgB,WAAY,CACvC,IAAI0C,GAAoB,QAAOhK,EAAS3S,OAAOyS,IAC/C1Y,KAAKnK,OAAO4sB,iBAAoC/jB,IAAtBkkB,EACtBA,aAA6B3K,KAC/BjY,KAAKnK,OAAOiW,MAAQ8W,EAAkB1K,aACtClY,KAAKnK,OAAOqqB,WAAa0C,EAAkBxe,UAG7C,YAAM+U,YAAW,UAACe,EAAatB,EAAUF,IAG/C,EAjBA,CAAoDiK,IAmBpD,2EAiBA,OAjBuD,QACrD,YAAA1J,eAAA,SACEU,EACAf,EACAF,GAEA,GAAIiB,EAAevV,MAAQpE,KAAKkgB,WAAY,CAC1C,IAAI2C,GAAuB,QAAOjK,EAAS3S,OAAOyS,IAClD1Y,KAAKnK,OAAO4sB,iBAAuC/jB,IAAzBmkB,EACtBA,aAAgC5K,KAClCjY,KAAKnK,OAAOiW,MAAQ+W,EAAqB3K,aACzClY,KAAKnK,OAAOqqB,WAAa2C,EAAqBze,UAGhD,YAAM6U,eAAc,UAACU,EAAgBf,EAAUF,IAGrD,EAjBA,CAAuDiK,IAoBvD,2EAiBA,OAjB0D,QACxD,YAAAzJ,kBAAA,SACE4J,EACAlK,EACAF,GAEA,GAAIoK,EAAkB1e,MAAQpE,KAAKkgB,WAAY,CAC7C,IAAI6C,GAAoC,QAAOnK,EAAS3S,OAAOyS,IAC/D1Y,KAAKnK,OAAO4sB,iBAAoD/jB,IAAtCqkB,EACtBA,aAA6C9K,KAC/CjY,KAAKnK,OAAOiW,MAAQiX,EAAkC7K,aACtDlY,KAAKnK,OAAOqqB,WAAa6C,EAAkC3e,UAG7D,YAAM8U,kBAAiB,UAAC4J,EAAmBlK,EAAUF,IAG3D,EAjBA,CAA0DiK,IAwBpD,SAAUK,GACdC,EACAC,EACAtE,QAAA,IAAAA,IAAAA,EAAA,IAGAA,GAAW,QAASA,GACpB,IAAI/oB,EAAS,GACTO,EAAI,EAQR,SAAS+sB,EAAuBnM,GAC9B,IAAIoM,EAAeJ,GACChM,EANL/Q,QAAO,QAAKgd,EAAW7sB,EAAI,IAOxC8sB,EACAtE,GAEF,OAAO/oB,EAAOoQ,OAAOmd,GAUvB,KAAOxE,EAAS7oB,OAASmtB,GAAa9sB,EAAI6sB,EAAUltB,QAAQ,CAC1D,IAAIkhB,EAAOgM,EAAU7sB,GAGrB,GAAI6gB,aAAgBW,GAClB,OAAOuL,EAAuBlM,EAAKD,YAC9B,GAAIC,aAAgBS,GACzB,OAAOyL,EAAuBlM,EAAKD,YAC9B,GAAIC,aAAgBY,GACzBhiB,EAASstB,EAAuBlM,EAAKD,gBAChC,IAAIC,aAAgBa,GAMzB,OAAOqL,EALDE,EAASpM,EAAKD,WAAW/Q,OAAO,CACpC,IAAImS,GAAW,CACbpB,WAAYC,EAAKD,gBAIhB,GAAIC,aAAgBc,GASzB,OAAOoL,EARDE,EAAS,CACb,IAAIzL,GAAY,CAAEZ,WAAYC,EAAKD,aACnC,IAAIoB,GAAW,CACbpB,WAAY,CAAC,IAAIiB,GAAS,CAAEC,aAAcjB,EAAKe,aAAc/R,OACtDgR,EAAKD,gBAKX,GAAIC,aAAgBkB,GAAyB,CAClD,IAAMkL,EAASpM,EAAKD,WAAW/Q,OAAO,CACpC,IAAImS,GAAW,CACbpB,WAAY,CAAC,IAAIiB,GAAS,CAAEC,aAAcjB,EAAKe,aAAc/R,OACtDgR,EAAKD,gBAIhBnhB,EAASstB,EAAuBE,QAC3B,GAAIpM,aAAgBmB,GAAY,CAC/BiL,EAASpM,EAAKD,WAAW/Q,OAAO,CACpC,IAAImS,GAAW,CACbpB,WAAYC,EAAKD,eAGrBnhB,EAASstB,EAAuBE,OAC3B,IAAIpM,aAAgBoB,GASzB,OARA,QAAQpB,EAAKD,YAAY,SAACsM,IAIY,KAAhC,QAAQA,EAAQtM,cAClBnhB,EAASstB,EAAuBG,EAAQtM,gBAGrCnhB,EACF,KAAIohB,aAAgBgB,IAGzB,MAAMpa,MAAM,wBAFZ+gB,EAASla,KAAKuS,EAAKiB,eAKrB9hB,IAOF,OALAP,EAAO6O,KAAK,CACV6e,YAAa3E,EACb4E,WAAW,QAAKP,EAAW7sB,KAGtBP,EAUH,SAAU4tB,GACdC,EACAjO,EACAkO,EACAC,GAEA,IAAMC,EAAyB,qBAEzBC,EAAwB,CAACD,GACzBE,EAAwB,mBAC1BC,GAAoB,EAElBC,EAAoBxO,EAAY1f,OAClCmuB,EAA2BD,EAAoBL,EAAe,EAE9D/tB,EAAwC,GAExCsuB,EAAkC,GAQtC,IAPAA,EAAczf,KAAK,CACjBN,KAAM,EACNggB,IAAKV,EACLrB,UAAW,GACXC,gBAAiB,OAGX,QAAQ6B,IAAgB,CAC9B,IAAIvF,EAAWuF,EAAcxf,MAG7B,GAAIia,IAAamF,EAAjB,CAWA,IAAIM,EAAUzF,EAASwF,IACnB1U,EAAUkP,EAASxa,IACnBkgB,EAAgB1F,EAASyD,UACzBkC,EAAsB3F,EAAS0D,gBAGnC,KAAI,QAAQ+B,GAAZ,CAIA,IAAIpN,EAAOoN,EAAQ,GAEnB,GAAIpN,IAAS4M,EAAmB,CAC9B,IAAIW,EAAW,CACbpgB,IAAKsL,EACL0U,KAAK,QAAKC,GACVhC,WAAW,QAAUiC,GACrBhC,iBAAiB,QAAUiC,IAE7BJ,EAAczf,KAAK8f,QACd,GAAIvN,aAAgBgB,GAEzB,GAAIvI,EAAUuU,EAAoB,EAAG,CACnC,IAAIQ,EAAU/U,EAAU,EAExB,GAAIiU,EADclO,EAAYgP,GACFxN,EAAKiB,cAAe,CAC1CsM,EAAW,CACbpgB,IAAKqgB,EACLL,KAAK,QAAKC,GACVhC,UAAWiC,EACXhC,gBAAiBiC,GAEnBJ,EAAczf,KAAK8f,QAGhB,IAAI9U,IAAYuU,EAAoB,EAUzC,MAAMpmB,MAAM,wBARZhI,EAAO6O,KAAK,CACVggB,cAAezN,EAAKiB,aACpByM,oBAAqB1N,EAAK7S,IAC1Bie,UAAWiC,EACXhC,gBAAiBiC,IAEnBP,GAAoB,OAIjB,GAAI/M,aAAgBS,GAAa,CACtC,IAAIkN,GAAe,QAASN,GAC5BM,EAAalgB,KAAKuS,EAAKU,iBAEvB,IAAIkN,GAAqB,QAASN,GAClCM,EAAmBngB,KAAKuS,EAAK7S,KAEzBogB,EAAW,CACbpgB,IAAKsL,EACL0U,IAAKnN,EAAKD,WAAW/Q,OAAO6d,GAAuB,QAAKO,IACxDhC,UAAWuC,EACXtC,gBAAiBuC,GAEnBV,EAAczf,KAAK8f,QACd,GAAIvN,aAAgBY,GAAQ,CAEjC,IAAIiN,EAAkB,CACpB1gB,IAAKsL,EACL0U,KAAK,QAAKC,GACVhC,UAAWiC,EACXhC,gBAAiBiC,GAEnBJ,EAAczf,KAAKogB,GAEnBX,EAAczf,KAAKqf,GAEnB,IAAIgB,EAAe,CACjB3gB,IAAKsL,EACL0U,IAAKnN,EAAKD,WAAW/Q,QAAO,QAAKoe,IACjChC,UAAWiC,EACXhC,gBAAiBiC,GAEnBJ,EAAczf,KAAKqgB,QACd,GAAI9N,aAAgBa,GAAqB,CAE9C,IAAIkN,EAAkB,IAAI5M,GAAW,CACnCpB,WAAYC,EAAKD,WACjB5S,IAAK6S,EAAK7S,MAGRogB,EAAW,CACbpgB,IAAKsL,EACL0U,IAHYnN,EAAKD,WAAW/Q,OAAO,CAAC+e,IAAkB,QAAKX,IAI3DhC,UAAWiC,EACXhC,gBAAiBiC,GAEnBJ,EAAczf,KAAK8f,QACd,GAAIvN,aAAgBc,GAAkC,CAE3D,IAAIkN,EAAgB,IAAIhN,GAAS,CAC/BC,aAAcjB,EAAKe,YAEjBgN,EAAkB,IAAI5M,GAAW,CACnCpB,WAAY,CAAMiO,GAAehf,OAAOgR,EAAKD,YAC7C5S,IAAK6S,EAAK7S,MAGRogB,EAAW,CACbpgB,IAAKsL,EACL0U,IAHYnN,EAAKD,WAAW/Q,OAAO,CAAC+e,IAAkB,QAAKX,IAI3DhC,UAAWiC,EACXhC,gBAAiBiC,GAEnBJ,EAAczf,KAAK8f,QACd,GAAIvN,aAAgBkB,GAAyB,CAE9C2M,EAAkB,CACpB1gB,IAAKsL,EACL0U,KAAK,QAAKC,GACVhC,UAAWiC,EACXhC,gBAAiBiC,GAEnBJ,EAAczf,KAAKogB,GAEnBX,EAAczf,KAAKqf,GAEfkB,EAAgB,IAAIhN,GAAS,CAC/BC,aAAcjB,EAAKe,YADrB,IAGIkN,EAAgB,IAAI9M,GAAW,CACjCpB,WAAY,CAAMiO,GAAehf,OAAOgR,EAAKD,YAC7C5S,IAAK6S,EAAK7S,MAGR2gB,EAAe,CACjB3gB,IAAKsL,EACL0U,IAHYnN,EAAKD,WAAW/Q,OAAO,CAACif,IAAgB,QAAKb,IAIzDhC,UAAWiC,EACXhC,gBAAiBiC,GAEnBJ,EAAczf,KAAKqgB,QACd,GAAI9N,aAAgBmB,GAAY,CAEjC0M,EAAkB,CACpB1gB,IAAKsL,EACL0U,KAAK,QAAKC,GACVhC,UAAWiC,EACXhC,gBAAiBiC,GAEnBJ,EAAczf,KAAKogB,GAEnBX,EAAczf,KAAKqf,GAGfmB,EAAgB,IAAI9M,GAAW,CACjCpB,WAAYC,EAAKD,WACjB5S,IAAK6S,EAAK7S,MAGR2gB,EAAe,CACjB3gB,IAAKsL,EACL0U,IAHYnN,EAAKD,WAAW/Q,OAAO,CAACif,IAAgB,QAAKb,IAIzDhC,UAAWiC,EACXhC,gBAAiBiC,GAEnBJ,EAAczf,KAAKqgB,QACd,GAAI9N,aAAgBoB,GAEzB,IAAK,IAAIjiB,EAAI6gB,EAAKD,WAAWjhB,OAAS,EAAGK,GAAK,EAAGA,IAAK,CACpD,IACI+uB,EAAc,CAChB/gB,IAAKsL,EACL0U,IAHiBnN,EAAKD,WAAW5gB,GAGpB4gB,WAAW/Q,QAAO,QAAKoe,IACpChC,UAAWiC,EACXhC,gBAAiBiC,GAEnBJ,EAAczf,KAAKygB,GACnBhB,EAAczf,KAAKqf,QAEhB,GAAI9M,aAAgBW,GACzBuM,EAAczf,KAAK,CACjBN,IAAKsL,EACL0U,IAAKnN,EAAKD,WAAW/Q,QAAO,QAAKoe,IACjChC,UAAWiC,EACXhC,gBAAiBiC,QAEd,MAAItN,aAAgBuB,IAMzB,MAAM3a,MAAM,wBAJZsmB,EAAczf,KACZ0gB,GAAmBnO,EAAMvH,EAAS4U,EAAeC,WAnMjDP,IACA,QAAKG,GAAe/f,KAAO8f,GAG3BC,EAAcxf,MAqMpB,OAAO9O,EAGT,SAASuvB,GACP5C,EACA9S,EACA4U,EACAC,GAEA,IAAIK,GAAe,QAASN,GAC5BM,EAAalgB,KAAK8d,EAAQrpB,MAE1B,IAAIksB,GAAyB,QAASd,GAItC,OAFAc,EAAuB3gB,KAAK,GAErB,CACLN,IAAKsL,EACL0U,IAAK5B,EAAQxL,WACbqL,UAAWuC,EACXtC,gBAAiB+C,OC5jBTC,uWAAZ,SAAYA,GACV,uBACA,+BACA,mDACA,iFACA,6DACA,iCANF,CAAYA,KAAAA,GAAS,KAqRrB,mBAGE,WACUjI,EACAkI,EACAC,GAHV,MAKE,cAAO,YAJC,EAAAnI,QAAAA,EACA,EAAAkI,iBAAAA,EACA,EAAAC,eAAAA,IAmGZ,OAzGyC,QAWvC,YAAAjI,aAAA,WAEE,OADAvd,KAAKyY,KAAKzY,KAAKqd,SACRrd,KAAKylB,SAGN,YAAAC,cAAR,SACE3lB,EACA4lB,EACA/M,EACAF,GAEA,OACE3Y,EAAKqE,MAAQpE,KAAKulB,kBAClBvlB,KAAKwlB,iBAAmBG,IAExB3lB,KAAKylB,QAAU7M,EAAS3S,OAAOyS,IACxB,IAMX,YAAAM,WAAA,SACEU,EACAd,EACAF,GAEK1Y,KAAK0lB,cAAchM,EAAY4L,GAAUM,OAAQhN,EAAUF,IAC9D,YAAMM,WAAU,UAACU,EAAYd,EAAUF,IAI3C,YAAAO,eAAA,SACEU,EACAf,EACAF,GAGG1Y,KAAK0lB,cACJ/L,EACA2L,GAAUO,qBACVjN,EACAF,IAGF,YAAMM,WAAU,UAACW,EAAgBf,EAAUF,IAI/C,YAAAQ,kBAAA,SACEW,EACAjB,EACAF,GAGG1Y,KAAK0lB,cACJ7L,EACAyL,GAAUQ,oCACVlN,EACAF,IAGF,YAAMM,WAAU,UAACa,EAAmBjB,EAAUF,IAIlD,YAAAU,SAAA,SACEY,EACApB,EACAF,GAGG1Y,KAAK0lB,cAAc1L,EAAUsL,GAAUS,WAAYnN,EAAUF,IAE9D,YAAMM,WAAU,UAACgB,EAAUpB,EAAUF,IAIzC,YAAAS,YAAA,SACEe,EACAtB,EACAF,GAGG1Y,KAAK0lB,cACJxL,EACAoL,GAAUU,0BACVpN,EACAF,IAGF,YAAMM,WAAU,UAACkB,EAAatB,EAAUF,IAG9C,EAzGA,CAAyCmF,IA8GzC,eAGE,WACU0H,EACAC,EACAS,GAHV,MAKE,cAAO,YAJC,EAAAV,iBAAAA,EACA,EAAAC,eAAAA,EACA,EAAAS,UAAAA,EALH,EAAApwB,OAAwB,KAgDjC,OAjD4C,QAWlC,YAAA6vB,cAAR,SACE3lB,EACAmmB,GAGEnmB,EAAKqE,MAAQpE,KAAKulB,kBAClBvlB,KAAKwlB,iBAAmBU,QACJxnB,IAAnBsB,KAAKimB,WAA2BlmB,IAASC,KAAKimB,YAE/CjmB,KAAKnK,OAASkK,EAAKiX,aAIhB,YAAA4D,YAAP,SAAmB7a,GACjBC,KAAK0lB,cAAc3lB,EAAMulB,GAAUM,SAG9B,YAAA5K,gBAAP,SAAuBjb,GACrBC,KAAK0lB,cAAc3lB,EAAMulB,GAAUS,aAG9B,YAAAlL,yBAAP,SAAgC9a,GAC9BC,KAAK0lB,cAAc3lB,EAAMulB,GAAUO,uBAG9B,YAAA/K,sCAAP,SACE/a,GAEAC,KAAK0lB,cAAc3lB,EAAMulB,GAAUQ,sCAG9B,YAAA/K,6BAAP,SAAoChb,GAClCC,KAAK0lB,cAAc3lB,EAAMulB,GAAUU,4BAG9B,YAAA/K,iBAAP,SAAwBlb,GACtBC,KAAK0lB,cAAc3lB,EAAMulB,GAAUa,cAEvC,EAjDA,CAA4C9J,IAmD5C,SAAS+J,GAAwBC,GAE/B,IADA,IAAIxwB,EAAS,IAAI2B,MAAM6uB,GACdjwB,EAAI,EAAGA,EAAIiwB,EAAMjwB,IACxBP,EAAOO,GAAK,GAEd,OAAOP,EAQT,SAASywB,GAAerZ,GAEtB,IADA,IAAIsZ,EAAO,CAAC,IACHnwB,EAAI,EAAGA,EAAI6W,EAAKlX,OAAQK,IAAK,CAGpC,IAFA,IAAM0N,EAAUmJ,EAAK7W,GACjBowB,EAAa,GACRrrB,EAAI,EAAGA,EAAIorB,EAAKxwB,OAAQoF,IAAK,CACpC,IAAMsrB,EAAiBF,EAAKprB,GAC5BqrB,EAAW9hB,KAAK+hB,EAAiB,IAAM3iB,EAAQc,cAC/C,IAAK,IAAI8hB,EAAI,EAAGA,EAAI5iB,EAAQ4I,gBAAgB3W,OAAQ2wB,IAAK,CACvD,IAAMC,EAAsB,IAAM7iB,EAAQ4I,gBAAgBga,GAC1DF,EAAW9hB,KAAK+hB,EAAiBE,IAGrCJ,EAAOC,EAET,OAAOD,EAMT,SAASK,GACPC,EACAC,EACA1iB,GAEA,IACE,IAAI2iB,EAAa,EACjBA,EAAaF,EAAkB9wB,OAC/BgxB,IAGA,GAAIA,IAAe3iB,EAInB,IADA,IAAM4iB,EAAyBH,EAAkBE,GACxCE,EAAY,EAAGA,EAAYH,EAAe/wB,OAAQkxB,IAAa,CAEtE,IAA0C,IAAtCD,EADcF,EAAeG,IAE/B,OAAO,EAKb,OAAO,EAGH,SAAUC,GACdC,EACAC,GAiBA,IAfA,IAAIC,GAAc,QAAIF,GAAU,SAAC7D,GAAY,OAAAN,GAAkB,CAACM,GAAnB,MACzCgE,EAAclB,GAAwBiB,EAAYtxB,QAChDwxB,GAAa,QAAIF,GAAa,SAAC3I,GACnC,IAAM8I,EAAO,GAOb,OANA,QAAQ9I,GAAc,SAAC+I,GACrB,IAAMlB,EAAOD,GAAemB,EAAKlE,cACjC,QAAQgD,GAAM,SAAC3T,GACb4U,EAAK5U,IAAW,QAGb4U,KAELE,EAAUL,EAGLM,EAAa,EAAGA,GAAcP,EAAGO,IAAc,CACtD,IAAIC,EAAcF,EAClBA,EAAUtB,GAAwBwB,EAAY7xB,QAG9C,mBAAS8xB,GAGP,IAFA,IAAIC,EAA0BF,EAAYC,GAGpCE,EAAc,EAClBA,EAAcD,EAAwB/xB,OACtCgyB,IACA,CACA,IAAIC,EAAiBF,EAAwBC,GAAaxE,YACtDC,EAAYsE,EAAwBC,GAAavE,UAC/CyE,EAAa3B,GAAe0B,GAGlC,GAFepB,GAAmBW,EAAYU,EAAYJ,KAE1C,QAAQrE,IAAcwE,EAAejyB,SAAWqxB,EAAG,CACjE,IAAIc,EAAgBZ,EAAYO,GAEhC,IAAoD,IAAhDM,GAAaD,EAAeF,GAA2B,CACzDE,EAAcxjB,KAAKsjB,GAEnB,IAAK,IAAI7sB,EAAI,EAAGA,EAAI8sB,EAAWlyB,OAAQoF,IAAK,CAC1C,IAAMyX,EAAUqV,EAAW9sB,GAC3BosB,EAAWM,GAAQjV,IAAW,QAK/B,CACH,IAAIwV,EAA6BpF,GAC/BQ,EACAmE,EAAa,EACbK,GAEFN,EAAQG,GAAUH,EAAQG,GAAQ5hB,OAAOmiB,IAGzC,QAAQA,GAA4B,SAACX,GACnC,IAAMQ,EAAa3B,GAAemB,EAAKlE,cACvC,QAAQ0E,GAAY,SAAC5c,GACnBkc,EAAWM,GAAQxc,IAAO,WAtC3Bwc,EAAS,EAAGA,EAASD,EAAY7xB,OAAQ8xB,MAAzCA,GA8CX,OAAOP,EAGH,SAAUe,GACdnI,EACAoI,EACAlB,EACAhN,GAEA,IAAMrD,EAAU,IAAIwR,GAClBrI,EACAoF,GAAUa,YACV/L,GAGF,OADAkO,EAAYxR,OAAOC,GACZmQ,GAAkCnQ,EAAQlhB,OAAQuxB,GAGrD,SAAUoB,GACdtI,EACAoI,EACAG,EACArB,GAEA,IAAIsB,EAAmB,IAAIH,GAA8BrI,EAAYuI,GACrEH,EAAYxR,OAAO4R,GACnB,IAAIC,EAAYD,EAAiB7yB,OAO7B+yB,EALiB,IAAIC,GACvBP,EACApI,EACAuI,GAE4BlL,eAK9B,OAAO2J,GAAkC,CAHxB,IAAItP,GAAgB,CAAEZ,WAAY2R,IACnC,IAAI/Q,GAAgB,CAAEZ,WAAY4R,KAEgBxB,GAG9D,SAAUe,GACdW,EACAC,GAEAC,EAAkB,IAAK,IAAI5yB,EAAI,EAAGA,EAAI0yB,EAAY/yB,OAAQK,IAAK,CAC7D,IAAM6yB,EAAYH,EAAY1yB,GAC9B,GAAI6yB,EAAUlzB,SAAWgzB,EAAWhzB,OAApC,CAGA,IAAK,IAAIoF,EAAI,EAAGA,EAAI8tB,EAAUlzB,OAAQoF,IAAK,CACzC,IAAM+tB,EAAYH,EAAW5tB,GACvBguB,EAAWF,EAAU9tB,GAK3B,IAAuB,KAFrB+tB,IAAcC,QAC0CzqB,IAAxDyqB,EAASvd,mBAAmBsd,EAAUtkB,eAEtC,SAASokB,EAGb,OAAO,GAGT,OAAO,EAmBH,SAAUI,GACdC,GAEA,OAAO,QAAMA,GAAgB,SAACC,GAC5B,eAAMA,GAAgB,SAACC,GACrB,eAAMA,GAAY,SAACzd,GAAU,eAAQA,EAAR,iYCloB7B,SAAU0d,GACdC,EACAC,EACAxoB,EACAmgB,EACAF,GAEA,IAAIwI,EAAuB7I,EAAA,GAAU2I,GAAW,SAAClI,GAC/C,OAiEJ,SACEpC,EACAkC,GAEA,IAAI/E,EAAmB,IAAIsN,GAC3BzK,EAAarI,OAAOwF,GACpB,IAAIuN,EAAqBvN,EAAiBwN,eAEtCC,EAAmBjJ,EAAA,GACrB+I,EACAG,IAGEC,EAAkBnJ,EAAA,GAAWiJ,GAAkB,SAACG,GAClD,OAAOA,EAAUn0B,OAAS,KAyB5B,OAtBa+qB,EAAA,GAAUA,EAAA,GAAamJ,IAAa,SAACE,GAChD,IAAIC,EAAiBtJ,EAAA,GAAYqJ,GAC7BxoB,EAAM0f,EAAe/B,yBACvBH,EACAgL,GAEEzK,EAAUpE,GAAqB8O,GAC/BC,EAA6C,CAC/ChtB,QAASsE,EACTpE,KAAMkkB,GAA0B6I,sBAChCzJ,SAAU1B,EAAahmB,KACvBumB,QAASA,EACTQ,WAAYkK,EAAUhmB,KAGpBmmB,EAAQC,GAA2BJ,GAKvC,OAJIG,IACFF,EAASI,UAAYF,GAGhBF,KAtGPK,CAA6BnJ,EAAcF,MAEzCsJ,EAA2B7J,EAAA,GAAU2I,GAAW,SAACmB,GACnD,OAAAC,GAAwBD,EAAaA,EAAavJ,MAGhDyJ,EAAiB,GACjBC,EAAsB,GACtBC,EAAwB,IAIxB,QAAML,EAAqB,QAC7BG,GAAiB,QAAIrB,GAAW,SAACmB,GAC/B,OA+SA,SACJzL,EACAkC,GAEA,IAAI4J,EAAc,IAAIC,GACtB/L,EAAarI,OAAOmU,GACpB,IAAIE,EAAMF,EAAYG,aAqCtB,OAnCatK,EAAA,GACXqK,GACA,SAACzlB,EAAQ2lB,GACP,IAAIC,EAAaxK,EAAA,GAAgBuK,EAAOrU,YACpCuU,EAAazK,EAAA,GACfwK,GACA,SAACE,EAA8BzE,GAC7B,IAAM0E,EAAqBhI,GACzB,CAAC+H,GACD,GACA,KACA,GAEF,OAAI1K,EAAA,GAAc2K,GACT,CACLpuB,QAASgkB,EAAeZ,2BAA2B,CACjDtB,aAAcA,EACd1D,YAAa4P,EACb3K,eAAgBqG,IAElBxpB,KAAMkkB,GAA0BiK,oBAChC7K,SAAU1B,EAAahmB,KACvB+mB,WAAYmL,EAAOjnB,IACnB0kB,YAAa/B,EAAa,GAGrB,QAIb,OAAOrhB,EAAOO,OAAO6a,EAAA,GAAcyK,MAErC,IAvVEI,CAA2Bf,EAAavJ,MAE1C0J,GAAsB,QAAItB,GAAW,SAACmB,GACpC,OA0VA,SACJzL,EACAuK,EACArI,GAEA,IAAI4J,EAAc,IAAIC,GACtB/L,EAAarI,OAAOmU,GACpB,IAAIE,EAAMF,EAAYG,aAmCtB,OA/BAD,GAAM,QAAOA,GAAK,SAACE,GAAW,WAAAA,EAAOjU,qBAExB0J,EAAA,GACXqK,GACA,SAACt1B,EAAQw1B,GACP,IAAIO,EAAiBP,EAAOjnB,IACtBynB,EAAqBR,EAAOS,cAAgBpC,EAC9CtG,EAAeiF,GACjBuD,EACAzM,EACA0M,EACAR,GAEEU,EAoHV,SACE3I,EACA3H,EACAoE,EACAwB,GAEA,IAAI2K,EAAsB,GACtBC,GAAuB,QACzB7I,GACA,SAACvtB,EAAQytB,EAASyD,GAEhB,OAA6D,IAAzDtL,EAAYzE,WAAW+P,GAAY3P,oBAIvC,QAAQkM,GAAS,SAAC1E,GAChB,IAAIsN,EAAwB,CAACnF,IAC7B,QAAQ3D,GAAc,SAAC+I,EAAcC,GAEjCrF,IAAeqF,GACfjE,GAAagE,EAAcvN,KAEmC,IAA9DnD,EAAYzE,WAAWoV,GAAiBhV,mBAExC8U,EAAsBxnB,KAAK0nB,MAK7BF,EAAsBn2B,OAAS,IAC9BoyB,GAAa6D,EAAqBpN,KAEnCoN,EAAoBtnB,KAAKka,GACzB/oB,EAAO6O,KAAK,CACV2nB,KAAMH,EACNjf,KAAM2R,QAvBH/oB,IA6BX,IAyBF,OAtBiBirB,EAAA,GAAUmL,GAAsB,SAACK,GAChD,IAAIC,GAAc,QAChBD,EAAkBD,MAClB,SAACtF,GAAe,OAAAA,EAAA,KAUlB,MAAO,CACL1pB,QARkBgkB,EAAejB,+BAA+B,CAChEjB,aAAcU,EACdpE,YAAaA,EACb0E,iBAAkBoM,EAClBvM,WAAYsM,EAAkBrf,OAK9B1P,KAAMkkB,GAA0B+K,eAChC3L,SAAUhB,EAAK1mB,KACf+mB,WAAYzE,EAAYrX,IACxBgf,aAAc,CAACkJ,EAAkBD,UAlLPI,CACxBrJ,EACAiI,EACAlM,EACAkC,GAEEqL,EAmLJ,SACJtJ,EACA3H,EACAoE,EACAwB,GAEA,IAAI3b,EAAS,GAGTinB,GAAkB,QACpBvJ,GACA,SAACvtB,EAAQytB,EAASlf,GAChB,IAAIwoB,GAAkB,QAAItJ,GAAS,SAAC1E,GAClC,MAAO,CAAExa,IAAKA,EAAK6I,KAAM2R,MAE3B,OAAO/oB,EAAOoQ,OAAO2mB,KAEvB,IAoDF,OAjDA,QAAQD,GAAiB,SAACE,GAGxB,IAA0C,IAFlBpR,EAAYzE,WAAW6V,EAAezoB,KAE1CgT,kBAApB,CAGA,IAAI0V,EAAYD,EAAezoB,IAC3B2oB,EAAaF,EAAe5f,KAE5B+f,GAAmC,QACrCL,GACA,SAACM,GAEC,OAGI,IADFxR,EAAYzE,WAAWiW,EAAiB7oB,KAAKgT,mBAE7C6V,EAAiB7oB,IAAM0oB,IDK/BI,ECF6BD,EAAiBhgB,KDG9CkgB,ECHoDJ,EDMlDG,EAAOn3B,OAASo3B,EAAMp3B,SACtB,QAAMm3B,GAAQ,SAACppB,EAASM,GACtB,IAAMgpB,EAAeD,EAAM/oB,GAC3B,OACEN,IAAYspB,GACZA,EAAaxhB,mBAAmB9H,EAAQc,kBAV1C,IACJsoB,EACAC,KCEME,GAAuB,QACzBL,GACA,SAACM,GACC,IAAIf,EAAc,CAACe,EAAkBlpB,IAAM,EAAG0oB,EAAY,GACpD5M,EAAiC,IAApBzE,EAAYrX,IAAY,GAAKqX,EAAYrX,IAQ5D,MAAO,CACL/G,QAPcgkB,EAAevB,qCAAqC,CAClEX,aAAcU,EACdpE,YAAaA,EACb0E,iBAAkBoM,EAClBvM,WAAYsN,EAAkBrgB,OAI9B1P,KAAMkkB,GAA0B8L,sBAChC1M,SAAUhB,EAAK1mB,KACf+mB,WAAYA,EACZkD,aAAcmJ,MAIpB7mB,EAASA,EAAOO,OAAOonB,OAGlB3nB,EAxP6B8nB,CAC9BpK,EACAiI,EACAlM,EACAkC,GAGF,OAAOxrB,EAAOoQ,OAAO8lB,EAAqBW,KAE5C,IAjYEe,CACE7C,EACAlB,EACArI,MAIJ2J,EAobE,SACJ0C,EACA5B,EACAzK,GAEA,IAAI3b,EAAS,GA8Bb,OA7BA,QAAQgoB,GAAe,SAAC9C,GACtB,IAAItO,EAAmB,IAAIqR,GAC3B/C,EAAY9T,OAAOwF,GACnB,IAAIuN,EAAqBvN,EAAiBwN,gBAC1C,QAAQD,GAAoB,SAAC+D,GAC3B,IAAInF,EDpeJ,SAAsBxR,GAE1B,GAAIA,aAAgBY,GAClB,OAAOyN,GAAUM,OACZ,GAAI3O,aAAgBmB,GACzB,OAAOkN,GAAUS,WACZ,GAAI9O,aAAgBa,GACzB,OAAOwN,GAAUO,qBACZ,GAAI5O,aAAgBc,GACzB,OAAOuN,GAAUQ,oCACZ,GAAI7O,aAAgBkB,GACzB,OAAOmN,GAAUU,0BACZ,GAAI/O,aAAgBoB,GACzB,OAAOiN,GAAUa,YAEjB,MAAMtoB,MAAM,wBCqdKgwB,CAAYD,GACrB/B,EAAqB+B,EAAS9B,cAAgBA,EAQhDgC,EANQtF,GADSoF,EAASxpB,IAG5BwmB,EACAnC,EACAoD,GAEgC,GAClC,IAAI,SAAQ,QAAQiC,IAAyB,CAC3C,IAAMpjB,EAAS2W,EAAed,0BAA0B,CACtDpB,aAAcyL,EACdlP,WAAYkS,IAEdloB,EAAOhB,KAAK,CACVrH,QAASqN,EACTnN,KAAMkkB,GAA0BsM,uBAChClN,SAAU+J,EAAYzxB,cAMvBuM,EAvdmBsoB,CACtBvE,EACAC,EACArI,IAIJ,IAAI4M,EAqmBN,SACExE,EACAvoB,EACAmgB,GAEA,IAAI3b,EAAS,GAETwoB,GAAa,QAAIhtB,GAAY,SAACitB,GAAc,OAAAA,EAAA,QAehD,OAbA,QAAQ1E,GAAW,SAACzI,GAClB,IAAMoN,EAAepN,EAAS7nB,KAC9B,IAAI,QAAS+0B,EAAYE,GAAe,CACtC,IAAI1jB,EAAS2W,EAAezB,4BAA4BoB,GAExDtb,EAAOhB,KAAK,CACVrH,QAASqN,EACTnN,KAAMkkB,GAA0B4M,gCAChCxN,SAAUuN,QAKT1oB,EA3nB4B4oB,CACjC7E,EACAvoB,EACAmgB,GAGIkN,GAAoB,QAAI9E,GAAW,SAAC+E,GACxC,OAwYE,SACJrP,EACAkC,GAEA,IAAI4J,EAAc,IAAIC,GACtB/L,EAAarI,OAAOmU,GACpB,IAAIE,EAAMF,EAAYG,aAqBtB,OAnBatK,EAAA,GACXqK,GACA,SAACzlB,EAAQ2lB,GAYP,OAXIA,EAAOrU,WAAWjhB,OAAS,KAC7B2P,EAAOhB,KAAK,CACVrH,QAASgkB,EAAeV,8BAA8B,CACpDxB,aAAcA,EACd1D,YAAa4P,IAEf9tB,KAAMkkB,GAA0BgN,cAChC5N,SAAU1B,EAAahmB,KACvB+mB,WAAYmL,EAAOjnB,MAGhBsB,IAET,IAhaAgpB,CAAoBF,EAASnN,MAGzBsN,GAAsB,QAAIlF,GAAW,SAAC+E,GAC1C,OAyHE,SACJ3O,EACA+O,EACAC,EACAxN,GAEA,IAAI3b,EAAS,GACPopB,GAAc,QAClBF,GACA,SAAC/4B,EAAQ24B,GACP,OAAIA,EAAQr1B,OAAS0mB,EAAK1mB,KACjBtD,EAAS,EAEXA,IAET,GAEF,GAAIi5B,EAAc,EAAG,CACnB,IAAMpkB,EAAS2W,EAAeH,4BAA4B,CACxD/B,aAAcU,EACdsB,YAAa0N,IAEfnpB,EAAOhB,KAAK,CACVrH,QAASqN,EACTnN,KAAMkkB,GAA0BsN,oBAChClO,SAAUhB,EAAK1mB,OAInB,OAAOuM,EAtJLspB,CACER,EACA/E,EACAtI,EACAE,MAIJ,OACEP,EAAA,GACE6I,EAAgB1jB,OACd+kB,EACAL,EACAG,EACAC,EACAkD,EACAM,EACAI,IAgDF,SAAU3E,GACd/S,GAEA,OAAUqE,GAAqBrE,GAAK,MAClCA,EAAK7S,IAAG,MACJomB,GAA2BvT,GAGnC,SAASuT,GAA2BvT,GAClC,OAAIA,aAAgBgB,GACXhB,EAAKiB,aAAa/e,KAChB8d,aAAgBS,GAClBT,EAAKU,gBAEL,GAIX,qFACS,EAAAmS,eAAgC,KAmCzC,OApCmD,QAG1C,YAAApP,iBAAP,SAAwBqB,GACtB/b,KAAK8pB,eAAeplB,KAAKqX,IAGpB,YAAAnB,YAAP,SAAmBY,GACjBxb,KAAK8pB,eAAeplB,KAAK8W,IAGpB,YAAAT,6BAAP,SAAoCiB,GAClChc,KAAK8pB,eAAeplB,KAAKsX,IAGpB,YAAAnB,yBAAP,SAAgCoB,GAC9Bjc,KAAK8pB,eAAeplB,KAAKuX,IAGpB,YAAAnB,sCAAP,SACEoB,GAEAlc,KAAK8pB,eAAeplB,KAAKwX,IAGpB,YAAAlB,gBAAP,SAAuBmB,GACrBnc,KAAK8pB,eAAeplB,KAAKyX,IAGpB,YAAAlB,iBAAP,SAAwBmB,GACtBpc,KAAK8pB,eAAeplB,KAAK0X,IAGpB,YAAAlB,cAAP,SAAqB5B,GACnBtZ,KAAK8pB,eAAeplB,KAAK4U,IAE7B,EApCA,CAAmD+C,IA+F7C,SAAUwO,GACdrI,EACAxB,EACAK,EACApU,QAAA,IAAAA,IAAAA,EAAA,IAEA,IAAIvH,EAAS,GACTupB,EAAmBC,GAAqBlO,EAAShK,YACrD,GAAI8J,EAAA,GAAcmO,GAChB,MAAO,GAEP,IAAIpO,EAAW2B,EAAQrpB,KACE2nB,EAAA,GAAoBmO,EAAkBzM,IAE7D9c,EAAOhB,KAAK,CACVrH,QAASgkB,EAAeT,wBAAwB,CAC9CzB,aAAcqD,EACdzB,kBAAmB9T,IAErB1P,KAAMkkB,GAA0B0N,eAChCtO,SAAUA,IAMd,IAAIuO,EAAiBtO,EAAA,GACnBmO,EACAhiB,EAAKhH,OAAO,CAACuc,KAEX6M,EAAsBvO,EAAA,GAAUsO,GAAgB,SAACE,GACnD,IAAIjiB,EAAUyT,EAAA,GAAe7T,GAE7B,OADAI,EAAQ3I,KAAK4qB,GACNzE,GACLrI,EACA8M,EACAjO,EACAhU,MAIJ,OAAO3H,EAAOO,OAAO6a,EAAA,GAAcuO,IAIjC,SAAUH,GAAqBlY,GACnC,IAAInhB,EAAS,GACb,GAAIirB,EAAA,GAAc9J,GAChB,OAAOnhB,EAET,IAAIu0B,EAAYtJ,EAAA,GAAY9J,GAG5B,GAAIoT,aAAqB1S,GACvB7hB,EAAO6O,KAAK0lB,EAAUlT,qBACjB,GACLkT,aAAqBxS,IACrBwS,aAAqBvS,IACrBuS,aAAqBtS,IACrBsS,aAAqBrS,IACrBqS,aAAqBjS,IACrBiS,aAAqBhS,GAErBviB,EAASA,EAAOoQ,OACdipB,GAAoC9E,EAAUpT,kBAE3C,GAAIoT,aAAqB/R,GAE9BxiB,EAASirB,EAAA,GACPA,EAAA,GAAUsJ,EAAUpT,YAAY,SAACuY,GAC/B,OAAAL,GAAuCK,EAAYvY,qBAGlD,KAAIoT,aAAqBnS,IAG9B,MAAMpa,MAAM,wBAGd,IAAI2xB,EAAkBpU,GAAegP,GACjCqF,EAAUzY,EAAWjhB,OAAS,EAClC,GAAIy5B,GAAmBC,EAAS,CAC9B,IAAIC,EAAO5O,EAAA,GAAW9J,GACtB,OAAOnhB,EAAOoQ,OAAOipB,GAAqBQ,IAE1C,OAAO75B,EAIX,qFACS,EAAAu1B,aAAe,KAKxB,OAN0B,QAGjB,YAAAnQ,iBAAP,SAAwBlb,GACtBC,KAAKorB,aAAa1mB,KAAK3E,IAE3B,EANA,CAA0Bsc,IAmG1B,qFACS,EAAAyN,eAAgC,KAmBzC,OApBuC,QAG9B,YAAA/O,6BAAP,SAAoCiB,GAClChc,KAAK8pB,eAAeplB,KAAKsX,IAGpB,YAAAnB,yBAAP,SAAgCoB,GAC9Bjc,KAAK8pB,eAAeplB,KAAKuX,IAGpB,YAAAnB,sCAAP,SACEoB,GAEAlc,KAAK8pB,eAAeplB,KAAKwX,IAGpB,YAAAlB,gBAAP,SAAuBmB,GACrBnc,KAAK8pB,eAAeplB,KAAKyX,IAE7B,EApBA,CAAuCE,IC/bjC,SAAU,GAAelb,GAI7BA,GAAU,QAASA,EAAS,CAC1BkgB,eAAgBpC,KAGlB,IAAM0Q,EAAgB,GAItB,OAHA,QAAQxuB,EAAQyuB,OAAO,SAAC/P,GACtB8P,EAAc9P,EAAK1mB,MAAQ0mB,KJhBzB,SACJ4J,EACApI,GAEA,IAAIwO,EAAc,IAAIC,GAAuBrG,EAAWpI,GAExD,OADAwO,EAAYvO,cACLuO,EAAYnqB,OIYZ,CAAkBiqB,EAAexuB,EAAQkgB,gBAG5C,SAAU,GAAgBlgB,GAW9B,OAAO,IAJPA,GAAU,QAASA,EAAS,CAC1BkgB,eAAgBhC,MAIRuQ,MACRzuB,EAAQ2qB,aACR3qB,EAAQD,WACRC,EAAQkgB,eACRlgB,EAAQggB,aAIN,SAAU4O,GAAwB5uB,IACtC,QAAQA,EAAQyuB,OAAO,SAAC5O,GACtB,IAAMgP,EAAmB,IAAIzT,GAC7ByE,EAASlK,OAAOkZ,IAChB,QAAQA,EAAiBzU,YAAY,SAAC0U,IACpC,QAAQA,GAAS,SAACC,EAAuCC,GACvDD,EAAW9rB,IAAM+rB,EAAS,kXCxD5BC,GAA6B,2BAC7BC,GAA0B,uBAC1BC,GAAuB,qBACvBC,GAAiC,6BAEjCC,GAA8B,CAClCJ,GACAC,GACAC,GACAC,IAMI,SAAUE,GAAuBvgB,GAErC,OAAO,QAASsgB,GAA6BtgB,EAAM/W,MALrDmV,OAAOC,OAAOiiB,IAQd,mBAME,WAAsBnzB,EAAwByO,0BAA9C,EACE,YAAMzO,IAAQ,YAD8B,EAAAyO,MAAAA,EAF9C,EAAA4kB,eAAiB,GAMfpiB,OAAOqiB,eAAe,EAAM,EAAWC,WAGnC/yB,MAAMgzB,mBACRhzB,MAAMgzB,kBAAkB,EAAM,EAAKpW,eAGzC,OAhBU,QAgBV,EAjBA,CACU5c,OAkBV,eACE,WAAYR,EAAiByO,EAAsBglB,GAAnD,MACE,YAAMzzB,EAASyO,IAAM,YAD4B,EAAAglB,cAAAA,EAEjD,EAAK33B,KAAOi3B,KAEhB,OAL8C,QAK9C,EALA,CAA8CW,IAO9C,eACE,WAAY1zB,EAAiByO,EAAsBglB,GAAnD,MACE,YAAMzzB,EAASyO,IAAM,YAD4B,EAAAglB,cAAAA,EAEjD,EAAK33B,KAAOk3B,KAEhB,OAL0C,QAK1C,EALA,CAA0CU,IAO1C,eACE,WAAY1zB,EAAiByO,GAA7B,MACE,YAAMzO,EAASyO,IAAM,YACrB,EAAK3S,KAAOo3B,KAEhB,OALgD,QAKhD,EALA,CAAgDQ,IAOhD,eACE,WAAY1zB,EAAiByO,EAAsBglB,GAAnD,MACE,YAAMzzB,EAASyO,IAAM,YAD4B,EAAAglB,cAAAA,EAEjD,EAAK33B,KAAOm3B,KAEhB,OALwC,QAKxC,EALA,CAAwCS,ICrC3BC,GAAsB,GAQtBC,GAA6B,0BAEpC,SAAUC,GAAwB7zB,GACtC2C,KAAK7G,KAAO83B,GACZjxB,KAAK3C,QAAUA,EAGjB6zB,GAAwBN,UAAY/yB,MAAM+yB,UAK1C,gCAmWA,OA9VE,YAAAO,gBAAA,SAAgB3iB,GACdxO,KAAKoxB,iBAAmB,GACxBpxB,KAAKqxB,cAAgB,GAErBrxB,KAAKsxB,iBAAkB,QAAI9iB,EAAQ,mBAC/BA,EAAO8iB,gBACPC,GAAsBD,gBAKtBtxB,KAAKsxB,kBACPtxB,KAAKwxB,4BAA8BA,KAIhC,YAAAC,iBAAP,SAAwB3tB,GACtB,IAAI4tB,EAAc/gB,GAChB7M,EACA,GACAxK,IACAA,IACAA,IACAA,IACAA,IACAA,KAGF,OADAo4B,EAAYC,sBAAuB,EAC5BD,GAGF,YAAAE,iCAAP,SAAwC9tB,GACtC,OAAO,GAGT,YAAA+tB,wBAAA,SAEEC,EACAC,EACAC,EACAC,GA+BA,IApCF,WAQMC,EAAgBlyB,KAAKmyB,sBACrBC,EAAkBpyB,KAAKqyB,mBACvB3B,EAAiB,GACjB4B,GAAoB,EAEpBC,EAAyBvyB,KAAKwyB,GAAG,GACjCrE,EAAYnuB,KAAKwyB,GAAG,GAEpBC,EAAuB,WACzB,IAAI3B,EAAgB,EAAK0B,GAAG,GAGxB7wB,EAAM,EAAKwM,qBAAqB4P,0BAA0B,CAC5DC,SAAUiU,EACVhU,OAAQsU,EACRG,SAAU5B,EACVjQ,SAAU,EAAK8R,wBAEbziB,EAAQ,IAAI0iB,GACdjxB,EACA4wB,EACA,EAAKC,GAAG,IAGVtiB,EAAMwgB,gBAAiB,QAAUA,GACjC,EAAKmC,WAAW3iB,KAGVoiB,GAAmB,CAEzB,GAAItyB,KAAK4W,aAAauX,EAAW8D,GAE/B,YADAQ,IAEK,GAAIT,EAAche,KAAKhU,MAK5B,OAHAyyB,SAEAX,EAAYgB,MAAM9yB,KAAM+xB,GAEf/xB,KAAK4W,aAAauX,EAAW+D,GACtCI,GAAoB,GAEpBnE,EAAYnuB,KAAK+yB,aACjB/yB,KAAKgzB,kBAAkB7E,EAAWuC,IAOtC1wB,KAAKizB,iBAAiBb,IAGxB,YAAAc,kCAAA,SAEEC,EACAC,EACAC,GAIA,OAAiB,IAAbA,SAK4B30B,IAA5By0B,QAAwDz0B,IAAf00B,KAKzCpzB,KAAK4W,aAAa5W,KAAKwyB,GAAG,GAAIW,MAM9BnzB,KAAKszB,mBAQPtzB,KAAKuzB,yBACHJ,EACAnzB,KAAKwzB,4BAA4BL,EAAyBC,QAUhE,YAAAI,4BAAA,SAEE1vB,EACA2vB,GAEA,IAAIC,EAAc1zB,KAAK2zB,sBAAsB7vB,EAAS2vB,GAEtD,OADczzB,KAAK4zB,0BAA0BF,IAI/C,YAAAG,kBAAA,SAEE5B,EACA3U,GAEA,GAAItd,KAAK8zB,mCAAmC7B,EAAiB3U,GAE3D,OADkBtd,KAAKyxB,iBAAiBQ,GAI1C,GAAIjyB,KAAK+zB,kCAAkC9B,GAAkB,CAC3D,IAAI+B,EAAUh0B,KAAK+yB,aAEnB,OADA/yB,KAAKi0B,eACED,EAGT,MAAM,IAAI9C,GAAwB,kBAGpC,YAAAqC,yBAAA,SAEEW,EACA5W,GAEA,OACEtd,KAAK8zB,mCAAmCI,EAAe5W,IACvDtd,KAAK+zB,kCAAkCG,IAI3C,YAAAJ,mCAAA,SAEE7B,EACA3U,GAHF,WAKE,IAAKtd,KAAK4xB,iCAAiCK,GACzC,OAAO,EAIT,IAAI,QAAQ3U,GACV,OAAO,EAGT,IAAI6W,EAAgBn0B,KAAKwyB,GAAG,GAM5B,YAFS9zB,KAFP,QAAK4e,GAAS,SAAC8W,GACb,OAAO,EAAKxd,aAAaud,EAAeC,OAM9C,YAAAL,kCAAA,SAEE9B,GAMA,OAJgCjyB,KAAK4W,aACnC5W,KAAKwyB,GAAG,GACRP,IAKJ,YAAAoC,yBAAA,SAEEzvB,GAEA,IAAI0vB,EAAYt0B,KAAKu0B,mBACjBC,EAAuBx0B,KAAKy0B,0BAA0BH,GAC1D,OAAO,QAASE,EAAsB5vB,IAGxC,YAAAutB,oBAAA,WAKE,IAJA,IAAIuC,EAA4B10B,KAAK20B,mBAEjCC,EAAY50B,KAAKwyB,GAAG,GACpBpL,EAAI,IACK,CACX,IAAI1C,EAAqBkQ,EAAU/vB,UACnC,IAAI,QAAS6vB,EAA2BhQ,GACtC,OAAOA,EAETkQ,EAAY50B,KAAKwyB,GAAGpL,GACpBA,MAIJ,YAAAmN,iBAAA,WAEE,GAA+B,IAA3Bv0B,KAAK60B,WAAW9+B,OAClB,OAAOi7B,GAET,IAAI8D,EAAoB90B,KAAK+0B,+BACzBC,EAAch1B,KAAKi1B,qCACnBC,EAAoBl1B,KAAKm1B,mCAE7B,MAAO,CACLtU,SAAU7gB,KAAKo1B,wBAAwBN,GACvCO,iBAAkBL,EAClBM,OAAQt1B,KAAKo1B,wBAAwBF,KAIzC,YAAAK,wBAAA,sBACMC,EAAoBx1B,KAAK60B,WACzBY,EAA0Bz1B,KAAK01B,sBAEnC,OAAO,QAAIF,GAAmB,SAAC3U,EAAUzc,GACvC,OAAY,IAARA,EACK4sB,GAEF,CACLnQ,SAAU,EAAKuU,wBAAwBvU,GACvCwU,iBAAkBI,EAAwBrxB,GAC1CkxB,OAAQ,EAAKF,wBAAwBI,EAAkBpxB,EAAM,SAKnE,YAAAuwB,iBAAA,sBACMgB,GAAc,QAAI31B,KAAKu1B,2BAA2B,SAAC3iB,GACrD,OAAO,EAAK6hB,0BAA0B7hB,MAExC,OAAY,QAAQ+iB,IAGtB,YAAAlB,0BAAA,SAEEH,GAEA,GAAIA,IAActD,GAChB,MAAO,CAACra,IAGV,IAAI+G,EACF4W,EAAUzT,SAAWyT,EAAUe,iBAAmB,GAAKf,EAAUgB,OAEnE,OAAOt1B,KAAKqxB,cAAc3T,IAK5B,YAAAsV,kBAAA,SAEElnB,EACA8pB,GAKA,OAHK51B,KAAK4W,aAAa9K,EAAO6K,KAC5Bif,EAAalxB,KAAKoH,GAEb8pB,GAGT,YAAAC,SAAA,SAA8B/xB,GAG5B,IAFA,IAAI4sB,EAAiB,GACjBsD,EAAUh0B,KAAKwyB,GAAG,IACyB,IAAxCxyB,KAAK4W,aAAaod,EAASlwB,IAChCkwB,EAAUh0B,KAAK+yB,aACf/yB,KAAKgzB,kBAAkBgB,EAAStD,GAGlC,OAAO,QAAUA,IAGnB,YAAAc,4BAAA,SAEEsE,EACAC,EACAC,EACAC,EACAC,EACAC,EACA9C,KAMF,YAAAM,sBAAA,SAEE7vB,EACA2vB,GAWA,MAPuB,CACrBpR,UAH4BriB,KAAKo2B,4BAIjC9T,iBAHkC,QAAStiB,KAAK01B,uBAIhD5T,QAAShe,EACTie,kBAAmB0R,IAKvB,YAAA2C,0BAAA,sBACE,OAAO,QAAIp2B,KAAK60B,YAAY,SAACwB,GAC3B,SAAKjB,wBAAwBiB,OAGnC,EAnWA,GAqWM,SAAU7E,GAEdsE,EACAC,EACAC,EACAC,EACAC,EACAC,EACA9C,GAEA,IAAIhoB,EAAMrL,KAAKs2B,4BAA4BL,EAAcC,GACrDK,EAAoBv2B,KAAKoxB,iBAAiB/lB,GAC9C,QAA0B3M,IAAtB63B,EAAiC,CACnC,IAAInI,EAAepuB,KAAK2yB,sBAMxB4D,EAJwD,IAAIJ,EAD1Cn2B,KAAKw2B,qBAAqBpI,GAG1C8H,GAEyB3Y,eAC3Bvd,KAAKoxB,iBAAiB/lB,GAAOkrB,EAG/B,IAAIpD,EAA0BoD,EAAkBzqB,MAC5CsnB,EAAamD,EAAkBrW,WAC/BuC,EAAc8T,EAAkB9T,YAKP,IAA3BziB,KAAK60B,WAAW9+B,QAChB0sB,QAC4B/jB,IAA5By0B,IAEAA,EAA0Bxc,GAC1Byc,EAAa,GAIbpzB,KAAKkzB,kCACHC,EACAC,EACAC,IAMFrzB,KAAK6xB,wBACHiE,EACAC,EACAC,EACA7C,GChcC,IAaMsD,GAAmB,KACnBC,GAAe,KACfC,GAAuB,KAI9B,SAAUL,GACdM,EACAX,EACA/V,GAGA,OAAOA,EAAa+V,EAAeW,EAIrC,ICNA,4BA6NA,OAxNE,YAAAC,eAAA,SAAeroB,GACbxO,KAAK82B,sBAAuB,QAAItoB,EAAQ,wBACpCA,EAAOsoB,qBACPvF,GAAsBuF,qBAE1B92B,KAAK8rB,cAAe,QAAItd,EAAQ,gBAC5BA,EAAOsd,aACPyF,GAAsBzF,aAG1B9rB,KAAK+2B,qBAAsB,UAAyB,IAAIC,IAAQ,IAK5D,WACFh3B,KAAKi3B,mBAAqBj3B,KAAKk3B,iBAC/Bl3B,KAAKm3B,eAAiBn3B,KAAKo3B,yBAE3Bp3B,KAAKi3B,mBAAqBj3B,KAAKq3B,iBAC/Br3B,KAAKm3B,eAAiBn3B,KAAKs3B,oBAI/B,YAAAC,6BAAA,SAAkD3H,GAAlD,YACE,QAAQA,GAAO,SAAC5O,GACd,EAAK/R,WAAc+R,EAAS7nB,KAAI,mBAAmB,WAC3C,MboGR,SACJ0mB,GASAvD,GAAiBR,QACjB+D,EAAK/I,OAAOwF,IACZ,IAAMf,EAAae,GAAiBf,WAGpC,OADAe,GAAiBR,QACLP,Ea5GFic,CAAexW,GANjBvF,EAAW,cACXC,EAAU,aACVF,EAAM,SACNI,EAAmB,sBACnBC,EAAgC,mCAChCF,EAAuB,2BAGzB,QAAQF,GAAa,SAACmS,GACpB,IAAM6J,EAA2B,IAAjB7J,EAASxpB,IAAY,GAAKwpB,EAASxpB,IACnD,EAAK6K,WAAW,GAAGqM,GAAqBsS,GAAY6J,GAAW,WAC7D,IAAMC,ENXZ,SACJxX,EACAoI,EACAwD,EACAzU,EACAyf,EACAa,GAEA,IAAItO,EAAiBhB,GACnBnI,EACAoI,EACAwD,GAOF,OAAO6L,EACLtO,EACAhS,EANmB+R,GAA0BC,GAC3Cxd,EACAN,EAMFurB,GMXuBc,CACbhK,EAASxpB,IACT4c,EACA4M,EAAS9B,cAAgB,EAAKA,aAC9B8B,EAASvW,cACT,EAAKyf,qBACL,EAAKe,iCAGDxsB,EAAMirB,GACV,EAAKwB,oBAAoB9W,EAAS7nB,MDnE1B,ICqERy0B,EAASxpB,KAEX,EAAK+yB,eAAe9rB,EAAKqsB,UAI7B,QAAQhc,GAAY,SAACkS,GACnB,EAAKmK,qBACH/W,EACA4M,EAASxpB,ID5EG,IC8EZkhB,GAAUS,WACV6H,EAAS9B,aACTxQ,GAAqBsS,QAIzB,QAAQpS,GAAQ,SAACoS,GACf,EAAKmK,qBACH/W,EACA4M,EAASxpB,IDxFK,IC0FdkhB,GAAUM,OACVgI,EAAS9B,aACTxQ,GAAqBsS,QAIzB,QAAQhS,GAAqB,SAACgS,GAC5B,EAAKmK,qBACH/W,EACA4M,EAASxpB,IACTqyB,GACAnR,GAAUO,qBACV+H,EAAS9B,aACTxQ,GAAqBsS,QAIzB,QAAQ/R,GAAkC,SAAC+R,GACzC,EAAKmK,qBACH/W,EACA4M,EAASxpB,IACTuyB,GACArR,GAAUQ,oCACV8H,EAAS9B,aACTxQ,GAAqBsS,QAIzB,QAAQjS,GAAyB,SAACiS,GAChC,EAAKmK,qBACH/W,EACA4M,EAASxpB,IACTsyB,GACApR,GAAUU,0BACV4H,EAAS9B,aACTxQ,GAAqBsS,cAO/B,YAAAmK,qBAAA,SAEElY,EACAqW,EACA8B,EACAvP,EACAwP,EACAC,GAPF,WASEl4B,KAAKiP,WACH,GAAGipB,GAAmC,IAAnBhC,EAAuB,GAAKA,IAC/C,WACE,IAAMwB,EN7DR,SACJxX,EACAoI,EACAlB,EACA0P,EACArO,EACA0P,GAEA,IAAI9O,EAAiBb,GACnBtI,EACAoI,EACAG,EACArB,GAGIxQ,EAAewS,GAA0BC,GAC3Cxd,EACAN,EAEJ,OAAO4sB,EAAiB9O,EAAe,GAAIzS,EAAckgB,GM0CpCsB,CACblC,EACArW,EACAoY,GAAoB,EAAKnM,aACzB,EAAKgL,qBACLrO,EACA,EAAK4P,6BAEDhtB,EAAMirB,GACV,EAAKwB,oBAAoBjY,EAAK1mB,MAC9B6+B,EACA9B,GAEF,EAAKiB,eAAe9rB,EAAKqsB,OAK/B,YAAAW,4BAAA,SAEEhe,EACAzD,EACAkgB,GAEA,ON2DE,SACJzc,EACAzD,EACAkgB,GAEA,IAAIwB,GAA0B,QAAMje,GAAK,SAACuE,GACxC,OAA2B,IAApBA,EAAS7oB,UAGdwiC,EAAale,EAAItkB,OAIrB,GAAIuiC,IAA4BxB,EAAsB,CACpD,IAAI0B,GAAoB,QAAQne,GAEhC,GAC+B,IAA7Bme,EAAkBziC,SAClB,QAAcyiC,EAAkB,GAAI9rB,iBACpC,CACA,IACI,EADoB8rB,EAAkB,GACY5zB,aAEtD,OAAO,WACL,OAAO5E,KAAKwyB,GAAG,GAAG5tB,eAAiB,GAGrC,IAAI,GAAc,QAChB4zB,GACA,SAAC3iC,EAAQmP,EAAaZ,GAKpB,OAJAvO,EAAOmP,EAAYJ,eAAgB,GACnC,QAAQI,EAAY0H,iBAAiB,SAAC+rB,GACpC5iC,EAAO4iC,IAAqB,KAEvB5iC,IAET,IAGF,OAAO,WACL,IAAI++B,EAAY50B,KAAKwyB,GAAG,GACxB,OAA+C,IAAxC,EAAYoC,EAAUhwB,eAIjC,OAAO,WACL4f,EAAU,IAAK,IAAIrpB,EAAI,EAAGA,EAAIo9B,EAAYp9B,IAAK,CAG7C,IAFA,IAAIyjB,EAAWvE,EAAIlf,GACfu9B,EAAiB9Z,EAAS7oB,OACrBK,EAAI,EAAGA,EAAIsiC,EAAgBtiC,IAAK,CACvC,IAAIw+B,EAAY50B,KAAKwyB,GAAGp8B,EAAI,GAC5B,IAA6C,IAAzCwgB,EAAage,EAAWhW,EAASxoB,IAGnC,SAASouB,EAIb,OAAO,EAIT,OAAO,GMzHFmU,CACLte,EACAzD,EACAkgB,IAIJ,YAAAe,gCAAA,SAEExL,EACAhV,EACAT,EACAkgB,GAEA,ON3EE,SACJzK,EACAhV,EACAT,EACAkgB,GAEA,IAAI8B,EAAYvM,EAAKt2B,OACjBuiC,GAA0B,QAAMjM,GAAM,SAAC/I,GACzC,OAAO,QAAMA,GAAS,SAAC1E,GACrB,OAA2B,IAApBA,EAAS7oB,aAKpB,GAAIshB,EAIF,OAAO,SAAUwhB,GAMf,IAFA,IAAIC,GAA0B,QAAID,GAAQ,SAACvV,GAAY,OAAAA,EAAA,QAE9CoD,EAAI,EAAGA,EAAIkS,EAAWlS,IAAK,CAClC,IAAIpD,EAAU+I,EAAK3F,GACfqS,EAAiBzV,EAAQvtB,OAEzBijC,EAAgBF,EAAWpS,GAC/B,QAAsBhoB,IAAlBs6B,IAA4D,IAA7BA,EAAchlB,KAAKhU,MAItDwkB,EAAU,IAAK,IAAIrpB,EAAI,EAAGA,EAAI49B,EAAgB59B,IAAK,CAGjD,IAFA,IAAIyjB,EAAW0E,EAAQnoB,GACnBu9B,EAAiB9Z,EAAS7oB,OACrBK,EAAI,EAAGA,EAAIsiC,EAAgBtiC,IAAK,CACvC,IAAIw+B,EAAY50B,KAAKwyB,GAAGp8B,EAAI,GAC5B,IAA6C,IAAzCwgB,EAAage,EAAWhW,EAASxoB,IAGnC,SAASouB,EAKb,OAAOkC,KAQR,GAAI4R,IAA4BxB,EAAsB,CAG3D,IAAImC,GAAkB,QAAI5M,GAAM,SAAC/I,GAC/B,OAAO,QAAQA,MAGb,GAAc,QAChB2V,GACA,SAACpjC,EAAQytB,EAASlf,GAWhB,OAVA,QAAQkf,GAAS,SAACte,IACX,QAAInP,EAAQmP,EAAYJ,gBAC3B/O,EAAOmP,EAAYJ,cAAgBR,IAErC,QAAQY,EAAY0H,iBAAiB,SAAC+rB,IAC/B,QAAI5iC,EAAQ4iC,KACf5iC,EAAO4iC,GAAqBr0B,SAI3BvO,IAET,IAMF,OAAO,WACL,IAAI++B,EAAY50B,KAAKwyB,GAAG,GACxB,OAAO,EAAYoC,EAAUhwB,eAQ/B,OAAO,WACL,IAAK,IAAI8hB,EAAI,EAAGA,EAAIkS,EAAWlS,IAAK,CAClC,IAAIpD,EAAU+I,EAAK3F,GACfqS,EAAiBzV,EAAQvtB,OAC7ByuB,EAAU,IAAK,IAAIrpB,EAAI,EAAGA,EAAI49B,EAAgB59B,IAAK,CAGjD,IAFA,IAAIyjB,EAAW0E,EAAQnoB,GACnBu9B,EAAiB9Z,EAAS7oB,OACrBK,EAAI,EAAGA,EAAIsiC,EAAgBtiC,IAAK,CACvC,IAAIw+B,EAAY50B,KAAKwyB,GAAGp8B,EAAI,GAC5B,IAA6C,IAAzCwgB,EAAage,EAAWhW,EAASxoB,IAGnC,SAASouB,EAKb,OAAOkC,KMlCNwS,CACL7M,EACAhV,EACAT,EACAkgB,IAKJ,YAAAR,4BAAA,SAEEL,EACA/V,GAGA,OAAOoW,GADsBt2B,KAAK+0B,+BAGhCkB,EACA/V,IAKJ,YAAA+W,mBAAA,SAAwC5rB,KAIxC,YAAA6rB,iBAAA,SAAsC7rB,GACpC,OAAOrL,KAAK+2B,oBAAoBoC,IAAI9tB,IAItC,YAAAgsB,iBAAA,SAAsChsB,GACpC,OAAOrL,KAAK+2B,oBAAoB1rB,IAIlC,YAAA8rB,eAAA,SAAoC9rB,EAAapO,KAEjD,YAAAm6B,uBAAA,SAEE/rB,EACApO,GAEA+C,KAAK+2B,oBAAoBqC,IAAI/tB,EAAKpO,IAIpC,YAAAq6B,kBAAA,SAAuCjsB,EAAapO,GAClD+C,KAAK+2B,oBAAoB1rB,GAAOpO,GAEpC,EA7NA,GCrBM,SAAUo8B,GACdC,EACAC,IAG4C,IAAxCziC,MAAMwiC,EAAiB1rB,cAIzB0rB,EAAiB1rB,YAAc2rB,EAAgB3rB,YAC/C0rB,EAAiB9jB,UAAY+jB,EAAgB/jB,WAMtC8jB,EAAiB9jB,UAAY+jB,EAAgB/jB,aAAc,IAClE8jB,EAAiB9jB,UAAY+jB,EAAgB/jB,WAW3C,SAAUgkB,GACdF,EACAC,IAG4C,IAAxCziC,MAAMwiC,EAAiB1rB,cAIzB0rB,EAAiB1rB,YAAc2rB,EAAgB3rB,YAC/C0rB,EAAiB1lB,YAAc2lB,EAAgB3lB,YAC/C0lB,EAAiB3lB,UAAY4lB,EAAgB5lB,UAC7C2lB,EAAiB9jB,UAAY+jB,EAAgB/jB,UAC7C8jB,EAAiBhkB,UAAYikB,EAAgBjkB,UAC7CgkB,EAAiBjkB,QAAUkkB,EAAgBlkB,SAMpCikB,EAAiB9jB,UAAY+jB,EAAgB/jB,aAAc,IAClE8jB,EAAiB9jB,UAAY+jB,EAAgB/jB,UAC7C8jB,EAAiBhkB,UAAYikB,EAAgBjkB,UAC7CgkB,EAAiBjkB,QAAUkkB,EAAgBlkB,SCrD/C,ICyGYokB,GDzGNC,GAAO,OAOP,SAAUC,GAAaC,GAG3B,IAAIC,EAAyBD,EAAMzgC,KAEnC,OAAI0gC,GAGK,YAOL,SAAUC,GAAexjB,EAAKyjB,GAClC,IAAIC,EAAqB1rB,OAAO2rB,yBAAyB3jB,EAAKojB,IAE9D,UAAI,QAAYM,KAAuBA,EAAmBE,gBACxD5rB,OAAO6rB,eAAe7jB,EAAKojB,GAAM,CAC/BU,YAAY,EACZF,cAAc,EACdG,UAAU,EACVp9B,MAAO88B,KAGF,GC1BL,SAAUO,GAAsBC,EAAUhQ,GAG9C,IAFA,IAAIiQ,GAAgB,QAAKD,GACrBE,EAAsBD,EAAczkC,OAC/BK,EAAI,EAAGA,EAAIqkC,EAAqBrkC,IAIvC,IAHA,IACIskC,EAAiBH,EADDC,EAAcpkC,IAE9BukC,EAAuBD,EAAe3kC,OACjCoF,EAAI,EAAGA,EAAIw/B,EAAsBx/B,IAAK,CAC7C,IAAIy/B,EAAiBF,EAAev/B,QAELuD,IAA3Bk8B,EAAUh2B,cACZ5E,KAAK46B,EAAUzhC,MAAMyhC,EAAUC,SAAUtQ,IAQ3C,SAAUuQ,GACd3Z,EACA4Z,GAIA,IAAIC,EAA0B,aAK9BlB,GAAekB,EAAoB7Z,EAAc,iBAEjD,IAAI8Z,EAAgB,CAClBt6B,MAAO,SAAUu6B,EAAS3Q,GASxB,IAPI,QAAQ2Q,KAGVA,EAAUA,EAAQ,MAIhB,QAAYA,GAIhB,OAAOl7B,KAAKk7B,EAAQ/hC,MAAM+hC,EAAQL,SAAUtQ,IAG9C4Q,gBAAiB,WACf,IAAIC,EA2DJ,SACJC,EACAN,GAEA,IAAIO,EAMA,SACJD,EACAN,GAEA,IAAIr1B,GAAoC,QAAIq1B,GAAW,SAAC3M,GACtD,KAAK,QAAWiN,EAAgBjN,IAC9B,MAAO,CACLzsB,IAAK,4BAA4BysB,EAAY,QAAQuL,GAC9C0B,EAAgB5gB,aACtB,gBACDld,KAAMk8B,GAA0B8B,eAChCC,WAAYpN,MAKlB,OAAO,QAAiC1oB,GAtBpB+1B,CAA0BJ,EAAiBN,GAC3DW,EAyBA,SACJL,EACAN,GAEA,IAAIr1B,EAAS,GAEb,IAAK,IAAIi2B,KAAQN,IAEb,QAAWA,EAAgBM,MAC1B,QAASC,GAAkBD,KAC3B,QAASZ,EAAWY,IAErBj2B,EAAOhB,KAAK,CACV/C,IACE,8BAA8Bg6B,EAAI,QAAQhC,GACnC0B,EAAgB5gB,aADvB,gFAIFld,KAAMk8B,GAA0BoC,iBAChCL,WAAYG,IAIlB,OAAOj2B,EAhDeo2B,CAAyBT,EAAiBN,GAEhE,OAAOO,EAAcr1B,OAAOy1B,GAlEO,CAAgB17B,KAAM+6B,GACrD,KAAK,QAAQK,GAA2B,CACtC,IAAIW,GAAgB,QAClBX,GACA,SAACY,GAAiB,OAAAA,EAAA,OAEpB,MAAMn+B,MACJ,mCAAmC87B,GACjC35B,KAAKya,aACN,SAAcshB,EAAc5zB,KAAK,QAAQ3R,QAAQ,MAAO,YAWjE,OALAwkC,EAAmBpK,UAAYqK,GACFxgB,YAAcugB,EAE3CA,EAAmBiB,YAAclB,EAE1BC,GA4BT,SAAYvB,GACV,2CACA,uCAFF,CAAYA,KAAAA,GAAyB,KAwCrC,IAAMmC,GAAmB,CAAC,cAAe,QAAS,mBC/HlD,gCAyPA,OArOE,YAAAM,gBAAA,SAAqC1tB,GAUnC,GATAxO,KAAKm8B,UAAY,GAGjBn8B,KAAKo8B,UAAa5tB,EAAe4tB,UAEjCp8B,KAAKq8B,sBAAuB,QAAI7tB,EAAQ,wBACpCA,EAAO6tB,qBACP9K,GAAsB8K,qBAErBr8B,KAAKo8B,UAOR,GAAI,QAAQt1B,KAAK9G,KAAKq8B,sBAChBr8B,KAAKsxB,iBACPtxB,KAAKs8B,yBAA2B9C,GAChCx5B,KAAKu8B,wBAA0B/C,GAC/Bx5B,KAAKw8B,YAAc,KACnBx8B,KAAKy8B,uBAAyBz8B,KAAK08B,qCAEnC18B,KAAKs8B,yBAA2B,KAChCt8B,KAAKu8B,wBAA0B,KAC/Bv8B,KAAKw8B,YAAcx8B,KAAK28B,gBACxB38B,KAAKy8B,uBAAyBz8B,KAAK48B,wCAEhC,GAAI,cAAc91B,KAAK9G,KAAKq8B,sBAC7Br8B,KAAKsxB,iBACPtxB,KAAKs8B,yBAAgCjD,GACrCr5B,KAAKu8B,wBAA+BlD,GACpCr5B,KAAKw8B,YAAc,KACnBx8B,KAAKy8B,uBAAyBz8B,KAAK68B,2CAEnC78B,KAAKs8B,yBAA2B,KAChCt8B,KAAKu8B,wBAA0B,KAC/Bv8B,KAAKw8B,YAAcx8B,KAAK88B,sBACxB98B,KAAKy8B,uBAAyBz8B,KAAK+8B,6CAEhC,KAAI,QAAQj2B,KAAK9G,KAAKq8B,sBAM3B,MAAMx+B,MACJ,kDAAkD2Q,EAAO6tB,qBAAoB,KAN/Er8B,KAAKs8B,yBAA2B,KAChCt8B,KAAKu8B,wBAA0B,KAC/Bv8B,KAAKw8B,YAAc,KACnBx8B,KAAKy8B,uBAAyB,UAlChCz8B,KAAKg9B,yBAA2B,KAChCh9B,KAAKi9B,sBAAwB,KAC7Bj9B,KAAKk9B,gBAAkB,KACvBl9B,KAAKm9B,mBAAqB,KAC1Bn9B,KAAKw8B,YAAc,MAuCvB,YAAAK,yCAAA,SAEE3B,GAEAA,EAAQkC,SAAW,CACjBxvB,YAAatU,IACbkc,UAAWlc,MAIf,YAAAyjC,wCAAA,SAEE7B,GAEAA,EAAQkC,SAAW,CAKjBxvB,YAAa5N,KAAKwyB,GAAG,GAAG5kB,YACxB4H,UAAWlc,MAIf,YAAAojC,mCAAA,SAAwDxB,GACtDA,EAAQkC,SAAW,CACjBxvB,YAAatU,IACbqa,UAAWra,IACXsa,YAAata,IACbkc,UAAWlc,IACX+b,QAAS/b,IACTgc,UAAWhc,MASf,YAAAsjC,kCAAA,SAAuD1B,GACrD,IAAMtG,EAAY50B,KAAKwyB,GAAG,GAC1B0I,EAAQkC,SAAW,CACjBxvB,YAAagnB,EAAUhnB,YACvB+F,UAAWihB,EAAUjhB,UACrBC,YAAaghB,EAAUhhB,YACvB4B,UAAWlc,IACX+b,QAAS/b,IACTgc,UAAWhc,MAIf,YAAA0jC,yBAAA,SAEEK,EACAC,GAEA,IAAMpC,EAAmB,CACvB/hC,KAAMkkC,EACNxC,SAAU,IAGZ76B,KAAKy8B,uBAAuBvB,GAC5Bl7B,KAAKm8B,UAAUz3B,KAAKw2B,IAGtB,YAAA+B,sBAAA,WACEj9B,KAAKm8B,UAAUx3B,OAGjB,YAAAg4B,gBAAA,SAAqCY,GACnC,IAAMC,EAAYx9B,KAAKwyB,GAAG,GACpBiL,EAAMF,EAAYH,SAIpBK,EAAI7vB,aAAe4vB,EAAU5vB,eAAgB,GAC/C6vB,EAAIjoB,UAAYgoB,EAAUhoB,UAC1BioB,EAAIpoB,QAAUmoB,EAAUnoB,QACxBooB,EAAInoB,UAAYkoB,EAAUloB,YAI1BmoB,EAAI7vB,YAActU,IAClBmkC,EAAI9pB,UAAYra,IAChBmkC,EAAI7pB,YAActa,MAItB,YAAAwjC,sBAAA,SAA2CS,GACzC,IAAMC,EAAYx9B,KAAKwyB,GAAG,GACpBiL,EAAMF,EAAYH,SAIpBK,EAAI7vB,aAAe4vB,EAAU5vB,eAAgB,EAC/C6vB,EAAIjoB,UAAYgoB,EAAUhoB,UAI1BioB,EAAI7vB,YAActU,KAItB,YAAA4jC,gBAAA,SAEE7xB,EACAqyB,GAEA,IH/IF39B,EACA+L,EACA6xB,EG6IQC,EAAU59B,KAAKm8B,UAAUn8B,KAAKm8B,UAAUpmC,OAAS,GH9IzD+V,EG+I4B4xB,EH9I5BC,EG8I2CtyB,OH5IN3M,KAJrCqB,EGgJmB69B,GH5IV/C,SAAS8C,GAChB59B,EAAK86B,SAAS8C,GAAiB,CAAC7xB,GAEhC/L,EAAK86B,SAAS8C,GAAej5B,KAAKoH,GG2IlC9L,KAAKs8B,yBAAyBsB,EAAQR,SAAeM,IAGvD,YAAAP,mBAAA,SAEEU,EACAhd,GAEA,IAAMid,EAAa99B,KAAKm8B,UAAUn8B,KAAKm8B,UAAUpmC,OAAS,IH/IxD,SACJgK,EACA8gB,EACAkd,QAEgCr/B,IAA5BqB,EAAK86B,SAASha,GAChB9gB,EAAK86B,SAASha,GAAY,CAACkd,GAE3Bh+B,EAAK86B,SAASha,GAAUnc,KAAKq5B,GGwI7BC,CAAqBF,EAAYjd,EAAUgd,GAE3C79B,KAAKu8B,wBAAwBuB,EAAWV,SAAUS,EAAcT,WAGlE,YAAAa,6BAAA,WAKE,IAAI,QAAYj+B,KAAKk+B,2BAA4B,CAC/C,IAAMC,EAA+BrD,GACnC96B,KAAK6uB,WACL,QAAK7uB,KAAKo+B,uBAGZ,OADAp+B,KAAKk+B,0BAA4BC,EAC1BA,EAGT,OAAYn+B,KAAKk+B,2BAGnB,YAAAG,yCAAA,WAKE,IAAI,QAAYr+B,KAAKs+B,uCAAwC,CAC3D,IAAMC,EDjKN,SACJpd,EACA4Z,EACAyD,GAIA,IAAIxD,EAA0B,aAK9BlB,GAAekB,EAAoB7Z,EAAc,6BAEjD,IAAIsd,EAAoBnwB,OAAOowB,OAAOF,EAAgB5N,WAQtD,OAPA,QAAQmK,GAAW,SAACla,GAClB4d,EAAkB5d,GAAYyZ,OAGhCU,EAAmBpK,UAAY6N,GACFhkB,YAAcugB,EAEpCA,EC2IoB2D,CACrB3+B,KAAK6uB,WACL,QAAK7uB,KAAKo+B,sBACVp+B,KAAKi+B,gCAGP,OADAj+B,KAAKs+B,sCAAwCC,EACtCA,EAGT,OAAYv+B,KAAKs+B,uCAGnB,YAAAvJ,6BAAA,WACE,IAAI1S,EAAYriB,KAAK60B,WACrB,OAAOxS,EAAUA,EAAUtsB,OAAS,IAGtC,YAAAo/B,iCAAA,WACE,IAAI9S,EAAYriB,KAAK60B,WACrB,OAAOxS,EAAUA,EAAUtsB,OAAS,IAGtC,YAAAk/B,mCAAA,WACE,IAAI3S,EAAkBtiB,KAAK01B,sBAC3B,OAAOpT,EAAgBA,EAAgBvsB,OAAS,IAEpD,EAzPA,GCdA,4BA0EA,OArEE,YAAA6oC,iBAAA,WACE5+B,KAAK6+B,UAAY,GACjB7+B,KAAK8+B,gBAAkB,EACvB9+B,KAAK0P,SAAW,GAGlB,sBAAI,oBAAK,KAeT,WACE,OAAO1P,KAAK6+B,eAhBd,SAAUE,GAGR,IAA8B,IAA1B/+B,KAAKg/B,iBACP,MAAMnhC,MACJ,oFAKJmC,KAAK8b,QACL9b,KAAK6+B,UAAYE,EACjB/+B,KAAK8+B,gBAAkBC,EAAShpC,wCAQlC,YAAAg9B,WAAA,WACE,OAAI/yB,KAAK0P,SAAW1P,KAAK6+B,UAAU9oC,OAAS,GAC1CiK,KAAKi0B,eACEj0B,KAAKwyB,GAAG,IAERyM,IAMX,YAAAzM,GAAA,SAAwB0M,GACtB,IAAMC,EAAYn/B,KAAK0P,QAAUwvB,EACjC,OAAIC,EAAY,GAAKn/B,KAAK8+B,iBAAmBK,EACpCF,GAEAj/B,KAAK6+B,UAAUM,IAI1B,YAAAlL,aAAA,WACEj0B,KAAK0P,WAGP,YAAA2iB,iBAAA,WACE,OAAOryB,KAAK0P,SAGd,YAAAujB,iBAAA,SAAsCmM,GACpCp/B,KAAK0P,QAAU0vB,GAGjB,YAAAC,gBAAA,WACEr/B,KAAK0P,SAAW,GAGlB,YAAA4vB,sBAAA,WACEt/B,KAAK0P,QAAU1P,KAAK6+B,UAAU9oC,OAAS,GAGzC,YAAAwpC,iBAAA,WACE,OAAOv/B,KAAKqyB,oBAEhB,EA1EA,GCoBA,4BA6qBA,OA5qBE,YAAAmN,OAAA,SAA+BC,GAC7B,OAAOA,EAAKzrB,KAAKhU,OAGnB,YAAA0/B,QAAA,SAEEt7B,EACAN,EACA3C,GAEA,OAAOnB,KAAK2/B,gBAAgB77B,EAASM,EAAKjD,IAG5C,YAAA4a,QAAA,SAEE3X,EACAw7B,EACAz+B,GAEA,OAAOnB,KAAK6/B,gBAAgBD,EAAYx7B,EAAKjD,IAG/C,YAAAqa,OAAA,SAEEpX,EACA07B,GAEA,OAAO9/B,KAAK+/B,eAAeD,EAAmB17B,IAGhD,YAAAgY,GAAA,SAEEhY,EACA47B,GAEA,OAAOhgC,KAAKigC,WAAWD,EAAY57B,IAGrC,YAAA+X,KAAA,SAEE/X,EACA07B,GAEA,OAAO9/B,KAAKkgC,aAAa97B,EAAK07B,IAGhC,YAAA7jB,WAAA,SAEE7X,EACA07B,GAEA,OAAO9/B,KAAKmgC,mBAAmB/7B,EAAK07B,IAGtC,YAAAM,QAAA,SAEEt8B,EACA3C,GAEA,OAAOnB,KAAK2/B,gBAAgB77B,EAAS,EAAG3C,IAG1C,YAAAk/B,SAAA,SAEEv8B,EACA3C,GAEA,OAAOnB,KAAK2/B,gBAAgB77B,EAAS,EAAG3C,IAG1C,YAAAm/B,SAAA,SAEEx8B,EACA3C,GAEA,OAAOnB,KAAK2/B,gBAAgB77B,EAAS,EAAG3C,IAG1C,YAAAo/B,SAAA,SAEEz8B,EACA3C,GAEA,OAAOnB,KAAK2/B,gBAAgB77B,EAAS,EAAG3C,IAG1C,YAAAq/B,SAAA,SAEE18B,EACA3C,GAEA,OAAOnB,KAAK2/B,gBAAgB77B,EAAS,EAAG3C,IAG1C,YAAAs/B,SAAA,SAEE38B,EACA3C,GAEA,OAAOnB,KAAK2/B,gBAAgB77B,EAAS,EAAG3C,IAG1C,YAAAu/B,SAAA,SAEE58B,EACA3C,GAEA,OAAOnB,KAAK2/B,gBAAgB77B,EAAS,EAAG3C,IAG1C,YAAAw/B,SAAA,SAEE78B,EACA3C,GAEA,OAAOnB,KAAK2/B,gBAAgB77B,EAAS,EAAG3C,IAG1C,YAAAy/B,SAAA,SAEE98B,EACA3C,GAEA,OAAOnB,KAAK2/B,gBAAgB77B,EAAS,EAAG3C,IAG1C,YAAA0/B,SAAA,SAEE/8B,EACA3C,GAEA,OAAOnB,KAAK2/B,gBAAgB77B,EAAS,EAAG3C,IAG1C,YAAA2/B,QAAA,SAEElB,EACAz+B,GAEA,OAAOnB,KAAK6/B,gBAAgBD,EAAY,EAAGz+B,IAG7C,YAAA4/B,SAAA,SAEEnB,EACAz+B,GAEA,OAAOnB,KAAK6/B,gBAAgBD,EAAY,EAAGz+B,IAG7C,YAAA6/B,SAAA,SAEEpB,EACAz+B,GAEA,OAAOnB,KAAK6/B,gBAAgBD,EAAY,EAAGz+B,IAG7C,YAAA8/B,SAAA,SAEErB,EACAz+B,GAEA,OAAOnB,KAAK6/B,gBAAgBD,EAAY,EAAGz+B,IAG7C,YAAA+/B,SAAA,SAEEtB,EACAz+B,GAEA,OAAOnB,KAAK6/B,gBAAgBD,EAAY,EAAGz+B,IAG7C,YAAAggC,SAAA,SAEEvB,EACAz+B,GAEA,OAAOnB,KAAK6/B,gBAAgBD,EAAY,EAAGz+B,IAG7C,YAAAigC,SAAA,SAEExB,EACAz+B,GAEA,OAAOnB,KAAK6/B,gBAAgBD,EAAY,EAAGz+B,IAG7C,YAAAkgC,SAAA,SAEEzB,EACAz+B,GAEA,OAAOnB,KAAK6/B,gBAAgBD,EAAY,EAAGz+B,IAG7C,YAAAmgC,SAAA,SAEE1B,EACAz+B,GAEA,OAAOnB,KAAK6/B,gBAAgBD,EAAY,EAAGz+B,IAG7C,YAAAogC,SAAA,SAEE3B,EACAz+B,GAEA,OAAOnB,KAAK6/B,gBAAgBD,EAAY,EAAGz+B,IAG7C,YAAAykB,OAAA,SAEEka,GAEA,OAAO9/B,KAAK+/B,eAAeD,EAAmB,IAGhD,YAAA0B,QAAA,SAEE1B,GAEA,OAAO9/B,KAAK+/B,eAAeD,EAAmB,IAGhD,YAAA2B,QAAA,SAEE3B,GAEA,OAAO9/B,KAAK+/B,eAAeD,EAAmB,IAGhD,YAAA4B,QAAA,SAEE5B,GAEA,OAAO9/B,KAAK+/B,eAAeD,EAAmB,IAGhD,YAAA6B,QAAA,SAEE7B,GAEA,OAAO9/B,KAAK+/B,eAAeD,EAAmB,IAGhD,YAAA8B,QAAA,SAEE9B,GAEA,OAAO9/B,KAAK+/B,eAAeD,EAAmB,IAGhD,YAAA+B,QAAA,SAEE/B,GAEA,OAAO9/B,KAAK+/B,eAAeD,EAAmB,IAGhD,YAAAgC,QAAA,SAEEhC,GAEA,OAAO9/B,KAAK+/B,eAAeD,EAAmB,IAGhD,YAAAiC,QAAA,SAEEjC,GAEA,OAAO9/B,KAAK+/B,eAAeD,EAAmB,IAGhD,YAAAkC,QAAA,SAEElC,GAEA,OAAO9/B,KAAK+/B,eAAeD,EAAmB,IAGhD,YAAAmC,GAAA,SAEEjC,GAEA,OAAOhgC,KAAKigC,WAAWD,EAAY,IAGrC,YAAAkC,IAAA,SAEElC,GAEA,OAAOhgC,KAAKigC,WAAWD,EAAY,IAGrC,YAAAmC,IAAA,SAEEnC,GAEA,OAAOhgC,KAAKigC,WAAWD,EAAY,IAGrC,YAAAoC,IAAA,SAEEpC,GAEA,OAAOhgC,KAAKigC,WAAWD,EAAY,IAGrC,YAAAqC,IAAA,SAEErC,GAEA,OAAOhgC,KAAKigC,WAAWD,EAAY,IAGrC,YAAAsC,IAAA,SAEEtC,GAEA,OAAOhgC,KAAKigC,WAAWD,EAAY,IAGrC,YAAAuC,IAAA,SAEEvC,GAEA,OAAOhgC,KAAKigC,WAAWD,EAAY,IAGrC,YAAAwC,IAAA,SAEExC,GAEA,OAAOhgC,KAAKigC,WAAWD,EAAY,IAGrC,YAAAyC,IAAA,SAEEzC,GAEA,OAAOhgC,KAAKigC,WAAWD,EAAY,IAGrC,YAAA0C,IAAA,SAEE1C,GAEA,OAAOhgC,KAAKigC,WAAWD,EAAY,IAGrC,YAAA2C,KAAA,SAEE7C,GAEA9/B,KAAKkgC,aAAa,EAAGJ,IAGvB,YAAA8C,MAAA,SAEE9C,GAEA9/B,KAAKkgC,aAAa,EAAGJ,IAGvB,YAAA+C,MAAA,SAEE/C,GAEA9/B,KAAKkgC,aAAa,EAAGJ,IAGvB,YAAAgD,MAAA,SAEEhD,GAEA9/B,KAAKkgC,aAAa,EAAGJ,IAGvB,YAAAiD,MAAA,SAEEjD,GAEA9/B,KAAKkgC,aAAa,EAAGJ,IAGvB,YAAAkD,MAAA,SAEElD,GAEA9/B,KAAKkgC,aAAa,EAAGJ,IAGvB,YAAAmD,MAAA,SAEEnD,GAEA9/B,KAAKkgC,aAAa,EAAGJ,IAGvB,YAAAoD,MAAA,SAEEpD,GAEA9/B,KAAKkgC,aAAa,EAAGJ,IAGvB,YAAAqD,MAAA,SAEErD,GAEA9/B,KAAKkgC,aAAa,EAAGJ,IAGvB,YAAAsD,MAAA,SAEEtD,GAEA9/B,KAAKkgC,aAAa,EAAGJ,IAGvB,YAAAuD,SAAA,SAAmCliC,GACjCnB,KAAKsjC,qBAAqB,EAAGniC,IAG/B,YAAAoiC,UAAA,SAAoCpiC,GAClCnB,KAAKsjC,qBAAqB,EAAGniC,IAG/B,YAAAqiC,UAAA,SAAoCriC,GAClCnB,KAAKsjC,qBAAqB,EAAGniC,IAG/B,YAAAsiC,UAAA,SAAoCtiC,GAClCnB,KAAKsjC,qBAAqB,EAAGniC,IAG/B,YAAAuiC,UAAA,SAAoCviC,GAClCnB,KAAKsjC,qBAAqB,EAAGniC,IAG/B,YAAAwiC,UAAA,SAAoCxiC,GAClCnB,KAAKsjC,qBAAqB,EAAGniC,IAG/B,YAAAyiC,UAAA,SAAoCziC,GAClCnB,KAAKsjC,qBAAqB,EAAGniC,IAG/B,YAAA0iC,UAAA,SAAoC1iC,GAClCnB,KAAKsjC,qBAAqB,EAAGniC,IAG/B,YAAA2iC,UAAA,SAAoC3iC,GAClCnB,KAAKsjC,qBAAqB,EAAGniC,IAG/B,YAAA4iC,UAAA,SAAoC5iC,GAClCnB,KAAKsjC,qBAAqB,EAAGniC,IAG/B,YAAA6iC,aAAA,SAEElE,GAEA9/B,KAAKmgC,mBAAmB,EAAGL,IAG7B,YAAAmE,cAAA,SAEEnE,GAEA,OAAO9/B,KAAKmgC,mBAAmB,EAAGL,IAGpC,YAAAoE,cAAA,SAEEpE,GAEA9/B,KAAKmgC,mBAAmB,EAAGL,IAG7B,YAAAqE,cAAA,SAEErE,GAEA9/B,KAAKmgC,mBAAmB,EAAGL,IAG7B,YAAAsE,cAAA,SAEEtE,GAEA9/B,KAAKmgC,mBAAmB,EAAGL,IAG7B,YAAAuE,cAAA,SAEEvE,GAEA9/B,KAAKmgC,mBAAmB,EAAGL,IAG7B,YAAAwE,cAAA,SAEExE,GAEA9/B,KAAKmgC,mBAAmB,EAAGL,IAG7B,YAAAyE,cAAA,SAEEzE,GAEA9/B,KAAKmgC,mBAAmB,EAAGL,IAG7B,YAAA0E,cAAA,SAEE1E,GAEA9/B,KAAKmgC,mBAAmB,EAAGL,IAG7B,YAAA2E,cAAA,SAEE3E,GAEA9/B,KAAKmgC,mBAAmB,EAAGL,IAG7B,YAAA4E,iBAAA,SAEEvjC,GAEAnB,KAAK2kC,2BAA2B,EAAGxjC,IAGrC,YAAAyjC,kBAAA,SAEEzjC,GAEAnB,KAAK2kC,2BAA2B,EAAGxjC,IAGrC,YAAA0jC,kBAAA,SAEE1jC,GAEAnB,KAAK2kC,2BAA2B,EAAGxjC,IAGrC,YAAA2jC,kBAAA,SAEE3jC,GAEAnB,KAAK2kC,2BAA2B,EAAGxjC,IAGrC,YAAA4jC,kBAAA,SAEE5jC,GAEAnB,KAAK2kC,2BAA2B,EAAGxjC,IAGrC,YAAA6jC,kBAAA,SAEE7jC,GAEAnB,KAAK2kC,2BAA2B,EAAGxjC,IAGrC,YAAA8jC,kBAAA,SAEE9jC,GAEAnB,KAAK2kC,2BAA2B,EAAGxjC,IAGrC,YAAA+jC,kBAAA,SAEE/jC,GAEAnB,KAAK2kC,2BAA2B,EAAGxjC,IAGrC,YAAAgkC,kBAAA,SAEEhkC,GAEAnB,KAAK2kC,2BAA2B,EAAGxjC,IAGrC,YAAAikC,kBAAA,SAEEjkC,GAEAnB,KAAK2kC,2BAA2B,EAAGxjC,IAGrC,YAAAkkC,KAAA,SAEElsC,EACAmsC,EACA92B,GAEA,QAFA,IAAAA,IAAAA,EAAA,KAEI,QAASxO,KAAKulC,kBAAmBpsC,GAAO,CAC1C,IAOM+W,EAAQ,CACZ7S,QARagiB,GAAqC6B,4BAClD,CACE/B,aAAchmB,EACdgoB,YAAanhB,KAAK6uB,YAMpBtxB,KAAMkkB,GAA0BsN,oBAChClO,SAAU1nB,GAEZ6G,KAAKwlC,iBAAiB9gC,KAAKwL,GAG7BlQ,KAAKulC,kBAAkB7gC,KAAKvL,GAE5B,IAAIssC,EAAqBzlC,KAAK0lC,WAAWvsC,EAAMmsC,EAAgB92B,GAE/D,OADAxO,KAAK7G,GAAQssC,EACNA,GAGT,YAAAE,cAAA,SAEExsC,EACAsmC,EACAjxB,QAAA,IAAAA,IAAAA,EAAA,IAEA,IAAIo3B,EAAa,GACjBA,EAAaA,EAAW3/B,OXjatB,SACJ4a,EACA0kB,EACA1W,GAEA,IACInkB,EADAhF,EAAS,GAcb,OAXKob,EAAA,GAAeykB,EAAmB1kB,KACrCnW,EACE,kCAAkCmW,EAAQ,6CAA6CgO,EAAvF,uDAEFnpB,EAAOhB,KAAK,CACVrH,QAASqN,EACTnN,KAAMkkB,GAA0BokB,sBAChChlB,SAAUA,KAIPnb,EW+YHogC,CAAyB3sC,EAAM6G,KAAKulC,kBAAmBvlC,KAAK6uB,YAE9D7uB,KAAKwlC,iBAAiB9gC,KAAKouB,MAAM9yB,KAAKwlC,iBAAkBI,GAExD,IAAIH,EAAqBzlC,KAAK0lC,WAAWvsC,EAAMsmC,EAAMjxB,GAErD,OADAxO,KAAK7G,GAAQssC,EACNA,GAGT,YAAAM,UAAA,SAEEjU,EACAiE,GAEA,OAAO,WAEL/1B,KAAKgmC,oBAAoBthC,KAAK,GAC9B,IAAMuhC,EAAWjmC,KAAKkmC,iBACtB,IAGE,OAFApU,EAAYgB,MAAM9yB,KAAM+1B,IAEjB,EACP,MAAO34B,GACP,GAAIqzB,GAAuBrzB,GACzB,OAAO,EAEP,MAAMA,EARV,QAWE4C,KAAKmmC,iBAAiBF,GACtBjmC,KAAKgmC,oBAAoBrhC,SAMxB,YAAA6xB,mBAAP,WACE,OAAOx2B,KAAKo+B,sBAGP,YAAAgI,6BAAP,WACE,OAAO9uB,IAAiB,QAAOtX,KAAKo+B,wBAExC,EA7qBA,GCsCA,4BAgxBA,OAlwBE,YAAAiI,qBAAA,SACEC,EACA93B,GAgBA,GAdAxO,KAAK6uB,ULnFA8K,GKmFkC35B,KLnFZya,aKqF3Bza,KAAKumC,oBAAsB,GAC3BvmC,KAAK83B,oBAAsB,GAC3B93B,KAAKwmC,iBAAmB,IACxBxmC,KAAK4W,aAAe/K,EAEpB7L,KAAKulC,kBAAoB,GACzBvlC,KAAKymC,UAAY,GACjBzmC,KAAKgmC,oBAAsB,GAC3BhmC,KAAK60B,WAAa,GAClB70B,KAAK01B,sBAAwB,GAC7B11B,KAAKo+B,qBAAuB,IAExB,QAAI5vB,EAAQ,qBACd,MAAM3Q,MACJ,oLAMJ,IAAI,QAAQyoC,GAAkB,CAI5B,IAAI,QAAQA,GACV,MAAMzoC,MACJ,+IAMJ,GAAyD,kBAA7CyoC,EAA0B,GAAG14B,YACvC,MAAM/P,MACJ,kLAON,IAAI,QAAQyoC,GACVtmC,KAAKymC,WAAiB,QACfH,GACL,SAACniC,EAAKL,GAEJ,OADAK,EAAIL,EAAQ3K,MAAQ2K,EACbK,IAET,SAEG,IACL,QAAImiC,EAAiB,WACrB,SAAM,SAAQ,QAAaA,EAAiBp8B,QAASoD,GACrD,CACA,IAAIrD,GAAgB,SAAQ,QAAaq8B,EAAiBp8B,QACtDw8B,GAAe,QAAKz8B,GACxBjK,KAAKymC,WAAiB,QACpBC,GACA,SAACviC,EAAKL,GAEJ,OADAK,EAAIL,EAAQ3K,MAAQ2K,EACbK,IAET,QAEG,MAAI,QAASmiC,GAGlB,MAAM,IAAIzoC,MACR,0IAHFmC,KAAKymC,WAAY,QAASH,GAW5BtmC,KAAKymC,UAAL,IAAwB9vB,GAGxB,IAAMgwB,GAAwB,SAC5B,QAAOL,IACP,SAACM,GAAqB,eAAQA,EAAR,oBAGxB5mC,KAAK4W,aAAe+vB,EAChB96B,EACAN,EAKJU,GAAkB,QAAOjM,KAAKymC,aAGhC,YAAAf,WAAA,SAEE7kB,EACA4e,EACAjxB,GAEA,GAAIxO,KAAKg/B,iBACP,MAAMnhC,MACJ,iBAAiBgjB,EAAjB,8KAIJ,IAmCIgmB,EAnCAC,GAAgB,QAAIt4B,EAAQ,iBAC5BA,EAAOs4B,cACPC,GAAoBD,cACpBE,GAAoB,QAAIx4B,EAAQ,qBAChCA,EAAOw4B,kBACPD,GAAoBC,kBAKpB1J,EACFt9B,KAAKwmC,kBAAqBS,GAO5B,SAASC,EAAkBnR,GACzB,IACE,IAAuB,IAAnB/1B,KAAKo8B,UAAoB,CAC3BqD,EAAK3M,MAAM9yB,KAAM+1B,GACjB,IAAMoR,EAAMnnC,KAAKm8B,UAAUn8B,KAAKm8B,UAAUpmC,OAAS,GAEnD,OADAiK,KAAKw8B,YAAY2K,GACVA,EAEP,OAAO1H,EAAK3M,MAAM9yB,KAAM+1B,GAE1B,MAAO34B,GACP,OAAO4C,KAAKonC,gBAAgBhqC,EAAG0pC,EAAeE,GAVhD,QAYEhnC,KAAKqnC,0BAjBTrnC,KAAKwmC,mBACLxmC,KAAKumC,oBAAoBjJ,GAAazc,EACtC7gB,KAAK83B,oBAAoBjX,GAAYyc,EA6BrC,OARAuJ,EAAqB,SAAUxR,EAA8BU,GAE3D,YAF6B,IAAAV,IAAAA,EAAA,GAC7Br1B,KAAKsnC,0BAA0BhK,EAAWzc,EAAUwU,GAC7C6R,EAAkBlzB,KAAKhU,KAAM+1B,KAIpB,SAAqBlV,EACvCgmB,EAAkB,sBAA4BpH,EACvCoH,GAGT,YAAAO,gBAAA,SAEEhqC,EACAmqC,EACAP,GAEA,IAAIQ,EAAgD,IAA3BxnC,KAAK60B,WAAW9+B,OAKrC0xC,EACFF,IAAwBvnC,KAAKszB,kBAAoBtzB,KAAKsxB,gBAExD,GAAIb,GAAuBrzB,GAAI,CAC7B,IAAMsqC,EAAkBtqC,EACxB,GAAIqqC,EAAe,CACjB,IAcUE,EAdNzV,EAAgBlyB,KAAKmyB,sBACzB,GAAInyB,KAAKq0B,yBAAyBnC,GAEhC,OADAwV,EAAWhX,eAAiB1wB,KAAK61B,SAAS3D,GACtClyB,KAAKo8B,YACHuL,EAAwB3nC,KAAKm8B,UAC/Bn8B,KAAKm8B,UAAUpmC,OAAS,IAET6xC,eAAgB,EAC1BD,GAEAX,IAWT,MARIhnC,KAAKo8B,aACDuL,EAAwB3nC,KAAKm8B,UACjCn8B,KAAKm8B,UAAUpmC,OAAS,IAET6xC,eAAgB,EACjCF,EAAWC,iBAAmBA,GAG1BD,EAEH,GAAIF,EAKT,OAHAxnC,KAAKs/B,wBAGE0H,IAGP,MAAMU,EAIR,MAAMtqC,GAKV,YAAA2iC,eAAA,SAEED,EACA5f,GAEA,IAAI7U,EAAMrL,KAAKs2B,4BR/RO,IQ+RiCpW,GACvD,OAAOlgB,KAAK6nC,oBAAoB/H,EAAmB5f,EAAY7U,IAGjE,YAAAw8B,oBAAA,SAEE/H,EACA5f,EACA7U,GAJF,IAOMzJ,EACAkmC,EARN,OAMM9V,EAAgBhyB,KAAKi3B,mBAAmB5rB,GAG5C,QAAoD3M,IAA3BohC,EAAmBiI,KAI1C,GAHAnmC,EAA8Bk+B,EAAmBiI,SAG/BrpC,KAFlBopC,EAAiChI,EAAmBkI,MAEvB,CAC3B,IAAI,EAAuBhW,EAC3BA,EAAgB,WACd,OAAO8V,EAAU9zB,KAAK,IAAS,EAAqBA,KAAK,UAI7DpS,EAASk+B,EAGX,IAAiC,IAA7B9N,EAAche,KAAKhU,MACrB,OAAO4B,EAAOoS,KAAKhU,OAKvB,YAAAmgC,mBAAA,SAEEjK,EACA4J,GAEA,IAAImI,EAAQjoC,KAAKs2B,4BACfG,GACAP,GAEF,OAAOl2B,KAAKkoC,wBACVhS,EACA4J,EACAmI,IAIJ,YAAAC,wBAAA,SAEEhS,EACA4J,EACAz0B,GAJF,IAQMzJ,EACAkmC,EATN,OAMM9V,EAAgBhyB,KAAKi3B,mBAAmB5rB,GAI5C,QAA2D3M,IAA3BohC,EAAmBiI,KAIjD,GAHAnmC,EAAqCk+B,EAAmBiI,SAGtCrpC,KAFlBopC,EAAwChI,EAAmBkI,MAE9B,CAC3B,IAAI,EAAuBhW,EAC3BA,EAAgB,WACd,OAAO8V,EAAU9zB,KAAK,IAAS,EAAqBA,KAAK,UAI7DpS,EAASk+B,EAGX,IAA6C,IAA9B9N,EAAehe,KAAKhU,MASjC,MAAMA,KAAKmoC,wBACTjS,EACA5Q,GAAUO,qBACkBia,EAAmBsI,SAVjD,IADA,IAAI/U,EAAWrzB,KAAKqoC,mBAAmBzmC,IAEI,IAA9BowB,EAAehe,KAAKhU,QAClB,IAAbqzB,GAEAA,EAAWrzB,KAAKqoC,mBAAmBzmC,GAevC5B,KAAKwxB,4BACHxxB,KAAKmgC,mBACL,CAACjK,EAAgB4J,GACZ9N,EACLyE,GACAP,EACAoS,KAIJ,YAAA3D,2BAAA,SAEEzO,EACA/0B,GAEA,IAAI8mC,EAAQjoC,KAAKs2B,4BACfK,GACAT,GAEFl2B,KAAKuoC,gCAAgCrS,EAAgB/0B,EAAS8mC,IAGhE,YAAAM,gCAAA,SAEErS,EACA/0B,EACAkK,GAJF,WAMMzJ,EAAST,EAAQ4mC,IACjB/vB,EAAY7W,EAAQqnC,IAKxB,IAA+C,IAHbxoC,KAAKi3B,mBAAmB5rB,GAG1B2I,KAAKhU,MAkCnC,MAAMA,KAAKmoC,wBACTjS,EACA5Q,GAAUQ,oCACV3kB,EAAQinC,SApCYxmC,EAAQoS,KAAKhU,MASnC,IALA,IAAIyoC,EAAyB,WAC3B,OAAO,EAAK7xB,aAAa,EAAK4b,GAAG,GAAIxa,KAIa,IAA7ChY,KAAK4W,aAAa5W,KAAKwyB,GAAG,GAAIxa,IAGnChY,KAAKogC,QAAQpoB,GAESpW,EAAQoS,KAAKhU,MAIrCA,KAAKwxB,4BACHxxB,KAAK0oC,4BACL,CACExS,EACAle,EACAywB,EACA7mC,EACA+mC,IAEFF,EACA9R,GACAT,EACAyS,KAWN,YAAAzI,aAAA,SAEEhK,EACA4J,GAEA,IAAImI,EAAQjoC,KAAKs2B,4BR7cG,IQ6cmCJ,GACvD,OAAOl2B,KAAK4oC,kBAAkB1S,EAAgB4J,EAAmBmI,IAGnE,YAAAW,kBAAA,SAEE1S,EACA4J,EACAz0B,GAJF,IAQMzJ,EACAkmC,EATN,OAMMe,EAAoB7oC,KAAKi3B,mBAAmB5rB,GAIhD,QAAoD3M,IAA3BohC,EAAmBiI,KAI1C,GAHAnmC,EAA8Bk+B,EAAmBiI,SAG/BrpC,KAFlBopC,EAAiChI,EAAmBkI,MAEvB,CAC3B,IAAI,EAAuBa,EAC3BA,EAAoB,WAClB,OAAOf,EAAU9zB,KAAK,IAAS,EAAqBA,KAAK,UAI7DpS,EAASk+B,EAIX,IADA,IAAIzM,GAAW,GACyB,IAAjCwV,EAAkB70B,KAAKhU,QAA+B,IAAbqzB,GAC9CA,EAAWrzB,KAAKqoC,mBAAmBzmC,GAIrC5B,KAAKwxB,4BACHxxB,KAAKkgC,aACL,CAAChK,EAAgB4J,GACZ+I,ERlfa,IQoflB3S,EACA4S,GAMAzV,IAIJ,YAAAiQ,qBAAA,SAEEpN,EACA/0B,GAEA,IAAI8mC,EAAQjoC,KAAKs2B,4BAA4BI,GAAcR,GAC3Dl2B,KAAK+oC,0BAA0B7S,EAAgB/0B,EAAS8mC,IAG1D,YAAAc,0BAAA,SAEE7S,EACA/0B,EACAkK,GAJF,WAMMzJ,EAAST,EAAQ4mC,IACjB/vB,EAAY7W,EAAQqnC,IAIxB,IAAwC,IAHbxoC,KAAKi3B,mBAAmB5rB,GAG1B2I,KAAKhU,MAAgB,CAC5C4B,EAAOoS,KAAKhU,MAMZ,IAJA,IAAIyoC,EAAyB,WAC3B,OAAO,EAAK7xB,aAAa,EAAK4b,GAAG,GAAIxa,KAGa,IAA7ChY,KAAK4W,aAAa5W,KAAKwyB,GAAG,GAAIxa,IAGnChY,KAAKogC,QAAQpoB,GAEbpW,EAAOoS,KAAKhU,MAIdA,KAAKwxB,4BACHxxB,KAAK0oC,4BACL,CACExS,EACAle,EACAywB,EACA7mC,EACAonC,IAEFP,EACA/R,GACAR,EACA8S,MAKN,YAAAN,4BAAA,SAEExS,EACAle,EACAywB,EACA7mC,EACAqnC,GAEA,KAAOR,KAGLzoC,KAAKogC,QAAQpoB,GACbpW,EAAOoS,KAAKhU,MASdA,KAAKwxB,4BACHxxB,KAAK0oC,4BACL,CACExS,EACAle,EACAywB,EACA7mC,EACAqnC,GAEFR,EACA9R,GACAT,EACA+S,IAIJ,YAAAZ,mBAAA,SAAwCzmC,GACtC,IAAMsnC,EAAkBlpC,KAAKu/B,mBAM7B,OALA39B,EAAOoS,KAAKhU,MACWA,KAAKu/B,mBAIJ2J,GAG1B,YAAAjJ,WAAA,SAEED,EACA9f,GAEA,IAAI+nB,EAAQjoC,KAAKs2B,4BR1mBC,IQ0mBmCpW,GACjDmM,GAAO,QAAQ2T,GACdA,EACAA,EAAqC+H,IAGtCoB,EADWnpC,KAAKi3B,mBAAmBgR,GACbj0B,KAAKhU,KAAMqsB,GACrC,QAAqB3tB,IAAjByqC,EAEF,OAD6B9c,EAAK8c,GACTC,IAAIp1B,KAAKhU,MAEpCA,KAAKqpC,oBACHnpB,EACC8f,EAAqCoI,UAI1C,YAAAf,uBAAA,WAOE,GANArnC,KAAK60B,WAAWlwB,MAChB3E,KAAK01B,sBAAsB/wB,MAG3B3E,KAAKi9B,wBAE0B,IAA3Bj9B,KAAK60B,WAAW9+B,SAA0C,IAA1BiK,KAAKspC,iBAA4B,CACnE,IAAIC,EAAoBvpC,KAAKwyB,GAAG,GAC5B9nB,EAAS1K,KAAKmO,qBAAqB+P,8BAA8B,CACnEC,eAAgBorB,EAChB1oB,SAAU7gB,KAAK2yB,wBAEjB3yB,KAAK6yB,WAAW,IAAI2W,GAA2B9+B,EAAQ6+B,MAI3D,YAAA1J,gBAAA,SAEED,EACAx7B,EACAjD,GAEA,IAAI48B,EACJ,IACE,IAAMhI,OAAmBr3B,IAAZyC,EAAwBA,EAAQsoC,UAAO/qC,EAQpD,OAPAq/B,EAAa6B,EAAW5rB,KAAKhU,KAAMoE,EAAK2xB,GACxC/1B,KAAKm9B,mBACHY,OACYr/B,IAAZyC,QAA2CzC,IAAlByC,EAAQiV,MAC7BjV,EAAQiV,MACFwpB,EAAY/e,UAEjBkd,EACP,MAAO3gC,GACP4C,KAAK0pC,qBAAqBtsC,EAAG+D,EAAey+B,EAAY/e,YAI5D,YAAA6oB,qBAAA,SAEEtsC,EACA+D,EACA0f,GAYA,MAVI4P,GAAuBrzB,SAA6BsB,IAAvBtB,EAAEuqC,mBACjC3nC,KAAKm9B,mBACH//B,EAAEuqC,sBACUjpC,IAAZyC,QAA2CzC,IAAlByC,EAAQiV,MAC7BjV,EAAQiV,MACRyK,UAGCzjB,EAAEuqC,kBAELvqC,GAGR,YAAAuiC,gBAAA,SAEE77B,EACAM,EACAjD,GAEA,IAAIu8B,EACJ,IACE,IAAI9I,EAAY50B,KAAKwyB,GAAG,IACsB,IAA1CxyB,KAAK4W,aAAage,EAAW9wB,IAC/B9D,KAAKi0B,eACLyJ,EAAgB9I,GAEhB50B,KAAK2pC,qBAAqB7lC,EAAS8wB,EAAWzzB,GAEhD,MAAOyoC,GACPlM,EAAgB19B,KAAK6pC,wBACnB/lC,EACAM,EACAwlC,GAUJ,OANA5pC,KAAKk9B,qBACSx+B,IAAZyC,QAA2CzC,IAAlByC,EAAQiV,MAC7BjV,EAAQiV,MACRtS,EAAQ3K,KACZukC,GAEKA,GAGT,YAAAiM,qBAAA,SAEE7lC,EACA8wB,EACAzzB,GAEA,IAAIQ,EACAmvB,EAAgB9wB,KAAKwyB,GAAG,GAW5B,MATE7wB,OADcjD,IAAZyC,GAAyBA,EAAQinC,QAC7BjnC,EAAQinC,QAERpoC,KAAKmO,qBAAqB4P,0BAA0B,CACxDC,SAAUla,EACVma,OAAQ2W,EACRlC,SAAU5B,EACVjQ,SAAU7gB,KAAK2yB,wBAGb3yB,KAAK6yB,WACT,IAAID,GAAyBjxB,EAAKizB,EAAW9D,KAIjD,YAAA+Y,wBAAA,SAEE/lC,EACAM,EACAwlC,GAIA,IACE5pC,KAAKsxB,iBAEqB,6BAA1BsY,EAAiBzwC,MAChB6G,KAAKszB,iBAeN,MAAMsW,EAbN,IAAItsB,EAAUtd,KAAKwzB,4BAAiC1vB,EAASM,GAC7D,IACE,OAAOpE,KAAK6zB,kBAAuB/vB,EAASwZ,GAC5C,MAAOwsB,GACP,MAAIA,EAAoB3wC,OAAS83B,GAGzB2Y,EAEAE,IAQd,YAAA5D,eAAA,WAEE,IAAI6D,EAAc/pC,KAAK0F,OACnBskC,GAAiB,QAAShqC,KAAK60B,YACnC,MAAO,CACLnvB,OAAQqkC,EACRE,WAAYjqC,KAAKqyB,mBACjBwC,WAAYmV,EACZ7N,UAAWn8B,KAAKm8B,YAIpB,YAAAgK,iBAAA,SAAsC/G,GACpCp/B,KAAK0F,OAAS05B,EAAS15B,OACvB1F,KAAKizB,iBAAiBmM,EAAS6K,YAC/BjqC,KAAK60B,WAAauK,EAASvK,YAG7B,YAAAyS,0BAAA,SAEEhK,EACA4M,EACA7U,GAEAr1B,KAAK01B,sBAAsBhxB,KAAK2wB,GAChCr1B,KAAK60B,WAAWnwB,KAAK44B,GAErBt9B,KAAKg9B,yBAAyBkN,EAAU5M,IAG1C,YAAAhK,eAAA,WACE,OAA2C,IAApCtzB,KAAKgmC,oBAAoBjwC,QAGlC,YAAA48B,oBAAA,WACE,IAAI2K,EAAYt9B,KAAK+0B,+BACrB,OAAO/0B,KAAKumC,oBAAoBjJ,IAGlC,YAAAlI,wBAAA,SAA6CkI,GAC3C,OAAOt9B,KAAKumC,oBAAoBjJ,IAG3B,YAAAgM,eAAP,WACE,OAAOtpC,KAAK4W,aAAa5W,KAAKwyB,GAAG,GAAI7b,KAGhC,YAAAmF,MAAP,WACE9b,KAAKq/B,kBAELr/B,KAAKgmC,oBAAsB,GAC3BhmC,KAAK0F,OAAS,GACd1F,KAAK60B,WAAa,GAElB70B,KAAKm8B,UAAY,GACjBn8B,KAAK01B,sBAAwB,IAEjC,EAhxBA,GC/CA,4BAmGA,OA/FE,YAAAyU,iBAAA,SAAiB37B,GACfxO,KAAKoqC,QAAU,GACfpqC,KAAKmO,sBAAuB,QAAIK,EAAQ,wBACpCA,EAAOL,qBACPojB,GAAsBpjB,sBAG5B,YAAA0kB,WAAA,SAEE3iB,GAEA,GAAIugB,GAAuBvgB,GAMzB,OALAA,EAAMm6B,QAAU,CACdhoB,UAAWriB,KAAKo2B,4BAChBkU,qBAAqB,QAAStqC,KAAK01B,wBAErC11B,KAAKoqC,QAAQ1lC,KAAKwL,GACXA,EAEP,MAAMrS,MAAM,gEAIhB,sBAAI,qBAAM,KAAV,WACE,OAAO,QAASmC,KAAKoqC,cAGvB,SAAWG,GACTvqC,KAAKoqC,QAAUG,mCAIjB,YAAApC,wBAAA,SAEEjoB,EACAuI,EACA+hB,GAYA,IAVA,IAAI3pB,EAAW7gB,KAAK2yB,sBAQhB8X,EAN+BjiB,GACjCtI,EAFgBlgB,KAAKw2B,qBAAqB3V,GAI1C4H,EACAzoB,KAAK8rB,cAE4C,GAC/C4e,EAAe,GACVt0C,EAAI,EAAGA,GAAK4J,KAAK8rB,aAAc11B,IACtCs0C,EAAahmC,KAAK1E,KAAKwyB,GAAGp8B,IAE5B,IAAIuL,EAAM3B,KAAKmO,qBAAqB4Q,sBAAsB,CACxDC,uBAAwByrB,EACxBxsB,OAAQysB,EACRhY,SAAU1yB,KAAKwyB,GAAG,GAClBlU,sBAAuBksB,EACvB3pB,SAAUA,IAGZ,MAAM7gB,KAAK6yB,WAAW,IAAI8X,GAAmBhpC,EAAK3B,KAAKwyB,GAAG,GAAIxyB,KAAKwyB,GAAG,MAIxE,YAAA6W,oBAAA,SAEEnpB,EACA0qB,GAYA,IAVA,IAAI/pB,EAAW7gB,KAAK2yB,sBAGhBkY,EAA+BxiB,GACjCnI,EAHgBlgB,KAAKw2B,qBAAqB3V,GAK1C7gB,KAAK8rB,cAGH4e,EAAe,GACVt0C,EAAI,EAAGA,GAAK4J,KAAK8rB,aAAc11B,IACtCs0C,EAAahmC,KAAK1E,KAAKwyB,GAAGp8B,IAE5B,IAAI06B,EAAgB9wB,KAAKwyB,GAAG,GAExB9nB,EAAS1K,KAAKmO,qBAAqBiQ,wBAAwB,CAC7DC,oBAAqBwsB,EACrB5sB,OAAQysB,EACRhY,SAAU5B,EACVxS,sBAAuBssB,EACvB/pB,SAAU7gB,KAAK2yB,wBAGjB,MAAM3yB,KAAK6yB,WACT,IAAIiY,GAAqBpgC,EAAQ1K,KAAKwyB,GAAG,GAAI1B,KAGnD,EAnGA,GCTA,4BAqCA,OApCE,YAAAia,kBAAA,aAEO,YAAAC,qBAAP,SAEEC,EACAC,GAEA,IAAIC,EAAgBnrC,KAAKo+B,qBAAqB6M,GAE9C,IAAI,QAAYE,GACd,MAAMttC,MAAM,UAAUotC,EAAa,sCAGrC,OAAOxnB,GACL,CAAC0nB,GACDD,EACAlrC,KAAK4W,aACL5W,KAAK8rB,eAMF,YAAA8H,0BAAP,SAEEF,GAEA,IAAI0X,GAAc,QAAM1X,EAAYrR,WAEhCgpB,EADkBrrC,KAAKw2B,qBACS4U,GAKpC,OAJ6B,IAAIE,GAC/BD,EACA3X,GACAnW,gBAGN,EArCA,GC+BMguB,GAAwB,CAC5BC,YAAa,8DAEfl9B,OAAOC,OAAOg9B,IAEd,IACME,GAAiBv0C,KAAKw0C,IAAI,EX1CO,GW0CuB,EAExDC,GAAMl1B,GAAY,CAAEtd,KAAM,wBAAyBuD,QAASsF,EAAMC,KACxEgK,EAAkB,CAAC0/B,KACnB,IAAMC,GAAwBj7B,GAC5Bg7B,GACA,gJAKC,GACA,GACA,GACA,GACA,GACA,GAEHr9B,OAAOC,OAAOq9B,IAEd,IAAMC,GAAmC,CACvC1yC,KACE,gJAEF0hC,SAAU,IAMZ,4BAwRA,OApRE,YAAAiR,iBAAA,SAAsCt9B,GACpCxO,KAAK+rC,mBAAqB,GAC1B/rC,KAAKgsC,iBAAkB,GAGzB,YAAAC,gBAAA,sBACEjsC,KAAKgsC,iBAAkB,EAEvBhsC,KAAKiP,WAAW,oBAAoB,WAUlC,mBAAS7Y,GACP,IAAMgO,EAAMhO,EAAI,EAAIA,EAAI,GACxB,EAAK,UAAUgO,GAAS,SAAU8nC,EAAMC,GACtC,OAAOnsC,KAAKosC,sBAAsBF,EAAM91C,EAAG+1C,IAE7C,EAAK,UAAU/nC,GAAS,SAAU8nC,EAAMC,GACtC,OAAOnsC,KAAKqsC,sBAAsBH,EAAM91C,EAAG+1C,IAE7C,EAAK,SAAS/nC,GAAS,SAAU8nC,GAC/B,OAAOlsC,KAAKssC,qBAAqBJ,EAAM91C,IAEzC,EAAK,KAAKgO,GAAS,SAAU8nC,GAC3B,OAAOlsC,KAAKusC,iBAAiBL,EAAM91C,IAErC,EAAK,OAAOgO,GAAS,SAAU8nC,GAC7BlsC,KAAKwsC,mBAAmBp2C,EAAG81C,IAE7B,EAAK,WAAW9nC,GAAS,SAAU8nC,GACjClsC,KAAKysC,2BAA2Br2C,EAAG81C,IAErC,EAAK,eAAe9nC,GAAS,SAAU8nC,GACrClsC,KAAK0sC,yBAAyBt2C,EAAG81C,IAEnC,EAAK,mBAAmB9nC,GAAS,SAAU8nC,GACzClsC,KAAK2sC,iCAAiCv2C,EAAG81C,KAxBpC91C,EAAI,EAAGA,EAAI,GAAIA,MAAfA,GA6BT,EAAI,QAAc,SAAUgO,EAAK8nC,EAAMC,GACrC,OAAOnsC,KAAKosC,sBAAsBF,EAAM9nC,EAAK+nC,IAE/C,EAAI,QAAmB,SAAU/nC,EAAK8nC,EAAMC,GAC1C,OAAOnsC,KAAKqsC,sBAAsBH,EAAM9nC,EAAK+nC,IAE/C,EAAI,OAAa,SAAU/nC,EAAK8nC,GAC9B,OAAOlsC,KAAKssC,qBAAqBJ,EAAM9nC,IAEzC,EAAI,GAAS,SAAUA,EAAK8nC,GAC1B,OAAOlsC,KAAKusC,iBAAiBL,EAAM9nC,IAErC,EAAI,KAAW,SAAUA,EAAK8nC,GAC5BlsC,KAAKwsC,mBAAmBpoC,EAAK8nC,IAE/B,EAAI,WAAiB,SAAU9nC,EAAK8nC,GAClClsC,KAAK0sC,yBAAyBtoC,EAAK8nC,IAGrC,EAAK1M,OAAS,EAAKoN,cACnB,EAAK7G,UAAY,EAAK8G,iBACtB,EAAKra,GAAK,EAAKsa,cAInB,YAAAC,iBAAA,sBACE/sC,KAAKgsC,iBAAkB,EAKvBhsC,KAAKiP,WAAW,8BAA8B,WAC5C,IAAK,IAAI7Y,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAC3B,IAAMgO,EAAMhO,EAAI,EAAIA,EAAI,UACjB,EAAK,UAAUgO,UACf,EAAK,UAAUA,UACf,EAAK,SAASA,UACd,EAAK,KAAKA,UACV,EAAK,OAAOA,UACZ,EAAK,WAAWA,UAChB,EAAK,eAAeA,UACpB,EAAK,mBAAmBA,UAG1B,EAAI,eACJ,EAAI,eACJ,EAAI,cACJ,EAAI,UACJ,EAAI,YACJ,EAAI,kBAEJ,EAAKo7B,cACL,EAAKuG,iBACL,EAAKvT,OAOhB,YAAAoa,cAAA,SAAsCnN,KAMtC,YAAAoN,iBAAA,SACE/a,EACAiE,GAEA,OAAO,WAAM,WAKf,YAAA+W,UAAA,SAAU5N,GAGR,OAAOD,IAGT,YAAA+N,mBAAA,SAAmB7zC,EAAcirB,GAC/B,IACE,IAAM6oB,EAAkB,IAAIz0B,GAAK,CAAExB,WAAY,GAAI7d,KAAMA,IAKzD,OAJA8zC,EAAgB9zC,KAAOA,EACvB6G,KAAK+rC,mBAAmBrnC,KAAKuoC,GAC7B7oB,EAAIpQ,KAAKhU,MACTA,KAAK+rC,mBAAmBpnC,MACjBsoC,EACP,MAAOC,GACP,IAA2C,IAAvCA,EAAcC,qBAChB,IACED,EAAc7vC,QACZ6vC,EAAc7vC,QAAd6vC,0JAGF,MAAOE,GAEP,MAAMF,EAGV,MAAMA,IAKV,YAAAZ,qBAAA,SAEExM,EACA5f,GAEA,OAAOmtB,GAAWr5B,KAAKhU,KAAM6X,GAAQioB,EAAmB5f,IAG1D,YAAAwsB,yBAAA,SAEExsB,EACA4f,GAEAuN,GAAWr5B,KAAKhU,KAAM8X,GAAqBgoB,EAAmB5f,IAGhE,YAAAysB,iCAAA,SAEEzsB,EACA/e,GAEAksC,GAAWr5B,KACThU,KACA+X,GACA5W,EACA+e,EArNmB,OA0NvB,YAAAssB,mBAAA,SAEEtsB,EACA4f,GAEAuN,GAAWr5B,KAAKhU,KAAMoY,GAAY0nB,EAAmB5f,IAGvD,YAAAusB,2BAAA,SAEEvsB,EACA/e,GAEAksC,GAAWr5B,KACThU,KACAmY,GACAhX,EACA+e,EA3OmB,OAgPvB,YAAAqsB,iBAAA,SAEEvM,EACA9f,GAEA,OAAOotB,GAAat5B,KAAKhU,KAAMggC,EAAY9f,IAG7C,YAAAmsB,sBAAA,SAEEzM,EACA1f,EACA/e,GAGA,GADAosC,GAAuBrtB,IAClB0f,IAA8C,KAAhC,QAAIA,EAAY,YAAuB,CACxD,IAAM1vB,EAAa,IAAIrS,MACrB,WAAW2vC,GAAattB,GAAxB,uEACoDutB,KAAKC,UACrD9N,GAFJ,+BAKW5/B,KAAK+rC,mBAAmB,GAAI5yC,KAAI,KAI7C,MADA+W,EAAMi9B,sBAAuB,EACvBj9B,EAGR,IAAMy9B,GAAgB,QAAK3tC,KAAK+rC,oBAC1BlrB,EAAW+e,EAAU,SACrBgO,EAAkB,IAAIl2B,GAAY,CACtCtT,IAAK8b,EACLvI,gBAAiBkJ,EAEjB3J,oBAAgBxY,IAIlB,OAFAivC,EAAS32B,WAAWtS,KAAKkpC,GAElB5tC,KAAKo8B,UAAYyP,GAA+BN,IAGzD,YAAAa,sBAAA,SAEEtoC,EACAoc,EACA/e,GAGA,GADAosC,GAAuBrtB,IAClB3T,EAAoBzI,GAAU,CACjC,IAAMoM,EAAa,IAAIrS,MACrB,WAAW2vC,GAAattB,GAAxB,mEACgDutB,KAAKC,UACjD5pC,GAFJ,+BAKW9D,KAAK+rC,mBAAmB,GAAI5yC,KAAI,KAI7C,MADA+W,EAAMi9B,sBAAuB,EACvBj9B,EAER,IAAMy9B,GAAgB,QAAK3tC,KAAK+rC,oBAC1B6B,EAAkB,IAAI31B,GAAS,CACnC7T,IAAK8b,EACLhI,aAAcpU,IAIhB,OAFA6pC,EAAS32B,WAAWtS,KAAKkpC,GAElBhC,IAEX,EAxRA,GA0RA,SAASyB,GACPQ,EACAC,EACA5tB,EACA6tB,QAAA,IAAAA,IAAAA,GAAA,GAEAR,GAAuBrtB,GACvB,IAAMytB,GAAgB,QAAK3tC,KAAK+rC,oBAC1BiC,GAAgB,QAAWF,GAAeA,EAAcA,EAAY/F,IAEpEkG,EAAU,IAAIJ,EAAgB,CAAE72B,WAAY,GAAI5S,IAAK8b,IAa3D,OAZI6tB,IACFE,EAAQj2B,UAAY81B,EAAYtF,MAE9B,QAAIsF,EAAa,mBACnBG,EAAQniB,aAAegiB,EAAYI,eAGrCluC,KAAK+rC,mBAAmBrnC,KAAKupC,GAC7BD,EAAch6B,KAAKhU,MACnB2tC,EAAS32B,WAAWtS,KAAKupC,GACzBjuC,KAAK+rC,mBAAmBpnC,MAEjB4mC,GAGT,SAAS+B,GAAaQ,EAAkB5tB,GAAxC,WACEqtB,GAAuBrtB,GACvB,IAAMytB,GAAgB,QAAK3tC,KAAK+rC,oBAE1BoC,GAAsC,KAAzB,QAAQL,GACrBzhB,GAAsB,IAAf8hB,EAAuBL,EAAcA,EAAY/F,IAExDqG,EAAY,IAAI/1B,GAAY,CAChCrB,WAAY,GACZ5S,IAAK8b,EACL9I,kBAAmB+2B,IAAiD,IAAnCL,EAAYO,sBAE3C,QAAIP,EAAa,mBACnBM,EAAUtiB,aAAegiB,EAAYI,eAGvC,IAAM72B,GAAgB,OAAKgV,GAAM,SAAC/I,GAAiB,eAAWA,EAAX,SAmBnD,OAlBA8qB,EAAU/2B,cAAgBA,EAE1Bs2B,EAAS32B,WAAWtS,KAAK0pC,IAEzB,QAAQ/hB,GAAM,SAAC/I,GACb,IAAMgrB,EAAc,IAAI12B,GAAY,CAAEZ,WAAY,KAClDo3B,EAAUp3B,WAAWtS,KAAK4pC,IACtB,QAAIhrB,EAAS,sBACfgrB,EAAYl3B,kBAAoBkM,EAAQ+qB,oBAGjC,QAAI/qB,EAAS,UACpBgrB,EAAYl3B,mBAAoB,GAElC,EAAK20B,mBAAmBrnC,KAAK4pC,GAC7BhrB,EAAQ8lB,IAAIp1B,KAAK,GACjB,EAAK+3B,mBAAmBpnC,SAEnB4mC,GAGT,SAASiC,GAAappC,GACpB,OAAe,IAARA,EAAY,GAAK,GAAGA,EAG7B,SAASmpC,GAAuBnpC,GAC9B,GAAIA,EAAM,GAAKA,EAAMqnC,GAAgB,CACnC,IAAMv7B,EAAa,IAAIrS,MAErB,kCAAkCuG,EAAlC,8DAEIqnC,GAAiB,IAIvB,MADAv7B,EAAMi9B,sBAAuB,EACvBj9B,GChbV,gCA4CA,OAvCE,YAAAq+B,sBAAA,SAAsB//B,GACpB,IAAI,QAAIA,EAAQ,iBAAkB,CAChC,IAAMggC,EAAoBhgC,EAAOJ,cAC3BqgC,EAA6C,kBAAtBD,EAC7BxuC,KAAK+O,kBAAoB0/B,EACbD,EACRn1C,EAAAA,EACJ2G,KAAKoO,cAAgBqgC,EACjBD,EAAoB,EACpBA,OAEJxuC,KAAK+O,kBAAoB,EACzB/O,KAAKoO,cAAgBmjB,GAAsBnjB,cAG7CpO,KAAKgP,iBAAmB,GAG1B,YAAAC,WAAA,SAAmC0G,EAAmBC,GAGpD,IAA2B,IAAvB5V,KAAKoO,cAAwB,CAC/BpO,KAAKgP,kBACL,IAAM6G,EAAS,IAAIre,MAAMwI,KAAKgP,gBAAkB,GAAG7G,KAAK,MACpDnI,KAAKgP,gBAAkBhP,KAAK+O,mBAC9B+G,QAAQza,IAAOwa,EAAM,WAAQF,EAAS,KAElC,OAAkB,QAAMC,GAAtBG,EAAI,OAAE9Y,EAAK,QAEb+Y,EAAcD,EAAO,GAAKD,QAAQG,KAAOH,QAAQza,IAKvD,OAJI2E,KAAKgP,gBAAkBhP,KAAK+O,mBAC9BiH,EAAeH,EAAM,QAAQF,EAAS,WAAWI,EAAI,MAEvD/V,KAAKgP,kBACE/R,EAEP,OAAO2Y,KAGb,EA5CA,sWCmCaqpB,GAActuB,GACzBgG,GACA,GACArd,IACAA,IACAA,IACAA,IACAA,IACAA,KAEFgV,OAAOC,OAAO0wB,IAMP,IAgBKxd,GAhBC8P,GAAuCjjB,OAAOC,OAAO,CAChE+iB,iBAAiB,EACjBxF,aAAc,EACdgL,sBAAsB,EACtBsF,WAAW,EACXjuB,qBAAsB2P,GACtBue,qBAAsB,OACtBjuB,eAAe,EACfC,iBAAiB,IAGN04B,GAAwCz4B,OAAOC,OAAO,CACjEy4B,kBAAmB,aACnBF,eAAe,IAoDX,SAAU4H,GAAazxC,GAC3B,YAD2B,IAAAA,IAAAA,OAAA,GACpB,WACL,OAAOA,IAnDX,SAAYwkB,GACV,6CACA,iDACA,qDACA,qDACA,uDACA,uCACA,iDACA,uCACA,yEACA,+CACA,wDACA,sDACA,sCAbF,CAAYA,KAAAA,GAAyB,KAuDrC,kBAuHE,WAAY6kB,EAAkC93B,GAJ9C,KAAAg3B,iBAA6C,GAC7C,KAAAxG,kBAAmB,EAIjB,IAAM2P,EAAsB3uC,KAW5B,GAVA2uC,EAAKxE,iBAAiB37B,GACtBmgC,EAAK/P,mBACL+P,EAAK9X,eAAeroB,GACpBmgC,EAAKtI,qBAAqBC,EAAiB93B,GAC3CmgC,EAAKxd,gBAAgB3iB,GACrBmgC,EAAKzS,gBAAgB1tB,GACrBmgC,EAAK5D,oBACL4D,EAAK7C,iBAAiBt9B,GACtBmgC,EAAKJ,sBAAsB//B,IAEvB,QAAIA,EAAQ,iBACd,MAAM,IAAI3Q,MACR,uQAOJmC,KAAKqO,iBAAkB,QAAIG,EAAQ,mBAC/BA,EAAOH,gBACPkjB,GAAsBljB,gBAE9B,OApIS,EAAAugC,oBAAP,SAA2BC,GACzB,MAAMhxC,MACJ,gIAKG,YAAA+wC,oBAAP,sBACE5uC,KAAKiP,WAAW,uBAAuB,WACrC,IAAI6/B,EAEJ,EAAK9P,kBAAmB,EACxB,IAAInQ,EAAY,EAAKA,UAErB,EAAK5f,WAAW,eAAe,YAI7B,QAAiB,MAGnB,EAAKA,WAAW,qBAAqB,WACnC,IACE,EAAKg9B,mBAEL,QAAQ,EAAK1G,mBAAmB,SAACnX,GAC/B,IACM2gB,EADc,EAAK3gB,GACgB,sBACrC4gB,OAAmBtwC,EACvB,EAAKuQ,WAAcmf,EAAY,SAAS,WACtC4gB,EAAmB,EAAKhC,mBACtB5e,EACA2gB,MAGJ,EAAK3Q,qBAAqBhQ,GAAgB4gB,KAb9C,QAgBE,EAAKjC,uBAIT,IAAIkC,EAAiB,GA4CrB,GA3CA,EAAKhgC,WAAW,qBAAqB,WACnCggC,EAAiB,GAAe,CAC9Brf,OAAO,QAAO,EAAKwO,wBAErB,EAAKoH,iBAAiB9gC,KAAKouB,MAAM,EAAK0S,iBAAkByJ,MAG1D,EAAKhgC,WAAW,uBAAuB,WAGrC,IAAI,QAAQggC,KAA4C,IAAzB,EAAK5gC,gBAA2B,CAC7D,IAAI6gC,EAAmB,GAAgB,CACrCtf,OAAO,QAAO,EAAKwO,sBACnBtS,aAAc,EAAKA,aACnB5qB,YAAY,QAAO,EAAKulC,WACxBplB,eAAgBhC,GAChB8B,YAAa0N,IAGf,EAAK2W,iBAAiB9gC,KAAKouB,MACzB,EAAK0S,iBACL0J,QAMF,QAAQ,EAAK1J,oBAEX,EAAKlU,iBACP,EAAKriB,WAAW,0BAA0B,WACxC,IAAIkgC,EtB5KV,SACJC,GAEA,IAAIC,EAAgB,GAMpB,OAJA,QAAQD,GAAgB,SAAC/xB,GACvB,IAAIiyB,EAAiB,IAAIC,GAAoBlyB,GAASE,gBACtD,QAAO8xB,EAAeC,MAEjBD,EsBmKoBG,EACf,QAAO,EAAKpR,uBAEd,EAAK/M,cAAgB8d,KAIzB,EAAKlgC,WAAW,6BAA6B,WAC3C,EAAKsoB,8BAA6B,QAAO,EAAK6G,4BAK/CqR,EAAOC,oCACP,QAAQ,EAAKlK,kBAMd,MAJAsJ,GAAgB,QACd,EAAKtJ,kBACL,SAACnb,GAAa,OAAAA,EAAA,WAEV,IAAIxsB,MACR,wCAAwCixC,EAAc3mC,KACpD,4CArGH,EAAAunC,kCAA4C,EAyIrD,EAhJA,IAkJA,QAAYD,GAAQ,CAClBE,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,KAGF,mBACE,WACE9J,EACA93B,QAAA,IAAAA,IAAAA,EAAA,IAFF,IAIQ6hC,GAAc,QAAS7hC,UAC7B6hC,EAAYjU,WAAY,EACxB,YAAMkK,EAAiB+J,IAAY,KAEvC,OAT+B,QAS/B,EATA,CAA+BZ,IAW/B,eACE,WACEnJ,EACA93B,QAAA,IAAAA,IAAAA,EAAA,IAFF,IAIQ6hC,GAAc,QAAS7hC,UAC7B6hC,EAAYjU,WAAY,EACxB,YAAMkK,EAAiB+J,IAAY,KAEvC,OAT2C,QAS3C,EATA,CAA2CZ,ICzSrC,SAAUa,GACdC,EACA,oBAMI,GAAE,EALJ,IAAAC,aAAAA,OAAY,IAAG,kCAAgCv0C,EAAO,aAAY,EAClE,IAAAw0C,IA0CF,MApCe,qKAWC,wCAjBX,IAAG,kCAAgCx0C,EAAO,yBAAwB,GAkBvC,SAGhB,kBACHu0C,EAAY,yDACZA,EAAY,qDACZA,EAAY,sDACZA,EAAY,6BAEL,oDAGM,8CAEK/C,KAAKC,UAAU6C,EAAS,KAAM,MAAK,mBAIhD,oKCtBpB,IAAMG,GAAK,KAsCL,SAAUC,GAASxvC,GAEvB,IAyB0ByuB,EAH1B,MAtBa,cACJzuB,EAAQhI,KAAI,kQAwBKy2B,EAhBVzuB,EAAQyuB,OAiBR,QAAIA,GAAO,SAAC5O,GAC1B,OAME,SAAkB/J,EAAYxe,GAClC,IAAI5C,EAASggB,GAAOpd,EAAG,WAAWwe,EAAK9d,KAAI,mBAAqBu3C,GAGhE,OAFA76C,GAAU+6C,GAAc35B,EAAKD,WAAYve,EAAI,GAC7C5C,GAAUggB,GAAOpd,EAAI,EAAG,MAAQi4C,GATvBG,CAAQ7vB,EAAU,MAGV7Y,KAAK,MArBQ,sUAS9BhH,EAAQhI,KAAI,+DACZgI,EAAQhI,KAAI,4BAA4BgI,EAAQhI,KAAI,aA+BhD,SAAU23C,GAAe75B,EAAmBxe,GAChD,IAAI5C,EAASggB,GAAOpd,EAAG,OAAOwe,EAAK7S,IAAG,MAAQssC,GACxCrkB,GAAO,QAAIpV,EAAKD,YAAY,SAAC+5B,GAAW,OAM1C,SAAuB95B,EAAmBxe,GAC9C,IAAI5C,EAASggB,GAAOpd,EAAG,KAAOi4C,GAO9B,OALA76C,GAAUggB,GAAOpd,EAAI,EAAG,qBAAuBi4C,GAC/C76C,GAAU+6C,GAAc35B,EAAKD,WAAYve,EAAI,GAC7C5C,GAAUggB,GAAOpd,EAAI,EAAG,KAAOi4C,GAC/B76C,GAAUggB,GAAOpd,EAAG,KAZ0Bu4C,CAAaD,EAAQt4C,EAArB,MAG9C,OAFA5C,GAAUw2B,EAAKlkB,KAAK,OACpBtS,GAAU66C,GAAK76B,GAAOpd,EAAG,QAe3B,SAASw4C,GAAQh6B,EAAmBxe,GAElC,GAAIwe,aAAgBS,GAClB,OA1BE,SAAyBT,EAAmBxe,GAChD,OAAOod,GAAOpd,EAAG,YAAYwe,EAAK7S,IAAG,MAAM6S,EAAKU,gBAAe,IAAM+4B,IAyB5DQ,CAAej6B,EAAMxe,GACvB,GAAIwe,aAAgBY,GACzB,OAAOs5B,GAAW,SAAUl6B,EAAMxe,GAC7B,GAAIwe,aAAgBa,GACzB,OAAOq5B,GAAW,eAAgBl6B,EAAMxe,GACnC,GAAIwe,aAAgBc,GACzB,OAAOo5B,GAAW,mBAAoBl6B,EAAMxe,GACvC,GAAIwe,aAAgBkB,GACzB,OAAOg5B,GAAW,WAAYl6B,EAAMxe,GAC/B,GAAIwe,aAAgBmB,GACzB,OAAO+4B,GAAW,OAAQl6B,EAAMxe,GAC3B,GAAIwe,aAAgBoB,GACzB,OAAOy4B,GAAe75B,EAAMxe,GACvB,GAAIwe,aAAgBgB,GACzB,OA9CE,SAAsBhB,EAAgBxe,GAC1C,IAAMU,EAAO8d,EAAKiB,aAAa/e,KAE/B,OAAO0c,GAAOpd,EAAG,YAAYwe,EAAK7S,IAAG,mBAAmBjL,EAAI,IAAMu3C,IA2CzDU,CAAYn6B,EAAMxe,GACpB,GAAIwe,aAAgBW,GACzB,OAAOg5B,GAAc35B,EAAKD,WAAYve,GAEtC,MAAMoF,MAAM,wBAIhB,SAASszC,GACPzxB,EACAzI,EAKAxe,GAEA,IAAI5C,EAASggB,GAAOpd,EAAG,MAAKinB,EAAUzI,EAAK7S,KAAG,KAa9C,OAXI6S,EAAKe,WACPniB,GAAU,MACVA,GACEggB,GAAOpd,EAAI,EAAG,uBAAuBwe,EAAKe,UAAU7e,MAAU,IAAMu3C,GACtE76C,GAAU,QAAQw7C,GAAep6B,EAAKD,WAAYve,EAAI,GAAOi4C,GAC7D76C,GAAUggB,GAAOpd,EAAG,KAAOi4C,IAE3B76C,GAAUw7C,GAAep6B,EAAKD,WAAYve,EAAI,GAGhD5C,GAAUggB,GAAOpd,EAAG,KAAOi4C,GAI7B,SAASW,GAAer6B,EAA2Bve,GACjD,IAAI2rB,EAAM,iBAGV,OAFAA,GAAOwsB,GAAc55B,EAAYve,GACjC2rB,GAAOvO,GAAOpd,EAAG,KAAOi4C,GAI1B,SAASE,GAAcxsB,EAAoB3rB,GACzC,IAAI5C,EAAS,GAIb,OAHA,QAAQuuB,GAAK,SAACnN,GACZphB,GAAUo7C,GAAQh6B,EAAMxe,EAAI,MAEvB5C,EAGT,SAASggB,GAAOqpB,EAAiBl0B,GAE/B,OADexT,MAAgB,EAAV0nC,EAAc,GAAG/2B,KAAK,KAC3B6C,EClMZ,SAAUsmC,GAA4CnwC,GAK1D,IAAMowC,EDyCF,SAA6BpwC,GAIjC,MAAO,SACPwvC,GAASxvC,GAAQ,gBACNA,EAAQhI,KAAI,kCC/CHq4C,CAAmB,CACrCr4C,KAAMgI,EAAQhI,KACdy2B,MAAOzuB,EAAQyuB,QAGX6hB,EAAqB,IAAIC,SAC7B,kBACA,SACA,aACAH,GAGF,OAAO,SAAU/iC,GACf,OAAOijC,EACLtwC,EAAQmlC,gBACR93B,EAEA,EAAQ,QAKR,SAAUmjC,GAAqBxwC,GAInC,ODXI,SAAuBA,GAC3B,MAAO,koBAgBPwvC,GAASxvC,GAAQ,yBAGbA,EAAQhI,KAAI,KAAKgI,EAAQhI,KAAI,eCT1By4C,CAAa,CAAEz4C,KAAMgI,EAAQhI,KAAMy2B,MAAOzuB,EAAQyuB,QCwCrD,SAAUiiB,KACd/7B,QAAQG,KACN,4MAaJ,OACE,WACE,MAAM,IAAIpY,MACR,qMClFA,SAAUi0C,EAAQ15C,GACtB,OAAOA,GAAsB,IAAfA,EAAIrC,OAGd,SAAUwwB,EAAKjQ,GACnB,YAAY5X,IAAR4X,GAA6B,OAARA,EAChB,GAEFhI,OAAOiY,KAAKjQ,GAGf,SAAUy7B,EAAOz7B,GAGrB,IAFA,IAAI07B,EAAO,GACPzrB,EAAOjY,OAAOiY,KAAKjQ,GACdlgB,EAAI,EAAGA,EAAImwB,EAAKxwB,OAAQK,IAC/B47C,EAAKttC,KAAK4R,EAAIiQ,EAAKnwB,KAErB,OAAO47C,EAGH,SAAUC,EACd37B,EACA47B,GAIA,IAFA,IAAIr8C,EAAc,GACds8C,EAAU5rB,EAAKjQ,GACVlS,EAAM,EAAGA,EAAM+tC,EAAQp8C,OAAQqO,IAAO,CAC7C,IAAIwO,EAAUu/B,EAAQ/tC,GACtBvO,EAAO6O,KAAKwtC,EAASl+B,KAAK,KAAMsC,EAAI1D,GAAUA,IAEhD,OAAO/c,EAGH,SAAU6B,EAAUU,EAAU85C,GAElC,IADA,IAAIr8C,EAAc,GACTuO,EAAM,EAAGA,EAAMhM,EAAIrC,OAAQqO,IAClCvO,EAAO6O,KAAKwtC,EAASl+B,KAAK,KAAM5b,EAAIgM,GAAMA,IAE5C,OAAOvO,EAGH,SAAUu8C,EAAWh6C,GAGzB,IAFA,IAAIvC,EAAS,GAEJuO,EAAM,EAAGA,EAAMhM,EAAIrC,OAAQqO,IAAO,CACzC,IAAIiuC,EAAWj6C,EAAIgM,GACf5M,MAAM86C,QAAQD,GAChBx8C,EAASA,EAAOoQ,OAAOmsC,EAAQC,IAE/Bx8C,EAAO6O,KAAK2tC,GAGhB,OAAOx8C,EAGH,SAAU2mB,EAASpkB,GACvB,OAAO05C,EAAQ15C,QAAOsG,EAAYtG,EAAI,GAGlC,SAAUm6C,EAAQn6C,GACtB,IAAItC,EAAMsC,GAAOA,EAAIrC,OACrB,OAAOD,EAAMsC,EAAItC,EAAM,QAAK4I,EAGxB,SAAU8zC,EAAQC,EAAiBC,GAEvC,GAAIl7C,MAAM86C,QAAQG,GAChB,IAAK,IAAIr8C,EAAI,EAAGA,EAAIq8C,EAAW18C,OAAQK,IACrCs8C,EAAiB1+B,KAAK,KAAMy+B,EAAWr8C,GAAIA,OAExC,KAAIu8C,EAASF,GAQlB,MAAM50C,MAAM,wBAPZ,IAAI+0C,EAAUrsB,EAAKksB,GACnB,IAASr8C,EAAI,EAAGA,EAAIw8C,EAAQ78C,OAAQK,IAAK,CACvC,IAAIiV,EAAMunC,EAAQx8C,GACd6G,EAAQw1C,EAAWpnC,GACvBqnC,EAAiB1+B,KAAK,KAAM/W,EAAOoO,KAOnC,SAAUwnC,EAASprB,GACvB,MAAuB,kBAATA,EAGV,SAAUqrB,EAAYrrB,GAC1B,YAAgB/oB,IAAT+oB,EAGH,SAAUsrB,EAAWtrB,GACzB,OAAOA,aAAgBiqB,SAGnB,SAAUsB,EAAQ56C,EAAU8mC,GAChC,YADgC,IAAAA,IAAAA,EAAA,GACzB9mC,EAAIlC,MAAMgpC,EAAS9mC,EAAIrC,QAG1B,SAAUk9C,EAAa76C,EAAU8mC,GACrC,YADqC,IAAAA,IAAAA,EAAA,GAC9B9mC,EAAIlC,MAAM,EAAGkC,EAAIrC,OAASmpC,GAG7B,SAAUgU,EAAU96C,EAAU0vC,GAClC,IAAIjyC,EAAS,GACb,GAAI2B,MAAM86C,QAAQl6C,GAChB,IAAK,IAAIhC,EAAI,EAAGA,EAAIgC,EAAIrC,OAAQK,IAAK,CACnC,IAAIqxB,EAAOrvB,EAAIhC,GACX0xC,EAAU9zB,KAAK,KAAMyT,IACvB5xB,EAAO6O,KAAK+iB,GAIlB,OAAO5xB,EAGH,SAAUs9C,EAAU/6C,EAAU0vC,GAClC,OAAOoL,EAAO96C,GAAK,SAACqvB,GAAS,OAACqgB,EAAD,MAGzB,SAAUsL,EAAK98B,EAAawxB,GAIhC,IAHA,IAAIvhB,EAAOjY,OAAOiY,KAAKjQ,GACnBzgB,EAAS,GAEJO,EAAI,EAAGA,EAAImwB,EAAKxwB,OAAQK,IAAK,CACpC,IAAIwc,EAAU2T,EAAKnwB,GACfi8C,EAAW/7B,EAAI1D,GACfk1B,EAAUuK,KACZx8C,EAAO+c,GAAWy/B,GAItB,OAAOx8C,EAGH,SAAUw9C,EAAI/8B,EAAUqlB,GAC5B,QAAIgX,EAASr8B,IACJA,EAAI9Z,eAAem/B,GAKxB,SAAU2X,EAAYl7C,EAAUqvB,GACpC,YAAsD/oB,IAA/C60C,EAAKn7C,GAAK,SAACi6C,GAAa,OAAAA,IAAA,KAM3B,SAAUmB,EAAYp7C,GAE1B,IADA,IAAIq7C,EAAS,GACJr9C,EAAI,EAAGA,EAAIgC,EAAIrC,OAAQK,IAC9Bq9C,EAAO/uC,KAAKtM,EAAIhC,IAElB,OAAOq9C,EAMH,SAAUC,EAASp9B,GACvB,IAAIq9B,EAAY,GAChB,IAAK,IAAItoC,KAAOiL,EAEVhI,OAAOsiB,UAAUp0B,eAAewX,KAAKsC,EAAKjL,KAC5CsoC,EAAUtoC,GAAOiL,EAAIjL,IAGzB,OAAOsoC,EAGH,SAAUJ,EAAQn7C,EAAU0vC,GAChC,IAAK,IAAI1xC,EAAI,EAAGA,EAAIgC,EAAIrC,OAAQK,IAAK,CACnC,IAAIqxB,EAAOrvB,EAAIhC,GACf,GAAI0xC,EAAU9zB,KAAK,KAAMyT,GACvB,OAAOA,GAMP,SAAUmsB,EAAWx7C,EAAU0vC,GAEnC,IADA,IAAIjoC,EAAQ,GACHzJ,EAAI,EAAGA,EAAIgC,EAAIrC,OAAQK,IAAK,CACnC,IAAIqxB,EAAOrvB,EAAIhC,GACX0xC,EAAU9zB,KAAK,KAAMyT,IACvB5nB,EAAM6E,KAAK+iB,GAGf,OAAO5nB,EAGH,SAAUg0C,EACdC,EACAC,EACAC,GAQA,IANA,IAAMC,EAAQz8C,MAAM86C,QAAQwB,GAExB9B,EAAYiC,EAAkBH,EAAW/B,EAAO+B,GAChD3B,EAAU8B,EAAQ,GAAK1tB,EAAKutB,GAE5BI,EAAcF,EACT59C,EAAI,EAAGA,EAAI47C,EAAKj8C,OAAQK,IAC/B89C,EAAcH,EAAS//B,KACrB,KACAkgC,EACAlC,EAAK57C,GACL69C,EAAQ79C,EAAI+7C,EAAQ/7C,IAGxB,OAAO89C,EAGH,SAAUC,EAAW/7C,GACzB,OAAO+6C,EAAO/6C,GAAK,SAACqvB,GAAS,OAAS,OAATA,QAAA,IAAiBA,KAG1C,SAAU2sB,EACdh8C,EACAi8C,QAAA,IAAAA,IAAAA,EAAA,SAA8B5sB,GAAS,OAAAA,IAEvC,IAAI6sB,EAAa,GACjB,OAAOT,EACLz7C,GACA,SAACvC,EAAQw8C,GACP,IAAIkC,EAAeF,EAAShC,GAC5B,OAAIiB,EAASgB,EAAYC,GAChB1+C,GAEPy+C,EAAW5vC,KAAK6vC,GACT1+C,EAAOoQ,OAAOosC,MAGzB,IAIE,SAAUmC,EAAQ5a,OAAgB,wDACtC,IAAI6a,EAAW,CAAC,MACZC,EAAUD,EAASxuC,OAAO0uC,GAC9B,OAAOjD,SAAS1hC,KAAK8iB,MAAM8G,EAAM8a,GAG7B,SAAUpC,EAAQh8B,GACtB,OAAO9e,MAAM86C,QAAQh8B,GAGjB,SAAUs+B,EAASt+B,GACvB,OAAOA,aAAe9V,OAGlB,SAAUmyC,EAASr8B,GACvB,OAAOA,aAAehI,OAGlB,SAAUumC,EACdz8C,EACA0vC,GAEA,IAAK,IAAI1xC,EAAI,EAAGA,EAAIgC,EAAIrC,OAAQK,IAC9B,IAAK0xC,EAAU1vC,EAAIhC,GAAIA,GACrB,OAAO,EAGX,OAAO,EAGH,SAAU0+C,EAAc18C,EAAU25C,GACtC,OAAOoB,EAAO/6C,GAAK,SAACqvB,GAAS,OAAA6rB,EAASvB,EAAT,MAGzB,SAAUgD,EAAQ38C,EAAU0vC,GAChC,IAAK,IAAI1xC,EAAI,EAAGA,EAAIgC,EAAIrC,OAAQK,IAC9B,GAAI0xC,EAAU1vC,EAAIhC,IAChB,OAAO,EAGX,OAAO,EAGH,SAAUgT,EAAWhR,EAAU6E,GACnC,IAAK,IAAI7G,EAAI,EAAGA,EAAIgC,EAAIrC,OAAQK,IAC9B,GAAIgC,EAAIhC,KAAO6G,EACb,OAAO7G,EAGX,OAAQ,EAGJ,SAAU4+C,EAAU58C,EAAU68C,GAClC,IAAIp/C,EAAS29C,EAASp7C,GAEtB,OADAvC,EAAOq/C,MAAK,SAACp7C,EAAGq7C,GAAM,OAAAF,EAAUn7C,GAAKm7C,EAAf,MACfp/C,EAGH,SAAUu/C,EAAU7uB,EAAawrB,GACrC,GAAIxrB,EAAKxwB,SAAWg8C,EAAOh8C,OACzB,MAAM8H,MAAM,6DAId,IADA,IAAIhI,EAAS,GACJO,EAAI,EAAGA,EAAImwB,EAAKxwB,OAAQK,IAC/BP,EAAO0wB,EAAKnwB,IAAM27C,EAAO37C,GAE3B,OAAOP,EAMH,SAAUw/C,EAAOC,OAAgB,wDACrC,IAAK,IAAIl/C,EAAI,EAAGA,EAAIm/C,EAAQx/C,OAAQK,IAGlC,IAFA,IAAIo/C,EAAYD,EAAQn/C,GACpBq/C,EAAiBlvB,EAAKivB,GACjBr6C,EAAI,EAAGA,EAAIs6C,EAAe1/C,OAAQoF,IAAK,CAC9C,IAAIyX,EAAU6iC,EAAet6C,GAC7Bm6C,EAAO1iC,GAAW4iC,EAAU5iC,GAGhC,OAAO0iC,EAMH,SAAUI,EACdJ,OACA,wDAEA,IAAK,IAAIl/C,EAAI,EAAGA,EAAIm/C,EAAQx/C,OAAQK,IAGlC,IAFA,IAAIo/C,EAAYD,EAAQn/C,GACpBq/C,EAAiBlvB,EAAKivB,GACjBr6C,EAAI,EAAGA,EAAIs6C,EAAe1/C,OAAQoF,IAAK,CAC9C,IAAIyX,EAAU6iC,EAAet6C,GACxBk4C,EAAIiC,EAAQ1iC,KACf0iC,EAAO1iC,GAAW4iC,EAAU5iC,IAIlC,OAAO0iC,EAGH,SAAUK,QAAS,sDACvB,OAAOD,EAAkB5iB,MAAM,KAAM,CAAC,IAAI7sB,OAAOsvC,IAG7C,SAAUK,EACdx9C,EACAy9C,GAEA,IAAIhgD,EAAsC,GAa1C,OAXA28C,EAAQp6C,GAAK,SAACqvB,GACZ,IAAIquB,EAAeD,EAAapuB,GAC5BsuB,EAAelgD,EAAOigD,GAEtBC,EACFA,EAAarxC,KAAK+iB,GAElB5xB,EAAOigD,GAAgB,CAACruB,MAIrB5xB,EAOH,SAAUmgD,EAAMC,EAAcC,GAGlC,IAFA,IAAIrgD,EAAS69C,EAASuC,GAClBE,EAAQ5vB,EAAK2vB,GACR9/C,EAAI,EAAGA,EAAI+/C,EAAMpgD,OAAQK,IAAK,CACrC,IAAIiV,EAAM8qC,EAAM//C,GACZ6G,EAAQi5C,EAAK7qC,GACjBxV,EAAOwV,GAAOpO,EAGhB,OAAOpH,EAGH,SAAUugD,KAEV,SAAUC,EAAS5uB,GACvB,OAAOA,EAMH,SAAU6uB,EAAaC,GAE3B,IADA,IAAM1gD,EAAS,GACNO,EAAI,EAAGA,EAAImgD,EAASxgD,OAAQK,IAAK,CACxC,IAAMogD,EAAWD,EAASngD,GAC1BP,EAAO6O,UAAkBhG,IAAb83C,EAAyBA,OAAW93C,GAElD,OAAO7I,EAGH,SAAU4gD,EAAY90C,GAEtBmU,SAAWA,QAAQ5F,OACrB4F,QAAQ5F,MAAM,UAAUvO,GAItB,SAAU+0C,EAAc/0C,GAExBmU,SAAWA,QAAQG,MAErBH,QAAQG,KAAK,YAAYtU,GAIvB,SAAUg1C,IACd,MAAsB,oBAAR3f,IAGV,SAAU4f,EAAYC,EAAkBC,GAC5CA,EAAUtE,SAAQ,SAACuE,GACjB,IAAMC,EAAYD,EAASnmB,UAC3BtiB,OAAO2oC,oBAAoBD,GAAWxE,SAAQ,SAAC0E,GAC7C,GAAiB,gBAAbA,EAAJ,CAIA,IAAMC,EAAqB7oC,OAAO2rB,yBAChC+c,EACAE,GAIAC,IACCA,EAAmBhe,KAAOge,EAAmB/d,KAE9C9qB,OAAO6rB,eACL0c,EAAYjmB,UACZsmB,EACAC,GAGFN,EAAYjmB,UAAUsmB,GAAYH,EAASnmB,UAAUsmB,UAOvD,SAAUE,EAAiBC,GAC/B,SAASC,KAETA,EAAgB1mB,UAAYymB,EAC5B,IAAME,EAAe,IAAID,EACzB,SAASE,IACP,cAAcD,EAAaE,IAO7B,OAHAD,IACAA,IAEOH,EAOH,SAAUK,EAAQt/C,GACtB,OAAOA,EAAIA,EAAIrC,OAAS,GAIpB,SAAU4hD,EAAS/d,GACvB,IAAMge,GAAQ,IAAIC,MAAOC,UACnB/qC,EAAM6sB,IAGZ,MAAO,CAAE7jB,MAFG,IAAI8hC,MAAOC,UACHF,EACE36C,MAAO8P,uoCCze/B,OAOC,WACA,aAEA,IAAIgrC,EAAS,GAAGv7C,eAGhB,SAASw7C,IAGR,IAFA,IAAIC,EAAU,GAEL7hD,EAAI,EAAGA,EAAI8hD,UAAUniD,OAAQK,IAAK,CAC1C,IAAI+hD,EAAMD,UAAU9hD,GACpB,GAAK+hD,EAAL,CAEA,IAAIC,SAAiBD,EAErB,GAAgB,WAAZC,GAAoC,WAAZA,EAC3BH,EAAQvzC,KAAKyzC,QACP,GAAI3gD,MAAM86C,QAAQ6F,IACxB,GAAIA,EAAIpiD,OAAQ,CACf,IAAIynB,EAAQw6B,EAAWllB,MAAM,KAAMqlB,GAC/B36B,GACHy6B,EAAQvzC,KAAK8Y,SAGT,GAAgB,WAAZ46B,EAAsB,CAChC,GAAID,EAAI/gD,WAAakX,OAAOsiB,UAAUx5B,WAAa+gD,EAAI/gD,SAASA,WAAWihD,SAAS,iBAAkB,CACrGJ,EAAQvzC,KAAKyzC,EAAI/gD,YACjB,SAGD,IAAK,IAAIiU,KAAO8sC,EACXJ,EAAO/jC,KAAKmkC,EAAK9sC,IAAQ8sC,EAAI9sC,IAChC4sC,EAAQvzC,KAAK2G,KAMjB,OAAO4sC,EAAQ9vC,KAAK,KAGgBxR,EAAOC,SAC3CohD,EAAWM,QAAUN,EACrBrhD,EAAOC,QAAUohD,QAGX,kBACL,OAAOA,GADF,QAAe,OAAf,aA9CP,oCCODphD,EAAQ,EAkCR,SAAeL,EAAK4K,GAClB,GAAmB,kBAAR5K,EACT,MAAM,IAAIgiD,UAAU,iCAQtB,IALA,IAAIjiC,EAAM,GACNkiC,EAAMr3C,GAAW,GACjBs3C,EAAQliD,EAAImiD,MAAMC,GAClBC,EAAMJ,EAAIK,QAAUA,EAEfziD,EAAI,EAAGA,EAAIqiD,EAAM1iD,OAAQK,IAAK,CACrC,IAAI0iD,EAAOL,EAAMriD,GACb2iD,EAASD,EAAK1vC,QAAQ,KAG1B,KAAI2vC,EAAS,GAAb,CAIA,IAAI1tC,EAAMytC,EAAKpiD,OAAO,EAAGqiD,GAAQC,OAC7BjsC,EAAM+rC,EAAKpiD,SAASqiD,EAAQD,EAAK/iD,QAAQijD,OAGzC,KAAOjsC,EAAI,KACbA,EAAMA,EAAI7W,MAAM,GAAI,SAIlBwI,GAAa4X,EAAIjL,KACnBiL,EAAIjL,GAAO4tC,EAAUlsC,EAAK6rC,KAI9B,OAAOtiC,GAlET1f,EAAQ,EAqFR,SAAmBuC,EAAM4T,EAAK5L,GAC5B,IAAIq3C,EAAMr3C,GAAW,GACjB+3C,EAAMV,EAAIW,QAAUA,EAExB,GAAmB,oBAARD,EACT,MAAM,IAAIX,UAAU,4BAGtB,IAAKa,EAAmBtyC,KAAK3N,GAC3B,MAAM,IAAIo/C,UAAU,4BAGtB,IAAIt7C,EAAQi8C,EAAInsC,GAEhB,GAAI9P,IAAUm8C,EAAmBtyC,KAAK7J,GACpC,MAAM,IAAIs7C,UAAU,2BAGtB,IAAIhiD,EAAM4C,EAAO,IAAM8D,EAEvB,GAAI,MAAQu7C,EAAIa,OAAQ,CACtB,IAAIA,EAASb,EAAIa,OAAS,EAE1B,GAAIviD,MAAMuiD,KAAY1+C,SAAS0+C,GAC7B,MAAM,IAAId,UAAU,4BAGtBhiD,GAAO,aAAeW,KAAKC,MAAMkiD,GAGnC,GAAIb,EAAIc,OAAQ,CACd,IAAKF,EAAmBtyC,KAAK0xC,EAAIc,QAC/B,MAAM,IAAIf,UAAU,4BAGtBhiD,GAAO,YAAciiD,EAAIc,OAG3B,GAAId,EAAIvrC,KAAM,CACZ,IAAKmsC,EAAmBtyC,KAAK0xC,EAAIvrC,MAC/B,MAAM,IAAIsrC,UAAU,0BAGtBhiD,GAAO,UAAYiiD,EAAIvrC,KAGzB,GAAIurC,EAAIe,QAAS,CACf,GAAuC,oBAA5Bf,EAAIe,QAAQC,YACrB,MAAM,IAAIjB,UAAU,6BAGtBhiD,GAAO,aAAeiiD,EAAIe,QAAQC,cAGhChB,EAAIiB,WACNljD,GAAO,cAGLiiD,EAAIkB,SACNnjD,GAAO,YAGT,GAAIiiD,EAAImB,SAAU,CAIhB,OAHuC,kBAAjBnB,EAAImB,SACtBnB,EAAImB,SAASr6C,cAAgBk5C,EAAImB,UAGnC,KAAK,EACHpjD,GAAO,oBACP,MACF,IAAK,MACHA,GAAO,iBACP,MACF,IAAK,SACHA,GAAO,oBACP,MACF,IAAK,OACHA,GAAO,kBACP,MACF,QACE,MAAM,IAAIgiD,UAAU,+BAI1B,OAAOhiD,GAlKT,IAAIsiD,EAASe,mBACTT,EAASU,mBACTlB,EAAkB,MAUlBS,EAAqB,wCAiKzB,SAASH,EAAU1iD,EAAKsiD,GACtB,IACE,OAAOA,EAAOtiD,GACd,MAAO6G,GACP,OAAO7G,0ICpMLujD,EAAAA,SAAAA,kCAQF,WAAY5pC,EAAOvO,EAAK4I,GAAS,MAE7B,OAF6B,UAC7B,cAAM5I,GACK,MAAPA,GAA0B,MAAX4I,GAAmBuvC,EAAaC,SAAS1G,IAAInjC,GACrD,EAAP,EAAO4pC,EAAaC,SAAS5gB,IAAIjpB,KACrB,MAAPvO,GAA0B,MAAX4I,GACpB,EAAKyvC,OAAS9pC,EACd4pC,EAAaC,SAAS3gB,IAAIlpB,EAA1B,OAEA,EAAK8pC,OAAS9pC,EAElB,EAAK3F,QAAUA,EAVc,gCAiBjC,WACI,OAAOvK,KAAKg6C,yBAEhB,WACI,OAAOh6C,KAAKg6C,6BAQhB,SAAOC,GACH,OAAOA,aAAeH,GAAgBG,EAAID,SAAWh6C,KAAKg6C,+BAO9D,WACI,OAAOh6C,KAAKg6C,aA9CdF,qBAAqBj8C,QAkD3Bi8C,EAAaC,SAAW,IAAI/iB,IAM5B8iB,EAAaI,KAAO,IAAIJ,EAAa,WAMrCA,EAAa73C,GAAK,IAAI63C,EAAa,QAMnCA,EAAapgB,KAAO,IAAIogB,EAAa,UAMrCA,EAAaK,KAAO,IAAIL,EAAa,UAMrCA,EAAaM,IAAM,IAAIN,EAAa,SAMpCA,EAAaO,IAAM,IAAIP,EAAa,SAMpCA,EAAaQ,MAAQ,IAAIR,EAAa,WAQtCA,EAAaS,gBAAkB,SAAC5gB,GAC5B,OAAO,IAAImgB,EAAa,SAAjB,mBAAuCngB,EAAvC,0BASXmgB,EAAaU,cAAgB,SAAC7gB,GAC1B,OAAO,IAAImgB,EAAa,OAAjB,mBAAqCngB,EAArC,8BASXmgB,EAAaW,YAAc,SAAC1kB,GACxB,IAAO2kB,EAASC,EAAQ,MAAjBD,MACP,OAAO,IAAIZ,EAAa,OAAjB,wBAA0C/jB,EAAKr+B,KAAI,SAAAygD,GAAG,OAAIuC,EAAMvC,MAAMhwC,KAAK,MAA3E,kBAWX2xC,EAAac,MAAQ,SAACj5C,EAAK4I,GACvB,OAAO,IAAIuvC,EAAa,UAAWn4C,EAAK4I,IAG5C5T,EAAOC,QAAUkjD,uBC5IjB,IAAMA,EAAea,EAAQ,MAC7B,EAAgCA,EAAQ,MAAjCE,EAAP,EAAOA,eAAgBH,EAAvB,EAAuBA,MACjBI,EAAID,EAEJE,EAAa,MACbC,EAAQ,IAAInD,KAAKA,KAAKoD,IAAI,KAAM,EAAG,IACnCC,EAAc,MAChBx8C,EAAW,EAAG,OAAGA,OAAWA,OAAWA,OAAWA,OAAWA,OAAWA,OACxEA,OAAWA,OAAWA,EAAW,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACjDy8C,EAAa,MACfz8C,EACA,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,QACnBA,OACAA,OACAA,OACAA,OACAA,OACAA,OACAA,EACA,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAEjB08C,EAAgB,MAClB18C,EACA,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,QACJA,OACAA,OACAA,EACA,CAAC,GACD,CAAC,GACD,CAAC,GACD,CAAC,GACD,CAAC,GACD,CAAC,GACD,CAAC,IAIC28C,EAAY,4DAEZC,EAAa,oDAEbC,EAAa,iIAEbC,EAAa,iIA2CnB,SAASC,EAASC,GACd,IAAMC,EAASD,GAAQ,WAAiB,EAAI,EAC5C,OAAOxkD,KAAKC,OAAOukD,EAAOV,GAAS,OAAYW,EAkBnD,SAASC,EAAmBC,GACxB,GAAIA,aAA0BhE,KAAM,MAAO,CAAC6D,KAAMG,GAClDA,EAAiBf,EAAEhkC,OAAO+kC,GAC1B,IAAwBH,EAApBI,GAAc,EAclB,OAbKhlD,MAAM+kD,IAKPH,EApDR,SAAmB1wC,GACf,IAAM+wC,EAAM/wC,EAAKoF,MAAMirC,GACvB,GAAKU,EAAL,CAGA,IAAMC,EAAUD,EAAI,GAAKA,EAAI,GAAK,MAC5BE,EAAUF,EAAI,GAAKA,EAAI,GAAK,MAC5BG,EAAOH,EAAI,GAAK,IAAMA,EAAI,GAAK,GAE/BL,EAAO,IAAI7D,KAAKA,KAAKsE,MAAL,mBAAuBJ,EAAI,GAAKC,EAAUC,EAAUC,EAApD,UAClBE,EAAM,IAAIvE,KAId,OAHAuE,EAAM,IAAIvE,KAAKA,KAAKoD,IAAImB,EAAIC,cAAeD,EAAIE,WAAYF,EAAIG,UAC3DH,EAAII,WAAYJ,EAAIK,aAAcL,EAAIM,aAAcN,EAAIO,oBAErD,IAAI9E,KAAKA,KAAKoD,IAAImB,EAAIQ,iBAAkBR,EAAIS,cAAeT,EAAIU,aAClEpB,EAAKqB,cAAerB,EAAKsB,gBAAiBtB,EAAKuB,gBAAiBvB,EAAKwB,wBAqC9DC,CAAUtB,IAKbC,GAAc,EAFdJ,EAzEZ,SAA6B1wC,GACzB,IAAMoyC,EAAOpyC,EAAKoF,MAAMkrC,GAClB+B,EAAOryC,EAAKoF,MAAMmrC,GAClB+B,EAAOtyC,EAAKoF,MAAMorC,GAQxB,OAPI4B,EACApyC,EAAOoyC,EAAK,GAAKA,EAAK,IAAK,IAAIvF,MAAOwE,cAAgBe,EAAK,GACpDC,EACPryC,EAAOqyC,EAAK,GAAKA,EAAK,IAAK,IAAIxF,MAAOwE,cAAgBgB,EAAK,GACpDC,IACPtyC,EAAOsyC,EAAK,GAAKA,EAAK,IAAK,IAAIzF,MAAOwE,cAAgBiB,EAAK,IAExD,IAAIzF,KAAKA,KAAKsE,MAAL,UAAcnxC,EAAd,UA8DDuyC,CAAoB1B,GAN/BH,EAhBR,SAAgB8B,GACZ,GAAIA,EAAS,EACT,MAAM1D,EAAaQ,MAEvB,OAAIkD,GAAU,GACH,IAAI3F,KAAKmD,EAAMlD,UAA2B,OAAd0F,EAAS,IAEzC,IAAI3F,KAAKmD,EAAMlD,UAA2B,OAAd0F,EAAS,IASjCC,CADP5B,EAAiB9kD,OAAO8kD,IAYrB,CAACH,KAAAA,EAAMI,YAAAA,GAGlB,SAAS4B,EAAU7B,GACf,OAAOD,EAAmBC,GAAgBH,KAG9C,SAASiC,EAAsBC,EAAOC,GAClC,OAAOD,EAAMhB,mBAAqBiB,EAAMjB,kBACpCgB,EAAMf,gBAAkBgB,EAAMhB,eAC9Be,EAAMd,eAAiBe,EAAMf,aAUrC,IAAMgB,EAAgB,CAClBC,KAAM,SAACC,EAAMC,EAAOC,GAIhB,GAHAF,EAAOlD,EAAEhkC,OAAOknC,EAAMtD,EAAMyD,QAC5BF,EAAQnD,EAAEhkC,OAAOmnC,EAAOvD,EAAMyD,QAC9BD,EAAMpD,EAAEhkC,OAAOonC,EAAKxD,EAAMyD,QACtBH,EAAO,GAAKA,GAAQ,IACpB,MAAMlE,EAAaM,IAOvB,OAJI4D,EAAO,OACPA,GAAQ,MAGLvC,EAAS5D,KAAKoD,IAAI+C,EAAMC,EAAQ,EAAGC,KAG9CE,QAAS,SAACC,EAAWC,EAASC,GAK1B,GAJAF,EAAYX,EAAUW,GACtBC,EAAUZ,EAAUY,GACpBC,EAAOzD,EAAEhkC,OAAOynC,EAAM7D,EAAM8D,QAAQl/C,cAEhC++C,EAAYC,EACZ,MAAMxE,EAAaM,IACvB,IAAMqE,EAAWH,EAAQ1B,iBAAmByB,EAAUzB,iBAChD8B,EAAYJ,EAAQzB,cAAgBwB,EAAUxB,cAC9C8B,EAAUL,EAAQxB,aAAeuB,EAAUvB,aAEjD,OAAQyB,GACJ,IAAK,IAED,OADSG,EAAY,GAAmB,IAAdA,GAAmBC,EAAU,GAAK,EAAI,GAChDF,EACpB,IAAK,IAED,OAAkB,GAAXA,EAAgBC,GADdC,EAAU,GAAK,EAAI,GAEhC,IAAK,IACD,OAAOznD,KAAKC,MAAMmnD,EAAUD,GAAatD,EAC7C,IAAK,KAQD,OANAsD,EAAUO,eAAeN,EAAQ1B,kBAC7B+B,EAAU,EACVN,EAAUQ,YAAYP,EAAQzB,cAAgB,GAE9CwB,EAAUQ,YAAYP,EAAQzB,eAE3B3lD,KAAKC,MAAMmnD,EAAUD,GAAatD,EAC7C,IAAK,KAGD,QADS4D,EAAU,GAAK,EAAI,GACA,GAAXF,EAAgBC,GAAa,GAClD,IAAK,KAOD,OALIA,EAAY,GAAmB,IAAdA,GAAmBC,EAAU,EAC9CN,EAAUO,eAAeN,EAAQ1B,iBAAmB,GAEpDyB,EAAUO,eAAeN,EAAQ1B,kBAE9B1lD,KAAKC,MAAMmnD,EAAUD,GAAatD,IAUrD+D,UAAW,SAACC,GAER,MAA4BnD,EAD5BmD,EAAWjE,EAAEhkC,OAAOioC,EAAUrE,EAAM8D,SAC7B9C,EAAP,EAAOA,KACP,IADA,EAAaI,YACK,OAAO,EACzB,IAAM0B,EAAS/B,EAASC,GACxB,GAAI8B,EAAS,GAAKA,EAAS,QACvB,MAAM1D,EAAaQ,MACvB,OAAOkD,GAGXwB,IAAK,SAAAnD,GAED,OADa6B,EAAU7B,GACXiB,cAGhBmC,KAAM,SAACX,EAASD,GACZC,EAAUZ,EAAUY,GAEpB,IAAIjsC,EAAS,EAIb,OALAgsC,EAAYX,EAAUW,KAEL,aAAkB,WAAgBC,IAC/CjsC,EAAS,GAENnb,KAAKC,MAAMmnD,EAAUD,GAAatD,EAAa1oC,GAG1D6sC,QAAS,SAACb,EAAWC,EAASa,GAC1Bd,EAAYX,EAAUW,GACtBC,EAAUZ,EAAUY,GAEpBa,EAASrE,EAAEhkC,OAAOqoC,EAAQzE,EAAM0E,SAAS,GAEV,KAA3Bf,EAAUvB,cACVuB,EAAUgB,WAAW,KAEpBF,GAAUd,EAAUvB,aAAe,IAAMwB,EAAQxB,aAAe,GACjEwB,EAAQO,YAAYP,EAAQzB,cAAgB,EAAG,GAGlB,KAAzByB,EAAQxB,cACRwB,EAAQe,WAAW,IAI3B,IAAMZ,EAAWH,EAAQ1B,iBAAmByB,EAAUzB,iBAItD,OAAqB,IAHH0B,EAAQzB,cAAgBwB,EAAUxB,gBACpCyB,EAAQxB,aAAeuB,EAAUvB,cAEF,GAAX2B,EAAgB,IAGxDa,MAAO,SAACjB,EAAWkB,GAIf,OAHAlB,EAAYX,EAAUW,GACtBkB,EAASzE,EAAEhkC,OAAOyoC,EAAQ7E,EAAMyD,QAChCE,EAAUQ,YAAYR,EAAUxB,cAAgB0C,GACzC9D,EAAS4C,IAGpBmB,QAAS,SAACnB,EAAWkB,GAIjB,OAHAlB,EAAYX,EAAUW,GACtBkB,EAASzE,EAAEhkC,OAAOyoC,EAAQ7E,EAAMyD,QAChCE,EAAUQ,YAAYR,EAAUxB,cAAgB0C,EAAS,EAAG,GACrD9D,EAAS4C,IAGpBoB,KAAM,SAAA5D,GAEF,OADa6B,EAAU7B,GACXkB,eAGhB2C,WAAY,SAAC7D,GACT,IAAMH,EAAOgC,EAAU7B,GAGjB8D,EAAI,IAAI9H,KAAKA,KAAKoD,IAAIS,EAAKW,cAAeX,EAAKY,WAAYZ,EAAKa,YAChEqD,EAASD,EAAEE,YACjBF,EAAEN,WAAWM,EAAE7C,aAAe,EAAI8C,GAClC,IAAME,EAAY,IAAIjI,KAAKA,KAAKoD,IAAI0E,EAAE/C,iBAAkB,EAAG,IAC3D,OAAO1lD,KAAK6oD,OAAQJ,EAAIG,GAAa,MAAY,GAAK,IAG1DE,OAAQ,SAAAnE,GAEJ,OADa6B,EAAU7B,GACXmB,iBAGhBiD,MAAO,SAAApE,GAEH,OADa6B,EAAU7B,GACXgB,cAAgB,GAGhCqD,YAAa,SAAC7B,EAAWC,EAAS6B,GAG9B,IAAIvnD,EAAO,EACX,IAHAylD,EAAYX,EAAUW,KACtBC,EAAUZ,EAAUY,IAEK,CACrB1lD,GAAQ,EACR,IAAMwnD,EAAO/B,EACbA,EAAYC,EACZA,EAAU8B,EAEd,IAAMC,EAAc,GACJ,MAAZF,GACArF,EAAEwF,cAAc,CAACH,GAAWzF,EAAMyD,QAAQ,GAAO,SAAA12B,GAC7C44B,EAAY37C,KAAKg5C,EAAUj2B,OAInC,IADA,IAAI84B,EAAc,EACXlC,GAAaC,GAAS,CAEzB,GAA8B,IAA1BD,EAAUwB,aAA+C,IAA1BxB,EAAUwB,YAAmB,CAE5D,IADA,IAAIhgD,GAAQ,EACHzJ,EAAI,EAAGA,EAAIiqD,EAAYtqD,OAAQK,IACpC,GAAIunD,EAAsBU,EAAWgC,EAAYjqD,IAAK,CAClDyJ,GAAQ,EACR,MAGHA,GAAO0gD,IAEhBlC,EAAUgB,WAAWhB,EAAUvB,aAAe,GAElD,OAAOlkD,EAAO2nD,GAIlB,mBAAoB,SAAClC,EAAWC,EAASkC,EAASL,GAG9C,IAAIvnD,EAAO,EACX,IAHAylD,EAAYX,EAAUW,KACtBC,EAAUZ,EAAUY,IAEK,CACrB1lD,GAAQ,EACR,IAAMwnD,EAAO/B,EACbA,EAAYC,EACZA,EAAU8B,EAId,GAAgB,aAFhBI,EAAU1F,EAAEhkC,OAAO0pC,EAAS,KAAM,IAG9B,OAAO,EAGX,GAAuB,kBAAZA,GAAwBzpD,OAAOypD,GAASppD,aAAeopD,EAAS,CACvE,GAAuB,IAAnBA,EAAQzqD,OAAc,MAAM+jD,EAAaQ,MAC7CkG,EAAUA,EAAQzyC,OAAO,GAAKyyC,EAAQtqD,MAAM,EAAG,GAE/C,IADA,IAAMuqD,EAAa,GACVrqD,EAAI,EAAGA,EAAIoqD,EAAQzqD,OAAQK,IACN,MAAtBoqD,EAAQzyC,OAAO3X,IACfqqD,EAAW/7C,KAAKtO,GAExBoqD,EAAUC,MACP,CAEH,GAAuB,kBAAZD,EACP,MAAM1G,EAAaQ,MACvBkG,EAAUpF,EAAcoF,GAG5B,IAAMH,EAAc,GACJ,MAAZF,GACArF,EAAEwF,cAAc,CAACH,GAAWzF,EAAMyD,QAAQ,GAAO,SAAA12B,GAC7C44B,EAAY37C,KAAKg5C,EAAUj2B,OAInC,IADA,IAAI84B,EAAc,EACXlC,GAAaC,GAAS,CAEzB,IADA,IAAIoC,GAAO,EACFtqD,EAAI,EAAGA,EAAIoqD,EAAQzqD,OAAQK,IAChC,GAAIoqD,EAAQpqD,KAAOioD,EAAUwB,YAAa,CACtCa,GAAO,EACP,MAIR,IAAKA,EAAM,CAEP,IADA,IAAI7gD,GAAQ,EACHzJ,EAAI,EAAGA,EAAIiqD,EAAYtqD,OAAQK,IACpC,GAAIunD,EAAsBU,EAAWgC,EAAYjqD,IAAK,CAClDyJ,GAAQ,EACR,MAGHA,GAAO0gD,IAEhBlC,EAAUgB,WAAWhB,EAAUvB,aAAe,GAElD,OAAOlkD,EAAO2nD,GAIlBI,IAAK,WACD,IAAMvE,EAAM,IAAIvE,KAChB,OAAO4D,EAAS5D,KAAKoD,IAAImB,EAAIC,cAAeD,EAAIE,WAAYF,EAAIG,UAC5DH,EAAII,WAAYJ,EAAIK,aAAcL,EAAIM,aAAcN,EAAIO,qBACrD,KAAOP,EAAII,WAAa,GAAKJ,EAAIK,aAAeL,EAAIM,cAAgB,OAG/EkE,OAAQ,SAAC/E,GAEL,OADa6B,EAAU7B,GACXoB,iBAGhB4D,KAAM,SAACC,EAAMC,EAAQC,GAKjB,GAJAF,EAAOhG,EAAEhkC,OAAOgqC,EAAMpG,EAAMyD,QAC5B4C,EAASjG,EAAEhkC,OAAOiqC,EAAQrG,EAAMyD,QAChC6C,EAASlG,EAAEhkC,OAAOkqC,EAAQtG,EAAMyD,QAE5B2C,EAAO,GAAKA,EAAO,OAASC,EAAS,GAAKA,EAAS,OAASC,EAAS,GAAKA,EAAS,MACnF,MAAMlH,EAAaM,IACvB,OAAQ,KAAO0G,EAAO,GAAKC,EAASC,GAAU,OAGlDC,UAAW,SAACC,GAER,OAAQ,MADRA,EAAWxD,EAAUwD,IACGnE,cAAgB,GAAKmE,EAASlE,gBAAkBkE,EAASjE,iBAAmB,OAGxGkE,MAAO,WACH,IAAM/E,EAAM,IAAIvE,KAChB,OAAO4D,EAAS5D,KAAKoD,IAAImB,EAAIC,cAAeD,EAAIE,WAAYF,EAAIG,aAGpE6E,QAAS,SAACvF,EAAgBwF,GACtB,IAAM3F,EAAOgC,EAAU7B,GACvBwF,EAAavG,EAAEhkC,OAAOuqC,EAAY3G,EAAMyD,OAAQ,GAEhD,IAAMD,EAAMxC,EAAKmE,YACXyB,EAAYnG,EAAWkG,GAC7B,IAAKC,EACD,MAAMxH,EAAaM,IACvB,OAAOkH,EAAUpD,IAIrBqD,QAAS,SAAC1F,EAAgBwF,GACtB,IAAM3F,EAAOgC,EAAU7B,GAEvB,GAAmB,MADnBwF,EAAavG,EAAEhkC,OAAOuqC,EAAY3G,EAAMyD,OAAQ,IAE5C,OAAOL,EAAc4B,WAAW7D,GAEpC,IAAM2F,EAAYtG,EAAYmG,GACxBvB,EAAY,IAAIjI,KAAKA,KAAKoD,IAAIS,EAAKkB,iBAAkB,EAAG,IACxDvqC,EAASytC,EAAUD,YAAc2B,EAAY,EAAI,EACvD,OAAOtqD,KAAK6oD,OAAQrE,EAAOoE,GAAa,MAAY,GAAK,GAAKztC,GAGlEovC,QAAS,SAACpD,EAAWqD,EAAMvB,GACvB,OAAOrC,EAAc,gBAAgBO,EAAWqD,EAAM,EAAGvB,IAG7D,eAAgB,SAAC9B,EAAWqD,EAAMlB,EAASL,GAMvC,GALA9B,EAAYX,EAAUW,GACtBqD,EAAO5G,EAAEhkC,OAAO4qC,EAAMhH,EAAMyD,QAIZ,aAFhBqC,EAAU1F,EAAEhkC,OAAO0pC,EAAS,KAAM,IAG9B,MAAM1G,EAAaQ,MAGvB,GAAuB,kBAAZkG,GAAwBzpD,OAAOypD,GAASppD,aAAeopD,EAAS,CACvE,GAAuB,IAAnBA,EAAQzqD,OACR,MAAM+jD,EAAaQ,MACvBkG,EAAUA,EAAQzyC,OAAO,GAAKyyC,EAAQtqD,MAAM,EAAG,GAE/C,IADA,IAAMuqD,EAAa,GACVrqD,EAAI,EAAGA,EAAIoqD,EAAQzqD,OAAQK,IACN,MAAtBoqD,EAAQzyC,OAAO3X,IACfqqD,EAAW/7C,KAAKtO,GAExBoqD,EAAUC,MACP,CAEH,GAAuB,kBAAZD,EACP,MAAM1G,EAAaQ,MAEvB,GAAe,OADfkG,EAAUpF,EAAcoF,IAEpB,MAAM1G,EAAaM,IAG3B,IAAMiG,EAAc,GACJ,MAAZF,GACArF,EAAEwF,cAAc,CAACH,GAAWzF,EAAMyD,QAAQ,GAAO,SAAA12B,GAC7C44B,EAAY37C,KAAKg5C,EAAUj2B,OAGnC42B,EAAUgB,WAAWhB,EAAUvB,aAAe,GAE9C,IADA,IAAI6E,EAAM,EACHA,EAAMD,GAAM,CAEf,IADA,IAAIhB,GAAO,EACFtqD,EAAI,EAAGA,EAAIoqD,EAAQzqD,OAAQK,IAChC,GAAIoqD,EAAQpqD,KAAOioD,EAAUwB,YAAa,CACtCa,GAAO,EACP,MAIR,IAAKA,EAAM,CAEP,IADA,IAAI7gD,GAAQ,EACHzJ,EAAI,EAAGA,EAAIiqD,EAAYtqD,OAAQK,IACpC,GAAIunD,EAAsBU,EAAWgC,EAAYjqD,IAAK,CAClDyJ,GAAQ,EACR,MAGHA,GAAO8hD,IAEhBtD,EAAUgB,WAAWhB,EAAUvB,aAAe,GAElD,OAAOrB,EAAS4C,GAAa,GAGjCuD,KAAM,SAAC/F,GAEH,OADa6B,EAAU7B,GACXe,kBAIhBiF,SAAU,SAACxD,EAAWC,EAASwD,GAG3B,IAFAzD,EAAYX,EAAUW,KACtBC,EAAUZ,EAAUY,IACK,CACrB,IAAM8B,EAAO/B,EACbA,EAAYC,EACZA,EAAU8B,EAKd,GAHA0B,EAAQhH,EAAEhkC,OAAOgrC,EAAOpH,EAAMyD,OAAQ,IACtC2D,EAAQ5qD,KAAK6qD,MAAMD,IAEP,GAAKA,EAAQ,EACrB,MAAMhI,EAAaQ,MAGvB,IApZY0D,EAoZRgE,EAAK3D,EAAUvB,aACbmF,EAAK5D,EAAUxB,cAAgB,EAC/BqF,EAAK7D,EAAUzB,iBACjBuF,EAAK7D,EAAQxB,aACXsF,EAAK9D,EAAQzB,cAAgB,EAC7BwF,EAAK/D,EAAQ1B,iBAEnB,OAAQkF,GACJ,KAAK,EAUD,OARW,KAAPE,GAAoB,KAAPG,GACbH,EAAK,GACLG,EAAK,IACS,KAAPH,EACPA,EAAK,GACS,KAAPA,GAAoB,KAAPG,IACpBA,EAAK,IAEFjrD,KAAKwD,IAAKynD,EAAU,GAALC,EAAe,IAALC,GAAaL,EAAU,GAALC,EAAe,IAALC,IAAa,IAC7E,KAAK,EAED,GAAIG,EAAKH,EAAK,EAAG,CACb,IAAMI,EAzaT,QADGtE,EA0a2BkE,IAtaC,IAArC,IAAIrK,KAAKmG,EAAM,EAAG,IAAI1B,YAsa4B,OAAP4F,EAAoB,IAAN,IAEhD,OADapE,EAAcmB,KAAKX,EAASD,GAC3BiE,EAEd,IAAMC,EAASF,EAAKH,EAAM,EAEpBM,GADQ,IAAI3K,KAAKwK,EAAK,EAAG,EAAG,GAAK,IAAIxK,KAAKqK,EAAI,EAAG,IAAM,IAAO,GAAK,GAAK,GACvDK,EACvB,OAAOzE,EAAcmB,KAAKX,EAASD,GAAamE,EAExD,KAAK,EAED,OAAOtrD,KAAKwD,IAAIojD,EAAcmB,KAAKX,EAASD,GAAa,KAC7D,KAAK,EAED,OAAOnnD,KAAKwD,IAAIojD,EAAcmB,KAAKX,EAASD,GAAa,KAC7D,KAAK,EAED,OAAOnnD,KAAKwD,IAAKynD,EAAU,GAALC,EAAe,IAALC,GAAaL,EAAU,GAALC,EAAe,IAALC,IAAa,OAKzFvrD,EAAOC,QAAUknD,wBCtlBjB,IAAMhE,EAAea,EAAQ,MAC7B,EAAgCA,EAAQ,MAAjCE,EAAP,EAAOA,eAAgBH,EAAvB,EAAuBA,MACjBI,EAAID,EACJ4H,EAAQ9H,EAAQ,MAChB+H,EAAgB/H,EAAQ,KAGxBgI,EAAwB,CAC1B,YAAa,SAACnqD,EAAGoqD,EAAOC,EAAMC,EAAYhpD,EAAGq7C,GAOzC,GANA38C,EAAIsiD,EAAEhkC,OAAOte,EAAGkiD,EAAMyD,QACtByE,EAAQ9H,EAAEhkC,OAAO8rC,EAAOlI,EAAMyD,QAC9B0E,EAAO/H,EAAEhkC,OAAO+rC,EAAMnI,EAAMyD,QAC5B2E,EAAahI,EAAEhkC,OAAOgsC,EAAYpI,EAAM0E,SACxCtlD,EAAIghD,EAAEhkC,OAAOhd,EAAG4gD,EAAMyD,OAAQ,GAC9BhJ,EAAI2F,EAAEhkC,OAAOq+B,EAAGuF,EAAMyD,OAAQ,GAC1ByE,GAAS,GAAKC,GAAQ,GAAKrqD,EAAIsB,GAAKtB,EAAI28C,GAAKr7C,IAAMq7C,EACnD,MAAM2E,EAAaM,IAGvB,OADA5hD,GAAKA,EAAIsB,IAAMq7C,EAAIr7C,GACZgpD,EAAaL,EAAMI,KAAKE,IAAIvqD,EAAGoqD,EAAOC,GAAQJ,EAAMI,KAAKG,IAAIxqD,EAAGoqD,EAAOC,IAAS1N,EAAIr7C,IAG/F,WAAY,SAACmpD,EAAaL,EAAOC,EAAM/oD,EAAGq7C,GAMtC,GALA8N,EAAcnI,EAAEhkC,OAAOmsC,EAAavI,EAAMyD,QAC1CyE,EAAQ9H,EAAEhkC,OAAO8rC,EAAOlI,EAAMyD,QAC9B0E,EAAO/H,EAAEhkC,OAAO+rC,EAAMnI,EAAMyD,QAC5BrkD,EAAIghD,EAAEhkC,OAAOhd,EAAG4gD,EAAMyD,OAAQ,GAC9BhJ,EAAI2F,EAAEhkC,OAAOq+B,EAAGuF,EAAMyD,OAAQ,GAC1ByE,GAAS,GAAKC,GAAQ,GAAKI,GAAe,GAAKA,EAAc,EAC7D,MAAMnJ,EAAaM,IACvB,OAAOqI,EAAMI,KAAKK,IAAID,EAAaL,EAAOC,IAAS1N,EAAIr7C,GAAKA,GAGhE,aAAc,SAACqpD,EAASC,EAAQC,EAAcP,GAK1C,GAJAK,EAAUrI,EAAEhkC,OAAOqsC,EAASzI,EAAMyD,QAClCiF,EAAStI,EAAEhkC,OAAOssC,EAAQ1I,EAAMyD,QAChCkF,EAAevI,EAAEhkC,OAAOusC,EAAc3I,EAAMyD,QAC5C2E,EAAahI,EAAEhkC,OAAOgsC,EAAYpI,EAAM0E,SACpCgE,EAAS,GAAKC,EAAe,GAAKA,EAAe,GAAKF,EAAU,GAAKA,EAAUC,EAC/E,MAAMtJ,EAAaM,IAEvB,OAAO0I,EAAaL,EAAMa,SAASP,IAAII,EAASC,EAAQC,GAClDZ,EAAMa,SAASN,IAAIG,EAASC,EAAQC,IAG9C,mBAAoB,SAACD,EAAQC,EAAcF,EAASI,GAKhD,GAJAH,EAAStI,EAAEhkC,OAAOssC,EAAQ1I,EAAMyD,QAChCkF,EAAevI,EAAEhkC,OAAOusC,EAAc3I,EAAMyD,QAC5CgF,EAAUrI,EAAEhkC,OAAOqsC,EAASzI,EAAMyD,QAClCoF,EAAWzI,EAAEhkC,OAAOysC,EAAU7I,EAAMyD,OAAQgF,GACxCC,EAAS,GAAKC,EAAe,GAAKA,EAAe,GAAKF,EAAU,GAAKA,EAAUC,GAAUG,EAAWJ,GAAWI,EAAWH,EAC1H,MAAMtJ,EAAaM,IAGvB,IADA,IAAIvkD,EAAS,EACJO,EAAI+sD,EAAS/sD,GAAKmtD,EAAUntD,IACjCP,GAAU6sD,EAAcc,OAAOJ,EAAQhtD,GAAKc,KAAKw0C,IAAI2X,EAAcjtD,GAAKc,KAAKw0C,IAAI,EAAI2X,EAAcD,EAAShtD,GAEhH,OAAOP,GAGX,YAAa,SAACutD,EAAQC,EAAcT,GAIhC,GAHAQ,EAAStI,EAAEhkC,OAAOssC,EAAQ1I,EAAMyD,QAChCkF,EAAevI,EAAEhkC,OAAOusC,EAAc3I,EAAMyD,QAC5CyE,EAAQ9H,EAAEhkC,OAAO8rC,EAAOlI,EAAMyD,QAC1BiF,EAAS,GAAKC,EAAe,GAAKA,EAAe,GAAKT,EAAQ,GAAKA,EAAQ,EAC3E,MAAM9I,EAAaM,IAGvB,IADA,IAAI5hD,EAAI,EACDA,GAAK4qD,GAAQ,CAChB,GAAIX,EAAMa,SAASP,IAAIvqD,EAAG4qD,EAAQC,IAAiBT,EAC/C,OAAOpqD,EAEXA,MAIR,aAAc,SAACA,EAAGirD,EAAYX,GAK1B,GAJAtqD,EAAIsiD,EAAEhkC,OAAOte,EAAGkiD,EAAMyD,QACtBsF,EAAa3I,EAAEhkC,OAAO2sC,EAAY/I,EAAMyD,QACxC2E,EAAahI,EAAEhkC,OAAOgsC,EAAYpI,EAAMyD,QACxCsF,EAAavsD,KAAK6qD,MAAM0B,GACpBjrD,EAAI,GAAKirD,EAAa,GAAKA,EAAa,KAAH,IAAG,GAAM,IAC9C,MAAM3J,EAAaM,IAEvB,OAAO0I,EAAaL,EAAMiB,UAAUX,IAAIvqD,EAAGirD,GAAchB,EAAMiB,UAAUV,IAAIxqD,EAAGirD,IAGpF,gBAAiB,SAACjrD,EAAGirD,GAIjB,GAHAjrD,EAAIsiD,EAAEhkC,OAAOte,EAAGkiD,EAAMyD,QACtBsF,EAAa3I,EAAEhkC,OAAO2sC,EAAY/I,EAAMyD,QACxCsF,EAAavsD,KAAK6qD,MAAM0B,GACpBjrD,EAAI,GAAKirD,EAAa,GAAKA,EAAa,KAAH,IAAG,GAAM,IAC9C,MAAM3J,EAAaM,IAEvB,OAAO,EAAIqI,EAAMiB,UAAUX,IAAIvqD,EAAGirD,IAGtC,YAAa,SAACR,EAAaQ,GAIvB,GAHAR,EAAcnI,EAAEhkC,OAAOmsC,EAAavI,EAAMyD,QAC1CsF,EAAa3I,EAAEhkC,OAAO2sC,EAAY/I,EAAMyD,QACxCsF,EAAavsD,KAAK6qD,MAAM0B,GACpBR,EAAc,GAAKA,EAAc,GAAKQ,EAAa,GAAKA,EAAa,KAAH,IAAG,GAAM,IAC3E,MAAM3J,EAAaM,IAEvB,OAAOqI,EAAMiB,UAAUR,IAAID,EAAaQ,IAG5C,eAAgB,SAACR,EAAaQ,GAI1B,GAHAR,EAAcnI,EAAEhkC,OAAOmsC,EAAavI,EAAMyD,QAC1CsF,EAAa3I,EAAEhkC,OAAO2sC,EAAY/I,EAAMyD,QACxCsF,EAAavsD,KAAK6qD,MAAM0B,GACpBR,EAAc,GAAKA,EAAc,GAAKQ,EAAa,GAAKA,EAAa,KAAH,IAAG,GAAM,IAC3E,MAAM3J,EAAaM,IAEvB,OAAOqI,EAAMiB,UAAUR,IAAI,EAAID,EAAaQ,IAGhD,aAAc,SAACE,EAAaC,GACxB,IAAM3lC,EAAS68B,EAAEhkC,OAAO6sC,EAAajJ,EAAMmJ,WAAOnlD,GAAW,GAAO,GAC9Dsf,EAAW88B,EAAEhkC,OAAO8sC,EAAelJ,EAAMmJ,WAAOnlD,GAAW,GAAO,GAExE,GAAIuf,EAAOloB,SAAWioB,EAASjoB,QAAUkoB,EAAO,GAAGloB,SAAWioB,EAAS,GAAGjoB,QACjD,IAAlBkoB,EAAOloB,QAAqC,IAArBkoB,EAAO,GAAGloB,OACpC,MAAM+jD,EAAa73C,GAEvB,IAAM6hD,EAAM7lC,EAAOloB,OACbguD,EAAM9lC,EAAO,GAAGloB,OAClBiuD,GAAOF,EAAM,IAAMC,EAAM,GAEzBC,EADQ,IAARF,EACMC,EAAM,EAEND,EAAM,EAGhB,IAFA,IAAIG,EAAO,EAEF7tD,EAAI,EAAGA,EAAI0tD,EAAK1tD,IACrB,IAAK,IAAI+E,EAAI,EAAGA,EAAI4oD,EAAK5oD,IACrB,GAA4B,kBAAjB8iB,EAAO7nB,GAAG+E,IAA6C,kBAAnB6iB,EAAS5nB,GAAG+E,GAA3D,CAEA,GAAuB,IAAnB6iB,EAAS5nB,GAAG+E,GAAU,MAAM2+C,EAAaI,KAC7C+J,GAAQ/sD,KAAKw0C,IAAKztB,EAAO7nB,GAAG+E,GAAK6iB,EAAS5nB,GAAG+E,GAAK,GAAK6iB,EAAS5nB,GAAG+E,GAK3E,IAAI+oD,EAAIhtD,KAAKyE,KAAK,GAAMsoD,GACnBD,EAAM,IAAO,IACdE,GAAQhtD,KAAKiD,KAAK,EAAI8pD,EAAO/sD,KAAKitD,KAGtC,IADA,IAAI/8B,EAAI48B,EACD58B,GAAK,GACR88B,EAAIA,EAAID,EAAO78B,EACfA,GAAQ,EAGZ,IADA,IAAIV,EAAIw9B,EAAGpqD,EAAIkqD,EACRt9B,EAAI,MAAoBw9B,GAG3BA,GADAx9B,EAAIA,EAAIu9B,GADRnqD,GAAQ,GAIZ,OAAO,EAAIoqD,GAGf,kBAAmB,SAACtB,EAAOwB,EAAK/9B,GAK5B,GAJAu8B,EAAQ9H,EAAEhkC,OAAO8rC,EAAOlI,EAAMyD,QAC9BiG,EAAMtJ,EAAEhkC,OAAOstC,EAAK1J,EAAMyD,QAC1B93B,EAAOy0B,EAAEhkC,OAAOuP,EAAMq0B,EAAMyD,QAC5B93B,EAAOnvB,KAAK6qD,MAAM17B,GACdu8B,GAAS,GAAKA,GAAS,GAAKwB,GAAO,GAAK/9B,EAAO,EAC/C,MAAMyzB,EAAaM,IACvB,OAAOqI,EAAM4B,SAAS,EAAGzB,EAAOwB,EAAK/9B,GAAM,GAAK,GAGpD,eAAgB,SAACu8B,EAAOwB,EAAK/9B,GAKzB,GAJAu8B,EAAQ9H,EAAEhkC,OAAO8rC,EAAOlI,EAAMyD,QAC9BiG,EAAMtJ,EAAEhkC,OAAOstC,EAAK1J,EAAMyD,QAC1B93B,EAAOy0B,EAAEhkC,OAAOuP,EAAMq0B,EAAMyD,QAC5B93B,EAAOnvB,KAAK6qD,MAAM17B,GACdu8B,GAAS,GAAKA,GAAS,GAAKwB,GAAO,GAAK/9B,EAAO,EAC/C,MAAMyzB,EAAaM,IACvB,GAAa,IAAT/zB,EACA,MAAMyzB,EAAaI,KACvB,OAAOuI,EAAM6B,IAAI,EAAG1B,EAAOwB,EAAK/9B,GAAM,GAAK,GAG/Ck+B,OAAQ,SAACC,EAAQC,GAGb,GAFAD,EAAS1J,EAAEhkC,OAAO0tC,EAAQ9J,EAAMmJ,WAAOnlD,GAAW,GAAM,GACxD+lD,EAAS3J,EAAEhkC,OAAO2tC,EAAQ/J,EAAMmJ,WAAOnlD,GAAW,GAAM,GACpD8lD,EAAOzuD,SAAW0uD,EAAO1uD,OACzB,MAAM+jD,EAAa73C,GAIvB,IADA,IAAMyiD,EAAa,GAAIC,EAAa,GAC3BvuD,EAAI,EAAGA,EAAIouD,EAAOzuD,OAAQK,IACN,kBAAdouD,EAAOpuD,IAAwC,kBAAdquD,EAAOruD,KAEnDsuD,EAAWhgD,KAAK8/C,EAAOpuD,IACvBuuD,EAAWjgD,KAAK+/C,EAAOruD,KAE3B,GAAIsuD,EAAW3uD,QAAU,EACrB,MAAM+jD,EAAaI,KAEvB,OAAOuI,EAAMmC,UAAUF,EAAYC,IAGvC,eAAgB,SAACH,EAAQC,GAGrB,GAFAD,EAAS1J,EAAEhkC,OAAO0tC,EAAQ9J,EAAMmJ,WAAOnlD,GAAW,GAAM,GACxD+lD,EAAS3J,EAAEhkC,OAAO2tC,EAAQ/J,EAAMmJ,WAAOnlD,GAAW,GAAM,GACpD8lD,EAAOzuD,SAAW0uD,EAAO1uD,OACzB,MAAM+jD,EAAa73C,GAIvB,IADA,IAAMyiD,EAAa,GAAIC,EAAa,GAC3BvuD,EAAI,EAAGA,EAAIouD,EAAOzuD,OAAQK,IACN,kBAAdouD,EAAOpuD,IAAwC,kBAAdquD,EAAOruD,KAEnDsuD,EAAWhgD,KAAK8/C,EAAOpuD,IACvBuuD,EAAWjgD,KAAK+/C,EAAOruD,KAI3B,IAFA,IAAMyuD,EAAQpC,EAAMqC,KAAKJ,GAAaK,EAAQtC,EAAMqC,KAAKH,GACrD9uD,EAAS,EACJO,EAAI,EAAGA,EAAIsuD,EAAW3uD,OAAQK,IACnCP,IAAW6uD,EAAWtuD,GAAKyuD,IAAUF,EAAWvuD,GAAK2uD,GAEzD,OAAOlvD,EAAS6uD,EAAW3uD,QAG/B,eAAgB,SAACyuD,EAAQC,GAGrB,GAFAD,EAAS1J,EAAEhkC,OAAO0tC,EAAQ9J,EAAMmJ,WAAOnlD,GAAW,GAAM,GACxD+lD,EAAS3J,EAAEhkC,OAAO2tC,EAAQ/J,EAAMmJ,WAAOnlD,GAAW,GAAM,GACpD8lD,EAAOzuD,SAAW0uD,EAAO1uD,OACzB,MAAM+jD,EAAa73C,GAIvB,IADA,IAAMyiD,EAAa,GAAIC,EAAa,GAC3BvuD,EAAI,EAAGA,EAAIouD,EAAOzuD,OAAQK,IACN,kBAAdouD,EAAOpuD,IAAwC,kBAAdquD,EAAOruD,KAEnDsuD,EAAWhgD,KAAK8/C,EAAOpuD,IACvBuuD,EAAWjgD,KAAK+/C,EAAOruD,KAG3B,GAAIsuD,EAAW3uD,QAAU,EACrB,MAAM+jD,EAAaI,KAEvB,OAAOuI,EAAMuC,WAAWN,EAAYC,IAGxCM,MAAO,WAAgB,IACnB,IAAIlqD,EAAM,EAAGvC,EAAI,GADE,mBAAZ0sD,EAAY,yBAAZA,EAAY,gBAGnBpK,EAAEwF,cAAc4E,EAASxK,EAAMyD,QAAQ,GAAM,SAAC12B,EAAM09B,GAC5B,kBAAT19B,IACP1sB,GAAO0sB,EACPjvB,EAAEkM,KAAK+iB,OAGf,IAAMq9B,EAAO/pD,EAAMvC,EAAEzC,OACrBgF,EAAM,EACN,IAAK,IAAI3E,EAAI,EAAGA,EAAIoC,EAAEzC,OAAQK,IAC1B2E,GAAO,KAAJ,IAAKvC,EAAEpC,GAAK0uD,EAAS,GAE5B,OAAO/pD,GAGX,aAAc,SAACvC,EAAG4sD,EAAQtC,GAItB,GAHAtqD,EAAIsiD,EAAEhkC,OAAOte,EAAGkiD,EAAMyD,QACtBiH,EAAStK,EAAEhkC,OAAOsuC,EAAQ1K,EAAMyD,QAChC2E,EAAahI,EAAEhkC,OAAOgsC,EAAYpI,EAAM0E,SACpC5mD,EAAI,GAAK4sD,GAAU,EACnB,MAAMtL,EAAaM,IACvB,OAAO0I,EAAaL,EAAM4C,YAAYtC,IAAIvqD,EAAG4sD,GAAU3C,EAAM4C,YAAYrC,IAAIxqD,EAAG4sD,IAGpF,SAAU,SAAC5sD,EAAG8sD,EAAIC,EAAIzC,GASlB,GARAtqD,EAAIsiD,EAAEhkC,OAAOte,EAAGkiD,EAAMyD,QACtBmH,EAAKxK,EAAEhkC,OAAOwuC,EAAI5K,EAAMyD,QACxBoH,EAAKzK,EAAEhkC,OAAOyuC,EAAI7K,EAAMyD,QACxB2E,EAAahI,EAAEhkC,OAAOgsC,EAAYpI,EAAM0E,SAKpC5mD,EAAI,GAAK8sD,EAAK,GAAKC,EAAK,EACxB,MAAMzL,EAAaM,IAOvB,OAHAkL,EAAKpuD,KAAK6qD,MAAMuD,GAChBC,EAAKruD,KAAK6qD,MAAMwD,GAETzC,EAAaL,EAAM+C,SAASzC,IAAIvqD,EAAG8sD,EAAIC,GAAM9C,EAAM+C,SAASxC,IAAIxqD,EAAG8sD,EAAIC,IAGlF,YAAa,SAAC/sD,EAAG8sD,EAAIC,GAQjB,GANA/sD,EAAIsiD,EAAEhkC,OAAOte,EAAGkiD,EAAMyD,QACtBmH,EAAKxK,EAAEhkC,OAAOwuC,EAAI5K,EAAMyD,QACxBoH,EAAKzK,EAAEhkC,OAAOyuC,EAAI7K,EAAMyD,QAIpB3lD,EAAI,GAAK8sD,EAAK,GAAKC,EAAK,EACxB,MAAMzL,EAAaM,IAOvB,OAHAkL,EAAKpuD,KAAK6qD,MAAMuD,GAChBC,EAAKruD,KAAK6qD,MAAMwD,GAET,EAAI9C,EAAM+C,SAASzC,IAAIvqD,EAAG8sD,EAAIC,IAGzC,QAAS,SAACtC,EAAaqC,EAAIC,GAMvB,GAJAtC,EAAcnI,EAAEhkC,OAAOmsC,EAAavI,EAAMyD,QAC1CmH,EAAKxK,EAAEhkC,OAAOwuC,EAAI5K,EAAMyD,QACxBoH,EAAKzK,EAAEhkC,OAAOyuC,EAAI7K,EAAMyD,QAEpB8E,EAAc,GAAOA,EAAc,EACnC,MAAMnJ,EAAaM,IAGvB,GAAIkL,EAAK,GAAOC,EAAK,EACjB,MAAMzL,EAAaM,IAOvB,OAHAkL,EAAKpuD,KAAK6qD,MAAMuD,GAChBC,EAAKruD,KAAK6qD,MAAMwD,GAET9C,EAAM+C,SAAStC,IAAID,EAAaqC,EAAIC,IAG/C,WAAY,SAACtC,EAAaqC,EAAIC,GAM1B,GAJAtC,EAAcnI,EAAEhkC,OAAOmsC,EAAavI,EAAMyD,QAC1CmH,EAAKxK,EAAEhkC,OAAOwuC,EAAI5K,EAAMyD,QACxBoH,EAAKzK,EAAEhkC,OAAOyuC,EAAI7K,EAAMyD,QAEpB8E,EAAc,GAAOA,EAAc,EACnC,MAAMnJ,EAAaM,IAIvB,GAAIkL,EAAK,GAAOA,GAAMpuD,KAAKw0C,IAAI,GAAI,IAC/B,MAAMoO,EAAaM,IAIvB,GAAImL,EAAK,GAAOA,GAAMruD,KAAKw0C,IAAI,GAAI,IAC/B,MAAMoO,EAAaM,IAMvB,OAHAkL,EAAKpuD,KAAK6qD,MAAMuD,GAChBC,EAAKruD,KAAK6qD,MAAMwD,GAET9C,EAAM+C,SAAStC,IAAI,EAAMD,EAAaqC,EAAIC,IAMrD,SAAU,SAACf,EAAQC,GACfD,EAAS1J,EAAEhkC,OAAO0tC,EAAQ9J,EAAMmJ,WAAOnlD,GAAW,GAAM,GACxD+lD,EAAS3J,EAAEhkC,OAAO2tC,EAAQ/J,EAAMmJ,WAAOnlD,GAAW,GAAM,GAKxD,IAFA,IAAM+mD,EAAK,GAAIC,EAAK,GAChBC,EAAS,EAAGC,EAAS,EAChBxvD,EAAI,EAAGA,EAAIc,KAAK2uD,IAAIrB,EAAOzuD,OAAQ0uD,EAAO1uD,QAASK,IAC/B,kBAAdouD,EAAOpuD,KACdqvD,EAAG/gD,KAAK8/C,EAAOpuD,IACfuvD,GAAUnB,EAAOpuD,IAEI,kBAAdquD,EAAOruD,KACdsvD,EAAGhhD,KAAK+/C,EAAOruD,IACfwvD,GAAUnB,EAAOruD,IAGzB,GAAIqvD,EAAG1vD,QAAU,GAAK2vD,EAAG3vD,QAAU,EAC/B,MAAM+jD,EAAaI,KAEvByL,GAAUF,EAAG1vD,OACb6vD,GAAUF,EAAG3vD,OAEb,IADA,IAAI+vD,EAAK,EAAGC,EAAK,EACR3vD,EAAI,EAAGA,EAAIqvD,EAAG1vD,OAAQK,IAC3B0vD,GAAM,KAAJ,IAAKH,EAASF,EAAGrvD,GAAO,GAE9B0vD,GAAML,EAAG1vD,OAAS,EAClB,IAAK,IAAIK,EAAI,EAAGA,EAAIsvD,EAAG3vD,OAAQK,IAC3B2vD,GAAM,KAAJ,IAAKH,EAASF,EAAGtvD,GAAO,GAI9B,OAFA2vD,GAAML,EAAG3vD,OAAS,EAEiD,EAA5D0sD,EAAM+C,SAASzC,IAAI+C,EAAKC,EAAIN,EAAG1vD,OAAS,EAAG2vD,EAAG3vD,OAAS,IAGlEiwD,OAAQ,SAACxtD,GAIL,IAFAA,EAAIsiD,EAAEhkC,OAAOte,EAAGkiD,EAAMyD,WAEZ,GAAK3lD,GAAK,EAChB,MAAMshD,EAAaM,IAEvB,OAAOljD,KAAKmE,KAAK,EAAI7C,IAAM,EAAIA,IAAM,GAGzCytD,UAAW,SAACztD,GAERA,EAAIsiD,EAAEhkC,OAAOte,EAAGkiD,EAAMyD,QACtB,IAAI+H,EAAMhvD,KAAKyE,IAAI,EAAInD,GACvB,OAAQ0tD,EAAM,IAAMA,EAAM,IAI9BC,SAAU,SAAC3tD,EAAG4tD,EAASC,GAKnB,GAJA7tD,EAAIsiD,EAAEhkC,OAAOte,EAAGkiD,EAAMyD,QACtBiI,EAAUtL,EAAEhkC,OAAOsvC,EAAS1L,EAAMmJ,WAAOnlD,GAAW,GAAM,IAC1D2nD,EAAUvL,EAAEhkC,OAAOuvC,EAAS3L,EAAMmJ,WAAOnlD,GAAW,GAAM,IAE9C3I,SAAWqwD,EAAQrwD,OAC3B,MAAM+jD,EAAa73C,GAKvB,IAFA,IAAMqkD,EAAY,GAAIC,EAAY,GAC9BC,GAAY,EACPpwD,EAAI,EAAGA,EAAIgwD,EAAQrwD,OAAQK,IACN,kBAAfgwD,EAAQhwD,IAAyC,kBAAfiwD,EAAQjwD,KAErDkwD,EAAU5hD,KAAK0hD,EAAQhwD,IACvBmwD,EAAU7hD,KAAK2hD,EAAQjwD,IACnBiwD,EAAQjwD,KAAOiwD,EAAQ,KACvBG,GAAY,IAEpB,GAAIA,EACA,MAAM1M,EAAaI,KAIvB,IAHA,IAAMuM,EAAQhE,EAAMqC,KAAKwB,GACnBI,EAAQjE,EAAMqC,KAAKyB,GACrBI,EAAY,EAAGC,EAAc,EACxBxwD,EAAI,EAAGA,EAAIkwD,EAAUvwD,OAAQK,IAClCuwD,IAAcJ,EAAUnwD,GAAKswD,IAAUJ,EAAUlwD,GAAKqwD,GACtDG,GAAe,KAAJ,IAAKL,EAAUnwD,GAAKswD,EAAU,GAE7C,IAAMvR,EAAIwR,EAAYC,EAEtB,OADUH,EAAQtR,EAAIuR,EACXvR,EAAI38C,GAGnB,eAAgB,aAIhB,uBAAwB,aAIxB,2BAA4B,aAI5B,oBAAqB,aAIrB,kBAAmB,WACf,OAAOmqD,EAAsBwD,SAAtB,MAAAxD,EAAqB,YAGhCkE,UAAW,SAACC,EAAWC,GACnBD,EAAYhM,EAAEhkC,OAAOgwC,EAAWpM,EAAMmJ,WAAOnlD,GAAW,GAAM,GAC9DqoD,EAAYjM,EAAEhkC,OAAOiwC,EAAWrM,EAAMmJ,WAAOnlD,GAAW,GAAM,GAG9D,IADA,IAAMsoD,EAAoB,GACjB5wD,EAAI,EAAGA,EAAI2wD,EAAUhxD,OAAQK,IACN,kBAAjB2wD,EAAU3wD,IAErB4wD,EAAkBtiD,KAAKqiD,EAAU3wD,IAErC4wD,EAAkB9R,OAClB8R,EAAkBtiD,KAAKrL,EAAAA,GAGvB,IADA,IAAMxD,EAAS,GACNsF,EAAI,EAAGA,EAAI6rD,EAAkBjxD,OAAQoF,IAAK,CAC/CtF,EAAOsF,GAAK,GACZtF,EAAOsF,GAAG,GAAK,EACf,IAAK,IAAI/E,EAAI,EAAGA,EAAI0wD,EAAU/wD,OAAQK,IAAK,CACvC,GAA4B,kBAAjB0wD,EAAU1wD,GAGR0wD,EAAU1wD,IACX4wD,EAAkB7rD,KAC1BtF,EAAOsF,GAAG,KACV2rD,EAAU1wD,GAAK,OAK3B,OAAOP,GAGXoxD,MAAO,SAACzuD,GAOJ,GAAU,KAHVA,EAAIsiD,EAAEhkC,OAAOte,EAAGkiD,EAAMyD,UAGN3lD,EAAI,GAAKA,IAAMtB,KAAK6qD,MAAMvpD,GACtC,MAAMshD,EAAaM,IAGvB,OAAOqI,EAAMyE,QAAQ1uD,IAGzB,aAAc,SAACA,EAAGoqD,EAAOC,EAAMC,GAU3B,GAPAtqD,EAAIsiD,EAAEhkC,OAAOte,EAAGkiD,EAAMyD,QACtByE,EAAQ9H,EAAEhkC,OAAO8rC,EAAOlI,EAAMyD,QAC9B0E,EAAO/H,EAAEhkC,OAAO+rC,EAAMnI,EAAMyD,QAC5B2E,EAAahI,EAAEhkC,OAAOgsC,EAAYpI,EAAM0E,SAIpC5mD,EAAI,GAAKoqD,GAAS,GAAKC,GAAQ,EAC/B,MAAM/I,EAAaM,IAGvB,OAAO0I,EAAaL,EAAM0E,MAAMpE,IAAIvqD,EAAGoqD,EAAOC,GAAM,GAAQJ,EAAM0E,MAAMnE,IAAIxqD,EAAGoqD,EAAOC,GAAM,IAGhG,YAAa,SAACI,EAAaL,EAAOC,GAS9B,GANAI,EAAcnI,EAAEhkC,OAAOmsC,EAAavI,EAAMyD,QAC1CyE,EAAQ9H,EAAEhkC,OAAO8rC,EAAOlI,EAAMyD,QAC9B0E,EAAO/H,EAAEhkC,OAAO+rC,EAAMnI,EAAMyD,QAIxB8E,EAAc,GAAKA,EAAc,GAAKL,GAAS,GAAKC,GAAQ,EAC5D,MAAM/I,EAAaM,IAGvB,OAAOqI,EAAM0E,MAAMjE,IAAID,EAAaL,EAAOC,IAG/CuE,QAAS,SAAC5uD,GAMN,IAHAA,EAAIsiD,EAAEhkC,OAAOte,EAAGkiD,EAAMyD,UAGb,EACL,MAAMrE,EAAaM,IAGvB,OAAOqI,EAAM4E,QAAQ7uD,IAGzB,kBAAmB,SAACA,GAMhB,IAHAA,EAAIsiD,EAAEhkC,OAAOte,EAAGkiD,EAAMyD,UAGb,EACL,MAAMrE,EAAaM,IAGvB,OAAOqI,EAAM4E,QAAQ7uD,IAGzB8uD,MAAO,SAAChvD,GAMJ,OAFAA,EAAIwiD,EAAEhkC,OAAOxe,EAAGoiD,EAAMyD,QAEfsE,EAAM8E,OAAOxE,IAAIzqD,EAAG,EAAG,GAAK,IAGvCkvD,QAAS,WAAgB,IAErB,IAAMC,EAAY,GAFG,mBAAZvC,EAAY,yBAAZA,EAAY,gBASrB,OALApK,EAAEwF,cAAc4E,EAASxK,EAAMyD,QAAQ,GAAM,SAAC12B,EAAM09B,GAC5B,kBAAT19B,GACPggC,EAAU/iD,KAAK+iB,MAGhBg7B,EAAMiF,QAAQD,IAGzBE,OAAQ,SAACC,EAAQC,EAAQC,EAAMC,GAE3BH,EAAS9M,EAAEhkC,OAAO8wC,EAAQlN,EAAMmJ,WAAOnlD,GAAW,GAAM,GACxD,IAAK,IAAItI,EAAI,EAAGA,EAAIwxD,EAAO7xD,OAAQK,IAC/B,GAAyB,kBAAdwxD,EAAOxxD,GACd,MAAM0jD,EAAaQ,MAI3B,IAAM0N,EAA4B,OADlCH,EAAS/M,EAAEhkC,OAAO+wC,EAAQnN,EAAMmJ,MAAO,MAAM,GAAM,IAEnD,GAAc,MAAVgE,EAAgB,CAChBA,EAAS,GACT,IAAK,IAAIzxD,EAAI,EAAGA,GAAKwxD,EAAO7xD,OAAQK,IAChCyxD,EAAOnjD,KAAKtO,OAEb,CACH,GAAIyxD,EAAO9xD,SAAW6xD,EAAO7xD,OACzB,MAAM+jD,EAAaO,IACvB,IAAK,IAAIjkD,EAAI,EAAGA,EAAIyxD,EAAO9xD,OAAQK,IAC/B,GAAyB,kBAAdyxD,EAAOzxD,GACd,MAAM0jD,EAAaQ,MAK/B,GAAY,OADZwN,EAAOhN,EAAEhkC,OAAOgxC,EAAMpN,EAAMmJ,MAAO,MAAM,GAAO,KAC5BmE,EAAiB,CACjCF,EAAO,GACP,IAAK,IAAI1xD,EAAI,EAAGA,GAAKwxD,EAAO7xD,OAAQK,IAChC0xD,EAAKpjD,KAAKtO,GAEd0xD,EAAO,CAACA,QACO,MAARA,IACPA,EAAOtwD,MAAM86C,QAAQuV,EAAO,IAAMA,EAAS,CAACA,IAEhDE,EAAWjN,EAAEhkC,OAAOixC,EAAUrN,EAAM0E,SAAS,GAK7C,IAFA,IAgBIyD,EACAD,EAjBEnqD,EAAImvD,EAAO7xD,OACbkyD,EAAQ,EAAGC,EAAQ,EAAGC,EAAS,EAAGC,EAAS,EACtChyD,EAAI,EAAGA,EAAIqC,EAAGrC,IAAK,CACxB,IAAMoC,EAAIqvD,EAAOzxD,GACX6D,EAAI/C,KAAKmE,IAAIusD,EAAOxxD,IAC1B6xD,GAASzvD,EACT0vD,GAASjuD,EACTkuD,GAAU3vD,EAAIyB,EACdmuD,GAAU5vD,EAAIA,EAElByvD,GAASxvD,EACTyvD,GAASzvD,EACT0vD,GAAU1vD,EACV2vD,GAAU3vD,EAKNsvD,EAEAnF,EAAQsF,GADRrF,GAAQsF,EAASF,EAAQC,IAAUE,EAASH,EAAQA,IAC7BA,GAEvBpF,EAAOsF,EAASC,EAChBxF,EAAQ,GAKZ,IADA,IAAMyF,EAAQ,GACLjyD,EAAI,EAAGA,EAAI0xD,EAAK/xD,OAAQK,IAAK,CAClCiyD,EAAMjyD,GAAK,GACX,IAAK,IAAI+E,EAAI,EAAGA,EAAI2sD,EAAK,GAAG/xD,OAAQoF,IAAK,CACrC,GAA0B,kBAAf2sD,EAAK1xD,GAAG+E,GACf,MAAM2+C,EAAaQ,MACvB+N,EAAMjyD,GAAG+E,GAAKjE,KAAKyE,IAAIinD,EAAQC,EAAOiF,EAAK1xD,GAAG+E,KAGtD,OAAOktD,GAGXC,QAAS,WAAgB,IACrB,IAAI3G,EAAM,EAAGiF,EAAc,EADN,mBAAZ1B,EAAY,yBAAZA,EAAY,gBASrB,OANApK,EAAEwF,cAAc4E,EAASxK,EAAMyD,QAAQ,GAAM,SAAC12B,EAAM09B,GAC5B,kBAAT19B,IACPm/B,GAAe,EAAIn/B,EACnBk6B,QAGDA,EAAMiF,GAGjB,eAAgB,SAAC2B,EAAUC,EAAeC,EAAcC,EAAY5F,GAgBhE,GAbAyF,EAAWzN,EAAEhkC,OAAOyxC,EAAU7N,EAAMyD,QACpCqK,EAAgB1N,EAAEhkC,OAAO0xC,EAAe9N,EAAMyD,QAC9CsK,EAAe3N,EAAEhkC,OAAO2xC,EAAc/N,EAAMyD,QAC5CuK,EAAa5N,EAAEhkC,OAAO4xC,EAAYhO,EAAMyD,QACxC2E,EAAahI,EAAEhkC,OAAOgsC,EAAYpI,EAAM0E,SAGxCmJ,EAAWrxD,KAAK6qD,MAAMwG,GACtBC,EAAgBtxD,KAAK6qD,MAAMyG,GAC3BC,EAAevxD,KAAK6qD,MAAM0G,IAC1BC,EAAaxxD,KAAK6qD,MAAM2G,KAGN,GAAKH,EAAW,GAAKC,GAAiB,GAAKC,GAAgB,EACzE,MAAM3O,EAAaM,IAIvB,GAAIoO,EAAgBE,EAChB,MAAM5O,EAAaM,IAGvB,GAAIqO,EAAeC,EACf,MAAM5O,EAAaM,IAKvB,GAAIoO,EAAgBD,GAAYE,EAAeF,EAC3C,MAAMzO,EAAaM,IAGvB,GAAImO,EAAYC,EAAgBE,EAAaD,EACzC,MAAM3O,EAAaM,IAGvB,SAAS4I,EAAIxqD,EAAGC,EAAGP,EAAGywD,GAClB,OAAOjG,EAAcc,OAAOtrD,EAAGM,GAAKkqD,EAAcc,OAAOmF,EAAIzwD,EAAGO,EAAID,GAAKkqD,EAAcc,OAAOmF,EAAGlwD,GAWrG,OAAOqqD,EARP,SAAatqD,EAAGC,EAAGP,EAAGywD,GAElB,IADA,IAAI9yD,EAAS,EACJO,EAAI,EAAGA,GAAKoC,EAAGpC,IACpBP,GAAUmtD,EAAI5sD,EAAGqC,EAAGP,EAAGywD,GAE3B,OAAO9yD,EAGSktD,CAAIwF,EAAUC,EAAeC,EAAcC,GAAc1F,EAAIuF,EAAUC,EAAeC,EAAcC,IAG5HE,UAAW,SAACxC,EAASC,GAKjB,GAHAD,EAAUtL,EAAEhkC,OAAOsvC,EAAS1L,EAAMmJ,WAAOnlD,GAAW,GAAM,IAC1D2nD,EAAUvL,EAAEhkC,OAAOuvC,EAAS3L,EAAMmJ,WAAOnlD,GAAW,GAAM,IAE9C3I,SAAWqwD,EAAQrwD,OAC3B,MAAM+jD,EAAa73C,GAIvB,IADA,IAAMqkD,EAAY,GAAIC,EAAY,GACzBnwD,EAAI,EAAGA,EAAIgwD,EAAQrwD,OAAQK,IACN,kBAAfgwD,EAAQhwD,IAAyC,kBAAfiwD,EAAQjwD,KAErDkwD,EAAU5hD,KAAK0hD,EAAQhwD,IACvBmwD,EAAU7hD,KAAK2hD,EAAQjwD,KAE3B,GAAIkwD,EAAUvwD,QAAU,EACpB,MAAM+jD,EAAaI,KAIvB,IAHA,IAAMuM,EAAQhE,EAAMqC,KAAKwB,GACnBI,EAAQjE,EAAMqC,KAAKyB,GACrBI,EAAY,EAAGC,EAAc,EACxBxwD,EAAI,EAAGA,EAAIkwD,EAAUvwD,OAAQK,IAClCuwD,IAAcJ,EAAUnwD,GAAKswD,IAAUJ,EAAUlwD,GAAKqwD,GACtDG,GAAe,KAAJ,IAAKL,EAAUnwD,GAAKswD,EAAU,GAG7C,OAAOD,EADGE,EAAYC,EACHF,GAGvBmC,KAAM,WAAgB,IAClB,IAAI/D,EAAO,EAAG/mD,EAAQ,GADJ,mBAAZmnD,EAAY,yBAAZA,EAAY,gBAGlBpK,EAAEwF,cAAc4E,EAASxK,EAAMyD,QAAQ,GAAM,SAAC12B,EAAM09B,GAC5B,kBAAT19B,IACPq9B,GAAQr9B,EACR1pB,EAAM2G,KAAK+iB,OAGnB,IAAMhvB,EAAIsF,EAAMhI,OAChB+uD,GAAQrsD,EAER,IADA,IAAIqwD,EAAQ,EACH1yD,EAAI,EAAGA,EAAIqC,EAAGrC,IACnB0yD,GAAS5xD,KAAKw0C,IAAI3tC,EAAM3H,GAAK0uD,EAAM,GAGvC,OAASrsD,GAAKA,EAAI,KAAQA,EAAI,IAAMA,EAAI,IAAMA,EAAI,KADlDqwD,GAAgB5xD,KAAKw0C,IAAI+W,EAAMsG,MAAMhrD,GAAO,GAAO,IACc,GAAKtF,EAAI,IAAMA,EAAI,KAAOA,EAAI,IAAMA,EAAI,KAG7GuwD,OAAQ,aAIRC,OAAQ,aAIR,eAAgB,SAACzwD,EAAGssD,EAAMoE,EAAcpG,GAOpC,GALAtqD,EAAIsiD,EAAEhkC,OAAOte,EAAGkiD,EAAMyD,QACtB2G,EAAOhK,EAAEhkC,OAAOguC,EAAMpK,EAAMyD,QAC5B+K,EAAepO,EAAEhkC,OAAOoyC,EAAcxO,EAAMyD,QAC5C2E,EAAahI,EAAEhkC,OAAOgsC,EAAYpI,EAAM0E,SAEpC5mD,GAAK,GAAK0wD,GAAgB,EAC1B,MAAMpP,EAAaM,IAGvB,OAAO0I,EAAaL,EAAM0G,UAAUpG,IAAIvqD,EAAGssD,EAAMoE,GAAgBzG,EAAM0G,UAAUnG,IAAIxqD,EAAGssD,EAAMoE,IAGlG,cAAe,SAACjG,EAAa6B,EAAMoE,GAM/B,GAJAjG,EAAcnI,EAAEhkC,OAAOmsC,EAAavI,EAAMyD,QAC1C2G,EAAOhK,EAAEhkC,OAAOguC,EAAMpK,EAAMyD,QAC5B+K,EAAepO,EAAEhkC,OAAOoyC,EAAcxO,EAAMyD,QAExC8E,GAAe,GAAKA,GAAe,EACnC,MAAMnJ,EAAaM,IAGvB,GAAI8O,GAAgB,EAChB,MAAMpP,EAAaM,IAGvB,OAAOqI,EAAM0G,UAAUjG,IAAID,EAAa6B,EAAMoE,IAGlD,YAAa,aAIb,YAAa,aAIb,gBAAiB,SAACE,EAAUC,EAAUC,EAAexG,GAWjD,GATAsG,EAAWtO,EAAEhkC,OAAOsyC,EAAU1O,EAAMyD,QACpCkL,EAAWvO,EAAEhkC,OAAOuyC,EAAU3O,EAAMyD,QACpCmL,EAAgBxO,EAAEhkC,OAAOwyC,EAAe5O,EAAMyD,QAC9C2E,EAAahI,EAAEhkC,OAAOgsC,EAAYpI,EAAM0E,SAExCgK,EAAWlyD,KAAK6qD,MAAMqH,GACtBC,EAAWnyD,KAAK6qD,MAAMsH,GAGlBC,EAAgB,GAAKA,EAAgB,EACrC,MAAMxP,EAAaM,IAGvB,GAAIgP,EAAW,GAAKC,EAAW,EAC3B,MAAMvP,EAAaM,IAGvB,OAAO0I,EAAaL,EAAM8G,OAAOxG,IAAIqG,EAAUC,EAAUC,GAAiB7G,EAAM8G,OAAOvG,IAAIoG,EAAUC,EAAUC,IAGnH,YAAa,SAAC9wD,EAAGssD,EAAMoE,EAAcpG,GAQjC,GANAtqD,EAAIsiD,EAAEhkC,OAAOte,EAAGkiD,EAAMyD,QACtB2G,EAAOhK,EAAEhkC,OAAOguC,EAAMpK,EAAMyD,QAC5B+K,EAAepO,EAAEhkC,OAAOoyC,EAAcxO,EAAMyD,QAC5C2E,EAAahI,EAAEhkC,OAAOgsC,EAAYpI,EAAM0E,SAGpC8J,GAAgB,EAChB,MAAMpP,EAAaM,IAGvB,OAAO0I,EAAaL,EAAM8E,OAAOxE,IAAIvqD,EAAGssD,EAAMoE,GAAgBzG,EAAM8E,OAAOvE,IAAIxqD,EAAGssD,EAAMoE,IAI5F,WAAY,SAACjG,EAAa6B,EAAMoE,GAO5B,GALAjG,EAAcnI,EAAEhkC,OAAOmsC,EAAavI,EAAMyD,QAC1C2G,EAAOhK,EAAEhkC,OAAOguC,EAAMpK,EAAMyD,QAC5B+K,EAAepO,EAAEhkC,OAAOoyC,EAAcxO,EAAMyD,QAGxC8E,GAAe,GAAKA,GAAe,EACnC,MAAMnJ,EAAaM,IAGvB,GAAI8O,GAAgB,EAChB,MAAMpP,EAAaM,IAMvB,OAAOqI,EAAM8E,OAAOrE,IAAID,EAAa6B,EAAMoE,IAI/C,cAAe,SAAC5wD,EAAGwqD,GAKf,OAHAxqD,EAAIwiD,EAAEhkC,OAAOxe,EAAGoiD,EAAMyD,SACtB2E,EAAahI,EAAEhkC,OAAOgsC,EAAYpI,EAAM0E,UAElBqD,EAAM8E,OAAOxE,IAAIzqD,EAAG,EAAG,GAAKmqD,EAAM8E,OAAOvE,IAAI1qD,EAAG,EAAG,IAG7E,aAAc,SAAC2qD,GAIX,IAFAA,EAAcnI,EAAEhkC,OAAOmsC,EAAavI,EAAMyD,UAEvB,GAAK8E,GAAe,EACnC,MAAMnJ,EAAaM,IAEvB,OAAOqI,EAAM8E,OAAOrE,IAAID,EAAa,EAAG,IAG5CuG,QAAS,aAIT,iBAAkB,aAIlB,iBAAkB,aAIlB,kBAAmB,aAInB,kBAAmB,aAInBC,aAAc,aAIdC,IAAK,SAAClxD,GAIF,OAFAA,EAAIsiD,EAAEhkC,OAAOte,EAAGkiD,EAAMyD,QAEfjnD,KAAKyE,KAAK,GAAMnD,EAAIA,GAp6BnB,oBAu6BZ,eAAgB,SAACA,EAAGssD,EAAMhC,GAOtB,GALAtqD,EAAIsiD,EAAEhkC,OAAOte,EAAGkiD,EAAMyD,QACtB2G,EAAOhK,EAAEhkC,OAAOguC,EAAMpK,EAAMyD,QAC5B2E,EAAahI,EAAEhkC,OAAOgsC,EAAYpI,EAAM0E,SAGpC5mD,EAAI,GAAKssD,EAAO,EAChB,MAAMhL,EAAaM,IAKvB,OAFA5hD,EAAItB,KAAK6qD,MAAMvpD,GAERsqD,EAAaL,EAAMkH,QAAQ5G,IAAIvqD,EAAGssD,GAAQrC,EAAMkH,QAAQ3G,IAAIxqD,EAAGssD,IAG1E,KAAQ,aAIR,eAAgB,aAIhB,eAAgB,aAIhB,WAAY,aAIZ,UAAW,aAIX8E,IAAK,aAILC,KAAM,aAIN,SAAU,aAIVC,MAAO,aAIPC,YAAa,SAACvxD,EAAGssD,EAAMoE,GAKnB,GAJA1wD,EAAIsiD,EAAEhkC,OAAOte,EAAGkiD,EAAMyD,QACtB2G,EAAOhK,EAAEhkC,OAAOguC,EAAMpK,EAAMyD,SAC5B+K,EAAepO,EAAEhkC,OAAOoyC,EAAcxO,EAAMyD,UAExB,EAChB,MAAMrE,EAAaM,IAGvB,OAAQ5hD,EAAIssD,GAAQoE,GAGxB,UAAW,aAIX,UAAW,aAIXc,OAAQ,aAIRC,QAAS,aAITC,MAAO,aAIP,SAAU,SAAC1xD,EAAG2xD,EAAarH,GAMvB,GAJAtqD,EAAIsiD,EAAEhkC,OAAOte,EAAGkiD,EAAMyD,QACtBgM,EAAcrP,EAAEhkC,OAAOqzC,EAAazP,EAAMyD,QAC1C2E,EAAahI,EAAEhkC,OAAOgsC,EAAYpI,EAAM0E,SAEpC+K,EAAc,EACd,MAAMrQ,EAAaM,IAGvB,OAAO0I,EAAaL,EAAM2H,SAASrH,IAAIvqD,EAAG2xD,GAAe1H,EAAM2H,SAASpH,IAAIxqD,EAAG2xD,IAGnF,YAAa,SAAC3xD,EAAG2xD,GAMb,GAJA3xD,EAAIsiD,EAAEhkC,OAAOte,EAAGkiD,EAAMyD,SACtBgM,EAAcrP,EAAEhkC,OAAOqzC,EAAazP,EAAMyD,SAGxB,GAAK3lD,EAAI,EACvB,MAAMshD,EAAaM,IAGvB,OAAkD,GAA1C,EAAIqI,EAAM2H,SAASrH,IAAIvqD,EAAG2xD,KAGtC,YAAa,SAAC3xD,EAAG2xD,GAKb,GAHA3xD,EAAIsiD,EAAEhkC,OAAOte,EAAGkiD,EAAMyD,SACtBgM,EAAcrP,EAAEhkC,OAAOqzC,EAAazP,EAAMyD,SAExB,EACd,MAAMrE,EAAaM,IAGvB,OAAO,EAAIqI,EAAM2H,SAASrH,IAAIvqD,EAAG2xD,IAGrC,QAAS,SAAClH,EAAakH,GAMnB,GAJAlH,EAAcnI,EAAEhkC,OAAOmsC,EAAavI,EAAMyD,QAC1CgM,EAAcrP,EAAEhkC,OAAOqzC,EAAazP,EAAMyD,QAGtC8E,GAAe,GAAKA,EAAc,GAAKkH,EAAc,EACrD,MAAMrQ,EAAaM,IAMvB,OAFA+P,EAAcA,EAAc,IAAM,EAAIA,EAAcjzD,KAAK6qD,MAAMoI,GAExD1H,EAAM2H,SAASlH,IAAID,EAAakH,IAG3C,WAAY,SAAClH,EAAakH,GAMtB,GAJAlH,EAAcnI,EAAEhkC,OAAOmsC,EAAavI,EAAMyD,QAC1CgM,EAAcrP,EAAEhkC,OAAOqzC,EAAazP,EAAMyD,QAGtC8E,GAAe,GAAKA,EAAc,GAAKkH,EAAc,EACrD,MAAMrQ,EAAaM,IAKvB,OAFA+P,EAAcA,EAAc,IAAM,EAAIA,EAAcjzD,KAAK6qD,MAAMoI,GAExDjzD,KAAKwD,IAAI+nD,EAAM2H,SAASlH,IAAID,EAAc,EAAGkH,KAIxD,SAAU,aAIVE,MAAO,aAIPC,SAAU,aAIV,QAAS,aAIT,QAAS,aAIT,KAAQ,aAIR,MAAS,aAIT,eAAgB,SAAC9xD,EAAGoqD,EAAOC,EAAMC,GAQ7B,GANAtqD,EAAIsiD,EAAEhkC,OAAOte,EAAGkiD,EAAMyD,QACtByE,EAAQ9H,EAAEhkC,OAAO8rC,EAAOlI,EAAMyD,QAC9B0E,EAAO/H,EAAEhkC,OAAO+rC,EAAMnI,EAAMyD,QAC5B2E,EAAahI,EAAEhkC,OAAOgsC,EAAYpI,EAAM0E,SAGpC5mD,EAAI,GAAKoqD,GAAS,GAAKC,GAAQ,EAC/B,MAAM/I,EAAaM,IAGvB,OAAO0I,EACD,EAAI5rD,KAAKyE,KAAKzE,KAAKw0C,IAAIlzC,EAAIqqD,EAAMD,IACjC1rD,KAAKw0C,IAAIlzC,EAAGoqD,EAAQ,GAAK1rD,KAAKyE,KAAKzE,KAAKw0C,IAAIlzC,EAAIqqD,EAAMD,IAAUA,EAAQ1rD,KAAKw0C,IAAImX,EAAMD,IAGjG,SAAU,cAMdjsD,EAAOC,QAAU,CACb+rD,sBAAAA,+CC1nCE7I,EAAea,EAAQ,MACvB4P,EAAgB5P,EAAQ,KAC9B,EAAgCA,EAAQ,MAAjCE,EAAP,EAAOA,eAAgBH,EAAvB,EAAuBA,MACjBI,EAAID,EACJ2P,EAAS7P,EAAQ,KACjB8H,EAAQ9H,EAAQ,MAMlB8P,GAAW,IAETC,EAAc,qDACdC,EAAqB,iEACrBC,EAAU,gHAEhB,SAASC,EAAQC,GAEb,IAAIC,EAAO,EAAGC,EAAK,EAAGzM,EAAO,IAC7B,GAA4B,kBAF5BuM,EAAehQ,EAAEhkC,OAAOg0C,IAGpB,MAAO,CAACC,KAAMD,EAAcE,GAAAA,EAAIzM,KAAAA,GACpC,GAA4B,mBAAjBuM,EACP,MAAMhR,EAAaQ,MACvB,IAAIlqC,EAAQ06C,EAAa16C,MAAMs6C,GAC/B,GAAIt6C,EAEA,MAAO,CAAC26C,KADRA,EAAOh0D,OAAOqZ,EAAM,IACN46C,GAAAA,EAAIzM,KAAAA,GAGtB,GADAnuC,EAAQ06C,EAAa16C,MAAMu6C,GAIvB,MAAO,CAACI,KAAAA,EAAMC,GAFdA,EAAKj0D,OAAO,gBAAgB+P,KAAKsJ,EAAM,IAAMA,EAAM,GAAK,IAAMA,EAAM,IAElDmuC,KADlBA,EAAOnuC,EAAM,GAAGla,OAAO,IAI3B,GADAka,EAAQ06C,EAAa16C,MAAMw6C,GAKvB,MAAO,CAACG,KAHRA,EAAOh0D,OAAOqZ,EAAM,IAGN46C,GAFdA,EAAKj0D,OAAO,gBAAgB+P,KAAKsJ,EAAM,IAAMA,EAAM,GAAK,IAAMA,EAAM,IAElDmuC,KADlBA,EAAOnuC,EAAM,GAAGla,OAAO,IAG3B,MAAM4jD,EAAaM,IAGvB,IAAM6Q,EAAuB,CACzBC,QAAS,SAAC1yD,EAAGC,GAKT,GAJAD,EAAIsiD,EAAEhkC,OAAOte,EAAGkiD,EAAMyQ,mBACtB1yD,EAAIqiD,EAAEhkC,OAAOre,EAAGiiD,EAAMyQ,oBAEtB1yD,EAAIvB,KAAK6qD,MAAMtpD,IACP,EACJ,MAAMqhD,EAAaM,IAEvB,OAAOoQ,EAAOlvD,QAAQ9C,EAAGC,IAG7B2yD,QAAS,SAAC5yD,EAAGC,GAKT,GAJAD,EAAIsiD,EAAEhkC,OAAOte,EAAGkiD,EAAMyQ,mBACtB1yD,EAAIqiD,EAAEhkC,OAAOre,EAAGiiD,EAAMyQ,oBAEtB1yD,EAAIvB,KAAK6qD,MAAMtpD,IACP,EACJ,MAAMqhD,EAAaM,IAEvB,OAAOoQ,EAAOjxD,QAAQf,EAAGC,IAG7B4yD,QAAS,SAAC7yD,EAAGC,GAKT,GAJAD,EAAIsiD,EAAEhkC,OAAOte,EAAGkiD,EAAMyQ,mBACtB1yD,EAAIqiD,EAAEhkC,OAAOre,EAAGiiD,EAAMyQ,oBAEtB1yD,EAAIvB,KAAK6qD,MAAMtpD,IACP,EACJ,MAAMqhD,EAAaM,IAGvB,OAAOoQ,EAAOzuD,QAAQvD,EAAGC,IAG7B6yD,QAAS,SAAC9yD,EAAGC,GAKT,GAJAD,EAAIsiD,EAAEhkC,OAAOte,EAAGkiD,EAAMyQ,mBACtB1yD,EAAIqiD,EAAEhkC,OAAOre,EAAGiiD,EAAMyQ,oBAEtB1yD,EAAIvB,KAAK6qD,MAAMtpD,IACP,EACJ,MAAMqhD,EAAaM,IAGvB,OAAOoQ,EAAOpvD,QAAQ5C,EAAGC,IAG7B8yD,QAAS,SAACC,GAEN,IAAIC,GADJD,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyQ,oBACT/zD,WAEvB,GAAIq0D,EAAU11D,OAAS,GACnB,MAAM+jD,EAAaM,IAGvB,OAAyB,KAArBqR,EAAU11D,QAA+C,MAA9B01D,EAAUz2C,UAAU,EAAG,GAC3C02C,SAASD,EAAUz2C,UAAU,GAAI,GAAKy1C,EAEtCiB,SAASD,EAAW,IAInCE,QAAS,SAACH,EAAQI,GACdJ,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyQ,mBAChCS,EAAS9Q,EAAEhkC,OAAO80C,EAAQlR,EAAMyQ,kBAAmB,MAEnD,IAAMM,EAAYD,EAAOp0D,WACzB,GAAIq0D,EAAU11D,OAAS,GACnB,MAAM+jD,EAAaM,IAEvB,GAAyB,KAArBqR,EAAU11D,QAA+C,MAA9B01D,EAAUz2C,UAAU,EAAG,GAClD,OAAQ02C,SAASD,EAAUz2C,UAAU,GAAI,GAAK,cAAe5d,SAAS,IAAI+H,cAG9E,IAAMtJ,EAAS61D,SAASF,EAAQ,GAAGp0D,SAAS,IAE5C,GAAc,MAAVw0D,EACA,OAAO/1D,EAAOsJ,cAEd,GAAIysD,EAAS,EACT,MAAM9R,EAAaM,IAIvB,IADAwR,EAAS10D,KAAK6qD,MAAM6J,KACN/1D,EAAOE,OACjB,OAAQw0D,EAAcsB,KAAK,IAAKD,EAAS/1D,EAAOE,QAAUF,GAAQsJ,cAElE,MAAM26C,EAAaM,KAK/B0R,QAAS,SAACN,EAAQI,GACdJ,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyQ,mBAChCS,EAAS9Q,EAAEhkC,OAAO80C,EAAQlR,EAAMyD,OAAQ,MAExC,IAAIsN,EAAYD,EAAOp0D,WACvB,GAAIq0D,EAAU11D,OAAS,GACnB,MAAM+jD,EAAaM,IAEvB,GAAyB,KAArBqR,EAAU11D,QAA4C,MAA3B01D,EAAU/0D,OAAO,EAAG,GAC/C,OAAQg1D,SAASD,EAAU/0D,OAAO,GAAI,GAAK,YAAYU,SAAS,GAGpE,IAAIvB,EAAS61D,SAASF,EAAQ,GAAGp0D,SAAS,GAC1C,GAAc,MAAVw0D,EACA,OAAO/1D,EAAOsJ,cAEd,GAAIysD,EAAS,EACT,MAAM9R,EAAaM,IAIvB,IADAwR,EAAS10D,KAAK6qD,MAAM6J,KACN/1D,EAAOE,OACjB,OAAQw0D,EAAcsB,KAAK,IAAKD,EAAS/1D,EAAOE,QAAUF,EAE1D,MAAMikD,EAAaM,KAK/B2R,OAAQ,SAACC,EAASC,GAGd,GAFAD,EAAUlR,EAAEhkC,OAAOk1C,EAAStR,EAAMyD,QAClC8N,EAAUnR,EAAEhkC,OAAOm1C,EAASvR,EAAMyD,QAC9B6N,EAAU,GAAKC,EAAU,EACzB,MAAMnS,EAAaM,IAGvB,GAAIljD,KAAKC,MAAM60D,KAAaA,GAAW90D,KAAKC,MAAM80D,KAAaA,EAC3D,MAAMnS,EAAaM,IAEvB,GAAI4R,EAAU,gBAAmBC,EAAU,eACvC,MAAMnS,EAAaM,IAGvB,OAAO4R,EAAUC,GAGrBC,UAAW,SAACV,EAAQW,GAIhB,GAHAX,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QAChCgO,EAAcrR,EAAEhkC,OAAOq1C,EAAazR,EAAMyD,QAC1CgO,EAAcj1D,KAAK6qD,MAAMoK,GACrBj1D,KAAKwD,IAAIyxD,GAAe,GACxB,MAAMrS,EAAaM,IAGvB,GAAIoR,EAAS,GAAKt0D,KAAKC,MAAMq0D,KAAYA,GAAUA,EAAS,eACxD,MAAM1R,EAAaM,IAEvB,IAAMvkD,EAAUs2D,GAAe,EAAKX,EAAS,KAAH,IAAG,EAAKW,GAAcj1D,KAAK6qD,MAAMyJ,EAAS,KAAH,IAAG,GAAMW,IAC1F,GAAIt2D,EAAS,eACT,MAAMikD,EAAaM,IAEnB,OAAOvkD,GAGfu2D,MAAO,SAACJ,EAASC,GAGb,GAFAD,EAAUlR,EAAEhkC,OAAOk1C,EAAStR,EAAMyD,QAClC8N,EAAUnR,EAAEhkC,OAAOm1C,EAASvR,EAAMyD,QAC9B6N,EAAU,GAAKC,EAAU,EACzB,MAAMnS,EAAaM,IAGvB,GAAIljD,KAAKC,MAAM60D,KAAaA,GAAW90D,KAAKC,MAAM80D,KAAaA,EAC3D,MAAMnS,EAAaM,IAEvB,GAAI4R,EAAU,gBAAmBC,EAAU,eACvC,MAAMnS,EAAaM,IAGvB,OAAO4R,EAAUC,GAGrBI,UAAW,SAACb,EAAQW,GAGhB,OAFAX,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QAChCgO,EAAcrR,EAAEhkC,OAAOq1C,EAAazR,EAAMyD,QACnC8M,EAAqBiB,UAAUV,GAASW,IAGnDG,OAAQ,SAACN,EAASC,GAGd,GAFAD,EAAUlR,EAAEhkC,OAAOk1C,EAAStR,EAAMyD,QAClC8N,EAAUnR,EAAEhkC,OAAOm1C,EAASvR,EAAMyD,QAC9B6N,EAAU,GAAKA,EAAU,gBAAmB90D,KAAKC,MAAM60D,KAAaA,EACpE,MAAMlS,EAAaM,IAEvB,GAAI6R,EAAU,GAAKA,EAAU,gBAAmB/0D,KAAKC,MAAM80D,KAAaA,EACpE,MAAMnS,EAAaM,IAOvB,OAAO4R,EAAUC,GAGrBM,QAAS,SAACC,EAASC,EAAMC,GAIrB,GAHAF,EAAU1R,EAAEhkC,OAAO01C,EAAS9R,EAAMyQ,mBAClCsB,EAAO3R,EAAEhkC,OAAO21C,EAAM/R,EAAMyQ,mBAEb,OADfuB,EAAS5R,EAAEhkC,OAAO41C,EAAQhS,EAAM8D,OAAQ,OACP,MAAXkO,EAClB,MAAM5S,EAAaQ,MAEvB,GAAgB,IAAZkS,GAA0B,IAATC,EACjB,OAAO,EACJ,GAAgB,IAAZD,EACP,OAAa,IAATC,EACOC,GACU,IAAVD,EACA,IAAMC,EAEND,EAAKr1D,WAAas1D,EAE1B,GAAa,IAATD,EACP,OAAOD,EAAQp1D,WAEf,IAAIwB,EAAQ6zD,EAAO,EAAK,IAAM,GAC9B,OAAa,IAATA,EACOD,EAAQp1D,WAAawB,EAAO8zD,GAClB,IAAVD,EACAD,EAAQp1D,WAAawB,EAAO,IAAM8zD,EAElCF,EAAQp1D,WAAawB,EAAO6zD,EAAKr1D,WAAas1D,GAKjEC,QAAS,SAACnB,EAAQI,GAGd,GAFAJ,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QAChCyN,EAAS9Q,EAAEhkC,OAAO80C,EAAQlR,EAAMyD,OAAQ,MACpCqN,EAASf,GAAWe,EAzQlB,IA0QF,MAAM1R,EAAaM,IAIvB,GAAIoR,EAAS,EACT,MAAO,IAAMjB,EAAcsB,KAAK,IAAK,GAAK,IAAML,GAAQp0D,SAAS,GAAGrB,SAAW,IAAMy1D,GAAQp0D,SAAS,GAG1G,IAAIvB,EAAS61D,SAASF,EAAQ,IAAIp0D,SAAS,GAC3C,GAAc,MAAVw0D,EACA,OAAO/1D,EAIP,IADA+1D,EAAS10D,KAAK6qD,MAAM6J,KACN,EACV,MAAM9R,EAAaM,IAEvB,GAAIwR,EAAS/1D,EAAOE,OAChB,MAAM+jD,EAAaM,IACvB,OAAOmQ,EAAcsB,KAAK,IAAKD,EAAS/1D,EAAOE,QAAUF,GAIjE+2D,QAAS,SAACpB,EAAQI,GAGd,GAFAJ,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QAChCyN,EAAS9Q,EAAEhkC,OAAO80C,EAAQlR,EAAMyD,OAAQ,MACpCqN,GAAU,cAAgBA,EAAS,aACnC,MAAM1R,EAAaM,IAIvB,GAAIoR,EAAS,EACT,OAAQ,cAAgBA,GAAQp0D,SAAS,IAAI+H,cAGjD,IAAItJ,EAAS61D,SAASF,EAAQ,IAAIp0D,SAAS,IAE3C,GAAc,MAAVw0D,EACA,OAAO/1D,EAAOsJ,cAId,IADAysD,EAAS10D,KAAK6qD,MAAM6J,KACN,EACV,MAAM9R,EAAaM,IAEvB,GAAIwR,EAAS/1D,EAAOE,OAChB,MAAM+jD,EAAaM,IACvB,OAAOmQ,EAAcsB,KAAK,IAAKD,EAAS/1D,EAAOE,QAAUF,EAAOsJ,eAIxE0tD,QAAS,SAACrB,EAAQI,GAGd,GAFAJ,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QAChCyN,EAAS9Q,EAAEhkC,OAAO80C,EAAQlR,EAAMyD,OAAQ,MACpCqN,GAAU,WAAaA,EAAS,UAChC,MAAM1R,EAAaM,IAIvB,GAAIoR,EAAS,EACT,OAAQA,EAAS,YAAYp0D,SAAS,GAG1C,IAAIvB,EAAS61D,SAASF,EAAQ,IAAIp0D,SAAS,GAE3C,GAAc,MAAVw0D,EACA,OAAO/1D,EAAOsJ,cAId,IADAysD,EAAS10D,KAAK6qD,MAAM6J,KACN,EACV,MAAM9R,EAAaM,IAEvB,GAAIwR,EAAS/1D,EAAOE,OAChB,MAAM+jD,EAAaM,IACvB,OAAOmQ,EAAcsB,KAAK,IAAKD,EAAS/1D,EAAOE,QAAUF,GAIjEi3D,MAAO,SAACd,EAASC,GAIb,OAHAD,EAAUlR,EAAEhkC,OAAOk1C,EAAStR,EAAMyQ,uBAClCc,EAAUnR,EAAEhkC,OAAOm1C,EAASvR,EAAMyQ,kBAAmB,IAExB,EAAI,GAGrC4B,IAAK,SAACC,EAAYC,GAGd,OAFAD,EAAalS,EAAEhkC,OAAOk2C,EAAYtS,EAAMyQ,mBACxC8B,EAAanS,EAAEhkC,OAAOm2C,EAAYvS,EAAMyQ,kBAAmB,GACpD1I,EAAMyK,IAAIF,IAGrBG,KAAM,SAAC30D,GAEH,OADAA,EAAIsiD,EAAEhkC,OAAOte,EAAGkiD,EAAMyQ,mBACf1I,EAAM2K,KAAK50D,IAGtB60D,OAAQ,SAAC7B,EAAQ8B,GAGb,OAFA9B,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyQ,sBAChCmC,EAAOxS,EAAEhkC,OAAOw2C,EAAM5S,EAAMyQ,kBAAmB,IACvB,EAAI,GAGhCoC,QAAS,SAAC/B,EAAQI,GAId,GAHAJ,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAM8D,QAChCoN,EAAS9Q,EAAEhkC,OAAO80C,EAAQlR,EAAMyD,OAAQ,MAEpCqN,EAAOz1D,OAAS,KAAO,iBAAiB+Q,KAAK0kD,GAC7C,MAAM1R,EAAaM,IAGvB,IAAIoT,EAAgC,KAAlBhC,EAAOz1D,QAAuD,MAAtCy1D,EAAO90D,OAAO,EAAG,GAAG4I,cAE1DmuD,EAAYD,EAAa9B,SAASF,EAAQ,IAAM,cAAgBE,SAASF,EAAQ,IAErF,GAAIiC,EAAYhD,GAAWgD,EA7XrB,IA8XF,MAAM3T,EAAaM,IAGvB,GAAIoT,EACA,MAAO,IAAMjD,EAAcsB,KAAK,IAAK,GAAK4B,EAAY,KAAKr2D,SAAS,GAAGrB,SAAW03D,EAAY,KAAKr2D,SAAS,GAGhH,IAAIs2D,EAAWD,EAAUr2D,SAAS,GAElC,GAAc,MAAVw0D,EACA,OAAO8B,EAIP,IADA9B,EAAS10D,KAAK6qD,MAAM6J,KACN,GAAKA,EAAS8B,EAAS33D,OACjC,MAAM+jD,EAAaM,IAEvB,OAAOmQ,EAAcsB,KAAK,IAAKD,EAAS8B,EAAS33D,QAAU23D,GAInEC,QAAS,SAACnC,GAEN,IADAA,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAM8D,SACrBzoD,OAAS,KAAO,iBAAiB+Q,KAAK0kD,GAC7C,MAAM1R,EAAaM,IAEvB,IAAIvkD,EAAS61D,SAASF,EAAQ,IAK9B,OAAQ31D,GAAU,aAAgBA,EAAS,cAAgBA,GAG/D+3D,QAAS,SAACpC,EAAQI,GAEd,IADAJ,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAM8D,SACrBzoD,OAAS,KAAO,iBAAiB+Q,KAAK0kD,GAC7C,MAAM1R,EAAaM,IAGvB,IAAIqT,EAAYxC,EAAqB0C,QAAQnC,GAC7C,GAAIiC,EA3aI,WA2amBA,GA1arB,UA2aF,MAAM3T,EAAaM,IAEvB,OAAO6Q,EAAqB4B,QAAQY,EAAW7B,IAGnDiC,MAAO,SAACC,GACJ,MAAmBjD,EAAQiD,GAApB/C,EAAP,EAAOA,KAAMC,EAAb,EAAaA,GACb,OAAO9zD,KAAKiD,KAAKjD,KAAKw0C,IAAIqf,EAAM,GAAK7zD,KAAKw0C,IAAIsf,EAAI,KAGtD+C,UAAW,SAACD,GACR,OAAOjD,EAAQiD,GAAS9C,IAG5BgD,WAAY,SAACF,GACT,MAAmBjD,EAAQiD,GAApB/C,EAAP,EAAOA,KAAMC,EAAb,EAAaA,GAEb,GAAa,IAATD,GAAqB,IAAPC,EACd,MAAMlR,EAAaI,KAGvB,OAAa,IAAT6Q,GAAcC,EAAK,EACZ9zD,KAAKitD,GAAK,EAGR,IAAT4G,GAAcC,EAAK,GACX9zD,KAAKitD,GAAK,EAGlB4G,EAAO,GAAY,IAAPC,EACL9zD,KAAKitD,GAGZ4G,EAAO,GAAY,IAAPC,EACL,EAGPD,EAAO,EACA7zD,KAAK+2D,KAAKjD,EAAKD,GACfA,EAAO,GAAKC,EAAK,EACjB9zD,KAAK+2D,KAAKjD,EAAKD,GAAQ7zD,KAAKitD,GAE5BjtD,KAAK+2D,KAAKjD,EAAKD,GAAQ7zD,KAAKitD,IAK3C+J,YAAa,SAACJ,GACV,MAAyBjD,EAAQiD,GAA1B/C,EAAP,EAAOA,KAAMC,EAAb,EAAaA,GAAIzM,EAAjB,EAAiBA,KACjB,OAAe,IAAPyM,EAAYC,EAAqBsB,QAAQxB,GAAOC,EAAIzM,GAAQ,GAAKwM,GAG7EoD,MAAO,SAACL,GACJ,MAAyBjD,EAAQiD,GAA1B/C,EAAP,EAAOA,KAAMC,EAAb,EAAaA,GAAIzM,EAAjB,EAAiBA,KACb6P,EAAYl3D,KAAKkD,IAAI2wD,IAAS7zD,KAAKyE,IAAIqvD,GAAM9zD,KAAKyE,KAAKqvD,IAAO,EAC9DqD,GAAkBn3D,KAAKmD,IAAI0wD,IAAS7zD,KAAKyE,IAAIqvD,GAAM9zD,KAAKyE,KAAKqvD,IAAO,EAExE,OAAOC,EAAqBsB,QAAQ6B,EAAWC,EAAgB9P,IAGnE+P,OAAQ,SAACR,GACL,MAAyBjD,EAAQiD,GAA1B/C,EAAP,EAAOA,KAAMC,EAAb,EAAaA,GAAIzM,EAAjB,EAAiBA,KACb6P,EAAYl3D,KAAKkD,IAAI4wD,IAAO9zD,KAAKyE,IAAIovD,GAAQ7zD,KAAKyE,KAAKovD,IAAS,EAChEsD,GAAkBn3D,KAAKmD,IAAI2wD,IAAO9zD,KAAKyE,IAAIovD,GAAQ7zD,KAAKyE,KAAKovD,IAAS,EAC1E,OAAOE,EAAqBsB,QAAQ6B,GAAYC,EAAgB9P,IAGpEgQ,MAAO,SAACT,GACJA,EAAUhT,EAAEhkC,OAAOg3C,GACnB,IAAI/C,EAAOE,EAAqBkD,MAAML,GAClCU,EAAYvD,EAAqBwD,MAAMX,GAC3C,OAAO7C,EAAqByD,MAAM3D,EAAMyD,IAG5CG,MAAO,SAACb,GAEJ,OADAA,EAAUhT,EAAEhkC,OAAOg3C,GACZ7C,EAAqByD,MAAM,IAAKzD,EAAqBwD,MAAMX,KAGtEc,OAAQ,SAACd,GAEL,OADAA,EAAUhT,EAAEhkC,OAAOg3C,GACZ7C,EAAqByD,MAAM,IAAKzD,EAAqB4D,OAAOf,KAGvEY,MAAO,SAACI,EAAUC,GACd,IAAMC,EAAOnE,EAAQiE,GACfh1D,EAAIk1D,EAAKjE,KAAM5V,EAAI6Z,EAAKhE,GAAIiE,EAAQD,EAAKzQ,KAEzC2Q,EAAOrE,EAAQkE,GACf7jD,EAAIgkD,EAAKnE,KAAMpL,EAAIuP,EAAKlE,GAAImE,EAAQD,EAAK3Q,KAE/C,GAAU,IAANrzC,GAAiB,IAANy0C,GAAWsP,IAAUE,EAChC,MAAMrV,EAAaM,IAEvB,IAAImE,EAAO0Q,EAEPrI,EAAc1vD,KAAKw0C,IAAIxgC,EAAG,GAAKhU,KAAKw0C,IAAIiU,EAAG,GAC/C,OAAOsL,EAAqBsB,SAASzyD,EAAIoR,EAAIiqC,EAAIwK,GAAKiH,GAAczR,EAAIjqC,EAAIpR,EAAI6lD,GAAKiH,EAAarI,IAGtG6Q,MAAO,SAACtB,GACJ,MAAyBjD,EAAQiD,GAA1B/C,EAAP,EAAOA,KAAMC,EAAb,EAAaA,GAAIzM,EAAjB,EAAiBA,KAEbnhD,EAAIlG,KAAKyE,IAAIovD,GACjB,OAAOE,EAAqBsB,QAAQnvD,EAAIlG,KAAKkD,IAAI4wD,GAAK5tD,EAAIlG,KAAKmD,IAAI2wD,GAAKzM,IAG5E8Q,KAAM,SAACvB,GACH,MAAyBjD,EAAQiD,GAA1B/C,EAAP,EAAOA,KAAMC,EAAb,EAAaA,GAAIzM,EAAjB,EAAiBA,KACjB,OAAO0M,EAAqBsB,QAAQr1D,KAAKmE,IAAInE,KAAKiD,KAAKjD,KAAKw0C,IAAIqf,EAAM,GAAK7zD,KAAKw0C,IAAIsf,EAAI,KACpF9zD,KAAK+2D,KAAKjD,EAAKD,GAAOxM,IAG9B+Q,QAAS,SAACxB,GACN,MAAyBjD,EAAQiD,GAA1B/C,EAAP,EAAOA,KAAMC,EAAb,EAAaA,GAAIzM,EAAjB,EAAiBA,KACb6P,EAAYl3D,KAAKmE,IAAInE,KAAKiD,KAAKjD,KAAKw0C,IAAIqf,EAAM,GAAK7zD,KAAKw0C,IAAIsf,EAAI,KAAO9zD,KAAKmE,IAAI,IAChFgzD,EAAiBn3D,KAAK+2D,KAAKjD,EAAKD,GAAQ7zD,KAAKmE,IAAI,IACrD,OAAO4vD,EAAqBsB,QAAQ6B,EAAWC,EAAgB9P,IAGnEgR,OAAQ,SAACzB,GACL,MAAyBjD,EAAQiD,GAA1B/C,EAAP,EAAOA,KAAMC,EAAb,EAAaA,GAAIzM,EAAjB,EAAiBA,KACb6P,EAAYl3D,KAAKmE,IAAInE,KAAKiD,KAAKjD,KAAKw0C,IAAIqf,EAAM,GAAK7zD,KAAKw0C,IAAIsf,EAAI,KAAO9zD,KAAKmE,IAAI,GAChFgzD,EAAiBn3D,KAAK+2D,KAAKjD,EAAKD,GAAQ7zD,KAAKmE,IAAI,GACrD,OAAO4vD,EAAqBsB,QAAQ6B,EAAWC,EAAgB9P,IAGnEiR,QAAS,SAAC1B,EAAStC,GACf,IAAKjN,EAAQsM,EAAQiD,GAAhBvP,KACLiN,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyQ,mBAGhC,IAAIjH,EAAIhtD,KAAKw0C,IAAIuf,EAAqB4C,MAAMC,GAAUtC,GAElD9kC,EAAIukC,EAAqB+C,WAAWF,GAEpC/C,EAAO7G,EAAIhtD,KAAKkD,IAAIoxD,EAAS9kC,GAC7B8nC,EAAYtK,EAAIhtD,KAAKmD,IAAImxD,EAAS9kC,GACtC,OAAOukC,EAAqBsB,QAAQxB,EAAMyD,EAAWjQ,IAGzDkR,UAAW,WAAe,IACtB,IAAI55D,EACAO,EAAI,EAFc,mBAAXs5D,EAAW,yBAAXA,EAAW,gBAkBtB,OAfA5U,EAAEwF,cAAcoP,EAAQ,MAAM,GAAO,SAACjoC,GAClC,GAAU,IAANrxB,EAEAy0D,EADAh1D,EAASilD,EAAEhkC,OAAO2Q,QAEf,CACH,IAAMunC,EAAOnE,EAAQh1D,GACfiE,EAAIk1D,EAAKjE,KAAM5V,EAAI6Z,EAAKhE,GAAIiE,EAAQD,EAAKzQ,KACzC2Q,EAAOrE,EAAQpjC,GACfvc,EAAIgkD,EAAKnE,KAAMpL,EAAIuP,EAAKlE,GAC9B,GAAIiE,IADsCC,EAAK3Q,KAE3C,MAAMzE,EAAaQ,MACvBzkD,EAASo1D,EAAqBsB,QAAQzyD,EAAIoR,EAAIiqC,EAAIwK,EAAG7lD,EAAI6lD,EAAIxK,EAAIjqC,GAErE9U,MACD,GACIP,GAGX85D,OAAQ,SAAC7B,GACL,OAAOjD,EAAQiD,GAAS/C,MAG5B6E,MAAO,SAAC9B,GACJ,OAAO7C,EAAqByD,MAAM,IAAKzD,EAAqBkD,MAAML,KAGtE+B,OAAQ,SAAC/B,GACL,OAAO7C,EAAqByD,MAAM,IAAKzD,EAAqBqD,OAAOR,KAGvEW,MAAO,SAACX,GACJ,MAAyBjD,EAAQiD,GAA1B/C,EAAP,EAAOA,KAAMC,EAAb,EAAaA,GAAIzM,EAAjB,EAAiBA,KAEb6P,EAAYl3D,KAAKmD,IAAI0wD,IAAS7zD,KAAKyE,IAAIqvD,GAAM9zD,KAAKyE,KAAKqvD,IAAO,EAC9DqD,EAAiBn3D,KAAKkD,IAAI2wD,IAAS7zD,KAAKyE,IAAIqvD,GAAM9zD,KAAKyE,KAAKqvD,IAAO,EACvE,OAAOC,EAAqBsB,QAAQ6B,EAAWC,EAAgB9P,IAGnEsQ,OAAQ,SAACf,GACL,MAAyBjD,EAAQiD,GAA1B/C,EAAP,EAAOA,KAAMC,EAAb,EAAaA,GAAIzM,EAAjB,EAAiBA,KACb6P,EAAYl3D,KAAKkD,IAAI4wD,IAAO9zD,KAAKyE,IAAIovD,GAAQ7zD,KAAKyE,KAAKovD,IAAS,EAChEsD,EAAiBn3D,KAAKmD,IAAI2wD,IAAO9zD,KAAKyE,IAAIovD,GAAQ7zD,KAAKyE,KAAKovD,IAAS,EACzE,OAAOE,EAAqBsB,QAAQ6B,EAAWC,EAAgB9P,IAGnEuR,OAAQ,SAAChC,GACL,IAAOvP,EAAQsM,EAAQiD,GAAhBvP,KAEHwR,EAAQ74D,KAAKiD,KAAK8wD,EAAqB4C,MAAMC,IAE7CkC,EAAW/E,EAAqB+C,WAAWF,GAC/C,OAAO7C,EAAqBsB,QAAQwD,EAAQ74D,KAAKkD,IAAI41D,EAAW,GAAID,EAAQ74D,KAAKmD,IAAI21D,EAAW,GAAIzR,IAGxG0R,MAAO,SAACnB,EAAUC,GACd,IAAMC,EAAOnE,EAAQiE,GACfh1D,EAAIk1D,EAAKjE,KAAM5V,EAAI6Z,EAAKhE,GAAIiE,EAAQD,EAAKzQ,KACzC2Q,EAAOrE,EAAQkE,GACf7jD,EAAIgkD,EAAKnE,KAAMpL,EAAIuP,EAAKlE,GAE9B,GAAIiE,IAFsCC,EAAK3Q,KAG3C,MAAMzE,EAAaQ,MAEvB,OAAO2Q,EAAqBsB,QAAQzyD,EAAIoR,EAAGiqC,EAAIwK,EAAGsP,IAGtDiB,MAAO,WAAe,IAClB,IAA4BC,EAAxBC,EAAU,EAAGC,EAAQ,EADP,mBAAXX,EAAW,yBAAXA,EAAW,gBAUlB,OARA5U,EAAEwF,cAAcoP,EAAQ,MAAM,GAAO,SAACjoC,GAClC,MAAyBojC,EAAQpjC,GAA1BsjC,EAAP,EAAOA,KAAMC,EAAb,EAAaA,GAAIzM,EAAjB,EAAiBA,KAEjB,GADK4R,IAAUA,EAAW5R,GACtB4R,IAAa5R,EACb,MAAMzE,EAAaQ,MACvB8V,GAAWrF,EACXsF,GAASrF,KAENC,EAAqBsB,QAAQ6D,EAASC,EAAOF,IAGxDG,MAAO,SAACxC,GACJ,IAAOvP,EAAQsM,EAAQiD,GAAhBvP,KACP,OAAO0M,EAAqByD,MAAMzD,EAAqBwD,MAAMX,GAAU7C,EAAqBkD,MAAML,GAAUvP,IAIhHgS,QAAS,SAAC/E,EAAQI,GAOd,GAJAJ,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAM8D,QAChCoN,EAAS9Q,EAAEhkC,OAAO80C,EAAQlR,EAAMyD,OAAQ,MAGpCqN,EAAOz1D,OAAS,GAChB,MAAM+jD,EAAaM,IAGvB,GAAIwR,EAAS,GACT,MAAM9R,EAAaM,IAIvB,GAAe,OAAXwR,GAAmBA,EAAS,EAC5B,MAAM9R,EAAaM,IAIvBwR,EAAS10D,KAAK6qD,MAAM6J,GAGpB,IAAI4E,EAAgC,KAAlBhF,EAAOz1D,QAA4C,MAA3By1D,EAAOx2C,UAAU,EAAG,GAE1Dy4C,EAAYxC,EAAqBwF,QAAQjF,GAI7C,GAAIiC,EAAYhD,GAAWgD,EA3qBrB,IA4qBF,OAAO3T,EAAaM,IAIxB,GAAIoW,EACA,MAAO,IAAMjG,EAAcsB,KAAK,IAAK,GAAK,IAAM4B,GAAWr2D,SAAS,GAAGrB,SAAW,IAAM03D,GAAWr2D,SAAS,GAIhH,IAAIvB,EAAS43D,EAAUr2D,SAAS,GAIhC,GAAe,IAAXw0D,EACA,OAAO/1D,EAIX,GAAI+1D,EAAS/1D,EAAOE,OAChB,MAAM+jD,EAAaM,IAGvB,OAAOmQ,EAAcsB,KAAK,IAAKD,EAAS/1D,EAAOE,QAAUF,GAG7D46D,QAAS,SAACjF,GAGN,IAFAA,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAM8D,SAErBzoD,OAAS,GAChB,MAAM+jD,EAAaM,IAJN,UAQDoR,GARC,IAQjB,2BAAwB,KAAb/yD,EAAa,QACpB,GAAIA,EAAI,KAAOA,EAAI,IACf,MAAMqhD,EAAaM,KAVV,8BAcjB,IAAIvkD,EAAS61D,SAASF,EAAQ,GAC9B,OAAQ31D,GAAU,UAAaA,EAAS,WAAaA,GAIzD66D,QAAS,SAAClF,EAAQI,GAGd,GAFAJ,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAM8D,QAChCoN,EAAS9Q,EAAEhkC,OAAO80C,EAAQlR,EAAMyQ,kBAAmB,MAC/CK,EAAOz1D,OAAS,GAChB,MAAM+jD,EAAaM,IAJE,UAOToR,GAPS,IAOzB,2BAAwB,KAAb/yD,EAAa,QACpB,GAAIA,EAAI,KAAOA,EAAI,IACf,MAAMqhD,EAAaM,KATF,8BAezB,IAFAwR,EAAS10D,KAAK6qD,MAAM6J,IAEP,GAAKA,EAAS,GACvB,MAAM9R,EAAaM,IAIvB,IAAIqT,EAAYxC,EAAqBwF,QAAQjF,GAIzCmF,EAAQ1F,EAAqB2B,QAAQa,GAEzC,GAAe,IAAX7B,EACA,OAAO+E,EAEX,GAAI/E,EAAS+E,EAAM56D,OACf,MAAM+jD,EAAaM,IAEnB,OAAOmQ,EAAcsB,KAAK,IAAKD,EAAS+E,EAAM56D,QAAU46D,IAKpEh6D,EAAOC,QAAUq0D,wBCvwBjB,IAAMnR,EAAea,EAAQ,MAC7B,EAAgCA,EAAQ,MAAjCE,EAAP,EAAOA,eAAgBH,EAAvB,EAAuBA,MACjBI,EAAID,EAEJ+V,EAAe,CACjB,SAAU,EAAG,UAAW,EAAG,UAAW,EAAG,QAAS,EAAG,SAAU,EAC/D,QAAS,EAAG,OAAQ,GAGlBC,EAAgB,CAElBC,KAAM,SAACC,EAAUC,KAIjB,aAAc,SAAC/zD,GAEX,IADAA,EAAQ69C,EAAEhkC,OAAO7Z,cACK68C,EAClB,OAAO8W,EAAa3zD,EAAM7F,YAC9B,MAAM0iD,EAAa73C,IAGvBgvD,KAAM,aAGNC,QAAS,SAACj0D,GACN,QAAKA,EAAMukB,MAGW,MAAfvkB,EAAMA,OAAiC,KAAhBA,EAAMA,QAGxCk0D,MAAO,SAACl0D,GAEJ,OADAA,EAAQ69C,EAAEhkC,OAAO7Z,cACO68C,GAAqC,SAArB78C,EAAM7F,YAGlDg6D,QAAS,SAACn0D,GAEN,OADAA,EAAQ69C,EAAEhkC,OAAO7Z,cACO68C,GAG5BuX,OAAQ,SAAA7F,GAGJ,OAFAA,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,SAChCqN,EAASt0D,KAAK6qD,MAAMyJ,IACJ,IAAM,GAG1B8F,UAAW,SAACr0D,GAER,MAAwB,mBADxBA,EAAQ69C,EAAEhkC,OAAO7Z,KAIrBs0D,KAAM,SAACt0D,GAEH,OADAA,EAAQ69C,EAAEhkC,OAAO7Z,cACO68C,GAAqC,SAArB78C,EAAM7F,YAGlDo6D,UAAW,SAACv0D,GAER,MAAwB,kBADxBA,EAAQ69C,EAAEhkC,OAAO7Z,KAIrBw0D,SAAU,SAACx0D,GAEP,MAAwB,kBADxBA,EAAQ69C,EAAEhkC,OAAO7Z,KAIrBy0D,MAAO,SAACz0D,GACJ,QAAKA,EAAMukB,QAEPs5B,EAAE6W,UAAU10D,MAAWA,EAAMukB,IAAIsiC,IAAM,SAAW7mD,EAAMukB,IAAIuiC,IAAM,YAGlEjJ,EAAE8W,WAAW30D,MAAWA,EAAMukB,IAAI/pB,KAAKqsD,IAAM,SAAW7mD,EAAMukB,IAAI/pB,KAAKssD,IAAM,OAC1E9mD,EAAMukB,IAAIvjB,GAAG6lD,IAAM,SAAW7mD,EAAMukB,IAAIvjB,GAAG8lD,IAAM,YAGxD9mD,EAAQ69C,EAAEhkC,OAAO7Z,cACS68C,GAAqC,UAArB78C,EAAM7F,eAGpDy6D,OAAQ,SAAC50D,GAEL,MAAwB,kBADxBA,EAAQ69C,EAAEhkC,OAAO7Z,KAIrB0rD,EAAG,SAAA1rD,GAEC,IAAMM,SADNN,EAAQ69C,EAAEhkC,OAAO7Z,IAEjB,GAAa,WAATM,EACA,OAAON,EACN,GAAa,YAATM,EACL,OAAOxG,OAAOkG,GACb,GAAIA,aAAiB68C,EACtB,MAAM78C,EACV,OAAO,GAGXgF,GAAI,WACA,MAAM63C,EAAa73C,IAGvB6vD,KAAM,SAAA70D,GAEF,GAAIA,EAAMukB,IAAK,CACX,GAAIs5B,EAAE8W,WAAW30D,GACb,OAAO,GACJ,GAAI69C,EAAE6W,UAAU10D,IAGE,kBAFrBA,EAAQ69C,EAAEhkC,OAAO7Z,KAEiC,IAAjBA,EAAMlH,OACnC,OAAO,EAInB,IAAMwH,SADNN,EAAQ69C,EAAEhkC,OAAO7Z,IAEjB,MAAa,WAATM,EACO,EACO,WAATA,EACE,EACO,YAATA,EACE,EACFN,aAAiB68C,EACf,GACFtiD,MAAM86C,QAAQr1C,GACZ,QADN,IAMbtG,EAAOC,QAAUi6D,8CCnIX/W,EAAea,EAAQ,MAC7B,EAAiCA,EAAQ,MAAlCE,EAAP,EAAOA,eAAgBH,EAAvB,EAAuBA,MACjBI,EAAID,EAUV,SAASkX,EAAmBrC,GACxB,IAAIsC,EAAU,EAAGC,EAAW,EAkB5B,OAjBAnX,EAAEwF,cAAcoP,EAAQ,MAAM,GAAM,SAAA3iD,GAChC,IAAMxP,SAAcwP,EACP,WAATxP,EACY,SAARwP,EACAA,GAAM,EACO,UAARA,IACLA,GAAM,GACM,WAATxP,IACPwP,EAAMmlD,QAAQnlD,IAEC,mBAARA,KACK,IAARA,EACAilD,IAEAC,QAGL,CAACD,EAASC,GAGrB,IAAME,EAAmB,CACrBC,IAAK,WAAe,2BAAX1C,EAAW,yBAAXA,EAAW,gBAChB,MAA4BqC,EAAmBrC,GAA/C,SAAOsC,EAAP,KAAgBC,EAAhB,KAGA,OAAgB,IAAZD,GAA8B,IAAbC,EACVnY,EAAaQ,MAEjB0X,EAAU,GAAkB,IAAbC,GAG1BI,MAAO,WACH,OAAO,GAIXC,GAAI,SAACjoB,EAASkoB,EAAaC,EAAaC,GAKpC,OAJAF,EAAczX,EAAEhkC,OAAOy7C,EAAa7X,EAAM0E,SAC1CoT,EAAc1X,EAAEhkC,OAAO07C,GACvBC,EAAe3X,EAAEhkC,OAAO27C,EAAc,MAAM,GAErCF,EAAcC,EAAcC,GAGvCC,QAAS,SAACz1D,EAAO01D,GACb,OAAO11D,EAAMA,iBAAiB68C,EAAegB,EAAEhkC,OAAO67C,GAAgB7X,EAAEhkC,OAAO7Z,IAGnF21D,KAAM,SAAU31D,EAAO41D,GACnB,GAAI3a,UAAUniD,OAAS,EACnB,MAAM+jD,EAAaU,cAAc,QACrC,OAAOV,EAAa73C,GAAG6wD,OAAO71D,EAAMA,OAAS69C,EAAEhkC,OAAO+7C,GAAa/X,EAAEhkC,OAAO7Z,IAGhF81D,IAAK,WACD,GAAI,UAAOh9D,OAAS,IAAM,EACtB,OAAO,IAAI+jD,EAAa,OAAQ,8DAEpC,IAAK,IAAI1jD,EAAI,EAAGA,EAAI,UAAOL,OAAS,EAAGK,IAAK,CACxC,IAAMm8D,EAAczX,EAAEhkC,OAAkB,EAAJ1gB,EAAhB,qBAAoB,EAAJA,OAAhB,YAAoB,EAAJA,GAAQskD,EAAM0E,SAC5CoT,EAAc1X,EAAEhkC,OAAkB,EAAJ1gB,EAAQ,EAAxB,qBAAoB,EAAJA,EAAQ,OAAxB,YAAoB,EAAJA,EAAQ,IAC5C,GAAIm8D,EACA,OAAOC,EAGf,OAAO1Y,EAAa73C,IAGxB+wD,IAAK,SAACC,GAEF,QADAA,EAAUnY,EAAEhkC,OAAOm8C,EAASvY,EAAM0E,WAItCnd,GAAI,WAAe,2BAAXytB,EAAW,yBAAXA,EAAW,gBACf,MAA4BqC,EAAmBrC,GAA/C,SAAOsC,EAAP,KAAgBC,EAAhB,KAGA,OAAgB,IAAZD,GAA8B,IAAbC,EACVnY,EAAaQ,MAEjB0X,EAAU,GAGrBkB,OAAQ,aAIRC,KAAM,WACF,OAAO,GAGXC,IAAK,WAAe,2BAAX1D,EAAW,yBAAXA,EAAW,gBAChB,MAA4BqC,EAAmBrC,GAA/C,SAAOsC,EAAP,KAAgBC,EAAhB,KAGA,OAAgB,IAAZD,GAA8B,IAAbC,EACVnY,EAAaQ,MAEjB0X,EAAU,IAAM,IAI/Br7D,EAAOC,QAAUu7D,uBCpHjB,IAAMrY,EAAea,EAAQ,MAC7B,EAAsDA,EAAQ,MAAvDE,EAAP,EAAOA,eAAgBH,EAAvB,EAAuBA,MAAO2Y,EAA9B,EAA8BA,WAAYC,EAA1C,EAA0CA,SACnCC,EAAS5Y,EAAQ,IAAjB4Y,MACDzY,EAAID,EAKJ2Y,EAAI,GAAIC,EAAK,GAEnB,SAASC,EAAUj7D,GACf,OAAIA,GAAK,IACE46D,EAAW56D,GAClB+6D,EAAE/6D,GAAK,EACA+6D,EAAE/6D,GACN+6D,EAAE/6D,GAAKi7D,EAAUj7D,EAAI,GAAKA,EAGrC,SAASk7D,EAAgBl7D,GACrB,OAAU,IAANA,GAAiB,IAANA,EACJ,EACD,IAANA,EACO,EACPg7D,EAAGh7D,GAAK,EACDg7D,EAAGh7D,GACPg7D,EAAGh7D,GAAKk7D,EAAgBl7D,EAAI,GAAKA,EAI5C,IAAMiqD,EAAgB,CAClBkR,IAAK,SAAApI,GAED,OADAA,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QACzBjnD,KAAKwD,IAAI8wD,IAGpBqI,UAAW,SAACC,EAAa3yD,EAAS4yD,KAKlCC,OAAQ,SAAAhpD,GAGJ,GAFAA,EAAO8vC,EAAEhkC,OAAO9L,EAAM0vC,EAAM8D,QAAQr/C,eAE/B,6DAA6D2H,KAAKkE,GACnE,MAAM,IAAI8uC,EAAa,UAAW,+CAEtC,IAAIma,EAAI,EAkBR,OAjBAjpD,EAAKxU,QAAQ,gCAAgC,SAAUJ,GACnD69D,GAAK,CACD/7D,EAAG,IACHg8D,GAAI,IACJC,EAAG,IACHC,GAAI,IACJC,EAAG,IACHC,GAAI,GACJC,EAAG,GACHC,GAAI,GACJC,EAAG,GACHC,GAAI,EACJC,EAAG,EACHC,GAAI,EACJC,EAAG,GACLz+D,MAEC69D,GAGXa,KAAM,SAACtJ,EAAQuJ,EAAOC,GAElB,IADAxJ,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,SACnB,GAAKqN,GAAU,KAAJ,IAAI,EAAK,IAC7B,MAAM1R,EAAaM,IAEvB,IADA2a,EAAQja,EAAEhkC,OAAOi+C,EAAOra,EAAMyD,SAClB,GAAK4W,EAAQ,GACrB,MAAMjb,EAAaM,IAEvB,IADA4a,EAAYla,EAAEhkC,OAAOk+C,EAAWta,EAAMyD,OAAQ,IAC9B,EACZ,MAAMrE,EAAaM,IAGvB,IAAMvkD,EAAS21D,EAAOp0D,SAAS29D,GAAO51D,cACtC,OAAO,IAAI3H,MAAMN,KAAK2uD,IAAImP,EAAY,EAAIn/D,EAAOE,OAAQ,IAAIoS,KAAK,KAAOtS,GAG7Eo/D,QAAS,SAACzJ,EAAQ0J,GAGd,GAFA1J,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QAEX,KADrB+W,EAAepa,EAAEhkC,OAAOo+C,EAAcxa,EAAMyD,SAExC,OAAO,EACX,GAAIqN,EAAS0J,EAAe,IAAM,EAC9B,OAAO1J,EACX,IAAM2J,EAAkBj+D,KAAKwD,IAAIw6D,GAC3BE,EAAQl+D,KAAKC,MAAMD,KAAKwD,IAAI8wD,GAAU2J,GAC5C,OAAI3J,EAAS,EAES0J,EAAe,GACbC,GAAmBC,EAAQ,IAAMD,EAAmBC,GAEhEA,EAAQ,GAAKD,GAI7B,eAAgB,SAAC3J,EAAQ0J,EAAcG,GAMnC,GALA7J,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QAChC+W,EAAepa,EAAEhkC,OAAOo+C,EAAcxa,EAAMyD,OAAQqN,EAAS,EAAI,GAAK,GAEtE6J,EAAOva,EAAEhkC,OAAOu+C,EAAM3a,EAAMyD,OAAQ,GAEhCqN,GAAU,EACV,OAAO9I,EAAcuS,QAAQzJ,EAAQ0J,GAGzC,IAAM7iD,EAASgjD,EAAOH,EAAe,EACrC,OAAOxS,EAAcuS,QAAQzJ,EAAQ0J,GAAgB7iD,GAGzD,kBAAmB,SAACm5C,EAAQ0J,GAIxB,OAHA1J,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QAChC+W,EAAepa,EAAEhkC,OAAOo+C,EAAcxa,EAAMyD,OAAQ,GAE7CuE,EAAcuS,QAAQzJ,EAAQt0D,KAAKwD,IAAIw6D,KAGlD1R,OAAQ,SAACgI,EAAQ8J,GAGb,GAFA9J,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QAChCmX,EAAexa,EAAEhkC,OAAOw+C,EAAc5a,EAAMyD,QACxCqN,EAAS,GAAK8J,EAAe,GAAK9J,EAAS8J,EAC3C,MAAMxb,EAAaM,IAEvB,OADmBsI,EAAc6S,KAAK/J,GAAsB9I,EAAc6S,KAAKD,GAC9C5S,EAAc6S,KAAK/J,EAAS8J,IAGjEE,QAAS,SAAChK,EAAQ8J,GAId,GAHA9J,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QAChCmX,EAAexa,EAAEhkC,OAAOw+C,EAAc5a,EAAMyD,SAE5B,IAAXqN,GAA2B,IAAXA,IAAkC,IAAjB8J,EAClC,OAAO,EACX,GAAI9J,EAAS,GAAK8J,EAAe,EAC7B,MAAMxb,EAAaM,IACvB,OAAOsI,EAAcc,OAAOgI,EAAS8J,EAAe,EAAG9J,EAAS,IAGpEiK,QAAS,SAACzqD,EAAM+pD,GAIZ,GAHA/pD,EAAO8vC,EAAEhkC,OAAO9L,EAAM0vC,EAAM8D,QAC5BuW,EAAQja,EAAEhkC,OAAOi+C,EAAOra,EAAMyD,SAC9B4W,EAAQ79D,KAAK6qD,MAAMgT,IACP,GAAKA,EAAQ,GACrB,MAAMjb,EAAaM,IACvB,IAAM2B,EAAM2P,SAAS1gD,EAAM+pD,GAC3B,GAAIj+D,MAAMilD,GACN,MAAMjC,EAAaM,IACvB,OAAO2B,GAGX2Z,QAAS,SAACC,GAEN,OADAA,EAAU7a,EAAEhkC,OAAO6+C,EAASjb,EAAMyD,UAChB,IAAMjnD,KAAKitD,KAGjCyR,KAAM,SAACpK,GACH,OAAO9I,EAAcuS,QAAQzJ,GAAS,IAG1CqK,IAAK,SAACrK,GAEF,OADAA,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QACzBjnD,KAAKyE,IAAI6vD,IAGpB+J,KAAM,SAAC/J,GAIH,GAHAA,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,SAChCqN,EAASt0D,KAAK6qD,MAAMyJ,IAEP,KAAOA,EAAS,EACzB,MAAM1R,EAAaM,IACvB,OAAIoR,GAAU,IACH6H,EAAW7H,GACfkI,EAAUlI,IAGrBsK,WAAY,SAACtK,GAIT,GAHAA,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,SAChCqN,EAASt0D,KAAK6qD,MAAMyJ,KAEN,EACV,MAAM1R,EAAaM,IACvB,OAAgB,IAAZoR,EACO,EACJmI,EAAgBnI,IAG3BuK,MAAO,SAACvK,EAAQ0J,GAGZ,GAFA1J,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QAEX,KADrB+W,EAAepa,EAAEhkC,OAAOo+C,EAAcxa,EAAMyD,SAExC,OAAO,EACX,GAAIqN,EAAS,GAAK0J,EAAe,EAC7B,MAAMpb,EAAaM,IACvB,GAAIoR,EAAS0J,EAAe,IAAM,EAC9B,OAAO1J,EACX,IAAM2J,EAAkBj+D,KAAKwD,IAAIw6D,GAC3BE,EAAQl+D,KAAKC,MAAMD,KAAKwD,IAAI8wD,GAAU2J,GAC5C,OAAI3J,EAAS,EAES0J,EAAe,GACbC,EAAkBC,GAASD,GAAmBC,EAAQ,GAGnEA,EAAQD,GAIvB,aAAc,SAAC3J,EAAQ0J,EAAcG,GAQjC,OAPA7J,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QAChC+W,EAAepa,EAAEhkC,OAAOo+C,EAAcxa,EAAMyD,OAAQqN,EAAS,EAAI,GAAK,GAMzD,KAFb6J,EAAOva,EAAEhkC,OAAOu+C,EAAM3a,EAAMyD,OAAQ,KAElBqN,GAAU,EAEjB9I,EAAcqT,MAAMvK,EAAQt0D,KAAKwD,IAAIw6D,IAGzCxS,EAAcqT,MAAMvK,EAAQ0J,GAAgBA,GAGvD,gBAAiB,SAAC1J,EAAQ0J,GAItB,OAHA1J,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QAChC+W,EAAepa,EAAEhkC,OAAOo+C,EAAcxa,EAAMyD,OAAQ,GAE7CuE,EAAcqT,MAAMvK,EAAQt0D,KAAKwD,IAAIw6D,KAGhDc,IAAK,WAAe,IAChB,IAAM59D,EAAM,GADI,mBAAXs3D,EAAW,yBAAXA,EAAW,gBAEhB5U,EAAEwF,cAAcoP,EAAQ,MAAM,GAC1B,SAACnlC,GAGG,GADAA,EAAyB,mBAAVA,EAAsBjxB,IAAMvC,OAAOwzB,GAC7CzzB,MAAMyzB,GAKP,MAAMuvB,EAAaQ,MAJnB,GAAI/vB,EAAQ,GAAKA,EAAQ,iBACrB,MAAMuvB,EAAaM,IACvBhiD,EAAIsM,KAAKxN,KAAK6qD,MAAMx3B,MAGzB,GAEP,IAAIn0B,EAAG6D,EACHxB,EAAIi3D,EAAO35D,OACXyC,EAAItB,KAAKwD,IAAItC,EAAI,IAErB,IAAKhC,EAAI,EAAGA,EAAIqC,EAAGrC,IAAK,CAGpB,IAFA6D,EAAI/C,KAAKwD,IAAItC,EAAIhC,IAEVoC,GAAKyB,GACPzB,EAAIyB,EAAKzB,GAAKyB,EAAIA,GAAKzB,EAE5BA,GAAKyB,EAET,OAAOzB,GAGXy9D,IAAK,SAACzK,GAEF,OADAA,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QACzBjnD,KAAKC,MAAMq0D,IAGtB,cAAe,WACX,OAAO9I,EAAc,mBAAd,MAAAA,EAAa,YAGxBwT,IAAK,WAAe,IAChB,IAAM99D,EAAM,GADI,mBAAXs3D,EAAW,yBAAXA,EAAW,gBAGhB5U,EAAEwF,cAAcoP,EAAQ,MAAM,GAC1B,SAAAnlC,GAEI,GADAA,EAAyB,mBAAVA,EAAsBjxB,IAAMvC,OAAOwzB,GAC7CzzB,MAAMyzB,GAOP,MAAMuvB,EAAaQ,MANnB,GAAI/vB,EAAQ,GAAKA,EAAQ,iBACrB,MAAMuvB,EAAaM,IACvBhiD,EAAIsM,KAAKxN,KAAK6qD,MAAMx3B,MAKzB,GAGP,IADA,IAAI9xB,EAAIL,EAAIrC,OAAQ+D,EAAI5C,KAAKwD,IAAItC,EAAI,IAC5BhC,EAAI,EAAGA,EAAIqC,EAAGrC,IAAK,CAExB,IADA,IAAI++C,EAAIj+C,KAAKwD,IAAItC,EAAIhC,IAAK8U,EAAIpR,EACvBA,GAAKq7C,GACRr7C,EAAIq7C,EAAIr7C,GAAKq7C,EAAIA,GAAKr7C,EAE1BA,EAAI5C,KAAKwD,IAAIwQ,EAAI9S,EAAIhC,KAAO0D,EAAIq7C,GAEpC,OAAOr7C,GAGXq8D,GAAI,SAAA3K,GAEA,OADAA,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QACzBjnD,KAAKmE,IAAImwD,IAGpB4K,IAAK,SAAC5K,EAAQ6K,GAIV,OAHA7K,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QAChCkY,EAAOvb,EAAEhkC,OAAOu/C,EAAM3b,EAAMyD,OAAQ,IAE7BjnD,KAAKmE,IAAImwD,GAAUt0D,KAAKmE,IAAIg7D,IAGvCC,MAAO,SAAA9K,GAEH,OADAA,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QACzBjnD,KAAKq/D,MAAM/K,IAGtBgL,QAAS,SAACC,GAEN,IADAA,EAAQ3b,EAAEhkC,OAAO2/C,EAAO/b,EAAMmJ,WAAOnlD,GAAW,GAAO,IAC7C,GAAG3I,SAAW0gE,EAAM1gE,OAC1B,MAAM+jD,EAAaQ,MAEvB,IACaoc,EAAUC,EADjBC,EAASH,EAAM1gE,OAAQ8gE,EAASJ,EAAM,GAAG1gE,OAC3C+gE,EAAM,EAEV,GAAe,IAAXF,EACA,OAAOH,EAAM,GAAG,GACb,GAAe,IAAXG,EACP,OAAOH,EAAM,GAAG,GAAKA,EAAM,GAAG,GAAKA,EAAM,GAAG,GAAKA,EAAM,GAAG,GAG9D,IAAK,IAAI1S,EAAM,EAAGA,EAAM8S,EAAQ9S,IAAO,CACnC2S,EAAWD,EAAM,GAAG1S,GACpB4S,EAAYF,EAAM,GAAG1S,GAErB,IAAK,IAAID,EAAM,EAAGA,EAAM8S,EAAQ9S,IAC5B6S,GAAaF,EAAM3S,KAAQC,EAAMD,GAAO+S,EAAUA,GAAUA,GAC5DH,GAAYD,EAAM3S,KAAQC,EAAMD,GAAO+S,EAAUA,GAAUA,GAG/DC,GAAOH,EAAYD,EAGvB,OAAOI,GAGXC,SAAU,SAACN,KAQXO,MAAO,SAACxS,EAAQC,GACZD,EAAS1J,EAAEhkC,OAAO0tC,EAAQ9J,EAAMmJ,WAAOnlD,GAAW,GAAO,GACzD+lD,EAAS3J,EAAEhkC,OAAO2tC,EAAQ/J,EAAMmJ,WAAOnlD,GAAW,GAAO,GAEzD,IAAMu4D,EAAWzS,EAAOzuD,OAAQmhE,EAAW1S,EAAO,GAAGzuD,OACjDohE,EAAW1S,EAAO1uD,OAAQqhE,EAAW3S,EAAO,GAAG1uD,OAC/CshE,EAAI,IAAI7/D,MAAMy/D,GAElB,GAAIC,IAAaC,EACb,MAAMrd,EAAaQ,MAEvB,IAAK,IAAI2Z,EAAI,EAAGA,EAAIgD,EAAUhD,IAAK,CAC/BoD,EAAEpD,GAAK,IAAIz8D,MAAM4/D,GACjB,IAAK,IAAIlsD,EAAI,EAAGA,EAAIksD,EAAUlsD,IAAK,CAC/BmsD,EAAEpD,GAAG/oD,GAAK,EACV,IAAK,IAAI9U,EAAI,EAAGA,EAAI8gE,EAAU9gE,IAAK,CAC/B,IAAMkhE,EAAK9S,EAAOyP,GAAG79D,GAAImhE,EAAK9S,EAAOruD,GAAG8U,GACxC,GAAkB,kBAAPosD,GAAiC,kBAAPC,EAAiB,MAAMzd,EAAaQ,MACzE+c,EAAEpD,GAAG/oD,IAAMs5C,EAAOyP,GAAG79D,GAAKquD,EAAOruD,GAAG8U,KAIhD,OAAOmsD,GAGXG,IAAK,SAAChM,EAAQiM,GAGV,GAFAjM,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QAEhB,KADhBsZ,EAAU3c,EAAEhkC,OAAO2gD,EAAS/c,EAAMyD,SAE9B,MAAMrE,EAAaI,KACvB,OAAOsR,EAASiM,EAAU/U,EAAcuT,IAAIzK,EAASiM,IAIzDC,OAAQ,SAAClM,EAAQmM,GAGb,GAFAnM,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QAEf,KADjBwZ,EAAW7c,EAAEhkC,OAAO6gD,EAAUjd,EAAMyD,SAEhC,OAAO,EACX,GAAIqN,EAAS,GAAKmM,EAAW,GAAKnM,EAAS,GAAKmM,EAAW,EACvD,MAAM7d,EAAaM,IACvB,OAAIoR,EAASmM,EAAW,IAAM,EACnBnM,EACJt0D,KAAKI,MAAMk0D,EAASmM,GAAYA,GAG3CC,YAAa,WAAgB,IACzB,IAAIjR,EAAY,EAAGC,EAAc,EADR,mBAAZ1B,EAAY,yBAAZA,EAAY,gBAQzB,OANApK,EAAEwF,cAAc4E,EAASxK,EAAMyD,QAAQ,GAAO,SAAAqN,GAC1C,GAAIA,EAAS,EACT,MAAM1R,EAAaM,IACvBuM,GAAa6E,EACb5E,GAAe8M,EAAUlI,MAEtBkI,EAAU/M,GAAaC,GAGlCiR,MAAO,SAACC,GACJA,EAAYhd,EAAEhkC,OAAOghD,EAAWpd,EAAMyD,QAEtC,IADA,IAAM4Z,EAAS,GACNjU,EAAM,EAAGA,EAAMgU,EAAWhU,IAAO,CAEtC,IADA,IAAMkU,EAAS,GACNjU,EAAM,EAAGA,EAAM+T,EAAW/T,IAC3BD,IAAQC,EACRiU,EAAOtzD,KAAK,GAEZszD,EAAOtzD,KAAK,GAEpBqzD,EAAOrzD,KAAKszD,GAEhB,OAAOD,GAGXE,IAAK,SAACzM,GAEF,GAAe,KADfA,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,SAE5B,OAAO,EACX,IAAIiC,EAAOlpD,KAAK6oD,KAAK7oD,KAAKwD,IAAI8wD,IAE9B,OADApL,EAAe,EAAPA,EAAYA,EAAOA,EAAO,EAC1BoL,EAAS,EAAKpL,GAAQA,GAGlC+D,GAAI,WACA,OAAOjtD,KAAKitD,IAGhB+T,MAAO,SAAC1M,EAAQuE,GAGZ,OAFAvE,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QAChC4R,EAAQjV,EAAEhkC,OAAOi5C,EAAOrV,EAAMyD,QAC9B,SAAOqN,EAAUuE,IAGrBoI,QAAS,WAAgB,IACrB,IAAIC,EAAU,EADO,mBAAZlT,EAAY,yBAAZA,EAAY,gBAWrB,OATApK,EAAEwF,cAAc4E,EAAS,MAAM,GAAM,SAACsG,EAAQrG,GAC1C,IAAMkT,EAAethE,OAAOy0D,GACxBrG,EAAKmT,YAAcxhE,MAAMuhE,GACzBD,GAAWC,EAEW,kBAAX7M,IACP4M,GAAW5M,KAEpB,GACI4M,GAGXG,SAAU,SAAC5R,EAAWC,GAGlB,OAFAD,EAAY7L,EAAEhkC,OAAO6vC,EAAWjM,EAAMyD,QACtCyI,EAAc9L,EAAEhkC,OAAO8vC,EAAalM,EAAMyD,QACnCjnD,KAAK6qD,MAAM4E,EAAYC,IAGlC4R,QAAS,SAACC,GAEN,OADAA,EAAU3d,EAAEhkC,OAAO2hD,EAAS/d,EAAMyD,SACjB,IAAMjnD,KAAKitD,IAGhCuU,KAAM,WACF,OAAOxhE,KAAKyhE,UAGhBC,YAAa,SAACC,EAAQC,GAGlB,OAFAD,EAAS/d,EAAEhkC,OAAO+hD,EAAQne,EAAMyD,QAChC2a,EAAMhe,EAAEhkC,OAAOgiD,EAAKpe,EAAMyD,QACnBjnD,KAAKC,MAAMD,KAAKyhE,UAAYG,EAAMD,EAAS,GAAKA,IAG3DE,MAAO,SAACvN,EAAQwN,GAGZ,GAFAxN,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QAEnB,KADb6a,EAAOle,EAAEhkC,OAAOkiD,EAAMte,EAAMyD,OAAQ,IAEhC,MAAMtgD,MAAM,6CAMhB,IAHA,IAAMo7D,EAASj6D,OAAOwsD,GAAQ9S,MAAM,IAC9BrtC,EAAM,CAAC,GAAI,IAAK,KAAM,MAAO,KAAM,IAAK,KAAM,MAAO,OAAQ,KAAM,GAAI,IAAK,KAAM,MAAO,KAAM,IAAK,KAAM,MAAO,OAAQ,KAAM,GAAI,IAAK,KAAM,MAAO,KAAM,IAAK,KAAM,MAAO,OAAQ,MACvL6tD,EAAQ,GAAI9iE,EAAI,EACbA,KACH8iE,GAAS7tD,GAAK4tD,EAAOt0D,MAAa,GAAJvO,IAAY,IAAM8iE,EAEpD,OAAO,IAAI1hE,OAAOyhE,EAAO9wD,KAAK,IAAM,GAAGA,KAAK,KAAO+wD,GAGvDC,MAAO,SAAC3N,EAAQyN,GACZzN,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QAChC8a,EAASne,EAAEhkC,OAAOmiD,EAAQve,EAAMyD,QAEhC,IAAMib,EAAaliE,KAAKw0C,IAAI,GAAIx0C,KAAKwD,IAAIu+D,IACnCrgE,EAAO4yD,EAAS,EAAI,GAAK,EAC/B,OAAIyN,EAAS,EACFrgE,EAAO1B,KAAKI,MAAMJ,KAAKwD,IAAI8wD,GAAU4N,GAAcA,EACxC,IAAXH,EACArgE,EAAO1B,KAAKI,MAAMJ,KAAKwD,IAAI8wD,IAE3B5yD,EAAO1B,KAAKI,MAAMJ,KAAKwD,IAAI8wD,GAAU4N,GAAcA,GAIlEC,UAAW,SAAC7N,EAAQyN,GAChBzN,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QAChC8a,EAASne,EAAEhkC,OAAOmiD,EAAQve,EAAMyD,QAEhC,IAAMib,EAAaliE,KAAKw0C,IAAI,GAAIx0C,KAAKwD,IAAIu+D,IACnCrgE,EAAO4yD,EAAS,EAAI,GAAK,EAC/B,GAAIyN,EAAS,EAAG,CACZ,IAAM5mD,EAAS,EAAI+mD,EAAa,GAChC,OAAOxgE,EAAO1B,KAAKI,OAAOJ,KAAKwD,IAAI8wD,GAAUn5C,GAAU+mD,GAAcA,EAClE,GAAe,IAAXH,EAAc,CAErB,OAAOrgE,EAAO1B,KAAKI,MAAOJ,KAAKwD,IAAI8wD,GADpB,IAGf,IAAMn5C,EAAsB,GAAb+mD,EACf,OAAOxgE,EAAO1B,KAAKI,OAAOJ,KAAKwD,IAAI8wD,GAAUn5C,GAAU+mD,GAAcA,GAI7EE,QAAS,SAAC9N,EAAQyN,GACdzN,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QAChC8a,EAASne,EAAEhkC,OAAOmiD,EAAQve,EAAMyD,QAEhC,IAAMib,EAAaliE,KAAKw0C,IAAI,GAAIx0C,KAAKwD,IAAIu+D,IACnCrgE,EAAO4yD,EAAS,EAAI,GAAK,EAC/B,GAAIyN,EAAS,EAAG,CACZ,IAAM5mD,EAAS,EAAI+mD,EAAa,GAChC,OAAOxgE,EAAO1B,KAAKI,OAAOJ,KAAKwD,IAAI8wD,GAAUn5C,GAAU+mD,GAAcA,EAClE,GAAe,IAAXH,EAAc,CAErB,OAAOrgE,EAAO1B,KAAKI,MAAOJ,KAAKwD,IAAI8wD,GADpB,IAGf,IAAMn5C,EAAsB,GAAb+mD,EACf,OAAOxgE,EAAO1B,KAAKI,OAAOJ,KAAKwD,IAAI8wD,GAAUn5C,GAAU+mD,GAAcA,GAI7EG,UAAW,SAAC/gE,EAAGC,EAAG4+D,EAAGmC,GACjBhhE,EAAIsiD,EAAEhkC,OAAOte,EAAGkiD,EAAMyD,QACtB1lD,EAAIqiD,EAAEhkC,OAAOre,EAAGiiD,EAAMyD,QACtBkZ,EAAIvc,EAAEhkC,OAAOugD,EAAG3c,EAAMyD,QACtB,IAAWtoD,EAAPO,EAAI,EAYR,OAXA0kD,EAAEwF,cAAc,CAACkZ,GAAe9e,EAAMyD,QAAQ,GAAO,SAACsb,GAClD,GAA2B,kBAAhBA,EACP,MAAM3f,EAAaQ,MAEb,IAANlkD,EACAP,EAAS4jE,EAAcviE,KAAKw0C,IAAIlzC,EAAGC,GAEnC5C,GAAU4jE,EAAcviE,KAAKw0C,IAAIlzC,EAAGC,EAAIrC,EAAIihE,GAEhDjhE,OAEGP,GAGX6jE,KAAM,SAAAlO,GAEF,OADAA,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,SAChB,EAAI,EAAe,IAAXqN,EAAe,GAAK,GAGhDmO,KAAM,SAAAnO,GAEF,IADAA,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,SACnB,EACT,MAAMrE,EAAaM,IACvB,OAAOljD,KAAKiD,KAAKqxD,IAGrBoO,OAAQ,SAAApO,GAEJ,IADAA,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,SACnB,EACT,MAAMrE,EAAaM,IACvB,OAAOljD,KAAKiD,KAAKqxD,EAASt0D,KAAKitD,KAGnC0V,SAAU,aAIVC,IAAK,WAAe,IAEhB,IAAIjkE,EAAS,EAFG,mBAAX65D,EAAW,yBAAXA,EAAW,gBAahB,OAVA5U,EAAEwF,cAAcoP,EAAQhV,EAAMyD,QAAQ,GAClC,SAAC12B,EAAM09B,IAECA,EAAKmT,WAGe,kBAAT7wC,KAFX5xB,GAAU4xB,MAMf5xB,GAMXkkE,MAAO,SAAC1vB,EAAStsC,EAAOi8D,EAAUC,GAC9B,IAAMC,EAASpf,EAAEqf,eAAe9vB,EAAStsC,EAAOk8D,GAChDl8D,EAAQm8D,EAAO,GACfD,EAAWC,EAAO,GAGlB,IAAME,GADNJ,EAAWlf,EAAEuf,YAAYhwB,EAAS2vB,IACD1nB,QAEjC0nB,EAAW1G,EAASnX,MAAMrB,EAAEhkC,OAAOkjD,IACnC,IAAIj/D,EAAM,EAkBV,OAhBAgD,EAAMy0C,SAAQ,SAACsR,EAAKwW,GAChBxW,EAAItR,SAAQ,SAACv1C,EAAOs9D,GAChB,IAAMC,EAAaP,EAASK,GAAQC,GACV,kBAAfC,IAGS,OAAhBR,EAASS,GACLT,EAAS5pD,QAAU4pD,EAAS/8D,MAAM6J,KAAK7J,KACvClC,GAAOy/D,GAGJjH,EAAMmH,UAAUz9D,EAAO+8D,EAASS,GAAIT,EAAS/8D,MAAOzF,MAAM86C,QAAQr1C,GAAQm9D,KACjFr/D,GAAOy/D,UAIZz/D,GAGX4/D,OAAQ,aAIRC,WAAY,SAACpW,GACTA,EAAS1J,EAAEhkC,OAAO0tC,EAAQ9J,EAAMmJ,WAAOnlD,GAAW,GAAO,GAD1B,2BAAXm8D,EAAW,iCAAXA,EAAW,kBAE/BA,EAAOroB,SAAQ,SAAAikB,GAEX,GADAA,EAAQ3b,EAAEhkC,OAAO2/C,EAAO/b,EAAMmJ,WAAOnlD,GAAW,GAAO,GACnD8lD,EAAO,GAAGzuD,SAAW0gE,EAAM,GAAG1gE,QAAUyuD,EAAOzuD,SAAW0gE,EAAM1gE,OAChE,MAAM+jD,EAAaQ,MACvB,IAAK,IAAIlkD,EAAI,EAAGA,EAAIouD,EAAOzuD,OAAQK,IAC/B,IAAK,IAAI+E,EAAI,EAAGA,EAAIqpD,EAAO,GAAGzuD,OAAQoF,IACN,kBAAjBqpD,EAAOpuD,GAAG+E,KACjBqpD,EAAOpuD,GAAG+E,GAAK,GACQ,kBAAhBs7D,EAAMrgE,GAAG+E,KAChBs7D,EAAMrgE,GAAG+E,GAAK,GAClBqpD,EAAOpuD,GAAG+E,IAAMs7D,EAAMrgE,GAAG+E,MAIrC,IAAItF,EAAS,EAQb,OANA2uD,EAAOhS,SAAQ,SAAAsR,GACXA,EAAItR,SAAQ,SAAAv1C,GACRpH,GAAUoH,QAIXpH,GAGXilE,MAAO,WAAe,IAElB,IAAIjlE,EAAS,EAFK,mBAAX65D,EAAW,yBAAXA,EAAW,gBAalB,OAVA5U,EAAEwF,cAAcoP,EAAQhV,EAAMyD,QAAQ,GAClC,SAAC12B,EAAM09B,IAECA,EAAKmT,WAGe,kBAAT7wC,KAFX5xB,GAAU,KAAJ,IAAI4xB,EAAQ,OAMvB5xB,GAGXklE,SAAU,SAACC,EAAQC,GACf,IAAMziE,EAAI,GAAIyB,EAAI,GACdc,EAAM,EAOV,GANA+/C,EAAEwF,cAAc,CAAC0a,GAAS,MAAM,GAAO,SAACvzC,EAAM09B,GAC1C3sD,EAAEkM,KAAK+iB,MAEXqzB,EAAEwF,cAAc,CAAC2a,GAAS,MAAM,GAAO,SAACxzC,EAAM09B,GAC1ClrD,EAAEyK,KAAK+iB,MAEPjvB,EAAEzC,SAAWkE,EAAElE,OACf,MAAM+jD,EAAa73C,GACvB,IAAK,IAAI7L,EAAI,EAAGA,EAAIoC,EAAEzC,OAAQK,IACN,kBAAToC,EAAEpC,IAAmC,kBAAT6D,EAAE7D,KACrC2E,GAAO,SAAAvC,EAAEpC,GAAM,GAAR,SAAY6D,EAAE7D,GAAM,IAEnC,OAAO2E,GAGXmgE,SAAU,SAACF,EAAQC,GACf,IAAMziE,EAAI,GAAIyB,EAAI,GACdc,EAAM,EAOV,GANA+/C,EAAEwF,cAAc,CAAC0a,GAAS,MAAM,GAAO,SAACvzC,EAAM09B,GAC1C3sD,EAAEkM,KAAK+iB,MAEXqzB,EAAEwF,cAAc,CAAC2a,GAAS,MAAM,GAAO,SAACxzC,EAAM09B,GAC1ClrD,EAAEyK,KAAK+iB,MAEPjvB,EAAEzC,SAAWkE,EAAElE,OACf,MAAM+jD,EAAa73C,GACvB,IAAK,IAAI7L,EAAI,EAAGA,EAAIoC,EAAEzC,OAAQK,IACN,kBAAToC,EAAEpC,IAAmC,kBAAT6D,EAAE7D,KACrC2E,GAAO,SAAAvC,EAAEpC,GAAM,GAAR,SAAY6D,EAAE7D,GAAM,IAEnC,OAAO2E,GAGXogE,QAAS,SAACH,EAAQC,GACd,IAAMziE,EAAI,GAAIyB,EAAI,GACdc,EAAM,EAOV,GANA+/C,EAAEwF,cAAc,CAAC0a,GAAS,MAAM,GAAO,SAACvzC,EAAM09B,GAC1C3sD,EAAEkM,KAAK+iB,MAEXqzB,EAAEwF,cAAc,CAAC2a,GAAS,MAAM,GAAO,SAACxzC,EAAM09B,GAC1ClrD,EAAEyK,KAAK+iB,MAEPjvB,EAAEzC,SAAWkE,EAAElE,OACf,MAAM+jD,EAAa73C,GACvB,IAAK,IAAI7L,EAAI,EAAGA,EAAIoC,EAAEzC,OAAQK,IACN,kBAAToC,EAAEpC,IAAmC,kBAAT6D,EAAE7D,KACrC2E,GAAO,KAAJ,IAAKvC,EAAEpC,GAAK6D,EAAE7D,GAAO,IAEhC,OAAO2E,GAGXqgE,MAAO,SAAC5P,GAEJ,OADAA,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QACzBjnD,KAAK6qD,MAAMyJ,KAK1B70D,EAAOC,QAAU8rD,wBC1uBjB,IAAM5I,EAAea,EAAQ,MAC7B,EAAmDA,EAAQ,MAApDE,EAAP,EAAOA,eAAgBH,EAAvB,EAAuBA,MAAO2gB,EAA9B,EAA8BA,SAAUC,EAAxC,EAAwCA,QAClCC,EAAa5gB,EAAQ,MACrBG,EAAID,EAEJ2gB,EAAqB,CAEvBC,QAAS,SAACC,EAAWC,EAAcC,EAAQ7hE,EAAI8hE,GAO3C,GANAH,EAAY5gB,EAAEhkC,OAAO4kD,EAAWhhB,EAAMyD,QACtCwd,EAAe7gB,EAAEhkC,OAAO6kD,EAAcjhB,EAAMyD,QAC5Cyd,EAAS9gB,EAAEhkC,OAAO8kD,EAAQlhB,EAAMyD,OAAQ,GACxCpkD,EAAK+gD,EAAEhkC,OAAO/c,EAAI2gD,EAAM0E,SAAS,GACjCyc,EAAY/gB,EAAEhkC,OAAO+kD,EAAWnhB,EAAM8D,OAAQ,IAE1Ckd,EAAY,GAAKC,EAAe,GAAKC,EAAS,GAAKA,EAAS,EAC5D,MAAM9hB,EAAaQ,MAEvB,IAAIzkD,EAAS,GAqBb,OApBIgmE,EAAU9lE,OAAS,IACf,6BAA6B+Q,KAAK+0D,GAClChmE,GAAU,IAAJ,OAAQgmE,EAAR,MAENhmE,GAAUgmE,EAAY,KAG1B9hE,GAEAlE,GAAsB,IAAX+lE,GAA2B,IAAXA,EAAgB,IAAM,GACjD/lE,GAAUylE,EAAQQ,mBAAmBH,GACrC9lE,GAAsB,IAAX+lE,GAA2B,IAAXA,EAAgB,IAAM,GACjD/lE,GAAU6lE,IAGV7lE,GAAU,IACVA,GAAsB,IAAX+lE,GAA2B,IAAXA,EAAjB,WAAqCF,EAArC,KAAoDA,EAC9D7lE,GAAU,IACVA,GAAsB,IAAX+lE,GAA2B,IAAXA,EAAjB,WAAqCD,EAArC,KAAuDA,GAE9D9lE,GAGXkmE,MAAO,SAAAC,GAEH,OADAA,EAAOlhB,EAAEhkC,OAAOklD,cACIT,EACTS,EAAKjmE,OAET,GAGXkmE,OAAQ,SAACC,KAKTC,OAAQ,SAAC9xB,EAAS/zB,GACd,GAAW,MAAPA,EAAa,CACb,GAA4B,MAAxB+zB,EAAQ+xB,SAASrY,IACjB,OAAO1Z,EAAQ+xB,SAASrY,IAExB,MAAMlmD,MAAM,6DAEhB,GAAmB,kBAARyY,GAAoB9e,MAAM86C,QAAQh8B,GACzC,MAAMwjC,EAAaQ,MACvB,GAAIQ,EAAE6W,UAAUr7C,GACZ,OAAOA,EAAIkL,IAAIuiC,IACZ,GAAIjJ,EAAE8W,WAAWt7C,GACpB,OAAOA,EAAIkL,IAAI/pB,KAAKssD,IAEpB,MAAMlmD,MAAM,qDAMxBw+D,QAAS,SAAChyB,EAAS/zB,GACf,GAAW,MAAPA,EACA,MAAMzY,MAAM,iCAEhB,GAAkB,iBAAPyY,GAAmB9e,MAAM86C,QAAQh8B,GACxC,MAAMwjC,EAAaQ,MACvB,GAAIQ,EAAE6W,UAAUr7C,GACZ,OAAO,EACJ,GAAIwkC,EAAE8W,WAAWt7C,GACpB,OAAOpf,KAAKwD,IAAI4b,EAAIkL,IAAI/pB,KAAKssD,IAAMztC,EAAIkL,IAAIvjB,GAAG8lD,KAAO,EAErD,MAAMlmD,MAAM,sDAIpBy+D,QAAS,SAACC,EAAaC,EAAYC,EAAaC,GAE5CH,EAAczhB,EAAEhkC,OAAOylD,GACvB,IACIC,EAAa1hB,EAAEhkC,OAAO0lD,EAAY9hB,EAAMmJ,WAAOnlD,GAAW,GAC5D,MAAOtB,GAEL,GAAIA,aAAa08C,EACb,MAAMA,EAAa73C,GACvB,MAAM7E,EAMV,GAJAq/D,EAAc3hB,EAAEhkC,OAAO2lD,EAAa/hB,EAAMyD,QAC1Cue,EAAc5hB,EAAEhkC,OAAO4lD,EAAahiB,EAAM0E,SAAS,GAG/Cqd,EAAc,EACd,MAAM3iB,EAAaQ,MACvB,QAAoC57C,IAAhC89D,EAAWC,EAAc,GACzB,MAAM3iB,EAAaO,IAEvB,IAAMsiB,SAAoBJ,EAG1B,GAAIG,EAAa,CAEb,IADA,IAAIE,EAAYD,WAAsBH,EAAW,GAAG,GAAKA,EAAW,GAAG,GAAK,KACnEpmE,EAAI,EAAGA,EAAIomE,EAAW,GAAGzmE,OAAQK,IAAK,CAC3C,IAAMymE,EAAYL,EAAW,GAAGpmE,GAGhC,UAFoBymE,IAEPF,EAAb,CAGA,GAAIC,EAAYL,GAAeM,EAAYN,EACvC,MAAMziB,EAAa73C,GAEvB,GAAI46D,IAAcN,EACd,OAAOC,EAAWC,EAAc,GAAGrmE,GAEvC,GAAiB,MAAbwmE,GAAqBC,EAAYN,GAAeK,GAAaL,EAC7D,OAAOC,EAAWC,EAAc,GAAGrmE,EAAI,GAE3CwmE,EAAYC,GAEhB,GAAiB,MAAbD,EACA,MAAM9iB,EAAa73C,GACvB,OAAO26D,EAIP,IAAIpzD,GAAS,EAWb,IAAe,KATXA,EADA6xD,EAASyB,WAAWP,GACZC,EAAW,GAAGO,WAAU,SAAAt1C,GAC5B,OAAO4zC,EAAS2B,QAAQT,EAAa,KAAKz1D,KAAK2gB,MAG3C+0C,EAAW,GAAGO,WAAU,SAAAt1C,GAC5B,OAAOA,IAAS80C,MAIN,MAAMziB,EAAa73C,GACrC,OAAOu6D,EAAWC,EAAc,GAAGjzD,IAK3CyzD,MAAO,SAAC5yB,EAAS6vB,EAAQI,EAAQC,EAAQ2C,GAGrC5C,EAAS,CAACr9D,OADVq9D,EAASjwB,EAAQvpB,MAAMq8C,gBAAgB7C,IACfvtD,IAAKulC,QAASgoB,EAAOhoB,SAC7CgoB,EAASxf,EAAEhkC,OAAOwjD,EAAQ5f,EAAMyD,QAChCmc,EAASpjE,KAAK6qD,MAAMuY,GAEN,MAAVC,EACAA,EAAS,GAGTA,EAAS,CAACt9D,OADVs9D,EAASlwB,EAAQvpB,MAAMq8C,gBAAgB5C,IACfxtD,IAAKulC,QAASioB,EAAOjoB,SAC7CioB,EAASzf,EAAEhkC,OAAOyjD,EAAQ7f,EAAMyD,OAAQ,GACxCoc,EAASrjE,KAAK6qD,MAAMwY,IAGT,MAAX2C,EACAA,EAAU,GAGVA,EAAU,CAACjgE,OADXigE,EAAU7yB,EAAQvpB,MAAMq8C,gBAAgBD,IACdnwD,IAAKulC,QAAS4qB,EAAQ5qB,SAChD4qB,EAAUpiB,EAAEhkC,OAAOomD,EAASxiB,EAAMyD,OAAQ,GAC1C+e,EAAUhmE,KAAK6qD,MAAMmb,IAKzB,IAAIn/D,EAAQm8D,EAEZ,GAAIA,aAAkBqB,EAClBx9D,EAAQm8D,EAAO8B,KAAKkB,EAAU,QAC3B,GAAIA,EAAU,EACjB,MAAMpjB,EAAaO,IAGvB,GAAe,IAAXigB,GAA2B,IAAXC,EAChB,OAAOx8D,EAIX,GAAe,IAAXu8D,EAAc,CACd,GAAIxf,EAAE8W,WAAW7zD,GAAQ,CACrB,GAAIA,EAAMyjB,IAAIvjB,GAAG8lD,IAAMhmD,EAAMyjB,IAAI/pB,KAAKssD,IAAMwW,EAAS,EACjD,MAAMzgB,EAAaO,IAGvB,OAFAt8C,EAAMyjB,IAAI/pB,KAAKssD,KAAOwW,EAAS,EAC/Bx8D,EAAMyjB,IAAIvjB,GAAG8lD,IAAMhmD,EAAMyjB,IAAI/pB,KAAKssD,IAC3BhmD,EACJ,GAAIvG,MAAM86C,QAAQv0C,GAAQ,CAC7B,IAAMg+C,EAAM,GAEZ,OADAh+C,EAAMy0C,SAAQ,SAAAsR,GAAG,OAAI/H,EAAIr3C,KAAK,CAACo/C,EAAIyW,EAAS,QACrCxe,GAIf,GAAe,IAAXwe,EAAc,CACd,GAAIzf,EAAE8W,WAAW7zD,GAAQ,CACrB,GAAIA,EAAMyjB,IAAIvjB,GAAG6lD,IAAM/lD,EAAMyjB,IAAI/pB,KAAKqsD,IAAMwW,EAAS,EACjD,MAAMxgB,EAAaO,IAGvB,OAFAt8C,EAAMyjB,IAAI/pB,KAAKqsD,KAAOwW,EAAS,EAC/Bv8D,EAAMyjB,IAAIvjB,GAAG6lD,IAAO/lD,EAAMyjB,IAAI/pB,KAAKqsD,IAC5B/lD,EACJ,GAAIvG,MAAM86C,QAAQv0C,GACrB,OAAOA,EAAMw8D,EAAS,GAI9B,GAAe,IAAXD,GAA2B,IAAXC,EAAc,CAE9B,GAAIzf,EAAE8W,WAAW7zD,GAAQ,CAErB,IADAA,EAAQA,EAAMyjB,KACJvjB,GAAG6lD,IAAM/lD,EAAMtG,KAAKqsD,IAAMwW,EAAS,GAAKv8D,EAAME,GAAG8lD,IAAMhmD,EAAMtG,KAAKssD,IAAMwW,EAAS,EACvF,MAAMzgB,EAAaO,IACvB,MAAO,CAAC74B,IAAK,CAACsiC,IAAK/lD,EAAMtG,KAAKqsD,IAAMwW,EAAS,EAAGvW,IAAKhmD,EAAMtG,KAAKssD,IAAMwW,EAAS,IAG9E,GAAIzf,EAAE6W,UAAU5zD,GAAQ,CAEzB,GADAA,EAAQA,EAAMyjB,IACV84C,EAAS,GAAKC,EAAS,EACvB,MAAMzgB,EAAaO,IACvB,MAAO,CAAC74B,IAAK,CAACsiC,IAAK/lD,EAAM+lD,IAAMwW,EAAS,EAAGvW,IAAKhmD,EAAMgmD,IAAMwW,EAAS,IAGpE,GAAI/iE,MAAM86C,QAAQv0C,GAAQ,CAC3B,GAAIA,EAAMhI,OAASukE,GAAUv8D,EAAM,GAAGhI,OAASwkE,EAC3C,MAAMzgB,EAAaO,IACvB,OAAOt8C,EAAMu8D,EAAS,GAAGC,EAAS,MAK9C6C,MAAO,aAKPC,IAAK,SAAChzB,EAAS/zB,GACX,GAAW,MAAPA,EAAa,CACb,GAA4B,MAAxB+zB,EAAQ+xB,SAAStY,IACjB,OAAOzZ,EAAQ+xB,SAAStY,IAExB,MAAMjmD,MAAM,6DAEhB,GAAmB,kBAARyY,GAAoB9e,MAAM86C,QAAQh8B,GACzC,MAAMwjC,EAAaQ,MACvB,GAAIQ,EAAE6W,UAAUr7C,GACZ,OAAOA,EAAIkL,IAAIsiC,IACZ,GAAIhJ,EAAE8W,WAAWt7C,GACpB,OAAOA,EAAIkL,IAAI/pB,KAAKqsD,IAEpB,MAAMjmD,MAAM,kDAMxBy/D,KAAM,SAACjzB,EAAS/zB,GACZ,GAAW,MAAPA,EACA,MAAMzY,MAAM,8BAEhB,GAAkB,iBAAPyY,GAAmB9e,MAAM86C,QAAQh8B,GACxC,MAAMwjC,EAAaQ,MACvB,GAAIQ,EAAE6W,UAAUr7C,GACZ,OAAO,EACJ,GAAIwkC,EAAE8W,WAAWt7C,GACpB,OAAOpf,KAAKwD,IAAI4b,EAAIkL,IAAI/pB,KAAKqsD,IAAMxtC,EAAIkL,IAAIvjB,GAAG6lD,KAAO,EAErD,MAAMjmD,MAAM,mDAIpB0/D,UAAW,SAAC9G,GACRA,EAAQ3b,EAAEhkC,OAAO2/C,EAAO/b,EAAMmJ,WAAOnlD,GAAW,GAIhD,IAFA,IAAM7I,EAAS,GAENO,EAAI,EAAGA,EAAIqgE,EAAM,GAAG1gE,OAAQK,IAAK,CACtCP,EAAOO,GAAK,GAEZ,IAAK,IAAI+E,EAAI,EAAGA,EAAIs7D,EAAM1gE,OAAQoF,IAC9BtF,EAAOO,GAAG+E,GAAKs7D,EAAMt7D,GAAG/E,GAIhC,OAAOP,GAGX2nE,QAAS,SAACjB,EAAaC,EAAYiB,EAAaf,GAE5CH,EAAczhB,EAAEhkC,OAAOylD,GACvB,IACIC,EAAa1hB,EAAEhkC,OAAO0lD,EAAY9hB,EAAMmJ,WAAOnlD,GAAW,GAC5D,MAAOtB,GAEL,GAAIA,aAAa08C,EACb,MAAMA,EAAa73C,GACvB,MAAM7E,EAMV,GAJAqgE,EAAc3iB,EAAEhkC,OAAO2mD,EAAa/iB,EAAMyD,QAC1Cue,EAAc5hB,EAAEhkC,OAAO4lD,EAAahiB,EAAM0E,SAAS,GAG/Cqe,EAAc,EACd,MAAM3jB,EAAaQ,MACvB,QAAuC57C,IAAnC89D,EAAW,GAAGiB,EAAc,GAC5B,MAAM3jB,EAAaO,IAEvB,IAAMsiB,SAAoBJ,EAG1B,GAAIG,EAAa,CAEb,IADA,IAAIE,EAAYD,WAAsBH,EAAW,GAAG,GAAKA,EAAW,GAAG,GAAK,KACnEpmE,EAAI,EAAGA,EAAIomE,EAAWzmE,OAAQK,IAAK,CACxC,IAAMsnE,EAAUlB,EAAWpmE,GACrBymE,EAAYL,EAAWpmE,GAAG,GAGhC,UAFoBymE,IAEPF,EAAb,CAGA,GAAIC,EAAYL,GAAeM,EAAYN,EACvC,MAAMziB,EAAa73C,GAEvB,GAAI46D,IAAcN,EACd,OAAOmB,EAAQD,EAAc,GAEjC,GAAiB,MAAbb,GAAqBC,EAAYN,GAAeK,GAAaL,EAC7D,OAAOC,EAAWpmE,EAAI,GAAGqnE,EAAc,GAE3Cb,EAAYC,GAEhB,GAAiB,MAAbD,EACA,MAAM9iB,EAAa73C,GACvB,OAAO26D,EAIP,IAAIpzD,GAAS,EAWb,GATIA,EADA6xD,EAASyB,WAAWP,GACZC,EAAWO,WAAU,SAAAW,GACzB,OAAOrC,EAAS2B,QAAQT,EAAa,KAAKz1D,KAAK42D,EAAQ,OAGnDlB,EAAWO,WAAU,SAAAW,GACzB,OAAOA,EAAQ,KAAOnB,MAIf,IAAX/yD,EAAc,MAAMswC,EAAa73C,GACrC,OAAOu6D,EAAWhzD,GAAOi0D,EAAc,KAKnD9mE,EAAOC,QAAU4kE,wBChXjB,IAAM1hB,EAAea,EAAQ,MAC7B,EAAmDA,EAAQ,MAApDE,EAAP,EAAOA,eAAgBH,EAAvB,EAAuBA,MAAO4Y,EAA9B,EAA8BA,SACvBC,GADP,EAAwC+H,QACxB3gB,EAAQ,IAAjB4Y,OACDzY,EAAID,EACH8H,EAAyBhI,EAAQ,MAAjCgI,sBAEDgb,EAAuB,CACzBC,OAAQ,WAAgB,IACpB,IAAI7iE,EAAM,EACJ3C,EAAM,GAFQ,mBAAZ8sD,EAAY,yBAAZA,EAAY,gBAIpBpK,EAAEwF,cAAc4E,EAASxK,EAAMyD,QAAQ,GAAM,SAAC12B,EAAM09B,GAC5B,kBAAT19B,IACP1sB,GAAO0sB,EACPrvB,EAAIsM,KAAK+iB,OAGjB,IAAMo2C,EAAM9iE,EAAM3C,EAAIrC,OACtBgF,EAAM,EACN,IAAK,IAAI3E,EAAI,EAAGA,EAAIgC,EAAIrC,OAAQK,IAC5B2E,GAAO7D,KAAKwD,IAAItC,EAAIhC,GAAKynE,GAE7B,OAAO9iE,EAAM3C,EAAIrC,QAGrB+nE,QAAS,WAAgB,IACrB,IAAI/iE,EAAM,EAAG4mD,EAAM,EADE,mBAAZuD,EAAY,yBAAZA,EAAY,gBASrB,OANApK,EAAEwF,cAAc4E,EAASxK,EAAMyD,QAAQ,GAAM,SAAC12B,EAAM09B,GAC5B,kBAAT19B,IACP1sB,GAAO0sB,EACPk6B,QAGD5mD,EAAM4mD,GAGjBoc,SAAU,WAAgB,IACtB,IAAIhjE,EAAM,EAAG4mD,EAAM,EADG,mBAAZuD,EAAY,yBAAZA,EAAY,gBAYtB,OATApK,EAAEwF,cAAc4E,EAASxK,EAAMyD,QAAQ,GAAM,SAAC12B,EAAM09B,GAChD,IAAM5nD,SAAckqB,EACP,WAATlqB,GACAxC,GAAO0sB,EACPk6B,KACgB,WAATpkD,GACPokD,OAGD5mD,EAAM4mD,GAIjBqc,UAAW,SAAC3zB,EAAStsC,EAAOi8D,EAAUiE,GAClC,IAAM/D,EAASpf,EAAEqf,eAAe9vB,EAAStsC,EAAOkgE,GAChDlgE,EAAQm8D,EAAO,GACf+D,EAAe/D,EAAO,GAGtB,IAAME,GADNJ,EAAWlf,EAAEuf,YAAYhwB,EAAS2vB,IACD1nB,QACjC0nB,EAAW1G,EAASnX,MAAMrB,EAAEhkC,OAAOkjD,IAEnC,IAAIj/D,EAAM,EAAG4mD,EAAM,EAkBnB,GAjBA5jD,EAAMy0C,SAAQ,SAACsR,EAAKwW,GAChBxW,EAAItR,SAAQ,SAACv1C,EAAOs9D,GAChB,IAAMC,EAAayD,EAAa3D,GAAQC,GACd,kBAAfC,IAGS,OAAhBR,EAASS,GACLT,EAAS5pD,QAAU4pD,EAAS/8D,MAAM6J,KAAK7J,KACvClC,GAAOy/D,EACP7Y,KAEG4R,EAAMmH,UAAUz9D,EAAO+8D,EAASS,GAAIT,EAAS/8D,MAAOzF,MAAM86C,QAAQr1C,GAAQm9D,KACjFr/D,GAAOy/D,EACP7Y,YAIA,IAARA,EAAW,MAAM7H,EAAaI,KAClC,OAAOn/C,EAAM4mD,GAGjBuc,WAAY,aAIZC,MAAO,WAAe,IAClB,IAAIxc,EAAM,EADQ,mBAAXuY,EAAW,yBAAXA,EAAW,gBAYlB,OAVApf,EAAEwF,cAAc4Z,EAAQ,MAAM,GAC1B,SAACzyC,EAAM09B,IAECA,EAAKmT,YAAcxhE,MAAM2wB,IAGL,kBAATA,IAFXk6B,OAMLA,GAGXyc,QAAS,SAACrgE,EAAOi8D,GAEbj8D,EAAQ+8C,EAAEhkC,OAAO/Y,EAAO28C,EAAMmJ,WAAOnlD,GAAW,GAAO,GACvD,IAAM07D,EAAkBJ,EAAS1nB,QACjC0nB,EAAWlf,EAAEhkC,OAAOkjD,GAEpB,IAAIrY,EAAM,EAeV,OAbAqY,EAAW1G,EAASnX,MAAM6d,GAE1Bj8D,EAAMy0C,SAAQ,SAAAsR,GACVA,EAAItR,SAAQ,SAAAv1C,GAEY,OAAhB+8D,EAASS,GACLT,EAAS5pD,QAAU4pD,EAAS/8D,MAAM6J,KAAK7J,IACvC0kD,IACG4R,EAAMmH,UAAUz9D,EAAO+8D,EAASS,GAAIT,EAAS/8D,MAAOzF,MAAM86C,QAAQr1C,GAAQm9D,IACjFzY,UAILA,GAGX0c,MAAO,aAIPC,IAAK,aAILC,KAAM,aAINC,OAAQ,aAIRC,OAAQ,aAIRC,IAAK,aAILC,KAAM,aAINC,OAAQ,aAIRC,OAAQ,aAIRpV,aAAc,aAIdqV,MAAO,cAOXnoE,EAAOC,QAAU0X,OAAO+mC,OAAOsoB,EAAsBhb,6CC9K/C7I,EAAea,EAAQ,MAC7B,EAA0CA,EAAQ,MAA3CE,EAAP,EAAOA,eAAgBH,EAAvB,EAAuBA,MAAO2gB,EAA9B,EAA8BA,SACxBvgB,EAAID,EAGJkkB,EAAMpkB,EAAQ,MAGdqkB,EAAWrkB,EAAQ,MAGnBskB,EAAW,CACbC,MAAO,CAACC,OAAQ,SAAUC,OAAQ,mBAAUC,MAAO,OACnDC,QAAS,CAACH,OAAQ,mBAAUC,OAAQ,mBAAUC,OAAQ,OACtDE,QAAS,CAACJ,OAAQ,mBAAUC,OAAQ,mBAAUC,OAAQ,OACtDG,KAAM,CACFH,MAAO,EACPI,KAAM,6XACNC,KAAM,8XAGVC,OAAQ,CACJN,MAAO,EACPI,KAAM,qEACNC,KAAM,+FASRE,EAAK,SAACxmC,EAAKymC,GAAN,OAAczmC,EAAIymC,EAAM,OAAS,IAAIr/D,OAAO,IAAM44B,EAAIymC,GAAO,IAAK,MACvEC,EAAOxxD,OAAOiY,KAAK04C,GAAUvnE,KAAI,SAAAtB,GAAC,OAAI6oE,EAAS7oE,MAC/C2pE,EAAc,SAAAC,GAAI,OACpBF,EAAKjsB,QAAO,SAACt9C,EAAK6iC,GAAN,OAAc7iC,EAAIC,QAAQopE,EAAGxmC,EAAK,QATnC,SAAAA,GAAG,OAAI,SAAAluB,GAAC,OAAIkuB,EAAIimC,MAC3BrgE,OAAOC,aAAaiM,EAAE9L,WAAW,GAAKg6B,EAAIimC,OAC1C,EAAIjmC,EAAIsmC,MAAM,EAAItmC,EAAIqmC,MAAMr2D,QAAQ8B,KAOmB+0D,CAAO7mC,MAAO4mC,IACnEE,EAAc,SAAAF,GAAI,OACpBF,EAAKjsB,QAAO,SAACt9C,EAAK6iC,GAAN,OAAc7iC,EAAIC,QAAQopE,EAAGxmC,EAAK,QARnC,SAAAA,GAAG,OAAI,SAAAluB,GAAC,OAAIkuB,EAAIimC,MAC3BrgE,OAAOC,aAAaiM,EAAE9L,WAAW,GAAKg6B,EAAIimC,OAC1C,EAAIjmC,EAAIqmC,MAAM,EAAIrmC,EAAIsmC,MAAMt2D,QAAQ8B,KAMmBi1D,CAAO/mC,MAAO4mC,IAEnEzV,EAAgB,CAClB6V,IAAK,SAACp1D,GAEF,OADAA,EAAO8vC,EAAEhkC,OAAO9L,EAAM0vC,EAAM8D,QACrB0hB,EAAYl1D,IAGvBq1D,SAAU,SAAC7U,GACPA,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QAChC,IACI,OAAO6gB,EAASxT,GAClB,MAAOpuD,GACL,MAAMS,MAAM,iDAAD,OAAkDT,EAAEhG,eAIvEkpE,KAAM,SAAC9U,GAEH,IADAA,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,SACnB,KAAOqN,EAAS,EACzB,MAAM1R,EAAaQ,MACvB,OAAOt7C,OAAOC,aAAausD,IAG/B+U,MAAO,SAACv1D,GAEJ,OADAA,EAAO8vC,EAAEhkC,OAAO9L,EAAM0vC,EAAM8D,SAChBhoD,QAAQ,eAAgB,KAGxCgqE,KAAM,SAACx1D,GAEH,GAAoB,KADpBA,EAAO8vC,EAAEhkC,OAAO9L,EAAM0vC,EAAM8D,SACnBzoD,OACL,MAAM+jD,EAAaQ,MACvB,OAAOtvC,EAAK5L,WAAW,IAG3BqhE,OAAQ,WAAe,IACnB,IAAIz1D,EAAO,GADQ,mBAAX0kD,EAAW,yBAAXA,EAAW,gBAOnB,OAJA5U,EAAEwF,cAAcoP,EAAQhV,EAAM8D,QAAQ,GAAO,SAAA/2B,GACzCA,EAAOqzB,EAAEhkC,OAAO2Q,EAAMizB,EAAM8D,QAC5BxzC,GAAQyc,KAELzc,GAGX01D,YAAa,WAAe,IACxB,IAAI11D,EAAO,GADa,mBAAX0kD,EAAW,yBAAXA,EAAW,gBAExB,GAAsB,IAAlBA,EAAO35D,OACP,MAAM8H,MAAM,2CAOhB,OANA6xD,EAAOld,SAAQ,SAAAjoB,GAEXA,EAAQuwB,EAAEhkC,OAAOyT,EAAOmwB,EAAM8D,QAC9BxzC,GAAQuf,KAGLvf,GAGX21D,KAAM,SAAC31D,GAEH,OADAA,EAAO8vC,EAAEhkC,OAAO9L,EAAM0vC,EAAM8D,QACrBuhB,EAAY/0D,IAGvB41D,OAAQ,SAACpV,EAAQqV,GACbrV,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QAChC0iB,EAAW/lB,EAAEhkC,OAAO+pD,EAAUnmB,EAAMyD,OAAQ,GAC5C,IAAM2iB,EAAgBtpE,MAAMqpE,GAAUE,KAAK,KAAK54D,KAAK,IAGrD,OAAO42D,EAAIiC,OAAJ,iBAAqBF,EAArB,sBAAgDA,EAAhD,KAAkEtV,GAAQxS,QAGrFioB,MAAO,SAACC,EAAOC,GAIX,OAHAD,EAAQpmB,EAAEhkC,OAAOoqD,EAAO,CAACxmB,EAAM8D,aAC/B2iB,EAAQrmB,EAAEhkC,OAAOqqD,EAAO,CAACzmB,EAAM8D,WAKnC4iB,KAAM,SAACC,EAAUC,EAAYC,GAIzB,GAHAF,EAAWvmB,EAAEhkC,OAAOuqD,EAAU3mB,EAAM8D,QACpC8iB,EAAaxmB,EAAEhkC,OAAOwqD,EAAY5mB,EAAM8D,SACxC+iB,EAAWzmB,EAAEhkC,OAAOyqD,EAAU7mB,EAAMyD,OAAQ,IAC7B,GAAKojB,EAAWD,EAAWvrE,OACtC,MAAM+jD,EAAaQ,MACvB,IAAMyB,EAAMulB,EAAWl4D,QAAQi4D,EAAUE,EAAW,GACpD,IAAa,IAATxlB,EACA,MAAMjC,EAAaQ,MACvB,OAAOyB,EAAM,GAGjBylB,MAAO,WACH,OAAOjX,EAAc6W,KAAd,MAAA7W,EAAa,YAGxBkX,MAAO,SAACjW,EAAQqV,EAAUa,GACtBlW,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QAChC0iB,EAAW/lB,EAAEhkC,OAAO+pD,EAAUnmB,EAAMyD,OAAQ,GAC5CujB,EAAW5mB,EAAEhkC,OAAO4qD,EAAUhnB,EAAM0E,SAAS,GAE7C,IAAM0hB,EAAgBtpE,MAAMqpE,GAAUE,KAAK,KAAK54D,KAAK,IAC/Cw5D,EAAQD,EAAW,GAAK,KAC9B,OAAO3C,EAAIiC,OAAJ,UAAcW,EAAd,eAA0Bb,EAA1B,eAA8Ca,EAA9C,eAA0Db,EAA1D,KAA4EtV,GAAQxS,QAG/F4oB,KAAM,SAAC52D,EAAM62D,GAIT,GAHA72D,EAAO8vC,EAAEhkC,OAAO9L,EAAM0vC,EAAM8D,SAC5BqjB,EAAW/mB,EAAEhkC,OAAO+qD,EAAUnnB,EAAMyD,OAAQ,IAE7B,EACX,MAAMrE,EAAaQ,MACvB,OAAIunB,EAAW72D,EAAKjV,OACTiV,EACJA,EAAK9U,MAAM,EAAG2rE,IAGzBC,MAAO,WACH,OAAOvX,EAAcqX,KAAd,MAAArX,EAAa,YAGxBwX,IAAK,SAAC/2D,GAEF,OADAA,EAAO8vC,EAAEhkC,OAAO9L,EAAM0vC,EAAM8D,SAChBzoD,QAGhBisE,KAAM,WACF,OAAOzX,EAAcwX,IAAd,MAAAxX,EAAa,YAGxB0X,MAAO,SAACj3D,GAEJ,OADAA,EAAO8vC,EAAEhkC,OAAO9L,EAAM0vC,EAAM8D,SAChBl/C,eAGhB4iE,IAAK,SAACl3D,EAAMu2D,EAAUM,GAIlB,GAHA72D,EAAO8vC,EAAEhkC,OAAO9L,EAAM0vC,EAAM8D,QAC5B+iB,EAAWzmB,EAAEhkC,OAAOyqD,EAAU7mB,EAAMyD,QACpC0jB,EAAW/mB,EAAEhkC,OAAO+qD,EAAUnnB,EAAMyD,QAChCojB,EAAWv2D,EAAKjV,OAChB,MAAO,GACX,GAAIwrE,EAAW,GAAKM,EAAW,EAC3B,MAAM/nB,EAAaQ,MACvB,OAAOtvC,EAAK9U,MAAMqrE,EAAW,EAAGA,EAAWM,EAAW,IAG1DM,KAAM,WACF,OAAO5X,EAAc2X,IAAd,MAAA3X,EAAa,YAGxB6X,YAAa,SAACp3D,EAAMq3D,EAAkBC,GAMlC,GALAt3D,EAAO8vC,EAAEhkC,OAAO9L,EAAM0vC,EAAM8D,QAE5B6jB,EAAmBvnB,EAAEhkC,OAAOurD,EAAkB3nB,EAAM8D,OAAQ,KAC5D8jB,EAAiBxnB,EAAEhkC,OAAOwrD,EAAgB5nB,EAAM8D,OAAQ,KAEpC,IAAhBxzC,EAAKjV,OACL,OAAO,EACX,GAAgC,IAA5BssE,EAAiBtsE,QAA0C,IAA1BusE,EAAevsE,OAChD,MAAM+jD,EAAaQ,MAGvB,IAFA+nB,EAAmBA,EAAiB,OACpCC,EAAiBA,EAAe,KAEzBt3D,EAAK5B,QAAQi5D,GAAoBr3D,EAAKvU,YAAY6rE,GACrD,MAAMxoB,EAAaQ,MAEvB,IAAMyB,EAAM/wC,EAAKxU,QAAQ8rE,EAAgB,IACpC9rE,QAAQ6rE,EAAkB,KAE1B7rE,QAAQ,gBAAiB,IACzB4Z,MAAM,yCACX,IAAK2rC,EACD,MAAMjC,EAAaQ,MAEvB,IAAMioB,EAAmBxmB,EAAI,GAAGhmD,OAAQysE,EAAazmB,EAAI,GAAGhmD,OAAQ0sE,EAAU1mB,EAAI,GAAGhmD,OACjFy1D,EAASz0D,OAAOglD,EAAI,IACxB,GAAIwmB,EAAmB,GAAKA,IAAqBC,IACzCD,GAAoBC,GAAc1rE,MAAM00D,GAC5C,MAAM1R,EAAaQ,MAEvB,OADAkR,GAAkB,KAAH,IAAG,IAAOiX,GAClBF,GAAoB/W,EAASA,GAGxCkX,SAAU,aAGVC,OAAQ,SAAC33D,GAIL,OADAA,GADAA,GADAA,EAAO8vC,EAAEhkC,OAAO9L,EAAM,CAAC0vC,EAAM8D,UACjBl/C,eACAyO,OAAO,GAAG5O,cAAgB6L,EAAK9U,MAAM,IACrCM,QAAQ,4BAChB,SAAAosE,GAAM,OAAIA,EAAOzjE,kBAGzB0jE,QAAS,SAACC,EAAUC,EAAWC,EAAWC,GACtCH,EAAWhoB,EAAEhkC,OAAOgsD,EAAU,CAACpoB,EAAM8D,SACrCukB,EAAYjoB,EAAEhkC,OAAOisD,EAAW,CAACroB,EAAMyD,SACvC6kB,EAAYloB,EAAEhkC,OAAOksD,EAAW,CAACtoB,EAAMyD,SACvC8kB,EAAWnoB,EAAEhkC,OAAOmsD,EAAU,CAACvoB,EAAM8D,SAErC,IAAIpmD,EAAM0qE,EAASpqB,MAAM,IAGzB,OAFAtgD,EAAI8qE,OAAOH,EAAY,EAAGC,EAAWC,GAE9B7qE,EAAI+P,KAAK,KAGpBg7D,SAAU,WACN,OAAO5Y,EAAcsY,QAAd,MAAAtY,EAAa,YAGxBsB,KAAM,SAAC7gD,EAAMo4D,GACTp4D,EAAO8vC,EAAEhkC,OAAO9L,EAAM0vC,EAAM8D,QAC5B4kB,EAAetoB,EAAEhkC,OAAOssD,EAAc1oB,EAAMyD,QAG5C,IAFA,IAAI5nD,EAAM,GAEDH,EAAI,EAAGA,EAAIgtE,EAAchtE,IAC9BG,GAAOyU,EAEX,OAAOzU,GAGX8sE,MAAO,SAACr4D,EAAM62D,GAIV,GAHA72D,EAAO8vC,EAAEhkC,OAAO9L,EAAM0vC,EAAM8D,SAC5BqjB,EAAW/mB,EAAEhkC,OAAO+qD,EAAUnnB,EAAMyD,OAAQ,IAE7B,EACX,MAAMrE,EAAaQ,MACvB,IAAMxkD,EAAMkV,EAAKjV,OACjB,OAAI8rE,EAAW/rE,EACJkV,EACJA,EAAK9U,MAAMJ,EAAM+rE,IAG5ByB,OAAQ,WACJ,OAAO/Y,EAAc8Y,MAAd,MAAA9Y,EAAa,YAGxBgZ,OAAQ,SAAClC,EAAUC,EAAYC,GAI3B,GAHAF,EAAWvmB,EAAEhkC,OAAOuqD,EAAU3mB,EAAM8D,QACpC8iB,EAAaxmB,EAAEhkC,OAAOwqD,EAAY5mB,EAAM8D,SACxC+iB,EAAWzmB,EAAEhkC,OAAOyqD,EAAU7mB,EAAMyD,OAAQ,IAC7B,GAAKojB,EAAWD,EAAWvrE,OACtC,MAAM+jD,EAAaQ,MAGvB,IAAIkpB,EAAgBnI,EAASyB,WAAWuE,GAAYhG,EAAS2B,QAAQqE,EAAU,KAAOA,EAChFtlB,EAAMulB,EAAWprE,MAAMqrE,EAAW,GAAGkC,OAAOD,GAClD,IAAa,IAATznB,EACA,MAAMjC,EAAaQ,MACvB,OAAOyB,EAAMwlB,GAGjBmC,QAAS,WACL,OAAOnZ,EAAcgZ,OAAd,MAAAhZ,EAAa,YAGxBoZ,WAAY,aAIZC,EAAG,SAAC3mE,GAGA,MAAqB,kBADrBA,EAAQ69C,EAAEhkC,OAAO7Z,IAENA,EACJ,IAGX4mE,KAAM,SAAC5mE,EAAO6mE,GACV7mE,EAAQ69C,EAAEhkC,OAAO7Z,EAAOy9C,EAAMyD,QAC9B2lB,EAAahpB,EAAEhkC,OAAOgtD,EAAYppB,EAAM8D,QAExC,IACI,OAAOugB,EAAIiC,OAAO8C,EAAY7mE,GAChC,MAAOG,GAEL,MADA0Y,QAAQ5F,MAAM9S,GACR08C,EAAaQ,QAI3BypB,SAAU,aAIVC,KAAM,SAACh5D,GAEH,OADAA,EAAO8vC,EAAEhkC,OAAO9L,EAAM,CAAC0vC,EAAM8D,UACjBhoD,QAAQ,aAAc,KAGtCytE,QAAS,SAACzY,GAEN,IADAA,EAAS1Q,EAAEhkC,OAAO00C,EAAQ,CAAC9Q,EAAMyD,WACnB,EACV,MAAMrE,EAAaQ,MACvB,OAAOt7C,OAAOC,aAAausD,IAG/B0Y,QAAS,SAACl5D,GACN,OAAOu/C,EAAciW,KAAKx1D,KAIlCrU,EAAOC,QAAU2zD,wBCnVjB,IAAMzQ,EAAea,EAAQ,MAC7B,EAAgCA,EAAQ,MAAjCE,EAAP,EAAOA,eAAgBH,EAAvB,EAAuBA,MACjBI,EAAID,EACJspB,EAAa,WAAK,IAAK,EAGvBC,EAAgB,CAClBC,KAAM,SAAA7Y,GAEF,IADAA,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,SACnB,GAAKqN,GAAU,EACxB,MAAM1R,EAAaM,IACvB,OAAOljD,KAAKotE,KAAK9Y,IAGrB+Y,MAAO,SAAA/Y,GAEH,IADAA,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,SACnB,EACT,MAAMrE,EAAaM,IACvB,OAAOljD,KAAKstE,MAAMhZ,IAGtBiZ,KAAM,SAAAjZ,GAEF,OADAA,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QACzBjnD,KAAKitD,GAAK,EAAIjtD,KAAK+2D,KAAKzC,IAGnCkZ,MAAO,SAAAlZ,GAEH,GADAA,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QAC5BjnD,KAAKwD,IAAI8wD,IAAW,EACpB,MAAM1R,EAAaM,IACvB,OAAOljD,KAAKytE,MAAM,EAAInZ,IAG1BoZ,KAAM,SAAApZ,GAEF,IADAA,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,SACnB,GAAKqN,GAAU,EACxB,MAAM1R,EAAaM,IACvB,OAAOljD,KAAK2tE,KAAKrZ,IAGrBsZ,MAAO,SAAAtZ,GAEH,OADAA,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QACzBjnD,KAAK6tE,MAAMvZ,IAGtBwZ,KAAM,SAAAxZ,GAEF,OADAA,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QACzBjnD,KAAK+2D,KAAKzC,IAGrByZ,MAAO,SAACzsE,EAAGyB,GAGP,GAFAzB,EAAIsiD,EAAEhkC,OAAOte,EAAGkiD,EAAMyD,QAEZ,KADVlkD,EAAI6gD,EAAEhkC,OAAO7c,EAAGygD,EAAMyD,UACD,IAAN3lD,EACX,MAAMshD,EAAaI,KACvB,OAAOhjD,KAAKguE,MAAMjrE,EAAGzB,IAGzB2sE,MAAO,SAAA3Z,GAEH,GADAA,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QAC5BjnD,KAAKwD,IAAI8wD,GAAU,EACnB,MAAM1R,EAAaM,IACvB,OAAOljD,KAAKytE,MAAMnZ,IAGtB4Z,IAAK,SAAA5Z,GAED,GADAA,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QAC5BjnD,KAAKwD,IAAI8wD,GAAU2Y,EACnB,MAAMrqB,EAAaM,IACvB,OAAOljD,KAAKkD,IAAIoxD,IAGpB6Z,KAAM,SAAA7Z,GAEF,OADAA,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QACzBjnD,KAAKouE,KAAK9Z,IAGrB+Z,IAAK,SAAA/Z,GAED,GADAA,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QAC5BjnD,KAAKwD,IAAI8wD,GAAU2Y,EACnB,MAAMrqB,EAAaM,IACvB,GAAe,IAAXoR,EACA,MAAM1R,EAAaI,KACvB,OAAO,EAAIhjD,KAAKsuE,IAAIha,IAGxBia,KAAM,SAAAja,GAEF,GAAe,KADfA,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,SAE5B,MAAMrE,EAAaI,KACvB,OAAO,EAAIhjD,KAAKwuE,KAAKla,IAGzBma,IAAK,SAAAna,GAED,GADAA,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QAC5BjnD,KAAKwD,IAAI8wD,GAAU2Y,EACnB,MAAMrqB,EAAaM,IACvB,OAAO,EAAIljD,KAAKmD,IAAImxD,IAGxBoa,KAAM,SAAApa,GAEF,GAAe,KADfA,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,SAE5B,MAAMrE,EAAaI,KACvB,OAAO,EAAIhjD,KAAK2uE,KAAKra,IAGzBsa,IAAK,SAAAta,GAED,GADAA,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QAC5BjnD,KAAKwD,IAAI8wD,GAAU2Y,EACnB,MAAMrqB,EAAaM,IACvB,OAAO,EAAIljD,KAAKkD,IAAIoxD,IAGxBua,KAAM,SAAAva,GAEF,OADAA,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QACzB,EAAIjnD,KAAKouE,KAAK9Z,IAGzBwa,IAAK,SAAAxa,GAED,GADAA,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QAC5BjnD,KAAKwD,IAAI8wD,GAAU2Y,EACnB,MAAMrqB,EAAaM,IACvB,OAAOljD,KAAKmD,IAAImxD,IAGpBya,KAAM,SAAAza,GAEF,OADAA,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QACzBjnD,KAAK2uE,KAAKra,IAGrB0a,IAAK,SAAA1a,GAED,GADAA,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QAC5BjnD,KAAKwD,IAAI8wD,GAAU2Y,EACnB,MAAMrqB,EAAaM,IACvB,OAAOljD,KAAKsuE,IAAIha,IAGpB2a,KAAM,SAAA3a,GAEF,OADAA,EAAS1Q,EAAEhkC,OAAO00C,EAAQ9Q,EAAMyD,QACzBjnD,KAAKwuE,KAAKla,KAIzB70D,EAAOC,QAAUwtE,wBChJjB,IAAMtqB,EAAea,EAAQ,MAC7B,EAAgCA,EAAQ,MAAjCE,EAAP,EAAOA,eAAgBH,EAAvB,EAAuBA,MACjBI,EAAID,EAEJurB,EAAe,CACjBC,UAAW,SAAAr7D,GACP,OAAO6uC,mBAAmBiB,EAAEhkC,OAAO9L,EAAM0vC,EAAM8D,UAGnD8nB,UAAW,aAIXC,WAAY,SAACl8B,EAASm8B,GAClB,MAAM1sB,EAAac,MAAM,+CAoBjCjkD,EAAOC,QAAUwvE,gEClCXtsB,EAAea,EAAQ,MACvB4gB,EAAa5gB,EAAQ,MAErBD,EAAQ,CACVyD,OAAQ,EACR0F,MAAO,EACPzE,QAAS,EACTZ,OAAQ,EACRioB,UAAW,EACXC,SAAU,EACVC,YAAa,EACbxb,kBAAmB,IAKjByb,EAAgB,GACtBt4D,OAAOiY,KAAKm0B,GAAOlI,SAAQ,SAACnnC,GACxBu7D,EAAclsB,EAAMrvC,IAAQA,SAM1BwvC,EAAAA,wBACF,aAAc,UACV76C,KAAK06C,MAAQA,EACb16C,KAAK6mE,YAAc,CACfrb,OAAQ9Q,EAAMyD,OACd2oB,QAASpsB,EAAM0E,QACf2nB,OAAQrsB,EAAM8D,OACdwoB,QAAS,gDAIjB,SAAoBnxE,GAGhB,GAAa,kBAFOA,EAEG,CACnB,GAAIiB,MAAMjB,GACN,OAAOikD,EAAaQ,MACjB,IAAK3/C,SAAS9E,GACjB,OAAOikD,EAAaM,IAG5B,YAAe17C,IAAX7I,GAAmC,OAAXA,EACjBikD,EAAaK,KACjBtkD,6BAQX,SAAYoxE,GAAM,WACd,OAAOA,EAAKpzB,QAAO,SAAC1vC,EAAK4I,GAAN,OAAcvV,MAAM86C,QAAQvlC,GAAO5I,EAAI8B,OAAO,EAAKihE,YAAYn6D,IAAQ5I,EAAI8B,OAAO8G,KAAM,gCAU/G,SAAauJ,GAA0C,IAI/Ck1C,EAJUlZ,IAAqC,yDAArB60B,IAAqB,yDAEnD,GAAI7wD,aAAewjC,EACf,OAAOxjC,EAGX,GAAmB,kBAARA,EACPk1C,EAASl1C,OAER,GAAmB,mBAARA,EAAmB,CAC/B,IAAI6wD,EAGA,MAAMrtB,EAAaQ,MAFnBkR,EAASz0D,OAAOuf,QAMnB,GAAmB,kBAARA,EAAkB,CAC9B,GAAmB,IAAfA,EAAIvgB,OACJ,MAAM+jD,EAAaQ,MAIvB,IAFAkR,EAASz0D,OAAOuf,MAEDk1C,EACX,MAAM1R,EAAaQ,UAEpB,KAAI9iD,MAAM86C,QAAQh8B,GAarB,MAAMzY,MAAM,+CAZZ,GAAKy0C,EAQDkZ,EAASxrD,KAAKonE,aAAa9wD,EAAI,GAAG,QARxB,CAEV,GAAsB,IAAlBA,EAAI,GAAGvgB,OAGP,MAAM+jD,EAAaQ,MAFnBkR,EAASxrD,KAAKonE,aAAa9wD,EAAI,GAAG,KAW9C,OAAOk1C,+BAeX,SAAckE,EAAQ2X,EAAWC,EAAYC,GAAoC,WAA9BC,EAA8B,uDAAnB,KAAMC,EAAa,uDAAH,EAC1E,GAAI/X,EAAO35D,OAAS0xE,EAChB,MAAM3tB,EAAaW,YAAY,CAAC4sB,IACpB,MAAZG,IACAA,EAAWH,IAAc3sB,EAAMyD,OAAS,EAAiB,MAAbkpB,EAAoB,KAAO,IAE3E3X,EAAOld,SAAQ,SAAAjoB,GACX,MAAyCA,EAAlConC,EAAP,EAAOA,UAAWC,EAAlB,EAAkBA,WAAYtf,EAA9B,EAA8BA,QACxBo1B,EAAUn9C,EAAMttB,iBAAiBs+D,EACjCjD,GAAa3G,IAAcC,IAAetf,IAAYo1B,EACtDviB,EAAO,CAACmT,UAAAA,EAAW3G,UAAAA,EAAWC,WAAAA,EAAYtf,QAAAA,EAASo1B,QAAAA,GAGzD,GAAIpP,EAEI/tC,EADAA,EAAMo9C,QACEH,EAEA,EAAK1wD,OAAOyT,EAAO88C,EAAWG,GAC1CD,EAAKh9C,EAAO46B,QAGX,GAAIwM,EACL4V,EAAKh9C,EAAMttB,MAAOkoD,QAGjB,GAAIuiB,EAAS,CACd,IAAKJ,EAAY,MAAMxtB,EAAaQ,MACpC/vB,EAAQA,EAAMttB,MAAM2qE,MACpBr9C,EAAQ,EAAK28C,YAAY38C,IACnBioB,SAAQ,SAAA/qB,GACV8/C,EAAK9/C,EAAM09B,WAERyM,GAActf,KACrB/nB,EAAQ,EAAK28C,YAAY38C,EAAMttB,QACzBu1C,SAAQ,SAAA/qB,GACV8/C,EAAK9/C,EAAM09B,+BA4B3B,SAAO56B,GAAqE,IAA9DhtB,EAA8D,uDAAvD,KAAMiqE,EAAiD,uCAAvCK,IAAuC,yDAA1BC,EAA0B,wDAIxE,GAFItwE,MAAM86C,QAAQ/0C,KACdA,EAAOA,EAAK,IACH,MAATgtB,QAA8B7rB,IAAb8oE,EACjB,MAAM1tB,EAAaW,YAAY,CAACl9C,IAC7B,GAAa,MAATgtB,EACP,OAAOi9C,EAEX,GAAqB,kBAAVj9C,GAAsB/yB,MAAM86C,QAAQ/nB,GAC3C,OAAOA,EAEX,IAAM+nB,EAAU/nB,EAAM+nB,QAItB,GAHmB,MAAf/nB,EAAMttB,QAAestB,EAAQA,EAAMttB,OAG3B,MAARM,EACA,OAAOgtB,EAEX,GAAIA,aAAiBuvB,EACjB,MAAMvvB,EAEV,GAAIhtB,IAASm9C,EAAMmJ,MAAO,CACtB,GAAIrsD,MAAM86C,QAAQ/nB,GACd,OAAOs9C,EAAO7nE,KAAKknE,YAAY38C,GAASA,EACrC,GAAIA,aAAiBgxC,EACxB,MAAMzhB,EAAaQ,MAChB,GAAIwtB,EACP,OAAOD,EAAO,CAACt9C,GAAS,CAAC,CAACA,IAE9B,MAAMuvB,EAAaQ,MAChB,GAAI/8C,IAASm9C,EAAMisB,YACtB,OAAOp8C,EAMP+nB,IACA/nB,EAAQA,EAAM,GAAG,IAErB,IAAMw9C,EAAY/nE,KAAKzC,KAAKgtB,GAC5B,GAAIhtB,IAASm9C,EAAM8D,OAEXj0B,EADAw9C,IAAcrtB,EAAM0E,QACZ70B,EAAQ,OAAS,QAEjB,GAAH,OAAMA,QACZ,GAAIhtB,IAASm9C,EAAM0E,QAAS,CAC/B,GAAI2oB,IAAcrtB,EAAM8D,OACpB,MAAM1E,EAAaQ,MACnBytB,IAAcrtB,EAAMyD,SACpB5zB,EAAQ2nC,QAAQ3nC,SACjB,GAAIhtB,IAASm9C,EAAMyD,OACtB5zB,EAAQvqB,KAAKonE,aAAa78C,GAAO,OAC9B,IAAIhtB,IAASm9C,EAAMyQ,kBAGtB,MAAMrR,EAAaQ,MAFnB/vB,EAAQvqB,KAAKonE,aAAa78C,GAAO,GAAO,GAI5C,OAAOA,sBAGX,SAAKy9C,GACD,IAAIzqE,EAAOyC,KAAK6mE,mBAAmBmB,GAanC,OAZc,IAAVzqE,IACI/F,MAAM86C,QAAQ01B,GACdzqE,EAAOm9C,EAAMmJ,MACRmkB,EAASxmD,IAEVjkB,EADAyqE,EAASxmD,IAAI/pB,KACNijD,EAAM+rB,UAEN/rB,EAAMgsB,SAEVsB,aAAoBzM,IAC3Bh+D,EAAOm9C,EAAMisB,cAEdppE,4BAGX,SAAWgtB,GACP,OAAOA,EAAM/I,KAAO+I,EAAM/I,IAAI/pB,8BAGlC,SAAU8yB,GACN,OAAOA,EAAM/I,MAAQ+I,EAAM/I,IAAI/pB,mCASnC,SAAe4yC,EAAS49B,EAAQC,GAc5B,OAZAA,EAAS5M,EAAQ6M,OAAOF,EAAQC,GAGhCD,EAASjoE,KAAKq6D,YAAYhwB,EAAS49B,GAG/BC,KAFJD,EAASntB,EAAEhkC,OAAOmxD,EAAQvtB,EAAMmJ,WAAOnlD,GAAW,GAAO,KAGrDwpE,EAASloE,KAAKq6D,YAAYhwB,EAAS69B,GACnCA,EAASptB,EAAEhkC,OAAOoxD,EAAQxtB,EAAMmJ,WAAOnlD,GAAW,GAAO,IAEzDwpE,EAASD,EAEN,CAACA,EAAQC,8BAGpB,SAAY79B,EAAS8N,GACjB,GAAY,OAARA,EACA,MAAO,CAACl7C,MAAO,EAAGq1C,SAAS,EAAOq1B,SAAS,GAC/C,IAAM5rB,EAAM1R,EAAQvpB,MAAMq8C,gBAAgBhlB,GAC1C,MAAO,CAACl7C,MAAO8+C,EAAIhvC,IAAKulC,QAASyJ,EAAIzJ,QAAS9wB,IAAK22B,EAAI32B,WAnRzDq5B,GAuRAC,EAAI,IAAID,EAERwgB,EAAW,CAKbyB,WAAY,SAAAxmD,GACR,MAAmB,kBAARA,GACA,OAAOxP,KAAKwP,IAI3B0mD,QAAS,SAACoL,EAAYlrE,GAClB,OAAOsD,OAAO4nE,EAAW5xE,QAAQ,oBAAqB,QACjDA,QAAQ,eAAgB,OACxBA,QAAQ,eAAgB,QACxBA,QAAQ,WAAY,MAAO0G,KAIlCo2D,EAAW,CAMbnX,MAAO,SAAC6d,GACJ,IAAMz8D,SAAcy8D,EACpB,GAAa,WAATz8D,EAAmB,CAEnB,IAAM8qE,EAAQrO,EAAS76D,cACvB,GAAc,SAAVkpE,GAA8B,UAAVA,EAEpB,MAAO,CAAC5N,GAAI,IAAKx9D,MAAiB,SAAVorE,GAG5B,IAAMtsB,EAAMie,EAAS5pD,MAAM,wBAE3B,GAAI2rC,EAAK,CAEL,IAAiB9+C,EAAbw9D,EAAK1e,EAAI,GAGb,GAAIjlD,MAAMilD,EAAI,IAAK,CACf,IAAMssB,EAAQtsB,EAAI,GAAG58C,cACrB,GAAc,SAAVkpE,GAA8B,UAAVA,EAEpBprE,EAAkB,SAAVorE,OACL,GAAI,oDAAoDvhE,KAAKi1C,EAAI,IAEpE9+C,EAAQ,IAAI68C,EAAaiC,EAAI,SAI7B,GADA9+C,EAAQ8+C,EAAI,GACRsf,EAASyB,WAAW7/D,GACpB,MAAO,CAACw9D,GAAI,KAAMx9D,MAAOo+D,EAAS2B,QAAQ//D,GAAQmT,MAAc,MAAPqqD,QAKjEx9D,EAAQlG,OAAOglD,EAAI,IAEvB,MAAO,CAAC0e,GAAAA,EAAIx9D,MAAAA,GAET,OAAIo+D,EAASyB,WAAW9C,GACpB,CAACS,GAAI,KAAMx9D,MAAOo+D,EAAS2B,QAAQhD,GAAW5pD,OAAO,GAErD,CAACqqD,GAAI,IAAKx9D,MAAO+8D,GAEzB,GAAa,YAATz8D,GAA+B,WAATA,GAAsB/F,MAAM86C,QAAQ0nB,IAC9DA,aAAoBlgB,EACvB,MAAO,CAAC2gB,GAAI,IAAKx9D,MAAO+8D,GAExB,MAAMn8D,MAAM,wBAAD,cAAgCm8D,EAAhC,mBAKjBsB,EAAU,CAEZQ,mBAAoB,SAACtQ,GAKjB,IAJA,IAAI8c,EAAW9c,EACXryD,EAAO,GACPovE,EAAS,EAEND,EAAW,GACdC,GAAUD,EAAW,GAAK,GAC1BnvE,EAAO6F,OAAOC,aAAa,IAAIG,WAAW,GAAKmpE,GAAUpvE,EACzDmvE,EAAWpxE,KAAKC,OAAOmxE,EAAWC,GAAU,IAGhD,OAAOpvE,GAGXqvE,mBAAoB,SAACC,GAIjB,IAFA,IAAM3yE,GADN2yE,EAAaA,EAAWtpE,eACDpJ,OACnBy1D,EAAS,EACJp1D,EAAI,EAAGA,EAAIN,EAAKM,IAAK,CAC1B,IAAM0H,EAAO2qE,EAAWrpE,WAAWhJ,GAC9BU,MAAMgH,KACP0tD,IAAW1tD,EAAO,IAAR,SAAc,GAAOhI,EAAMM,EAAI,IAGjD,OAAOo1D,GAQX2c,OAAQ,SAACF,EAAQC,GACb,GAAc,MAAVA,EACA,OAAOD,EAEX,IAAIS,EAAWC,EACf,GAAI7tB,EAAE6W,UAAUsW,GACZS,EAAY,EACZC,EAAY,MACT,KAAI7tB,EAAE8W,WAAWqW,GAGjB,MAAMpqE,MAAM,yCAFf6qE,EAAYT,EAAOzmD,IAAIvjB,GAAG6lD,IAAMmkB,EAAOzmD,IAAI/pB,KAAKqsD,IAChD6kB,EAAYV,EAAOzmD,IAAIvjB,GAAG8lD,IAAMkkB,EAAOzmD,IAAI/pB,KAAKssD,IAgBpD,OAbIjJ,EAAE6W,UAAUuW,IACRQ,EAAY,GAAKC,EAAY,KAC7BT,EAAS,CACL1mD,IAAK,CACD/pB,KAAM,CAACssD,IAAKmkB,EAAO1mD,IAAIuiC,IAAKD,IAAKokB,EAAO1mD,IAAIsiC,KAC5C7lD,GAAI,CAAC6lD,IAAKokB,EAAO1mD,IAAIsiC,IAAM4kB,EAAW3kB,IAAKmkB,EAAO1mD,IAAIuiC,IAAM4kB,OAKxET,EAAO1mD,IAAIvjB,GAAG6lD,IAAMokB,EAAO1mD,IAAI/pB,KAAKqsD,IAAM4kB,EAC1CR,EAAO1mD,IAAIvjB,GAAG8lD,IAAMmkB,EAAO1mD,IAAI/pB,KAAKssD,IAAM4kB,GAEvCT,IAIfvxE,EAAOC,QAAU,CACbikD,eAAgBC,EAChBJ,MAAAA,EACAksB,cAAAA,EACAvT,WApbe,CAAC,EAAG,EAAG,EAAG,EAAG,GAAI,IAAK,IAAK,KAAM,MAAO,OAAQ,QAAS,SAAU,UAAW,WAAY,YAAa,aAAe,cAAgB,eAAiB,gBAAkB,kBAAoB,kBAAqB,mBAAsB,oBAAwB,mBAAyB,mBAA0B,oBAA4B,qBAA6B,qBAA+B,qBAAgC,qBAAiC,qBAAmC,oBAAoC,oBAAsC,oBAAuC,qBAAyC,sBAA2C,qBAA4C,qBAA8C,oBAA+C,qBAAiD,oBAAkD,oBAAoD,mBAAsD,oBAAuD,oBAAyD,qBAA2D,oBAA4D,qBAA8D,qBAAgE,oBAAiE,qBAAmE,qBAAqE,oBAAsE,qBAAwE,oBAA0E,qBAA4E,oBAA6E,qBAA+E,qBAAiF,sBAAmF,mBAAoF,oBAAsF,oBAAwF,mBAA0F,qBAA4F,qBAA6F,oBAA+F,oBAAiG,qBAAmG,oBAAqG,uBAAuG,oBAAwG,qBAA0G,qBAA4G,oBAA8G,mBAAgH,qBAAkH,qBAAoH,qBAAsH,qBAAuH,qBAAyH,sBAA2H,qBAA6H,qBAA+H,qBAAiI,oBAAmI,uBAAqI,qBAAuI,sBAAyI,qBAA2I,sBAA6I,sBAA+I,sBAAiJ,sBAAmJ,qBAAqJ,qBAAuJ,qBAAwJ,qBAA0J,qBAA4J,qBAA8J,sBAqb14NgI,SAAAA,EACA/H,SAAAA,EACAgI,QAAAA,uBCrcJ,IAAMxhB,EAAea,EAAQ,MACtBE,EAAkBF,EAAQ,MAA1BE,eAED+tB,EAAS,CACXC,QAAS,SAACC,EAAU7rE,EAAOq1C,GACvB,IAAI15C,EAAO,EAcX,GAbAkwE,EAASt2B,SAAQ,SAAAtlB,GACb,GAAe,MAAXA,OACG,IAAe,MAAXA,EAGP,MAAM,IAAIrvB,MAAJ,+BAAkCqvB,IAFxCt0B,GAAQA,MAMH,MAATqE,IACAA,EAAQ,GAGC,IAATrE,EACA,OAAOqE,EAGX,IACIA,EAAQ49C,EAAeusB,aAAanqE,EAAOq1C,GAC7C,MAAOl1C,GACL,KAAIA,aAAa08C,GAKb,MAAM18C,EAHF5F,MAAM86C,QAAQr1C,KACdA,EAAQA,EAAM,GAAG,IAK7B,MAAqB,kBAAVA,GAAsBnG,MAAMmG,GAAe68C,EAAaQ,OAC3Dr9C,IAIV8rE,EAAU,CACZC,UAAW,SAAC/rE,EAAOgsE,EAAS32B,GACxB,IACIr1C,EAAQ49C,EAAeusB,aAAanqE,EAAOq1C,GAC7C,MAAOl1C,GACL,GAAIA,aAAa08C,EACb,OAAO18C,EACX,MAAMA,EAEV,GAAgB,MAAZ6rE,EACA,OAAOhsE,EAAQ,IAEnB,MAAM,IAAIY,MAAJ,gCAAmCorE,MAI3CpC,EAAc,CAAC,QAAW,EAAG,OAAU,EAAG,OAAU,GAEpDtT,EAAQ,CACVmH,UAAW,SAACwO,EAAQC,EAAOC,EAAQC,EAAUC,GAC3B,MAAVJ,IAAgBA,EAAS,GACf,MAAVE,IAAgBA,EAAS,GAEzBC,IACAH,EAASA,EAAO,GAAG,IAEnBI,IACAF,EAASA,EAAO,GAAG,IAGvB,IAAMG,SAAeL,EAAQM,SAAeJ,EAE5C,GAAIG,IAAUC,EAEV,OAAQL,GACJ,IAAK,IACD,OAAOD,IAAWE,EACtB,IAAK,IACD,OAAOF,EAASE,EACpB,IAAK,IACD,OAAOF,EAASE,EACpB,IAAK,KACD,OAAOF,IAAWE,EACtB,IAAK,KACD,OAAOF,GAAUE,EACrB,IAAK,KACD,OAAOF,GAAUE,OAGzB,OAAQD,GACJ,IAAK,IACD,OAAO,EACX,IAAK,IACD,OAAOtC,EAAY0C,GAAS1C,EAAY2C,GAC5C,IAAK,IACD,OAAO3C,EAAY0C,GAAS1C,EAAY2C,GAC5C,IAAK,KACD,OAAO,EACX,IAAK,KACD,OAAO3C,EAAY0C,IAAU1C,EAAY2C,GAC7C,IAAK,KACD,OAAO3C,EAAY0C,IAAU1C,EAAY2C,GAIrD,MAAM3rE,MAAM,4CAGhB4rE,SAAU,SAACP,EAAQC,EAAOC,EAAQC,EAAUC,GAiBxC,OAhBc,MAAVJ,IAAgBA,EAAS,IACf,MAAVE,IAAgBA,EAAS,IAEzBC,IACAH,EAASA,EAAO,GAAG,IAEnBI,IACAF,EAASA,EAAO,GAAG,IAKT,mBAFOF,IAGjBA,EAASA,EAAS,OAAS,SACjB,mBAJ8BE,IAKxCA,EAASA,EAAS,OAAS,SACxB,GAAKF,EAASE,GAGzBM,OAAQ,SAACR,EAAQC,EAAOC,EAAQC,EAAUC,GACxB,MAAVJ,IAAgBA,EAAS,GACf,MAAVE,IAAgBA,EAAS,GAE7B,IACIF,EAASruB,EAAeusB,aAAa8B,EAAQG,GAC7CD,EAASvuB,EAAeusB,aAAagC,EAAQE,GAC/C,MAAOlsE,GACL,GAAIA,aAAa08C,EACb,OAAO18C,EACX,MAAMA,EAGV,OAAQ+rE,GACJ,IAAK,IACD,OAAOD,EAASE,EACpB,IAAK,IACD,OAAOF,EAASE,EACpB,IAAK,IACD,OAAOF,EAASE,EACpB,IAAK,IACD,OAAe,IAAXA,EACOtvB,EAAaI,KACjBgvB,EAASE,EACpB,IAAK,IACD,gBAAOF,EAAUE,GAGzB,MAAMvrE,MAAM,0CAKpBlH,EAAOC,QAAU,CACbgyE,OAAAA,EACAG,QAAAA,EACAxV,MAAAA,EACAoW,UAAW,CACPjP,UAAW,CAAC,IAAK,IAAK,IAAK,KAAM,KAAM,MACvC+O,SAAU,CAAC,KACXC,OAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,qECvK/B5vB,EAAea,EAAQ,MACtBE,EAAkBF,EAAQ,MAA1BE,eACApL,EAAUkL,EAAQ,MAAlBlL,OACDm6B,EAAQjvB,EAAQ,MAChBkvB,EAAQlvB,EAAQ,MACfmvB,EAAyBnvB,EAAQ,MAAjCmvB,sBAEDC,EAAAA,wBAMF,WAAYv7D,GAAQ,UAChBxO,KAAK4nE,KAAO,GACZ5nE,KAAK8gB,MAAQ,IAAI+oD,EAAM7pE,MACvBwO,EAASF,OAAO+mC,OAAO,CACnB20B,WAAY,kBAAM,OACnBx7D,GACHxO,KAAK8gB,MAAQ,IAAI+oD,EAAM7pE,MAEvBA,KAAKgqE,WAAax7D,EAAOw7D,WACzBhqE,KAAKiqE,UAAY,GAEjBjqE,KAAKkqE,OAAS,IAAIz6B,EAAOzvC,KAAMA,KAAK8gB,wCAQxC,SAAQU,GAEW,MAAXA,EAAIsiC,MACa,MAAbtiC,EAAI2oD,QACJ3oD,EAAI2oD,MAAQnqE,KAAKo8D,SAAWp8D,KAAKo8D,SAAS+N,WAAQzrE,IAMzC,IALDsB,KAAK4nE,KAAK7K,WAAU,SAAAqN,GAC5B,OAAQA,EAAQ3yE,MAAQ2yE,EAAQ3yE,KAAKqsD,KAAOtiC,EAAIsiC,KAAOsmB,EAAQnsE,GAAG6lD,KAAOtiC,EAAIsiC,KACtEsmB,EAAQ3yE,KAAKssD,KAAOviC,EAAIuiC,KAAOqmB,EAAQnsE,GAAG8lD,KAAOviC,EAAIuiC,KACpDqmB,EAAQtmB,MAAQtiC,EAAIsiC,KAAOsmB,EAAQrmB,MAAQviC,EAAIuiC,KAAOqmB,EAAQD,QAAU3oD,EAAI2oD,UAGpFnqE,KAAK4nE,KAAKljE,KAAK8c,IAEvB,OAAO,0BAQX,SAASA,GAEe,MAAhBA,EAAI/pB,KAAKqsD,MACQ,MAAbtiC,EAAI2oD,QACJ3oD,EAAI2oD,MAAQnqE,KAAKo8D,SAAWp8D,KAAKo8D,SAAS+N,WAAQzrE,IAMzC,IAJDsB,KAAK4nE,KAAK7K,WAAU,SAAAqN,GAC5B,OAAOA,EAAQ3yE,MAAQ2yE,EAAQ3yE,KAAKqsD,MAAQtiC,EAAI/pB,KAAKqsD,KAAOsmB,EAAQ3yE,KAAKssD,MAAQviC,EAAI/pB,KAAKssD,KACnFqmB,EAAQnsE,GAAG6lD,MAAQtiC,EAAIvjB,GAAG6lD,KAAOsmB,EAAQnsE,GAAG8lD,MAAQviC,EAAIvjB,GAAG8lD,QAGlE/jD,KAAK4nE,KAAKljE,KAAK8c,IAEvB,MAAO,CAAC,CAAC,+BASb,SAAYroB,GAER,IAAM4iD,EAAM,CAACv6B,IAAKxhB,KAAKgqE,WAAW7wE,EAAM6G,KAAKo8D,SAAS+N,QACtD,OAAe,MAAXpuB,EAAIv6B,IACGs4B,EAAapgB,MACpBmhB,EAAe8W,UAAU5V,GACzB/7C,KAAKqqE,QAAQtuB,EAAIv6B,KAEjBxhB,KAAKsqE,SAASvuB,EAAIv6B,KAEf,8BAQX,SAAY+oD,GACR,OAAI1vB,EAAe+W,WAAW2Y,GACnBvqE,KAAKsqE,SAASC,EAAW/oD,KAEhCq5B,EAAe8W,UAAU4Y,GAClBvqE,KAAKqqE,QAAQE,EAAW/oD,KAE5B+oD,8BASX,SAAapxE,EAAM48B,GAAM,WAMrB,OALAA,EAAKyc,SAAQ,SAAA2F,GACE,MAAPA,GAEJ,EAAKqyB,YAAYryB,MAEd,CAACl7C,MAAO,EAAGukB,IAAK,sCAQ3B,SAAmB3rB,GACfmK,KAAKwqE,YAAY30E,wBAWrB,SAAM40E,EAAWrO,GAA+B,IAArBsO,EAAqB,wDAC5C,GAAyB,IAArBD,EAAU10E,OAAc,MAAM8H,MAAM,4BACxCmC,KAAK4nE,KAAO,GACZ5nE,KAAKo8D,SAAWA,EAChB,IAAMuO,EAAYf,EAAMgB,IAAIH,GAC5BzqE,KAAKkqE,OAAOW,MAAQF,EAAU71D,OAC9B,IACI,IAAMinC,EAAM/7C,KAAKkqE,OAAOY,sBACxB9qE,KAAK+qE,mBAAmBhvB,GAC1B,MAAO3+C,GACL,IAAKstE,EACD,MAAM5wB,EAAac,MAAMx9C,EAAEC,QAASD,GAG5C,GAAI4C,KAAKkqE,OAAOxkE,OAAO3P,OAAS,IAAM20E,EAAa,CAC/C,IAAMx6D,EAAQlQ,KAAKkqE,OAAOxkE,OAAO,GACjC,MAAMokE,EAAsB55D,EAAOu6D,GAGvC,OAAOzqE,KAAK4nE,WAnJdmC,GAuJNpzE,EAAOC,QAAU,CACbmzE,UAAAA,iEC/JEjwB,EAAea,EAAQ,MAC7B,EAAyCA,EAAQ,MAAnB2gB,GAA9B,EAAOzgB,eAAP,EAAuBH,MAAvB,EAA8B4gB,SAC9B,EAA4C3gB,EAAQ,IAC9C4gB,GADN,EAAOqN,OAAP,EAAeG,QAAf,EAAwBxV,MAAxB,EAA+BoW,UACZhvB,EAAQ,OACrBqwB,EAAU,QAEVnB,EAAAA,wBAEF,WAAYx/B,GAAS,UACjBrqC,KAAKqqC,QAAUA,8CAGnB,SAAmBo+B,GACf,OAAOnN,EAAQkN,mBAAmBC,mCAQtC,SAAiBwC,GACb,IAAMlvB,EAAMkvB,EAAY76D,MAAM,4CAE9B,MAAO,CACHoR,IAAK,CACDuiC,IAAK/jD,KAAKwoE,mBAAmBzsB,EAAI,IACjC+H,KAAM/H,EAAI,6BAKtB,SAAS+H,GACL,IAAMwW,GAAUxW,EAChB,IAAK/sD,OAAOm0E,UAAU5Q,GAClB,MAAMz8D,MAAM,+BAChB,MAAO,CACH2jB,IAAK,CACDuiC,SAAKrlD,EACLolD,KAAMA,4BAKlB,SAASC,GACL,MAAO,CACHviC,IAAK,CACDuiC,IAAK/jD,KAAKwoE,mBAAmBzkB,GAC7BD,SAAKplD,+BAWjB,SAAYoqE,EAAU7rE,GAElB,OADA+C,KAAKm9D,gBAAgBlgE,GACd,8BAGX,SAAaA,EAAOgsE,GAEhB,OADAjpE,KAAKm9D,gBAAgBlgE,GACd,4BAGX,SAAWisE,EAAQC,EAAOC,GAGtB,OAFAppE,KAAKm9D,gBAAgB+L,GACrBlpE,KAAKm9D,gBAAgBiM,GACd,gCAGX,SAAepN,GAAM,IAObmP,EAAQC,EAAQC,EAAQC,EAAQnB,EAAOpuB,EAP1B,OAEjB,GAAI/7C,KAAKurE,eAAevP,EAAK,IACzB,OAAOA,EAAK,GAChB,IAAKA,EAAK,GAAGx6C,IACT,MAAM3jB,MAAM,kCAAD,OAAmCm+D,EAAK,GAAxC,MAIf,IAoBI/hB,EApBEz4B,EAAMw6C,EAAKwP,QAAQhqD,IAEzB,GADA2oD,EAAQ3oD,EAAI2oD,MACP3oD,EAAI/pB,KAYL0zE,EAASj0E,KAAK2uD,IAAIrkC,EAAI/pB,KAAKqsD,IAAKtiC,EAAIvjB,GAAG6lD,KACvCunB,EAASn0E,KAAKu0E,IAAIjqD,EAAI/pB,KAAKqsD,IAAKtiC,EAAIvjB,GAAG6lD,KACvCsnB,EAASl0E,KAAK2uD,IAAIrkC,EAAI/pB,KAAKssD,IAAKviC,EAAIvjB,GAAG8lD,KACvCunB,EAASp0E,KAAKu0E,IAAIjqD,EAAI/pB,KAAKssD,IAAKviC,EAAIvjB,GAAG8lD,SAf5B,CAEX,QAAgBrlD,IAAZ8iB,EAAIsiC,UAAiCplD,IAAZ8iB,EAAIuiC,IAC7B,MAAMlmD,MAAM,6CAIhBstE,EAASE,EAAS7pD,EAAIsiC,IACtBsnB,EAASE,EAAS9pD,EAAIuiC,IA4C1B,OAjCAiY,EAAKxpB,SAAQ,SAAAhxB,GACT,GAAI,EAAK+pD,eAAe/pD,GACpB,OAAOA,EAEX,KADAA,EAAMA,EAAIA,KACA,MAAM3jB,MAAM,kCAAD,OAAmC2jB,EAAnC,MACrB,GAAKA,EAAI/pB,KAWF,CAEH,IAAMi0E,EAAYx0E,KAAK2uD,IAAIrkC,EAAI/pB,KAAKqsD,IAAKtiC,EAAIvjB,GAAG6lD,KAC1C6nB,EAAYz0E,KAAKu0E,IAAIjqD,EAAI/pB,KAAKqsD,IAAKtiC,EAAIvjB,GAAG6lD,KAC1C8nB,EAAY10E,KAAK2uD,IAAIrkC,EAAI/pB,KAAKssD,IAAKviC,EAAIvjB,GAAG8lD,KAC1C8nB,EAAY30E,KAAKu0E,IAAIjqD,EAAI/pB,KAAKssD,IAAKviC,EAAIvjB,GAAG8lD,MAC5C4nB,EAAYR,GAAUO,EAAYL,GAAUQ,EAAYT,GAAUQ,EAAYN,GAC3EnB,IAAU3oD,EAAI2oD,SACjBlwB,EAAMH,EAAaK,MAGvBgxB,EAASj0E,KAAKu0E,IAAIN,EAAQO,GAC1BL,EAASn0E,KAAK2uD,IAAIwlB,EAAQM,GAC1BP,EAASl0E,KAAKu0E,IAAIL,EAAQQ,GAC1BN,EAASp0E,KAAK2uD,IAAIylB,EAAQO,OAzBf,CACX,QAAgBntE,IAAZ8iB,EAAIsiC,UAAiCplD,IAAZ8iB,EAAIuiC,IAC7B,MAAMlmD,MAAM,8CAGZ2jB,EAAIsiC,IAAMqnB,GAAU3pD,EAAIsiC,IAAMunB,GAAU7pD,EAAIuiC,IAAMqnB,GAAU5pD,EAAIuiC,IAAMunB,GACnEnB,IAAU3oD,EAAI2oD,SACjBlwB,EAAMH,EAAaK,MAEvBgxB,EAASE,EAAS7pD,EAAIsiC,IACtBsnB,EAASE,EAAS9pD,EAAIuiC,QAkB1B9J,KAGA8B,EADAovB,IAAWE,GAAUD,IAAWE,EAC1B,CACF9pD,IAAK,CACD2oD,MAAAA,EACArmB,IAAKqnB,EACLpnB,IAAKqnB,IAIP,CACF5pD,IAAK,CACD2oD,MAAAA,EACA1yE,KAAM,CAACqsD,IAAKunB,EAAQtnB,IAAKunB,GACzBrtE,GAAI,CAAC6lD,IAAKqnB,EAAQpnB,IAAKqnB,MAK1B5pD,IAAI2oD,cACFpuB,EAAIv6B,IAAI2oD,MACZpuB,6BAGX,SAAWigB,GAEP,IADA,IAAMvpB,EAAa,IAAI8oB,EACdnlE,EAAI,EAAGA,EAAI4lE,EAAKjmE,OAAQK,IAAK,CAClC,GAAI4J,KAAKurE,eAAevP,EAAK5lE,IACzB,OAAO4lE,EAAK5lE,GAChBq8C,EAAWq5B,IAAI9rE,KAAKm9D,gBAAgBnB,EAAK5lE,IAAI2W,IAAKivD,EAAK5lE,IAI3D,OAAOq8C,4BAQX,SAAWupB,GAAM,WACJmP,GAAU,EAAGC,GAAU,EAAGC,EAASL,QAAaM,EAASS,MA2ClE,OA1CA/P,EAAKxpB,SAAQ,SAAAhxB,GACT,GAAI,EAAK+pD,eAAe/pD,GACpB,OAAOA,EAEQ,kBAARA,IACPA,EAAM,EAAKwqD,SAASxqD,SAIR9iB,KAFhB8iB,EAAMA,EAAIA,KAEFsiC,MACJunB,EAAS,EACTF,EAASH,QAEGtsE,IAAZ8iB,EAAIuiC,MACJunB,EAAS,EACTF,EAjMsB,OAoMtB5pD,EAAIsiC,IAAMqnB,IACVA,EAAS3pD,EAAIsiC,KACbtiC,EAAIsiC,IAAMunB,IACVA,EAAS7pD,EAAIsiC,KACbtiC,EAAIuiC,IAAMqnB,IACVA,EAAS5pD,EAAIuiC,KACbviC,EAAIuiC,IAAMunB,IACVA,EAAS9pD,EAAIuiC,QAEjBonB,IAAWE,GAAUD,IAAWE,EAC1B,CACF9pD,IAAK,CACDsiC,IAAKqnB,EACLpnB,IAAKqnB,IAIP,CACF5pD,IAAK,CACD/pB,KAAM,CAACqsD,IAAKunB,EAAQtnB,IAAKunB,GACzBrtE,GAAI,CAAC6lD,IAAKqnB,EAAQpnB,IAAKqnB,oCAWvC,SAAgB90D,GACZ,IAAMg8B,EAAU96C,MAAM86C,QAAQh8B,GAC9B,OAAIA,EAAIkL,IAEG,CAACzU,IAAK/M,KAAKqqC,QAAQmgC,YAAYl0D,GAAMg8B,QAAAA,GAGzC,CAACvlC,IAAKuJ,EAAKg8B,QAAAA,0BAQtB,SAAQmkB,GAGJ,OAAOA,0BAOX,SAASjL,GACL,OAAOz0D,OAAOy0D,2BAOlB,SAASub,GACL,OAAOA,EAAO/xD,UAAU,EAAG+xD,EAAOhxE,OAAS,GAAIS,QAAQ,MAAO,8BAOlE,SAAUy1E,GACN,MAAgB,SAATA,yBAQX,SAAQ/7D,GACJ,OAAO,IAAI4pC,EAAa5pC,EAAM/Q,6CAGlC,SAAemX,GACX,OAAOA,aAAewjC,QAxRxB+vB,GA4RNlzE,EAAOC,QAAUizE,+HClSXtf,EAAgB5P,EAAQ,KACxB+H,EAAgB/H,EAAQ,KACxBypB,EAAgBzpB,EAAQ,MACxBwX,EAAmBxX,EAAQ,MAC3BuxB,EAAevxB,EAAQ,MACvB6gB,EAAqB7gB,EAAQ,MAC7BwxB,EAAuBxxB,EAAQ,MAC/BgjB,EAAuBhjB,EAAQ,MAC/BmD,EAAgBnD,EAAQ,KACxByrB,EAAezrB,EAAQ,MACvBb,EAAea,EAAQ,MACtBE,EAAkBF,EAAQ,MAA1BE,eACP,EAA4BF,EAAQ,MAA7BlL,EAAP,EAAOA,OAAQ28B,EAAf,EAAeA,UACTxC,EAAQjvB,EAAQ,MAChBkvB,EAAQlvB,EAAQ,MAKhB0xB,EAAAA,wBAMF,WAAY79D,GAAwB,IAAhB89D,EAAgB,kEAChCtsE,KAAKusE,KAAO,GACZvsE,KAAKssE,OAASA,EACdtsE,KAAK8gB,MAAQ,IAAI+oD,EAAM7pE,MACvBwO,EAASF,OAAO+mC,OAAO,CACnB40B,UAAW,GACXuC,qBAAsB,GACtBxC,WAAY,kBAAM,MAClByC,OAAQ,kBAAM,GACdC,QAAS,iBAAM,CAAC,CAAC,MAClBl+D,GAEHxO,KAAKgqE,WAAax7D,EAAOw7D,WACzBhqE,KAAKiqE,UAAY37D,OAAO+mC,OAAO,GAAIyI,EAAe6f,EAAsBwO,EAAsB3Q,EAC1F0Q,EAAc/Z,EAAkB5H,EAAe7H,EAAe0hB,EAAegC,EAC7E53D,EAAOy7D,UAAWz7D,EAAOg+D,sBAC7BxsE,KAAK0sE,QAAUl+D,EAAOk+D,QACtB1sE,KAAKysE,OAASj+D,EAAOi+D,OAGrBzsE,KAAK2sE,YAAcr+D,OAAOiY,KAAKm8B,GAC1Bz8C,OAAOqI,OAAOiY,KAAK69C,IACnBn+D,OAAOqI,OAAOiY,KAAK4rC,IACnBlsD,OAAOqI,OAAOiY,KAAK2lD,IACnBjmE,OAAOqI,OAAOiY,KAAKi1C,IACnBv1D,OAAOqI,OAAOiY,KAAKo3C,IACnB13D,OAAOqI,OAAOiY,KAAKu3B,IAGxB99C,KAAK4sE,iCAAmC,CAAC,MAAO,OAAQ,SAAU,UAAW,QAAS,QAAS,YAAa,MAG5G5sE,KAAK6sE,gBAAL,YAA2Bv+D,OAAOiY,KAAK/X,EAAOg+D,uBAA9C,EAAwExsE,KAAK4sE,kCAA7E,CACI,QAAS,SAAU,WAAY,KAAM,SAAU,eAGnD5sE,KAAK8sE,gBAAkBx+D,OAAOiY,KAAK4lD,GAEnCnsE,KAAKkqE,OAAS,IAAIz6B,EAAOzvC,KAAMA,KAAK8gB,wCAgBxC,SAAQU,GAIJ,OAFiB,MAAbA,EAAI2oD,QACJ3oD,EAAI2oD,MAAQnqE,KAAKo8D,SAAWp8D,KAAKo8D,SAAS+N,WAAQzrE,GAC/CsB,KAAKysE,OAAOjrD,2BAQvB,SAASA,GAIL,OAFiB,MAAbA,EAAI2oD,QACJ3oD,EAAI2oD,MAAQnqE,KAAKo8D,SAAWp8D,KAAKo8D,SAAS+N,WAAQzrE,GAC/CsB,KAAK0sE,QAAQlrD,8BASxB,SAAYroB,GAER,IAAM4iD,EAAM,CAACv6B,IAAKxhB,KAAKgqE,WAAW7wE,EAAM6G,KAAKo8D,SAAS+N,MAAOnqE,KAAKo8D,WAClE,OAAe,MAAXrgB,EAAIv6B,IACGs4B,EAAapgB,KACjBqiB,6BAQX,SAAYwuB,GACR,OAAI1vB,EAAe+W,WAAW2Y,GACnBvqE,KAAKsqE,SAASC,EAAW/oD,KAEhCq5B,EAAe8W,UAAU4Y,GAClBvqE,KAAKqqE,QAAQE,EAAW/oD,KAE5B+oD,+BASX,SAAcpxE,EAAM48B,GAAM,WACS,IAA3B58B,EAAKiQ,QAAQ,YACbjQ,EAAOA,EAAKjD,MAAM,IACtBiD,EAAOA,EAAKgG,cAEZ,IAAM4tE,EAAY/sE,KAAK2sE,YAAYt0B,SAASl/C,GAAQ,EAAI,GAsBxD,GApBK6G,KAAK4sE,iCAAiCv0B,SAASl/C,KAEhD48B,EAAOA,EAAKr+B,KAAI,SAAAygD,GACZ,GAAY,OAARA,EACA,MAAO,CAACl7C,MAAO8vE,EAAWz6B,SAAS,EAAOq1B,SAAS,GACvD,IAAM5rB,EAAM,EAAKj7B,MAAMq8C,gBAAgBhlB,GAEvC,OAAI,EAAK20B,gBAAgBz0B,SAASl/C,GACvB,CAAC8D,MAAO8+C,EAAIhvC,IAAKulC,QAASyJ,EAAIzJ,QAAS9wB,IAAK22B,EAAI32B,KAEpD,CACHvkB,MAAO8+C,EAAIhvC,IACXulC,QAASyJ,EAAIzJ,QACbsf,aAAc/W,EAAe+W,WAAWzZ,GACxCwZ,YAAa9W,EAAe8W,UAAUxZ,QAM9Cn4C,KAAKiqE,UAAU9wE,GAAO,CACtB,IAAI4iD,EACJ,IAAI,QAIIA,EAHC/7C,KAAK4sE,iCAAiCv0B,SAASl/C,IAAU6G,KAAK6sE,gBAAgBx0B,SAASl/C,IAGjF,EAAA6G,KAAKiqE,WAAU9wE,GAAf,SAAqB6G,MAArB,SAA8B+1B,MAF9B,EAAA/1B,KAAKiqE,WAAU9wE,GAAf,UAAwB48B,IAGrC,MAAO34B,GAEL,GAAIA,aAAa08C,EACb,OAAO18C,EAEP,MAAMA,EAGd,QAAYsB,IAARq9C,EAAmB,CAEnB,GAAI/7C,KAAKssE,OAEL,OADKtsE,KAAKusE,KAAKl0B,SAASl/C,IAAO6G,KAAKusE,KAAK7nE,KAAKvL,GACvC,CAAC8D,MAAO,EAAGukB,IAAK,IAE3B,MAAMs4B,EAAaS,gBAAgBphD,GAEvC,OAAO4iD,EAGP,GAAI/7C,KAAKssE,OAEL,OADKtsE,KAAKusE,KAAKl0B,SAASl/C,IAAO6G,KAAKusE,KAAK7nE,KAAKvL,GACvC,CAAC8D,MAAO,EAAGukB,IAAK,IAE3B,MAAMs4B,EAAaS,gBAAgBphD,+DAI3C,WAAwBA,EAAM48B,GAA9B,6EACUi3C,EAAc,GADxB,IAEsBj3C,GAFtB,gEAEeoiB,EAFf,aAGQ60B,EAHR,SAG+B70B,EAH/B,wBAGoBzzC,KAHpB,gLAKsB1E,KAAKitE,cAAc9zE,EAAM6zE,GAL/C,eAKUjxB,EALV,yBAMWlB,EAAeqyB,oBAAoBnxB,IAN9C,mJASA,SAAa5iD,EAAM48B,GACf,GAAI/1B,KAAKmtE,MACL,OAAOntE,KAAKotE,kBAAkBj0E,EAAM48B,GAEpC,IAAMgmB,EAAM/7C,KAAKitE,cAAc9zE,EAAM48B,GACrC,OAAO8kB,EAAeqyB,oBAAoBnxB,qCAQlD,WAAqB,WACXsxB,EAAY,GAYlB,OAXkB/+D,OAAOiY,KAAKvmB,KAAKiqE,WACzBz3B,SAAQ,SAAA86B,GACd,IAEI,QAAY5uE,IADA,EAAKurE,UAAUqD,GAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACvC,OACvBD,EAAU3oE,KAAK4oE,GACjB,MAAOlwE,GACDA,aAAaS,OACbwvE,EAAU3oE,KAAK4oE,OAGpBD,EAAUn4B,yCASrB,SAAmBr/C,GAAkC,IAA1B03E,EAA0B,wDAC3ChwE,SAAc1H,EAEpB,GAAa,WAAT0H,EAAmB,CACnB,GAAIzG,MAAMjB,GACN,OAAOikD,EAAaQ,MACjB,IAAK3/C,SAAS9E,GACjB,OAAOikD,EAAaM,IAExBvkD,GAAU,OACP,GAAa,WAAT0H,EAAmB,CAC1B,GAAI1H,aAAkBikD,EAClB,OAAOjkD,EACX,GAAI03E,GAMA,GALI13E,EAAO2rB,MACP3rB,EAASmK,KAAKwqE,YAAY30E,IAIR,kBAAXA,IAAwB2B,MAAM86C,QAAQz8C,IAAqB,MAAVA,EACxD,OAAOikD,EAAaQ,WAIxB,GAAIzkD,EAAO2rB,KAAO3rB,EAAO2rB,IAAIsiC,MAAQjuD,EAAO2rB,IAAI/pB,KAE5C5B,EAASmK,KAAKwqE,YAAY30E,QACvB,GAAIA,EAAO2rB,KAAO3rB,EAAO2rB,IAAI/pB,MAAQ5B,EAAO2rB,IAAI/pB,KAAKssD,MAAQluD,EAAO2rB,IAAIvjB,GAAG8lD,IAE9EluD,EAASmK,KAAKwqE,YAAY,CACtBhpD,IAAK,CACDsiC,IAAKjuD,EAAO2rB,IAAI/pB,KAAKqsD,IAAKC,IAAKluD,EAAO2rB,IAAI/pB,KAAKssD,WAGpD,KAAIvsD,MAAM86C,QAAQz8C,GAIrB,OAAOikD,EAAaQ,MAHpBzkD,EAASA,EAAO,GAAG,IAO/B,OAAOA,uBAYX,SAAM40E,EAAWrO,GAAoC,IAA1BmR,EAA0B,wDACjD,GAAyB,IAArB9C,EAAU10E,OAAc,MAAM8H,MAAM,4BACxCmC,KAAKo8D,SAAWA,EAChBp8D,KAAKmtE,OAAQ,EACb,IAEIpxB,EAFE4uB,EAAYf,EAAMgB,IAAIH,GAC5BzqE,KAAKkqE,OAAOW,MAAQF,EAAU71D,OAE9B,IAGI,GAFAinC,EAAM/7C,KAAKkqE,OAAOY,uBAClB/uB,EAAM/7C,KAAK+qE,mBAAmBhvB,EAAKwxB,cAChBzzB,EACf,OAAOiC,EAEb,MAAO3+C,GACL,MAAM08C,EAAac,MAAMx9C,EAAEC,QAASD,GAExC,GAAI4C,KAAKkqE,OAAOxkE,OAAO3P,OAAS,EAAG,CAC/B,IAAMma,EAAQlQ,KAAKkqE,OAAOxkE,OAAO,GACjC,MAAMmkE,EAAMC,sBAAsB55D,EAAOu6D,GAE7C,OAAO1uB,uDAaX,WAAiB0uB,EAAWrO,GAA5B,0FAAsCmR,EAAtC,gCAC6B,IAArB9C,EAAU10E,OADlB,sBACsC8H,MAAM,4BAD5C,cAEImC,KAAKo8D,SAAWA,EAChBp8D,KAAKmtE,OAAQ,EACPxC,EAAYf,EAAMgB,IAAIH,GAC5BzqE,KAAKkqE,OAAOW,MAAQF,EAAU71D,OALlC,mBAQoB9U,KAAKkqE,OAAOY,sBARhC,WAQQ/uB,EARR,UASQA,EAAM/7C,KAAK+qE,mBAAmBhvB,EAAKwxB,cAChBzzB,GAV3B,0CAWmBiC,GAXnB,gEAccjC,EAAac,MAAM,KAAEv9C,QAArB,MAdd,aAgBQ2C,KAAKkqE,OAAOxkE,OAAO3P,OAAS,GAhBpC,uBAiBcma,EAAQlQ,KAAKkqE,OAAOxkE,OAAO,GAC3BmkE,EAAMC,sBAAsB55D,EAAOu6D,GAlBjD,iCAoBW1uB,GApBX,0IA/PA,WACI,OAAOqwB,QApDTC,GA0UN11E,EAAOC,QAAU,CACby1E,cAAAA,EACAxxB,eAAAA,yBC/VJ,MAA6BF,EAAQ,MAA9BlkC,EAAP,EAAOA,YAAazU,EAApB,EAAoBA,MACd83C,EAAea,EAAQ,MAGvBrU,EAAkB,GAElBknC,EAAa/2D,EAAY,CAC3Btd,KAAM,aACNuD,QAAS,MACT+H,MAAOzC,EAAMyB,UAGXzE,EAASyX,EAAY,CACvBtd,KAAM,SACNuD,QAAS,iBAGP+wE,EAAqBh3D,EAAY,CACnCtd,KAAM,qBACNuD,QAAS,iBAGPgxE,EAAcj3D,EAAY,CAC5Btd,KAAM,cACNuD,QAAS,8BAGPg1C,EAAWj7B,EAAY,CACzBtd,KAAM,WACNuD,QAAS,+BAGPixE,EAAgBl3D,EAAY,CAC9Btd,KAAM,gBACNuD,QAAS,gDAGPkxE,EAAWn3D,EAAY,CACzBtd,KAAM,WACNuD,QAAS,UAGPmxE,EAAOp3D,EAAY,CACrBtd,KAAM,OACNuD,QAAS,6BAIPoxE,EAAQr3D,EAAY,CACtBtd,KAAM,QACNuD,QAAS,gCAGPqxE,EAAOt3D,EAAY,CACrBtd,KAAM,OACNuD,QAAS,mCACTsxE,WAAYH,IAGV92E,EAAS0f,EAAY,CACvBtd,KAAM,SACNuD,QAAS,uCAGPw1D,EAAUz7C,EAAY,CACxBtd,KAAM,UACNuD,QAAS,gBAGPuxE,EAASx3D,EAAY,CACvBtd,KAAM,SACNuD,QAAS,oBACTsxE,WAAYH,IAOVK,EAAKz3D,EAAY,CACnBtd,KAAM,KACNuD,QAAS,MAGPyxE,EAAQ13D,EAAY,CACtBtd,KAAM,QACNuD,QAAS,MAGP0xE,EAAQ33D,EAAY,CACtBtd,KAAM,QACNuD,QAAS,MAGP2xE,EAAY53D,EAAY,CAC1Btd,KAAM,YACNuD,QAAS,MAGP4xE,EAAY73D,EAAY,CAC1Btd,KAAM,YACNuD,QAAS,OAGP6xE,EAAa93D,EAAY,CAC3Btd,KAAM,aACNuD,QAAS,OAGP8xE,EAAkB/3D,EAAY,CAChCtd,KAAM,kBACNuD,QAAS,OAGP+xE,EAAmBh4D,EAAY,CACjCtd,KAAM,mBACNuD,QAAS,MAQPgyE,GALkBj4D,EAAY,CAChCtd,KAAM,kBACNuD,QAAS,MAGU+Z,EAAY,CAC/Btd,KAAM,iBACNuD,QAAS,OAGPiyE,EAAkBl4D,EAAY,CAChCtd,KAAM,kBACNuD,QAAS,MAGPkyE,EAASn4D,EAAY,CACvBtd,KAAM,SACNuD,QAAS,MAIPmyE,EAAQp4D,EAAY,CACtBtd,KAAM,QACNuD,QAAS,OAGPoyE,EAASr4D,EAAY,CACvBtd,KAAM,SACNuD,QAAS,OAGPqyE,EAAQt4D,EAAY,CACtBtd,KAAM,QACNuD,QAAS,OAGPsyE,EAAQv4D,EAAY,CACtBtd,KAAM,QACNuD,QAAS,MAGPuyE,EAAWx4D,EAAY,CACzBtd,KAAM,WACNuD,QAAS,MAGPwyE,EAAOz4D,EAAY,CACrBtd,KAAM,OACNuD,QAAS,OAGPyyE,EAAY14D,EAAY,CAC1Btd,KAAM,YACNuD,QAAS,MAGP0yE,EAAO34D,EAAY,CACrBtd,KAAM,OACNuD,QAAS,MAGP2yE,EAAO54D,EAAY,CACrBtd,KAAM,OACNuD,QAAS,MAGP4yE,EAAO74D,EAAY,CACrBtd,KAAM,OACNuD,QAAS,MAmBP0vE,EAAY,CAEdoB,EACAxuE,EACA0uE,EACAD,EACA/7B,EACAi8B,EACAC,EACAE,EACAC,EACA7b,EACA+b,EACAJ,EACA92E,EAEAm3E,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAEAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAL,EACAM,EAnDU14D,EAAY,CACtBtd,KAAM,QACNuD,QAAS,OAGC+Z,EAAY,CACtBtd,KAAM,QACNuD,QAAS,OAGC+Z,EAAY,CACtBtd,KAAM,QACNuD,QAAS,OA2CT0yE,EACAC,EACAC,GAGEC,EAAc,IAAIvtE,EAAMoqE,EAAW,CAACtvE,qBAAqB,IAE/DsvE,EAAU55B,SAAQ,SAAA3tC,GACdyhC,EAAgBzhC,EAAU1L,MAAQ0L,KAGtClO,EAAOC,QAAU,CACb0vC,gBAAiBA,EAEjBskC,IAAK,SAAUH,GACX,IAAM+E,EAAeD,EAAY/9D,SAASi5D,GAE1C,GAAI+E,EAAa9pE,OAAO3P,OAAS,EAAG,CAChC,IAAMma,EAAQs/D,EAAa9pE,OAAO,GAC5BmI,EAAOqC,EAAMrC,KAAMC,EAASoC,EAAMpC,OACpCnM,EAAM,KAAO8oE,EAAU/xB,MAAM,MAAM7qC,EAAO,GAAK,KAInD,MAHAlM,GAAOnK,MAAMsW,EAAS,GAAGizD,KAAK,KAAK54D,KAAK,IAAM,MAC9C+H,EAAM7S,QAAUsE,EAAM,qBAAH,OAAwBkM,EAAxB,YAAgCC,EAAhC,MAA6CoC,EAAM7S,QACtE6S,EAAMu/D,cAAgB,CAAC5hE,KAAAA,EAAMC,OAAAA,GACvBgsC,EAAac,MAAM1qC,EAAM7S,QAAS6S,GAG5C,OAAOs/D,0IChRT5F,EAAQjvB,EAAQ,MACf+0B,EAAyB/0B,EAAQ,MAAjC+0B,sBACDppC,EAAkBsjC,EAAMtjC,gBAC9B,EAuCIsjC,EAAMtjC,gBAtCNtnC,EADJ,EACIA,OACA0uE,EAFJ,EAEIA,YAGAh8B,GALJ,EAGIi+B,iBAHJ,EAIIC,4BAJJ,EAKIl+B,UACAi8B,EANJ,EAMIA,cACAC,EAPJ,EAOIA,SACAG,EARJ,EAQIA,KACAD,EATJ,EASIA,MACAD,EAVJ,EAUIA,KACA92E,EAXJ,EAWIA,OACAm7D,EAZJ,EAYIA,QACA+b,EAbJ,EAaIA,OAGAE,EAhBJ,EAgBIA,MACAC,EAjBJ,EAiBIA,MACAC,EAlBJ,EAkBIA,UACAC,EAnBJ,EAmBIA,UACAC,EApBJ,EAoBIA,WAIAG,EAxBJ,EAwBIA,eACAC,EAzBJ,EAyBIA,gBACAE,EA1BJ,EA0BIA,MACAC,EA3BJ,EA2BIA,OACAC,EA5BJ,EA4BIA,MACAC,EA7BJ,EA6BIA,MACAC,EA9BJ,EA8BIA,SACAC,EA/BJ,EA+BIA,KACAC,EAhCJ,EAgCIA,UACAU,EAjCJ,EAiCIA,MACAC,EAlCJ,EAkCIA,MACAC,EAnCJ,EAmCIA,MACAX,EApCJ,EAoCIA,KACAC,EArCJ,EAqCIA,KACAC,EAtCJ,EAsCIA,KAGEU,EAAAA,SAAAA,kCAMF,WAAY3lC,EAASvpB,GAAO,iBACxB,cAAMwlB,EAAiB,CACnBlK,WAAW,EACXtQ,aAAc,EACdzd,iBAAiB,KAGhByS,MAAQA,EACb,EAAKmvD,0BAA4B,CAC7B,CAAC,KACD,CAAC,IAAK,KACN,CAAC,IAAK,KACN,CAAC,KACD,CAAC,IAAK,IAAK,IAAK,KAAM,KAAM,OAEhC,IAAMC,EAAI,EAAH,GAfiB,OAmBxBA,EAAE7qC,KAAK,uBAAuB,WAC1B,IAAM8qC,EAAU,GACVp+B,EAAS,CAACm+B,EAAEpvC,QAAQovC,EAAEE,uBAqC5B,OApCAF,EAAEvtC,MAAK,WAGHwtC,EAAQzrE,KAAKwrE,EAAEjuC,GAAGiuC,EAAEG,KAEZH,EAAEG,GAAK,CACH,CAACjnC,IAAK,kBAAM8mC,EAAE9vC,QAAQgvC,GAAM3hE,QAC5B,CAAC27B,IAAK,kBAAM8mC,EAAE9vC,QAAQivC,GAAM5hE,QAC5B,CAAC27B,IAAK,kBAAM8mC,EAAE9vC,QAAQkvC,GAAM7hE,QAC5B,CAAC27B,IAAK,kBAAM8mC,EAAE9vC,QAAQyvC,GAAOpiE,QAC7B,CAAC27B,IAAK,kBAAM8mC,EAAE9vC,QAAQ0vC,GAAOriE,QAC7B,CAAC27B,IAAK,kBAAM8mC,EAAE9vC,QAAQ2vC,GAAOtiE,QAC7B,CAAC27B,IAAK,kBAAM8mC,EAAE9vC,QAAQ6uC,GAAUxhE,QAChC,CAAC27B,IAAK,kBAAM8mC,EAAE9vC,QAAQ0uC,GAAQrhE,QAC9B,CAAC27B,IAAK,kBAAM8mC,EAAE9vC,QAAQ4uC,GAAOvhE,QAC7B,CAAC27B,IAAK,kBAAM8mC,EAAE9vC,QAAQyuC,GAAOphE,QAC7B,CAAC27B,IAAK,kBAAM8mC,EAAE9vC,QAAQ2uC,GAAOthE,QAC7B,CAAC27B,IAAK,kBAAM8mC,EAAE9vC,QAAQ8uC,GAAMzhE,YAGxCskC,EAAOrtC,KAAKwrE,EAAElvC,SAASkvC,EAAEE,0BAE7BF,EAAE1wC,QAAO,WAAM,UAEO,EAAKywC,2BAFZ,IAEX,2BACI,IAD8C,IAAvCK,EAAuC,QACrC9mE,EAAQ,EAAGzT,EAASo6E,EAAQp6E,OAAQyT,EAAQzT,EAAQyT,IAAS,CAClE,IAAM2/D,EAAQgH,EAAQ3mE,GACjB8mE,EAAIj4B,SAAS8wB,KAClBgH,EAAQjN,OAAO15D,EAAO,GACtBuoC,EAAOmxB,OAAO15D,EAAO,EAAG,EAAKsX,MAAMyvD,WAAWx+B,EAAOvoC,GAAQ2/D,EAAOp3B,EAAOvoC,EAAQ,KACnFA,IACAzT,MATG,kCAcRg8C,EAAO,MAGlBm+B,EAAE7qC,KAAK,eAAe,kBAAM6qC,EAAEjuC,GAAG,CAC7B,CAACmH,IAAK,kBAAM8mC,EAAE9vC,QAAQ0uC,GAAQrhE,QAC9B,CAAC27B,IAAK,kBAAM8mC,EAAE9vC,QAAQ4uC,GAAOvhE,aAGjCyiE,EAAE7qC,KAAK,wBAAwB,WAC3B,IAAIpoC,EAAQizE,EAAEpvC,QAAQovC,EAAEM,oBAKxB,OAJAN,EAAEtqD,QAAO,WACL,IAAMqjD,EAAUiH,EAAE9vC,QAAQ+uC,GAAW1hE,MACrCxQ,EAAQizE,EAAE1wC,QAAO,kBAAM,EAAK1e,MAAM2vD,aAAaxzE,EAAOgsE,SAEnDhsE,KAGXizE,EAAE7qC,KAAK,sBAAsB,WAEzB,IAAMyjC,EAAW,GACjBoH,EAAEvtC,MAAK,WACH,IAAM83B,EAAKyV,EAAEjuC,GAAG,CACZ,CAACmH,IAAK,kBAAM8mC,EAAE9vC,QAAQ0uC,GAAQrhE,QAC9B,CAAC27B,IAAK,kBAAM8mC,EAAE9vC,QAAQ4uC,GAAOvhE,UAEjCq7D,EAASpkE,KAAK+1D,MAElB,IAAMiW,EAAUR,EAAEpvC,QAAQovC,EAAES,sBAC5B,OAAI7H,EAAS/yE,OAAS,EAAUm6E,EAAE1wC,QAAO,kBAAM,EAAK1e,MAAM8vD,YAAY9H,EAAU4H,MACzEA,KAIXR,EAAE7qC,KAAK,wBAAwB,WAE3B,IAAI0uB,EAAOmc,EAAEpvC,QAAQovC,EAAEW,kBACjB7U,EAAO,CAACjI,GAcd,OAZAmc,EAAEvtC,KAAK,CACHqF,KAAM,WAEF,IAAMxK,EAAY0yC,EAAE19C,GAAG,GAGvB,OAFkB09C,EAAE19C,GAAG,GAEN5kB,YAAc4vB,EAAUhoB,UAAY,GAEzDuyB,IAAK,WACDi0B,EAAKt3D,KAAKwrE,EAAEjvC,SAASivC,EAAEW,sBAG3B7U,EAAKjmE,OAAS,EACPm6E,EAAE1wC,QAAO,kBAAM0wC,EAAE1wC,QAAO,kBAAM,EAAK1e,MAAMgwD,eAAe9U,SAE5DjI,KAGXmc,EAAE7qC,KAAK,oBAAoB,WAEvB,IAAM0uB,EAAOmc,EAAEpvC,QAAQovC,EAAEQ,SACnB1U,EAAO,CAACjI,GAKd,OAJAmc,EAAEvtC,MAAK,WACHutC,EAAE9vC,QAAQguC,GACVpS,EAAKt3D,KAAKwrE,EAAElvC,SAASkvC,EAAEQ,aAEvB1U,EAAKjmE,OAAS,EACPm6E,EAAE1wC,QAAO,kBAAM0wC,EAAE1wC,QAAO,kBAAM,EAAK1e,MAAMiwD,WAAW/U,SACxDjI,KAGXmc,EAAE7qC,KAAK,WAAW,kBAAM6qC,EAAExtC,IAAI,CAC1B,CAAC0G,IAAK,kBAAM8mC,EAAEpvC,QAAQovC,EAAEc,yBACxB,CAAC5nC,IAAK,kBAAM8mC,EAAEpvC,QAAQovC,EAAEe,SACxB,CAAC7nC,IAAK,kBAAM8mC,EAAEpvC,QAAQovC,EAAEgB,YACxB,CAAC9nC,IAAK,kBAAM8mC,EAAEpvC,QAAQovC,EAAEiB,gBACxB,CAAC/nC,IAAK,kBAAM8mC,EAAEpvC,QAAQovC,EAAEkB,sBAG5BlB,EAAE7qC,KAAK,SAAS,WAGZ,IAAIxvC,EADJq6E,EAAE9vC,QAAQkuC,GAEV,IAAMtS,EAAO,GAYb,OAXAA,EAAKt3D,KAAKwrE,EAAEpvC,QAAQovC,EAAEpF,sBACtBoF,EAAEvtC,MAAK,WACHutC,EAAE9vC,QAAQ+tC,GACVnS,EAAKt3D,KAAKwrE,EAAElvC,SAASkvC,EAAEpF,yBAGvBj1E,EADAmmE,EAAKjmE,OAAS,EACLm6E,EAAE1wC,QAAO,kBAAM,EAAK1e,MAAMuwD,WAAWrV,MAErCA,EAAK,GAElBkU,EAAE9vC,QAAQmuC,GACH14E,KAGXq6E,EAAE7qC,KAAK,iBAAiB,WAEpB,IAAMjtC,EAAM,CAAC,IACTk5E,EAAa,EAsBjB,OArBApB,EAAE9vC,QAAQsuC,GAGVt2E,EAAIk5E,GAAY5sE,KAAKwrE,EAAEpvC,QAAQovC,EAAEqB,mBACjCrB,EAAEvtC,MAAK,WACH,IAAM6uC,EAAMtB,EAAEjuC,GAAG,CACb,CAACmH,IAAK,kBAAM8mC,EAAE9vC,QAAQ+tC,GAAO1gE,QAC7B,CAAC27B,IAAK,kBAAM8mC,EAAE9vC,QAAQiuC,GAAW5gE,UAE/ByjE,EAAWhB,EAAElvC,SAASkvC,EAAEqB,kBAClB,MAARC,IAGAF,IACAl5E,EAAIk5E,GAAc,IAHlBl5E,EAAIk5E,GAAY5sE,KAAKwsE,MAQ7BhB,EAAE9vC,QAAQuuC,GAEHuB,EAAE1wC,QAAO,kBAAM,EAAK1e,MAAM2wD,QAAQr5E,SAM7C83E,EAAE7qC,KAAK,oBAAoB,kBAAM6qC,EAAEjuC,GAAG,CAClC,CACImH,IAAK,WACD,IAAMlc,EAASgjD,EAAEtqD,QAAO,kBAAMsqD,EAAEpvC,QAAQovC,EAAEwB,gBACpCjkE,EAAQyiE,EAAE9vC,QAAQrpC,GAAQ0W,MAC1B+9C,EAAS0kB,EAAE1wC,QAAO,kBAAM,EAAK1e,MAAM6wD,SAASlkE,MAClD,OAAIyf,EACOgjD,EAAE1wC,QAAO,kBAAM,EAAK1e,MAAM8vD,YAAY,CAAC1jD,GAASs+B,MACpDA,IAEZ,CACCpiB,IAAK,WACD,IAAM7yC,EAAM25E,EAAE9vC,QAAQphC,GAAQyO,MAC9B,OAAOyiE,EAAE1wC,QAAO,kBAAM,EAAK1e,MAAM1pB,SAASb,QAE/C,CACC6yC,IAAK,WACD,IAAM6iC,EAAOiE,EAAE9vC,QAAQ8xB,GAASzkD,MAChC,OAAOyiE,EAAE1wC,QAAO,kBAAM,EAAK1e,MAAM8wD,UAAU3F,QAEhD,CACC7iC,IAAK,WACD,IAAM6Q,EAAMi2B,EAAE9vC,QAAQutC,GAAelgE,MACrC,OAAOyiE,EAAE1wC,QAAO,kBAAM,EAAK1e,MAAM+wD,QAAQ53B,QAE9C,CACC7Q,IAAK,WACD,IAAM6Q,EAAMi2B,EAAE9vC,QAAQwtC,GAAUngE,MAChC,OAAOyiE,EAAE1wC,QAAO,kBAAM,EAAK1e,MAAM+wD,QAAQ53B,aAKrDi2B,EAAE7qC,KAAK,YAAY,kBAAM6qC,EAAEjuC,GAAG,CAC1B,CACImH,IAAK,WACD,IAAMoiB,EAAS0kB,EAAE9vC,QAAQrpC,GAAQ0W,MACjC,OAAOyiE,EAAE1wC,QAAO,kBAAM,EAAK1e,MAAM6wD,SAASnmB,QAE/C,CACCpiB,IAAK,WACD,IAAM7yC,EAAM25E,EAAE9vC,QAAQphC,GAAQyO,MAC9B,OAAOyiE,EAAE1wC,QAAO,kBAAM,EAAK1e,MAAM1pB,SAASb,QAE/C,CACC6yC,IAAK,WACD,IAAM6iC,EAAOiE,EAAE9vC,QAAQ8xB,GAASzkD,MAChC,OAAOyiE,EAAE1wC,QAAO,kBAAM,EAAK1e,MAAM8wD,UAAU3F,QAEhD,CACC7iC,IAAK,WACD,IAAM6Q,EAAMi2B,EAAE9vC,QAAQutC,GAAelgE,MACrC,OAAOyiE,EAAE1wC,QAAO,kBAAM,EAAK1e,MAAM+wD,QAAQ53B,aAKrDi2B,EAAE7qC,KAAK,gBAAgB,WACnB,IAAM1L,EAAeu2C,EAAE9vC,QAAQsR,GAAUjkC,MAAMvX,MAAM,GAAI,GAEnD6/B,EAAOm6C,EAAEpvC,QAAQovC,EAAEh4B,WAGzB,OAFAg4B,EAAE9vC,QAAQmuC,GAEH2B,EAAE1wC,QAAO,kBAAM6K,EAAQynC,aAAan4C,EAAc5D,SAI7Dm6C,EAAE7qC,KAAK,aAAa,WAIhB6qC,EAAErtC,OAAM,WACJqtC,EAAE5vC,SAAS6tC,MAEf,IAAMp4C,EAAO,GAab,OAXAm6C,EAAEtqD,QAAO,WACLmQ,EAAKrxB,KAAKwrE,EAAEpvC,QAAQovC,EAAEpF,sBACtBoF,EAAEvtC,MAAK,WACHutC,EAAE7vC,SAAS8tC,GACXp4C,EAAKrxB,KAAK,MACVwrE,EAAExuC,SAAQ,WACN3L,EAAKpxB,MACLoxB,EAAKrxB,KAAKwrE,EAAElvC,SAASkvC,EAAEpF,+BAI5B/0C,KAGXm6C,EAAE7qC,KAAK,yBAAyB,kBAAM6qC,EAAEjuC,GAAG,CAEvC,CAACmH,IAAK,kBAAM8mC,EAAEpvC,QAAQovC,EAAE6B,iBAExB,CAEI3oC,IAAK,WAED,IAAM4oC,EAAY9B,EAAEpvC,QAAQovC,EAAE+B,YAExBF,EAAgB7B,EAAElvC,SAASkvC,EAAEW,kBAOnC,OALAX,EAAE1wC,QAAO,WACL,GAAI,EAAK1e,MAAMyqD,eAAewG,GAC1B,OAAOA,EACXA,EAAcvwD,IAAI2oD,MAAQ6H,KAEvBD,SAOnB7B,EAAE7qC,KAAK,iBAAiB,kBAAM6qC,EAAEjuC,GAAG,CAC/B,CACImH,IAAK,WACD,IAAM8oC,EAAUhC,EAAE9vC,QAAQ2tC,GAAMtgE,MAChC,OAAOyiE,EAAE1wC,QAAO,kBAAM,EAAK1e,MAAMqxD,iBAAiBD,QAG1D,CACI9oC,IAAK,WACD,IAAMjwC,EAAO+2E,EAAE9vC,QAAQytC,GAAMpgE,MAC7B,OAAOyiE,EAAE1wC,QAAO,kBAAM6K,EAAQ+nC,YAAYj5E,QAGlD,CACIiwC,IAAK,WACD,IAAMt7B,EAASoiE,EAAE9vC,QAAQ6tC,GAAQxgE,MACjC,OAAOyiE,EAAE1wC,QAAO,kBAAM,EAAK1e,MAAMuxD,SAASvkE,QAMlD,CACIs7B,IAAK,WACD,IAAM6Q,EAAMi2B,EAAE9vC,QAAQwtC,GAAUngE,MAChC,OAAOyiE,EAAE1wC,QAAO,kBAAM,EAAK1e,MAAM+wD,QAAQ53B,aAOrDi2B,EAAE7qC,KAAK,cAAc,kBAAM6qC,EAAEjuC,GAAG,CAC5B,CAACmH,IAAK,kBAAM8mC,EAAE9vC,QAAQ0tC,GAAOrgE,MAAMvX,MAAM,GAAI,KAC7C,CAACkzC,IAAK,kBAAM8mC,EAAE9vC,QAAQstC,GAAajgE,MAAMvX,MAAM,GAAI,GAAGM,QAAQ,MAAO,YAGzE,EAAKo4C,sBAhVmB,cAN1BohC,CAAgBN,GA0VtB/4E,EAAOC,QAAU,CACb64C,OAAQugC,iECnYNzU,EAAAA,wBAEF,WAAYqM,EAAM5L,GACd,GADoB,UACR,MAAR4L,GAAwB,MAAR5L,EAChBh8D,KAAKsyE,MAAQ,GACbtyE,KAAKuyE,MAAQ,OACV,CACH,GAAI3K,EAAK7xE,SAAWimE,EAAKjmE,OACrB,MAAM8H,MAAM,2DAChBmC,KAAKsyE,MAAQ1K,EACb5nE,KAAKuyE,MAAQvW,+BAIrB,WACI,OAAOh8D,KAAKsyE,wBAGhB,WACI,OAAOtyE,KAAKuyE,0BAGhB,WACI,OAAOvyE,KAAKsyE,MAAMv8E,0BAQtB,SAAIugB,EAAKkL,GACLxhB,KAAKsyE,MAAM5tE,KAAK4R,GAChBtW,KAAKuyE,MAAM7tE,KAAK8c,SAjClB+5C,GAqCN5kE,EAAOC,QAAU2kE,4FCzCXzhB,EAAea,EAAQ,MACtB2gB,EAAW3gB,EAAQ,MAAnB2gB,QACP,EAA4C3gB,EAAQ,IAA7CiuB,EAAP,EAAOA,OAAQG,EAAf,EAAeA,QAASxV,EAAxB,EAAwBA,MAAOoW,EAA/B,EAA+BA,UACzBpO,EAAa5gB,EAAQ,MACrBqwB,EAAU,QACTxhC,EAA8BmR,EAAQ,MAAtCnR,2BAEDqgC,EAAAA,wBAEF,WAAYx/B,GAAS,UACjBrqC,KAAKqqC,QAAUA,8CAGnB,SAAmBo+B,GACf,OAAOnN,EAAQkN,mBAAmBC,mCAQtC,SAAiBwC,GACb,IAAMlvB,EAAMkvB,EAAY76D,MAAM,4CAE9B,MAAO,CACHoR,IAAK,CACD0wD,QAASn2B,EAAI,GACbgI,IAAK/jD,KAAKwoE,mBAAmBzsB,EAAI,IACjC+H,KAAM/H,EAAI,6BAKtB,SAAS+H,GACL,IAAMwW,GAAUxW,EAChB,IAAK/sD,OAAOm0E,UAAU5Q,GAClB,MAAMz8D,MAAM,+BAChB,MAAO,CACH2jB,IAAK,CACDuiC,SAAKrlD,EACLolD,KAAMA,4BAKlB,SAASC,GACL,MAAO,CACHviC,IAAK,CACDuiC,IAAK/jD,KAAKwoE,mBAAmBzkB,GAC7BD,SAAKplD,iCAKjB,SAAc8zE,EAAMC,GAIhB,OAFAD,EAAOxyE,KAAKwoE,mBAAmBgK,GAC/BC,EAAOzyE,KAAKwoE,mBAAmBiK,GACxB,CACHjxD,IAAK,CACD/pB,KAAM,CACFssD,IAAK7sD,KAAKu0E,IAAI+G,EAAMC,GACpB3uB,IAAK,MAET7lD,GAAI,CACA8lD,IAAK7sD,KAAK2uD,IAAI2sB,EAAMC,GACpB3uB,IAAK,qCAMrB,SAAc4uB,EAAMC,GAEhB,MAAO,CACHnxD,IAAK,CACD/pB,KAAM,CACFssD,IAAK,KACLD,IAAK5sD,KAAKu0E,IAAIiH,EAAMC,IAExB10E,GAAI,CACA8lD,IAAK,KACLD,IAAK5sD,KAAK2uD,IAAI6sB,EAAMC,kCAQpC,SAAa7J,EAAU/7D,EAAKulC,GACxB,OAAItyC,KAAKurE,eAAex+D,GACbA,EACJ67D,EAAOC,QAAQC,EAAU/7D,EAAKulC,8DAGzC,WAAuBw2B,EAAU7rE,GAAjC,qFAC2B+C,KAD3B,SACsD/C,EADtD,iCACgCkgE,gBADhC,gBACWpwD,EADX,EACWA,IAAKulC,EADhB,EACgBA,QADhB,kBAEWtyC,KAAK4yE,aAAa9J,EAAU/7D,EAAKulC,IAF5C,kIAWA,SAAYw2B,EAAU7rE,GAElB,GAAI+C,KAAKqqC,QAAQ8iC,MACb,OAAOntE,KAAK6yE,iBAAiB/J,EAAU7rE,GAEvC,MAAuB+C,KAAKm9D,gBAAgBlgE,GAArC8P,EAAP,EAAOA,IAAKulC,EAAZ,EAAYA,QACZ,OAAOtyC,KAAK4yE,aAAa9J,EAAU/7D,EAAKulC,gCAIhD,SAAcvlC,EAAKulC,EAAS22B,GACxB,OAAIjpE,KAAKurE,eAAex+D,GACbA,EACJg8D,EAAQC,UAAUj8D,EAAKk8D,EAAS32B,+DAG3C,WAAwBr1C,EAAOgsE,GAA/B,qFAC2BjpE,KAD3B,SACsD/C,EADtD,iCACgCkgE,gBADhC,gBACWpwD,EADX,EACWA,IAAKulC,EADhB,EACgBA,QADhB,kBAEWtyC,KAAK8yE,cAAc/lE,EAAKulC,EAAS22B,IAF5C,mIAKA,SAAahsE,EAAOgsE,GAEhB,GAAIjpE,KAAKqqC,QAAQ8iC,MACb,OAAOntE,KAAK+yE,kBAAkB91E,EAAOgsE,GAErC,MAAuBjpE,KAAKm9D,gBAAgBlgE,GAArC8P,EAAP,EAAOA,IAAKulC,EAAZ,EAAYA,QACZ,OAAOtyC,KAAK8yE,cAAc/lE,EAAKulC,EAAS22B,8BAIhD,SAAYja,EAAMma,EAAOja,GACrB,IAAM8jB,EAAOhkB,EAAKjiD,IAAKs8D,EAAWra,EAAK1c,QACjC2gC,EAAO/jB,EAAKniD,IAAKu8D,EAAWpa,EAAK5c,QACvC,GAAItyC,KAAKurE,eAAeyH,GACpB,OAAOA,EACX,GAAIhzE,KAAKurE,eAAe0H,GACpB,OAAOA,EACX,GAAItJ,EAAUjP,UAAUriB,SAAS8wB,GAC7B,OAAO5V,EAAMmH,UAAUsY,EAAM7J,EAAO8J,EAAM5J,EAAUC,GACnD,GAAIK,EAAUF,SAASpxB,SAAS8wB,GACjC,OAAO5V,EAAMkW,SAASuJ,EAAM7J,EAAO8J,EAAM5J,EAAUC,GAClD,GAAIK,EAAUD,OAAOrxB,SAAS8wB,GAC/B,OAAO5V,EAAMmW,OAAOsJ,EAAM7J,EAAO8J,EAAM5J,EAAUC,GAEjD,MAAM,IAAIzrE,MAAJ,8BAAiCsrE,8DAG/C,WAAsBD,EAAQC,EAAOC,GAArC,mFACiBppE,KADjB,SAC4CkpE,EAD5C,0BACUla,EADV,KACsBmO,gBADtB,qBAEiBn9D,KAFjB,SAE4CopE,EAF5C,0BAEUla,EAFV,KAEsBiO,gBAFtB,kCAGWn9D,KAAKkzE,YAAYlkB,EAAMma,EAAOja,IAHzC,oIAMA,SAAWga,EAAQC,EAAOC,GACtB,GAAIppE,KAAKqqC,QAAQ8iC,MACb,OAAOntE,KAAKmzE,gBAAgBjK,EAAQC,EAAOC,GAE3C,IAAMpa,EAAOhvD,KAAKm9D,gBAAgB+L,GAC5Bha,EAAOlvD,KAAKm9D,gBAAgBiM,GAClC,OAAOppE,KAAKkzE,YAAYlkB,EAAMma,EAAOja,iCAI7C,SAAe8M,GAAM,IAObmP,EAAQC,EAAQC,EAAQC,EAAQnB,EAAOpuB,EAP1B,OAEjB,GAAI/7C,KAAKurE,eAAevP,EAAK,IACzB,OAAOA,EAAK,GAChB,IAAKA,EAAK,GAAGx6C,IACT,MAAM3jB,MAAM,kCAAD,OAAmCm+D,EAAK,GAAxC,MAIf,IAoBI/hB,EApBEz4B,EAAMw6C,EAAKwP,QAAQhqD,IAEzB,GADA2oD,EAAQ3oD,EAAI2oD,MACP3oD,EAAI/pB,KAYL0zE,EAASj0E,KAAK2uD,IAAIrkC,EAAI/pB,KAAKqsD,IAAKtiC,EAAIvjB,GAAG6lD,KACvCunB,EAASn0E,KAAKu0E,IAAIjqD,EAAI/pB,KAAKqsD,IAAKtiC,EAAIvjB,GAAG6lD,KACvCsnB,EAASl0E,KAAK2uD,IAAIrkC,EAAI/pB,KAAKssD,IAAKviC,EAAIvjB,GAAG8lD,KACvCunB,EAASp0E,KAAKu0E,IAAIjqD,EAAI/pB,KAAKssD,IAAKviC,EAAIvjB,GAAG8lD,SAf5B,CAEX,QAAgBrlD,IAAZ8iB,EAAIsiC,UAAiCplD,IAAZ8iB,EAAIuiC,IAC7B,MAAMlmD,MAAM,6CAIhBstE,EAASE,EAAS7pD,EAAIsiC,IACtBsnB,EAASE,EAAS9pD,EAAIuiC,IA4C1B,OAjCAiY,EAAKxpB,SAAQ,SAAAhxB,GACT,GAAI,EAAK+pD,eAAe/pD,GACpB,OAAOA,EAEX,KADAA,EAAMA,EAAIA,KACA,MAAM3jB,MAAM,kCAAD,OAAmC2jB,EAAnC,MACrB,GAAKA,EAAI/pB,KAWF,CAEH,IAAMi0E,EAAYx0E,KAAK2uD,IAAIrkC,EAAI/pB,KAAKqsD,IAAKtiC,EAAIvjB,GAAG6lD,KAC1C6nB,EAAYz0E,KAAKu0E,IAAIjqD,EAAI/pB,KAAKqsD,IAAKtiC,EAAIvjB,GAAG6lD,KAC1C8nB,EAAY10E,KAAK2uD,IAAIrkC,EAAI/pB,KAAKssD,IAAKviC,EAAIvjB,GAAG8lD,KAC1C8nB,EAAY30E,KAAKu0E,IAAIjqD,EAAI/pB,KAAKssD,IAAKviC,EAAIvjB,GAAG8lD,MAC5C4nB,EAAYR,GAAUO,EAAYL,GAAUQ,EAAYT,GAAUQ,EAAYN,GAC3EnB,IAAU3oD,EAAI2oD,SACjBlwB,EAAMH,EAAaK,MAGvBgxB,EAASj0E,KAAKu0E,IAAIN,EAAQO,GAC1BL,EAASn0E,KAAK2uD,IAAIwlB,EAAQM,GAC1BP,EAASl0E,KAAKu0E,IAAIL,EAAQQ,GAC1BN,EAASp0E,KAAK2uD,IAAIylB,EAAQO,OAzBf,CACX,QAAgBntE,IAAZ8iB,EAAIsiC,UAAiCplD,IAAZ8iB,EAAIuiC,IAC7B,MAAMlmD,MAAM,8CAGZ2jB,EAAIsiC,IAAMqnB,GAAU3pD,EAAIsiC,IAAMunB,GAAU7pD,EAAIuiC,IAAMqnB,GAAU5pD,EAAIuiC,IAAMunB,GACnEnB,IAAU3oD,EAAI2oD,SACjBlwB,EAAMH,EAAaK,MAEvBgxB,EAASE,EAAS7pD,EAAIsiC,IACtBsnB,EAASE,EAAS9pD,EAAIuiC,QAkB1B9J,KAGA8B,EADAovB,IAAWE,GAAUD,IAAWE,EAC1B,CACF9pD,IAAK,CACD2oD,MAAAA,EACArmB,IAAKqnB,EACLpnB,IAAKqnB,IAIP,CACF5pD,IAAK,CACD2oD,MAAAA,EACA1yE,KAAM,CAACqsD,IAAKunB,EAAQtnB,IAAKunB,GACzBrtE,GAAI,CAAC6lD,IAAKqnB,EAAQpnB,IAAKqnB,MAK1B5pD,IAAI2oD,cACFpuB,EAAIv6B,IAAI2oD,MACZpuB,6BAGX,SAAWigB,GAEP,IADA,IAAMvpB,EAAa,IAAI8oB,EACdnlE,EAAI,EAAGA,EAAI4lE,EAAKjmE,OAAQK,IAAK,CAClC,GAAI4J,KAAKurE,eAAevP,EAAK5lE,IACzB,OAAO4lE,EAAK5lE,GAChBq8C,EAAWq5B,IAAI9rE,KAAKm9D,gBAAgBnB,EAAK5lE,IAAI2W,IAAKivD,EAAK5lE,IAI3D,OAAOq8C,4BAQX,SAAWupB,GAAM,WACJmP,GAAU,EAAGC,GAAU,EAAGC,EAASL,QAAaM,EAASS,MA2ClE,OA1CA/P,EAAKxpB,SAAQ,SAAAhxB,GACT,GAAI,EAAK+pD,eAAe/pD,GACpB,OAAOA,EAEQ,kBAARA,IACPA,EAAM,EAAKwqD,SAASxqD,SAIR9iB,KAFhB8iB,EAAMA,EAAIA,KAEFsiC,MACJunB,EAAS,EACTF,EAASH,QAEGtsE,IAAZ8iB,EAAIuiC,MACJunB,EAAS,EACTF,EAlSsB,OAqStB5pD,EAAIsiC,IAAMqnB,IACVA,EAAS3pD,EAAIsiC,KACbtiC,EAAIsiC,IAAMunB,IACVA,EAAS7pD,EAAIsiC,KACbtiC,EAAIuiC,IAAMqnB,IACVA,EAAS5pD,EAAIuiC,KACbviC,EAAIuiC,IAAMunB,IACVA,EAAS9pD,EAAIuiC,QAEjBonB,IAAWE,GAAUD,IAAWE,EAC1B,CACF9pD,IAAK,CACDsiC,IAAKqnB,EACLpnB,IAAKqnB,IAIP,CACF5pD,IAAK,CACD/pB,KAAM,CAACqsD,IAAKunB,EAAQtnB,IAAKunB,GACzBrtE,GAAI,CAAC6lD,IAAKqnB,EAAQpnB,IAAKqnB,oCAWvC,SAAgB90D,GACZ,IAAIylC,EAAMzlC,EAAKg8B,GAAU,EAGzB,OAFI96C,MAAM86C,QAAQyJ,KACdzJ,GAAU,GACVh8B,EAAIkL,IAEG,CAACzU,IAAK/M,KAAKqqC,QAAQmgC,YAAYl0D,GAAMg8B,QAAAA,GAGzC,CAACvlC,IAAKgvC,EAAKzJ,QAAAA,0BAQtB,SAAQmkB,GAGJ,OAAOA,0BAOX,SAASjL,GACL,OAAOz0D,OAAOy0D,2BAOlB,SAASub,GACL,OAAOA,EAAO/xD,UAAU,EAAG+xD,EAAOhxE,OAAS,GAAIS,QAAQ,MAAO,8BAOlE,SAAUy1E,GACN,MAAgB,SAATA,yBAQX,SAAQ/7D,GACJ,OAAO,IAAI4pC,EAAa5pC,EAAM/Q,6CAGlC,SAAemX,GACX,OAAOA,aAAewjC,yCAG1B,SAA6B5pC,EAAOu6D,GAChC,IAAI58D,EAAMC,EAAQnM,EAAM,GAcxB,OAZIuO,aAAiBs5B,GACjB37B,EAAOqC,EAAMpE,MAAM6H,UACnB7F,EAASoC,EAAMpE,MAAM8H,cAErB/F,EAAOqC,EAAM4gB,cAAcnd,UAC3B7F,EAASoC,EAAM4gB,cAAcld,YAAc,GAG/CjS,GAAO,KAAO8oE,EAAU/xB,MAAM,MAAM7qC,EAAO,GAAK,KAChDlM,GAAOnK,MAAMsW,EAAS,GAAGizD,KAAK,KAAK54D,KAAK,IAAM,MAC9CxG,GAAO,4BAAqBkM,EAArB,YAA6BC,EAA7B,MAA0CoC,EAAM7S,QACvD6S,EAAMu/D,cAAgB,CAAC5hE,KAAAA,EAAMC,OAAAA,GACtBgsC,EAAac,MAAMj5C,EAAKuO,SA5YjC25D,GAiZNlzE,EAAOC,QAAUizE,8CCxZVwC,EAAiB1xB,EAAQ,MAAzB0xB,cACAtC,EAAapvB,EAAQ,MAArBovB,UACDqJ,EAAMz4B,EAAQ,MACdb,EAAea,EAAQ,MAO7BrsC,OAAO+mC,OAAOg3B,EAAd,GACIrB,QAAS,QACTe,WAAY,MACZqH,IAAAA,EACArJ,UAAAA,EACAjwB,aAAAA,GAAiBa,EAAQ,QAE7BhkD,EAAOC,QAAUy1E,gECVX+G,EAAAA,GAAAA,SAAAA,8BASN,SAASC,EAAQ76E,GAEb,IADA,IAAIO,EAAI,GAAI3C,EAAIoC,EAAEzC,OAAS,EACpBK,GAAK,GAAG2C,GAAKP,EAAEuV,OAAO3X,KAC7B,OAAO2C,EAGX,SAASgoE,EAAK71D,EAAGooE,GAEb,IADA,IAAIv6E,EAAI,GACDA,EAAEhD,OAASu9E,GAAGv6E,GAAKmS,EAC1B,OAAOnS,EAGX,SAASw6E,EAAKl7E,EAAGsnD,GACb,IAAIj5B,EAAI,GAAKruB,EACb,OAAOquB,EAAE3wB,QAAU4pD,EAAIj5B,EAAIq6C,EAAK,IAAKphB,EAAIj5B,EAAE3wB,QAAU2wB,EAGzD,SAAS8sD,EAAKn7E,EAAGsnD,GACb,IAAIj5B,EAAI,GAAKruB,EACb,OAAOquB,EAAE3wB,QAAU4pD,EAAIj5B,EAAIq6C,EAAK,IAAKphB,EAAIj5B,EAAE3wB,QAAU2wB,EAGzD,SAAS+sD,EAAMp7E,EAAGsnD,GACd,IAAIj5B,EAAI,GAAKruB,EACb,OAAOquB,EAAE3wB,QAAU4pD,EAAIj5B,EAAIA,EAAIq6C,EAAK,IAAKphB,EAAIj5B,EAAE3wB,QA1BnDq9E,EAAIn7E,QAAU,SAuCd,IAAMy7E,EAAQx8E,KAAKw0C,IAAI,EAAG,IAE1B,SAASioC,EAAMt7E,EAAGsnD,GACd,OAAItnD,EAAIq7E,GAASr7E,GAAKq7E,EAb1B,SAAgBr7E,EAAGsnD,GACf,IAAIj5B,EAAI,GAAKxvB,KAAKI,MAAMe,GACxB,OAAOquB,EAAE3wB,QAAU4pD,EAAIj5B,EAAIq6C,EAAK,IAAKphB,EAAIj5B,EAAE3wB,QAAU2wB,EAWjBktD,CAAOv7E,EAAGsnD,GARlD,SAAgBtnD,EAAGsnD,GACf,IAAIj5B,EAAI,GAAKruB,EACb,OAAOquB,EAAE3wB,QAAU4pD,EAAIj5B,EAAIq6C,EAAK,IAAKphB,EAAIj5B,EAAE3wB,QAAU2wB,EAQ9CmtD,CADG38E,KAAKI,MAAMe,GACJsnD,GAGrB,SAASm0B,EAAUC,EAAG39E,GAElB,OADAA,EAAIA,GAAK,EACF29E,EAAEh+E,QAAU,EAAIK,GAAgC,OAAR,GAAlB29E,EAAE30E,WAAWhJ,KAAmD,OAAR,GAAtB29E,EAAE30E,WAAWhJ,EAAI,KAAmD,OAAR,GAAtB29E,EAAE30E,WAAWhJ,EAAI,KAAmD,OAAR,GAAtB29E,EAAE30E,WAAWhJ,EAAI,KAAmD,OAAR,GAAtB29E,EAAE30E,WAAWhJ,EAAI,KAAmD,MAAR,GAAtB29E,EAAE30E,WAAWhJ,EAAI,KAAkD,OAAR,GAAtB29E,EAAE30E,WAAWhJ,EAAI,IAGjR,IAAMsrD,EAAO,CACT,CAAC,MAAO,UACR,CAAC,MAAO,UACR,CAAC,MAAO,WACR,CAAC,MAAO,aACR,CAAC,MAAO,YACR,CAAC,MAAO,UACR,CAAC,MAAO,aAENnC,EAAS,CACX,CAAC,IAAK,MAAO,WACb,CAAC,IAAK,MAAO,YACb,CAAC,IAAK,MAAO,SACb,CAAC,IAAK,MAAO,SACb,CAAC,IAAK,MAAO,OACb,CAAC,IAAK,MAAO,QACb,CAAC,IAAK,MAAO,QACb,CAAC,IAAK,MAAO,UACb,CAAC,IAAK,MAAO,aACb,CAAC,IAAK,MAAO,WACb,CAAC,IAAK,MAAO,YACb,CAAC,IAAK,MAAO,aAGjB,SAASy0B,EAAWttD,GAChBA,EAAE,GAAK,UACPA,EAAE,GAAK,IACPA,EAAE,GAAK,OACPA,EAAE,GAAK,QACPA,EAAE,GAAK,WACPA,EAAE,GAAK,KACPA,EAAE,IAAM,QACRA,EAAE,IAAM,WACRA,EAAE,IAAM,QACRA,EAAE,IAAM,UACRA,EAAE,IAAM,SACRA,EAAE,IAAM,WACRA,EAAE,IAAM,QACRA,EAAE,IAAM,SACRA,EAAE,IAAM,aACRA,EAAE,IAAM,gBACRA,EAAE,IAAM,OACRA,EAAE,IAAM,UACRA,EAAE,IAAM,cACRA,EAAE,IAAM,iBACRA,EAAE,IAAM,sBACRA,EAAE,IAAM,sBACRA,EAAE,IAAM,2BACRA,EAAE,IAAM,QACRA,EAAE,IAAM,YACRA,EAAE,IAAM,SACRA,EAAE,IAAM,WACRA,EAAE,IAAM,IACRA,EAAE,IAAM,8DACRA,EAAE,OAAS,UAGf,IAAMutD,EAAY,GAGlB,SAASC,EAAK17E,EAAG27D,EAAGggB,GAMhB,IALA,IAAMC,EAAM57E,EAAI,GAAK,EAAI,EACrB67E,EAAI77E,EAAI47E,EACRE,EAAM,EAAGC,EAAM,EAAGC,EAAI,EACtBC,EAAM,EAAGC,EAAM,EAAGC,EAAI,EACtBC,EAAI19E,KAAKC,MAAMk9E,GACZK,EAAMvgB,IAETqgB,GADAI,EAAI19E,KAAKC,MAAMk9E,IACPE,EAAMD,EACdK,EAAIC,EAAIF,EAAMD,IACTJ,EAAIO,EAAK,QACdP,EAAI,GAAKA,EAAIO,GACbN,EAAMC,EACNA,EAAMC,EACNC,EAAMC,EACNA,EAAMC,EAWV,GATIA,EAAIxgB,IACAugB,EAAMvgB,GACNwgB,EAAIF,EACJD,EAAIF,IAEJK,EAAID,EACJF,EAAID,KAGPJ,EAAO,MAAO,CAAC,EAAGC,EAAMI,EAAGG,GAChC,IAAME,EAAI39E,KAAKC,MAAMi9E,EAAMI,EAAIG,GAC/B,MAAO,CAACE,EAAGT,EAAMI,EAAIK,EAAIF,EAAGA,GAGhC,SAASG,EAAgBz8E,EAAG08E,EAAMC,GAC9B,GAAI38E,EAAI,SAAWA,EAAI,EAAG,OAAO,KACjC,IAAIqjD,EAAY,EAAJrjD,EAAQ0d,EAAO7e,KAAKC,MAAM,OAASkB,EAAIqjD,IAAQu5B,EAAM,EAC7DC,EAAO,GACLC,EAAM,CAAChhB,EAAGzY,EAAMkoB,EAAG7tD,EAAMq/D,EAAG,OAAS/8E,EAAIqjD,GAAQ3lC,EAAM9b,EAAG,EAAGo9D,EAAG,EAAG1X,EAAG,EAAG7E,EAAG,EAAG5iD,EAAG,EAAGm9E,EAAG,EAAGR,EAAG,GAWpG,GAVI39E,KAAKwD,IAAIy6E,EAAIC,GAAK,OAAMD,EAAIC,EAAI,GAChCL,GAAQA,EAAKO,WAAU55B,GAAQ,MAC/By5B,EAAIC,EAAI,QACRD,EAAIC,EAAI,EACO,UAATr/D,IACFo/D,EAAIvR,EAAI7tD,EAAO,IACb2lC,IACAy5B,EAAIhhB,IAGD,KAATzY,EACAw5B,EAAOF,EAAK,CAAC,KAAM,GAAI,IAAM,CAAC,KAAM,EAAG,IACvCC,EAAM,OACH,GAAa,IAATv5B,EACPw5B,EAAOF,EAAK,CAAC,KAAM,EAAG,IAAM,CAAC,KAAM,EAAG,GACtCC,EAAM,MACH,CACCv5B,EAAO,MAAMA,EAEjB,IAAMiE,EAAI,IAAI9H,KAAK,KAAM,EAAG,GAC5B8H,EAAE41B,QAAQ51B,EAAEpD,UAAYb,EAAO,GAC/Bw5B,EAAO,CAACv1B,EAAEtD,cAAesD,EAAErD,WAAa,EAAGqD,EAAEpD,WAC7C04B,EAAMt1B,EAAE61B,SACJ95B,EAAO,KAAIu5B,GAAOA,EAAM,GAAK,GAC7BD,IAAIC,EA0FL,GA/EP,OATAE,EAAIl7E,EAAIi7E,EAAK,GACbC,EAAI9d,EAAI6d,EAAK,GACbC,EAAIx1B,EAAIu1B,EAAK,GACbC,EAAIE,EAAIt/D,EAAO,GACfA,EAAO7e,KAAKC,MAAM4e,EAAO,IACzBo/D,EAAIj9E,EAAI6d,EAAO,GACfA,EAAO7e,KAAKC,MAAM4e,EAAO,IACzBo/D,EAAIr6B,EAAI/kC,EACRo/D,EAAIN,EAAII,EACDE,EAzEXnB,EAAWC,GA4EXb,EAAI0B,gBAAkBA,EACtB,IAAMW,EAAW,IAAI59B,KAAK,KAAM,GAAI,GAAI,EAAG,EAAG,GACxC69B,EAAWD,EAAS39B,UACpB69B,EAAW,IAAI99B,KAAK,KAAM,EAAG,EAAG,EAAG,EAAG,GAE5C,SAAS+9B,EAAcv9E,EAAGi9E,GACtB,IAAIO,EAAQx9E,EAAEy/C,UAGd,OAFIw9B,EAAUO,GAAS,UACdx9E,GAAKs9E,IAAUE,GAAS,QACzBA,GAASH,EAAoE,KAAxDr9E,EAAEy9E,oBAAsBL,EAASK,uBAAvD,MAGX,SAASC,EAAgB19E,GACrB,OAAOA,EAAEjB,SAAS,IAGtBg8E,EAAI4C,aAAeD,EACnB,IAAME,EAAmB,WACrB,IAAMC,EAAO,kBAAmBC,EAAO,QAASC,EAAO,iBAAkBC,EAAO,WAC5EC,EAAO,eAsBX,SAASC,EAAKx9E,GACV,OAAOA,EAAEqQ,QAAQ,MAAQ,EAAIrQ,EAAEvC,QAAQ2/E,EAAM,IAAI3/E,QAAQ0/E,EAAM,OAASn9E,EAG5E,OAAO,SAAyBV,GAC5B,IAAyDU,EAArD47D,EAAIz9D,KAAKC,MAAMD,KAAKmE,IAAInE,KAAKwD,IAAIrC,IAAMnB,KAAKs/E,QAKhD,OAJwBz9E,EAApB47D,IAAM,GAAKA,IAAM,EAAOt8D,EAAEo+E,YAAY,GAAK9hB,GACtCz9D,KAAKwD,IAAIi6D,IAAM,EA3B5B,SAAct8D,GACV,IAAMq+E,EAAKr+E,EAAI,EAAI,GAAK,GACpBU,EAAIw9E,EAAKl+E,EAAEs+E,QAAQ,KACvB,OAAI59E,EAAEhD,QAAU2gF,IAChB39E,EAAIV,EAAEo+E,YAAY,KACZ1gF,QAAU2gF,EAFU39E,EAGnBV,EAAEu+E,cAAc,GAqBQC,CAAKx+E,GACrB,KAANs8D,EAAct8D,EAAEs+E,QAAQ,IAAIjgF,OAAO,EAAG,IAnBnD,SAAc2B,GACV,IAAIU,EAAIV,EAAEs+E,QAAQ,IAAIngF,QAAQ0/E,EAAM,OAEpC,OADIn9E,EAAEhD,QAAUsC,EAAI,EAAI,GAAK,MAAKU,EAAIV,EAAEo+E,YAAY,IAC7C19E,EAiBE+9E,CAAKz+E,GACPk+E,EAfX,SAAcx9E,GACV,IAAK,IAAI3C,EAAI,EAAGA,IAAM2C,EAAEhD,SAAUK,EAAG,GAAiC,OAAV,GAAlB2C,EAAEqG,WAAWhJ,IAAoB,OAAO2C,EAAEvC,QAAQ4/E,EAAM,OAAO5/E,QAAQ6/E,EAAM,KAAK7/E,QAAQ,IAAK,KAAKA,QAAQ8/E,EAAM,SAC5J,OAAOv9E,EAaKg+E,CAAKh+E,KAlCA,GAuCzB,SAASi+E,EAAY3+E,EAAG08E,GACpB,cAAe18E,GACX,IAAK,SACD,OAAOA,EACX,IAAK,UACD,OAAOA,EAAI,OAAS,QACxB,IAAK,SACD,OAAY,EAAJA,KAAWA,EAAI09E,EAAgB19E,GAAK49E,EAAgB59E,GAChE,IAAK,YACD,MAAO,GACX,IAAK,SACD,GAAS,MAALA,EAAW,MAAO,GACtB,GAAIA,aAAaw/C,KAAM,OAAOmpB,EAAO,GAAI4U,EAAcv9E,EAAG08E,GAAQA,EAAKO,UAAWP,GAE1F,MAAM,IAAIl3E,MAAM,wCAA0CxF,GAU9D,SAAS4+E,EAAW15E,EAAM25E,EAAKnqE,EAAKoqE,GAChC,IAAuChC,EAAnCp8E,EAAI,GAAIq+E,EAAK,EAAGC,EAAK,EAAGp9E,EAAI8S,EAAI9S,EAAQq9E,EAAO,EACnD,OAAQ/5E,GACJ,KAAK,GACDtD,EAAI8S,EAAI9S,EAAI,IAEhB,KAAK,IACD,OAAQi9E,EAAInhF,QACR,KAAK,EACL,KAAK,EACDo/E,EAAMl7E,EAAI,IACVq9E,EAAO,EACP,MACJ,QACInC,EAAMl7E,EAAI,IACVq9E,EAAO,EAGf,MACJ,KAAK,IACD,OAAQJ,EAAInhF,QACR,KAAK,EACL,KAAK,EACDo/E,EAAMpoE,EAAIsqD,EACVigB,EAAOJ,EAAInhF,OACX,MACJ,KAAK,EACD,OAAOwpD,EAAOxyC,EAAIsqD,EAAI,GAAG,GAC7B,KAAK,EACD,OAAO9X,EAAOxyC,EAAIsqD,EAAI,GAAG,GAC7B,QACI,OAAO9X,EAAOxyC,EAAIsqD,EAAI,GAAG,GAEjC,MACJ,KAAK,IACD,OAAQ6f,EAAInhF,QACR,KAAK,EACL,KAAK,EACDo/E,EAAMpoE,EAAI4yC,EACV23B,EAAOJ,EAAInhF,OACX,MACJ,KAAK,EACD,OAAO2rD,EAAK30C,EAAI8nE,GAAG,GACvB,QACI,OAAOnzB,EAAK30C,EAAI8nE,GAAG,GAE3B,MACJ,KAAK,IACD,OAAQqC,EAAInhF,QACR,KAAK,EACL,KAAK,EACDo/E,EAAM,GAAKpoE,EAAI+tC,EAAI,IAAM,GACzBw8B,EAAOJ,EAAInhF,OACX,MACJ,QACI,KAAM,oBAAsBmhF,EAEpC,MACJ,KAAK,GACD,OAAQA,EAAInhF,QACR,KAAK,EACL,KAAK,EACDo/E,EAAMpoE,EAAI+tC,EACVw8B,EAAOJ,EAAInhF,OACX,MACJ,QACI,KAAM,oBAAsBmhF,EAEpC,MACJ,KAAK,GACD,OAAQA,EAAInhF,QACR,KAAK,EACL,KAAK,EACDo/E,EAAMpoE,EAAI7U,EACVo/E,EAAOJ,EAAInhF,OACX,MACJ,QACI,KAAM,sBAAwBmhF,EAEtC,MACJ,KAAK,IACD,GAAY,MAARA,GAAuB,OAARA,GAAwB,OAARA,GAAwB,QAARA,GAAyB,SAARA,EAAgB,KAAM,sBAAwBA,EAClH,OAAc,IAAVnqE,EAAIqoE,GAAoB,MAAR8B,GAAuB,OAARA,GACrBG,EAAVF,GAAO,EAAgB,IAARA,EAAY,IAAO,IACpB,IAARA,EAAY,GAAK,GAC3BC,EAAKlgF,KAAKI,MAAO+/E,GAAOtqE,EAAIsoE,EAAItoE,EAAIqoE,MAC1B,GAAKiC,IAAID,EAAK,GACZ,MAARF,EAA2B,IAAPE,EAAW,IAAM,GAAKA,EAAKC,GACnDt+E,EAAIw6E,EAAK6D,EAAI,EAAID,GACL,OAARD,EAAqBn+E,EAAErC,OAAO,EAAG,GAC9B,IAAMqC,EAAErC,OAAO,EAAGwgF,EAAInhF,OAAS,KARmBw9E,EAAKxmE,EAAIsoE,EAAG6B,EAAInhF,QAS7E,KAAK,GACD,OAAQmhF,GACJ,IAAK,MACL,IAAK,OACD/B,EAAc,GAARpoE,EAAIonD,EAASpnD,EAAI+tC,EACvB,MACJ,IAAK,MACL,IAAK,OACDq6B,EAA6B,IAAd,GAARpoE,EAAIonD,EAASpnD,EAAI+tC,GAAU/tC,EAAI7U,EACtC,MACJ,IAAK,MACL,IAAK,OACDi9E,EAA4C,IAAd,IAAd,GAARpoE,EAAIonD,EAASpnD,EAAI+tC,GAAU/tC,EAAI7U,GAAUhB,KAAKI,MAAMyV,EAAIsoE,EAAItoE,EAAIqoE,GACxE,MACJ,QACI,KAAM,uBAAyB8B,EAEvCI,EAAsB,IAAfJ,EAAInhF,OAAe,EAAI,EAC9B,MACJ,KAAK,IACDo/E,EAAMl7E,EACNq9E,EAAO,EAEf,OAAIA,EAAO,EAAU/D,EAAK4B,EAAKmC,GAAmB,GAItD,SAASC,EAASxD,GAEd,GAAIA,EAAEh+E,QADI,EACS,OAAOg+E,EAE1B,IADA,IAAI54E,EAAK44E,EAAEh+E,OAFD,EAEcgD,EAAIg7E,EAAEr9E,OAAO,EAAGyE,GACjCA,IAAM44E,EAAEh+E,OAAQoF,GAHb,EAGqBpC,IAAMA,EAAEhD,OAAS,EAAI,IAAM,IAAMg+E,EAAEr9E,OAAOyE,EAH/D,GAIV,OAAOpC,EArJXq6E,EAAIoE,aAAevB,EAmBnB7C,EAAIqE,SAAWT,EAqIf,IAAMU,EAAa,WACf,IAAMC,EAAO,KAab,SAASC,EAAcV,EAAKnqE,GACxB,IAAIhU,EACAqL,EAAM8yE,EAAI9tE,QAAQ,KAAO8tE,EAAI9tE,QAAQ,KAAO,EAChD,GAAI8tE,EAAI9mE,MAAM,eAAgB,CAC1B,GAAY,IAARrD,EAAW,MAAO,SACjB,GAAIA,EAAM,EAAG,MAAO,IAAM6qE,EAAcV,GAAMnqE,GACnD,IAAI8qE,EAASX,EAAI9tE,QAAQ,MACT,IAAZyuE,IAAeA,EAASX,EAAI9tE,QAAQ,MACxC,IAAI0uE,EAAK5gF,KAAKC,MAAMD,KAAKmE,IAAI0R,GAAO7V,KAAKs/E,QAAUqB,EAGnD,GAFIC,EAAK,IAAGA,GAAMD,IAEM,KADxB9+E,GAAKgU,EAAM7V,KAAKw0C,IAAI,GAAIosC,IAAKrB,YAAYryE,EAAM,GAAKyzE,EAASC,GAAMD,IAC7DzuE,QAAQ,KAAa,CACvB,IAAM2uE,EAAQ7gF,KAAKC,MAAMD,KAAKmE,IAAI0R,GAAO7V,KAAKs/E,QAG9C,KAFwB,IAApBz9E,EAAEqQ,QAAQ,KAAarQ,EAAIA,EAAEgV,OAAO,GAAK,IAAMhV,EAAErC,OAAO,GAAK,MAAQqhF,EAAQh/E,EAAEhD,OAAS+hF,GACvF/+E,GAAK,MAAQg/E,EAAQD,GACA,OAAnB/+E,EAAErC,OAAO,EAAG,IAEfqC,GADAA,EAAIA,EAAEgV,OAAO,GAAKhV,EAAErC,OAAO,EAAGmhF,GAAU,IAAM9+E,EAAErC,OAAO,EAAImhF,IACrDrhF,QAAQ,aAAc,MAAMA,QAAQ,QAAS,MAEvDuC,EAAIA,EAAEvC,QAAQ,MAAO,KAEzBuC,EAAIA,EAAEvC,QAAQ,4BAA4B,SAAUwhF,EAAIC,EAAIC,EAAIC,GAC5D,OAAOF,EAAKC,EAAKC,EAAGzhF,OAAO,GAAImhF,EAASC,GAAMD,GAAU,IAAMM,EAAGzhF,OAAOohF,GAAM,YAE/E/+E,EAAIgU,EAAI6pE,cAAcxyE,GAG7B,OAFI8yE,EAAI9mE,MAAM,WAAarX,EAAEqX,MAAM,cAAarX,EAAIA,EAAErC,OAAO,EAAGqC,EAAEhD,OAAS,GAAK,IAAMgD,EAAEgV,OAAOhV,EAAEhD,OAAS,IACtGmhF,EAAI9mE,MAAM,QAAUrX,EAAEqX,MAAM,SAAQrX,EAAIA,EAAEvC,QAAQ,MAAO,MACtDuC,EAAEvC,QAAQ,IAAK,KAG1B,IAAM4hF,EAAQ,yBAYd,IAAMC,EAAO,iBACPC,EAAa,WACbC,EAAQ,sBAEd,SAASC,EAAMjiF,GAEX,IADA,IAAYkiF,EAAR1/E,EAAI,GACC3C,EAAI,EAAGA,IAAMG,EAAIR,SAAUK,EAAG,OAASqiF,EAAKliF,EAAI6I,WAAWhJ,IAChE,KAAK,GACD,MACJ,KAAK,GACD2C,GAAK,IACL,MACJ,KAAK,GACDA,GAAK,IACL,MACJ,QACIA,GAAKiG,OAAOC,aAAaw5E,GAEjC,OAAO1/E,EAGX,SAAS2/E,EAAI3rE,EAAK4yC,GACd,IAAMg5B,EAAKzhF,KAAKw0C,IAAI,GAAIiU,GACxB,MAAO,GAAMzoD,KAAKI,MAAMyV,EAAM4rE,GAAMA,EAGxC,SAAS//B,EAAI7rC,EAAK4yC,GACd,OAAIA,GAAK,GAAKzoD,KAAKI,OAAOyV,EAAM7V,KAAKC,MAAM4V,IAAQ7V,KAAKw0C,IAAI,GAAIiU,KAAK5pD,OAC1D,EAEJmB,KAAKI,OAAOyV,EAAM7V,KAAKC,MAAM4V,IAAQ7V,KAAKw0C,IAAI,GAAIiU,IAe7D,SAASi5B,EAAcr7E,EAAM25E,EAAKnqE,GAC9B,GAA2B,KAAvBxP,EAAK6B,WAAW,KAAc83E,EAAI9mE,MAAMkoE,GAAa,CACrD,IAAMO,EAAO3B,EAAI1gF,QAAQ,OAAQ,IAAIA,QAAQ,MAAO,IAAIA,QAAQ,KAAM,IACtE,OAAIuW,GAAO,EAAU6rE,EAAc,IAAKC,EAAM9rE,GACvC,IAAM6rE,EAAc,IAAKC,GAAO9rE,GAAO,IAElD,GAAuC,KAAnCmqE,EAAI93E,WAAW83E,EAAInhF,OAAS,GAAW,OAnG/C,SAAsBwH,EAAM25E,EAAKnqE,GAE7B,IADA,IAAI3I,EAAM8yE,EAAInhF,OAAS,EACY,KAA5BmhF,EAAI93E,WAAWgF,EAAM,MAAaA,EACzC,OAAOszE,EAAUn6E,EAAM25E,EAAIxgF,OAAO,EAAG0N,GAAM2I,EAAM7V,KAAKw0C,IAAI,GAAI,GAAKwrC,EAAInhF,OAASqO,KAgG9B00E,CAAav7E,EAAM25E,EAAKnqE,GAC1E,IAA0B,IAAtBmqE,EAAI9tE,QAAQ,KAAa,OAzGjC,SAAuB7L,EAAM25E,EAAKnqE,GAC9B,IAAMgsE,EAAO7B,EAAI1gF,QAAQmhF,EAAM,IAAKqB,EAAM9B,EAAInhF,OAASgjF,EAAKhjF,OAC5D,OAAO2hF,EAAUn6E,EAAMw7E,EAAMhsE,EAAM7V,KAAKw0C,IAAI,GAAI,EAAIstC,IAAQjY,EAAK,IAAKiY,GAuGlCC,CAAc17E,EAAM25E,EAAKnqE,GAC7D,IAA0B,IAAtBmqE,EAAI9tE,QAAQ,KAAa,OAAOwuE,EAAcV,EAAKnqE,GACvD,GAA0B,KAAtBmqE,EAAI93E,WAAW,GAAW,MAAO,IAAMw5E,EAAcr7E,EAAM25E,EAAIxgF,OAAwB,KAAjBwgF,EAAInpE,OAAO,GAAY,EAAI,GAAIhB,GACzG,IAAIhU,EACAk7D,EAAGilB,EAAIC,EAAIC,EAAOliF,KAAKwD,IAAIqS,GAAMnU,EAAOmU,EAAM,EAAI,IAAM,GAC5D,GAAImqE,EAAI9mE,MAAM,SAAU,OAAOxX,EAAO+6E,EAAMyF,EAAMlC,EAAInhF,QACtD,GAAImhF,EAAI9mE,MAAM,WAGV,MADU,OADVrX,EAAI46E,EAAM5mE,EAAK,MACAhU,EAAI,IACZA,EAAEhD,OAASmhF,EAAInhF,OAASgD,EAAIy/E,EAAMtB,EAAIxgF,OAAO,EAAGwgF,EAAInhF,OAASgD,EAAEhD,SAAWgD,EAErF,GAAKk7D,EAAIijB,EAAI9mE,MAAMgoE,GAAS,OAzEhC,SAAsBnkB,EAAGmlB,EAAMxgF,GAC3B,IAAMygF,EAAM3tB,SAASuI,EAAE,GAAI,IAAKqlB,EAAKpiF,KAAKI,MAAM8hF,EAAOC,GAAMhjB,EAAOn/D,KAAKC,MAAMmiF,EAAKD,GAChFE,EAAOD,EAAKjjB,EAAOgjB,EAAMG,EAAMH,EACnC,OAAOzgF,GAAiB,IAATy9D,EAAa,GAAK,GAAKA,GAAQ,KAAe,IAARkjB,EAAYxY,EAAK,IAAK9M,EAAE,GAAGl+D,OAAS,EAAIk+D,EAAE,GAAGl+D,QAAUy9E,EAAK+F,EAAKtlB,EAAE,GAAGl+D,QAAUk+D,EAAE,GAAK,IAAMA,EAAE,GAAKsf,EAAKiG,EAAKvlB,EAAE,GAAGl+D,SAsErI0jF,CAAaxlB,EAAGmlB,EAAMxgF,GACzD,GAAIs+E,EAAI9mE,MAAM,UAAW,OAAOxX,EAAO+6E,EAAMyF,EAAMlC,EAAInhF,OAASmhF,EAAI9tE,QAAQ,MAC5E,GAAK6qD,EAAIijB,EAAI9mE,MAAMioE,GAIf,OAHAt/E,EAAI2/E,EAAI3rE,EAAKknD,EAAE,GAAGl+D,QAAQS,QAAQ,aAAc,MAAQgiF,EAAMvkB,EAAE,KAAKz9D,QAAQ,MAAO,IAAMgiF,EAAMvkB,EAAE,KAAKz9D,QAAQ,YAAY,SAAUwhF,EAAIC,GACrI,MAAO,IAAMA,EAAKlX,EAAK,IAAKyX,EAAMvkB,EAAE,IAAIl+D,OAASkiF,EAAGliF,YAE1B,IAAvBmhF,EAAI9tE,QAAQ,MAAerQ,EAAIA,EAAEvC,QAAQ,OAAQ,KAG5D,GADA0gF,EAAMA,EAAI1gF,QAAQ,YAAa,MAC1By9D,EAAIijB,EAAI9mE,MAAM,gBACf,OAAOxX,EAAO8/E,EAAIU,EAAMnlB,EAAE,GAAGl+D,QAAQS,QAAQ,kBAAmB,OAAOA,QAAQ,YAAa,OAAOA,QAAQ,OAAQy9D,EAAE,GAAGl+D,OAAS,KAAO,KAE5I,GAAKk+D,EAAIijB,EAAI9mE,MAAM,qBAAuB,OAAOxX,EAAO2+E,EAAS5D,EAAMyF,EAAM,IAC7E,GAAKnlB,EAAIijB,EAAI9mE,MAAM,qBACf,OAAOrD,EAAM,EAAI,IAAM6rE,EAAcr7E,EAAM25E,GAAMnqE,GAAOwqE,EAAS,IAAMrgF,KAAKC,MAAM4V,GA5C1F,SAAeA,EAAK4yC,GAChB,OAAIA,GAAK,GAAKzoD,KAAKI,OAAOyV,EAAM7V,KAAKC,MAAM4V,IAAQ7V,KAAKw0C,IAAI,GAAIiU,KAAK5pD,OAC1D,EAEJ,EAwCsF2jF,CAAM3sE,EAAKknD,EAAE,GAAGl+D,UAAY,IAAMw9E,EAAK36B,EAAI7rC,EAAKknD,EAAE,GAAGl+D,QAASk+D,EAAE,GAAGl+D,QAEhK,GAAKk+D,EAAIijB,EAAI9mE,MAAM,YAAc,OAAOwoE,EAAcr7E,EAAM25E,EAAI1gF,QAAQ,SAAU,IAAKuW,GACvF,GAAKknD,EAAIijB,EAAI9mE,MAAM,2BAGf,OAFArX,EAAIs6E,EAAQuF,EAAcr7E,EAAM25E,EAAI1gF,QAAQ,SAAU,IAAKuW,IAC3DmsE,EAAK,EACE7F,EAAQA,EAAQ6D,EAAI1gF,QAAQ,MAAO,KAAKA,QAAQ,SAAS,SAAUgC,GACtE,OAAO0gF,EAAKngF,EAAEhD,OAASgD,EAAEgV,OAAOmrE,KAAc,MAAN1gF,EAAY,IAAM,OAGlE,GAAI0+E,EAAI9mE,MAAMmoE,GAEV,MAAO,KADPx/E,EAAI6/E,EAAcr7E,EAAM,aAAcwP,IACvBrW,OAAO,EAAG,GAAK,KAAOqC,EAAErC,OAAO,EAAG,GAAK,IAAMqC,EAAErC,OAAO,GAEzE,IAAIijF,EAAK,GACT,GAAK1lB,EAAIijB,EAAI9mE,MAAM,+BAUf,OATA8oE,EAAKhiF,KAAKu0E,IAAIxX,EAAE,GAAGl+D,OAAQ,GAC3BojF,EAAKjF,EAAKkF,EAAMliF,KAAKw0C,IAAI,GAAIwtC,GAAM,GAAG,GACtCngF,EAAI,GAAKH,EAEwB,OADjC+gF,EAAKjC,EAAU,IAAKzjB,EAAE,GAAIklB,EAAG,KACtBprE,OAAO4rE,EAAG5jF,OAAS,KAAY4jF,EAAKA,EAAGjjF,OAAO,EAAGijF,EAAG5jF,OAAS,GAAK,KACzEgD,GAAK4gF,EAAK1lB,EAAE,GAAK,IAAMA,EAAE,IACzB0lB,EAAKlG,EAAM0F,EAAG,GAAID,IACXnjF,OAASk+D,EAAE,GAAGl+D,SAAQ4jF,EAAKnB,EAAMvkB,EAAE,GAAGv9D,OAAOu9D,EAAE,GAAGl+D,OAAS4jF,EAAG5jF,SAAW4jF,GAChF5gF,GAAK4gF,EAGT,GAAK1lB,EAAIijB,EAAI9mE,MAAM,iCAGf,OAFA8oE,EAAKhiF,KAAKu0E,IAAIv0E,KAAK2uD,IAAIoO,EAAE,GAAGl+D,OAAQk+D,EAAE,GAAGl+D,QAAS,GAE3C6C,IADPugF,EAAKjF,EAAKkF,EAAMliF,KAAKw0C,IAAI,GAAIwtC,GAAM,GAAG,IACpB,KAAOC,EAAG,GAAK,GAAK,MAAQ,KAAOA,EAAG,GAAK3F,EAAK2F,EAAG,GAAID,GAAMjlB,EAAE,GAAK,IAAMA,EAAE,GAAKwf,EAAM0F,EAAG,GAAID,GAAMnY,EAAK,IAAK,EAAImY,EAAK,EAAIjlB,EAAE,GAAGl+D,OAASk+D,EAAE,GAAGl+D,SAEpK,GAAKk+D,EAAIijB,EAAI9mE,MAAM,YAEf,OADArX,EAAI46E,EAAM5mE,EAAK,GACXmqE,EAAInhF,QAAUgD,EAAEhD,OAAegD,EAC5By/E,EAAMtB,EAAIxgF,OAAO,EAAGwgF,EAAInhF,OAASgD,EAAEhD,SAAWgD,EAEzD,GAAKk7D,EAAIijB,EAAI9mE,MAAM,uBAAyB,CACxCrX,EAAI,GAAKgU,EAAI4pE,QAAQz/E,KAAKu0E,IAAIxX,EAAE,GAAGl+D,OAAQ,KAAKS,QAAQ,YAAa,MACrE0iF,EAAKngF,EAAEqQ,QAAQ,KACf,IAAMwwE,EAAO1C,EAAI9tE,QAAQ,KAAO8vE,EAAIW,EAAO3C,EAAInhF,OAASgD,EAAEhD,OAAS6jF,EACnE,OAAOpB,EAAMtB,EAAIxgF,OAAO,EAAGkjF,GAAQ7gF,EAAIm+E,EAAIxgF,OAAOwgF,EAAInhF,OAAS8jF,IAEnE,GAAK5lB,EAAIijB,EAAI9mE,MAAM,sBAEf,OADA8oE,EAAKtgC,EAAI7rC,EAAKknD,EAAE,GAAGl+D,QACZgX,EAAM,EAAI,IAAM6rE,EAAcr7E,EAAM25E,GAAMnqE,GAAOwqE,EAlFhE,SAAaxqE,GACT,OAAIA,EAAM,YAAcA,GAAO,WAAmB,IAAMA,GAAO,EAAW,EAANA,EAAYA,EAAM,EAAI,GACnF,GAAK7V,KAAKC,MAAM4V,GAgF8C+sE,CAAI/sE,IAAMvW,QAAQ,aAAc,OAAOA,QAAQ,SAAS,SAAUwhF,GAC/H,MAAO,OAASA,EAAGjiF,OAAS,EAAIw9E,EAAK,EAAG,EAAIyE,EAAGjiF,QAAU,IAAMiiF,KAC9D,IAAMzE,EAAK2F,EAAIjlB,EAAE,GAAGl+D,QAE7B,OAAQmhF,GACJ,IAAK,aACD,OAAO0B,EAAcr7E,EAAM,WAAYwP,GAC3C,IAAK,UACL,IAAK,SACL,IAAK,QACD,IAAMvU,EAAI++E,EAAS5D,EAAMyF,EAAM,IAC/B,MAAa,MAAN5gF,EAAYI,EAAOJ,EAAI,GAClC,IAAK,aACD,OAAOogF,EAAcr7E,EAAM,aAAcwP,GAAKvW,QAAQ,OAAQ,KAClE,IAAK,WACD,OAAOoiF,EAAcr7E,EAAM,WAAYwP,GAAKvW,QAAQ,OAAQ,KAGpE,MAAM,IAAIqH,MAAM,uBAAyBq5E,EAAM,KAcnD,SAAS6C,EAAe7C,EAAKnqE,GACzB,IAAIhU,EACAqL,EAAM8yE,EAAI9tE,QAAQ,KAAO8tE,EAAI9tE,QAAQ,KAAO,EAChD,GAAI8tE,EAAI9mE,MAAM,eAAgB,CAC1B,GAAY,IAARrD,EAAW,MAAO,SACjB,GAAIA,EAAM,EAAG,MAAO,IAAMgtE,EAAe7C,GAAMnqE,GACpD,IAAI8qE,EAASX,EAAI9tE,QAAQ,MACT,IAAZyuE,IAAeA,EAASX,EAAI9tE,QAAQ,MACxC,IAAI0uE,EAAK5gF,KAAKC,MAAMD,KAAKmE,IAAI0R,GAAO7V,KAAKs/E,QAAUqB,EAGnD,GAFIC,EAAK,IAAGA,GAAMD,KAClB9+E,GAAKgU,EAAM7V,KAAKw0C,IAAI,GAAIosC,IAAKrB,YAAYryE,EAAM,GAAKyzE,EAASC,GAAMD,IAC5DznE,MAAM,QAAS,CAClB,IAAM2nE,EAAQ7gF,KAAKC,MAAMD,KAAKmE,IAAI0R,GAAO7V,KAAKs/E,SACtB,IAApBz9E,EAAEqQ,QAAQ,KAAarQ,EAAIA,EAAEgV,OAAO,GAAK,IAAMhV,EAAErC,OAAO,GAAK,MAAQqhF,EAAQh/E,EAAEhD,OAAS+hF,GACvF/+E,GAAK,MAAQg/E,EAAQD,GAC1B/+E,EAAIA,EAAEvC,QAAQ,MAAO,KAEzBuC,EAAIA,EAAEvC,QAAQ,4BAA4B,SAAUwhF,EAAIC,EAAIC,EAAIC,GAC5D,OAAOF,EAAKC,EAAKC,EAAGzhF,OAAO,GAAImhF,EAASC,GAAMD,GAAU,IAAMM,EAAGzhF,OAAOohF,GAAM,YAE/E/+E,EAAIgU,EAAI6pE,cAAcxyE,GAG7B,OAFI8yE,EAAI9mE,MAAM,WAAarX,EAAEqX,MAAM,cAAarX,EAAIA,EAAErC,OAAO,EAAGqC,EAAEhD,OAAS,GAAK,IAAMgD,EAAEgV,OAAOhV,EAAEhD,OAAS,IACtGmhF,EAAI9mE,MAAM,QAAUrX,EAAEqX,MAAM,SAAQrX,EAAIA,EAAEvC,QAAQ,MAAO,MACtDuC,EAAEvC,QAAQ,IAAK,KAG1B,SAASwjF,EAAcz8E,EAAM25E,EAAKnqE,GAC9B,GAA2B,KAAvBxP,EAAK6B,WAAW,KAAc83E,EAAI9mE,MAAMkoE,GAAa,CACrD,IAAMO,EAAO3B,EAAI1gF,QAAQ,OAAQ,IAAIA,QAAQ,MAAO,IAAIA,QAAQ,KAAM,IACtE,OAAIuW,GAAO,EAAUitE,EAAc,IAAKnB,EAAM9rE,GACvC,IAAMitE,EAAc,IAAKnB,GAAO9rE,GAAO,IAElD,GAAuC,KAAnCmqE,EAAI93E,WAAW83E,EAAInhF,OAAS,GAAW,OA3C/C,SAAuBwH,EAAM25E,EAAKnqE,GAE9B,IADA,IAAI3I,EAAM8yE,EAAInhF,OAAS,EACY,KAA5BmhF,EAAI93E,WAAWgF,EAAM,MAAaA,EACzC,OAAOszE,EAAUn6E,EAAM25E,EAAIxgF,OAAO,EAAG0N,GAAM2I,EAAM7V,KAAKw0C,IAAI,GAAI,GAAKwrC,EAAInhF,OAASqO,KAwC9B61E,CAAc18E,EAAM25E,EAAKnqE,GAC3E,IAA0B,IAAtBmqE,EAAI9tE,QAAQ,KAAa,OAtCjC,SAAwB7L,EAAM25E,EAAKnqE,GAC/B,IAAMgsE,EAAO7B,EAAI1gF,QAAQmhF,EAAM,IAAKqB,EAAM9B,EAAInhF,OAASgjF,EAAKhjF,OAC5D,OAAO2hF,EAAUn6E,EAAMw7E,EAAMhsE,EAAM7V,KAAKw0C,IAAI,GAAI,EAAIstC,IAAQjY,EAAK,IAAKiY,GAoClCkB,CAAe38E,EAAM25E,EAAKnqE,GAC9D,IAA0B,IAAtBmqE,EAAI9tE,QAAQ,KAAa,OAAO2wE,EAAe7C,EAAKnqE,GACxD,GAA0B,KAAtBmqE,EAAI93E,WAAW,GAAW,MAAO,IAAM46E,EAAcz8E,EAAM25E,EAAIxgF,OAAwB,KAAjBwgF,EAAInpE,OAAO,GAAY,EAAI,GAAIhB,GACzG,IAAIhU,EACAk7D,EAAGilB,EAAIC,EAAIC,EAAOliF,KAAKwD,IAAIqS,GAAMnU,EAAOmU,EAAM,EAAI,IAAM,GAC5D,GAAImqE,EAAI9mE,MAAM,SAAU,OAAOxX,EAAO26E,EAAK6F,EAAMlC,EAAInhF,QACrD,GAAImhF,EAAI9mE,MAAM,WAGV,OAFArX,EAAK,GAAKgU,EACE,IAARA,IAAWhU,EAAI,IACZA,EAAEhD,OAASmhF,EAAInhF,OAASgD,EAAIy/E,EAAMtB,EAAIxgF,OAAO,EAAGwgF,EAAInhF,OAASgD,EAAEhD,SAAWgD,EAErF,GAAKk7D,EAAIijB,EAAI9mE,MAAMgoE,GAAS,OA1MhC,SAAsBnkB,EAAGmlB,EAAMxgF,GAC3B,OAAOA,GAAiB,IAATwgF,EAAa,GAAK,GAAKA,GAAQrY,EAAK,IAAK9M,EAAE,GAAGl+D,OAAS,EAAIk+D,EAAE,GAAGl+D,QAyM5CokF,CAAalmB,EAAGmlB,EAAMxgF,GACzD,GAAIs+E,EAAI9mE,MAAM,UAAW,OAAOxX,EAAO26E,EAAK6F,EAAMlC,EAAInhF,OAASmhF,EAAI9tE,QAAQ,MAC3E,GAAK6qD,EAAIijB,EAAI9mE,MAAMioE,GAKf,OAHAt/E,GADAA,GAAK,GAAKgU,GAAKvW,QAAQ,aAAc,MAAQgiF,EAAMvkB,EAAE,KAAKz9D,QAAQ,MAAO,IAAMgiF,EAAMvkB,EAAE,MACjFz9D,QAAQ,YAAY,SAAUwhF,EAAIC,GACpC,MAAO,IAAMA,EAAKlX,EAAK,IAAKyX,EAAMvkB,EAAE,IAAIl+D,OAASkiF,EAAGliF,YAE1B,IAAvBmhF,EAAI9tE,QAAQ,MAAerQ,EAAIA,EAAEvC,QAAQ,OAAQ,KAG5D,GADA0gF,EAAMA,EAAI1gF,QAAQ,YAAa,MAC1By9D,EAAIijB,EAAI9mE,MAAM,gBACf,OAAOxX,GAAQ,GAAKwgF,GAAM5iF,QAAQ,kBAAmB,OAAOA,QAAQ,YAAa,OAAOA,QAAQ,OAAQy9D,EAAE,GAAGl+D,OAAS,KAAO,KAEjI,GAAKk+D,EAAIijB,EAAI9mE,MAAM,qBAAuB,OAAOxX,EAAO2+E,EAAU,GAAK6B,GACvE,GAAKnlB,EAAIijB,EAAI9mE,MAAM,qBACf,OAAOrD,EAAM,EAAI,IAAMitE,EAAcz8E,EAAM25E,GAAMnqE,GAAOwqE,EAAU,GAAKxqE,GAAQ,IAAMg0D,EAAK,IAAK9M,EAAE,GAAGl+D,QAExG,GAAKk+D,EAAIijB,EAAI9mE,MAAM,YAAc,OAAO4pE,EAAcz8E,EAAM25E,EAAI1gF,QAAQ,SAAU,IAAKuW,GACvF,GAAKknD,EAAIijB,EAAI9mE,MAAM,2BAGf,OAFArX,EAAIs6E,EAAQ2G,EAAcz8E,EAAM25E,EAAI1gF,QAAQ,SAAU,IAAKuW,IAC3DmsE,EAAK,EACE7F,EAAQA,EAAQ6D,EAAI1gF,QAAQ,MAAO,KAAKA,QAAQ,SAAS,SAAUgC,GACtE,OAAO0gF,EAAKngF,EAAEhD,OAASgD,EAAEgV,OAAOmrE,KAAc,MAAN1gF,EAAY,IAAM,OAGlE,GAAI0+E,EAAI9mE,MAAMmoE,GAEV,MAAO,KADPx/E,EAAIihF,EAAcz8E,EAAM,aAAcwP,IACvBrW,OAAO,EAAG,GAAK,KAAOqC,EAAErC,OAAO,EAAG,GAAK,IAAMqC,EAAErC,OAAO,GAEzE,IAAIijF,EAAK,GACT,GAAK1lB,EAAIijB,EAAI9mE,MAAM,+BAUf,OATA8oE,EAAKhiF,KAAKu0E,IAAIxX,EAAE,GAAGl+D,OAAQ,GAC3BojF,EAAKjF,EAAKkF,EAAMliF,KAAKw0C,IAAI,GAAIwtC,GAAM,GAAG,GACtCngF,EAAI,GAAKH,EAEuB,MADhC+gF,EAAKjC,EAAU,IAAKzjB,EAAE,GAAIklB,EAAG,KACtBprE,OAAO4rE,EAAG5jF,OAAS,KAAW4jF,EAAKA,EAAGjjF,OAAO,EAAGijF,EAAG5jF,OAAS,GAAK,KACxEgD,GAAK4gF,EAAK1lB,EAAE,GAAK,IAAMA,EAAE,IACzB0lB,EAAKlG,EAAM0F,EAAG,GAAID,IACXnjF,OAASk+D,EAAE,GAAGl+D,SAAQ4jF,EAAKnB,EAAMvkB,EAAE,GAAGv9D,OAAOu9D,EAAE,GAAGl+D,OAAS4jF,EAAG5jF,SAAW4jF,GAChF5gF,GAAK4gF,EAGT,GAAK1lB,EAAIijB,EAAI9mE,MAAM,iCAGf,OAFA8oE,EAAKhiF,KAAKu0E,IAAIv0E,KAAK2uD,IAAIoO,EAAE,GAAGl+D,OAAQk+D,EAAE,GAAGl+D,QAAS,GAE3C6C,IADPugF,EAAKjF,EAAKkF,EAAMliF,KAAKw0C,IAAI,GAAIwtC,GAAM,GAAG,IACpB,KAAOC,EAAG,GAAK,GAAK,MAAQ,KAAOA,EAAG,GAAK3F,EAAK2F,EAAG,GAAID,GAAMjlB,EAAE,GAAK,IAAMA,EAAE,GAAKwf,EAAM0F,EAAG,GAAID,GAAMnY,EAAK,IAAK,EAAImY,EAAK,EAAIjlB,EAAE,GAAGl+D,OAASk+D,EAAE,GAAGl+D,SAEpK,GAAKk+D,EAAIijB,EAAI9mE,MAAM,YAEf,OADArX,EAAI,GAAKgU,EACLmqE,EAAInhF,QAAUgD,EAAEhD,OAAegD,EAC5By/E,EAAMtB,EAAIxgF,OAAO,EAAGwgF,EAAInhF,OAASgD,EAAEhD,SAAWgD,EAEzD,GAAKk7D,EAAIijB,EAAI9mE,MAAM,sBAAwB,CACvCrX,EAAI,GAAKgU,EAAI4pE,QAAQz/E,KAAKu0E,IAAIxX,EAAE,GAAGl+D,OAAQ,KAAKS,QAAQ,YAAa,MACrE0iF,EAAKngF,EAAEqQ,QAAQ,KACf,IAAIwwE,EAAO1C,EAAI9tE,QAAQ,KAAO8vE,EAAIW,EAAO3C,EAAInhF,OAASgD,EAAEhD,OAAS6jF,EACjE,OAAOpB,EAAMtB,EAAIxgF,OAAO,EAAGkjF,GAAQ7gF,EAAIm+E,EAAIxgF,OAAOwgF,EAAInhF,OAAS8jF,IAEnE,GAAK5lB,EAAIijB,EAAI9mE,MAAM,sBACf,OAAOrD,EAAM,EAAI,IAAMitE,EAAcz8E,EAAM25E,GAAMnqE,GAAOwqE,EAAS,GAAKxqE,GAAKvW,QAAQ,aAAc,OAAOA,QAAQ,SAAS,SAAUwhF,GAC/H,MAAO,OAASA,EAAGjiF,OAAS,EAAIw9E,EAAK,EAAG,EAAIyE,EAAGjiF,QAAU,IAAMiiF,KAC9D,IAAMzE,EAAK,EAAGtf,EAAE,GAAGl+D,QAE5B,OAAQmhF,GACJ,IAAK,UACL,IAAK,SACL,IAAK,QACD,IAAM1+E,EAAI++E,EAAS,GAAK6B,GACxB,MAAa,MAAN5gF,EAAYI,EAAOJ,EAAI,GAClC,QACI,GAAI0+E,EAAI9mE,MAAM,aAAc,OAAO4pE,EAAcz8E,EAAM25E,EAAIhhF,MAAM,EAAGghF,EAAIzgF,YAAY,MAAOsW,GAAOyrE,EAAMtB,EAAIhhF,MAAMghF,EAAIzgF,YAAY,OAE1I,MAAM,IAAIoH,MAAM,uBAAyBq5E,EAAM,KAGnD,OAAO,SAAmB35E,EAAM25E,EAAKnqE,GACjC,OAAc,EAANA,KAAaA,EAAMitE,EAAcz8E,EAAM25E,EAAKnqE,GAAO6rE,EAAcr7E,EAAM25E,EAAKnqE,IA1UzE,GA8UnB,SAASqtE,EAAUlD,GAGf,IAFA,IAAM/B,EAAM,GACRkF,GAAS,EAAOl/E,EAAI,EACf/E,EAAI,EAAGA,EAAI8gF,EAAInhF,SAAUK,EAAG,OAAgB8gF,EAAI93E,WAAWhJ,IAChE,KAAK,GACDikF,GAAUA,EACV,MACJ,KAAK,GACL,KAAK,GACL,KAAK,KACCjkF,EACF,MACJ,KAAK,GACD++E,EAAIA,EAAIp/E,QAAUmhF,EAAIxgF,OAAOyE,EAAG/E,EAAI+E,GACpCA,EAAI/E,EAAI,EAGhB,GADA++E,EAAIA,EAAIp/E,QAAUmhF,EAAIxgF,OAAOyE,IACd,IAAXk/E,EAAiB,MAAM,IAAIx8E,MAAM,WAAaq5E,EAAM,0BACxD,OAAO/B,EAGX/B,EAAIkH,OAASF,EACb,IAAMG,EAAU,gBAEhB,SAASC,EAAYtD,GAEjB,IADA,IAAI9gF,EAAI,EAAe8U,EAAI,GAAInS,EAAI,GAC5B3C,EAAI8gF,EAAInhF,QACX,OAASmV,EAAIgsE,EAAInpE,OAAO3X,IACpB,IAAK,IACG09E,EAAUoD,EAAK9gF,KAAIA,GAAK,GAC5BA,IACA,MACJ,IAAK,IACD,KAAwC,KAAzB8gF,EAAI93E,aAAahJ,IAAcA,EAAI8gF,EAAInhF,UAAWK,IAC/DA,EACF,MACJ,IAAK,KAGL,IAAK,IACDA,GAAK,EACL,MACJ,IAAK,MACCA,EACF,MACJ,IAAK,IACL,IAAK,IACD,GAA0B,MAAtB8gF,EAAInpE,OAAO3X,EAAI,IAAoC,MAAtB8gF,EAAInpE,OAAO3X,EAAI,GAAY,OAAO,EAEvE,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IAEL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACD,OAAO,EACX,IAAK,IACL,IAAK,IACD,GAAuC,QAAnC8gF,EAAIxgF,OAAON,EAAG,GAAG+I,cAAyB,OAAO,EACrD,GAAuC,UAAnC+3E,EAAIxgF,OAAON,EAAG,GAAG+I,cAA2B,OAAO,IACrD/I,EACF,MACJ,IAAK,IAED,IADA2C,EAAImS,EACuB,MAApBgsE,EAAInpE,OAAO3X,MAAgBA,EAAI8gF,EAAInhF,QAAQgD,GAAKm+E,EAAInpE,OAAO3X,GAClE,GAAI2C,EAAEqX,MAAMmqE,GAAU,OAAO,EAC7B,MACJ,IAAK,IAEL,IAAK,IACL,IAAK,IACD,KAAOnkF,EAAI8gF,EAAInhF,SAAW,YAAYqT,QAAQ8B,EAAIgsE,EAAInpE,SAAS3X,KAAO,GAAW,MAAL8U,GAAkC,KAArBgsE,EAAInpE,OAAO3X,EAAI,IAAa,KAAKgT,QAAQ8tE,EAAInpE,OAAO3X,EAAI,KAAO,KAExJ,MACJ,IAAK,IACD,KAAO8gF,EAAInpE,SAAS3X,KAAO8U,IAE3B,MACJ,IAAK,MACC9U,EACoB,MAAlB8gF,EAAInpE,OAAO3X,IAAgC,MAAlB8gF,EAAInpE,OAAO3X,MAAcA,EACtD,MACJ,IAAK,IACL,IAAK,MACCA,EACF,MACJ,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACD,KAAOA,EAAI8gF,EAAInhF,QAAU,aAAaqT,QAAQ8tE,EAAInpE,SAAS3X,KAAO,IAElE,MAIJ,UACMA,EAId,OAAO,EAKX,SAASqkF,EAASvD,EAAK7+E,EAAG08E,EAAM2F,GAI5B,IAHA,IAAgDC,EAAIx/E,EAAGs9E,EAAnDtD,EAAM,GAAIp8E,EAAI,GAAI3C,EAAI,EAAG8U,EAAI,GAAI0vE,EAAM,IACvCC,EAAK,IAEFzkF,EAAI8gF,EAAInhF,QACX,OAASmV,EAAIgsE,EAAInpE,OAAO3X,IACpB,IAAK,IACD,IAAK09E,EAAUoD,EAAK9gF,GAAI,MAAM,IAAIyH,MAAM,0BAA4BqN,EAAI,OAASgsE,GACjF/B,EAAIA,EAAIp/E,QAAU,CAAC2wB,EAAG,IAAKruB,EAAG,WAC9BjC,GAAK,EACL,MACJ,IAAK,IACD,IAAK2C,EAAI,GAAmC,MAA9B0/E,EAAKvB,EAAI93E,aAAahJ,KAAcA,EAAI8gF,EAAInhF,QAASgD,GAAKiG,OAAOC,aAAaw5E,GAC5FtD,EAAIA,EAAIp/E,QAAU,CAAC2wB,EAAG,IAAKruB,EAAGU,KAC5B3C,EACF,MACJ,IAAK,KACD,IAAMsgF,EAAIQ,EAAInpE,SAAS3X,GAAIswB,EAAW,MAANgwD,GAAmB,MAANA,EAAaA,EAAI,IAC9DvB,EAAIA,EAAIp/E,QAAU,CAAC2wB,EAAGA,EAAGruB,EAAGq+E,KAC1BtgF,EACF,MACJ,IAAK,IACD++E,EAAIA,EAAIp/E,QAAU,CAAC2wB,EAAG,IAAKruB,EAAG,KAC9BjC,GAAK,EACL,MACJ,IAAK,IACD++E,EAAIA,EAAIp/E,QAAU,CAAC2wB,EAAG,IAAKruB,EAAGA,KAC5BjC,EACF,MACJ,IAAK,IACL,IAAK,IACD,GAA0B,MAAtB8gF,EAAInpE,OAAO3X,EAAI,IAAoC,MAAtB8gF,EAAInpE,OAAO3X,EAAI,GAAY,CACxD,GAAU,MAANukF,GAEU,OADVA,EAAK7F,EAAgBz8E,EAAG08E,EAA4B,MAAtBmC,EAAInpE,OAAO3X,EAAI,KAC7B,MAAO,GAE3B++E,EAAIA,EAAIp/E,QAAU,CAAC2wB,EAAG,IAAKruB,EAAG6+E,EAAIxgF,OAAON,EAAG,IAC5CwkF,EAAM1vE,EACN9U,GAAK,EACL,MAGR,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACD8U,EAAIA,EAAE5L,cAEV,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACD,GAAIjH,EAAI,EAAG,MAAO,GAClB,GAAU,MAANsiF,GAEU,OADVA,EAAK7F,EAAgBz8E,EAAG08E,IACR,MAAO,GAG3B,IADAh8E,EAAImS,IACK9U,EAAI8gF,EAAInhF,QAAUmhF,EAAInpE,OAAO3X,GAAGkJ,gBAAkB4L,GAAGnS,GAAKmS,EACzD,MAANA,GAAmC,MAAtB0vE,EAAIt7E,gBAAuB4L,EAAI,KACtC,MAANA,IAAWA,EAAI2vE,GACnB1F,EAAIA,EAAIp/E,QAAU,CAAC2wB,EAAGxb,EAAG7S,EAAGU,GAC5B6hF,EAAM1vE,EACN,MACJ,IAAK,IACL,IAAK,IACD,IAAM2pE,EAAI,CAACnuD,EAAGxb,EAAG7S,EAAG6S,GAgBpB,GAfU,MAANyvE,IAAYA,EAAK7F,EAAgBz8E,EAAG08E,IACD,QAAnCmC,EAAIxgF,OAAON,EAAG,GAAG+I,eACP,MAANw7E,IAAY9F,EAAEx8E,EAAIsiF,EAAG7/B,GAAK,GAAK,IAAM,KACzC+5B,EAAEnuD,EAAI,IACNm0D,EAAK,IACLzkF,GAAK,GACqC,UAAnC8gF,EAAIxgF,OAAON,EAAG,GAAG+I,eACd,MAANw7E,IAAY9F,EAAEx8E,EAAIsiF,EAAG7/B,GAAK,GAAK,KAAO,MAC1C+5B,EAAEnuD,EAAI,IACNtwB,GAAK,EACLykF,EAAK,MAELhG,EAAEnuD,EAAI,MACJtwB,GAEI,MAANukF,GAAsB,MAAR9F,EAAEnuD,EAAW,MAAO,GACtCyuD,EAAIA,EAAIp/E,QAAU8+E,EAClB+F,EAAM1vE,EACN,MACJ,IAAK,IAED,IADAnS,EAAImS,EACuB,MAApBgsE,EAAInpE,OAAO3X,MAAgBA,EAAI8gF,EAAInhF,QAAQgD,GAAKm+E,EAAInpE,OAAO3X,GAClE,GAAoB,MAAhB2C,EAAE7C,OAAO,GAAY,KAAM,4BAA8B6C,EAAI,IACjE,GAAIA,EAAEqX,MAAMmqE,GAAU,CAClB,GAAU,MAANI,GAEU,OADVA,EAAK7F,EAAgBz8E,EAAG08E,IACR,MAAO,GAE3BI,EAAIA,EAAIp/E,QAAU,CAAC2wB,EAAG,IAAKruB,EAAGU,EAAEuG,eAChCs7E,EAAM7hF,EAAEgV,OAAO,QACRhV,EAAEqQ,QAAQ,MAAQ,IACzBrQ,GAAKA,EAAEqX,MAAM,kBAAoB,IAAI,IAAM,IACtCoqE,EAAYtD,KAAM/B,EAAIA,EAAIp/E,QAAU,CAAC2wB,EAAG,IAAKruB,EAAGU,KAEzD,MAEJ,IAAK,IACD,GAAU,MAAN4hF,EAAY,CAEZ,IADA5hF,EAAImS,IACK9U,EAAI8gF,EAAInhF,QAAkC,OAAvBmV,EAAIgsE,EAAInpE,OAAO3X,KAAa2C,GAAKmS,EAC7DiqE,EAAIA,EAAIp/E,QAAU,CAAC2wB,EAAG,IAAKruB,EAAGU,GAC9B,MAGR,IAAK,IACL,IAAK,IAED,IADAA,EAAImS,IACM9U,EAAI8gF,EAAInhF,QAAU,YAAYqT,QAAQ8B,EAAIgsE,EAAInpE,OAAO3X,KAAO,GAAY,MAAL8U,GAAkC,KAArBgsE,EAAInpE,OAAO3X,EAAI,IAAaA,EAAI8gF,EAAInhF,OAAS,GAAK,KAAKqT,QAAQ8tE,EAAInpE,OAAO3X,EAAI,KAAO,GAAI2C,GAAKmS,EACxLiqE,EAAIA,EAAIp/E,QAAU,CAAC2wB,EAAG,IAAKruB,EAAGU,GAC9B,MACJ,IAAK,IAED,IADAA,EAAImS,EACGgsE,EAAInpE,SAAS3X,KAAO8U,GAAGnS,GAAKmS,EACnCiqE,EAAIA,EAAIp/E,QAAU,CAAC2wB,EAAGxb,EAAG7S,EAAGU,GAC5B6hF,EAAM1vE,EACN,MACJ,IAAK,MACC9U,EACoB,MAAlB8gF,EAAInpE,OAAO3X,IAAgC,MAAlB8gF,EAAInpE,OAAO3X,MAAcA,EACtD,MACJ,IAAK,IACL,IAAK,IACD++E,EAAIA,EAAIp/E,QAAU,CAAC2wB,EAAa,IAATg0D,GAA4B,kBAANriF,GAAkBA,EAAI,EAAK,IAAM6S,EAAI7S,EAAG6S,KACnF9U,EACF,MACJ,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IAED,IADA2C,EAAImS,EACG9U,EAAI8gF,EAAInhF,QAAU,aAAaqT,QAAQ8tE,EAAInpE,SAAS3X,KAAO,GAAG2C,GAAKm+E,EAAInpE,OAAO3X,GACrF++E,EAAIA,EAAIp/E,QAAU,CAAC2wB,EAAG,IAAKruB,EAAGU,GAC9B,MACJ,IAAK,IACDo8E,EAAIA,EAAIp/E,QAAU,CAAC2wB,EAAGxb,EAAG7S,EAAG6S,KAC1B9U,EACF,MACJ,QACI,IAA4D,IAAxD,6CAAwCgT,QAAQ8B,GAAW,MAAM,IAAIrN,MAAM,0BAA4BqN,EAAI,OAASgsE,GACxH/B,EAAIA,EAAIp/E,QAAU,CAAC2wB,EAAG,IAAKruB,EAAG6S,KAC5B9U,EAId,IAAqB0kF,EAAjBC,EAAK,EAAG5D,EAAM,EAClB,IAAK/gF,EAAI++E,EAAIp/E,OAAS,EAAG6kF,EAAM,IAAKxkF,GAAK,IAAKA,EAC1C,OAAQ++E,EAAI/+E,GAAGswB,GACX,IAAK,IACL,IAAK,IACDyuD,EAAI/+E,GAAGswB,EAAIm0D,EACXD,EAAM,IACFG,EAAK,IAAGA,EAAK,GACjB,MACJ,IAAK,KACID,EAAM3F,EAAI/+E,GAAGiC,EAAE+X,MAAM,YAAW+mE,EAAMjgF,KAAK2uD,IAAIsxB,EAAK2D,EAAI,GAAG/kF,OAAS,IACrEglF,EAAK,IAAGA,EAAK,GAErB,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACDH,EAAMzF,EAAI/+E,GAAGswB,EACb,MACJ,IAAK,IACW,MAARk0D,IACAzF,EAAI/+E,GAAGswB,EAAI,IACPq0D,EAAK,IAAGA,EAAK,IAErB,MACJ,IAAK,IACD,MACJ,IAAK,IACGA,EAAK,GAAK5F,EAAI/+E,GAAGiC,EAAE+X,MAAM,UAAS2qE,EAAK,GACvCA,EAAK,GAAK5F,EAAI/+E,GAAGiC,EAAE+X,MAAM,UAAS2qE,EAAK,GACvCA,EAAK,GAAK5F,EAAI/+E,GAAGiC,EAAE+X,MAAM,UAAS2qE,EAAK,GAGvD,OAAQA,GACJ,KAAK,EACD,MACJ,KAAK,EACGJ,EAAGvF,GAAK,KACRuF,EAAGvF,EAAI,IACLuF,EAAGtF,GAELsF,EAAGtF,GAAK,KACRsF,EAAGtF,EAAI,IACLsF,EAAGziF,GAELyiF,EAAGziF,GAAK,KACRyiF,EAAGziF,EAAI,IACLyiF,EAAG7/B,GAET,MACJ,KAAK,EACG6/B,EAAGvF,GAAK,KACRuF,EAAGvF,EAAI,IACLuF,EAAGtF,GAELsF,EAAGtF,GAAK,KACRsF,EAAGtF,EAAI,IACLsF,EAAGziF,GAKjB,IAAe8iF,EAAXC,EAAO,GACX,IAAK7kF,EAAI,EAAGA,EAAI++E,EAAIp/E,SAAUK,EAC1B,OAAQ++E,EAAI/+E,GAAGswB,GACX,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACD,MACJ,IAAK,IACDyuD,EAAI/+E,GAAGiC,EAAI,GACX88E,EAAI/+E,GAAGswB,EAAI,IACX,MACJ,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACDyuD,EAAI/+E,GAAGiC,EAAI4+E,EAAW9B,EAAI/+E,GAAGswB,EAAEtnB,WAAW,GAAI+1E,EAAI/+E,GAAGiC,EAAGsiF,EAAIxD,GAC5DhC,EAAI/+E,GAAGswB,EAAI,IACX,MACJ,IAAK,IACL,IAAK,IACL,IAAK,IAED,IADAs0D,EAAK5kF,EAAI,EACS,MAAX++E,EAAI6F,KACa,OAAnB9vE,EAAIiqE,EAAI6F,GAAIt0D,IAAoB,MAANxb,IACnB,MAANA,GAAmB,MAANA,IAA6B,MAAfiqE,EAAI6F,EAAK,KAAiC,MAAlB7F,EAAI6F,EAAK,GAAGt0D,GAA+B,MAAlByuD,EAAI6F,EAAK,GAAGt0D,GAA+B,MAAlByuD,EAAI6F,EAAK,GAAG3iF,IACrG,MAAb88E,EAAI/+E,GAAGswB,IAAoB,MAANxb,GAAmB,MAANA,GAAmB,MAANA,IACzC,MAANA,IAA4B,MAAdiqE,EAAI6F,GAAI3iF,GAA2B,MAAd88E,EAAI6F,GAAI3iF,GAA4B,MAAf88E,EAAI6F,EAAK,IAAgC,MAAlB7F,EAAI6F,EAAK,GAAGt0D,KAE5FyuD,EAAI/+E,GAAGiC,GAAK88E,EAAI6F,GAAI3iF,EACpB88E,EAAI6F,GAAM,CAAC3iF,EAAG,GAAIquB,EAAG,OACnBs0D,EAENC,GAAQ9F,EAAI/+E,GAAGiC,EACfjC,EAAI4kF,EAAK,EACT,MACJ,IAAK,IACD7F,EAAI/+E,GAAGswB,EAAI,IACXyuD,EAAI/+E,GAAGiC,EAAI2+E,EAAY3+E,EAAG08E,GAItC,IAAamG,EAAKC,EAAdC,EAAK,GACT,GAAIH,EAAKllF,OAAS,EAAG,CACU,KAAvBklF,EAAK77E,WAAW,IAChB87E,EAAO7iF,EAAI,GAA4B,KAAvB4iF,EAAK77E,WAAW,IAAa/G,EAAIA,EACjD8iF,EAAOzD,EAAU,IAAKuD,EAAMC,KAG5BC,EAAOzD,EAAU,IAAKuD,EADtBC,EAAO7iF,EAAI,GAAKqiF,EAAO,GAAKriF,EAAIA,GAE5B6iF,EAAM,GAAK/F,EAAI,IAAmB,MAAbA,EAAI,GAAGzuD,IAC5By0D,EAAOA,EAAKzkF,OAAO,GACnBy+E,EAAI,GAAG98E,EAAI,IAAM88E,EAAI,GAAG98E,IAGhC2iF,EAAKG,EAAKplF,OAAS,EACnB,IAAIslF,EAAQlG,EAAIp/E,OAChB,IAAKK,EAAI,EAAGA,EAAI++E,EAAIp/E,SAAUK,EAAG,GAAc,MAAV++E,EAAI/+E,IAA2B,MAAb++E,EAAI/+E,GAAGswB,GAAayuD,EAAI/+E,GAAGiC,EAAE+Q,QAAQ,MAAQ,EAAG,CACnGiyE,EAAQjlF,EACR,MAEJ,IAAIklF,EAAQnG,EAAIp/E,OAChB,GAAIslF,IAAUlG,EAAIp/E,SAAiC,IAAvBolF,EAAK/xE,QAAQ,KAAa,CAClD,IAAKhT,EAAI++E,EAAIp/E,OAAS,EAAGK,GAAK,IAAKA,EACjB,MAAV++E,EAAI/+E,KAA2C,IAA7B,MAAMgT,QAAQ+rE,EAAI/+E,GAAGswB,KACvCs0D,GAAM7F,EAAI/+E,GAAGiC,EAAEtC,OAAS,GACxBilF,GAAM7F,EAAI/+E,GAAGiC,EAAEtC,OACfo/E,EAAI/+E,GAAGiC,EAAI8iF,EAAKzkF,OAAOskF,EAAK,EAAG7F,EAAI/+E,GAAGiC,EAAEtC,SACjCilF,EAAK,EAAG7F,EAAI/+E,GAAGiC,EAAI,IAE1B88E,EAAI/+E,GAAGiC,EAAI8iF,EAAKzkF,OAAO,EAAGskF,EAAK,GAC/BA,GAAM,GAEV7F,EAAI/+E,GAAGswB,EAAI,IACX40D,EAAQllF,GAER4kF,GAAM,GAAKM,EAAQnG,EAAIp/E,SAAQo/E,EAAImG,GAAOjjF,EAAI8iF,EAAKzkF,OAAO,EAAGskF,EAAK,GAAK7F,EAAImG,GAAOjjF,QACnF,GAAIgjF,IAAUlG,EAAIp/E,SAAiC,IAAvBolF,EAAK/xE,QAAQ,KAAa,CAEzD,IADA4xE,EAAKG,EAAK/xE,QAAQ,KAAO,EACpBhT,EAAIilF,EAAOjlF,GAAK,IAAKA,EACtB,GAAc,MAAV++E,EAAI/+E,KAA2C,IAA7B,MAAMgT,QAAQ+rE,EAAI/+E,GAAGswB,GAA3C,CAGA,IAFAvrB,EAAIg6E,EAAI/+E,GAAGiC,EAAE+Q,QAAQ,MAAQ,GAAKhT,IAAMilF,EAAQlG,EAAI/+E,GAAGiC,EAAE+Q,QAAQ,KAAO,EAAI+rE,EAAI/+E,GAAGiC,EAAEtC,OAAS,EAC9FqlF,EAAKjG,EAAI/+E,GAAGiC,EAAE3B,OAAOyE,EAAI,GAClBA,GAAK,IAAKA,EACT6/E,GAAM,IAA6B,MAAvB7F,EAAI/+E,GAAGiC,EAAE0V,OAAO5S,IAAqC,MAAvBg6E,EAAI/+E,GAAGiC,EAAE0V,OAAO5S,MAAaigF,EAAKD,EAAKptE,OAAOitE,KAAQI,GAExGjG,EAAI/+E,GAAGiC,EAAI+iF,EACXjG,EAAI/+E,GAAGswB,EAAI,IACX40D,EAAQllF,EAIZ,IAFI4kF,GAAM,GAAKM,EAAQnG,EAAIp/E,SAAQo/E,EAAImG,GAAOjjF,EAAI8iF,EAAKzkF,OAAO,EAAGskF,EAAK,GAAK7F,EAAImG,GAAOjjF,GACtF2iF,EAAKG,EAAK/xE,QAAQ,KAAO,EACpBhT,EAAIilF,EAAOjlF,EAAI++E,EAAIp/E,SAAUK,EAC9B,GAAc,MAAV++E,EAAI/+E,MAA4C,IAA7B,MAAMgT,QAAQ+rE,EAAI/+E,GAAGswB,IAAatwB,IAAMilF,GAA/D,CAGA,IAFAlgF,EAAIg6E,EAAI/+E,GAAGiC,EAAE+Q,QAAQ,MAAQ,GAAKhT,IAAMilF,EAAQlG,EAAI/+E,GAAGiC,EAAE+Q,QAAQ,KAAO,EAAI,EAC5EgyE,EAAKjG,EAAI/+E,GAAGiC,EAAE3B,OAAO,EAAGyE,GACjBA,EAAIg6E,EAAI/+E,GAAGiC,EAAEtC,SAAUoF,EACtB6/E,EAAKG,EAAKplF,SAAQqlF,GAAMD,EAAKptE,OAAOitE,MAE5C7F,EAAI/+E,GAAGiC,EAAI+iF,EACXjG,EAAI/+E,GAAGswB,EAAI,IACX40D,EAAQllF,IAIpB,IAAKA,EAAI,EAAGA,EAAI++E,EAAIp/E,SAAUK,EAAiB,MAAV++E,EAAI/+E,IAAc,MAAMgT,QAAQ+rE,EAAI/+E,GAAGswB,IAAM,IAC9Ew0D,EAAOR,EAAO,GAAKriF,EAAI,GAAKjC,EAAI,GAAsB,MAAjB++E,EAAI/+E,EAAI,GAAGiC,GAAaA,EAAIA,EACjE88E,EAAI/+E,GAAGiC,EAAIq/E,EAAUvC,EAAI/+E,GAAGswB,EAAGyuD,EAAI/+E,GAAGiC,EAAG6iF,GACzC/F,EAAI/+E,GAAGswB,EAAI,KAEf,IAAI60D,EAAS,GACb,IAAKnlF,EAAI,EAAGA,IAAM++E,EAAIp/E,SAAUK,EAAiB,MAAV++E,EAAI/+E,KAAYmlF,GAAUpG,EAAI/+E,GAAGiC,GACxE,OAAOkjF,EAvVXnI,EAAIoI,QAAUhB,EA0VdpH,EAAIqI,MAAQhB,EACZ,IAAMiB,EAAU,UACVC,EAAW,4BAEjB,SAASC,EAAQvjF,EAAGihF,GAChB,GAAU,MAANA,EAAY,OAAO,EACvB,IAAMuC,EAASC,WAAWxC,EAAG,IAC7B,OAAQA,EAAG,IACP,IAAK,IACD,GAAIjhF,IAAMwjF,EAAQ,OAAO,EACzB,MACJ,IAAK,IACD,GAAIxjF,EAAIwjF,EAAQ,OAAO,EACvB,MACJ,IAAK,IACD,GAAIxjF,EAAIwjF,EAAQ,OAAO,EACvB,MACJ,IAAK,KACD,GAAIxjF,IAAMwjF,EAAQ,OAAO,EACzB,MACJ,IAAK,KACD,GAAIxjF,GAAKwjF,EAAQ,OAAO,EACxB,MACJ,IAAK,KACD,GAAIxjF,GAAKwjF,EAAQ,OAAO,EAGhC,OAAO,EAgCX,SAAS7a,EAAOkW,EAAK7+E,EAAGU,GACX,MAALA,IAAWA,EAAI,IACnB,IAAIggF,EAAO,GACX,cAAe7B,GACX,IAAK,SACiC6B,EAAtB,WAAR7B,GAAoBn+E,EAAEgjF,OAAehjF,EAAEgjF,OAC/B7E,EACZ,MACJ,IAAK,SAC2B6B,EAAhB,KAAR7B,GAAcn+E,EAAEgjF,OAAehjF,EAAEgjF,QACb,MAAXhjF,EAAEijF,MAAiBjjF,EAAEijF,MAAS/H,GAAWiD,GAG9D,GAAIpD,EAAUiF,EAAM,GAAI,OAAO/B,EAAY3+E,EAAGU,GAC1CV,aAAaw/C,OAAMx/C,EAAIu9E,EAAcv9E,EAAGU,EAAEu8E,WAC9C,IAAM9hB,EA5CV,SAAoBA,EAAGn7D,GACnB,IAAI6+E,EAAMkD,EAAU5mB,GAChB8f,EAAI4D,EAAInhF,OAAQkmF,EAAM/E,EAAI5D,EAAI,GAAGlqE,QAAQ,KAE7C,GADIkqE,EAAI,GAAK2I,GAAO,KAAK3I,EACrB4D,EAAInhF,OAAS,EAAG,MAAM,IAAI8H,MAAM,iCAAmCq5E,EAAI/uE,KAAK,KAAO,KACvF,GAAiB,kBAAN9P,EAAgB,MAAO,CAAC,EAAkB,IAAf6+E,EAAInhF,QAAgBkmF,GAAO,EAAI/E,EAAIA,EAAInhF,OAAS,GAAK,KAC3F,OAAQmhF,EAAInhF,QACR,KAAK,EACDmhF,EAAM+E,GAAO,EAAI,CAAC,UAAW,UAAW,UAAW/E,EAAI,IAAM,CAACA,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAI,KACtF,MACJ,KAAK,EACDA,EAAM+E,GAAO,EAAI,CAAC/E,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAIA,EAAI,IAAM,CAACA,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAI,KAC7E,MACJ,KAAK,EACDA,EAAM+E,GAAO,EAAI,CAAC/E,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAIA,EAAI,IAAM,CAACA,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAI,KAKrF,IAAMiC,EAAK9gF,EAAI,EAAI6+E,EAAI,GAAK7+E,EAAI,EAAI6+E,EAAI,GAAKA,EAAI,GACjD,IAA6B,IAAzBA,EAAI,GAAG9tE,QAAQ,OAAwC,IAAzB8tE,EAAI,GAAG9tE,QAAQ,KAAa,MAAO,CAACkqE,EAAG6F,GACzE,GAA6B,MAAzBjC,EAAI,GAAG9mE,MAAMsrE,IAA6C,MAAzBxE,EAAI,GAAG9mE,MAAMsrE,GAAkB,CAChE,IAAMQ,EAAKhF,EAAI,GAAG9mE,MAAMurE,GAClBQ,EAAKjF,EAAI,GAAG9mE,MAAMurE,GACxB,OAAOC,EAAQvjF,EAAG6jF,GAAM,CAAC5I,EAAG4D,EAAI,IAAM0E,EAAQvjF,EAAG8jF,GAAM,CAAC7I,EAAG4D,EAAI,IAAM,CAAC5D,EAAG4D,EAAU,MAANgF,GAAoB,MAANC,EAAa,EAAI,IAEhH,MAAO,CAAC7I,EAAG6F,GAkBDiD,CAAWrD,EAAM1gF,GAC3B,GAAIy7E,EAAUtgB,EAAE,IAAK,OAAOwjB,EAAY3+E,EAAGU,GAC3C,IAAU,IAANV,EAAYA,EAAI,YAAa,IAAU,IAANA,EAAaA,EAAI,aACjD,GAAU,KAANA,GAAiB,MAALA,EAAW,MAAO,GACvC,OAAOoiF,EAASjnB,EAAE,GAAIn7D,EAAGU,EAAGy6D,EAAE,IAGlC,SAAS6oB,EAAWnF,EAAK9yE,GACrB,GAAmB,kBAARA,EAAkB,CACzBA,GAAOA,IAAQ,EACf,IAAK,IAAIhO,EAAI,EAAGA,EAAI,MAAUA,EAC1B,QAAqBsI,IAAjBu1E,EAAU79E,IAId,GAAI69E,EAAU79E,KAAO8gF,EAAK,CACtB9yE,EAAMhO,EACN,YALIgO,EAAM,IAAGA,EAAMhO,GAQvBgO,EAAM,IAAGA,EAAM,KAGvB,OADA6vE,EAAU7vE,GAAO8yE,EACV9yE,EASXgvE,EAAIkJ,KAAOD,EAMXjJ,EAAImJ,OAAStI,EAMbb,EAAIoJ,UAAY,WACZ,OAAOvI,GAEXb,EAAIqJ,WAAa,SAAoBC,GACjC,IAAK,IAAItmF,EAAI,EAAS,MAANA,IAAgBA,OACbsI,IAAXg+E,EAAItmF,IAAkBimF,EAAWK,EAAItmF,GAAIA,IAErDg9E,EAAIY,WAAaA,EAejBZ,EAAIpS,OAASA,EAEbrqE,EAAOC,QAAUw8E,oBC/zCTz8E,EAAOC,QAMN,WACT,IAAI6rD,EAAS,SAASvrD,EAAMwH,GAG5B,IAAIuH,EAASzO,MAAMo5B,UAAU3qB,OACzB/P,EAAQsB,MAAMo5B,UAAU16B,MACxBkB,EAAWkX,OAAOsiB,UAAUx5B,SAIhC,SAASulF,EAAQlkF,EAAG4+D,GAClB,IAAItqD,EAAMtU,EAAI4+D,EAAI5+D,EAAI4+D,EACtB,OAAOngE,EAAKw0C,IAAI,GACA,MAAQx0C,EAAKmE,IAAM0R,EAAM,EAAKA,GAAOA,GAAQ7V,EAAKs/E,SAIpE,IAAIlkC,EAAU96C,MAAM86C,SAAW,SAAiB6F,GAC9C,MAA8B,mBAAvB/gD,EAAS4c,KAAKmkC,IAIvB,SAASpF,EAAWoF,GAClB,MAA8B,sBAAvB/gD,EAAS4c,KAAKmkC,GAIvB,SAASykC,EAAS/lF,GAChB,MAAuB,kBAARA,GAAoBA,EAAMA,IAAQ,EAKnD,SAASgmF,EAASzkF,GAChB,OAAO6N,EAAO6sB,MAAM,GAAI16B,GAK1B,SAASqqD,IACP,OAAO,IAAIA,EAAMq6B,MAAM5kC,WAoRzB,SAAS6kC,IAAY,OAAO,EAW5B,SAASC,IAAW,OAAO,EAmB3B,SAASC,EAAS7mF,EAAG+E,GAAK,OAAO/E,IAAM+E,EAAI,EAAI,EA7S/CsnD,EAAMy6B,GAAKz6B,EAAM7xB,UAKjB6xB,EAAMq6B,MAAQ,SAAe/mD,GAE3B,GAAIuc,EAAQvc,EAAK,IAEf,GAAIuc,EAAQvc,EAAK,GAAG,IAAK,CAEnBgd,EAAWhd,EAAK,MAClBA,EAAK,GAAK0sB,EAAM/qD,IAAIq+B,EAAK,GAAIA,EAAK,KAEpC,IAAK,IAAI3/B,EAAI,EAAGA,EAAI2/B,EAAK,GAAGhgC,OAAQK,IAClC4J,KAAK5J,GAAK2/B,EAAK,GAAG3/B,GACpB4J,KAAKjK,OAASggC,EAAK,GAAGhgC,YAItBiK,KAAK,GAAK+yC,EAAWhd,EAAK,IAAM0sB,EAAM/qD,IAAIq+B,EAAK,GAAIA,EAAK,IAAMA,EAAK,GACnE/1B,KAAKjK,OAAS,OAIX,GAAI6mF,EAAS7mD,EAAK,IACvB/1B,KAAK,GAAKyiD,EAAM7lC,IAAIkW,MAAM,KAAMiD,GAChC/1B,KAAKjK,OAAS,MAGT,IAAIggC,EAAK,aAAc0sB,EAE5B,OAAOA,EAAM1sB,EAAK,GAAG07C,WAMrBzxE,KAAK,GAAK,GACVA,KAAKjK,OAAS,EAGhB,OAAOiK,MAETyiD,EAAMq6B,MAAMlsD,UAAY6xB,EAAM7xB,UAC9B6xB,EAAMq6B,MAAMriE,YAAcgoC,EAK1BA,EAAM3hC,MAAQ,CACZ67D,QAASA,EACTrqC,QAASA,EACTS,WAAYA,EACZ6pC,SAAUA,EACVC,SAAUA,GAIZp6B,EAAM06B,WAAajmF,EAAKyhE,OACxBlW,EAAM26B,UAAY,SAAmBF,GACnC,GAAkB,oBAAPA,EACT,MAAM,IAAI3kC,UAAU,wBACtBkK,EAAM06B,WAAaD,GAMrBz6B,EAAM0lB,OAAS,SAAgB7xD,GAC7B,IAAIlgB,EAAG+E,EAEP,GAAyB,IAArB+8C,UAAUniD,OAAc,CAC1B,IAAKoF,KAAKmb,EACRmsC,EAAMtnD,GAAKmb,EAAInb,GACjB,OAAO6E,KAGT,IAAK5J,EAAI,EAAGA,EAAI8hD,UAAUniD,OAAQK,IAChC,IAAK+E,KAAK+8C,UAAU9hD,GAClBkgB,EAAInb,GAAK+8C,UAAU9hD,GAAG+E,GAG1B,OAAOmb,GAKTmsC,EAAM46B,KAAO,SAAcjlF,GACzB,OAAOA,EAAIrC,QAAU,GAKvB0sD,EAAM66B,KAAO,SAAcllF,GACzB,OAAOA,EAAI,GAAGrC,QAAU,GAK1B0sD,EAAM86B,WAAa,SAAoBnlF,GACrC,MAAO,CACLilF,KAAM56B,EAAM46B,KAAKjlF,GACjBklF,KAAM76B,EAAM66B,KAAKllF,KAMrBqqD,EAAMqB,IAAM,SAAa1rD,EAAKoR,GAC5B,OAAI8oC,EAAQ9oC,GACHA,EAAM9R,KAAI,SAAStB,GACxB,OAAOqsD,EAAMqB,IAAI1rD,EAAKhC,MAGnBgC,EAAIoR,IAMbi5C,EAAM+6B,KAAO,SAAcplF,EAAKhC,GAC9B,OAAOqsD,EAAMqB,IAAI1rD,EAAKhC,IAMxBqsD,EAAMsB,IAAM,SAAa3rD,EAAKoR,GAC5B,GAAI8oC,EAAQ9oC,GAAQ,CAClB,IAAIi0E,EAASh7B,EAAMi7B,OAAOtlF,EAAIrC,QAAQ2B,KAAI,WACxC,OAAO,IAAIF,MAAMgS,EAAMzT,WAOzB,OALAyT,EAAMgpC,SAAQ,SAASmrC,EAAKvnF,GAC1BqsD,EAAMi7B,OAAOtlF,EAAIrC,QAAQy8C,SAAQ,SAASr3C,GACxCsiF,EAAOtiF,GAAG/E,GAAKgC,EAAI+C,GAAGwiF,SAGnBF,EAGT,IADA,IAAI3vE,EAAS,IAAItW,MAAMY,EAAIrC,QAClBK,EAAI,EAAGA,EAAIgC,EAAIrC,OAAQK,IAC9B0X,EAAO1X,GAAK,CAACgC,EAAIhC,GAAGoT,IACtB,OAAOsE,GAMT20C,EAAMm7B,KAAO,SAAcxlF,EAAKhC,GAC9B,OAAOqsD,EAAMsB,IAAI3rD,EAAKhC,GAAGsB,KAAI,SAASoC,GAAI,OAAOA,EAAE,OAKrD2oD,EAAMo7B,KAAO,SAAczlF,GAGzB,IAFA,IAAI0lF,EAAOr7B,EAAM46B,KAAKjlF,GAClB2jD,EAAM,IAAIvkD,MAAMsmF,GACXh6B,EAAM,EAAGA,EAAMg6B,EAAMh6B,IAC5B/H,EAAI+H,GAAO,CAAC1rD,EAAI0rD,GAAKA,IACvB,OAAO/H,GAKT0G,EAAMs7B,SAAW,SAAkB3lF,GAGjC,IAFA,IAAI0lF,EAAOr7B,EAAM46B,KAAKjlF,GAAO,EACzB2jD,EAAM,IAAIvkD,MAAMsmF,GACX1nF,EAAI,EAAG0nF,GAAQ,EAAGA,IAAQ1nF,IACjC2lD,EAAI3lD,GAAK,CAACgC,EAAIhC,GAAG0nF,IACnB,OAAO/hC,GAIT0G,EAAMu7B,UAAY,SAAmB5lF,GACnC,IACI6lF,EAAQZ,EAAMC,EAAMniF,EAAG/E,EADvBkgB,EAAM,GAUV,IANKg8B,EAAQl6C,EAAI,MACfA,EAAM,CAACA,IAETilF,EAAOjlF,EAAIrC,OACXunF,EAAOllF,EAAI,GAAGrC,OAETK,EAAI,EAAGA,EAAIknF,EAAMlnF,IAAK,CAEzB,IADA6nF,EAAS,IAAIzmF,MAAM6lF,GACdliF,EAAI,EAAGA,EAAIkiF,EAAMliF,IACpB8iF,EAAO9iF,GAAK/C,EAAI+C,GAAG/E,GACrBkgB,EAAI5R,KAAKu5E,GAIX,OAAsB,IAAf3nE,EAAIvgB,OAAeugB,EAAI,GAAKA,GAMrCmsC,EAAM/qD,IAAM,SAAaU,EAAKwhC,EAAMskD,GAClC,IAAIp6B,EAAKg6B,EAAMK,EAAMpiC,EAAKgI,EAS1B,IAPKzR,EAAQl6C,EAAI,MACfA,EAAM,CAACA,IAET0lF,EAAO1lF,EAAIrC,OACXooF,EAAO/lF,EAAI,GAAGrC,OACdgmD,EAAMmiC,EAAU9lF,EAAM,IAAIZ,MAAMsmF,GAE3Bh6B,EAAM,EAAGA,EAAMg6B,EAAMh6B,IAIxB,IAFK/H,EAAI+H,KACP/H,EAAI+H,GAAO,IAAItsD,MAAM2mF,IAClBp6B,EAAM,EAAGA,EAAMo6B,EAAMp6B,IACxBhI,EAAI+H,GAAKC,GAAOnqB,EAAKxhC,EAAI0rD,GAAKC,GAAMD,EAAKC,GAG7C,OAAsB,IAAfhI,EAAIhmD,OAAegmD,EAAI,GAAKA,GAKrC0G,EAAM27B,UAAY,SAAmBhmF,EAAKwhC,EAAMskD,GAC9C,IAAIp6B,EAAKg6B,EAAMK,EAAMpiC,EAAKgI,EAS1B,IAPKzR,EAAQl6C,EAAI,MACfA,EAAM,CAACA,IAET0lF,EAAO1lF,EAAIrC,OACXooF,EAAO/lF,EAAI,GAAGrC,OACdgmD,EAAMmiC,EAAU9lF,EAAM,IAAIZ,MAAMsmF,GAE3Bh6B,EAAM,EAAGA,EAAMg6B,EAAMh6B,IAMxB,IAJK/H,EAAI+H,KACP/H,EAAI+H,GAAO,IAAItsD,MAAM2mF,IACnBA,EAAO,IACTpiC,EAAI+H,GAAK,GAAK1rD,EAAI0rD,GAAK,IACpBC,EAAM,EAAGA,EAAMo6B,EAAMp6B,IACxBhI,EAAI+H,GAAKC,GAAOnqB,EAAKmiB,EAAI+H,GAAKC,EAAI,GAAI3rD,EAAI0rD,GAAKC,IAEnD,OAAsB,IAAfhI,EAAIhmD,OAAegmD,EAAI,GAAKA,GAKrC0G,EAAM47B,MAAQ,SAAejmF,EAAKwhC,GAChC,OAAO6oB,EAAM/qD,IAAIU,EAAKwhC,GAAM,IAK9B6oB,EAAM/jB,OAAS,SAAiB2+C,EAAMC,EAAM1jD,GAC1C,IACIxjC,EAAG+E,EADH4gD,EAAM,IAAIvkD,MAAM6lF,GAQpB,IALItqC,EAAWuqC,KACb1jD,EAAO0jD,EACPA,EAAOD,GAGJjnF,EAAI,EAAGA,EAAIinF,EAAMjnF,IAEpB,IADA2lD,EAAI3lD,GAAK,IAAIoB,MAAM8lF,GACdniF,EAAI,EAAGA,EAAImiF,EAAMniF,IACpB4gD,EAAI3lD,GAAG+E,GAAKy+B,EAAKxjC,EAAG+E,GAGxB,OAAO4gD,GAQT0G,EAAM67B,MAAQ,SAAejB,EAAMC,GAGjC,OAFKV,EAASU,KACZA,EAAOD,GACF56B,EAAM/jB,OAAO2+C,EAAMC,EAAMP,IAQlCt6B,EAAM87B,KAAO,SAAclB,EAAMC,GAG/B,OAFKV,EAASU,KACZA,EAAOD,GACF56B,EAAM/jB,OAAO2+C,EAAMC,EAAMN,IAKlCv6B,EAAM+7B,KAAO,SAAcnB,EAAMC,GAG/B,OAFKV,EAASU,KACZA,EAAOD,GACF56B,EAAM/jB,OAAO2+C,EAAMC,EAAM76B,EAAM06B,aAQxC16B,EAAMpO,SAAW,SAAkBgpC,EAAMC,GAGvC,OAFKV,EAASU,KACZA,EAAOD,GACF56B,EAAM/jB,OAAO2+C,EAAMC,EAAML,IAKlCx6B,EAAMg8B,UAAY,SAAmBrmF,GACnC,IACI0rD,EAAKC,EADL19B,EAAOjuB,EAAIrC,OAGf,GAAIqC,EAAIrC,SAAWqC,EAAI,GAAGrC,OACxB,OAAO,EAET,IAAK+tD,EAAM,EAAGA,EAAMz9B,EAAMy9B,IACxB,IAAKC,EAAM,EAAGA,EAAM19B,EAAM09B,IACxB,GAAI3rD,EAAI2rD,GAAKD,KAAS1rD,EAAI0rD,GAAKC,GAC7B,OAAO,EAGb,OAAO,GAKTtB,EAAMi8B,MAAQ,SAAetmF,GAC3B,OAAOqqD,EAAM47B,MAAMjmF,EAAK2kF,IAK1Bt6B,EAAM7lC,IAAM,SAAa6uD,EAAK5lB,EAAK9vD,EAAQ6jC,GACpCmZ,EAAWnZ,KACdA,GAAO,GAET,IAII+nB,EAJAvpD,EAAM,GACNumF,EAAQhC,EAAQlR,EAAK5lB,GACrByH,GAAQzH,EAAM84B,EAAQlT,EAAMkT,KAAW5oF,EAAS,GAAK4oF,GACrDC,EAAUnT,EAKd,IAAK9pB,EAAM,EACNi9B,GAAW/4B,GAAOlE,EAAM5rD,EACjB6oF,GAAWnT,EAAMkT,EAAQrxB,EAAOqxB,IAAvCh9B,GAAsDg9B,EACzDvmF,EAAIsM,KAAMk1B,EAAOA,EAAKglD,EAASj9B,GAAOi9B,GAGxC,OAAOxmF,GAOTqqD,EAAMi7B,OAAS,SAAgB9lC,EAAOinC,EAAKvxB,GACzC,IACIl3D,EADA0oF,EAAK,GAOT,GALAxxB,EAAOA,GAAQ,EACXuxB,IAAQngF,IACVmgF,EAAMjnC,EACNA,EAAQ,GAENA,IAAUinC,GAAgB,IAATvxB,EACnB,MAAO,GAET,GAAI1V,EAAQinC,GAAOvxB,EAAO,EACxB,MAAO,GAET,GAAI1V,EAAQinC,GAAOvxB,EAAO,EACxB,MAAO,GAET,GAAIA,EAAO,EACT,IAAKl3D,EAAIwhD,EAAOxhD,EAAIyoF,EAAKzoF,GAAKk3D,EAC5BwxB,EAAGp6E,KAAKtO,QAGV,IAAKA,EAAIwhD,EAAOxhD,EAAIyoF,EAAKzoF,GAAKk3D,EAC5BwxB,EAAGp6E,KAAKtO,GAGZ,OAAO0oF,GAQTr8B,EAAMvsD,MAAS,WACb,SAAS6oF,EAAOC,EAAMpnC,EAAOinC,EAAKvxB,GAEhC,IAAIl3D,EACA0oF,EAAK,GACL/oF,EAASipF,EAAKjpF,OAClB,GAAI6hD,IAAUl5C,GAAamgF,IAAQngF,GAAa4uD,IAAS5uD,EACvD,OAAO+jD,EAAMw8B,KAAKD,GAQpB,GADA1xB,EAAOA,GAAQ,GAFf1V,GAFAA,EAAQA,GAAS,IAEA,EAAIA,EAAQ7hD,EAAS6hD,MACtCinC,GAFAA,EAAMA,GAAOG,EAAKjpF,SAEL,EAAI8oF,EAAM9oF,EAAS8oF,IAEF,IAATvxB,EACnB,MAAO,GAET,GAAI1V,EAAQinC,GAAOvxB,EAAO,EACxB,MAAO,GAET,GAAI1V,EAAQinC,GAAOvxB,EAAO,EACxB,MAAO,GAET,GAAIA,EAAO,EACT,IAAKl3D,EAAIwhD,EAAOxhD,EAAIyoF,EAAKzoF,GAAKk3D,EAC5BwxB,EAAGp6E,KAAKs6E,EAAK5oF,SAGf,IAAKA,EAAIwhD,EAAOxhD,EAAIyoF,EAAIzoF,GAAKk3D,EAC3BwxB,EAAGp6E,KAAKs6E,EAAK5oF,IAGjB,OAAO0oF,EAGT,SAAS5oF,EAAM8oF,EAAME,GACnB,IAAIC,EAAUC,EAEd,OAAIxC,GADJsC,EAAUA,GAAW,IACAp7B,KACf84B,EAASsC,EAAQn7B,KACZi7B,EAAKE,EAAQp7B,KAAKo7B,EAAQn7B,KAG5Bg7B,EAFGt8B,EAAM+6B,KAAKwB,EAAME,EAAQp7B,MACnCq7B,EAAWD,EAAQn7B,KAAO,IACEnM,MAAOunC,EAASN,IAAKM,EAAS7xB,MAGxDsvB,EAASsC,EAAQn7B,KAGZg7B,EAFGt8B,EAAMm7B,KAAKoB,EAAME,EAAQn7B,MACnCq7B,EAAWF,EAAQp7B,KAAO,IACElM,MAAOwnC,EAASP,IAAKO,EAAS9xB,OAG5D8xB,EAAWF,EAAQp7B,KAAO,GAC1Bq7B,EAAWD,EAAQn7B,KAAO,GACfg7B,EAAOC,EAAMI,EAASxnC,MAAOwnC,EAASP,IAAKO,EAAS9xB,MACnD51D,KAAI,SAASosD,GACvB,OAAOi7B,EAAOj7B,EAAKq7B,EAASvnC,MAAOunC,EAASN,IAAKM,EAAS7xB,UAI9D,OAAOp3D,EA7DM,GAoEfusD,EAAM48B,YAAc,SAAqBzK,EAAGsK,EAAS7K,GACnD,IAAIiL,EAAIC,EACR,GAAI3C,EAASsC,EAAQp7B,KAAM,CACzB,GAAI84B,EAASsC,EAAQn7B,KACnB,OAAO6wB,EAAEsK,EAAQp7B,KAAKo7B,EAAQn7B,KAAOswB,EACvC6K,EAAQn7B,IAAMm7B,EAAQn7B,KAAO,GAC7Bm7B,EAAQn7B,IAAInM,MAAQsnC,EAAQn7B,IAAInM,OAAS,EACzCsnC,EAAQn7B,IAAI86B,IAAMK,EAAQn7B,IAAI86B,KAAOjK,EAAE,GAAG7+E,OAC1CmpF,EAAQn7B,IAAIuJ,KAAO4xB,EAAQn7B,IAAIuJ,MAAQ,EACvCgyB,EAAK78B,EAAMi7B,OAAOwB,EAAQn7B,IAAInM,MACR1gD,EAAKu0E,IAAImJ,EAAE7+E,OAAQmpF,EAAQn7B,IAAI86B,KAC/BK,EAAQn7B,IAAIuJ,MAClC,IAAI+J,EAAI6nB,EAAQp7B,IAIhB,OAHAw7B,EAAG9sC,SAAQ,SAAS/5C,EAAGrC,GACrBw+E,EAAEvd,GAAG5+D,GAAK47E,EAAEj+E,MAEPw+E,EAGT,GAAIgI,EAASsC,EAAQn7B,KAAM,CACzBm7B,EAAQp7B,IAAMo7B,EAAQp7B,KAAO,GAC7Bo7B,EAAQp7B,IAAIlM,MAAQsnC,EAAQp7B,IAAIlM,OAAS,EACzCsnC,EAAQp7B,IAAI+6B,IAAMK,EAAQp7B,IAAI+6B,KAAOjK,EAAE7+E,OACvCmpF,EAAQp7B,IAAIwJ,KAAO4xB,EAAQp7B,IAAIwJ,MAAQ,EACvCiyB,EAAK98B,EAAMi7B,OAAOwB,EAAQp7B,IAAIlM,MACR1gD,EAAKu0E,IAAImJ,EAAE,GAAG7+E,OAAQmpF,EAAQp7B,IAAI+6B,KAClCK,EAAQp7B,IAAIwJ,MAClC,IAAI70D,EAAIymF,EAAQn7B,IAIhB,OAHAw7B,EAAG/sC,SAAQ,SAAS6kB,EAAGl8D,GACrBy5E,EAAEvd,GAAG5+D,GAAK47E,EAAEl5E,MAEPy5E,EAuBT,OApBIP,EAAE,GAAGt+E,SAAW2I,IAClB21E,EAAI,CAACA,IAEP6K,EAAQp7B,IAAIlM,MAAQsnC,EAAQp7B,IAAIlM,OAAS,EACzCsnC,EAAQp7B,IAAI+6B,IAAMK,EAAQp7B,IAAI+6B,KAAOjK,EAAE7+E,OACvCmpF,EAAQp7B,IAAIwJ,KAAO4xB,EAAQp7B,IAAIwJ,MAAQ,EACvC4xB,EAAQn7B,IAAInM,MAAQsnC,EAAQn7B,IAAInM,OAAS,EACzCsnC,EAAQn7B,IAAI86B,IAAMK,EAAQn7B,IAAI86B,KAAOjK,EAAE,GAAG7+E,OAC1CmpF,EAAQn7B,IAAIuJ,KAAO4xB,EAAQn7B,IAAIuJ,MAAQ,EACvCiyB,EAAK98B,EAAMi7B,OAAOwB,EAAQp7B,IAAIlM,MACR1gD,EAAKu0E,IAAImJ,EAAE7+E,OAAQmpF,EAAQp7B,IAAI+6B,KAC/BK,EAAQp7B,IAAIwJ,MAClCgyB,EAAK78B,EAAMi7B,OAAOwB,EAAQn7B,IAAInM,MACR1gD,EAAKu0E,IAAImJ,EAAE,GAAG7+E,OAAQmpF,EAAQn7B,IAAI86B,KAClCK,EAAQn7B,IAAIuJ,MAClCiyB,EAAG/sC,SAAQ,SAAS6kB,EAAGjhE,GACrBkpF,EAAG9sC,SAAQ,SAAS/5C,EAAG0C,GACrBy5E,EAAEvd,GAAG5+D,GAAK47E,EAAEj+E,GAAG+E,SAGZy5E,GAMTnyB,EAAM+8B,SAAW,SAAkBC,GACjC,IAAIC,EAAMj9B,EAAM67B,MAAMmB,EAAU1pF,OAAQ0pF,EAAU1pF,QAIlD,OAHA0pF,EAAUjtC,SAAQ,SAAS9rB,EAAGtwB,GAC5BspF,EAAItpF,GAAGA,GAAKswB,KAEPg5D,GAKTj9B,EAAMw8B,KAAO,SAAcrK,GACzB,OAAOA,EAAEl9E,KAAI,SAASosD,GACpB,OAAI84B,EAAS94B,GACJA,EACFA,EAAIpsD,KAAI,SAASgvB,GACtB,OAAOA,SAWb,IAAIi5D,EAASl9B,EAAM7xB,UAwFnB,OArFA+uD,EAAO5pF,OAAS,EAKhB4pF,EAAOj7E,KAAOlN,MAAMo5B,UAAUlsB,KAC9Bi7E,EAAOzqC,KAAO19C,MAAMo5B,UAAUskB,KAC9ByqC,EAAOzc,OAAS1rE,MAAMo5B,UAAUsyC,OAChCyc,EAAOzpF,MAAQsB,MAAMo5B,UAAU16B,MAI/BypF,EAAOlO,QAAU,WACf,OAAOzxE,KAAKjK,OAAS,EAAIG,EAAM8d,KAAKhU,MAAQ9J,EAAM8d,KAAKhU,MAAM,IAK/D2/E,EAAOjoF,IAAM,SAAakiC,EAAMskD,GAC9B,OAAOz7B,EAAMA,EAAM/qD,IAAIsI,KAAM45B,EAAMskD,KAKrCyB,EAAOvB,UAAY,SAAmBxkD,EAAMskD,GAC1C,OAAOz7B,EAAMA,EAAM27B,UAAUp+E,KAAM45B,EAAMskD,KAK3CyB,EAAOtB,MAAQ,SAAezkD,GAE5B,OADA6oB,EAAM47B,MAAMr+E,KAAM45B,GACX55B,MAKT,SAAU4/E,GACR,IAAK,IAAIxpF,EAAI,EAAGA,EAAIwpF,EAAM7pF,OAAQK,KAAK,SAAUypF,GAC/CF,EAAOE,GAAY,SAASjmD,GAC1B,IACAkmD,EADIC,EAAO//E,KAGX,OAAI45B,GACFomD,YAAW,WACTpmD,EAAK5lB,KAAK+rE,EAAMJ,EAAOE,GAAU7rE,KAAK+rE,OAEjC//E,OAET8/E,EAAUr9B,EAAMo9B,GAAU7/E,MACnBsyC,EAAQwtC,GAAWr9B,EAAMq9B,GAAWA,IAZR,CAcpCF,EAAMxpF,IAfX,CAgBG,+DAA+DsiD,MAAM,MAIxE,SAAUknC,GACR,IAAK,IAAIxpF,EAAI,EAAGA,EAAIwpF,EAAM7pF,OAAQK,KAAK,SAAUypF,GAC/CF,EAAOE,GAAY,SAASr2E,EAAOowB,GACjC,IAAImmD,EAAO//E,KAEX,OAAI45B,GACFomD,YAAW,WACTpmD,EAAK5lB,KAAK+rE,EAAMJ,EAAOE,GAAU7rE,KAAK+rE,EAAMv2E,OAEvCxJ,MAEFyiD,EAAMA,EAAMo9B,GAAU7/E,KAAMwJ,KAVA,CAYpCo2E,EAAMxpF,IAbX,CAcG,UAAUsiD,MAAM,MAInB,SAAUknC,GACR,IAAK,IAAIxpF,EAAI,EAAGA,EAAIwpF,EAAM7pF,OAAQK,KAAK,SAAUypF,GAC/CF,EAAOE,GAAY,WACjB,OAAOp9B,EAAMA,EAAMo9B,GAAU/sD,MAAM,KAAMolB,aAFN,CAIpC0nC,EAAMxpF,IALX,CAMG,kCAAkCsiD,MAAM,MAIpC+J,EA1qBM,CA4qBXvrD,MAgtIA,OA/sID,SAASurD,EAAOvrD,GAEjB,IAAI67C,EAAa0P,EAAM3hC,MAAMiyB,WAG7B,SAASktC,EAAOnmF,EAAGq7C,GAAK,OAAOr7C,EAAIq7C,EAEnC,SAAS+qC,EAAK/nC,EAAKszB,EAAK5lB,GACtB,OAAO3uD,EAAK2uD,IAAI4lB,EAAKv0E,EAAKu0E,IAAItzB,EAAK0N,IAKrCpD,EAAM1nD,IAAM,SAAa3C,GAGvB,IAFA,IAAI2C,EAAM,EACN3E,EAAIgC,EAAIrC,SACHK,GAAK,GACZ2E,GAAO3C,EAAIhC,GACb,OAAO2E,GAKT0nD,EAAM09B,QAAU,SAAiB/nF,GAG/B,IAFA,IAAI2C,EAAM,EACN3E,EAAIgC,EAAIrC,SACHK,GAAK,GACZ2E,GAAO3C,EAAIhC,GAAKgC,EAAIhC,GACtB,OAAO2E,GAKT0nD,EAAM29B,SAAW,SAAkBhoF,GAKjC,IAJA,IAGIioF,EAHAv7B,EAAOrC,EAAMqC,KAAK1sD,GAClB2C,EAAM,EACN3E,EAAIgC,EAAIrC,SAEHK,GAAK,GAEZ2E,IADAslF,EAAMjoF,EAAIhC,GAAK0uD,GACFu7B,EAEf,OAAOtlF,GAIT0nD,EAAM69B,OAAS,SAAgBloF,GAG7B,IAFA,IAAI2C,EAAM,EACN3E,EAAIgC,EAAIrC,SACHK,GAAK,GACZ2E,GAAO3C,EAAIhC,GACb,OAAO2E,GAIT0nD,EAAM2V,QAAU,SAAiBhgE,GAG/B,IAFA,IAAI6e,EAAO,EACP7gB,EAAIgC,EAAIrC,SACHK,GAAK,GACZ6gB,GAAQ7e,EAAIhC,GACd,OAAO6gB,GAKTwrC,EAAMgpB,IAAM,SAAarzE,GAGvB,IAFA,IAAImoF,EAAMnoF,EAAI,GACVhC,EAAI,IACCA,EAAIgC,EAAIrC,QACXqC,EAAIhC,GAAKmqF,IACXA,EAAMnoF,EAAIhC,IACd,OAAOmqF,GAKT99B,EAAMoD,IAAM,SAAaztD,GAGvB,IAFA,IAAIooF,EAAOpoF,EAAI,GACXhC,EAAI,IACCA,EAAIgC,EAAIrC,QACXqC,EAAIhC,GAAKoqF,IACXA,EAAOpoF,EAAIhC,IACf,OAAOoqF,GAKT/9B,EAAMg+B,OAAS,SAAgBroF,GAE7B,IADA,IAAIsoF,EAAO,GAAIC,EAAO,GACdvqF,EAAI,EAAGA,EAAIgC,EAAIrC,OAAQK,IACxBsqF,EAAKtoF,EAAIhC,MACZsqF,EAAKtoF,EAAIhC,KAAM,EACfuqF,EAAKj8E,KAAKtM,EAAIhC,KAGlB,OAAOuqF,GAKTl+B,EAAMqC,KAAO,SAAc1sD,GACzB,OAAOqqD,EAAM1nD,IAAI3C,GAAOA,EAAIrC,QAK9B0sD,EAAMm+B,UAAY,SAAmBxoF,GACnC,OAAOqqD,EAAM29B,SAAShoF,GAAOA,EAAIrC,QAKnC0sD,EAAMiF,QAAU,SAAiBtvD,GAC/B,IAAIm0E,EAAOn0E,EAAIV,IAAIR,EAAKmE,KACpBwlF,EAAap+B,EAAMqC,KAAKynB,GAC5B,OAAOr1E,EAAKyE,IAAIklF,IAKlBp+B,EAAMq+B,OAAS,SAAgB1oF,GAC7B,IAAI2oF,EAAS3oF,EAAIrC,OACb4qF,EAAOvoF,EAAIlC,QAAQg/C,KAAK+qC,GAE5B,OAAkB,EAATc,EAELJ,EAAMI,EAAS,EAAK,IADnBJ,EAAMI,EAAS,EAAK,GAAMJ,EAAMI,EAAS,IAAO,GAMvDt+B,EAAMu+B,OAAS,SAAgB5oF,GAC7B,OAAOqqD,EAAM27B,UAAUhmF,GAAK,SAAU0B,EAAGq7C,GAAK,OAAOr7C,EAAIq7C,MAK3DsN,EAAMw+B,QAAU,SAAiB7oF,GAC/B,OAAOqqD,EAAM27B,UAAUhmF,GAAK,SAAU0B,EAAGq7C,GAAK,OAAOr7C,EAAIq7C,MAK3DsN,EAAMy+B,KAAO,SAAc9oF,GACzB,IAEIhC,EAFA+qF,EAAQ,GACRC,EAAShpF,EAAIrC,OAEjB,IAAKK,EAAI,EAAGA,EAAIgrF,EAAQhrF,IACtB+qF,EAAMz8E,KAAKtM,EAAIhC,GAAKgC,EAAIhC,EAAI,IAC9B,OAAO+qF,GAKT1+B,EAAM4+B,KAAO,SAAUjpF,GACrB,IAAIhC,EACAkrF,EAAkB,GAClBC,EAAe,GACnB,IAAKnrF,EAAI,EAAGA,EAAIgC,EAAIrC,OAAQK,IAEtBmrF,EADA/1B,EAASpzD,EAAIhC,IAEfmrF,EAAa/1B,MAEb+1B,EAAa/1B,GAAU,EACvB81B,EAAgB58E,KAAK8mD,IAIzB,IAAIg2B,EAAwBF,EAAgBpsC,KAAK+qC,GAC7CwB,EAAc,GACdC,EAAc,EAClB,IAAKtrF,EAAI,EAAGA,EAAIorF,EAAsBzrF,OAAQK,IAAK,CACjD,IAAIo1D,EACAm2B,EAAQJ,EADR/1B,EAASg2B,EAAsBprF,IAI/BirF,GAFQK,GACDA,EAAcC,EAAQ,IACL,EAC5BF,EAAYj2B,GAAU61B,EACtBK,GAAeC,EAGjB,OAAOvpF,EAAIV,KAAI,SAAU8zD,GACvB,OAAOi2B,EAAYj2B,OAQvB/I,EAAM4S,KAAO,SAAcj9D,GACzB,IAMIhC,EANAgrF,EAAShpF,EAAIrC,OACb4qF,EAAOvoF,EAAIlC,QAAQg/C,KAAK+qC,GACxB0B,EAAQ,EACRC,EAAW,EACXC,EAAc,EACdC,EAAW,GAGf,IAAK1rF,EAAI,EAAGA,EAAIgrF,EAAQhrF,IAClBuqF,EAAKvqF,KAAOuqF,EAAKvqF,EAAI,GACvBurF,KAEIA,EAAQC,GACVE,EAAW,CAACnB,EAAKvqF,IACjBwrF,EAAWD,EACXE,EAAc,GAGPF,IAAUC,IACjBE,EAASp9E,KAAKi8E,EAAKvqF,IACnByrF,KAGFF,EAAQ,GAIZ,OAAuB,IAAhBE,EAAoBC,EAAS,GAAKA,GAK3Cr/B,EAAM1kD,MAAQ,SAAe3F,GAC3B,OAAOqqD,EAAMoD,IAAIztD,GAAOqqD,EAAMgpB,IAAIrzE,IAKpCqqD,EAAMs/B,SAAW,SAAkB3pF,EAAK4pF,GACtC,OAAOv/B,EAAM29B,SAAShoF,IAAQA,EAAIrC,QAAUisF,EAAO,EAAI,KAIzDv/B,EAAMw/B,eAAiB,SAAwB7pF,GAG7C,OAFeA,EAAIy7C,QAAO,SAAU/5C,EAAGooF,GAAU,OAAOpoF,EAAI2oD,EAAM29B,SAAS8B,KAAY,IAC3E9pF,EAAIy7C,QAAO,SAAU/5C,EAAGooF,GAAU,OAAOpoF,EAAIooF,EAAQnsF,SAAU,GAChDqC,EAAIrC,SAIjC0sD,EAAM0/B,UAAY,SAAU/pF,GAI1B,IAHA,IAAI0sD,EAAOrC,EAAMqC,KAAK1sD,GAClB2oF,EAAS3oF,EAAIrC,OACbqsF,EAAM,IAAI5qF,MAAMupF,GACX3qF,EAAI,EAAGA,EAAI2qF,EAAQ3qF,IAC1BgsF,EAAIhsF,GAAKgC,EAAIhC,GAAK0uD,EAEpB,OAAOs9B,GAKT3/B,EAAMsG,MAAQ,SAAe3wD,EAAK4pF,GAChC,OAAO9qF,EAAKiD,KAAKsoD,EAAMs/B,SAAS3pF,EAAK4pF,KAIvCv/B,EAAM4/B,YAAc,SAAqBjqF,GACvC,OAAOlB,EAAKiD,KAAKsoD,EAAMw/B,eAAe7pF,KAIxCqqD,EAAM6/B,QAAU,SAAiBlqF,GAG/B,IAFA,IAAI0sD,EAAOrC,EAAMqC,KAAK1sD,GAClB0B,EAAI,GACC1D,EAAIgC,EAAIrC,OAAS,EAAGK,GAAK,EAAGA,IACnC0D,EAAE4K,KAAKxN,EAAKwD,IAAItC,EAAIhC,GAAK0uD,IAE3B,OAAOrC,EAAMqC,KAAKhrD,IAKpB2oD,EAAM8/B,OAAS,SAAgBnqF,GAG7B,IAFA,IAAI0oF,EAASr+B,EAAMq+B,OAAO1oF,GACtB0B,EAAI,GACC1D,EAAIgC,EAAIrC,OAAS,EAAGK,GAAK,EAAGA,IACnC0D,EAAE4K,KAAKxN,EAAKwD,IAAItC,EAAIhC,GAAK0qF,IAE3B,OAAOr+B,EAAMq+B,OAAOhnF,IAKtB2oD,EAAM+/B,SAAW,SAAkBpqF,GACjC,OAAOqqD,EAAMsG,MAAM3wD,GAAOqqD,EAAMqC,KAAK1sD,IAKvCqqD,EAAMggC,UAAY,SAAmBrqF,GACnC,IAAI2oF,EAAS3oF,EAAIrC,OACb4qF,EAAOvoF,EAAIlC,QAAQg/C,KAAK+qC,GAC5B,MAAO,CACLU,EAAMzpF,EAAKI,MAAOypF,EAAU,GAAK,GACjCJ,EAAMzpF,EAAKI,MAAOypF,EAAU,GAAK,GACjCJ,EAAMzpF,EAAKI,MAAiB,EAAVypF,EAAc,GAAK,KAOzCt+B,EAAMigC,UAAY,SAAmBtqF,EAAKuqF,EAAgBC,EAAQC,GAChE,IAGIzsF,EAAG8tD,EAAM4+B,EAAO17D,EAAG+/B,EAHnB47B,EAAc3qF,EAAIlC,QAAQg/C,KAAK+qC,GAC/B+C,EAAe,CAACL,EAAe5sF,QAC/B0C,EAAIL,EAAIrC,OAQZ,IALsB,qBAAX6sF,IACTA,EAAS,EAAI,GACM,qBAAVC,IACTA,EAAQ,EAAI,GAETzsF,EAAI,EAAGA,EAAIusF,EAAe5sF,OAAQK,IAGrC0sF,EAAQrqF,GAFRyrD,EAAIy+B,EAAevsF,KACfwsF,EAAS1+B,GAAK,EAAI0+B,EAASC,IAE/Bz7D,EAAIlwB,EAAKC,MAAM+oF,EAAK4C,EAAO,EAAGrqF,EAAI,IAClC0uD,EAAQ+4B,EAAK4C,EAAQ17D,EAAG,EAAG,GAC3B47D,EAAa5sF,IAAM,EAAI+wD,GAAS47B,EAAY37D,EAAI,GAAK+/B,EAAQ47B,EAAY37D,GAG3E,OAAO47D,GAKTvgC,EAAMwgC,WAAa,SAAoB7qF,EAAKgvB,EAAG87D,GAC7C,IAAIvC,EAAOvoF,EAAIlC,QAAQg/C,KAAK+qC,GACxBkD,EAAY/7D,GAAKu5D,EAAK5qF,QAAUmtF,EAAY,GAAK,KAAOA,EAAY,EAAI,GACxE15E,EAAQkiD,SAASy3B,GACjBjP,EAAOiP,EAAY35E,EACvB,OAAIA,EAAQ,EAAIm3E,EAAK5qF,OACZ4qF,EAAKn3E,EAAQ,GAAK0qE,GAAQyM,EAAKn3E,GAASm3E,EAAKn3E,EAAQ,IAErDm3E,EAAKn3E,EAAQ,IAOxBi5C,EAAM2gC,kBAAoB,SAA2BhrF,EAAKirF,EAAOC,GAC/D,IAGIrmF,EAAO7G,EAHPmtF,EAAU,EACVztF,EAAMsC,EAAIrC,OACVytF,GAAS,EAMb,IAHa,WAATF,IACFE,GAAS,GAENptF,EAAI,EAAGA,EAAIN,EAAKM,IACnB6G,EAAQ7E,EAAIhC,IACPotF,GAAUvmF,EAAQomF,IACjBG,GAAUvmF,GAASomF,IACvBE,IAIJ,OAAOA,EAAUztF,GAKnB2sD,EAAMghC,UAAY,SAAmBrrF,EAAKsrF,GACxCA,EAASA,GAAU,EACnB,IAIIttF,EAJAomB,EAAQimC,EAAMgpB,IAAIrzE,GAClBurF,GAAYlhC,EAAMoD,IAAIztD,GAAOokB,GAASknE,EACtC5tF,EAAMsC,EAAIrC,OACV6tF,EAAO,GAGX,IAAKxtF,EAAI,EAAGA,EAAIstF,EAAQttF,IACtBwtF,EAAKxtF,GAAK,EACZ,IAAKA,EAAI,EAAGA,EAAIN,EAAKM,IACnBwtF,EAAK1sF,EAAKu0E,IAAIv0E,EAAKC,OAAQiB,EAAIhC,GAAKomB,GAASmnE,GAAYD,EAAS,KAAO,EAE3E,OAAOE,GAKTnhC,EAAMuC,WAAa,SAAoBiiB,EAAM4c,GAC3C,IAIIztF,EAJAg/E,EAAI3yB,EAAMqC,KAAKmiB,GACf5uE,EAAIoqD,EAAMqC,KAAK++B,GACfC,EAAU7c,EAAKlxE,OACfguF,EAAS,IAAIvsF,MAAMssF,GAGvB,IAAK1tF,EAAI,EAAGA,EAAI0tF,EAAS1tF,IACvB2tF,EAAO3tF,IAAM6wE,EAAK7wE,GAAKg/E,IAAMyO,EAAKztF,GAAKiC,GAEzC,OAAOoqD,EAAM1nD,IAAIgpF,IAAWD,EAAU,IAKxCrhC,EAAMmC,UAAY,SAAmBqiB,EAAM4c,GACzC,OAAOphC,EAAMuC,WAAWiiB,EAAM4c,GAC1BphC,EAAMsG,MAAMke,EAAM,GAClBxkB,EAAMsG,MAAM86B,EAAM,IAIxBphC,EAAMuhC,cAAiB,SAAU/c,EAAM4c,GAIrC,OAHA5c,EAAOxkB,EAAM4+B,KAAKpa,GAClB4c,EAAOphC,EAAM4+B,KAAKwC,GAEXphC,EAAMmC,UAAUqiB,EAAM4c,IAK/BphC,EAAMwhC,WAAa,SAAoB7rF,EAAKK,GAM1C,IALA,IAAIyrF,EAAKzhC,EAAMqC,KAAK1sD,GAChB0wD,EAAQrG,EAAMsG,MAAM3wD,GACpBtC,EAAMsC,EAAIrC,OACVouF,EAAU,EAEL/tF,EAAI,EAAGA,EAAIN,EAAKM,IACvB+tF,GAAWjtF,EAAKw0C,KAAKtzC,EAAIhC,GAAK8tF,GAAMp7B,EAAOrwD,GAE7C,OAAO0rF,EAAU/rF,EAAIrC,QAIvB0sD,EAAM2hC,SAAW,SAAkBhsF,GACjC,OAAOqqD,EAAMwhC,WAAW7rF,EAAK,IAI/BqqD,EAAM4hC,SAAW,SAAkBjsF,GACjC,OAAOqqD,EAAMwhC,WAAW7rF,EAAK,GAAK,GAIpC,IAAIunF,EAASl9B,EAAM7xB,WAQnB,SAAUgvD,GACR,IAAK,IAAIxpF,EAAI,EAAGA,EAAIwpF,EAAM7pF,OAAQK,KAAK,SAAUypF,GAG/CF,EAAOE,GAAY,SAASyE,EAAU1qD,GACpC,IAAIxhC,EAAM,GACNhC,EAAI,EACJmuF,EAAUvkF,KAOd,GALI+yC,EAAWuxC,KACb1qD,EAAO0qD,EACPA,GAAW,GAGT1qD,EAIF,OAHAomD,YAAW,WACTpmD,EAAK5lB,KAAKuwE,EAAS5E,EAAOE,GAAU7rE,KAAKuwE,EAASD,OAE7CtkF,KAGT,GAAIA,KAAKjK,OAAS,EAAG,CAEnB,IADAwuF,GAAuB,IAAbD,EAAoBtkF,KAAOA,KAAKg+E,YACnC5nF,EAAImuF,EAAQxuF,OAAQK,IACzBgC,EAAIhC,GAAKqsD,EAAMo9B,GAAU0E,EAAQnuF,IACnC,OAAOgC,EAGT,OAAOqqD,EAAMo9B,GAAU7/E,KAAK,GAAIskF,IA3BG,CA6BpC1E,EAAMxpF,IA9BX,CA+BI,iBAAkBsiD,MAAM,MAI5B,SAAUknC,GACR,IAAK,IAAIxpF,EAAI,EAAGA,EAAIwpF,EAAM7pF,OAAQK,KAAK,SAAUypF,GAG/CF,EAAOE,GAAY,SAASyE,EAAU1qD,GACpC,IAAIxhC,EAAM,GACNhC,EAAI,EACJmuF,EAAUvkF,KAOd,GALI+yC,EAAWuxC,KACb1qD,EAAO0qD,EACPA,GAAW,GAGT1qD,EAIF,OAHAomD,YAAW,WACTpmD,EAAK5lB,KAAKuwE,EAAS5E,EAAOE,GAAU7rE,KAAKuwE,EAASD,OAE7CtkF,KAGT,GAAIA,KAAKjK,OAAS,EAAG,CAGnB,IAFiB,WAAb8pF,IACF0E,GAAuB,IAAbD,EAAoBtkF,KAAOA,KAAKg+E,aACrC5nF,EAAImuF,EAAQxuF,OAAQK,IACzBgC,EAAIhC,GAAKqsD,EAAMo9B,GAAU0E,EAAQnuF,IACnC,OAAoB,IAAbkuF,EACD7hC,EAAMo9B,GAAUp9B,EAAM3hC,MAAM+7D,SAASzkF,IACrCA,EAGR,OAAOqqD,EAAMo9B,GAAU7/E,KAAK,GAAIskF,IA9BG,CAgCpC1E,EAAMxpF,IAjCX,CAkCG,+LAE0DsiD,MAAM,MAKnE,SAAUknC,GACR,IAAK,IAAIxpF,EAAI,EAAGA,EAAIwpF,EAAM7pF,OAAQK,KAAK,SAAUypF,GAC/CF,EAAOE,GAAY,WACjB,IAII2E,EAJApsF,EAAM,GACNhC,EAAI,EACJmuF,EAAUvkF,KACV+1B,EAAOv+B,MAAMo5B,UAAU16B,MAAM8d,KAAKkkC,WAKtC,GAAInF,EAAWhd,EAAKA,EAAKhgC,OAAS,IAAK,CACrCyuF,EAAmBzuD,EAAKA,EAAKhgC,OAAS,GACtC,IAAI0uF,EAAa1uD,EAAK7/B,MAAM,EAAG6/B,EAAKhgC,OAAS,GAM7C,OAJAiqF,YAAW,WACTwE,EAAiBxwE,KAAKuwE,EACA5E,EAAOE,GAAU/sD,MAAMyxD,EAASE,OAEjDzkF,KAIPwkF,OAAmB9lF,EACnB,IAAIgmF,EAAkB,SAAyBC,GAC7C,OAAOliC,EAAMo9B,GAAU/sD,MAAMyxD,EAAS,CAACI,GAAQ1+E,OAAO8vB,KAK1D,GAAI/1B,KAAKjK,OAAS,EAAG,CAEnB,IADAwuF,EAAUA,EAAQvG,YACX5nF,EAAImuF,EAAQxuF,OAAQK,IACzBgC,EAAIhC,GAAKsuF,EAAgBH,EAAQnuF,IACnC,OAAOgC,EAIT,OAAOssF,EAAgB1kF,KAAK,KArCO,CAuCpC4/E,EAAMxpF,IAxCX,CAyCG,8BAA8BsiD,MAAM,MAnjBtC,CAqjBC+J,EAAOvrD,MAER,SAASurD,EAAOvrD,GAGjBurD,EAAM4E,QAAU,SAAiB7uD,GAC/B,IAMI0B,EAAID,EAAGomF,EANPllF,EAAI,EACJypF,EAAM,CACR,mBAAoB,kBAAmB,mBACtC,kBAAmB,qBAAwB,mBAE1CC,EAAM,kBAIV,IAFAxE,GAAOpmF,EAAIC,EAAK1B,GAAK,IACrB6nF,IAAQnmF,EAAK,IAAOhD,EAAKmE,IAAIglF,GACtBllF,EAAI,EAAGA,IACZ0pF,GAAOD,EAAIzpF,KAAOlB,EACpB,OAAO/C,EAAKmE,IAAI,mBAAqBwpF,EAAM3qF,GAAMmmF,GAQnD59B,EAAMqiC,OAAS,SAAgBtsF,GAC7B,IAAIusF,EAAIr/B,EAAIs/B,EAAIC,EAAIC,EAChB99D,EAAG3uB,EAEHqB,EAAI,CAAC,oBAAwB,oBACzB,sBAAwB,qBACxB,sBAAwB,oBACxB,oBAAwB,mBACxB,mBAAwB,iBAGhC,GAFAirF,EAAKvsF,EACLC,EAAI,EACM,GAALD,GAAmB,GAALA,EACf,OAAO,EASX,IAPIA,GAAK,IAELusF,EAAKvsF,GADLC,EAAIvB,EAAKC,MAAM,EAAIqB,KAGvBktD,EAAK,GAAOq/B,EAAKA,GACjBC,EAAK,EAAI9tF,EAAKitD,GACd+gC,EAAMprF,EAAE,GACHstB,EAAI,EAAGA,GAAK,EAAGA,IAChB89D,GAAOx/B,EACPw/B,GAAOprF,EAAEstB,GAGb,GADA69D,EAAKC,EAAMH,EAAK,GAAM7tF,EAAKmE,IAAI2pF,IAAOD,EAAK,IAAO7tF,EAAKmE,IAAI0pF,GAAMA,EAC7DvsF,GAAK,EACL,IAAK4uB,EAAI,EAAGA,GAAK3uB,EAAG2uB,IAChB69D,GAAM/tF,EAAKmE,IAAI0pF,EAAK,GACpBA,GAAM,EAGd,OAAOE,GAITxiC,EAAMyE,QAAU,SAAiB1uD,GAC/B,IAYIpC,EAAGkC,EAAG6sF,EAAIppC,EAZVmI,EAAI,EAAE,kBAAmB,mBAAoB,mBACxC,kBAAmB,mBAAoB,oBACtC,mBAAoB,mBAE1B2wB,EAAI,EAAE,iBAAkB,oBAAqB,oBACvC,kBAAmB,kBAAoB,mBACvC,mBAAoB,mBAC1BuQ,GAAO,EACP3sF,EAAI,EACJ4sF,EAAO,EACPC,EAAO,EACPrrF,EAAIzB,EAER,GAAIA,EAAI,kBACN,OAAOa,EAAAA,EAET,GAAIY,GAAK,EAAG,CAEV,KADA8hD,EAAM9hD,EAAI,EAAI,QAKZ,OAAOZ,EAAAA,EAHP+rF,GAAc,EAAJnrF,GAAc,EAAL,GAAU/C,EAAKitD,GAAKjtD,EAAKmD,IAAInD,EAAKitD,GAAKpI,GAC1D9hD,EAAI,EAAIA,EAWZ,IANAkrF,EAAKlrF,EAEH3B,EADE2B,EAAI,EACFA,KAECA,GAAKxB,GAAS,EAAJwB,GAAS,GAAK,EAE1B7D,EAAI,EAAGA,EAAI,IAAKA,EACnBkvF,GAAQA,EAAOphC,EAAE9tD,IAAMkC,EACvB+sF,EAAOA,EAAO/sF,EAAIu8E,EAAEz+E,GAGtB,GADA2lD,EAAMupC,EAAOD,EAAO,EAChBF,EAAKlrF,EACP8hD,GAAOopC,OACF,GAAIA,EAAKlrF,EACd,IAAK7D,EAAI,EAAGA,EAAIqC,IAAKrC,EACnB2lD,GAAO9hD,EACPA,IAMJ,OAHImrF,IACFrpC,EAAMqpC,EAAOrpC,GAERA,GAMT0G,EAAM8iC,OAAS,SAAgBzrF,EAAGtB,GAChC,OAAOiqD,EAAM+iC,YAAY1rF,EAAGtB,GAAKiqD,EAAMyE,QAAQptD,IAKjD2oD,EAAM+iC,YAAc,SAAqB1rF,EAAGtB,GAC1C,IAWIitF,EAXAC,EAAMjjC,EAAM4E,QAAQvtD,GACpB6rF,EAAK7rF,EACLiB,EAAM,EAAIjB,EACV8rF,EAAM7qF,EACNo6C,EAAI38C,EAAI,EAAIsB,EACZoR,EAAI,EAAI,MACRy0C,EAAI,EAAIxK,EACR0wC,EAAIlmC,EACJvpD,EAAI,EAEJ0vF,KAA4C,IAAjC5uF,EAAKmE,IAAKvB,GAAK,EAAKA,EAAI,EAAIA,GAAe,GAAJA,EAAU,IAGhE,GAAItB,EAAI,GAAKsB,GAAK,EAChB,OAAOR,IACF,GAAId,EAAIsB,EAAI,EAAG,CACpB,KAAO1D,GAAK0vF,EAAO1vF,IACjB2E,GAAO6qF,GAAOptF,IAAMmtF,EAEtB,OAAQ5qF,EAAM7D,EAAKyE,KAAKnD,EAAIsB,EAAI5C,EAAKmE,IAAI7C,GAAMktF,GAGjD,KAAOtvF,GAAK0vF,EAAO1vF,IAMjByvF,IADAlmC,EAAI,GAFJA,GAFA8lC,GAAMrvF,GAAKA,EAAI0D,IAEN6lD,GADTxK,GAAK,MAELjqC,EAAIiqC,EAAIswC,EAAKv6E,GAKf,OAAQ,EAAI26E,EAAI3uF,EAAKyE,KAAKnD,EAAIsB,EAAI5C,EAAKmE,IAAI7C,GAAMktF,IAInDjjC,EAAMsjC,YAAc,SAAqBttF,GACvC,OAAOA,EAAI,EAAIa,IAAMmpD,EAAM4E,QAAQ5uD,EAAI,IAIzCgqD,EAAMiR,UAAY,SAAmBj7D,GACnC,OAAOA,EAAI,EAAIa,IAAMmpD,EAAMyE,QAAQzuD,EAAI,IAIzCgqD,EAAMujC,YAAc,SAAqBvtF,EAAG4+D,GAE1C,OAAQ5+D,EAAI,KAAO4+D,EAAI,IACjBngE,EAAKyE,IAAI8mD,EAAMwjC,cAAcxtF,EAAG4+D,IAC/B5U,EAAMiR,UAAUj7D,GAAKgqD,EAAMiR,UAAU2D,GAAM5U,EAAMiR,UAAUj7D,EAAI4+D,IAIxE5U,EAAMwjC,cAAgB,SAAuBxtF,EAAG4+D,GAC9C,OAAO5U,EAAMsjC,YAAYttF,GAAKgqD,EAAMsjC,YAAY1uB,GAAK5U,EAAMsjC,YAAYttF,EAAI4+D,IAK7E5U,EAAMyjC,YAAc,SAAqBztF,EAAG4+D,GAC1C,OAAO5U,EAAMiR,UAAUj7D,GAAKgqD,EAAMiR,UAAUj7D,EAAI4+D,IAKlD5U,EAAM0jC,OAAS,SAAgB3tF,EAAGyB,GAEhC,KAAIzB,GAAK,GAAKyB,GAAK,GAGnB,OAAQzB,EAAIyB,EAAI,IACV/C,EAAKyE,IAAI8mD,EAAM2jC,OAAO5tF,EAAGyB,IACzBwoD,EAAMyE,QAAQ1uD,GAAKiqD,EAAMyE,QAAQjtD,GAAKwoD,EAAMyE,QAAQ1uD,EAAIyB,IAKhEwoD,EAAM2jC,OAAS,SAAgB5tF,EAAGyB,GAChC,OAAOwoD,EAAM4E,QAAQ7uD,GAAKiqD,EAAM4E,QAAQptD,GAAKwoD,EAAM4E,QAAQ7uD,EAAIyB,IAMjEwoD,EAAM4jC,OAAS,SAAgB7tF,EAAGsB,EAAGq7C,GACnC,IAOIgnC,EAAImK,EAAIV,EAAKC,EAPbU,EAAQ,MACRlvB,EAAI,EACJmvB,EAAM1sF,EAAIq7C,EACVsxC,EAAM3sF,EAAI,EACV4sF,EAAM5sF,EAAI,EACVoR,EAAI,EACJy0C,EAAI,EAAI6mC,EAAMhuF,EAAIiuF,EAStB,IALIvvF,EAAKwD,IAAIilD,GAAK4mC,IAChB5mC,EAAI4mC,GAENV,EADAlmC,EAAI,EAAIA,EAGD0X,GAAK,MAIV1X,EAAI,GAFJ2mC,EAAKjvB,GAAKliB,EAAIkiB,GAAK7+D,IAAMkuF,GADzBvK,EAAK,EAAI9kB,KAC6Bv9D,EAAIqiF,KAE7Bx8B,EACTzoD,EAAKwD,IAAIilD,GAAK4mC,IAChB5mC,EAAI4mC,GACNr7E,EAAI,EAAIo7E,EAAKp7E,EACThU,EAAKwD,IAAIwQ,GAAKq7E,IAChBr7E,EAAIq7E,GAENV,IADAlmC,EAAI,EAAIA,GACCz0C,EAGTy0C,EAAI,GAFJ2mC,IAAOxsF,EAAIu9D,IAAMmvB,EAAMnvB,GAAK7+D,IAAMsB,EAAIqiF,IAAOsK,EAAMtK,KAEtCx8B,EACTzoD,EAAKwD,IAAIilD,GAAK4mC,IAChB5mC,EAAI4mC,GACNr7E,EAAI,EAAIo7E,EAAKp7E,EACThU,EAAKwD,IAAIwQ,GAAKq7E,IAChBr7E,EAAIq7E,GAGNV,GADAD,GADAjmC,EAAI,EAAIA,GACEz0C,IAENhU,EAAKwD,IAAIkrF,EAAM,GAAO,OAvBXvuB,KA2BjB,OAAOwuB,GAKTpjC,EAAMkkC,UAAY,SAAmBziC,EAAGpqD,GACtC,IAIItB,EAAQkuB,EAAG0uD,EAAGwR,EAAIC,EAAMC,EAJxB3rF,EAAI,EACJpB,EAAKD,EAAI,EACTitF,EAAM,KACNC,EAAMvkC,EAAM4E,QAAQvtD,GAGxB,GAAIoqD,GAAK,EACP,OAAOhtD,EAAK2uD,IAAI,IAAK/rD,EAAI,IAAM5C,EAAKiD,KAAKL,IAC3C,GAAIoqD,GAAK,EACP,OAAO,EAmBT,IAlBIpqD,EAAI,GACN+sF,EAAO3vF,EAAKmE,IAAItB,GAChB+sF,EAAO5vF,EAAKyE,IAAI5B,GAAM8sF,EAAO,GAAKG,GAClCJ,EAAM1iC,EAAI,GAAOA,EAAI,EAAIA,EAEzB1rD,GAAK,QAAc,QADnBkuB,EAAIxvB,EAAKiD,MAAM,EAAIjD,EAAKmE,IAAIurF,OACG,EAAIlgE,GAAK,OAAc,OAAJA,IAAgBA,EAC9Dw9B,EAAI,KACN1rD,GAAKA,GACPA,EAAItB,EAAK2uD,IAAI,KACA/rD,EAAI5C,EAAKw0C,IAAI,EAAI,GAAK,EAAI5xC,GAAKtB,GAAK,EAAItB,EAAKiD,KAAKL,IAAK,KAIlEtB,EADE0rD,GADJx9B,EAAI,EAAI5sB,GAAK,KAAY,IAAJA,IAEf5C,EAAKw0C,IAAIwY,EAAIx9B,EAAG,EAAI5sB,GAEpB,EAAI5C,EAAKmE,IAAI,GAAK6oD,EAAIx9B,IAAM,EAAIA,IAGlCvrB,EAAI,GAAIA,IAAK,CACjB,GAAI3C,GAAK,EACP,OAAO,EAUT,IAHAA,GAAMkuB,GADN0uD,GALM3yB,EAAM+iC,YAAY1rF,EAAGtB,GAAK0rD,IAE9Bx9B,EADE5sB,EAAI,EACFgtF,EAAO5vF,EAAKyE,MAAMnD,EAAIuB,GAAMA,GAAM7C,EAAKmE,IAAI7C,GAAKquF,IAEhD3vF,EAAKyE,KAAKnD,EAAIuB,EAAK7C,EAAKmE,IAAI7C,GAAKwuF,MAExB,EAAI,GAAM9vF,EAAKu0E,IAAI,EAAG2J,IAAMt7E,EAAI,GAAKtB,EAAI,OAC/C,IACPA,EAAI,IAAOA,EAAIkuB,IACbxvB,EAAKwD,IAAIgsB,GAAKqgE,EAAMvuF,EACtB,MAGJ,OAAOA,GAKTiqD,EAAMyK,IAAM,SAAa10D,GACvB,IAcIkuB,EAAGugE,EAAI5G,EAAKtkC,EAdZ6oC,EAAM,EAAE,mBAAoB,kBAAuB,qBAC3C,oBAAuB,oBAAqB,oBAC7C,oBAAqB,oBAAqB,kBAC1C,iBAAmB,iBAAkB,gBACrC,eAAgB,gBAAiB,gBAChC,eAAgB,aAAe,aAC/B,YAAc,WAAa,YAC3B,WAAa,QAAU,UACvB,UAAY,OAAS,SACrB,QACRzpF,EAAIypF,EAAI7uF,OAAS,EACjBmxF,GAAQ,EACRvnC,EAAI,EACJg5B,EAAK,EAWT,IARIngF,EAAI,IACNA,GAAKA,EACL0uF,GAAQ,GAIVD,EAAK,GADLvgE,EAAI,GAAK,EAAIluB,IACA,EAEP2C,EAAI,EAAGA,IACXklF,EAAM1gC,EACNA,EAAIsnC,EAAKtnC,EAAIg5B,EAAKiM,EAAIzpF,GACtBw9E,EAAK0H,EAIP,OADAtkC,EAAMr1B,EAAIxvB,EAAKyE,KAAKnD,EAAIA,EAAI,IAAOosF,EAAI,GAAKqC,EAAKtnC,GAAKg5B,GAC/CuO,EAAQnrC,EAAM,EAAI,EAAIA,GAK/B0G,EAAM2K,KAAO,SAAc50D,GACzB,OAAO,EAAIiqD,EAAMyK,IAAI10D,IAKvBiqD,EAAM0kC,QAAU,SAAiBjjC,GAC/B,IACI1rD,EAAGyhD,EAAKvzB,EAAGkgE,EADXzrF,EAAI,EAER,GAAI+oD,GAAK,EACP,OAAQ,IACV,GAAIA,GAAK,EACP,OAAO,IAKT,IAJA0iC,EAAM1iC,EAAI,EAAKA,EAAI,EAAIA,EAEvB1rD,GAAK,SAAY,QAAc,QAD/BkuB,EAAIxvB,EAAKiD,MAAM,EAAIjD,EAAKmE,IAAIurF,EAAK,OAEhB,EAAIlgE,GAAK,OAAc,OAAJA,IAAgBA,GAC7CvrB,EAAI,EAAGA,IAEZ3C,IADAyhD,EAAMwI,EAAM2K,KAAK50D,GAAKouF,IACV,mBAAsB1vF,EAAKyE,KAAKnD,EAAIA,GAAKA,EAAIyhD,GAE3D,OAAQiK,EAAI,EAAK1rD,GAAKA,GAKxBiqD,EAAM2kC,SAAW,SAAkBljC,EAAGpqD,EAAGq7C,GACvC,IAIIkyC,EAAKC,EAAKV,EAAIlgE,EAAG0uD,EAAQ58E,EAAG+uF,EAAI1B,EAAGnP,EAAGoQ,EAJtCC,EAAM,KACNhtF,EAAKD,EAAI,EACT0tF,EAAKryC,EAAI,EACTh6C,EAAI,EAER,GAAI+oD,GAAK,EACP,OAAO,EACT,GAAIA,GAAK,EACP,OAAO,EAwBT,IAvBIpqD,GAAK,GAAKq7C,GAAK,GACjByxC,EAAM1iC,EAAI,GAAOA,EAAI,EAAIA,EAEzB1rD,GAAK,QAAc,QADnBkuB,EAAIxvB,EAAKiD,MAAM,EAAIjD,EAAKmE,IAAIurF,OACG,EAAIlgE,GAAI,OAAc,OAAJA,IAAgBA,EAC7Dw9B,EAAI,KACN1rD,GAAKA,GACP+uF,GAAM/uF,EAAIA,EAAI,GAAK,EACnBqtF,EAAI,GAAK,GAAK,EAAI/rF,EAAI,GAAM,GAAK,EAAIq7C,EAAI,IACzCuhC,EAAKl+E,EAAItB,EAAKiD,KAAKotF,EAAK1B,GAAKA,GAAM,GAAK,EAAI1wC,EAAI,GAAK,GAAK,EAAIr7C,EAAI,KAC7DytF,EAAK,EAAI,EAAI,GAAK,EAAI1B,IAC3BrtF,EAAIsB,GAAKA,EAAIq7C,EAAIj+C,EAAKyE,IAAI,EAAI+6E,MAE9B2Q,EAAMnwF,EAAKmE,IAAIvB,GAAKA,EAAIq7C,IACxBmyC,EAAMpwF,EAAKmE,IAAI85C,GAAKr7C,EAAIq7C,IAKtB38C,EADE0rD,GAHJx9B,EAAIxvB,EAAKyE,IAAI7B,EAAIutF,GAAOvtF,IAExB48E,EAAIhwD,GADJ0uD,EAAIl+E,EAAKyE,IAAIw5C,EAAImyC,GAAOnyC,IAGlBj+C,EAAKw0C,IAAI5xC,EAAI48E,EAAIxyB,EAAG,EAAIpqD,GAExB,EAAI5C,EAAKw0C,IAAIyJ,EAAIuhC,GAAK,EAAIxyB,GAAI,EAAI/O,IAE1C2xC,GAAQrkC,EAAM4E,QAAQvtD,GAAK2oD,EAAM4E,QAAQlS,GAAKsN,EAAM4E,QAAQvtD,EAAIq7C,GAC1Dh6C,EAAI,GAAIA,IAAK,CACjB,GAAU,IAAN3C,GAAiB,IAANA,EACb,OAAOA,EAST,IALAA,GAAMkuB,GADN0uD,GAFM3yB,EAAMglC,MAAMjvF,EAAGsB,EAAGq7C,GAAK+O,IAC7Bx9B,EAAIxvB,EAAKyE,IAAI5B,EAAK7C,EAAKmE,IAAI7C,GAAKgvF,EAAKtwF,EAAKmE,IAAI,EAAI7C,GAAKsuF,MAExC,EAAI,GAAM5vF,EAAKu0E,IAAI,EAAG2J,GAAKr7E,EAAKvB,EAAIgvF,GAAM,EAAIhvF,QACpD,IACPA,EAAI,IAAOA,EAAIkuB,IACbluB,GAAK,IACPA,EAAI,IAAOA,EAAIkuB,EAAI,IACjBxvB,EAAKwD,IAAIgsB,GAAKqgE,EAAMvuF,GAAK2C,EAAI,EAC/B,MAEJ,OAAO3C,GAKTiqD,EAAMglC,MAAQ,SAAejvF,EAAGsB,EAAGq7C,GAEjC,IAAI4lC,EAAY,IAANviF,GAAiB,IAANA,EAAY,EAC/BtB,EAAKyE,IAAI8mD,EAAM4E,QAAQvtD,EAAIq7C,GAAKsN,EAAM4E,QAAQvtD,GACrC2oD,EAAM4E,QAAQlS,GAAKr7C,EAAI5C,EAAKmE,IAAI7C,GAAK28C,EACrCj+C,EAAKmE,IAAI,EAAI7C,IACxB,QAAIA,EAAI,GAAKA,EAAI,KAEbA,GAAKsB,EAAI,IAAMA,EAAIq7C,EAAI,GAElB4lC,EAAKt4B,EAAM4jC,OAAO7tF,EAAGsB,EAAGq7C,GAAKr7C,EAE/B,EAAIihF,EAAKt4B,EAAM4jC,OAAO,EAAI7tF,EAAG28C,EAAGr7C,GAAKq7C,IAM9CsN,EAAMilC,MAAQ,SAAejvF,EAAG4+D,GAC9B,IAAI+d,EAAG/8E,EAAGG,EAAGyB,EAAG46E,EAGhB,GAFKxd,IACHA,EAAI5+D,GACFA,EACF,OAAOgqD,EAAM/jB,OAAOjmC,EAAG4+D,GAAG,WAAa,OAAO5U,EAAMilC,WACtD,GACEtS,EAAI3yB,EAAM06B,aACV9kF,EAAI,QAAUoqD,EAAM06B,aAAe,IAGnCtI,GAFAr8E,EAAI48E,EAAI,SAEA58E,GADRyB,EAAI/C,EAAKwD,IAAIrC,GAAK,UACD,KAAU4B,EAAI,OAAUzB,SAClCq8E,EAAI,SAAYA,EAAI,QAAWx8E,EAAIA,GAAK,EAAInB,EAAKmE,IAAI+5E,GAAKA,EAAIA,IACvE,OAAO/8E,EAAI+8E,GAKb3yB,EAAMklC,MAAQ,SAAeC,EAAOnvF,EAAG4+D,GACrC,IACIt9D,EAAIC,EAAIo7E,EAAG/8E,EAAGG,EAAGknF,EADjBmI,EAAQD,EAMZ,GAJKvwB,IACHA,EAAI5+D,GACDmvF,IACHA,EAAQ,GACNnvF,EAGF,OAFAinF,EAAMj9B,EAAM67B,MAAM7lF,EAAE4+D,IAChBgnB,OAAM,WAAa,OAAO57B,EAAMklC,MAAMC,MACnClI,EAELkI,EAAQ,IACVA,GAAS,GACX7tF,EAAK6tF,EAAQ,EAAI,EACjB5tF,EAAK,EAAI9C,EAAKiD,KAAK,EAAIJ,GACvB,EAAG,CACD,GAEE1B,EAAI,EAAI2B,GADRxB,EAAIiqD,EAAMilC,eAEJrvF,GAAK,GACbA,GAAIA,EAAIA,EACR+8E,EAAI3yB,EAAM06B,mBACJ/H,EAAI,EAAI,KAAQl+E,EAAKw0C,IAAIlzC,EAAG,IAC5BtB,EAAKmE,IAAI+5E,GAAK,GAAM58E,EAAEA,EAAIuB,GAAM,EAAI1B,EAAInB,EAAKmE,IAAIhD,KAEzD,GAAIuvF,GAASC,EACX,OAAO9tF,EAAK1B,EAEd,GACE+8E,EAAI3yB,EAAM06B,mBACE,IAAN/H,GACR,OAAOl+E,EAAKw0C,IAAI0pC,EAAG,EAAIyS,GAAS9tF,EAAK1B,GAKvC,SAAUunF,GACR,IAAK,IAAIxpF,EAAI,EAAGA,EAAIwpF,EAAM7pF,OAAQK,KAAK,SAAUypF,GAC/Cp9B,EAAMy6B,GAAG2C,GAAY,WACnB,OAAOp9B,EACHA,EAAM/qD,IAAIsI,MAAM,SAAS/C,GAAS,OAAOwlD,EAAMo9B,GAAU5iF,QAH1B,CAKpC2iF,EAAMxpF,IANX,CAOG,wCAAwCsiD,MAAM,MAGjD,SAAUknC,GACR,IAAK,IAAIxpF,EAAI,EAAGA,EAAIwpF,EAAM7pF,OAAQK,KAAK,SAAUypF,GAC/Cp9B,EAAMy6B,GAAG2C,GAAY,WACnB,OAAOp9B,EAAMA,EAAMo9B,GAAU/sD,MAAM,KAAMolB,aAFN,CAIpC0nC,EAAMxpF,IALX,CAMG,QAAQsiD,MAAM,MA1fhB,CA4fC+J,EAAOvrD,MACR,SAASurD,EAAOvrD,GAutBjB,SAAS4wF,EAAOtvF,EAAGsB,EAAGq7C,EAAG4yC,GASvB,IARA,IAMIC,EANAC,EAAK,EACLC,EAAK,EACLnuF,EAAK,EACLytF,EAAK,EACLW,EAAK,EACLnuF,EAAK,EAGF9C,EAAKwD,KAAKX,EAAKC,GAAMD,GAAMguF,GAChC/tF,EAAKD,EAGLmuF,EAAKV,GAFLQ,IAAOluF,EAAIquF,IAAOruF,EAAIq7C,EAAIgzC,GAAM3vF,GAAKsB,EAAI,EAAIquF,IAAOruF,EAAI,EAAIquF,EAAK,IAElDD,EAGfnuF,GAJAkuF,EAAKluF,EAAKiuF,EAAKC,IAGfD,GADAG,GAAU,IACChzC,EAAIgzC,GAAM3vF,GAAKsB,EAAI,EAAIquF,EAAK,IAAMruF,EAAI,EAAIquF,IACtCpuF,EAEfkuF,GADAT,EAAKU,EAAKF,EAAKR,EAEfU,GAAUV,EACVztF,GAAUytF,EACVA,EAAK,EAGP,OAAOztF,EAAKD,EA+bd,SAASsuF,EAAY5vF,GAAK,OAAOA,EAAItB,EAAKwD,IAAIlC,GAwC9C,SAAS6vF,EAAW3R,EAAG4C,EAAIb,GACzB,IAAI6P,EAAO,GACPC,EAAQ,EAERC,GAAM,GACNC,GAAM,GACNC,EAAK,GACLC,EAAO,EACPC,EAAO,EACPC,EAAS,EACTC,EAAS,EACTC,EAAO,CACT,kBACA,kBACA,kBACA,kBACA,kBACA,mBAEEC,EAAO,CACT,mBACA,mBACA,mBACA,mBACA,kBACA,oBAGEC,EAAW,GAAJvS,EAKX,GAAIuS,GAAQN,EACV,OAAO,EAKT,IAUIO,EAVAC,EAAO,EAAI1mC,EAAM8E,OAAOxE,IAAIkmC,EAAM,EAAG,EAAG,EAAG,GAAK,EAGlDE,EADEA,GAAQjyF,EAAKyE,IAAI8sF,EAAKhQ,GACjBvhF,EAAKw0C,IAAIy9C,EAAM1Q,GAEf,EA2BT,IARA,IAAI2Q,EAAMH,EACNI,GAAQV,EAAKM,IAbfC,EADExS,EAAIkS,EACEC,EAEAC,GAYNQ,EAAMF,EAAMC,EACZE,EAAS,EAITC,EAAM/Q,EAAK,EACNgR,EAAK,EAAGA,GAAMP,EAAOO,IAAM,CAQlC,IAPA,IAAIC,EAAQ,EACR5vF,EAAI,IAAOwvF,EAAMF,GAIjBj0C,EAAI,IAAOm0C,EAAMF,GAEZpO,EAAK,EAAGA,GAAMsN,EAAMtN,IAAM,CACjC,IAAI7/E,EASAwuF,EAAK7vF,EADDq7C,GAPJozC,EAAQvN,EAEL+N,GADL5tF,EAAKmtF,EAAOtN,EAAM,GACN,IAGN+N,GADN5tF,EAAI6/E,GACS,IAQX4O,EAAQD,EAAKA,EACjB,GAAIC,EAAQlB,EACV,MAEF,IAMImB,EANQ,EAAIpnC,EAAM8E,OAAOxE,IAAI4mC,EAAI,EAAG,EAAG,EAAG,GAMxB,GALV,EAAIlnC,EAAM8E,OAAOxE,IAAI4mC,EAAIjT,EAAG,EAAG,EAAG,GAKP,GACnCmT,GAAU3yF,EAAKyE,IAAI6sF,EAAKgB,KAE1BE,GADAG,EAAUb,EAAK7tF,EAAE,GAAKjE,EAAKyE,KAAM,GAAMiuF,GAAW1yF,EAAKw0C,IAAIm+C,EAAQL,IAKvED,GADAG,GAAY,EAAMv0C,EAAKsjC,EAAMvhF,EAAKiD,KAAK,EAAIjD,EAAKitD,IAEhDilC,EAAME,EACNA,GAAOD,EAKT,OADAF,GAAQI,IACIryF,EAAKyE,IAAI6sF,EAAKlP,GACjB,GAET6P,EAAOjyF,EAAKw0C,IAAIy9C,EAAM7P,KACV,EACH,EACF6P,EAGT,SAASW,EAAU5lC,EAAGh5C,EAAG7S,GACvB,IAAI0xF,EAAK,cACLC,EAAK,cACLC,GAAM,EACNC,EAAK,cACLC,GAAM,cACNC,EAAK,cACLC,GAAM,cACNC,EAAK,aACLC,GAAM,iBACNC,EAAK,eACLna,EAAK,MACLoa,EAAK,MACLC,EAAK,MACLC,EAAK,MACLC,EAAK,OACLC,EAAO,IAEPC,EAAK,GAAM,GAAM5mC,EACjBihC,EAAKjuF,EAAKiD,KAAKjD,EAAKmE,IAAI,GAAOyvF,EAAKA,KACpCpkE,EAAIy+D,MAAUA,EAAKoF,EAAKF,GAAMlF,EAAKgF,GAAMhF,EAAK8E,GAAM9E,EAAK4E,OACnD5E,EAAKqF,EAAKF,GAAMnF,EAAKiF,GAAMjF,EAAK+E,GAAM/E,EAAK6E,GACjD3xF,EAAIwyF,IAAMnkE,IAAMA,EAAIA,EAAIA,EAAIA,GAAKruB,EAAI,GACzC,IAAIw8E,EAAIxE,EAAKoa,EAAK/jE,EAElB,OADIruB,EAAIwyF,IAAMhW,IAAM6V,EAAKryF,EAAIsyF,EAAKjkE,EAAIruB,GAC/BquB,GAAKmuD,EAAI39E,EAAKmE,IAAI6P,EAAI,GAAO0/E,IA32CtC,SAAU5L,GACR,IAAK,IAAI5oF,EAAI,EAAGA,EAAI4oF,EAAKjpF,OAAQK,KAAK,SAAUwjC,GAE9C6oB,EAAM7oB,GAAQ,SAAS45B,EAAE15D,EAAGq7C,EAAGjqC,GAC7B,OAAMlL,gBAAgBwzD,GAEtBxzD,KAAK+qF,GAAKjxF,EACVkG,KAAKgrF,GAAK71C,EACVn1C,KAAKirF,GAAK//E,EACHlL,MAJE,IAAIwzD,EAAE15D,EAAGq7C,EAAGjqC,IAOvBu3C,EAAMy6B,GAAGtjD,GAAQ,SAAS9/B,EAAGq7C,EAAGjqC,GAC9B,IAAIggF,EAAUzoC,EAAM7oB,GAAM9/B,EAAGq7C,EAAGjqC,GAEhC,OADAggF,EAAQtjB,KAAO5nE,KACRkrF,GAGTzoC,EAAM7oB,GAAMhJ,UAAUu6D,OAAS,SAAS/yF,GACtC,IAAI0B,EAAIkG,KAAK+qF,GACT51C,EAAIn1C,KAAKgrF,GACT9/E,EAAIlL,KAAKirF,GACb,OAAI7yF,EACKqqD,EAAM47B,MAAMjmF,GAAK,WACtB,OAAOqqD,EAAM7oB,GAAMuxD,OAAOrxF,EAAGq7C,EAAGjqC,MAG3Bu3C,EAAM7oB,GAAMuxD,OAAOrxF,EAAGq7C,EAAGjqC,IAGpC,SAAU8mC,GACR,IAAK,IAAI57C,EAAI,EAAGA,EAAI47C,EAAKj8C,OAAQK,KAAK,SAAUg1F,GAC9C3oC,EAAM7oB,GAAMhJ,UAAUw6D,GAAU,SAAS5yF,GACvC,IAAIsB,EAAIkG,KAAK+qF,GACT51C,EAAIn1C,KAAKgrF,GACT9/E,EAAIlL,KAAKirF,GAGb,OAFKzyF,GAAW,IAANA,IACRA,EAAIwH,KAAK4nE,MACM,kBAANpvE,EACFiqD,EAAMy6B,GAAGxlF,IAAIsc,KAAKxb,GAAG,SAASA,GACnC,OAAOiqD,EAAM7oB,GAAMwxD,GAAQ5yF,EAAGsB,EAAGq7C,EAAGjqC,MAGjCu3C,EAAM7oB,GAAMwxD,GAAQ5yF,EAAGsB,EAAGq7C,EAAGjqC,IAZF,CAcnC8mC,EAAK57C,IAfV,CAgBG,cAAcsiD,MAAM,MAEvB,SAAU1G,GACR,IAAK,IAAI57C,EAAI,EAAGA,EAAI47C,EAAKj8C,OAAQK,KAAK,SAAUg1F,GAC9C3oC,EAAM7oB,GAAMhJ,UAAUw6D,GAAU,WAC9B,OAAO3oC,EAAM7oB,GAAMwxD,GAAQprF,KAAK+qF,GAAI/qF,KAAKgrF,GAAIhrF,KAAKirF,KAFhB,CAInCj5C,EAAK57C,IALV,CAMG,4BAA4BsiD,MAAM,MArDD,CAsDnCsmC,EAAK5oF,IAvDV,CAwDG,sMAIDsiD,MAAM,MAKR+J,EAAM0lB,OAAO1lB,EAAMI,KAAM,CACvBG,IAAK,SAAaxqD,EAAGoqD,EAAOC,GAE1B,OAAIrqD,EAAI,GAAKA,EAAI,EACR,EAEI,GAAToqD,GAAsB,GAARC,EACT,EAELD,EAAQ,KAAOC,EAAO,IAChB3rD,EAAKw0C,IAAIlzC,EAAGoqD,EAAQ,GAAK1rD,EAAKw0C,IAAI,EAAIlzC,EAAGqqD,EAAO,GACpDJ,EAAM0jC,OAAOvjC,EAAOC,GAEjB3rD,EAAKyE,KAAKinD,EAAQ,GAAK1rD,EAAKmE,IAAI7C,IACtBqqD,EAAO,GAAK3rD,EAAKmE,IAAI,EAAI7C,GAC1BiqD,EAAM2jC,OAAOxjC,EAAOC,KAIxCE,IAAK,SAAavqD,EAAGoqD,EAAOC,GAC1B,OAAQrqD,EAAI,GAAKA,EAAI,EAAe,GAATA,EAAI,GAASiqD,EAAMglC,MAAMjvF,EAAGoqD,EAAOC,IAGhEK,IAAK,SAAa1qD,EAAGoqD,EAAOC,GAC1B,OAAOJ,EAAM2kC,SAAS5uF,EAAGoqD,EAAOC,IAGlCiC,KAAM,SAAclC,EAAOC,GACzB,OAAOD,GAASA,EAAQC,IAG1Bi+B,OAAQ,SAAgBl+B,EAAOC,GAC7B,OAAOJ,EAAM2kC,SAAS,GAAKxkC,EAAOC,IAGpCwS,KAAM,SAAczS,EAAOC,GACzB,OAAQD,EAAQ,IAAQA,EAAQC,EAAO,IAIzCsoC,OAAQ,SAAgBvoC,EAAOC,GAC7B,IAAIuyB,EAAI3yB,EAAMklC,MAAM/kC,GACpB,OAAOwyB,GAAKA,EAAI3yB,EAAMklC,MAAM9kC,KAG9Bk/B,SAAU,SAAkBn/B,EAAOC,GACjC,OAAQD,EAAQC,GAAS3rD,EAAKw0C,IAAIkX,EAAQC,EAAM,IAAMD,EAAQC,EAAO,OAKzEJ,EAAM0lB,OAAO1lB,EAAM+C,SAAU,CAI3BxC,IAAK,SAAaxqD,EAAG6yF,EAAKC,GACxB,IAAIpnC,EAEJ,OAAI1rD,EAAI,EACC,EAEL6yF,GAAO,EACC,IAAN7yF,GAAW6yF,EAAM,EACZhyF,EAAAA,EAEC,IAANb,GAAmB,IAAR6yF,EACN,EAED,EAAI5oC,EAAM0jC,OAAOkF,EAAM,EAAGC,EAAM,GAChCp0F,EAAKw0C,IAAI2/C,EAAMC,EAAKD,EAAM,GAC1Bn0F,EAAKw0C,IAAIlzC,EAAI6yF,EAAI,EAAK,GACtBn0F,EAAKw0C,IAAK,EAAK2/C,EAAMC,EAAO9yF,IAAM6yF,EAAMC,GAAO,IAGzDpnC,EAAKmnC,EAAM7yF,GAAM8yF,EAAM9yF,EAAI6yF,GAEvBA,GADAC,GAAOA,EAAM9yF,EAAI6yF,IACP,EACH5oC,EAAMa,SAASN,KAAKqoC,EAAM,GAAK,GAAIA,EAAMC,EAAM,GAAK,EAAGpnC,KAGpEnB,IAAK,SAAavqD,EAAG6yF,EAAKC,GACxB,OAAI9yF,EAAI,EACC,EACFiqD,EAAMglC,MAAO4D,EAAM7yF,GAAM6yF,EAAM7yF,EAAI8yF,GAAMD,EAAM,EAAGC,EAAM,IAGjEpoC,IAAK,SAAa1qD,EAAG6yF,EAAKC,GACxB,OAAOA,GAAOD,GAAO,EAAI5oC,EAAM2kC,SAAS5uF,EAAG6yF,EAAM,EAAGC,EAAM,GAAK,KAGjExmC,KAAM,SAAcumC,EAAKC,GACvB,OAAQA,EAAM,EAAKA,GAAOA,EAAM,QAAK5sF,GAGvC22D,KAAM,SAAcg2B,EAAKC,GACvB,OAAQD,EAAM,EAAMC,GAAOD,EAAM,IAAOA,GAAOC,EAAM,SAAM5sF,GAI7DysF,OAAQ,SAAgBE,EAAKC,GAG3B,OAFgC,EAAvB7oC,EAAMklC,MAAM0D,EAAM,GAEdA,GADmB,EAAvB5oC,EAAMklC,MAAM2D,EAAM,GACDA,IAG5BvJ,SAAU,SAAkBsJ,EAAKC,GAC/B,KAAIA,GAAO,GAEX,OAAO,EAAIA,EAAMA,GAAOD,EAAMC,EAAM,IAC/BD,GAAOC,EAAM,IAAMA,EAAM,IAAMA,EAAM,OAM9C7oC,EAAM0lB,OAAO1lB,EAAM8oC,OAAQ,CACzBvoC,IAAK,SAAaxqD,EAAGgzF,EAAOC,GAC1B,OAAIA,EAAQ,EAAY,EAEhBA,GAASv0F,EAAKw0C,IAAIlzC,EAAIgzF,EAAO,GAAKt0F,EAAKw0C,IAAI+/C,EAAO,IAAOv0F,EAAKitD,IAGxEpB,IAAK,SAAavqD,EAAGgzF,EAAOC,GAC1B,OAAOv0F,EAAK+2D,MAAMz1D,EAAIgzF,GAASC,GAASv0F,EAAKitD,GAAK,IAGpDjB,IAAK,SAASgB,EAAGsnC,EAAOC,GACtB,OAAOD,EAAQC,EAAQv0F,EAAKsuE,IAAItuE,EAAKitD,IAAMD,EAAI,MAGjD48B,OAAQ,SAAgB0K,GACtB,OAAOA,GAGTn2B,KAAM,SAAcm2B,GAClB,OAAOA,GAGTL,OAAQ,SAAgBK,EAAOC,GAC7B,OAAOhpC,EAAMilC,QACTxwF,EAAKiD,KAAK,GAAK,EAAIsoD,EAAMklC,MAAM,MAAS8D,EAAQD,KAOxD/oC,EAAM0lB,OAAO1lB,EAAMiB,UAAW,CAC5BV,IAAK,SAAaxqD,EAAGwrD,GACnB,OAAIxrD,EAAI,EACC,EACK,IAANA,GAAmB,IAARwrD,EAAa,GAC5B9sD,EAAKyE,KAAKqoD,EAAM,EAAI,GAAK9sD,EAAKmE,IAAI7C,GAAKA,EAAI,EAAKwrD,EAAM,EAC7C9sD,EAAKmE,IAAI,GAAKonD,EAAM4E,QAAQrD,EAAM,KAGjDjB,IAAK,SAAavqD,EAAGwrD,GACnB,OAAIxrD,EAAI,EACC,EACFiqD,EAAM+iC,YAAYxhC,EAAM,EAAGxrD,EAAI,IAGxC0qD,IAAK,SAASgB,EAAGF,GACf,OAAO,EAAIvB,EAAMkkC,UAAUziC,EAAG,GAAMF,IAGtCc,KAAO,SAASd,GACd,OAAOA,GAIT88B,OAAQ,SAAgB98B,GACtB,OAAOA,EAAM9sD,EAAKw0C,IAAI,EAAK,GAAK,EAAIsY,GAAO,IAG7CqR,KAAM,SAAcrR,GAClB,OAAQA,EAAM,EAAI,EAAKA,EAAM,EAAI,GAGnCmnC,OAAQ,SAAgBnnC,GACtB,OAA8B,EAAvBvB,EAAMklC,MAAM3jC,EAAM,IAG3B+9B,SAAU,SAAkB/9B,GAC1B,OAAO,EAAIA,KAOfvB,EAAM0lB,OAAO1lB,EAAM4C,YAAa,CAC9BrC,IAAK,SAAaxqD,EAAGkzF,GACnB,OAAOlzF,EAAI,EAAI,EAAIkzF,EAAOx0F,EAAKyE,KAAK+vF,EAAOlzF,IAG7CuqD,IAAK,SAAavqD,EAAGkzF,GACnB,OAAOlzF,EAAI,EAAI,EAAI,EAAItB,EAAKyE,KAAK+vF,EAAOlzF,IAG1C0qD,IAAK,SAASgB,EAAGwnC,GACf,OAAQx0F,EAAKmE,IAAI,EAAI6oD,GAAKwnC,GAG5B5mC,KAAO,SAAS4mC,GACd,OAAO,EAAIA,GAGb5K,OAAQ,SAAU4K,GAChB,OAAQ,EAAIA,EAAQx0F,EAAKmE,IAAI,IAG/Bg6D,KAAM,WACJ,OAAO,GAGT81B,OAAQ,SAAgBO,GACtB,OAAQ,EAAIA,EAAOx0F,EAAKmE,IAAIonD,EAAM06B,eAGpC4E,SAAW,SAAS2J,GAClB,OAAOx0F,EAAKw0C,IAAIggD,GAAO,MAO3BjpC,EAAM0lB,OAAO1lB,EAAM0E,MAAO,CACxBnE,IAAK,SAAaxqD,EAAGovF,EAAO6D,GAC1B,OAAIjzF,EAAI,EACC,EACK,IAANA,GAAqB,IAAVovF,EAAe,EAAI6D,EAC9Bv0F,EAAKyE,KAAKisF,EAAQ,GAAK1wF,EAAKmE,IAAI7C,GAAKA,EAAIizF,EACjChpC,EAAM4E,QAAQugC,GAASA,EAAQ1wF,EAAKmE,IAAIowF,KAG1D1oC,IAAK,SAAavqD,EAAGovF,EAAO6D,GAC1B,OAAIjzF,EAAI,EACC,EACFiqD,EAAM+iC,YAAYoC,EAAOpvF,EAAIizF,IAGtCvoC,IAAK,SAASgB,EAAG0jC,EAAO6D,GACtB,OAAOhpC,EAAMkkC,UAAUziC,EAAG0jC,GAAS6D,GAGrC3mC,KAAO,SAAS8iC,EAAO6D,GACrB,OAAO7D,EAAQ6D,GAGjBp2B,KAAM,SAAcuyB,EAAO6D,GACzB,GAAG7D,EAAQ,EAAG,OAAQA,EAAQ,GAAK6D,GAIrCN,OAAQ,SAAgBvD,EAAO6D,GAC7B,OAAOhpC,EAAMklC,MAAMC,GAAS6D,GAG9B1J,SAAU,SAAkB6F,EAAO6D,GACjC,OAAO7D,EAAQ6D,EAAQA,KAK3BhpC,EAAM0lB,OAAO1lB,EAAMkpC,SAAU,CAC3B3oC,IAAK,SAAaxqD,EAAGovF,EAAO6D,GAC1B,OAAIjzF,GAAK,EACA,EACFtB,EAAKyE,MAAMisF,EAAQ,GAAK1wF,EAAKmE,IAAI7C,GAAKizF,EAAQjzF,EACrCiqD,EAAM4E,QAAQugC,GAASA,EAAQ1wF,EAAKmE,IAAIowF,KAG1D1oC,IAAK,SAAavqD,EAAGovF,EAAO6D,GAC1B,OAAIjzF,GAAK,EACA,EACF,EAAIiqD,EAAM+iC,YAAYoC,EAAO6D,EAAQjzF,IAG9C0qD,IAAK,SAASgB,EAAG0jC,EAAO6D,GACtB,OAAOA,EAAQhpC,EAAMkkC,UAAU,EAAIziC,EAAG0jC,IAGxC9iC,KAAO,SAAS8iC,EAAO6D,GACrB,OAAQ7D,EAAQ,EAAK6D,GAAS7D,EAAQ,QAAKlpF,GAG7C22D,KAAM,SAAcuyB,EAAO6D,GACzB,OAAOA,GAAS7D,EAAQ,IAG1BuD,OAAQ,SAAgBvD,EAAO6D,GAC7B,OAAOA,EAAQhpC,EAAMklC,MAAMC,IAG7B7F,SAAU,SAAkB6F,EAAO6D,GACjC,KAAI7D,GAAS,GAEb,OAAO6D,EAAQA,IAAU7D,EAAQ,IAAMA,EAAQ,IAAMA,EAAQ,OAMjEnlC,EAAM0lB,OAAO1lB,EAAMmpC,YAAa,CAC9B5oC,IAAK,SAAaxqD,EAAGoqD,EAAOC,GAC1B,OAAU,IAANrqD,GAAqB,IAAVoqD,EACNC,EACM,IAANrqD,GAAoB,IAATqqD,EACXD,EACF1rD,EAAKyE,IAAIzE,EAAKmE,IAAIunD,GAAS1rD,EAAKmE,IAAIwnD,IAASD,EAAQ,GAC5C1rD,EAAKmE,IAAI7C,IAAMqqD,EAAO,GACtB3rD,EAAKmE,IAAI,EAAInE,EAAKw0C,IAAIlzC,EAAGoqD,MAG3CG,IAAK,SAAavqD,EAAGoqD,EAAOC,GAC1B,OAAIrqD,EAAI,EACC,EACAA,EAAI,EACJ,EACD,EAAItB,EAAKw0C,IAAI,EAAIx0C,EAAKw0C,IAAIlzC,EAAGoqD,GAAQC,IAG/CK,IAAK,SAAagB,EAAGtB,EAAOC,GAC1B,OAAO3rD,EAAKw0C,IAAI,EAAIx0C,EAAKw0C,IAAI,EAAIwY,EAAG,EAAIrB,GAAO,EAAID,IAGrDkC,KAAO,SAASlC,EAAOC,GACrB,OAAQA,EAAOJ,EAAMyE,QAAQ,EAAI,EAAItE,GAC7BH,EAAMyE,QAAQrE,GAAUJ,EAAMyE,QAAQ,EAAI,EAAItE,EAAQC,IAGhEi+B,OAAQ,SAAgBl+B,EAAOC,GAC7B,OAAO3rD,EAAKw0C,IAAI,EAAIx0C,EAAKw0C,IAAI,GAAI,EAAImX,GAAO,EAAID,IAGlDyS,KAAM,SAAczS,EAAOC,GACzB,GAAMD,GAAS,GAAKC,GAAQ,GAAgB,IAAVD,GAAwB,IAATC,EAEjD,OAAO3rD,EAAKw0C,KAAKkX,EAAQ,IAAMA,EAAQC,EAAO,GAAI,EAAID,IAGxDm/B,SAAU,WACR,MAAM,IAAIlkF,MAAM,mCAQpB4kD,EAAM0lB,OAAO1lB,EAAM0G,UAAW,CAC5BnG,IAAK,SAAaxqD,EAAG0rF,EAAIp7B,GACvB,OAAItwD,GAAK,EACA,EACFtB,EAAKyE,KAAKzE,EAAKmE,IAAI7C,GAAK,GAAMtB,EAAKmE,IAAI,EAAInE,EAAKitD,IACvCjtD,EAAKmE,IAAIytD,GAAS5xD,EAAKw0C,IAAIx0C,EAAKmE,IAAI7C,GAAK0rF,EAAI,IAC5C,EAAIp7B,EAAQA,KAG/B/F,IAAK,SAAavqD,EAAG0rF,EAAIp7B,GACvB,OAAItwD,EAAI,EACC,EACF,GACF,GAAMiqD,EAAMyK,KAAKh2D,EAAKmE,IAAI7C,GAAK0rF,GAAMhtF,EAAKiD,KAAK,EAAI2uD,EAAQA,KAGlE5F,IAAK,SAASgB,EAAGggC,EAAIp7B,GACnB,OAAO5xD,EAAKyE,KAAK,mBAAsBmtD,EAAQrG,EAAM0kC,QAAQ,EAAIjjC,GAAKggC,IAGxEp/B,KAAM,SAAco/B,EAAIp7B,GACtB,OAAO5xD,EAAKyE,IAAIuoF,EAAKp7B,EAAQA,EAAQ,IAGvCg4B,OAAQ,SAAgBoD,GACtB,OAAOhtF,EAAKyE,IAAIuoF,IAGlB7uB,KAAM,SAAc6uB,EAAIp7B,GACtB,OAAO5xD,EAAKyE,IAAIuoF,EAAKp7B,EAAQA,IAG/BqiC,OAAQ,SAAgBjH,EAAIp7B,GAC1B,OAAO5xD,EAAKyE,IAAI8mD,EAAMilC,QAAU5+B,EAAQo7B,IAG1CnC,SAAU,SAAkBmC,EAAIp7B,GAC9B,OAAQ5xD,EAAKyE,IAAImtD,EAAQA,GAAS,GAAK5xD,EAAKyE,IAAI,EAAIuoF,EAAKp7B,EAAQA,MAOrErG,EAAM0lB,OAAO1lB,EAAMopC,YAAa,CAC9B7oC,IAAK,SAAaxqD,EAAGwrD,EAAK8nC,GACxB,IAAIC,EAAM,MACV,OAAI70F,EAAKwD,IAAIoxF,GAAOC,EACXtpC,EAAM2H,SAASpH,IAAIxqD,EAAGwrD,GAE3B9sD,EAAKwD,IAAIlC,GAAKuzF,EACT70F,EAAKyE,IAAI8mD,EAAM4E,SAASrD,EAAM,GAAK,GAAK8nC,EAAMA,EAAM,EAC3C,GAAM50F,EAAKmE,IAAInE,EAAKitD,GAAKH,GAAOvB,EAAM4E,QAAQrD,EAAM,IAI/DA,EAAMxrD,GACRiqD,EAAMopC,YAAY9oC,IAAIvqD,EAAItB,EAAKiD,KAAK,EAAI,EAAI6pD,GAAMA,EAAI,EAAG8nC,GACzDrpC,EAAMopC,YAAY9oC,IAAIvqD,EAAGwrD,EAAK8nC,KAGrC/oC,IAAK,SAAavqD,EAAGwrD,EAAK8nC,GACxB,IAAIC,EAAM,MACNC,EAAiB,IAErB,GAAI90F,EAAKwD,IAAIoxF,GAAOC,EAClB,OAAOtpC,EAAM2H,SAASrH,IAAIvqD,EAAGwrD,GAG/B,IAAIioC,GAAO,EACPzzF,EAAI,IACNyzF,GAAO,EACPH,GAAOA,GAYT,IATA,IAAII,EAAOzpC,EAAM8E,OAAOxE,KAAK+oC,EAAK,EAAG,GACjC7uF,EAAQ8uF,EAAM,EAEdI,EAAYlvF,EACZhD,EAAIzB,EAAIA,GAAKA,EAAIA,EAAIwrD,GACrB7oD,EAAI,EACJ+oD,EAAIhtD,EAAKyE,KAAKmwF,EAAMA,EAAM,GAC1BjX,EAAI39E,EAAKyE,KAAKmwF,EAAMA,EAAM,EAAI,GAAM50F,EAAKmE,IAAI,GAChConD,EAAM4E,QAAQ,MAAUykC,EAClC3wF,EAAI6wF,GAAkBG,EAAYJ,GAAO9uF,EAAQ8uF,GACtDI,EAAYlvF,EACR9B,EAAI,IACN+oD,GAAM4nC,EAAMA,GAAQ,EAAI3wF,GACxB05E,GAAMiX,EAAMA,GAAQ,GAAK3wF,EAAI,MAI/B+wF,GAAQ,IAFRjvF,EAAQinD,EAAIzB,EAAMI,KAAKE,IAAI9oD,EAAGkB,EAAI,GAAK6oD,EAAM,GACzC6wB,EAAIpyB,EAAMI,KAAKE,IAAI9oD,EAAGkB,EAAE,EAAG6oD,EAAI,IAEnC7oD,IAGF,OAAO8wF,EAAQ,EAAIC,EAAQA,KAM/BzpC,EAAM0lB,OAAO1lB,EAAM8E,OAAQ,CACzBvE,IAAK,SAAaxqD,EAAGssD,EAAMV,GACzB,OAAOltD,EAAKyE,KAAK,GAAMzE,EAAKmE,IAAI,EAAInE,EAAKitD,IACzBjtD,EAAKmE,IAAI+oD,GAAOltD,EAAKw0C,IAAIlzC,EAAIssD,EAAM,IAAM,EAAIV,EAAMA,KAGrErB,IAAK,SAAavqD,EAAGssD,EAAMV,GACzB,MAAO,IAAO,EAAI3B,EAAMyK,KAAK10D,EAAIssD,GAAQ5tD,EAAKiD,KAAK,EAAIiqD,EAAMA,MAG/DlB,IAAK,SAASgB,EAAGY,EAAMV,GACrB,OAAQ,mBAAsBA,EAAM3B,EAAM0kC,QAAQ,EAAIjjC,GAAKY,GAG7DA,KAAO,SAASA,GACd,OAAOA,GAGTg8B,OAAQ,SAAgBh8B,GACtB,OAAOA,GAGTuQ,KAAM,SAAUvQ,GACd,OAAOA,GAGTqmC,OAAQ,SAAgBrmC,EAAMV,GAC5B,OAAO3B,EAAMilC,QAAUtjC,EAAMU,GAG/Bi9B,SAAW,SAASj9B,EAAMV,GACxB,OAAOA,EAAMA,KAOjB3B,EAAM0lB,OAAO1lB,EAAM2pC,OAAQ,CACzBppC,IAAK,SAAaxqD,EAAGizF,EAAO7D,GAC1B,OAAIpvF,EAAIizF,EACC,EACD7D,EAAQ1wF,EAAKw0C,IAAI+/C,EAAO7D,GAAU1wF,EAAKw0C,IAAIlzC,EAAGovF,EAAQ,IAGhE7kC,IAAK,SAAavqD,EAAGizF,EAAO7D,GAC1B,OAAIpvF,EAAIizF,EACC,EACF,EAAIv0F,EAAKw0C,IAAI+/C,EAAQjzF,EAAGovF,IAGjC1kC,IAAK,SAAagB,EAAGunC,EAAO7D,GAC1B,OAAO6D,EAAQv0F,EAAKw0C,IAAI,EAAIwY,EAAG,EAAI0jC,IAGrC9iC,KAAM,SAAc2mC,EAAO7D,GACzB,KAAIA,GAAS,GAEb,OAAQA,EAAQ1wF,EAAKw0C,IAAI+/C,EAAO7D,IAAWA,EAAQ,IAGrD9G,OAAQ,SAAgB2K,EAAO7D,GAC7B,OAAO6D,GAAS7D,EAAQ1wF,EAAKm1F,QAG/Bh3B,KAAM,SAAco2B,GAClB,OAAOA,GAGT1J,SAAW,SAAS0J,EAAO7D,GACzB,KAAIA,GAAS,GAEb,OAAQ6D,EAAMA,EAAQ7D,GAAU1wF,EAAKw0C,IAAIk8C,EAAQ,EAAG,IAAMA,EAAQ,OAOtEnlC,EAAM0lB,OAAO1lB,EAAM2H,SAAU,CAC3BpH,IAAK,SAAaxqD,EAAGwrD,GAEnB,OADAA,EAAMA,EAAM,MAAQ,MAAQA,EACpB,GAAG9sD,EAAKiD,KAAK6pD,GAAOvB,EAAM0jC,OAAO,GAAKniC,EAAI,IAC9C9sD,EAAKw0C,IAAI,EAAMlzC,EAAIA,EAAKwrD,IAASA,EAAM,GAAK,IAGlDjB,IAAK,SAAavqD,EAAGwrD,GACnB,IAAIsoC,EAAOtoC,EAAM,EACjB,OAAOvB,EAAMglC,OAAOjvF,EAAItB,EAAKiD,KAAK3B,EAAIA,EAAIwrD,KACtB,EAAI9sD,EAAKiD,KAAK3B,EAAIA,EAAIwrD,IAAOsoC,EAAMA,IAGzDppC,IAAK,SAASgB,EAAGF,GACf,IAAIxrD,EAAIiqD,EAAM2kC,SAAS,EAAIlwF,EAAKu0E,IAAIvnB,EAAG,EAAIA,GAAI,GAAMF,EAAK,IAE1D,OADAxrD,EAAItB,EAAKiD,KAAK6pD,GAAO,EAAIxrD,GAAKA,GACtB0rD,EAAI,GAAO1rD,GAAKA,GAG1BssD,KAAM,SAAcd,GAClB,OAAQA,EAAM,EAAK,OAAItlD,GAGzBoiF,OAAQ,WACN,OAAO,GAGTzrB,KAAM,WACJ,OAAO,GAGT81B,OAAQ,SAAgBnnC,GACtB,OAAOvB,EAAMilC,QAAUxwF,EAAKiD,KAAK6pD,GAAO,EAAIvB,EAAMklC,MAAM3jC,EAAM,MAGhE+9B,SAAU,SAAkB/9B,GAC1B,OAAQA,EAAO,EAAKA,GAAOA,EAAM,GAAMA,EAAM,EAAK3qD,EAAAA,OAAWqF,KAOjE+jD,EAAM0lB,OAAO1lB,EAAM8pC,QAAS,CAC1BvpC,IAAK,SAAaxqD,EAAGizF,EAAO7D,GAC1B,OAAIpvF,EAAI,GAAKizF,EAAQ,GAAK7D,EAAQ,EACzB,EACDA,EAAQ6D,EAASv0F,EAAKw0C,IAAKlzC,EAAIizF,EAAS7D,EAAQ,GACpD1wF,EAAKyE,KAAMzE,EAAKw0C,IAAKlzC,EAAIizF,EAAQ7D,KAGvC7kC,IAAK,SAAavqD,EAAGizF,EAAO7D,GAC1B,OAAOpvF,EAAI,EAAI,EAAI,EAAItB,EAAKyE,KAAKzE,EAAKw0C,IAAKlzC,EAAIizF,EAAQ7D,KAGzD1kC,IAAK,SAASgB,EAAGunC,EAAO7D,GACtB,OAAO6D,EAAQv0F,EAAKw0C,KAAKx0C,EAAKmE,IAAI,EAAI6oD,GAAI,EAAI0jC,IAGhD9iC,KAAO,SAAS2mC,EAAO7D,GACrB,OAAO6D,EAAQhpC,EAAMyE,QAAQ,EAAI,EAAI0gC,IAGvC9G,OAAQ,SAAgB2K,EAAO7D,GAC7B,OAAO6D,EAAQv0F,EAAKw0C,IAAIx0C,EAAKmE,IAAI,GAAI,EAAIusF,IAG3CvyB,KAAM,SAAco2B,EAAO7D,GACzB,OAAIA,GAAS,EACJ,EACF6D,EAAQv0F,EAAKw0C,KAAKk8C,EAAQ,GAAKA,EAAO,EAAIA,IAGnDuD,OAAQ,SAAgBM,EAAO7D,GAC7B,OAAO6D,EAAQv0F,EAAKw0C,KAAKx0C,EAAKmE,IAAIonD,EAAM06B,cAAe,EAAIyK,IAG7D7F,SAAU,SAAkB0J,EAAO7D,GACjC,OAAO6D,EAAQA,EAAQhpC,EAAMyE,QAAQ,EAAI,EAAI0gC,GACzC1wF,EAAKw0C,IAAI+W,EAAM8pC,QAAQznC,KAAK2mC,EAAO7D,GAAQ,MAOnDnlC,EAAM0lB,OAAO1lB,EAAM+pC,QAAS,CAC1BxpC,IAAK,SAAaxqD,EAAGsB,EAAGq7C,GACtB,OAAQ38C,EAAIsB,GAAKtB,EAAI28C,EAAK,EAAI,GAAKA,EAAIr7C,IAGzCipD,IAAK,SAAavqD,EAAGsB,EAAGq7C,GACtB,OAAI38C,EAAIsB,EACC,EACAtB,EAAI28C,GACH38C,EAAIsB,IAAMq7C,EAAIr7C,GACjB,GAGTopD,IAAK,SAASgB,EAAGpqD,EAAGq7C,GAClB,OAAOr7C,EAAKoqD,GAAK/O,EAAIr7C,IAGvBgrD,KAAM,SAAchrD,EAAGq7C,GACrB,MAAO,IAAOr7C,EAAIq7C,IAGpB2rC,OAAQ,SAAgBhnF,EAAGq7C,GACzB,OAAOsN,EAAMqC,KAAKhrD,EAAGq7C,IAGvBkgB,KAAM,WACJ,MAAM,IAAIx3D,MAAM,gCAGlBstF,OAAQ,SAAgBrxF,EAAGq7C,GACzB,OAAQr7C,EAAI,EAAIq7C,EAAI,GAAMA,EAAI,EAAIr7C,EAAI,IAAM,EAAI2oD,EAAM06B,aAAe,IAGvE4E,SAAU,SAAkBjoF,EAAGq7C,GAC7B,OAAOj+C,EAAKw0C,IAAIyJ,EAAIr7C,EAAG,GAAK,MAmChC2oD,EAAM0lB,OAAO1lB,EAAMa,SAAU,CAC3BN,IAAK,SAAa57B,EAAG3uB,EAAGyrD,GACtB,OAAc,IAANA,GAAiB,IAANA,EACfzrD,EAAIyrD,IAAO98B,EAAI,EAAI,EACrBq7B,EAAMujC,YAAYvtF,EAAG2uB,GAAKlwB,EAAKw0C,IAAIwY,EAAG98B,GAAKlwB,EAAKw0C,IAAI,EAAIwY,EAAGzrD,EAAI2uB,IAGnE27B,IAAK,SAAavqD,EAAGC,EAAGyrD,GACtB,IAAIuoC,EACA1E,EAAM,MAEV,GAAIvvF,EAAI,EACN,OAAO,EACT,GAAIA,GAAKC,EACP,OAAO,EACT,GAAIyrD,EAAI,GAAKA,EAAI,GAAKzrD,GAAK,EACzB,OAAOa,IAGT,IAAIhB,EAAI4rD,EACJpqD,GAFJtB,EAAItB,EAAKC,MAAMqB,IAEH,EACR28C,EAAI18C,EAAID,EACRu7E,EAAIj6E,EAAIq7C,EACR4lC,EAAK7jF,EAAKyE,IAAI8mD,EAAM4E,QAAQ0sB,GAAKtxB,EAAM4E,QAAQlS,GACjCsN,EAAM4E,QAAQvtD,GAAKA,EAAI5C,EAAKmE,IAAI/C,GAAK68C,EAAIj+C,EAAKmE,IAAI,EAAI/C,IAOxE,OAJEm0F,EADEn0F,GAAKwB,EAAI,IAAMi6E,EAAI,GACXgH,EAAK+M,EAAOxvF,EAAGwB,EAAGq7C,EAAG4yC,GAErB,EAAIhN,EAAK+M,EAAO,EAAIxvF,EAAG68C,EAAGr7C,EAAGiuF,GAElC7wF,EAAKI,MAAuB,EAAIywF,GAApB,EAAI0E,KAAyB,EAAI1E,MAOxDtlC,EAAM0lB,OAAO1lB,EAAM8G,OAAQ,CACzBvG,IAAK,SAAa57B,EAAG6sC,EAAG/P,GACtB,OAAI98B,IAAMA,IAAM,IAEZA,EAAI,EACC,EACFq7B,EAAMujC,YAAY5+D,EAAI6sC,EAAI,EAAGA,EAAI,GACpC/8D,EAAKw0C,IAAI,EAAIwY,EAAG98B,GAAKlwB,EAAKw0C,IAAIwY,EAAG+P,KAGvClR,IAAK,SAAavqD,EAAGy7D,EAAG/P,GACtB,IAAInpD,EAAM,EACVqsB,EAAI,EACJ,GAAI5uB,EAAI,EAAG,OAAO,EAClB,KAAO4uB,GAAK5uB,EAAG4uB,IACbrsB,GAAO0nD,EAAM8G,OAAOvG,IAAI57B,EAAG6sC,EAAG/P,GAEhC,OAAOnpD,KAOX0nD,EAAM0lB,OAAO1lB,EAAMiqC,QAAS,CAC1B1pC,IAAK,SAAa57B,EAAGuhC,EAAG0O,EAAG5+D,GAUzB,GAAG2uB,IAAMA,EAAI,EACX,OAAO,EACF,GAAGA,EAAI,GAAKA,EAAIiwC,GAAK1O,EAAIlwD,GAE9B,OAAO,EACF,GAAG2uB,EAAI3uB,GAAK2uB,EAAIiwC,EAErB,OAAO,EACF,GAAQ,EAAJA,EAAQ1O,EAGjB,OAAO,EAAJlwD,EAAQkwD,EAGFlG,EAAMiqC,QAAQ1pC,IAAI2F,EAAI0O,EAAI5+D,EAAI2uB,EAAGuhC,EAAGA,EAAI0O,EAAG1O,EAAIlwD,GAI/CgqD,EAAMiqC,QAAQ1pC,IAAIvqD,EAAI2uB,EAAGuhC,EAAGA,EAAI0O,EAAG5+D,GAGvC,GAAO,EAAJA,EAAQkwD,EAGhB,OAAOlG,EAAMiqC,QAAQ1pC,IAAIqU,EAAIjwC,EAAGuhC,EAAG0O,EAAG1O,EAAIlwD,GAErC,GAAG4+D,EAAI5+D,EAGZ,OAAOgqD,EAAMiqC,QAAQ1pC,IAAI57B,EAAGuhC,EAAGlwD,EAAG4+D,GAkBlC,IALA,IAAIs1B,EAAY,EAGZC,EAAc,EAEVx2F,EAAI,EAAGA,EAAIgxB,EAAGhxB,IAAK,CAGzB,KAAMu2F,EAAY,GAAKC,EAAcn0F,GAInCk0F,GAAa,EAAKt1B,GAAK1O,EAAIikC,GAG3BA,IAKFD,IAAcl0F,EAAIrC,IAAMihE,EAAIjhE,KAAOA,EAAI,IAAMuyD,EAAI0O,EAAI5+D,EAAIrC,EAAI,IAG/D,KAAMw2F,EAAcn0F,EAAGm0F,IAErBD,GAAa,EAAKt1B,GAAK1O,EAAIikC,GAI7B,OAAO11F,EAAKu0E,IAAI,EAAGv0E,EAAK2uD,IAAI,EAAG8mC,KAInC5pC,IAAK,SAAavqD,EAAGmwD,EAAG0O,EAAG5+D,GAYzB,GAAGD,EAAI,GAAKA,EAAI6+D,GAAK1O,EAAIlwD,GAEvB,OAAO,EACF,GAAGD,GAAKC,GAAKD,GAAK6+D,EAEvB,OAAO,EACF,GAAQ,EAAJA,EAAQ1O,EAGjB,OAAO,EAAJlwD,EAAQkwD,EAGFlG,EAAMiqC,QAAQ3pC,IAAI4F,EAAI0O,EAAI5+D,EAAID,EAAGmwD,EAAGA,EAAI0O,EAAG1O,EAAIlwD,GAI/C,EAAIgqD,EAAMiqC,QAAQ3pC,IAAItqD,EAAID,EAAI,EAAGmwD,EAAGA,EAAI0O,EAAG5+D,GAG/C,GAAO,EAAJA,EAAQkwD,EAGhB,OAAO,EAAIlG,EAAMiqC,QAAQ3pC,IAAIsU,EAAI7+D,EAAI,EAAGmwD,EAAG0O,EAAG1O,EAAIlwD,GAE7C,GAAG4+D,EAAI5+D,EAGZ,OAAOgqD,EAAMiqC,QAAQ3pC,IAAIvqD,EAAGmwD,EAAGlwD,EAAG4+D,GAqBlC,IATA,IAAIw1B,EAAY,EAIZF,EAAY,EAGZC,EAAc,EAEVx2F,EAAI,EAAGA,EAAIoC,EAAGpC,IAAK,CAGzB,KAAMy2F,EAAY,GAAKD,EAAcn0F,GAAG,CAItC,IAAIq0F,EAAS,EAAKz1B,GAAK1O,EAAIikC,GAE3BD,GAAaG,EACbD,GAAaC,EAGbF,IAQFC,GAHAF,IAAcl0F,EAAIrC,IAAMihE,EAAIjhE,KAAOA,EAAI,IAAMuyD,EAAI0O,EAAI5+D,EAAIrC,EAAI,IAM/D,KAAMw2F,EAAcn0F,EAAGm0F,IAErBC,GAAa,EAAKx1B,GAAK1O,EAAIikC,GAI7B,OAAO11F,EAAKu0E,IAAI,EAAGv0E,EAAK2uD,IAAI,EAAGgnC,OAQrCpqC,EAAM0lB,OAAO1lB,EAAMkH,QAAS,CAC1B3G,IAAK,SAAa57B,EAAGksD,GACnB,OAAIA,EAAI,GAAMlsD,EAAI,IAAO,GAAKA,EAAI,EACzB,EAGFlwB,EAAKw0C,IAAI4nC,EAAGlsD,GAAKlwB,EAAKyE,KAAK23E,GAAK7wB,EAAMiR,UAAUtsC,IAGzD27B,IAAK,SAAavqD,EAAG86E,GACnB,IAAIyZ,EAAS,GACb3lE,EAAI,EACJ,GAAI5uB,EAAI,EAAG,OAAO,EAClB,KAAO4uB,GAAK5uB,EAAG4uB,IACb2lE,EAAOroF,KAAK+9C,EAAMkH,QAAQ3G,IAAI57B,EAAGksD,IAEnC,OAAO7wB,EAAM1nD,IAAIgyF,IAGnBjoC,KAAO,SAASwuB,GACd,OAAOA,GAGTyO,SAAW,SAASzO,GAClB,OAAOA,GAGT0Z,YAAa,SAAqB1Z,GAChC,IAAIpvB,EAAI,EAAG98B,EAAI,EAAGmtC,EAAIr9D,EAAKyE,KAAK23E,GAChC,GACElsD,IACA88B,GAAKzB,EAAM06B,mBACJj5B,EAAIqQ,GACb,OAAOntC,EAAI,GAGb6lE,YAAa,SAAqB3Z,GAChC,IACIlsD,EACA8lE,EAAGv4B,EAAGw4B,EAAMC,EAAQtzF,EAAGq7C,EAAGk4C,EAAUC,EAAIC,EAFxCC,EAAMla,EAWV,IAPA6Z,EAAOj2F,EAAKiD,KAAKqzF,GACjBJ,EAASl2F,EAAKmE,IAAImyF,GAElB1zF,EAAa,QADbq7C,EAAI,KAAQ,KAAOg4C,GACd,KACLE,EAAW,OAAS,QAAUl4C,EAAI,KAClCm4C,EAAK,MAAS,QAAUn4C,EAAI,KAElB,CAKR,GAJA+3C,EAAIh2F,EAAKyhE,SAAW,GACpBhE,EAAIz9D,EAAKyhE,SACT40B,EAAK,GAAMr2F,EAAKwD,IAAIwyF,GACpB9lE,EAAIlwB,EAAKC,OAAO,EAAI2C,EAAIyzF,EAAKp4C,GAAK+3C,EAAIM,EAAM,KACvCD,GAAM,KAAU54B,GAAK24B,EACtB,OAAOlmE,EAEX,KAAKA,EAAI,GAAQmmE,EAAK,MAAW54B,EAAI44B,IAKhCr2F,EAAKmE,IAAIs5D,GAAKz9D,EAAKmE,IAAIgyF,GAAYn2F,EAAKmE,IAAIvB,GAAKyzF,EAAKA,GAAMp4C,IAAe/tB,EAAIgmE,EAAVI,EAAmB/qC,EAAMqiC,OAAO19D,EAAI,GAC1G,OAAOA,IAKf+jE,OAAQ,SAAgB7X,GACtB,OAAIA,EAAI,GACCtzE,KAAKgtF,YAAY1Z,GAEjBtzE,KAAKitF,YAAY3Z,MAK9B7wB,EAAM0lB,OAAO1lB,EAAMgrC,WAAY,CAC7BzqC,IAAK,SAAaxqD,EAAGsB,EAAGq7C,EAAGjqC,GACzB,OAAIiqC,GAAKr7C,GAAKoR,EAAIpR,GAAKoR,EAAIiqC,EAClB77C,IAEHd,EAAIsB,GAAKtB,EAAI28C,EACR,EACE38C,EAAI0S,EACH,GAAK1S,EAAIsB,KAAQq7C,EAAIr7C,IAAMoR,EAAIpR,IAChCtB,IAAM0S,EACL,GAAKiqC,EAAIr7C,GAET,GAAKq7C,EAAI38C,KAAQ28C,EAAIr7C,IAAMq7C,EAAIjqC,KAK/C63C,IAAK,SAAavqD,EAAGsB,EAAGq7C,EAAGjqC,GACzB,OAAIiqC,GAAKr7C,GAAKoR,EAAIpR,GAAKoR,EAAIiqC,EAClB77C,IACLd,GAAKsB,EACA,EACAtB,GAAK28C,EACL,EACL38C,GAAK0S,EACAhU,EAAKw0C,IAAIlzC,EAAIsB,EAAG,KAAOq7C,EAAIr7C,IAAMoR,EAAIpR,IAErC,EAAI5C,EAAKw0C,IAAIyJ,EAAI38C,EAAG,KAAO28C,EAAIr7C,IAAMq7C,EAAIjqC,KAGpDg4C,IAAK,SAAagB,EAAGpqD,EAAGq7C,EAAGjqC,GACzB,OAAIiqC,GAAKr7C,GAAKoR,EAAIpR,GAAKoR,EAAIiqC,EAClB77C,IAEH4qD,IAAOh5C,EAAIpR,IAAMq7C,EAAIr7C,GAChBA,GAAKq7C,EAAIr7C,GAAK5C,EAAKiD,KAAK+pD,IAAMh5C,EAAIpR,IAAMq7C,EAAIr7C,KAE5CA,GAAKq7C,EAAIr7C,IAAM,EAAI5C,EAAKiD,MAAM,EAAI+pD,IAAM,GAAMh5C,EAAIpR,IAAMq7C,EAAIr7C,OAKzEgrD,KAAM,SAAchrD,EAAGq7C,EAAGjqC,GACxB,OAAQpR,EAAIq7C,EAAIjqC,GAAK,GAGvB41E,OAAQ,SAAgBhnF,EAAGq7C,EAAGjqC,GAC5B,OAAIA,IAAMpR,EAAIq7C,GAAK,EACVA,EAAIj+C,EAAKiD,MAAMg7C,EAAIr7C,IAAMq7C,EAAIjqC,IAAMhU,EAAKiD,KAAK,GAC3C+Q,GAAKpR,EAAIq7C,GAAK,EAChBr7C,EAAI5C,EAAKiD,MAAMg7C,EAAIr7C,IAAMoR,EAAIpR,IAAM5C,EAAKiD,KAAK,QAD/C,GAKTk7D,KAAM,SAAcv7D,EAAGq7C,EAAGjqC,GACxB,OAAOA,GAGTigF,OAAQ,SAAgBrxF,EAAGq7C,EAAGjqC,GAC5B,IAAIkqE,EAAI3yB,EAAM06B,aACd,OAAI/H,GAAMlqE,EAAIpR,IAAMq7C,EAAIr7C,GACfA,EAAI5C,EAAKiD,KAAKi7E,GAAKjgC,EAAIr7C,IAAMoR,EAAIpR,IACnCq7C,EAAIj+C,EAAKiD,MAAM,EAAIi7E,IAAMjgC,EAAIr7C,IAAMq7C,EAAIjqC,KAGhD62E,SAAU,SAAkBjoF,EAAGq7C,EAAGjqC,GAChC,OAAQpR,EAAIA,EAAIq7C,EAAIA,EAAIjqC,EAAIA,EAAIpR,EAAIq7C,EAAIr7C,EAAIoR,EAAIiqC,EAAIjqC,GAAK,MAM7Du3C,EAAM0lB,OAAO1lB,EAAMirC,QAAS,CAC1B1qC,IAAK,SAAaxqD,EAAGsB,EAAGq7C,GACtB,OAAIA,GAAKr7C,EAAUR,IAEXd,GAAKsB,GAAKtB,GAAK28C,EAAK,EACzB,EAAIj+C,EAAKitD,GACRjtD,EAAKw0C,IAAIx0C,EAAKw0C,IAAIyJ,EAAIr7C,EAAG,GACf5C,EAAKw0C,IAAI,EAAIlzC,EAAIsB,EAAIq7C,EAAG,IAAK,KAG7C4N,IAAK,SAAavqD,EAAGsB,EAAGq7C,GACtB,OAAI38C,EAAIsB,EACC,EACAtB,EAAI28C,EACH,EAAIj+C,EAAKitD,GAAMjtD,EAAK2tE,KAAK3tE,EAAKiD,MAAM3B,EAAIsB,IAAIq7C,EAAIr7C,KACnD,GAGTopD,IAAK,SAASgB,EAAGpqD,EAAGq7C,GAClB,OAAOr7C,GAAK,GAAM,GAAM5C,EAAKkD,IAAIlD,EAAKitD,GAAKD,KAAO/O,EAAIr7C,IAGxDgrD,KAAM,SAAchrD,EAAGq7C,GACrB,OAAIA,GAAKr7C,EAAUR,KACXQ,EAAIq7C,GAAK,GAGnB2rC,OAAQ,SAAgBhnF,EAAGq7C,GACzB,OAAIA,GAAKr7C,EAAUR,KACXQ,EAAIq7C,GAAK,GAGnBkgB,KAAM,WACJ,MAAM,IAAIx3D,MAAM,gCAGlBstF,OAAQ,SAAgBrxF,EAAGq7C,GACzB,OAASr7C,EAAIq7C,GAAK,GAAOA,EAAIr7C,GAAK,EAChC5C,EAAKmD,IAAI,EAAInD,EAAKitD,GAAK1B,EAAM+pC,QAAQrB,OAAO,EAAG,KAGnDpJ,SAAU,SAAkBjoF,EAAGq7C,GAC7B,OAAIA,GAAKr7C,EAAUR,IACZpC,EAAKw0C,IAAIyJ,EAAIr7C,EAAG,GAAK,KAOhC2oD,EAAM0lB,OAAO1lB,EAAMkrC,QAAS,CAC1B3qC,IAAK,SAAaxqD,EAAG0rF,EAAI/uC,GACvB,OAAQA,GAAK,EAAK,EAAKj+C,EAAKyE,KAAKzE,EAAKwD,IAAIlC,EAAI0rF,GAAM/uC,IAAO,EAAIA,IAGjE4N,IAAK,SAAavqD,EAAG0rF,EAAI/uC,GACvB,OAAIA,GAAK,EAAY,EAElB38C,EAAI0rF,EACE,GAAMhtF,EAAKyE,KAAKnD,EAAI0rF,GAAM/uC,GAE1B,EAAI,GAAMj+C,EAAKyE,MAAOnD,EAAI0rF,GAAM/uC,IAI3C2P,KAAM,SAASo/B,GACb,OAAOA,GAGTpD,OAAQ,SAASoD,GACf,OAAOA,GAGT7uB,KAAM,SAAS6uB,GACb,OAAOA,GAGTnC,SAAU,SAASmC,EAAI/uC,GACrB,OAAO,EAAIA,EAAIA,GAGjBg2C,OAAQ,SAAgBjH,EAAI/uC,GAC1B,IAAIigC,EAAI3yB,EAAM06B,aAAe,GAE7B,OAAO+G,EAAM/uC,EAAIizC,EAAYhT,GAAKl+E,EAAKmE,IAAI,EAAK,EAAInE,EAAKwD,IAAI06E,OA+JjE3yB,EAAM0lB,OAAO1lB,EAAMmrC,MAAO,CACxB7qC,IAAK,SAAa8xB,EAAGgZ,EAAQC,GAE3B,IAAIxU,EAAK,EACLb,EAAKoV,EAELE,EAAQ,GACRC,EAAS,EAETC,GAAQ,GACRC,EAAO,MACPC,EAAQ,IACRC,EAAQ,IACRC,EAAQ,IACRC,EAAQ,KACRC,EAAQ,EACRC,EAAQ,GACRC,EAAQ,IACRC,EAAQ,KACRC,EAAQ,CACV,kBACA,kBACA,kBACA,iBACA,kBACA,mBACA,kBACA,oBAEEC,EAAQ,CACV,oBACA,oBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBAGF,GAAI/Z,GAAK,EACP,OAAO,EAKT,GAAIiZ,EAAK,GAAKxU,EAAK,GAAKb,EAAK,EAAG,OAAOn/E,IAEvC,IAAKvC,OAAO4D,SAASk6E,GACnB,OAAO,EAET,GAAIiZ,EAAKQ,EACP,OAAOjG,EAAWxT,EAAGyE,EAAIb,GAI3B,IASIoW,EATA/1F,EAAU,GAALg1F,EACLgB,EAASh2F,EAAK5B,EAAKmE,IAAIyyF,GAAQA,EAAK52F,EAAKmE,IAAI,GAAOonD,EAAM4E,QAAQvuD,GAClEi2F,EAAMj2F,EAAK,EAMXk2F,EAAW,IAALlB,EAEYe,EAAbf,GAAMK,EAAcI,EACpBT,GAAMM,EAAcI,EACpBV,GAAMO,EAAcI,EACAC,EAE7BI,GAAQ53F,EAAKmE,IAAIwzF,GAMjB,IAFA,IAAII,EAAM,EAED74F,EAAI,EAAGA,GAAK,GAAIA,IAAK,CAQ5B,IAPA,IAAI84F,EAAQ,EAKRC,GAAQ,EAAI/4F,EAAI,GAAKy4F,EAEhB7T,EAAK,EAAGA,GAAM+S,EAAO/S,IAAM,CAClC,IAAI7/E,EAAGi0F,EACHpB,EAAShT,GACX7/E,EAAI6/E,EAAKgT,EAAS,EAClBoB,EAAMN,EAAQC,EAAM73F,EAAKmE,IAAI8zF,EAAQR,EAAMxzF,GAAK0zF,IACvCF,EAAMxzF,GAAK0zF,EAAQM,GAAQH,IAEpC7zF,EAAI6/E,EAAK,EACToU,EAAMN,EAAQC,EAAM73F,EAAKmE,IAAI8zF,EAAQR,EAAMxzF,GAAK0zF,IACvCF,EAAMxzF,GAAK0zF,EAAQM,GAAQH,GAKlCI,GAAMnB,IAWRiB,GAFW7G,EARP2F,EAAShT,EACJnG,EAAI39E,EAAKiD,KAAkC,IAA3Bw0F,EAAMxzF,GAAK0zF,EAAQM,IAEnCta,EAAI39E,EAAKiD,KAAqC,KAA5Bw0F,EAAMxzF,GAAK0zF,EAASM,IAKnB7V,EAAIb,GACXmW,EAAMzzF,GAAMjE,EAAKyE,IAAIyzF,IAU9C,GAAIh5F,EAAIy4F,GAAQ,GAAOK,GAAShB,EAC9B,MAKFe,GAAOC,EAGT,GAAIA,EAAQhB,EACV,MAAM,IAAIrwF,MAAM,gCAIlB,OAFIoxF,EAAM,IACRA,EAAM,GACDA,GAGT/rC,IAAK,SAASgB,EAAG2pC,EAAQC,GAEvB,IAGI/F,EAAM,KACNsH,EAAU,GAGd,GAAIvB,EAAK,GANAD,EAMoB,EAAG,OAAOv0F,IAEvC,GAAI4qD,EAAI,GAAKA,EAAI,EAAG,OAAO5qD,IAC3B,GAAU,IAAN4qD,EAAS,OAAO,EACpB,GAAU,IAANA,EAAS,OAAO7qD,EAAAA,EAIpB,IAWIosD,EAXAs/B,EAAK+E,EAAU5lC,EAdV2pC,EAciBC,GAItBwB,EAAQ7sC,EAAMmrC,MAAM7qC,IAAIgiC,EAAI8I,EAAQC,GAAM5pC,EAS5CuB,EADE6pC,EAAQ,EACLp4F,EAAK2uD,IAAI,EAAKk/B,EAAK,GAEnBA,EAAK,EAMZ,IALA,IAIIkK,EAJAM,EAAQ9sC,EAAMmrC,MAAM7qC,IAAI0C,EAAIooC,EAAQC,GAAM5pC,EAKtCsrC,EAAO,EAAGA,EAAOH,EAASG,IAoBhC,GAnBAP,EAAMxpC,EAAO8pC,GAAS9pC,EAAKs/B,IAAQwK,EAAQD,GAC3CA,EAAQC,EAIRxK,EAAKt/B,EACDwpC,EAAM,IACRA,EAAM,EACNM,GAASrrC,GAIXqrC,EAAQ9sC,EAAMmrC,MAAM7qC,IAAIksC,EAAKpB,EAAQC,GAAM5pC,EAC3CuB,EAAKwpC,EAKM/3F,EAAKwD,IAAI+qD,EAAKs/B,GACdgD,EACT,OAAOkH,EAGX,MAAM,IAAIpxF,MAAM,mCAvjDnB,CA2jDC4kD,EAAOvrD,MAIR,SAASurD,EAAOvrD,GAEjB,IAAIwN,EAAOlN,MAAMo5B,UAAUlsB,KACvB4tC,EAAUmQ,EAAM3hC,MAAMwxB,QAE1B,SAASm9C,EAASt3C,GAChB,OAAO7F,EAAQ6F,IAAQA,aAAesK,EAGxCA,EAAM0lB,OAAO,CAGX2D,IAAK,SAAa1zE,EAAK+/C,GAErB,OAAIs3C,EAASt3C,IACNs3C,EAASt3C,EAAI,MAAKA,EAAM,CAAEA,IACxBsK,EAAM/qD,IAAIU,GAAK,SAAS6E,EAAO6mD,EAAKC,GACzC,OAAO9mD,EAAQk7C,EAAI2L,GAAKC,OAGrBtB,EAAM/qD,IAAIU,GAAK,SAAS6E,GAAS,OAAOA,EAAQk7C,MAIzDu3C,SAAU,SAAkBt3F,EAAK+/C,GAE/B,OAAIs3C,EAASt3C,IACNs3C,EAASt3C,EAAI,MAAKA,EAAM,CAAEA,IACxBsK,EAAM/qD,IAAIU,GAAK,SAAS6E,EAAO6mD,EAAKC,GACzC,OAAO9mD,EAAQk7C,EAAI2L,GAAKC,IAAQ,MAG7BtB,EAAM/qD,IAAIU,GAAK,SAAS6E,GAAS,OAAOA,EAAQk7C,MAIzDw3C,OAAQ,SAAgBv3F,EAAK+/C,GAC3B,OAAIs3C,EAASt3C,IACNs3C,EAASt3C,EAAI,MAAKA,EAAM,CAAEA,IACxBsK,EAAMmtC,SAASx3F,EAAKqqD,EAAMS,IAAI/K,KAEhCsK,EAAM/qD,IAAIU,GAAK,SAAS6E,GAAS,OAAOA,EAAQk7C,MAIzDy3C,SAAU,SAAkBx3F,EAAK+/C,GAC/B,IAAI2L,EAAKC,EAAK8rC,EAAU90F,EAAK+iF,EAAMK,EAAMpiC,EAAK+zC,EAE9C,QAAmBpxF,IAAftG,EAAIrC,aAAuC2I,IAAfy5C,EAAIpiD,OAClC,OAAOqC,EAAM+/C,EAMf,GAJA2lC,EAAO1lF,EAAIrC,OACXooF,EAAO/lF,EAAI,GAAGrC,OACdgmD,EAAM0G,EAAM67B,MAAMR,EAAM+R,EAAYJ,EAASt3C,GAAQA,EAAI,GAAGpiD,OAASooF,GACrE2R,EAAU,EACNL,EAASt3C,GAAM,CACjB,KAAO23C,EAAUD,EAAUC,IACzB,IAAKhsC,EAAM,EAAGA,EAAMg6B,EAAMh6B,IAAO,CAE/B,IADA/oD,EAAM,EACDgpD,EAAM,EAAGA,EAAMo6B,EAAMp6B,IAC1BhpD,GAAO3C,EAAI0rD,GAAKC,GAAO5L,EAAI4L,GAAK+rC,GAChC/zC,EAAI+H,GAAKgsC,GAAW/0F,EAGxB,OAAiB,IAAT+iF,GAA0B,IAAZgS,EAAiB/zC,EAAI,GAAG,GAAKA,EAErD,OAAO0G,EAAM/qD,IAAIU,GAAK,SAAS6E,GAAS,OAAOA,EAAQk7C,MAQzD43C,MAAM,SAAenb,EAAGP,GACtB,OAAO5xB,EAAMmtC,SAAShb,EAAEl9E,KAAI,SAASgvB,GAAI,MAAO,CAACA,MAAO,CAAC2tD,KAK3D2b,IAAK,SAAa53F,EAAK+/C,GAChBs3C,EAASr3F,EAAI,MAAKA,EAAM,CAAEA,IAC1Bq3F,EAASt3C,EAAI,MAAKA,EAAM,CAAEA,IAS/B,IAPA,IAMAp9C,EAAKgpD,EANDksC,EAA0B,IAAlB73F,EAAI,GAAGrC,QAA+B,IAAfqC,EAAIrC,OAAgB0sD,EAAMu7B,UAAU5lF,GAAOA,EAC9E83F,EAA2B,IAAlB/3C,EAAI,GAAGpiD,QAA+B,IAAfoiD,EAAIpiD,OAAgB0sD,EAAMu7B,UAAU7lC,GAAOA,EAC3E4D,EAAM,GACN+H,EAAM,EACNg6B,EAAOmS,EAAKl6F,OACZooF,EAAO8R,EAAK,GAAGl6F,OAER+tD,EAAMg6B,EAAMh6B,IAAO,CAGxB,IAFA/H,EAAI+H,GAAO,GACX/oD,EAAM,EACDgpD,EAAM,EAAGA,EAAMo6B,EAAMp6B,IAC1BhpD,GAAOk1F,EAAKnsC,GAAKC,GAAOmsC,EAAMpsC,GAAKC,GACnChI,EAAI+H,GAAO/oD,EAEb,OAAuB,IAAfghD,EAAIhmD,OAAgBgmD,EAAI,GAAKA,GAIvCrQ,IAAK,SAAatzC,EAAK+/C,GACrB,OAAOsK,EAAM/qD,IAAIU,GAAK,SAAS6E,GAAS,OAAO/F,EAAKw0C,IAAIzuC,EAAOk7C,OAIjEx8C,IAAK,SAAavD,GAChB,OAAOqqD,EAAM/qD,IAAIU,GAAK,SAAS6E,GAAS,OAAO/F,EAAKyE,IAAIsB,OAI1D5B,IAAK,SAAajD,GAChB,OAAOqqD,EAAM/qD,IAAIU,GAAK,SAAS6E,GAAS,OAAO/F,EAAKmE,IAAI4B,OAI1DvC,IAAK,SAAatC,GAChB,OAAOqqD,EAAM/qD,IAAIU,GAAK,SAAS6E,GAAS,OAAO/F,EAAKwD,IAAIuC,OAK1DkzF,KAAM,SAAc/3F,EAAK8rD,GACvB,IAAIksC,EAAQ,EACZh6F,EAAI,EAMJ,IAJIU,MAAMotD,KAAIA,EAAI,GAEdurC,EAASr3F,EAAI,MAAKA,EAAMA,EAAI,IAEzBhC,EAAIgC,EAAIrC,OAAQK,IACrBg6F,GAASl5F,EAAKw0C,IAAIx0C,EAAKwD,IAAItC,EAAIhC,IAAK8tD,GAEtC,OAAOhtD,EAAKw0C,IAAI0kD,EAAO,EAAIlsC,IAK7BmsC,MAAO,SAAej4F,EAAK+/C,GACzB,OAAOjhD,EAAKotE,KAAK7hB,EAAMutC,IAAI53F,EAAK+/C,IAAQsK,EAAM0tC,KAAK/3F,GAAOqqD,EAAM0tC,KAAKh4C,MAKvEm4C,IAAK,SAAax2F,EAAGq7C,GACnB,IACI/+C,EADAm6F,EAAS,GAEb,IAAKn6F,EAAI,EAAGA,EAAI0D,EAAE/D,OAAQK,IACxBm6F,EAAO7rF,KAAK5K,EAAE1D,GAAGF,SAEnB,IAAKE,EAAI,EAAGA,EAAIm6F,EAAOx6F,OAAQK,IAC7BsO,EAAKouB,MAAMy9D,EAAOn6F,GAAI++C,EAAE/+C,IAE1B,OAAOm6F,GAMTrtC,IAAK,SAAappD,GAUhB,IATA,IAMIqB,EANAkiF,EAAOvjF,EAAE/D,OACTunF,EAAOxjF,EAAE,GAAG/D,OACZo/C,EAAIsN,EAAMpO,SAASgpC,EAAMC,GACzBpyE,EAAIu3C,EAAM+tC,aAAa12F,EAAGq7C,GAC1Bt/C,EAAS,GACTO,EAAI,EAIDA,EAAIinF,EAAMjnF,IAEf,IADAP,EAAOO,GAAK,GACP+E,EAAImiF,EAAMniF,EAAI+P,EAAE,GAAGnV,OAAQoF,IAC9BtF,EAAOO,GAAG+E,EAAImiF,GAAQpyE,EAAE9U,GAAG+E,GAE/B,OAAOtF,GAITihE,IAAK,SAASA,EAAIh9D,GAChB,GAAiB,IAAbA,EAAE/D,OACJ,OAAO+D,EAAE,GAAG,GAAKA,EAAE,GAAG,GAAKA,EAAE,GAAG,GAAKA,EAAE,GAAG,GAI5C,IADA,IAAI22F,EAAc,EACTr6F,EAAI,EAAGA,EAAI0D,EAAE/D,OAAQK,IAAK,CAGjC,IADA,IAAIs6F,EAAY,GACP5sC,EAAM,EAAGA,EAAMhqD,EAAE/D,OAAQ+tD,IAAO,CACvC4sC,EAAU5sC,EAAM,GAAK,GACrB,IAAK,IAAIC,EAAM,EAAGA,EAAMjqD,EAAE/D,OAAQguD,IAC5BA,EAAM3tD,EACRs6F,EAAU5sC,EAAM,GAAGC,GAAOjqD,EAAEgqD,GAAKC,GACxBA,EAAM3tD,IACfs6F,EAAU5sC,EAAM,GAAGC,EAAM,GAAKjqD,EAAEgqD,GAAKC,IAM3C,IAAInrD,EAAOxC,EAAI,GAAK,EAAI,EACxBq6F,GAAe35B,EAAI45B,GAAa52F,EAAE,GAAG1D,GAAKwC,EAG5C,OAAO63F,GAGTE,kBAAmB,SAA2B72F,EAAGq7C,GAC/C,IAOAy7C,EAAMC,EAAOzwC,EAAMh5B,EAPfhxB,EAAI,EACR+E,EAAI,EACJ1C,EAAIqB,EAAE/D,OACNshE,EAAIv9D,EAAE,GAAG/D,OACT+2F,EAAS,EACT/xF,EAAM,EACNvC,EAAI,GAIJ,IADAo4F,GADA92F,EAAI2oD,EAAM6tC,IAAIx2F,EAAGq7C,IACR,GAAGp/C,OACRK,EAAI,EAAGA,EAAIqC,EAAGrC,IAAK,CAGrB,IAFAy6F,EAAQ/2F,EAAE1D,GAAGA,GACb+E,EAAI/E,EACCgxB,EAAIhxB,EAAI,EAAGgxB,EAAIiwC,EAAGjwC,IACjBypE,EAAQ35F,EAAKwD,IAAIZ,EAAEstB,GAAGhxB,MACxBy6F,EAAQ/2F,EAAEstB,GAAGhxB,GACb+E,EAAIisB,GAGR,GAAIjsB,GAAK/E,EACP,IAAIgxB,EAAI,EAAGA,EAAIwpE,EAAMxpE,IACnBg5B,EAAOtmD,EAAE1D,GAAGgxB,GACZttB,EAAE1D,GAAGgxB,GAAKttB,EAAEqB,GAAGisB,GACfttB,EAAEqB,GAAGisB,GAAKg5B,EAGd,IAAKjlD,EAAI/E,EAAI,EAAG+E,EAAI1C,EAAG0C,IAErB,IADA2xF,EAAShzF,EAAEqB,GAAG/E,GAAK0D,EAAE1D,GAAGA,GACpBgxB,EAAIhxB,EAAGgxB,EAAIwpE,EAAMxpE,IACnBttB,EAAEqB,GAAGisB,GAAKttB,EAAEqB,GAAGisB,GAAK0lE,EAAShzF,EAAE1D,GAAGgxB,GAIxC,IAAKhxB,EAAIqC,EAAI,EAAGrC,GAAK,EAAGA,IAAK,CAE3B,IADA2E,EAAM,EACDI,EAAI/E,EAAI,EAAG+E,GAAI1C,EAAI,EAAG0C,IACzBJ,GAAYvC,EAAE2C,GAAKrB,EAAE1D,GAAG+E,GAE1B3C,EAAEpC,IAAK0D,EAAE1D,GAAGw6F,EAAO,GAAK71F,GAAOjB,EAAE1D,GAAGA,GAEtC,OAAOoC,GAGTg4F,aAAc,SAAsB12F,EAAGq7C,GACrC,IAII38C,EAAGyB,EAAG62F,EAJNz5B,EAAI5U,EAAM6tC,IAAIx2F,EAAGq7C,GACjB0wC,EAAIxuB,EAAEthE,OACN2gF,EAAIrf,EAAE,GAAGthE,OACTmV,EAAI,EAGR,IAAKjR,EAAI,EAAGA,EAAI4rF,EAAG5rF,IAAK,CACtB,IAAI82F,EAAS92F,EACb,IAAK62F,EAAK72F,EAAE,EAAG62F,EAAKjL,EAAGiL,IACjB55F,EAAKwD,IAAI28D,EAAEy5B,GAAI72F,IAAM/C,EAAKwD,IAAI28D,EAAE05B,GAAQ92F,MAC1C82F,EAASD,GAEb,IAAIzQ,EAAMhpB,EAAEp9D,GAGZ,IAFAo9D,EAAEp9D,GAAKo9D,EAAE05B,GACT15B,EAAE05B,GAAU1Q,EACPyQ,EAAK72F,EAAE,EAAG62F,EAAKjL,EAAGiL,IAErB,IADA5lF,EAAImsD,EAAEy5B,GAAI72F,GAAKo9D,EAAEp9D,GAAGA,GACfzB,EAAIyB,EAAGzB,EAAIk+E,EAAGl+E,IACjB6+D,EAAEy5B,GAAIt4F,IAAM6+D,EAAEp9D,GAAGzB,GAAK0S,EAK5B,IAAKjR,EAAI4rF,EAAE,EAAG5rF,GAAK,EAAGA,IAAK,CAEzB,IADAiR,EAAImsD,EAAEp9D,GAAGA,GACJ62F,EAAK,EAAGA,EAAK72F,EAAG62F,IACnB,IAAKt4F,EAAIk+E,EAAE,EAAGl+E,EAAIyB,EAAE,EAAGzB,IACrB6+D,EAAEy5B,GAAIt4F,IAAM6+D,EAAEp9D,GAAGzB,GAAK6+D,EAAEy5B,GAAI72F,GAAKiR,EAIrC,IADAmsD,EAAEp9D,GAAGA,IAAMiR,EACN1S,EAAIqtF,EAAGrtF,EAAIk+E,EAAGl+E,IACjB6+D,EAAEp9D,GAAGzB,IAAM0S,EAGf,OAAOmsD,GAaT25B,YAAa,SAAqBpc,EAAGz/B,GACnC,IAEI87C,EAFA5qE,EAAOuuD,EAAE,GAAG7+E,OACZyC,EAAIiqD,EAAM67B,MAAM,EAAGj4D,GAAM,GAEzB6qE,GAAc,EAclB,YAZmBxyF,GAAfy2C,EAAE,GAAGp/C,SACPo/C,EAAIA,EAAEz9C,KAAI,SAAStB,GAAI,OAAOA,EAAE,MAChC86F,GAAc,GAGhBzuC,EAAMi7B,OAAOr3D,EAAO,GAAI,GAAI,GAAGmsB,SAAQ,SAASp8C,GAC9C66F,EAAQxuC,EAAMi7B,OAAOtnF,EAAI,EAAGiwB,GAAM3uB,KAAI,SAASyD,GAC7C,OAAO3C,EAAE2C,GAAKy5E,EAAEx+E,GAAG+E,MAErB3C,EAAEpC,IAAM++C,EAAE/+C,GAAKqsD,EAAM1nD,IAAIk2F,IAAUrc,EAAEx+E,GAAGA,MAGtC86F,EACK14F,EAAEd,KAAI,SAAStB,GAAI,MAAO,CAACA,MAC7BoC,GAGT24F,aAAc,SAAsBvc,EAAGz/B,GAErC,IAEI87C,EAFA5qE,EAAOuuD,EAAE,GAAG7+E,OACZyC,EAAIiqD,EAAM67B,MAAM,EAAGj4D,GAAM,GAGzB6qE,GAAY,EAahB,YAZmBxyF,GAAfy2C,EAAE,GAAGp/C,SACPo/C,EAAIA,EAAEz9C,KAAI,SAAStB,GAAI,OAAOA,EAAE,MAChC86F,GAAc,GAGhBzuC,EAAMi7B,OAAOr3D,GAAMmsB,SAAQ,SAASp8C,GAClC66F,EAAQxuC,EAAMi7B,OAAOtnF,GAAGsB,KAAI,SAASyD,GACnC,OAAOy5E,EAAEx+E,GAAG+E,GAAK3C,EAAE2C,MAErB3C,EAAEpC,IAAM++C,EAAE/+C,GAAKqsD,EAAM1nD,IAAIk2F,IAAUrc,EAAEx+E,GAAGA,MAGtC86F,EACK14F,EAAEd,KAAI,SAAStB,GAAI,MAAO,CAACA,MAC7BoC,GAQT44F,GAAI,SAAYxc,GACd,IAIIqc,EAJA5qE,EAAOuuD,EAAE7+E,OAETw+D,EAAI9R,EAAMpO,SAAShuB,GACnBgrE,EAAI5uC,EAAM67B,MAAM1J,EAAE7+E,OAAQ6+E,EAAE,GAAG7+E,QAmBnC,OAjBA0sD,EAAMi7B,OAAOr3D,GAAMmsB,SAAQ,SAAS9rB,GAClC2qE,EAAE,GAAG3qE,GAAKkuD,EAAE,GAAGluD,MAEjB+7B,EAAMi7B,OAAO,EAAGr3D,GAAMmsB,SAAQ,SAAS8gC,GACrC7wB,EAAMi7B,OAAOpK,GAAG9gC,SAAQ,SAASp8C,GAC/B66F,EAAQxuC,EAAMi7B,OAAOtnF,GAAGsB,KAAI,SAASsjF,GACnC,OAAOzmB,EAAE+e,GAAG0H,GAAMqW,EAAErW,GAAI5kF,MAE1Bm+D,EAAE+e,GAAGl9E,IAAMw+E,EAAEtB,GAAGl9E,GAAKqsD,EAAM1nD,IAAIk2F,IAAUI,EAAEj7F,GAAGA,MAEhDqsD,EAAMi7B,OAAOpK,EAAGjtD,GAAMmsB,SAAQ,SAASr3C,GACrC81F,EAAQxuC,EAAMi7B,OAAOpK,GAAG57E,KAAI,SAASsjF,GACnC,OAAOzmB,EAAE+e,GAAG0H,GAAMqW,EAAErW,GAAI7/E,MAE1Bk2F,EAAE/d,GAAGn4E,GAAKy5E,EAAEqc,EAAMl7F,QAAQoF,GAAKsnD,EAAM1nD,IAAIk2F,SAGtC,CAAC18B,EAAG88B,IAMbC,SAAU,SAAkB1c,GAC1B,IAEIqc,EAFA5qE,EAAOuuD,EAAE7+E,OACT6tE,EAAInhB,EAAM67B,MAAM1J,EAAE7+E,OAAQ6+E,EAAE,GAAG7+E,QAcnC,OAZA0sD,EAAMi7B,OAAOr3D,GAAMmsB,SAAQ,SAASp8C,GAClC66F,EAAQxuC,EAAMi7B,OAAOtnF,GAAGsB,KAAI,SAASgvB,GACnC,OAAOxvB,EAAKw0C,IAAIk4B,EAAExtE,GAAGswB,GAAG,MAE1Bk9C,EAAExtE,GAAGA,GAAKc,EAAKiD,KAAKy6E,EAAEx+E,GAAGA,GAAKqsD,EAAM1nD,IAAIk2F,IACxCxuC,EAAMi7B,OAAOtnF,EAAI,EAAGiwB,GAAMmsB,SAAQ,SAASr3C,GACzC81F,EAAQxuC,EAAMi7B,OAAOtnF,GAAGsB,KAAI,SAASgvB,GACnC,OAAOk9C,EAAExtE,GAAGswB,GAAKk9C,EAAEzoE,GAAGurB,MAExBk9C,EAAEzoE,GAAG/E,IAAMw+E,EAAEx+E,GAAG+E,GAAKsnD,EAAM1nD,IAAIk2F,IAAUrtB,EAAExtE,GAAGA,SAG3CwtE,GAIT2tB,aAAc,SAAsBz3F,EAAGq7C,EAAG38C,EAAGy7D,GAQ3C,IAPA,IAMIu9B,EAAItmF,EAAG26E,EAAG4L,EANVr7F,EAAI,EACJ+E,EAAI,EACJ1C,EAAIqB,EAAE/D,OACNu9E,EAAI,GACJ8B,EAAI,GACJz1B,EAAI,GAEDvpD,EAAIqC,EAAGrC,IAIZ,IAHAk9E,EAAEl9E,GAAK,GACPg/E,EAAEh/E,GAAK,GACPupD,EAAEvpD,GAAK,GACF+E,EAAI,EAAGA,EAAI1C,EAAG0C,IACb/E,EAAI+E,GACNm4E,EAAEl9E,GAAG+E,GAAKrB,EAAE1D,GAAG+E,GACfi6E,EAAEh/E,GAAG+E,GAAKwkD,EAAEvpD,GAAG+E,GAAK,GACX/E,EAAI+E,GACbi6E,EAAEh/E,GAAG+E,GAAKrB,EAAE1D,GAAG+E,GACfm4E,EAAEl9E,GAAG+E,GAAKwkD,EAAEvpD,GAAG+E,GAAK,IAEpBwkD,EAAEvpD,GAAG+E,GAAKrB,EAAE1D,GAAG+E,GACfm4E,EAAEl9E,GAAG+E,GAAKi6E,EAAEh/E,GAAG+E,GAAK,GAS1B,IALA0qF,EAAIpjC,EAAMmtC,SAASntC,EAAMmtC,SAASntC,EAAMS,IAAIvD,GAAI8C,EAAMqpB,IAAIwH,EAAG8B,KAAM,GACnElqE,EAAIu3C,EAAMmtC,SAASntC,EAAMS,IAAIvD,GAAIxK,GACjCq8C,EAAKh5F,EACLi5F,EAAKhvC,EAAMqpB,IAAIrpB,EAAMmtC,SAAS/J,EAAGrtF,GAAI0S,GACrC9U,EAAI,EACGc,EAAKwD,IAAI+nD,EAAM0tC,KAAK1tC,EAAMitC,SAAS+B,EAAGD,KAAQv9B,GACnDu9B,EAAKC,EACLA,EAAKhvC,EAAMqpB,IAAIrpB,EAAMmtC,SAAS/J,EAAG2L,GAAKtmF,GACtC9U,IAEF,OAAOq7F,GAGTC,aAAc,SAAsB53F,EAAGq7C,EAAG38C,EAAGy7D,GAO3C,IANA,IAKI94D,EAAGq2F,EAAItmF,EAAG26E,EAAG4L,EALbr7F,EAAI,EACJqC,EAAIqB,EAAE/D,OACNu9E,EAAI,GACJ8B,EAAI,GACJz1B,EAAI,GAEDvpD,EAAIqC,EAAGrC,IAIZ,IAHAk9E,EAAEl9E,GAAK,GACPg/E,EAAEh/E,GAAK,GACPupD,EAAEvpD,GAAK,GACF+E,EAAI,EAAGA,EAAI1C,EAAG0C,IACb/E,EAAI+E,GACNm4E,EAAEl9E,GAAG+E,GAAKrB,EAAE1D,GAAG+E,GACfi6E,EAAEh/E,GAAG+E,GAAKwkD,EAAEvpD,GAAG+E,GAAK,GACX/E,EAAI+E,GACbi6E,EAAEh/E,GAAG+E,GAAKrB,EAAE1D,GAAG+E,GACfm4E,EAAEl9E,GAAG+E,GAAKwkD,EAAEvpD,GAAG+E,GAAK,IAEpBwkD,EAAEvpD,GAAG+E,GAAKrB,EAAE1D,GAAG+E,GACfm4E,EAAEl9E,GAAG+E,GAAKi6E,EAAEh/E,GAAG+E,GAAK,GAS1B,IALA0qF,EAAIpjC,EAAMmtC,SAASntC,EAAMmtC,SAASntC,EAAMS,IAAIT,EAAMqpB,IAAInsB,EAAG2zB,IAAK8B,IAAK,GACnElqE,EAAIu3C,EAAMmtC,SAASntC,EAAMS,IAAIT,EAAMqpB,IAAInsB,EAAG2zB,IAAKn+B,GAC/Cq8C,EAAKh5F,EACLi5F,EAAKhvC,EAAMqpB,IAAIrpB,EAAMmtC,SAAS/J,EAAGrtF,GAAI0S,GACrC9U,EAAI,EACGc,EAAKwD,IAAI+nD,EAAM0tC,KAAK1tC,EAAMitC,SAAS+B,EAAID,KAAQv9B,GACpDu9B,EAAKC,EACLA,EAAKhvC,EAAMqpB,IAAIrpB,EAAMmtC,SAAS/J,EAAG2L,GAAKtmF,GACtC9U,GAAQ,EAEV,OAAOq7F,GAGTE,IAAK,SAAa73F,EAAGq7C,EAAG38C,EAAGy7D,EAAGyiB,GAO5B,IANA,IAKIv7E,EAAGq2F,EAAItmF,EAAG26E,EAAG4L,EALbr7F,EAAI,EACJqC,EAAIqB,EAAE/D,OACNu9E,EAAI,GACJ8B,EAAI,GACJz1B,EAAI,GAEDvpD,EAAIqC,EAAGrC,IAIZ,IAHAk9E,EAAEl9E,GAAK,GACPg/E,EAAEh/E,GAAK,GACPupD,EAAEvpD,GAAK,GACF+E,EAAI,EAAGA,EAAI1C,EAAG0C,IACb/E,EAAI+E,GACNm4E,EAAEl9E,GAAG+E,GAAKrB,EAAE1D,GAAG+E,GACfi6E,EAAEh/E,GAAG+E,GAAKwkD,EAAEvpD,GAAG+E,GAAK,GACX/E,EAAI+E,GACbi6E,EAAEh/E,GAAG+E,GAAKrB,EAAE1D,GAAG+E,GACfm4E,EAAEl9E,GAAG+E,GAAKwkD,EAAEvpD,GAAG+E,GAAK,IAEpBwkD,EAAEvpD,GAAG+E,GAAKrB,EAAE1D,GAAG+E,GACfm4E,EAAEl9E,GAAG+E,GAAKi6E,EAAEh/E,GAAG+E,GAAK,GAY1B,IARA0qF,EAAIpjC,EAAMmtC,SAASntC,EAAMS,IAAIT,EAAMqpB,IAAInsB,EAAG8C,EAAMmtC,SAAStc,EAAGoD,KACzCj0B,EAAMitC,SAASjtC,EAAMmtC,SAASjwC,EAAG,EAAI+2B,GACtBj0B,EAAMmtC,SAASxa,EAAGsB,KACpDxrE,EAAIu3C,EAAMmtC,SAASntC,EAAMmtC,SAASntC,EAAMS,IAAIT,EAAMqpB,IAAInsB,EAClD8C,EAAMmtC,SAAStc,EAAGoD,KAAMvhC,GAAIuhC,GAChC8a,EAAKh5F,EACLi5F,EAAKhvC,EAAMqpB,IAAIrpB,EAAMmtC,SAAS/J,EAAGrtF,GAAI0S,GACrC9U,EAAI,EACGc,EAAKwD,IAAI+nD,EAAM0tC,KAAK1tC,EAAMitC,SAAS+B,EAAID,KAAQv9B,GACpDu9B,EAAKC,EACLA,EAAKhvC,EAAMqpB,IAAIrpB,EAAMmtC,SAAS/J,EAAG2L,GAAKtmF,GACtC9U,IAEF,OAAOq7F,GAGTG,YAAa,SAAqB93F,GAOhC,IANA,IAKI8oD,EAAOqR,EAAG7sC,EAAGjsB,EALbk8D,EAAIv9D,EAAE/D,OACN0C,EAAIqB,EAAE,GAAG/D,OACTK,EAAI,EACJsgF,EAAI,GACJxyB,EAAI,GAED9tD,EAAIihE,EAAI,EAAGjhE,IAAK,CAErB,IADAwsD,EAAQ,EACHznD,EAAI/E,EAAI,EAAG+E,EAAI1C,EAAG0C,IACvBynD,GAAU9oD,EAAEqB,GAAG/E,GAAK0D,EAAEqB,GAAG/E,GAMzB,IAJAwsD,GADU9oD,EAAE1D,EAAI,GAAGA,GAAK,GAAM,EAAI,GACjBc,EAAKiD,KAAKyoD,GAC3BqR,EAAI/8D,EAAKiD,MAAQyoD,EAAQA,EAAS9oD,EAAE1D,EAAI,GAAGA,GAAKwsD,GAAS,IACzD8zB,EAAIj0B,EAAM67B,MAAMjnB,EAAG,IACjBjhE,EAAI,GAAG,IAAM0D,EAAE1D,EAAI,GAAGA,GAAKwsD,IAAU,EAAIqR,GACtC7sC,EAAIhxB,EAAI,EAAGgxB,EAAIiwC,EAAGjwC,IAAKsvD,EAAEtvD,GAAG,GAAKttB,EAAEstB,GAAGhxB,IAAM,EAAI69D,GACrD/P,EAAIzB,EAAMitC,SAASjtC,EAAMpO,SAASgjB,EAAG5+D,GACjCgqD,EAAMmtC,SAASntC,EAAMmtC,SAASlZ,EAAGj0B,EAAMu7B,UAAUtH,IAAK,IAC1D58E,EAAI2oD,EAAMmtC,SAAS1rC,EAAGzB,EAAMmtC,SAAS91F,EAAGoqD,IAE1C,OAAOpqD,GAMT+3F,GAAK,WAOH,IAAI92F,EAAQ0nD,EAAM1nD,IACdgD,EAAQ0kD,EAAMi7B,OAElB,SAASoU,EAAIt5F,GAIX,IAMIpC,EAAE+E,EAAEisB,EANJ3uB,EAAID,EAAEzC,OACNmuD,EAAI1rD,EAAE,GAAGzC,OAETk+D,EAAIxR,EAAM67B,MAAMp6B,EAAGA,GAIvB,IAHA1rD,EAAIiqD,EAAMw8B,KAAKzmF,GAGX2C,EAAI,EAAGA,EAAI+oD,EAAG/oD,IAAI,CAIpB,IAHA84D,EAAE94D,GAAGA,GAAKjE,EAAKiD,KAAKY,EAAIgD,EAAMtF,GAAGf,KAAI,SAAStB,GAC5C,OAAOoC,EAAEpC,GAAG+E,GAAK3C,EAAEpC,GAAG+E,QAEpB/E,EAAI,EAAGA,EAAIqC,EAAGrC,IAChBoC,EAAEpC,GAAG+E,GAAK3C,EAAEpC,GAAG+E,GAAK84D,EAAE94D,GAAGA,GAE3B,IAAIisB,EAAIjsB,EAAE,EAAGisB,EAAI88B,EAAG98B,IAIlB,IAHA6sC,EAAE94D,GAAGisB,GAAKrsB,EAAIgD,EAAMtF,GAAGf,KAAI,SAAStB,GAClC,OAAOoC,EAAEpC,GAAG+E,GAAK3C,EAAEpC,GAAGgxB,OAEpBhxB,EAAI,EAAGA,EAAIqC,EAAGrC,IAChBoC,EAAEpC,GAAGgxB,GAAK5uB,EAAEpC,GAAGgxB,GAAK5uB,EAAEpC,GAAG+E,GAAG84D,EAAE94D,GAAGisB,GAIvC,MAAO,CAAC5uB,EAAGy7D,GAGb,OAAO69B,EAxCJ,GA2CLC,MAAQ,WAIN,SAASC,EAAIpd,GAEX,IAAIvuD,GADJuuD,EAAInyB,EAAMw8B,KAAKrK,IACF7+E,OACT8+D,EAAIpS,EAAMpO,SAAShuB,GAgBvB,OAfAo8B,EAAMi7B,OAAOr3D,EAAO,GAAI,GAAI,GAAGmsB,SAAQ,SAASp8C,GAC9CqsD,EAAM48B,YACFxqB,EAAG,CAAE/Q,IAAK1tD,GAAKqsD,EAAMktC,OAAOltC,EAAMvsD,MAAM2+D,EAAG,CAAE/Q,IAAK1tD,IAAMw+E,EAAEx+E,GAAGA,KACjEqsD,EAAM48B,YACFzK,EAAG,CAAE9wB,IAAK1tD,GAAKqsD,EAAMktC,OAAOltC,EAAMvsD,MAAM0+E,EAAG,CAAE9wB,IAAK1tD,IAAMw+E,EAAEx+E,GAAGA,KACjEqsD,EAAMi7B,OAAOtnF,GAAGo8C,SAAQ,SAASr3C,GAC/B,IAAI+P,EAAIu3C,EAAMmtC,SAAShb,EAAEz5E,GAAG/E,IAAK,GAC7B67F,EAAKxvC,EAAMvsD,MAAM0+E,EAAG,CAAE9wB,IAAK3oD,IAC3B+2F,EAAMzvC,EAAMmtC,SAASntC,EAAMvsD,MAAM0+E,EAAG,CAAE9wB,IAAK1tD,IAAM8U,GACrDu3C,EAAM48B,YAAYzK,EAAG,CAAE9wB,IAAK3oD,GAAKsnD,EAAMqpB,IAAImmB,EAAIC,IAC/C,IAAIC,EAAK1vC,EAAMvsD,MAAM2+D,EAAG,CAAE/Q,IAAK3oD,IAC3Bi3F,EAAM3vC,EAAMmtC,SAASntC,EAAMvsD,MAAM2+D,EAAG,CAAE/Q,IAAK1tD,IAAM8U,GACrDu3C,EAAM48B,YAAYxqB,EAAG,CAAE/Q,IAAK3oD,GAAKsnD,EAAMqpB,IAAIqmB,EAAIC,UAG5Cv9B,EAGT,SAASw9B,EAASzd,EAAGz/B,GACnB,IAAIm9C,GAAa,OACG5zF,IAAhBy2C,EAAE,GAAGp/C,SAEPo/C,EAAIA,EAAEz9C,KAAI,SAASc,GAAI,MAAO,CAACA,MAC/B85F,GAAa,GAEf,IAAIT,EAAKpvC,EAAMovC,GAAGjd,GACdD,EAAIkd,EAAG,GACPR,EAAIQ,EAAG,GACPU,EAAQ3d,EAAE,GAAG7+E,OACby8F,EAAK/vC,EAAMvsD,MAAMy+E,EAAE,CAAC5wB,IAAI,CAAC86B,IAAI0T,KAE7BE,EAAKT,EADAvvC,EAAMvsD,MAAMm7F,EAAE,CAACvtC,IAAI,CAAC+6B,IAAI0T,MAE7BG,EAAKjwC,EAAMu7B,UAAUwU,QAEL9zF,IAAjBg0F,EAAG,GAAG38F,SACP28F,EAAK,CAACA,IAGR,IAAIl6F,EAAIiqD,EAAMmtC,SAASntC,EAAMmtC,SAAS6C,EAAIC,GAAKv9C,GAO/C,YALgBz2C,IAAblG,EAAEzC,SACHyC,EAAI,CAAC,CAACA,KAIJ85F,EACK95F,EAAEd,KAAI,SAAStB,GAAI,OAAOA,EAAE,MAC9BoC,EAGT,OAAO65F,EA1DD,GA6DRM,OAAQ,SAAgB74F,GAOtB,IANA,IAIO1D,EAAG+E,EAAG+oD,EAAG2wB,EAAG+d,EAAOC,EAAO9e,EAJ7B+e,EAAY,EACZr6F,EAAIqB,EAAE/D,OACNqH,EAAIqlD,EAAMpO,SAAS57C,EAAGA,GACtBs6F,EAAK,GAGY,IAAdD,GAAiB,CAItB,IAHAF,EAAQ94F,EAAE,GAAG,GACboqD,EAAI,EACJ2wB,EAAI,EACCz+E,EAAI,EAAGA,EAAIqC,EAAGrC,IACjB,IAAK+E,EAAI,EAAGA,EAAI1C,EAAG0C,IACb/E,GAAK+E,GACHy3F,EAAQ17F,EAAKwD,IAAIZ,EAAE1D,GAAG+E,MACxBy3F,EAAQ17F,EAAKwD,IAAIZ,EAAE1D,GAAG+E,IACtB+oD,EAAI9tD,EACJy+E,EAAI15E,GAmBZ,IAbE03F,EADE/4F,EAAEoqD,GAAGA,KAAOpqD,EAAE+6E,GAAGA,GACV/6E,EAAEoqD,GAAG2wB,GAAK,EAAK39E,EAAKitD,GAAK,GAAKjtD,EAAKitD,GAAK,EAEzCjtD,EAAK+2D,KAAK,EAAIn0D,EAAEoqD,GAAG2wB,IAAM/6E,EAAEoqD,GAAGA,GAAKpqD,EAAE+6E,GAAGA,KAAO,GACzDd,EAAItxB,EAAMpO,SAAS57C,EAAGA,IACpByrD,GAAGA,GAAKhtD,EAAKkD,IAAIy4F,GACnB9e,EAAE7vB,GAAG2wB,IAAM39E,EAAKmD,IAAIw4F,GACpB9e,EAAEc,GAAG3wB,GAAKhtD,EAAKmD,IAAIw4F,GACnB9e,EAAEc,GAAGA,GAAK39E,EAAKkD,IAAIy4F,GAEnBz1F,EAAIqlD,EAAMmtC,SAASxyF,EAAG22E,GAEtBj6E,EADI2oD,EAAMmtC,SAASntC,EAAMmtC,SAASntC,EAAMS,IAAI6wB,GAAIj6E,GAAIi6E,GAEpD+e,EAAY,EACP18F,EAAI,EAAGA,EAAIqC,EAAGrC,IACjB,IAAK+E,EAAI,EAAGA,EAAI1C,EAAG0C,IACb/E,GAAK+E,GAAKjE,EAAKwD,IAAIZ,EAAE1D,GAAG+E,IAAM,OAChC23F,EAAY,GAKpB,IAAK18F,EAAI,EAAGA,EAAIqC,EAAGrC,IAAK28F,EAAGruF,KAAK5K,EAAE1D,GAAGA,IAErC,MAAO,CAACgH,EAAG21F,IAGbC,WAAY,SAAoBx/B,EAAGqyB,EAAG3hC,EAAG+uC,EAAKC,EAAKC,GACjD,IAAIC,EAAIC,EAAUC,EAClB,GAAc,IAAVH,EACF,KAAOF,GAAO/uC,GAIZgvC,KAHAE,EAAKvN,EAAIryB,EAAEy/B,EAAKC,KAChBG,EAAKxN,EAAIryB,EAAEy/B,EAAMpN,EAAGqN,EAAME,KACD,EAEzBH,GAAYpN,EAGhB,GAAc,IAAVsN,EACF,KAAOF,GAAO/uC,GAMZgvC,KALAE,EAAKvN,EAAIryB,EAAEy/B,EAAKC,IAIG,GAHnBG,EAAKxN,EAAIryB,EAAEy/B,EAAMpN,EAAI,EAAGqN,EAAME,EAAK,IAGP,GAF5BE,EAAKzN,EAAIryB,EAAEy/B,EAAMpN,EAAI,EAAGqN,EAAMG,EAAK,IAC9BxN,EAAIryB,EAAEy/B,EAAKpN,EAAGqN,EAAMI,IACkB,EAE3CL,GAAYpN,EAGhB,OAAOqN,GAGTK,QAAS,SAAiB//B,EAAG15D,EAAGq7C,EAAGg+C,GAOjC,IANA,IAKI97B,EAAGt9D,EAAIoB,EAAGisB,EAAGytC,EALbz+D,EAAI,EACJyvF,GAAK1wC,EAAIr7C,GAAK,EACdtB,EAAI,GACJg7F,EAAK,GACLC,EAAI,GAEDr9F,EAAI+8F,EAAQ,GAAG,CAEpB,IADAt+B,EAAIrB,EAAE15D,GACDqB,EAAIrB,EAAGstB,EAAI,EAAGjsB,GAAKg6C,EAAGh6C,GAAQ0qF,EAAGz+D,IAAK5uB,EAAE4uB,GAAKjsB,EAElD,IADAk8D,EAAI7+D,EAAEzC,OACDoF,EAAI,EAAGA,EAAIk8D,EAAI,EAAGl8D,IACrB05D,IAAQ15D,EAAI,IAAO,EAAK,EAAI,GAAKq4D,EAAEh7D,EAAE2C,IAEvC05D,EAAKgxB,EAAI,GAAMhxB,EAAIrB,EAAEre,IACrBs+C,EAAEr9F,GAAKy+D,EACPgxB,GAAK,EACLzvF,IAIF,IAFA2D,EAAK05F,EAAE19F,OACPshE,EAAI,EACU,IAAPt9D,GAAU,CACf,IAAKoB,EAAI,EAAGA,EAAIpB,EAAK,EAAGoB,IACxBq4F,EAAGr4F,IAAOjE,EAAKw0C,IAAI,EAAG2rB,GAAMo8B,EAAEt4F,EAAI,GAAKs4F,EAAEt4F,KAAOjE,EAAKw0C,IAAI,EAAG2rB,GAAK,GACjEt9D,EAAKy5F,EAAGz9F,OACR09F,EAAID,EACJA,EAAK,GACLn8B,IAEF,OAAOo8B,GAGTC,WAAY,SAAoBj/B,EAAGjB,EAAGh7D,EAAGqtF,GACvC,SAAS8N,EAAIl/B,EAAGj8D,GAId,IAHA,IAEI0rD,EAFA9tD,EAAI,EACJqC,EAAIg8D,EAAE1+D,OAEHK,EAAIqC,EAAGrC,IACRq+D,EAAEr+D,KAAOoC,IAAG0rD,EAAI9tD,GACtB,OAAO8tD,EAOT,IALA,IAII0vC,EAAI9C,EAAIz5B,EAAGv9D,EAAGqB,EAJd04F,EAAQ38F,EAAKwD,IAAIlC,EAAIi8D,EAAEk/B,EAAIl/B,EAAGj8D,GAAK,IACnCpC,EAAI,EACJq9F,EAAI,GACJD,EAAK,GAEF3N,GAAKgO,GACVD,EAAKD,EAAIl/B,EAAGj8D,EAAIqtF,GAChBiL,EAAK6C,EAAIl/B,EAAGj8D,GACZi7F,EAAEr9F,IAAMo9D,EAAEogC,GAAM,EAAIpgC,EAAEs9B,GAAMt9B,EAAE,EAAIs9B,EAAK8C,KAAQ/N,EAAIA,GACnDA,GAAK,EACLzvF,IAIF,IAFA0D,EAAI25F,EAAE19F,OACNshE,EAAI,EACQ,GAALv9D,GAAQ,CACb,IAAKqB,EAAI,EAAGA,EAAIrB,EAAI,EAAGqB,IACrBq4F,EAAGr4F,IAAOjE,EAAKw0C,IAAI,EAAG2rB,GAAMo8B,EAAEt4F,EAAI,GAAKs4F,EAAEt4F,KAAOjE,EAAKw0C,IAAI,EAAG2rB,GAAK,GACnEv9D,EAAI05F,EAAGz9F,OACP09F,EAAID,EACJA,EAAK,GACLn8B,IAEF,OAAOo8B,GAGTK,QAAS,SAAiBtgC,EAAG15D,EAAGq7C,EAAG18C,GAQjC,IAPA,IAMI4+D,EANAwuB,GAAK1wC,EAAIr7C,GAAKrB,EACdo8D,EAAIrB,EAAE15D,GACNtB,EAAI,GACJ2C,EAAIrB,EACJstB,EAAI,EACJhxB,EAAI,EAED+E,GAAKg6C,EAAGh6C,GAAQ0qF,EAAGz+D,IACxB5uB,EAAE4uB,GAAKjsB,EAET,IADAk8D,EAAI7+D,EAAEzC,OACCK,EAAIihE,EAAI,EAAGjhE,IAChBy+D,IAAOz+D,EAAI,IAAM,EAAK,EAAI,GAAKo9D,EAAEh7D,EAAEpC,IAErC,OAAQyvF,EAAI,GAAMhxB,EAAIrB,EAAEre,KAG1B4+C,QAAS,SAAiBt/B,EAAGu/B,EAAGC,EAAIh3F,GASlC,IARA,IAOI9B,EAPA1C,EAAIg8D,EAAE1+D,OACNmuD,EAAI,EACJ9tD,EAAI,EACJk9E,EAAI,GACJ4gB,EAAK,GACLtf,EAAI,GACJP,EAAI,GAEDj+E,EAAIqC,EAAGrC,IAAK,CAEjB,IADAk9E,EAAEl9E,GAAK,EACF+E,EAAI,EAAGA,EAAI1C,EAAG0C,IACb/E,GAAK+E,IAAGm4E,EAAEl9E,KAAO6G,EAAQw3D,EAAEt5D,KAAOs5D,EAAEr+D,GAAKq+D,EAAEt5D,KAGjD,IADA+4F,EAAG99F,GAAK,EACH+E,EAAI,EAAGA,EAAI1C,EAAG0C,IACb/E,GAAK+E,IAAG+4F,EAAG99F,IAAM,GAAKq+D,EAAGr+D,GAAKq+D,EAAEt5D,KAEtCy5E,EAAEx+E,IAAM,EAAI,GAAK6G,EAAQw3D,EAAEr+D,IAAM89F,EAAG99F,KAAOk9E,EAAEl9E,GAAKk9E,EAAEl9E,IACpDi+E,EAAEj+E,IAAM6G,EAAQw3D,EAAEr+D,KAAOk9E,EAAEl9E,GAAKk9E,EAAEl9E,IAClC8tD,GAAM0wB,EAAEx+E,GAAK49F,EAAE59F,GAAKi+E,EAAEj+E,GAAK69F,EAAG79F,GAEhC,OAAO8tD,GAGTiwC,SAAU,SAAkB1/B,EAAGu/B,EAAG/2F,GAKhC,IAJA,IAEI9B,EAAGm4E,EAFHpvB,EAAI,EACJ9tD,EAAI,EAEJqC,EAAIg8D,EAAE1+D,OACHK,EAAIqC,EAAGrC,IAAK,CAEjB,IADAk9E,EAAI0gB,EAAE59F,GACD+E,EAAI,EAAGA,EAAI1C,EAAG0C,IAEb/E,GAAK+E,IAAGm4E,IAAMr2E,EAAQw3D,EAAEt5D,KAAOs5D,EAAEr+D,GAAKq+D,EAAEt5D,KAG9C+oD,GAAKovB,EAEP,OAAOpvB,GAGTkwC,aAAc,SAAsB3/B,EAAGu/B,EAAG/2F,GAUxC,IATA,IACW9B,EADP1C,EAAIg8D,EAAE1+D,OACNK,EAAI,EACJw+E,EAAI,GACJP,EAAI,GACJzxB,EAAQ,GACR13C,EAAI,GACJ26E,EAAI,GACJ1wC,EAAI,GACJwK,EAAI,GACDvpD,EAAIqC,EAAI,EAAGrC,IAChByvF,EAAEzvF,GAAKq+D,EAAEr+D,EAAI,GAAKq+D,EAAEr+D,GAEtB,IADAwsD,EAAM,GAAK,EACNxsD,EAAI,EAAGA,EAAIqC,EAAI,EAAGrC,IACrBwsD,EAAMxsD,GAAM,EAAIyvF,EAAEzvF,IAAO49F,EAAE59F,EAAI,GAAK49F,EAAE59F,IACjC,EAAIyvF,EAAEzvF,EAAE,IAAO49F,EAAE59F,GAAK49F,EAAE59F,EAAE,IAEjC,IAAKA,EAAI,EAAGA,EAAIqC,EAAI,EAAGrC,IACrBw+E,EAAEx+E,GAAK,GACPi+E,EAAEj+E,GAAK,GACPw+E,EAAEx+E,GAAGA,EAAE,GAAKyvF,EAAEzvF,EAAE,GAChBw+E,EAAEx+E,GAAGA,GAAK,GAAKyvF,EAAEzvF,EAAI,GAAKyvF,EAAEzvF,IAC5Bw+E,EAAEx+E,GAAGA,EAAE,GAAKyvF,EAAEzvF,GACdi+E,EAAEj+E,GAAG,GAAKwsD,EAAMxsD,GAGlB,IADA8U,EAAIu3C,EAAMmtC,SAASntC,EAAMS,IAAI0xB,GAAIP,GAC5Bl5E,EAAI,EAAGA,EAAI1C,EAAI,EAAG0C,IACrBg6C,EAAEh6C,IAAM64F,EAAE74F,EAAI,GAAK64F,EAAE74F,IAAM0qF,EAAE1qF,GAAK0qF,EAAE1qF,IAAM+P,EAAE/P,EAAI,GAAG,GAAK,EAAI+P,EAAE/P,GAAG,IAAM,EACvEwkD,EAAExkD,IAAM+P,EAAE/P,EAAI,GAAG,GAAK+P,EAAE/P,GAAG,KAAO,EAAI0qF,EAAE1qF,IAE1C,IAAKA,EAAI,EAAGA,EAAI1C,KACVg8D,EAAEt5D,GAAK8B,GADM9B,KAInB,OAAO64F,EADP74F,GAAK,IACU8B,EAAQw3D,EAAEt5D,IAAMg6C,EAAEh6C,GAAKsnD,EAAM4xC,GAAGp3F,EAAMw3D,EAAEt5D,IACnD+P,EAAE/P,IAAM8B,EAAQw3D,EAAEt5D,IAAMsnD,EAAM4xC,GAAGp3F,EAAQw3D,EAAEt5D,IAAMwkD,EAAExkD,IAGzDm5F,iBAAkB,WAChB,MAAM,IAAIz2F,MAAM,yCAGlB02F,IAAK,SAAa9/B,GAChB,IAGIt5D,EAAGq5F,EAHHn9B,EAAI5C,EAAE1+D,OACN0C,EAAIg8D,EAAE,GAAG1+D,OACTK,EAAI,EAEJg/E,EAAI,GACJjhB,EAAI,GACJt+D,EAAS,GACT4+F,EAAQ,GACRC,EAAI,GACJC,EAAK,GACLtgB,EAAI,GACJhgB,EAAI,GACJM,EAAI,GACJigC,EAAK,GACT,IAAKx+F,EAAI,EAAGA,EAAIihE,EAAGjhE,IACjBg/E,EAAEh/E,GAAKqsD,EAAM1nD,IAAI05D,EAAEr+D,IAAMqC,EAE3B,IAAKrC,EAAI,EAAGA,EAAIqC,EAAGrC,IAEjB,IADAi+E,EAAEj+E,GAAK,GACH+E,EAAI,EAAGA,EAAIk8D,EAAGl8D,IAChBk5E,EAAEj+E,GAAG+E,GAAKs5D,EAAEt5D,GAAG/E,GAAKg/E,EAAEj6E,GAI1B,IADAk5E,EAAI5xB,EAAMu7B,UAAU3J,GACfj+E,EAAI,EAAGA,EAAIihE,EAAGjhE,IAEjB,IADAi+D,EAAEj+D,GAAK,GACF+E,EAAI,EAAGA,EAAIk8D,EAAGl8D,IACjBk5D,EAAEj+D,GAAG+E,GAAMsnD,EAAMutC,IAAI,CAAC3b,EAAEj+E,IAAK,CAACi+E,EAAEl5E,MAAS1C,EAAI,GAOjD,IAHAk8D,GADA9+D,EAAS4sD,EAAMkwC,OAAOt+B,IACX,GACXF,EAAIt+D,EAAO,GACX++F,EAAKnyC,EAAMu7B,UAAUrpB,GAChBv+D,EAAI,EAAGA,EAAI+9D,EAAEp+D,OAAQK,IACxB,IAAK+E,EAAI/E,EAAG+E,EAAIg5D,EAAEp+D,OAAQoF,IACrBg5D,EAAE/9D,GAAK+9D,EAAEh5D,KACVq5F,EAAQrgC,EAAE/9D,GACV+9D,EAAE/9D,GAAK+9D,EAAEh5D,GACTg5D,EAAEh5D,GAAKq5F,EACPC,EAAQG,EAAGx+F,GACXw+F,EAAGx+F,GAAKw+F,EAAGz5F,GACXy5F,EAAGz5F,GAAKs5F,GAKd,IADAE,EAAKlyC,EAAMu7B,UAAU3J,GAChBj+E,EAAI,EAAGA,EAAIihE,EAAGjhE,IAEjB,IADAs+F,EAAEt+F,GAAK,GACF+E,EAAI,EAAGA,EAAIw5F,EAAG5+F,OAAQoF,IACzBu5F,EAAEt+F,GAAG+E,GAAKsnD,EAAMutC,IAAI,CAAC4E,EAAGx+F,IAAK,CAACu+F,EAAGx5F,KAGrC,MAAO,CAACs5D,EAAGN,EAAGygC,EAAIF,MAKrB,SAAS9U,GACR,IAAK,IAAIxpF,EAAI,EAAGA,EAAIwpF,EAAM7pF,OAAQK,KAAM,SAASypF,GAC/Cp9B,EAAMy6B,GAAG2C,GAAY,SAAS1nC,EAAKve,GACjC,IAAI2qD,EAAUvkF,KAEd,OAAI45B,GACFomD,YAAW,WACTpmD,EAAK5lB,KAAKuwE,EAAS9hC,EAAMy6B,GAAG2C,GAAU7rE,KAAKuwE,EAASpsC,MACnD,IACIn4C,MAEiC,kBAA/ByiD,EAAMo9B,GAAU7/E,KAAMm4C,GACxBsK,EAAMo9B,GAAU7/E,KAAMm4C,GAEtBsK,EAAMA,EAAMo9B,GAAU7/E,KAAMm4C,KAbD,CAetCynC,EAAMxpF,IAhBT,CAiBC,8DAA8DsiD,MAAM,MAp8BrE,CAs8BC+J,EAAOvrD,MACR,SAASurD,EAAOvrD,GAEjB,IAAIhB,EAAQ,GAAGA,MACX0mF,EAAWn6B,EAAM3hC,MAAM87D,SACvBtqC,EAAUmQ,EAAM3hC,MAAMwxB,QAwT1B,SAASuiD,EAAwB5K,EAAI6K,EAAI3K,EAAI4K,GAC3C,GAAI9K,EAAK,GAAKE,EAAK,GAAKF,GAAM,GAAKE,GAAM,EACvC,MAAM,IAAItsF,MAAM,wDAElB,IAAIm3F,GAAU/K,EAAK6K,EAAK3K,EAAK4K,IAAOD,EAAKC,GAEzC,OAAQ9K,EAAKE,GADJjzF,EAAKiD,KAAK66F,GAAU,EAAIA,IAAY,EAAEF,EAAO,EAAEC,IAzT1DtyC,EAAM0lB,OAAO,CAIX8sB,OAAQ,WACN,IAAIl/D,EAAO7/B,EAAM8d,KAAKkkC,WACtB,OAAI0kC,EAAS7mD,EAAK,KACRA,EAAK,GAAKA,EAAK,IAAMA,EAAK,IAE5BA,EAAK,GAAK0sB,EAAMqC,KAAK/uB,EAAK,KAAO0sB,EAAMsG,MAAMhzB,EAAK,GAAIA,EAAK,KAOrEm/D,MAAO,WACL,IACI58F,EADAy9B,EAAO7/B,EAAM8d,KAAKkkC,WAEtB,OAAI5F,EAAQvc,EAAK,KAEfz9B,EAAImqD,EAAMwyC,OAAOl/D,EAAK,GAAGA,EAAK,GAAGA,EAAK,IAClB,IAAZA,EAAK,GACV0sB,EAAM8E,OAAOxE,KAAK7rD,EAAKwD,IAAIpC,GAAI,EAAG,GACG,EAArCmqD,EAAM8E,OAAOxE,KAAK7rD,EAAKwD,IAAIpC,GAAI,EAAG,IAEjCy9B,EAAKhgC,OAAS,GAEhBuC,EAAImqD,EAAMwyC,OAAOl/D,EAAK,GAAGA,EAAK,GAAGA,EAAK,IAClB,IAAZA,EAAK,GACV0sB,EAAM8E,OAAOxE,KAAK7rD,EAAKwD,IAAIpC,GAAG,EAAE,GACI,EAApCmqD,EAAM8E,OAAOxE,KAAK7rD,EAAKwD,IAAIpC,GAAG,EAAE,KAGnCA,EAAIy9B,EAAK,GACW,IAAZA,EAAK,GACV0sB,EAAM8E,OAAOxE,KAAK7rD,EAAKwD,IAAIpC,GAAG,EAAE,GACG,EAAnCmqD,EAAM8E,OAAOxE,KAAK7rD,EAAKwD,IAAIpC,GAAG,EAAE,OAM3CmqD,EAAM0lB,OAAO1lB,EAAMy6B,GAAI,CACrB+X,OAAQ,SAAgBh4F,EAAO+kF,GAC7B,OAAQ/kF,EAAQ+C,KAAK8kD,QAAU9kD,KAAK+oD,MAAMi5B,IAG5CkT,MAAO,SAAej4F,EAAOk4F,EAAOnT,GAClC,IAAIiT,EAAS/9F,EAAKwD,IAAIsF,KAAKi1F,OAAOh4F,EAAO+kF,IACzC,OAAkB,IAAVmT,EACL1yC,EAAM8E,OAAOxE,KAAKkyC,EAAQ,EAAG,GACK,EAAlCxyC,EAAM8E,OAAOxE,KAAKkyC,EAAQ,EAAG,MAKpCxyC,EAAM0lB,OAAO,CAIXitB,OAAQ,WACN,IAAIr/D,EAAO7/B,EAAM8d,KAAKkkC,WACtB,OAAwB,IAAhBniB,EAAKhgC,QACTggC,EAAK,GAAKA,EAAK,KAAOA,EAAK,GAAK7+B,EAAKiD,KAAK47B,EAAK,MAC/CA,EAAK,GAAK0sB,EAAMqC,KAAK/uB,EAAK,MAC1B0sB,EAAMsG,MAAMhzB,EAAK,IAAI,GAAQ7+B,EAAKiD,KAAK47B,EAAK,GAAGhgC,UAOrDs/F,MAAO,WACL,IACID,EADAr/D,EAAO7/B,EAAM8d,KAAKkkC,WAEtB,OAAoB,IAAhBniB,EAAKhgC,QACPq/F,EAASl+F,EAAKwD,IAAI+nD,EAAM2yC,OAAOr/D,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,KAC3C,IAAZA,EAAK,GACV0sB,EAAM2H,SAASrH,KAAKqyC,EAAQr/D,EAAK,GAAG,GACG,EAAvC0sB,EAAM2H,SAASrH,KAAKqyC,EAAQr/D,EAAK,GAAG,IAErC6mD,EAAS7mD,EAAK,KAChBq/D,EAASl+F,EAAKwD,IAAIq7B,EAAK,IACJ,GAAXA,EAAK,GACV0sB,EAAM2H,SAASrH,KAAKqyC,EAAQr/D,EAAK,GAAG,GACK,EAAzC0sB,EAAM2H,SAASrH,KAAKqyC,EAAQr/D,EAAK,GAAG,KAEzCq/D,EAASl+F,EAAKwD,IAAI+nD,EAAM2yC,OAAOr/D,EAAK,GAAIA,EAAK,KAC1B,GAAXA,EAAK,GACV0sB,EAAM2H,SAASrH,KAAKqyC,EAAQr/D,EAAK,GAAGhgC,OAAO,GACK,EAAhD0sD,EAAM2H,SAASrH,KAAKqyC,EAAQr/D,EAAK,GAAGhgC,OAAO,OAIlD0sD,EAAM0lB,OAAO1lB,EAAMy6B,GAAI,CACrBkY,OAAQ,SAAgBn4F,GACtB,OAAQA,EAAQ+C,KAAK8kD,SAAW9kD,KAAK+oD,OAAM,GAAQ7xD,EAAKiD,KAAK6F,KAAKs9E,UAGpE+X,MAAO,SAAep4F,EAAOk4F,GAC3B,OAAkB,IAAVA,EACL,EAAI1yC,EAAM2H,SAASrH,IAAI7rD,EAAKwD,IAAIsF,KAAKo1F,OAAOn4F,IAAS+C,KAAKs9E,OAAO,GACA,EAAjE76B,EAAM2H,SAASrH,KAAK7rD,EAAKwD,IAAIsF,KAAKo1F,OAAOn4F,IAAS+C,KAAKs9E,OAAO,MAKrE76B,EAAM0lB,OAAO,CAKXmtB,YAAa,WACX,IACAC,EAAQpK,EAAQqK,EAAUC,EAAcC,EAASC,EAAUv/F,EAAG+E,EAD1D46B,EAAO7/B,EAAM8d,KAAKkkC,WAEtB,GAAoB,IAAhBniB,EAAKhgC,OAAc,CAErB,IADA2/F,EAAU,IAAIl+F,MAAMu+B,EAAK,GAAGhgC,QACvBK,EAAI,EAAGA,EAAI2/B,EAAK,GAAGhgC,OAAQK,IAC9Bs/F,EAAQt/F,GAAK2/B,EAAK,GAAG3/B,GAEvB2/B,EAAO2/D,EAIT,IADAvK,EAAS,IAAI3zF,MACRpB,EAAI,EAAGA,EAAI2/B,EAAKhgC,OAAQK,IAC3B+0F,EAASA,EAAOllF,OAAO8vB,EAAK3/B,IAK9B,IAHAo/F,EAAW/yC,EAAMqC,KAAKqmC,GAEtBoK,EAAS,EACJn/F,EAAI,EAAGA,EAAI2/B,EAAKhgC,OAAQK,IAC3Bm/F,GAAkBx/D,EAAK3/B,GAAGL,OAASmB,EAAKw0C,IAAI+W,EAAMqC,KAAK/uB,EAAK3/B,IAAMo/F,EAAU,GAK9E,IAHAD,GAAWx/D,EAAKhgC,OAAS,EAEzB4/F,EAAW,EACNv/F,EAAI,EAAGA,EAAI2/B,EAAKhgC,OAAQK,IAE3B,IADAq/F,EAAehzC,EAAMqC,KAAK/uB,EAAK3/B,IAC1B+E,EAAI,EAAGA,EAAI46B,EAAK3/B,GAAGL,OAAQoF,IAC9Bw6F,GAAYz+F,EAAKw0C,IAAI3V,EAAK3/B,GAAG+E,GAAKs6F,EAAc,GAIpD,OAAOF,GADPI,GAAaxK,EAAOp1F,OAASggC,EAAKhgC,SAOpC6/F,WAAY,WACV,IACAvK,EAAKC,EAAK7yF,EAAGrC,EADT2/B,EAAO7/B,EAAM8d,KAAKkkC,WAEtB,GAAI0kC,EAAS7mD,EAAK,IAChB,OAAO,EAAI0sB,EAAM+C,SAASzC,IAAIhtB,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAEvD,IAAIu/D,EAAc7yC,EAAM6yC,YAAYv/D,GAGpC,IAFAs1D,EAAMt1D,EAAKhgC,OAAS,EACpB0C,EAAI,EACCrC,EAAI,EAAGA,EAAI2/B,EAAKhgC,OAAQK,IAC3BqC,GAAQs9B,EAAK3/B,GAAGL,OAGlB,OADAu1F,EAAM7yF,EAAI4yF,EAAM,EACT,EAAI5oC,EAAM+C,SAASzC,IAAIuyC,EAAajK,EAAKC,IAGlDuK,MAAO,SAAeC,EAAQzK,EAAKC,GACjC,OAAO,EAAI7oC,EAAM+C,SAASzC,IAAI+yC,EAAQzK,EAAKC,MAI/C7oC,EAAM0lB,OAAO1lB,EAAMy6B,GAAI,CACrBoY,YAAa,WACX,OAAO7yC,EAAM6yC,YAAYt1F,KAAKyxE,YAGhCskB,UAAW,WACT,IACI3/F,EADAqC,EAAI,EAER,IAAKrC,EAAI,EAAGA,EAAI4J,KAAKjK,OAAQK,IAC3BqC,GAAQuH,KAAK5J,GAAGL,OAElB,OAAO0sD,EAAMozC,MAAM71F,KAAKs1F,cAAet1F,KAAKjK,OAAS,EAAG0C,EAAIuH,KAAKjK,WAKrE0sD,EAAM0lB,OAAO,CAIX6tB,OAAQ,WACN,IACInxC,EAAOE,EAAO+vC,EAAIC,EAAI/yC,EADtBjsB,EAAO7/B,EAAM8d,KAAKkkC,WAetB,OAbI0kC,EAAS7mD,EAAK,KACd8uB,EAAQ9uB,EAAK,GACbgvB,EAAQhvB,EAAK,GACb++D,EAAK/+D,EAAK,GACVg/D,EAAKh/D,EAAK,GACVisB,EAAKjsB,EAAK,KAEV8uB,EAAQpC,EAAMqC,KAAK/uB,EAAK,IACxBgvB,EAAQtC,EAAMqC,KAAK/uB,EAAK,IACxB++D,EAAK/+D,EAAK,GAAGhgC,OACbg/F,EAAKh/D,EAAK,GAAGhgC,OACbisD,EAAKjsB,EAAK,IAEP7+B,EAAKwD,IAAImqD,EAAQE,IAAU/C,EAAK9qD,EAAKiD,MAAM,EAAI26F,EAAK,EAAIC,GAAM,KAOvEkB,MAAO,WACL,IAEID,EAFAjgE,EAAO7/B,EAAM8d,KAAKkkC,WAGF,IAAhBniB,EAAKhgC,QACPigG,EAASjgE,EAAK,GACdA,EAAOA,EAAK7/B,MAAM,IACO,IAAhB6/B,EAAKhgC,QACdigG,EAASvzC,EAAMuzC,OAAOjgE,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAC/DA,EAAOA,EAAK7/B,MAAM,KAElB8/F,EAASvzC,EAAMuzC,OAAOjgE,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAC7CA,EAAOA,EAAK7/B,MAAM,IAGpB,IAAIuC,EAAIs9B,EAAK,GACT3O,EAAI2O,EAAK,GAEb,OAAO,EAAI0sB,EAAMmrC,MAAM7qC,IAAIizC,EAAQ5uE,EAAG3uB,EAAI2uB,IAG5C8uE,SAAU,SAAkBr7B,GAM1B,IALA,IAAI7Y,EAAKS,EAAM4/B,YAAYxnB,GACvBs7B,EAAQt7B,EAAOnjE,KAAI,SAAUU,GAAM,OAAOqqD,EAAMqC,KAAK1sD,MACrDK,EAAIoiE,EAAOhnB,QAAO,SAAUp7C,EAAGL,GAAM,OAAOK,EAAIL,EAAIrC,SAAU,GAE9D+pF,EAAU,GACL1pF,EAAI,EAAGA,EAAIykE,EAAO9kE,SAAUK,EACjC,IAAK,IAAI+E,EAAI/E,EAAI,EAAG+E,EAAI0/D,EAAO9kE,SAAUoF,EAAG,CACxC,IAAI+oD,EAAIzB,EAAMwzC,MAAME,EAAM//F,GAAI+/F,EAAMh7F,GAAI0/D,EAAOzkE,GAAGL,OAAQ8kE,EAAO1/D,GAAGpF,OAAQisD,EAAIvpD,EAAGoiE,EAAO9kE,QAC1F+pF,EAAQp7E,KAAK,CAAC,CAACtO,EAAG+E,GAAI+oD,IAI9B,OAAO47B,KAKXr9B,EAAM0lB,OAAO,CAIX9jB,SAAU,WACR,IAEA+xC,EAFIrgE,EAAO7/B,EAAM8d,KAAKkkC,WACtB+2C,EAAM,IAAIz3F,MAAM,GAWhB,OARE4+F,EADkB,IAAhBrgE,EAAKhgC,OACEmB,EAAKwD,IAAI+nD,EAAM8E,OAAOrE,IAAIntB,EAAK,GAAK,EAAG,EAAG,GACjCA,EAAK,GAAK7+B,EAAKiD,KAAK47B,EAAK,KAElC7+B,EAAKwD,IAAI+nD,EAAM8E,OAAOrE,IAAIntB,EAAK,GAAK,EAAG,EAAG,GACjC0sB,EAAMsG,MAAMhzB,EAAK,IAAM7+B,EAAKiD,KAAK47B,EAAK,GAAGhgC,SAE7Dk5F,EAAI,GAAKl5D,EAAK,GAAKqgE,EACnBnH,EAAI,GAAKl5D,EAAK,GAAKqgE,EACZnH,GAMT3qC,IAAK,WACH,IAEA8xC,EAFIrgE,EAAO7/B,EAAM8d,KAAKkkC,WACtB+2C,EAAM,IAAIz3F,MAAM,GAWhB,OARE4+F,EADkB,IAAhBrgE,EAAKhgC,OACEmB,EAAKwD,IAAI+nD,EAAM2H,SAASlH,IAAIntB,EAAK,GAAK,EAAGA,EAAK,GAAK,GAC1CA,EAAK,GAAK7+B,EAAKiD,KAAK47B,EAAK,KAElC7+B,EAAKwD,IAAI+nD,EAAM2H,SAASlH,IAAIntB,EAAK,GAAK,EAAGA,EAAK,GAAGhgC,OAAS,GACjD0sD,EAAMsG,MAAMhzB,EAAK,IAAI,GAAQ7+B,EAAKiD,KAAK47B,EAAK,GAAGhgC,SAEnEk5F,EAAI,GAAKl5D,EAAK,GAAKqgE,EACnBnH,EAAI,GAAKl5D,EAAK,GAAKqgE,EACZnH,GAGToH,YAAa,SAAqBC,EAAQ1zC,GACxC,OAAO0zC,EAAS1zC,KAIpBH,EAAM0lB,OAAO1lB,EAAMy6B,GAAI,CACrB74B,SAAU,SAAkBpnD,EAAO2lD,GACjC,OAAOH,EAAM4B,SAASpnD,EAAO2lD,EAAO5iD,KAAKyxE,YAG3CntB,IAAK,SAAarnD,EAAO2lD,GACvB,OAAOH,EAAM6B,IAAIrnD,EAAO2lD,EAAO5iD,KAAKyxE,cAexChvB,EAAM0lB,OAAO1lB,EAAMy6B,GAAI,CACrBqZ,gCAAiC,SAAyCtM,EAAI6K,EAAI3K,EAAI4K,GACpF,IAAIz8F,EAAIu8F,EAAwB5K,EAAI6K,EAAI3K,EAAI4K,GAC5C,OAAOtyC,EAAMyyC,MAAM58F,EAAG,IAGxBk+F,gCAAiC,SAAyCvM,EAAI6K,EAAI3K,EAAI4K,GACpF,IAAIz8F,EAAIu8F,EAAwB5K,EAAI6K,EAAI3K,EAAI4K,GAC5C,OAAOtyC,EAAMyyC,MAAM58F,EAAG,MA9UzB,CAkVCmqD,EAAOvrD,MACTurD,EAAMg0C,OAAU,WACd,SAASC,EAAYC,GACnB,IAAIC,EAAYD,EAAK,GAAG5gG,OAOxB,OANgB0sD,EAAMi7B,OAAOkZ,GAAWl/F,KAAI,SAASm/F,GACnD,IAAIC,EACAr0C,EAAMi7B,OAAOkZ,GAAW1jD,QAAO,SAAS98C,GAAG,OAAOA,IAAIygG,KAC1D,OAAOE,EAAIt0C,EAAMsB,IAAI4yC,EAAME,GAAan/F,KAAI,SAASc,GAAI,OAAOA,EAAE,MACvDiqD,EAAMsB,IAAI4yC,EAAMG,OAS/B,SAASC,EAAIC,EAAOL,GAClB,IAAIM,EAAOD,EAAMjhG,OACbmhG,EAAWP,EAAK,GAAG5gG,OAAS,EAC5BohG,EAAWF,EAAKC,EAAW,EAC3BE,EAAO30C,EAAMsvC,MAAM4E,EAAMK,GACzBK,EACA50C,EAAMmtC,SAAS+G,EAAMS,EAAK1/F,KAAI,SAASc,GAAK,MAAO,CAACA,OAC/Cd,KAAI,SAASwsD,GAAK,OAAOA,EAAE,MAChCozC,EAAQ70C,EAAMitC,SAASsH,EAAOK,GAC9BE,EAAO90C,EAAMqC,KAAKkyC,GAKlBQ,EAAM/0C,EAAM1nD,IAAIs8F,EAAQ3/F,KAAI,SAAS87D,GACvC,OAAOt8D,KAAKw0C,IAAI8nB,EAAI+jC,EAAM,OAExBE,EAAMh1C,EAAM1nD,IAAIi8F,EAAMt/F,KAAI,SAASuC,EAAG7D,GACxC,OAAOc,KAAKw0C,IAAIzxC,EAAIo9F,EAAQjhG,GAAI,OAE9BshG,EAAMF,EAAMC,EAEhB,MAAO,CACHd,KAAKA,EACLK,MAAMA,EACNC,KAAKA,EACLC,SAASA,EACTC,SAASA,EACTC,KAAKA,EACLC,QAAQA,EACRC,MAAMA,EACNC,KAAKA,EACLG,IAAIA,EACJF,IAAIA,EACJC,IAAIA,EACJE,GAdMH,EAAME,GAoBlB,SAASE,EAAOC,GACd,IAAIC,EAAepB,EAAYmB,EAAMlB,MAEjCoB,EAAW7gG,KAAKiD,KAAK09F,EAAMJ,IAAOI,EAAMV,UACxCa,EAAYF,EAAapgG,KAAI,SAASugG,GACxC,IAAIP,EAAMO,EAAIP,IACVC,EAAKM,EAAIN,GACb,OAAOI,EAAW7gG,KAAKiD,KAAKu9F,GAAO,EAAIC,OAErCO,EAAaL,EAAMT,KAAK1/F,KAAI,SAAS0/F,EAAMhhG,GAC7C,OAAQghG,EAAO,GAAKY,EAAU5hG,MAE5B+hG,EAASD,EAAWxgG,KAAI,SAASgvB,GACnC,IAAI0xE,EAAU31C,EAAM2H,SAASrH,IAAIr8B,EAAGmxE,EAAMV,UAC1C,OAAiD,GAAzCiB,EAAU,GAAM,EAAIA,EAAUA,MAEpCltF,EAAIu3C,EAAM2H,SAASlH,IAAI,KAAO20C,EAAMV,UACpCkB,EAAaR,EAAMT,KAAK1/F,KAAI,SAAS0/F,EAAMhhG,GAC7C,IAAIupD,EAAIz0C,EAAI8sF,EAAU5hG,GACtB,MAAO,CAACghG,EAAOz3C,EAAGy3C,EAAOz3C,MAE3B,MAAO,CACH24C,GAAIN,EACJtxE,EAAGwxE,EACHh0C,EAAGi0C,EACHJ,SAAUA,EACVM,WAAYA,GAIlB,SAASE,EAAOV,GACd,IAEoBr/F,EAAGs8F,EAAIC,EAFvByD,EACCX,EAAMF,GAAKE,EAAMX,WAAc,EAAIW,EAAMF,IAAME,EAAMV,UAK1D,MAAO,CAAEqB,YAAaA,EAAalC,OADtB,GAHO99F,EAGEggG,EAHC1D,EAGY+C,EAAMX,SAHdnC,EAGwB8C,EAAMV,SAFhD10C,EAAMI,KAAKE,IAAIvqD,GAAKu8F,EAAKD,EAAKt8F,GAAIs8F,EAAK,EAAGC,EAAK,KAM1D,SAAS0D,EAASzB,EAAOL,GACvB,IAAIkB,EAAQd,EAAIC,EAAML,GAClBtB,EAAQuC,EAAOC,GACfhC,EAAQ0C,EAAOV,GAGfa,EACA,GAAK,EAAIb,EAAMF,MAAQE,EAAMZ,KAAO,GAAMY,EAAMV,UAIpD,OAHAU,EAAMnxE,EAAI2uE,EACVwC,EAAMrkC,EAAIqiC,EACVgC,EAAMa,UAAYA,EACXb,EAGT,MAAO,CAAEd,IAAK0B,GA/GA,GA4HhBh2C,EAAM0lB,OAAO,CACXwwB,aAAc,WAMZ,IADA,IAAIC,EAAa,IAAIphG,MAAM0gD,UAAUniD,QAC7BK,EAAE,EAAEA,EAAE8hD,UAAUniD,OAAOK,IAAI,CACjC,IAAIqgE,EAAQ,CAAC,GACbmiC,EAAWxiG,GAAIqgE,EAAMxwD,OAAOiyC,UAAU9hD,IAExC,OAAOqsD,EAAMm2C,IAIfC,cAAe,WAIb,IADA,IAAID,EAAa,IAAIphG,MAAM0gD,UAAU,GAAGniD,QAChCK,EAAE,EAAEA,EAAE8hD,UAAU,GAAGniD,OAAOK,IAAI,CACpC,IAAIqgE,EAAQ,CAAC,GACbmiC,EAAWxiG,GAAIqgE,EAAMxwD,OAAOiyC,UAAU,GAAG9hD,IAE3C,OAAOqsD,EAAMm2C,IAIfE,cAAe,SAAuBC,GAGpC,IADA,IAAIC,EAAO,IAAIxhG,MAAMuhG,EAAKhjG,QAClBK,EAAE,EAAEA,EAAE2iG,EAAKhjG,OAAOK,IACxB4iG,EAAK5iG,GAAK2iG,EAAK3iG,GAEjB,OAAOqsD,EAAMo2C,cAAcG,IAI7BC,aAAc,SAAsBxiC,GAClC,OAAOhU,EAAMgU,GAAOunB,aAGtBkb,cAAe,SAAuBH,GACpC,OAAOA,EAAK/a,aAGdmb,WAAY,SAAoBvkB,EAAEP,GAChC,IAAIj+E,EAAG+E,EAAGisB,EAAGvxB,EAAQkF,EACrB,GAAI65E,EAAE0I,QAAUjJ,EAAEgJ,OAAQ,CACxB,GAAGhJ,EAAEgJ,OAAO,EAAE,CAEZ,IADAxnF,EAAS,GACJO,EAAI,EAAGA,EAAIw+E,EAAEyI,OAAQjnF,IAExB,IADAP,EAAOO,GAAK,GACP+E,EAAI,EAAGA,EAAIk5E,EAAEiJ,OAAQniF,IAAK,CAE7B,IADAJ,EAAM,EACDqsB,EAAI,EAAGA,EAAIwtD,EAAE0I,OAAQl2D,IACxBrsB,GAAO65E,EAAEnD,UAAUr7E,GAAGgxB,GAAKitD,EAAE5C,UAAUrqD,GAAGjsB,GAE5CtF,EAAOO,GAAG+E,GAAKJ,EAGnB,OAAO0nD,EAAM5sD,GAGf,IADAA,EAAS,GACJO,EAAI,EAAGA,EAAIw+E,EAAEyI,OAAQjnF,IAExB,IADAP,EAAOO,GAAK,GACP+E,EAAI,EAAGA,EAAIk5E,EAAEiJ,OAAQniF,IAAK,CAE7B,IADAJ,EAAM,EACDqsB,EAAI,EAAGA,EAAIwtD,EAAE0I,OAAQl2D,IACxBrsB,GAAO65E,EAAEnD,UAAUr7E,GAAGgxB,GAAKitD,EAAE5C,UAAUt2E,GAEzCtF,EAAOO,GAAG+E,GAAKJ,EAGnB,OAAO0nD,EAAM5sD,KAMjBujG,QAAS,SAAiBC,EAAMC,GAG9B,IAAIC,EAAW92C,EAAM+2C,YAAYH,GAE7BI,EAAUJ,EAAMrb,YAChB0b,EAAOj3C,EAAM02C,WAAW12C,EAAM82C,GAAUE,GAC5C,OAAOh3C,EAAM02C,WAAWO,EAAKJ,IAI/BK,SAAU,SAAkBN,EAAMC,EAAMnE,GACtC,IAAItyC,EAAOJ,EAAM22C,QAAQC,EAAMC,GAE3BM,EAAU,CACdA,MAAgB,IACZC,EAAWp3C,EAAMo3C,SAASR,EAAOx2C,GACrC+2C,EAAQE,KAAOD,EACf,IAAIE,EAAWT,EAAMx0C,OACrB80C,EAAQI,MAAMC,UAAYx3C,EAAMw3C,UAAUX,EAAOO,GAEjDD,EAAQI,MAAME,IAAMz3C,EAAMy3C,IAAIL,EAAUE,GACxCH,EAAQI,MAAMG,IAAMP,EAAQI,MAAME,KAAOb,EAAM,GAAGtjG,OAAS,GAE3D6jG,EAAQI,MAAMI,IAAM33C,EAAM23C,IAAId,EAAOO,GACrCD,EAAQI,MAAMK,IACVT,EAAQI,MAAMI,KAAOd,EAAMvjG,QAAUsjG,EAAM,GAAGtjG,OAAS,GAAK,GAEhE6jG,EAAQI,MAAMM,IAAM73C,EAAM63C,IAAIhB,EAAOS,GACrCH,EAAQI,MAAMO,IAAMX,EAAQI,MAAMM,KAAOhB,EAAMvjG,OAAS,GAExD6jG,EAAQI,MAAMQ,GAAK,EAAKZ,EAAQI,MAAMI,IAAMR,EAAQI,MAAMM,IACtDV,EAAQI,MAAMQ,GAAK,IAAGZ,EAAQI,MAAMQ,GAAK,GAE7CZ,EAAQI,MAAMS,OAASb,EAAQI,MAAMG,IAAMP,EAAQI,MAAMK,IACzDT,EAAQI,MAAM1D,OACV7zC,EAAMmzC,WAAWgE,EAAQI,MAAMS,OACdpB,EAAM,GAAGtjG,OAAS,EAClBujG,EAAMvjG,QAAUsjG,EAAM,GAAGtjG,OAAS,GAAK,GAE5D6jG,EAAQI,MAAMU,KAAOxjG,KAAKiD,KAAKy/F,EAAQI,MAAMK,KAE7CT,EAAQI,MAAMW,MAAQ,EAAKf,EAAQI,MAAMK,IAAMT,EAAQI,MAAMO,IACzDX,EAAQI,MAAMW,MAAQ,IAAGf,EAAQI,MAAMW,MAAQ,GAEnDf,EAAQgB,MAAQ,IAAIpjG,MAAM6hG,EAAM,GAAGtjG,QAInC,IAHA,IACI8kG,EAAKC,EAAIhQ,EADTiQ,EAAQt4C,EAAM+2C,YAAYH,GAGtBjjG,EAAE,EAAGA,EAAEysD,EAAK9sD,OAAOK,IACzBykG,EAAI3jG,KAAKiD,KAAKy/F,EAAQI,MAAMK,IAAMnjG,KAAKwD,IAAIqgG,EAAM3kG,GAAGA,KACpD0kG,EAAI5jG,KAAKwD,IAAImoD,EAAKzsD,GAAKykG,GACvB/P,EAAIroC,EAAM4yC,MAAMyF,EAAIxB,EAAMvjG,OAASsjG,EAAM,GAAGtjG,OAAS,EAAGo/F,GAExDyE,EAAQgB,MAAMxkG,GAAG,CAACysD,EAAKzsD,GAAIykG,EAAKC,EAAIhQ,GAItC,OADA8O,EAAQR,QAAUv2C,EACX+2C,GAGToB,SAAU,SAAkB3B,GAC1B,OAAO52C,EAAM02C,WAAWE,EAAMrb,YAAYqb,IAI5CG,YAAa,SAAqBH,GAChC,IAAI77E,EAAQilC,EAAM02C,WAAWE,EAAMrb,YAAYqb,GAE/C,OADe52C,EAAMS,IAAI1lC,IAI3Bq8E,SAAU,SAAkBR,EAAOx2C,GACjC,IAAIi3C,EAAOr3C,EAAM02C,WAAWE,EAAOx2C,GACnC,OAAO,IAAIJ,EAAMq3C,IAGnBG,UAAW,SAAmBX,EAAOO,GACnC,OAAOp3C,EAAMw4C,eAAe3B,EAAOO,IAGrCK,IAAK,SAAaL,EAAUE,GAE1B,IADA,IAAIG,EAAM,EACF9jG,EAAI,EAAGA,EAAIyjG,EAAS9jG,OAAQK,IAClC8jG,GAAOhjG,KAAKw0C,IAAImuD,EAASzjG,GAAK2jG,EAAU,GAE1C,OAAOG,GAGTE,IAAK,SAAad,EAAOO,GAEvB,IADA,IAAIO,EAAM,EACFhkG,EAAI,EAAGA,EAAIkjG,EAAMvjG,OAAQK,IAC/BgkG,GAAOljG,KAAKw0C,IAAI4tD,EAAMljG,GAAKyjG,EAASzjG,GAAI,GAE1C,OAAOgkG,GAGTE,IAAK,SAAahB,EAAOS,GAEvB,IADA,IAAIO,EAAM,EACFlkG,EAAI,EAAGA,EAAIkjG,EAAMvjG,OAAQK,IAC/BkkG,GAAOpjG,KAAKw0C,IAAI4tD,EAAMljG,GAAK2jG,EAAU,GAEvC,OAAOO,GAGTW,eAAgB,SAAwBrmB,EAAEP,GAExC,IADA,IAAI4a,EAAM,IAAIz3F,MAAMo9E,EAAE7+E,QACdK,EAAE,EAAEA,EAAEw+E,EAAE7+E,OAAOK,IAAI,CACzB64F,EAAI74F,GAAK,IAAIoB,MAAMo9E,EAAEx+E,GAAGL,QACxB,IAAI,IAAIoF,EAAE,EAAEA,EAAEy5E,EAAEx+E,GAAGL,OAAOoF,IACxB8zF,EAAI74F,GAAG+E,GAAGy5E,EAAEx+E,GAAG+E,GAAGk5E,EAAEj+E,GAAG+E,GAG3B,OAAOsnD,EAAMwsC,MAIfxsC,EAAMA,MAAQA,EAEPA,EAn4JgB1qD,0CCFzB,SAASmjG,EAASvZ,GACd,OAAO,IAAIwZ,UAAUxZ,GAGzB,SAASyZ,EAAUzZ,GACf,OAAO,IAAI0Z,WAAW1Z,GAG1B,SAAS2Z,EAAQ3Z,GACb,OAAO,IAAI4Z,WAAW5Z,GAG1B,SAAS6Z,EAAU7Z,GACf,OAAO,IAAI8Z,aAAa9Z,GAG5B,SAAS+Z,EAAW/Z,GAChB,OAAO,IAAIga,aAAaha,GAG5B,SAASia,EAAY7lE,GACjB,GAAmB,GAAfA,EAAKhgC,OACL,OAAOylG,EAAUzlE,EAAK,IAE1B,IAAI8lE,EAAK9lE,EAAK,GACdA,EAAOA,EAAK7/B,MAAM,GAElB,IADA,IAAI0+E,EAAI,GACCx+E,EAAI,EAAGA,EAAIylG,EAAIzlG,IACpBw+E,EAAElwE,KAAKk3F,EAAY7lE,IAEvB,OAAO6+C,EAEX,SAASknB,EAAU/lE,GACf,GAAmB,GAAfA,EAAKhgC,OACL,OAAOulG,EAAQvlE,EAAK,IAExB,IAAI8lE,EAAK9lE,EAAK,GACdA,EAAOA,EAAK7/B,MAAM,GAElB,IADA,IAAI0+E,EAAI,GACCx+E,EAAI,EAAGA,EAAIylG,EAAIzlG,IACpBw+E,EAAElwE,KAAKo3F,EAAU/lE,IAErB,OAAO6+C,EAGX,SAASmnB,EAAYhmE,GACjB,GAAmB,GAAfA,EAAKhgC,OACL,OAAOqlG,EAAUrlE,EAAK,IAE1B,IAAI8lE,EAAK9lE,EAAK,GACdA,EAAOA,EAAK7/B,MAAM,GAElB,IADA,IAAI0+E,EAAI,GACCx+E,EAAI,EAAGA,EAAIylG,EAAIzlG,IACpBw+E,EAAElwE,KAAKq3F,EAAYhmE,IAEvB,OAAO6+C,EAGX,SAASonB,EAAYjmE,GACjB,GAAmB,GAAfA,EAAKhgC,OACL,OAAO,IAAIyB,MAAMu+B,EAAK,IAE1B,IAAI8lE,EAAK9lE,EAAK,GACdA,EAAOA,EAAK7/B,MAAM,GAElB,IADA,IAAI0+E,EAAI,GACCx+E,EAAI,EAAGA,EAAIylG,EAAIzlG,IACpBw+E,EAAElwE,KAAKs3F,EAAYjmE,IAEvB,OAAO6+C,EAIX,IAAIqnB,EAAS,CAEbA,KAAc,SAAUniG,EAAGoiG,EAAWC,EAASpvF,GAC3C,GAAwB,GAApBmrC,UAAUniD,OACV,IAAK,IAAIK,EAAI,EAAGA,EAAI0D,EAAE/D,OAAQK,IAC1B0D,EAAE1D,GAAK8hD,UAAU,QAGrB,IAAS9hD,EAAI8lG,EAAW9lG,EAAI+lG,EAAS/lG,IACjC0D,EAAE1D,GAAK2W,IAKfqvF,EAAS,CAEbA,UAAmB,SAAUC,EAAKC,EAAQC,EAAMC,EAASzmG,GAErD,IADA,IAAI0mG,EAASH,EAASvmG,EACfumG,EAASG,GACZF,EAAKC,KAAaH,EAAIC,OAI1BI,EAAO,GAUX,SAASC,EAAWC,GAChB58F,KAAK48F,QAAUA,EAVnBF,EAAKrQ,MAAQ,mBACbqQ,EAAKG,WAAa,SAAUrkG,GACxB,OAAOtB,KAAKq/D,MAAM/9D,IAGtBkkG,EAAKI,aAAe,SAAUtkG,EAAGyB,GAC7B,OAAO/C,KAAKq/D,MAAM/9D,GAAKyB,GAS3B0iG,EAAWI,oBAAsB,IAAIJ,EAAW,GAIhDA,EAAWK,oBAAsB,IAAIL,EAAW,GAIhDA,EAAWM,sBAAwB,IAAIN,EAAW,GAIlDA,EAAWO,mBAAqB,IAAIP,EAAW,GAE/C,IAAIQ,EAAQ,GAGZ,SAASC,EAAQR,GACb58F,KAAK48F,QAAUA,EAHnBO,EAAME,UAAY,YAKlBD,EAAQE,QAAU,IAAIF,EAAQ,GAC9BA,EAAQG,OAAS,IAAIH,EAAQ,GAC7BA,EAAQI,OAAS,IAAIJ,EAAQ,GAC7BA,EAAQK,QAAU,IAAIL,EAAQ,GAC9BA,EAAQM,SAAW,IAAIN,EAAQ,GAC/BA,EAAQO,YAAcP,EAAQM,SAE9B,IAIA,EAAiB,CACb,OAAUtB,EACV,QAAWgB,EACX,MAASD,EACT,WAAcR,EACd,KAAQD,EACR,OAAUT,EACV,YAAeD,EACf,SAAYd,EACZ,WAAcQ,EACd,UAAaF,EACb,YAAeI,EACf,QAAWN,EACX,UAAaQ,EACb,UAAaV,EACb,YAAeW,EACf,OApBS,SAAUvjG,MC3GnB4jG,EAASwB,EAAOxB,OAIhBM,EAAOkB,EAAOlB,KACdT,EAAS2B,EAAO3B,OAIhBT,EAAYoC,EAAOpC,UASvB,SAASqC,IAER,IAAIC,EAAW,EACb,kBACA,mBACA,mBACA,kBACA,mBACA,mBACA,kBACA,mBACA,mBACA,kBACA,kBACA,kBACA,kBACA,mBACA,mBACA,kBACA,kBAAuB,mBAEvB,mBACA,mBACA,kBACA,iBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,iBACA,kBACA,mBACA,mBACA,mBACA,kBACA,kBAAuB,mBAEvB,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,mBACA,kBACA,kBACA,mBACA,kBACA,mBACA,mBACA,oBACA,oBACA,kBACA,kBAAuB,mBAEvB,mBACA,mBACA,mBACA,kBACA,mBACA,mBACA,kBACA,mBACA,mBACA,kBACA,kBACA,mBACA,mBACA,oBACA,oBACA,kBACA,kBAAuB,mBAEvB,kBACA,kBACA,kBACA,kBACA,mBACA,mBACA,kBACA,mBACA,mBACA,kBACA,kBACA,mBACA,kBACA,oBACA,mBACA,mBACA,kBAAuB,mBAEvB,mBACA,kBACA,kBACA,kBACA,mBACA,mBACA,mBACA,mBACA,kBACA,mBACA,kBACA,mBACA,mBACA,oBACA,oBACA,kBACA,kBAAuB,mBAEvB,mBACA,kBACA,kBACA,kBACA,kBACA,mBACA,mBACA,mBACA,kBACA,mBACA,mBACA,mBACA,kBACA,kBACA,mBACA,iBACA,kBAAuB,mBAEvB,mBACA,mBACA,kBACA,mBACA,mBACA,kBACA,mBACA,mBACA,mBACA,mBACA,kBACA,oBACA,mBACA,oBACA,oBACA,mBACA,mBACA,mBAEA,mBACA,mBACA,oBACA,mBACA,mBACA,kBACA,kBACA,mBACA,mBACA,kBACA,kBACA,mBACA,oBACA,mBACA,mBACA,mBACA,kBAAuB,mBAEvB,kBACA,iBACA,oBACA,kBACA,mBACA,mBACA,kBACA,mBACA,kBACA,kBACA,mBACA,oBACA,oBACA,oBACA,iBACA,mBACA,kBAAuB,kBAEvB,kBACA,kBACA,oBACA,kBACA,kBACA,mBACA,kBACA,mBACA,oBACA,iBACA,kBACA,mBACA,oBACA,oBACA,mBACA,kBACA,kBAAuB,kBAEvB,kBACA,kBACA,oBACA,kBACA,mBACA,mBACA,kBACA,mBACA,oBACA,mBACA,mBACA,oBACA,oBACA,oBACA,oBACA,kBACA,iBAAuB,mBAEvB,kBACA,kBACA,kBACA,mBACA,mBACA,mBACA,mBACA,mBACA,oBACA,mBACA,mBACA,oBACA,oBACA,mBACA,mBACA,kBACA,kBAAuB,mBAEvB,kBACA,iBACA,mBACA,mBACA,mBACA,kBACA,kBACA,mBACA,oBACA,mBACA,mBACA,mBACA,oBACA,oBACA,mBACA,kBACA,mBAAuB,mBAEvB,iBACA,kBACA,oBACA,kBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,oBACA,oBACA,oBACA,kBACA,mBAAuB,kBAEvB,WAAgBpB,EAAKrQ,MAAQ,GAAM,QACnC,WAAgBqQ,EAAKrQ,MAAQ,GAAM,QACnC,WAAeqQ,EAAKrQ,MAAQ,GAAM,QAClC,WAAeqQ,EAAKrQ,MAAQ,GAAM,QAClC,UAAcqQ,EAAKrQ,MAAQ,GAAM,QACjC,UAAcqQ,EAAKrQ,MAAQ,GAAM,QACjC,UAAcqQ,EAAKrQ,MAAQ,GAAM,QACjC,SAAaqQ,EAAKrQ,MAAQ,GAAM,QAEhC,mBAA2B,mBAC3B,kBAAyB,mBACzB,mBAA0B,mBAC1B,mBAGE0R,EAAK,GACLrtD,EAAK,GAELstD,EAAM,CACN,CACC,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,oBACA,qBACA,qBAEA,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,sBAEC,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBAEA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,qBACA,sBAEF,CACC,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,qBAEA,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,sBAEC,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,qBACA,qBAED,EACA,EACA,EACA,EACA,EACA,GACC,sBACA,sBACA,sBAEF,CACC,kBACA,iBACA,kBAEA,kBACA,kBACA,iBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBAEA,iBACA,kBACA,kBACA,mBACC,mBACA,kBACD,kBACA,IAEC,mBACA,mBACA,mBACA,mBACA,oBACA,oBACA,oBACA,oBAED,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,iBACA,mBAED,CACC,EACA,EACA,EACA,EACA,EACA,EACA,qBACA,qBACA,qBAEA,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,oBACA,sBAEC,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBAEA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,uBAIFC,EAAWD,EAAIE,EAAQC,YACvBC,EAAKJ,EAAIE,EAAQC,YACjBE,EAAKL,EAAIE,EAAQC,YACjBG,EAAKN,EAAIE,EAAQC,YAajBhL,EAAQ,CACR,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GACtD,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,IAM5D,SAASoL,EAAe94C,EAAI+4C,EAAO1kG,GAKlC,IAJA,IAuEWs7E,EAAG/8E,EA8BTomG,EArGDC,EAAK,GAELh5C,EAAK84C,EAAQ,IAAM,GAAK,IAEnBpoG,GAAK,GAAIA,EAAI,EAAGA,IAAK,CAC7B,IAAIsgF,EAAG3C,EAAGrtD,EAEVgwD,EAAIonB,EAASY,GAAM,IACnB3qB,EAAItuB,EAAGC,GAAM,KAAOgxB,EACpBhwD,EAAI++B,EAAG+4C,EAAQ,KAAO9nB,EACtBA,EAA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,GAC1D,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC1D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC7D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC7D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAC3D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAC3D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAC1D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EACzD,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG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GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAGhEA,OAAgB,CACZ,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GACxD,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GACxD,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GACzD,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC1D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAGhEA,KAAc,CACV,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GACxD,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GACxD,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GACzD,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC1D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GA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","sources":["../node_modules/bahttext/src/index.js","../node_modules/bessel/bessel.js","../node_modules/chevrotain/src/version.ts","../node_modules/chevrotain/src/scan/reg_exp_parser.ts","../node_modules/chevrotain/src/scan/reg_exp.ts","../node_modules/chevrotain/src/scan/lexer.ts","../node_modules/chevrotain/src/scan/tokens.ts","../node_modules/chevrotain/src/scan/lexer_errors_public.ts","../node_modules/chevrotain/src/scan/lexer_public.ts","../node_modules/chevrotain/src/scan/tokens_public.ts","../node_modules/chevrotain/src/parse/grammar/gast/gast_public.ts","../node_modules/chevrotain/src/parse/grammar/rest.ts","../node_modules/chevrotain/src/parse/grammar/gast/gast_visitor_public.ts","../node_modules/chevrotain/src/parse/grammar/gast/gast.ts","../node_modules/chevrotain/src/parse/grammar/first.ts","../node_modules/chevrotain/src/parse/constants.ts","../node_modules/chevrotain/src/parse/grammar/follow.ts","../node_modules/chevrotain/src/parse/errors_public.ts","../node_modules/chevrotain/src/parse/grammar/resolver.ts","../node_modules/chevrotain/src/parse/grammar/interpreter.ts","../node_modules/chevrotain/src/parse/grammar/lookahead.ts","../node_modules/chevrotain/src/parse/grammar/checks.ts","../node_modules/chevrotain/src/parse/grammar/gast/gast_resolver_public.ts","../node_modules/chevrotain/src/parse/exceptions_public.ts","../node_modules/chevrotain/src/parse/parser/traits/recoverable.ts","../node_modules/chevrotain/src/parse/grammar/keys.ts","../node_modules/chevrotain/src/parse/parser/traits/looksahead.ts","../node_modules/chevrotain/src/parse/cst/cst.ts","../node_modules/chevrotain/src/lang/lang_extensions.ts","../node_modules/chevrotain/src/parse/cst/cst_visitor.ts","../node_modules/chevrotain/src/parse/parser/traits/tree_builder.ts","../node_modules/chevrotain/src/parse/parser/traits/lexer_adapter.ts","../node_modules/chevrotain/src/parse/parser/traits/recognizer_api.ts","../node_modules/chevrotain/src/parse/parser/traits/recognizer_engine.ts","../node_modules/chevrotain/src/parse/parser/traits/error_handler.ts","../node_modules/chevrotain/src/parse/parser/traits/context_assist.ts","../node_modules/chevrotain/src/parse/parser/traits/gast_recorder.ts","../node_modules/chevrotain/src/parse/parser/traits/perf_tracer.ts","../node_modules/chevrotain/src/parse/parser/parser.ts","../node_modules/chevrotain/src/diagrams/render_public.ts","../node_modules/chevrotain/src/generate/generate.ts","../node_modules/chevrotain/src/generate/generate_public.ts","../node_modules/chevrotain/src/api.ts","../node_modules/chevrotain/src/utils/utils.ts","../node_modules/classnames/index.js","../node_modules/cookie/index.js","../node_modules/fast-formula-parser/formulas/error.js","../node_modules/fast-formula-parser/formulas/functions/date.js","../node_modules/fast-formula-parser/formulas/functions/distribution.js","../node_modules/fast-formula-parser/formulas/functions/engineering.js","../node_modules/fast-formula-parser/formulas/functions/information.js","../node_modules/fast-formula-parser/formulas/functions/logical.js","../node_modules/fast-formula-parser/formulas/functions/math.js","../node_modules/fast-formula-parser/formulas/functions/reference.js","../node_modules/fast-formula-parser/formulas/functions/statistical.js","../node_modules/fast-formula-parser/formulas/functions/text.js","../node_modules/fast-formula-parser/formulas/functions/trigonometry.js","../node_modules/fast-formula-parser/formulas/functions/web.js","../node_modules/fast-formula-parser/formulas/helpers.js","../node_modules/fast-formula-parser/formulas/operators.js","../node_modules/fast-formula-parser/grammar/dependency/hooks.js","../node_modules/fast-formula-parser/grammar/dependency/utils.js","../node_modules/fast-formula-parser/grammar/hooks.js","../node_modules/fast-formula-parser/grammar/lexing.js","../node_modules/fast-formula-parser/grammar/parsing.js","../node_modules/fast-formula-parser/grammar/type/collection.js","../node_modules/fast-formula-parser/grammar/utils.js","../node_modules/fast-formula-parser/index.js","../node_modules/fast-formula-parser/ssf/ssf.js","../node_modules/jstat/dist/jstat.js","../node_modules/mic-recorder-to-mp3/node_modules/lamejs/src/js/common.js","../node_modules/mic-recorder-to-mp3/node_modules/lamejs/src/js/NewMDCT.js","../node_modules/mic-recorder-to-mp3/node_modules/lamejs/src/js/III_psy_xmin.js","../node_modules/mic-recorder-to-mp3/node_modules/lamejs/src/js/III_psy_ratio.js","../node_modules/mic-recorder-to-mp3/node_modules/lamejs/src/js/Encoder.js","../node_modules/mic-recorder-to-mp3/node_modules/lamejs/src/js/FFT.js","../node_modules/mic-recorder-to-mp3/node_modules/lamejs/src/js/PsyModel.js","../node_modules/mic-recorder-to-mp3/node_modules/lamejs/src/js/MPEGMode.js","../node_modules/mic-recorder-to-mp3/node_modules/lamejs/src/js/LameGlobalFlags.js","../node_modules/mic-recorder-to-mp3/node_modules/lamejs/src/js/L3Side.js","../node_modules/mic-recorder-to-mp3/node_modules/lamejs/src/js/GrInfo.js","../node_modules/mic-recorder-to-mp3/node_modules/lamejs/src/js/IIISideInfo.js","../node_modules/mic-recorder-to-mp3/node_modules/lamejs/src/js/ScaleFac.js","../node_modules/mic-recorder-to-mp3/node_modules/lamejs/src/js/NsPsy.js","../node_modules/mic-recorder-to-mp3/node_modules/lamejs/src/js/VBRSeekInfo.js","../node_modules/mic-recorder-to-mp3/node_modules/lamejs/src/js/LameInternalFlags.js","../node_modules/mic-recorder-to-mp3/node_modules/lamejs/src/js/ATH.js","../node_modules/mic-recorder-to-mp3/node_modules/lamejs/src/js/GainAnalysis.js","../node_modules/mic-recorder-to-mp3/node_modules/lamejs/src/js/ReplayGain.js","../node_modules/mic-recorder-to-mp3/node_modules/lamejs/src/js/MeanBits.js","../node_modules/mic-recorder-to-mp3/node_modules/lamejs/src/js/CBRNewIterationLoop.js","../node_modules/mic-recorder-to-mp3/node_modules/lamejs/src/js/Tables.js","../node_modules/mic-recorder-to-mp3/node_modules/lamejs/src/js/QuantizePVT.js","../node_modules/mic-recorder-to-mp3/node_modules/lamejs/src/js/Takehiro.js","../node_modules/mic-recorder-to-mp3/node_modules/lamejs/src/js/BitStream.js","../node_modules/mic-recorder-to-mp3/node_modules/lamejs/src/js/Lame.js","../node_modules/mic-recorder-to-mp3/node_modules/lamejs/src/js/Presets.js","../node_modules/mic-recorder-to-mp3/node_modules/lamejs/src/js/VBRQuantize.js","../node_modules/mic-recorder-to-mp3/node_modules/lamejs/src/js/CalcNoiseResult.js","../node_modules/mic-recorder-to-mp3/node_modules/lamejs/src/js/CalcNoiseData.js","../node_modules/mic-recorder-to-mp3/node_modules/lamejs/src/js/Quantize.js","../node_modules/mic-recorder-to-mp3/node_modules/lamejs/src/js/Reservoir.js","../node_modules/mic-recorder-to-mp3/node_modules/lamejs/src/js/Version.js","../node_modules/mic-recorder-to-mp3/node_modules/lamejs/src/js/VBRTag.js","../node_modules/mic-recorder-to-mp3/node_modules/lamejs/src/js/index.js","../node_modules/mic-recorder-to-mp3/src/encoder.js","../node_modules/mic-recorder-to-mp3/src/mic-recorder.js","../node_modules/moment-timezone/index.js","../node_modules/moment-timezone/moment-timezone.js","../node_modules/moment/moment.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/index.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/qr.js/lib/8BitByte.js","../node_modules/qr.js/lib/BitBuffer.js","../node_modules/qr.js/lib/ErrorCorrectLevel.js","../node_modules/qr.js/lib/Polynomial.js","../node_modules/qr.js/lib/QRCode.js","../node_modules/qr.js/lib/RSBlock.js","../node_modules/qr.js/lib/math.js","../node_modules/qr.js/lib/mode.js","../node_modules/qr.js/lib/util.js","../node_modules/react-dom/cjs/react-dom.production.min.js","../node_modules/react-dom/client.js","../node_modules/react-dom/index.js","../node_modules/react-qr-code/lib/QRCodeSvg/index.js","../node_modules/react-qr-code/lib/index.js","../node_modules/react-table/src/publicUtils.js","../node_modules/react-table/src/utils.js","../node_modules/react-table/src/makeDefaultPluginHooks.js","../node_modules/react-table/src/hooks/useColumnVisibility.js","../node_modules/react-table/src/hooks/useTable.js","../node_modules/react-table/src/plugin-hooks/useExpanded.js","../node_modules/react-table/src/filterTypes.js","../node_modules/react-table/src/plugin-hooks/useFilters.js","../node_modules/react-table/src/plugin-hooks/useGlobalFilter.js","../node_modules/react-table/src/aggregations.js","../node_modules/react-table/src/plugin-hooks/useGroupBy.js","../node_modules/react-table/src/sortTypes.js","../node_modules/react-table/src/plugin-hooks/useSortBy.js","../node_modules/react-table/src/plugin-hooks/usePagination.js","../node_modules/react-table/src/plugin-hooks/_UNSTABLE_usePivotColumns.js","../node_modules/react-table/src/plugin-hooks/useRowSelect.js","../node_modules/react-table/src/plugin-hooks/useRowState.js","../node_modules/react-table/src/plugin-hooks/useColumnOrder.js","../node_modules/react-table/src/plugin-hooks/useResizeColumns.js","../node_modules/react-table/src/plugin-hooks/useAbsoluteLayout.js","../node_modules/react-table/src/plugin-hooks/useBlockLayout.js","../node_modules/react-table/src/plugin-hooks/useFlexLayout.js","../node_modules/react-table/src/plugin-hooks/useGridLayout.js","../node_modules/react-table/index.js","../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/cjs/react.production.min.js","../node_modules/react/index.js","../node_modules/react/jsx-runtime.js","../node_modules/regexp-to-ast/lib/regexp-to-ast.js","../node_modules/scheduler/cjs/scheduler.production.min.js","../node_modules/scheduler/index.js","../javascript/dynamic|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/arrayLikeToArray.js","../javascript/dynamic|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/arrayWithHoles.js","../javascript/dynamic|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","../javascript/dynamic|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/assertThisInitialized.js","../javascript/dynamic|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/asyncToGenerator.js","../javascript/dynamic|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/classCallCheck.js","../javascript/dynamic|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/construct.js","../javascript/dynamic|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/createClass.js","../javascript/dynamic|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/createForOfIteratorHelper.js","../javascript/dynamic|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/createSuper.js","../javascript/dynamic|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/defineProperty.js","../javascript/dynamic|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/getPrototypeOf.js","../javascript/dynamic|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/inherits.js","../javascript/dynamic|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/isNativeFunction.js","../javascript/dynamic|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/isNativeReflectConstruct.js","../javascript/dynamic|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/iterableToArray.js","../javascript/dynamic|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","../javascript/dynamic|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/nonIterableRest.js","../javascript/dynamic|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/nonIterableSpread.js","../javascript/dynamic|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/objectSpread2.js","../javascript/dynamic|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","../javascript/dynamic|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/regeneratorRuntime.js","../javascript/dynamic|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/setPrototypeOf.js","../javascript/dynamic|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/slicedToArray.js","../javascript/dynamic|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/toConsumableArray.js","../javascript/dynamic|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/toPrimitive.js","../javascript/dynamic|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/toPropertyKey.js","../javascript/dynamic|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/typeof.js","../javascript/dynamic|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","../javascript/dynamic|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/wrapNativeSuper.js","../javascript/dynamic|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/regenerator/index.js","../webpack/bootstrap","../webpack/runtime/compat get default export","../webpack/runtime/define property getters","../webpack/runtime/hasOwnProperty shorthand","../webpack/runtime/make namespace object","../webpack/runtime/node module decorator","../javascript/esm|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/esm/typeof.js","../javascript/esm|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../javascript/esm|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../javascript/esm|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/esm/defineProperty.js","../javascript/esm|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/esm/objectSpread2.js","../javascript/esm|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","../javascript/esm|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","../javascript/esm|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/esm/slicedToArray.js","../javascript/esm|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","../javascript/esm|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","../javascript/esm|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","../javascript/esm|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js","../javascript/esm|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/esm/extends.js","../../packages/react-router/index.tsx","../../packages/react-router-dom/index.tsx","../javascript/esm|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","utils/graphqlTemplates.js","utils/constants.js","utils/helpers.js","utils/ratelimit.js","utils/coreApi.js","PrivateRoutes.js","containers/auth/Logout.jsx","../javascript/esm|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","../javascript/esm|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","../javascript/esm|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/esm/iterableToArray.js","../javascript/esm|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","../javascript/esm|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","../javascript/esm|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/@headlessui/react/dist/utils/match.js","../node_modules/@headlessui/react/dist/utils/render.js","../node_modules/@headlessui/react/dist/internal/open-closed.js","../javascript/esm|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../javascript/esm|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/esm/createClass.js","../node_modules/@headlessui/react/dist/utils/env.js","../node_modules/@headlessui/react/dist/hooks/use-iso-morphic-effect.js","../node_modules/@headlessui/react/dist/hooks/use-is-mounted.js","../node_modules/@headlessui/react/dist/hooks/use-latest-value.js","../node_modules/@headlessui/react/dist/hooks/use-server-handoff-complete.js","../node_modules/@headlessui/react/dist/hooks/use-event.js","../node_modules/@headlessui/react/dist/hooks/use-sync-refs.js","../node_modules/@headlessui/react/dist/utils/micro-task.js","../node_modules/@headlessui/react/dist/utils/disposables.js","../node_modules/@headlessui/react/dist/components/transitions/utils/transition.js","../node_modules/@headlessui/react/dist/utils/once.js","../node_modules/@headlessui/react/dist/hooks/use-disposables.js","../node_modules/@headlessui/react/dist/hooks/use-transition.js","../node_modules/@headlessui/react/dist/utils/class-names.js","../node_modules/@headlessui/react/dist/components/transitions/transition.js","../node_modules/@headlessui/react/dist/hooks/use-id.js","../node_modules/@headlessui/react/dist/components/keyboard.js","../node_modules/@headlessui/react/dist/utils/bugs.js","../node_modules/@headlessui/react/dist/internal/hidden.js","../node_modules/@headlessui/react/dist/utils/owner.js","../node_modules/@headlessui/react/dist/utils/focus-management.js","../node_modules/@headlessui/react/dist/hooks/use-tab-direction.js","../node_modules/@headlessui/react/dist/hooks/use-window-event.js","../node_modules/@headlessui/react/dist/hooks/use-owner.js","../node_modules/@headlessui/react/dist/hooks/use-event-listener.js","../node_modules/@headlessui/react/dist/hooks/use-watch.js","../node_modules/@headlessui/react/dist/components/focus-trap/focus-trap.js","../node_modules/@headlessui/react/dist/hooks/use-inert-others.js","../node_modules/@headlessui/react/dist/internal/portal-force-root.js","../node_modules/@headlessui/react/dist/components/portal/portal.js","../node_modules/@headlessui/react/dist/components/description/description.js","../node_modules/@headlessui/react/dist/internal/stack-context.js","../node_modules/@headlessui/react/dist/hooks/use-document-event.js","../node_modules/@headlessui/react/dist/hooks/use-outside-click.js","../node_modules/@headlessui/react/dist/utils/platform.js","../node_modules/@headlessui/react/dist/components/dialog/dialog.js","../node_modules/@heroicons/react/outline/esm/AdjustmentsIcon.js","../node_modules/@heroicons/react/outline/esm/AnnotationIcon.js","../node_modules/@heroicons/react/outline/esm/ArrowRightIcon.js","../node_modules/@heroicons/react/outline/esm/ArrowSmRightIcon.js","../node_modules/@heroicons/react/outline/esm/BadgeCheckIcon.js","../node_modules/@heroicons/react/outline/esm/BanIcon.js","../node_modules/@heroicons/react/outline/esm/BookOpenIcon.js","../node_modules/@heroicons/react/outline/esm/CameraIcon.js","../node_modules/@heroicons/react/outline/esm/CashIcon.js","../node_modules/@heroicons/react/outline/esm/CheckCircleIcon.js","../node_modules/@heroicons/react/outline/esm/CheckIcon.js","../node_modules/@heroicons/react/outline/esm/ClipboardCheckIcon.js","../node_modules/@heroicons/react/outline/esm/ClipboardCopyIcon.js","../node_modules/@heroicons/react/outline/esm/ClipboardListIcon.js","../node_modules/@heroicons/react/outline/esm/CloudUploadIcon.js","../node_modules/@heroicons/react/outline/esm/CollectionIcon.js","../node_modules/@heroicons/react/outline/esm/CreditCardIcon.js","../node_modules/@heroicons/react/outline/esm/DocumentDuplicateIcon.js","../node_modules/@heroicons/react/outline/esm/DocumentReportIcon.js","../node_modules/@heroicons/react/outline/esm/DocumentSearchIcon.js","../node_modules/@heroicons/react/outline/esm/DocumentTextIcon.js","../node_modules/@heroicons/react/outline/esm/DownloadIcon.js","../node_modules/@heroicons/react/outline/esm/DuplicateIcon.js","../node_modules/@heroicons/react/outline/esm/ExclamationIcon.js","../node_modules/@heroicons/react/outline/esm/ExternalLinkIcon.js","../node_modules/@heroicons/react/outline/esm/FolderOpenIcon.js","../node_modules/@heroicons/react/outline/esm/InformationCircleIcon.js","../node_modules/@heroicons/react/outline/esm/LinkIcon.js","../node_modules/@heroicons/react/outline/esm/LocationMarkerIcon.js","../node_modules/@heroicons/react/outline/esm/LogoutIcon.js","../node_modules/@heroicons/react/outline/esm/MailIcon.js","../node_modules/@heroicons/react/outline/esm/MenuAlt2Icon.js","../node_modules/@heroicons/react/outline/esm/MicrophoneIcon.js","../node_modules/@heroicons/react/outline/esm/NewspaperIcon.js","../node_modules/@heroicons/react/outline/esm/OfficeBuildingIcon.js","../node_modules/@heroicons/react/outline/esm/PencilAltIcon.js","../node_modules/@heroicons/react/outline/esm/PencilIcon.js","../node_modules/@heroicons/react/outline/esm/PhotographIcon.js","../node_modules/@heroicons/react/outline/esm/PlusCircleIcon.js","../node_modules/@heroicons/react/outline/esm/PlusIcon.js","../node_modules/@heroicons/react/outline/esm/RefreshIcon.js","../node_modules/@heroicons/react/outline/esm/ReplyIcon.js","../node_modules/@heroicons/react/outline/esm/SearchCircleIcon.js","../node_modules/@heroicons/react/outline/esm/SearchIcon.js","../node_modules/@heroicons/react/outline/esm/SparklesIcon.js","../node_modules/@heroicons/react/outline/esm/TrashIcon.js","../node_modules/@heroicons/react/outline/esm/TruckIcon.js","../node_modules/@heroicons/react/outline/esm/XIcon.js","containers/modals/AlertModal.jsx","components/NotificationCenter.jsx","containers/auth/PasswordReset.jsx","containers/auth/RequestPasswordReset.jsx","containers/auth/NotFound.jsx","containers/auth/ConnectionError.jsx","components/DataTable.jsx","../node_modules/@heroicons/react/solid/esm/ArrowCircleLeftIcon.js","../node_modules/@heroicons/react/solid/esm/ArrowDownIcon.js","../node_modules/@heroicons/react/solid/esm/ArrowLeftIcon.js","../node_modules/@heroicons/react/solid/esm/BanIcon.js","../node_modules/@heroicons/react/solid/esm/CheckCircleIcon.js","../node_modules/@heroicons/react/solid/esm/CheckIcon.js","../node_modules/@heroicons/react/solid/esm/ChevronDownIcon.js","../node_modules/@heroicons/react/solid/esm/ChevronRightIcon.js","../node_modules/@heroicons/react/solid/esm/ChevronUpIcon.js","../node_modules/@heroicons/react/solid/esm/ClipboardCheckIcon.js","../node_modules/@heroicons/react/solid/esm/CogIcon.js","../node_modules/@heroicons/react/solid/esm/CursorClickIcon.js","../node_modules/@heroicons/react/solid/esm/DocumentAddIcon.js","../node_modules/@heroicons/react/solid/esm/DocumentReportIcon.js","../node_modules/@heroicons/react/solid/esm/ExclamationIcon.js","../node_modules/@heroicons/react/solid/esm/ExternalLinkIcon.js","../node_modules/@heroicons/react/solid/esm/HomeIcon.js","../node_modules/@heroicons/react/solid/esm/InformationCircleIcon.js","../node_modules/@heroicons/react/solid/esm/LockClosedIcon.js","../node_modules/@heroicons/react/solid/esm/MinusSmIcon.js","../node_modules/@heroicons/react/solid/esm/PencilAltIcon.js","../node_modules/@heroicons/react/solid/esm/PlusCircleIcon.js","../node_modules/@heroicons/react/solid/esm/PlusSmIcon.js","../node_modules/@heroicons/react/solid/esm/RefreshIcon.js","../node_modules/@heroicons/react/solid/esm/SearchIcon.js","../node_modules/@heroicons/react/solid/esm/SelectorIcon.js","../node_modules/@heroicons/react/solid/esm/SparklesIcon.js","../node_modules/@heroicons/react/solid/esm/UserIcon.js","../node_modules/@heroicons/react/solid/esm/XCircleIcon.js","../node_modules/@heroicons/react/solid/esm/XIcon.js","../javascript/esm|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../javascript/esm|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/esm/inherits.js","../javascript/esm|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../javascript/esm|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","../javascript/esm|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../javascript/esm|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/esm/createSuper.js","../javascript/esm|/codebuild/output/src3406446728/src/core_client_portal/node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","components/useQuery.jsx","components/Safe.jsx","../node_modules/@headlessui/react/dist/hooks/use-resolve-button-type.js","../node_modules/@headlessui/react/dist/components/disclosure/disclosure.js","../node_modules/universal-cookie/es6/utils.js","../node_modules/universal-cookie/es6/Cookies.js","../node_modules/uuid/dist/esm-browser/rng.js","../node_modules/universal-cookie/es6/index.js","../node_modules/react-cookie/es6/Cookies.js","../node_modules/react-cookie/es6/CookiesContext.js","../node_modules/react-cookie/es6/useCookies.js","../node_modules/react-cookie/es6/utils.js","../node_modules/uuid/dist/esm-browser/regex.js","../node_modules/uuid/dist/esm-browser/stringify.js","../node_modules/uuid/dist/esm-browser/validate.js","../node_modules/uuid/dist/esm-browser/v4.js","containers/modals/ConfirmModal.jsx","components/NotificationTopRight.jsx","components/ui/LoadingSpinner.jsx","components/base/BasicImage.jsx","components/Tooltip.jsx","components/LimitedOrganisationAccess.jsx","components/CountrySelection.jsx","components/base/ImageZoom.jsx","components/base/ApiButton.jsx","containers/modals/MultiProductModal.jsx","components/PageTitle.jsx","../node_modules/@headlessui/react/dist/utils/calculate-active-index.js","../node_modules/@headlessui/react/dist/hooks/use-tree-walker.js","../node_modules/@headlessui/react/dist/hooks/use-tracked-pointer.js","../node_modules/@headlessui/react/dist/components/menu/menu.js","components/base/DropdownMenu.jsx","containers/modals/ClaimAttachments.jsx","containers/claim/ClaimItemSearch.jsx","containers/admin/AdminHAI.jsx","components/LimitedEnvironmentAccess.jsx","containers/modals/ProfileModal.jsx","components/navbars/NavbarMain.jsx","components/filters.js","components/TableComp.jsx","../node_modules/@headlessui/react/dist/hooks/use-computed.js","../node_modules/@headlessui/react/dist/utils/form.js","../node_modules/@headlessui/react/dist/hooks/use-controllable.js","../node_modules/@headlessui/react/dist/components/combobox/combobox.js","components/base/FilterSelect.jsx","utils/time.js","components/AuditTrail.jsx","containers/admin/AdminOrganisations.jsx","components/MobileNumberInput.jsx","containers/modals/ClaimAwardModal.jsx","containers/modals/quote_modals/UpdateQuotePriceModal.jsx","containers/modals/quote_modals/UpdateQuoteModal.jsx","containers/claim/ClaimIssueAward.jsx","containers/claim/ClaimIssueVoucher.jsx","containers/claim/ClaimVoucherReturn.jsx","components/base/CurrencyInput.jsx","slvrcld_ui_library/SLVRCLD_UI_Library.jsx","../node_modules/@headlessui/react/dist/components/listbox/listbox.js","components/base/SimpleSelect.jsx","containers/claim/ClaimCartReview.jsx","components/OrganisationBox.jsx","components/UserBox.jsx","components/SelectClaimCompany.jsx","components/LocalityBox.jsx","containers/modals/CreateClaimModal.jsx","containers/modals/ClaimInfoModal.jsx","containers/modals/PageInfoModal.jsx","containers/claim/ClaimsHome.jsx","components/CategoryBox.jsx","containers/modals/UpdateManualItemModal.jsx","containers/claim/ClaimProfile.jsx","utils/useInterval.js","containers/modals/quote_modals/CreateManualQuoteModal.jsx","containers/modals/DismissTenderModal.jsx","components/development_components/DevelopmentComponents.jsx","containers/claim/ClaimTender.jsx","containers/claim/ClaimPostTenderInspection.jsx","containers/claim/ClaimVerification.jsx","ClaimPages.jsx","components/Footer.jsx","components/Ratelimited.jsx","containers/admin/DevelopmentComponentDemo.jsx","../node_modules/use-context-selector/src/index.ts","../node_modules/react-spreadsheet/node_modules/style-inject/dist/style-inject.es.js","../node_modules/@headlessui/react/dist/components/label/label.js","../node_modules/@headlessui/react/dist/components/radio-group/radio-group.js","../node_modules/@headlessui/react/dist/hooks/use-flags.js","containers/admin/reports/ReportsOrganisationSelection.jsx","containers/admin/reports/AdminReports.jsx","components/ClaimBasicInfoPanel.jsx","components/navbars/PageBar.jsx","components/CookieConsent.jsx","../node_modules/react-cookie/es6/CookiesProvider.js","AccessControl.js","containers/modals/CustomContentModal.jsx","containers/auth/Login.jsx","App.js","components/ErrorBoundary.jsx","index.jsx"],"sourcesContent":["/*\nstep:\n1. validate\n2. sanitize\n3. split\n4. proceed\n5. grammar\n6. combine\n*/\n\nconst defaultResult = 'ศูนย์บาทถ้วน'\nconst singleUnitStrs = [\n '',\n 'หนึ่ง',\n 'สอง',\n 'สาม',\n 'สี่',\n 'ห้า',\n 'หก',\n 'เจ็ด',\n 'แปด',\n 'เก้า'\n]\nconst placeNameStrs = [\n '',\n 'สิบ',\n 'ร้อย',\n 'พัน',\n 'หมื่น',\n 'แสน',\n 'ล้าน'\n]\n\n/**\n * @param {number[]} nums\n * @returns {string}\n */\nfunction num2Word (nums) {\n let result = ''\n const len = nums.length\n const maxLen = 7\n\n if (len > maxLen) {\n // more than million\n const overflowIndex = len - maxLen + 1\n const overflowNums = nums.slice(0, overflowIndex)\n const remainingNumbs = nums.slice(overflowIndex)\n return num2Word(overflowNums) + 'ล้าน' + num2Word(remainingNumbs)\n } else {\n for (let i = 0; i < len; i++) {\n const digit = nums[i]\n if (digit > 0) {\n result += singleUnitStrs[digit] + placeNameStrs[len - i - 1]\n }\n }\n }\n\n return result\n}\n\n/**\n * @param {string} str\n * @returns {string}\n */\nfunction grammarFix (str) {\n let result = str\n\n // \"สิบ\"\n result = result.replace('หนึ่งสิบ', 'สิบ')\n // \"ยี่สิบ\"\n result = result.replace('สองสิบ', 'ยี่สิบ')\n // \"เอ็ด\"\n const neungLen = 5\n if (result.length > neungLen &&\n result.length - result.lastIndexOf('หนึ่ง') === neungLen) {\n result = result.substr(0, result.length - neungLen) + 'เอ็ด'\n }\n\n return result\n}\n\n/**\n * Combine baht and satang\n * and also adding unit\n *\n * @param {string} baht\n * @param {string} satang\n * @returns {string}\n */\nfunction combine (baht, satang) {\n let result = ''\n\n if (baht === '' && satang === '') {\n result = defaultResult\n } else if (baht !== '' && satang === '') {\n result = baht + 'บาท' + 'ถ้วน'\n } else if (baht === '' && satang !== '') {\n result = satang + 'สตางค์'\n } else {\n result = baht + 'บาท' + satang + 'สตางค์'\n }\n\n return result\n}\n\n/**\n * Change number to Thai pronunciation string\n *\n * @param {number} num\n * @returns {string}\n */\nfunction bahttext (num) {\n let result = defaultResult\n\n // 1. validate: invalid number\n if (isNaN(num)) return result\n // 1. validate: more than\n if (num >= Number.MAX_SAFE_INTEGER) return result\n\n // 2. sanitize: ????\n\n // 3. split: baht and satang\n // e.g. 432.21 >> 432, 21\n // @todo optimize\n /** @type {string} */\n const bahtStr = Math.floor(num).toString()\n /** @type {string} */\n const satangStr = Math.round(num % 1 * 100).toString()\n\n // 3. split: convert number array\n // @todo optimize it\n /** @type {number[]} */\n const bahtArr = Array.from(bahtStr).map(Number)\n /** @type {number[]} */\n const satangArr = Array.from(satangStr).map(Number)\n\n // 4. proceed\n let baht = num2Word(bahtArr)\n let satang = num2Word(satangArr)\n\n // 5. grammar\n baht = grammarFix(baht)\n satang = grammarFix(satang)\n\n // 6. combine\n result = combine(baht, satang)\n\n return result\n}\n\nif (typeof module !== 'undefined' &&\n module.exports != null) {\n module.exports = bahttext\n}\n","/* bessel.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*exported BESSEL */\nvar BESSEL;\n(function (factory) {\n /*jshint ignore:start */\n if(typeof DO_NOT_EXPORT_BESSEL === 'undefined') {\n if('object' === typeof exports) {\n factory(exports);\n } else if ('function' === typeof define && define.amd) {\n define(function () {\n var module = {};\n factory(module);\n return module;\n });\n } else {\n factory(BESSEL = {});\n }\n } else {\n factory(BESSEL = {});\n }\n /*jshint ignore:end */\n}(function(BESSEL) {\nBESSEL.version = '1.0.2';\nvar M = Math;\n\nfunction _horner(arr, v) { for(var i = 0, z = 0; i < arr.length; ++i) z = v * z + arr[i]; return z; }\nfunction _bessel_iter(x, n, f0, f1, sign) {\n if(n === 0) return f0;\n if(n === 1) return f1;\n var tdx = 2 / x, f2 = f1;\n for(var o = 1; o < n; ++o) {\n f2 = f1 * o * tdx + sign * f0;\n f0 = f1; f1 = f2;\n }\n return f2;\n}\nfunction _bessel_wrap(bessel0, bessel1, name, nonzero, sign) {\n return function bessel(x,n) {\n if(nonzero) {\n if(x === 0) return (nonzero == 1 ? -Infinity : Infinity);\n else if(x < 0) return NaN;\n }\n if(n === 0) return bessel0(x);\n if(n === 1) return bessel1(x);\n if(n < 0) return NaN;\n n|=0;\n var b0 = bessel0(x), b1 = bessel1(x);\n return _bessel_iter(x, n, b0, b1, sign);\n };\n}\nvar besselj = (function() {\n var W = 0.636619772; // 2 / Math.PI\n\n var b0_a1a = [57568490574.0, -13362590354.0, 651619640.7, -11214424.18, 77392.33017, -184.9052456].reverse();\n var b0_a2a = [57568490411.0, 1029532985.0, 9494680.718, 59272.64853, 267.8532712, 1.0].reverse();\n var b0_a1b = [1.0, -0.1098628627e-2, 0.2734510407e-4, -0.2073370639e-5, 0.2093887211e-6].reverse();\n var b0_a2b = [-0.1562499995e-1, 0.1430488765e-3, -0.6911147651e-5, 0.7621095161e-6, -0.934935152e-7].reverse();\n\n function bessel0(x) {\n var a=0, a1=0, a2=0, y = x * x;\n if(x < 8) {\n a1 = _horner(b0_a1a, y);\n a2 = _horner(b0_a2a, y);\n a = a1 / a2;\n } else {\n var xx = x - 0.785398164;\n y = 64 / y;\n a1 = _horner(b0_a1b, y);\n a2 = _horner(b0_a2b, y);\n a = M.sqrt(W/x)*(M.cos(xx)*a1-M.sin(xx)*a2*8/x);\n }\n return a;\n }\n\n var b1_a1a = [72362614232.0, -7895059235.0, 242396853.1, -2972611.439, 15704.48260, -30.16036606].reverse();\n var b1_a2a = [144725228442.0, 2300535178.0, 18583304.74, 99447.43394, 376.9991397, 1.0].reverse();\n var b1_a1b = [1.0, 0.183105e-2, -0.3516396496e-4, 0.2457520174e-5, -0.240337019e-6].reverse();\n var b1_a2b = [0.04687499995, -0.2002690873e-3, 0.8449199096e-5, -0.88228987e-6, 0.105787412e-6].reverse();\n\n function bessel1(x) {\n var a=0, a1=0, a2=0, y = x*x, xx = M.abs(x) - 2.356194491;\n if(Math.abs(x)< 8) {\n a1 = x*_horner(b1_a1a, y);\n a2 = _horner(b1_a2a, y);\n a = a1 / a2;\n } else {\n y = 64 / y;\n a1=_horner(b1_a1b, y);\n a2=_horner(b1_a2b, y);\n a=M.sqrt(W/M.abs(x))*(M.cos(xx)*a1-M.sin(xx)*a2*8/M.abs(x));\n if(x < 0) a = -a;\n }\n return a;\n }\n\n return function besselj(x, n) {\n n = Math.round(n);\n if(!isFinite(x)) return isNaN(x) ? x : 0;\n if(n < 0) return ((n%2)?-1:1)*besselj(x, -n);\n if(x < 0) return ((n%2)?-1:1)*besselj(-x, n);\n if(n === 0) return bessel0(x);\n if(n === 1) return bessel1(x);\n if(x === 0) return 0;\n\n var ret=0.0;\n if(x > n) {\n ret = _bessel_iter(x, n, bessel0(x), bessel1(x),-1);\n } else {\n var m=2*M.floor((n+M.floor(M.sqrt(40*n)))/2);\n var jsum=false;\n var bjp=0.0, sum=0.0;\n var bj=1.0, bjm = 0.0;\n var tox = 2 / x;\n for (var j=m;j>0;j--) {\n bjm=j*tox*bj-bjp;\n bjp=bj;\n bj=bjm;\n if (M.abs(bj) > 1E10) {\n bj *= 1E-10;\n bjp *= 1E-10;\n ret *= 1E-10;\n sum *= 1E-10;\n }\n if (jsum) sum += bj;\n jsum=!jsum;\n if (j == n) ret=bjp;\n }\n sum=2.0*sum-bj;\n ret /= sum;\n }\n return ret;\n };\n})();\nvar bessely = (function() {\n var W = 0.636619772;\n\n var b0_a1a = [-2957821389.0, 7062834065.0, -512359803.6, 10879881.29, -86327.92757, 228.4622733].reverse();\n var b0_a2a = [40076544269.0, 745249964.8, 7189466.438, 47447.26470, 226.1030244, 1.0].reverse();\n var b0_a1b = [1.0, -0.1098628627e-2, 0.2734510407e-4, -0.2073370639e-5, 0.2093887211e-6].reverse();\n var b0_a2b = [-0.1562499995e-1, 0.1430488765e-3, -0.6911147651e-5, 0.7621095161e-6, -0.934945152e-7].reverse();\n\n function bessel0(x) {\n var a=0, a1=0, a2=0, y = x * x, xx = x - 0.785398164;\n if(x < 8) {\n a1 = _horner(b0_a1a, y);\n a2 = _horner(b0_a2a, y);\n a = a1/a2 + W * besselj(x,0) * M.log(x);\n } else {\n y = 64 / y;\n a1 = _horner(b0_a1b, y);\n a2 = _horner(b0_a2b, y);\n a = M.sqrt(W/x)*(M.sin(xx)*a1+M.cos(xx)*a2*8/x);\n }\n return a;\n }\n\n var b1_a1a = [-0.4900604943e13, 0.1275274390e13, -0.5153438139e11, 0.7349264551e9, -0.4237922726e7, 0.8511937935e4].reverse();\n var b1_a2a = [0.2499580570e14, 0.4244419664e12, 0.3733650367e10, 0.2245904002e8, 0.1020426050e6, 0.3549632885e3, 1].reverse();\n var b1_a1b = [1.0, 0.183105e-2, -0.3516396496e-4, 0.2457520174e-5, -0.240337019e-6].reverse();\n var b1_a2b = [0.04687499995, -0.2002690873e-3, 0.8449199096e-5, -0.88228987e-6, 0.105787412e-6].reverse();\n\n function bessel1(x) {\n var a=0, a1=0, a2=0, y = x*x, xx = x - 2.356194491;\n if(x < 8) {\n a1 = x*_horner(b1_a1a, y);\n a2 = _horner(b1_a2a, y);\n a = a1/a2 + W * (besselj(x,1) * M.log(x) - 1 / x);\n } else {\n y = 64 / y;\n a1=_horner(b1_a1b, y);\n a2=_horner(b1_a2b, y);\n a=M.sqrt(W/x)*(M.sin(xx)*a1+M.cos(xx)*a2*8/x);\n }\n return a;\n }\n\n return _bessel_wrap(bessel0, bessel1, 'BESSELY', 1, -1);\n})();\nvar besseli = (function() {\n var b0_a = [1.0, 3.5156229, 3.0899424, 1.2067492, 0.2659732, 0.360768e-1, 0.45813e-2].reverse();\n var b0_b = [0.39894228, 0.1328592e-1, 0.225319e-2, -0.157565e-2, 0.916281e-2, -0.2057706e-1, 0.2635537e-1, -0.1647633e-1, 0.392377e-2].reverse();\n\n function bessel0(x) {\n if(x <= 3.75) return _horner(b0_a, x*x/(3.75*3.75));\n return M.exp(M.abs(x))/M.sqrt(M.abs(x))*_horner(b0_b, 3.75/M.abs(x));\n }\n\n var b1_a = [0.5, 0.87890594, 0.51498869, 0.15084934, 0.2658733e-1, 0.301532e-2, 0.32411e-3].reverse();\n var b1_b = [0.39894228, -0.3988024e-1, -0.362018e-2, 0.163801e-2, -0.1031555e-1, 0.2282967e-1, -0.2895312e-1, 0.1787654e-1, -0.420059e-2].reverse();\n\n function bessel1(x) {\n if(x < 3.75) return x * _horner(b1_a, x*x/(3.75*3.75));\n return (x < 0 ? -1 : 1) * M.exp(M.abs(x))/M.sqrt(M.abs(x))*_horner(b1_b, 3.75/M.abs(x));\n }\n\n return function besseli(x, n) {\n n = Math.round(n);\n if(n === 0) return bessel0(x);\n if(n === 1) return bessel1(x);\n if(n < 0) return NaN;\n if(M.abs(x) === 0) return 0;\n if(x == Infinity) return Infinity;\n\n var ret = 0.0, j, tox = 2 / M.abs(x), bip = 0.0, bi=1.0, bim=0.0;\n var m=2*M.round((n+M.round(M.sqrt(40*n)))/2);\n for (j=m;j>0;j--) {\n bim=j*tox*bi + bip;\n bip=bi; bi=bim;\n if (M.abs(bi) > 1E10) {\n bi *= 1E-10;\n bip *= 1E-10;\n ret *= 1E-10;\n }\n if(j == n) ret = bip;\n }\n ret *= besseli(x, 0) / bi;\n return x < 0 && (n%2) ? -ret : ret;\n };\n\n})();\n\nvar besselk = (function() {\n var b0_a = [-0.57721566, 0.42278420, 0.23069756, 0.3488590e-1, 0.262698e-2, 0.10750e-3, 0.74e-5].reverse();\n var b0_b = [1.25331414, -0.7832358e-1, 0.2189568e-1, -0.1062446e-1, 0.587872e-2, -0.251540e-2, 0.53208e-3].reverse();\n\n function bessel0(x) {\n if(x <= 2) return -M.log(x/2) * besseli(x,0) + _horner(b0_a, x*x/4);\n return M.exp(-x) / M.sqrt(x) * _horner(b0_b, 2/x);\n }\n\n var b1_a = [1.0, 0.15443144, -0.67278579, -0.18156897, -0.1919402e-1, -0.110404e-2, -0.4686e-4].reverse();\n var b1_b = [1.25331414, 0.23498619, -0.3655620e-1, 0.1504268e-1, -0.780353e-2, 0.325614e-2, -0.68245e-3].reverse();\n\n function bessel1(x) {\n if(x <= 2) return M.log(x/2) * besseli(x,1) + (1/x) * _horner(b1_a, x*x/4);\n return M.exp(-x)/M.sqrt(x)*_horner(b1_b, 2/x);\n }\n\n return _bessel_wrap(bessel0, bessel1, 'BESSELK', 2, 1);\n})();\nBESSEL.besselj = besselj;\nBESSEL.bessely = bessely;\nBESSEL.besseli = besseli;\nBESSEL.besselk = besselk;\n}));\n","// needs a separate module as this is required inside chevrotain productive code\n// and also in the entry point for webpack(api.ts).\n// A separate file avoids cyclic dependencies and webpack errors.\nexport const VERSION = \"7.1.2\"\n","import { RegExpParser, RegExpPattern } from \"regexp-to-ast\"\n\nlet regExpAstCache = {}\nconst regExpParser = new RegExpParser()\n\nexport function getRegExpAst(regExp: RegExp): RegExpPattern {\n const regExpStr = regExp.toString()\n if (regExpAstCache.hasOwnProperty(regExpStr)) {\n return regExpAstCache[regExpStr]\n } else {\n const regExpAst = regExpParser.pattern(regExpStr)\n regExpAstCache[regExpStr] = regExpAst\n return regExpAst\n }\n}\n\nexport function clearRegExpParserCache() {\n regExpAstCache = {}\n}\n","import { VERSION, BaseRegExpVisitor } from \"regexp-to-ast\"\nimport {\n flatten,\n map,\n forEach,\n contains,\n PRINT_ERROR,\n PRINT_WARNING,\n find,\n isArray,\n every,\n values\n} from \"../utils/utils\"\nimport { getRegExpAst } from \"./reg_exp_parser\"\nimport { charCodeToOptimizedIndex, minOptimizationVal } from \"./lexer\"\n\nconst complementErrorMessage =\n \"Complement Sets are not supported for first char optimization\"\nexport const failedOptimizationPrefixMsg =\n 'Unable to use \"first char\" lexer optimizations:\\n'\n\nexport function getOptimizedStartCodesIndices(\n regExp: RegExp,\n ensureOptimizations = false\n): number[] {\n try {\n const ast = getRegExpAst(regExp)\n const firstChars = firstCharOptimizedIndices(\n ast.value,\n {},\n ast.flags.ignoreCase\n )\n return firstChars\n } catch (e) {\n /* istanbul ignore next */\n // Testing this relies on the regexp-to-ast library having a bug... */\n // TODO: only the else branch needs to be ignored, try to fix with newer prettier / tsc\n if (e.message === complementErrorMessage) {\n if (ensureOptimizations) {\n PRINT_WARNING(\n `${failedOptimizationPrefixMsg}` +\n `\\tUnable to optimize: < ${regExp.toString()} >\\n` +\n \"\\tComplement Sets cannot be automatically optimized.\\n\" +\n \"\\tThis will disable the lexer's first char optimizations.\\n\" +\n \"\\tSee: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.\"\n )\n }\n } else {\n let msgSuffix = \"\"\n if (ensureOptimizations) {\n msgSuffix =\n \"\\n\\tThis will disable the lexer's first char optimizations.\\n\" +\n \"\\tSee: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.\"\n }\n PRINT_ERROR(\n `${failedOptimizationPrefixMsg}\\n` +\n `\\tFailed parsing: < ${regExp.toString()} >\\n` +\n `\\tUsing the regexp-to-ast library version: ${VERSION}\\n` +\n \"\\tPlease open an issue at: https://github.com/bd82/regexp-to-ast/issues\" +\n msgSuffix\n )\n }\n }\n\n return []\n}\n\nexport function firstCharOptimizedIndices(ast, result, ignoreCase): number[] {\n switch (ast.type) {\n case \"Disjunction\":\n for (let i = 0; i < ast.value.length; i++) {\n firstCharOptimizedIndices(ast.value[i], result, ignoreCase)\n }\n break\n case \"Alternative\":\n const terms = ast.value\n for (let i = 0; i < terms.length; i++) {\n const term = terms[i]\n\n // skip terms that cannot effect the first char results\n switch (term.type) {\n case \"EndAnchor\":\n // A group back reference cannot affect potential starting char.\n // because if a back reference is the first production than automatically\n // the group being referenced has had to come BEFORE so its codes have already been added\n case \"GroupBackReference\":\n // assertions do not affect potential starting codes\n case \"Lookahead\":\n case \"NegativeLookahead\":\n case \"StartAnchor\":\n case \"WordBoundary\":\n case \"NonWordBoundary\":\n continue\n }\n\n const atom = term\n switch (atom.type) {\n case \"Character\":\n addOptimizedIdxToResult(atom.value, result, ignoreCase)\n break\n case \"Set\":\n if (atom.complement === true) {\n throw Error(complementErrorMessage)\n }\n forEach(atom.value, (code) => {\n if (typeof code === \"number\") {\n addOptimizedIdxToResult(code, result, ignoreCase)\n } else {\n // range\n const range = code\n // cannot optimize when ignoreCase is\n if (ignoreCase === true) {\n for (\n let rangeCode = range.from;\n rangeCode <= range.to;\n rangeCode++\n ) {\n addOptimizedIdxToResult(rangeCode, result, ignoreCase)\n }\n }\n // Optimization (2 orders of magnitude less work for very large ranges)\n else {\n // handle unoptimized values\n for (\n let rangeCode = range.from;\n rangeCode <= range.to && rangeCode < minOptimizationVal;\n rangeCode++\n ) {\n addOptimizedIdxToResult(rangeCode, result, ignoreCase)\n }\n\n // Less common charCode where we optimize for faster init time, by using larger \"buckets\"\n if (range.to >= minOptimizationVal) {\n const minUnOptVal =\n range.from >= minOptimizationVal\n ? range.from\n : minOptimizationVal\n const maxUnOptVal = range.to\n const minOptIdx = charCodeToOptimizedIndex(minUnOptVal)\n const maxOptIdx = charCodeToOptimizedIndex(maxUnOptVal)\n\n for (\n let currOptIdx = minOptIdx;\n currOptIdx <= maxOptIdx;\n currOptIdx++\n ) {\n result[currOptIdx] = currOptIdx\n }\n }\n }\n }\n })\n break\n case \"Group\":\n firstCharOptimizedIndices(atom.value, result, ignoreCase)\n break\n /* istanbul ignore next */\n default:\n throw Error(\"Non Exhaustive Match\")\n }\n\n // reached a mandatory production, no more **start** codes can be found on this alternative\n const isOptionalQuantifier =\n atom.quantifier !== undefined && atom.quantifier.atLeast === 0\n if (\n // A group may be optional due to empty contents /(?:)/\n // or if everything inside it is optional /((a)?)/\n (atom.type === \"Group\" && isWholeOptional(atom) === false) ||\n // If this term is not a group it may only be optional if it has an optional quantifier\n (atom.type !== \"Group\" && isOptionalQuantifier === false)\n ) {\n break\n }\n }\n break\n /* istanbul ignore next */\n default:\n throw Error(\"non exhaustive match!\")\n }\n\n // console.log(Object.keys(result).length)\n return values(result)\n}\n\nfunction addOptimizedIdxToResult(\n code: number,\n result: number[],\n ignoreCase: boolean\n) {\n const optimizedCharIdx = charCodeToOptimizedIndex(code)\n result[optimizedCharIdx] = optimizedCharIdx\n\n if (ignoreCase === true) {\n handleIgnoreCase(code, result)\n }\n}\n\nfunction handleIgnoreCase(code: number, result: number[]) {\n const char = String.fromCharCode(code)\n const upperChar = char.toUpperCase()\n /* istanbul ignore else */\n if (upperChar !== char) {\n const optimizedCharIdx = charCodeToOptimizedIndex(upperChar.charCodeAt(0))\n result[optimizedCharIdx] = optimizedCharIdx\n } else {\n const lowerChar = char.toLowerCase()\n if (lowerChar !== char) {\n const optimizedCharIdx = charCodeToOptimizedIndex(lowerChar.charCodeAt(0))\n result[optimizedCharIdx] = optimizedCharIdx\n }\n }\n}\n\nfunction findCode(setNode, targetCharCodes) {\n return find(setNode.value, (codeOrRange) => {\n if (typeof codeOrRange === \"number\") {\n return contains(targetCharCodes, codeOrRange)\n } else {\n // range\n const range = codeOrRange\n return (\n find(\n targetCharCodes,\n (targetCode) => range.from <= targetCode && targetCode <= range.to\n ) !== undefined\n )\n }\n })\n}\n\nfunction isWholeOptional(ast) {\n if (ast.quantifier && ast.quantifier.atLeast === 0) {\n return true\n }\n\n if (!ast.value) {\n return false\n }\n\n return isArray(ast.value)\n ? every(ast.value, isWholeOptional)\n : isWholeOptional(ast.value)\n}\n\nclass CharCodeFinder extends BaseRegExpVisitor {\n found: boolean = false\n\n constructor(private targetCharCodes: number[]) {\n super()\n }\n\n visitChildren(node) {\n // No need to keep looking...\n if (this.found === true) {\n return\n }\n\n // switch lookaheads as they do not actually consume any characters thus\n // finding a charCode at lookahead context does not mean that regexp can actually contain it in a match.\n switch (node.type) {\n case \"Lookahead\":\n this.visitLookahead(node)\n return\n case \"NegativeLookahead\":\n this.visitNegativeLookahead(node)\n return\n }\n\n super.visitChildren(node)\n }\n\n visitCharacter(node) {\n if (contains(this.targetCharCodes, node.value)) {\n this.found = true\n }\n }\n\n visitSet(node) {\n if (node.complement) {\n if (findCode(node, this.targetCharCodes) === undefined) {\n this.found = true\n }\n } else {\n if (findCode(node, this.targetCharCodes) !== undefined) {\n this.found = true\n }\n }\n }\n}\n\nexport function canMatchCharCode(\n charCodes: number[],\n pattern: RegExp | string\n) {\n if (pattern instanceof RegExp) {\n const ast = getRegExpAst(pattern)\n const charCodeFinder = new CharCodeFinder(charCodes)\n charCodeFinder.visit(ast)\n return charCodeFinder.found\n } else {\n return (\n find(pattern, (char) => {\n return contains(charCodes, (char).charCodeAt(0))\n }) !== undefined\n )\n }\n}\n","import { BaseRegExpVisitor } from \"regexp-to-ast\"\nimport { IRegExpExec, Lexer, LexerDefinitionErrorType } from \"./lexer_public\"\nimport {\n compact,\n contains,\n defaults,\n difference,\n filter,\n find,\n first,\n flatten,\n forEach,\n has,\n indexOf,\n isArray,\n isEmpty,\n isFunction,\n isRegExp,\n isString,\n isUndefined,\n keys,\n map,\n mapValues,\n packArray,\n PRINT_ERROR,\n reduce,\n reject\n} from \"../utils/utils\"\nimport {\n canMatchCharCode,\n failedOptimizationPrefixMsg,\n getOptimizedStartCodesIndices\n} from \"./reg_exp\"\nimport {\n ILexerDefinitionError,\n ILineTerminatorsTester,\n IMultiModeLexerDefinition,\n IToken,\n TokenType\n} from \"../../api\"\nimport { getRegExpAst } from \"./reg_exp_parser\"\n\nconst PATTERN = \"PATTERN\"\nexport const DEFAULT_MODE = \"defaultMode\"\nexport const MODES = \"modes\"\n\nexport interface IPatternConfig {\n pattern: IRegExpExec\n longerAlt: number\n canLineTerminator: boolean\n isCustom: boolean\n short: number | boolean\n group: any\n push: string\n pop: boolean\n tokenTypeIdx: number\n}\n\nexport interface IAnalyzeResult {\n patternIdxToConfig: IPatternConfig[]\n charCodeToPatternIdxToConfig: { [charCode: number]: IPatternConfig[] }\n emptyGroups: { [groupName: string]: IToken[] }\n hasCustom: boolean\n canBeOptimized: boolean\n}\n\nexport let SUPPORT_STICKY =\n typeof (new RegExp(\"(?:)\")).sticky === \"boolean\"\n\nexport function disableSticky() {\n SUPPORT_STICKY = false\n}\n\nexport function enableSticky() {\n SUPPORT_STICKY = true\n}\n\nexport function analyzeTokenTypes(\n tokenTypes: TokenType[],\n options: {\n positionTracking?: \"full\" | \"onlyStart\" | \"onlyOffset\"\n ensureOptimizations?: boolean\n lineTerminatorCharacters?: (number | string)[]\n // TODO: should `useSticky` be an argument here?\n useSticky?: boolean\n safeMode?: boolean\n tracer?: (msg: string, action: Function) => void\n }\n): IAnalyzeResult {\n options = defaults(options, {\n useSticky: SUPPORT_STICKY,\n debug: false,\n safeMode: false,\n positionTracking: \"full\",\n lineTerminatorCharacters: [\"\\r\", \"\\n\"],\n tracer: (msg, action) => action()\n })\n\n const tracer = options.tracer\n\n tracer(\"initCharCodeToOptimizedIndexMap\", () => {\n initCharCodeToOptimizedIndexMap()\n })\n\n let onlyRelevantTypes\n tracer(\"Reject Lexer.NA\", () => {\n onlyRelevantTypes = reject(tokenTypes, (currType) => {\n return currType[PATTERN] === Lexer.NA\n })\n })\n\n let hasCustom = false\n let allTransformedPatterns\n tracer(\"Transform Patterns\", () => {\n hasCustom = false\n allTransformedPatterns = map(onlyRelevantTypes, (currType) => {\n let currPattern = currType[PATTERN]\n\n /* istanbul ignore else */\n if (isRegExp(currPattern)) {\n let regExpSource = currPattern.source\n if (\n regExpSource.length === 1 &&\n // only these regExp meta characters which can appear in a length one regExp\n regExpSource !== \"^\" &&\n regExpSource !== \"$\" &&\n regExpSource !== \".\" &&\n !currPattern.ignoreCase\n ) {\n return regExpSource\n } else if (\n regExpSource.length === 2 &&\n regExpSource[0] === \"\\\\\" &&\n // not a meta character\n !contains(\n [\n \"d\",\n \"D\",\n \"s\",\n \"S\",\n \"t\",\n \"r\",\n \"n\",\n \"t\",\n \"0\",\n \"c\",\n \"b\",\n \"B\",\n \"f\",\n \"v\",\n \"w\",\n \"W\"\n ],\n regExpSource[1]\n )\n ) {\n // escaped meta Characters: /\\+/ /\\[/\n // or redundant escaping: /\\a/\n // without the escaping \"\\\"\n return regExpSource[1]\n } else {\n return options.useSticky\n ? addStickyFlag(currPattern)\n : addStartOfInput(currPattern)\n }\n } else if (isFunction(currPattern)) {\n hasCustom = true\n // CustomPatternMatcherFunc - custom patterns do not require any transformations, only wrapping in a RegExp Like object\n return { exec: currPattern }\n } else if (has(currPattern, \"exec\")) {\n hasCustom = true\n // ICustomPattern\n return currPattern\n } else if (typeof currPattern === \"string\") {\n if (currPattern.length === 1) {\n return currPattern\n } else {\n let escapedRegExpString = currPattern.replace(\n /[\\\\^$.*+?()[\\]{}|]/g,\n \"\\\\$&\"\n )\n let wrappedRegExp = new RegExp(escapedRegExpString)\n return options.useSticky\n ? addStickyFlag(wrappedRegExp)\n : addStartOfInput(wrappedRegExp)\n }\n } else {\n throw Error(\"non exhaustive match\")\n }\n })\n })\n\n let patternIdxToType\n let patternIdxToGroup\n let patternIdxToLongerAltIdx\n let patternIdxToPushMode\n let patternIdxToPopMode\n tracer(\"misc mapping\", () => {\n patternIdxToType = map(\n onlyRelevantTypes,\n (currType) => currType.tokenTypeIdx\n )\n\n patternIdxToGroup = map(onlyRelevantTypes, (clazz: any) => {\n let groupName = clazz.GROUP\n /* istanbul ignore next */\n if (groupName === Lexer.SKIPPED) {\n return undefined\n } else if (isString(groupName)) {\n return groupName\n } else if (isUndefined(groupName)) {\n return false\n } else {\n throw Error(\"non exhaustive match\")\n }\n })\n\n patternIdxToLongerAltIdx = map(onlyRelevantTypes, (clazz: any) => {\n let longerAltType = clazz.LONGER_ALT\n\n if (longerAltType) {\n let longerAltIdx = indexOf(onlyRelevantTypes, longerAltType)\n return longerAltIdx\n }\n })\n\n patternIdxToPushMode = map(\n onlyRelevantTypes,\n (clazz: any) => clazz.PUSH_MODE\n )\n\n patternIdxToPopMode = map(onlyRelevantTypes, (clazz: any) =>\n has(clazz, \"POP_MODE\")\n )\n })\n\n let patternIdxToCanLineTerminator\n tracer(\"Line Terminator Handling\", () => {\n const lineTerminatorCharCodes = getCharCodes(\n options.lineTerminatorCharacters\n )\n patternIdxToCanLineTerminator = map(onlyRelevantTypes, (tokType) => false)\n if (options.positionTracking !== \"onlyOffset\") {\n patternIdxToCanLineTerminator = map(onlyRelevantTypes, (tokType) => {\n if (has(tokType, \"LINE_BREAKS\")) {\n return tokType.LINE_BREAKS\n } else {\n if (\n checkLineBreaksIssues(tokType, lineTerminatorCharCodes) === false\n ) {\n return canMatchCharCode(lineTerminatorCharCodes, tokType.PATTERN)\n }\n }\n })\n }\n })\n\n let patternIdxToIsCustom\n let patternIdxToShort\n let emptyGroups\n let patternIdxToConfig\n tracer(\"Misc Mapping #2\", () => {\n patternIdxToIsCustom = map(onlyRelevantTypes, isCustomPattern)\n patternIdxToShort = map(allTransformedPatterns, isShortPattern)\n\n emptyGroups = reduce(\n onlyRelevantTypes,\n (acc, clazz: any) => {\n let groupName = clazz.GROUP\n if (isString(groupName) && !(groupName === Lexer.SKIPPED)) {\n acc[groupName] = []\n }\n return acc\n },\n {}\n )\n\n patternIdxToConfig = map(allTransformedPatterns, (x, idx) => {\n return {\n pattern: allTransformedPatterns[idx],\n longerAlt: patternIdxToLongerAltIdx[idx],\n canLineTerminator: patternIdxToCanLineTerminator[idx],\n isCustom: patternIdxToIsCustom[idx],\n short: patternIdxToShort[idx],\n group: patternIdxToGroup[idx],\n push: patternIdxToPushMode[idx],\n pop: patternIdxToPopMode[idx],\n tokenTypeIdx: patternIdxToType[idx],\n tokenType: onlyRelevantTypes[idx]\n }\n })\n })\n\n let canBeOptimized = true\n let charCodeToPatternIdxToConfig = []\n\n if (!options.safeMode) {\n tracer(\"First Char Optimization\", () => {\n charCodeToPatternIdxToConfig = reduce(\n onlyRelevantTypes,\n (result, currTokType, idx) => {\n if (typeof currTokType.PATTERN === \"string\") {\n const charCode = currTokType.PATTERN.charCodeAt(0)\n const optimizedIdx = charCodeToOptimizedIndex(charCode)\n addToMapOfArrays(result, optimizedIdx, patternIdxToConfig[idx])\n } else if (isArray(currTokType.START_CHARS_HINT)) {\n let lastOptimizedIdx\n forEach(currTokType.START_CHARS_HINT, (charOrInt) => {\n const charCode =\n typeof charOrInt === \"string\"\n ? charOrInt.charCodeAt(0)\n : charOrInt\n const currOptimizedIdx = charCodeToOptimizedIndex(charCode)\n // Avoid adding the config multiple times\n /* istanbul ignore else */\n // - Difficult to check this scenario effects as it is only a performance\n // optimization that does not change correctness\n if (lastOptimizedIdx !== currOptimizedIdx) {\n lastOptimizedIdx = currOptimizedIdx\n addToMapOfArrays(\n result,\n currOptimizedIdx,\n patternIdxToConfig[idx]\n )\n }\n })\n } else if (isRegExp(currTokType.PATTERN)) {\n if (currTokType.PATTERN.unicode) {\n canBeOptimized = false\n if (options.ensureOptimizations) {\n PRINT_ERROR(\n `${failedOptimizationPrefixMsg}` +\n `\\tUnable to analyze < ${currTokType.PATTERN.toString()} > pattern.\\n` +\n \"\\tThe regexp unicode flag is not currently supported by the regexp-to-ast library.\\n\" +\n \"\\tThis will disable the lexer's first char optimizations.\\n\" +\n \"\\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE\"\n )\n }\n } else {\n let optimizedCodes = getOptimizedStartCodesIndices(\n currTokType.PATTERN,\n options.ensureOptimizations\n )\n /* istanbul ignore if */\n // start code will only be empty given an empty regExp or failure of regexp-to-ast library\n // the first should be a different validation and the second cannot be tested.\n if (isEmpty(optimizedCodes)) {\n // we cannot understand what codes may start possible matches\n // The optimization correctness requires knowing start codes for ALL patterns.\n // Not actually sure this is an error, no debug message\n canBeOptimized = false\n }\n forEach(optimizedCodes, (code) => {\n addToMapOfArrays(result, code, patternIdxToConfig[idx])\n })\n }\n } else {\n if (options.ensureOptimizations) {\n PRINT_ERROR(\n `${failedOptimizationPrefixMsg}` +\n `\\tTokenType: <${currTokType.name}> is using a custom token pattern without providing parameter.\\n` +\n \"\\tThis will disable the lexer's first char optimizations.\\n\" +\n \"\\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE\"\n )\n }\n canBeOptimized = false\n }\n\n return result\n },\n []\n )\n })\n }\n tracer(\"ArrayPacking\", () => {\n charCodeToPatternIdxToConfig = packArray(charCodeToPatternIdxToConfig)\n })\n\n return {\n emptyGroups: emptyGroups,\n patternIdxToConfig: patternIdxToConfig,\n charCodeToPatternIdxToConfig: charCodeToPatternIdxToConfig,\n hasCustom: hasCustom,\n canBeOptimized: canBeOptimized\n }\n}\n\nexport function validatePatterns(\n tokenTypes: TokenType[],\n validModesNames: string[]\n): ILexerDefinitionError[] {\n let errors = []\n\n let missingResult = findMissingPatterns(tokenTypes)\n errors = errors.concat(missingResult.errors)\n\n let invalidResult = findInvalidPatterns(missingResult.valid)\n let validTokenTypes = invalidResult.valid\n errors = errors.concat(invalidResult.errors)\n\n errors = errors.concat(validateRegExpPattern(validTokenTypes))\n\n errors = errors.concat(findInvalidGroupType(validTokenTypes))\n\n errors = errors.concat(\n findModesThatDoNotExist(validTokenTypes, validModesNames)\n )\n\n errors = errors.concat(findUnreachablePatterns(validTokenTypes))\n\n return errors\n}\n\nfunction validateRegExpPattern(\n tokenTypes: TokenType[]\n): ILexerDefinitionError[] {\n let errors = []\n let withRegExpPatterns = filter(tokenTypes, (currTokType) =>\n isRegExp(currTokType[PATTERN])\n )\n\n errors = errors.concat(findEndOfInputAnchor(withRegExpPatterns))\n\n errors = errors.concat(findStartOfInputAnchor(withRegExpPatterns))\n\n errors = errors.concat(findUnsupportedFlags(withRegExpPatterns))\n\n errors = errors.concat(findDuplicatePatterns(withRegExpPatterns))\n\n errors = errors.concat(findEmptyMatchRegExps(withRegExpPatterns))\n\n return errors\n}\n\nexport interface ILexerFilterResult {\n errors: ILexerDefinitionError[]\n valid: TokenType[]\n}\n\nexport function findMissingPatterns(\n tokenTypes: TokenType[]\n): ILexerFilterResult {\n let tokenTypesWithMissingPattern = filter(tokenTypes, (currType) => {\n return !has(currType, PATTERN)\n })\n\n let errors = map(tokenTypesWithMissingPattern, (currType) => {\n return {\n message:\n \"Token Type: ->\" +\n currType.name +\n \"<- missing static 'PATTERN' property\",\n type: LexerDefinitionErrorType.MISSING_PATTERN,\n tokenTypes: [currType]\n }\n })\n\n let valid = difference(tokenTypes, tokenTypesWithMissingPattern)\n return { errors, valid }\n}\n\nexport function findInvalidPatterns(\n tokenTypes: TokenType[]\n): ILexerFilterResult {\n let tokenTypesWithInvalidPattern = filter(tokenTypes, (currType) => {\n let pattern = currType[PATTERN]\n return (\n !isRegExp(pattern) &&\n !isFunction(pattern) &&\n !has(pattern, \"exec\") &&\n !isString(pattern)\n )\n })\n\n let errors = map(tokenTypesWithInvalidPattern, (currType) => {\n return {\n message:\n \"Token Type: ->\" +\n currType.name +\n \"<- static 'PATTERN' can only be a RegExp, a\" +\n \" Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.\",\n type: LexerDefinitionErrorType.INVALID_PATTERN,\n tokenTypes: [currType]\n }\n })\n\n let valid = difference(tokenTypes, tokenTypesWithInvalidPattern)\n return { errors, valid }\n}\n\nconst end_of_input = /[^\\\\][\\$]/\n\nexport function findEndOfInputAnchor(\n tokenTypes: TokenType[]\n): ILexerDefinitionError[] {\n class EndAnchorFinder extends BaseRegExpVisitor {\n found = false\n\n visitEndAnchor(node) {\n this.found = true\n }\n }\n\n let invalidRegex = filter(tokenTypes, (currType) => {\n const pattern = currType[PATTERN]\n\n try {\n const regexpAst = getRegExpAst(pattern)\n const endAnchorVisitor = new EndAnchorFinder()\n endAnchorVisitor.visit(regexpAst)\n\n return endAnchorVisitor.found\n } catch (e) {\n // old behavior in case of runtime exceptions with regexp-to-ast.\n /* istanbul ignore next - cannot ensure an error in regexp-to-ast*/\n return end_of_input.test(pattern.source)\n }\n })\n\n let errors = map(invalidRegex, (currType) => {\n return {\n message:\n \"Unexpected RegExp Anchor Error:\\n\" +\n \"\\tToken Type: ->\" +\n currType.name +\n \"<- static 'PATTERN' cannot contain end of input anchor '$'\\n\" +\n \"\\tSee chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS\" +\n \"\\tfor details.\",\n type: LexerDefinitionErrorType.EOI_ANCHOR_FOUND,\n tokenTypes: [currType]\n }\n })\n\n return errors\n}\n\nexport function findEmptyMatchRegExps(\n tokenTypes: TokenType[]\n): ILexerDefinitionError[] {\n let matchesEmptyString = filter(tokenTypes, (currType) => {\n let pattern = currType[PATTERN]\n return pattern.test(\"\")\n })\n\n let errors = map(matchesEmptyString, (currType) => {\n return {\n message:\n \"Token Type: ->\" +\n currType.name +\n \"<- static 'PATTERN' must not match an empty string\",\n type: LexerDefinitionErrorType.EMPTY_MATCH_PATTERN,\n tokenTypes: [currType]\n }\n })\n\n return errors\n}\n\nconst start_of_input = /[^\\\\[][\\^]|^\\^/\n\nexport function findStartOfInputAnchor(\n tokenTypes: TokenType[]\n): ILexerDefinitionError[] {\n class StartAnchorFinder extends BaseRegExpVisitor {\n found = false\n\n visitStartAnchor(node) {\n this.found = true\n }\n }\n\n let invalidRegex = filter(tokenTypes, (currType) => {\n const pattern = currType[PATTERN]\n try {\n const regexpAst = getRegExpAst(pattern)\n const startAnchorVisitor = new StartAnchorFinder()\n startAnchorVisitor.visit(regexpAst)\n\n return startAnchorVisitor.found\n } catch (e) {\n // old behavior in case of runtime exceptions with regexp-to-ast.\n /* istanbul ignore next - cannot ensure an error in regexp-to-ast*/\n return start_of_input.test(pattern.source)\n }\n })\n\n let errors = map(invalidRegex, (currType) => {\n return {\n message:\n \"Unexpected RegExp Anchor Error:\\n\" +\n \"\\tToken Type: ->\" +\n currType.name +\n \"<- static 'PATTERN' cannot contain start of input anchor '^'\\n\" +\n \"\\tSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS\" +\n \"\\tfor details.\",\n type: LexerDefinitionErrorType.SOI_ANCHOR_FOUND,\n tokenTypes: [currType]\n }\n })\n\n return errors\n}\n\nexport function findUnsupportedFlags(\n tokenTypes: TokenType[]\n): ILexerDefinitionError[] {\n let invalidFlags = filter(tokenTypes, (currType) => {\n let pattern = currType[PATTERN]\n return pattern instanceof RegExp && (pattern.multiline || pattern.global)\n })\n\n let errors = map(invalidFlags, (currType) => {\n return {\n message:\n \"Token Type: ->\" +\n currType.name +\n \"<- static 'PATTERN' may NOT contain global('g') or multiline('m')\",\n type: LexerDefinitionErrorType.UNSUPPORTED_FLAGS_FOUND,\n tokenTypes: [currType]\n }\n })\n\n return errors\n}\n\n// This can only test for identical duplicate RegExps, not semantically equivalent ones.\nexport function findDuplicatePatterns(\n tokenTypes: TokenType[]\n): ILexerDefinitionError[] {\n let found = []\n let identicalPatterns = map(tokenTypes, (outerType: any) => {\n return reduce(\n tokenTypes,\n (result, innerType: any) => {\n if (\n outerType.PATTERN.source === innerType.PATTERN.source &&\n !contains(found, innerType) &&\n innerType.PATTERN !== Lexer.NA\n ) {\n // this avoids duplicates in the result, each Token Type may only appear in one \"set\"\n // in essence we are creating Equivalence classes on equality relation.\n found.push(innerType)\n result.push(innerType)\n return result\n }\n return result\n },\n []\n )\n })\n\n identicalPatterns = compact(identicalPatterns)\n\n let duplicatePatterns = filter(identicalPatterns, (currIdenticalSet) => {\n return currIdenticalSet.length > 1\n })\n\n let errors = map(duplicatePatterns, (setOfIdentical: any) => {\n let tokenTypeNames = map(setOfIdentical, (currType: any) => {\n return currType.name\n })\n\n let dupPatternSrc = (first(setOfIdentical)).PATTERN\n return {\n message:\n `The same RegExp pattern ->${dupPatternSrc}<-` +\n `has been used in all of the following Token Types: ${tokenTypeNames.join(\n \", \"\n )} <-`,\n type: LexerDefinitionErrorType.DUPLICATE_PATTERNS_FOUND,\n tokenTypes: setOfIdentical\n }\n })\n\n return errors\n}\n\nexport function findInvalidGroupType(\n tokenTypes: TokenType[]\n): ILexerDefinitionError[] {\n let invalidTypes = filter(tokenTypes, (clazz: any) => {\n if (!has(clazz, \"GROUP\")) {\n return false\n }\n let group = clazz.GROUP\n\n return group !== Lexer.SKIPPED && group !== Lexer.NA && !isString(group)\n })\n\n let errors = map(invalidTypes, (currType) => {\n return {\n message:\n \"Token Type: ->\" +\n currType.name +\n \"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String\",\n type: LexerDefinitionErrorType.INVALID_GROUP_TYPE_FOUND,\n tokenTypes: [currType]\n }\n })\n\n return errors\n}\n\nexport function findModesThatDoNotExist(\n tokenTypes: TokenType[],\n validModes: string[]\n): ILexerDefinitionError[] {\n let invalidModes = filter(tokenTypes, (clazz: any) => {\n return (\n clazz.PUSH_MODE !== undefined && !contains(validModes, clazz.PUSH_MODE)\n )\n })\n\n let errors = map(invalidModes, (tokType) => {\n let msg =\n `Token Type: ->${tokType.name}<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->${tokType.PUSH_MODE}<-` +\n `which does not exist`\n return {\n message: msg,\n type: LexerDefinitionErrorType.PUSH_MODE_DOES_NOT_EXIST,\n tokenTypes: [tokType]\n }\n })\n\n return errors\n}\n\nexport function findUnreachablePatterns(\n tokenTypes: TokenType[]\n): ILexerDefinitionError[] {\n const errors = []\n\n const canBeTested = reduce(\n tokenTypes,\n (result, tokType, idx) => {\n const pattern = tokType.PATTERN\n\n if (pattern === Lexer.NA) {\n return result\n }\n\n // a more comprehensive validation for all forms of regExps would require\n // deeper regExp analysis capabilities\n if (isString(pattern)) {\n result.push({ str: pattern, idx, tokenType: tokType })\n } else if (isRegExp(pattern) && noMetaChar(pattern)) {\n result.push({ str: pattern.source, idx, tokenType: tokType })\n }\n return result\n },\n []\n )\n\n forEach(tokenTypes, (tokType, testIdx) => {\n forEach(canBeTested, ({ str, idx, tokenType }) => {\n if (testIdx < idx && testTokenType(str, tokType.PATTERN)) {\n let msg =\n `Token: ->${tokenType.name}<- can never be matched.\\n` +\n `Because it appears AFTER the Token Type ->${tokType.name}<-` +\n `in the lexer's definition.\\n` +\n `See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`\n errors.push({\n message: msg,\n type: LexerDefinitionErrorType.UNREACHABLE_PATTERN,\n tokenTypes: [tokType, tokenType]\n })\n }\n })\n })\n\n return errors\n}\n\nfunction testTokenType(str: string, pattern: any): boolean {\n /* istanbul ignore else */\n if (isRegExp(pattern)) {\n const regExpArray = pattern.exec(str)\n return regExpArray !== null && regExpArray.index === 0\n } else if (isFunction(pattern)) {\n // maintain the API of custom patterns\n return pattern(str, 0, [], {})\n } else if (has(pattern, \"exec\")) {\n // maintain the API of custom patterns\n return pattern.exec(str, 0, [], {})\n } else if (typeof pattern === \"string\") {\n return pattern === str\n } else {\n throw Error(\"non exhaustive match\")\n }\n}\n\nfunction noMetaChar(regExp: RegExp): boolean {\n //https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n const metaChars = [\n \".\",\n \"\\\\\",\n \"[\",\n \"]\",\n \"|\",\n \"^\",\n \"$\",\n \"(\",\n \")\",\n \"?\",\n \"*\",\n \"+\",\n \"{\"\n ]\n return (\n find(metaChars, (char) => regExp.source.indexOf(char) !== -1) === undefined\n )\n}\n\nexport function addStartOfInput(pattern: RegExp): RegExp {\n let flags = pattern.ignoreCase ? \"i\" : \"\"\n // always wrapping in a none capturing group preceded by '^' to make sure matching can only work on start of input.\n // duplicate/redundant start of input markers have no meaning (/^^^^A/ === /^A/)\n return new RegExp(`^(?:${pattern.source})`, flags)\n}\n\nexport function addStickyFlag(pattern: RegExp): RegExp {\n let flags = pattern.ignoreCase ? \"iy\" : \"y\"\n // always wrapping in a none capturing group preceded by '^' to make sure matching can only work on start of input.\n // duplicate/redundant start of input markers have no meaning (/^^^^A/ === /^A/)\n return new RegExp(`${pattern.source}`, flags)\n}\n\nexport function performRuntimeChecks(\n lexerDefinition: IMultiModeLexerDefinition,\n trackLines: boolean,\n lineTerminatorCharacters: (number | string)[]\n): ILexerDefinitionError[] {\n let errors = []\n\n // some run time checks to help the end users.\n if (!has(lexerDefinition, DEFAULT_MODE)) {\n errors.push({\n message:\n \"A MultiMode Lexer cannot be initialized without a <\" +\n DEFAULT_MODE +\n \"> property in its definition\\n\",\n type: LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE\n })\n }\n if (!has(lexerDefinition, MODES)) {\n errors.push({\n message:\n \"A MultiMode Lexer cannot be initialized without a <\" +\n MODES +\n \"> property in its definition\\n\",\n type: LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY\n })\n }\n\n if (\n has(lexerDefinition, MODES) &&\n has(lexerDefinition, DEFAULT_MODE) &&\n !has(lexerDefinition.modes, lexerDefinition.defaultMode)\n ) {\n errors.push({\n message:\n `A MultiMode Lexer cannot be initialized with a ${DEFAULT_MODE}: <${lexerDefinition.defaultMode}>` +\n `which does not exist\\n`,\n type:\n LexerDefinitionErrorType.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST\n })\n }\n\n if (has(lexerDefinition, MODES)) {\n forEach(lexerDefinition.modes, (currModeValue, currModeName) => {\n forEach(currModeValue, (currTokType, currIdx) => {\n if (isUndefined(currTokType)) {\n errors.push({\n message:\n `A Lexer cannot be initialized using an undefined Token Type. Mode:` +\n `<${currModeName}> at index: <${currIdx}>\\n`,\n type:\n LexerDefinitionErrorType.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED\n })\n }\n })\n })\n }\n\n return errors\n}\n\nexport function performWarningRuntimeChecks(\n lexerDefinition: IMultiModeLexerDefinition,\n trackLines: boolean,\n lineTerminatorCharacters: (number | string)[]\n): ILexerDefinitionError[] {\n const warnings = []\n let hasAnyLineBreak = false\n const allTokenTypes = compact(\n flatten(mapValues(lexerDefinition.modes, (tokTypes) => tokTypes))\n )\n\n const concreteTokenTypes = reject(\n allTokenTypes,\n (currType) => currType[PATTERN] === Lexer.NA\n )\n const terminatorCharCodes = getCharCodes(lineTerminatorCharacters)\n if (trackLines) {\n forEach(concreteTokenTypes, (tokType) => {\n const currIssue = checkLineBreaksIssues(tokType, terminatorCharCodes)\n if (currIssue !== false) {\n const message = buildLineBreakIssueMessage(tokType, currIssue)\n const warningDescriptor = {\n message,\n type: currIssue.issue,\n tokenType: tokType\n }\n warnings.push(warningDescriptor)\n } else {\n // we don't want to attempt to scan if the user explicitly specified the line_breaks option.\n if (has(tokType, \"LINE_BREAKS\")) {\n if (tokType.LINE_BREAKS === true) {\n hasAnyLineBreak = true\n }\n } else {\n if (canMatchCharCode(terminatorCharCodes, tokType.PATTERN)) {\n hasAnyLineBreak = true\n }\n }\n }\n })\n }\n\n if (trackLines && !hasAnyLineBreak) {\n warnings.push({\n message:\n \"Warning: No LINE_BREAKS Found.\\n\" +\n \"\\tThis Lexer has been defined to track line and column information,\\n\" +\n \"\\tBut none of the Token Types can be identified as matching a line terminator.\\n\" +\n \"\\tSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS \\n\" +\n \"\\tfor details.\",\n type: LexerDefinitionErrorType.NO_LINE_BREAKS_FLAGS\n })\n }\n return warnings\n}\n\nexport function cloneEmptyGroups(emptyGroups: {\n [groupName: string]: IToken\n}): { [groupName: string]: IToken } {\n let clonedResult: any = {}\n let groupKeys = keys(emptyGroups)\n\n forEach(groupKeys, (currKey) => {\n let currGroupValue = emptyGroups[currKey]\n\n /* istanbul ignore else */\n if (isArray(currGroupValue)) {\n clonedResult[currKey] = []\n } else {\n throw Error(\"non exhaustive match\")\n }\n })\n\n return clonedResult\n}\n\n// TODO: refactor to avoid duplication\nexport function isCustomPattern(tokenType: any): boolean {\n let pattern = tokenType.PATTERN\n /* istanbul ignore else */\n if (isRegExp(pattern)) {\n return false\n } else if (isFunction(pattern)) {\n // CustomPatternMatcherFunc - custom patterns do not require any transformations, only wrapping in a RegExp Like object\n return true\n } else if (has(pattern, \"exec\")) {\n // ICustomPattern\n return true\n } else if (isString(pattern)) {\n return false\n } else {\n throw Error(\"non exhaustive match\")\n }\n}\n\nexport function isShortPattern(pattern: any): number | boolean {\n if (isString(pattern) && pattern.length === 1) {\n return pattern.charCodeAt(0)\n } else {\n return false\n }\n}\n\n/**\n * Faster than using a RegExp for default newline detection during lexing.\n */\nexport const LineTerminatorOptimizedTester: ILineTerminatorsTester = {\n // implements /\\n|\\r\\n?/g.test\n test: function (text) {\n let len = text.length\n for (let i = this.lastIndex; i < len; i++) {\n let c = text.charCodeAt(i)\n if (c === 10) {\n this.lastIndex = i + 1\n return true\n } else if (c === 13) {\n if (text.charCodeAt(i + 1) === 10) {\n this.lastIndex = i + 2\n } else {\n this.lastIndex = i + 1\n }\n return true\n }\n }\n return false\n },\n\n lastIndex: 0\n}\n\nfunction checkLineBreaksIssues(\n tokType: TokenType,\n lineTerminatorCharCodes: number[]\n):\n | {\n issue:\n | LexerDefinitionErrorType.IDENTIFY_TERMINATOR\n | LexerDefinitionErrorType.CUSTOM_LINE_BREAK\n errMsg?: string\n }\n | false {\n if (has(tokType, \"LINE_BREAKS\")) {\n // if the user explicitly declared the line_breaks option we will respect their choice\n // and assume it is correct.\n return false\n } else {\n /* istanbul ignore else */\n if (isRegExp(tokType.PATTERN)) {\n try {\n canMatchCharCode(lineTerminatorCharCodes, tokType.PATTERN)\n } catch (e) {\n /* istanbul ignore next - to test this we would have to mock to throw an error */\n return {\n issue: LexerDefinitionErrorType.IDENTIFY_TERMINATOR,\n errMsg: e.message\n }\n }\n return false\n } else if (isString(tokType.PATTERN)) {\n // string literal patterns can always be analyzed to detect line terminator usage\n return false\n } else if (isCustomPattern(tokType)) {\n // custom token types\n return { issue: LexerDefinitionErrorType.CUSTOM_LINE_BREAK }\n } else {\n throw Error(\"non exhaustive match\")\n }\n }\n}\n\nexport function buildLineBreakIssueMessage(\n tokType: TokenType,\n details: {\n issue:\n | LexerDefinitionErrorType.IDENTIFY_TERMINATOR\n | LexerDefinitionErrorType.CUSTOM_LINE_BREAK\n errMsg?: string\n }\n): string {\n /* istanbul ignore else */\n if (details.issue === LexerDefinitionErrorType.IDENTIFY_TERMINATOR) {\n return (\n \"Warning: unable to identify line terminator usage in pattern.\\n\" +\n `\\tThe problem is in the <${tokType.name}> Token Type\\n` +\n `\\t Root cause: ${details.errMsg}.\\n` +\n \"\\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR\"\n )\n } else if (details.issue === LexerDefinitionErrorType.CUSTOM_LINE_BREAK) {\n return (\n \"Warning: A Custom Token Pattern should specify the option.\\n\" +\n `\\tThe problem is in the <${tokType.name}> Token Type\\n` +\n \"\\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK\"\n )\n } else {\n throw Error(\"non exhaustive match\")\n }\n}\n\nfunction getCharCodes(charsOrCodes: (number | string)[]): number[] {\n const charCodes = map(charsOrCodes, (numOrString) => {\n if (isString(numOrString) && numOrString.length > 0) {\n return numOrString.charCodeAt(0)\n } else {\n return numOrString\n }\n })\n\n return charCodes\n}\n\nfunction addToMapOfArrays(map, key, value): void {\n if (map[key] === undefined) {\n map[key] = [value]\n } else {\n map[key].push(value)\n }\n}\n\nexport const minOptimizationVal = 256\n\n/**\n * We ae mapping charCode above ASCI (256) into buckets each in the size of 256.\n * This is because ASCI are the most common start chars so each one of those will get its own\n * possible token configs vector.\n *\n * Tokens starting with charCodes \"above\" ASCI are uncommon, so we can \"afford\"\n * to place these into buckets of possible token configs, What we gain from\n * this is avoiding the case of creating an optimization 'charCodeToPatternIdxToConfig'\n * which would contain 10,000+ arrays of small size (e.g unicode Identifiers scenario).\n * Our 'charCodeToPatternIdxToConfig' max size will now be:\n * 256 + (2^16 / 2^8) - 1 === 511\n *\n * note the hack for fast division integer part extraction\n * See: https://stackoverflow.com/a/4228528\n */\nexport function charCodeToOptimizedIndex(charCode) {\n return charCode < minOptimizationVal\n ? charCode\n : charCodeToOptimizedIdxMap[charCode]\n}\n\n/**\n * This is a compromise between cold start / hot running performance\n * Creating this array takes ~3ms on a modern machine,\n * But if we perform the computation at runtime as needed the CSS Lexer benchmark\n * performance degrades by ~10%\n *\n * TODO: Perhaps it should be lazy initialized only if a charCode > 255 is used.\n */\nlet charCodeToOptimizedIdxMap = []\nfunction initCharCodeToOptimizedIndexMap() {\n if (isEmpty(charCodeToOptimizedIdxMap)) {\n charCodeToOptimizedIdxMap = new Array(65536)\n for (let i = 0; i < 65536; i++) {\n /* tslint:disable */\n charCodeToOptimizedIdxMap[i] = i > 255 ? 255 + ~~(i / 255) : i\n /* tslint:enable */\n }\n }\n}\n","import {\n cloneArr,\n compact,\n contains,\n difference,\n flatten,\n forEach,\n has,\n isArray,\n isEmpty,\n map\n} from \"../utils/utils\"\nimport { TokenType } from \"../../api\"\n\nexport function tokenStructuredMatcher(tokInstance, tokConstructor) {\n const instanceType = tokInstance.tokenTypeIdx\n if (instanceType === tokConstructor.tokenTypeIdx) {\n return true\n } else {\n return (\n tokConstructor.isParent === true &&\n tokConstructor.categoryMatchesMap[instanceType] === true\n )\n }\n}\n\n// Optimized tokenMatcher in case our grammar does not use token categories\n// Being so tiny it is much more likely to be in-lined and this avoid the function call overhead\nexport function tokenStructuredMatcherNoCategories(token, tokType) {\n return token.tokenTypeIdx === tokType.tokenTypeIdx\n}\n\nexport let tokenShortNameIdx = 1\nexport const tokenIdxToClass = {}\n\nexport function augmentTokenTypes(tokenTypes: TokenType[]): void {\n // collect the parent Token Types as well.\n let tokenTypesAndParents = expandCategories(tokenTypes)\n\n // add required tokenType and categoryMatches properties\n assignTokenDefaultProps(tokenTypesAndParents)\n\n // fill up the categoryMatches\n assignCategoriesMapProp(tokenTypesAndParents)\n assignCategoriesTokensProp(tokenTypesAndParents)\n\n forEach(tokenTypesAndParents, (tokType) => {\n tokType.isParent = tokType.categoryMatches.length > 0\n })\n}\n\nexport function expandCategories(tokenTypes: TokenType[]): TokenType[] {\n let result = cloneArr(tokenTypes)\n\n let categories = tokenTypes\n let searching = true\n while (searching) {\n categories = compact(\n flatten(map(categories, (currTokType) => currTokType.CATEGORIES))\n )\n\n let newCategories = difference(categories, result)\n\n result = result.concat(newCategories)\n\n if (isEmpty(newCategories)) {\n searching = false\n } else {\n categories = newCategories\n }\n }\n return result\n}\n\nexport function assignTokenDefaultProps(tokenTypes: TokenType[]): void {\n forEach(tokenTypes, (currTokType) => {\n if (!hasShortKeyProperty(currTokType)) {\n tokenIdxToClass[tokenShortNameIdx] = currTokType\n ;(currTokType).tokenTypeIdx = tokenShortNameIdx++\n }\n\n // CATEGORIES? : TokenType | TokenType[]\n if (\n hasCategoriesProperty(currTokType) &&\n !isArray(currTokType.CATEGORIES)\n // &&\n // !isUndefined(currTokType.CATEGORIES.PATTERN)\n ) {\n currTokType.CATEGORIES = [currTokType.CATEGORIES]\n }\n\n if (!hasCategoriesProperty(currTokType)) {\n currTokType.CATEGORIES = []\n }\n\n if (!hasExtendingTokensTypesProperty(currTokType)) {\n currTokType.categoryMatches = []\n }\n\n if (!hasExtendingTokensTypesMapProperty(currTokType)) {\n currTokType.categoryMatchesMap = {}\n }\n })\n}\n\nexport function assignCategoriesTokensProp(tokenTypes: TokenType[]): void {\n forEach(tokenTypes, (currTokType) => {\n // avoid duplications\n currTokType.categoryMatches = []\n forEach(currTokType.categoryMatchesMap, (val, key) => {\n currTokType.categoryMatches.push(tokenIdxToClass[key].tokenTypeIdx)\n })\n })\n}\n\nexport function assignCategoriesMapProp(tokenTypes: TokenType[]): void {\n forEach(tokenTypes, (currTokType) => {\n singleAssignCategoriesToksMap([], currTokType)\n })\n}\n\nexport function singleAssignCategoriesToksMap(\n path: TokenType[],\n nextNode: TokenType\n): void {\n forEach(path, (pathNode) => {\n nextNode.categoryMatchesMap[pathNode.tokenTypeIdx] = true\n })\n\n forEach(nextNode.CATEGORIES, (nextCategory) => {\n const newPath = path.concat(nextNode)\n // avoids infinite loops due to cyclic categories.\n if (!contains(newPath, nextCategory)) {\n singleAssignCategoriesToksMap(newPath, nextCategory)\n }\n })\n}\n\nexport function hasShortKeyProperty(tokType: TokenType): boolean {\n return has(tokType, \"tokenTypeIdx\")\n}\n\nexport function hasCategoriesProperty(tokType: TokenType): boolean {\n return has(tokType, \"CATEGORIES\")\n}\n\nexport function hasExtendingTokensTypesProperty(tokType: TokenType): boolean {\n return has(tokType, \"categoryMatches\")\n}\n\nexport function hasExtendingTokensTypesMapProperty(\n tokType: TokenType\n): boolean {\n return has(tokType, \"categoryMatchesMap\")\n}\n\nexport function isTokenType(tokType: TokenType): boolean {\n return has(tokType, \"tokenTypeIdx\")\n}\n","import { ILexerErrorMessageProvider, IToken } from \"../../api\"\n\nexport const defaultLexerErrorProvider: ILexerErrorMessageProvider = {\n buildUnableToPopLexerModeMessage(token: IToken): string {\n return `Unable to pop Lexer Mode after encountering Token ->${token.image}<- The Mode Stack is empty`\n },\n\n buildUnexpectedCharactersMessage(\n fullText: string,\n startOffset: number,\n length: number,\n line?: number,\n column?: number\n ): string {\n return (\n `unexpected character: ->${fullText.charAt(\n startOffset\n )}<- at offset: ${startOffset},` + ` skipped ${length} characters.`\n )\n }\n}\n","import {\n analyzeTokenTypes,\n charCodeToOptimizedIndex,\n cloneEmptyGroups,\n DEFAULT_MODE,\n LineTerminatorOptimizedTester,\n performRuntimeChecks,\n performWarningRuntimeChecks,\n SUPPORT_STICKY,\n validatePatterns\n} from \"./lexer\"\nimport {\n cloneArr,\n cloneObj,\n forEach,\n IDENTITY,\n isArray,\n isEmpty,\n isUndefined,\n keys,\n last,\n map,\n merge,\n NOOP,\n PRINT_WARNING,\n reduce,\n reject,\n timer,\n toFastProperties\n} from \"../utils/utils\"\nimport { augmentTokenTypes } from \"./tokens\"\nimport {\n CustomPatternMatcherFunc,\n ILexerConfig,\n ILexerDefinitionError,\n ILexingError,\n IMultiModeLexerDefinition,\n IToken,\n TokenType\n} from \"../../api\"\nimport { defaultLexerErrorProvider } from \"../scan/lexer_errors_public\"\nimport { clearRegExpParserCache } from \"./reg_exp_parser\"\n\nexport interface ILexingResult {\n tokens: IToken[]\n groups: { [groupName: string]: IToken[] }\n errors: ILexingError[]\n}\n\nexport enum LexerDefinitionErrorType {\n MISSING_PATTERN,\n INVALID_PATTERN,\n EOI_ANCHOR_FOUND,\n UNSUPPORTED_FLAGS_FOUND,\n DUPLICATE_PATTERNS_FOUND,\n INVALID_GROUP_TYPE_FOUND,\n PUSH_MODE_DOES_NOT_EXIST,\n MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE,\n MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY,\n MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST,\n LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED,\n SOI_ANCHOR_FOUND,\n EMPTY_MATCH_PATTERN,\n NO_LINE_BREAKS_FLAGS,\n UNREACHABLE_PATTERN,\n IDENTIFY_TERMINATOR,\n CUSTOM_LINE_BREAK\n}\n\nexport interface IRegExpExec {\n exec: CustomPatternMatcherFunc\n}\n\nconst DEFAULT_LEXER_CONFIG: ILexerConfig = {\n deferDefinitionErrorsHandling: false,\n positionTracking: \"full\",\n lineTerminatorsPattern: /\\n|\\r\\n?/g,\n lineTerminatorCharacters: [\"\\n\", \"\\r\"],\n ensureOptimizations: false,\n safeMode: false,\n errorMessageProvider: defaultLexerErrorProvider,\n traceInitPerf: false,\n skipValidations: false\n}\n\nObject.freeze(DEFAULT_LEXER_CONFIG)\n\nexport class Lexer {\n public static SKIPPED =\n \"This marks a skipped Token pattern, this means each token identified by it will\" +\n \"be consumed and then thrown into oblivion, this can be used to for example to completely ignore whitespace.\"\n\n public static NA = /NOT_APPLICABLE/\n public lexerDefinitionErrors: ILexerDefinitionError[] = []\n public lexerDefinitionWarning: ILexerDefinitionError[] = []\n\n protected patternIdxToConfig: any = {}\n protected charCodeToPatternIdxToConfig: any = {}\n\n protected modes: string[] = []\n protected defaultMode: string\n protected emptyGroups: { [groupName: string]: IToken } = {}\n\n private config: ILexerConfig = undefined\n private trackStartLines: boolean = true\n private trackEndLines: boolean = true\n private hasCustom: boolean = false\n private canModeBeOptimized: any = {}\n\n private traceInitPerf: boolean | number\n private traceInitMaxIdent: number\n private traceInitIndent: number\n\n constructor(\n protected lexerDefinition: TokenType[] | IMultiModeLexerDefinition,\n config: ILexerConfig = DEFAULT_LEXER_CONFIG\n ) {\n if (typeof config === \"boolean\") {\n throw Error(\n \"The second argument to the Lexer constructor is now an ILexerConfig Object.\\n\" +\n \"a boolean 2nd argument is no longer supported\"\n )\n }\n\n // todo: defaults func?\n this.config = merge(DEFAULT_LEXER_CONFIG, config)\n\n const traceInitVal = this.config.traceInitPerf\n if (traceInitVal === true) {\n this.traceInitMaxIdent = Infinity\n this.traceInitPerf = true\n } else if (typeof traceInitVal === \"number\") {\n this.traceInitMaxIdent = traceInitVal\n this.traceInitPerf = true\n }\n this.traceInitIndent = -1\n\n this.TRACE_INIT(\"Lexer Constructor\", () => {\n let actualDefinition: IMultiModeLexerDefinition\n let hasOnlySingleMode = true\n this.TRACE_INIT(\"Lexer Config handling\", () => {\n if (\n this.config.lineTerminatorsPattern ===\n DEFAULT_LEXER_CONFIG.lineTerminatorsPattern\n ) {\n // optimized built-in implementation for the defaults definition of lineTerminators\n this.config.lineTerminatorsPattern = LineTerminatorOptimizedTester\n } else {\n if (\n this.config.lineTerminatorCharacters ===\n DEFAULT_LEXER_CONFIG.lineTerminatorCharacters\n ) {\n throw Error(\n \"Error: Missing property on the Lexer config.\\n\" +\n \"\\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS\"\n )\n }\n }\n\n if (config.safeMode && config.ensureOptimizations) {\n throw Error(\n '\"safeMode\" and \"ensureOptimizations\" flags are mutually exclusive.'\n )\n }\n\n this.trackStartLines = /full|onlyStart/i.test(\n this.config.positionTracking\n )\n this.trackEndLines = /full/i.test(this.config.positionTracking)\n\n // Convert SingleModeLexerDefinition into a IMultiModeLexerDefinition.\n if (isArray(lexerDefinition)) {\n actualDefinition = { modes: {} }\n actualDefinition.modes[DEFAULT_MODE] = cloneArr(\n lexerDefinition\n )\n actualDefinition[DEFAULT_MODE] = DEFAULT_MODE\n } else {\n // no conversion needed, input should already be a IMultiModeLexerDefinition\n hasOnlySingleMode = false\n actualDefinition = cloneObj(\n lexerDefinition\n )\n }\n })\n\n if (this.config.skipValidations === false) {\n this.TRACE_INIT(\"performRuntimeChecks\", () => {\n this.lexerDefinitionErrors = this.lexerDefinitionErrors.concat(\n performRuntimeChecks(\n actualDefinition,\n this.trackStartLines,\n this.config.lineTerminatorCharacters\n )\n )\n })\n\n this.TRACE_INIT(\"performWarningRuntimeChecks\", () => {\n this.lexerDefinitionWarning = this.lexerDefinitionWarning.concat(\n performWarningRuntimeChecks(\n actualDefinition,\n this.trackStartLines,\n this.config.lineTerminatorCharacters\n )\n )\n })\n }\n\n // for extra robustness to avoid throwing an none informative error message\n actualDefinition.modes = actualDefinition.modes\n ? actualDefinition.modes\n : {}\n\n // an error of undefined TokenTypes will be detected in \"performRuntimeChecks\" above.\n // this transformation is to increase robustness in the case of partially invalid lexer definition.\n forEach(actualDefinition.modes, (currModeValue, currModeName) => {\n actualDefinition.modes[currModeName] = reject(\n currModeValue,\n (currTokType) => isUndefined(currTokType)\n )\n })\n\n let allModeNames = keys(actualDefinition.modes)\n\n forEach(\n actualDefinition.modes,\n (currModDef: TokenType[], currModName) => {\n this.TRACE_INIT(`Mode: <${currModName}> processing`, () => {\n this.modes.push(currModName)\n\n if (this.config.skipValidations === false) {\n this.TRACE_INIT(`validatePatterns`, () => {\n this.lexerDefinitionErrors = this.lexerDefinitionErrors.concat(\n validatePatterns(currModDef, allModeNames)\n )\n })\n }\n\n // If definition errors were encountered, the analysis phase may fail unexpectedly/\n // Considering a lexer with definition errors may never be used, there is no point\n // to performing the analysis anyhow...\n if (isEmpty(this.lexerDefinitionErrors)) {\n augmentTokenTypes(currModDef)\n\n let currAnalyzeResult\n this.TRACE_INIT(`analyzeTokenTypes`, () => {\n currAnalyzeResult = analyzeTokenTypes(currModDef, {\n lineTerminatorCharacters: this.config\n .lineTerminatorCharacters,\n positionTracking: config.positionTracking,\n ensureOptimizations: config.ensureOptimizations,\n safeMode: config.safeMode,\n tracer: this.TRACE_INIT.bind(this)\n })\n })\n\n this.patternIdxToConfig[currModName] =\n currAnalyzeResult.patternIdxToConfig\n\n this.charCodeToPatternIdxToConfig[currModName] =\n currAnalyzeResult.charCodeToPatternIdxToConfig\n\n this.emptyGroups = merge(\n this.emptyGroups,\n currAnalyzeResult.emptyGroups\n )\n\n this.hasCustom = currAnalyzeResult.hasCustom || this.hasCustom\n\n this.canModeBeOptimized[currModName] =\n currAnalyzeResult.canBeOptimized\n }\n })\n }\n )\n\n this.defaultMode = actualDefinition.defaultMode\n\n if (\n !isEmpty(this.lexerDefinitionErrors) &&\n !this.config.deferDefinitionErrorsHandling\n ) {\n let allErrMessages = map(this.lexerDefinitionErrors, (error) => {\n return error.message\n })\n let allErrMessagesString = allErrMessages.join(\n \"-----------------------\\n\"\n )\n throw new Error(\n \"Errors detected in definition of Lexer:\\n\" + allErrMessagesString\n )\n }\n\n // Only print warning if there are no errors, This will avoid pl\n forEach(this.lexerDefinitionWarning, (warningDescriptor) => {\n PRINT_WARNING(warningDescriptor.message)\n })\n\n this.TRACE_INIT(\"Choosing sub-methods implementations\", () => {\n // Choose the relevant internal implementations for this specific parser.\n // These implementations should be in-lined by the JavaScript engine\n // to provide optimal performance in each scenario.\n if (SUPPORT_STICKY) {\n this.chopInput = IDENTITY\n this.match = this.matchWithTest\n } else {\n this.updateLastIndex = NOOP\n this.match = this.matchWithExec\n }\n\n if (hasOnlySingleMode) {\n this.handleModes = NOOP\n }\n\n if (this.trackStartLines === false) {\n this.computeNewColumn = IDENTITY\n }\n\n if (this.trackEndLines === false) {\n this.updateTokenEndLineColumnLocation = NOOP\n }\n\n if (/full/i.test(this.config.positionTracking)) {\n this.createTokenInstance = this.createFullToken\n } else if (/onlyStart/i.test(this.config.positionTracking)) {\n this.createTokenInstance = this.createStartOnlyToken\n } else if (/onlyOffset/i.test(this.config.positionTracking)) {\n this.createTokenInstance = this.createOffsetOnlyToken\n } else {\n throw Error(\n `Invalid config option: \"${this.config.positionTracking}\"`\n )\n }\n\n if (this.hasCustom) {\n this.addToken = this.addTokenUsingPush\n this.handlePayload = this.handlePayloadWithCustom\n } else {\n this.addToken = this.addTokenUsingMemberAccess\n this.handlePayload = this.handlePayloadNoCustom\n }\n })\n\n this.TRACE_INIT(\"Failed Optimization Warnings\", () => {\n const unOptimizedModes = reduce(\n this.canModeBeOptimized,\n (cannotBeOptimized, canBeOptimized, modeName) => {\n if (canBeOptimized === false) {\n cannotBeOptimized.push(modeName)\n }\n return cannotBeOptimized\n },\n []\n )\n\n if (config.ensureOptimizations && !isEmpty(unOptimizedModes)) {\n throw Error(\n `Lexer Modes: < ${unOptimizedModes.join(\n \", \"\n )} > cannot be optimized.\\n` +\n '\\t Disable the \"ensureOptimizations\" lexer config flag to silently ignore this and run the lexer in an un-optimized mode.\\n' +\n \"\\t Or inspect the console log for details on how to resolve these issues.\"\n )\n }\n })\n\n this.TRACE_INIT(\"clearRegExpParserCache\", () => {\n clearRegExpParserCache()\n })\n\n this.TRACE_INIT(\"toFastProperties\", () => {\n toFastProperties(this)\n })\n })\n }\n\n public tokenize(\n text: string,\n initialMode: string = this.defaultMode\n ): ILexingResult {\n if (!isEmpty(this.lexerDefinitionErrors)) {\n let allErrMessages = map(this.lexerDefinitionErrors, (error) => {\n return error.message\n })\n let allErrMessagesString = allErrMessages.join(\n \"-----------------------\\n\"\n )\n throw new Error(\n \"Unable to Tokenize because Errors detected in definition of Lexer:\\n\" +\n allErrMessagesString\n )\n }\n\n let lexResult = this.tokenizeInternal(text, initialMode)\n\n return lexResult\n }\n\n // There is quite a bit of duplication between this and \"tokenizeInternalLazy\"\n // This is intentional due to performance considerations.\n private tokenizeInternal(text: string, initialMode: string): ILexingResult {\n let i,\n j,\n matchAltImage,\n longerAltIdx,\n matchedImage,\n payload,\n altPayload,\n imageLength,\n group,\n tokType,\n newToken,\n errLength,\n droppedChar,\n msg,\n match\n let orgText = text\n let orgLength = orgText.length\n let offset = 0\n let matchedTokensIndex = 0\n // initializing the tokensArray to the \"guessed\" size.\n // guessing too little will still reduce the number of array re-sizes on pushes.\n // guessing too large (Tested by guessing x4 too large) may cost a bit more of memory\n // but would still have a faster runtime by avoiding (All but one) array resizing.\n let guessedNumberOfTokens = this.hasCustom\n ? 0 // will break custom token pattern APIs the matchedTokens array will contain undefined elements.\n : Math.floor(text.length / 10)\n let matchedTokens = new Array(guessedNumberOfTokens)\n let errors: ILexingError[] = []\n let line = this.trackStartLines ? 1 : undefined\n let column = this.trackStartLines ? 1 : undefined\n let groups: any = cloneEmptyGroups(this.emptyGroups)\n let trackLines = this.trackStartLines\n const lineTerminatorPattern = this.config.lineTerminatorsPattern\n\n let currModePatternsLength = 0\n let patternIdxToConfig = []\n let currCharCodeToPatternIdxToConfig = []\n\n let modeStack = []\n\n const emptyArray = []\n Object.freeze(emptyArray)\n let getPossiblePatterns = undefined\n\n function getPossiblePatternsSlow() {\n return patternIdxToConfig\n }\n\n function getPossiblePatternsOptimized(charCode) {\n const optimizedCharIdx = charCodeToOptimizedIndex(charCode)\n const possiblePatterns =\n currCharCodeToPatternIdxToConfig[optimizedCharIdx]\n if (possiblePatterns === undefined) {\n return emptyArray\n } else {\n return possiblePatterns\n }\n }\n\n let pop_mode = (popToken) => {\n // TODO: perhaps avoid this error in the edge case there is no more input?\n if (\n modeStack.length === 1 &&\n // if we have both a POP_MODE and a PUSH_MODE this is in-fact a \"transition\"\n // So no error should occur.\n popToken.tokenType.PUSH_MODE === undefined\n ) {\n // if we try to pop the last mode there lexer will no longer have ANY mode.\n // thus the pop is ignored, an error will be created and the lexer will continue parsing in the previous mode.\n let msg = this.config.errorMessageProvider.buildUnableToPopLexerModeMessage(\n popToken\n )\n\n errors.push({\n offset: popToken.startOffset,\n line:\n popToken.startLine !== undefined ? popToken.startLine : undefined,\n column:\n popToken.startColumn !== undefined\n ? popToken.startColumn\n : undefined,\n length: popToken.image.length,\n message: msg\n })\n } else {\n modeStack.pop()\n let newMode = last(modeStack)\n patternIdxToConfig = this.patternIdxToConfig[newMode]\n currCharCodeToPatternIdxToConfig = this.charCodeToPatternIdxToConfig[\n newMode\n ]\n currModePatternsLength = patternIdxToConfig.length\n const modeCanBeOptimized =\n this.canModeBeOptimized[newMode] && this.config.safeMode === false\n\n if (currCharCodeToPatternIdxToConfig && modeCanBeOptimized) {\n getPossiblePatterns = getPossiblePatternsOptimized\n } else {\n getPossiblePatterns = getPossiblePatternsSlow\n }\n }\n }\n\n function push_mode(newMode) {\n modeStack.push(newMode)\n currCharCodeToPatternIdxToConfig = this.charCodeToPatternIdxToConfig[\n newMode\n ]\n\n patternIdxToConfig = this.patternIdxToConfig[newMode]\n currModePatternsLength = patternIdxToConfig.length\n\n currModePatternsLength = patternIdxToConfig.length\n const modeCanBeOptimized =\n this.canModeBeOptimized[newMode] && this.config.safeMode === false\n\n if (currCharCodeToPatternIdxToConfig && modeCanBeOptimized) {\n getPossiblePatterns = getPossiblePatternsOptimized\n } else {\n getPossiblePatterns = getPossiblePatternsSlow\n }\n }\n\n // this pattern seems to avoid a V8 de-optimization, although that de-optimization does not\n // seem to matter performance wise.\n push_mode.call(this, initialMode)\n\n let currConfig\n\n while (offset < orgLength) {\n matchedImage = null\n\n let nextCharCode = orgText.charCodeAt(offset)\n const chosenPatternIdxToConfig = getPossiblePatterns(nextCharCode)\n let chosenPatternsLength = chosenPatternIdxToConfig.length\n\n for (i = 0; i < chosenPatternsLength; i++) {\n currConfig = chosenPatternIdxToConfig[i]\n let currPattern = currConfig.pattern\n payload = null\n\n // manually in-lined because > 600 chars won't be in-lined in V8\n let singleCharCode = currConfig.short\n if (singleCharCode !== false) {\n if (nextCharCode === singleCharCode) {\n // single character string\n matchedImage = currPattern\n }\n } else if (currConfig.isCustom === true) {\n match = currPattern.exec(orgText, offset, matchedTokens, groups)\n if (match !== null) {\n matchedImage = match[0]\n if (match.payload !== undefined) {\n payload = match.payload\n }\n } else {\n matchedImage = null\n }\n } else {\n this.updateLastIndex(currPattern, offset)\n matchedImage = this.match(currPattern, text, offset)\n }\n\n if (matchedImage !== null) {\n // even though this pattern matched we must try a another longer alternative.\n // this can be used to prioritize keywords over identifiers\n longerAltIdx = currConfig.longerAlt\n if (longerAltIdx !== undefined) {\n // TODO: micro optimize, avoid extra prop access\n // by saving/linking longerAlt on the original config?\n let longerAltConfig = patternIdxToConfig[longerAltIdx]\n let longerAltPattern = longerAltConfig.pattern\n altPayload = null\n\n // single Char can never be a longer alt so no need to test it.\n // manually in-lined because > 600 chars won't be in-lined in V8\n if (longerAltConfig.isCustom === true) {\n match = longerAltPattern.exec(\n orgText,\n offset,\n matchedTokens,\n groups\n )\n if (match !== null) {\n matchAltImage = match[0]\n if (match.payload !== undefined) {\n altPayload = match.payload\n }\n } else {\n matchAltImage = null\n }\n } else {\n this.updateLastIndex(longerAltPattern, offset)\n matchAltImage = this.match(longerAltPattern, text, offset)\n }\n\n if (matchAltImage && matchAltImage.length > matchedImage.length) {\n matchedImage = matchAltImage\n payload = altPayload\n currConfig = longerAltConfig\n }\n }\n break\n }\n }\n\n // successful match\n if (matchedImage !== null) {\n imageLength = matchedImage.length\n group = currConfig.group\n if (group !== undefined) {\n tokType = currConfig.tokenTypeIdx\n // TODO: \"offset + imageLength\" and the new column may be computed twice in case of \"full\" location information inside\n // createFullToken method\n newToken = this.createTokenInstance(\n matchedImage,\n offset,\n tokType,\n currConfig.tokenType,\n line,\n column,\n imageLength\n )\n\n this.handlePayload(newToken, payload)\n\n // TODO: optimize NOOP in case there are no special groups?\n if (group === false) {\n matchedTokensIndex = this.addToken(\n matchedTokens,\n matchedTokensIndex,\n newToken\n )\n } else {\n groups[group].push(newToken)\n }\n }\n text = this.chopInput(text, imageLength)\n offset = offset + imageLength\n\n // TODO: with newlines the column may be assigned twice\n column = this.computeNewColumn(column, imageLength)\n\n if (trackLines === true && currConfig.canLineTerminator === true) {\n let numOfLTsInMatch = 0\n let foundTerminator\n let lastLTEndOffset\n lineTerminatorPattern.lastIndex = 0\n do {\n foundTerminator = lineTerminatorPattern.test(matchedImage)\n if (foundTerminator === true) {\n lastLTEndOffset = lineTerminatorPattern.lastIndex - 1\n numOfLTsInMatch++\n }\n } while (foundTerminator === true)\n\n if (numOfLTsInMatch !== 0) {\n line = line + numOfLTsInMatch\n column = imageLength - lastLTEndOffset\n this.updateTokenEndLineColumnLocation(\n newToken,\n group,\n lastLTEndOffset,\n numOfLTsInMatch,\n line,\n column,\n imageLength\n )\n }\n }\n // will be NOOP if no modes present\n this.handleModes(currConfig, pop_mode, push_mode, newToken)\n } else {\n // error recovery, drop characters until we identify a valid token's start point\n let errorStartOffset = offset\n let errorLine = line\n let errorColumn = column\n let foundResyncPoint = false\n while (!foundResyncPoint && offset < orgLength) {\n // drop chars until we succeed in matching something\n droppedChar = orgText.charCodeAt(offset)\n // Identity Func (when sticky flag is enabled)\n text = this.chopInput(text, 1)\n offset++\n for (j = 0; j < currModePatternsLength; j++) {\n let currConfig = patternIdxToConfig[j]\n let currPattern = currConfig.pattern\n\n // manually in-lined because > 600 chars won't be in-lined in V8\n let singleCharCode = currConfig.short\n if (singleCharCode !== false) {\n if (orgText.charCodeAt(offset) === singleCharCode) {\n // single character string\n foundResyncPoint = true\n }\n } else if (currConfig.isCustom === true) {\n foundResyncPoint =\n currPattern.exec(orgText, offset, matchedTokens, groups) !==\n null\n } else {\n this.updateLastIndex(currPattern, offset)\n foundResyncPoint = currPattern.exec(text) !== null\n }\n\n if (foundResyncPoint === true) {\n break\n }\n }\n }\n\n errLength = offset - errorStartOffset\n // at this point we either re-synced or reached the end of the input text\n msg = this.config.errorMessageProvider.buildUnexpectedCharactersMessage(\n orgText,\n errorStartOffset,\n errLength,\n errorLine,\n errorColumn\n )\n errors.push({\n offset: errorStartOffset,\n line: errorLine,\n column: errorColumn,\n length: errLength,\n message: msg\n })\n }\n }\n\n // if we do have custom patterns which push directly into the\n // TODO: custom tokens should not push directly??\n if (!this.hasCustom) {\n // if we guessed a too large size for the tokens array this will shrink it to the right size.\n matchedTokens.length = matchedTokensIndex\n }\n\n return {\n tokens: matchedTokens,\n groups: groups,\n errors: errors\n }\n }\n\n private handleModes(config, pop_mode, push_mode, newToken) {\n if (config.pop === true) {\n // need to save the PUSH_MODE property as if the mode is popped\n // patternIdxToPopMode is updated to reflect the new mode after popping the stack\n let pushMode = config.push\n pop_mode(newToken)\n if (pushMode !== undefined) {\n push_mode.call(this, pushMode)\n }\n } else if (config.push !== undefined) {\n push_mode.call(this, config.push)\n }\n }\n\n private chopInput(text, length): string {\n return text.substring(length)\n }\n\n private updateLastIndex(regExp, newLastIndex): void {\n regExp.lastIndex = newLastIndex\n }\n\n // TODO: decrease this under 600 characters? inspect stripping comments option in TSC compiler\n private updateTokenEndLineColumnLocation(\n newToken,\n group,\n lastLTIdx,\n numOfLTsInMatch,\n line,\n column,\n imageLength\n ): void {\n let lastCharIsLT, fixForEndingInLT\n if (group !== undefined) {\n // a none skipped multi line Token, need to update endLine/endColumn\n lastCharIsLT = lastLTIdx === imageLength - 1\n fixForEndingInLT = lastCharIsLT ? -1 : 0\n if (!(numOfLTsInMatch === 1 && lastCharIsLT === true)) {\n // if a token ends in a LT that last LT only affects the line numbering of following Tokens\n newToken.endLine = line + fixForEndingInLT\n // the last LT in a token does not affect the endColumn either as the [columnStart ... columnEnd)\n // inclusive to exclusive range.\n newToken.endColumn = column - 1 + -fixForEndingInLT\n }\n // else single LT in the last character of a token, no need to modify the endLine/EndColumn\n }\n }\n\n private computeNewColumn(oldColumn, imageLength) {\n return oldColumn + imageLength\n }\n\n // Place holder, will be replaced by the correct variant according to the locationTracking option at runtime.\n /* istanbul ignore next - place holder */\n private createTokenInstance(...args: any[]): IToken {\n return null\n }\n\n private createOffsetOnlyToken(image, startOffset, tokenTypeIdx, tokenType) {\n return {\n image,\n startOffset,\n tokenTypeIdx,\n tokenType\n }\n }\n\n private createStartOnlyToken(\n image,\n startOffset,\n tokenTypeIdx,\n tokenType,\n startLine,\n startColumn\n ) {\n return {\n image,\n startOffset,\n startLine,\n startColumn,\n tokenTypeIdx,\n tokenType\n }\n }\n\n private createFullToken(\n image,\n startOffset,\n tokenTypeIdx,\n tokenType,\n startLine,\n startColumn,\n imageLength\n ) {\n return {\n image,\n startOffset,\n endOffset: startOffset + imageLength - 1,\n startLine,\n endLine: startLine,\n startColumn,\n endColumn: startColumn + imageLength - 1,\n tokenTypeIdx,\n tokenType\n }\n }\n\n // Place holder, will be replaced by the correct variant according to the locationTracking option at runtime.\n /* istanbul ignore next - place holder */\n private addToken(tokenVector, index, tokenToAdd): number {\n return 666\n }\n\n private addTokenUsingPush(tokenVector, index, tokenToAdd): number {\n tokenVector.push(tokenToAdd)\n return index\n }\n\n private addTokenUsingMemberAccess(tokenVector, index, tokenToAdd): number {\n tokenVector[index] = tokenToAdd\n index++\n return index\n }\n\n // Place holder, will be replaced by the correct variant according to the hasCustom flag option at runtime.\n /* istanbul ignore next - place holder */\n private handlePayload(token: IToken, payload: any): void {}\n\n private handlePayloadNoCustom(token: IToken, payload: any): void {}\n\n private handlePayloadWithCustom(token: IToken, payload: any): void {\n if (payload !== null) {\n token.payload = payload\n }\n }\n\n /* istanbul ignore next - place holder to be replaced with chosen alternative at runtime */\n private match(pattern: RegExp, text: string, offset?: number): string {\n return null\n }\n\n private matchWithTest(pattern: RegExp, text: string, offset: number): string {\n let found = pattern.test(text)\n if (found === true) {\n return text.substring(offset, pattern.lastIndex)\n }\n return null\n }\n\n private matchWithExec(pattern, text): string {\n let regExpArray = pattern.exec(text)\n return regExpArray !== null ? regExpArray[0] : regExpArray\n }\n\n // Duplicated from the parser's perf trace trait to allow future extraction\n // of the lexer to a separate package.\n TRACE_INIT(phaseDesc: string, phaseImpl: () => T): T {\n // No need to optimize this using NOOP pattern because\n // It is not called in a hot spot...\n if (this.traceInitPerf === true) {\n this.traceInitIndent++\n const indent = new Array(this.traceInitIndent + 1).join(\"\\t\")\n if (this.traceInitIndent < this.traceInitMaxIdent) {\n console.log(`${indent}--> <${phaseDesc}>`)\n }\n const { time, value } = timer(phaseImpl)\n /* istanbul ignore next - Difficult to reproduce specific performance behavior (>10ms) in tests */\n const traceMethod = time > 10 ? console.warn : console.log\n if (this.traceInitIndent < this.traceInitMaxIdent) {\n traceMethod(`${indent}<-- <${phaseDesc}> time: ${time}ms`)\n }\n this.traceInitIndent--\n return value\n } else {\n return phaseImpl()\n }\n }\n}\n","import { has, isString, isUndefined } from \"../utils/utils\"\nimport { Lexer } from \"./lexer_public\"\nimport { augmentTokenTypes, tokenStructuredMatcher } from \"./tokens\"\nimport { IToken, ITokenConfig, TokenType } from \"../../api\"\n\nexport function tokenLabel(tokType: TokenType): string {\n if (hasTokenLabel(tokType)) {\n return tokType.LABEL\n } else {\n return tokType.name\n }\n}\n\nexport function tokenName(tokType: TokenType): string {\n return tokType.name\n}\n\nexport function hasTokenLabel(obj: TokenType): boolean {\n return isString((obj).LABEL) && (obj).LABEL !== \"\"\n}\n\nconst PARENT = \"parent\"\nconst CATEGORIES = \"categories\"\nconst LABEL = \"label\"\nconst GROUP = \"group\"\nconst PUSH_MODE = \"push_mode\"\nconst POP_MODE = \"pop_mode\"\nconst LONGER_ALT = \"longer_alt\"\nconst LINE_BREAKS = \"line_breaks\"\nconst START_CHARS_HINT = \"start_chars_hint\"\n\nexport function createToken(config: ITokenConfig): TokenType {\n return createTokenInternal(config)\n}\n\nfunction createTokenInternal(config: ITokenConfig): TokenType {\n let pattern = config.pattern\n\n let tokenType: TokenType = {}\n tokenType.name = config.name\n\n if (!isUndefined(pattern)) {\n tokenType.PATTERN = pattern\n }\n\n if (has(config, PARENT)) {\n throw (\n \"The parent property is no longer supported.\\n\" +\n \"See: https://github.com/chevrotain/chevrotain/issues/564#issuecomment-349062346 for details.\"\n )\n }\n\n if (has(config, CATEGORIES)) {\n // casting to ANY as this will be fixed inside `augmentTokenTypes``\n tokenType.CATEGORIES = config[CATEGORIES]\n }\n\n augmentTokenTypes([tokenType])\n\n if (has(config, LABEL)) {\n tokenType.LABEL = config[LABEL]\n }\n\n if (has(config, GROUP)) {\n tokenType.GROUP = config[GROUP]\n }\n\n if (has(config, POP_MODE)) {\n tokenType.POP_MODE = config[POP_MODE]\n }\n\n if (has(config, PUSH_MODE)) {\n tokenType.PUSH_MODE = config[PUSH_MODE]\n }\n\n if (has(config, LONGER_ALT)) {\n tokenType.LONGER_ALT = config[LONGER_ALT]\n }\n\n if (has(config, LINE_BREAKS)) {\n tokenType.LINE_BREAKS = config[LINE_BREAKS]\n }\n\n if (has(config, START_CHARS_HINT)) {\n tokenType.START_CHARS_HINT = config[START_CHARS_HINT]\n }\n\n return tokenType\n}\n\nexport const EOF = createToken({ name: \"EOF\", pattern: Lexer.NA })\naugmentTokenTypes([EOF])\n\nexport function createTokenInstance(\n tokType: TokenType,\n image: string,\n startOffset: number,\n endOffset: number,\n startLine: number,\n endLine: number,\n startColumn: number,\n endColumn: number\n): IToken {\n return {\n image,\n startOffset,\n endOffset,\n startLine,\n endLine,\n startColumn,\n endColumn,\n tokenTypeIdx: (tokType).tokenTypeIdx,\n tokenType: tokType\n }\n}\n\nexport function tokenMatcher(token: IToken, tokType: TokenType): boolean {\n return tokenStructuredMatcher(token, tokType)\n}\n","import { assign, forEach, isRegExp, map, pick } from \"../../../utils/utils\"\nimport { tokenLabel } from \"../../../scan/tokens_public\"\nimport {\n IGASTVisitor,\n IProduction,\n IProductionWithOccurrence,\n ISerializedGast,\n TokenType\n} from \"../../../../api\"\n\nexport abstract class AbstractProduction\n implements IProduction {\n public get definition(): T[] {\n return this._definition\n }\n public set definition(value: T[]) {\n this._definition = value\n }\n\n constructor(protected _definition: T[]) {}\n\n accept(visitor: IGASTVisitor): void {\n visitor.visit(this)\n forEach(this.definition, (prod) => {\n prod.accept(visitor)\n })\n }\n}\n\nexport class NonTerminal\n extends AbstractProduction\n implements IProductionWithOccurrence {\n public nonTerminalName: string\n public referencedRule: Rule\n public idx: number = 1\n\n constructor(options: {\n nonTerminalName: string\n referencedRule?: Rule\n idx?: number\n }) {\n super([])\n assign(\n this,\n pick(options, (v) => v !== undefined)\n )\n }\n\n set definition(definition: IProduction[]) {\n // immutable\n }\n\n get definition(): IProduction[] {\n if (this.referencedRule !== undefined) {\n return this.referencedRule.definition\n }\n return []\n }\n\n accept(visitor: IGASTVisitor): void {\n visitor.visit(this)\n // don't visit children of a reference, we will get cyclic infinite loops if we do so\n }\n}\n\nexport class Rule extends AbstractProduction {\n public name: string\n public orgText: string = \"\"\n\n constructor(options: {\n name: string\n definition: IProduction[]\n orgText?: string\n }) {\n super(options.definition)\n assign(\n this,\n pick(options, (v) => v !== undefined)\n )\n }\n}\n\nexport class Alternative extends AbstractProduction {\n public ignoreAmbiguities: boolean = false\n\n constructor(options: {\n definition: IProduction[]\n ignoreAmbiguities?: boolean\n }) {\n super(options.definition)\n assign(\n this,\n pick(options, (v) => v !== undefined)\n )\n }\n}\n\nexport class Option\n extends AbstractProduction\n implements IProductionWithOccurrence {\n public idx: number = 1\n public maxLookahead?: number\n\n constructor(options: {\n definition: IProduction[]\n idx?: number\n maxLookahead?: number\n }) {\n super(options.definition)\n assign(\n this,\n pick(options, (v) => v !== undefined)\n )\n }\n}\n\nexport class RepetitionMandatory\n extends AbstractProduction\n implements IProductionWithOccurrence {\n public idx: number = 1\n public maxLookahead?: number\n\n constructor(options: {\n definition: IProduction[]\n idx?: number\n maxLookahead?: number\n }) {\n super(options.definition)\n assign(\n this,\n pick(options, (v) => v !== undefined)\n )\n }\n}\n\nexport class RepetitionMandatoryWithSeparator\n extends AbstractProduction\n implements IProductionWithOccurrence {\n public separator: TokenType\n public idx: number = 1\n\n constructor(options: {\n definition: IProduction[]\n separator: TokenType\n idx?: number\n }) {\n super(options.definition)\n assign(\n this,\n pick(options, (v) => v !== undefined)\n )\n }\n}\n\nexport class Repetition\n extends AbstractProduction\n implements IProductionWithOccurrence {\n public separator: TokenType\n public idx: number = 1\n public maxLookahead?: number\n\n constructor(options: {\n definition: IProduction[]\n idx?: number\n maxLookahead?: number\n }) {\n super(options.definition)\n assign(\n this,\n pick(options, (v) => v !== undefined)\n )\n }\n}\n\nexport class RepetitionWithSeparator\n extends AbstractProduction\n implements IProductionWithOccurrence {\n public separator: TokenType\n public idx: number = 1\n\n constructor(options: {\n definition: IProduction[]\n separator: TokenType\n idx?: number\n }) {\n super(options.definition)\n assign(\n this,\n pick(options, (v) => v !== undefined)\n )\n }\n}\n\nexport class Alternation\n extends AbstractProduction\n implements IProductionWithOccurrence {\n public idx: number = 1\n public ignoreAmbiguities: boolean = false\n public hasPredicates: boolean = false\n public maxLookahead?: number\n\n public get definition(): Alternative[] {\n return this._definition\n }\n public set definition(value: Alternative[]) {\n this._definition = value\n }\n\n constructor(options: {\n definition: Alternative[]\n idx?: number\n ignoreAmbiguities?: boolean\n hasPredicates?: boolean\n maxLookahead?: number\n }) {\n super(options.definition)\n assign(\n this,\n pick(options, (v) => v !== undefined)\n )\n }\n}\n\nexport class Terminal implements IProductionWithOccurrence {\n public terminalType: TokenType\n public idx: number = 1\n\n constructor(options: { terminalType: TokenType; idx?: number }) {\n assign(\n this,\n pick(options, (v) => v !== undefined)\n )\n }\n\n accept(visitor: IGASTVisitor): void {\n visitor.visit(this)\n }\n}\n\nexport interface ISerializedBasic extends ISerializedGast {\n type:\n | \"Alternative\"\n | \"Option\"\n | \"RepetitionMandatory\"\n | \"Repetition\"\n | \"Alternation\"\n idx?: number\n}\n\nexport interface ISerializedGastRule extends ISerializedGast {\n type: \"Rule\"\n name: string\n orgText: string\n}\n\nexport interface ISerializedNonTerminal extends ISerializedGast {\n type: \"NonTerminal\"\n name: string\n idx: number\n}\n\nexport interface ISerializedTerminal extends ISerializedGast {\n type: \"Terminal\"\n name: string\n label?: string\n pattern?: string\n idx: number\n}\n\nexport interface ISerializedTerminalWithSeparator extends ISerializedGast {\n type: \"RepetitionMandatoryWithSeparator\" | \"RepetitionWithSeparator\"\n idx: number\n separator: ISerializedTerminal\n}\n\nexport type ISerializedGastAny =\n | ISerializedBasic\n | ISerializedGastRule\n | ISerializedNonTerminal\n | ISerializedTerminal\n | ISerializedTerminalWithSeparator\n\nexport function serializeGrammar(topRules: Rule[]): ISerializedGast[] {\n return map(topRules, serializeProduction)\n}\n\nexport function serializeProduction(node: IProduction): ISerializedGast {\n function convertDefinition(definition: IProduction[]): ISerializedGast[] {\n return map(definition, serializeProduction)\n }\n /* istanbul ignore else */\n if (node instanceof NonTerminal) {\n return {\n type: \"NonTerminal\",\n name: node.nonTerminalName,\n idx: node.idx\n }\n } else if (node instanceof Alternative) {\n return {\n type: \"Alternative\",\n definition: convertDefinition(node.definition)\n }\n } else if (node instanceof Option) {\n return {\n type: \"Option\",\n idx: node.idx,\n definition: convertDefinition(node.definition)\n }\n } else if (node instanceof RepetitionMandatory) {\n return {\n type: \"RepetitionMandatory\",\n idx: node.idx,\n definition: convertDefinition(node.definition)\n }\n } else if (node instanceof RepetitionMandatoryWithSeparator) {\n return {\n type: \"RepetitionMandatoryWithSeparator\",\n idx: node.idx,\n separator: (\n serializeProduction(new Terminal({ terminalType: node.separator }))\n ),\n definition: convertDefinition(node.definition)\n }\n } else if (node instanceof RepetitionWithSeparator) {\n return {\n type: \"RepetitionWithSeparator\",\n idx: node.idx,\n separator: (\n serializeProduction(new Terminal({ terminalType: node.separator }))\n ),\n definition: convertDefinition(node.definition)\n }\n } else if (node instanceof Repetition) {\n return {\n type: \"Repetition\",\n idx: node.idx,\n definition: convertDefinition(node.definition)\n }\n } else if (node instanceof Alternation) {\n return {\n type: \"Alternation\",\n idx: node.idx,\n definition: convertDefinition(node.definition)\n }\n } else if (node instanceof Terminal) {\n let serializedTerminal = {\n type: \"Terminal\",\n name: node.terminalType.name,\n label: tokenLabel(node.terminalType),\n idx: node.idx\n }\n\n let pattern = node.terminalType.PATTERN\n if (node.terminalType.PATTERN) {\n serializedTerminal.pattern = isRegExp(pattern)\n ? (pattern).source\n : pattern\n }\n\n return serializedTerminal\n } else if (node instanceof Rule) {\n return {\n type: \"Rule\",\n name: node.name,\n orgText: node.orgText,\n definition: convertDefinition(node.definition)\n }\n } else {\n throw Error(\"non exhaustive match\")\n }\n}\n","import { drop, forEach } from \"../../utils/utils\"\nimport {\n AbstractProduction,\n Alternation,\n Alternative,\n NonTerminal,\n Option,\n Repetition,\n RepetitionMandatory,\n RepetitionMandatoryWithSeparator,\n RepetitionWithSeparator,\n Terminal\n} from \"./gast/gast_public\"\nimport { IProduction } from \"../../../api\"\n\n/**\n * A Grammar Walker that computes the \"remaining\" grammar \"after\" a productions in the grammar.\n */\nexport abstract class RestWalker {\n walk(prod: AbstractProduction, prevRest: any[] = []): void {\n forEach(prod.definition, (subProd: IProduction, index) => {\n let currRest = drop(prod.definition, index + 1)\n /* istanbul ignore else */\n if (subProd instanceof NonTerminal) {\n this.walkProdRef(subProd, currRest, prevRest)\n } else if (subProd instanceof Terminal) {\n this.walkTerminal(subProd, currRest, prevRest)\n } else if (subProd instanceof Alternative) {\n this.walkFlat(subProd, currRest, prevRest)\n } else if (subProd instanceof Option) {\n this.walkOption(subProd, currRest, prevRest)\n } else if (subProd instanceof RepetitionMandatory) {\n this.walkAtLeastOne(subProd, currRest, prevRest)\n } else if (subProd instanceof RepetitionMandatoryWithSeparator) {\n this.walkAtLeastOneSep(subProd, currRest, prevRest)\n } else if (subProd instanceof RepetitionWithSeparator) {\n this.walkManySep(subProd, currRest, prevRest)\n } else if (subProd instanceof Repetition) {\n this.walkMany(subProd, currRest, prevRest)\n } else if (subProd instanceof Alternation) {\n this.walkOr(subProd, currRest, prevRest)\n } else {\n throw Error(\"non exhaustive match\")\n }\n })\n }\n\n walkTerminal(\n terminal: Terminal,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {}\n\n walkProdRef(\n refProd: NonTerminal,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {}\n\n walkFlat(\n flatProd: Alternative,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {\n // ABCDEF => after the D the rest is EF\n let fullOrRest = currRest.concat(prevRest)\n this.walk(flatProd, fullOrRest)\n }\n\n walkOption(\n optionProd: Option,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {\n // ABC(DE)?F => after the (DE)? the rest is F\n let fullOrRest = currRest.concat(prevRest)\n this.walk(optionProd, fullOrRest)\n }\n\n walkAtLeastOne(\n atLeastOneProd: RepetitionMandatory,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {\n // ABC(DE)+F => after the (DE)+ the rest is (DE)?F\n let fullAtLeastOneRest: IProduction[] = [\n new Option({ definition: atLeastOneProd.definition })\n ].concat(currRest, prevRest)\n this.walk(atLeastOneProd, fullAtLeastOneRest)\n }\n\n walkAtLeastOneSep(\n atLeastOneSepProd: RepetitionMandatoryWithSeparator,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {\n // ABC DE(,DE)* F => after the (,DE)+ the rest is (,DE)?F\n let fullAtLeastOneSepRest = restForRepetitionWithSeparator(\n atLeastOneSepProd,\n currRest,\n prevRest\n )\n this.walk(atLeastOneSepProd, fullAtLeastOneSepRest)\n }\n\n walkMany(\n manyProd: Repetition,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {\n // ABC(DE)*F => after the (DE)* the rest is (DE)?F\n let fullManyRest: IProduction[] = [\n new Option({ definition: manyProd.definition })\n ].concat(currRest, prevRest)\n this.walk(manyProd, fullManyRest)\n }\n\n walkManySep(\n manySepProd: RepetitionWithSeparator,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {\n // ABC (DE(,DE)*)? F => after the (,DE)* the rest is (,DE)?F\n let fullManySepRest = restForRepetitionWithSeparator(\n manySepProd,\n currRest,\n prevRest\n )\n this.walk(manySepProd, fullManySepRest)\n }\n\n walkOr(\n orProd: Alternation,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {\n // ABC(D|E|F)G => when finding the (D|E|F) the rest is G\n let fullOrRest = currRest.concat(prevRest)\n // walk all different alternatives\n forEach(orProd.definition, (alt) => {\n // wrapping each alternative in a single definition wrapper\n // to avoid errors in computing the rest of that alternative in the invocation to computeInProdFollows\n // (otherwise for OR([alt1,alt2]) alt2 will be considered in 'rest' of alt1\n let prodWrapper = new Alternative({ definition: [alt] })\n this.walk(prodWrapper, fullOrRest)\n })\n }\n}\n\nfunction restForRepetitionWithSeparator(repSepProd, currRest, prevRest) {\n let repSepRest = [\n new Option({\n definition: [new Terminal({ terminalType: repSepProd.separator })].concat(\n repSepProd.definition\n )\n })\n ]\n let fullRepSepRest: IProduction[] = repSepRest.concat(\n currRest,\n prevRest\n )\n return fullRepSepRest\n}\n","import {\n Alternation,\n Alternative,\n NonTerminal,\n Option,\n Repetition,\n RepetitionMandatory,\n RepetitionMandatoryWithSeparator,\n RepetitionWithSeparator,\n Rule,\n Terminal\n} from \"./gast_public\"\nimport { IProduction } from \"../../../../api\"\n\nexport abstract class GAstVisitor {\n public visit(node: IProduction): any {\n const nodeAny: any = node\n switch (nodeAny.constructor) {\n case NonTerminal:\n return this.visitNonTerminal(nodeAny)\n case Alternative:\n return this.visitAlternative(nodeAny)\n case Option:\n return this.visitOption(nodeAny)\n case RepetitionMandatory:\n return this.visitRepetitionMandatory(nodeAny)\n case RepetitionMandatoryWithSeparator:\n return this.visitRepetitionMandatoryWithSeparator(nodeAny)\n case RepetitionWithSeparator:\n return this.visitRepetitionWithSeparator(nodeAny)\n case Repetition:\n return this.visitRepetition(nodeAny)\n case Alternation:\n return this.visitAlternation(nodeAny)\n case Terminal:\n return this.visitTerminal(nodeAny)\n case Rule:\n return this.visitRule(nodeAny)\n /* istanbul ignore next */\n default:\n throw Error(\"non exhaustive match\")\n }\n }\n\n public visitNonTerminal(node: NonTerminal): any {}\n\n public visitAlternative(node: Alternative): any {}\n\n public visitOption(node: Option): any {}\n\n public visitRepetition(node: Repetition): any {}\n\n public visitRepetitionMandatory(node: RepetitionMandatory): any {}\n\n public visitRepetitionMandatoryWithSeparator(\n node: RepetitionMandatoryWithSeparator\n ): any {}\n\n public visitRepetitionWithSeparator(node: RepetitionWithSeparator): any {}\n\n public visitAlternation(node: Alternation): any {}\n\n public visitTerminal(node: Terminal): any {}\n\n public visitRule(node: Rule): any {}\n}\n","import { contains, every, has, some } from \"../../../utils/utils\"\nimport {\n AbstractProduction,\n Alternation,\n Alternative,\n NonTerminal,\n Option,\n Repetition,\n RepetitionMandatory,\n RepetitionMandatoryWithSeparator,\n RepetitionWithSeparator,\n Rule,\n Terminal\n} from \"./gast_public\"\nimport { GAstVisitor } from \"./gast_visitor_public\"\nimport { IProduction, IProductionWithOccurrence } from \"../../../../api\"\n\nexport function isSequenceProd(prod: IProduction): boolean {\n return (\n prod instanceof Alternative ||\n prod instanceof Option ||\n prod instanceof Repetition ||\n prod instanceof RepetitionMandatory ||\n prod instanceof RepetitionMandatoryWithSeparator ||\n prod instanceof RepetitionWithSeparator ||\n prod instanceof Terminal ||\n prod instanceof Rule\n )\n}\n\nexport function isOptionalProd(\n prod: IProduction,\n alreadyVisited: NonTerminal[] = []\n): boolean {\n let isDirectlyOptional =\n prod instanceof Option ||\n prod instanceof Repetition ||\n prod instanceof RepetitionWithSeparator\n if (isDirectlyOptional) {\n return true\n }\n\n // note that this can cause infinite loop if one optional empty TOP production has a cyclic dependency with another\n // empty optional top rule\n // may be indirectly optional ((A?B?C?) | (D?E?F?))\n if (prod instanceof Alternation) {\n // for OR its enough for just one of the alternatives to be optional\n return some((prod).definition, (subProd: IProduction) => {\n return isOptionalProd(subProd, alreadyVisited)\n })\n } else if (prod instanceof NonTerminal && contains(alreadyVisited, prod)) {\n // avoiding stack overflow due to infinite recursion\n return false\n } else if (prod instanceof AbstractProduction) {\n if (prod instanceof NonTerminal) {\n alreadyVisited.push(prod)\n }\n return every(\n (prod).definition,\n (subProd: IProduction) => {\n return isOptionalProd(subProd, alreadyVisited)\n }\n )\n } else {\n return false\n }\n}\n\nexport function isBranchingProd(prod: IProduction): boolean {\n return prod instanceof Alternation\n}\n\nexport function getProductionDslName(prod: IProductionWithOccurrence): string {\n /* istanbul ignore else */\n if (prod instanceof NonTerminal) {\n return \"SUBRULE\"\n } else if (prod instanceof Option) {\n return \"OPTION\"\n } else if (prod instanceof Alternation) {\n return \"OR\"\n } else if (prod instanceof RepetitionMandatory) {\n return \"AT_LEAST_ONE\"\n } else if (prod instanceof RepetitionMandatoryWithSeparator) {\n return \"AT_LEAST_ONE_SEP\"\n } else if (prod instanceof RepetitionWithSeparator) {\n return \"MANY_SEP\"\n } else if (prod instanceof Repetition) {\n return \"MANY\"\n } else if (prod instanceof Terminal) {\n return \"CONSUME\"\n } else {\n throw Error(\"non exhaustive match\")\n }\n}\n\nexport class DslMethodsCollectorVisitor extends GAstVisitor {\n // A minus is never valid in an identifier name\n public separator = \"-\"\n public dslMethods = {\n option: [],\n alternation: [],\n repetition: [],\n repetitionWithSeparator: [],\n repetitionMandatory: [],\n repetitionMandatoryWithSeparator: []\n }\n\n reset() {\n this.dslMethods = {\n option: [],\n alternation: [],\n repetition: [],\n repetitionWithSeparator: [],\n repetitionMandatory: [],\n repetitionMandatoryWithSeparator: []\n }\n }\n\n public visitTerminal(terminal: Terminal): void {\n const key = terminal.terminalType.name + this.separator + \"Terminal\"\n if (!has(this.dslMethods, key)) {\n this.dslMethods[key] = []\n }\n this.dslMethods[key].push(terminal)\n }\n\n public visitNonTerminal(subrule: NonTerminal): void {\n const key = subrule.nonTerminalName + this.separator + \"Terminal\"\n if (!has(this.dslMethods, key)) {\n this.dslMethods[key] = []\n }\n this.dslMethods[key].push(subrule)\n }\n\n public visitOption(option: Option): void {\n this.dslMethods.option.push(option)\n }\n\n public visitRepetitionWithSeparator(manySep: RepetitionWithSeparator): void {\n this.dslMethods.repetitionWithSeparator.push(manySep)\n }\n\n public visitRepetitionMandatory(atLeastOne: RepetitionMandatory): void {\n this.dslMethods.repetitionMandatory.push(atLeastOne)\n }\n\n public visitRepetitionMandatoryWithSeparator(\n atLeastOneSep: RepetitionMandatoryWithSeparator\n ): void {\n this.dslMethods.repetitionMandatoryWithSeparator.push(atLeastOneSep)\n }\n\n public visitRepetition(many: Repetition): void {\n this.dslMethods.repetition.push(many)\n }\n\n public visitAlternation(or: Alternation): void {\n this.dslMethods.alternation.push(or)\n }\n}\n\nconst collectorVisitor = new DslMethodsCollectorVisitor()\nexport function collectMethods(\n rule: Rule\n): {\n option: Option[]\n alternation: Alternation[]\n repetition: Repetition[]\n repetitionWithSeparator: RepetitionWithSeparator[]\n repetitionMandatory: RepetitionMandatory[]\n repetitionMandatoryWithSeparator: RepetitionMandatoryWithSeparator\n} {\n collectorVisitor.reset()\n rule.accept(collectorVisitor)\n const dslMethods = collectorVisitor.dslMethods\n // avoid uncleaned references\n collectorVisitor.reset()\n return dslMethods\n}\n","import { uniq, map, flatten } from \"../../utils/utils\"\nimport { AbstractProduction, NonTerminal, Terminal } from \"./gast/gast_public\"\nimport { isBranchingProd, isOptionalProd, isSequenceProd } from \"./gast/gast\"\nimport { IProduction, TokenType } from \"../../../api\"\n\nexport function first(prod: IProduction): TokenType[] {\n /* istanbul ignore else */\n if (prod instanceof NonTerminal) {\n // this could in theory cause infinite loops if\n // (1) prod A refs prod B.\n // (2) prod B refs prod A\n // (3) AB can match the empty set\n // in other words a cycle where everything is optional so the first will keep\n // looking ahead for the next optional part and will never exit\n // currently there is no safeguard for this unique edge case because\n // (1) not sure a grammar in which this can happen is useful for anything (productive)\n return first((prod).referencedRule)\n } else if (prod instanceof Terminal) {\n return firstForTerminal(prod)\n } else if (isSequenceProd(prod)) {\n return firstForSequence(prod)\n } else if (isBranchingProd(prod)) {\n return firstForBranching(prod)\n } else {\n throw Error(\"non exhaustive match\")\n }\n}\n\nexport function firstForSequence(prod: AbstractProduction): TokenType[] {\n let firstSet: TokenType[] = []\n let seq = prod.definition\n let nextSubProdIdx = 0\n let hasInnerProdsRemaining = seq.length > nextSubProdIdx\n let currSubProd\n // so we enter the loop at least once (if the definition is not empty\n let isLastInnerProdOptional = true\n // scan a sequence until it's end or until we have found a NONE optional production in it\n while (hasInnerProdsRemaining && isLastInnerProdOptional) {\n currSubProd = seq[nextSubProdIdx]\n isLastInnerProdOptional = isOptionalProd(currSubProd)\n firstSet = firstSet.concat(first(currSubProd))\n nextSubProdIdx = nextSubProdIdx + 1\n hasInnerProdsRemaining = seq.length > nextSubProdIdx\n }\n\n return uniq(firstSet)\n}\n\nexport function firstForBranching(prod: AbstractProduction): TokenType[] {\n let allAlternativesFirsts: TokenType[][] = map(\n prod.definition,\n (innerProd) => {\n return first(innerProd)\n }\n )\n return uniq(flatten(allAlternativesFirsts))\n}\n\nexport function firstForTerminal(terminal: Terminal): TokenType[] {\n return [terminal.terminalType]\n}\n","// TODO: can this be removed? where is it used?\nexport let IN = \"_~IN~_\"\n","import { RestWalker } from \"./rest\"\nimport { first } from \"./first\"\nimport { assign, forEach } from \"../../utils/utils\"\nimport { IN } from \"../constants\"\nimport { Alternative, NonTerminal, Rule, Terminal } from \"./gast/gast_public\"\nimport { IProduction, TokenType } from \"../../../api\"\n\n// This ResyncFollowsWalker computes all of the follows required for RESYNC\n// (skipping reference production).\nexport class ResyncFollowsWalker extends RestWalker {\n public follows = {}\n\n constructor(private topProd: Rule) {\n super()\n }\n\n startWalking(): Record {\n this.walk(this.topProd)\n return this.follows\n }\n\n walkTerminal(\n terminal: Terminal,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {\n // do nothing! just like in the public sector after 13:00\n }\n\n walkProdRef(\n refProd: NonTerminal,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {\n let followName =\n buildBetweenProdsFollowPrefix(refProd.referencedRule, refProd.idx) +\n this.topProd.name\n let fullRest: IProduction[] = currRest.concat(prevRest)\n let restProd = new Alternative({ definition: fullRest })\n let t_in_topProd_follows = first(restProd)\n this.follows[followName] = t_in_topProd_follows\n }\n}\n\nexport function computeAllProdsFollows(\n topProductions: Rule[]\n): Record {\n let reSyncFollows = {}\n\n forEach(topProductions, (topProd) => {\n let currRefsFollow = new ResyncFollowsWalker(topProd).startWalking()\n assign(reSyncFollows, currRefsFollow)\n })\n return reSyncFollows\n}\n\nexport function buildBetweenProdsFollowPrefix(\n inner: Rule,\n occurenceInParent: number\n): string {\n return inner.name + occurenceInParent + IN\n}\n\nexport function buildInProdFollowPrefix(terminal: Terminal): string {\n let terminalName = terminal.terminalType.name\n return terminalName + terminal.idx + IN\n}\n","import { hasTokenLabel, tokenLabel } from \"../scan/tokens_public\"\nimport * as utils from \"../utils/utils\"\nimport { first, map, reduce } from \"../utils/utils\"\nimport {\n Alternation,\n NonTerminal,\n Rule,\n Terminal\n} from \"./grammar/gast/gast_public\"\nimport { getProductionDslName } from \"./grammar/gast/gast\"\nimport {\n IGrammarResolverErrorMessageProvider,\n IGrammarValidatorErrorMessageProvider,\n IParserErrorMessageProvider,\n IProductionWithOccurrence,\n TokenType\n} from \"../../api\"\n\nexport const defaultParserErrorProvider: IParserErrorMessageProvider = {\n buildMismatchTokenMessage({ expected, actual, previous, ruleName }): string {\n let hasLabel = hasTokenLabel(expected)\n let expectedMsg = hasLabel\n ? `--> ${tokenLabel(expected)} <--`\n : `token of type --> ${expected.name} <--`\n\n let msg = `Expecting ${expectedMsg} but found --> '${actual.image}' <--`\n\n return msg\n },\n\n buildNotAllInputParsedMessage({ firstRedundant, ruleName }): string {\n return \"Redundant input, expecting EOF but found: \" + firstRedundant.image\n },\n\n buildNoViableAltMessage({\n expectedPathsPerAlt,\n actual,\n previous,\n customUserDescription,\n ruleName\n }): string {\n let errPrefix = \"Expecting: \"\n // TODO: issue: No Viable Alternative Error may have incomplete details. #502\n let actualText = first(actual).image\n let errSuffix = \"\\nbut found: '\" + actualText + \"'\"\n\n if (customUserDescription) {\n return errPrefix + customUserDescription + errSuffix\n } else {\n let allLookAheadPaths = reduce(\n expectedPathsPerAlt,\n (result, currAltPaths) => result.concat(currAltPaths),\n []\n )\n let nextValidTokenSequences = map(\n allLookAheadPaths,\n (currPath) =>\n `[${map(currPath, (currTokenType) => tokenLabel(currTokenType)).join(\n \", \"\n )}]`\n )\n let nextValidSequenceItems = map(\n nextValidTokenSequences,\n (itemMsg, idx) => ` ${idx + 1}. ${itemMsg}`\n )\n let calculatedDescription = `one of these possible Token sequences:\\n${nextValidSequenceItems.join(\n \"\\n\"\n )}`\n\n return errPrefix + calculatedDescription + errSuffix\n }\n },\n\n buildEarlyExitMessage({\n expectedIterationPaths,\n actual,\n customUserDescription,\n ruleName\n }): string {\n let errPrefix = \"Expecting: \"\n // TODO: issue: No Viable Alternative Error may have incomplete details. #502\n let actualText = first(actual).image\n let errSuffix = \"\\nbut found: '\" + actualText + \"'\"\n\n if (customUserDescription) {\n return errPrefix + customUserDescription + errSuffix\n } else {\n let nextValidTokenSequences = map(\n expectedIterationPaths,\n (currPath) =>\n `[${map(currPath, (currTokenType) => tokenLabel(currTokenType)).join(\n \",\"\n )}]`\n )\n let calculatedDescription =\n `expecting at least one iteration which starts with one of these possible Token sequences::\\n ` +\n `<${nextValidTokenSequences.join(\" ,\")}>`\n\n return errPrefix + calculatedDescription + errSuffix\n }\n }\n}\n\nObject.freeze(defaultParserErrorProvider)\n\nexport const defaultGrammarResolverErrorProvider: IGrammarResolverErrorMessageProvider = {\n buildRuleNotFoundError(\n topLevelRule: Rule,\n undefinedRule: NonTerminal\n ): string {\n const msg =\n \"Invalid grammar, reference to a rule which is not defined: ->\" +\n undefinedRule.nonTerminalName +\n \"<-\\n\" +\n \"inside top level rule: ->\" +\n topLevelRule.name +\n \"<-\"\n return msg\n }\n}\n\nexport const defaultGrammarValidatorErrorProvider: IGrammarValidatorErrorMessageProvider = {\n buildDuplicateFoundError(\n topLevelRule: Rule,\n duplicateProds: IProductionWithOccurrence[]\n ): string {\n function getExtraProductionArgument(\n prod: IProductionWithOccurrence\n ): string {\n if (prod instanceof Terminal) {\n return prod.terminalType.name\n } else if (prod instanceof NonTerminal) {\n return prod.nonTerminalName\n } else {\n return \"\"\n }\n }\n\n const topLevelName = topLevelRule.name\n const duplicateProd = first(duplicateProds)\n const index = duplicateProd.idx\n const dslName = getProductionDslName(duplicateProd)\n let extraArgument = getExtraProductionArgument(duplicateProd)\n\n const hasExplicitIndex = index > 0\n let msg = `->${dslName}${hasExplicitIndex ? index : \"\"}<- ${\n extraArgument ? `with argument: ->${extraArgument}<-` : \"\"\n }\n appears more than once (${\n duplicateProds.length\n } times) in the top level rule: ->${topLevelName}<-. \n For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES \n `\n\n // white space trimming time! better to trim afterwards as it allows to use WELL formatted multi line template strings...\n msg = msg.replace(/[ \\t]+/g, \" \")\n msg = msg.replace(/\\s\\s+/g, \"\\n\")\n\n return msg\n },\n\n buildNamespaceConflictError(rule: Rule): string {\n const errMsg =\n `Namespace conflict found in grammar.\\n` +\n `The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <${rule.name}>.\\n` +\n `To resolve this make sure each Terminal and Non-Terminal names are unique\\n` +\n `This is easy to accomplish by using the convention that Terminal names start with an uppercase letter\\n` +\n `and Non-Terminal names start with a lower case letter.`\n\n return errMsg\n },\n\n buildAlternationPrefixAmbiguityError(options: {\n topLevelRule: Rule\n prefixPath: TokenType[]\n ambiguityIndices: number[]\n alternation: Alternation\n }): string {\n const pathMsg = map(options.prefixPath, (currTok) =>\n tokenLabel(currTok)\n ).join(\", \")\n const occurrence =\n options.alternation.idx === 0 ? \"\" : options.alternation.idx\n const errMsg =\n `Ambiguous alternatives: <${options.ambiguityIndices.join(\n \" ,\"\n )}> due to common lookahead prefix\\n` +\n `in inside <${options.topLevelRule.name}> Rule,\\n` +\n `<${pathMsg}> may appears as a prefix path in all these alternatives.\\n` +\n `See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX\\n` +\n `For Further details.`\n\n return errMsg\n },\n\n buildAlternationAmbiguityError(options: {\n topLevelRule: Rule\n prefixPath: TokenType[]\n ambiguityIndices: number[]\n alternation: Alternation\n }): string {\n let pathMsg = map(options.prefixPath, (currtok) =>\n tokenLabel(currtok)\n ).join(\", \")\n let occurrence =\n options.alternation.idx === 0 ? \"\" : options.alternation.idx\n let currMessage =\n `Ambiguous Alternatives Detected: <${options.ambiguityIndices.join(\n \" ,\"\n )}> in ` +\n ` inside <${options.topLevelRule.name}> Rule,\\n` +\n `<${pathMsg}> may appears as a prefix path in all these alternatives.\\n`\n\n currMessage =\n currMessage +\n `See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES\\n` +\n `For Further details.`\n return currMessage\n },\n\n buildEmptyRepetitionError(options: {\n topLevelRule: Rule\n repetition: IProductionWithOccurrence\n }): string {\n let dslName = getProductionDslName(options.repetition)\n if (options.repetition.idx !== 0) {\n dslName += options.repetition.idx\n }\n\n const errMsg =\n `The repetition <${dslName}> within Rule <${options.topLevelRule.name}> can never consume any tokens.\\n` +\n `This could lead to an infinite loop.`\n\n return errMsg\n },\n\n // TODO: remove - `errors_public` from nyc.config.js exclude\n // once this method is fully removed from this file\n buildTokenNameError(options: {\n tokenType: TokenType\n expectedPattern: RegExp\n }): string {\n /* istanbul ignore next */\n return \"deprecated\"\n },\n\n buildEmptyAlternationError(options: {\n topLevelRule: Rule\n alternation: Alternation\n emptyChoiceIdx: number\n }): string {\n const errMsg =\n `Ambiguous empty alternative: <${options.emptyChoiceIdx + 1}>` +\n ` in inside <${options.topLevelRule.name}> Rule.\\n` +\n `Only the last alternative may be an empty alternative.`\n\n return errMsg\n },\n\n buildTooManyAlternativesError(options: {\n topLevelRule: Rule\n alternation: Alternation\n }): string {\n const errMsg =\n `An Alternation cannot have more than 256 alternatives:\\n` +\n ` inside <${\n options.topLevelRule.name\n }> Rule.\\n has ${options.alternation.definition.length + 1} alternatives.`\n\n return errMsg\n },\n\n buildLeftRecursionError(options: {\n topLevelRule: Rule\n leftRecursionPath: Rule[]\n }): string {\n const ruleName = options.topLevelRule.name\n let pathNames = utils.map(\n options.leftRecursionPath,\n (currRule) => currRule.name\n )\n let leftRecursivePath = `${ruleName} --> ${pathNames\n .concat([ruleName])\n .join(\" --> \")}`\n let errMsg =\n `Left Recursion found in grammar.\\n` +\n `rule: <${ruleName}> can be invoked from itself (directly or indirectly)\\n` +\n `without consuming any Tokens. The grammar path that causes this is: \\n ${leftRecursivePath}\\n` +\n ` To fix this refactor your grammar to remove the left recursion.\\n` +\n `see: https://en.wikipedia.org/wiki/LL_parser#Left_Factoring.`\n\n return errMsg\n },\n\n // TODO: remove - `errors_public` from nyc.config.js exclude\n // once this method is fully removed from this file\n buildInvalidRuleNameError(options: {\n topLevelRule: Rule\n expectedPattern: RegExp\n }): string {\n /* istanbul ignore next */\n return \"deprecated\"\n },\n\n buildDuplicateRuleNameError(options: {\n topLevelRule: Rule | string\n grammarName: string\n }): string {\n let ruleName\n if (options.topLevelRule instanceof Rule) {\n ruleName = options.topLevelRule.name\n } else {\n ruleName = options.topLevelRule\n }\n\n const errMsg = `Duplicate definition, rule: ->${ruleName}<- is already defined in the grammar: ->${options.grammarName}<-`\n\n return errMsg\n }\n}\n","import {\n IParserUnresolvedRefDefinitionError,\n ParserDefinitionErrorType\n} from \"../parser/parser\"\nimport { forEach, values } from \"../../utils/utils\"\nimport { NonTerminal, Rule } from \"./gast/gast_public\"\nimport { GAstVisitor } from \"./gast/gast_visitor_public\"\nimport {\n IGrammarResolverErrorMessageProvider,\n IParserDefinitionError\n} from \"../../../api\"\n\nexport function resolveGrammar(\n topLevels: Record,\n errMsgProvider: IGrammarResolverErrorMessageProvider\n): IParserDefinitionError[] {\n let refResolver = new GastRefResolverVisitor(topLevels, errMsgProvider)\n refResolver.resolveRefs()\n return refResolver.errors\n}\n\nexport class GastRefResolverVisitor extends GAstVisitor {\n public errors: IParserUnresolvedRefDefinitionError[] = []\n private currTopLevel: Rule\n\n constructor(\n private nameToTopRule: Record,\n private errMsgProvider: IGrammarResolverErrorMessageProvider\n ) {\n super()\n }\n\n public resolveRefs(): void {\n forEach(values(this.nameToTopRule), (prod) => {\n this.currTopLevel = prod\n prod.accept(this)\n })\n }\n\n public visitNonTerminal(node: NonTerminal): void {\n let ref = this.nameToTopRule[node.nonTerminalName]\n\n if (!ref) {\n let msg = this.errMsgProvider.buildRuleNotFoundError(\n this.currTopLevel,\n node\n )\n this.errors.push({\n message: msg,\n type: ParserDefinitionErrorType.UNRESOLVED_SUBRULE_REF,\n ruleName: this.currTopLevel.name,\n unresolvedRefName: node.nonTerminalName\n })\n } else {\n node.referencedRule = ref\n }\n }\n}\n","import { RestWalker } from \"./rest\"\nimport {\n cloneArr,\n drop,\n dropRight,\n first as _first,\n forEach,\n isEmpty,\n last\n} from \"../../utils/utils\"\nimport { first } from \"./first\"\nimport { TokenMatcher } from \"../parser/parser\"\nimport {\n AbstractProduction,\n Alternation,\n Alternative,\n NonTerminal,\n Option,\n Repetition,\n RepetitionMandatory,\n RepetitionMandatoryWithSeparator,\n RepetitionWithSeparator,\n Rule,\n Terminal\n} from \"./gast/gast_public\"\nimport {\n IGrammarPath,\n IProduction,\n ISyntacticContentAssistPath,\n IToken,\n ITokenGrammarPath,\n TokenType\n} from \"../../../api\"\n\nexport abstract class AbstractNextPossibleTokensWalker extends RestWalker {\n protected possibleTokTypes: TokenType[] = []\n protected ruleStack: string[]\n protected occurrenceStack: number[]\n\n protected nextProductionName = \"\"\n protected nextProductionOccurrence = 0\n protected found = false\n protected isAtEndOfPath = false\n\n constructor(protected topProd: Rule, protected path: IGrammarPath) {\n super()\n }\n\n startWalking(): TokenType[] {\n this.found = false\n\n if (this.path.ruleStack[0] !== this.topProd.name) {\n throw Error(\"The path does not start with the walker's top Rule!\")\n }\n\n // immutable for the win\n this.ruleStack = cloneArr(this.path.ruleStack).reverse() // intelij bug requires assertion\n this.occurrenceStack = cloneArr(this.path.occurrenceStack).reverse() // intelij bug requires assertion\n\n // already verified that the first production is valid, we now seek the 2nd production\n this.ruleStack.pop()\n this.occurrenceStack.pop()\n\n this.updateExpectedNext()\n this.walk(this.topProd)\n\n return this.possibleTokTypes\n }\n\n walk(prod: AbstractProduction, prevRest: IProduction[] = []): void {\n // stop scanning once we found the path\n if (!this.found) {\n super.walk(prod, prevRest)\n }\n }\n\n walkProdRef(\n refProd: NonTerminal,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {\n // found the next production, need to keep walking in it\n if (\n refProd.referencedRule.name === this.nextProductionName &&\n refProd.idx === this.nextProductionOccurrence\n ) {\n let fullRest = currRest.concat(prevRest)\n this.updateExpectedNext()\n this.walk(refProd.referencedRule, fullRest)\n }\n }\n\n updateExpectedNext(): void {\n // need to consume the Terminal\n if (isEmpty(this.ruleStack)) {\n // must reset nextProductionXXX to avoid walking down another Top Level production while what we are\n // really seeking is the last Terminal...\n this.nextProductionName = \"\"\n this.nextProductionOccurrence = 0\n this.isAtEndOfPath = true\n } else {\n this.nextProductionName = this.ruleStack.pop()\n this.nextProductionOccurrence = this.occurrenceStack.pop()\n }\n }\n}\n\nexport class NextAfterTokenWalker extends AbstractNextPossibleTokensWalker {\n private nextTerminalName = \"\"\n private nextTerminalOccurrence = 0\n\n constructor(topProd: Rule, protected path: ITokenGrammarPath) {\n super(topProd, path)\n this.nextTerminalName = this.path.lastTok.name\n this.nextTerminalOccurrence = this.path.lastTokOccurrence\n }\n\n walkTerminal(\n terminal: Terminal,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {\n if (\n this.isAtEndOfPath &&\n terminal.terminalType.name === this.nextTerminalName &&\n terminal.idx === this.nextTerminalOccurrence &&\n !this.found\n ) {\n let fullRest = currRest.concat(prevRest)\n let restProd = new Alternative({ definition: fullRest })\n this.possibleTokTypes = first(restProd)\n this.found = true\n }\n }\n}\n\nexport type AlternativesFirstTokens = TokenType[][]\n\nexport interface IFirstAfterRepetition {\n token: TokenType\n occurrence: number\n isEndOfRule: boolean\n}\n\n/**\n * This walker only \"walks\" a single \"TOP\" level in the Grammar Ast, this means\n * it never \"follows\" production refs\n */\nexport class AbstractNextTerminalAfterProductionWalker extends RestWalker {\n protected result = {\n token: undefined,\n occurrence: undefined,\n isEndOfRule: undefined\n }\n\n constructor(protected topRule: Rule, protected occurrence: number) {\n super()\n }\n\n startWalking(): IFirstAfterRepetition {\n this.walk(this.topRule)\n return this.result\n }\n}\n\nexport class NextTerminalAfterManyWalker extends AbstractNextTerminalAfterProductionWalker {\n walkMany(\n manyProd: Repetition,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {\n if (manyProd.idx === this.occurrence) {\n let firstAfterMany = _first(currRest.concat(prevRest))\n this.result.isEndOfRule = firstAfterMany === undefined\n if (firstAfterMany instanceof Terminal) {\n this.result.token = firstAfterMany.terminalType\n this.result.occurrence = firstAfterMany.idx\n }\n } else {\n super.walkMany(manyProd, currRest, prevRest)\n }\n }\n}\n\nexport class NextTerminalAfterManySepWalker extends AbstractNextTerminalAfterProductionWalker {\n walkManySep(\n manySepProd: RepetitionWithSeparator,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {\n if (manySepProd.idx === this.occurrence) {\n let firstAfterManySep = _first(currRest.concat(prevRest))\n this.result.isEndOfRule = firstAfterManySep === undefined\n if (firstAfterManySep instanceof Terminal) {\n this.result.token = firstAfterManySep.terminalType\n this.result.occurrence = firstAfterManySep.idx\n }\n } else {\n super.walkManySep(manySepProd, currRest, prevRest)\n }\n }\n}\n\nexport class NextTerminalAfterAtLeastOneWalker extends AbstractNextTerminalAfterProductionWalker {\n walkAtLeastOne(\n atLeastOneProd: RepetitionMandatory,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {\n if (atLeastOneProd.idx === this.occurrence) {\n let firstAfterAtLeastOne = _first(currRest.concat(prevRest))\n this.result.isEndOfRule = firstAfterAtLeastOne === undefined\n if (firstAfterAtLeastOne instanceof Terminal) {\n this.result.token = firstAfterAtLeastOne.terminalType\n this.result.occurrence = firstAfterAtLeastOne.idx\n }\n } else {\n super.walkAtLeastOne(atLeastOneProd, currRest, prevRest)\n }\n }\n}\n\n// TODO: reduce code duplication in the AfterWalkers\nexport class NextTerminalAfterAtLeastOneSepWalker extends AbstractNextTerminalAfterProductionWalker {\n walkAtLeastOneSep(\n atleastOneSepProd: RepetitionMandatoryWithSeparator,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {\n if (atleastOneSepProd.idx === this.occurrence) {\n let firstAfterfirstAfterAtLeastOneSep = _first(currRest.concat(prevRest))\n this.result.isEndOfRule = firstAfterfirstAfterAtLeastOneSep === undefined\n if (firstAfterfirstAfterAtLeastOneSep instanceof Terminal) {\n this.result.token = firstAfterfirstAfterAtLeastOneSep.terminalType\n this.result.occurrence = firstAfterfirstAfterAtLeastOneSep.idx\n }\n } else {\n super.walkAtLeastOneSep(atleastOneSepProd, currRest, prevRest)\n }\n }\n}\n\nexport interface PartialPathAndSuffixes {\n partialPath: TokenType[]\n suffixDef: IProduction[]\n}\n\nexport function possiblePathsFrom(\n targetDef: IProduction[],\n maxLength: number,\n currPath = []\n): PartialPathAndSuffixes[] {\n // avoid side effects\n currPath = cloneArr(currPath)\n let result = []\n let i = 0\n\n // TODO: avoid inner funcs\n function remainingPathWith(nextDef: IProduction[]) {\n return nextDef.concat(drop(targetDef, i + 1))\n }\n\n // TODO: avoid inner funcs\n function getAlternativesForProd(definition: IProduction[]) {\n let alternatives = possiblePathsFrom(\n remainingPathWith(definition),\n maxLength,\n currPath\n )\n return result.concat(alternatives)\n }\n\n /**\n * Mandatory productions will halt the loop as the paths computed from their recursive calls will already contain the\n * following (rest) of the targetDef.\n *\n * For optional productions (Option/Repetition/...) the loop will continue to represent the paths that do not include the\n * the optional production.\n */\n while (currPath.length < maxLength && i < targetDef.length) {\n let prod = targetDef[i]\n\n /* istanbul ignore else */\n if (prod instanceof Alternative) {\n return getAlternativesForProd(prod.definition)\n } else if (prod instanceof NonTerminal) {\n return getAlternativesForProd(prod.definition)\n } else if (prod instanceof Option) {\n result = getAlternativesForProd(prod.definition)\n } else if (prod instanceof RepetitionMandatory) {\n const newDef = prod.definition.concat([\n new Repetition({\n definition: prod.definition\n })\n ])\n return getAlternativesForProd(newDef)\n } else if (prod instanceof RepetitionMandatoryWithSeparator) {\n const newDef = [\n new Alternative({ definition: prod.definition }),\n new Repetition({\n definition: [new Terminal({ terminalType: prod.separator })].concat(\n prod.definition\n )\n })\n ]\n return getAlternativesForProd(newDef)\n } else if (prod instanceof RepetitionWithSeparator) {\n const newDef = prod.definition.concat([\n new Repetition({\n definition: [new Terminal({ terminalType: prod.separator })].concat(\n prod.definition\n )\n })\n ])\n result = getAlternativesForProd(newDef)\n } else if (prod instanceof Repetition) {\n const newDef = prod.definition.concat([\n new Repetition({\n definition: prod.definition\n })\n ])\n result = getAlternativesForProd(newDef)\n } else if (prod instanceof Alternation) {\n forEach(prod.definition, (currAlt) => {\n // TODO: this is a limited check for empty alternatives\n // It would prevent a common case of infinite loops during parser initialization.\n // However **in-directly** empty alternatives may still cause issues.\n if (isEmpty(currAlt.definition) === false) {\n result = getAlternativesForProd(currAlt.definition)\n }\n })\n return result\n } else if (prod instanceof Terminal) {\n currPath.push(prod.terminalType)\n } else {\n throw Error(\"non exhaustive match\")\n }\n\n i++\n }\n result.push({\n partialPath: currPath,\n suffixDef: drop(targetDef, i)\n })\n\n return result\n}\n\ninterface IPathToExamine {\n idx: number\n def: IProduction[]\n ruleStack: string[]\n occurrenceStack: number[]\n}\n\nexport function nextPossibleTokensAfter(\n initialDef: IProduction[],\n tokenVector: IToken[],\n tokMatcher: TokenMatcher,\n maxLookAhead: number\n): ISyntacticContentAssistPath[] {\n const EXIT_NON_TERMINAL: any = \"EXIT_NONE_TERMINAL\"\n // to avoid creating a new Array each time.\n const EXIT_NON_TERMINAL_ARR = [EXIT_NON_TERMINAL]\n const EXIT_ALTERNATIVE: any = \"EXIT_ALTERNATIVE\"\n let foundCompletePath = false\n\n const tokenVectorLength = tokenVector.length\n let minimalAlternativesIndex = tokenVectorLength - maxLookAhead - 1\n\n let result: ISyntacticContentAssistPath[] = []\n\n let possiblePaths: IPathToExamine[] = []\n possiblePaths.push({\n idx: -1,\n def: initialDef,\n ruleStack: [],\n occurrenceStack: []\n })\n\n while (!isEmpty(possiblePaths)) {\n let currPath = possiblePaths.pop()\n\n // skip alternatives if no more results can be found (assuming deterministic grammar with fixed lookahead)\n if (currPath === EXIT_ALTERNATIVE) {\n if (\n foundCompletePath &&\n last(possiblePaths).idx <= minimalAlternativesIndex\n ) {\n // remove irrelevant alternative\n possiblePaths.pop()\n }\n continue\n }\n\n let currDef = currPath.def\n let currIdx = currPath.idx\n let currRuleStack = currPath.ruleStack\n let currOccurrenceStack = currPath.occurrenceStack\n\n // For Example: an empty path could exist in a valid grammar in the case of an EMPTY_ALT\n if (isEmpty(currDef)) {\n continue\n }\n\n let prod = currDef[0]\n /* istanbul ignore else */\n if (prod === EXIT_NON_TERMINAL) {\n let nextPath = {\n idx: currIdx,\n def: drop(currDef),\n ruleStack: dropRight(currRuleStack),\n occurrenceStack: dropRight(currOccurrenceStack)\n }\n possiblePaths.push(nextPath)\n } else if (prod instanceof Terminal) {\n /* istanbul ignore else */\n if (currIdx < tokenVectorLength - 1) {\n let nextIdx = currIdx + 1\n let actualToken = tokenVector[nextIdx]\n if (tokMatcher(actualToken, prod.terminalType)) {\n let nextPath = {\n idx: nextIdx,\n def: drop(currDef),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n }\n possiblePaths.push(nextPath)\n }\n // end of the line\n } else if (currIdx === tokenVectorLength - 1) {\n // IGNORE ABOVE ELSE\n result.push({\n nextTokenType: prod.terminalType,\n nextTokenOccurrence: prod.idx,\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n })\n foundCompletePath = true\n } else {\n throw Error(\"non exhaustive match\")\n }\n } else if (prod instanceof NonTerminal) {\n let newRuleStack = cloneArr(currRuleStack)\n newRuleStack.push(prod.nonTerminalName)\n\n let newOccurrenceStack = cloneArr(currOccurrenceStack)\n newOccurrenceStack.push(prod.idx)\n\n let nextPath = {\n idx: currIdx,\n def: prod.definition.concat(EXIT_NON_TERMINAL_ARR, drop(currDef)),\n ruleStack: newRuleStack,\n occurrenceStack: newOccurrenceStack\n }\n possiblePaths.push(nextPath)\n } else if (prod instanceof Option) {\n // the order of alternatives is meaningful, FILO (Last path will be traversed first).\n let nextPathWithout = {\n idx: currIdx,\n def: drop(currDef),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n }\n possiblePaths.push(nextPathWithout)\n // required marker to avoid backtracking paths whose higher priority alternatives already matched\n possiblePaths.push(EXIT_ALTERNATIVE)\n\n let nextPathWith = {\n idx: currIdx,\n def: prod.definition.concat(drop(currDef)),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n }\n possiblePaths.push(nextPathWith)\n } else if (prod instanceof RepetitionMandatory) {\n // TODO:(THE NEW operators here take a while...) (convert once?)\n let secondIteration = new Repetition({\n definition: prod.definition,\n idx: prod.idx\n })\n let nextDef = prod.definition.concat([secondIteration], drop(currDef))\n let nextPath = {\n idx: currIdx,\n def: nextDef,\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n }\n possiblePaths.push(nextPath)\n } else if (prod instanceof RepetitionMandatoryWithSeparator) {\n // TODO:(THE NEW operators here take a while...) (convert once?)\n let separatorGast = new Terminal({\n terminalType: prod.separator\n })\n let secondIteration = new Repetition({\n definition: [separatorGast].concat(prod.definition),\n idx: prod.idx\n })\n let nextDef = prod.definition.concat([secondIteration], drop(currDef))\n let nextPath = {\n idx: currIdx,\n def: nextDef,\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n }\n possiblePaths.push(nextPath)\n } else if (prod instanceof RepetitionWithSeparator) {\n // the order of alternatives is meaningful, FILO (Last path will be traversed first).\n let nextPathWithout = {\n idx: currIdx,\n def: drop(currDef),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n }\n possiblePaths.push(nextPathWithout)\n // required marker to avoid backtracking paths whose higher priority alternatives already matched\n possiblePaths.push(EXIT_ALTERNATIVE)\n\n let separatorGast = new Terminal({\n terminalType: prod.separator\n })\n let nthRepetition = new Repetition({\n definition: [separatorGast].concat(prod.definition),\n idx: prod.idx\n })\n let nextDef = prod.definition.concat([nthRepetition], drop(currDef))\n let nextPathWith = {\n idx: currIdx,\n def: nextDef,\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n }\n possiblePaths.push(nextPathWith)\n } else if (prod instanceof Repetition) {\n // the order of alternatives is meaningful, FILO (Last path will be traversed first).\n let nextPathWithout = {\n idx: currIdx,\n def: drop(currDef),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n }\n possiblePaths.push(nextPathWithout)\n // required marker to avoid backtracking paths whose higher priority alternatives already matched\n possiblePaths.push(EXIT_ALTERNATIVE)\n\n // TODO: an empty repetition will cause infinite loops here, will the parser detect this in selfAnalysis?\n let nthRepetition = new Repetition({\n definition: prod.definition,\n idx: prod.idx\n })\n let nextDef = prod.definition.concat([nthRepetition], drop(currDef))\n let nextPathWith = {\n idx: currIdx,\n def: nextDef,\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n }\n possiblePaths.push(nextPathWith)\n } else if (prod instanceof Alternation) {\n // the order of alternatives is meaningful, FILO (Last path will be traversed first).\n for (let i = prod.definition.length - 1; i >= 0; i--) {\n let currAlt: any = prod.definition[i]\n let currAltPath = {\n idx: currIdx,\n def: currAlt.definition.concat(drop(currDef)),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n }\n possiblePaths.push(currAltPath)\n possiblePaths.push(EXIT_ALTERNATIVE)\n }\n } else if (prod instanceof Alternative) {\n possiblePaths.push({\n idx: currIdx,\n def: prod.definition.concat(drop(currDef)),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n })\n } else if (prod instanceof Rule) {\n // last because we should only encounter at most a single one of these per invocation.\n possiblePaths.push(\n expandTopLevelRule(prod, currIdx, currRuleStack, currOccurrenceStack)\n )\n } else {\n throw Error(\"non exhaustive match\")\n }\n }\n return result\n}\n\nfunction expandTopLevelRule(\n topRule: Rule,\n currIdx: number,\n currRuleStack: string[],\n currOccurrenceStack: number[]\n): IPathToExamine {\n let newRuleStack = cloneArr(currRuleStack)\n newRuleStack.push(topRule.name)\n\n let newCurrOccurrenceStack = cloneArr(currOccurrenceStack)\n // top rule is always assumed to have been called with occurrence index 1\n newCurrOccurrenceStack.push(1)\n\n return {\n idx: currIdx,\n def: topRule.definition,\n ruleStack: newRuleStack,\n occurrenceStack: newCurrOccurrenceStack\n }\n}\n","import {\n map,\n reduce,\n every,\n isEmpty,\n flatten,\n forEach,\n has\n} from \"../../utils/utils\"\nimport { possiblePathsFrom } from \"./interpreter\"\nimport { RestWalker } from \"./rest\"\nimport { Predicate, TokenMatcher, lookAheadSequence } from \"../parser/parser\"\nimport {\n tokenStructuredMatcher,\n tokenStructuredMatcherNoCategories\n} from \"../../scan/tokens\"\nimport {\n AbstractProduction,\n Alternation,\n Alternative as AlternativeGAST,\n Option,\n Repetition,\n RepetitionMandatory,\n RepetitionMandatoryWithSeparator,\n RepetitionWithSeparator,\n Rule\n} from \"./gast/gast_public\"\nimport { GAstVisitor } from \"./gast/gast_visitor_public\"\nimport {\n IOrAlt,\n IProduction,\n IProductionWithOccurrence,\n TokenType\n} from \"../../../api\"\n\nexport enum PROD_TYPE {\n OPTION,\n REPETITION,\n REPETITION_MANDATORY,\n REPETITION_MANDATORY_WITH_SEPARATOR,\n REPETITION_WITH_SEPARATOR,\n ALTERNATION\n}\n\nexport function getProdType(prod: IProduction): PROD_TYPE {\n /* istanbul ignore else */\n if (prod instanceof Option) {\n return PROD_TYPE.OPTION\n } else if (prod instanceof Repetition) {\n return PROD_TYPE.REPETITION\n } else if (prod instanceof RepetitionMandatory) {\n return PROD_TYPE.REPETITION_MANDATORY\n } else if (prod instanceof RepetitionMandatoryWithSeparator) {\n return PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR\n } else if (prod instanceof RepetitionWithSeparator) {\n return PROD_TYPE.REPETITION_WITH_SEPARATOR\n } else if (prod instanceof Alternation) {\n return PROD_TYPE.ALTERNATION\n } else {\n throw Error(\"non exhaustive match\")\n }\n}\n\nexport function buildLookaheadFuncForOr(\n occurrence: number,\n ruleGrammar: Rule,\n maxLookahead: number,\n hasPredicates: boolean,\n dynamicTokensEnabled: boolean,\n laFuncBuilder: Function\n): (orAlts?: IOrAlt[]) => number {\n let lookAheadPaths = getLookaheadPathsForOr(\n occurrence,\n ruleGrammar,\n maxLookahead\n )\n\n const tokenMatcher = areTokenCategoriesNotUsed(lookAheadPaths)\n ? tokenStructuredMatcherNoCategories\n : tokenStructuredMatcher\n\n return laFuncBuilder(\n lookAheadPaths,\n hasPredicates,\n tokenMatcher,\n dynamicTokensEnabled\n )\n}\n\n/**\n * When dealing with an Optional production (OPTION/MANY/2nd iteration of AT_LEAST_ONE/...) we need to compare\n * the lookahead \"inside\" the production and the lookahead immediately \"after\" it in the same top level rule (context free).\n *\n * Example: given a production:\n * ABC(DE)?DF\n *\n * The optional '(DE)?' should only be entered if we see 'DE'. a single Token 'D' is not sufficient to distinguish between the two\n * alternatives.\n *\n * @returns A Lookahead function which will return true IFF the parser should parse the Optional production.\n */\nexport function buildLookaheadFuncForOptionalProd(\n occurrence: number,\n ruleGrammar: Rule,\n k: number,\n dynamicTokensEnabled: boolean,\n prodType: PROD_TYPE,\n lookaheadBuilder: (lookAheadSequence, TokenMatcher, boolean) => () => boolean\n): () => boolean {\n let lookAheadPaths = getLookaheadPathsForOptionalProd(\n occurrence,\n ruleGrammar,\n prodType,\n k\n )\n\n const tokenMatcher = areTokenCategoriesNotUsed(lookAheadPaths)\n ? tokenStructuredMatcherNoCategories\n : tokenStructuredMatcher\n\n return lookaheadBuilder(lookAheadPaths[0], tokenMatcher, dynamicTokensEnabled)\n}\n\nexport type Alternative = TokenType[][]\n\nexport function buildAlternativesLookAheadFunc(\n alts: lookAheadSequence[],\n hasPredicates: boolean,\n tokenMatcher: TokenMatcher,\n dynamicTokensEnabled: boolean\n): (orAlts?: IOrAlt[]) => number {\n let numOfAlts = alts.length\n let areAllOneTokenLookahead = every(alts, (currAlt) => {\n return every(currAlt, (currPath) => {\n return currPath.length === 1\n })\n })\n\n // This version takes into account the predicates as well.\n if (hasPredicates) {\n /**\n * @returns {number} - The chosen alternative index\n */\n return function (orAlts: IOrAlt[]): number {\n // unfortunately the predicates must be extracted every single time\n // as they cannot be cached due to references to parameters(vars) which are no longer valid.\n // note that in the common case of no predicates, no cpu time will be wasted on this (see else block)\n let predicates: Predicate[] = map(orAlts, (currAlt) => currAlt.GATE)\n\n for (let t = 0; t < numOfAlts; t++) {\n let currAlt = alts[t]\n let currNumOfPaths = currAlt.length\n\n let currPredicate = predicates[t]\n if (currPredicate !== undefined && currPredicate.call(this) === false) {\n // if the predicate does not match there is no point in checking the paths\n continue\n }\n nextPath: for (let j = 0; j < currNumOfPaths; j++) {\n let currPath = currAlt[j]\n let currPathLength = currPath.length\n for (let i = 0; i < currPathLength; i++) {\n let nextToken = this.LA(i + 1)\n if (tokenMatcher(nextToken, currPath[i]) === false) {\n // mismatch in current path\n // try the next pth\n continue nextPath\n }\n }\n // found a full path that matches.\n // this will also work for an empty ALT as the loop will be skipped\n return t\n }\n // none of the paths for the current alternative matched\n // try the next alternative\n }\n // none of the alternatives could be matched\n return undefined\n }\n } else if (areAllOneTokenLookahead && !dynamicTokensEnabled) {\n // optimized (common) case of all the lookaheads paths requiring only\n // a single token lookahead. These Optimizations cannot work if dynamically defined Tokens are used.\n let singleTokenAlts = map(alts, (currAlt) => {\n return flatten(currAlt)\n })\n\n let choiceToAlt = reduce(\n singleTokenAlts,\n (result, currAlt, idx) => {\n forEach(currAlt, (currTokType) => {\n if (!has(result, currTokType.tokenTypeIdx)) {\n result[currTokType.tokenTypeIdx] = idx\n }\n forEach(currTokType.categoryMatches, (currExtendingType) => {\n if (!has(result, currExtendingType)) {\n result[currExtendingType] = idx\n }\n })\n })\n return result\n },\n []\n )\n\n /**\n * @returns {number} - The chosen alternative index\n */\n return function (): number {\n let nextToken = this.LA(1)\n return choiceToAlt[nextToken.tokenTypeIdx]\n }\n } else {\n // optimized lookahead without needing to check the predicates at all.\n // this causes code duplication which is intentional to improve performance.\n /**\n * @returns {number} - The chosen alternative index\n */\n return function (): number {\n for (let t = 0; t < numOfAlts; t++) {\n let currAlt = alts[t]\n let currNumOfPaths = currAlt.length\n nextPath: for (let j = 0; j < currNumOfPaths; j++) {\n let currPath = currAlt[j]\n let currPathLength = currPath.length\n for (let i = 0; i < currPathLength; i++) {\n let nextToken = this.LA(i + 1)\n if (tokenMatcher(nextToken, currPath[i]) === false) {\n // mismatch in current path\n // try the next pth\n continue nextPath\n }\n }\n // found a full path that matches.\n // this will also work for an empty ALT as the loop will be skipped\n return t\n }\n // none of the paths for the current alternative matched\n // try the next alternative\n }\n // none of the alternatives could be matched\n return undefined\n }\n }\n}\n\nexport function buildSingleAlternativeLookaheadFunction(\n alt: lookAheadSequence,\n tokenMatcher: TokenMatcher,\n dynamicTokensEnabled: boolean\n): () => boolean {\n let areAllOneTokenLookahead = every(alt, (currPath) => {\n return currPath.length === 1\n })\n\n let numOfPaths = alt.length\n\n // optimized (common) case of all the lookaheads paths requiring only\n // a single token lookahead.\n if (areAllOneTokenLookahead && !dynamicTokensEnabled) {\n let singleTokensTypes = flatten(alt)\n\n if (\n singleTokensTypes.length === 1 &&\n isEmpty((singleTokensTypes[0]).categoryMatches)\n ) {\n let expectedTokenType = singleTokensTypes[0]\n let expectedTokenUniqueKey = (expectedTokenType).tokenTypeIdx\n\n return function (): boolean {\n return this.LA(1).tokenTypeIdx === expectedTokenUniqueKey\n }\n } else {\n let choiceToAlt = reduce(\n singleTokensTypes,\n (result, currTokType, idx) => {\n result[currTokType.tokenTypeIdx] = true\n forEach(currTokType.categoryMatches, (currExtendingType) => {\n result[currExtendingType] = true\n })\n return result\n },\n []\n )\n\n return function (): boolean {\n let nextToken = this.LA(1)\n return choiceToAlt[nextToken.tokenTypeIdx] === true\n }\n }\n } else {\n return function (): boolean {\n nextPath: for (let j = 0; j < numOfPaths; j++) {\n let currPath = alt[j]\n let currPathLength = currPath.length\n for (let i = 0; i < currPathLength; i++) {\n let nextToken = this.LA(i + 1)\n if (tokenMatcher(nextToken, currPath[i]) === false) {\n // mismatch in current path\n // try the next pth\n continue nextPath\n }\n }\n // found a full path that matches.\n return true\n }\n\n // none of the paths matched\n return false\n }\n }\n}\n\nclass RestDefinitionFinderWalker extends RestWalker {\n private restDef: IProduction[]\n\n constructor(\n private topProd: Rule,\n private targetOccurrence: number,\n private targetProdType: PROD_TYPE\n ) {\n super()\n }\n\n startWalking(): IProduction[] {\n this.walk(this.topProd)\n return this.restDef\n }\n\n private checkIsTarget(\n node: AbstractProduction & IProductionWithOccurrence,\n expectedProdType: PROD_TYPE,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): boolean {\n if (\n node.idx === this.targetOccurrence &&\n this.targetProdType === expectedProdType\n ) {\n this.restDef = currRest.concat(prevRest)\n return true\n }\n // performance optimization, do not iterate over the entire Grammar ast after we have found the target\n return false\n }\n\n walkOption(\n optionProd: Option,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {\n if (!this.checkIsTarget(optionProd, PROD_TYPE.OPTION, currRest, prevRest)) {\n super.walkOption(optionProd, currRest, prevRest)\n }\n }\n\n walkAtLeastOne(\n atLeastOneProd: RepetitionMandatory,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {\n if (\n !this.checkIsTarget(\n atLeastOneProd,\n PROD_TYPE.REPETITION_MANDATORY,\n currRest,\n prevRest\n )\n ) {\n super.walkOption(atLeastOneProd, currRest, prevRest)\n }\n }\n\n walkAtLeastOneSep(\n atLeastOneSepProd: RepetitionMandatoryWithSeparator,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {\n if (\n !this.checkIsTarget(\n atLeastOneSepProd,\n PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR,\n currRest,\n prevRest\n )\n ) {\n super.walkOption(atLeastOneSepProd, currRest, prevRest)\n }\n }\n\n walkMany(\n manyProd: Repetition,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {\n if (\n !this.checkIsTarget(manyProd, PROD_TYPE.REPETITION, currRest, prevRest)\n ) {\n super.walkOption(manyProd, currRest, prevRest)\n }\n }\n\n walkManySep(\n manySepProd: RepetitionWithSeparator,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {\n if (\n !this.checkIsTarget(\n manySepProd,\n PROD_TYPE.REPETITION_WITH_SEPARATOR,\n currRest,\n prevRest\n )\n ) {\n super.walkOption(manySepProd, currRest, prevRest)\n }\n }\n}\n\n/**\n * Returns the definition of a target production in a top level level rule.\n */\nclass InsideDefinitionFinderVisitor extends GAstVisitor {\n public result: IProduction[] = []\n\n constructor(\n private targetOccurrence: number,\n private targetProdType: PROD_TYPE,\n private targetRef?: any\n ) {\n super()\n }\n\n private checkIsTarget(\n node: AbstractProduction & IProductionWithOccurrence,\n expectedProdName: PROD_TYPE\n ): void {\n if (\n node.idx === this.targetOccurrence &&\n this.targetProdType === expectedProdName &&\n (this.targetRef === undefined || node === this.targetRef)\n ) {\n this.result = node.definition\n }\n }\n\n public visitOption(node: Option): void {\n this.checkIsTarget(node, PROD_TYPE.OPTION)\n }\n\n public visitRepetition(node: Repetition): void {\n this.checkIsTarget(node, PROD_TYPE.REPETITION)\n }\n\n public visitRepetitionMandatory(node: RepetitionMandatory): void {\n this.checkIsTarget(node, PROD_TYPE.REPETITION_MANDATORY)\n }\n\n public visitRepetitionMandatoryWithSeparator(\n node: RepetitionMandatoryWithSeparator\n ): void {\n this.checkIsTarget(node, PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR)\n }\n\n public visitRepetitionWithSeparator(node: RepetitionWithSeparator): void {\n this.checkIsTarget(node, PROD_TYPE.REPETITION_WITH_SEPARATOR)\n }\n\n public visitAlternation(node: Alternation): void {\n this.checkIsTarget(node, PROD_TYPE.ALTERNATION)\n }\n}\n\nfunction initializeArrayOfArrays(size): any[][] {\n let result = new Array(size)\n for (let i = 0; i < size; i++) {\n result[i] = []\n }\n return result\n}\n\n/**\n * A sort of hash function between a Path in the grammar and a string.\n * Note that this returns multiple \"hashes\" to support the scenario of token categories.\n * - A single path with categories may match multiple **actual** paths.\n */\nfunction pathToHashKeys(path: TokenType[]): string[] {\n let keys = [\"\"]\n for (let i = 0; i < path.length; i++) {\n const tokType = path[i]\n let longerKeys = []\n for (let j = 0; j < keys.length; j++) {\n const currShorterKey = keys[j]\n longerKeys.push(currShorterKey + \"_\" + tokType.tokenTypeIdx)\n for (let t = 0; t < tokType.categoryMatches.length; t++) {\n const categoriesKeySuffix = \"_\" + tokType.categoryMatches[t]\n longerKeys.push(currShorterKey + categoriesKeySuffix)\n }\n }\n keys = longerKeys\n }\n return keys\n}\n\n/**\n * Imperative style due to being called from a hot spot\n */\nfunction isUniquePrefixHash(\n altKnownPathsKeys: Record[],\n searchPathKeys: string[],\n idx: number\n): boolean {\n for (\n let currAltIdx = 0;\n currAltIdx < altKnownPathsKeys.length;\n currAltIdx++\n ) {\n // We only want to test vs the other alternatives\n if (currAltIdx === idx) {\n continue\n }\n const otherAltKnownPathsKeys = altKnownPathsKeys[currAltIdx]\n for (let searchIdx = 0; searchIdx < searchPathKeys.length; searchIdx++) {\n const searchKey = searchPathKeys[searchIdx]\n if (otherAltKnownPathsKeys[searchKey] === true) {\n return false\n }\n }\n }\n // None of the SearchPathKeys were found in any of the other alternatives\n return true\n}\n\nexport function lookAheadSequenceFromAlternatives(\n altsDefs: IProduction[],\n k: number\n): lookAheadSequence[] {\n let partialAlts = map(altsDefs, (currAlt) => possiblePathsFrom([currAlt], 1))\n let finalResult = initializeArrayOfArrays(partialAlts.length)\n const altsHashes = map(partialAlts, (currAltPaths) => {\n const dict = {}\n forEach(currAltPaths, (item) => {\n const keys = pathToHashKeys(item.partialPath)\n forEach(keys, (currKey) => {\n dict[currKey] = true\n })\n })\n return dict\n })\n let newData = partialAlts\n\n // maxLookahead loop\n for (let pathLength = 1; pathLength <= k; pathLength++) {\n let currDataset = newData\n newData = initializeArrayOfArrays(currDataset.length)\n\n // alternatives loop\n for (let altIdx = 0; altIdx < currDataset.length; altIdx++) {\n let currAltPathsAndSuffixes = currDataset[altIdx]\n // paths in current alternative loop\n for (\n let currPathIdx = 0;\n currPathIdx < currAltPathsAndSuffixes.length;\n currPathIdx++\n ) {\n let currPathPrefix = currAltPathsAndSuffixes[currPathIdx].partialPath\n let suffixDef = currAltPathsAndSuffixes[currPathIdx].suffixDef\n const prefixKeys = pathToHashKeys(currPathPrefix)\n let isUnique = isUniquePrefixHash(altsHashes, prefixKeys, altIdx)\n // End of the line for this path.\n if (isUnique || isEmpty(suffixDef) || currPathPrefix.length === k) {\n let currAltResult = finalResult[altIdx]\n // TODO: Can we implement a containsPath using Maps/Dictionaries?\n if (containsPath(currAltResult, currPathPrefix) === false) {\n currAltResult.push(currPathPrefix)\n // Update all new keys for the current path.\n for (let j = 0; j < prefixKeys.length; j++) {\n const currKey = prefixKeys[j]\n altsHashes[altIdx][currKey] = true\n }\n }\n }\n // Expand longer paths\n else {\n let newPartialPathsAndSuffixes = possiblePathsFrom(\n suffixDef,\n pathLength + 1,\n currPathPrefix\n )\n newData[altIdx] = newData[altIdx].concat(newPartialPathsAndSuffixes)\n\n // Update keys for new known paths\n forEach(newPartialPathsAndSuffixes, (item) => {\n const prefixKeys = pathToHashKeys(item.partialPath)\n forEach(prefixKeys, (key) => {\n altsHashes[altIdx][key] = true\n })\n })\n }\n }\n }\n }\n\n return finalResult\n}\n\nexport function getLookaheadPathsForOr(\n occurrence: number,\n ruleGrammar: Rule,\n k: number,\n orProd?: Alternation\n): lookAheadSequence[] {\n const visitor = new InsideDefinitionFinderVisitor(\n occurrence,\n PROD_TYPE.ALTERNATION,\n orProd\n )\n ruleGrammar.accept(visitor)\n return lookAheadSequenceFromAlternatives(visitor.result, k)\n}\n\nexport function getLookaheadPathsForOptionalProd(\n occurrence: number,\n ruleGrammar: Rule,\n prodType: PROD_TYPE,\n k: number\n): lookAheadSequence[] {\n let insideDefVisitor = new InsideDefinitionFinderVisitor(occurrence, prodType)\n ruleGrammar.accept(insideDefVisitor)\n let insideDef = insideDefVisitor.result\n\n let afterDefWalker = new RestDefinitionFinderWalker(\n ruleGrammar,\n occurrence,\n prodType\n )\n let afterDef = afterDefWalker.startWalking()\n\n let insideFlat = new AlternativeGAST({ definition: insideDef })\n let afterFlat = new AlternativeGAST({ definition: afterDef })\n\n return lookAheadSequenceFromAlternatives([insideFlat, afterFlat], k)\n}\n\nexport function containsPath(\n alternative: Alternative,\n searchPath: TokenType[]\n): boolean {\n compareOtherPath: for (let i = 0; i < alternative.length; i++) {\n const otherPath = alternative[i]\n if (otherPath.length !== searchPath.length) {\n continue\n }\n for (let j = 0; j < otherPath.length; j++) {\n const searchTok = searchPath[j]\n const otherTok = otherPath[j]\n\n const matchingTokens =\n searchTok === otherTok ||\n otherTok.categoryMatchesMap[searchTok.tokenTypeIdx] !== undefined\n if (matchingTokens === false) {\n continue compareOtherPath\n }\n }\n return true\n }\n\n return false\n}\n\nexport function isStrictPrefixOfPath(\n prefix: TokenType[],\n other: TokenType[]\n): boolean {\n return (\n prefix.length < other.length &&\n every(prefix, (tokType, idx) => {\n const otherTokType = other[idx]\n return (\n tokType === otherTokType ||\n otherTokType.categoryMatchesMap[tokType.tokenTypeIdx]\n )\n })\n )\n}\n\nexport function areTokenCategoriesNotUsed(\n lookAheadPaths: lookAheadSequence[]\n): boolean {\n return every(lookAheadPaths, (singleAltPaths) =>\n every(singleAltPaths, (singlePath) =>\n every(singlePath, (token) => isEmpty(token.categoryMatches))\n )\n )\n}\n","import * as utils from \"../../utils/utils\"\nimport {\n contains,\n every,\n findAll,\n flatten,\n forEach,\n isEmpty,\n map,\n reduce,\n reject\n} from \"../../utils/utils\"\nimport {\n IParserAmbiguousAlternativesDefinitionError,\n IParserDuplicatesDefinitionError,\n IParserEmptyAlternativeDefinitionError,\n ParserDefinitionErrorType\n} from \"../parser/parser\"\nimport { getProductionDslName, isOptionalProd } from \"./gast/gast\"\nimport {\n Alternative,\n containsPath,\n getLookaheadPathsForOptionalProd,\n getLookaheadPathsForOr,\n getProdType,\n isStrictPrefixOfPath\n} from \"./lookahead\"\nimport { nextPossibleTokensAfter } from \"./interpreter\"\nimport {\n Alternation,\n Alternative as AlternativeGAST,\n NonTerminal,\n Option,\n Repetition,\n RepetitionMandatory,\n RepetitionMandatoryWithSeparator,\n RepetitionWithSeparator,\n Rule,\n Terminal\n} from \"./gast/gast_public\"\nimport { GAstVisitor } from \"./gast/gast_visitor_public\"\nimport {\n IGrammarValidatorErrorMessageProvider,\n IParserDefinitionError,\n IProduction,\n IProductionWithOccurrence,\n TokenType\n} from \"../../../api\"\n\nexport function validateGrammar(\n topLevels: Rule[],\n globalMaxLookahead: number,\n tokenTypes: TokenType[],\n errMsgProvider: IGrammarValidatorErrorMessageProvider,\n grammarName: string\n): IParserDefinitionError[] {\n let duplicateErrors: any = utils.map(topLevels, (currTopLevel) =>\n validateDuplicateProductions(currTopLevel, errMsgProvider)\n )\n let leftRecursionErrors: any = utils.map(topLevels, (currTopRule) =>\n validateNoLeftRecursion(currTopRule, currTopRule, errMsgProvider)\n )\n\n let emptyAltErrors = []\n let ambiguousAltsErrors = []\n let emptyRepetitionErrors = []\n\n // left recursion could cause infinite loops in the following validations.\n // It is safest to first have the user fix the left recursion errors first and only then examine Further issues.\n if (every(leftRecursionErrors, isEmpty)) {\n emptyAltErrors = map(topLevels, (currTopRule) =>\n validateEmptyOrAlternative(currTopRule, errMsgProvider)\n )\n ambiguousAltsErrors = map(topLevels, (currTopRule) =>\n validateAmbiguousAlternationAlternatives(\n currTopRule,\n globalMaxLookahead,\n errMsgProvider\n )\n )\n\n emptyRepetitionErrors = validateSomeNonEmptyLookaheadPath(\n topLevels,\n globalMaxLookahead,\n errMsgProvider\n )\n }\n\n let termsNamespaceConflictErrors = checkTerminalAndNoneTerminalsNameSpace(\n topLevels,\n tokenTypes,\n errMsgProvider\n )\n\n const tooManyAltsErrors = map(topLevels, (curRule) =>\n validateTooManyAlts(curRule, errMsgProvider)\n )\n\n const duplicateRulesError = map(topLevels, (curRule) =>\n validateRuleDoesNotAlreadyExist(\n curRule,\n topLevels,\n grammarName,\n errMsgProvider\n )\n )\n\n return (\n utils.flatten(\n duplicateErrors.concat(\n emptyRepetitionErrors,\n leftRecursionErrors,\n emptyAltErrors,\n ambiguousAltsErrors,\n termsNamespaceConflictErrors,\n tooManyAltsErrors,\n duplicateRulesError\n )\n )\n )\n}\n\nfunction validateDuplicateProductions(\n topLevelRule: Rule,\n errMsgProvider: IGrammarValidatorErrorMessageProvider\n): IParserDuplicatesDefinitionError[] {\n let collectorVisitor = new OccurrenceValidationCollector()\n topLevelRule.accept(collectorVisitor)\n let allRuleProductions = collectorVisitor.allProductions\n\n let productionGroups = utils.groupBy(\n allRuleProductions,\n identifyProductionForDuplicates\n )\n\n let duplicates: any = utils.pick(productionGroups, (currGroup) => {\n return currGroup.length > 1\n })\n\n let errors = utils.map(utils.values(duplicates), (currDuplicates: any) => {\n let firstProd: any = utils.first(currDuplicates)\n let msg = errMsgProvider.buildDuplicateFoundError(\n topLevelRule,\n currDuplicates\n )\n let dslName = getProductionDslName(firstProd)\n let defError: IParserDuplicatesDefinitionError = {\n message: msg,\n type: ParserDefinitionErrorType.DUPLICATE_PRODUCTIONS,\n ruleName: topLevelRule.name,\n dslName: dslName,\n occurrence: firstProd.idx\n }\n\n let param = getExtraProductionArgument(firstProd)\n if (param) {\n defError.parameter = param\n }\n\n return defError\n })\n return errors\n}\n\nexport function identifyProductionForDuplicates(\n prod: IProductionWithOccurrence\n): string {\n return `${getProductionDslName(prod)}_#_${\n prod.idx\n }_#_${getExtraProductionArgument(prod)}`\n}\n\nfunction getExtraProductionArgument(prod: IProductionWithOccurrence): string {\n if (prod instanceof Terminal) {\n return prod.terminalType.name\n } else if (prod instanceof NonTerminal) {\n return prod.nonTerminalName\n } else {\n return \"\"\n }\n}\n\nexport class OccurrenceValidationCollector extends GAstVisitor {\n public allProductions: IProduction[] = []\n\n public visitNonTerminal(subrule: NonTerminal): void {\n this.allProductions.push(subrule)\n }\n\n public visitOption(option: Option): void {\n this.allProductions.push(option)\n }\n\n public visitRepetitionWithSeparator(manySep: RepetitionWithSeparator): void {\n this.allProductions.push(manySep)\n }\n\n public visitRepetitionMandatory(atLeastOne: RepetitionMandatory): void {\n this.allProductions.push(atLeastOne)\n }\n\n public visitRepetitionMandatoryWithSeparator(\n atLeastOneSep: RepetitionMandatoryWithSeparator\n ): void {\n this.allProductions.push(atLeastOneSep)\n }\n\n public visitRepetition(many: Repetition): void {\n this.allProductions.push(many)\n }\n\n public visitAlternation(or: Alternation): void {\n this.allProductions.push(or)\n }\n\n public visitTerminal(terminal: Terminal): void {\n this.allProductions.push(terminal)\n }\n}\n\nexport function validateRuleDoesNotAlreadyExist(\n rule: Rule,\n allRules: Rule[],\n className,\n errMsgProvider: IGrammarValidatorErrorMessageProvider\n): IParserDefinitionError[] {\n let errors = []\n const occurrences = reduce(\n allRules,\n (result, curRule) => {\n if (curRule.name === rule.name) {\n return result + 1\n }\n return result\n },\n 0\n )\n if (occurrences > 1) {\n const errMsg = errMsgProvider.buildDuplicateRuleNameError({\n topLevelRule: rule,\n grammarName: className\n })\n errors.push({\n message: errMsg,\n type: ParserDefinitionErrorType.DUPLICATE_RULE_NAME,\n ruleName: rule.name\n })\n }\n\n return errors\n}\n\n// TODO: is there anyway to get only the rule names of rules inherited from the super grammars?\n// This is not part of the IGrammarErrorProvider because the validation cannot be performed on\n// The grammar structure, only at runtime.\nexport function validateRuleIsOverridden(\n ruleName: string,\n definedRulesNames: string[],\n className\n): IParserDefinitionError[] {\n let errors = []\n let errMsg\n\n if (!utils.contains(definedRulesNames, ruleName)) {\n errMsg =\n `Invalid rule override, rule: ->${ruleName}<- cannot be overridden in the grammar: ->${className}<-` +\n `as it is not defined in any of the super grammars `\n errors.push({\n message: errMsg,\n type: ParserDefinitionErrorType.INVALID_RULE_OVERRIDE,\n ruleName: ruleName\n })\n }\n\n return errors\n}\n\nexport function validateNoLeftRecursion(\n topRule: Rule,\n currRule: Rule,\n errMsgProvider: IGrammarValidatorErrorMessageProvider,\n path: Rule[] = []\n): IParserDefinitionError[] {\n let errors = []\n let nextNonTerminals = getFirstNoneTerminal(currRule.definition)\n if (utils.isEmpty(nextNonTerminals)) {\n return []\n } else {\n let ruleName = topRule.name\n let foundLeftRecursion = utils.contains(nextNonTerminals, topRule)\n if (foundLeftRecursion) {\n errors.push({\n message: errMsgProvider.buildLeftRecursionError({\n topLevelRule: topRule,\n leftRecursionPath: path\n }),\n type: ParserDefinitionErrorType.LEFT_RECURSION,\n ruleName: ruleName\n })\n }\n\n // we are only looking for cyclic paths leading back to the specific topRule\n // other cyclic paths are ignored, we still need this difference to avoid infinite loops...\n let validNextSteps = utils.difference(\n nextNonTerminals,\n path.concat([topRule])\n )\n let errorsFromNextSteps = utils.map(validNextSteps, (currRefRule) => {\n let newPath = utils.cloneArr(path)\n newPath.push(currRefRule)\n return validateNoLeftRecursion(\n topRule,\n currRefRule,\n errMsgProvider,\n newPath\n )\n })\n\n return errors.concat(utils.flatten(errorsFromNextSteps))\n }\n}\n\nexport function getFirstNoneTerminal(definition: IProduction[]): Rule[] {\n let result = []\n if (utils.isEmpty(definition)) {\n return result\n }\n let firstProd = utils.first(definition)\n\n /* istanbul ignore else */\n if (firstProd instanceof NonTerminal) {\n result.push(firstProd.referencedRule)\n } else if (\n firstProd instanceof AlternativeGAST ||\n firstProd instanceof Option ||\n firstProd instanceof RepetitionMandatory ||\n firstProd instanceof RepetitionMandatoryWithSeparator ||\n firstProd instanceof RepetitionWithSeparator ||\n firstProd instanceof Repetition\n ) {\n result = result.concat(\n getFirstNoneTerminal(firstProd.definition)\n )\n } else if (firstProd instanceof Alternation) {\n // each sub definition in alternation is a FLAT\n result = utils.flatten(\n utils.map(firstProd.definition, (currSubDef) =>\n getFirstNoneTerminal((currSubDef).definition)\n )\n )\n } else if (firstProd instanceof Terminal) {\n // nothing to see, move along\n } else {\n throw Error(\"non exhaustive match\")\n }\n\n let isFirstOptional = isOptionalProd(firstProd)\n let hasMore = definition.length > 1\n if (isFirstOptional && hasMore) {\n let rest = utils.drop(definition)\n return result.concat(getFirstNoneTerminal(rest))\n } else {\n return result\n }\n}\n\nclass OrCollector extends GAstVisitor {\n public alternations = []\n\n public visitAlternation(node: Alternation): void {\n this.alternations.push(node)\n }\n}\n\nexport function validateEmptyOrAlternative(\n topLevelRule: Rule,\n errMsgProvider: IGrammarValidatorErrorMessageProvider\n): IParserEmptyAlternativeDefinitionError[] {\n let orCollector = new OrCollector()\n topLevelRule.accept(orCollector)\n let ors = orCollector.alternations\n\n let errors = utils.reduce(\n ors,\n (errors, currOr) => {\n let exceptLast = utils.dropRight(currOr.definition)\n let currErrors = utils.map(\n exceptLast,\n (currAlternative: IProduction, currAltIdx) => {\n const possibleFirstInAlt = nextPossibleTokensAfter(\n [currAlternative],\n [],\n null,\n 1\n )\n if (utils.isEmpty(possibleFirstInAlt)) {\n return {\n message: errMsgProvider.buildEmptyAlternationError({\n topLevelRule: topLevelRule,\n alternation: currOr,\n emptyChoiceIdx: currAltIdx\n }),\n type: ParserDefinitionErrorType.NONE_LAST_EMPTY_ALT,\n ruleName: topLevelRule.name,\n occurrence: currOr.idx,\n alternative: currAltIdx + 1\n }\n } else {\n return null\n }\n }\n )\n return errors.concat(utils.compact(currErrors))\n },\n []\n )\n\n return errors\n}\n\nexport function validateAmbiguousAlternationAlternatives(\n topLevelRule: Rule,\n globalMaxLookahead: number,\n errMsgProvider: IGrammarValidatorErrorMessageProvider\n): IParserAmbiguousAlternativesDefinitionError[] {\n let orCollector = new OrCollector()\n topLevelRule.accept(orCollector)\n let ors = orCollector.alternations\n\n // New Handling of ignoring ambiguities\n // - https://github.com/chevrotain/chevrotain/issues/869\n ors = reject(ors, (currOr) => currOr.ignoreAmbiguities === true)\n\n let errors = utils.reduce(\n ors,\n (result, currOr: Alternation) => {\n let currOccurrence = currOr.idx\n const actualMaxLookahead = currOr.maxLookahead || globalMaxLookahead\n let alternatives = getLookaheadPathsForOr(\n currOccurrence,\n topLevelRule,\n actualMaxLookahead,\n currOr\n )\n let altsAmbiguityErrors = checkAlternativesAmbiguities(\n alternatives,\n currOr,\n topLevelRule,\n errMsgProvider\n )\n let altsPrefixAmbiguityErrors = checkPrefixAlternativesAmbiguities(\n alternatives,\n currOr,\n topLevelRule,\n errMsgProvider\n )\n\n return result.concat(altsAmbiguityErrors, altsPrefixAmbiguityErrors)\n },\n []\n )\n\n return errors\n}\n\nexport class RepetionCollector extends GAstVisitor {\n public allProductions: IProduction[] = []\n\n public visitRepetitionWithSeparator(manySep: RepetitionWithSeparator): void {\n this.allProductions.push(manySep)\n }\n\n public visitRepetitionMandatory(atLeastOne: RepetitionMandatory): void {\n this.allProductions.push(atLeastOne)\n }\n\n public visitRepetitionMandatoryWithSeparator(\n atLeastOneSep: RepetitionMandatoryWithSeparator\n ): void {\n this.allProductions.push(atLeastOneSep)\n }\n\n public visitRepetition(many: Repetition): void {\n this.allProductions.push(many)\n }\n}\n\nexport function validateTooManyAlts(\n topLevelRule: Rule,\n errMsgProvider: IGrammarValidatorErrorMessageProvider\n): IParserDefinitionError[] {\n let orCollector = new OrCollector()\n topLevelRule.accept(orCollector)\n let ors = orCollector.alternations\n\n let errors = utils.reduce(\n ors,\n (errors, currOr) => {\n if (currOr.definition.length > 255) {\n errors.push({\n message: errMsgProvider.buildTooManyAlternativesError({\n topLevelRule: topLevelRule,\n alternation: currOr\n }),\n type: ParserDefinitionErrorType.TOO_MANY_ALTS,\n ruleName: topLevelRule.name,\n occurrence: currOr.idx\n })\n }\n return errors\n },\n []\n )\n\n return errors\n}\n\nexport function validateSomeNonEmptyLookaheadPath(\n topLevelRules: Rule[],\n maxLookahead: number,\n errMsgProvider: IGrammarValidatorErrorMessageProvider\n): IParserDefinitionError[] {\n let errors = []\n forEach(topLevelRules, (currTopRule) => {\n let collectorVisitor = new RepetionCollector()\n currTopRule.accept(collectorVisitor)\n let allRuleProductions = collectorVisitor.allProductions\n forEach(allRuleProductions, (currProd) => {\n let prodType = getProdType(currProd)\n const actualMaxLookahead = currProd.maxLookahead || maxLookahead\n let currOccurrence = currProd.idx\n let paths = getLookaheadPathsForOptionalProd(\n currOccurrence,\n currTopRule,\n prodType,\n actualMaxLookahead\n )\n let pathsInsideProduction = paths[0]\n if (isEmpty(flatten(pathsInsideProduction))) {\n const errMsg = errMsgProvider.buildEmptyRepetitionError({\n topLevelRule: currTopRule,\n repetition: currProd\n })\n errors.push({\n message: errMsg,\n type: ParserDefinitionErrorType.NO_NON_EMPTY_LOOKAHEAD,\n ruleName: currTopRule.name\n })\n }\n })\n })\n\n return errors\n}\n\nexport interface IAmbiguityDescriptor {\n alts: number[]\n path: TokenType[]\n}\n\nfunction checkAlternativesAmbiguities(\n alternatives: Alternative[],\n alternation: Alternation,\n rule: Rule,\n errMsgProvider: IGrammarValidatorErrorMessageProvider\n): IParserAmbiguousAlternativesDefinitionError[] {\n let foundAmbiguousPaths = []\n let identicalAmbiguities = reduce(\n alternatives,\n (result, currAlt, currAltIdx) => {\n // ignore (skip) ambiguities with this alternative\n if (alternation.definition[currAltIdx].ignoreAmbiguities === true) {\n return result\n }\n\n forEach(currAlt, (currPath) => {\n let altsCurrPathAppearsIn = [currAltIdx]\n forEach(alternatives, (currOtherAlt, currOtherAltIdx) => {\n if (\n currAltIdx !== currOtherAltIdx &&\n containsPath(currOtherAlt, currPath) &&\n // ignore (skip) ambiguities with this \"other\" alternative\n alternation.definition[currOtherAltIdx].ignoreAmbiguities !== true\n ) {\n altsCurrPathAppearsIn.push(currOtherAltIdx)\n }\n })\n\n if (\n altsCurrPathAppearsIn.length > 1 &&\n !containsPath(foundAmbiguousPaths, currPath)\n ) {\n foundAmbiguousPaths.push(currPath)\n result.push({\n alts: altsCurrPathAppearsIn,\n path: currPath\n })\n }\n })\n return result\n },\n []\n )\n\n let currErrors = utils.map(identicalAmbiguities, (currAmbDescriptor) => {\n let ambgIndices = map(\n currAmbDescriptor.alts,\n (currAltIdx) => currAltIdx + 1\n )\n\n const currMessage = errMsgProvider.buildAlternationAmbiguityError({\n topLevelRule: rule,\n alternation: alternation,\n ambiguityIndices: ambgIndices,\n prefixPath: currAmbDescriptor.path\n })\n\n return {\n message: currMessage,\n type: ParserDefinitionErrorType.AMBIGUOUS_ALTS,\n ruleName: rule.name,\n occurrence: alternation.idx,\n alternatives: [currAmbDescriptor.alts]\n }\n })\n\n return currErrors\n}\n\nexport function checkPrefixAlternativesAmbiguities(\n alternatives: Alternative[],\n alternation: Alternation,\n rule: Rule,\n errMsgProvider: IGrammarValidatorErrorMessageProvider\n): IAmbiguityDescriptor[] {\n let errors = []\n\n // flatten\n let pathsAndIndices = reduce(\n alternatives,\n (result, currAlt, idx) => {\n let currPathsAndIdx = map(currAlt, (currPath) => {\n return { idx: idx, path: currPath }\n })\n return result.concat(currPathsAndIdx)\n },\n []\n )\n\n forEach(pathsAndIndices, (currPathAndIdx) => {\n const alternativeGast = alternation.definition[currPathAndIdx.idx]\n // ignore (skip) ambiguities with this alternative\n if (alternativeGast.ignoreAmbiguities === true) {\n return\n }\n let targetIdx = currPathAndIdx.idx\n let targetPath = currPathAndIdx.path\n\n let prefixAmbiguitiesPathsAndIndices = findAll(\n pathsAndIndices,\n (searchPathAndIdx) => {\n // prefix ambiguity can only be created from lower idx (higher priority) path\n return (\n // ignore (skip) ambiguities with this \"other\" alternative\n alternation.definition[searchPathAndIdx.idx].ignoreAmbiguities !==\n true &&\n searchPathAndIdx.idx < targetIdx &&\n // checking for strict prefix because identical lookaheads\n // will be be detected using a different validation.\n isStrictPrefixOfPath(searchPathAndIdx.path, targetPath)\n )\n }\n )\n\n let currPathPrefixErrors = map(\n prefixAmbiguitiesPathsAndIndices,\n (currAmbPathAndIdx) => {\n let ambgIndices = [currAmbPathAndIdx.idx + 1, targetIdx + 1]\n const occurrence = alternation.idx === 0 ? \"\" : alternation.idx\n\n const message = errMsgProvider.buildAlternationPrefixAmbiguityError({\n topLevelRule: rule,\n alternation: alternation,\n ambiguityIndices: ambgIndices,\n prefixPath: currAmbPathAndIdx.path\n })\n return {\n message: message,\n type: ParserDefinitionErrorType.AMBIGUOUS_PREFIX_ALTS,\n ruleName: rule.name,\n occurrence: occurrence,\n alternatives: ambgIndices\n }\n }\n )\n errors = errors.concat(currPathPrefixErrors)\n })\n\n return errors\n}\n\nfunction checkTerminalAndNoneTerminalsNameSpace(\n topLevels: Rule[],\n tokenTypes: TokenType[],\n errMsgProvider: IGrammarValidatorErrorMessageProvider\n): IParserDefinitionError[] {\n let errors = []\n\n let tokenNames = map(tokenTypes, (currToken) => currToken.name)\n\n forEach(topLevels, (currRule) => {\n const currRuleName = currRule.name\n if (contains(tokenNames, currRuleName)) {\n let errMsg = errMsgProvider.buildNamespaceConflictError(currRule)\n\n errors.push({\n message: errMsg,\n type: ParserDefinitionErrorType.CONFLICT_TOKENS_RULES_NAMESPACE,\n ruleName: currRuleName\n })\n }\n })\n\n return errors\n}\n","import { Rule } from \"./gast_public\"\n\nimport { defaults, forEach } from \"../../../utils/utils\"\nimport { resolveGrammar as orgResolveGrammar } from \"../resolver\"\nimport { validateGrammar as orgValidateGrammar } from \"../checks\"\nimport {\n defaultGrammarResolverErrorProvider,\n defaultGrammarValidatorErrorProvider\n} from \"../../errors_public\"\nimport { DslMethodsCollectorVisitor } from \"./gast\"\nimport {\n IGrammarResolverErrorMessageProvider,\n IGrammarValidatorErrorMessageProvider,\n IParserDefinitionError,\n IProductionWithOccurrence,\n TokenType\n} from \"../../../../api\"\n\nexport function resolveGrammar(options: {\n rules: Rule[]\n errMsgProvider?: IGrammarResolverErrorMessageProvider\n}): IParserDefinitionError[] {\n options = defaults(options, {\n errMsgProvider: defaultGrammarResolverErrorProvider\n })\n\n const topRulesTable = {}\n forEach(options.rules, (rule) => {\n topRulesTable[rule.name] = rule\n })\n return orgResolveGrammar(topRulesTable, options.errMsgProvider)\n}\n\nexport function validateGrammar(options: {\n rules: Rule[]\n maxLookahead: number\n tokenTypes: TokenType[]\n grammarName: string\n errMsgProvider: IGrammarValidatorErrorMessageProvider\n}): IParserDefinitionError[] {\n options = defaults(options, {\n errMsgProvider: defaultGrammarValidatorErrorProvider\n })\n\n return orgValidateGrammar(\n options.rules,\n options.maxLookahead,\n options.tokenTypes,\n options.errMsgProvider,\n options.grammarName\n )\n}\n\nexport function assignOccurrenceIndices(options: { rules: Rule[] }): void {\n forEach(options.rules, (currRule) => {\n const methodsCollector = new DslMethodsCollectorVisitor()\n currRule.accept(methodsCollector)\n forEach(methodsCollector.dslMethods, (methods) => {\n forEach(methods, (currMethod: IProductionWithOccurrence, arrIdx) => {\n currMethod.idx = arrIdx + 1\n })\n })\n })\n}\n","import { contains } from \"../utils/utils\"\nimport { IToken, IRecognitionException, IRecognizerContext } from \"../../api\"\n\nconst MISMATCHED_TOKEN_EXCEPTION = \"MismatchedTokenException\"\nconst NO_VIABLE_ALT_EXCEPTION = \"NoViableAltException\"\nconst EARLY_EXIT_EXCEPTION = \"EarlyExitException\"\nconst NOT_ALL_INPUT_PARSED_EXCEPTION = \"NotAllInputParsedException\"\n\nconst RECOGNITION_EXCEPTION_NAMES = [\n MISMATCHED_TOKEN_EXCEPTION,\n NO_VIABLE_ALT_EXCEPTION,\n EARLY_EXIT_EXCEPTION,\n NOT_ALL_INPUT_PARSED_EXCEPTION\n]\n\nObject.freeze(RECOGNITION_EXCEPTION_NAMES)\n\n// hacks to bypass no support for custom Errors in javascript/typescript\nexport function isRecognitionException(error: Error) {\n // can't do instanceof on hacked custom js exceptions\n return contains(RECOGNITION_EXCEPTION_NAMES, error.name)\n}\n\nabstract class RecognitionException\n extends Error\n implements IRecognitionException {\n context: IRecognizerContext\n resyncedTokens = []\n\n protected constructor(message: string, public token: IToken) {\n super(message)\n\n // fix prototype chain when typescript target is ES5\n Object.setPrototypeOf(this, new.target.prototype)\n\n /* istanbul ignore next - V8 workaround to remove constructor from stacktrace when typescript target is ES5 */\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor)\n }\n }\n}\n\nexport class MismatchedTokenException extends RecognitionException {\n constructor(message: string, token: IToken, public previousToken: IToken) {\n super(message, token)\n this.name = MISMATCHED_TOKEN_EXCEPTION\n }\n}\n\nexport class NoViableAltException extends RecognitionException {\n constructor(message: string, token: IToken, public previousToken: IToken) {\n super(message, token)\n this.name = NO_VIABLE_ALT_EXCEPTION\n }\n}\n\nexport class NotAllInputParsedException extends RecognitionException {\n constructor(message: string, token: IToken) {\n super(message, token)\n this.name = NOT_ALL_INPUT_PARSED_EXCEPTION\n }\n}\n\nexport class EarlyExitException extends RecognitionException {\n constructor(message: string, token: IToken, public previousToken: IToken) {\n super(message, token)\n this.name = EARLY_EXIT_EXCEPTION\n }\n}\n","import { createTokenInstance, EOF } from \"../../../scan/tokens_public\"\nimport {\n AbstractNextTerminalAfterProductionWalker,\n IFirstAfterRepetition\n} from \"../../grammar/interpreter\"\nimport {\n cloneArr,\n contains,\n dropRight,\n find,\n flatten,\n has,\n isEmpty,\n map\n} from \"../../../utils/utils\"\nimport {\n IParserConfig,\n IToken,\n ITokenGrammarPath,\n TokenType\n} from \"../../../../api\"\nimport { MismatchedTokenException } from \"../../exceptions_public\"\nimport { IN } from \"../../constants\"\nimport { MixedInParser } from \"./parser_traits\"\nimport { DEFAULT_PARSER_CONFIG } from \"../parser\"\n\nexport const EOF_FOLLOW_KEY: any = {}\n\nexport interface IFollowKey {\n ruleName: string\n idxInCallingRule: number\n inRule: string\n}\n\nexport const IN_RULE_RECOVERY_EXCEPTION = \"InRuleRecoveryException\"\n\nexport function InRuleRecoveryException(message: string) {\n this.name = IN_RULE_RECOVERY_EXCEPTION\n this.message = message\n}\n\nInRuleRecoveryException.prototype = Error.prototype\n\n/**\n * This trait is responsible for the error recovery and fault tolerant logic\n */\nexport class Recoverable {\n recoveryEnabled: boolean\n firstAfterRepMap: Record\n resyncFollows: Record\n\n initRecoverable(config: IParserConfig) {\n this.firstAfterRepMap = {}\n this.resyncFollows = {}\n\n this.recoveryEnabled = has(config, \"recoveryEnabled\")\n ? config.recoveryEnabled\n : DEFAULT_PARSER_CONFIG.recoveryEnabled\n\n // performance optimization, NOOP will be inlined which\n // effectively means that this optional feature does not exist\n // when not used.\n if (this.recoveryEnabled) {\n this.attemptInRepetitionRecovery = attemptInRepetitionRecovery\n }\n }\n\n public getTokenToInsert(tokType: TokenType): IToken {\n let tokToInsert = createTokenInstance(\n tokType,\n \"\",\n NaN,\n NaN,\n NaN,\n NaN,\n NaN,\n NaN\n )\n tokToInsert.isInsertedInRecovery = true\n return tokToInsert\n }\n\n public canTokenTypeBeInsertedInRecovery(tokType: TokenType) {\n return true\n }\n\n tryInRepetitionRecovery(\n this: MixedInParser,\n grammarRule: Function,\n grammarRuleArgs: any[],\n lookAheadFunc: () => boolean,\n expectedTokType: TokenType\n ): void {\n // TODO: can the resyncTokenType be cached?\n let reSyncTokType = this.findReSyncTokenType()\n let savedLexerState = this.exportLexerState()\n let resyncedTokens = []\n let passedResyncPoint = false\n\n let nextTokenWithoutResync = this.LA(1)\n let currToken = this.LA(1)\n\n let generateErrorMessage = () => {\n let previousToken = this.LA(0)\n // we are preemptively re-syncing before an error has been detected, therefor we must reproduce\n // the error that would have been thrown\n let msg = this.errorMessageProvider.buildMismatchTokenMessage({\n expected: expectedTokType,\n actual: nextTokenWithoutResync,\n previous: previousToken,\n ruleName: this.getCurrRuleFullName()\n })\n let error = new MismatchedTokenException(\n msg,\n nextTokenWithoutResync,\n this.LA(0)\n )\n // the first token here will be the original cause of the error, this is not part of the resyncedTokens property.\n error.resyncedTokens = dropRight(resyncedTokens)\n this.SAVE_ERROR(error)\n }\n\n while (!passedResyncPoint) {\n // re-synced to a point where we can safely exit the repetition/\n if (this.tokenMatcher(currToken, expectedTokType)) {\n generateErrorMessage()\n return // must return here to avoid reverting the inputIdx\n } else if (lookAheadFunc.call(this)) {\n // we skipped enough tokens so we can resync right back into another iteration of the repetition grammar rule\n generateErrorMessage()\n // recursive invocation in other to support multiple re-syncs in the same top level repetition grammar rule\n grammarRule.apply(this, grammarRuleArgs)\n return // must return here to avoid reverting the inputIdx\n } else if (this.tokenMatcher(currToken, reSyncTokType)) {\n passedResyncPoint = true\n } else {\n currToken = this.SKIP_TOKEN()\n this.addToResyncTokens(currToken, resyncedTokens)\n }\n }\n\n // we were unable to find a CLOSER point to resync inside the Repetition, reset the state.\n // The parsing exception we were trying to prevent will happen in the NEXT parsing step. it may be handled by\n // \"between rules\" resync recovery later in the flow.\n this.importLexerState(savedLexerState)\n }\n\n shouldInRepetitionRecoveryBeTried(\n this: MixedInParser,\n expectTokAfterLastMatch: TokenType,\n nextTokIdx: number,\n notStuck: boolean | undefined\n ): boolean {\n // Edge case of arriving from a MANY repetition which is stuck\n // Attempting recovery in this case could cause an infinite loop\n if (notStuck === false) {\n return false\n }\n\n // arguments to try and perform resync into the next iteration of the many are missing\n if (expectTokAfterLastMatch === undefined || nextTokIdx === undefined) {\n return false\n }\n\n // no need to recover, next token is what we expect...\n if (this.tokenMatcher(this.LA(1), expectTokAfterLastMatch)) {\n return false\n }\n\n // error recovery is disabled during backtracking as it can make the parser ignore a valid grammar path\n // and prefer some backtracking path that includes recovered errors.\n if (this.isBackTracking()) {\n return false\n }\n\n // if we can perform inRule recovery (single token insertion or deletion) we always prefer that recovery algorithm\n // because if it works, it makes the least amount of changes to the input stream (greedy algorithm)\n //noinspection RedundantIfStatementJS\n if (\n this.canPerformInRuleRecovery(\n expectTokAfterLastMatch,\n this.getFollowsForInRuleRecovery(expectTokAfterLastMatch, nextTokIdx)\n )\n ) {\n return false\n }\n\n return true\n }\n\n // Error Recovery functionality\n getFollowsForInRuleRecovery(\n this: MixedInParser,\n tokType: TokenType,\n tokIdxInRule: number\n ): TokenType[] {\n let grammarPath = this.getCurrentGrammarPath(tokType, tokIdxInRule)\n let follows = this.getNextPossibleTokenTypes(grammarPath)\n return follows\n }\n\n tryInRuleRecovery(\n this: MixedInParser,\n expectedTokType: TokenType,\n follows: TokenType[]\n ): IToken {\n if (this.canRecoverWithSingleTokenInsertion(expectedTokType, follows)) {\n let tokToInsert = this.getTokenToInsert(expectedTokType)\n return tokToInsert\n }\n\n if (this.canRecoverWithSingleTokenDeletion(expectedTokType)) {\n let nextTok = this.SKIP_TOKEN()\n this.consumeToken()\n return nextTok\n }\n\n throw new InRuleRecoveryException(\"sad sad panda\")\n }\n\n canPerformInRuleRecovery(\n this: MixedInParser,\n expectedToken: TokenType,\n follows: TokenType[]\n ): boolean {\n return (\n this.canRecoverWithSingleTokenInsertion(expectedToken, follows) ||\n this.canRecoverWithSingleTokenDeletion(expectedToken)\n )\n }\n\n canRecoverWithSingleTokenInsertion(\n this: MixedInParser,\n expectedTokType: TokenType,\n follows: TokenType[]\n ): boolean {\n if (!this.canTokenTypeBeInsertedInRecovery(expectedTokType)) {\n return false\n }\n\n // must know the possible following tokens to perform single token insertion\n if (isEmpty(follows)) {\n return false\n }\n\n let mismatchedTok = this.LA(1)\n let isMisMatchedTokInFollows =\n find(follows, (possibleFollowsTokType: TokenType) => {\n return this.tokenMatcher(mismatchedTok, possibleFollowsTokType)\n }) !== undefined\n\n return isMisMatchedTokInFollows\n }\n\n canRecoverWithSingleTokenDeletion(\n this: MixedInParser,\n expectedTokType: TokenType\n ): boolean {\n let isNextTokenWhatIsExpected = this.tokenMatcher(\n this.LA(2),\n expectedTokType\n )\n return isNextTokenWhatIsExpected\n }\n\n isInCurrentRuleReSyncSet(\n this: MixedInParser,\n tokenTypeIdx: TokenType\n ): boolean {\n let followKey = this.getCurrFollowKey()\n let currentRuleReSyncSet = this.getFollowSetFromFollowKey(followKey)\n return contains(currentRuleReSyncSet, tokenTypeIdx)\n }\n\n findReSyncTokenType(this: MixedInParser): TokenType {\n let allPossibleReSyncTokTypes = this.flattenFollowSet()\n // this loop will always terminate as EOF is always in the follow stack and also always (virtually) in the input\n let nextToken = this.LA(1)\n let k = 2\n while (true) {\n let nextTokenType: any = nextToken.tokenType\n if (contains(allPossibleReSyncTokTypes, nextTokenType)) {\n return nextTokenType\n }\n nextToken = this.LA(k)\n k++\n }\n }\n\n getCurrFollowKey(this: MixedInParser): IFollowKey {\n // the length is at least one as we always add the ruleName to the stack before invoking the rule.\n if (this.RULE_STACK.length === 1) {\n return EOF_FOLLOW_KEY\n }\n let currRuleShortName = this.getLastExplicitRuleShortName()\n let currRuleIdx = this.getLastExplicitRuleOccurrenceIndex()\n let prevRuleShortName = this.getPreviousExplicitRuleShortName()\n\n return {\n ruleName: this.shortRuleNameToFullName(currRuleShortName),\n idxInCallingRule: currRuleIdx,\n inRule: this.shortRuleNameToFullName(prevRuleShortName)\n }\n }\n\n buildFullFollowKeyStack(this: MixedInParser): IFollowKey[] {\n let explicitRuleStack = this.RULE_STACK\n let explicitOccurrenceStack = this.RULE_OCCURRENCE_STACK\n\n return map(explicitRuleStack, (ruleName, idx) => {\n if (idx === 0) {\n return EOF_FOLLOW_KEY\n }\n return {\n ruleName: this.shortRuleNameToFullName(ruleName),\n idxInCallingRule: explicitOccurrenceStack[idx],\n inRule: this.shortRuleNameToFullName(explicitRuleStack[idx - 1])\n }\n })\n }\n\n flattenFollowSet(this: MixedInParser): TokenType[] {\n let followStack = map(this.buildFullFollowKeyStack(), (currKey) => {\n return this.getFollowSetFromFollowKey(currKey)\n })\n return flatten(followStack)\n }\n\n getFollowSetFromFollowKey(\n this: MixedInParser,\n followKey: IFollowKey\n ): TokenType[] {\n if (followKey === EOF_FOLLOW_KEY) {\n return [EOF]\n }\n\n let followName =\n followKey.ruleName + followKey.idxInCallingRule + IN + followKey.inRule\n\n return this.resyncFollows[followName]\n }\n\n // It does not make any sense to include a virtual EOF token in the list of resynced tokens\n // as EOF does not really exist and thus does not contain any useful information (line/column numbers)\n addToResyncTokens(\n this: MixedInParser,\n token: IToken,\n resyncTokens: IToken[]\n ): IToken[] {\n if (!this.tokenMatcher(token, EOF)) {\n resyncTokens.push(token)\n }\n return resyncTokens\n }\n\n reSyncTo(this: MixedInParser, tokType: TokenType): IToken[] {\n let resyncedTokens = []\n let nextTok = this.LA(1)\n while (this.tokenMatcher(nextTok, tokType) === false) {\n nextTok = this.SKIP_TOKEN()\n this.addToResyncTokens(nextTok, resyncedTokens)\n }\n // the last token is not part of the error.\n return dropRight(resyncedTokens)\n }\n\n attemptInRepetitionRecovery(\n this: MixedInParser,\n prodFunc: Function,\n args: any[],\n lookaheadFunc: () => boolean,\n dslMethodIdx: number,\n prodOccurrence: number,\n nextToksWalker: typeof AbstractNextTerminalAfterProductionWalker,\n notStuck?: boolean\n ): void {\n // by default this is a NO-OP\n // The actual implementation is with the function(not method) below\n }\n\n getCurrentGrammarPath(\n this: MixedInParser,\n tokType: TokenType,\n tokIdxInRule: number\n ): ITokenGrammarPath {\n let pathRuleStack: string[] = this.getHumanReadableRuleStack()\n let pathOccurrenceStack: number[] = cloneArr(this.RULE_OCCURRENCE_STACK)\n let grammarPath: any = {\n ruleStack: pathRuleStack,\n occurrenceStack: pathOccurrenceStack,\n lastTok: tokType,\n lastTokOccurrence: tokIdxInRule\n }\n\n return grammarPath\n }\n getHumanReadableRuleStack(this: MixedInParser): string[] {\n return map(this.RULE_STACK, (currShortName) =>\n this.shortRuleNameToFullName(currShortName)\n )\n }\n}\n\nexport function attemptInRepetitionRecovery(\n this: MixedInParser,\n prodFunc: Function,\n args: any[],\n lookaheadFunc: () => boolean,\n dslMethodIdx: number,\n prodOccurrence: number,\n nextToksWalker: typeof AbstractNextTerminalAfterProductionWalker,\n notStuck?: boolean\n) {\n let key = this.getKeyForAutomaticLookahead(dslMethodIdx, prodOccurrence)\n let firstAfterRepInfo = this.firstAfterRepMap[key]\n if (firstAfterRepInfo === undefined) {\n let currRuleName = this.getCurrRuleFullName()\n let ruleGrammar = this.getGAstProductions()[currRuleName]\n let walker: AbstractNextTerminalAfterProductionWalker = new nextToksWalker(\n ruleGrammar,\n prodOccurrence\n )\n firstAfterRepInfo = walker.startWalking()\n this.firstAfterRepMap[key] = firstAfterRepInfo\n }\n\n let expectTokAfterLastMatch = firstAfterRepInfo.token\n let nextTokIdx = firstAfterRepInfo.occurrence\n let isEndOfRule = firstAfterRepInfo.isEndOfRule\n\n // special edge case of a TOP most repetition after which the input should END.\n // this will force an attempt for inRule recovery in that scenario.\n if (\n this.RULE_STACK.length === 1 &&\n isEndOfRule &&\n expectTokAfterLastMatch === undefined\n ) {\n expectTokAfterLastMatch = EOF\n nextTokIdx = 1\n }\n\n if (\n this.shouldInRepetitionRecoveryBeTried(\n expectTokAfterLastMatch,\n nextTokIdx,\n notStuck\n )\n ) {\n // TODO: performance optimization: instead of passing the original args here, we modify\n // the args param (or create a new one) and make sure the lookahead func is explicitly provided\n // to avoid searching the cache for it once more.\n this.tryInRepetitionRecovery(\n prodFunc,\n args,\n lookaheadFunc,\n expectTokAfterLastMatch\n )\n }\n}\n","// Lookahead keys are 32Bit integers in the form\n// TTTTTTTT-ZZZZZZZZZZZZ-YYYY-XXXXXXXX\n// XXXX -> Occurrence Index bitmap.\n// YYYY -> DSL Method Type bitmap.\n// ZZZZZZZZZZZZZZZ -> Rule short Index bitmap.\n// TTTTTTTTT -> alternation alternative index bitmap\n\nexport const BITS_FOR_METHOD_TYPE = 4\nexport const BITS_FOR_OCCURRENCE_IDX = 8\nexport const BITS_FOR_RULE_IDX = 12\n// TODO: validation, this means that there may at most 2^8 --> 256 alternatives for an alternation.\nexport const BITS_FOR_ALT_IDX = 8\n\n// short string used as part of mapping keys.\n// being short improves the performance when composing KEYS for maps out of these\n// The 5 - 8 bits (16 possible values, are reserved for the DSL method indices)\n/* tslint:disable */\nexport const OR_IDX = 1 << BITS_FOR_OCCURRENCE_IDX\nexport const OPTION_IDX = 2 << BITS_FOR_OCCURRENCE_IDX\nexport const MANY_IDX = 3 << BITS_FOR_OCCURRENCE_IDX\nexport const AT_LEAST_ONE_IDX = 4 << BITS_FOR_OCCURRENCE_IDX\nexport const MANY_SEP_IDX = 5 << BITS_FOR_OCCURRENCE_IDX\nexport const AT_LEAST_ONE_SEP_IDX = 6 << BITS_FOR_OCCURRENCE_IDX\n/* tslint:enable */\n\n// this actually returns a number, but it is always used as a string (object prop key)\nexport function getKeyForAutomaticLookahead(\n ruleIdx: number,\n dslMethodIdx: number,\n occurrence: number\n): number {\n /* tslint:disable */\n return occurrence | dslMethodIdx | ruleIdx\n /* tslint:enable */\n}\n\nconst BITS_START_FOR_ALT_IDX = 32 - BITS_FOR_ALT_IDX\n","import {\n buildAlternativesLookAheadFunc,\n buildLookaheadFuncForOptionalProd,\n buildLookaheadFuncForOr,\n buildSingleAlternativeLookaheadFunction,\n PROD_TYPE\n} from \"../../grammar/lookahead\"\nimport { forEach, has, isES2015MapSupported } from \"../../../utils/utils\"\nimport {\n DEFAULT_PARSER_CONFIG,\n lookAheadSequence,\n TokenMatcher\n} from \"../parser\"\nimport { IOrAlt, IParserConfig } from \"../../../../api\"\nimport {\n AT_LEAST_ONE_IDX,\n AT_LEAST_ONE_SEP_IDX,\n getKeyForAutomaticLookahead,\n MANY_IDX,\n MANY_SEP_IDX,\n OPTION_IDX,\n OR_IDX\n} from \"../../grammar/keys\"\nimport { MixedInParser } from \"./parser_traits\"\nimport { Rule } from \"../../grammar/gast/gast_public\"\nimport { collectMethods, getProductionDslName } from \"../../grammar/gast/gast\"\n\n/**\n * Trait responsible for the lookahead related utilities and optimizations.\n */\nexport class LooksAhead {\n maxLookahead: number\n lookAheadFuncsCache: any\n dynamicTokensEnabled: boolean\n\n initLooksAhead(config: IParserConfig) {\n this.dynamicTokensEnabled = has(config, \"dynamicTokensEnabled\")\n ? config.dynamicTokensEnabled\n : DEFAULT_PARSER_CONFIG.dynamicTokensEnabled\n\n this.maxLookahead = has(config, \"maxLookahead\")\n ? config.maxLookahead\n : DEFAULT_PARSER_CONFIG.maxLookahead\n\n /* istanbul ignore next - Using plain array as dictionary will be tested on older node.js versions and IE11 */\n this.lookAheadFuncsCache = isES2015MapSupported() ? new Map() : []\n\n // Performance optimization on newer engines that support ES6 Map\n // For larger Maps this is slightly faster than using a plain object (array in our case).\n /* istanbul ignore else - The else branch will be tested on older node.js versions and IE11 */\n if (isES2015MapSupported()) {\n this.getLaFuncFromCache = this.getLaFuncFromMap\n this.setLaFuncCache = this.setLaFuncCacheUsingMap\n } else {\n this.getLaFuncFromCache = this.getLaFuncFromObj\n this.setLaFuncCache = this.setLaFuncUsingObj\n }\n }\n\n preComputeLookaheadFunctions(this: MixedInParser, rules: Rule[]): void {\n forEach(rules, (currRule) => {\n this.TRACE_INIT(`${currRule.name} Rule Lookahead`, () => {\n const {\n alternation,\n repetition,\n option,\n repetitionMandatory,\n repetitionMandatoryWithSeparator,\n repetitionWithSeparator\n } = collectMethods(currRule)\n\n forEach(alternation, (currProd) => {\n const prodIdx = currProd.idx === 0 ? \"\" : currProd.idx\n this.TRACE_INIT(`${getProductionDslName(currProd)}${prodIdx}`, () => {\n const laFunc = buildLookaheadFuncForOr(\n currProd.idx,\n currRule,\n currProd.maxLookahead || this.maxLookahead,\n currProd.hasPredicates,\n this.dynamicTokensEnabled,\n this.lookAheadBuilderForAlternatives\n )\n\n const key = getKeyForAutomaticLookahead(\n this.fullRuleNameToShort[currRule.name],\n OR_IDX,\n currProd.idx\n )\n this.setLaFuncCache(key, laFunc)\n })\n })\n\n forEach(repetition, (currProd) => {\n this.computeLookaheadFunc(\n currRule,\n currProd.idx,\n MANY_IDX,\n PROD_TYPE.REPETITION,\n currProd.maxLookahead,\n getProductionDslName(currProd)\n )\n })\n\n forEach(option, (currProd) => {\n this.computeLookaheadFunc(\n currRule,\n currProd.idx,\n OPTION_IDX,\n PROD_TYPE.OPTION,\n currProd.maxLookahead,\n getProductionDslName(currProd)\n )\n })\n\n forEach(repetitionMandatory, (currProd) => {\n this.computeLookaheadFunc(\n currRule,\n currProd.idx,\n AT_LEAST_ONE_IDX,\n PROD_TYPE.REPETITION_MANDATORY,\n currProd.maxLookahead,\n getProductionDslName(currProd)\n )\n })\n\n forEach(repetitionMandatoryWithSeparator, (currProd) => {\n this.computeLookaheadFunc(\n currRule,\n currProd.idx,\n AT_LEAST_ONE_SEP_IDX,\n PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR,\n currProd.maxLookahead,\n getProductionDslName(currProd)\n )\n })\n\n forEach(repetitionWithSeparator, (currProd) => {\n this.computeLookaheadFunc(\n currRule,\n currProd.idx,\n MANY_SEP_IDX,\n PROD_TYPE.REPETITION_WITH_SEPARATOR,\n currProd.maxLookahead,\n getProductionDslName(currProd)\n )\n })\n })\n })\n }\n\n computeLookaheadFunc(\n this: MixedInParser,\n rule: Rule,\n prodOccurrence: number,\n prodKey: number,\n prodType: PROD_TYPE,\n prodMaxLookahead: number,\n dslMethodName: string\n ): void {\n this.TRACE_INIT(\n `${dslMethodName}${prodOccurrence === 0 ? \"\" : prodOccurrence}`,\n () => {\n const laFunc = buildLookaheadFuncForOptionalProd(\n prodOccurrence,\n rule,\n prodMaxLookahead || this.maxLookahead,\n this.dynamicTokensEnabled,\n prodType,\n this.lookAheadBuilderForOptional\n )\n const key = getKeyForAutomaticLookahead(\n this.fullRuleNameToShort[rule.name],\n prodKey,\n prodOccurrence\n )\n this.setLaFuncCache(key, laFunc)\n }\n )\n }\n\n lookAheadBuilderForOptional(\n this: MixedInParser,\n alt: lookAheadSequence,\n tokenMatcher: TokenMatcher,\n dynamicTokensEnabled: boolean\n ): () => boolean {\n return buildSingleAlternativeLookaheadFunction(\n alt,\n tokenMatcher,\n dynamicTokensEnabled\n )\n }\n\n lookAheadBuilderForAlternatives(\n this: MixedInParser,\n alts: lookAheadSequence[],\n hasPredicates: boolean,\n tokenMatcher: TokenMatcher,\n dynamicTokensEnabled: boolean\n ): (orAlts?: IOrAlt[]) => number | undefined {\n return buildAlternativesLookAheadFunc(\n alts,\n hasPredicates,\n tokenMatcher,\n dynamicTokensEnabled\n )\n }\n\n // this actually returns a number, but it is always used as a string (object prop key)\n getKeyForAutomaticLookahead(\n this: MixedInParser,\n dslMethodIdx: number,\n occurrence: number\n ): number {\n let currRuleShortName: any = this.getLastExplicitRuleShortName()\n return getKeyForAutomaticLookahead(\n currRuleShortName,\n dslMethodIdx,\n occurrence\n )\n }\n\n /* istanbul ignore next */\n getLaFuncFromCache(this: MixedInParser, key: number): Function {\n return undefined\n }\n\n getLaFuncFromMap(this: MixedInParser, key: number): Function {\n return this.lookAheadFuncsCache.get(key)\n }\n\n /* istanbul ignore next - Using plain array as dictionary will be tested on older node.js versions and IE11 */\n getLaFuncFromObj(this: MixedInParser, key: number): Function {\n return this.lookAheadFuncsCache[key]\n }\n\n /* istanbul ignore next */\n setLaFuncCache(this: MixedInParser, key: number, value: Function): void {}\n\n setLaFuncCacheUsingMap(\n this: MixedInParser,\n key: number,\n value: Function\n ): void {\n this.lookAheadFuncsCache.set(key, value)\n }\n\n /* istanbul ignore next - Using plain array as dictionary will be tested on older node.js versions and IE11 */\n setLaFuncUsingObj(this: MixedInParser, key: number, value: Function): void {\n this.lookAheadFuncsCache[key] = value\n }\n}\n","import { CstNode, CstNodeLocation, IToken } from \"../../../api\"\n\n/**\n * This nodeLocation tracking is not efficient and should only be used\n * when error recovery is enabled or the Token Vector contains virtual Tokens\n * (e.g, Python Indent/Outdent)\n * As it executes the calculation for every single terminal/nonTerminal\n * and does not rely on the fact the token vector is **sorted**\n */\nexport function setNodeLocationOnlyOffset(\n currNodeLocation: CstNodeLocation,\n newLocationInfo: IToken\n): void {\n // First (valid) update for this cst node\n if (isNaN(currNodeLocation.startOffset) === true) {\n // assumption1: Token location information is either NaN or a valid number\n // assumption2: Token location information is fully valid if it exist\n // (both start/end offsets exist and are numbers).\n currNodeLocation.startOffset = newLocationInfo.startOffset\n currNodeLocation.endOffset = newLocationInfo.endOffset\n }\n // Once the startOffset has been updated with a valid number it should never receive\n // any farther updates as the Token vector is sorted.\n // We still have to check this this condition for every new possible location info\n // because with error recovery enabled we may encounter invalid tokens (NaN location props)\n else if (currNodeLocation.endOffset < newLocationInfo.endOffset === true) {\n currNodeLocation.endOffset = newLocationInfo.endOffset\n }\n}\n\n/**\n * This nodeLocation tracking is not efficient and should only be used\n * when error recovery is enabled or the Token Vector contains virtual Tokens\n * (e.g, Python Indent/Outdent)\n * As it executes the calculation for every single terminal/nonTerminal\n * and does not rely on the fact the token vector is **sorted**\n */\nexport function setNodeLocationFull(\n currNodeLocation: CstNodeLocation,\n newLocationInfo: CstNodeLocation\n): void {\n // First (valid) update for this cst node\n if (isNaN(currNodeLocation.startOffset) === true) {\n // assumption1: Token location information is either NaN or a valid number\n // assumption2: Token location information is fully valid if it exist\n // (all start/end props exist and are numbers).\n currNodeLocation.startOffset = newLocationInfo.startOffset\n currNodeLocation.startColumn = newLocationInfo.startColumn\n currNodeLocation.startLine = newLocationInfo.startLine\n currNodeLocation.endOffset = newLocationInfo.endOffset\n currNodeLocation.endColumn = newLocationInfo.endColumn\n currNodeLocation.endLine = newLocationInfo.endLine\n }\n // Once the start props has been updated with a valid number it should never receive\n // any farther updates as the Token vector is sorted.\n // We still have to check this this condition for every new possible location info\n // because with error recovery enabled we may encounter invalid tokens (NaN location props)\n else if (currNodeLocation.endOffset < newLocationInfo.endOffset === true) {\n currNodeLocation.endOffset = newLocationInfo.endOffset\n currNodeLocation.endColumn = newLocationInfo.endColumn\n currNodeLocation.endLine = newLocationInfo.endLine\n }\n}\n\nexport function addTerminalToCst(\n node: CstNode,\n token: IToken,\n tokenTypeName: string\n): void {\n if (node.children[tokenTypeName] === undefined) {\n node.children[tokenTypeName] = [token]\n } else {\n node.children[tokenTypeName].push(token)\n }\n}\n\nexport function addNoneTerminalToCst(\n node: CstNode,\n ruleName: string,\n ruleResult: any\n): void {\n if (node.children[ruleName] === undefined) {\n node.children[ruleName] = [ruleResult]\n } else {\n node.children[ruleName].push(ruleResult)\n }\n}\n","import { TokenType } from \"../../api\"\nimport { isUndefined } from \"../utils/utils\"\n\nexport function classNameFromInstance(instance: any): string {\n return functionName(instance.constructor)\n}\n\nconst NAME = \"name\"\n\n/**\n * Utility to obtain Function names.\n * Note that there should not be an assumptions on the result of this function.\n * E.g: When running from minified source code the result may be auto generated.\n */\nexport function functionName(func: TokenType): string {\n // Engines that support Function.prototype.name OR the nth (n>1) time after\n // the name has been computed in the following else block.\n let existingNameProp = (func).name\n /* istanbul ignore else - too many hacks for IE/old versions of node.js here*/\n if (existingNameProp) {\n return existingNameProp\n } else {\n return \"anonymous\"\n }\n}\n\n/**\n * @returns {boolean} - has the property been successfully defined\n */\nexport function defineNameProp(obj, nameValue): boolean {\n let namePropDescriptor = Object.getOwnPropertyDescriptor(obj, NAME)\n /* istanbul ignore else -> will only run in old versions of node.js */\n if (isUndefined(namePropDescriptor) || namePropDescriptor.configurable) {\n Object.defineProperty(obj, NAME, {\n enumerable: false,\n configurable: true,\n writable: false,\n value: nameValue\n })\n\n return true\n }\n /* istanbul ignore next -> will only run in old versions of node.js */\n return false\n}\n","import {\n compact,\n contains,\n forEach,\n isArray,\n isEmpty,\n isFunction,\n isUndefined,\n keys,\n map\n} from \"../../utils/utils\"\nimport { defineNameProp, functionName } from \"../../lang/lang_extensions\"\nimport { ICstVisitor } from \"../../../api\"\n\nexport function defaultVisit(ctx: any, param: IN): OUT {\n let childrenNames = keys(ctx)\n let childrenNamesLength = childrenNames.length\n for (let i = 0; i < childrenNamesLength; i++) {\n let currChildName = childrenNames[i]\n let currChildArray = ctx[currChildName]\n let currChildArrayLength = currChildArray.length\n for (let j = 0; j < currChildArrayLength; j++) {\n let currChild: any = currChildArray[j]\n // distinction between Tokens Children and CstNode children\n if (currChild.tokenTypeIdx === undefined) {\n this[currChild.name](currChild.children, param)\n }\n }\n }\n // defaultVisit does not support generic out param\n return undefined\n}\n\nexport function createBaseSemanticVisitorConstructor(\n grammarName: string,\n ruleNames: string[]\n): {\n new (...args: any[]): ICstVisitor\n} {\n let derivedConstructor: any = function () {}\n\n // can be overwritten according to:\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/\n // name?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FFunction%2Fname\n defineNameProp(derivedConstructor, grammarName + \"BaseSemantics\")\n\n let semanticProto = {\n visit: function (cstNode, param) {\n // enables writing more concise visitor methods when CstNode has only a single child\n if (isArray(cstNode)) {\n // A CST Node's children dictionary can never have empty arrays as values\n // If a key is defined there will be at least one element in the corresponding value array.\n cstNode = cstNode[0]\n }\n\n // enables passing optional CstNodes concisely.\n if (isUndefined(cstNode)) {\n return undefined\n }\n\n return this[cstNode.name](cstNode.children, param)\n },\n\n validateVisitor: function () {\n let semanticDefinitionErrors = validateVisitor(this, ruleNames)\n if (!isEmpty(semanticDefinitionErrors)) {\n let errorMessages = map(\n semanticDefinitionErrors,\n (currDefError) => currDefError.msg\n )\n throw Error(\n `Errors Detected in CST Visitor <${functionName(\n this.constructor\n )}>:\\n\\t` + `${errorMessages.join(\"\\n\\n\").replace(/\\n/g, \"\\n\\t\")}`\n )\n }\n }\n }\n\n derivedConstructor.prototype = semanticProto\n derivedConstructor.prototype.constructor = derivedConstructor\n\n derivedConstructor._RULE_NAMES = ruleNames\n\n return derivedConstructor\n}\n\nexport function createBaseVisitorConstructorWithDefaults(\n grammarName: string,\n ruleNames: string[],\n baseConstructor: Function\n): {\n new (...args: any[]): ICstVisitor\n} {\n let derivedConstructor: any = function () {}\n\n // can be overwritten according to:\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/\n // name?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FFunction%2Fname\n defineNameProp(derivedConstructor, grammarName + \"BaseSemanticsWithDefaults\")\n\n let withDefaultsProto = Object.create(baseConstructor.prototype)\n forEach(ruleNames, (ruleName) => {\n withDefaultsProto[ruleName] = defaultVisit\n })\n\n derivedConstructor.prototype = withDefaultsProto\n derivedConstructor.prototype.constructor = derivedConstructor\n\n return derivedConstructor\n}\n\nexport enum CstVisitorDefinitionError {\n REDUNDANT_METHOD,\n MISSING_METHOD\n}\n\nexport interface IVisitorDefinitionError {\n msg: string\n type: CstVisitorDefinitionError\n methodName: string\n}\n\nexport function validateVisitor(\n visitorInstance: Function,\n ruleNames: string[]\n): IVisitorDefinitionError[] {\n let missingErrors = validateMissingCstMethods(visitorInstance, ruleNames)\n let redundantErrors = validateRedundantMethods(visitorInstance, ruleNames)\n\n return missingErrors.concat(redundantErrors)\n}\n\nexport function validateMissingCstMethods(\n visitorInstance: Function,\n ruleNames: string[]\n): IVisitorDefinitionError[] {\n let errors: IVisitorDefinitionError[] = map(ruleNames, (currRuleName) => {\n if (!isFunction(visitorInstance[currRuleName])) {\n return {\n msg: `Missing visitor method: <${currRuleName}> on ${functionName(\n visitorInstance.constructor\n )} CST Visitor.`,\n type: CstVisitorDefinitionError.MISSING_METHOD,\n methodName: currRuleName\n }\n }\n })\n\n return compact(errors)\n}\n\nconst VALID_PROP_NAMES = [\"constructor\", \"visit\", \"validateVisitor\"]\nexport function validateRedundantMethods(\n visitorInstance: Function,\n ruleNames: string[]\n): IVisitorDefinitionError[] {\n let errors = []\n\n for (let prop in visitorInstance) {\n if (\n isFunction(visitorInstance[prop]) &&\n !contains(VALID_PROP_NAMES, prop) &&\n !contains(ruleNames, prop)\n ) {\n errors.push({\n msg:\n `Redundant visitor method: <${prop}> on ${functionName(\n visitorInstance.constructor\n )} CST Visitor\\n` +\n `There is no Grammar Rule corresponding to this method's name.\\n`,\n type: CstVisitorDefinitionError.REDUNDANT_METHOD,\n methodName: prop\n })\n }\n }\n return errors\n}\n","import {\n addNoneTerminalToCst,\n addTerminalToCst,\n setNodeLocationFull,\n setNodeLocationOnlyOffset\n} from \"../../cst/cst\"\nimport { has, isUndefined, keys, NOOP } from \"../../../utils/utils\"\nimport {\n createBaseSemanticVisitorConstructor,\n createBaseVisitorConstructorWithDefaults\n} from \"../../cst/cst_visitor\"\nimport {\n CstNode,\n CstNodeLocation,\n ICstVisitor,\n IParserConfig,\n IToken,\n nodeLocationTrackingOptions\n} from \"../../../../api\"\nimport { MixedInParser } from \"./parser_traits\"\nimport { DEFAULT_PARSER_CONFIG } from \"../parser\"\n\n/**\n * This trait is responsible for the CST building logic.\n */\nexport class TreeBuilder {\n outputCst: boolean\n CST_STACK: CstNode[]\n baseCstVisitorConstructor: Function\n baseCstVisitorWithDefaultsConstructor: Function\n\n // dynamically assigned Methods\n setNodeLocationFromNode: (\n nodeLocation: CstNodeLocation,\n locationInformation: CstNodeLocation\n ) => void\n setNodeLocationFromToken: (\n nodeLocation: CstNodeLocation,\n locationInformation: CstNodeLocation\n ) => void\n cstPostRule: (this: MixedInParser, ruleCstNode: CstNode) => void\n\n setInitialNodeLocation: (cstNode: CstNode) => void\n nodeLocationTracking: nodeLocationTrackingOptions\n\n initTreeBuilder(this: MixedInParser, config: IParserConfig) {\n this.CST_STACK = []\n\n // outputCst is no longer exposed/defined in the pubic API\n this.outputCst = (config as any).outputCst\n\n this.nodeLocationTracking = has(config, \"nodeLocationTracking\")\n ? config.nodeLocationTracking\n : DEFAULT_PARSER_CONFIG.nodeLocationTracking\n\n if (!this.outputCst) {\n this.cstInvocationStateUpdate = NOOP\n this.cstFinallyStateUpdate = NOOP\n this.cstPostTerminal = NOOP\n this.cstPostNonTerminal = NOOP\n this.cstPostRule = NOOP\n } else {\n if (/full/i.test(this.nodeLocationTracking)) {\n if (this.recoveryEnabled) {\n this.setNodeLocationFromToken = setNodeLocationFull\n this.setNodeLocationFromNode = setNodeLocationFull\n this.cstPostRule = NOOP\n this.setInitialNodeLocation = this.setInitialNodeLocationFullRecovery\n } else {\n this.setNodeLocationFromToken = NOOP\n this.setNodeLocationFromNode = NOOP\n this.cstPostRule = this.cstPostRuleFull\n this.setInitialNodeLocation = this.setInitialNodeLocationFullRegular\n }\n } else if (/onlyOffset/i.test(this.nodeLocationTracking)) {\n if (this.recoveryEnabled) {\n this.setNodeLocationFromToken = setNodeLocationOnlyOffset\n this.setNodeLocationFromNode = setNodeLocationOnlyOffset\n this.cstPostRule = NOOP\n this.setInitialNodeLocation = this.setInitialNodeLocationOnlyOffsetRecovery\n } else {\n this.setNodeLocationFromToken = NOOP\n this.setNodeLocationFromNode = NOOP\n this.cstPostRule = this.cstPostRuleOnlyOffset\n this.setInitialNodeLocation = this.setInitialNodeLocationOnlyOffsetRegular\n }\n } else if (/none/i.test(this.nodeLocationTracking)) {\n this.setNodeLocationFromToken = NOOP\n this.setNodeLocationFromNode = NOOP\n this.cstPostRule = NOOP\n this.setInitialNodeLocation = NOOP\n } else {\n throw Error(\n `Invalid config option: \"${config.nodeLocationTracking}\"`\n )\n }\n }\n }\n\n setInitialNodeLocationOnlyOffsetRecovery(\n this: MixedInParser,\n cstNode: any\n ): void {\n cstNode.location = {\n startOffset: NaN,\n endOffset: NaN\n }\n }\n\n setInitialNodeLocationOnlyOffsetRegular(\n this: MixedInParser,\n cstNode: any\n ): void {\n cstNode.location = {\n // without error recovery the starting Location of a new CstNode is guaranteed\n // To be the next Token's startOffset (for valid inputs).\n // For invalid inputs there won't be any CSTOutput so this potential\n // inaccuracy does not matter\n startOffset: this.LA(1).startOffset,\n endOffset: NaN\n }\n }\n\n setInitialNodeLocationFullRecovery(this: MixedInParser, cstNode: any): void {\n cstNode.location = {\n startOffset: NaN,\n startLine: NaN,\n startColumn: NaN,\n endOffset: NaN,\n endLine: NaN,\n endColumn: NaN\n }\n }\n\n /**\n * @see setInitialNodeLocationOnlyOffsetRegular for explanation why this work\n\n * @param cstNode\n */\n setInitialNodeLocationFullRegular(this: MixedInParser, cstNode: any): void {\n const nextToken = this.LA(1)\n cstNode.location = {\n startOffset: nextToken.startOffset,\n startLine: nextToken.startLine,\n startColumn: nextToken.startColumn,\n endOffset: NaN,\n endLine: NaN,\n endColumn: NaN\n }\n }\n\n cstInvocationStateUpdate(\n this: MixedInParser,\n fullRuleName: string,\n shortName: string | number\n ): void {\n const cstNode: CstNode = {\n name: fullRuleName,\n children: {}\n }\n\n this.setInitialNodeLocation(cstNode)\n this.CST_STACK.push(cstNode)\n }\n\n cstFinallyStateUpdate(this: MixedInParser): void {\n this.CST_STACK.pop()\n }\n\n cstPostRuleFull(this: MixedInParser, ruleCstNode: CstNode): void {\n const prevToken = this.LA(0)\n const loc = ruleCstNode.location\n\n // If this condition is true it means we consumed at least one Token\n // In this CstNode.\n if (loc.startOffset <= prevToken.startOffset === true) {\n loc.endOffset = prevToken.endOffset\n loc.endLine = prevToken.endLine\n loc.endColumn = prevToken.endColumn\n }\n // \"empty\" CstNode edge case\n else {\n loc.startOffset = NaN\n loc.startLine = NaN\n loc.startColumn = NaN\n }\n }\n\n cstPostRuleOnlyOffset(this: MixedInParser, ruleCstNode: CstNode): void {\n const prevToken = this.LA(0)\n const loc = ruleCstNode.location\n\n // If this condition is true it means we consumed at least one Token\n // In this CstNode.\n if (loc.startOffset <= prevToken.startOffset === true) {\n loc.endOffset = prevToken.endOffset\n }\n // \"empty\" CstNode edge case\n else {\n loc.startOffset = NaN\n }\n }\n\n cstPostTerminal(\n this: MixedInParser,\n key: string,\n consumedToken: IToken\n ): void {\n const rootCst = this.CST_STACK[this.CST_STACK.length - 1]\n addTerminalToCst(rootCst, consumedToken, key)\n // This is only used when **both** error recovery and CST Output are enabled.\n this.setNodeLocationFromToken(rootCst.location, consumedToken)\n }\n\n cstPostNonTerminal(\n this: MixedInParser,\n ruleCstResult: CstNode,\n ruleName: string\n ): void {\n const preCstNode = this.CST_STACK[this.CST_STACK.length - 1]\n addNoneTerminalToCst(preCstNode, ruleName, ruleCstResult)\n // This is only used when **both** error recovery and CST Output are enabled.\n this.setNodeLocationFromNode(preCstNode.location, ruleCstResult.location)\n }\n\n getBaseCstVisitorConstructor(\n this: MixedInParser\n ): {\n new (...args: any[]): ICstVisitor\n } {\n if (isUndefined(this.baseCstVisitorConstructor)) {\n const newBaseCstVisitorConstructor = createBaseSemanticVisitorConstructor(\n this.className,\n keys(this.gastProductionsCache)\n )\n this.baseCstVisitorConstructor = newBaseCstVisitorConstructor\n return newBaseCstVisitorConstructor\n }\n\n return this.baseCstVisitorConstructor\n }\n\n getBaseCstVisitorConstructorWithDefaults(\n this: MixedInParser\n ): {\n new (...args: any[]): ICstVisitor\n } {\n if (isUndefined(this.baseCstVisitorWithDefaultsConstructor)) {\n const newConstructor = createBaseVisitorConstructorWithDefaults(\n this.className,\n keys(this.gastProductionsCache),\n this.getBaseCstVisitorConstructor()\n )\n this.baseCstVisitorWithDefaultsConstructor = newConstructor\n return newConstructor\n }\n\n return this.baseCstVisitorWithDefaultsConstructor\n }\n\n getLastExplicitRuleShortName(this: MixedInParser): string {\n let ruleStack = this.RULE_STACK\n return ruleStack[ruleStack.length - 1]\n }\n\n getPreviousExplicitRuleShortName(this: MixedInParser): string {\n let ruleStack = this.RULE_STACK\n return ruleStack[ruleStack.length - 2]\n }\n\n getLastExplicitRuleOccurrenceIndex(this: MixedInParser): number {\n let occurrenceStack = this.RULE_OCCURRENCE_STACK\n return occurrenceStack[occurrenceStack.length - 1]\n }\n}\n","import { END_OF_FILE } from \"../parser\"\nimport { IToken } from \"../../../../api\"\nimport { MixedInParser } from \"./parser_traits\"\n\n/**\n * Trait responsible abstracting over the interaction with Lexer output (Token vector).\n *\n * This could be generalized to support other kinds of lexers, e.g.\n * - Just in Time Lexing / Lexer-Less parsing.\n * - Streaming Lexer.\n */\nexport class LexerAdapter {\n tokVector: IToken[]\n tokVectorLength\n currIdx: number\n\n initLexerAdapter() {\n this.tokVector = []\n this.tokVectorLength = 0\n this.currIdx = -1\n }\n\n set input(newInput: IToken[]) {\n // @ts-ignore - `this parameter` not supported in setters/getters\n // - https://www.typescriptlang.org/docs/handbook/functions.html#this-parameters\n if (this.selfAnalysisDone !== true) {\n throw Error(\n `Missing invocation at the end of the Parser's constructor.`\n )\n }\n // @ts-ignore - `this parameter` not supported in setters/getters\n // - https://www.typescriptlang.org/docs/handbook/functions.html#this-parameters\n this.reset()\n this.tokVector = newInput\n this.tokVectorLength = newInput.length\n }\n\n get input(): IToken[] {\n return this.tokVector\n }\n\n // skips a token and returns the next token\n SKIP_TOKEN(this: MixedInParser): IToken {\n if (this.currIdx <= this.tokVector.length - 2) {\n this.consumeToken()\n return this.LA(1)\n } else {\n return END_OF_FILE\n }\n }\n\n // Lexer (accessing Token vector) related methods which can be overridden to implement lazy lexers\n // or lexers dependent on parser context.\n LA(this: MixedInParser, howMuch: number): IToken {\n const soughtIdx = this.currIdx + howMuch\n if (soughtIdx < 0 || this.tokVectorLength <= soughtIdx) {\n return END_OF_FILE\n } else {\n return this.tokVector[soughtIdx]\n }\n }\n\n consumeToken(this: MixedInParser) {\n this.currIdx++\n }\n\n exportLexerState(this: MixedInParser): number {\n return this.currIdx\n }\n\n importLexerState(this: MixedInParser, newState: number) {\n this.currIdx = newState\n }\n\n resetLexerState(this: MixedInParser): void {\n this.currIdx = -1\n }\n\n moveToTerminatedState(this: MixedInParser): void {\n this.currIdx = this.tokVector.length - 1\n }\n\n getLexerPosition(this: MixedInParser): number {\n return this.exportLexerState()\n }\n}\n","import {\n AtLeastOneSepMethodOpts,\n ConsumeMethodOpts,\n DSLMethodOpts,\n DSLMethodOptsWithErr,\n GrammarAction,\n IOrAlt,\n IRuleConfig,\n ISerializedGast,\n IToken,\n ManySepMethodOpts,\n OrMethodOpts,\n SubruleMethodOpts,\n TokenType\n} from \"../../../../api\"\nimport { contains, values } from \"../../../utils/utils\"\nimport { isRecognitionException } from \"../../exceptions_public\"\nimport { DEFAULT_RULE_CONFIG, ParserDefinitionErrorType } from \"../parser\"\nimport { defaultGrammarValidatorErrorProvider } from \"../../errors_public\"\nimport { validateRuleIsOverridden } from \"../../grammar/checks\"\nimport { MixedInParser } from \"./parser_traits\"\nimport { Rule, serializeGrammar } from \"../../grammar/gast/gast_public\"\n\n/**\n * This trait is responsible for implementing the public API\n * for defining Chevrotain parsers, i.e:\n * - CONSUME\n * - RULE\n * - OPTION\n * - ...\n */\nexport class RecognizerApi {\n ACTION(this: MixedInParser, impl: () => T): T {\n return impl.call(this)\n }\n\n consume(\n this: MixedInParser,\n idx: number,\n tokType: TokenType,\n options?: ConsumeMethodOpts\n ): IToken {\n return this.consumeInternal(tokType, idx, options)\n }\n\n subrule(\n this: MixedInParser,\n idx: number,\n ruleToCall: (idx: number) => T,\n options?: SubruleMethodOpts\n ): T {\n return this.subruleInternal(ruleToCall, idx, options)\n }\n\n option(\n this: MixedInParser,\n idx: number,\n actionORMethodDef: GrammarAction | DSLMethodOpts\n ): OUT {\n return this.optionInternal(actionORMethodDef, idx)\n }\n\n or(\n this: MixedInParser,\n idx: number,\n altsOrOpts: IOrAlt[] | OrMethodOpts\n ): any {\n return this.orInternal(altsOrOpts, idx)\n }\n\n many(\n this: MixedInParser,\n idx: number,\n actionORMethodDef: GrammarAction | DSLMethodOpts\n ): void {\n return this.manyInternal(idx, actionORMethodDef)\n }\n\n atLeastOne(\n this: MixedInParser,\n idx: number,\n actionORMethodDef: GrammarAction | DSLMethodOptsWithErr\n ): void {\n return this.atLeastOneInternal(idx, actionORMethodDef)\n }\n\n CONSUME(\n this: MixedInParser,\n tokType: TokenType,\n options?: ConsumeMethodOpts\n ): IToken {\n return this.consumeInternal(tokType, 0, options)\n }\n\n CONSUME1(\n this: MixedInParser,\n tokType: TokenType,\n options?: ConsumeMethodOpts\n ): IToken {\n return this.consumeInternal(tokType, 1, options)\n }\n\n CONSUME2(\n this: MixedInParser,\n tokType: TokenType,\n options?: ConsumeMethodOpts\n ): IToken {\n return this.consumeInternal(tokType, 2, options)\n }\n\n CONSUME3(\n this: MixedInParser,\n tokType: TokenType,\n options?: ConsumeMethodOpts\n ): IToken {\n return this.consumeInternal(tokType, 3, options)\n }\n\n CONSUME4(\n this: MixedInParser,\n tokType: TokenType,\n options?: ConsumeMethodOpts\n ): IToken {\n return this.consumeInternal(tokType, 4, options)\n }\n\n CONSUME5(\n this: MixedInParser,\n tokType: TokenType,\n options?: ConsumeMethodOpts\n ): IToken {\n return this.consumeInternal(tokType, 5, options)\n }\n\n CONSUME6(\n this: MixedInParser,\n tokType: TokenType,\n options?: ConsumeMethodOpts\n ): IToken {\n return this.consumeInternal(tokType, 6, options)\n }\n\n CONSUME7(\n this: MixedInParser,\n tokType: TokenType,\n options?: ConsumeMethodOpts\n ): IToken {\n return this.consumeInternal(tokType, 7, options)\n }\n\n CONSUME8(\n this: MixedInParser,\n tokType: TokenType,\n options?: ConsumeMethodOpts\n ): IToken {\n return this.consumeInternal(tokType, 8, options)\n }\n\n CONSUME9(\n this: MixedInParser,\n tokType: TokenType,\n options?: ConsumeMethodOpts\n ): IToken {\n return this.consumeInternal(tokType, 9, options)\n }\n\n SUBRULE(\n this: MixedInParser,\n ruleToCall: (idx: number) => T,\n options?: SubruleMethodOpts\n ): T {\n return this.subruleInternal(ruleToCall, 0, options)\n }\n\n SUBRULE1(\n this: MixedInParser,\n ruleToCall: (idx: number) => T,\n options?: SubruleMethodOpts\n ): T {\n return this.subruleInternal(ruleToCall, 1, options)\n }\n\n SUBRULE2(\n this: MixedInParser,\n ruleToCall: (idx: number) => T,\n options?: SubruleMethodOpts\n ): T {\n return this.subruleInternal(ruleToCall, 2, options)\n }\n\n SUBRULE3(\n this: MixedInParser,\n ruleToCall: (idx: number) => T,\n options?: SubruleMethodOpts\n ): T {\n return this.subruleInternal(ruleToCall, 3, options)\n }\n\n SUBRULE4(\n this: MixedInParser,\n ruleToCall: (idx: number) => T,\n options?: SubruleMethodOpts\n ): T {\n return this.subruleInternal(ruleToCall, 4, options)\n }\n\n SUBRULE5(\n this: MixedInParser,\n ruleToCall: (idx: number) => T,\n options?: SubruleMethodOpts\n ): T {\n return this.subruleInternal(ruleToCall, 5, options)\n }\n\n SUBRULE6(\n this: MixedInParser,\n ruleToCall: (idx: number) => T,\n options?: SubruleMethodOpts\n ): T {\n return this.subruleInternal(ruleToCall, 6, options)\n }\n\n SUBRULE7(\n this: MixedInParser,\n ruleToCall: (idx: number) => T,\n options?: SubruleMethodOpts\n ): T {\n return this.subruleInternal(ruleToCall, 7, options)\n }\n\n SUBRULE8(\n this: MixedInParser,\n ruleToCall: (idx: number) => T,\n options?: SubruleMethodOpts\n ): T {\n return this.subruleInternal(ruleToCall, 8, options)\n }\n\n SUBRULE9(\n this: MixedInParser,\n ruleToCall: (idx: number) => T,\n options?: SubruleMethodOpts\n ): T {\n return this.subruleInternal(ruleToCall, 9, options)\n }\n\n OPTION(\n this: MixedInParser,\n actionORMethodDef: GrammarAction | DSLMethodOpts\n ): OUT {\n return this.optionInternal(actionORMethodDef, 0)\n }\n\n OPTION1(\n this: MixedInParser,\n actionORMethodDef: GrammarAction | DSLMethodOpts\n ): OUT {\n return this.optionInternal(actionORMethodDef, 1)\n }\n\n OPTION2(\n this: MixedInParser,\n actionORMethodDef: GrammarAction | DSLMethodOpts\n ): OUT {\n return this.optionInternal(actionORMethodDef, 2)\n }\n\n OPTION3(\n this: MixedInParser,\n actionORMethodDef: GrammarAction | DSLMethodOpts\n ): OUT {\n return this.optionInternal(actionORMethodDef, 3)\n }\n\n OPTION4(\n this: MixedInParser,\n actionORMethodDef: GrammarAction | DSLMethodOpts\n ): OUT {\n return this.optionInternal(actionORMethodDef, 4)\n }\n\n OPTION5(\n this: MixedInParser,\n actionORMethodDef: GrammarAction | DSLMethodOpts\n ): OUT {\n return this.optionInternal(actionORMethodDef, 5)\n }\n\n OPTION6(\n this: MixedInParser,\n actionORMethodDef: GrammarAction | DSLMethodOpts\n ): OUT {\n return this.optionInternal(actionORMethodDef, 6)\n }\n\n OPTION7(\n this: MixedInParser,\n actionORMethodDef: GrammarAction | DSLMethodOpts\n ): OUT {\n return this.optionInternal(actionORMethodDef, 7)\n }\n\n OPTION8(\n this: MixedInParser,\n actionORMethodDef: GrammarAction | DSLMethodOpts\n ): OUT {\n return this.optionInternal(actionORMethodDef, 8)\n }\n\n OPTION9(\n this: MixedInParser,\n actionORMethodDef: GrammarAction | DSLMethodOpts\n ): OUT {\n return this.optionInternal(actionORMethodDef, 9)\n }\n\n OR(\n this: MixedInParser,\n altsOrOpts: IOrAlt[] | OrMethodOpts\n ): T {\n return this.orInternal(altsOrOpts, 0)\n }\n\n OR1(\n this: MixedInParser,\n altsOrOpts: IOrAlt[] | OrMethodOpts\n ): T {\n return this.orInternal(altsOrOpts, 1)\n }\n\n OR2(\n this: MixedInParser,\n altsOrOpts: IOrAlt[] | OrMethodOpts\n ): T {\n return this.orInternal(altsOrOpts, 2)\n }\n\n OR3(\n this: MixedInParser,\n altsOrOpts: IOrAlt[] | OrMethodOpts\n ): T {\n return this.orInternal(altsOrOpts, 3)\n }\n\n OR4(\n this: MixedInParser,\n altsOrOpts: IOrAlt[] | OrMethodOpts\n ): T {\n return this.orInternal(altsOrOpts, 4)\n }\n\n OR5(\n this: MixedInParser,\n altsOrOpts: IOrAlt[] | OrMethodOpts\n ): T {\n return this.orInternal(altsOrOpts, 5)\n }\n\n OR6(\n this: MixedInParser,\n altsOrOpts: IOrAlt[] | OrMethodOpts\n ): T {\n return this.orInternal(altsOrOpts, 6)\n }\n\n OR7(\n this: MixedInParser,\n altsOrOpts: IOrAlt[] | OrMethodOpts\n ): T {\n return this.orInternal(altsOrOpts, 7)\n }\n\n OR8(\n this: MixedInParser,\n altsOrOpts: IOrAlt[] | OrMethodOpts\n ): T {\n return this.orInternal(altsOrOpts, 8)\n }\n\n OR9(\n this: MixedInParser,\n altsOrOpts: IOrAlt[] | OrMethodOpts\n ): T {\n return this.orInternal(altsOrOpts, 9)\n }\n\n MANY(\n this: MixedInParser,\n actionORMethodDef: GrammarAction | DSLMethodOpts\n ): void {\n this.manyInternal(0, actionORMethodDef)\n }\n\n MANY1(\n this: MixedInParser,\n actionORMethodDef: GrammarAction | DSLMethodOpts\n ): void {\n this.manyInternal(1, actionORMethodDef)\n }\n\n MANY2(\n this: MixedInParser,\n actionORMethodDef: GrammarAction | DSLMethodOpts\n ): void {\n this.manyInternal(2, actionORMethodDef)\n }\n\n MANY3(\n this: MixedInParser,\n actionORMethodDef: GrammarAction | DSLMethodOpts\n ): void {\n this.manyInternal(3, actionORMethodDef)\n }\n\n MANY4(\n this: MixedInParser,\n actionORMethodDef: GrammarAction | DSLMethodOpts\n ): void {\n this.manyInternal(4, actionORMethodDef)\n }\n\n MANY5(\n this: MixedInParser,\n actionORMethodDef: GrammarAction | DSLMethodOpts\n ): void {\n this.manyInternal(5, actionORMethodDef)\n }\n\n MANY6(\n this: MixedInParser,\n actionORMethodDef: GrammarAction | DSLMethodOpts\n ): void {\n this.manyInternal(6, actionORMethodDef)\n }\n\n MANY7(\n this: MixedInParser,\n actionORMethodDef: GrammarAction | DSLMethodOpts\n ): void {\n this.manyInternal(7, actionORMethodDef)\n }\n\n MANY8(\n this: MixedInParser,\n actionORMethodDef: GrammarAction | DSLMethodOpts\n ): void {\n this.manyInternal(8, actionORMethodDef)\n }\n\n MANY9(\n this: MixedInParser,\n actionORMethodDef: GrammarAction | DSLMethodOpts\n ): void {\n this.manyInternal(9, actionORMethodDef)\n }\n\n MANY_SEP(this: MixedInParser, options: ManySepMethodOpts): void {\n this.manySepFirstInternal(0, options)\n }\n\n MANY_SEP1(this: MixedInParser, options: ManySepMethodOpts): void {\n this.manySepFirstInternal(1, options)\n }\n\n MANY_SEP2(this: MixedInParser, options: ManySepMethodOpts): void {\n this.manySepFirstInternal(2, options)\n }\n\n MANY_SEP3(this: MixedInParser, options: ManySepMethodOpts): void {\n this.manySepFirstInternal(3, options)\n }\n\n MANY_SEP4(this: MixedInParser, options: ManySepMethodOpts): void {\n this.manySepFirstInternal(4, options)\n }\n\n MANY_SEP5(this: MixedInParser, options: ManySepMethodOpts): void {\n this.manySepFirstInternal(5, options)\n }\n\n MANY_SEP6(this: MixedInParser, options: ManySepMethodOpts): void {\n this.manySepFirstInternal(6, options)\n }\n\n MANY_SEP7(this: MixedInParser, options: ManySepMethodOpts): void {\n this.manySepFirstInternal(7, options)\n }\n\n MANY_SEP8(this: MixedInParser, options: ManySepMethodOpts): void {\n this.manySepFirstInternal(8, options)\n }\n\n MANY_SEP9(this: MixedInParser, options: ManySepMethodOpts): void {\n this.manySepFirstInternal(9, options)\n }\n\n AT_LEAST_ONE(\n this: MixedInParser,\n actionORMethodDef: GrammarAction | DSLMethodOptsWithErr\n ): void {\n this.atLeastOneInternal(0, actionORMethodDef)\n }\n\n AT_LEAST_ONE1(\n this: MixedInParser,\n actionORMethodDef: GrammarAction | DSLMethodOptsWithErr\n ): void {\n return this.atLeastOneInternal(1, actionORMethodDef)\n }\n\n AT_LEAST_ONE2(\n this: MixedInParser,\n actionORMethodDef: GrammarAction | DSLMethodOptsWithErr\n ): void {\n this.atLeastOneInternal(2, actionORMethodDef)\n }\n\n AT_LEAST_ONE3(\n this: MixedInParser,\n actionORMethodDef: GrammarAction | DSLMethodOptsWithErr\n ): void {\n this.atLeastOneInternal(3, actionORMethodDef)\n }\n\n AT_LEAST_ONE4(\n this: MixedInParser,\n actionORMethodDef: GrammarAction | DSLMethodOptsWithErr\n ): void {\n this.atLeastOneInternal(4, actionORMethodDef)\n }\n\n AT_LEAST_ONE5(\n this: MixedInParser,\n actionORMethodDef: GrammarAction | DSLMethodOptsWithErr\n ): void {\n this.atLeastOneInternal(5, actionORMethodDef)\n }\n\n AT_LEAST_ONE6(\n this: MixedInParser,\n actionORMethodDef: GrammarAction | DSLMethodOptsWithErr\n ): void {\n this.atLeastOneInternal(6, actionORMethodDef)\n }\n\n AT_LEAST_ONE7(\n this: MixedInParser,\n actionORMethodDef: GrammarAction | DSLMethodOptsWithErr\n ): void {\n this.atLeastOneInternal(7, actionORMethodDef)\n }\n\n AT_LEAST_ONE8(\n this: MixedInParser,\n actionORMethodDef: GrammarAction | DSLMethodOptsWithErr\n ): void {\n this.atLeastOneInternal(8, actionORMethodDef)\n }\n\n AT_LEAST_ONE9(\n this: MixedInParser,\n actionORMethodDef: GrammarAction | DSLMethodOptsWithErr\n ): void {\n this.atLeastOneInternal(9, actionORMethodDef)\n }\n\n AT_LEAST_ONE_SEP(\n this: MixedInParser,\n options: AtLeastOneSepMethodOpts\n ): void {\n this.atLeastOneSepFirstInternal(0, options)\n }\n\n AT_LEAST_ONE_SEP1(\n this: MixedInParser,\n options: AtLeastOneSepMethodOpts\n ): void {\n this.atLeastOneSepFirstInternal(1, options)\n }\n\n AT_LEAST_ONE_SEP2(\n this: MixedInParser,\n options: AtLeastOneSepMethodOpts\n ): void {\n this.atLeastOneSepFirstInternal(2, options)\n }\n\n AT_LEAST_ONE_SEP3(\n this: MixedInParser,\n options: AtLeastOneSepMethodOpts\n ): void {\n this.atLeastOneSepFirstInternal(3, options)\n }\n\n AT_LEAST_ONE_SEP4(\n this: MixedInParser,\n options: AtLeastOneSepMethodOpts\n ): void {\n this.atLeastOneSepFirstInternal(4, options)\n }\n\n AT_LEAST_ONE_SEP5(\n this: MixedInParser,\n options: AtLeastOneSepMethodOpts\n ): void {\n this.atLeastOneSepFirstInternal(5, options)\n }\n\n AT_LEAST_ONE_SEP6(\n this: MixedInParser,\n options: AtLeastOneSepMethodOpts\n ): void {\n this.atLeastOneSepFirstInternal(6, options)\n }\n\n AT_LEAST_ONE_SEP7(\n this: MixedInParser,\n options: AtLeastOneSepMethodOpts\n ): void {\n this.atLeastOneSepFirstInternal(7, options)\n }\n\n AT_LEAST_ONE_SEP8(\n this: MixedInParser,\n options: AtLeastOneSepMethodOpts\n ): void {\n this.atLeastOneSepFirstInternal(8, options)\n }\n\n AT_LEAST_ONE_SEP9(\n this: MixedInParser,\n options: AtLeastOneSepMethodOpts\n ): void {\n this.atLeastOneSepFirstInternal(9, options)\n }\n\n RULE(\n this: MixedInParser,\n name: string,\n implementation: (...implArgs: any[]) => T,\n config: IRuleConfig = DEFAULT_RULE_CONFIG\n ): (idxInCallingRule?: number, ...args: any[]) => T | any {\n if (contains(this.definedRulesNames, name)) {\n const errMsg = defaultGrammarValidatorErrorProvider.buildDuplicateRuleNameError(\n {\n topLevelRule: name,\n grammarName: this.className\n }\n )\n\n const error = {\n message: errMsg,\n type: ParserDefinitionErrorType.DUPLICATE_RULE_NAME,\n ruleName: name\n }\n this.definitionErrors.push(error)\n }\n\n this.definedRulesNames.push(name)\n\n let ruleImplementation = this.defineRule(name, implementation, config)\n this[name] = ruleImplementation\n return ruleImplementation\n }\n\n OVERRIDE_RULE(\n this: MixedInParser,\n name: string,\n impl: (...implArgs: any[]) => T,\n config: IRuleConfig = DEFAULT_RULE_CONFIG\n ): (idxInCallingRule?: number, ...args: any[]) => T {\n let ruleErrors = []\n ruleErrors = ruleErrors.concat(\n validateRuleIsOverridden(name, this.definedRulesNames, this.className)\n )\n this.definitionErrors.push.apply(this.definitionErrors, ruleErrors) // mutability for the win\n\n let ruleImplementation = this.defineRule(name, impl, config)\n this[name] = ruleImplementation\n return ruleImplementation\n }\n\n BACKTRACK(\n this: MixedInParser,\n grammarRule: (...args: any[]) => T,\n args?: any[]\n ): () => boolean {\n return function () {\n // save org state\n this.isBackTrackingStack.push(1)\n const orgState = this.saveRecogState()\n try {\n grammarRule.apply(this, args)\n // if no exception was thrown we have succeed parsing the rule.\n return true\n } catch (e) {\n if (isRecognitionException(e)) {\n return false\n } else {\n throw e\n }\n } finally {\n this.reloadRecogState(orgState)\n this.isBackTrackingStack.pop()\n }\n }\n }\n\n // GAST export APIs\n public getGAstProductions(this: MixedInParser): Record {\n return this.gastProductionsCache\n }\n\n public getSerializedGastProductions(this: MixedInParser): ISerializedGast[] {\n return serializeGrammar(values(this.gastProductionsCache))\n }\n}\n","import {\n AtLeastOneSepMethodOpts,\n ConsumeMethodOpts,\n DSLMethodOpts,\n DSLMethodOptsWithErr,\n GrammarAction,\n IOrAlt,\n IParserConfig,\n IRuleConfig,\n IToken,\n ManySepMethodOpts,\n OrMethodOpts,\n SubruleMethodOpts,\n TokenType,\n TokenVocabulary\n} from \"../../../../api\"\nimport {\n cloneArr,\n cloneObj,\n every,\n flatten,\n has,\n isArray,\n isEmpty,\n isObject,\n reduce,\n uniq,\n values\n} from \"../../../utils/utils\"\nimport {\n AT_LEAST_ONE_IDX,\n AT_LEAST_ONE_SEP_IDX,\n BITS_FOR_METHOD_TYPE,\n BITS_FOR_OCCURRENCE_IDX,\n MANY_IDX,\n MANY_SEP_IDX,\n OPTION_IDX,\n OR_IDX\n} from \"../../grammar/keys\"\nimport {\n isRecognitionException,\n MismatchedTokenException,\n NotAllInputParsedException\n} from \"../../exceptions_public\"\nimport { PROD_TYPE } from \"../../grammar/lookahead\"\nimport {\n AbstractNextTerminalAfterProductionWalker,\n NextTerminalAfterAtLeastOneSepWalker,\n NextTerminalAfterAtLeastOneWalker,\n NextTerminalAfterManySepWalker,\n NextTerminalAfterManyWalker\n} from \"../../grammar/interpreter\"\nimport { DEFAULT_RULE_CONFIG, IParserState, TokenMatcher } from \"../parser\"\nimport { IN_RULE_RECOVERY_EXCEPTION } from \"./recoverable\"\nimport { EOF } from \"../../../scan/tokens_public\"\nimport { MixedInParser } from \"./parser_traits\"\nimport {\n augmentTokenTypes,\n isTokenType,\n tokenStructuredMatcher,\n tokenStructuredMatcherNoCategories\n} from \"../../../scan/tokens\"\nimport { classNameFromInstance } from \"../../../lang/lang_extensions\"\nimport { Rule } from \"../../grammar/gast/gast_public\"\n\n/**\n * This trait is responsible for the runtime parsing engine\n * Used by the official API (recognizer_api.ts)\n */\nexport class RecognizerEngine {\n isBackTrackingStack\n className: string\n RULE_STACK: string[]\n RULE_OCCURRENCE_STACK: number[]\n definedRulesNames: string[]\n tokensMap: { [fqn: string]: TokenType }\n gastProductionsCache: Record\n shortRuleNameToFull: Record\n fullRuleNameToShort: Record\n // The shortName Index must be coded \"after\" the first 8bits to enable building unique lookahead keys\n ruleShortNameIdx: number\n tokenMatcher: TokenMatcher\n\n initRecognizerEngine(\n tokenVocabulary: TokenVocabulary,\n config: IParserConfig\n ) {\n this.className = classNameFromInstance(this)\n // TODO: would using an ES6 Map or plain object be faster (CST building scenario)\n this.shortRuleNameToFull = {}\n this.fullRuleNameToShort = {}\n this.ruleShortNameIdx = 256\n this.tokenMatcher = tokenStructuredMatcherNoCategories\n\n this.definedRulesNames = []\n this.tokensMap = {}\n this.isBackTrackingStack = []\n this.RULE_STACK = []\n this.RULE_OCCURRENCE_STACK = []\n this.gastProductionsCache = {}\n\n if (has(config, \"serializedGrammar\")) {\n throw Error(\n \"The Parser's configuration can no longer contain a property.\\n\" +\n \"\\tSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0\\n\" +\n \"\\tFor Further details.\"\n )\n }\n\n if (isArray(tokenVocabulary)) {\n // This only checks for Token vocabularies provided as arrays.\n // That is good enough because the main objective is to detect users of pre-V4.0 APIs\n // rather than all edge cases of empty Token vocabularies.\n if (isEmpty(tokenVocabulary as any[])) {\n throw Error(\n \"A Token Vocabulary cannot be empty.\\n\" +\n \"\\tNote that the first argument for the parser constructor\\n\" +\n \"\\tis no longer a Token vector (since v4.0).\"\n )\n }\n\n if (typeof (tokenVocabulary as any[])[0].startOffset === \"number\") {\n throw Error(\n \"The Parser constructor no longer accepts a token vector as the first argument.\\n\" +\n \"\\tSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0\\n\" +\n \"\\tFor Further details.\"\n )\n }\n }\n\n if (isArray(tokenVocabulary)) {\n this.tokensMap = reduce(\n tokenVocabulary,\n (acc, tokType: TokenType) => {\n acc[tokType.name] = tokType\n return acc\n },\n {}\n )\n } else if (\n has(tokenVocabulary, \"modes\") &&\n every(flatten(values((tokenVocabulary).modes)), isTokenType)\n ) {\n let allTokenTypes = flatten(values((tokenVocabulary).modes))\n let uniqueTokens = uniq(allTokenTypes)\n this.tokensMap = reduce(\n uniqueTokens,\n (acc, tokType: TokenType) => {\n acc[tokType.name] = tokType\n return acc\n },\n {}\n )\n } else if (isObject(tokenVocabulary)) {\n this.tokensMap = cloneObj(tokenVocabulary)\n } else {\n throw new Error(\n \" argument must be An Array of Token constructors,\" +\n \" A dictionary of Token constructors or an IMultiModeLexerDefinition\"\n )\n }\n\n // always add EOF to the tokenNames -> constructors map. it is useful to assure all the input has been\n // parsed with a clear error message (\"expecting EOF but found ...\")\n /* tslint:disable */\n this.tokensMap[\"EOF\"] = EOF\n\n // TODO: This check may not be accurate for multi mode lexers\n const noTokenCategoriesUsed = every(\n values(tokenVocabulary),\n (tokenConstructor) => isEmpty(tokenConstructor.categoryMatches)\n )\n\n this.tokenMatcher = noTokenCategoriesUsed\n ? tokenStructuredMatcherNoCategories\n : tokenStructuredMatcher\n\n // Because ES2015+ syntax should be supported for creating Token classes\n // We cannot assume that the Token classes were created using the \"extendToken\" utilities\n // Therefore we must augment the Token classes both on Lexer initialization and on Parser initialization\n augmentTokenTypes(values(this.tokensMap))\n }\n\n defineRule(\n this: MixedInParser,\n ruleName: string,\n impl: (...implArgs: any[]) => T,\n config: IRuleConfig\n ): (idxInCallingRule?: number, ...args: any[]) => T {\n if (this.selfAnalysisDone) {\n throw Error(\n `Grammar rule <${ruleName}> may not be defined after the 'performSelfAnalysis' method has been called'\\n` +\n `Make sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`\n )\n }\n let resyncEnabled = has(config, \"resyncEnabled\")\n ? config.resyncEnabled\n : DEFAULT_RULE_CONFIG.resyncEnabled\n let recoveryValueFunc = has(config, \"recoveryValueFunc\")\n ? config.recoveryValueFunc\n : DEFAULT_RULE_CONFIG.recoveryValueFunc\n\n // performance optimization: Use small integers as keys for the longer human readable \"full\" rule names.\n // this greatly improves Map access time (as much as 8% for some performance benchmarks).\n /* tslint:disable */\n let shortName =\n this.ruleShortNameIdx << (BITS_FOR_METHOD_TYPE + BITS_FOR_OCCURRENCE_IDX)\n /* tslint:enable */\n\n this.ruleShortNameIdx++\n this.shortRuleNameToFull[shortName] = ruleName\n this.fullRuleNameToShort[ruleName] = shortName\n\n function invokeRuleWithTry(args: any[]) {\n try {\n if (this.outputCst === true) {\n impl.apply(this, args)\n const cst = this.CST_STACK[this.CST_STACK.length - 1]\n this.cstPostRule(cst)\n return cst\n } else {\n return impl.apply(this, args)\n }\n } catch (e) {\n return this.invokeRuleCatch(e, resyncEnabled, recoveryValueFunc)\n } finally {\n this.ruleFinallyStateUpdate()\n }\n }\n\n let wrappedGrammarRule\n\n wrappedGrammarRule = function (idxInCallingRule: number = 0, args: any[]) {\n this.ruleInvocationStateUpdate(shortName, ruleName, idxInCallingRule)\n return invokeRuleWithTry.call(this, args)\n }\n\n let ruleNamePropName = \"ruleName\"\n wrappedGrammarRule[ruleNamePropName] = ruleName\n wrappedGrammarRule[\"originalGrammarAction\"] = impl\n return wrappedGrammarRule\n }\n\n invokeRuleCatch(\n this: MixedInParser,\n e: Error,\n resyncEnabledConfig: boolean,\n recoveryValueFunc: Function\n ): void {\n let isFirstInvokedRule = this.RULE_STACK.length === 1\n // note the reSync is always enabled for the first rule invocation, because we must always be able to\n // reSync with EOF and just output some INVALID ParseTree\n // during backtracking reSync recovery is disabled, otherwise we can't be certain the backtracking\n // path is really the most valid one\n let reSyncEnabled =\n resyncEnabledConfig && !this.isBackTracking() && this.recoveryEnabled\n\n if (isRecognitionException(e)) {\n const recogError: any = e\n if (reSyncEnabled) {\n let reSyncTokType = this.findReSyncTokenType()\n if (this.isInCurrentRuleReSyncSet(reSyncTokType)) {\n recogError.resyncedTokens = this.reSyncTo(reSyncTokType)\n if (this.outputCst) {\n let partialCstResult: any = this.CST_STACK[\n this.CST_STACK.length - 1\n ]\n partialCstResult.recoveredNode = true\n return partialCstResult\n } else {\n return recoveryValueFunc()\n }\n } else {\n if (this.outputCst) {\n const partialCstResult: any = this.CST_STACK[\n this.CST_STACK.length - 1\n ]\n partialCstResult.recoveredNode = true\n recogError.partialCstResult = partialCstResult\n }\n // to be handled Further up the call stack\n throw recogError\n }\n } else if (isFirstInvokedRule) {\n // otherwise a Redundant input error will be created as well and we cannot guarantee that this is indeed the case\n this.moveToTerminatedState()\n // the parser should never throw one of its own errors outside its flow.\n // even if error recovery is disabled\n return recoveryValueFunc()\n } else {\n // to be recovered Further up the call stack\n throw recogError\n }\n } else {\n // some other Error type which we don't know how to handle (for example a built in JavaScript Error)\n throw e\n }\n }\n\n // Implementation of parsing DSL\n optionInternal(\n this: MixedInParser,\n actionORMethodDef: GrammarAction | DSLMethodOpts,\n occurrence: number\n ): OUT {\n let key = this.getKeyForAutomaticLookahead(OPTION_IDX, occurrence)\n return this.optionInternalLogic(actionORMethodDef, occurrence, key)\n }\n\n optionInternalLogic(\n this: MixedInParser,\n actionORMethodDef: GrammarAction | DSLMethodOpts,\n occurrence: number,\n key: number\n ): OUT {\n let lookAheadFunc = this.getLaFuncFromCache(key)\n let action\n let predicate\n if ((>actionORMethodDef).DEF !== undefined) {\n action = (>actionORMethodDef).DEF\n predicate = (>actionORMethodDef).GATE\n // predicate present\n if (predicate !== undefined) {\n let orgLookaheadFunction = lookAheadFunc\n lookAheadFunc = () => {\n return predicate.call(this) && orgLookaheadFunction.call(this)\n }\n }\n } else {\n action = actionORMethodDef\n }\n\n if (lookAheadFunc.call(this) === true) {\n return action.call(this)\n }\n return undefined\n }\n\n atLeastOneInternal(\n this: MixedInParser,\n prodOccurrence: number,\n actionORMethodDef: GrammarAction | DSLMethodOptsWithErr\n ): void {\n let laKey = this.getKeyForAutomaticLookahead(\n AT_LEAST_ONE_IDX,\n prodOccurrence\n )\n return this.atLeastOneInternalLogic(\n prodOccurrence,\n actionORMethodDef,\n laKey\n )\n }\n\n atLeastOneInternalLogic(\n this: MixedInParser,\n prodOccurrence: number,\n actionORMethodDef: GrammarAction | DSLMethodOptsWithErr,\n key: number\n ): void {\n let lookAheadFunc = this.getLaFuncFromCache(key)\n\n let action\n let predicate\n if ((>actionORMethodDef).DEF !== undefined) {\n action = (>actionORMethodDef).DEF\n predicate = (>actionORMethodDef).GATE\n // predicate present\n if (predicate !== undefined) {\n let orgLookaheadFunction = lookAheadFunc\n lookAheadFunc = () => {\n return predicate.call(this) && orgLookaheadFunction.call(this)\n }\n }\n } else {\n action = actionORMethodDef\n }\n\n if ((lookAheadFunc).call(this) === true) {\n let notStuck = this.doSingleRepetition(action)\n while (\n (lookAheadFunc).call(this) === true &&\n notStuck === true\n ) {\n notStuck = this.doSingleRepetition(action)\n }\n } else {\n throw this.raiseEarlyExitException(\n prodOccurrence,\n PROD_TYPE.REPETITION_MANDATORY,\n (>actionORMethodDef).ERR_MSG\n )\n }\n\n // note that while it may seem that this can cause an error because by using a recursive call to\n // AT_LEAST_ONE we change the grammar to AT_LEAST_TWO, AT_LEAST_THREE ... , the possible recursive call\n // from the tryInRepetitionRecovery(...) will only happen IFF there really are TWO/THREE/.... items.\n\n // Performance optimization: \"attemptInRepetitionRecovery\" will be defined as NOOP unless recovery is enabled\n this.attemptInRepetitionRecovery(\n this.atLeastOneInternal,\n [prodOccurrence, actionORMethodDef],\n lookAheadFunc,\n AT_LEAST_ONE_IDX,\n prodOccurrence,\n NextTerminalAfterAtLeastOneWalker\n )\n }\n\n atLeastOneSepFirstInternal(\n this: MixedInParser,\n prodOccurrence: number,\n options: AtLeastOneSepMethodOpts\n ): void {\n let laKey = this.getKeyForAutomaticLookahead(\n AT_LEAST_ONE_SEP_IDX,\n prodOccurrence\n )\n this.atLeastOneSepFirstInternalLogic(prodOccurrence, options, laKey)\n }\n\n atLeastOneSepFirstInternalLogic(\n this: MixedInParser,\n prodOccurrence: number,\n options: AtLeastOneSepMethodOpts,\n key: number\n ): void {\n let action = options.DEF\n let separator = options.SEP\n\n let firstIterationLookaheadFunc = this.getLaFuncFromCache(key)\n\n // 1st iteration\n if (firstIterationLookaheadFunc.call(this) === true) {\n ;(>action).call(this)\n\n // TODO: Optimization can move this function construction into \"attemptInRepetitionRecovery\"\n // because it is only needed in error recovery scenarios.\n let separatorLookAheadFunc = () => {\n return this.tokenMatcher(this.LA(1), separator)\n }\n\n // 2nd..nth iterations\n while (this.tokenMatcher(this.LA(1), separator) === true) {\n // note that this CONSUME will never enter recovery because\n // the separatorLookAheadFunc checks that the separator really does exist.\n this.CONSUME(separator)\n // No need for checking infinite loop here due to consuming the separator.\n ;(>action).call(this)\n }\n\n // Performance optimization: \"attemptInRepetitionRecovery\" will be defined as NOOP unless recovery is enabled\n this.attemptInRepetitionRecovery(\n this.repetitionSepSecondInternal,\n [\n prodOccurrence,\n separator,\n separatorLookAheadFunc,\n action,\n NextTerminalAfterAtLeastOneSepWalker\n ],\n separatorLookAheadFunc,\n AT_LEAST_ONE_SEP_IDX,\n prodOccurrence,\n NextTerminalAfterAtLeastOneSepWalker\n )\n } else {\n throw this.raiseEarlyExitException(\n prodOccurrence,\n PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR,\n options.ERR_MSG\n )\n }\n }\n\n manyInternal(\n this: MixedInParser,\n prodOccurrence: number,\n actionORMethodDef: GrammarAction | DSLMethodOpts\n ): void {\n let laKey = this.getKeyForAutomaticLookahead(MANY_IDX, prodOccurrence)\n return this.manyInternalLogic(prodOccurrence, actionORMethodDef, laKey)\n }\n\n manyInternalLogic(\n this: MixedInParser,\n prodOccurrence: number,\n actionORMethodDef: GrammarAction | DSLMethodOpts,\n key: number\n ) {\n let lookaheadFunction = this.getLaFuncFromCache(key)\n\n let action\n let predicate\n if ((>actionORMethodDef).DEF !== undefined) {\n action = (>actionORMethodDef).DEF\n predicate = (>actionORMethodDef).GATE\n // predicate present\n if (predicate !== undefined) {\n let orgLookaheadFunction = lookaheadFunction\n lookaheadFunction = () => {\n return predicate.call(this) && orgLookaheadFunction.call(this)\n }\n }\n } else {\n action = actionORMethodDef\n }\n\n let notStuck = true\n while (lookaheadFunction.call(this) === true && notStuck === true) {\n notStuck = this.doSingleRepetition(action)\n }\n\n // Performance optimization: \"attemptInRepetitionRecovery\" will be defined as NOOP unless recovery is enabled\n this.attemptInRepetitionRecovery(\n this.manyInternal,\n [prodOccurrence, actionORMethodDef],\n lookaheadFunction,\n MANY_IDX,\n prodOccurrence,\n NextTerminalAfterManyWalker,\n // The notStuck parameter is only relevant when \"attemptInRepetitionRecovery\"\n // is invoked from manyInternal, in the MANY_SEP case and AT_LEAST_ONE[_SEP]\n // An infinite loop cannot occur as:\n // - Either the lookahead is guaranteed to consume something (Single Token Separator)\n // - AT_LEAST_ONE by definition is guaranteed to consume something (or error out).\n notStuck\n )\n }\n\n manySepFirstInternal(\n this: MixedInParser,\n prodOccurrence: number,\n options: ManySepMethodOpts\n ): void {\n let laKey = this.getKeyForAutomaticLookahead(MANY_SEP_IDX, prodOccurrence)\n this.manySepFirstInternalLogic(prodOccurrence, options, laKey)\n }\n\n manySepFirstInternalLogic(\n this: MixedInParser,\n prodOccurrence: number,\n options: ManySepMethodOpts,\n key: number\n ): void {\n let action = options.DEF\n let separator = options.SEP\n let firstIterationLaFunc = this.getLaFuncFromCache(key)\n\n // 1st iteration\n if (firstIterationLaFunc.call(this) === true) {\n action.call(this)\n\n let separatorLookAheadFunc = () => {\n return this.tokenMatcher(this.LA(1), separator)\n }\n // 2nd..nth iterations\n while (this.tokenMatcher(this.LA(1), separator) === true) {\n // note that this CONSUME will never enter recovery because\n // the separatorLookAheadFunc checks that the separator really does exist.\n this.CONSUME(separator)\n // No need for checking infinite loop here due to consuming the separator.\n action.call(this)\n }\n\n // Performance optimization: \"attemptInRepetitionRecovery\" will be defined as NOOP unless recovery is enabled\n this.attemptInRepetitionRecovery(\n this.repetitionSepSecondInternal,\n [\n prodOccurrence,\n separator,\n separatorLookAheadFunc,\n action,\n NextTerminalAfterManySepWalker\n ],\n separatorLookAheadFunc,\n MANY_SEP_IDX,\n prodOccurrence,\n NextTerminalAfterManySepWalker\n )\n }\n }\n\n repetitionSepSecondInternal(\n this: MixedInParser,\n prodOccurrence: number,\n separator: TokenType,\n separatorLookAheadFunc: () => boolean,\n action: GrammarAction,\n nextTerminalAfterWalker: typeof AbstractNextTerminalAfterProductionWalker\n ): void {\n while (separatorLookAheadFunc()) {\n // note that this CONSUME will never enter recovery because\n // the separatorLookAheadFunc checks that the separator really does exist.\n this.CONSUME(separator)\n action.call(this)\n }\n\n // we can only arrive to this function after an error\n // has occurred (hence the name 'second') so the following\n // IF will always be entered, its possible to remove it...\n // however it is kept to avoid confusion and be consistent.\n // Performance optimization: \"attemptInRepetitionRecovery\" will be defined as NOOP unless recovery is enabled\n /* istanbul ignore else */\n this.attemptInRepetitionRecovery(\n this.repetitionSepSecondInternal,\n [\n prodOccurrence,\n separator,\n separatorLookAheadFunc,\n action,\n nextTerminalAfterWalker\n ],\n separatorLookAheadFunc,\n AT_LEAST_ONE_SEP_IDX,\n prodOccurrence,\n nextTerminalAfterWalker\n )\n }\n\n doSingleRepetition(this: MixedInParser, action: Function): any {\n const beforeIteration = this.getLexerPosition()\n action.call(this)\n const afterIteration = this.getLexerPosition()\n\n // This boolean will indicate if this repetition progressed\n // or if we are \"stuck\" (potential infinite loop in the repetition).\n return afterIteration > beforeIteration\n }\n\n orInternal(\n this: MixedInParser,\n altsOrOpts: IOrAlt[] | OrMethodOpts,\n occurrence: number\n ): T {\n let laKey = this.getKeyForAutomaticLookahead(OR_IDX, occurrence)\n let alts = isArray(altsOrOpts)\n ? (altsOrOpts as IOrAlt[])\n : (altsOrOpts as OrMethodOpts).DEF\n\n const laFunc = this.getLaFuncFromCache(laKey)\n let altIdxToTake = laFunc.call(this, alts)\n if (altIdxToTake !== undefined) {\n let chosenAlternative: any = alts[altIdxToTake]\n return chosenAlternative.ALT.call(this)\n }\n this.raiseNoAltException(\n occurrence,\n (altsOrOpts as OrMethodOpts).ERR_MSG\n )\n }\n\n ruleFinallyStateUpdate(this: MixedInParser): void {\n this.RULE_STACK.pop()\n this.RULE_OCCURRENCE_STACK.pop()\n\n // NOOP when cst is disabled\n this.cstFinallyStateUpdate()\n\n if (this.RULE_STACK.length === 0 && this.isAtEndOfInput() === false) {\n let firstRedundantTok = this.LA(1)\n let errMsg = this.errorMessageProvider.buildNotAllInputParsedMessage({\n firstRedundant: firstRedundantTok,\n ruleName: this.getCurrRuleFullName()\n })\n this.SAVE_ERROR(new NotAllInputParsedException(errMsg, firstRedundantTok))\n }\n }\n\n subruleInternal(\n this: MixedInParser,\n ruleToCall: (idx: number) => T,\n idx: number,\n options?: SubruleMethodOpts\n ) {\n let ruleResult\n try {\n const args = options !== undefined ? options.ARGS : undefined\n ruleResult = ruleToCall.call(this, idx, args)\n this.cstPostNonTerminal(\n ruleResult,\n options !== undefined && options.LABEL !== undefined\n ? options.LABEL\n : (ruleToCall).ruleName\n )\n return ruleResult\n } catch (e) {\n this.subruleInternalError(e, options, (ruleToCall).ruleName)\n }\n }\n\n subruleInternalError(\n this: MixedInParser,\n e: any,\n options: SubruleMethodOpts,\n ruleName: string\n ): void {\n if (isRecognitionException(e) && e.partialCstResult !== undefined) {\n this.cstPostNonTerminal(\n e.partialCstResult,\n options !== undefined && options.LABEL !== undefined\n ? options.LABEL\n : ruleName\n )\n\n delete e.partialCstResult\n }\n throw e\n }\n\n consumeInternal(\n this: MixedInParser,\n tokType: TokenType,\n idx: number,\n options: ConsumeMethodOpts\n ): IToken {\n let consumedToken\n try {\n let nextToken = this.LA(1)\n if (this.tokenMatcher(nextToken, tokType) === true) {\n this.consumeToken()\n consumedToken = nextToken\n } else {\n this.consumeInternalError(tokType, nextToken, options)\n }\n } catch (eFromConsumption) {\n consumedToken = this.consumeInternalRecovery(\n tokType,\n idx,\n eFromConsumption\n )\n }\n\n this.cstPostTerminal(\n options !== undefined && options.LABEL !== undefined\n ? options.LABEL\n : tokType.name,\n consumedToken\n )\n return consumedToken\n }\n\n consumeInternalError(\n this: MixedInParser,\n tokType: TokenType,\n nextToken: IToken,\n options: ConsumeMethodOpts\n ): void {\n let msg\n let previousToken = this.LA(0)\n if (options !== undefined && options.ERR_MSG) {\n msg = options.ERR_MSG\n } else {\n msg = this.errorMessageProvider.buildMismatchTokenMessage({\n expected: tokType,\n actual: nextToken,\n previous: previousToken,\n ruleName: this.getCurrRuleFullName()\n })\n }\n throw this.SAVE_ERROR(\n new MismatchedTokenException(msg, nextToken, previousToken)\n )\n }\n\n consumeInternalRecovery(\n this: MixedInParser,\n tokType: TokenType,\n idx: number,\n eFromConsumption: Error\n ): IToken {\n // no recovery allowed during backtracking, otherwise backtracking may recover invalid syntax and accept it\n // but the original syntax could have been parsed successfully without any backtracking + recovery\n if (\n this.recoveryEnabled &&\n // TODO: more robust checking of the exception type. Perhaps Typescript extending expressions?\n eFromConsumption.name === \"MismatchedTokenException\" &&\n !this.isBackTracking()\n ) {\n let follows = this.getFollowsForInRuleRecovery(tokType, idx)\n try {\n return this.tryInRuleRecovery(tokType, follows)\n } catch (eFromInRuleRecovery) {\n if (eFromInRuleRecovery.name === IN_RULE_RECOVERY_EXCEPTION) {\n // failed in RuleRecovery.\n // throw the original error in order to trigger reSync error recovery\n throw eFromConsumption\n } else {\n throw eFromInRuleRecovery\n }\n }\n } else {\n throw eFromConsumption\n }\n }\n\n saveRecogState(this: MixedInParser): IParserState {\n // errors is a getter which will clone the errors array\n let savedErrors = this.errors\n let savedRuleStack = cloneArr(this.RULE_STACK)\n return {\n errors: savedErrors,\n lexerState: this.exportLexerState(),\n RULE_STACK: savedRuleStack,\n CST_STACK: this.CST_STACK\n }\n }\n\n reloadRecogState(this: MixedInParser, newState: IParserState) {\n this.errors = newState.errors\n this.importLexerState(newState.lexerState)\n this.RULE_STACK = newState.RULE_STACK\n }\n\n ruleInvocationStateUpdate(\n this: MixedInParser,\n shortName: string,\n fullName: string,\n idxInCallingRule: number\n ): void {\n this.RULE_OCCURRENCE_STACK.push(idxInCallingRule)\n this.RULE_STACK.push(shortName)\n // NOOP when cst is disabled\n this.cstInvocationStateUpdate(fullName, shortName)\n }\n\n isBackTracking(this: MixedInParser): boolean {\n return this.isBackTrackingStack.length !== 0\n }\n\n getCurrRuleFullName(this: MixedInParser): string {\n let shortName = this.getLastExplicitRuleShortName()\n return this.shortRuleNameToFull[shortName]\n }\n\n shortRuleNameToFullName(this: MixedInParser, shortName: string) {\n return this.shortRuleNameToFull[shortName]\n }\n\n public isAtEndOfInput(this: MixedInParser): boolean {\n return this.tokenMatcher(this.LA(1), EOF)\n }\n\n public reset(this: MixedInParser): void {\n this.resetLexerState()\n\n this.isBackTrackingStack = []\n this.errors = []\n this.RULE_STACK = []\n // TODO: extract a specific reset for TreeBuilder trait\n this.CST_STACK = []\n this.RULE_OCCURRENCE_STACK = []\n }\n}\n","import {\n IParserConfig,\n IParserErrorMessageProvider,\n IRecognitionException\n} from \"../../../../api\"\nimport {\n EarlyExitException,\n isRecognitionException,\n NoViableAltException\n} from \"../../exceptions_public\"\nimport { cloneArr, has } from \"../../../utils/utils\"\nimport {\n getLookaheadPathsForOptionalProd,\n getLookaheadPathsForOr,\n PROD_TYPE\n} from \"../../grammar/lookahead\"\nimport { MixedInParser } from \"./parser_traits\"\nimport { DEFAULT_PARSER_CONFIG } from \"../parser\"\n\n/**\n * Trait responsible for runtime parsing errors.\n */\nexport class ErrorHandler {\n _errors: IRecognitionException[]\n errorMessageProvider: IParserErrorMessageProvider\n\n initErrorHandler(config: IParserConfig) {\n this._errors = []\n this.errorMessageProvider = has(config, \"errorMessageProvider\")\n ? config.errorMessageProvider\n : DEFAULT_PARSER_CONFIG.errorMessageProvider\n }\n\n SAVE_ERROR(\n this: MixedInParser,\n error: IRecognitionException\n ): IRecognitionException {\n if (isRecognitionException(error)) {\n error.context = {\n ruleStack: this.getHumanReadableRuleStack(),\n ruleOccurrenceStack: cloneArr(this.RULE_OCCURRENCE_STACK)\n }\n this._errors.push(error)\n return error\n } else {\n throw Error(\"Trying to save an Error which is not a RecognitionException\")\n }\n }\n\n get errors(): IRecognitionException[] {\n return cloneArr(this._errors)\n }\n\n set errors(newErrors: IRecognitionException[]) {\n this._errors = newErrors\n }\n\n // TODO: consider caching the error message computed information\n raiseEarlyExitException(\n this: MixedInParser,\n occurrence: number,\n prodType: PROD_TYPE,\n userDefinedErrMsg: string\n ): void {\n let ruleName = this.getCurrRuleFullName()\n let ruleGrammar = this.getGAstProductions()[ruleName]\n let lookAheadPathsPerAlternative = getLookaheadPathsForOptionalProd(\n occurrence,\n ruleGrammar,\n prodType,\n this.maxLookahead\n )\n let insideProdPaths = lookAheadPathsPerAlternative[0]\n let actualTokens = []\n for (let i = 1; i <= this.maxLookahead; i++) {\n actualTokens.push(this.LA(i))\n }\n let msg = this.errorMessageProvider.buildEarlyExitMessage({\n expectedIterationPaths: insideProdPaths,\n actual: actualTokens,\n previous: this.LA(0),\n customUserDescription: userDefinedErrMsg,\n ruleName: ruleName\n })\n\n throw this.SAVE_ERROR(new EarlyExitException(msg, this.LA(1), this.LA(0)))\n }\n\n // TODO: consider caching the error message computed information\n raiseNoAltException(\n this: MixedInParser,\n occurrence: number,\n errMsgTypes: string\n ): void {\n let ruleName = this.getCurrRuleFullName()\n let ruleGrammar = this.getGAstProductions()[ruleName]\n // TODO: getLookaheadPathsForOr can be slow for large enough maxLookahead and certain grammars, consider caching ?\n let lookAheadPathsPerAlternative = getLookaheadPathsForOr(\n occurrence,\n ruleGrammar,\n this.maxLookahead\n )\n\n let actualTokens = []\n for (let i = 1; i <= this.maxLookahead; i++) {\n actualTokens.push(this.LA(i))\n }\n let previousToken = this.LA(0)\n\n let errMsg = this.errorMessageProvider.buildNoViableAltMessage({\n expectedPathsPerAlt: lookAheadPathsPerAlternative,\n actual: actualTokens,\n previous: previousToken,\n customUserDescription: errMsgTypes,\n ruleName: this.getCurrRuleFullName()\n })\n\n throw this.SAVE_ERROR(\n new NoViableAltException(errMsg, this.LA(1), previousToken)\n )\n }\n}\n","import {\n ISyntacticContentAssistPath,\n IToken,\n ITokenGrammarPath,\n TokenType\n} from \"../../../../api\"\nimport {\n NextAfterTokenWalker,\n nextPossibleTokensAfter\n} from \"../../grammar/interpreter\"\nimport { first, isUndefined } from \"../../../utils/utils\"\nimport { MixedInParser } from \"./parser_traits\"\n\nexport class ContentAssist {\n initContentAssist() {}\n\n public computeContentAssist(\n this: MixedInParser,\n startRuleName: string,\n precedingInput: IToken[]\n ): ISyntacticContentAssistPath[] {\n let startRuleGast = this.gastProductionsCache[startRuleName]\n\n if (isUndefined(startRuleGast)) {\n throw Error(`Rule ->${startRuleName}<- does not exist in this grammar.`)\n }\n\n return nextPossibleTokensAfter(\n [startRuleGast],\n precedingInput,\n this.tokenMatcher,\n this.maxLookahead\n )\n }\n\n // TODO: should this be a member method or a utility? it does not have any state or usage of 'this'...\n // TODO: should this be more explicitly part of the public API?\n public getNextPossibleTokenTypes(\n this: MixedInParser,\n grammarPath: ITokenGrammarPath\n ): TokenType[] {\n let topRuleName = first(grammarPath.ruleStack)\n let gastProductions = this.getGAstProductions()\n let topProduction = gastProductions[topRuleName]\n let nextPossibleTokenTypes = new NextAfterTokenWalker(\n topProduction,\n grammarPath\n ).startWalking()\n return nextPossibleTokenTypes\n }\n}\n","import {\n AtLeastOneSepMethodOpts,\n ConsumeMethodOpts,\n CstNode,\n DSLMethodOpts,\n DSLMethodOptsWithErr,\n GrammarAction,\n IOrAlt,\n IParserConfig,\n IProduction,\n IToken,\n ManySepMethodOpts,\n OrMethodOpts,\n SubruleMethodOpts,\n TokenType\n} from \"../../../../api\"\nimport {\n forEach,\n has,\n isArray,\n isFunction,\n peek,\n some\n} from \"../../../utils/utils\"\nimport { MixedInParser } from \"./parser_traits\"\nimport {\n Alternation,\n Alternative,\n NonTerminal,\n Option,\n Repetition,\n RepetitionMandatory,\n RepetitionMandatoryWithSeparator,\n RepetitionWithSeparator,\n Rule,\n Terminal\n} from \"../../grammar/gast/gast_public\"\nimport { Lexer } from \"../../../scan/lexer_public\"\nimport { augmentTokenTypes, hasShortKeyProperty } from \"../../../scan/tokens\"\nimport { createToken, createTokenInstance } from \"../../../scan/tokens_public\"\nimport { END_OF_FILE } from \"../parser\"\nimport { BITS_FOR_OCCURRENCE_IDX } from \"../../grammar/keys\"\n\ntype ProdWithDef = IProduction & { definition?: IProduction[] }\nconst RECORDING_NULL_OBJECT = {\n description: \"This Object indicates the Parser is during Recording Phase\"\n}\nObject.freeze(RECORDING_NULL_OBJECT)\n\nconst HANDLE_SEPARATOR = true\nconst MAX_METHOD_IDX = Math.pow(2, BITS_FOR_OCCURRENCE_IDX) - 1\n\nconst RFT = createToken({ name: \"RECORDING_PHASE_TOKEN\", pattern: Lexer.NA })\naugmentTokenTypes([RFT])\nconst RECORDING_PHASE_TOKEN = createTokenInstance(\n RFT,\n \"This IToken indicates the Parser is in Recording Phase\\n\\t\" +\n \"\" +\n \"See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details\",\n // Using \"-1\" instead of NaN (as in EOF) because an actual number is less likely to\n // cause errors if the output of LA or CONSUME would be (incorrectly) used during the recording phase.\n -1,\n -1,\n -1,\n -1,\n -1,\n -1\n)\nObject.freeze(RECORDING_PHASE_TOKEN)\n\nconst RECORDING_PHASE_CSTNODE: CstNode = {\n name:\n \"This CSTNode indicates the Parser is in Recording Phase\\n\\t\" +\n \"See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details\",\n children: {}\n}\n\n/**\n * This trait handles the creation of the GAST structure for Chevrotain Grammars\n */\nexport class GastRecorder {\n recordingProdStack: ProdWithDef[]\n RECORDING_PHASE: boolean\n\n initGastRecorder(this: MixedInParser, config: IParserConfig): void {\n this.recordingProdStack = []\n this.RECORDING_PHASE = false\n }\n\n enableRecording(this: MixedInParser): void {\n this.RECORDING_PHASE = true\n\n this.TRACE_INIT(\"Enable Recording\", () => {\n /**\n * Warning Dark Voodoo Magic upcoming!\n * We are \"replacing\" the public parsing DSL methods API\n * With **new** alternative implementations on the Parser **instance**\n *\n * So far this is the only way I've found to avoid performance regressions during parsing time.\n * - Approx 30% performance regression was measured on Chrome 75 Canary when attempting to replace the \"internal\"\n * implementations directly instead.\n */\n for (let i = 0; i < 10; i++) {\n const idx = i > 0 ? i : \"\"\n this[`CONSUME${idx}`] = function (arg1, arg2) {\n return this.consumeInternalRecord(arg1, i, arg2)\n }\n this[`SUBRULE${idx}`] = function (arg1, arg2) {\n return this.subruleInternalRecord(arg1, i, arg2)\n }\n this[`OPTION${idx}`] = function (arg1) {\n return this.optionInternalRecord(arg1, i)\n }\n this[`OR${idx}`] = function (arg1) {\n return this.orInternalRecord(arg1, i)\n }\n this[`MANY${idx}`] = function (arg1) {\n this.manyInternalRecord(i, arg1)\n }\n this[`MANY_SEP${idx}`] = function (arg1) {\n this.manySepFirstInternalRecord(i, arg1)\n }\n this[`AT_LEAST_ONE${idx}`] = function (arg1) {\n this.atLeastOneInternalRecord(i, arg1)\n }\n this[`AT_LEAST_ONE_SEP${idx}`] = function (arg1) {\n this.atLeastOneSepFirstInternalRecord(i, arg1)\n }\n }\n\n // DSL methods with the idx(suffix) as an argument\n this[`consume`] = function (idx, arg1, arg2) {\n return this.consumeInternalRecord(arg1, idx, arg2)\n }\n this[`subrule`] = function (idx, arg1, arg2) {\n return this.subruleInternalRecord(arg1, idx, arg2)\n }\n this[`option`] = function (idx, arg1) {\n return this.optionInternalRecord(arg1, idx)\n }\n this[`or`] = function (idx, arg1) {\n return this.orInternalRecord(arg1, idx)\n }\n this[`many`] = function (idx, arg1) {\n this.manyInternalRecord(idx, arg1)\n }\n this[`atLeastOne`] = function (idx, arg1) {\n this.atLeastOneInternalRecord(idx, arg1)\n }\n\n this.ACTION = this.ACTION_RECORD\n this.BACKTRACK = this.BACKTRACK_RECORD\n this.LA = this.LA_RECORD\n })\n }\n\n disableRecording(this: MixedInParser) {\n this.RECORDING_PHASE = false\n // By deleting these **instance** properties, any future invocation\n // will be deferred to the original methods on the **prototype** object\n // This seems to get rid of any incorrect optimizations that V8 may\n // do during the recording phase.\n this.TRACE_INIT(\"Deleting Recording methods\", () => {\n for (let i = 0; i < 10; i++) {\n const idx = i > 0 ? i : \"\"\n delete this[`CONSUME${idx}`]\n delete this[`SUBRULE${idx}`]\n delete this[`OPTION${idx}`]\n delete this[`OR${idx}`]\n delete this[`MANY${idx}`]\n delete this[`MANY_SEP${idx}`]\n delete this[`AT_LEAST_ONE${idx}`]\n delete this[`AT_LEAST_ONE_SEP${idx}`]\n }\n\n delete this[`consume`]\n delete this[`subrule`]\n delete this[`option`]\n delete this[`or`]\n delete this[`many`]\n delete this[`atLeastOne`]\n\n delete this.ACTION\n delete this.BACKTRACK\n delete this.LA\n })\n }\n\n // TODO: is there any way to use this method to check no\n // Parser methods are called inside an ACTION?\n // Maybe try/catch/finally on ACTIONS while disabling the recorders state changes?\n ACTION_RECORD(this: MixedInParser, impl: () => T): T {\n // NO-OP during recording\n return\n }\n\n // Executing backtracking logic will break our recording logic assumptions\n BACKTRACK_RECORD(\n grammarRule: (...args: any[]) => T,\n args?: any[]\n ): () => boolean {\n return () => true\n }\n\n // LA is part of the official API and may be used for custom lookahead logic\n // by end users who may forget to wrap it in ACTION or inside a GATE\n LA_RECORD(howMuch: number): IToken {\n // We cannot use the RECORD_PHASE_TOKEN here because someone may depend\n // On LA return EOF at the end of the input so an infinite loop may occur.\n return END_OF_FILE\n }\n\n topLevelRuleRecord(name: string, def: Function): Rule {\n try {\n const newTopLevelRule = new Rule({ definition: [], name: name })\n newTopLevelRule.name = name\n this.recordingProdStack.push(newTopLevelRule)\n def.call(this)\n this.recordingProdStack.pop()\n return newTopLevelRule\n } catch (originalError) {\n if (originalError.KNOWN_RECORDER_ERROR !== true) {\n try {\n originalError.message =\n originalError.message +\n '\\n\\t This error was thrown during the \"grammar recording phase\" For more info see:\\n\\t' +\n \"https://chevrotain.io/docs/guide/internals.html#grammar-recording\"\n } catch (mutabilityError) {\n // We may not be able to modify the original error object\n throw originalError\n }\n }\n throw originalError\n }\n }\n\n // Implementation of parsing DSL\n optionInternalRecord(\n this: MixedInParser,\n actionORMethodDef: GrammarAction | DSLMethodOpts,\n occurrence: number\n ): OUT {\n return recordProd.call(this, Option, actionORMethodDef, occurrence)\n }\n\n atLeastOneInternalRecord(\n this: MixedInParser,\n occurrence: number,\n actionORMethodDef: GrammarAction | DSLMethodOptsWithErr\n ): void {\n recordProd.call(this, RepetitionMandatory, actionORMethodDef, occurrence)\n }\n\n atLeastOneSepFirstInternalRecord(\n this: MixedInParser,\n occurrence: number,\n options: AtLeastOneSepMethodOpts\n ): void {\n recordProd.call(\n this,\n RepetitionMandatoryWithSeparator,\n options,\n occurrence,\n HANDLE_SEPARATOR\n )\n }\n\n manyInternalRecord(\n this: MixedInParser,\n occurrence: number,\n actionORMethodDef: GrammarAction | DSLMethodOpts\n ): void {\n recordProd.call(this, Repetition, actionORMethodDef, occurrence)\n }\n\n manySepFirstInternalRecord(\n this: MixedInParser,\n occurrence: number,\n options: ManySepMethodOpts\n ): void {\n recordProd.call(\n this,\n RepetitionWithSeparator,\n options,\n occurrence,\n HANDLE_SEPARATOR\n )\n }\n\n orInternalRecord(\n this: MixedInParser,\n altsOrOpts: IOrAlt[] | OrMethodOpts,\n occurrence: number\n ): T {\n return recordOrProd.call(this, altsOrOpts, occurrence)\n }\n\n subruleInternalRecord(\n this: MixedInParser,\n ruleToCall: (idx: number) => T,\n occurrence: number,\n options?: SubruleMethodOpts\n ): T | CstNode {\n assertMethodIdxIsValid(occurrence)\n if (!ruleToCall || has(ruleToCall, \"ruleName\") === false) {\n const error: any = new Error(\n ` argument is invalid` +\n ` expecting a Parser method reference but got: <${JSON.stringify(\n ruleToCall\n )}>` +\n `\\n inside top level rule: <${\n (this.recordingProdStack[0]).name\n }>`\n )\n error.KNOWN_RECORDER_ERROR = true\n throw error\n }\n\n const prevProd: any = peek(this.recordingProdStack)\n const ruleName = ruleToCall[\"ruleName\"]\n const newNoneTerminal = new NonTerminal({\n idx: occurrence,\n nonTerminalName: ruleName,\n // The resolving of the `referencedRule` property will be done once all the Rule's GASTs have been created\n referencedRule: undefined\n })\n prevProd.definition.push(newNoneTerminal)\n\n return this.outputCst ? RECORDING_PHASE_CSTNODE : RECORDING_NULL_OBJECT\n }\n\n consumeInternalRecord(\n this: MixedInParser,\n tokType: TokenType,\n occurrence: number,\n options: ConsumeMethodOpts\n ): IToken {\n assertMethodIdxIsValid(occurrence)\n if (!hasShortKeyProperty(tokType)) {\n const error: any = new Error(\n ` argument is invalid` +\n ` expecting a TokenType reference but got: <${JSON.stringify(\n tokType\n )}>` +\n `\\n inside top level rule: <${\n (this.recordingProdStack[0]).name\n }>`\n )\n error.KNOWN_RECORDER_ERROR = true\n throw error\n }\n const prevProd: any = peek(this.recordingProdStack)\n const newNoneTerminal = new Terminal({\n idx: occurrence,\n terminalType: tokType\n })\n prevProd.definition.push(newNoneTerminal)\n\n return RECORDING_PHASE_TOKEN\n }\n}\n\nfunction recordProd(\n prodConstructor: any,\n mainProdArg: any,\n occurrence: number,\n handleSep: boolean = false\n): any {\n assertMethodIdxIsValid(occurrence)\n const prevProd: any = peek(this.recordingProdStack)\n const grammarAction = isFunction(mainProdArg) ? mainProdArg : mainProdArg.DEF\n\n const newProd = new prodConstructor({ definition: [], idx: occurrence })\n if (handleSep) {\n newProd.separator = mainProdArg.SEP\n }\n if (has(mainProdArg, \"MAX_LOOKAHEAD\")) {\n newProd.maxLookahead = mainProdArg.MAX_LOOKAHEAD\n }\n\n this.recordingProdStack.push(newProd)\n grammarAction.call(this)\n prevProd.definition.push(newProd)\n this.recordingProdStack.pop()\n\n return RECORDING_NULL_OBJECT\n}\n\nfunction recordOrProd(mainProdArg: any, occurrence: number): any {\n assertMethodIdxIsValid(occurrence)\n const prevProd: any = peek(this.recordingProdStack)\n // Only an array of alternatives\n const hasOptions = isArray(mainProdArg) === false\n const alts = hasOptions === false ? mainProdArg : mainProdArg.DEF\n\n const newOrProd = new Alternation({\n definition: [],\n idx: occurrence,\n ignoreAmbiguities: hasOptions && mainProdArg.IGNORE_AMBIGUITIES === true\n })\n if (has(mainProdArg, \"MAX_LOOKAHEAD\")) {\n newOrProd.maxLookahead = mainProdArg.MAX_LOOKAHEAD\n }\n\n const hasPredicates = some(alts, (currAlt: any) => isFunction(currAlt.GATE))\n newOrProd.hasPredicates = hasPredicates\n\n prevProd.definition.push(newOrProd)\n\n forEach(alts, (currAlt) => {\n const currAltFlat = new Alternative({ definition: [] })\n newOrProd.definition.push(currAltFlat)\n if (has(currAlt, \"IGNORE_AMBIGUITIES\")) {\n currAltFlat.ignoreAmbiguities = currAlt.IGNORE_AMBIGUITIES\n }\n // **implicit** ignoreAmbiguities due to usage of gate\n else if (has(currAlt, \"GATE\")) {\n currAltFlat.ignoreAmbiguities = true\n }\n this.recordingProdStack.push(currAltFlat)\n currAlt.ALT.call(this)\n this.recordingProdStack.pop()\n })\n return RECORDING_NULL_OBJECT\n}\n\nfunction getIdxSuffix(idx: number): string {\n return idx === 0 ? \"\" : `${idx}`\n}\n\nfunction assertMethodIdxIsValid(idx): void {\n if (idx < 0 || idx > MAX_METHOD_IDX) {\n const error: any = new Error(\n // The stack trace will contain all the needed details\n `Invalid DSL Method idx value: <${idx}>\\n\\t` +\n `Idx value must be a none negative value smaller than ${\n MAX_METHOD_IDX + 1\n }`\n )\n error.KNOWN_RECORDER_ERROR = true\n throw error\n }\n}\n","import { IParserConfig } from \"../../../../api\"\nimport { has, timer } from \"../../../utils/utils\"\nimport { MixedInParser } from \"./parser_traits\"\nimport { DEFAULT_PARSER_CONFIG } from \"../parser\"\n\n/**\n * Trait responsible for runtime parsing errors.\n */\nexport class PerformanceTracer {\n traceInitPerf: boolean | number\n traceInitMaxIdent: number\n traceInitIndent: number\n\n initPerformanceTracer(config: IParserConfig) {\n if (has(config, \"traceInitPerf\")) {\n const userTraceInitPerf = config.traceInitPerf\n const traceIsNumber = typeof userTraceInitPerf === \"number\"\n this.traceInitMaxIdent = traceIsNumber\n ? userTraceInitPerf\n : Infinity\n this.traceInitPerf = traceIsNumber\n ? userTraceInitPerf > 0\n : userTraceInitPerf\n } else {\n this.traceInitMaxIdent = 0\n this.traceInitPerf = DEFAULT_PARSER_CONFIG.traceInitPerf\n }\n\n this.traceInitIndent = -1\n }\n\n TRACE_INIT(this: MixedInParser, phaseDesc: string, phaseImpl: () => T): T {\n // No need to optimize this using NOOP pattern because\n // It is not called in a hot spot...\n if (this.traceInitPerf === true) {\n this.traceInitIndent++\n const indent = new Array(this.traceInitIndent + 1).join(\"\\t\")\n if (this.traceInitIndent < this.traceInitMaxIdent) {\n console.log(`${indent}--> <${phaseDesc}>`)\n }\n const { time, value } = timer(phaseImpl)\n /* istanbul ignore next - Difficult to reproduce specific performance behavior (>10ms) in tests */\n const traceMethod = time > 10 ? console.warn : console.log\n if (this.traceInitIndent < this.traceInitMaxIdent) {\n traceMethod(`${indent}<-- <${phaseDesc}> time: ${time}ms`)\n }\n this.traceInitIndent--\n return value\n } else {\n return phaseImpl()\n }\n }\n}\n","import {\n applyMixins,\n cloneObj,\n forEach,\n has,\n isEmpty,\n map,\n toFastProperties,\n values\n} from \"../../utils/utils\"\nimport { computeAllProdsFollows } from \"../grammar/follow\"\nimport { createTokenInstance, EOF } from \"../../scan/tokens_public\"\nimport {\n defaultGrammarValidatorErrorProvider,\n defaultParserErrorProvider\n} from \"../errors_public\"\nimport {\n resolveGrammar,\n validateGrammar\n} from \"../grammar/gast/gast_resolver_public\"\nimport {\n CstNode,\n IParserConfig,\n IParserDefinitionError,\n IRecognitionException,\n IRuleConfig,\n IToken,\n TokenType,\n TokenVocabulary\n} from \"../../../api\"\nimport { Recoverable } from \"./traits/recoverable\"\nimport { LooksAhead } from \"./traits/looksahead\"\nimport { TreeBuilder } from \"./traits/tree_builder\"\nimport { LexerAdapter } from \"./traits/lexer_adapter\"\nimport { RecognizerApi } from \"./traits/recognizer_api\"\nimport { RecognizerEngine } from \"./traits/recognizer_engine\"\n\nimport { ErrorHandler } from \"./traits/error_handler\"\nimport { MixedInParser } from \"./traits/parser_traits\"\nimport { ContentAssist } from \"./traits/context_assist\"\nimport { GastRecorder } from \"./traits/gast_recorder\"\nimport { PerformanceTracer } from \"./traits/perf_tracer\"\n\nexport const END_OF_FILE = createTokenInstance(\n EOF,\n \"\",\n NaN,\n NaN,\n NaN,\n NaN,\n NaN,\n NaN\n)\nObject.freeze(END_OF_FILE)\n\nexport type TokenMatcher = (token: IToken, tokType: TokenType) => boolean\n\nexport type lookAheadSequence = TokenType[][]\n\nexport const DEFAULT_PARSER_CONFIG: IParserConfig = Object.freeze({\n recoveryEnabled: false,\n maxLookahead: 3,\n dynamicTokensEnabled: false,\n outputCst: true,\n errorMessageProvider: defaultParserErrorProvider,\n nodeLocationTracking: \"none\",\n traceInitPerf: false,\n skipValidations: false\n})\n\nexport const DEFAULT_RULE_CONFIG: IRuleConfig = Object.freeze({\n recoveryValueFunc: () => undefined,\n resyncEnabled: true\n})\n\nexport enum ParserDefinitionErrorType {\n INVALID_RULE_NAME = 0,\n DUPLICATE_RULE_NAME = 1,\n INVALID_RULE_OVERRIDE = 2,\n DUPLICATE_PRODUCTIONS = 3,\n UNRESOLVED_SUBRULE_REF = 4,\n LEFT_RECURSION = 5,\n NONE_LAST_EMPTY_ALT = 6,\n AMBIGUOUS_ALTS = 7,\n CONFLICT_TOKENS_RULES_NAMESPACE = 8,\n INVALID_TOKEN_NAME = 9,\n NO_NON_EMPTY_LOOKAHEAD = 10,\n AMBIGUOUS_PREFIX_ALTS = 11,\n TOO_MANY_ALTS = 12\n}\n\nexport interface IParserDuplicatesDefinitionError\n extends IParserDefinitionError {\n dslName: string\n occurrence: number\n parameter?: string\n}\n\nexport interface IParserEmptyAlternativeDefinitionError\n extends IParserDefinitionError {\n occurrence: number\n alternative: number\n}\n\nexport interface IParserAmbiguousAlternativesDefinitionError\n extends IParserDefinitionError {\n occurrence: number\n alternatives: number[]\n}\n\nexport interface IParserUnresolvedRefDefinitionError\n extends IParserDefinitionError {\n unresolvedRefName: string\n}\n\nexport interface IParserState {\n errors: IRecognitionException[]\n lexerState: any\n RULE_STACK: string[]\n CST_STACK: CstNode[]\n}\n\nexport type Predicate = () => boolean\n\nexport function EMPTY_ALT(value: T = undefined): () => T {\n return function () {\n return value\n }\n}\n\nexport class Parser {\n // Set this flag to true if you don't want the Parser to throw error when problems in it's definition are detected.\n // (normally during the parser's constructor).\n // This is a design time flag, it will not affect the runtime error handling of the parser, just design time errors,\n // for example: duplicate rule names, referencing an unresolved subrule, ect...\n // This flag should not be enabled during normal usage, it is used in special situations, for example when\n // needing to display the parser definition errors in some GUI(online playground).\n static DEFER_DEFINITION_ERRORS_HANDLING: boolean = false\n\n /**\n * @deprecated use the **instance** method with the same name instead\n */\n static performSelfAnalysis(parserInstance: Parser): void {\n throw Error(\n \"The **static** `performSelfAnalysis` method has been deprecated.\" +\n \"\\t\\nUse the **instance** method with the same name instead.\"\n )\n }\n\n public performSelfAnalysis(this: MixedInParser): void {\n this.TRACE_INIT(\"performSelfAnalysis\", () => {\n let defErrorsMsgs\n\n this.selfAnalysisDone = true\n let className = this.className\n\n this.TRACE_INIT(\"toFastProps\", () => {\n // Without this voodoo magic the parser would be x3-x4 slower\n // It seems it is better to invoke `toFastProperties` **before**\n // Any manipulations of the `this` object done during the recording phase.\n toFastProperties(this)\n })\n\n this.TRACE_INIT(\"Grammar Recording\", () => {\n try {\n this.enableRecording()\n // Building the GAST\n forEach(this.definedRulesNames, (currRuleName) => {\n const wrappedRule = this[currRuleName]\n const originalGrammarAction = wrappedRule[\"originalGrammarAction\"]\n let recordedRuleGast = undefined\n this.TRACE_INIT(`${currRuleName} Rule`, () => {\n recordedRuleGast = this.topLevelRuleRecord(\n currRuleName,\n originalGrammarAction\n )\n })\n this.gastProductionsCache[currRuleName] = recordedRuleGast\n })\n } finally {\n this.disableRecording()\n }\n })\n\n let resolverErrors = []\n this.TRACE_INIT(\"Grammar Resolving\", () => {\n resolverErrors = resolveGrammar({\n rules: values(this.gastProductionsCache)\n })\n this.definitionErrors.push.apply(this.definitionErrors, resolverErrors) // mutability for the win?\n })\n\n this.TRACE_INIT(\"Grammar Validations\", () => {\n // only perform additional grammar validations IFF no resolving errors have occurred.\n // as unresolved grammar may lead to unhandled runtime exceptions in the follow up validations.\n if (isEmpty(resolverErrors) && this.skipValidations === false) {\n let validationErrors = validateGrammar({\n rules: values(this.gastProductionsCache),\n maxLookahead: this.maxLookahead,\n tokenTypes: values(this.tokensMap),\n errMsgProvider: defaultGrammarValidatorErrorProvider,\n grammarName: className\n })\n\n this.definitionErrors.push.apply(\n this.definitionErrors,\n validationErrors\n ) // mutability for the win?\n }\n })\n\n // this analysis may fail if the grammar is not perfectly valid\n if (isEmpty(this.definitionErrors)) {\n // The results of these computations are not needed unless error recovery is enabled.\n if (this.recoveryEnabled) {\n this.TRACE_INIT(\"computeAllProdsFollows\", () => {\n let allFollows = computeAllProdsFollows(\n values(this.gastProductionsCache)\n )\n this.resyncFollows = allFollows\n })\n }\n\n this.TRACE_INIT(\"ComputeLookaheadFunctions\", () => {\n this.preComputeLookaheadFunctions(values(this.gastProductionsCache))\n })\n }\n\n if (\n !Parser.DEFER_DEFINITION_ERRORS_HANDLING &&\n !isEmpty(this.definitionErrors)\n ) {\n defErrorsMsgs = map(\n this.definitionErrors,\n (defError) => defError.message\n )\n throw new Error(\n `Parser Definition Errors detected:\\n ${defErrorsMsgs.join(\n \"\\n-------------------------------\\n\"\n )}`\n )\n }\n })\n }\n\n definitionErrors: IParserDefinitionError[] = []\n selfAnalysisDone = false\n protected skipValidations: boolean\n\n constructor(tokenVocabulary: TokenVocabulary, config: IParserConfig) {\n const that: MixedInParser = this as any\n that.initErrorHandler(config)\n that.initLexerAdapter()\n that.initLooksAhead(config)\n that.initRecognizerEngine(tokenVocabulary, config)\n that.initRecoverable(config)\n that.initTreeBuilder(config)\n that.initContentAssist()\n that.initGastRecorder(config)\n that.initPerformanceTracer(config)\n\n if (has(config, \"ignoredIssues\")) {\n throw new Error(\n \"The IParserConfig property has been deprecated.\\n\\t\" +\n \"Please use the flag on the relevant DSL method instead.\\n\\t\" +\n \"See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES\\n\\t\" +\n \"For further details.\"\n )\n }\n\n this.skipValidations = has(config, \"skipValidations\")\n ? config.skipValidations\n : DEFAULT_PARSER_CONFIG.skipValidations\n }\n}\n\napplyMixins(Parser, [\n Recoverable,\n LooksAhead,\n TreeBuilder,\n LexerAdapter,\n RecognizerEngine,\n RecognizerApi,\n ErrorHandler,\n ContentAssist,\n GastRecorder,\n PerformanceTracer\n])\n\nexport class CstParser extends Parser {\n constructor(\n tokenVocabulary: TokenVocabulary,\n config: IParserConfig = DEFAULT_PARSER_CONFIG\n ) {\n const configClone = cloneObj(config)\n configClone.outputCst = true\n super(tokenVocabulary, configClone)\n }\n}\n\nexport class EmbeddedActionsParser extends Parser {\n constructor(\n tokenVocabulary: TokenVocabulary,\n config: IParserConfig = DEFAULT_PARSER_CONFIG\n ) {\n const configClone = cloneObj(config)\n configClone.outputCst = false\n super(tokenVocabulary, configClone)\n }\n}\n","import { VERSION } from \"../version\"\nimport { ISerializedGast } from \"../../api\"\n\nexport function createSyntaxDiagramsCode(\n grammar: ISerializedGast[],\n {\n resourceBase = `https://unpkg.com/chevrotain@${VERSION}/diagrams/`,\n css = `https://unpkg.com/chevrotain@${VERSION}/diagrams/diagrams.css`\n }: {\n resourceBase?: string\n css?: string\n } = {}\n) {\n const header = `\n\n\n\n\n\n`\n const cssHtml = `\n\n`\n\n const scripts = `\n\n\n\n\n`\n const diagramsDiv = `\n
\n`\n const serializedGrammar = `\n\n`\n\n const initLogic = `\n\n`\n return (\n header + cssHtml + scripts + diagramsDiv + serializedGrammar + initLogic\n )\n}\n","import { forEach, map } from \"../utils/utils\"\nimport {\n RepetitionMandatory,\n Option,\n RepetitionMandatoryWithSeparator,\n RepetitionWithSeparator,\n Terminal,\n NonTerminal,\n Alternation,\n Alternative,\n Repetition\n} from \"../parse/grammar/gast/gast_public\"\nimport { IProduction, TokenType, Rule } from \"../../api\"\n\n/**\n * Missing features\n * 1. Rule arguments\n * 2. Gates\n * 3. embedded actions\n */\n\nconst NL = \"\\n\"\n\nexport function genUmdModule(options: { name: string; rules: Rule[] }): string {\n return `\n(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(['chevrotain'], factory);\n } else if (typeof module === 'object' && module.exports) {\n // Node. Does not work with strict CommonJS, but\n // only CommonJS-like environments that support module.exports,\n // like Node.\n module.exports = factory(require('chevrotain'));\n } else {\n // Browser globals (root is window)\n root.returnExports = factory(root.b);\n }\n}(typeof self !== 'undefined' ? self : this, function (chevrotain) {\n\n${genClass(options)}\n \nreturn {\n ${options.name}: ${options.name} \n}\n}));\n`\n}\n\nexport function genWrapperFunction(options: {\n name: string\n rules: Rule[]\n}): string {\n return ` \n${genClass(options)}\nreturn new ${options.name}(tokenVocabulary, config) \n`\n}\n\nexport function genClass(options: { name: string; rules: Rule[] }): string {\n // TODO: how to pass the token vocabulary? Constructor? other?\n let result = `\nfunction ${options.name}(tokenVocabulary, config) {\n // invoke super constructor\n // No support for embedded actions currently, so we can 'hardcode'\n // The use of CstParser.\n chevrotain.CstParser.call(this, tokenVocabulary, config)\n\n const $ = this\n\n ${genAllRules(options.rules)}\n\n // very important to call this after all the rules have been defined.\n // otherwise the parser may not work correctly as it will lack information\n // derived during the self analysis phase.\n this.performSelfAnalysis(this)\n}\n\n// inheritance as implemented in javascript in the previous decade... :(\n${options.name}.prototype = Object.create(chevrotain.CstParser.prototype)\n${options.name}.prototype.constructor = ${options.name} \n `\n\n return result\n}\n\nexport function genAllRules(rules: Rule[]): string {\n let rulesText = map(rules, (currRule) => {\n return genRule(currRule, 1)\n })\n\n return rulesText.join(\"\\n\")\n}\n\nexport function genRule(prod: Rule, n: number): string {\n let result = indent(n, `$.RULE(\"${prod.name}\", function() {`) + NL\n result += genDefinition(prod.definition, n + 1)\n result += indent(n + 1, `})`) + NL\n return result\n}\n\nexport function genTerminal(prod: Terminal, n: number): string {\n const name = prod.terminalType.name\n // TODO: potential performance optimization, avoid tokenMap Dictionary access\n return indent(n, `$.CONSUME${prod.idx}(this.tokensMap.${name})` + NL)\n}\n\nexport function genNonTerminal(prod: NonTerminal, n: number): string {\n return indent(n, `$.SUBRULE${prod.idx}($.${prod.nonTerminalName})` + NL)\n}\n\nexport function genAlternation(prod: Alternation, n: number): string {\n let result = indent(n, `$.OR${prod.idx}([`) + NL\n const alts = map(prod.definition, (altDef) => genSingleAlt(altDef, n + 1))\n result += alts.join(\",\" + NL)\n result += NL + indent(n, `])` + NL)\n return result\n}\n\nexport function genSingleAlt(prod: Alternative, n: number): string {\n let result = indent(n, `{`) + NL\n\n result += indent(n + 1, \"ALT: function() {\") + NL\n result += genDefinition(prod.definition, n + 1)\n result += indent(n + 1, `}`) + NL\n result += indent(n, `}`)\n\n return result\n}\n\nfunction genProd(prod: IProduction, n: number): string {\n /* istanbul ignore else */\n if (prod instanceof NonTerminal) {\n return genNonTerminal(prod, n)\n } else if (prod instanceof Option) {\n return genDSLRule(\"OPTION\", prod, n)\n } else if (prod instanceof RepetitionMandatory) {\n return genDSLRule(\"AT_LEAST_ONE\", prod, n)\n } else if (prod instanceof RepetitionMandatoryWithSeparator) {\n return genDSLRule(\"AT_LEAST_ONE_SEP\", prod, n)\n } else if (prod instanceof RepetitionWithSeparator) {\n return genDSLRule(\"MANY_SEP\", prod, n)\n } else if (prod instanceof Repetition) {\n return genDSLRule(\"MANY\", prod, n)\n } else if (prod instanceof Alternation) {\n return genAlternation(prod, n)\n } else if (prod instanceof Terminal) {\n return genTerminal(prod, n)\n } else if (prod instanceof Alternative) {\n return genDefinition(prod.definition, n)\n } else {\n throw Error(\"non exhaustive match\")\n }\n}\n\nfunction genDSLRule(\n dslName,\n prod: {\n definition: IProduction[]\n idx: number\n separator?: TokenType\n },\n n: number\n): string {\n let result = indent(n, `$.${dslName + prod.idx}(`)\n\n if (prod.separator) {\n result += \"{\" + NL\n result +=\n indent(n + 1, `SEP: this.tokensMap.${prod.separator.name}`) + \",\" + NL\n result += `DEF: ${genDefFunction(prod.definition, n + 2)}` + NL\n result += indent(n, \"}\") + NL\n } else {\n result += genDefFunction(prod.definition, n + 1)\n }\n\n result += indent(n, `)`) + NL\n return result\n}\n\nfunction genDefFunction(definition: IProduction[], n: number): string {\n let def = \"function() {\" + NL\n def += genDefinition(definition, n)\n def += indent(n, `}`) + NL\n return def\n}\n\nfunction genDefinition(def: IProduction[], n: number): string {\n let result = \"\"\n forEach(def, (prod) => {\n result += genProd(prod, n + 1)\n })\n return result\n}\n\nfunction indent(howMuch: number, text: string): string {\n const spaces = Array(howMuch * 4 + 1).join(\" \")\n return spaces + text\n}\n","import { Rule, IParserConfig, TokenVocabulary, BaseParser } from \"../../api\"\nimport { genUmdModule, genWrapperFunction } from \"./generate\"\n\nexport function generateParserFactory(options: {\n name: string\n rules: Rule[]\n tokenVocabulary: TokenVocabulary\n}): (config?: IParserConfig) => T {\n const wrapperText = genWrapperFunction({\n name: options.name,\n rules: options.rules\n })\n\n const constructorWrapper = new Function(\n \"tokenVocabulary\",\n \"config\",\n \"chevrotain\",\n wrapperText\n )\n\n return function (config) {\n return constructorWrapper(\n options.tokenVocabulary,\n config,\n // TODO: check how the require is transpiled/webpacked\n require(\"../api\")\n )\n }\n}\n\nexport function generateParserModule(options: {\n name: string\n rules: Rule[]\n}): string {\n return genUmdModule({ name: options.name, rules: options.rules })\n}\n","/* istanbul ignore file - tricky to import some things from this module during testing */\n\n// semantic version\nexport { VERSION } from \"./version\"\n\nexport {\n CstParser,\n EmbeddedActionsParser,\n ParserDefinitionErrorType,\n EMPTY_ALT\n} from \"./parse/parser/parser\"\n\nexport { Lexer, LexerDefinitionErrorType } from \"./scan/lexer_public\"\n\n// Tokens utilities\n\nexport {\n createToken,\n createTokenInstance,\n EOF,\n tokenLabel,\n tokenMatcher,\n tokenName\n} from \"./scan/tokens_public\"\n\n// Other Utilities\n\nexport {\n defaultGrammarResolverErrorProvider,\n defaultGrammarValidatorErrorProvider,\n defaultParserErrorProvider\n} from \"./parse/errors_public\"\n\nexport {\n EarlyExitException,\n isRecognitionException,\n MismatchedTokenException,\n NotAllInputParsedException,\n NoViableAltException\n} from \"./parse/exceptions_public\"\n\nexport { defaultLexerErrorProvider } from \"./scan/lexer_errors_public\"\n\n// grammar reflection API\n\nexport {\n Alternation,\n Alternative,\n NonTerminal,\n Option,\n Repetition,\n RepetitionMandatory,\n RepetitionMandatoryWithSeparator,\n RepetitionWithSeparator,\n Rule,\n Terminal\n} from \"./parse/grammar/gast/gast_public\"\n\n// GAST Utilities\n\nexport {\n serializeGrammar,\n serializeProduction\n} from \"./parse/grammar/gast/gast_public\"\n\nexport { GAstVisitor } from \"./parse/grammar/gast/gast_visitor_public\"\n\nexport {\n assignOccurrenceIndices,\n resolveGrammar,\n validateGrammar\n} from \"./parse/grammar/gast/gast_resolver_public\"\n\n/* istanbul ignore next */\nexport function clearCache() {\n console.warn(\n \"The clearCache function was 'soft' removed from the Chevrotain API.\" +\n \"\\n\\t It performs no action other than printing this message.\" +\n \"\\n\\t Please avoid using it as it will be completely removed in the future\"\n )\n}\n\nexport { createSyntaxDiagramsCode } from \"./diagrams/render_public\"\n\nexport {\n generateParserFactory,\n generateParserModule\n} from \"./generate/generate_public\"\n\nexport class Parser {\n constructor() {\n throw new Error(\n \"The Parser class has been deprecated, use CstParser or EmbeddedActionsParser instead.\\t\\n\" +\n \"See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_7-0-0\"\n )\n }\n}\n","/*\n Utils using lodash style API. (not necessarily 100% compliant) for functional and other utils.\n These utils should replace usage of lodash in the production code base. not because they are any better...\n but for the purpose of being a dependency free library.\n\n The hotspots in the code are already written in imperative style for performance reasons.\n so writing several dozen utils which may be slower than the original lodash, does not matter as much\n considering they will not be invoked in hotspots...\n */\n\nexport function isEmpty(arr: any[]): boolean {\n return arr && arr.length === 0\n}\n\nexport function keys(obj: any): string[] {\n if (obj === undefined || obj === null) {\n return []\n }\n return Object.keys(obj)\n}\n\nexport function values(obj: any): any[] {\n let vals = []\n let keys = Object.keys(obj)\n for (let i = 0; i < keys.length; i++) {\n vals.push(obj[keys[i]])\n }\n return vals\n}\n\nexport function mapValues(\n obj: Object,\n callback: (value: I, key?: string) => O\n): O[] {\n let result: O[] = []\n let objKeys = keys(obj)\n for (let idx = 0; idx < objKeys.length; idx++) {\n let currKey = objKeys[idx]\n result.push(callback.call(null, obj[currKey], currKey))\n }\n return result\n}\n\nexport function map(arr: I[], callback: (I, idx?: number) => O): O[] {\n let result: O[] = []\n for (let idx = 0; idx < arr.length; idx++) {\n result.push(callback.call(null, arr[idx], idx))\n }\n return result\n}\n\nexport function flatten(arr: any[]): T[] {\n let result = []\n\n for (let idx = 0; idx < arr.length; idx++) {\n let currItem = arr[idx]\n if (Array.isArray(currItem)) {\n result = result.concat(flatten(currItem))\n } else {\n result.push(currItem)\n }\n }\n return result\n}\n\nexport function first(arr: T[]): T {\n return isEmpty(arr) ? undefined : arr[0]\n}\n\nexport function last(arr: T[]): T {\n let len = arr && arr.length\n return len ? arr[len - 1] : undefined\n}\n\nexport function forEach(collection: any, iteratorCallback: Function): void {\n /* istanbul ignore else */\n if (Array.isArray(collection)) {\n for (let i = 0; i < collection.length; i++) {\n iteratorCallback.call(null, collection[i], i)\n }\n } else if (isObject(collection)) {\n let colKeys = keys(collection)\n for (let i = 0; i < colKeys.length; i++) {\n let key = colKeys[i]\n let value = collection[key]\n iteratorCallback.call(null, value, key)\n }\n } else {\n throw Error(\"non exhaustive match\")\n }\n}\n\nexport function isString(item: any): boolean {\n return typeof item === \"string\"\n}\n\nexport function isUndefined(item: any): boolean {\n return item === undefined\n}\n\nexport function isFunction(item: any): boolean {\n return item instanceof Function\n}\n\nexport function drop(arr: T[], howMuch: number = 1): T[] {\n return arr.slice(howMuch, arr.length)\n}\n\nexport function dropRight(arr: T[], howMuch: number = 1): T[] {\n return arr.slice(0, arr.length - howMuch)\n}\n\nexport function filter(arr: T[], predicate: (T) => boolean): T[] {\n let result = []\n if (Array.isArray(arr)) {\n for (let i = 0; i < arr.length; i++) {\n let item = arr[i]\n if (predicate.call(null, item)) {\n result.push(item)\n }\n }\n }\n return result\n}\n\nexport function reject(arr: T[], predicate: (T) => boolean): T[] {\n return filter(arr, (item) => !predicate(item))\n}\n\nexport function pick(obj: Object, predicate: (item) => boolean) {\n let keys = Object.keys(obj)\n let result = {}\n\n for (let i = 0; i < keys.length; i++) {\n let currKey = keys[i]\n let currItem = obj[currKey]\n if (predicate(currItem)) {\n result[currKey] = currItem\n }\n }\n\n return result\n}\n\nexport function has(obj: any, prop: string): boolean {\n if (isObject(obj)) {\n return obj.hasOwnProperty(prop)\n }\n return false\n}\n\nexport function contains(arr: T[], item): boolean {\n return find(arr, (currItem) => currItem === item) !== undefined ? true : false\n}\n\n/**\n * shallow clone\n */\nexport function cloneArr(arr: T[]): T[] {\n let newArr = []\n for (let i = 0; i < arr.length; i++) {\n newArr.push(arr[i])\n }\n return newArr\n}\n\n/**\n * shallow clone\n */\nexport function cloneObj(obj: Object): any {\n let clonedObj = {}\n for (let key in obj) {\n /* istanbul ignore else */\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n clonedObj[key] = obj[key]\n }\n }\n return clonedObj\n}\n\nexport function find(arr: T[], predicate: (item: T) => boolean): T {\n for (let i = 0; i < arr.length; i++) {\n let item = arr[i]\n if (predicate.call(null, item)) {\n return item\n }\n }\n return undefined\n}\n\nexport function findAll(arr: T[], predicate: (item: T) => boolean): T[] {\n let found = []\n for (let i = 0; i < arr.length; i++) {\n let item = arr[i]\n if (predicate.call(null, item)) {\n found.push(item)\n }\n }\n return found\n}\n\nexport function reduce(\n arrOrObj: Array | Object,\n iterator: (result: A, item, idx?) => A,\n initial: A\n): A {\n const isArr = Array.isArray(arrOrObj)\n\n let vals: T[] = isArr ? >arrOrObj : values(arrOrObj)\n let objKeys = isArr ? [] : keys(arrOrObj)\n\n let accumulator = initial\n for (let i = 0; i < vals.length; i++) {\n accumulator = iterator.call(\n null,\n accumulator,\n vals[i],\n isArr ? i : objKeys[i]\n )\n }\n return accumulator\n}\n\nexport function compact(arr: T[]): T[] {\n return reject(arr, (item) => item === null || item === undefined)\n}\n\nexport function uniq(\n arr: T[],\n identity: (item: T) => any = (item) => item\n): T[] {\n let identities = []\n return reduce(\n arr,\n (result, currItem) => {\n let currIdentity = identity(currItem)\n if (contains(identities, currIdentity)) {\n return result\n } else {\n identities.push(currIdentity)\n return result.concat(currItem)\n }\n },\n []\n )\n}\n\nexport function partial(func: Function, ...restArgs: any[]): Function {\n let firstArg = [null]\n let allArgs = firstArg.concat(restArgs)\n return Function.bind.apply(func, allArgs)\n}\n\nexport function isArray(obj: any): obj is any[] {\n return Array.isArray(obj)\n}\n\nexport function isRegExp(obj: any): obj is RegExp {\n return obj instanceof RegExp\n}\n\nexport function isObject(obj: any): obj is Object {\n return obj instanceof Object\n}\n\nexport function every(\n arr: T[],\n predicate: (item: T, idx?) => boolean\n): boolean {\n for (let i = 0; i < arr.length; i++) {\n if (!predicate(arr[i], i)) {\n return false\n }\n }\n return true\n}\n\nexport function difference(arr: T[], values: T[]): T[] {\n return reject(arr, (item) => contains(values, item))\n}\n\nexport function some(arr: T[], predicate: (item: T) => boolean): boolean {\n for (let i = 0; i < arr.length; i++) {\n if (predicate(arr[i])) {\n return true\n }\n }\n return false\n}\n\nexport function indexOf(arr: T[], value: T): number {\n for (let i = 0; i < arr.length; i++) {\n if (arr[i] === value) {\n return i\n }\n }\n return -1\n}\n\nexport function sortBy(arr: T[], orderFunc: (item: T) => number): T[] {\n let result = cloneArr(arr)\n result.sort((a, b) => orderFunc(a) - orderFunc(b))\n return result\n}\n\nexport function zipObject(keys: any[], values: any[]): Object {\n if (keys.length !== values.length) {\n throw Error(\"can't zipObject with different number of keys and values!\")\n }\n\n let result = {}\n for (let i = 0; i < keys.length; i++) {\n result[keys[i]] = values[i]\n }\n return result\n}\n\n/**\n * mutates! (and returns) target\n */\nexport function assign(target: Object, ...sources: Object[]): Object {\n for (let i = 0; i < sources.length; i++) {\n let curSource = sources[i]\n let currSourceKeys = keys(curSource)\n for (let j = 0; j < currSourceKeys.length; j++) {\n let currKey = currSourceKeys[j]\n target[currKey] = curSource[currKey]\n }\n }\n return target\n}\n\n/**\n * mutates! (and returns) target\n */\nexport function assignNoOverwrite(\n target: Object,\n ...sources: Object[]\n): Object {\n for (let i = 0; i < sources.length; i++) {\n let curSource = sources[i]\n let currSourceKeys = keys(curSource)\n for (let j = 0; j < currSourceKeys.length; j++) {\n let currKey = currSourceKeys[j]\n if (!has(target, currKey)) {\n target[currKey] = curSource[currKey]\n }\n }\n }\n return target\n}\n\nexport function defaults(...sources: any[]): any {\n return assignNoOverwrite.apply(null, [{}].concat(sources))\n}\n\nexport function groupBy(\n arr: T[],\n groupKeyFunc: (item: T) => string\n): { [groupKey: string]: T[] } {\n let result: { [groupKey: string]: T[] } = {}\n\n forEach(arr, (item) => {\n let currGroupKey = groupKeyFunc(item)\n let currGroupArr = result[currGroupKey]\n\n if (currGroupArr) {\n currGroupArr.push(item)\n } else {\n result[currGroupKey] = [item]\n }\n })\n\n return result\n}\n\n/**\n * Merge obj2 into obj1.\n * Will overwrite existing properties with the same name\n */\nexport function merge(obj1: Object, obj2: Object): any {\n let result = cloneObj(obj1)\n let keys2 = keys(obj2)\n for (let i = 0; i < keys2.length; i++) {\n let key = keys2[i]\n let value = obj2[key]\n result[key] = value\n }\n\n return result\n}\n\nexport function NOOP() {}\n\nexport function IDENTITY(item) {\n return item\n}\n\n/**\n * Will return a new packed array with same values.\n */\nexport function packArray(holeyArr: T[]): T[] {\n const result = []\n for (let i = 0; i < holeyArr.length; i++) {\n const orgValue = holeyArr[i]\n result.push(orgValue !== undefined ? orgValue : undefined)\n }\n return result\n}\n\nexport function PRINT_ERROR(msg) {\n /* istanbul ignore else - can't override global.console in node.js */\n if (console && console.error) {\n console.error(`Error: ${msg}`)\n }\n}\n\nexport function PRINT_WARNING(msg) {\n /* istanbul ignore else - can't override global.console in node.js*/\n if (console && console.warn) {\n // TODO: modify docs accordingly\n console.warn(`Warning: ${msg}`)\n }\n}\n\nexport function isES2015MapSupported(): boolean {\n return typeof Map === \"function\"\n}\n\nexport function applyMixins(derivedCtor: any, baseCtors: any[]) {\n baseCtors.forEach((baseCtor) => {\n const baseProto = baseCtor.prototype\n Object.getOwnPropertyNames(baseProto).forEach((propName) => {\n if (propName === \"constructor\") {\n return\n }\n\n const basePropDescriptor = Object.getOwnPropertyDescriptor(\n baseProto,\n propName\n )\n // Handle Accessors\n if (\n basePropDescriptor &&\n (basePropDescriptor.get || basePropDescriptor.set)\n ) {\n Object.defineProperty(\n derivedCtor.prototype,\n propName,\n basePropDescriptor\n )\n } else {\n derivedCtor.prototype[propName] = baseCtor.prototype[propName]\n }\n })\n })\n}\n\n// base on: https://github.com/petkaantonov/bluebird/blob/b97c0d2d487e8c5076e8bd897e0dcd4622d31846/src/util.js#L201-L216\nexport function toFastProperties(toBecomeFast) {\n function FakeConstructor() {}\n // If our object is used as a constructor it would receive\n FakeConstructor.prototype = toBecomeFast\n const fakeInstance = new FakeConstructor()\n function fakeAccess() {\n return typeof fakeInstance.bar\n }\n // help V8 understand this is a \"real\" prototype by actually using\n // the fake instance.\n fakeAccess()\n fakeAccess()\n\n return toBecomeFast\n // Eval prevents optimization of this method (even though this is dead code)\n /* istanbul ignore next */\n // tslint:disable-next-line\n eval(toBecomeFast)\n}\n\nexport function peek(arr: T[]): T {\n return arr[arr.length - 1]\n}\n\n/* istanbul ignore next - for performance tracing*/\nexport function timer(func: () => T): { time: number; value: T } {\n const start = new Date().getTime()\n const val = func()\n const end = new Date().getTime()\n const total = end - start\n return { time: total, value: val }\n}\n","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\tvar nativeCodeString = '[native code]';\n\n\tfunction classNames() {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tif (arg.length) {\n\t\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\t\tif (inner) {\n\t\t\t\t\t\tclasses.push(inner);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\t\t\tclasses.push(arg.toString());\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nexports.parse = parse;\nexports.serialize = serialize;\n\n/**\n * Module variables.\n * @private\n */\n\nvar decode = decodeURIComponent;\nvar encode = encodeURIComponent;\nvar pairSplitRegExp = /; */;\n\n/**\n * RegExp to match field-content in RFC 7230 sec 3.2\n *\n * field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]\n * field-vchar = VCHAR / obs-text\n * obs-text = %x80-FF\n */\n\nvar fieldContentRegExp = /^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;\n\n/**\n * Parse a cookie header.\n *\n * Parse the given cookie header string into an object\n * The object has the various cookies as keys(names) => values\n *\n * @param {string} str\n * @param {object} [options]\n * @return {object}\n * @public\n */\n\nfunction parse(str, options) {\n if (typeof str !== 'string') {\n throw new TypeError('argument str must be a string');\n }\n\n var obj = {}\n var opt = options || {};\n var pairs = str.split(pairSplitRegExp);\n var dec = opt.decode || decode;\n\n for (var i = 0; i < pairs.length; i++) {\n var pair = pairs[i];\n var eq_idx = pair.indexOf('=');\n\n // skip things that don't look like key=value\n if (eq_idx < 0) {\n continue;\n }\n\n var key = pair.substr(0, eq_idx).trim()\n var val = pair.substr(++eq_idx, pair.length).trim();\n\n // quoted values\n if ('\"' == val[0]) {\n val = val.slice(1, -1);\n }\n\n // only assign once\n if (undefined == obj[key]) {\n obj[key] = tryDecode(val, dec);\n }\n }\n\n return obj;\n}\n\n/**\n * Serialize data into a cookie header.\n *\n * Serialize the a name value pair into a cookie string suitable for\n * http headers. An optional options object specified cookie parameters.\n *\n * serialize('foo', 'bar', { httpOnly: true })\n * => \"foo=bar; httpOnly\"\n *\n * @param {string} name\n * @param {string} val\n * @param {object} [options]\n * @return {string}\n * @public\n */\n\nfunction serialize(name, val, options) {\n var opt = options || {};\n var enc = opt.encode || encode;\n\n if (typeof enc !== 'function') {\n throw new TypeError('option encode is invalid');\n }\n\n if (!fieldContentRegExp.test(name)) {\n throw new TypeError('argument name is invalid');\n }\n\n var value = enc(val);\n\n if (value && !fieldContentRegExp.test(value)) {\n throw new TypeError('argument val is invalid');\n }\n\n var str = name + '=' + value;\n\n if (null != opt.maxAge) {\n var maxAge = opt.maxAge - 0;\n\n if (isNaN(maxAge) || !isFinite(maxAge)) {\n throw new TypeError('option maxAge is invalid')\n }\n\n str += '; Max-Age=' + Math.floor(maxAge);\n }\n\n if (opt.domain) {\n if (!fieldContentRegExp.test(opt.domain)) {\n throw new TypeError('option domain is invalid');\n }\n\n str += '; Domain=' + opt.domain;\n }\n\n if (opt.path) {\n if (!fieldContentRegExp.test(opt.path)) {\n throw new TypeError('option path is invalid');\n }\n\n str += '; Path=' + opt.path;\n }\n\n if (opt.expires) {\n if (typeof opt.expires.toUTCString !== 'function') {\n throw new TypeError('option expires is invalid');\n }\n\n str += '; Expires=' + opt.expires.toUTCString();\n }\n\n if (opt.httpOnly) {\n str += '; HttpOnly';\n }\n\n if (opt.secure) {\n str += '; Secure';\n }\n\n if (opt.sameSite) {\n var sameSite = typeof opt.sameSite === 'string'\n ? opt.sameSite.toLowerCase() : opt.sameSite;\n\n switch (sameSite) {\n case true:\n str += '; SameSite=Strict';\n break;\n case 'lax':\n str += '; SameSite=Lax';\n break;\n case 'strict':\n str += '; SameSite=Strict';\n break;\n case 'none':\n str += '; SameSite=None';\n break;\n default:\n throw new TypeError('option sameSite is invalid');\n }\n }\n\n return str;\n}\n\n/**\n * Try decoding a string using a decoding function.\n *\n * @param {string} str\n * @param {function} decode\n * @private\n */\n\nfunction tryDecode(str, decode) {\n try {\n return decode(str);\n } catch (e) {\n return str;\n }\n}\n","/**\r\n * Formula Error.\r\n */\r\nclass FormulaError extends Error {\r\n\r\n /**\r\n * @param {string} error - error code, i.e. #NUM!\r\n * @param {string} [msg] - detailed error message\r\n * @param {object|Error} [details]\r\n * @returns {FormulaError}\r\n */\r\n constructor(error, msg, details) {\r\n super(msg);\r\n if (msg == null && details == null && FormulaError.errorMap.has(error))\r\n return FormulaError.errorMap.get(error);\r\n else if (msg == null && details == null) {\r\n this._error = error;\r\n FormulaError.errorMap.set(error, this);\r\n } else {\r\n this._error = error;\r\n }\r\n this.details = details;\r\n }\r\n\r\n /**\r\n * Get the error name.\r\n * @returns {string} formula error\r\n */\r\n get error() {\r\n return this._error;\r\n }\r\n get name() {\r\n return this._error;\r\n }\r\n\r\n /**\r\n * Return true if two errors are same.\r\n * @param {FormulaError} err\r\n * @returns {boolean} if two errors are same.\r\n */\r\n equals(err) {\r\n return err instanceof FormulaError && err._error === this._error;\r\n }\r\n\r\n /**\r\n * Return the formula error in string representation.\r\n * @returns {string} the formula error in string representation.\r\n */\r\n toString() {\r\n return this._error;\r\n }\r\n}\r\n\r\nFormulaError.errorMap = new Map();\r\n\r\n/**\r\n * DIV0 error\r\n * @type {FormulaError}\r\n */\r\nFormulaError.DIV0 = new FormulaError(\"#DIV/0!\");\r\n\r\n/**\r\n * NA error\r\n * @type {FormulaError}\r\n */\r\nFormulaError.NA = new FormulaError(\"#N/A\");\r\n\r\n/**\r\n * NAME error\r\n * @type {FormulaError}\r\n */\r\nFormulaError.NAME = new FormulaError(\"#NAME?\");\r\n\r\n/**\r\n * NULL error\r\n * @type {FormulaError}\r\n */\r\nFormulaError.NULL = new FormulaError(\"#NULL!\");\r\n\r\n/**\r\n * NUM error\r\n * @type {FormulaError}\r\n */\r\nFormulaError.NUM = new FormulaError(\"#NUM!\");\r\n\r\n/**\r\n * REF error\r\n * @type {FormulaError}\r\n */\r\nFormulaError.REF = new FormulaError(\"#REF!\");\r\n\r\n/**\r\n * VALUE error\r\n * @type {FormulaError}\r\n */\r\nFormulaError.VALUE = new FormulaError(\"#VALUE!\");\r\n\r\n/**\r\n * NOT_IMPLEMENTED error\r\n * @param {string} functionName - the name of the not implemented function\r\n * @returns {FormulaError}\r\n * @constructor\r\n */\r\nFormulaError.NOT_IMPLEMENTED = (functionName) => {\r\n return new FormulaError(\"#NAME?\", `Function ${functionName} is not implemented.`)\r\n};\r\n\r\n/**\r\n * TOO_MANY_ARGS error\r\n * @param functionName - the name of the errored function\r\n * @returns {FormulaError}\r\n * @constructor\r\n */\r\nFormulaError.TOO_MANY_ARGS = (functionName) => {\r\n return new FormulaError(\"#N/A\", `Function ${functionName} has too many arguments.`)\r\n};\r\n\r\n/**\r\n * ARG_MISSING error\r\n * @param args - the name of the errored function\r\n * @returns {FormulaError}\r\n * @constructor\r\n */\r\nFormulaError.ARG_MISSING = (args) => {\r\n const {Types} = require('./helpers');\r\n return new FormulaError(\"#N/A\", `Argument type ${args.map(arg => Types[arg]).join(', ')} is missing.`)\r\n};\r\n\r\n/**\r\n * #ERROR!\r\n * Parse/Lex error or other unexpected errors\r\n * @param {string} msg\r\n * @param {object|Error} [details]\r\n * @return {FormulaError}\r\n * @constructor\r\n */\r\nFormulaError.ERROR = (msg, details) => {\r\n return new FormulaError('#ERROR!', msg, details);\r\n}\r\n\r\nmodule.exports = FormulaError;\r\n","const FormulaError = require('../error');\r\nconst {FormulaHelpers, Types} = require('../helpers');\r\nconst H = FormulaHelpers;\r\n\r\nconst MS_PER_DAY = 1000 * 60 * 60 * 24;\r\nconst d1900 = new Date(Date.UTC(1900, 0, 1));\r\nconst WEEK_STARTS = [\r\n undefined, 0, 1, undefined, undefined, undefined, undefined, undefined, undefined,\r\n undefined, undefined, undefined, 1, 2, 3, 4, 5, 6, 0];\r\nconst WEEK_TYPES = [\r\n undefined,\r\n [1, 2, 3, 4, 5, 6, 7],\r\n [7, 1, 2, 3, 4, 5, 6],\r\n [6, 0, 1, 2, 3, 4, 5],\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n [7, 1, 2, 3, 4, 5, 6],\r\n [6, 7, 1, 2, 3, 4, 5],\r\n [5, 6, 7, 1, 2, 3, 4],\r\n [4, 5, 6, 7, 1, 2, 3],\r\n [3, 4, 5, 6, 7, 1, 2],\r\n [2, 3, 4, 5, 6, 7, 1],\r\n [1, 2, 3, 4, 5, 6, 7]\r\n];\r\nconst WEEKEND_TYPES = [\r\n undefined,\r\n [6, 0],\r\n [0, 1],\r\n [1, 2],\r\n [2, 3],\r\n [3, 4],\r\n [4, 5],\r\n [5, 6],\r\n undefined,\r\n undefined,\r\n undefined,\r\n [0],\r\n [1],\r\n [2],\r\n [3],\r\n [4],\r\n [5],\r\n [6]\r\n];\r\n\r\n// Formats: h:mm:ss A, h:mm A, H:mm, H:mm:ss, H A\r\nconst timeRegex = /^\\s*(\\d\\d?)\\s*(:\\s*\\d\\d?)?\\s*(:\\s*\\d\\d?)?\\s*(pm|am)?\\s*$/i;\r\n// 12-3, 12/3\r\nconst dateRegex1 = /^\\s*((\\d\\d?)\\s*([-\\/])\\s*(\\d\\d?))([\\d:.apm\\s]*)$/i;\r\n// 3-Dec, 3/Dec\r\nconst dateRegex2 = /^\\s*((\\d\\d?)\\s*([-/])\\s*(jan\\w*|feb\\w*|mar\\w*|apr\\w*|may\\w*|jun\\w*|jul\\w*|aug\\w*|sep\\w*|oct\\w*|nov\\w*|dec\\w*))([\\d:.apm\\s]*)$/i;\r\n// Dec-3, Dec/3\r\nconst dateRegex3 = /^\\s*((jan\\w*|feb\\w*|mar\\w*|apr\\w*|may\\w*|jun\\w*|jul\\w*|aug\\w*|sep\\w*|oct\\w*|nov\\w*|dec\\w*)\\s*([-/])\\s*(\\d\\d?))([\\d:.apm\\s]*)$/i;\r\n\r\nfunction parseSimplifiedDate(text) {\r\n const fmt1 = text.match(dateRegex1);\r\n const fmt2 = text.match(dateRegex2);\r\n const fmt3 = text.match(dateRegex3);\r\n if (fmt1) {\r\n text = fmt1[1] + fmt1[3] + new Date().getFullYear() + fmt1[5];\r\n } else if (fmt2) {\r\n text = fmt2[1] + fmt2[3] + new Date().getFullYear() + fmt2[5];\r\n } else if (fmt3) {\r\n text = fmt3[1] + fmt3[3] + new Date().getFullYear() + fmt3[5];\r\n }\r\n return new Date(Date.parse(`${text} UTC`));\r\n}\r\n\r\n/**\r\n * Parse time string to date in UTC.\r\n * @param {string} text\r\n */\r\nfunction parseTime(text) {\r\n const res = text.match(timeRegex);\r\n if (!res) return;\r\n\r\n //  [\"4:50:55 pm\", \"4\", \":50\", \":55\", \"pm\", ...]\r\n const minutes = res[2] ? res[2] : ':00';\r\n const seconds = res[3] ? res[3] : ':00';\r\n const ampm = res[4] ? ' ' + res[4] : '';\r\n\r\n const date = new Date(Date.parse(`1/1/1900 ${res[1] + minutes + seconds + ampm} UTC`));\r\n let now = new Date();\r\n now = new Date(Date.UTC(now.getFullYear(), now.getMonth(), now.getDate(),\r\n now.getHours(), now.getMinutes(), now.getSeconds(), now.getMilliseconds()));\r\n\r\n return new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(),\r\n date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), date.getUTCMilliseconds()));\r\n}\r\n\r\n/**\r\n * Parse a UTC date to excel serial number.\r\n * @param {Date|number} date - A UTC date.\r\n * @returns {number}\r\n */\r\nfunction toSerial(date) {\r\n const addOn = (date > -2203891200000) ? 2 : 1;\r\n return Math.floor((date - d1900) / 86400000) + addOn;\r\n}\r\n\r\n/**\r\n * Parse an excel serial number to UTC date.\r\n * @param serial\r\n * @returns {Date}\r\n */\r\nfunction toDate(serial) {\r\n if (serial < 0) {\r\n throw FormulaError.VALUE;\r\n }\r\n if (serial <= 60) {\r\n return new Date(d1900.getTime() + (serial - 1) * 86400000);\r\n }\r\n return new Date(d1900.getTime() + (serial - 2) * 86400000);\r\n}\r\n\r\nfunction parseDateWithExtra(serialOrString) {\r\n if (serialOrString instanceof Date) return {date: serialOrString};\r\n serialOrString = H.accept(serialOrString);\r\n let isDateGiven = true, date;\r\n if (!isNaN(serialOrString)) {\r\n serialOrString = Number(serialOrString);\r\n date = toDate(serialOrString);\r\n } else {\r\n // support time without date\r\n date = parseTime(serialOrString);\r\n\r\n if (!date) {\r\n date = parseSimplifiedDate(serialOrString);\r\n } else {\r\n isDateGiven = false;\r\n }\r\n }\r\n return {date, isDateGiven};\r\n}\r\n\r\nfunction parseDate(serialOrString) {\r\n return parseDateWithExtra(serialOrString).date;\r\n}\r\n\r\nfunction compareDateIgnoreTime(date1, date2) {\r\n return date1.getUTCFullYear() === date2.getUTCFullYear() &&\r\n date1.getUTCMonth() === date2.getUTCMonth() &&\r\n date1.getUTCDate() === date2.getUTCDate();\r\n}\r\n\r\nfunction isLeapYear(year) {\r\n if (year === 1900) {\r\n return true;\r\n }\r\n return new Date(year, 1, 29).getMonth() === 1;\r\n}\r\n\r\nconst DateFunctions = {\r\n DATE: (year, month, day) => {\r\n year = H.accept(year, Types.NUMBER);\r\n month = H.accept(month, Types.NUMBER);\r\n day = H.accept(day, Types.NUMBER);\r\n if (year < 0 || year >= 10000)\r\n throw FormulaError.NUM;\r\n\r\n // If year is between 0 (zero) and 1899 (inclusive), Excel adds that value to 1900 to calculate the year.\r\n if (year < 1900) {\r\n year += 1900;\r\n }\r\n\r\n return toSerial(Date.UTC(year, month - 1, day));\r\n },\r\n\r\n DATEDIF: (startDate, endDate, unit) => {\r\n startDate = parseDate(startDate);\r\n endDate = parseDate(endDate);\r\n unit = H.accept(unit, Types.STRING).toLowerCase();\r\n\r\n if (startDate > endDate)\r\n throw FormulaError.NUM;\r\n const yearDiff = endDate.getUTCFullYear() - startDate.getUTCFullYear();\r\n const monthDiff = endDate.getUTCMonth() - startDate.getUTCMonth();\r\n const dayDiff = endDate.getUTCDate() - startDate.getUTCDate();\r\n let offset;\r\n switch (unit) {\r\n case 'y':\r\n offset = monthDiff < 0 || monthDiff === 0 && dayDiff < 0 ? -1 : 0;\r\n return offset + yearDiff;\r\n case 'm':\r\n offset = dayDiff < 0 ? -1 : 0;\r\n return yearDiff * 12 + monthDiff + offset;\r\n case 'd':\r\n return Math.floor(endDate - startDate) / MS_PER_DAY;\r\n case 'md':\r\n // The months and years of the dates are ignored.\r\n startDate.setUTCFullYear(endDate.getUTCFullYear());\r\n if (dayDiff < 0) {\r\n startDate.setUTCMonth(endDate.getUTCMonth() - 1)\r\n } else {\r\n startDate.setUTCMonth(endDate.getUTCMonth())\r\n }\r\n return Math.floor(endDate - startDate) / MS_PER_DAY;\r\n case 'ym':\r\n // The days and years of the dates are ignored\r\n offset = dayDiff < 0 ? -1 : 0;\r\n return (offset + yearDiff * 12 + monthDiff) % 12;\r\n case 'yd':\r\n // The years of the dates are ignored.\r\n if (monthDiff < 0 || monthDiff === 0 && dayDiff < 0) {\r\n startDate.setUTCFullYear(endDate.getUTCFullYear() - 1);\r\n } else {\r\n startDate.setUTCFullYear(endDate.getUTCFullYear());\r\n }\r\n return Math.floor(endDate - startDate) / MS_PER_DAY;\r\n\r\n }\r\n },\r\n\r\n /**\r\n * Limitation: Year must be four digit, only support ISO 8016 date format.\r\n * Does not support date without year, i.e. \"5-JUL\".\r\n * @param {string} dateText\r\n */\r\n DATEVALUE: (dateText) => {\r\n dateText = H.accept(dateText, Types.STRING);\r\n const {date, isDateGiven} = parseDateWithExtra(dateText);\r\n if (!isDateGiven) return 0;\r\n const serial = toSerial(date);\r\n if (serial < 0 || serial > 2958465)\r\n throw FormulaError.VALUE;\r\n return serial;\r\n },\r\n\r\n DAY: serialOrString => {\r\n const date = parseDate(serialOrString);\r\n return date.getUTCDate();\r\n },\r\n\r\n DAYS: (endDate, startDate) => {\r\n endDate = parseDate(endDate);\r\n startDate = parseDate(startDate);\r\n let offset = 0;\r\n if (startDate < -2203891200000 && -2203891200000 < endDate) {\r\n offset = 1;\r\n }\r\n return Math.floor(endDate - startDate) / MS_PER_DAY + offset;\r\n },\r\n\r\n DAYS360: (startDate, endDate, method) => {\r\n startDate = parseDate(startDate);\r\n endDate = parseDate(endDate);\r\n // default is US method\r\n method = H.accept(method, Types.BOOLEAN, false);\r\n\r\n if (startDate.getUTCDate() === 31) {\r\n startDate.setUTCDate(30);\r\n }\r\n if (!method && startDate.getUTCDate() < 30 && endDate.getUTCDate() > 30) {\r\n endDate.setUTCMonth(endDate.getUTCMonth() + 1, 1);\r\n } else {\r\n // European method\r\n if (endDate.getUTCDate() === 31) {\r\n endDate.setUTCDate(30);\r\n }\r\n }\r\n\r\n const yearDiff = endDate.getUTCFullYear() - startDate.getUTCFullYear();\r\n const monthDiff = endDate.getUTCMonth() - startDate.getUTCMonth();\r\n const dayDiff = endDate.getUTCDate() - startDate.getUTCDate();\r\n\r\n return (monthDiff) * 30 + dayDiff + yearDiff * 12 * 30;\r\n },\r\n\r\n EDATE: (startDate, months) => {\r\n startDate = parseDate(startDate);\r\n months = H.accept(months, Types.NUMBER);\r\n startDate.setUTCMonth(startDate.getUTCMonth() + months);\r\n return toSerial(startDate);\r\n },\r\n\r\n EOMONTH: (startDate, months) => {\r\n startDate = parseDate(startDate);\r\n months = H.accept(months, Types.NUMBER);\r\n startDate.setUTCMonth(startDate.getUTCMonth() + months + 1, 0);\r\n return toSerial(startDate);\r\n },\r\n\r\n HOUR: serialOrString => {\r\n const date = parseDate(serialOrString);\r\n return date.getUTCHours();\r\n },\r\n\r\n ISOWEEKNUM: (serialOrString) => {\r\n const date = parseDate(serialOrString);\r\n\r\n // https://stackoverflow.com/questions/6117814/get-week-of-year-in-javascript-like-in-php\r\n const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\r\n const dayNum = d.getUTCDay();\r\n d.setUTCDate(d.getUTCDate() + 4 - dayNum);\r\n const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));\r\n return Math.ceil((((d - yearStart) / 86400000) + 1) / 7)\r\n },\r\n\r\n MINUTE: serialOrString => {\r\n const date = parseDate(serialOrString);\r\n return date.getUTCMinutes();\r\n },\r\n\r\n MONTH: serialOrString => {\r\n const date = parseDate(serialOrString);\r\n return date.getUTCMonth() + 1;\r\n },\r\n\r\n NETWORKDAYS: (startDate, endDate, holidays) => {\r\n startDate = parseDate(startDate);\r\n endDate = parseDate(endDate);\r\n let sign = 1;\r\n if (startDate > endDate) {\r\n sign = -1;\r\n const temp = startDate;\r\n startDate = endDate;\r\n endDate = temp;\r\n }\r\n const holidaysArr = [];\r\n if (holidays != null) {\r\n H.flattenParams([holidays], Types.NUMBER, false, item => {\r\n holidaysArr.push(parseDate(item));\r\n });\r\n }\r\n let numWorkDays = 0;\r\n while (startDate <= endDate) {\r\n // Skips Sunday and Saturday\r\n if (startDate.getUTCDay() !== 0 && startDate.getUTCDay() !== 6) {\r\n let found = false;\r\n for (let i = 0; i < holidaysArr.length; i++) {\r\n if (compareDateIgnoreTime(startDate, holidaysArr[i])) {\r\n found = true;\r\n break;\r\n }\r\n }\r\n if (!found) numWorkDays++;\r\n }\r\n startDate.setUTCDate(startDate.getUTCDate() + 1);\r\n }\r\n return sign * numWorkDays;\r\n\r\n },\r\n\r\n 'NETWORKDAYS.INTL': (startDate, endDate, weekend, holidays) => {\r\n startDate = parseDate(startDate);\r\n endDate = parseDate(endDate);\r\n let sign = 1;\r\n if (startDate > endDate) {\r\n sign = -1;\r\n const temp = startDate;\r\n startDate = endDate;\r\n endDate = temp;\r\n }\r\n weekend = H.accept(weekend, null, 1);\r\n // Using 1111111 will always return 0.\r\n if (weekend === '1111111')\r\n return 0;\r\n\r\n // using weekend string, i.e, 0000011\r\n if (typeof weekend === \"string\" && Number(weekend).toString() !== weekend) {\r\n if (weekend.length !== 7) throw FormulaError.VALUE;\r\n weekend = weekend.charAt(6) + weekend.slice(0, 6);\r\n const weekendArr = [];\r\n for (let i = 0; i < weekend.length; i++) {\r\n if (weekend.charAt(i) === '1')\r\n weekendArr.push(i);\r\n }\r\n weekend = weekendArr;\r\n } else {\r\n // using weekend number\r\n if (typeof weekend !== \"number\")\r\n throw FormulaError.VALUE;\r\n weekend = WEEKEND_TYPES[weekend];\r\n }\r\n\r\n const holidaysArr = [];\r\n if (holidays != null) {\r\n H.flattenParams([holidays], Types.NUMBER, false, item => {\r\n holidaysArr.push(parseDate(item));\r\n });\r\n }\r\n let numWorkDays = 0;\r\n while (startDate <= endDate) {\r\n let skip = false;\r\n for (let i = 0; i < weekend.length; i++) {\r\n if (weekend[i] === startDate.getUTCDay()) {\r\n skip = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!skip) {\r\n let found = false;\r\n for (let i = 0; i < holidaysArr.length; i++) {\r\n if (compareDateIgnoreTime(startDate, holidaysArr[i])) {\r\n found = true;\r\n break;\r\n }\r\n }\r\n if (!found) numWorkDays++;\r\n }\r\n startDate.setUTCDate(startDate.getUTCDate() + 1);\r\n }\r\n return sign * numWorkDays;\r\n\r\n },\r\n\r\n NOW: () => {\r\n const now = new Date();\r\n return toSerial(Date.UTC(now.getFullYear(), now.getMonth(), now.getDate(),\r\n now.getHours(), now.getMinutes(), now.getSeconds(), now.getMilliseconds()))\r\n + (3600 * now.getHours() + 60 * now.getMinutes() + now.getSeconds()) / 86400;\r\n },\r\n\r\n SECOND: (serialOrString) => {\r\n const date = parseDate(serialOrString);\r\n return date.getUTCSeconds();\r\n },\r\n\r\n TIME: (hour, minute, second) => {\r\n hour = H.accept(hour, Types.NUMBER);\r\n minute = H.accept(minute, Types.NUMBER);\r\n second = H.accept(second, Types.NUMBER);\r\n\r\n if (hour < 0 || hour > 32767 || minute < 0 || minute > 32767 || second < 0 || second > 32767)\r\n throw FormulaError.NUM;\r\n return (3600 * hour + 60 * minute + second) / 86400;\r\n },\r\n\r\n TIMEVALUE: (timeText) => {\r\n timeText = parseDate(timeText);\r\n return (3600 * timeText.getUTCHours() + 60 * timeText.getUTCMinutes() + timeText.getUTCSeconds()) / 86400;\r\n },\r\n\r\n TODAY: () => {\r\n const now = new Date();\r\n return toSerial(Date.UTC(now.getFullYear(), now.getMonth(), now.getDate()));\r\n },\r\n\r\n WEEKDAY: (serialOrString, returnType) => {\r\n const date = parseDate(serialOrString);\r\n returnType = H.accept(returnType, Types.NUMBER, 1);\r\n\r\n const day = date.getUTCDay();\r\n const weekTypes = WEEK_TYPES[returnType];\r\n if (!weekTypes)\r\n throw FormulaError.NUM;\r\n return weekTypes[day];\r\n\r\n },\r\n\r\n WEEKNUM: (serialOrString, returnType) => {\r\n const date = parseDate(serialOrString);\r\n returnType = H.accept(returnType, Types.NUMBER, 1);\r\n if (returnType === 21) {\r\n return DateFunctions.ISOWEEKNUM(serialOrString);\r\n }\r\n const weekStart = WEEK_STARTS[returnType];\r\n const yearStart = new Date(Date.UTC(date.getUTCFullYear(), 0, 1));\r\n const offset = yearStart.getUTCDay() < weekStart ? 1 : 0;\r\n return Math.ceil((((date - yearStart) / 86400000) + 1) / 7) + offset;\r\n },\r\n\r\n WORKDAY: (startDate, days, holidays) => {\r\n return DateFunctions[\"WORKDAY.INTL\"](startDate, days, 1, holidays);\r\n },\r\n\r\n 'WORKDAY.INTL': (startDate, days, weekend, holidays) => {\r\n startDate = parseDate(startDate);\r\n days = H.accept(days, Types.NUMBER);\r\n\r\n weekend = H.accept(weekend, null, 1);\r\n // Using 1111111 will always return value error.\r\n if (weekend === '1111111')\r\n throw FormulaError.VALUE;\r\n\r\n // using weekend string, i.e, 0000011\r\n if (typeof weekend === \"string\" && Number(weekend).toString() !== weekend) {\r\n if (weekend.length !== 7)\r\n throw FormulaError.VALUE;\r\n weekend = weekend.charAt(6) + weekend.slice(0, 6);\r\n const weekendArr = [];\r\n for (let i = 0; i < weekend.length; i++) {\r\n if (weekend.charAt(i) === '1')\r\n weekendArr.push(i);\r\n }\r\n weekend = weekendArr;\r\n } else {\r\n // using weekend number\r\n if (typeof weekend !== \"number\")\r\n throw FormulaError.VALUE;\r\n weekend = WEEKEND_TYPES[weekend];\r\n if (weekend == null)\r\n throw FormulaError.NUM;\r\n }\r\n\r\n const holidaysArr = [];\r\n if (holidays != null) {\r\n H.flattenParams([holidays], Types.NUMBER, false, item => {\r\n holidaysArr.push(parseDate(item));\r\n });\r\n }\r\n startDate.setUTCDate(startDate.getUTCDate() + 1);\r\n let cnt = 0;\r\n while (cnt < days) {\r\n let skip = false;\r\n for (let i = 0; i < weekend.length; i++) {\r\n if (weekend[i] === startDate.getUTCDay()) {\r\n skip = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!skip) {\r\n let found = false;\r\n for (let i = 0; i < holidaysArr.length; i++) {\r\n if (compareDateIgnoreTime(startDate, holidaysArr[i])) {\r\n found = true;\r\n break;\r\n }\r\n }\r\n if (!found) cnt++;\r\n }\r\n startDate.setUTCDate(startDate.getUTCDate() + 1);\r\n }\r\n return toSerial(startDate) - 1;\r\n },\r\n\r\n YEAR: (serialOrString) => {\r\n const date = parseDate(serialOrString);\r\n return date.getUTCFullYear();\r\n },\r\n\r\n // Warning: may have bugs\r\n YEARFRAC: (startDate, endDate, basis) => {\r\n startDate = parseDate(startDate);\r\n endDate = parseDate(endDate);\r\n if (startDate > endDate) {\r\n const temp = startDate;\r\n startDate = endDate;\r\n endDate = temp;\r\n }\r\n basis = H.accept(basis, Types.NUMBER, 0);\r\n basis = Math.trunc(basis);\r\n\r\n if (basis < 0 || basis > 4)\r\n throw FormulaError.VALUE;\r\n\r\n // https://github.com/LesterLyu/formula.js/blob/develop/lib/date-time.js#L508\r\n let sd = startDate.getUTCDate();\r\n const sm = startDate.getUTCMonth() + 1;\r\n const sy = startDate.getUTCFullYear();\r\n let ed = endDate.getUTCDate();\r\n const em = endDate.getUTCMonth() + 1;\r\n const ey = endDate.getUTCFullYear();\r\n\r\n switch (basis) {\r\n case 0:\r\n // US (NASD) 30/360\r\n if (sd === 31 && ed === 31) {\r\n sd = 30;\r\n ed = 30;\r\n } else if (sd === 31) {\r\n sd = 30;\r\n } else if (sd === 30 && ed === 31) {\r\n ed = 30;\r\n }\r\n return Math.abs((ed + em * 30 + ey * 360) - (sd + sm * 30 + sy * 360)) / 360;\r\n case 1:\r\n // Actual/actual\r\n if (ey - sy < 2) {\r\n const yLength = isLeapYear(sy) && sy !== 1900 ? 366 : 365;\r\n const days = DateFunctions.DAYS(endDate, startDate);\r\n return days / yLength;\r\n } else {\r\n const years = (ey - sy) + 1;\r\n const days = (new Date(ey + 1, 0, 1) - new Date(sy, 0, 1)) / 1000 / 60 / 60 / 24;\r\n const average = days / years;\r\n return DateFunctions.DAYS(endDate, startDate) / average;\r\n }\r\n case 2:\r\n // Actual/360\r\n return Math.abs(DateFunctions.DAYS(endDate, startDate) / 360);\r\n case 3:\r\n // Actual/365\r\n return Math.abs(DateFunctions.DAYS(endDate, startDate) / 365);\r\n case 4:\r\n // European 30/360\r\n return Math.abs((ed + em * 30 + ey * 360) - (sd + sm * 30 + sy * 360)) / 360;\r\n }\r\n },\r\n};\r\n\r\nmodule.exports = DateFunctions;\r\n","const FormulaError = require('../error');\r\nconst {FormulaHelpers, Types} = require('../helpers');\r\nconst H = FormulaHelpers;\r\nconst jStat = require(\"jstat\");\r\nconst MathFunctions = require('./math');\r\nconst SQRT2PI = 2.5066282746310002;\r\n\r\nconst DistributionFunctions = {\r\n 'BETA.DIST': (x, alpha, beta, cumulative, a, b) => {\r\n x = H.accept(x, Types.NUMBER);\r\n alpha = H.accept(alpha, Types.NUMBER);\r\n beta = H.accept(beta, Types.NUMBER);\r\n cumulative = H.accept(cumulative, Types.BOOLEAN);\r\n a = H.accept(a, Types.NUMBER, 0);\r\n b = H.accept(b, Types.NUMBER, 1);\r\n if (alpha <= 0 || beta <= 0 || x < a || x > b || a === b)\r\n throw FormulaError.NUM;\r\n\r\n x = (x - a) / (b - a);\r\n return cumulative ? jStat.beta.cdf(x, alpha, beta) : jStat.beta.pdf(x, alpha, beta) / (b - a);\r\n },\r\n\r\n 'BETA.INV': (probability, alpha, beta, a, b) => {\r\n probability = H.accept(probability, Types.NUMBER);\r\n alpha = H.accept(alpha, Types.NUMBER);\r\n beta = H.accept(beta, Types.NUMBER);\r\n a = H.accept(a, Types.NUMBER, 0);\r\n b = H.accept(b, Types.NUMBER, 1);\r\n if (alpha <= 0 || beta <= 0 || probability <= 0 || probability > 1)\r\n throw FormulaError.NUM;\r\n return jStat.beta.inv(probability, alpha, beta) * (b - a) + a;\r\n },\r\n\r\n 'BINOM.DIST': (numberS, trials, probabilityS, cumulative) => {\r\n numberS = H.accept(numberS, Types.NUMBER);\r\n trials = H.accept(trials, Types.NUMBER);\r\n probabilityS = H.accept(probabilityS, Types.NUMBER);\r\n cumulative = H.accept(cumulative, Types.BOOLEAN);\r\n if (trials < 0 || probabilityS < 0 || probabilityS > 1 || numberS < 0 || numberS > trials)\r\n throw FormulaError.NUM;\r\n\r\n return cumulative ? jStat.binomial.cdf(numberS, trials, probabilityS)\r\n : jStat.binomial.pdf(numberS, trials, probabilityS);\r\n },\r\n\r\n 'BINOM.DIST.RANGE': (trials, probabilityS, numberS, numberS2) => {\r\n trials = H.accept(trials, Types.NUMBER);\r\n probabilityS = H.accept(probabilityS, Types.NUMBER);\r\n numberS = H.accept(numberS, Types.NUMBER);\r\n numberS2 = H.accept(numberS2, Types.NUMBER, numberS);\r\n if (trials < 0 || probabilityS < 0 || probabilityS > 1 || numberS < 0 || numberS > trials || numberS2 < numberS || numberS2 > trials)\r\n throw FormulaError.NUM;\r\n\r\n let result = 0;\r\n for (let i = numberS; i <= numberS2; i++) {\r\n result += MathFunctions.COMBIN(trials, i) * Math.pow(probabilityS, i) * Math.pow(1 - probabilityS, trials - i);\r\n }\r\n return result;\r\n },\r\n\r\n 'BINOM.INV': (trials, probabilityS, alpha) => {\r\n trials = H.accept(trials, Types.NUMBER);\r\n probabilityS = H.accept(probabilityS, Types.NUMBER);\r\n alpha = H.accept(alpha, Types.NUMBER);\r\n if (trials < 0 || probabilityS < 0 || probabilityS > 1 || alpha < 0 || alpha > 1)\r\n throw FormulaError.NUM;\r\n\r\n let x = 0;\r\n while (x <= trials) {\r\n if (jStat.binomial.cdf(x, trials, probabilityS) >= alpha) {\r\n return x;\r\n }\r\n x++;\r\n }\r\n },\r\n\r\n 'CHISQ.DIST': (x, degFreedom, cumulative) => {\r\n x = H.accept(x, Types.NUMBER);\r\n degFreedom = H.accept(degFreedom, Types.NUMBER);\r\n cumulative = H.accept(cumulative, Types.NUMBER);\r\n degFreedom = Math.trunc(degFreedom);\r\n if (x < 0 || degFreedom < 1 || degFreedom > 10 ** 10)\r\n throw FormulaError.NUM;\r\n\r\n return cumulative ? jStat.chisquare.cdf(x, degFreedom) : jStat.chisquare.pdf(x, degFreedom);\r\n },\r\n\r\n 'CHISQ.DIST.RT': (x, degFreedom) => {\r\n x = H.accept(x, Types.NUMBER);\r\n degFreedom = H.accept(degFreedom, Types.NUMBER);\r\n degFreedom = Math.trunc(degFreedom);\r\n if (x < 0 || degFreedom < 1 || degFreedom > 10 ** 10)\r\n throw FormulaError.NUM;\r\n\r\n return 1 - jStat.chisquare.cdf(x, degFreedom);\r\n },\r\n\r\n 'CHISQ.INV': (probability, degFreedom) => {\r\n probability = H.accept(probability, Types.NUMBER);\r\n degFreedom = H.accept(degFreedom, Types.NUMBER);\r\n degFreedom = Math.trunc(degFreedom);\r\n if (probability < 0 || probability > 1 || degFreedom < 1 || degFreedom > 10 ** 10)\r\n throw FormulaError.NUM;\r\n\r\n return jStat.chisquare.inv(probability, degFreedom);\r\n },\r\n\r\n 'CHISQ.INV.RT': (probability, degFreedom) => {\r\n probability = H.accept(probability, Types.NUMBER);\r\n degFreedom = H.accept(degFreedom, Types.NUMBER);\r\n degFreedom = Math.trunc(degFreedom);\r\n if (probability < 0 || probability > 1 || degFreedom < 1 || degFreedom > 10 ** 10)\r\n throw FormulaError.NUM;\r\n\r\n return jStat.chisquare.inv(1 - probability, degFreedom);\r\n },\r\n\r\n 'CHISQ.TEST': (actualRange, expectedRange) => {\r\n const actual = H.accept(actualRange, Types.ARRAY, undefined, false, false);\r\n const expected = H.accept(expectedRange, Types.ARRAY, undefined, false, false);\r\n\r\n if (actual.length !== expected.length || actual[0].length !== expected[0].length\r\n || actual.length === 1 && actual[0].length === 1)\r\n throw FormulaError.NA;\r\n\r\n const row = actual.length;\r\n const col = actual[0].length;\r\n let dof = (row - 1) * (col - 1);\r\n if (row === 1)\r\n dof = col - 1;\r\n else\r\n dof = row - 1;\r\n let xsqr = 0;\r\n\r\n for (let i = 0; i < row; i++) {\r\n for (let j = 0; j < col; j++) {\r\n if (typeof actual[i][j] !== \"number\" || typeof expected[i][j] !== \"number\")\r\n continue;\r\n if (expected[i][j] === 0) throw FormulaError.DIV0;\r\n xsqr += Math.pow((actual[i][j] - expected[i][j]), 2) / expected[i][j];\r\n }\r\n }\r\n\r\n // Get independent by X square and its degree of freedom\r\n let p = Math.exp(-0.5 * xsqr);\r\n if ((dof % 2) === 1) {\r\n p = p * Math.sqrt(2 * xsqr / Math.PI);\r\n }\r\n let k = dof;\r\n while (k >= 2) {\r\n p = p * xsqr / k;\r\n k = k - 2;\r\n }\r\n let t = p, a = dof;\r\n while (t > 0.000000000000001 * p) {\r\n a = a + 2;\r\n t = t * xsqr / a;\r\n p = p + t;\r\n }\r\n return 1 - p;\r\n },\r\n\r\n 'CONFIDENCE.NORM': (alpha, std, size) => {\r\n alpha = H.accept(alpha, Types.NUMBER);\r\n std = H.accept(std, Types.NUMBER);\r\n size = H.accept(size, Types.NUMBER);\r\n size = Math.trunc(size);\r\n if (alpha <= 0 || alpha >= 1 || std <= 0 || size < 1)\r\n throw FormulaError.NUM;\r\n return jStat.normalci(1, alpha, std, size)[1] - 1;\r\n },\r\n\r\n 'CONFIDENCE.T': (alpha, std, size) => {\r\n alpha = H.accept(alpha, Types.NUMBER);\r\n std = H.accept(std, Types.NUMBER);\r\n size = H.accept(size, Types.NUMBER);\r\n size = Math.trunc(size);\r\n if (alpha <= 0 || alpha >= 1 || std <= 0 || size < 1)\r\n throw FormulaError.NUM;\r\n if (size === 1)\r\n throw FormulaError.DIV0;\r\n return jStat.tci(1, alpha, std, size)[1] - 1;\r\n },\r\n\r\n CORREL: (array1, array2) => {\r\n array1 = H.accept(array1, Types.ARRAY, undefined, true, true);\r\n array2 = H.accept(array2, Types.ARRAY, undefined, true, true);\r\n if (array1.length !== array2.length)\r\n throw FormulaError.NA;\r\n\r\n // filter out values that are not number\r\n const filterArr1 = [], filterArr2 = [];\r\n for (let i = 0; i < array1.length; i++) {\r\n if (typeof array1[i] !== \"number\" || typeof array2[i] !== \"number\")\r\n continue;\r\n filterArr1.push(array1[i]);\r\n filterArr2.push(array2[i]);\r\n }\r\n if (filterArr1.length <= 1)\r\n throw FormulaError.DIV0;\r\n\r\n return jStat.corrcoeff(filterArr1, filterArr2);\r\n },\r\n\r\n 'COVARIANCE.P': (array1, array2) => {\r\n array1 = H.accept(array1, Types.ARRAY, undefined, true, true);\r\n array2 = H.accept(array2, Types.ARRAY, undefined, true, true);\r\n if (array1.length !== array2.length)\r\n throw FormulaError.NA;\r\n\r\n // filter out values that are not number\r\n const filterArr1 = [], filterArr2 = [];\r\n for (let i = 0; i < array1.length; i++) {\r\n if (typeof array1[i] !== \"number\" || typeof array2[i] !== \"number\")\r\n continue;\r\n filterArr1.push(array1[i]);\r\n filterArr2.push(array2[i]);\r\n }\r\n const mean1 = jStat.mean(filterArr1), mean2 = jStat.mean(filterArr2);\r\n let result = 0;\r\n for (let i = 0; i < filterArr1.length; i++) {\r\n result += (filterArr1[i] - mean1) * (filterArr2[i] - mean2);\r\n }\r\n return result / filterArr1.length;\r\n },\r\n\r\n 'COVARIANCE.S': (array1, array2) => {\r\n array1 = H.accept(array1, Types.ARRAY, undefined, true, true);\r\n array2 = H.accept(array2, Types.ARRAY, undefined, true, true);\r\n if (array1.length !== array2.length)\r\n throw FormulaError.NA;\r\n\r\n // filter out values that are not number\r\n const filterArr1 = [], filterArr2 = [];\r\n for (let i = 0; i < array1.length; i++) {\r\n if (typeof array1[i] !== \"number\" || typeof array2[i] !== \"number\")\r\n continue;\r\n filterArr1.push(array1[i]);\r\n filterArr2.push(array2[i]);\r\n }\r\n\r\n if (filterArr1.length <= 1)\r\n throw FormulaError.DIV0;\r\n\r\n return jStat.covariance(filterArr1, filterArr2);\r\n },\r\n\r\n DEVSQ: (...numbers) => {\r\n let sum = 0, x = [];\r\n // parse number only if the input is literal\r\n H.flattenParams(numbers, Types.NUMBER, true, (item, info) => {\r\n if (typeof item === \"number\") {\r\n sum += item;\r\n x.push(item);\r\n }\r\n });\r\n const mean = sum / x.length;\r\n sum = 0;\r\n for (let i = 0; i < x.length; i++) {\r\n sum += (x[i] - mean) ** 2;\r\n }\r\n return sum;\r\n },\r\n\r\n 'EXPON.DIST': (x, lambda, cumulative) => {\r\n x = H.accept(x, Types.NUMBER);\r\n lambda = H.accept(lambda, Types.NUMBER);\r\n cumulative = H.accept(cumulative, Types.BOOLEAN);\r\n if (x < 0 || lambda <= 0)\r\n throw FormulaError.NUM;\r\n return cumulative ? jStat.exponential.cdf(x, lambda) : jStat.exponential.pdf(x, lambda);\r\n },\r\n\r\n 'F.DIST': (x, d1, d2, cumulative) => {\r\n x = H.accept(x, Types.NUMBER);\r\n d1 = H.accept(d1, Types.NUMBER);\r\n d2 = H.accept(d2, Types.NUMBER);\r\n cumulative = H.accept(cumulative, Types.BOOLEAN);\r\n\r\n // If x is negative, F.DIST returns the #NUM! error value.\r\n // If deg_freedom1 < 1, F.DIST returns the #NUM! error value.\r\n // If deg_freedom2 < 1, F.DIST returns the #NUM! error value.\r\n if (x < 0 || d1 < 1 || d2 < 1) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n // If deg_freedom1 or deg_freedom2 is not an integer, it is truncated.\r\n d1 = Math.trunc(d1);\r\n d2 = Math.trunc(d2);\r\n\r\n return cumulative ? jStat.centralF.cdf(x, d1, d2) : jStat.centralF.pdf(x, d1, d2);\r\n },\r\n\r\n 'F.DIST.RT': (x, d1, d2) => {\r\n // David\r\n x = H.accept(x, Types.NUMBER);\r\n d1 = H.accept(d1, Types.NUMBER);\r\n d2 = H.accept(d2, Types.NUMBER);\r\n // If deg_freedom1 < 1 F.DIST.RT returns the #NUM! error value.\r\n // If deg_freedom2 < 1 F.DIST.RT returns the #NUM! error value.\r\n // If x is negative, F.DIST.RT returns the #NUM! error value.\r\n if (x < 0 || d1 < 1 || d2 < 1) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n // If deg_freedom1 or deg_freedom2 is not an integer, it is truncated.\r\n d1 = Math.trunc(d1);\r\n d2 = Math.trunc(d2);\r\n\r\n return 1 - jStat.centralF.cdf(x, d1, d2);\r\n },\r\n\r\n 'F.INV': (probability, d1, d2) => {\r\n // David\r\n probability = H.accept(probability, Types.NUMBER);\r\n d1 = H.accept(d1, Types.NUMBER);\r\n d2 = H.accept(d2, Types.NUMBER);\r\n // If probability < 0 or probability > 1, F.INV returns the #NUM! error value.\r\n if (probability < 0.0 || probability > 1.0) {\r\n throw FormulaError.NUM;\r\n }\r\n // If deg_freedom1 < 1, or deg_freedom2 < 1, F.INV returns the #NUM! error value.\r\n if (d1 < 1.0 || d2 < 1.0) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n // If deg_freedom1 or deg_freedom2 is not an integer, it is truncated.\r\n d1 = Math.trunc(d1);\r\n d2 = Math.trunc(d2);\r\n\r\n return jStat.centralF.inv(probability, d1, d2);\r\n },\r\n\r\n 'F.INV.RT': (probability, d1, d2) => {\r\n // David\r\n probability = H.accept(probability, Types.NUMBER);\r\n d1 = H.accept(d1, Types.NUMBER);\r\n d2 = H.accept(d2, Types.NUMBER);\r\n // If Probability is < 0 or probability is > 1, F.INV.RT returns the #NUM! error value.\r\n if (probability < 0.0 || probability > 1.0) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n // If Deg_freedom1 is < 1, or Deg_freedom2 is < 1, F.INV.RT returns the #NUM! error value.\r\n if (d1 < 1.0 || d1 >= Math.pow(10, 10)) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n // If Deg_freedom2 is < 1 or Deg_freedom2 is ≥ 10^10, F.INV.RT returns the #NUM! error value.\r\n if (d2 < 1.0 || d2 >= Math.pow(10, 10)) {\r\n throw FormulaError.NUM;\r\n }\r\n // If Deg_freedom1 or Deg_freedom2 is not an integer, it is truncated.\r\n d1 = Math.trunc(d1);\r\n d2 = Math.trunc(d2);\r\n\r\n return jStat.centralF.inv(1.0 - probability, d1, d2);\r\n },\r\n\r\n /**\r\n * https://en.wikipedia.org/wiki/F-test_of_equality_of_variances\r\n */\r\n 'F.TEST': (array1, array2) => {\r\n array1 = H.accept(array1, Types.ARRAY, undefined, true, true);\r\n array2 = H.accept(array2, Types.ARRAY, undefined, true, true);\r\n\r\n // filter out values that are not number\r\n const x1 = [], x2 = [];\r\n let x1Mean = 0, x2Mean = 0;\r\n for (let i = 0; i < Math.max(array1.length, array2.length); i++) {\r\n if (typeof array1[i] === \"number\") {\r\n x1.push(array1[i]);\r\n x1Mean += array1[i];\r\n }\r\n if (typeof array2[i] === \"number\") {\r\n x2.push(array2[i]);\r\n x2Mean += array2[i];\r\n }\r\n }\r\n if (x1.length <= 1 || x2.length <= 1)\r\n throw FormulaError.DIV0;\r\n\r\n x1Mean /= x1.length;\r\n x2Mean /= x2.length;\r\n let s1 = 0, s2 = 0; // sample variance S^2\r\n for (let i = 0; i < x1.length; i++) {\r\n s1 += (x1Mean - x1[i]) ** 2\r\n }\r\n s1 /= x1.length - 1;\r\n for (let i = 0; i < x2.length; i++) {\r\n s2 += (x2Mean - x2[i]) ** 2\r\n }\r\n s2 /= x2.length - 1;\r\n // P(F<=f) one-tail * 2\r\n return jStat.centralF.cdf(s1 / s2, x1.length - 1, x2.length - 1) * 2;\r\n },\r\n\r\n FISHER: (x) => {\r\n // David\r\n x = H.accept(x, Types.NUMBER);\r\n // If x ≤ -1 or if x ≥ 1, FISHER returns the #NUM! error value.\r\n if (x <= -1 || x >= 1) {\r\n throw FormulaError.NUM;\r\n }\r\n return Math.log((1 + x) / (1 - x)) / 2;\r\n },\r\n\r\n FISHERINV: (x) => {\r\n // David\r\n x = H.accept(x, Types.NUMBER);\r\n let e2y = Math.exp(2 * x);\r\n return (e2y - 1) / (e2y + 1);\r\n },\r\n\r\n // FIXME\r\n FORECAST: (x, knownYs, knownXs) => {\r\n x = H.accept(x, Types.NUMBER);\r\n knownYs = H.accept(knownYs, Types.ARRAY, undefined, true, true);\r\n knownXs = H.accept(knownXs, Types.ARRAY, undefined, true, true);\r\n\r\n if (knownXs.length !== knownYs.length)\r\n throw FormulaError.NA;\r\n\r\n // filter out values that are not number\r\n const filteredY = [], filteredX = [];\r\n let xAllEqual = true;\r\n for (let i = 0; i < knownYs.length; i++) {\r\n if (typeof knownYs[i] !== \"number\" || typeof knownXs[i] !== \"number\")\r\n continue;\r\n filteredY.push(knownYs[i]);\r\n filteredX.push(knownXs[i]);\r\n if (knownXs[i] !== knownXs[0])\r\n xAllEqual = false;\r\n }\r\n if (xAllEqual)\r\n throw FormulaError.DIV0;\r\n const yMean = jStat.mean(filteredY);\r\n const xMean = jStat.mean(filteredX);\r\n let numerator = 0, denominator = 0;\r\n for (let i = 0; i < filteredY.length; i++) {\r\n numerator += (filteredX[i] - xMean) * (filteredY[i] - yMean);\r\n denominator += (filteredX[i] - xMean) ** 2;\r\n }\r\n const b = numerator / denominator;\r\n const a = yMean - b * xMean;\r\n return a + b * x;\r\n },\r\n\r\n 'FORECAST.ETS': () => {\r\n // skip, not yet possible to implement, may need tensorflow.js ?\r\n },\r\n\r\n 'FORECAST.ETS.CONFINT': () => {\r\n // skip\r\n },\r\n\r\n 'FORECAST.ETS.SEASONALITY': () => {\r\n // skip\r\n },\r\n\r\n 'FORECAST.ETS.STAT': () => {\r\n // skip\r\n },\r\n\r\n 'FORECAST.LINEAR': (...params) => {\r\n return DistributionFunctions.FORECAST(...params);\r\n },\r\n\r\n FREQUENCY: (dataArray, binsArray) => {\r\n dataArray = H.accept(dataArray, Types.ARRAY, undefined, true, true);\r\n binsArray = H.accept(binsArray, Types.ARRAY, undefined, true, true);\r\n\r\n const binsArrayFiltered = [];\r\n for (let i = 0; i < binsArray.length; i++) {\r\n if (typeof binsArray[i] !== \"number\")\r\n continue;\r\n binsArrayFiltered.push(binsArray[i]);\r\n }\r\n binsArrayFiltered.sort();\r\n binsArrayFiltered.push(Infinity);\r\n\r\n const result = [];\r\n for (let j = 0; j < binsArrayFiltered.length; j++) {\r\n result[j] = [];\r\n result[j][0] = 0;\r\n for (let i = 0; i < dataArray.length; i++) {\r\n if (typeof dataArray[i] !== \"number\") {\r\n continue;\r\n }\r\n const curr = dataArray[i];\r\n if (curr <= binsArrayFiltered[j]) {\r\n result[j][0]++;\r\n dataArray[i] = null;\r\n }\r\n }\r\n }\r\n // return a 2d array\r\n return result;\r\n },\r\n\r\n GAMMA: (x) => {\r\n // David\r\n\r\n // If Number contains characters that are not valid, GAMMA returns the #VALUE! error value.\r\n x = H.accept(x, Types.NUMBER);\r\n\r\n // If Number is a negative integer or 0, GAMMA returns the #NUM! error value.\r\n if (x === 0 || (x < 0 && x === Math.trunc(x))) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n return jStat.gammafn(x);\r\n },\r\n\r\n 'GAMMA.DIST': (x, alpha, beta, cumulative) => {\r\n // David\r\n // If x, alpha, or beta is nonnumeric, GAMMA.DIST returns the #VALUE! error value.\r\n x = H.accept(x, Types.NUMBER);\r\n alpha = H.accept(alpha, Types.NUMBER);\r\n beta = H.accept(beta, Types.NUMBER);\r\n cumulative = H.accept(cumulative, Types.BOOLEAN);\r\n\r\n // If x < 0, GAMMA.DIST returns the #NUM! error value.\r\n // If alpha ≤ 0 or if beta ≤ 0, GAMMA.DIST returns the #NUM! error value.\r\n if (x < 0 || alpha <= 0 || beta <= 0) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n return cumulative ? jStat.gamma.cdf(x, alpha, beta, true) : jStat.gamma.pdf(x, alpha, beta, false);\r\n },\r\n\r\n 'GAMMA.INV': (probability, alpha, beta) => {\r\n // David\r\n // If any argument is text, GAMMA.INV returns the #VALUE! error value.\r\n probability = H.accept(probability, Types.NUMBER);\r\n alpha = H.accept(alpha, Types.NUMBER);\r\n beta = H.accept(beta, Types.NUMBER);\r\n\r\n // If probability < 0 or probability > 1, GAMMA.INV returns the #NUM! error value.\r\n // If alpha ≤ 0 or if beta ≤ 0, GAMMA.INV returns the #NUM! error value.\r\n if (probability < 0 || probability > 1 || alpha <= 0 || beta <= 0) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n return jStat.gamma.inv(probability, alpha, beta);\r\n },\r\n\r\n GAMMALN: (x) => {\r\n // David\r\n\r\n x = H.accept(x, Types.NUMBER);\r\n // If x is nonnumeric, GAMMALN returns the #VALUE! error value.\r\n // If x ≤ 0, GAMMALN returns the #NUM! error value.\r\n if (x <= 0) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n return jStat.gammaln(x);\r\n },\r\n\r\n 'GAMMALN.PRECISE': (x) => {\r\n // David\r\n // return distribution.GAMMALN(x);\r\n x = H.accept(x, Types.NUMBER);\r\n // If x is nonnumeric, GAMMALN returns the #VALUE! error value.\r\n // If x ≤ 0, GAMMALN returns the #NUM! error value.\r\n if (x <= 0) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n return jStat.gammaln(x);\r\n },\r\n\r\n GAUSS: (z) => {\r\n // David\r\n // If z is not a valid number, GAUSS returns the #NUM! error value.\r\n // If z is not a valid data type, GAUSS returns the #VALUE! error value.\r\n z = H.accept(z, Types.NUMBER);\r\n\r\n return jStat.normal.cdf(z, 0, 1) - 0.5;\r\n },\r\n\r\n GEOMEAN: (...numbers) => {\r\n // David\r\n const filterArr = [];\r\n // parse number only if the input is literal\r\n H.flattenParams(numbers, Types.NUMBER, true, (item, info) => {\r\n if (typeof item === \"number\") {\r\n filterArr.push(item);\r\n }\r\n });\r\n return jStat.geomean(filterArr);\r\n },\r\n\r\n GROWTH: (knownY, knownX, newX, useConst) => {\r\n // Credits: Ilmari Karonen (http://stackoverflow.com/questions/14161990/how-to-implement-growth-function-in-javascript)\r\n knownY = H.accept(knownY, Types.ARRAY, undefined, true, true);\r\n for (let i = 0; i < knownY.length; i++) {\r\n if (typeof knownY[i] !== \"number\")\r\n throw FormulaError.VALUE;\r\n }\r\n\r\n knownX = H.accept(knownX, Types.ARRAY, null, true, true);\r\n const isKnownXOmitted = knownX == null;\r\n if (knownX == null) {\r\n knownX = [];\r\n for (let i = 1; i <= knownY.length; i++) {\r\n knownX.push(i);\r\n }\r\n } else {\r\n if (knownX.length !== knownY.length)\r\n throw FormulaError.REF;\r\n for (let i = 0; i < knownX.length; i++) {\r\n if (typeof knownX[i] !== \"number\")\r\n throw FormulaError.VALUE;\r\n }\r\n }\r\n\r\n newX = H.accept(newX, Types.ARRAY, null, false, true);\r\n if (newX == null && isKnownXOmitted) {\r\n newX = [];\r\n for (let i = 1; i <= knownY.length; i++) {\r\n newX.push(i);\r\n }\r\n newX = [newX];\r\n } else if (newX == null) {\r\n newX = Array.isArray(knownX[0]) ? knownX : [knownX];\r\n }\r\n useConst = H.accept(useConst, Types.BOOLEAN, true);\r\n\r\n // Calculate sums over the data:\r\n const n = knownY.length;\r\n let avg_x = 0, avg_y = 0, avg_xy = 0, avg_xx = 0;\r\n for (let i = 0; i < n; i++) {\r\n const x = knownX[i];\r\n const y = Math.log(knownY[i]);\r\n avg_x += x;\r\n avg_y += y;\r\n avg_xy += x * y;\r\n avg_xx += x * x;\r\n }\r\n avg_x /= n;\r\n avg_y /= n;\r\n avg_xy /= n;\r\n avg_xx /= n;\r\n\r\n // Compute linear regression coefficients:\r\n let beta;\r\n let alpha;\r\n if (useConst) {\r\n beta = (avg_xy - avg_x * avg_y) / (avg_xx - avg_x * avg_x);\r\n alpha = avg_y - beta * avg_x;\r\n } else {\r\n beta = avg_xy / avg_xx;\r\n alpha = 0;\r\n }\r\n\r\n // Compute and return result array:\r\n const new_y = [];\r\n for (let i = 0; i < newX.length; i++) {\r\n new_y[i] = [];\r\n for (let j = 0; j < newX[0].length; j++) {\r\n if (typeof newX[i][j] !== \"number\")\r\n throw FormulaError.VALUE;\r\n new_y[i][j] = Math.exp(alpha + beta * newX[i][j]);\r\n }\r\n }\r\n return new_y;\r\n },\r\n\r\n HARMEAN: (...numbers) => {\r\n let cnt = 0, denominator = 0;\r\n // parse number only if the input is literal\r\n H.flattenParams(numbers, Types.NUMBER, true, (item, info) => {\r\n if (typeof item === \"number\") {\r\n denominator += 1 / item;\r\n cnt++;\r\n }\r\n });\r\n return cnt / denominator;\r\n },\r\n\r\n 'HYPGEOM.DIST': (sample_s, number_sample, population_s, number_pop, cumulative) => {\r\n // num_successes, num_draws, successes_in_pop, pop_size\r\n // If any argument is nonnumeric, HYPGEOM.DIST returns the #VALUE! error value.\r\n sample_s = H.accept(sample_s, Types.NUMBER);\r\n number_sample = H.accept(number_sample, Types.NUMBER);\r\n population_s = H.accept(population_s, Types.NUMBER);\r\n number_pop = H.accept(number_pop, Types.NUMBER);\r\n cumulative = H.accept(cumulative, Types.BOOLEAN);\r\n\r\n // All arguments are truncated to integers.\r\n sample_s = Math.trunc(sample_s);\r\n number_sample = Math.trunc(number_sample);\r\n population_s = Math.trunc(population_s);\r\n number_pop = Math.trunc(number_pop);\r\n\r\n // // If number_pop ≤ 0, HYPGEOM.DIST returns the #NUM! error value.\r\n if (number_pop <= 0 || sample_s < 0 || number_sample <= 0 || population_s <= 0) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n // // If number_sample ≤ 0 or number_sample > number_population, HYPGEOM.DIST returns the #NUM! error value.\r\n if (number_sample > number_pop) {\r\n throw FormulaError.NUM;\r\n }\r\n // // If population_s ≤ 0 or population_s > number_population, HYPGEOM.DIST returns the #NUM! error value.\r\n if (population_s > number_pop) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n // If sample_s < 0 or sample_s is greater than the lesser of number_sample or population_s, HYPGEOM.DIST returns the #NUM! error value.\r\n // Google and Mircrosoft has different version on this funtion\r\n if (number_sample < sample_s || population_s < sample_s) {\r\n throw FormulaError.NUM;\r\n }\r\n // If sample_s is less than the larger of 0 or (number_sample - number_population + population_s), HYPGEOM.DIST returns the #NUM! error value.\r\n if (sample_s < (number_sample - number_pop + population_s)) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n function pdf(x, n, M, N) {\r\n return MathFunctions.COMBIN(M, x) * MathFunctions.COMBIN(N - M, n - x) / MathFunctions.COMBIN(N, n);\r\n }\r\n\r\n function cdf(x, n, M, N) {\r\n let result = 0;\r\n for (let i = 0; i <= x; i++) {\r\n result += pdf(i, n, M, N);\r\n }\r\n return result;\r\n }\r\n\r\n return cumulative ? cdf(sample_s, number_sample, population_s, number_pop) : pdf(sample_s, number_sample, population_s, number_pop);\r\n },\r\n\r\n INTERCEPT: (knownYs, knownXs) => {\r\n // similar to FORECAST\r\n knownYs = H.accept(knownYs, Types.ARRAY, undefined, true, true);\r\n knownXs = H.accept(knownXs, Types.ARRAY, undefined, true, true);\r\n\r\n if (knownXs.length !== knownYs.length)\r\n throw FormulaError.NA;\r\n\r\n // filter out values that are not number\r\n const filteredY = [], filteredX = [];\r\n for (let i = 0; i < knownYs.length; i++) {\r\n if (typeof knownYs[i] !== \"number\" || typeof knownXs[i] !== \"number\")\r\n continue;\r\n filteredY.push(knownYs[i]);\r\n filteredX.push(knownXs[i]);\r\n }\r\n if (filteredY.length <= 1)\r\n throw FormulaError.DIV0;\r\n const yMean = jStat.mean(filteredY);\r\n const xMean = jStat.mean(filteredX);\r\n let numerator = 0, denominator = 0;\r\n for (let i = 0; i < filteredY.length; i++) {\r\n numerator += (filteredX[i] - xMean) * (filteredY[i] - yMean);\r\n denominator += (filteredX[i] - xMean) ** 2;\r\n }\r\n const b = numerator / denominator;\r\n return yMean - b * xMean;\r\n },\r\n\r\n KURT: (...numbers) => {\r\n let mean = 0, range = [];\r\n // parse number only if the input is literal\r\n H.flattenParams(numbers, Types.NUMBER, true, (item, info) => {\r\n if (typeof item === \"number\") {\r\n mean += item;\r\n range.push(item);\r\n }\r\n });\r\n const n = range.length;\r\n mean /= n;\r\n let sigma = 0;\r\n for (let i = 0; i < n; i++) {\r\n sigma += Math.pow(range[i] - mean, 4);\r\n }\r\n sigma = sigma / Math.pow(jStat.stdev(range, true), 4);\r\n return ((n * (n + 1)) / ((n - 1) * (n - 2) * (n - 3))) * sigma - 3 * (n - 1) * (n - 1) / ((n - 2) * (n - 3));\r\n },\r\n\r\n LINEST: () => {\r\n\r\n },\r\n\r\n LOGEST: () => {\r\n\r\n },\r\n\r\n 'LOGNORM.DIST': (x, mean, standard_dev, cumulative) => {\r\n // if any argument is nonnumeric, LOGNORM.DIST returns the #VALUE! error value.\r\n x = H.accept(x, Types.NUMBER);\r\n mean = H.accept(mean, Types.NUMBER);\r\n standard_dev = H.accept(standard_dev, Types.NUMBER);\r\n cumulative = H.accept(cumulative, Types.BOOLEAN);\r\n // If x ≤ 0 or if standard_dev ≤ 0, LOGNORM.DIST returns the #NUM! error value.\r\n if (x <= 0 || standard_dev <= 0) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n return cumulative ? jStat.lognormal.cdf(x, mean, standard_dev) : jStat.lognormal.pdf(x, mean, standard_dev);\r\n },\r\n\r\n 'LOGNORM.INV': (probability, mean, standard_dev) => {\r\n // If any argument is nonnumeric, LOGNORM.INV returns the #VALUE! error value.\r\n probability = H.accept(probability, Types.NUMBER);\r\n mean = H.accept(mean, Types.NUMBER);\r\n standard_dev = H.accept(standard_dev, Types.NUMBER);\r\n // If probability <= 0 or probability >= 1, LOGNORM.INV returns the #NUM! error value.\r\n if (probability <= 0 || probability >= 1) {\r\n throw FormulaError.NUM;\r\n }\r\n // If standard_dev <= 0, LOGNORM.INV returns the #NUM! error value.\r\n if (standard_dev <= 0) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n return jStat.lognormal.inv(probability, mean, standard_dev);\r\n },\r\n\r\n 'MODE.MULT': () => {\r\n\r\n },\r\n\r\n 'MODE.SNGL': () => {\r\n\r\n },\r\n\r\n 'NEGBINOM.DIST': (number_f, number_s, probability_s, cumulative) => {\r\n // If any argument is nonnumeric, NEGBINOM.DIST returns the #VALUE! error value.\r\n number_f = H.accept(number_f, Types.NUMBER);\r\n number_s = H.accept(number_s, Types.NUMBER);\r\n probability_s = H.accept(probability_s, Types.NUMBER);\r\n cumulative = H.accept(cumulative, Types.BOOLEAN);\r\n // Number_f and number_s are truncated to integers.\r\n number_f = Math.trunc(number_f);\r\n number_s = Math.trunc(number_s);\r\n\r\n // If probability_s < 0 or if probability > 1, NEGBINOM.DIST returns the #NUM! error value.\r\n if (probability_s < 0 || probability_s > 1) {\r\n throw FormulaError.NUM;\r\n }\r\n // If number_f < 0 or number_s < 1, NEGBINOM.DIST returns the #NUM! error value.\r\n if (number_f < 0 || number_s < 1) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n return cumulative ? jStat.negbin.cdf(number_f, number_s, probability_s) : jStat.negbin.pdf(number_f, number_s, probability_s);\r\n },\r\n\r\n 'NORM.DIST': (x, mean, standard_dev, cumulative) => {\r\n // If mean or standard_dev is nonnumeric, NORM.DIST returns the #VALUE! error value.\r\n x = H.accept(x, Types.NUMBER);\r\n mean = H.accept(mean, Types.NUMBER);\r\n standard_dev = H.accept(standard_dev, Types.NUMBER);\r\n cumulative = H.accept(cumulative, Types.BOOLEAN);\r\n\r\n // If standard_dev ≤ 0, NORM.DIST returns the #NUM! error value.\r\n if (standard_dev <= 0) {\r\n throw FormulaError.NUM;\r\n }\r\n // If mean = 0, standard_dev = 1, and cumulative = TRUE, NORM.DIST returns the standard normal distribution, NORM.S.DIST.\r\n return cumulative ? jStat.normal.cdf(x, mean, standard_dev) : jStat.normal.pdf(x, mean, standard_dev);\r\n\r\n },\r\n\r\n 'NORM.INV': (probability, mean, standard_dev) => {\r\n // If any argument is nonnumeric, NORM.INV returns the #VALUE! error value.\r\n probability = H.accept(probability, Types.NUMBER);\r\n mean = H.accept(mean, Types.NUMBER);\r\n standard_dev = H.accept(standard_dev, Types.NUMBER);\r\n\r\n // If probability <= 0 or if probability >= 1, NORM.INV returns the #NUM! error value.\r\n if (probability <= 0 || probability >= 1) {\r\n throw FormulaError.NUM;\r\n }\r\n // If standard_dev ≤ 0, NORM.INV returns the #NUM! error value.\r\n if (standard_dev <= 0) {\r\n throw FormulaError.NUM;\r\n }\r\n // If mean = 0 and standard_dev = 1, NORM.INV uses the standard normal distribution (see NORMS.INV).\r\n // if(mean === 0 && standard_dev === 1){\r\n // }\r\n\r\n return jStat.normal.inv(probability, mean, standard_dev);\r\n\r\n },\r\n\r\n 'NORM.S.DIST': (z, cumulative) => {\r\n // If z is nonnumeric, NORM.S.DIST returns the #VALUE! error value.\r\n z = H.accept(z, Types.NUMBER);\r\n cumulative = H.accept(cumulative, Types.BOOLEAN);\r\n\r\n return (cumulative) ? jStat.normal.cdf(z, 0, 1) : jStat.normal.pdf(z, 0, 1);\r\n },\r\n\r\n 'NORM.S.INV': (probability) => {\r\n // If probability is nonnumeric, NORMS.INV returns the #VALUE! error value.\r\n probability = H.accept(probability, Types.NUMBER);\r\n // If probability <= 0 or if probability >= 1, NORMS.INV returns the #NUM! error value.\r\n if (probability <= 0 || probability >= 1) {\r\n throw FormulaError.NUM;\r\n }\r\n return jStat.normal.inv(probability, 0, 1);\r\n },\r\n\r\n PEARSON: () => {\r\n\r\n },\r\n\r\n 'PERCENTILE.EXC': () => {\r\n\r\n },\r\n\r\n 'PERCENTILE.INC': () => {\r\n\r\n },\r\n\r\n 'PERCENTRANK.EXC': () => {\r\n\r\n },\r\n\r\n 'PERCENTRANK.INC': () => {\r\n\r\n },\r\n\r\n PERMUTATIONA: () => {\r\n\r\n },\r\n\r\n PHI: (x) => {\r\n // If x is a numeric value that is not valid, PHI returns the #NUM! error value.\r\n x = H.accept(x, Types.NUMBER);\r\n\r\n return Math.exp(-0.5 * x * x) / SQRT2PI;\r\n },\r\n\r\n 'POISSON.DIST': (x, mean, cumulative) => {\r\n // If x or mean is nonnumeric, POISSON.DIST returns the #VALUE! error value.\r\n x = H.accept(x, Types.NUMBER);\r\n mean = H.accept(mean, Types.NUMBER);\r\n cumulative = H.accept(cumulative, Types.BOOLEAN);\r\n // If x < 0, POISSON.DIST returns the #NUM! error value.\r\n // If mean < 0, POISSON.DIST returns the #NUM! error value.\r\n if (x < 0 || mean < 0) {\r\n throw FormulaError.NUM;\r\n }\r\n // If x is not an integer, it is truncated.\r\n x = Math.trunc(x);\r\n\r\n return cumulative ? jStat.poisson.cdf(x, mean) : jStat.poisson.pdf(x, mean);\r\n },\r\n\r\n 'PROB': () => {\r\n\r\n },\r\n\r\n 'QUARTILE.EXC': () => {\r\n\r\n },\r\n\r\n 'QUARTILE.INC': () => {\r\n\r\n },\r\n\r\n 'RANK.AVG': () => {\r\n\r\n },\r\n\r\n 'RANK.EQ': () => {\r\n\r\n },\r\n\r\n RSQ: () => {\r\n\r\n },\r\n\r\n SKEW: () => {\r\n\r\n },\r\n\r\n 'SKEW.P': () => {\r\n\r\n },\r\n\r\n SLOPE: () => {\r\n\r\n },\r\n\r\n STANDARDIZE: (x, mean, standard_dev) => {\r\n x = H.accept(x, Types.NUMBER);\r\n mean = H.accept(mean, Types.NUMBER);\r\n standard_dev = H.accept(standard_dev, Types.NUMBER);\r\n // If standard_dev ≤ 0, STANDARDIZE returns the #NUM! error value.\r\n if (standard_dev <= 0) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n return (x - mean) / standard_dev;\r\n },\r\n\r\n 'STDEV.P': () => {\r\n\r\n },\r\n\r\n 'STDEV.S': () => {\r\n\r\n },\r\n\r\n STDEVA: () => {\r\n\r\n },\r\n\r\n STDEVPA: () => {\r\n\r\n },\r\n\r\n STEYX: () => {\r\n\r\n },\r\n\r\n 'T.DIST': (x, deg_freedom, cumulative) => {\r\n // If any argument is nonnumeric, T.DIST returns the #VALUE! error value.\r\n x = H.accept(x, Types.NUMBER);\r\n deg_freedom = H.accept(deg_freedom, Types.NUMBER);\r\n cumulative = H.accept(cumulative, Types.BOOLEAN);\r\n // If deg_freedom < 1, T.DIST returns an error value. Deg_freedom needs to be at least 1.\r\n if (deg_freedom < 1) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n return cumulative ? jStat.studentt.cdf(x, deg_freedom) : jStat.studentt.pdf(x, deg_freedom);\r\n },\r\n\r\n 'T.DIST.2T': (x, deg_freedom) => {\r\n // If any argument is nonnumeric, T.DIST.2T returns the #VALUE! error value.\r\n x = H.accept(x, Types.NUMBER);\r\n deg_freedom = H.accept(deg_freedom, Types.NUMBER);\r\n // If deg_freedom < 1, T.DIST.2T returns the #NUM! error value.\r\n // If x < 0, then T.DIST.2T returns the #NUM! error value.\r\n if (deg_freedom < 1 || x < 0) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n return (1 - jStat.studentt.cdf(x, deg_freedom)) * 2;\r\n },\r\n\r\n 'T.DIST.RT': (x, deg_freedom) => {\r\n // If any argument is nonnumeric, T.DIST.RT returns the #VALUE! error value.\r\n x = H.accept(x, Types.NUMBER);\r\n deg_freedom = H.accept(deg_freedom, Types.NUMBER);\r\n // If deg_freedom < 1, T.DIST.RT returns the #NUM! error value.\r\n if (deg_freedom < 1) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n return 1 - jStat.studentt.cdf(x, deg_freedom);\r\n },\r\n\r\n 'T.INV': (probability, deg_freedom) => {\r\n // If either argument is nonnumeric, T.INV returns the #VALUE! error value.\r\n probability = H.accept(probability, Types.NUMBER);\r\n deg_freedom = H.accept(deg_freedom, Types.NUMBER);\r\n // If probability <= 0 or if probability > 1, T.INV returns the #NUM! error value.\r\n // If deg_freedom < 1, T.INV returns the #NUM! error value.\r\n if (probability <= 0 || probability > 1 || deg_freedom < 1) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n // If deg_freedom is not an integer, it is truncated.\r\n deg_freedom = deg_freedom % 1 === 0 ? deg_freedom : Math.trunc(deg_freedom);\r\n\r\n return jStat.studentt.inv(probability, deg_freedom);\r\n },\r\n\r\n 'T.INV.2T': (probability, deg_freedom) => {\r\n // If either argument is nonnumeric, T.INV.2T returns the #VALUE! error value.\r\n probability = H.accept(probability, Types.NUMBER);\r\n deg_freedom = H.accept(deg_freedom, Types.NUMBER);\r\n // If probability <= 0 or if probability > 1, T.INV.2T returns the #NUM! error value.\r\n // If deg_freedom < 1, T.INV.2T returns the #NUM! error value.\r\n if (probability <= 0 || probability > 1 || deg_freedom < 1) {\r\n throw FormulaError.NUM;\r\n }\r\n // If deg_freedom is not an integer, it is truncated.\r\n deg_freedom = deg_freedom % 1 === 0 ? deg_freedom : Math.trunc(deg_freedom);\r\n\r\n return Math.abs(jStat.studentt.inv(probability / 2, deg_freedom));\r\n\r\n },\r\n\r\n 'T.TEST': () => {\r\n\r\n },\r\n\r\n TREND: () => {\r\n\r\n },\r\n\r\n TRIMMEAN: () => {\r\n\r\n },\r\n\r\n 'VAR.P': () => {\r\n\r\n },\r\n\r\n 'VAR.S': () => {\r\n\r\n },\r\n\r\n 'VARA': () => {\r\n\r\n },\r\n\r\n 'VARPA': () => {\r\n\r\n },\r\n\r\n 'WEIBULL.DIST': (x, alpha, beta, cumulative) => {\r\n // If x, alpha, or beta is nonnumeric, WEIBULL.DIST returns the #VALUE! error value.\r\n x = H.accept(x, Types.NUMBER);\r\n alpha = H.accept(alpha, Types.NUMBER);\r\n beta = H.accept(beta, Types.NUMBER);\r\n cumulative = H.accept(cumulative, Types.BOOLEAN);\r\n // If x < 0, WEIBULL.DIST returns the #NUM! error value.\r\n // If alpha ≤ 0 or if beta ≤ 0, WEIBULL.DIST returns the #NUM! error value.\r\n if (x < 0 || alpha <= 0 || beta <= 0) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n return cumulative\r\n ? 1 - Math.exp(-Math.pow(x / beta, alpha))\r\n : Math.pow(x, alpha - 1) * Math.exp(-Math.pow(x / beta, alpha)) * alpha / Math.pow(beta, alpha);\r\n },\r\n\r\n 'Z.TEST': () => {\r\n\r\n }\r\n};\r\n\r\n\r\nmodule.exports = {\r\n DistributionFunctions,\r\n};\r\n","const FormulaError = require('../error');\r\nconst TextFunctions = require('./text');\r\nconst {FormulaHelpers, Types} = require('../helpers');\r\nconst H = FormulaHelpers;\r\nconst bessel = require(\"bessel\");\r\nconst jStat = require(\"jstat\");\r\nconst MAX_OCT = 536870911, // OCT2DEC(3777777777)\r\n MIN_OCT = -536870912, // OCT2DEC4000000000)\r\n MAX_HEX = 549755813887,\r\n MIN_HEX = -549755813888,\r\n MAX_BIN = 511, // BIN2DEC(111111111)\r\n MIN_BIN = -512; // BIN2DEC(1000000000)\r\n\r\nconst numberRegex = /^\\s?[+-]?\\s?[0-9]+[.]?[0-9]*([eE][+\\-][0-9]+)?\\s?$/;\r\nconst IMWithoutRealRegex = /^\\s?([+-]?\\s?([0-9]+[.]?[0-9]*([eE][+\\-][0-9]+)?)?)\\s?[ij]\\s?$/;\r\nconst IMRegex = /^\\s?([+-]?\\s?[0-9]+[.]?[0-9]*([eE][+\\-][0-9]+)?)\\s?([+-]?\\s?([0-9]+[.]?[0-9]*([eE][+\\-][0-9]+)?)?)\\s?[ij]\\s?$/;\r\n\r\nfunction parseIM(textOrNumber) {\r\n textOrNumber = H.accept(textOrNumber);\r\n let real = 0, im = 0, unit = 'i';\r\n if (typeof textOrNumber === \"number\")\r\n return {real: textOrNumber, im, unit};\r\n if (typeof textOrNumber === \"boolean\")\r\n throw FormulaError.VALUE;\r\n let match = textOrNumber.match(numberRegex);\r\n if (match) {\r\n real = Number(match[0]);\r\n return {real, im, unit};\r\n }\r\n match = textOrNumber.match(IMWithoutRealRegex);\r\n if (match) {\r\n im = Number(/^\\s?[+-]?\\s?$/.test(match[1]) ? match[1] + '1' : match[1]);\r\n unit = match[0].slice(-1);\r\n return {real, im, unit};\r\n }\r\n match = textOrNumber.match(IMRegex);\r\n if (match) {\r\n real = Number(match[1]);\r\n im = Number(/^\\s?[+-]?\\s?$/.test(match[3]) ? match[3] + '1' : match[3]);\r\n unit = match[0].slice(-1);\r\n return {real, im, unit};\r\n }\r\n throw FormulaError.NUM;\r\n}\r\n\r\nconst EngineeringFunctions = {\r\n BESSELI: (x, n) => {\r\n x = H.accept(x, Types.NUMBER_NO_BOOLEAN);\r\n n = H.accept(n, Types.NUMBER_NO_BOOLEAN);\r\n // if n is not an integer, it is truncated.\r\n n = Math.trunc(n);\r\n if (n < 0) {\r\n throw FormulaError.NUM;\r\n }\r\n return bessel.besseli(x, n);\r\n },\r\n\r\n BESSELJ: (x, n) => {\r\n x = H.accept(x, Types.NUMBER_NO_BOOLEAN);\r\n n = H.accept(n, Types.NUMBER_NO_BOOLEAN);\r\n // if n is not an integer, it is truncated.\r\n n = Math.trunc(n);\r\n if (n < 0) {\r\n throw FormulaError.NUM;\r\n }\r\n return bessel.besselj(x, n);\r\n },\r\n\r\n BESSELK: (x, n) => {\r\n x = H.accept(x, Types.NUMBER_NO_BOOLEAN);\r\n n = H.accept(n, Types.NUMBER_NO_BOOLEAN);\r\n // if n is not an integer, it is truncated.\r\n n = Math.trunc(n);\r\n if (n < 0) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n return bessel.besselk(x, n);\r\n },\r\n\r\n BESSELY: (x, n) => {\r\n x = H.accept(x, Types.NUMBER_NO_BOOLEAN);\r\n n = H.accept(n, Types.NUMBER_NO_BOOLEAN);\r\n // if n is not an integer, it is truncated.\r\n n = Math.trunc(n);\r\n if (n < 0) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n return bessel.bessely(x, n);\r\n },\r\n\r\n BIN2DEC: (number) => {\r\n number = H.accept(number, Types.NUMBER_NO_BOOLEAN);\r\n let numberStr = number.toString();\r\n\r\n if (numberStr.length > 10) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n if (numberStr.length === 10 && numberStr.substring(0, 1) === '1') {\r\n return parseInt(numberStr.substring(1), 2) + MIN_BIN;\r\n } else {\r\n return parseInt(numberStr, 2);\r\n }\r\n },\r\n\r\n BIN2HEX: (number, places) => {\r\n number = H.accept(number, Types.NUMBER_NO_BOOLEAN);\r\n places = H.accept(places, Types.NUMBER_NO_BOOLEAN, null);\r\n\r\n const numberStr = number.toString();\r\n if (numberStr.length > 10) {\r\n throw FormulaError.NUM;\r\n }\r\n if (numberStr.length === 10 && numberStr.substring(0, 1) === '1') {\r\n return (parseInt(numberStr.substring(1), 2) + 1099511627264).toString(16).toUpperCase();\r\n }\r\n // convert BIN to HEX\r\n const result = parseInt(number, 2).toString(16);\r\n\r\n if (places == null) {\r\n return result.toUpperCase();\r\n } else {\r\n if (places < 0) {\r\n throw FormulaError.NUM;\r\n }\r\n // truncate places in case it is not an integer\r\n places = Math.trunc(places);\r\n if (places >= result.length) {\r\n return (TextFunctions.REPT('0', places - result.length) + result).toUpperCase();\r\n } else {\r\n throw FormulaError.NUM;\r\n }\r\n }\r\n },\r\n\r\n BIN2OCT: (number, places) => {\r\n number = H.accept(number, Types.NUMBER_NO_BOOLEAN);\r\n places = H.accept(places, Types.NUMBER, null);\r\n\r\n let numberStr = number.toString();\r\n if (numberStr.length > 10) {\r\n throw FormulaError.NUM;\r\n }\r\n if (numberStr.length === 10 && numberStr.substr(0, 1) === \"1\") {\r\n return (parseInt(numberStr.substr(1), 2) + 1073741312).toString(8);\r\n }\r\n\r\n let result = parseInt(number, 2).toString(8);\r\n if (places == null) {\r\n return result.toUpperCase();\r\n } else {\r\n if (places < 0) {\r\n throw FormulaError.NUM;\r\n }\r\n // truncate places in case it is not an integer\r\n places = Math.trunc(places);\r\n if (places >= result.length) {\r\n return (TextFunctions.REPT('0', places - result.length) + result);\r\n } else {\r\n throw FormulaError.NUM;\r\n }\r\n }\r\n },\r\n\r\n BITAND: (number1, number2) => {\r\n number1 = H.accept(number1, Types.NUMBER);\r\n number2 = H.accept(number2, Types.NUMBER);\r\n if (number1 < 0 || number2 < 0) {\r\n throw FormulaError.NUM;\r\n }\r\n // check if they are non-integer, if yes, return error\r\n if (Math.floor(number1) !== number1 || Math.floor(number2) !== number2) {\r\n throw FormulaError.NUM;\r\n }\r\n if (number1 > 281474976710655 || number2 > 281474976710655) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n return number1 & number2;\r\n },\r\n\r\n BITLSHIFT: (number, shiftAmount) => {\r\n number = H.accept(number, Types.NUMBER);\r\n shiftAmount = H.accept(shiftAmount, Types.NUMBER);\r\n shiftAmount = Math.trunc(shiftAmount);\r\n if (Math.abs(shiftAmount) > 53) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n if (number < 0 || Math.floor(number) !== number || number > 281474976710655) {\r\n throw FormulaError.NUM;\r\n }\r\n const result = (shiftAmount >= 0) ? number * 2 ** shiftAmount : Math.trunc(number / 2 ** -shiftAmount);\r\n if (result > 281474976710655)\r\n throw FormulaError.NUM;\r\n else\r\n return result;\r\n },\r\n\r\n BITOR: (number1, number2) => {\r\n number1 = H.accept(number1, Types.NUMBER);\r\n number2 = H.accept(number2, Types.NUMBER);\r\n if (number1 < 0 || number2 < 0) {\r\n throw FormulaError.NUM;\r\n }\r\n // check if they are non-integer, if yes, return error\r\n if (Math.floor(number1) !== number1 || Math.floor(number2) !== number2) {\r\n throw FormulaError.NUM;\r\n }\r\n if (number1 > 281474976710655 || number2 > 281474976710655) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n return number1 | number2;\r\n },\r\n\r\n BITRSHIFT: (number, shiftAmount) => {\r\n number = H.accept(number, Types.NUMBER);\r\n shiftAmount = H.accept(shiftAmount, Types.NUMBER);\r\n return EngineeringFunctions.BITLSHIFT(number, -shiftAmount);\r\n },\r\n\r\n BITXOR: (number1, number2) => {\r\n number1 = H.accept(number1, Types.NUMBER);\r\n number2 = H.accept(number2, Types.NUMBER);\r\n if (number1 < 0 || number1 > 281474976710655 || Math.floor(number1) !== number1) {\r\n throw FormulaError.NUM;\r\n }\r\n if (number2 < 0 || number2 > 281474976710655 || Math.floor(number2) !== number2) {\r\n throw FormulaError.NUM;\r\n }\r\n // // to check if the number is a non-integer\r\n // if (Math.abs(number1) !== number1 || Math.abs(number2) !== number2) {\r\n // throw FormulaError.NUM;\r\n // }\r\n\r\n return number1 ^ number2;\r\n },\r\n\r\n COMPLEX: (realNum, iNum, suffix) => {\r\n realNum = H.accept(realNum, Types.NUMBER_NO_BOOLEAN);\r\n iNum = H.accept(iNum, Types.NUMBER_NO_BOOLEAN);\r\n suffix = H.accept(suffix, Types.STRING, \"i\");\r\n if (suffix !== \"i\" && suffix !== \"j\") {\r\n throw FormulaError.VALUE;\r\n }\r\n if (realNum === 0 && iNum === 0) {\r\n return 0;\r\n } else if (realNum === 0) {\r\n if (iNum === 1) {\r\n return suffix;\r\n } else if (iNum === -1) {\r\n return \"-\" + suffix;\r\n } else {\r\n return iNum.toString() + suffix;\r\n }\r\n } else if (iNum === 0) {\r\n return realNum.toString()\r\n } else {\r\n let sign = (iNum > 0) ? \"+\" : \"\";\r\n if (iNum === 1) {\r\n return realNum.toString() + sign + suffix;\r\n } else if (iNum === -1) {\r\n return realNum.toString() + sign + \"-\" + suffix;\r\n } else {\r\n return realNum.toString() + sign + iNum.toString() + suffix;\r\n }\r\n }\r\n },\r\n\r\n DEC2BIN: (number, places) => {\r\n number = H.accept(number, Types.NUMBER);\r\n places = H.accept(places, Types.NUMBER, null);\r\n if (number < MIN_BIN || number > MAX_BIN) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n // if the number is negative, valid place values are ignored and it returns a 10-character binary number.\r\n if (number < 0) {\r\n return \"1\" + TextFunctions.REPT(\"0\", 9 - (512 + number).toString(2).length) + (512 + number).toString(2);\r\n }\r\n\r\n let result = parseInt(number, 10).toString(2);\r\n if (places == null) {\r\n return result;\r\n } else {\r\n // if places is not an integer, it is truncated\r\n places = Math.trunc(places);\r\n if (places <= 0) {\r\n throw FormulaError.NUM;\r\n }\r\n if (places < result.length)\r\n throw FormulaError.NUM;\r\n return TextFunctions.REPT(\"0\", places - result.length) + result;\r\n }\r\n },\r\n\r\n DEC2HEX: (number, places) => {\r\n number = H.accept(number, Types.NUMBER);\r\n places = H.accept(places, Types.NUMBER, null);\r\n if (number < -549755813888 || number > 549755813888) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n // if the number is negative, valid place values are ignored and it returns a 10-character binary number.\r\n if (number < 0) {\r\n return (1099511627776 + number).toString(16).toUpperCase();\r\n }\r\n\r\n let result = parseInt(number, 10).toString(16);\r\n\r\n if (places == null) {\r\n return result.toUpperCase();\r\n } else {\r\n // if places is not an integer, it is truncated\r\n places = Math.trunc(places);\r\n if (places <= 0) {\r\n throw FormulaError.NUM;\r\n }\r\n if (places < result.length)\r\n throw FormulaError.NUM;\r\n return TextFunctions.REPT(\"0\", places - result.length) + result.toUpperCase();\r\n }\r\n },\r\n\r\n DEC2OCT: (number, places) => {\r\n number = H.accept(number, Types.NUMBER);\r\n places = H.accept(places, Types.NUMBER, null);\r\n if (number < -536870912 || number > 536870912) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n // if the number is negative, valid place values are ignored and it returns a 10-character binary number.\r\n if (number < 0) {\r\n return (number + 1073741824).toString(8);\r\n }\r\n\r\n let result = parseInt(number, 10).toString(8);\r\n\r\n if (places == null) {\r\n return result.toUpperCase();\r\n } else {\r\n // if places is not an integer, it is truncated\r\n places = Math.trunc(places);\r\n if (places <= 0) {\r\n throw FormulaError.NUM;\r\n }\r\n if (places < result.length)\r\n throw FormulaError.NUM;\r\n return TextFunctions.REPT(\"0\", places - result.length) + result;\r\n }\r\n },\r\n\r\n DELTA: (number1, number2) => {\r\n number1 = H.accept(number1, Types.NUMBER_NO_BOOLEAN);\r\n number2 = H.accept(number2, Types.NUMBER_NO_BOOLEAN, 0);\r\n\r\n return number1 === number2 ? 1 : 0;\r\n },\r\n\r\n ERF: (lowerLimit, upperLimit) => {\r\n lowerLimit = H.accept(lowerLimit, Types.NUMBER_NO_BOOLEAN);\r\n upperLimit = H.accept(upperLimit, Types.NUMBER_NO_BOOLEAN, 0);\r\n return jStat.erf(lowerLimit);\r\n },\r\n\r\n ERFC: (x) => {\r\n x = H.accept(x, Types.NUMBER_NO_BOOLEAN);\r\n return jStat.erfc(x);\r\n },\r\n\r\n GESTEP: (number, step) => {\r\n number = H.accept(number, Types.NUMBER_NO_BOOLEAN);\r\n step = H.accept(step, Types.NUMBER_NO_BOOLEAN, 0);\r\n return number >= step ? 1 : 0;\r\n },\r\n\r\n HEX2BIN: (number, places) => {\r\n number = H.accept(number, Types.STRING);\r\n places = H.accept(places, Types.NUMBER, null);\r\n\r\n if (number.length > 10 || !/^[0-9a-fA-F]*$/.test(number)) {\r\n throw FormulaError.NUM;\r\n }\r\n // to check if the number is negative\r\n let ifNegative = (number.length === 10 && number.substr(0, 1).toLowerCase() === \"f\");\r\n // convert HEX to DEC\r\n let toDecimal = ifNegative ? parseInt(number, 16) - 1099511627776 : parseInt(number, 16);\r\n // if number is lower than -512 or grater than 511, return error\r\n if (toDecimal < MIN_BIN || toDecimal > MAX_BIN) {\r\n throw FormulaError.NUM;\r\n }\r\n // if the number is negative, valid place values are ignored and it returns a 10-character binary number.\r\n if (ifNegative) {\r\n return \"1\" + TextFunctions.REPT('0', 9 - (toDecimal + 512).toString(2).length) + (toDecimal + 512).toString(2)\r\n }\r\n // convert decimal to binary\r\n let toBinary = toDecimal.toString(2);\r\n\r\n if (places == null) {\r\n return toBinary;\r\n } else {\r\n // if places is not an integer, it is truncated\r\n places = Math.trunc(places);\r\n if (places <= 0 || places < toBinary.length) {\r\n throw FormulaError.NUM;\r\n }\r\n return TextFunctions.REPT(\"0\", places - toBinary.length) + toBinary;\r\n }\r\n },\r\n\r\n HEX2DEC: (number) => {\r\n number = H.accept(number, Types.STRING);\r\n if (number.length > 10 || !/^[0-9a-fA-F]*$/.test(number)) {\r\n throw FormulaError.NUM;\r\n }\r\n let result = parseInt(number, 16);\r\n //david: validate\r\n // If the places is larger than 10, or number is larger than, return #NUM!\r\n // If number is not a valid Hex number, returns the #NUM! error value.\r\n\r\n return (result >= 549755813888) ? result - 1099511627776 : result;\r\n },\r\n\r\n HEX2OCT: (number, places) => {\r\n number = H.accept(number, Types.STRING);\r\n if (number.length > 10 || !/^[0-9a-fA-F]*$/.test(number)) {\r\n throw FormulaError.NUM;\r\n }\r\n // convert HEX to DEC\r\n let toDecimal = EngineeringFunctions.HEX2DEC(number);\r\n if (toDecimal > MAX_OCT || toDecimal < MIN_OCT) {\r\n throw FormulaError.NUM;\r\n }\r\n return EngineeringFunctions.DEC2OCT(toDecimal, places);\r\n },\r\n\r\n IMABS: (iNumber) => {\r\n const {real, im} = parseIM(iNumber);\r\n return Math.sqrt(Math.pow(real, 2) + Math.pow(im, 2));\r\n },\r\n\r\n IMAGINARY: (iNumber) => {\r\n return parseIM(iNumber).im;\r\n },\r\n\r\n IMARGUMENT: (iNumber) => {\r\n const {real, im} = parseIM(iNumber);\r\n // x + yi => x cannot be 0, since theta = tan-1(y / x)\r\n if (real === 0 && im === 0) {\r\n throw FormulaError.DIV0;\r\n }\r\n // return PI/2 if x is equal to 0 and y is positive\r\n if (real === 0 && im > 0) {\r\n return Math.PI / 2;\r\n }\r\n // while return -PI/2 if x is equal to 0 and y is negative\r\n if (real === 0 && im < 0) {\r\n return -Math.PI / 2;\r\n }\r\n // return -PI if x is negative and y is equal to 0\r\n if (real < 0 && im === 0) {\r\n return Math.PI\r\n }\r\n // return 0 if x is positive and y is equal to 0\r\n if (real > 0 && im === 0) {\r\n return 0;\r\n }\r\n // return argument of iNumber\r\n if (real > 0) {\r\n return Math.atan(im / real);\r\n } else if (real < 0 && im > 0) {\r\n return Math.atan(im / real) + Math.PI;\r\n } else {\r\n return Math.atan(im / real) - Math.PI;\r\n }\r\n\r\n },\r\n\r\n IMCONJUGATE: (iNumber) => {\r\n const {real, im, unit} = parseIM(iNumber);\r\n return (im !== 0) ? EngineeringFunctions.COMPLEX(real, -im, unit) : '' + real;\r\n },\r\n\r\n IMCOS: (iNumber) => {\r\n const {real, im, unit} = parseIM(iNumber);\r\n let realInput = Math.cos(real) * (Math.exp(im) + Math.exp(-im)) / 2;\r\n let imaginaryInput = -Math.sin(real) * (Math.exp(im) - Math.exp(-im)) / 2;\r\n\r\n return EngineeringFunctions.COMPLEX(realInput, imaginaryInput, unit);\r\n },\r\n\r\n IMCOSH: (iNumber) => {\r\n const {real, im, unit} = parseIM(iNumber);\r\n let realInput = Math.cos(im) * (Math.exp(real) + Math.exp(-real)) / 2;\r\n let imaginaryInput = -Math.sin(im) * (Math.exp(real) - Math.exp(-real)) / 2;\r\n return EngineeringFunctions.COMPLEX(realInput, -imaginaryInput, unit);\r\n },\r\n\r\n IMCOT: (iNumber) => {\r\n iNumber = H.accept(iNumber);\r\n let real = EngineeringFunctions.IMCOS(iNumber);\r\n let imaginary = EngineeringFunctions.IMSIN(iNumber);\r\n return EngineeringFunctions.IMDIV(real, imaginary);\r\n },\r\n\r\n IMCSC: (iNumber) => {\r\n iNumber = H.accept(iNumber);\r\n return EngineeringFunctions.IMDIV('1', EngineeringFunctions.IMSIN(iNumber));\r\n },\r\n\r\n IMCSCH: (iNumber) => {\r\n iNumber = H.accept(iNumber);\r\n return EngineeringFunctions.IMDIV('1', EngineeringFunctions.IMSINH(iNumber));\r\n },\r\n\r\n IMDIV: (iNumber1, iNumber2) => {\r\n const res1 = parseIM(iNumber1);\r\n const a = res1.real, b = res1.im, unit1 = res1.unit;\r\n\r\n const res2 = parseIM(iNumber2);\r\n const c = res2.real, d = res2.im, unit2 = res2.unit;\r\n\r\n if (c === 0 && d === 0 || unit1 !== unit2) {\r\n throw FormulaError.NUM;\r\n }\r\n let unit = unit1;\r\n\r\n let denominator = Math.pow(c, 2) + Math.pow(d, 2);\r\n return EngineeringFunctions.COMPLEX((a * c + b * d) / denominator, (b * c - a * d) / denominator, unit);\r\n },\r\n\r\n IMEXP: (iNumber) => {\r\n const {real, im, unit} = parseIM(iNumber);\r\n // return exponential of complex number\r\n let e = Math.exp(real);\r\n return EngineeringFunctions.COMPLEX(e * Math.cos(im), e * Math.sin(im), unit)\r\n },\r\n\r\n IMLN: (iNumber) => {\r\n const {real, im, unit} = parseIM(iNumber);\r\n return EngineeringFunctions.COMPLEX(Math.log(Math.sqrt(Math.pow(real, 2) + Math.pow(im, 2))),\r\n Math.atan(im / real), unit);\r\n },\r\n\r\n IMLOG10: (iNumber) => {\r\n const {real, im, unit} = parseIM(iNumber);\r\n let realInput = Math.log(Math.sqrt(Math.pow(real, 2) + Math.pow(im, 2))) / Math.log(10);\r\n let imaginaryInput = Math.atan(im / real) / Math.log(10);\r\n return EngineeringFunctions.COMPLEX(realInput, imaginaryInput, unit);\r\n },\r\n\r\n IMLOG2: (iNumber) => {\r\n const {real, im, unit} = parseIM(iNumber);\r\n let realInput = Math.log(Math.sqrt(Math.pow(real, 2) + Math.pow(im, 2))) / Math.log(2);\r\n let imaginaryInput = Math.atan(im / real) / Math.log(2);\r\n return EngineeringFunctions.COMPLEX(realInput, imaginaryInput, unit);\r\n },\r\n\r\n IMPOWER: (iNumber, number) => {\r\n let {unit} = parseIM(iNumber);\r\n number = H.accept(number, Types.NUMBER_NO_BOOLEAN);\r\n\r\n // calculate power of modules\r\n let p = Math.pow(EngineeringFunctions.IMABS(iNumber), number);\r\n // calculate argument\r\n let t = EngineeringFunctions.IMARGUMENT(iNumber);\r\n\r\n let real = p * Math.cos(number * t);\r\n let imaginary = p * Math.sin(number * t);\r\n return EngineeringFunctions.COMPLEX(real, imaginary, unit);\r\n },\r\n\r\n IMPRODUCT: (...params) => {\r\n let result;\r\n let i = 0;\r\n H.flattenParams(params, null, false, (item) => {\r\n if (i === 0) {\r\n result = H.accept(item);\r\n parseIM(result);\r\n } else {\r\n const res1 = parseIM(result);\r\n const a = res1.real, b = res1.im, unit1 = res1.unit;\r\n const res2 = parseIM(item);\r\n const c = res2.real, d = res2.im, unit2 = res2.unit;\r\n if (unit1 !== unit2)\r\n throw FormulaError.VALUE;\r\n result = EngineeringFunctions.COMPLEX(a * c - b * d, a * d + b * c);\r\n }\r\n i++;\r\n }, 1);\r\n return result;\r\n },\r\n\r\n IMREAL: (iNumber) => {\r\n return parseIM(iNumber).real;\r\n },\r\n\r\n IMSEC: (iNumber) => {\r\n return EngineeringFunctions.IMDIV('1', EngineeringFunctions.IMCOS(iNumber));\r\n },\r\n\r\n IMSECH: (iNumber) => {\r\n return EngineeringFunctions.IMDIV('1', EngineeringFunctions.IMCOSH(iNumber));\r\n },\r\n\r\n IMSIN: (iNumber) => {\r\n const {real, im, unit} = parseIM(iNumber);\r\n\r\n let realInput = Math.sin(real) * (Math.exp(im) + Math.exp(-im)) / 2;\r\n let imaginaryInput = Math.cos(real) * (Math.exp(im) - Math.exp(-im)) / 2;\r\n return EngineeringFunctions.COMPLEX(realInput, imaginaryInput, unit);\r\n },\r\n\r\n IMSINH: (iNumber) => {\r\n const {real, im, unit} = parseIM(iNumber);\r\n let realInput = Math.cos(im) * (Math.exp(real) - Math.exp(-real)) / 2;\r\n let imaginaryInput = Math.sin(im) * (Math.exp(real) + Math.exp(-real)) / 2;\r\n return EngineeringFunctions.COMPLEX(realInput, imaginaryInput, unit);\r\n },\r\n\r\n IMSQRT: (iNumber) => {\r\n const {unit} = parseIM(iNumber);\r\n // calculate the power of modulus\r\n let power = Math.sqrt(EngineeringFunctions.IMABS(iNumber));\r\n // calculate argument\r\n let argument = EngineeringFunctions.IMARGUMENT(iNumber);\r\n return EngineeringFunctions.COMPLEX(power * Math.cos(argument / 2), power * Math.sin(argument / 2), unit);\r\n },\r\n\r\n IMSUB: (iNumber1, iNumber2) => {\r\n const res1 = parseIM(iNumber1);\r\n const a = res1.real, b = res1.im, unit1 = res1.unit;\r\n const res2 = parseIM(iNumber2);\r\n const c = res2.real, d = res2.im, unit2 = res2.unit;\r\n\r\n if (unit1 !== unit2) {\r\n throw FormulaError.VALUE;\r\n }\r\n return EngineeringFunctions.COMPLEX(a - c, b - d, unit1);\r\n },\r\n\r\n IMSUM: (...params) => {\r\n let realSum = 0, imSum = 0, prevUnit;\r\n H.flattenParams(params, null, false, (item) => {\r\n const {real, im, unit} = parseIM(item);\r\n if (!prevUnit) prevUnit = unit;\r\n if (prevUnit !== unit)\r\n throw FormulaError.VALUE;\r\n realSum += real;\r\n imSum += im;\r\n });\r\n return EngineeringFunctions.COMPLEX(realSum, imSum, prevUnit);\r\n },\r\n\r\n IMTAN: (iNumber) => {\r\n const {unit} = parseIM(iNumber);\r\n return EngineeringFunctions.IMDIV(EngineeringFunctions.IMSIN(iNumber), EngineeringFunctions.IMCOS(iNumber), unit);\r\n },\r\n\r\n // FIXME: need to check the test cases\r\n OCT2BIN: (number, places) => {\r\n // office: If number is not a valid octal number, OCT2BIN returns the #NUM! error value.\r\n // office: If places is nonnumeric, OCT2BIN returns the #VALUE! error value.\r\n number = H.accept(number, Types.STRING);\r\n places = H.accept(places, Types.NUMBER, null);\r\n\r\n // 1. If number's length larger than 10, returns #NUM!\r\n if (number.length > 10) {\r\n throw FormulaError.NUM\r\n }\r\n // In microsoft Excel, if places is larger than 10, it will return #NUM!\r\n if (places > 10) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n // 2. office: If places is negative, OCT2BIN returns the #NUM! error value.\r\n if (places !== null && places < 0) {\r\n throw FormulaError.NUM;\r\n }\r\n // if places is not an integer, it is truncated\r\n // office: If places is not an integer, it is truncated.\r\n places = Math.trunc(places);\r\n\r\n // to check if the Oct number is negative\r\n let isNegative = (number.length === 10 && number.substring(0, 1) === '7');\r\n // convert OCT to DEC\r\n let toDecimal = EngineeringFunctions.OCT2DEC(number);\r\n // 2.\r\n // office: If number is negative, it cannot be less than 7777777000, and if number is positive, it cannot be greater than 777.\r\n // MiN_BIN = -512, MAX_BIN = 511\r\n if (toDecimal < MIN_BIN || toDecimal > MAX_BIN) {\r\n return FormulaError.NUM;\r\n }\r\n // if number is negative, ignores places and return a 10-character binary number\r\n // office: If number is negative, OCT2BIN ignores places and returns a 10-character binary number.\r\n if (isNegative) {\r\n return '1' + TextFunctions.REPT('0', 9 - (512 + toDecimal).toString(2).length) + (512 + toDecimal).toString(2);\r\n }\r\n\r\n // convert DEC to BIN\r\n let result = toDecimal.toString(2);\r\n\r\n\r\n //if (places === null) {\r\n if (places === 0) {\r\n return result;\r\n }\r\n\r\n // office: If OCT2BIN requires more than places characters, it returns the #NUM! error value.\r\n if (places < result.length) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n return TextFunctions.REPT('0', places - result.length) + result;\r\n },\r\n\r\n OCT2DEC: (number) => {\r\n number = H.accept(number, Types.STRING);\r\n // In microsoft Excel, if number contains more than ten characters (10 digits), it will return #NUM!\r\n if (number.length > 10) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n // If number is not a valid octal number, OCT2DEC returns the #NUM! error value.\r\n for (const n of number) {\r\n if (n < '0' || n > '7') {\r\n throw FormulaError.NUM;\r\n }\r\n }\r\n // convert to DEC\r\n let result = parseInt(number, 8);\r\n return (result >= 536870912) ? result - 1073741824 : result;\r\n // 536870912(4000000000) : -536870912; 1073741823(7777777777) : -1\r\n },\r\n\r\n OCT2HEX: (number, places) => {\r\n number = H.accept(number, Types.STRING);\r\n places = H.accept(places, Types.NUMBER_NO_BOOLEAN, null);\r\n if (number.length > 10) {\r\n throw FormulaError.NUM\r\n }\r\n // office: If number is not a valid octal number, OCT2DEC returns the #NUM! error value.\r\n for (const n of number) {\r\n if (n < '0' || n > '7') {\r\n throw FormulaError.NUM;\r\n }\r\n }\r\n // if places is not an integer, it is truncated\r\n places = Math.trunc(places);\r\n // office: If places is negative, OCT2HEX returns the #NUM! error value.\r\n if (places < 0 || places > 10) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n // convert OCT to DEC\r\n let toDecimal = EngineeringFunctions.OCT2DEC(number);\r\n\r\n // convert DEC to HEX\r\n // let toHex = EngineeringFunctions.DEC2HEX(toDecimal, places);\r\n let toHex = EngineeringFunctions.DEC2HEX(toDecimal);\r\n //if (places === null) {\r\n if (places === 0) {\r\n return toHex;\r\n }\r\n if (places < toHex.length) {\r\n throw FormulaError.NUM;\r\n } else {\r\n return TextFunctions.REPT('0', places - toHex.length) + toHex;\r\n }\r\n },\r\n};\r\n\r\nmodule.exports = EngineeringFunctions;\r\n","const FormulaError = require('../error');\r\nconst {FormulaHelpers, Types} = require('../helpers');\r\nconst H = FormulaHelpers;\r\n\r\nconst error2Number = {\r\n '#NULL!': 1, '#DIV/0!': 2, '#VALUE!': 3, '#REF!': 4, '#NAME?': 5,\r\n '#NUM!': 6, '#N/A': 7\r\n};\r\n\r\nconst InfoFunctions = {\r\n\r\n CELL: (infoType, reference) => {\r\n // throw FormulaError.NOT_IMPLEMENTED('CELL');\r\n },\r\n\r\n 'ERROR.TYPE': (value) => {\r\n value = H.accept(value);\r\n if ( value instanceof FormulaError)\r\n return error2Number[value.toString()];\r\n throw FormulaError.NA;\r\n },\r\n\r\n INFO: () => {\r\n },\r\n\r\n ISBLANK: (value) => {\r\n if (!value.ref)\r\n return false;\r\n // null and undefined are also blank\r\n return value.value == null || value.value === '';\r\n },\r\n\r\n ISERR: (value) => {\r\n value = H.accept(value);\r\n return value instanceof FormulaError && value.toString() !== '#N/A';\r\n },\r\n\r\n ISERROR: (value) => {\r\n value = H.accept(value);\r\n return value instanceof FormulaError;\r\n },\r\n\r\n ISEVEN: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n number = Math.trunc(number);\r\n return number % 2 === 0;\r\n },\r\n\r\n ISLOGICAL: (value) => {\r\n value = H.accept(value);\r\n return typeof value === 'boolean';\r\n },\r\n\r\n ISNA: (value) => {\r\n value = H.accept(value);\r\n return value instanceof FormulaError && value.toString() === '#N/A';\r\n },\r\n\r\n ISNONTEXT: (value) => {\r\n value = H.accept(value);\r\n return typeof value !== 'string';\r\n },\r\n\r\n ISNUMBER: (value) => {\r\n value = H.accept(value);\r\n return typeof value === \"number\";\r\n },\r\n\r\n ISREF: (value) => {\r\n if (!value.ref)\r\n return false;\r\n if (H.isCellRef(value) && (value.ref.row > 1048576 || value.ref.col > 16384)) {\r\n return false;\r\n }\r\n if (H.isRangeRef(value) && (value.ref.from.row > 1048576 || value.ref.from.col > 16384\r\n || value.ref.to.row > 1048576 || value.ref.to.col > 16384)) {\r\n return false;\r\n }\r\n value = H.accept(value);\r\n return !(value instanceof FormulaError && value.toString() === '#REF!');\r\n },\r\n\r\n ISTEXT: (value) => {\r\n value = H.accept(value);\r\n return typeof value === 'string';\r\n },\r\n\r\n N: value => {\r\n value = H.accept(value);\r\n const type = typeof value;\r\n if (type === 'number')\r\n return value;\r\n else if (type === \"boolean\")\r\n return Number(value);\r\n else if (value instanceof FormulaError)\r\n throw value;\r\n return 0;\r\n },\r\n\r\n NA: () => {\r\n throw FormulaError.NA;\r\n },\r\n\r\n TYPE: value => {\r\n // a reference\r\n if (value.ref) {\r\n if (H.isRangeRef(value)) {\r\n return 16;\r\n } else if (H.isCellRef(value)) {\r\n value = H.accept(value);\r\n // empty cell is number type\r\n if (typeof value === \"string\" && value.length === 0)\r\n return 1;\r\n }\r\n }\r\n value = H.accept(value);\r\n const type = typeof value;\r\n if (type === 'number')\r\n return 1;\r\n else if (type === \"string\")\r\n return 2;\r\n else if (type === \"boolean\")\r\n return 4;\r\n else if (value instanceof FormulaError)\r\n return 16;\r\n else if (Array.isArray(value))\r\n return 64;\r\n },\r\n};\r\n\r\n\r\nmodule.exports = InfoFunctions;\r\n","const FormulaError = require('../error');\r\nconst {FormulaHelpers, Types,} = require('../helpers');\r\nconst H = FormulaHelpers;\r\n\r\n/**\r\n * Get the number of values that evaluate to true and false.\r\n * Cast Number and \"TRUE\", \"FALSE\" to boolean.\r\n * Ignore unrelated values.\r\n * @ignore\r\n * @param {any[]} params\r\n * @return {number[]}\r\n */\r\nfunction getNumLogicalValue(params) {\r\n let numTrue = 0, numFalse = 0;\r\n H.flattenParams(params, null, true, val => {\r\n const type = typeof val;\r\n if (type === \"string\") {\r\n if (val === 'TRUE')\r\n val = true;\r\n else if (val === 'FALSE')\r\n val = false;\r\n } else if (type === \"number\")\r\n val = Boolean(val);\r\n\r\n if (typeof val === \"boolean\") {\r\n if (val === true)\r\n numTrue++;\r\n else\r\n numFalse++;\r\n }\r\n });\r\n return [numTrue, numFalse];\r\n}\r\n\r\nconst LogicalFunctions = {\r\n AND: (...params) => {\r\n const [numTrue, numFalse] = getNumLogicalValue(params);\r\n\r\n // OR returns #VALUE! if no logical values are found.\r\n if (numTrue === 0 && numFalse === 0)\r\n return FormulaError.VALUE;\r\n\r\n return numTrue > 0 && numFalse === 0;\r\n },\r\n\r\n FALSE: () => {\r\n return false;\r\n },\r\n\r\n // Special\r\n IF: (context, logicalTest, valueIfTrue, valueIfFalse) => {\r\n logicalTest = H.accept(logicalTest, Types.BOOLEAN);\r\n valueIfTrue = H.accept(valueIfTrue); // do not parse type\r\n valueIfFalse = H.accept(valueIfFalse, null, false); // do not parse type\r\n\r\n return logicalTest ? valueIfTrue : valueIfFalse;\r\n },\r\n\r\n IFERROR: (value, valueIfError) => {\r\n return value.value instanceof FormulaError ? H.accept(valueIfError) : H.accept(value);\r\n },\r\n\r\n IFNA: function (value, valueIfNa) {\r\n if (arguments.length > 2)\r\n throw FormulaError.TOO_MANY_ARGS('IFNA');\r\n return FormulaError.NA.equals(value.value) ? H.accept(valueIfNa) : H.accept(value);\r\n },\r\n\r\n IFS: (...params) => {\r\n if (params.length % 2 !== 0)\r\n return new FormulaError('#N/A', 'IFS expects all arguments after position 0 to be in pairs.');\r\n\r\n for (let i = 0; i < params.length / 2; i++) {\r\n const logicalTest = H.accept(params[i * 2], Types.BOOLEAN);\r\n const valueIfTrue = H.accept(params[i * 2 + 1]);\r\n if (logicalTest)\r\n return valueIfTrue;\r\n }\r\n\r\n return FormulaError.NA;\r\n },\r\n\r\n NOT: (logical) => {\r\n logical = H.accept(logical, Types.BOOLEAN);\r\n return !logical;\r\n },\r\n\r\n OR: (...params) => {\r\n const [numTrue, numFalse] = getNumLogicalValue(params);\r\n\r\n // OR returns #VALUE! if no logical values are found.\r\n if (numTrue === 0 && numFalse === 0)\r\n return FormulaError.VALUE;\r\n\r\n return numTrue > 0;\r\n },\r\n\r\n SWITCH: (...params) => {\r\n\r\n },\r\n\r\n TRUE: () => {\r\n return true;\r\n },\r\n\r\n XOR: (...params) => {\r\n const [numTrue, numFalse] = getNumLogicalValue(params);\r\n\r\n // XOR returns #VALUE! if no logical values are found.\r\n if (numTrue === 0 && numFalse === 0)\r\n return FormulaError.VALUE;\r\n\r\n return numTrue % 2 === 1;\r\n },\r\n};\r\n\r\nmodule.exports = LogicalFunctions;\r\n","const FormulaError = require('../error');\r\nconst {FormulaHelpers, Types, Factorials, Criteria} = require('../helpers');\r\nconst {Infix} = require('../operators');\r\nconst H = FormulaHelpers;\r\n\r\n// Max number in excel is 2^1024-1, same as javascript, thus I will not check if number is valid in some functions.\r\n\r\n// factorials\r\nconst f = [], fd = [];\r\n\r\nfunction factorial(n) {\r\n if (n <= 100)\r\n return Factorials[n];\r\n if (f[n] > 0)\r\n return f[n];\r\n return f[n] = factorial(n - 1) * n;\r\n}\r\n\r\nfunction factorialDouble(n) {\r\n if (n === 1 || n === 0)\r\n return 1;\r\n if (n === 2)\r\n return 2;\r\n if (fd[n] > 0)\r\n return fd[n];\r\n return fd[n] = factorialDouble(n - 2) * n;\r\n}\r\n\r\n// https://support.office.com/en-us/article/excel-functions-by-category-5f91f4e9-7b42-46d2-9bd1-63f26a86c0eb\r\nconst MathFunctions = {\r\n ABS: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n return Math.abs(number);\r\n },\r\n\r\n AGGREGATE: (functionNum, options, ref1, ...refs) => {\r\n // functionNum = H.accept(functionNum, Types.NUMBER);\r\n // throw FormulaError.NOT_IMPLEMENTED('AGGREGATE');\r\n },\r\n\r\n ARABIC: text => {\r\n text = H.accept(text, Types.STRING).toUpperCase();\r\n // Credits: Rafa? Kukawski\r\n if (!/^M*(?:D?C{0,3}|C[MD])(?:L?X{0,3}|X[CL])(?:V?I{0,3}|I[XV])$/.test(text)) {\r\n throw new FormulaError('#VALUE!', 'Invalid roman numeral in ARABIC evaluation.');\r\n }\r\n let r = 0;\r\n text.replace(/[MDLV]|C[MD]?|X[CL]?|I[XV]?/g, function (i) {\r\n r += {\r\n M: 1000,\r\n CM: 900,\r\n D: 500,\r\n CD: 400,\r\n C: 100,\r\n XC: 90,\r\n L: 50,\r\n XL: 40,\r\n X: 10,\r\n IX: 9,\r\n V: 5,\r\n IV: 4,\r\n I: 1\r\n }[i];\r\n });\r\n return r;\r\n },\r\n\r\n BASE: (number, radix, minLength) => {\r\n number = H.accept(number, Types.NUMBER);\r\n if (number < 0 || number >= 2 ** 53)\r\n throw FormulaError.NUM;\r\n radix = H.accept(radix, Types.NUMBER);\r\n if (radix < 2 || radix > 36)\r\n throw FormulaError.NUM;\r\n minLength = H.accept(minLength, Types.NUMBER, 0);\r\n if (minLength < 0) {\r\n throw FormulaError.NUM;\r\n }\r\n\r\n const result = number.toString(radix).toUpperCase();\r\n return new Array(Math.max(minLength + 1 - result.length, 0)).join('0') + result;\r\n },\r\n\r\n CEILING: (number, significance) => {\r\n number = H.accept(number, Types.NUMBER);\r\n significance = H.accept(significance, Types.NUMBER);\r\n if (significance === 0)\r\n return 0;\r\n if (number / significance % 1 === 0)\r\n return number;\r\n const absSignificance = Math.abs(significance);\r\n const times = Math.floor(Math.abs(number) / absSignificance);\r\n if (number < 0) {\r\n // round down, away from zero\r\n const roundDown = significance < 0;\r\n return roundDown ? -absSignificance * (times + 1) : -absSignificance * (times);\r\n } else {\r\n return (times + 1) * absSignificance;\r\n }\r\n },\r\n\r\n 'CEILING.MATH': (number, significance, mode) => {\r\n number = H.accept(number, Types.NUMBER);\r\n significance = H.accept(significance, Types.NUMBER, number > 0 ? 1 : -1);\r\n // mode can be any number\r\n mode = H.accept(mode, Types.NUMBER, 0);\r\n // The Mode argument does not affect positive numbers.\r\n if (number >= 0) {\r\n return MathFunctions.CEILING(number, significance);\r\n }\r\n // if round down, away from zero, then significance\r\n const offset = mode ? significance : 0;\r\n return MathFunctions.CEILING(number, significance) - offset;\r\n },\r\n\r\n 'CEILING.PRECISE': (number, significance) => {\r\n number = H.accept(number, Types.NUMBER);\r\n significance = H.accept(significance, Types.NUMBER, 1);\r\n // always round up\r\n return MathFunctions.CEILING(number, Math.abs(significance));\r\n },\r\n\r\n COMBIN: (number, numberChosen) => {\r\n number = H.accept(number, Types.NUMBER);\r\n numberChosen = H.accept(numberChosen, Types.NUMBER);\r\n if (number < 0 || numberChosen < 0 || number < numberChosen)\r\n throw FormulaError.NUM;\r\n const nFactorial = MathFunctions.FACT(number), kFactorial = MathFunctions.FACT(numberChosen);\r\n return nFactorial / kFactorial / MathFunctions.FACT(number - numberChosen);\r\n },\r\n\r\n COMBINA: (number, numberChosen) => {\r\n number = H.accept(number, Types.NUMBER);\r\n numberChosen = H.accept(numberChosen, Types.NUMBER);\r\n // special case\r\n if ((number === 0 || number === 1) && numberChosen === 0)\r\n return 1;\r\n if (number < 0 || numberChosen < 0)\r\n throw FormulaError.NUM;\r\n return MathFunctions.COMBIN(number + numberChosen - 1, number - 1);\r\n },\r\n\r\n DECIMAL: (text, radix) => {\r\n text = H.accept(text, Types.STRING);\r\n radix = H.accept(radix, Types.NUMBER);\r\n radix = Math.trunc(radix);\r\n if (radix < 2 || radix > 36)\r\n throw FormulaError.NUM;\r\n const res = parseInt(text, radix);\r\n if (isNaN(res))\r\n throw FormulaError.NUM;\r\n return res;\r\n },\r\n\r\n DEGREES: (radians) => {\r\n radians = H.accept(radians, Types.NUMBER);\r\n return radians * (180 / Math.PI);\r\n },\r\n\r\n EVEN: (number) => {\r\n return MathFunctions.CEILING(number, -2);\r\n },\r\n\r\n EXP: (number) => {\r\n number = H.accept(number, Types.NUMBER);\r\n return Math.exp(number)\r\n },\r\n\r\n FACT: (number) => {\r\n number = H.accept(number, Types.NUMBER);\r\n number = Math.trunc(number);\r\n // max number = 170\r\n if (number > 170 || number < 0)\r\n throw FormulaError.NUM;\r\n if (number <= 100)\r\n return Factorials[number];\r\n return factorial(number);\r\n },\r\n\r\n FACTDOUBLE: (number) => {\r\n number = H.accept(number, Types.NUMBER);\r\n number = Math.trunc(number);\r\n // max number = 170\r\n if (number < -1)\r\n throw FormulaError.NUM;\r\n if (number === -1)\r\n return 1;\r\n return factorialDouble(number);\r\n },\r\n\r\n FLOOR: (number, significance) => {\r\n number = H.accept(number, Types.NUMBER);\r\n significance = H.accept(significance, Types.NUMBER);\r\n if (significance === 0)\r\n return 0;\r\n if (number > 0 && significance < 0)\r\n throw FormulaError.NUM;\r\n if (number / significance % 1 === 0)\r\n return number;\r\n const absSignificance = Math.abs(significance);\r\n const times = Math.floor(Math.abs(number) / absSignificance);\r\n if (number < 0) {\r\n // round down, away from zero\r\n const roundDown = significance < 0;\r\n return roundDown ? -absSignificance * times : -absSignificance * (times + 1);\r\n } else {\r\n // toward zero\r\n return times * absSignificance;\r\n }\r\n },\r\n\r\n 'FLOOR.MATH': (number, significance, mode) => {\r\n number = H.accept(number, Types.NUMBER);\r\n significance = H.accept(significance, Types.NUMBER, number > 0 ? 1 : -1);\r\n\r\n // mode can be 0 or any other number, 0 means away from zero\r\n // the official documentation seems wrong\r\n mode = H.accept(mode, Types.NUMBER, 0);\r\n // The Mode argument does not affect positive numbers.\r\n if (mode === 0 || number >= 0) {\r\n // away from zero\r\n return MathFunctions.FLOOR(number, Math.abs(significance));\r\n }\r\n // towards zero, add a significance\r\n return MathFunctions.FLOOR(number, significance) + significance;\r\n },\r\n\r\n 'FLOOR.PRECISE': (number, significance) => {\r\n number = H.accept(number, Types.NUMBER);\r\n significance = H.accept(significance, Types.NUMBER, 1);\r\n // always round up\r\n return MathFunctions.FLOOR(number, Math.abs(significance));\r\n },\r\n\r\n GCD: (...params) => {\r\n const arr = [];\r\n H.flattenParams(params, null, false,\r\n (param) => {\r\n // allow array, range ref\r\n param = typeof param === 'boolean' ? NaN : Number(param);\r\n if (!isNaN(param)) {\r\n if (param < 0 || param > 9007199254740990) // 2^53\r\n throw FormulaError.NUM;\r\n arr.push(Math.trunc(param))\r\n } else\r\n throw FormulaError.VALUE;\r\n }, 0);\r\n // http://rosettacode.org/wiki/Greatest_common_divisor#JavaScript\r\n let i, y,\r\n n = params.length,\r\n x = Math.abs(arr[0]);\r\n\r\n for (i = 1; i < n; i++) {\r\n y = Math.abs(arr[i]);\r\n\r\n while (x && y) {\r\n (x > y) ? x %= y : y %= x;\r\n }\r\n x += y;\r\n }\r\n return x;\r\n },\r\n\r\n INT: (number) => {\r\n number = H.accept(number, Types.NUMBER);\r\n return Math.floor(number);\r\n },\r\n\r\n 'ISO.CEILING': (...params) => {\r\n return MathFunctions['CEILING.PRECISE'](...params);\r\n },\r\n\r\n LCM: (...params) => {\r\n const arr = [];\r\n // always parse string to number if possible\r\n H.flattenParams(params, null, false,\r\n param => {\r\n param = typeof param === 'boolean' ? NaN : Number(param);\r\n if (!isNaN(param)) {\r\n if (param < 0 || param > 9007199254740990) // 2^53\r\n throw FormulaError.NUM;\r\n arr.push(Math.trunc(param))\r\n }\r\n // throw value error if can't parse to string\r\n else\r\n throw FormulaError.VALUE;\r\n }, 1);\r\n // http://rosettacode.org/wiki/Least_common_multiple#JavaScript\r\n let n = arr.length, a = Math.abs(arr[0]);\r\n for (let i = 1; i < n; i++) {\r\n let b = Math.abs(arr[i]), c = a;\r\n while (a && b) {\r\n a > b ? a %= b : b %= a;\r\n }\r\n a = Math.abs(c * arr[i]) / (a + b);\r\n }\r\n return a;\r\n },\r\n\r\n LN: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n return Math.log(number);\r\n },\r\n\r\n LOG: (number, base) => {\r\n number = H.accept(number, Types.NUMBER);\r\n base = H.accept(base, Types.NUMBER, 10);\r\n\r\n return Math.log(number) / Math.log(base);\r\n },\r\n\r\n LOG10: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n return Math.log10(number);\r\n },\r\n\r\n MDETERM: (array) => {\r\n array = H.accept(array, Types.ARRAY, undefined, false, true);\r\n if (array[0].length !== array.length)\r\n throw FormulaError.VALUE;\r\n // adopted from https://github.com/numbers/numbers.js/blob/master/lib/numbers/matrix.js#L261\r\n const numRow = array.length, numCol = array[0].length;\r\n let det = 0, diagLeft, diagRight;\r\n\r\n if (numRow === 1) {\r\n return array[0][0];\r\n } else if (numRow === 2) {\r\n return array[0][0] * array[1][1] - array[0][1] * array[1][0];\r\n }\r\n\r\n for (let col = 0; col < numCol; col++) {\r\n diagLeft = array[0][col];\r\n diagRight = array[0][col];\r\n\r\n for (let row = 1; row < numRow; row++) {\r\n diagRight *= array[row][(((col + row) % numCol) + numCol) % numCol];\r\n diagLeft *= array[row][(((col - row) % numCol) + numCol) % numCol];\r\n }\r\n\r\n det += diagRight - diagLeft;\r\n }\r\n\r\n return det;\r\n },\r\n\r\n MINVERSE: (array) => {\r\n // TODO\r\n // array = H.accept(array, Types.ARRAY, null, false);\r\n // if (array[0].length !== array.length)\r\n // throw FormulaError.VALUE;\r\n // throw FormulaError.NOT_IMPLEMENTED('MINVERSE');\r\n },\r\n\r\n MMULT: (array1, array2) => {\r\n array1 = H.accept(array1, Types.ARRAY, undefined, false, true);\r\n array2 = H.accept(array2, Types.ARRAY, undefined, false, true);\r\n\r\n const aNumRows = array1.length, aNumCols = array1[0].length,\r\n bNumRows = array2.length, bNumCols = array2[0].length,\r\n m = new Array(aNumRows); // initialize array of rows\r\n\r\n if (aNumCols !== bNumRows)\r\n throw FormulaError.VALUE;\r\n\r\n for (let r = 0; r < aNumRows; r++) {\r\n m[r] = new Array(bNumCols); // initialize the current row\r\n for (let c = 0; c < bNumCols; c++) {\r\n m[r][c] = 0; // initialize the current cell\r\n for (let i = 0; i < aNumCols; i++) {\r\n const v1 = array1[r][i], v2 = array2[i][c];\r\n if (typeof v1 !== \"number\" || typeof v2 !== \"number\") throw FormulaError.VALUE;\r\n m[r][c] += array1[r][i] * array2[i][c];\r\n }\r\n }\r\n }\r\n return m;\r\n },\r\n\r\n MOD: (number, divisor) => {\r\n number = H.accept(number, Types.NUMBER);\r\n divisor = H.accept(divisor, Types.NUMBER);\r\n if (divisor === 0)\r\n throw FormulaError.DIV0;\r\n return number - divisor * MathFunctions.INT(number / divisor);\r\n\r\n },\r\n\r\n MROUND: (number, multiple) => {\r\n number = H.accept(number, Types.NUMBER);\r\n multiple = H.accept(multiple, Types.NUMBER);\r\n if (multiple === 0)\r\n return 0;\r\n if (number > 0 && multiple < 0 || number < 0 && multiple > 0)\r\n throw FormulaError.NUM;\r\n if (number / multiple % 1 === 0)\r\n return number;\r\n return Math.round(number / multiple) * multiple;\r\n },\r\n\r\n MULTINOMIAL: (...numbers) => {\r\n let numerator = 0, denominator = 1;\r\n H.flattenParams(numbers, Types.NUMBER, false, number => {\r\n if (number < 0)\r\n throw FormulaError.NUM;\r\n numerator += number;\r\n denominator *= factorial(number);\r\n });\r\n return factorial(numerator) / denominator;\r\n },\r\n\r\n MUNIT: (dimension) => {\r\n dimension = H.accept(dimension, Types.NUMBER);\r\n const matrix = [];\r\n for (let row = 0; row < dimension; row++) {\r\n const rowArr = [];\r\n for (let col = 0; col < dimension; col++) {\r\n if (row === col)\r\n rowArr.push(1);\r\n else\r\n rowArr.push(0);\r\n }\r\n matrix.push(rowArr);\r\n }\r\n return matrix;\r\n },\r\n\r\n ODD: (number) => {\r\n number = H.accept(number, Types.NUMBER);\r\n if (number === 0)\r\n return 1;\r\n let temp = Math.ceil(Math.abs(number));\r\n temp = (temp & 1) ? temp : temp + 1;\r\n return (number > 0) ? temp : -temp;\r\n },\r\n\r\n PI: () => {\r\n return Math.PI;\r\n },\r\n\r\n POWER: (number, power) => {\r\n number = H.accept(number, Types.NUMBER);\r\n power = H.accept(power, Types.NUMBER);\r\n return number ** power;\r\n },\r\n\r\n PRODUCT: (...numbers) => {\r\n let product = 1;\r\n H.flattenParams(numbers, null, true, (number, info) => {\r\n const parsedNumber = Number(number);\r\n if (info.isLiteral && !isNaN(parsedNumber)) {\r\n product *= parsedNumber;\r\n } else {\r\n if (typeof number === \"number\")\r\n product *= number;\r\n }\r\n }, 1);\r\n return product;\r\n },\r\n\r\n QUOTIENT: (numerator, denominator) => {\r\n numerator = H.accept(numerator, Types.NUMBER);\r\n denominator = H.accept(denominator, Types.NUMBER);\r\n return Math.trunc(numerator / denominator);\r\n },\r\n\r\n RADIANS: (degrees) => {\r\n degrees = H.accept(degrees, Types.NUMBER);\r\n return degrees / 180 * Math.PI;\r\n },\r\n\r\n RAND: () => {\r\n return Math.random();\r\n },\r\n\r\n RANDBETWEEN: (bottom, top) => {\r\n bottom = H.accept(bottom, Types.NUMBER);\r\n top = H.accept(top, Types.NUMBER);\r\n return Math.floor(Math.random() * (top - bottom + 1) + bottom);\r\n },\r\n\r\n ROMAN: (number, form) => {\r\n number = H.accept(number, Types.NUMBER);\r\n form = H.accept(form, Types.NUMBER, 0);\r\n if (form !== 0)\r\n throw Error('ROMAN: only allows form=0 (classic form).');\r\n // The MIT License\r\n // Copyright (c) 2008 Steven Levithan\r\n const digits = String(number).split('');\r\n const key = ['', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM', '', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC', '', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX'];\r\n let roman = '', i = 3;\r\n while (i--) {\r\n roman = (key[+digits.pop() + (i * 10)] || '') + roman;\r\n }\r\n return new Array(+digits.join('') + 1).join('M') + roman;\r\n },\r\n\r\n ROUND: (number, digits) => {\r\n number = H.accept(number, Types.NUMBER);\r\n digits = H.accept(digits, Types.NUMBER);\r\n\r\n const multiplier = Math.pow(10, Math.abs(digits));\r\n const sign = number > 0 ? 1 : -1;\r\n if (digits > 0) {\r\n return sign * Math.round(Math.abs(number) * multiplier) / multiplier;\r\n } else if (digits === 0) {\r\n return sign * Math.round(Math.abs(number));\r\n } else {\r\n return sign * Math.round(Math.abs(number) / multiplier) * multiplier;\r\n }\r\n },\r\n\r\n ROUNDDOWN: (number, digits) => {\r\n number = H.accept(number, Types.NUMBER);\r\n digits = H.accept(digits, Types.NUMBER);\r\n\r\n const multiplier = Math.pow(10, Math.abs(digits));\r\n const sign = number > 0 ? 1 : -1;\r\n if (digits > 0) {\r\n const offset = 1 / multiplier * 0.5;\r\n return sign * Math.round((Math.abs(number) - offset) * multiplier) / multiplier;\r\n } else if (digits === 0) {\r\n const offset = 0.5;\r\n return sign * Math.round((Math.abs(number) - offset));\r\n } else {\r\n const offset = multiplier * 0.5;\r\n return sign * Math.round((Math.abs(number) - offset) / multiplier) * multiplier;\r\n }\r\n },\r\n\r\n ROUNDUP: (number, digits) => {\r\n number = H.accept(number, Types.NUMBER);\r\n digits = H.accept(digits, Types.NUMBER);\r\n\r\n const multiplier = Math.pow(10, Math.abs(digits));\r\n const sign = number > 0 ? 1 : -1;\r\n if (digits > 0) {\r\n const offset = 1 / multiplier * 0.5;\r\n return sign * Math.round((Math.abs(number) + offset) * multiplier) / multiplier;\r\n } else if (digits === 0) {\r\n const offset = 0.5;\r\n return sign * Math.round((Math.abs(number) + offset));\r\n } else {\r\n const offset = multiplier * 0.5;\r\n return sign * Math.round((Math.abs(number) + offset) / multiplier) * multiplier;\r\n }\r\n },\r\n\r\n SERIESSUM: (x, n, m, coefficients) => {\r\n x = H.accept(x, Types.NUMBER);\r\n n = H.accept(n, Types.NUMBER);\r\n m = H.accept(m, Types.NUMBER);\r\n let i = 0, result;\r\n H.flattenParams([coefficients], Types.NUMBER, false, (coefficient) => {\r\n if (typeof coefficient !== \"number\") {\r\n throw FormulaError.VALUE;\r\n }\r\n if (i === 0) {\r\n result = coefficient * Math.pow(x, n);\r\n } else {\r\n result += coefficient * Math.pow(x, n + i * m);\r\n }\r\n i++;\r\n });\r\n return result;\r\n },\r\n\r\n SIGN: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n return number > 0 ? 1 : number === 0 ? 0 : -1;\r\n },\r\n\r\n SQRT: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n if (number < 0)\r\n throw FormulaError.NUM;\r\n return Math.sqrt(number);\r\n },\r\n\r\n SQRTPI: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n if (number < 0)\r\n throw FormulaError.NUM;\r\n return Math.sqrt(number * Math.PI);\r\n },\r\n\r\n SUBTOTAL: () => {\r\n // TODO: Finish this after statistical functions are implemented.\r\n },\r\n\r\n SUM: (...params) => {\r\n // parse string to number only when it is a literal. (not a reference)\r\n let result = 0;\r\n H.flattenParams(params, Types.NUMBER, true,\r\n (item, info) => {\r\n // literal will be parsed to given type (Type.NUMBER)\r\n if (info.isLiteral) {\r\n result += item;\r\n } else {\r\n if (typeof item === \"number\")\r\n result += item;\r\n }\r\n });\r\n return result\r\n },\r\n\r\n /**\r\n * This functions requires instance of {@link FormulaParser}.\r\n */\r\n SUMIF: (context, range, criteria, sumRange) => {\r\n const ranges = H.retrieveRanges(context, range, sumRange);\r\n range = ranges[0];\r\n sumRange = ranges[1];\r\n\r\n criteria = H.retrieveArg(context, criteria);\r\n const isCriteriaArray = criteria.isArray;\r\n // parse criteria\r\n criteria = Criteria.parse(H.accept(criteria));\r\n let sum = 0;\r\n\r\n range.forEach((row, rowNum) => {\r\n row.forEach((value, colNum) => {\r\n const valueToAdd = sumRange[rowNum][colNum];\r\n if (typeof valueToAdd !== \"number\")\r\n return;\r\n // wildcard\r\n if (criteria.op === 'wc') {\r\n if (criteria.match === criteria.value.test(value)) {\r\n sum += valueToAdd;\r\n }\r\n\r\n } else if (Infix.compareOp(value, criteria.op, criteria.value, Array.isArray(value), isCriteriaArray)) {\r\n sum += valueToAdd;\r\n }\r\n })\r\n });\r\n return sum;\r\n },\r\n\r\n SUMIFS: () => {\r\n\r\n },\r\n\r\n SUMPRODUCT: (array1, ...arrays) => {\r\n array1 = H.accept(array1, Types.ARRAY, undefined, false, true);\r\n arrays.forEach(array => {\r\n array = H.accept(array, Types.ARRAY, undefined, false, true);\r\n if (array1[0].length !== array[0].length || array1.length !== array.length)\r\n throw FormulaError.VALUE;\r\n for (let i = 0; i < array1.length; i++) {\r\n for (let j = 0; j < array1[0].length; j++) {\r\n if (typeof array1[i][j] !== \"number\")\r\n array1[i][j] = 0;\r\n if (typeof array[i][j] !== \"number\")\r\n array[i][j] = 0;\r\n array1[i][j] *= array[i][j];\r\n }\r\n }\r\n });\r\n let result = 0;\r\n\r\n array1.forEach(row => {\r\n row.forEach(value => {\r\n result += value;\r\n })\r\n });\r\n\r\n return result;\r\n },\r\n\r\n SUMSQ: (...params) => {\r\n // parse string to number only when it is a literal. (not a reference)\r\n let result = 0;\r\n H.flattenParams(params, Types.NUMBER, true,\r\n (item, info) => {\r\n // literal will be parsed to given type (Type.NUMBER)\r\n if (info.isLiteral) {\r\n result += item ** 2;\r\n } else {\r\n if (typeof item === \"number\")\r\n result += item ** 2;\r\n }\r\n });\r\n return result\r\n },\r\n\r\n SUMX2MY2: (arrayX, arrayY) => {\r\n const x = [], y = [];\r\n let sum = 0;\r\n H.flattenParams([arrayX], null, false, (item, info) => {\r\n x.push(item);\r\n });\r\n H.flattenParams([arrayY], null, false, (item, info) => {\r\n y.push(item);\r\n });\r\n if (x.length !== y.length)\r\n throw FormulaError.NA;\r\n for (let i = 0; i < x.length; i++) {\r\n if (typeof x[i] === \"number\" && typeof y[i] === \"number\")\r\n sum += x[i] ** 2 - y[i] ** 2\r\n }\r\n return sum;\r\n },\r\n\r\n SUMX2PY2: (arrayX, arrayY) => {\r\n const x = [], y = [];\r\n let sum = 0;\r\n H.flattenParams([arrayX], null, false, (item, info) => {\r\n x.push(item);\r\n });\r\n H.flattenParams([arrayY], null, false, (item, info) => {\r\n y.push(item);\r\n });\r\n if (x.length !== y.length)\r\n throw FormulaError.NA;\r\n for (let i = 0; i < x.length; i++) {\r\n if (typeof x[i] === \"number\" && typeof y[i] === \"number\")\r\n sum += x[i] ** 2 + y[i] ** 2\r\n }\r\n return sum;\r\n },\r\n\r\n SUMXMY2: (arrayX, arrayY) => {\r\n const x = [], y = [];\r\n let sum = 0;\r\n H.flattenParams([arrayX], null, false, (item, info) => {\r\n x.push(item);\r\n });\r\n H.flattenParams([arrayY], null, false, (item, info) => {\r\n y.push(item);\r\n });\r\n if (x.length !== y.length)\r\n throw FormulaError.NA;\r\n for (let i = 0; i < x.length; i++) {\r\n if (typeof x[i] === \"number\" && typeof y[i] === \"number\")\r\n sum += (x[i] - y[i]) ** 2;\r\n }\r\n return sum;\r\n },\r\n\r\n TRUNC: (number) => {\r\n number = H.accept(number, Types.NUMBER);\r\n return Math.trunc(number);\r\n },\r\n};\r\n\r\n\r\nmodule.exports = MathFunctions;\r\n","const FormulaError = require('../error');\r\nconst {FormulaHelpers, Types, WildCard, Address} = require('../helpers');\r\nconst Collection = require('../../grammar/type/collection');\r\nconst H = FormulaHelpers;\r\n\r\nconst ReferenceFunctions = {\r\n\r\n ADDRESS: (rowNumber, columnNumber, absNum, a1, sheetText) => {\r\n rowNumber = H.accept(rowNumber, Types.NUMBER);\r\n columnNumber = H.accept(columnNumber, Types.NUMBER);\r\n absNum = H.accept(absNum, Types.NUMBER, 1);\r\n a1 = H.accept(a1, Types.BOOLEAN, true);\r\n sheetText = H.accept(sheetText, Types.STRING, '');\r\n\r\n if (rowNumber < 1 || columnNumber < 1 || absNum < 1 || absNum > 4)\r\n throw FormulaError.VALUE;\r\n\r\n let result = '';\r\n if (sheetText.length > 0) {\r\n if (/[^A-Za-z_.\\d\\u007F-\\uFFFF]/.test(sheetText)) {\r\n result += `'${sheetText}'!`;\r\n } else {\r\n result += sheetText + '!';\r\n }\r\n }\r\n if (a1) {\r\n // A1 style\r\n result += (absNum === 1 || absNum === 3) ? '$' : '';\r\n result += Address.columnNumberToName(columnNumber);\r\n result += (absNum === 1 || absNum === 2) ? '$' : '';\r\n result += rowNumber;\r\n } else {\r\n // R1C1 style\r\n result += 'R';\r\n result += (absNum === 4 || absNum === 3) ? `[${rowNumber}]` : rowNumber;\r\n result += 'C';\r\n result += (absNum === 4 || absNum === 2) ? `[${columnNumber}]` : columnNumber;\r\n }\r\n return result;\r\n },\r\n\r\n AREAS: refs => {\r\n refs = H.accept(refs);\r\n if (refs instanceof Collection) {\r\n return refs.length;\r\n }\r\n return 1;\r\n },\r\n\r\n CHOOSE: (indexNum, ...values) => {\r\n\r\n },\r\n\r\n // Special\r\n COLUMN: (context, obj) => {\r\n if (obj == null) {\r\n if (context.position.col != null)\r\n return context.position.col;\r\n else\r\n throw Error('FormulaParser.parse is called without position parameter.')\r\n } else {\r\n if (typeof obj !== 'object' || Array.isArray(obj))\r\n throw FormulaError.VALUE;\r\n if (H.isCellRef(obj)) {\r\n return obj.ref.col;\r\n } else if (H.isRangeRef(obj)) {\r\n return obj.ref.from.col;\r\n } else {\r\n throw Error('ReferenceFunctions.COLUMN should not reach here.')\r\n }\r\n }\r\n },\r\n\r\n // Special\r\n COLUMNS: (context, obj) => {\r\n if (obj == null) {\r\n throw Error('COLUMNS requires one argument');\r\n }\r\n if (typeof obj != 'object' || Array.isArray(obj))\r\n throw FormulaError.VALUE;\r\n if (H.isCellRef(obj)) {\r\n return 1;\r\n } else if (H.isRangeRef(obj)) {\r\n return Math.abs(obj.ref.from.col - obj.ref.to.col) + 1;\r\n } else {\r\n throw Error('ReferenceFunctions.COLUMNS should not reach here.')\r\n }\r\n },\r\n\r\n HLOOKUP: (lookupValue, tableArray, rowIndexNum, rangeLookup) => {\r\n // preserve type of lookupValue\r\n lookupValue = H.accept(lookupValue);\r\n try {\r\n tableArray = H.accept(tableArray, Types.ARRAY, undefined, false);\r\n } catch (e) {\r\n // catch #VALUE! and throw #N/A\r\n if (e instanceof FormulaError)\r\n throw FormulaError.NA;\r\n throw e;\r\n }\r\n rowIndexNum = H.accept(rowIndexNum, Types.NUMBER);\r\n rangeLookup = H.accept(rangeLookup, Types.BOOLEAN, true);\r\n\r\n // check if rowIndexNum out of bound\r\n if (rowIndexNum < 1)\r\n throw FormulaError.VALUE;\r\n if (tableArray[rowIndexNum - 1] === undefined)\r\n throw FormulaError.REF;\r\n\r\n const lookupType = typeof lookupValue; // 'number', 'string', 'boolean'\r\n\r\n // approximate lookup (assume the array is sorted)\r\n if (rangeLookup) {\r\n let prevValue = lookupType === typeof tableArray[0][0] ? tableArray[0][0] : null;\r\n for (let i = 1; i < tableArray[0].length; i++) {\r\n const currValue = tableArray[0][i];\r\n const type = typeof currValue;\r\n // skip the value if type does not match\r\n if (type !== lookupType)\r\n continue;\r\n // if the previous two values are greater than lookup value, throw #N/A\r\n if (prevValue > lookupValue && currValue > lookupValue) {\r\n throw FormulaError.NA;\r\n }\r\n if (currValue === lookupValue)\r\n return tableArray[rowIndexNum - 1][i];\r\n // if previous value <= lookup value and current value > lookup value\r\n if (prevValue != null && currValue > lookupValue && prevValue <= lookupValue) {\r\n return tableArray[rowIndexNum - 1][i - 1];\r\n }\r\n prevValue = currValue;\r\n }\r\n if (prevValue == null)\r\n throw FormulaError.NA;\r\n return prevValue;\r\n }\r\n // exact lookup with wildcard support\r\n else {\r\n let index = -1;\r\n if (WildCard.isWildCard(lookupValue)) {\r\n index = tableArray[0].findIndex(item => {\r\n return WildCard.toRegex(lookupValue, 'i').test(item);\r\n });\r\n } else {\r\n index = tableArray[0].findIndex(item => {\r\n return item === lookupValue;\r\n });\r\n }\r\n // the exact match is not found\r\n if (index === -1) throw FormulaError.NA;\r\n return tableArray[rowIndexNum - 1][index];\r\n }\r\n },\r\n\r\n // Special\r\n INDEX: (context, ranges, rowNum, colNum, areaNum) => {\r\n // retrieve values\r\n rowNum = context.utils.extractRefValue(rowNum);\r\n rowNum = {value: rowNum.val, isArray: rowNum.isArray};\r\n rowNum = H.accept(rowNum, Types.NUMBER);\r\n rowNum = Math.trunc(rowNum);\r\n\r\n if (colNum == null) {\r\n colNum = 1;\r\n } else {\r\n colNum = context.utils.extractRefValue(colNum);\r\n colNum = {value: colNum.val, isArray: colNum.isArray};\r\n colNum = H.accept(colNum, Types.NUMBER, 1);\r\n colNum = Math.trunc(colNum);\r\n }\r\n\r\n if (areaNum == null) {\r\n areaNum = 1;\r\n } else {\r\n areaNum = context.utils.extractRefValue(areaNum);\r\n areaNum = {value: areaNum.val, isArray: areaNum.isArray};\r\n areaNum = H.accept(areaNum, Types.NUMBER, 1);\r\n areaNum = Math.trunc(areaNum);\r\n }\r\n\r\n // get the range area that we want to index\r\n // ranges can be cell ref, range ref or array constant\r\n let range = ranges;\r\n // many ranges (Reference form)\r\n if (ranges instanceof Collection) {\r\n range = ranges.refs[areaNum - 1];\r\n } else if (areaNum > 1) {\r\n throw FormulaError.REF;\r\n }\r\n\r\n if (rowNum === 0 && colNum === 0) {\r\n return range;\r\n }\r\n\r\n // query the whole column\r\n if (rowNum === 0) {\r\n if (H.isRangeRef(range)) {\r\n if (range.ref.to.col - range.ref.from.col < colNum - 1)\r\n throw FormulaError.REF;\r\n range.ref.from.col += colNum - 1;\r\n range.ref.to.col = range.ref.from.col;\r\n return range;\r\n } else if (Array.isArray(range)) {\r\n const res = [];\r\n range.forEach(row => res.push([row[colNum - 1]]));\r\n return res;\r\n }\r\n }\r\n // query the whole row\r\n if (colNum === 0) {\r\n if (H.isRangeRef(range)) {\r\n if (range.ref.to.row - range.ref.from.row < rowNum - 1)\r\n throw FormulaError.REF;\r\n range.ref.from.row += rowNum - 1;\r\n range.ref.to.row = range.ref.from.row;\r\n return range;\r\n } else if (Array.isArray(range)) {\r\n return range[colNum - 1];\r\n }\r\n }\r\n // query single cell\r\n if (rowNum !== 0 && colNum !== 0) {\r\n // range reference\r\n if (H.isRangeRef(range)) {\r\n range = range.ref;\r\n if (range.to.row - range.from.row < rowNum - 1 || range.to.col - range.from.col < colNum - 1)\r\n throw FormulaError.REF;\r\n return {ref: {row: range.from.row + rowNum - 1, col: range.from.col + colNum - 1}};\r\n }\r\n // cell reference\r\n else if (H.isCellRef(range)) {\r\n range = range.ref;\r\n if (rowNum > 1 || colNum > 1)\r\n throw FormulaError.REF;\r\n return {ref: {row: range.row + rowNum - 1, col: range.col + colNum - 1}};\r\n }\r\n // array constant\r\n else if (Array.isArray(range)) {\r\n if (range.length < rowNum || range[0].length < colNum)\r\n throw FormulaError.REF;\r\n return range[rowNum - 1][colNum - 1];\r\n }\r\n }\r\n },\r\n\r\n MATCH: () => {\r\n\r\n },\r\n\r\n // Special\r\n ROW: (context, obj) => {\r\n if (obj == null) {\r\n if (context.position.row != null)\r\n return context.position.row;\r\n else\r\n throw Error('FormulaParser.parse is called without position parameter.')\r\n } else {\r\n if (typeof obj !== 'object' || Array.isArray(obj))\r\n throw FormulaError.VALUE;\r\n if (H.isCellRef(obj)) {\r\n return obj.ref.row;\r\n } else if (H.isRangeRef(obj)) {\r\n return obj.ref.from.row;\r\n } else {\r\n throw Error('ReferenceFunctions.ROW should not reach here.')\r\n }\r\n }\r\n },\r\n\r\n // Special\r\n ROWS: (context, obj) => {\r\n if (obj == null) {\r\n throw Error('ROWS requires one argument');\r\n }\r\n if (typeof obj != 'object' || Array.isArray(obj))\r\n throw FormulaError.VALUE;\r\n if (H.isCellRef(obj)) {\r\n return 1;\r\n } else if (H.isRangeRef(obj)) {\r\n return Math.abs(obj.ref.from.row - obj.ref.to.row) + 1;\r\n } else {\r\n throw Error('ReferenceFunctions.ROWS should not reach here.')\r\n }\r\n },\r\n\r\n TRANSPOSE: (array) => {\r\n array = H.accept(array, Types.ARRAY, undefined, false);\r\n // https://github.com/numbers/numbers.js/blob/master/lib/numbers/matrix.js#L171\r\n const result = [];\r\n\r\n for (let i = 0; i < array[0].length; i++) {\r\n result[i] = [];\r\n\r\n for (let j = 0; j < array.length; j++) {\r\n result[i][j] = array[j][i];\r\n }\r\n }\r\n\r\n return result;\r\n },\r\n\r\n VLOOKUP: (lookupValue, tableArray, colIndexNum, rangeLookup) => {\r\n // preserve type of lookupValue\r\n lookupValue = H.accept(lookupValue);\r\n try {\r\n tableArray = H.accept(tableArray, Types.ARRAY, undefined, false);\r\n } catch (e) {\r\n // catch #VALUE! and throw #N/A\r\n if (e instanceof FormulaError)\r\n throw FormulaError.NA;\r\n throw e;\r\n }\r\n colIndexNum = H.accept(colIndexNum, Types.NUMBER);\r\n rangeLookup = H.accept(rangeLookup, Types.BOOLEAN, true);\r\n\r\n // check if colIndexNum out of bound\r\n if (colIndexNum < 1)\r\n throw FormulaError.VALUE;\r\n if (tableArray[0][colIndexNum - 1] === undefined)\r\n throw FormulaError.REF;\r\n\r\n const lookupType = typeof lookupValue; // 'number', 'string', 'boolean'\r\n\r\n // approximate lookup (assume the array is sorted)\r\n if (rangeLookup) {\r\n let prevValue = lookupType === typeof tableArray[0][0] ? tableArray[0][0] : null;\r\n for (let i = 1; i < tableArray.length; i++) {\r\n const currRow = tableArray[i];\r\n const currValue = tableArray[i][0];\r\n const type = typeof currValue;\r\n // skip the value if type does not match\r\n if (type !== lookupType)\r\n continue;\r\n // if the previous two values are greater than lookup value, throw #N/A\r\n if (prevValue > lookupValue && currValue > lookupValue) {\r\n throw FormulaError.NA;\r\n }\r\n if (currValue === lookupValue)\r\n return currRow[colIndexNum - 1];\r\n // if previous value <= lookup value and current value > lookup value\r\n if (prevValue != null && currValue > lookupValue && prevValue <= lookupValue) {\r\n return tableArray[i - 1][colIndexNum - 1];\r\n }\r\n prevValue = currValue;\r\n }\r\n if (prevValue == null)\r\n throw FormulaError.NA;\r\n return prevValue;\r\n }\r\n // exact lookup with wildcard support\r\n else {\r\n let index = -1;\r\n if (WildCard.isWildCard(lookupValue)) {\r\n index = tableArray.findIndex(currRow => {\r\n return WildCard.toRegex(lookupValue, 'i').test(currRow[0]);\r\n });\r\n } else {\r\n index = tableArray.findIndex(currRow => {\r\n return currRow[0] === lookupValue;\r\n });\r\n }\r\n // the exact match is not found\r\n if (index === -1) throw FormulaError.NA;\r\n return tableArray[index][colIndexNum - 1];\r\n }\r\n },\r\n};\r\n\r\nmodule.exports = ReferenceFunctions;\r\n","const FormulaError = require('../error');\r\nconst {FormulaHelpers, Types, Criteria, Address} = require('../helpers');\r\nconst {Infix} = require('../operators');\r\nconst H = FormulaHelpers;\r\nconst {DistributionFunctions} = require('./distribution');\r\n\r\nconst StatisticalFunctions = {\r\n AVEDEV: (...numbers) => {\r\n let sum = 0;\r\n const arr = [];\r\n // parse number only if the input is literal\r\n H.flattenParams(numbers, Types.NUMBER, true, (item, info) => {\r\n if (typeof item === \"number\") {\r\n sum += item;\r\n arr.push(item);\r\n }\r\n });\r\n const avg = sum / arr.length;\r\n sum = 0;\r\n for (let i = 0; i < arr.length; i++) {\r\n sum += Math.abs(arr[i] - avg);\r\n }\r\n return sum / arr.length;\r\n },\r\n\r\n AVERAGE: (...numbers) => {\r\n let sum = 0, cnt = 0;\r\n // parse number only if the input is literal\r\n H.flattenParams(numbers, Types.NUMBER, true, (item, info) => {\r\n if (typeof item === \"number\") {\r\n sum += item;\r\n cnt++;\r\n }\r\n });\r\n return sum / cnt;\r\n },\r\n\r\n AVERAGEA: (...numbers) => {\r\n let sum = 0, cnt = 0;\r\n // parse number only if the input is literal\r\n H.flattenParams(numbers, Types.NUMBER, true, (item, info) => {\r\n const type = typeof item;\r\n if (type === \"number\") {\r\n sum += item;\r\n cnt++;\r\n } else if (type === \"string\") {\r\n cnt++;\r\n }\r\n });\r\n return sum / cnt;\r\n },\r\n\r\n // special\r\n AVERAGEIF: (context, range, criteria, averageRange) => {\r\n const ranges = H.retrieveRanges(context, range, averageRange);\r\n range = ranges[0];\r\n averageRange = ranges[1];\r\n\r\n criteria = H.retrieveArg(context, criteria);\r\n const isCriteriaArray = criteria.isArray;\r\n criteria = Criteria.parse(H.accept(criteria));\r\n\r\n let sum = 0, cnt = 0;\r\n range.forEach((row, rowNum) => {\r\n row.forEach((value, colNum) => {\r\n const valueToAdd = averageRange[rowNum][colNum];\r\n if (typeof valueToAdd !== \"number\")\r\n return;\r\n // wildcard\r\n if (criteria.op === 'wc') {\r\n if (criteria.match === criteria.value.test(value)) {\r\n sum += valueToAdd;\r\n cnt++;\r\n }\r\n } else if (Infix.compareOp(value, criteria.op, criteria.value, Array.isArray(value), isCriteriaArray)) {\r\n sum += valueToAdd;\r\n cnt++;\r\n }\r\n })\r\n });\r\n if (cnt === 0) throw FormulaError.DIV0;\r\n return sum / cnt;\r\n },\r\n\r\n AVERAGEIFS: () => {\r\n\r\n },\r\n\r\n COUNT: (...ranges) => {\r\n let cnt = 0;\r\n H.flattenParams(ranges, null, true,\r\n (item, info) => {\r\n // literal will be parsed to Type.NUMBER\r\n if (info.isLiteral && !isNaN(item)) {\r\n cnt++;\r\n } else {\r\n if (typeof item === \"number\")\r\n cnt++;\r\n }\r\n });\r\n return cnt;\r\n },\r\n\r\n COUNTIF: (range, criteria) => {\r\n // do not flatten the array\r\n range = H.accept(range, Types.ARRAY, undefined, false, true);\r\n const isCriteriaArray = criteria.isArray;\r\n criteria = H.accept(criteria);\r\n\r\n let cnt = 0;\r\n // parse criteria\r\n criteria = Criteria.parse(criteria);\r\n\r\n range.forEach(row => {\r\n row.forEach(value => {\r\n // wildcard\r\n if (criteria.op === 'wc') {\r\n if (criteria.match === criteria.value.test(value))\r\n cnt++;\r\n } else if (Infix.compareOp(value, criteria.op, criteria.value, Array.isArray(value), isCriteriaArray)) {\r\n cnt++;\r\n }\r\n })\r\n });\r\n return cnt;\r\n },\r\n\r\n LARGE: () => {\r\n\r\n },\r\n\r\n MAX: () => {\r\n\r\n },\r\n\r\n MAXA: () => {\r\n\r\n },\r\n\r\n MAXIFS: () => {\r\n\r\n },\r\n\r\n MEDIAN: () => {\r\n\r\n },\r\n\r\n MIN: () => {\r\n\r\n },\r\n\r\n MINA: () => {\r\n\r\n },\r\n\r\n MINIFS: () => {\r\n\r\n },\r\n\r\n PERMUT: () => {\r\n\r\n },\r\n\r\n PERMUTATIONA: () => {\r\n\r\n },\r\n\r\n SMALL: () => {\r\n\r\n },\r\n\r\n};\r\n\r\n\r\nmodule.exports = Object.assign(StatisticalFunctions, DistributionFunctions);\r\n","const FormulaError = require('../error');\r\nconst {FormulaHelpers, Types, WildCard} = require('../helpers');\r\nconst H = FormulaHelpers;\r\n\r\n// Spreadsheet number format\r\nconst ssf = require('../../ssf/ssf');\r\n\r\n// Change number to Thai pronunciation string\r\nconst bahttext = require('bahttext');\r\n\r\n// full-width and half-width converter\r\nconst charsets = {\r\n latin: {halfRE: /[!-~]/g, fullRE: /[!-~]/g, delta: 0xFEE0},\r\n hangul1: {halfRE: /[ᄀ-ᄒ]/g, fullRE: /[ᆨ-ᇂ]/g, delta: -0xEDF9},\r\n hangul2: {halfRE: /[ᅡ-ᅵ]/g, fullRE: /[ᅡ-ᅵ]/g, delta: -0xEE61},\r\n kana: {\r\n delta: 0,\r\n half: \"。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚\",\r\n full: \"。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシ\" +\r\n \"スセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゛゜\"\r\n },\r\n extras: {\r\n delta: 0,\r\n half: \"¢£¬¯¦¥₩\\u0020|←↑→↓■°\",\r\n full: \"¢£¬ ̄¦¥₩\\u3000│←↑→↓■○\"\r\n }\r\n};\r\nconst toFull = set => c => set.delta ?\r\n String.fromCharCode(c.charCodeAt(0) + set.delta) :\r\n [...set.full][[...set.half].indexOf(c)];\r\nconst toHalf = set => c => set.delta ?\r\n String.fromCharCode(c.charCodeAt(0) - set.delta) :\r\n [...set.half][[...set.full].indexOf(c)];\r\nconst re = (set, way) => set[way + \"RE\"] || new RegExp(\"[\" + set[way] + \"]\", \"g\");\r\nconst sets = Object.keys(charsets).map(i => charsets[i]);\r\nconst toFullWidth = str0 =>\r\n sets.reduce((str, set) => str.replace(re(set, \"half\"), toFull(set)), str0);\r\nconst toHalfWidth = str0 =>\r\n sets.reduce((str, set) => str.replace(re(set, \"full\"), toHalf(set)), str0);\r\n\r\nconst TextFunctions = {\r\n ASC: (text) => {\r\n text = H.accept(text, Types.STRING);\r\n return toHalfWidth(text);\r\n },\r\n\r\n BAHTTEXT: (number) => {\r\n number = H.accept(number, Types.NUMBER);\r\n try {\r\n return bahttext(number);\r\n } catch (e) {\r\n throw Error(`Error in https://github.com/jojoee/bahttext \\n${e.toString()}`)\r\n }\r\n },\r\n\r\n CHAR: (number) => {\r\n number = H.accept(number, Types.NUMBER);\r\n if (number > 255 || number < 1)\r\n throw FormulaError.VALUE;\r\n return String.fromCharCode(number);\r\n },\r\n\r\n CLEAN: (text) => {\r\n text = H.accept(text, Types.STRING);\r\n return text.replace(/[\\x00-\\x1F]/g, '');\r\n },\r\n\r\n CODE: (text) => {\r\n text = H.accept(text, Types.STRING);\r\n if (text.length === 0)\r\n throw FormulaError.VALUE;\r\n return text.charCodeAt(0);\r\n },\r\n\r\n CONCAT: (...params) => {\r\n let text = '';\r\n // does not allow union\r\n H.flattenParams(params, Types.STRING, false, item => {\r\n item = H.accept(item, Types.STRING);\r\n text += item;\r\n });\r\n return text\r\n },\r\n\r\n CONCATENATE: (...params) => {\r\n let text = '';\r\n if (params.length === 0)\r\n throw Error('CONCATENATE need at least one argument.');\r\n params.forEach(param => {\r\n // does not allow range reference, array, union\r\n param = H.accept(param, Types.STRING);\r\n text += param;\r\n });\r\n\r\n return text;\r\n },\r\n\r\n DBCS: (text) => {\r\n text = H.accept(text, Types.STRING);\r\n return toFullWidth(text);\r\n },\r\n\r\n DOLLAR: (number, decimals) => {\r\n number = H.accept(number, Types.NUMBER);\r\n decimals = H.accept(decimals, Types.NUMBER, 2);\r\n const decimalString = Array(decimals).fill('0').join('');\r\n // Note: does not support locales\r\n // TODO: change currency based on user locale or settings from this library\r\n return ssf.format(`$#,##0.${decimalString}_);($#,##0.${decimalString})`, number).trim();\r\n },\r\n\r\n EXACT: (text1, text2) => {\r\n text1 = H.accept(text1, [Types.STRING]);\r\n text2 = H.accept(text2, [Types.STRING]);\r\n\r\n return text1 === text2;\r\n },\r\n\r\n FIND: (findText, withinText, startNum) => {\r\n findText = H.accept(findText, Types.STRING);\r\n withinText = H.accept(withinText, Types.STRING);\r\n startNum = H.accept(startNum, Types.NUMBER, 1);\r\n if (startNum < 1 || startNum > withinText.length)\r\n throw FormulaError.VALUE;\r\n const res = withinText.indexOf(findText, startNum - 1);\r\n if (res === -1)\r\n throw FormulaError.VALUE;\r\n return res + 1;\r\n },\r\n\r\n FINDB: (...params) => {\r\n return TextFunctions.FIND(...params);\r\n },\r\n\r\n FIXED: (number, decimals, noCommas) => {\r\n number = H.accept(number, Types.NUMBER);\r\n decimals = H.accept(decimals, Types.NUMBER, 2);\r\n noCommas = H.accept(noCommas, Types.BOOLEAN, false);\r\n\r\n const decimalString = Array(decimals).fill('0').join('');\r\n const comma = noCommas ? '' : '#,';\r\n return ssf.format(`${comma}##0.${decimalString}_);(${comma}##0.${decimalString})`, number).trim();\r\n },\r\n\r\n LEFT: (text, numChars) => {\r\n text = H.accept(text, Types.STRING);\r\n numChars = H.accept(numChars, Types.NUMBER, 1);\r\n\r\n if (numChars < 0)\r\n throw FormulaError.VALUE;\r\n if (numChars > text.length)\r\n return text;\r\n return text.slice(0, numChars);\r\n },\r\n\r\n LEFTB: (...params) => {\r\n return TextFunctions.LEFT(...params);\r\n },\r\n\r\n LEN: (text) => {\r\n text = H.accept(text, Types.STRING);\r\n return text.length;\r\n },\r\n\r\n LENB: (...params) => {\r\n return TextFunctions.LEN(...params);\r\n },\r\n\r\n LOWER: (text) => {\r\n text = H.accept(text, Types.STRING);\r\n return text.toLowerCase();\r\n },\r\n\r\n MID: (text, startNum, numChars) => {\r\n text = H.accept(text, Types.STRING);\r\n startNum = H.accept(startNum, Types.NUMBER);\r\n numChars = H.accept(numChars, Types.NUMBER);\r\n if (startNum > text.length)\r\n return '';\r\n if (startNum < 1 || numChars < 1)\r\n throw FormulaError.VALUE;\r\n return text.slice(startNum - 1, startNum + numChars - 1);\r\n },\r\n\r\n MIDB: (...params) => {\r\n return TextFunctions.MID(...params);\r\n },\r\n\r\n NUMBERVALUE: (text, decimalSeparator, groupSeparator) => {\r\n text = H.accept(text, Types.STRING);\r\n // TODO: support reading system locale and set separators\r\n decimalSeparator = H.accept(decimalSeparator, Types.STRING, '.');\r\n groupSeparator = H.accept(groupSeparator, Types.STRING, ',');\r\n\r\n if (text.length === 0)\r\n return 0;\r\n if (decimalSeparator.length === 0 || groupSeparator.length === 0)\r\n throw FormulaError.VALUE;\r\n decimalSeparator = decimalSeparator[0];\r\n groupSeparator = groupSeparator[0];\r\n if (decimalSeparator === groupSeparator\r\n || text.indexOf(decimalSeparator) < text.lastIndexOf(groupSeparator))\r\n throw FormulaError.VALUE;\r\n\r\n const res = text.replace(groupSeparator, '')\r\n .replace(decimalSeparator, '.')\r\n // remove chars that not related to number\r\n .replace(/[^\\-0-9.%()]/g, '')\r\n .match(/([(-]*)([0-9]*[.]*[0-9]+)([)]?)([%]*)/);\r\n if (!res)\r\n throw FormulaError.VALUE;\r\n // [\"-123456.78%%\", \"(-\", \"123456.78\", \")\", \"%%\"]\r\n const leftParenOrMinus = res[1].length, rightParen = res[3].length, percent = res[4].length;\r\n let number = Number(res[2]);\r\n if (leftParenOrMinus > 1 || leftParenOrMinus && !rightParen\r\n || !leftParenOrMinus && rightParen || isNaN(number))\r\n throw FormulaError.VALUE;\r\n number = number / 100 ** percent;\r\n return leftParenOrMinus ? -number : number;\r\n },\r\n\r\n PHONETIC: () => {\r\n },\r\n\r\n PROPER: (text) => {\r\n text = H.accept(text, [Types.STRING]);\r\n text = text.toLowerCase();\r\n text = text.charAt(0).toUpperCase() + text.slice(1);\r\n return text.replace(/(?:[^a-zA-Z])([a-zA-Z])/g,\r\n letter => letter.toUpperCase());\r\n },\r\n\r\n REPLACE: (old_text, start_num, num_chars, new_text) => {\r\n old_text = H.accept(old_text, [Types.STRING]);\r\n start_num = H.accept(start_num, [Types.NUMBER]);\r\n num_chars = H.accept(num_chars, [Types.NUMBER]);\r\n new_text = H.accept(new_text, [Types.STRING]);\r\n\r\n let arr = old_text.split(\"\");\r\n arr.splice(start_num - 1, num_chars, new_text);\r\n\r\n return arr.join(\"\");\r\n },\r\n\r\n REPLACEB: (...params) => {\r\n return TextFunctions.REPLACE(...params)\r\n },\r\n\r\n REPT: (text, number_times) => {\r\n text = H.accept(text, Types.STRING);\r\n number_times = H.accept(number_times, Types.NUMBER);\r\n let str = \"\";\r\n\r\n for (let i = 0; i < number_times; i++) {\r\n str += text;\r\n }\r\n return str;\r\n },\r\n\r\n RIGHT: (text, numChars) => {\r\n text = H.accept(text, Types.STRING);\r\n numChars = H.accept(numChars, Types.NUMBER, 1);\r\n\r\n if (numChars < 0)\r\n throw FormulaError.VALUE;\r\n const len = text.length;\r\n if (numChars > len)\r\n return text;\r\n return text.slice(len - numChars);\r\n },\r\n\r\n RIGHTB: (...params) => {\r\n return TextFunctions.RIGHT(...params);\r\n },\r\n\r\n SEARCH: (findText, withinText, startNum) => {\r\n findText = H.accept(findText, Types.STRING);\r\n withinText = H.accept(withinText, Types.STRING);\r\n startNum = H.accept(startNum, Types.NUMBER, 1);\r\n if (startNum < 1 || startNum > withinText.length)\r\n throw FormulaError.VALUE;\r\n\r\n // transform to js regex expression\r\n let findTextRegex = WildCard.isWildCard(findText) ? WildCard.toRegex(findText, 'i') : findText;\r\n const res = withinText.slice(startNum - 1).search(findTextRegex);\r\n if (res === -1)\r\n throw FormulaError.VALUE;\r\n return res + startNum;\r\n },\r\n\r\n SEARCHB: (...params) => {\r\n return TextFunctions.SEARCH(...params)\r\n },\r\n\r\n SUBSTITUTE: (...params) => {\r\n\r\n },\r\n\r\n T: (value) => {\r\n // extract the real parameter\r\n value = H.accept(value);\r\n if (typeof value === \"string\")\r\n return value;\r\n return '';\r\n },\r\n\r\n TEXT: (value, formatText) => {\r\n value = H.accept(value, Types.NUMBER);\r\n formatText = H.accept(formatText, Types.STRING);\r\n // I know ssf contains bugs...\r\n try {\r\n return ssf.format(formatText, value);\r\n } catch (e) {\r\n console.error(e)\r\n throw FormulaError.VALUE;\r\n }\r\n },\r\n\r\n TEXTJOIN: (...params) => {\r\n\r\n },\r\n\r\n TRIM: (text) => {\r\n text = H.accept(text, [Types.STRING]);\r\n return text.replace(/^\\s+|\\s+$/g, '')\r\n },\r\n\r\n UNICHAR: (number) => {\r\n number = H.accept(number, [Types.NUMBER]);\r\n if (number <= 0)\r\n throw FormulaError.VALUE;\r\n return String.fromCharCode(number);\r\n },\r\n\r\n UNICODE: (text) => {\r\n return TextFunctions.CODE(text);\r\n },\r\n};\r\n\r\nmodule.exports = TextFunctions;\r\n","const FormulaError = require('../error');\r\nconst {FormulaHelpers, Types} = require('../helpers');\r\nconst H = FormulaHelpers;\r\nconst MAX_NUMBER = 2 ** 27 - 1;\r\n\r\n// https://support.office.com/en-us/article/excel-functions-by-category-5f91f4e9-7b42-46d2-9bd1-63f26a86c0eb\r\nconst TrigFunctions = {\r\n ACOS: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n if (number > 1 || number < -1)\r\n throw FormulaError.NUM;\r\n return Math.acos(number);\r\n },\r\n\r\n ACOSH: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n if (number < 1)\r\n throw FormulaError.NUM;\r\n return Math.acosh(number);\r\n },\r\n\r\n ACOT: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n return Math.PI / 2 - Math.atan(number);\r\n },\r\n\r\n ACOTH: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n if (Math.abs(number) <= 1)\r\n throw FormulaError.NUM;\r\n return Math.atanh(1 / number);\r\n },\r\n\r\n ASIN: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n if (number > 1 || number < -1)\r\n throw FormulaError.NUM;\r\n return Math.asin(number);\r\n },\r\n\r\n ASINH: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n return Math.asinh(number);\r\n },\r\n\r\n ATAN: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n return Math.atan(number);\r\n },\r\n\r\n ATAN2: (x, y) => {\r\n x = H.accept(x, Types.NUMBER);\r\n y = H.accept(y, Types.NUMBER);\r\n if (y === 0 && x === 0)\r\n throw FormulaError.DIV0;\r\n return Math.atan2(y, x);\r\n },\r\n\r\n ATANH: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n if (Math.abs(number) > 1)\r\n throw FormulaError.NUM;\r\n return Math.atanh(number);\r\n },\r\n\r\n COS: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n if (Math.abs(number) > MAX_NUMBER)\r\n throw FormulaError.NUM;\r\n return Math.cos(number);\r\n },\r\n\r\n COSH: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n return Math.cosh(number);\r\n },\r\n\r\n COT: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n if (Math.abs(number) > MAX_NUMBER)\r\n throw FormulaError.NUM;\r\n if (number === 0)\r\n throw FormulaError.DIV0;\r\n return 1 / Math.tan(number);\r\n },\r\n\r\n COTH: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n if (number === 0)\r\n throw FormulaError.DIV0;\r\n return 1 / Math.tanh(number);\r\n },\r\n\r\n CSC: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n if (Math.abs(number) > MAX_NUMBER)\r\n throw FormulaError.NUM;\r\n return 1 / Math.sin(number);\r\n },\r\n\r\n CSCH: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n if (number === 0)\r\n throw FormulaError.DIV0;\r\n return 1 / Math.sinh(number);\r\n },\r\n\r\n SEC: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n if (Math.abs(number) > MAX_NUMBER)\r\n throw FormulaError.NUM;\r\n return 1 / Math.cos(number);\r\n },\r\n\r\n SECH: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n return 1 / Math.cosh(number);\r\n },\r\n\r\n SIN: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n if (Math.abs(number) > MAX_NUMBER)\r\n throw FormulaError.NUM;\r\n return Math.sin(number);\r\n },\r\n\r\n SINH: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n return Math.sinh(number);\r\n },\r\n\r\n TAN: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n if (Math.abs(number) > MAX_NUMBER)\r\n throw FormulaError.NUM;\r\n return Math.tan(number);\r\n },\r\n\r\n TANH: number => {\r\n number = H.accept(number, Types.NUMBER);\r\n return Math.tanh(number);\r\n },\r\n};\r\n\r\nmodule.exports = TrigFunctions;\r\n","const FormulaError = require('../error');\r\nconst {FormulaHelpers, Types} = require('../helpers');\r\nconst H = FormulaHelpers;\r\n\r\nconst WebFunctions = {\r\n ENCODEURL: text => {\r\n return encodeURIComponent(H.accept(text, Types.STRING));\r\n },\r\n\r\n FILTERXML: () => {\r\n // Not implemented due to extra dependency\r\n },\r\n\r\n WEBSERVICE: (context, url) => {\r\n throw FormulaError.ERROR('WEBSERVICE is not supported in sync mode.');\r\n if (typeof fetch === \"function\") {\r\n url = H.accept(url, Types.STRING);\r\n return fetch(url).then(res => res.text());\r\n } else {\r\n // Not implemented for Node.js due to extra dependency\r\n // Sample code for Node.js\r\n // const fetch = require('node-fetch');\r\n // url = H.accept(url, Types.STRING);\r\n // return fetch(url).then(res => res.text());\r\n throw FormulaError.ERROR('WEBSERVICE only available to browser with fetch.' +\r\n 'If you want to use WEBSERVICE in Node.js, please override this function: \\n' +\r\n 'new FormulaParser({\\n' +\r\n ' functionsNeedContext: {\\n' +\r\n ' WEBSERVICE: (context, url) => {...}}\\n' +\r\n '})');\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = WebFunctions;\r\n","const FormulaError = require('./error');\r\nconst Collection = require('../grammar/type/collection');\r\n\r\nconst Types = {\r\n NUMBER: 0,\r\n ARRAY: 1,\r\n BOOLEAN: 2,\r\n STRING: 3,\r\n RANGE_REF: 4, // can be 'A:C' or '1:4', not only 'A1:C3'\r\n CELL_REF: 5,\r\n COLLECTIONS: 6, // Unions of references\r\n NUMBER_NO_BOOLEAN: 10,\r\n};\r\n\r\nconst Factorials = [1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800, 39916800, 479001600, 6227020800, 87178291200, 1307674368000, 20922789888000, 355687428096000, 6402373705728000, 121645100408832000, 2432902008176640000, 51090942171709440000, 1124000727777607680000, 25852016738884976640000, 620448401733239439360000, 15511210043330985984000000, 403291461126605635584000000, 10888869450418352160768000000, 304888344611713860501504000000, 8841761993739701954543616000000, 265252859812191058636308480000000, 8222838654177922817725562880000000, 263130836933693530167218012160000000, 8683317618811886495518194401280000000, 295232799039604140847618609643520000000, 10333147966386144929666651337523200000000, 371993326789901217467999448150835200000000, 13763753091226345046315979581580902400000000, 523022617466601111760007224100074291200000000, 20397882081197443358640281739902897356800000000, 815915283247897734345611269596115894272000000000, 33452526613163807108170062053440751665152000000000, 1405006117752879898543142606244511569936384000000000, 60415263063373835637355132068513997507264512000000000, 2658271574788448768043625811014615890319638528000000000, 119622220865480194561963161495657715064383733760000000000, 5502622159812088949850305428800254892961651752960000000000, 258623241511168180642964355153611979969197632389120000000000, 12413915592536072670862289047373375038521486354677760000000000, 608281864034267560872252163321295376887552831379210240000000000, 30414093201713378043612608166064768844377641568960512000000000000, 1551118753287382280224243016469303211063259720016986112000000000000, 80658175170943878571660636856403766975289505440883277824000000000000, 4274883284060025564298013753389399649690343788366813724672000000000000, 230843697339241380472092742683027581083278564571807941132288000000000000, 12696403353658275925965100847566516959580321051449436762275840000000000000, 710998587804863451854045647463724949736497978881168458687447040000000000000, 40526919504877216755680601905432322134980384796226602145184481280000000000000, 2350561331282878571829474910515074683828862318181142924420699914240000000000000, 138683118545689835737939019720389406345902876772687432540821294940160000000000000, 8320987112741390144276341183223364380754172606361245952449277696409600000000000000, 507580213877224798800856812176625227226004528988036003099405939480985600000000000000, 31469973260387937525653122354950764088012280797258232192163168247821107200000000000000, 1982608315404440064116146708361898137544773690227268628106279599612729753600000000000000, 126886932185884164103433389335161480802865516174545192198801894375214704230400000000000000, 8247650592082470666723170306785496252186258551345437492922123134388955774976000000000000000, 544344939077443064003729240247842752644293064388798874532860126869671081148416000000000000000, 36471110918188685288249859096605464427167635314049524593701628500267962436943872000000000000000, 2480035542436830599600990418569171581047399201355367672371710738018221445712183296000000000000000, 171122452428141311372468338881272839092270544893520369393648040923257279754140647424000000000000000, 11978571669969891796072783721689098736458938142546425857555362864628009582789845319680000000000000000, 850478588567862317521167644239926010288584608120796235886430763388588680378079017697280000000000000000, 61234458376886086861524070385274672740778091784697328983823014963978384987221689274204160000000000000000, 4470115461512684340891257138125051110076800700282905015819080092370422104067183317016903680000000000000000, 330788544151938641225953028221253782145683251820934971170611926835411235700971565459250872320000000000000000, 24809140811395398091946477116594033660926243886570122837795894512655842677572867409443815424000000000000000000, 1885494701666050254987932260861146558230394535379329335672487982961844043495537923117729972224000000000000000000, 145183092028285869634070784086308284983740379224208358846781574688061991349156420080065207861248000000000000000000, 11324281178206297831457521158732046228731749579488251990048962825668835325234200766245086213177344000000000000000000, 894618213078297528685144171539831652069808216779571907213868063227837990693501860533361810841010176000000000000000000, 71569457046263802294811533723186532165584657342365752577109445058227039255480148842668944867280814080000000000000000000, 5797126020747367985879734231578109105412357244731625958745865049716390179693892056256184534249745940480000000000000000000, 475364333701284174842138206989404946643813294067993328617160934076743994734899148613007131808479167119360000000000000000000, 39455239697206586511897471180120610571436503407643446275224357528369751562996629334879591940103770870906880000000000000000000, 3314240134565353266999387579130131288000666286242049487118846032383059131291716864129885722968716753156177920000000000000000000, 281710411438055027694947944226061159480056634330574206405101912752560026159795933451040286452340924018275123200000000000000000000, 24227095383672732381765523203441259715284870552429381750838764496720162249742450276789464634901319465571660595200000000000000000000, 2107757298379527717213600518699389595229783738061356212322972511214654115727593174080683423236414793504734471782400000000000000000000, 185482642257398439114796845645546284380220968949399346684421580986889562184028199319100141244804501828416633516851200000000000000000000, 16507955160908461081216919262453619309839666236496541854913520707833171034378509739399912570787600662729080382999756800000000000000000000, 1485715964481761497309522733620825737885569961284688766942216863704985393094065876545992131370884059645617234469978112000000000000000000000, 135200152767840296255166568759495142147586866476906677791741734597153670771559994765685283954750449427751168336768008192000000000000000000000, 12438414054641307255475324325873553077577991715875414356840239582938137710983519518443046123837041347353107486982656753664000000000000000000000, 1156772507081641574759205162306240436214753229576413535186142281213246807121467315215203289516844845303838996289387078090752000000000000000000000, 108736615665674308027365285256786601004186803580182872307497374434045199869417927630229109214583415458560865651202385340530688000000000000000000000, 10329978488239059262599702099394727095397746340117372869212250571234293987594703124871765375385424468563282236864226607350415360000000000000000000000, 991677934870949689209571401541893801158183648651267795444376054838492222809091499987689476037000748982075094738965754305639874560000000000000000000000, 96192759682482119853328425949563698712343813919172976158104477319333745612481875498805879175589072651261284189679678167647067832320000000000000000000000, 9426890448883247745626185743057242473809693764078951663494238777294707070023223798882976159207729119823605850588608460429412647567360000000000000000000000, 933262154439441526816992388562667004907159682643816214685929638952175999932299156089414639761565182862536979208272237582511852109168640000000000000000000000, 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000];\r\n\r\nconst ReversedTypes = {};\r\nObject.keys(Types).forEach((key) => {\r\n ReversedTypes[Types[key]] = key;\r\n});\r\n\r\n/**\r\n * Formula helpers.\r\n */\r\nclass FormulaHelpers {\r\n constructor() {\r\n this.Types = Types;\r\n this.type2Number = {\r\n number: Types.NUMBER,\r\n boolean: Types.BOOLEAN,\r\n string: Types.STRING,\r\n object: -1\r\n };\r\n }\r\n\r\n checkFunctionResult(result) {\r\n const type = typeof result;\r\n // number\r\n if (type === 'number') {\r\n if (isNaN(result)) {\r\n return FormulaError.VALUE;\r\n } else if (!isFinite(result)) {\r\n return FormulaError.NUM;\r\n }\r\n }\r\n if (result === undefined || result === null)\r\n return FormulaError.NULL;\r\n return result;\r\n }\r\n\r\n /**\r\n * Flatten an array\r\n * @param {Array} arr1\r\n * @returns {*}\r\n */\r\n flattenDeep(arr1) {\r\n return arr1.reduce((acc, val) => Array.isArray(val) ? acc.concat(this.flattenDeep(val)) : acc.concat(val), []);\r\n }\r\n\r\n /**\r\n *\r\n * @param obj\r\n * @param isArray - if it is an array: [1,2,3], will extract the first element\r\n * @param allowBoolean - Allow parse boolean into number\r\n * @returns {number|FormulaError}\r\n */\r\n acceptNumber(obj, isArray = true, allowBoolean = true) {\r\n // check error\r\n if (obj instanceof FormulaError)\r\n return obj;\r\n let number;\r\n\r\n if (typeof obj === 'number')\r\n number = obj;\r\n // TRUE -> 1, FALSE -> 0\r\n else if (typeof obj === 'boolean') {\r\n if (allowBoolean) {\r\n number = Number(obj);\r\n } else {\r\n throw FormulaError.VALUE;\r\n }\r\n }\r\n // \"123\" -> 123\r\n else if (typeof obj === 'string') {\r\n if (obj.length === 0) {\r\n throw FormulaError.VALUE;\r\n }\r\n number = Number(obj);\r\n // Note: the unique never-equal-to-itself characteristic of NaN\r\n if (number !== number) {\r\n throw FormulaError.VALUE;\r\n }\r\n } else if (Array.isArray(obj)) {\r\n if (!isArray) {\r\n // for range ref, only allow single column range ref\r\n if (obj[0].length === 1) {\r\n number = this.acceptNumber(obj[0][0]);\r\n } else {\r\n throw FormulaError.VALUE;\r\n }\r\n } else {\r\n number = this.acceptNumber(obj[0][0]);\r\n }\r\n\r\n } else {\r\n throw Error('Unknown type in FormulaHelpers.acceptNumber')\r\n }\r\n return number;\r\n }\r\n\r\n /**\r\n * Flatten parameters to 1D array.\r\n * @see {@link FormulaHelpers.accept}\r\n * @param {Array} params - Parameter that needs to flatten.\r\n * @param {Types|null} valueType - The type each item should be,\r\n * null if allows any type. This only applies to literals.\r\n * @param {boolean} allowUnion - Allow union, e.g. (A1:C1, E4:F3)\r\n * @param {function} hook - Invoked after parsing each item.\r\n * of the array.\r\n * @param {*} [defValue=null] - The value if an param is omitted. i.e. SUM(1,2,,,,,)\r\n * @param {number} [minSize=1] - The minimum size of the parameters\r\n */\r\n flattenParams(params, valueType, allowUnion, hook, defValue = null, minSize = 1) {\r\n if (params.length < minSize)\r\n throw FormulaError.ARG_MISSING([valueType]);\r\n if (defValue == null) {\r\n defValue = valueType === Types.NUMBER ? 0 : valueType == null ? null : '';\r\n }\r\n params.forEach(param => {\r\n const {isCellRef, isRangeRef, isArray} = param;\r\n const isUnion = param.value instanceof Collection;\r\n const isLiteral = !isCellRef && !isRangeRef && !isArray && !isUnion;\r\n const info = {isLiteral, isCellRef, isRangeRef, isArray, isUnion};\r\n\r\n // single element\r\n if (isLiteral) {\r\n if (param.omitted)\r\n param = defValue;\r\n else\r\n param = this.accept(param, valueType, defValue);\r\n hook(param, info);\r\n }\r\n // cell reference of single range reference (A1:A1)\r\n else if (isCellRef) {\r\n hook(param.value, info);\r\n }\r\n // union\r\n else if (isUnion) {\r\n if (!allowUnion) throw FormulaError.VALUE;\r\n param = param.value.data;\r\n param = this.flattenDeep(param);\r\n param.forEach(item => {\r\n hook(item, info);\r\n })\r\n } else if (isRangeRef || isArray) {\r\n param = this.flattenDeep(param.value);\r\n param.forEach(item => {\r\n hook(item, info);\r\n })\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Check if the param valid, return the parsed param.\r\n * If type is not given, return the un-parsed param.\r\n * @param {*} param\r\n * @param {number|null} [type] - The expected type\r\n * NUMBER: Expect a single number,\r\n * ARRAY: Expect an flatten array,\r\n * BOOLEAN: Expect a single boolean,\r\n * STRING: Expect a single string,\r\n * COLLECTIONS: Expect an Array of the above types\r\n * null: Do not parse the value, return it directly.\r\n * The collection is not a flatted array.\r\n * @param {*} [defValue] - Default value if the param is not given.\r\n * if undefined, this param is required, a Error will throw if not given.\r\n * if null, and param is undefined, null will be returned.\r\n * @param {boolean} [flat=true] - If the array should be flattened,\r\n * only applicable when type is ARRAY.\r\n * If false, collection is disallowed.\r\n * @param {boolean} allowSingleValue - If pack single value into 2d array,\r\n * only applicable when type is ARRAY.\r\n * @return {string|number|boolean|{}|Array}\r\n */\r\n accept(param, type = null, defValue, flat = true, allowSingleValue = false) {\r\n // TODO: remove this array check\r\n if (Array.isArray(type))\r\n type = type[0];\r\n if (param == null && defValue === undefined) {\r\n throw FormulaError.ARG_MISSING([type]);\r\n } else if (param == null)\r\n return defValue;\r\n\r\n if (typeof param !== \"object\" || Array.isArray(param))\r\n return param;\r\n\r\n const isArray = param.isArray;\r\n if (param.value != null) param = param.value;\r\n\r\n // return an un-parsed type.\r\n if (type == null)\r\n return param;\r\n\r\n if (param instanceof FormulaError)\r\n throw param;\r\n\r\n if (type === Types.ARRAY) {\r\n if (Array.isArray(param)) {\r\n return flat ? this.flattenDeep(param) : param;\r\n } else if (param instanceof Collection) {\r\n throw FormulaError.VALUE;\r\n } else if (allowSingleValue) {\r\n return flat ? [param] : [[param]];\r\n }\r\n throw FormulaError.VALUE;\r\n } else if (type === Types.COLLECTIONS) {\r\n return param;\r\n }\r\n\r\n // the only possible type for expectSingle=true are: string, boolean, number;\r\n // If array encountered, extract the first element.\r\n // extract first element from array\r\n if (isArray) {\r\n param = param[0][0];\r\n }\r\n const paramType = this.type(param);\r\n if (type === Types.STRING) {\r\n if (paramType === Types.BOOLEAN)\r\n param = param ? 'TRUE' : 'FALSE';\r\n else\r\n param = `${param}`\r\n } else if (type === Types.BOOLEAN) {\r\n if (paramType === Types.STRING)\r\n throw FormulaError.VALUE;\r\n if (paramType === Types.NUMBER)\r\n param = Boolean(param);\r\n } else if (type === Types.NUMBER) {\r\n param = this.acceptNumber(param, false);\r\n } else if (type === Types.NUMBER_NO_BOOLEAN) {\r\n param = this.acceptNumber(param, false, false);\r\n } else {\r\n throw FormulaError.VALUE;\r\n }\r\n return param;\r\n }\r\n\r\n type(variable) {\r\n let type = this.type2Number[typeof variable];\r\n if (type === -1) {\r\n if (Array.isArray(variable))\r\n type = Types.ARRAY;\r\n else if (variable.ref) {\r\n if (variable.ref.from) {\r\n type = Types.RANGE_REF;\r\n } else {\r\n type = Types.CELL_REF;\r\n }\r\n } else if (variable instanceof Collection)\r\n type = Types.COLLECTIONS;\r\n }\r\n return type;\r\n }\r\n\r\n isRangeRef(param) {\r\n return param.ref && param.ref.from;\r\n }\r\n\r\n isCellRef(param) {\r\n return param.ref && !param.ref.from;\r\n }\r\n\r\n /**\r\n * Helper function for SUMIF, AVERAGEIF,...\r\n * @param context\r\n * @param range1\r\n * @param range2\r\n */\r\n retrieveRanges(context, range1, range2) {\r\n // process args\r\n range2 = Address.extend(range1, range2);\r\n\r\n // retrieve values\r\n range1 = this.retrieveArg(context, range1);\r\n range1 = H.accept(range1, Types.ARRAY, undefined, false, true);\r\n\r\n if (range2 !== range1) {\r\n range2 = this.retrieveArg(context, range2);\r\n range2 = H.accept(range2, Types.ARRAY, undefined, false, true);\r\n } else\r\n range2 = range1;\r\n\r\n return [range1, range2];\r\n }\r\n\r\n retrieveArg(context, arg) {\r\n if (arg === null)\r\n return {value: 0, isArray: false, omitted: true};\r\n const res = context.utils.extractRefValue(arg);\r\n return {value: res.val, isArray: res.isArray, ref: arg.ref};\r\n }\r\n}\r\n\r\nconst H = new FormulaHelpers();\r\n\r\nconst WildCard = {\r\n /**\r\n * @param {string|*} obj\r\n * @returns {*}\r\n */\r\n isWildCard: obj => {\r\n if (typeof obj === \"string\")\r\n return /[*?]/.test(obj);\r\n return false;\r\n },\r\n\r\n toRegex: (lookupText, flags) => {\r\n return RegExp(lookupText.replace(/[.+^${}()|[\\]\\\\]/g, '\\\\$&') // escape the special char for js regex\r\n .replace(/([^~]??)[?]/g, '$1.') // ? => .\r\n .replace(/([^~]??)[*]/g, '$1.*') // * => .*\r\n .replace(/~([?*])/g, '$1'), flags); // ~* => * and ~? => ?\r\n }\r\n};\r\n\r\nconst Criteria = {\r\n /**\r\n * Parse criteria, support comparison and wild card match.\r\n * @param {string|number} criteria\r\n * @return {{op: string, value: string|number|boolean|RegExp, match: boolean|undefined}} - The parsed criteria.\r\n */\r\n parse: (criteria) => {\r\n const type = typeof criteria;\r\n if (type === \"string\") {\r\n // criteria = 'TRUE' or 'FALSE'\r\n const upper = criteria.toUpperCase();\r\n if (upper === 'TRUE' || upper === 'FALSE') {\r\n // excel boolean\r\n return {op: '=', value: upper === 'TRUE'};\r\n }\r\n\r\n const res = criteria.match(/(<>|>=|<=|>|<|=)(.*)/);\r\n // is comparison\r\n if (res) {\r\n // [\">10\", \">\", \"10\", index: 0, input: \">10\", groups: undefined]\r\n let op = res[1], value;\r\n\r\n // string or boolean or error\r\n if (isNaN(res[2])) {\r\n const upper = res[2].toUpperCase();\r\n if (upper === 'TRUE' || upper === 'FALSE') {\r\n // excel boolean\r\n value = upper === 'TRUE';\r\n } else if (/#NULL!|#DIV\\/0!|#VALUE!|#NAME\\?|#NUM!|#N\\/A|#REF!/.test(res[2])) {\r\n // formula error\r\n value = new FormulaError(res[2]);\r\n } else {\r\n // string, can be wildcard\r\n value = res[2];\r\n if (WildCard.isWildCard(value)) {\r\n return {op: 'wc', value: WildCard.toRegex(value), match: op === '='}\r\n }\r\n }\r\n } else {\r\n // number\r\n value = Number(res[2])\r\n }\r\n return {op, value};\r\n\r\n } else if (WildCard.isWildCard(criteria)) {\r\n return {op: 'wc', value: WildCard.toRegex(criteria), match: true}\r\n } else {\r\n return {op: '=', value: criteria}\r\n }\r\n } else if (type === \"boolean\" || type === 'number' || (Array.isArray(criteria)\r\n || criteria instanceof FormulaError)) {\r\n return {op: '=', value: criteria}\r\n } else {\r\n throw Error(`Criteria.parse: type ${typeof criteria} not support`)\r\n }\r\n }\r\n};\r\n\r\nconst Address = {\r\n\r\n columnNumberToName: (number) => {\r\n let dividend = number;\r\n let name = '';\r\n let modulo = 0;\r\n\r\n while (dividend > 0) {\r\n modulo = (dividend - 1) % 26;\r\n name = String.fromCharCode('A'.charCodeAt(0) + modulo) + name;\r\n dividend = Math.floor((dividend - modulo) / 26);\r\n }\r\n\r\n return name;\r\n },\r\n\r\n columnNameToNumber: (columnName) => {\r\n columnName = columnName.toUpperCase();\r\n const len = columnName.length;\r\n let number = 0;\r\n for (let i = 0; i < len; i++) {\r\n const code = columnName.charCodeAt(i);\r\n if (!isNaN(code)) {\r\n number += (code - 64) * 26 ** (len - i - 1)\r\n }\r\n }\r\n return number;\r\n },\r\n\r\n /**\r\n * Extend range2 to match with the dimension in range1.\r\n * @param {{ref: {}}} range1\r\n * @param {{ref: {}}} [range2]\r\n */\r\n extend: (range1, range2) => {\r\n if (range2 == null) {\r\n return range1;\r\n }\r\n let rowOffset, colOffset;\r\n if (H.isCellRef(range1)) {\r\n rowOffset = 0;\r\n colOffset = 0;\r\n } else if (H.isRangeRef(range1)) {\r\n rowOffset = range1.ref.to.row - range1.ref.from.row;\r\n colOffset = range1.ref.to.col - range1.ref.from.col;\r\n } else throw Error('Address.extend should not reach here.');\r\n // if range2 is a cell reference\r\n if (H.isCellRef(range2)) {\r\n if (rowOffset > 0 || colOffset > 0)\r\n range2 = {\r\n ref: {\r\n from: {col: range2.ref.col, row: range2.ref.row},\r\n to: {row: range2.ref.row + rowOffset, col: range2.ref.col + colOffset}\r\n }\r\n };\r\n } else {\r\n // range2 is a range reference\r\n range2.ref.to.row = range2.ref.from.row + rowOffset;\r\n range2.ref.to.col = range2.ref.from.col + colOffset;\r\n }\r\n return range2;\r\n },\r\n};\r\n\r\nmodule.exports = {\r\n FormulaHelpers: H,\r\n Types,\r\n ReversedTypes,\r\n Factorials,\r\n WildCard,\r\n Criteria,\r\n Address,\r\n};\r\n","const FormulaError = require('../formulas/error');\r\nconst {FormulaHelpers} = require('../formulas/helpers');\r\n\r\nconst Prefix = {\r\n unaryOp: (prefixes, value, isArray) => {\r\n let sign = 1;\r\n prefixes.forEach(prefix => {\r\n if (prefix === '+') {\r\n } else if (prefix === '-') {\r\n sign = -sign;\r\n } else {\r\n throw new Error(`Unrecognized prefix: ${prefix}`);\r\n }\r\n });\r\n\r\n if (value == null) {\r\n value = 0;\r\n }\r\n // positive means no changes\r\n if (sign === 1) {\r\n return value;\r\n }\r\n // negative\r\n try {\r\n value = FormulaHelpers.acceptNumber(value, isArray);\r\n } catch (e) {\r\n if (e instanceof FormulaError) {\r\n // parse number fails\r\n if (Array.isArray(value))\r\n value = value[0][0]\r\n } else\r\n throw e;\r\n }\r\n\r\n if (typeof value === \"number\" && isNaN(value)) return FormulaError.VALUE;\r\n return -value;\r\n }\r\n};\r\n\r\nconst Postfix = {\r\n percentOp: (value, postfix, isArray) => {\r\n try {\r\n value = FormulaHelpers.acceptNumber(value, isArray);\r\n } catch (e) {\r\n if (e instanceof FormulaError)\r\n return e;\r\n throw e;\r\n }\r\n if (postfix === '%') {\r\n return value / 100;\r\n }\r\n throw new Error(`Unrecognized postfix: ${postfix}`);\r\n }\r\n};\r\n\r\nconst type2Number = {'boolean': 3, 'string': 2, 'number': 1};\r\n\r\nconst Infix = {\r\n compareOp: (value1, infix, value2, isArray1, isArray2) => {\r\n if (value1 == null) value1 = 0;\r\n if (value2 == null) value2 = 0;\r\n // for array: {1,2,3}, get the first element to compare\r\n if (isArray1) {\r\n value1 = value1[0][0];\r\n }\r\n if (isArray2) {\r\n value2 = value2[0][0];\r\n }\r\n\r\n const type1 = typeof value1, type2 = typeof value2;\r\n\r\n if (type1 === type2) {\r\n // same type comparison\r\n switch (infix) {\r\n case '=':\r\n return value1 === value2;\r\n case '>':\r\n return value1 > value2;\r\n case '<':\r\n return value1 < value2;\r\n case '<>':\r\n return value1 !== value2;\r\n case '<=':\r\n return value1 <= value2;\r\n case '>=':\r\n return value1 >= value2;\r\n }\r\n } else {\r\n switch (infix) {\r\n case '=':\r\n return false;\r\n case '>':\r\n return type2Number[type1] > type2Number[type2];\r\n case '<':\r\n return type2Number[type1] < type2Number[type2];\r\n case '<>':\r\n return true;\r\n case '<=':\r\n return type2Number[type1] <= type2Number[type2];\r\n case '>=':\r\n return type2Number[type1] >= type2Number[type2];\r\n }\r\n\r\n }\r\n throw Error('Infix.compareOp: Should not reach here.');\r\n },\r\n\r\n concatOp: (value1, infix, value2, isArray1, isArray2) => {\r\n if (value1 == null) value1 = '';\r\n if (value2 == null) value2 = '';\r\n // for array: {1,2,3}, get the first element to concat\r\n if (isArray1) {\r\n value1 = value1[0][0];\r\n }\r\n if (isArray2) {\r\n value2 = value2[0][0];\r\n }\r\n\r\n const type1 = typeof value1, type2 = typeof value2;\r\n // convert boolean to string\r\n if (type1 === 'boolean')\r\n value1 = value1 ? 'TRUE' : 'FALSE';\r\n if (type2 === 'boolean')\r\n value2 = value2 ? 'TRUE' : 'FALSE';\r\n return '' + value1 + value2;\r\n },\r\n\r\n mathOp: (value1, infix, value2, isArray1, isArray2) => {\r\n if (value1 == null) value1 = 0;\r\n if (value2 == null) value2 = 0;\r\n\r\n try {\r\n value1 = FormulaHelpers.acceptNumber(value1, isArray1);\r\n value2 = FormulaHelpers.acceptNumber(value2, isArray2);\r\n } catch (e) {\r\n if (e instanceof FormulaError)\r\n return e;\r\n throw e;\r\n }\r\n\r\n switch (infix) {\r\n case '+':\r\n return value1 + value2;\r\n case '-':\r\n return value1 - value2;\r\n case '*':\r\n return value1 * value2;\r\n case '/':\r\n if (value2 === 0)\r\n return FormulaError.DIV0;\r\n return value1 / value2;\r\n case '^':\r\n return value1 ** value2;\r\n }\r\n\r\n throw Error('Infix.mathOp: Should not reach here.');\r\n },\r\n\r\n};\r\n\r\nmodule.exports = {\r\n Prefix,\r\n Postfix,\r\n Infix,\r\n Operators: {\r\n compareOp: ['<', '>', '=', '<>', '<=', '>='],\r\n concatOp: ['&'],\r\n mathOp: ['+', '-', '*', '/', '^'],\r\n }\r\n};\r\n","const FormulaError = require('../../formulas/error');\r\nconst {FormulaHelpers} = require('../../formulas/helpers');\r\nconst {Parser} = require('../parsing');\r\nconst lexer = require('../lexing');\r\nconst Utils = require('./utils');\r\nconst {formatChevrotainError} = require('../utils');\r\n\r\nclass DepParser {\r\n\r\n /**\r\n *\r\n * @param {{onVariable: Function}} [config]\r\n */\r\n constructor(config) {\r\n this.data = [];\r\n this.utils = new Utils(this);\r\n config = Object.assign({\r\n onVariable: () => null,\r\n }, config);\r\n this.utils = new Utils(this);\r\n\r\n this.onVariable = config.onVariable;\r\n this.functions = {}\r\n\r\n this.parser = new Parser(this, this.utils);\r\n }\r\n\r\n /**\r\n * Get value from the cell reference\r\n * @param ref\r\n * @return {*}\r\n */\r\n getCell(ref) {\r\n // console.log('get cell', JSON.stringify(ref));\r\n if (ref.row != null) {\r\n if (ref.sheet == null)\r\n ref.sheet = this.position ? this.position.sheet : undefined;\r\n const idx = this.data.findIndex(element => {\r\n return (element.from && element.from.row <= ref.row && element.to.row >= ref.row\r\n && element.from.col <= ref.col && element.to.col >= ref.col)\r\n || (element.row === ref.row && element.col === ref.col && element.sheet === ref.sheet)\r\n });\r\n if (idx === -1)\r\n this.data.push(ref);\r\n }\r\n return 0;\r\n }\r\n\r\n /**\r\n * Get values from the range reference.\r\n * @param ref\r\n * @return {*}\r\n */\r\n getRange(ref) {\r\n // console.log('get range', JSON.stringify(ref));\r\n if (ref.from.row != null) {\r\n if (ref.sheet == null)\r\n ref.sheet = this.position ? this.position.sheet : undefined;\r\n\r\n const idx = this.data.findIndex(element => {\r\n return element.from && element.from.row === ref.from.row && element.from.col === ref.from.col\r\n && element.to.row === ref.to.row && element.to.col === ref.to.col;\r\n });\r\n if (idx === -1)\r\n this.data.push(ref);\r\n }\r\n return [[0]]\r\n }\r\n\r\n /**\r\n * TODO:\r\n * Get references or values from a user defined variable.\r\n * @param name\r\n * @return {*}\r\n */\r\n getVariable(name) {\r\n // console.log('get variable', name);\r\n const res = {ref: this.onVariable(name, this.position.sheet)};\r\n if (res.ref == null)\r\n return FormulaError.NAME;\r\n if (FormulaHelpers.isCellRef(res))\r\n this.getCell(res.ref);\r\n else {\r\n this.getRange(res.ref);\r\n }\r\n return 0;\r\n }\r\n\r\n /**\r\n * Retrieve values from the given reference.\r\n * @param valueOrRef\r\n * @return {*}\r\n */\r\n retrieveRef(valueOrRef) {\r\n if (FormulaHelpers.isRangeRef(valueOrRef)) {\r\n return this.getRange(valueOrRef.ref);\r\n }\r\n if (FormulaHelpers.isCellRef(valueOrRef)) {\r\n return this.getCell(valueOrRef.ref)\r\n }\r\n return valueOrRef;\r\n }\r\n\r\n /**\r\n * Call an excel function.\r\n * @param name - Function name.\r\n * @param args - Arguments that pass to the function.\r\n * @return {*}\r\n */\r\n callFunction(name, args) {\r\n args.forEach(arg => {\r\n if (arg == null)\r\n return;\r\n this.retrieveRef(arg);\r\n });\r\n return {value: 0, ref: {}};\r\n }\r\n\r\n /**\r\n * Check and return the appropriate formula result.\r\n * @param result\r\n * @return {*}\r\n */\r\n checkFormulaResult(result) {\r\n this.retrieveRef(result);\r\n }\r\n\r\n /**\r\n * Parse an excel formula and return the dependencies\r\n * @param {string} inputText\r\n * @param {{row: number, col: number, sheet: string}} position\r\n * @param {boolean} [ignoreError=false] if true, throw FormulaError when error occurred.\r\n * if false, the parser will return partial dependencies.\r\n * @returns {Array.<{}>}\r\n */\r\n parse(inputText, position, ignoreError = false) {\r\n if (inputText.length === 0) throw Error('Input must not be empty.');\r\n this.data = [];\r\n this.position = position;\r\n const lexResult = lexer.lex(inputText);\r\n this.parser.input = lexResult.tokens;\r\n try {\r\n const res = this.parser.formulaWithBinaryOp();\r\n this.checkFormulaResult(res);\r\n } catch (e) {\r\n if (!ignoreError) {\r\n throw FormulaError.ERROR(e.message, e);\r\n }\r\n }\r\n if (this.parser.errors.length > 0 && !ignoreError) {\r\n const error = this.parser.errors[0];\r\n throw formatChevrotainError(error, inputText);\r\n }\r\n\r\n return this.data;\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n DepParser,\r\n};\r\n","const FormulaError = require('../../formulas/error');\r\nconst {FormulaHelpers, Types, Address} = require('../../formulas/helpers');\r\nconst {Prefix, Postfix, Infix, Operators} = require('../../formulas/operators');\r\nconst Collection = require('../type/collection');\r\nconst MAX_ROW = 1048576, MAX_COLUMN = 16384;\r\n\r\nclass Utils {\r\n\r\n constructor(context) {\r\n this.context = context;\r\n }\r\n\r\n columnNameToNumber(columnName) {\r\n return Address.columnNameToNumber(columnName);\r\n }\r\n\r\n /**\r\n * Parse the cell address only.\r\n * @param {string} cellAddress\r\n * @return {{ref: {col: number, address: string, row: number}}}\r\n */\r\n parseCellAddress(cellAddress) {\r\n const res = cellAddress.match(/([$]?)([A-Za-z]{1,3})([$]?)([1-9][0-9]*)/);\r\n // console.log('parseCellAddress', cellAddress);\r\n return {\r\n ref: {\r\n col: this.columnNameToNumber(res[2]),\r\n row: +res[4]\r\n },\r\n };\r\n }\r\n\r\n parseRow(row) {\r\n const rowNum = +row;\r\n if (!Number.isInteger(rowNum))\r\n throw Error('Row number must be integer.');\r\n return {\r\n ref: {\r\n col: undefined,\r\n row: +row\r\n },\r\n };\r\n }\r\n\r\n parseCol(col) {\r\n return {\r\n ref: {\r\n col: this.columnNameToNumber(col),\r\n row: undefined,\r\n },\r\n };\r\n }\r\n\r\n /**\r\n * Apply + or - unary prefix.\r\n * @param {Array.} prefixes\r\n * @param {*} value\r\n * @return {*}\r\n */\r\n applyPrefix(prefixes, value) {\r\n this.extractRefValue(value);\r\n return 0;\r\n }\r\n\r\n applyPostfix(value, postfix) {\r\n this.extractRefValue(value);\r\n return 0\r\n }\r\n\r\n applyInfix(value1, infix, value2) {\r\n this.extractRefValue(value1);\r\n this.extractRefValue(value2);\r\n return 0;\r\n }\r\n\r\n applyIntersect(refs) {\r\n // console.log('applyIntersect', refs);\r\n if (this.isFormulaError(refs[0]))\r\n return refs[0];\r\n if (!refs[0].ref)\r\n throw Error(`Expecting a reference, but got ${refs[0]}.`);\r\n // a intersection will keep track of references, value won't be retrieved here.\r\n let maxRow, maxCol, minRow, minCol, sheet, res; // index start from 1\r\n // first time setup\r\n const ref = refs.shift().ref;\r\n sheet = ref.sheet;\r\n if (!ref.from) {\r\n // check whole row/col reference\r\n if (ref.row === undefined || ref.col === undefined) {\r\n throw Error('Cannot intersect the whole row or column.')\r\n }\r\n\r\n // cell ref\r\n maxRow = minRow = ref.row;\r\n maxCol = minCol = ref.col;\r\n } else {\r\n // range ref\r\n // update\r\n maxRow = Math.max(ref.from.row, ref.to.row);\r\n minRow = Math.min(ref.from.row, ref.to.row);\r\n maxCol = Math.max(ref.from.col, ref.to.col);\r\n minCol = Math.min(ref.from.col, ref.to.col);\r\n }\r\n\r\n let err;\r\n refs.forEach(ref => {\r\n if (this.isFormulaError(ref))\r\n return ref;\r\n ref = ref.ref;\r\n if (!ref) throw Error(`Expecting a reference, but got ${ref}.`);\r\n if (!ref.from) {\r\n if (ref.row === undefined || ref.col === undefined) {\r\n throw Error('Cannot intersect the whole row or column.')\r\n }\r\n // cell ref\r\n if (ref.row > maxRow || ref.row < minRow || ref.col > maxCol || ref.col < minCol\r\n || sheet !== ref.sheet) {\r\n err = FormulaError.NULL;\r\n }\r\n maxRow = minRow = ref.row;\r\n maxCol = minCol = ref.col;\r\n } else {\r\n // range ref\r\n const refMaxRow = Math.max(ref.from.row, ref.to.row);\r\n const refMinRow = Math.min(ref.from.row, ref.to.row);\r\n const refMaxCol = Math.max(ref.from.col, ref.to.col);\r\n const refMinCol = Math.min(ref.from.col, ref.to.col);\r\n if (refMinRow > maxRow || refMaxRow < minRow || refMinCol > maxCol || refMaxCol < minCol\r\n || sheet !== ref.sheet) {\r\n err = FormulaError.NULL;\r\n }\r\n // update\r\n maxRow = Math.min(maxRow, refMaxRow);\r\n minRow = Math.max(minRow, refMinRow);\r\n maxCol = Math.min(maxCol, refMaxCol);\r\n minCol = Math.max(minCol, refMinCol);\r\n }\r\n });\r\n if (err) return err;\r\n // check if the ref can be reduced to cell reference\r\n if (maxRow === minRow && maxCol === minCol) {\r\n res = {\r\n ref: {\r\n sheet,\r\n row: maxRow,\r\n col: maxCol\r\n }\r\n }\r\n } else {\r\n res = {\r\n ref: {\r\n sheet,\r\n from: {row: minRow, col: minCol},\r\n to: {row: maxRow, col: maxCol}\r\n }\r\n };\r\n }\r\n\r\n if (!res.ref.sheet)\r\n delete res.ref.sheet;\r\n return res;\r\n }\r\n\r\n applyUnion(refs) {\r\n const collection = new Collection();\r\n for (let i = 0; i < refs.length; i++) {\r\n if (this.isFormulaError(refs[i]))\r\n return refs[i];\r\n collection.add(this.extractRefValue(refs[i]).val, refs[i]);\r\n }\r\n\r\n // console.log('applyUnion', unions);\r\n return collection;\r\n }\r\n\r\n /**\r\n * Apply multiple references, e.g. A1:B3:C8:A:1:.....\r\n * @param refs\r\n // * @return {{ref: {from: {col: number, row: number}, to: {col: number, row: number}}}}\r\n */\r\n applyRange(refs) {\r\n let res, maxRow = -1, maxCol = -1, minRow = MAX_ROW + 1, minCol = MAX_COLUMN + 1;\r\n refs.forEach(ref => {\r\n if (this.isFormulaError(ref))\r\n return ref;\r\n // row ref is saved as number, parse the number to row ref here\r\n if (typeof ref === 'number') {\r\n ref = this.parseRow(ref);\r\n }\r\n ref = ref.ref;\r\n // check whole row/col reference\r\n if (ref.row === undefined) {\r\n minRow = 1;\r\n maxRow = MAX_ROW\r\n }\r\n if (ref.col === undefined) {\r\n minCol = 1;\r\n maxCol = MAX_COLUMN;\r\n }\r\n\r\n if (ref.row > maxRow)\r\n maxRow = ref.row;\r\n if (ref.row < minRow)\r\n minRow = ref.row;\r\n if (ref.col > maxCol)\r\n maxCol = ref.col;\r\n if (ref.col < minCol)\r\n minCol = ref.col;\r\n });\r\n if (maxRow === minRow && maxCol === minCol) {\r\n res = {\r\n ref: {\r\n row: maxRow,\r\n col: maxCol\r\n }\r\n }\r\n } else {\r\n res = {\r\n ref: {\r\n from: {row: minRow, col: minCol},\r\n to: {row: maxRow, col: maxCol}\r\n }\r\n };\r\n }\r\n return res;\r\n }\r\n\r\n /**\r\n * Throw away the refs, and retrieve the value.\r\n * @return {{val: *, isArray: boolean}}\r\n */\r\n extractRefValue(obj) {\r\n const isArray = Array.isArray(obj);\r\n if (obj.ref) {\r\n // can be number or array\r\n return {val: this.context.retrieveRef(obj), isArray};\r\n\r\n }\r\n return {val: obj, isArray};\r\n }\r\n\r\n /**\r\n *\r\n * @param array\r\n * @return {Array}\r\n */\r\n toArray(array) {\r\n // TODO: check if array is valid\r\n // console.log('toArray', array);\r\n return array;\r\n }\r\n\r\n /**\r\n * @param {string} number\r\n * @return {number}\r\n */\r\n toNumber(number) {\r\n return Number(number);\r\n }\r\n\r\n /**\r\n * @param {string} string\r\n * @return {string}\r\n */\r\n toString(string) {\r\n return string.substring(1, string.length - 1) .replace(/\"\"/g, '\"');\r\n }\r\n\r\n /**\r\n * @param {string} bool\r\n * @return {boolean}\r\n */\r\n toBoolean(bool) {\r\n return bool === 'TRUE';\r\n }\r\n\r\n /**\r\n * Parse an error.\r\n * @param {string} error\r\n * @return {FormulaError}\r\n */\r\n toError(error) {\r\n return new FormulaError(error.toUpperCase());\r\n }\r\n\r\n isFormulaError(obj) {\r\n return obj instanceof FormulaError;\r\n }\r\n}\r\n\r\nmodule.exports = Utils;\r\n","const TextFunctions = require('../formulas/functions/text');\r\nconst MathFunctions = require('../formulas/functions/math');\r\nconst TrigFunctions = require('../formulas/functions/trigonometry');\r\nconst LogicalFunctions = require('../formulas/functions/logical');\r\nconst EngFunctions = require('../formulas/functions/engineering');\r\nconst ReferenceFunctions = require('../formulas/functions/reference');\r\nconst InformationFunctions = require('../formulas/functions/information');\r\nconst StatisticalFunctions = require('../formulas/functions/statistical');\r\nconst DateFunctions = require('../formulas/functions/date');\r\nconst WebFunctions = require('../formulas/functions/web');\r\nconst FormulaError = require('../formulas/error');\r\nconst {FormulaHelpers} = require('../formulas/helpers');\r\nconst {Parser, allTokens} = require('./parsing');\r\nconst lexer = require('./lexing');\r\nconst Utils = require('./utils');\r\n\r\n/**\r\n * A Excel Formula Parser & Evaluator\r\n */\r\nclass FormulaParser {\r\n\r\n /**\r\n * @param {{functions: {}, functionsNeedContext: {}, onVariable: function, onCell: function, onRange: function}} [config]\r\n * @param isTest - is in testing environment\r\n */\r\n constructor(config, isTest = false) {\r\n this.logs = [];\r\n this.isTest = isTest;\r\n this.utils = new Utils(this);\r\n config = Object.assign({\r\n functions: {},\r\n functionsNeedContext: {},\r\n onVariable: () => null,\r\n onCell: () => 0,\r\n onRange: () => [[0]],\r\n }, config);\r\n\r\n this.onVariable = config.onVariable;\r\n this.functions = Object.assign({}, DateFunctions, StatisticalFunctions, InformationFunctions, ReferenceFunctions,\r\n EngFunctions, LogicalFunctions, TextFunctions, MathFunctions, TrigFunctions, WebFunctions,\r\n config.functions, config.functionsNeedContext);\r\n this.onRange = config.onRange;\r\n this.onCell = config.onCell;\r\n\r\n // functions treat null as 0, other functions treats null as \"\"\r\n this.funsNullAs0 = Object.keys(MathFunctions)\r\n .concat(Object.keys(TrigFunctions))\r\n .concat(Object.keys(LogicalFunctions))\r\n .concat(Object.keys(EngFunctions))\r\n .concat(Object.keys(ReferenceFunctions))\r\n .concat(Object.keys(StatisticalFunctions))\r\n .concat(Object.keys(DateFunctions));\r\n\r\n // functions need context and don't need to retrieve references\r\n this.funsNeedContextAndNoDataRetrieve = ['ROW', 'ROWS', 'COLUMN', 'COLUMNS', 'SUMIF', 'INDEX', 'AVERAGEIF', 'IF'];\r\n\r\n // functions need parser context\r\n this.funsNeedContext = [...Object.keys(config.functionsNeedContext), ...this.funsNeedContextAndNoDataRetrieve,\r\n 'INDEX', 'OFFSET', 'INDIRECT', 'IF', 'CHOOSE', 'WEBSERVICE'];\r\n\r\n // functions preserve reference in arguments\r\n this.funsPreserveRef = Object.keys(InformationFunctions);\r\n\r\n this.parser = new Parser(this, this.utils);\r\n }\r\n\r\n /**\r\n * Get all lexing token names. Webpack needs this.\r\n * @return {Array.} - All token names that should not be minimized.\r\n */\r\n static get allTokens() {\r\n return allTokens;\r\n }\r\n\r\n /**\r\n * Get value from the cell reference\r\n * @param ref\r\n * @return {*}\r\n */\r\n getCell(ref) {\r\n // console.log('get cell', JSON.stringify(ref));\r\n if (ref.sheet == null)\r\n ref.sheet = this.position ? this.position.sheet : undefined;\r\n return this.onCell(ref);\r\n }\r\n\r\n /**\r\n * Get values from the range reference.\r\n * @param ref\r\n * @return {*}\r\n */\r\n getRange(ref) {\r\n // console.log('get range', JSON.stringify(ref));\r\n if (ref.sheet == null)\r\n ref.sheet = this.position ? this.position.sheet : undefined;\r\n return this.onRange(ref)\r\n }\r\n\r\n /**\r\n * TODO:\r\n * Get references or values from a user defined variable.\r\n * @param name\r\n * @return {*}\r\n */\r\n getVariable(name) {\r\n // console.log('get variable', name);\r\n const res = {ref: this.onVariable(name, this.position.sheet, this.position)};\r\n if (res.ref == null)\r\n return FormulaError.NAME;\r\n return res;\r\n }\r\n\r\n /**\r\n * Retrieve values from the given reference.\r\n * @param valueOrRef\r\n * @return {*}\r\n */\r\n retrieveRef(valueOrRef) {\r\n if (FormulaHelpers.isRangeRef(valueOrRef)) {\r\n return this.getRange(valueOrRef.ref);\r\n }\r\n if (FormulaHelpers.isCellRef(valueOrRef)) {\r\n return this.getCell(valueOrRef.ref)\r\n }\r\n return valueOrRef;\r\n }\r\n\r\n /**\r\n * Call an excel function.\r\n * @param name - Function name.\r\n * @param args - Arguments that pass to the function.\r\n * @return {*}\r\n */\r\n _callFunction(name, args) {\r\n if (name.indexOf('_xlfn.') === 0)\r\n name = name.slice(6);\r\n name = name.toUpperCase();\r\n // if one arg is null, it means 0 or \"\" depends on the function it calls\r\n const nullValue = this.funsNullAs0.includes(name) ? 0 : '';\r\n\r\n if (!this.funsNeedContextAndNoDataRetrieve.includes(name)) {\r\n // retrieve reference\r\n args = args.map(arg => {\r\n if (arg === null)\r\n return {value: nullValue, isArray: false, omitted: true};\r\n const res = this.utils.extractRefValue(arg);\r\n\r\n if (this.funsPreserveRef.includes(name)) {\r\n return {value: res.val, isArray: res.isArray, ref: arg.ref};\r\n }\r\n return {\r\n value: res.val,\r\n isArray: res.isArray,\r\n isRangeRef: !!FormulaHelpers.isRangeRef(arg),\r\n isCellRef: !!FormulaHelpers.isCellRef(arg)\r\n };\r\n });\r\n }\r\n // console.log('callFunction', name, args)\r\n\r\n if (this.functions[name]) {\r\n let res;\r\n try {\r\n if (!this.funsNeedContextAndNoDataRetrieve.includes(name) && !this.funsNeedContext.includes(name))\r\n res = (this.functions[name](...args));\r\n else\r\n res = (this.functions[name](this, ...args));\r\n } catch (e) {\r\n // allow functions throw FormulaError, this make functions easier to implement!\r\n if (e instanceof FormulaError) {\r\n return e;\r\n } else {\r\n throw e;\r\n }\r\n }\r\n if (res === undefined) {\r\n // console.log(`Function ${name} may be not implemented.`);\r\n if (this.isTest) {\r\n if (!this.logs.includes(name)) this.logs.push(name);\r\n return {value: 0, ref: {}};\r\n }\r\n throw FormulaError.NOT_IMPLEMENTED(name);\r\n }\r\n return res;\r\n } else {\r\n // console.log(`Function ${name} is not implemented`);\r\n if (this.isTest) {\r\n if (!this.logs.includes(name)) this.logs.push(name);\r\n return {value: 0, ref: {}};\r\n }\r\n throw FormulaError.NOT_IMPLEMENTED(name);\r\n }\r\n }\r\n\r\n async callFunctionAsync(name, args) {\r\n const awaitedArgs = [];\r\n for (const arg of args) {\r\n awaitedArgs.push(await arg);\r\n }\r\n const res = await this._callFunction(name, awaitedArgs);\r\n return FormulaHelpers.checkFunctionResult(res)\r\n }\r\n\r\n callFunction(name, args) {\r\n if (this.async) {\r\n return this.callFunctionAsync(name, args);\r\n } else {\r\n const res = this._callFunction(name, args);\r\n return FormulaHelpers.checkFunctionResult(res);\r\n }\r\n }\r\n\r\n /**\r\n * Return currently supported functions.\r\n * @return {this}\r\n */\r\n supportedFunctions() {\r\n const supported = [];\r\n const functions = Object.keys(this.functions);\r\n functions.forEach(fun => {\r\n try {\r\n const res = this.functions[fun](0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\r\n if (res === undefined) return;\r\n supported.push(fun);\r\n } catch (e) {\r\n if (e instanceof Error)\r\n supported.push(fun);\r\n }\r\n });\r\n return supported.sort();\r\n }\r\n\r\n /**\r\n * Check and return the appropriate formula result.\r\n * @param result\r\n * @param {boolean} [allowReturnArray] - If the formula can return an array\r\n * @return {*}\r\n */\r\n checkFormulaResult(result, allowReturnArray = false) {\r\n const type = typeof result;\r\n // number\r\n if (type === 'number') {\r\n if (isNaN(result)) {\r\n return FormulaError.VALUE;\r\n } else if (!isFinite(result)) {\r\n return FormulaError.NUM;\r\n }\r\n result += 0; // make -0 to 0\r\n } else if (type === 'object') {\r\n if (result instanceof FormulaError)\r\n return result;\r\n if (allowReturnArray) {\r\n if (result.ref) {\r\n result = this.retrieveRef(result);\r\n }\r\n // Disallow union, and other unknown data types.\r\n // e.g. `=(A1:C1, A2:E9)` -> #VALUE!\r\n if (typeof result === 'object' && !Array.isArray(result) && result != null) {\r\n return FormulaError.VALUE;\r\n }\r\n\r\n } else {\r\n if (result.ref && result.ref.row && !result.ref.from) {\r\n // single cell reference\r\n result = this.retrieveRef(result);\r\n } else if (result.ref && result.ref.from && result.ref.from.col === result.ref.to.col) {\r\n // single Column reference\r\n result = this.retrieveRef({\r\n ref: {\r\n row: result.ref.from.row, col: result.ref.from.col\r\n }\r\n });\r\n } else if (Array.isArray(result)) {\r\n result = result[0][0]\r\n } else {\r\n // array, range reference, union collections\r\n return FormulaError.VALUE;\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Parse an excel formula.\r\n * @param {string} inputText\r\n * @param {{row: number, col: number}} [position] - The position of the parsed formula\r\n * e.g. {row: 1, col: 1}\r\n * @param {boolean} [allowReturnArray] - If the formula can return an array. Useful when parsing array formulas,\r\n * or data validation formulas.\r\n * @returns {*}\r\n */\r\n parse(inputText, position, allowReturnArray = false) {\r\n if (inputText.length === 0) throw Error('Input must not be empty.');\r\n this.position = position;\r\n this.async = false;\r\n const lexResult = lexer.lex(inputText);\r\n this.parser.input = lexResult.tokens;\r\n let res;\r\n try {\r\n res = this.parser.formulaWithBinaryOp();\r\n res = this.checkFormulaResult(res, allowReturnArray);\r\n if (res instanceof FormulaError) {\r\n return res;\r\n }\r\n } catch (e) {\r\n throw FormulaError.ERROR(e.message, e);\r\n }\r\n if (this.parser.errors.length > 0) {\r\n const error = this.parser.errors[0];\r\n throw Utils.formatChevrotainError(error, inputText);\r\n }\r\n return res;\r\n }\r\n\r\n /**\r\n * Parse an excel formula asynchronously.\r\n * Use when providing custom async functions.\r\n * @param {string} inputText\r\n * @param {{row: number, col: number}} [position] - The position of the parsed formula\r\n * e.g. {row: 1, col: 1}\r\n * @param {boolean} [allowReturnArray] - If the formula can return an array. Useful when parsing array formulas,\r\n * or data validation formulas.\r\n * @returns {*}\r\n */\r\n async parseAsync(inputText, position, allowReturnArray = false) {\r\n if (inputText.length === 0) throw Error('Input must not be empty.');\r\n this.position = position;\r\n this.async = true;\r\n const lexResult = lexer.lex(inputText);\r\n this.parser.input = lexResult.tokens;\r\n let res;\r\n try {\r\n res = await this.parser.formulaWithBinaryOp();\r\n res = this.checkFormulaResult(res, allowReturnArray);\r\n if (res instanceof FormulaError) {\r\n return res;\r\n }\r\n } catch (e) {\r\n throw FormulaError.ERROR(e.message, e);\r\n }\r\n if (this.parser.errors.length > 0) {\r\n const error = this.parser.errors[0];\r\n throw Utils.formatChevrotainError(error, inputText);\r\n }\r\n return res;\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n FormulaParser,\r\n FormulaHelpers,\r\n};\r\n","const {createToken, Lexer} = require('chevrotain');\r\nconst FormulaError = require('../formulas/error')\r\n\r\n// the vocabulary will be exported and used in the Parser definition.\r\nconst tokenVocabulary = {};\r\n\r\nconst WhiteSpace = createToken({\r\n name: 'WhiteSpace',\r\n pattern: /\\s+/,\r\n group: Lexer.SKIPPED,\r\n});\r\n\r\nconst String = createToken({\r\n name: 'String',\r\n pattern: /\"(\"\"|[^\"])*\"/\r\n});\r\n\r\nconst SingleQuotedString = createToken({\r\n name: 'SingleQuotedString',\r\n pattern: /'(''|[^'])*'/\r\n});\r\n\r\nconst SheetQuoted = createToken({\r\n name: 'SheetQuoted',\r\n pattern: /'((?![\\\\\\/\\[\\]*?:]).)+?'!/\r\n});\r\n\r\nconst Function = createToken({\r\n name: 'Function',\r\n pattern: /[A-Za-z_]+[A-Za-z_0-9.]*\\(/\r\n});\r\n\r\nconst FormulaErrorT = createToken({\r\n name: 'FormulaErrorT',\r\n pattern: /#NULL!|#DIV\\/0!|#VALUE!|#NAME\\?|#NUM!|#N\\/A/\r\n});\r\n\r\nconst RefError = createToken({\r\n name: 'RefError',\r\n pattern: /#REF!/\r\n});\r\n\r\nconst Name = createToken({\r\n name: 'Name',\r\n pattern: /[a-zA-Z_][a-zA-Z0-9_.?]*/,\r\n // longer_alt: RangeColumn // e.g. A:AA\r\n});\r\n\r\nconst Sheet = createToken({\r\n name: 'Sheet',\r\n pattern: /[A-Za-z_.\\d\\u007F-\\uFFFF]+!/\r\n});\r\n\r\nconst Cell = createToken({\r\n name: 'Cell',\r\n pattern: /[$]?[A-Za-z]{1,3}[$]?[1-9][0-9]*/,\r\n longer_alt: Name\r\n});\r\n\r\nconst Number = createToken({\r\n name: 'Number',\r\n pattern: /[0-9]+[.]?[0-9]*([eE][+\\-][0-9]+)?/\r\n});\r\n\r\nconst Boolean = createToken({\r\n name: 'Boolean',\r\n pattern: /TRUE|FALSE/i\r\n});\r\n\r\nconst Column = createToken({\r\n name: 'Column',\r\n pattern: /[$]?[A-Za-z]{1,3}/,\r\n longer_alt: Name\r\n});\r\n\r\n\r\n/**\r\n * Symbols and operators\r\n */\r\nconst At = createToken({\r\n name: 'At',\r\n pattern: /@/\r\n});\r\n\r\nconst Comma = createToken({\r\n name: 'Comma',\r\n pattern: /,/\r\n});\r\n\r\nconst Colon = createToken({\r\n name: 'Colon',\r\n pattern: /:/\r\n});\r\n\r\nconst Semicolon = createToken({\r\n name: 'Semicolon',\r\n pattern: /;/\r\n});\r\n\r\nconst OpenParen = createToken({\r\n name: 'OpenParen',\r\n pattern: /\\(/\r\n});\r\n\r\nconst CloseParen = createToken({\r\n name: 'CloseParen',\r\n pattern: /\\)/\r\n});\r\n\r\nconst OpenSquareParen = createToken({\r\n name: 'OpenSquareParen',\r\n pattern: /\\[/\r\n});\r\n\r\nconst CloseSquareParen = createToken({\r\n name: 'CloseSquareParen',\r\n pattern: /]/\r\n});\r\n\r\nconst ExclamationMark = createToken({\r\n name: 'exclamationMark',\r\n pattern: /!/\r\n});\r\n\r\nconst OpenCurlyParen = createToken({\r\n name: 'OpenCurlyParen',\r\n pattern: /{/\r\n});\r\n\r\nconst CloseCurlyParen = createToken({\r\n name: 'CloseCurlyParen',\r\n pattern: /}/\r\n});\r\n\r\nconst QuoteS = createToken({\r\n name: 'QuoteS',\r\n pattern: /'/\r\n});\r\n\r\n\r\nconst MulOp = createToken({\r\n name: 'MulOp',\r\n pattern: /\\*/\r\n});\r\n\r\nconst PlusOp = createToken({\r\n name: 'PlusOp',\r\n pattern: /\\+/\r\n});\r\n\r\nconst DivOp = createToken({\r\n name: 'DivOp',\r\n pattern: /\\//\r\n});\r\n\r\nconst MinOp = createToken({\r\n name: 'MinOp',\r\n pattern: /-/\r\n});\r\n\r\nconst ConcatOp = createToken({\r\n name: 'ConcatOp',\r\n pattern: /&/\r\n});\r\n\r\nconst ExOp = createToken({\r\n name: 'ExOp',\r\n pattern: /\\^/\r\n});\r\n\r\nconst PercentOp = createToken({\r\n name: 'PercentOp',\r\n pattern: /%/\r\n});\r\n\r\nconst GtOp = createToken({\r\n name: 'GtOp',\r\n pattern: />/\r\n});\r\n\r\nconst EqOp = createToken({\r\n name: 'EqOp',\r\n pattern: /=/\r\n});\r\n\r\nconst LtOp = createToken({\r\n name: 'LtOp',\r\n pattern: //\r\n});\r\n\r\nconst GteOp = createToken({\r\n name: 'GteOp',\r\n pattern: />=/\r\n});\r\n\r\nconst LteOp = createToken({\r\n name: 'LteOp',\r\n pattern: /<=/\r\n});\r\n\r\n// The order of tokens is important\r\nconst allTokens = [\r\n\r\n WhiteSpace,\r\n String,\r\n SheetQuoted,\r\n SingleQuotedString,\r\n Function,\r\n FormulaErrorT,\r\n RefError,\r\n Sheet,\r\n Cell,\r\n Boolean,\r\n Column,\r\n Name,\r\n Number,\r\n\r\n At,\r\n Comma,\r\n Colon,\r\n Semicolon,\r\n OpenParen,\r\n CloseParen,\r\n OpenSquareParen,\r\n CloseSquareParen,\r\n // ExclamationMark,\r\n OpenCurlyParen,\r\n CloseCurlyParen,\r\n QuoteS,\r\n MulOp,\r\n PlusOp,\r\n DivOp,\r\n MinOp,\r\n ConcatOp,\r\n ExOp,\r\n MulOp,\r\n PercentOp,\r\n NeqOp,\r\n GteOp,\r\n LteOp,\r\n GtOp,\r\n EqOp,\r\n LtOp,\r\n];\r\n\r\nconst SelectLexer = new Lexer(allTokens, {ensureOptimizations: true});\r\n\r\nallTokens.forEach(tokenType => {\r\n tokenVocabulary[tokenType.name] = tokenType\r\n});\r\n\r\nmodule.exports = {\r\n tokenVocabulary: tokenVocabulary,\r\n\r\n lex: function (inputText) {\r\n const lexingResult = SelectLexer.tokenize(inputText)\r\n\r\n if (lexingResult.errors.length > 0) {\r\n const error = lexingResult.errors[0];\r\n const line = error.line, column = error.column;\r\n let msg = '\\n' + inputText.split('\\n')[line - 1] + '\\n';\r\n msg += Array(column - 1).fill(' ').join('') + '^\\n';\r\n error.message = msg + `Error at position ${line}:${column}\\n` + error.message;\r\n error.errorLocation = {line, column};\r\n throw FormulaError.ERROR(error.message, error);\r\n }\r\n\r\n return lexingResult\r\n }\r\n};\r\n","const lexer = require('./lexing');\r\nconst {EmbeddedActionsParser} = require(\"chevrotain\");\r\nconst tokenVocabulary = lexer.tokenVocabulary;\r\nconst {\r\n String,\r\n SheetQuoted,\r\n ExcelRefFunction,\r\n ExcelConditionalRefFunction,\r\n Function,\r\n FormulaErrorT,\r\n RefError,\r\n Cell,\r\n Sheet,\r\n Name,\r\n Number,\r\n Boolean,\r\n Column,\r\n\r\n // At,\r\n Comma,\r\n Colon,\r\n Semicolon,\r\n OpenParen,\r\n CloseParen,\r\n // OpenSquareParen,\r\n // CloseSquareParen,\r\n // ExclamationMark,\r\n OpenCurlyParen,\r\n CloseCurlyParen,\r\n MulOp,\r\n PlusOp,\r\n DivOp,\r\n MinOp,\r\n ConcatOp,\r\n ExOp,\r\n PercentOp,\r\n NeqOp,\r\n GteOp,\r\n LteOp,\r\n GtOp,\r\n EqOp,\r\n LtOp\r\n} = lexer.tokenVocabulary;\r\n\r\nclass Parsing extends EmbeddedActionsParser {\r\n /**\r\n *\r\n * @param {FormulaParser|DepParser} context\r\n * @param {Utils} utils\r\n */\r\n constructor(context, utils) {\r\n super(tokenVocabulary, {\r\n outputCst: false,\r\n maxLookahead: 1,\r\n skipValidations: true,\r\n // traceInitPerf: true,\r\n });\r\n this.utils = utils;\r\n this.binaryOperatorsPrecedence = [\r\n ['^'],\r\n ['*', '/'],\r\n ['+', '-'],\r\n ['&'],\r\n ['<', '>', '=', '<>', '<=', '>='],\r\n ];\r\n const $ = this;\r\n\r\n // Adopted from https://github.com/spreadsheetlab/XLParser/blob/master/src/XLParser/ExcelFormulaGrammar.cs\r\n\r\n $.RULE('formulaWithBinaryOp', () => {\r\n const infixes = [];\r\n const values = [$.SUBRULE($.formulaWithPercentOp)];\r\n $.MANY(() => {\r\n // Caching Arrays of Alternatives\r\n // https://sap.github.io/chevrotain/docs/guide/performance.html#caching-arrays-of-alternatives\r\n infixes.push($.OR($.c1 ||\r\n (\r\n $.c1 = [\r\n {ALT: () => $.CONSUME(GtOp).image},\r\n {ALT: () => $.CONSUME(EqOp).image},\r\n {ALT: () => $.CONSUME(LtOp).image},\r\n {ALT: () => $.CONSUME(NeqOp).image},\r\n {ALT: () => $.CONSUME(GteOp).image},\r\n {ALT: () => $.CONSUME(LteOp).image},\r\n {ALT: () => $.CONSUME(ConcatOp).image},\r\n {ALT: () => $.CONSUME(PlusOp).image},\r\n {ALT: () => $.CONSUME(MinOp).image},\r\n {ALT: () => $.CONSUME(MulOp).image},\r\n {ALT: () => $.CONSUME(DivOp).image},\r\n {ALT: () => $.CONSUME(ExOp).image}\r\n ]\r\n )));\r\n values.push($.SUBRULE2($.formulaWithPercentOp));\r\n });\r\n $.ACTION(() => {\r\n // evaluate\r\n for (const ops of this.binaryOperatorsPrecedence) {\r\n for (let index = 0, length = infixes.length; index < length; index++) {\r\n const infix = infixes[index];\r\n if (!ops.includes(infix)) continue;\r\n infixes.splice(index, 1);\r\n values.splice(index, 2, this.utils.applyInfix(values[index], infix, values[index + 1]));\r\n index--;\r\n length--;\r\n }\r\n }\r\n });\r\n\r\n return values[0];\r\n });\r\n\r\n $.RULE('plusMinusOp', () => $.OR([\r\n {ALT: () => $.CONSUME(PlusOp).image},\r\n {ALT: () => $.CONSUME(MinOp).image}\r\n ]));\r\n\r\n $.RULE('formulaWithPercentOp', () => {\r\n let value = $.SUBRULE($.formulaWithUnaryOp);\r\n $.OPTION(() => {\r\n const postfix = $.CONSUME(PercentOp).image;\r\n value = $.ACTION(() => this.utils.applyPostfix(value, postfix));\r\n });\r\n return value;\r\n });\r\n\r\n $.RULE('formulaWithUnaryOp', () => {\r\n // support ++---3 => -3\r\n const prefixes = [];\r\n $.MANY(() => {\r\n const op = $.OR([\r\n {ALT: () => $.CONSUME(PlusOp).image},\r\n {ALT: () => $.CONSUME(MinOp).image}\r\n ]);\r\n prefixes.push(op);\r\n });\r\n const formula = $.SUBRULE($.formulaWithIntersect);\r\n if (prefixes.length > 0) return $.ACTION(() => this.utils.applyPrefix(prefixes, formula));\r\n return formula;\r\n });\r\n\r\n\r\n $.RULE('formulaWithIntersect', () => {\r\n // e.g. 'A1 A2 A3'\r\n let ref1 = $.SUBRULE($.formulaWithRange);\r\n const refs = [ref1];\r\n // console.log('check intersect')\r\n $.MANY({\r\n GATE: () => {\r\n // see https://github.com/SAP/chevrotain/blob/master/examples/grammars/css/css.js#L436-L441\r\n const prevToken = $.LA(0);\r\n const nextToken = $.LA(1);\r\n // This is the only place where the grammar is whitespace sensitive.\r\n return nextToken.startOffset > prevToken.endOffset + 1;\r\n },\r\n DEF: () => {\r\n refs.push($.SUBRULE3($.formulaWithRange));\r\n }\r\n });\r\n if (refs.length > 1) {\r\n return $.ACTION(() => $.ACTION(() => this.utils.applyIntersect(refs)))\r\n }\r\n return ref1;\r\n });\r\n\r\n $.RULE('formulaWithRange', () => {\r\n // e.g. 'A1:C3' or 'A1:A3:C4', can be any number of references, at lease 2\r\n const ref1 = $.SUBRULE($.formula);\r\n const refs = [ref1];\r\n $.MANY(() => {\r\n $.CONSUME(Colon);\r\n refs.push($.SUBRULE2($.formula));\r\n });\r\n if (refs.length > 1)\r\n return $.ACTION(() => $.ACTION(() => this.utils.applyRange(refs)));\r\n return ref1;\r\n });\r\n\r\n $.RULE('formula', () => $.OR9([\r\n {ALT: () => $.SUBRULE($.referenceWithoutInfix)},\r\n {ALT: () => $.SUBRULE($.paren)},\r\n {ALT: () => $.SUBRULE($.constant)},\r\n {ALT: () => $.SUBRULE($.functionCall)},\r\n {ALT: () => $.SUBRULE($.constantArray)},\r\n ]));\r\n\r\n $.RULE('paren', () => {\r\n // formula paren or union paren\r\n $.CONSUME(OpenParen);\r\n let result;\r\n const refs = [];\r\n refs.push($.SUBRULE($.formulaWithBinaryOp));\r\n $.MANY(() => {\r\n $.CONSUME(Comma);\r\n refs.push($.SUBRULE2($.formulaWithBinaryOp));\r\n });\r\n if (refs.length > 1)\r\n result = $.ACTION(() => this.utils.applyUnion(refs));\r\n else\r\n result = refs[0];\r\n\r\n $.CONSUME(CloseParen);\r\n return result;\r\n });\r\n\r\n $.RULE('constantArray', () => {\r\n // console.log('constantArray');\r\n const arr = [[]];\r\n let currentRow = 0;\r\n $.CONSUME(OpenCurlyParen);\r\n\r\n // array must contain at least one item\r\n arr[currentRow].push($.SUBRULE($.constantForArray));\r\n $.MANY(() => {\r\n const sep = $.OR([\r\n {ALT: () => $.CONSUME(Comma).image},\r\n {ALT: () => $.CONSUME(Semicolon).image}\r\n ]);\r\n const constant = $.SUBRULE2($.constantForArray);\r\n if (sep === ',') {\r\n arr[currentRow].push(constant)\r\n } else {\r\n currentRow++;\r\n arr[currentRow] = [];\r\n arr[currentRow].push(constant)\r\n }\r\n });\r\n\r\n $.CONSUME(CloseCurlyParen);\r\n\r\n return $.ACTION(() => this.utils.toArray(arr));\r\n });\r\n\r\n /**\r\n * Used in array\r\n */\r\n $.RULE('constantForArray', () => $.OR([\r\n {\r\n ALT: () => {\r\n const prefix = $.OPTION(() => $.SUBRULE($.plusMinusOp));\r\n const image = $.CONSUME(Number).image;\r\n const number = $.ACTION(() => this.utils.toNumber(image));\r\n if (prefix)\r\n return $.ACTION(() => this.utils.applyPrefix([prefix], number));\r\n return number;\r\n }\r\n }, {\r\n ALT: () => {\r\n const str = $.CONSUME(String).image;\r\n return $.ACTION(() => this.utils.toString(str));\r\n }\r\n }, {\r\n ALT: () => {\r\n const bool = $.CONSUME(Boolean).image;\r\n return $.ACTION(() => this.utils.toBoolean(bool));\r\n }\r\n }, {\r\n ALT: () => {\r\n const err = $.CONSUME(FormulaErrorT).image;\r\n return $.ACTION(() => this.utils.toError(err));\r\n }\r\n }, {\r\n ALT: () => {\r\n const err = $.CONSUME(RefError).image;\r\n return $.ACTION(() => this.utils.toError(err));\r\n }\r\n },\r\n ]));\r\n\r\n $.RULE('constant', () => $.OR([\r\n {\r\n ALT: () => {\r\n const number = $.CONSUME(Number).image;\r\n return $.ACTION(() => this.utils.toNumber(number));\r\n }\r\n }, {\r\n ALT: () => {\r\n const str = $.CONSUME(String).image;\r\n return $.ACTION(() => this.utils.toString(str));\r\n }\r\n }, {\r\n ALT: () => {\r\n const bool = $.CONSUME(Boolean).image;\r\n return $.ACTION(() => this.utils.toBoolean(bool));\r\n }\r\n }, {\r\n ALT: () => {\r\n const err = $.CONSUME(FormulaErrorT).image;\r\n return $.ACTION(() => this.utils.toError(err));\r\n }\r\n },\r\n ]));\r\n\r\n $.RULE('functionCall', () => {\r\n const functionName = $.CONSUME(Function).image.slice(0, -1);\r\n // console.log('functionName', functionName);\r\n const args = $.SUBRULE($.arguments);\r\n $.CONSUME(CloseParen);\r\n // dependency parser won't call function.\r\n return $.ACTION(() => context.callFunction(functionName, args));\r\n\r\n });\r\n\r\n $.RULE('arguments', () => {\r\n // console.log('try arguments')\r\n\r\n // allows ',' in the front\r\n $.MANY2(() => {\r\n $.CONSUME2(Comma);\r\n });\r\n const args = [];\r\n // allows empty arguments\r\n $.OPTION(() => {\r\n args.push($.SUBRULE($.formulaWithBinaryOp));\r\n $.MANY(() => {\r\n $.CONSUME1(Comma);\r\n args.push(null); // e.g. ROUND(1.5,)\r\n $.OPTION3(() => {\r\n args.pop();\r\n args.push($.SUBRULE2($.formulaWithBinaryOp))\r\n });\r\n });\r\n });\r\n return args;\r\n });\r\n\r\n $.RULE('referenceWithoutInfix', () => $.OR([\r\n\r\n {ALT: () => $.SUBRULE($.referenceItem)},\r\n\r\n {\r\n // sheet name prefix\r\n ALT: () => {\r\n // console.log('try sheetName');\r\n const sheetName = $.SUBRULE($.prefixName);\r\n // console.log('sheetName', sheetName);\r\n const referenceItem = $.SUBRULE2($.formulaWithRange);\r\n\r\n $.ACTION(() => {\r\n if (this.utils.isFormulaError(referenceItem))\r\n return referenceItem;\r\n referenceItem.ref.sheet = sheetName\r\n });\r\n return referenceItem;\r\n }\r\n },\r\n\r\n // {ALT: () => $.SUBRULE('dynamicDataExchange')},\r\n ]));\r\n\r\n $.RULE('referenceItem', () => $.OR([\r\n {\r\n ALT: () => {\r\n const address = $.CONSUME(Cell).image;\r\n return $.ACTION(() => this.utils.parseCellAddress(address));\r\n }\r\n },\r\n {\r\n ALT: () => {\r\n const name = $.CONSUME(Name).image;\r\n return $.ACTION(() => context.getVariable(name))\r\n }\r\n },\r\n {\r\n ALT: () => {\r\n const column = $.CONSUME(Column).image;\r\n return $.ACTION(() => this.utils.parseCol(column))\r\n }\r\n },\r\n // A row check should be here, but the token is same with Number,\r\n // In other to resolve ambiguities, I leave this empty, and\r\n // parse the number to row number when needed.\r\n {\r\n ALT: () => {\r\n const err = $.CONSUME(RefError).image;\r\n return $.ACTION(() => this.utils.toError(err))\r\n }\r\n },\r\n // {ALT: () => $.SUBRULE($.udfFunctionCall)},\r\n // {ALT: () => $.SUBRULE($.structuredReference)},\r\n ]));\r\n\r\n $.RULE('prefixName', () => $.OR([\r\n {ALT: () => $.CONSUME(Sheet).image.slice(0, -1)},\r\n {ALT: () => $.CONSUME(SheetQuoted).image.slice(1, -2).replace(/''/g, \"'\")},\r\n ]));\r\n\r\n this.performSelfAnalysis();\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n Parser: Parsing,\r\n};\r\n","/**\r\n * Represents unions.\r\n * (A1, A1:C5, ...)\r\n */\r\nclass Collection {\r\n\r\n constructor(data, refs) {\r\n if (data == null && refs == null) {\r\n this._data = [];\r\n this._refs = [];\r\n } else {\r\n if (data.length !== refs.length)\r\n throw Error('Collection: data length should match references length.');\r\n this._data = data;\r\n this._refs = refs;\r\n }\r\n }\r\n\r\n get data() {\r\n return this._data;\r\n }\r\n\r\n get refs() {\r\n return this._refs;\r\n }\r\n\r\n get length() {\r\n return this._data.length;\r\n }\r\n\r\n /**\r\n * Add data and references to this collection.\r\n * @param {{}} obj - data\r\n * @param {{}} ref - reference\r\n */\r\n add(obj, ref) {\r\n this._data.push(obj);\r\n this._refs.push(ref);\r\n }\r\n}\r\n\r\nmodule.exports = Collection;\r\n","const FormulaError = require('../formulas/error');\r\nconst {Address} = require('../formulas/helpers');\r\nconst {Prefix, Postfix, Infix, Operators} = require('../formulas/operators');\r\nconst Collection = require('./type/collection');\r\nconst MAX_ROW = 1048576, MAX_COLUMN = 16384;\r\nconst {NotAllInputParsedException} = require('chevrotain');\r\n\r\nclass Utils {\r\n\r\n constructor(context) {\r\n this.context = context;\r\n }\r\n\r\n columnNameToNumber(columnName) {\r\n return Address.columnNameToNumber(columnName);\r\n }\r\n\r\n /**\r\n * Parse the cell address only.\r\n * @param {string} cellAddress\r\n * @return {{ref: {col: number, address: string, row: number}}}\r\n */\r\n parseCellAddress(cellAddress) {\r\n const res = cellAddress.match(/([$]?)([A-Za-z]{1,3})([$]?)([1-9][0-9]*)/);\r\n // console.log('parseCellAddress', cellAddress);\r\n return {\r\n ref: {\r\n address: res[0],\r\n col: this.columnNameToNumber(res[2]),\r\n row: +res[4]\r\n },\r\n };\r\n }\r\n\r\n parseRow(row) {\r\n const rowNum = +row;\r\n if (!Number.isInteger(rowNum))\r\n throw Error('Row number must be integer.');\r\n return {\r\n ref: {\r\n col: undefined,\r\n row: +row\r\n },\r\n };\r\n }\r\n\r\n parseCol(col) {\r\n return {\r\n ref: {\r\n col: this.columnNameToNumber(col),\r\n row: undefined,\r\n },\r\n };\r\n }\r\n\r\n parseColRange(col1, col2) {\r\n // const res = colRange.match(/([$]?)([A-Za-z]{1,3}):([$]?)([A-Za-z]{1,4})/);\r\n col1 = this.columnNameToNumber(col1);\r\n col2 = this.columnNameToNumber(col2);\r\n return {\r\n ref: {\r\n from: {\r\n col: Math.min(col1, col2),\r\n row: null\r\n },\r\n to: {\r\n col: Math.max(col1, col2),\r\n row: null\r\n }\r\n }\r\n }\r\n }\r\n\r\n parseRowRange(row1, row2) {\r\n // const res = rowRange.match(/([$]?)([1-9][0-9]*):([$]?)([1-9][0-9]*)/);\r\n return {\r\n ref: {\r\n from: {\r\n col: null,\r\n row: Math.min(row1, row2),\r\n },\r\n to: {\r\n col: null,\r\n row: Math.max(row1, row2),\r\n }\r\n }\r\n\r\n }\r\n }\r\n\r\n\r\n _applyPrefix(prefixes, val, isArray) {\r\n if (this.isFormulaError(val))\r\n return val;\r\n return Prefix.unaryOp(prefixes, val, isArray);\r\n }\r\n\r\n async applyPrefixAsync(prefixes, value) {\r\n const {val, isArray} = this.extractRefValue(await value);\r\n return this._applyPrefix(prefixes, val, isArray);\r\n }\r\n\r\n /**\r\n * Apply + or - unary prefix.\r\n * @param {Array.} prefixes\r\n * @param {*} value\r\n * @return {*}\r\n */\r\n applyPrefix(prefixes, value) {\r\n // console.log('applyPrefix', prefixes, value);\r\n if (this.context.async) {\r\n return this.applyPrefixAsync(prefixes, value);\r\n } else {\r\n const {val, isArray} = this.extractRefValue(value);\r\n return this._applyPrefix(prefixes, val, isArray);\r\n }\r\n }\r\n\r\n _applyPostfix(val, isArray, postfix) {\r\n if (this.isFormulaError(val))\r\n return val;\r\n return Postfix.percentOp(val, postfix, isArray);\r\n }\r\n\r\n async applyPostfixAsync(value, postfix) {\r\n const {val, isArray} = this.extractRefValue(await value);\r\n return this._applyPostfix(val, isArray, postfix);\r\n }\r\n\r\n applyPostfix(value, postfix) {\r\n // console.log('applyPostfix', value, postfix);\r\n if (this.context.async) {\r\n return this.applyPostfixAsync(value, postfix);\r\n } else {\r\n const {val, isArray} = this.extractRefValue(value);\r\n return this._applyPostfix(val, isArray, postfix)\r\n }\r\n }\r\n\r\n _applyInfix(res1, infix, res2) {\r\n const val1 = res1.val, isArray1 = res1.isArray;\r\n const val2 = res2.val, isArray2 = res2.isArray;\r\n if (this.isFormulaError(val1))\r\n return val1;\r\n if (this.isFormulaError(val2))\r\n return val2;\r\n if (Operators.compareOp.includes(infix))\r\n return Infix.compareOp(val1, infix, val2, isArray1, isArray2);\r\n else if (Operators.concatOp.includes(infix))\r\n return Infix.concatOp(val1, infix, val2, isArray1, isArray2);\r\n else if (Operators.mathOp.includes(infix))\r\n return Infix.mathOp(val1, infix, val2, isArray1, isArray2);\r\n else\r\n throw new Error(`Unrecognized infix: ${infix}`);\r\n }\r\n\r\n async applyInfixAsync(value1, infix, value2) {\r\n const res1 = this.extractRefValue(await value1);\r\n const res2 = this.extractRefValue(await value2);\r\n return this._applyInfix(res1, infix, res2)\r\n }\r\n\r\n applyInfix(value1, infix, value2) {\r\n if (this.context.async) {\r\n return this.applyInfixAsync(value1, infix, value2)\r\n } else {\r\n const res1 = this.extractRefValue(value1);\r\n const res2 = this.extractRefValue(value2);\r\n return this._applyInfix(res1, infix, res2)\r\n }\r\n }\r\n\r\n applyIntersect(refs) {\r\n // console.log('applyIntersect', refs);\r\n if (this.isFormulaError(refs[0]))\r\n return refs[0];\r\n if (!refs[0].ref)\r\n throw Error(`Expecting a reference, but got ${refs[0]}.`);\r\n // a intersection will keep track of references, value won't be retrieved here.\r\n let maxRow, maxCol, minRow, minCol, sheet, res; // index start from 1\r\n // first time setup\r\n const ref = refs.shift().ref;\r\n sheet = ref.sheet;\r\n if (!ref.from) {\r\n // check whole row/col reference\r\n if (ref.row === undefined || ref.col === undefined) {\r\n throw Error('Cannot intersect the whole row or column.')\r\n }\r\n\r\n // cell ref\r\n maxRow = minRow = ref.row;\r\n maxCol = minCol = ref.col;\r\n } else {\r\n // range ref\r\n // update\r\n maxRow = Math.max(ref.from.row, ref.to.row);\r\n minRow = Math.min(ref.from.row, ref.to.row);\r\n maxCol = Math.max(ref.from.col, ref.to.col);\r\n minCol = Math.min(ref.from.col, ref.to.col);\r\n }\r\n\r\n let err;\r\n refs.forEach(ref => {\r\n if (this.isFormulaError(ref))\r\n return ref;\r\n ref = ref.ref;\r\n if (!ref) throw Error(`Expecting a reference, but got ${ref}.`);\r\n if (!ref.from) {\r\n if (ref.row === undefined || ref.col === undefined) {\r\n throw Error('Cannot intersect the whole row or column.')\r\n }\r\n // cell ref\r\n if (ref.row > maxRow || ref.row < minRow || ref.col > maxCol || ref.col < minCol\r\n || sheet !== ref.sheet) {\r\n err = FormulaError.NULL;\r\n }\r\n maxRow = minRow = ref.row;\r\n maxCol = minCol = ref.col;\r\n } else {\r\n // range ref\r\n const refMaxRow = Math.max(ref.from.row, ref.to.row);\r\n const refMinRow = Math.min(ref.from.row, ref.to.row);\r\n const refMaxCol = Math.max(ref.from.col, ref.to.col);\r\n const refMinCol = Math.min(ref.from.col, ref.to.col);\r\n if (refMinRow > maxRow || refMaxRow < minRow || refMinCol > maxCol || refMaxCol < minCol\r\n || sheet !== ref.sheet) {\r\n err = FormulaError.NULL;\r\n }\r\n // update\r\n maxRow = Math.min(maxRow, refMaxRow);\r\n minRow = Math.max(minRow, refMinRow);\r\n maxCol = Math.min(maxCol, refMaxCol);\r\n minCol = Math.max(minCol, refMinCol);\r\n }\r\n });\r\n if (err) return err;\r\n // check if the ref can be reduced to cell reference\r\n if (maxRow === minRow && maxCol === minCol) {\r\n res = {\r\n ref: {\r\n sheet,\r\n row: maxRow,\r\n col: maxCol\r\n }\r\n }\r\n } else {\r\n res = {\r\n ref: {\r\n sheet,\r\n from: {row: minRow, col: minCol},\r\n to: {row: maxRow, col: maxCol}\r\n }\r\n };\r\n }\r\n\r\n if (!res.ref.sheet)\r\n delete res.ref.sheet;\r\n return res;\r\n }\r\n\r\n applyUnion(refs) {\r\n const collection = new Collection();\r\n for (let i = 0; i < refs.length; i++) {\r\n if (this.isFormulaError(refs[i]))\r\n return refs[i];\r\n collection.add(this.extractRefValue(refs[i]).val, refs[i]);\r\n }\r\n\r\n // console.log('applyUnion', unions);\r\n return collection;\r\n }\r\n\r\n /**\r\n * Apply multiple references, e.g. A1:B3:C8:A:1:.....\r\n * @param refs\r\n // * @return {{ref: {from: {col: number, row: number}, to: {col: number, row: number}}}}\r\n */\r\n applyRange(refs) {\r\n let res, maxRow = -1, maxCol = -1, minRow = MAX_ROW + 1, minCol = MAX_COLUMN + 1;\r\n refs.forEach(ref => {\r\n if (this.isFormulaError(ref))\r\n return ref;\r\n // row ref is saved as number, parse the number to row ref here\r\n if (typeof ref === 'number') {\r\n ref = this.parseRow(ref);\r\n }\r\n ref = ref.ref;\r\n // check whole row/col reference\r\n if (ref.row === undefined) {\r\n minRow = 1;\r\n maxRow = MAX_ROW\r\n }\r\n if (ref.col === undefined) {\r\n minCol = 1;\r\n maxCol = MAX_COLUMN;\r\n }\r\n\r\n if (ref.row > maxRow)\r\n maxRow = ref.row;\r\n if (ref.row < minRow)\r\n minRow = ref.row;\r\n if (ref.col > maxCol)\r\n maxCol = ref.col;\r\n if (ref.col < minCol)\r\n minCol = ref.col;\r\n });\r\n if (maxRow === minRow && maxCol === minCol) {\r\n res = {\r\n ref: {\r\n row: maxRow,\r\n col: maxCol\r\n }\r\n }\r\n } else {\r\n res = {\r\n ref: {\r\n from: {row: minRow, col: minCol},\r\n to: {row: maxRow, col: maxCol}\r\n }\r\n };\r\n }\r\n return res;\r\n }\r\n\r\n /**\r\n * Throw away the refs, and retrieve the value.\r\n * @return {{val: *, isArray: boolean}}\r\n */\r\n extractRefValue(obj) {\r\n let res = obj, isArray = false;\r\n if (Array.isArray(res))\r\n isArray = true;\r\n if (obj.ref) {\r\n // can be number or array\r\n return {val: this.context.retrieveRef(obj), isArray};\r\n\r\n }\r\n return {val: res, isArray};\r\n }\r\n\r\n /**\r\n *\r\n * @param array\r\n * @return {Array}\r\n */\r\n toArray(array) {\r\n // TODO: check if array is valid\r\n // console.log('toArray', array);\r\n return array;\r\n }\r\n\r\n /**\r\n * @param {string} number\r\n * @return {number}\r\n */\r\n toNumber(number) {\r\n return Number(number);\r\n }\r\n\r\n /**\r\n * @param {string} string\r\n * @return {string}\r\n */\r\n toString(string) {\r\n return string.substring(1, string.length - 1) .replace(/\"\"/g, '\"');\r\n }\r\n\r\n /**\r\n * @param {string} bool\r\n * @return {boolean}\r\n */\r\n toBoolean(bool) {\r\n return bool === 'TRUE';\r\n }\r\n\r\n /**\r\n * Parse an error.\r\n * @param {string} error\r\n * @return {string}\r\n */\r\n toError(error) {\r\n return new FormulaError(error.toUpperCase());\r\n }\r\n\r\n isFormulaError(obj) {\r\n return obj instanceof FormulaError;\r\n }\r\n\r\n static formatChevrotainError(error, inputText) {\r\n let line, column, msg = '';\r\n // e.g. SUM(1))\r\n if (error instanceof NotAllInputParsedException) {\r\n line = error.token.startLine;\r\n column = error.token.startColumn;\r\n } else {\r\n line = error.previousToken.startLine;\r\n column = error.previousToken.startColumn + 1;\r\n }\r\n\r\n msg += '\\n' + inputText.split('\\n')[line - 1] + '\\n';\r\n msg += Array(column - 1).fill(' ').join('') + '^\\n';\r\n msg += `Error at position ${line}:${column}\\n` + error.message;\r\n error.errorLocation = {line, column};\r\n return FormulaError.ERROR(msg, error);\r\n }\r\n\r\n}\r\n\r\nmodule.exports = Utils;\r\n","const {FormulaParser} = require('./grammar/hooks');\r\nconst {DepParser} = require('./grammar/dependency/hooks');\r\nconst SSF = require('./ssf/ssf');\r\nconst FormulaError = require('./formulas/error');\r\n\r\n// const funs = new FormulaParser().supportedFunctions();\r\n// console.log('Supported:', funs.join(', '),\r\n// `\\nTotal: ${funs.length}/477, ${funs.length/477*100}% implemented.`);\r\n\r\n\r\nObject.assign(FormulaParser, {\r\n MAX_ROW: 1048576,\r\n MAX_COLUMN: 16384,\r\n SSF,\r\n DepParser,\r\n FormulaError, ...require('./formulas/helpers')\r\n});\r\nmodule.exports = FormulaParser;\r\n","// https://github.com/looker/ssf/blob/master/ssf.js\n/* ssf.js (C) 2013-present SheetJS -- http://sheetjs.com */\n\n/**\n * Spreadsheet formatter.\n * @type {{}}\n */\nclass SSF {\n}\n\n/**\n * The version of SSF.\n * @type {string}\n */\nSSF.version = '0.10.3';\n\nfunction _strrev(x) {\n let o = \"\", i = x.length - 1;\n while (i >= 0) o += x.charAt(i--);\n return o;\n}\n\nfunction fill(c, l) {\n let o = \"\";\n while (o.length < l) o += c;\n return o;\n}\n\nfunction pad0(v, d) {\n let t = \"\" + v;\n return t.length >= d ? t : fill('0', d - t.length) + t;\n}\n\nfunction pad_(v, d) {\n let t = \"\" + v;\n return t.length >= d ? t : fill(' ', d - t.length) + t;\n}\n\nfunction rpad_(v, d) {\n let t = \"\" + v;\n return t.length >= d ? t : t + fill(' ', d - t.length);\n}\n\nfunction pad0r1(v, d) {\n let t = \"\" + Math.round(v);\n return t.length >= d ? t : fill('0', d - t.length) + t;\n}\n\nfunction pad0r2(v, d) {\n let t = \"\" + v;\n return t.length >= d ? t : fill('0', d - t.length) + t;\n}\n\nconst p2_32 = Math.pow(2, 32);\n\nfunction pad0r(v, d) {\n if (v > p2_32 || v < -p2_32) return pad0r1(v, d);\n const i = Math.round(v);\n return pad0r2(i, d);\n}\n\nfunction isgeneral(s, i) {\n i = i || 0;\n return s.length >= 7 + i && (s.charCodeAt(i) | 32) === 103 && (s.charCodeAt(i + 1) | 32) === 101 && (s.charCodeAt(i + 2) | 32) === 110 && (s.charCodeAt(i + 3) | 32) === 101 && (s.charCodeAt(i + 4) | 32) === 114 && (s.charCodeAt(i + 5) | 32) === 97 && (s.charCodeAt(i + 6) | 32) === 108;\n}\n\nconst days = [\n ['Sun', 'Sunday'],\n ['Mon', 'Monday'],\n ['Tue', 'Tuesday'],\n ['Wed', 'Wednesday'],\n ['Thu', 'Thursday'],\n ['Fri', 'Friday'],\n ['Sat', 'Saturday']\n];\nconst months = [\n ['J', 'Jan', 'January'],\n ['F', 'Feb', 'February'],\n ['M', 'Mar', 'March'],\n ['A', 'Apr', 'April'],\n ['M', 'May', 'May'],\n ['J', 'Jun', 'June'],\n ['J', 'Jul', 'July'],\n ['A', 'Aug', 'August'],\n ['S', 'Sep', 'September'],\n ['O', 'Oct', 'October'],\n ['N', 'Nov', 'November'],\n ['D', 'Dec', 'December']\n];\n\nfunction init_table(t) {\n t[0] = 'General';\n t[1] = '0';\n t[2] = '0.00';\n t[3] = '#,##0';\n t[4] = '#,##0.00';\n t[9] = '0%';\n t[10] = '0.00%';\n t[11] = '0.00E+00';\n t[12] = '# ?/?';\n t[13] = '# ??/??';\n t[14] = 'm/d/yy';\n t[15] = 'd-mmm-yy';\n t[16] = 'd-mmm';\n t[17] = 'mmm-yy';\n t[18] = 'h:mm AM/PM';\n t[19] = 'h:mm:ss AM/PM';\n t[20] = 'h:mm';\n t[21] = 'h:mm:ss';\n t[22] = 'm/d/yy h:mm';\n t[37] = '#,##0 ;(#,##0)';\n t[38] = '#,##0 ;[Red](#,##0)';\n t[39] = '#,##0.00;(#,##0.00)';\n t[40] = '#,##0.00;[Red](#,##0.00)';\n t[45] = 'mm:ss';\n t[46] = '[h]:mm:ss';\n t[47] = 'mmss.0';\n t[48] = '##0.0E+0';\n t[49] = '@';\n t[56] = '\"上午/下午 \"hh\"時\"mm\"分\"ss\"秒 \"';\n t[65535] = 'General';\n}\n\nconst table_fmt = {};\ninit_table(table_fmt);\n\nfunction frac(x, D, mixed) {\n const sgn = x < 0 ? -1 : 1;\n let B = x * sgn;\n let P_2 = 0, P_1 = 1, P = 0;\n let Q_2 = 1, Q_1 = 0, Q = 0;\n let A = Math.floor(B);\n while (Q_1 < D) {\n A = Math.floor(B);\n P = A * P_1 + P_2;\n Q = A * Q_1 + Q_2;\n if ((B - A) < 0.00000005) break;\n B = 1 / (B - A);\n P_2 = P_1;\n P_1 = P;\n Q_2 = Q_1;\n Q_1 = Q;\n }\n if (Q > D) {\n if (Q_1 > D) {\n Q = Q_2;\n P = P_2;\n } else {\n Q = Q_1;\n P = P_1;\n }\n }\n if (!mixed) return [0, sgn * P, Q];\n const q = Math.floor(sgn * P / Q);\n return [q, sgn * P - q * Q, Q];\n}\n\nfunction parse_date_code(v, opts, b2) {\n if (v > 2958465 || v < 0) return null;\n let date = (v | 0), time = Math.floor(86400 * (v - date)), dow = 0;\n let dout = [];\n const out = {D: date, T: time, u: 86400 * (v - date) - time, y: 0, m: 0, d: 0, H: 0, M: 0, S: 0, q: 0};\n if (Math.abs(out.u) < 1e-6) out.u = 0;\n if (opts && opts.date1904) date += 1462;\n if (out.u > 0.9999) {\n out.u = 0;\n if (++time === 86400) {\n out.T = time = 0;\n ++date;\n ++out.D;\n }\n }\n if (date === 60) {\n dout = b2 ? [1317, 10, 29] : [1900, 2, 29];\n dow = 3;\n } else if (date === 0) {\n dout = b2 ? [1317, 8, 29] : [1900, 1, 0];\n dow = 6;\n } else {\n if (date > 60) --date;\n /* 1 = Jan 1 1900 in Gregorian */\n const d = new Date(1900, 0, 1);\n d.setDate(d.getDate() + date - 1);\n dout = [d.getFullYear(), d.getMonth() + 1, d.getDate()];\n dow = d.getDay();\n if (date < 60) dow = (dow + 6) % 7;\n if (b2) dow = fix_hijri(d, dout);\n }\n out.y = dout[0];\n out.m = dout[1];\n out.d = dout[2];\n out.S = time % 60;\n time = Math.floor(time / 60);\n out.M = time % 60;\n time = Math.floor(time / 60);\n out.H = time;\n out.q = dow;\n return out;\n}\n\nSSF.parse_date_code = parse_date_code;\nconst basedate = new Date(1899, 11, 31, 0, 0, 0);\nconst dnthresh = basedate.getTime();\nconst base1904 = new Date(1900, 2, 1, 0, 0, 0);\n\nfunction datenum_local(v, date1904) {\n let epoch = v.getTime();\n if (date1904) epoch -= 1461 * 24 * 60 * 60 * 1000;\n else if (v >= base1904) epoch += 24 * 60 * 60 * 1000;\n return (epoch - (dnthresh + (v.getTimezoneOffset() - basedate.getTimezoneOffset()) * 60000)) / (24 * 60 * 60 * 1000);\n}\n\nfunction general_fmt_int(v) {\n return v.toString(10);\n}\n\nSSF._general_int = general_fmt_int;\nconst general_fmt_num = (function make_general_fmt_num() {\n const gnr1 = /\\.(\\d*[1-9])0+$/, gnr2 = /\\.0*$/, gnr4 = /\\.(\\d*[1-9])0+/, gnr5 = /\\.0*[Ee]/,\n gnr6 = /(E[+-])(\\d)$/;\n\n function gfn2(v) {\n const w = (v < 0 ? 12 : 11);\n let o = gfn5(v.toFixed(12));\n if (o.length <= w) return o;\n o = v.toPrecision(10);\n if (o.length <= w) return o;\n return v.toExponential(5);\n }\n\n function gfn3(v) {\n let o = v.toFixed(11).replace(gnr1, \".$1\");\n if (o.length > (v < 0 ? 12 : 11)) o = v.toPrecision(6);\n return o;\n }\n\n function gfn4(o) {\n for (let i = 0; i !== o.length; ++i) if ((o.charCodeAt(i) | 0x20) === 101) return o.replace(gnr4, \".$1\").replace(gnr5, \"E\").replace(\"e\", \"E\").replace(gnr6, \"$10$2\");\n return o;\n }\n\n function gfn5(o) {\n return o.indexOf(\".\") > -1 ? o.replace(gnr2, \"\").replace(gnr1, \".$1\") : o;\n }\n\n return function general_fmt_num(v) {\n let V = Math.floor(Math.log(Math.abs(v)) * Math.LOG10E), o;\n if (V >= -4 && V <= -1) o = v.toPrecision(10 + V);\n else if (Math.abs(V) <= 9) o = gfn2(v);\n else if (V === 10) o = v.toFixed(10).substr(0, 12);\n else o = gfn3(v);\n return gfn5(gfn4(o));\n };\n})();\nSSF._general_num = general_fmt_num;\n\nfunction general_fmt(v, opts) {\n switch (typeof v) {\n case 'string':\n return v;\n case 'boolean':\n return v ? \"TRUE\" : \"FALSE\";\n case 'number':\n return (v | 0) === v ? general_fmt_int(v) : general_fmt_num(v);\n case 'undefined':\n return \"\";\n case 'object':\n if (v == null) return \"\";\n if (v instanceof Date) return format(14, datenum_local(v, opts && opts.date1904), opts);\n }\n throw new Error(\"unsupported value in General format: \" + v);\n}\n\nSSF._general = general_fmt;\n\nfunction fix_hijri() {\n return 0;\n}\n\n/*jshint -W086 */\nfunction write_date(type, fmt, val, ss0) {\n let o = \"\", ss = 0, tt = 0, y = val.y, out, outl = 0;\n switch (type) {\n case 98: /* 'b' buddhist year */\n y = val.y + 543;\n /* falls through */\n case 121: /* 'y' year */\n switch (fmt.length) {\n case 1:\n case 2:\n out = y % 100;\n outl = 2;\n break;\n default:\n out = y % 10000;\n outl = 4;\n break;\n }\n break;\n case 109: /* 'm' month */\n switch (fmt.length) {\n case 1:\n case 2:\n out = val.m;\n outl = fmt.length;\n break;\n case 3:\n return months[val.m - 1][1];\n case 5:\n return months[val.m - 1][0];\n default:\n return months[val.m - 1][2];\n }\n break;\n case 100: /* 'd' day */\n switch (fmt.length) {\n case 1:\n case 2:\n out = val.d;\n outl = fmt.length;\n break;\n case 3:\n return days[val.q][0];\n default:\n return days[val.q][1];\n }\n break;\n case 104: /* 'h' 12-hour */\n switch (fmt.length) {\n case 1:\n case 2:\n out = 1 + (val.H + 11) % 12;\n outl = fmt.length;\n break;\n default:\n throw 'bad hour format: ' + fmt;\n }\n break;\n case 72: /* 'H' 24-hour */\n switch (fmt.length) {\n case 1:\n case 2:\n out = val.H;\n outl = fmt.length;\n break;\n default:\n throw 'bad hour format: ' + fmt;\n }\n break;\n case 77: /* 'M' minutes */\n switch (fmt.length) {\n case 1:\n case 2:\n out = val.M;\n outl = fmt.length;\n break;\n default:\n throw 'bad minute format: ' + fmt;\n }\n break;\n case 115: /* 's' seconds */\n if (fmt !== 's' && fmt !== 'ss' && fmt !== '.0' && fmt !== '.00' && fmt !== '.000') throw 'bad second format: ' + fmt;\n if (val.u === 0 && (fmt === \"s\" || fmt === \"ss\")) return pad0(val.S, fmt.length);\n if (ss0 >= 2) tt = ss0 === 3 ? 1000 : 100;\n else tt = ss0 === 1 ? 10 : 1;\n ss = Math.round((tt) * (val.S + val.u));\n if (ss >= 60 * tt) ss = 0;\n if (fmt === 's') return ss === 0 ? \"0\" : \"\" + ss / tt;\n o = pad0(ss, 2 + ss0);\n if (fmt === 'ss') return o.substr(0, 2);\n return \".\" + o.substr(2, fmt.length - 1);\n case 90: /* 'Z' absolute time */\n switch (fmt) {\n case '[h]':\n case '[hh]':\n out = val.D * 24 + val.H;\n break;\n case '[m]':\n case '[mm]':\n out = (val.D * 24 + val.H) * 60 + val.M;\n break;\n case '[s]':\n case '[ss]':\n out = ((val.D * 24 + val.H) * 60 + val.M) * 60 + Math.round(val.S + val.u);\n break;\n default:\n throw 'bad abstime format: ' + fmt;\n }\n outl = fmt.length === 3 ? 1 : 2;\n break;\n case 101: /* 'e' era */\n out = y;\n outl = 1;\n }\n if (outl > 0) return pad0(out, outl); else return \"\";\n}\n\n/*jshint +W086 */\nfunction commaify(s) {\n const w = 3;\n if (s.length <= w) return s;\n let j = (s.length % w), o = s.substr(0, j);\n for (; j !== s.length; j += w) o += (o.length > 0 ? \",\" : \"\") + s.substr(j, w);\n return o;\n}\n\nconst write_num = (function make_write_num() {\n const pct1 = /%/g;\n\n function write_num_pct(type, fmt, val) {\n const sfmt = fmt.replace(pct1, \"\"), mul = fmt.length - sfmt.length;\n return write_num(type, sfmt, val * Math.pow(10, 2 * mul)) + fill(\"%\", mul);\n }\n\n function write_num_cm(type, fmt, val) {\n let idx = fmt.length - 1;\n while (fmt.charCodeAt(idx - 1) === 44) --idx;\n return write_num(type, fmt.substr(0, idx), val / Math.pow(10, 3 * (fmt.length - idx)));\n }\n\n function write_num_exp(fmt, val) {\n let o;\n let idx = fmt.indexOf(\"E\") - fmt.indexOf(\".\") - 1;\n if (fmt.match(/^#+0.0E\\+0$/)) {\n if (val === 0) return \"0.0E+0\";\n else if (val < 0) return \"-\" + write_num_exp(fmt, -val);\n let period = fmt.indexOf(\".\");\n if (period === -1) period = fmt.indexOf('E');\n let ee = Math.floor(Math.log(val) * Math.LOG10E) % period;\n if (ee < 0) ee += period;\n o = (val / Math.pow(10, ee)).toPrecision(idx + 1 + (period + ee) % period);\n if (o.indexOf(\"e\") === -1) {\n const fakee = Math.floor(Math.log(val) * Math.LOG10E);\n if (o.indexOf(\".\") === -1) o = o.charAt(0) + \".\" + o.substr(1) + \"E+\" + (fakee - o.length + ee);\n else o += \"E+\" + (fakee - ee);\n while (o.substr(0, 2) === \"0.\") {\n o = o.charAt(0) + o.substr(2, period) + \".\" + o.substr(2 + period);\n o = o.replace(/^0+([1-9])/, \"$1\").replace(/^0+\\./, \"0.\");\n }\n o = o.replace(/\\+-/, \"-\");\n }\n o = o.replace(/^([+-]?)(\\d*)\\.(\\d*)[Ee]/, function ($$, $1, $2, $3) {\n return $1 + $2 + $3.substr(0, (period + ee) % period) + \".\" + $3.substr(ee) + \"E\";\n });\n } else o = val.toExponential(idx);\n if (fmt.match(/E\\+00$/) && o.match(/e[+-]\\d$/)) o = o.substr(0, o.length - 1) + \"0\" + o.charAt(o.length - 1);\n if (fmt.match(/E\\-/) && o.match(/e\\+/)) o = o.replace(/e\\+/, \"e\");\n return o.replace(\"e\", \"E\");\n }\n\n const frac1 = /# (\\?+)( ?)\\/( ?)(\\d+)/;\n\n function write_num_f1(r, aval, sign) {\n const den = parseInt(r[4], 10), rr = Math.round(aval * den), base = Math.floor(rr / den);\n let myn = (rr - base * den), myd = den;\n return sign + (base === 0 ? \"\" : \"\" + base) + \" \" + (myn === 0 ? fill(\" \", r[1].length + 1 + r[4].length) : pad_(myn, r[1].length) + r[2] + \"/\" + r[3] + pad0(myd, r[4].length));\n }\n\n function write_num_f2(r, aval, sign) {\n return sign + (aval === 0 ? \"\" : \"\" + aval) + fill(\" \", r[1].length + 2 + r[4].length);\n }\n\n const dec1 = /^#*0*\\.([0#]+)/;\n const closeparen = /\\).*[0#]/;\n const phone = /\\(###\\) ###\\\\?-####/;\n\n function hashq(str) {\n let o = \"\", cc;\n for (let i = 0; i !== str.length; ++i) switch ((cc = str.charCodeAt(i))) {\n case 35:\n break;\n case 63:\n o += \" \";\n break;\n case 48:\n o += \"0\";\n break;\n default:\n o += String.fromCharCode(cc);\n }\n return o;\n }\n\n function rnd(val, d) {\n const dd = Math.pow(10, d);\n return \"\" + (Math.round(val * dd) / dd);\n }\n\n function dec(val, d) {\n if (d < ('' + Math.round((val - Math.floor(val)) * Math.pow(10, d))).length) {\n return 0;\n }\n return Math.round((val - Math.floor(val)) * Math.pow(10, d));\n }\n\n function carry(val, d) {\n if (d < ('' + Math.round((val - Math.floor(val)) * Math.pow(10, d))).length) {\n return 1;\n }\n return 0;\n }\n\n function flr(val) {\n if (val < 2147483647 && val > -2147483648) return \"\" + (val >= 0 ? (val | 0) : (val - 1 | 0));\n return \"\" + Math.floor(val);\n }\n\n function write_num_flt(type, fmt, val) {\n if (type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {\n const ffmt = fmt.replace(/\\( */, \"\").replace(/ \\)/, \"\").replace(/\\)/, \"\");\n if (val >= 0) return write_num_flt('n', ffmt, val);\n return '(' + write_num_flt('n', ffmt, -val) + ')';\n }\n if (fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm(type, fmt, val);\n if (fmt.indexOf('%') !== -1) return write_num_pct(type, fmt, val);\n if (fmt.indexOf('E') !== -1) return write_num_exp(fmt, val);\n if (fmt.charCodeAt(0) === 36) return \"$\" + write_num_flt(type, fmt.substr(fmt.charAt(1) == ' ' ? 2 : 1), val);\n let o;\n let r, ri, ff, aval = Math.abs(val), sign = val < 0 ? \"-\" : \"\";\n if (fmt.match(/^00+$/)) return sign + pad0r(aval, fmt.length);\n if (fmt.match(/^[#?]+$/)) {\n o = pad0r(val, 0);\n if (o === \"0\") o = \"\";\n return o.length > fmt.length ? o : hashq(fmt.substr(0, fmt.length - o.length)) + o;\n }\n if ((r = fmt.match(frac1))) return write_num_f1(r, aval, sign);\n if (fmt.match(/^#+0+$/)) return sign + pad0r(aval, fmt.length - fmt.indexOf(\"0\"));\n if ((r = fmt.match(dec1))) {\n o = rnd(val, r[1].length).replace(/^([^\\.]+)$/, \"$1.\" + hashq(r[1])).replace(/\\.$/, \".\" + hashq(r[1])).replace(/\\.(\\d*)$/, function ($$, $1) {\n return \".\" + $1 + fill(\"0\", hashq(r[1]).length - $1.length);\n });\n return fmt.indexOf(\"0.\") !== -1 ? o : o.replace(/^0\\./, \".\");\n }\n fmt = fmt.replace(/^#+([0.])/, \"$1\");\n if ((r = fmt.match(/^(0*)\\.(#*)$/))) {\n return sign + rnd(aval, r[2].length).replace(/\\.(\\d*[1-9])0*$/, \".$1\").replace(/^(-?\\d*)$/, \"$1.\").replace(/^0\\./, r[1].length ? \"0.\" : \".\");\n }\n if ((r = fmt.match(/^#{1,3},##0(\\.?)$/))) return sign + commaify(pad0r(aval, 0));\n if ((r = fmt.match(/^#,##0\\.([#0]*0)$/))) {\n return val < 0 ? \"-\" + write_num_flt(type, fmt, -val) : commaify(\"\" + (Math.floor(val) + carry(val, r[1].length))) + \".\" + pad0(dec(val, r[1].length), r[1].length);\n }\n if ((r = fmt.match(/^#,#*,#0/))) return write_num_flt(type, fmt.replace(/^#,#*,/, \"\"), val);\n if ((r = fmt.match(/^([0#]+)(\\\\?-([0#]+))+$/))) {\n o = _strrev(write_num_flt(type, fmt.replace(/[\\\\-]/g, \"\"), val));\n ri = 0;\n return _strrev(_strrev(fmt.replace(/\\\\/g, \"\")).replace(/[0#]/g, function (x) {\n return ri < o.length ? o.charAt(ri++) : x === '0' ? '0' : \"\";\n }));\n }\n if (fmt.match(phone)) {\n o = write_num_flt(type, \"##########\", val);\n return \"(\" + o.substr(0, 3) + \") \" + o.substr(3, 3) + \"-\" + o.substr(6);\n }\n let oa = \"\";\n if ((r = fmt.match(/^([#0?]+)( ?)\\/( ?)([#0?]+)/))) {\n ri = Math.min(r[4].length, 7);\n ff = frac(aval, Math.pow(10, ri) - 1, false);\n o = \"\" + sign;\n oa = write_num(\"n\", r[1], ff[1]);\n if (oa.charAt(oa.length - 1) === \" \") oa = oa.substr(0, oa.length - 1) + \"0\";\n o += oa + r[2] + \"/\" + r[3];\n oa = rpad_(ff[2], ri);\n if (oa.length < r[4].length) oa = hashq(r[4].substr(r[4].length - oa.length)) + oa;\n o += oa;\n return o;\n }\n if ((r = fmt.match(/^# ([#0?]+)( ?)\\/( ?)([#0?]+)/))) {\n ri = Math.min(Math.max(r[1].length, r[4].length), 7);\n ff = frac(aval, Math.pow(10, ri) - 1, true);\n return sign + (ff[0] || (ff[1] ? \"\" : \"0\")) + \" \" + (ff[1] ? pad_(ff[1], ri) + r[2] + \"/\" + r[3] + rpad_(ff[2], ri) : fill(\" \", 2 * ri + 1 + r[2].length + r[3].length));\n }\n if ((r = fmt.match(/^[#0?]+$/))) {\n o = pad0r(val, 0);\n if (fmt.length <= o.length) return o;\n return hashq(fmt.substr(0, fmt.length - o.length)) + o;\n }\n if ((r = fmt.match(/^([#0?]+)\\.([#0]+)$/))) {\n o = \"\" + val.toFixed(Math.min(r[2].length, 10)).replace(/([^0])0+$/, \"$1\");\n ri = o.indexOf(\".\");\n const lres = fmt.indexOf(\".\") - ri, rres = fmt.length - o.length - lres;\n return hashq(fmt.substr(0, lres) + o + fmt.substr(fmt.length - rres));\n }\n if ((r = fmt.match(/^00,000\\.([#0]*0)$/))) {\n ri = dec(val, r[1].length);\n return val < 0 ? \"-\" + write_num_flt(type, fmt, -val) : commaify(flr(val)).replace(/^\\d,\\d{3}$/, \"0$&\").replace(/^\\d*$/, function ($$) {\n return \"00,\" + ($$.length < 3 ? pad0(0, 3 - $$.length) : \"\") + $$;\n }) + \".\" + pad0(ri, r[1].length);\n }\n switch (fmt) {\n case \"###,##0.00\":\n return write_num_flt(type, \"#,##0.00\", val);\n case \"###,###\":\n case \"##,###\":\n case \"#,###\":\n const x = commaify(pad0r(aval, 0));\n return x !== \"0\" ? sign + x : \"\";\n case \"###,###.00\":\n return write_num_flt(type, \"###,##0.00\", val).replace(/^0\\./, \".\");\n case \"#,###.00\":\n return write_num_flt(type, \"#,##0.00\", val).replace(/^0\\./, \".\");\n default:\n }\n throw new Error(\"unsupported format |\" + fmt + \"|\");\n }\n\n function write_num_cm2(type, fmt, val) {\n let idx = fmt.length - 1;\n while (fmt.charCodeAt(idx - 1) === 44) --idx;\n return write_num(type, fmt.substr(0, idx), val / Math.pow(10, 3 * (fmt.length - idx)));\n }\n\n function write_num_pct2(type, fmt, val) {\n const sfmt = fmt.replace(pct1, \"\"), mul = fmt.length - sfmt.length;\n return write_num(type, sfmt, val * Math.pow(10, 2 * mul)) + fill(\"%\", mul);\n }\n\n function write_num_exp2(fmt, val) {\n let o;\n let idx = fmt.indexOf(\"E\") - fmt.indexOf(\".\") - 1;\n if (fmt.match(/^#+0.0E\\+0$/)) {\n if (val === 0) return \"0.0E+0\";\n else if (val < 0) return \"-\" + write_num_exp2(fmt, -val);\n let period = fmt.indexOf(\".\");\n if (period === -1) period = fmt.indexOf('E');\n let ee = Math.floor(Math.log(val) * Math.LOG10E) % period;\n if (ee < 0) ee += period;\n o = (val / Math.pow(10, ee)).toPrecision(idx + 1 + (period + ee) % period);\n if (!o.match(/[Ee]/)) {\n const fakee = Math.floor(Math.log(val) * Math.LOG10E);\n if (o.indexOf(\".\") === -1) o = o.charAt(0) + \".\" + o.substr(1) + \"E+\" + (fakee - o.length + ee);\n else o += \"E+\" + (fakee - ee);\n o = o.replace(/\\+-/, \"-\");\n }\n o = o.replace(/^([+-]?)(\\d*)\\.(\\d*)[Ee]/, function ($$, $1, $2, $3) {\n return $1 + $2 + $3.substr(0, (period + ee) % period) + \".\" + $3.substr(ee) + \"E\";\n });\n } else o = val.toExponential(idx);\n if (fmt.match(/E\\+00$/) && o.match(/e[+-]\\d$/)) o = o.substr(0, o.length - 1) + \"0\" + o.charAt(o.length - 1);\n if (fmt.match(/E\\-/) && o.match(/e\\+/)) o = o.replace(/e\\+/, \"e\");\n return o.replace(\"e\", \"E\");\n }\n\n function write_num_int(type, fmt, val) {\n if (type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {\n const ffmt = fmt.replace(/\\( */, \"\").replace(/ \\)/, \"\").replace(/\\)/, \"\");\n if (val >= 0) return write_num_int('n', ffmt, val);\n return '(' + write_num_int('n', ffmt, -val) + ')';\n }\n if (fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm2(type, fmt, val);\n if (fmt.indexOf('%') !== -1) return write_num_pct2(type, fmt, val);\n if (fmt.indexOf('E') !== -1) return write_num_exp2(fmt, val);\n if (fmt.charCodeAt(0) === 36) return \"$\" + write_num_int(type, fmt.substr(fmt.charAt(1) == ' ' ? 2 : 1), val);\n let o;\n let r, ri, ff, aval = Math.abs(val), sign = val < 0 ? \"-\" : \"\";\n if (fmt.match(/^00+$/)) return sign + pad0(aval, fmt.length);\n if (fmt.match(/^[#?]+$/)) {\n o = (\"\" + val);\n if (val === 0) o = \"\";\n return o.length > fmt.length ? o : hashq(fmt.substr(0, fmt.length - o.length)) + o;\n }\n if ((r = fmt.match(frac1))) return write_num_f2(r, aval, sign);\n if (fmt.match(/^#+0+$/)) return sign + pad0(aval, fmt.length - fmt.indexOf(\"0\"));\n if ((r = fmt.match(dec1))) {\n o = (\"\" + val).replace(/^([^\\.]+)$/, \"$1.\" + hashq(r[1])).replace(/\\.$/, \".\" + hashq(r[1]));\n o = o.replace(/\\.(\\d*)$/, function ($$, $1) {\n return \".\" + $1 + fill(\"0\", hashq(r[1]).length - $1.length);\n });\n return fmt.indexOf(\"0.\") !== -1 ? o : o.replace(/^0\\./, \".\");\n }\n fmt = fmt.replace(/^#+([0.])/, \"$1\");\n if ((r = fmt.match(/^(0*)\\.(#*)$/))) {\n return sign + (\"\" + aval).replace(/\\.(\\d*[1-9])0*$/, \".$1\").replace(/^(-?\\d*)$/, \"$1.\").replace(/^0\\./, r[1].length ? \"0.\" : \".\");\n }\n if ((r = fmt.match(/^#{1,3},##0(\\.?)$/))) return sign + commaify((\"\" + aval));\n if ((r = fmt.match(/^#,##0\\.([#0]*0)$/))) {\n return val < 0 ? \"-\" + write_num_int(type, fmt, -val) : commaify((\"\" + val)) + \".\" + fill('0', r[1].length);\n }\n if ((r = fmt.match(/^#,#*,#0/))) return write_num_int(type, fmt.replace(/^#,#*,/, \"\"), val);\n if ((r = fmt.match(/^([0#]+)(\\\\?-([0#]+))+$/))) {\n o = _strrev(write_num_int(type, fmt.replace(/[\\\\-]/g, \"\"), val));\n ri = 0;\n return _strrev(_strrev(fmt.replace(/\\\\/g, \"\")).replace(/[0#]/g, function (x) {\n return ri < o.length ? o.charAt(ri++) : x === '0' ? '0' : \"\";\n }));\n }\n if (fmt.match(phone)) {\n o = write_num_int(type, \"##########\", val);\n return \"(\" + o.substr(0, 3) + \") \" + o.substr(3, 3) + \"-\" + o.substr(6);\n }\n let oa = \"\";\n if ((r = fmt.match(/^([#0?]+)( ?)\\/( ?)([#0?]+)/))) {\n ri = Math.min(r[4].length, 7);\n ff = frac(aval, Math.pow(10, ri) - 1, false);\n o = \"\" + sign;\n oa = write_num(\"n\", r[1], ff[1]);\n if (oa.charAt(oa.length - 1) == \" \") oa = oa.substr(0, oa.length - 1) + \"0\";\n o += oa + r[2] + \"/\" + r[3];\n oa = rpad_(ff[2], ri);\n if (oa.length < r[4].length) oa = hashq(r[4].substr(r[4].length - oa.length)) + oa;\n o += oa;\n return o;\n }\n if ((r = fmt.match(/^# ([#0?]+)( ?)\\/( ?)([#0?]+)/))) {\n ri = Math.min(Math.max(r[1].length, r[4].length), 7);\n ff = frac(aval, Math.pow(10, ri) - 1, true);\n return sign + (ff[0] || (ff[1] ? \"\" : \"0\")) + \" \" + (ff[1] ? pad_(ff[1], ri) + r[2] + \"/\" + r[3] + rpad_(ff[2], ri) : fill(\" \", 2 * ri + 1 + r[2].length + r[3].length));\n }\n if ((r = fmt.match(/^[#0?]+$/))) {\n o = \"\" + val;\n if (fmt.length <= o.length) return o;\n return hashq(fmt.substr(0, fmt.length - o.length)) + o;\n }\n if ((r = fmt.match(/^([#0]+)\\.([#0]+)$/))) {\n o = \"\" + val.toFixed(Math.min(r[2].length, 10)).replace(/([^0])0+$/, \"$1\");\n ri = o.indexOf(\".\");\n let lres = fmt.indexOf(\".\") - ri, rres = fmt.length - o.length - lres;\n return hashq(fmt.substr(0, lres) + o + fmt.substr(fmt.length - rres));\n }\n if ((r = fmt.match(/^00,000\\.([#0]*0)$/))) {\n return val < 0 ? \"-\" + write_num_int(type, fmt, -val) : commaify(\"\" + val).replace(/^\\d,\\d{3}$/, \"0$&\").replace(/^\\d*$/, function ($$) {\n return \"00,\" + ($$.length < 3 ? pad0(0, 3 - $$.length) : \"\") + $$;\n }) + \".\" + pad0(0, r[1].length);\n }\n switch (fmt) {\n case \"###,###\":\n case \"##,###\":\n case \"#,###\":\n const x = commaify(\"\" + aval);\n return x !== \"0\" ? sign + x : \"\";\n default:\n if (fmt.match(/\\.[0#?]*$/)) return write_num_int(type, fmt.slice(0, fmt.lastIndexOf(\".\")), val) + hashq(fmt.slice(fmt.lastIndexOf(\".\")));\n }\n throw new Error(\"unsupported format |\" + fmt + \"|\");\n }\n\n return function write_num(type, fmt, val) {\n return (val | 0) === val ? write_num_int(type, fmt, val) : write_num_flt(type, fmt, val);\n };\n})();\n\nfunction split_fmt(fmt) {\n const out = [];\n let in_str = false, j = 0;\n for (let i = 0; i < fmt.length; ++i) switch ((/*cc=*/fmt.charCodeAt(i))) {\n case 34: /* '\"' */\n in_str = !in_str;\n break;\n case 95:\n case 42:\n case 92: /* '_' '*' '\\\\' */\n ++i;\n break;\n case 59: /* ';' */\n out[out.length] = fmt.substr(j, i - j);\n j = i + 1;\n }\n out[out.length] = fmt.substr(j);\n if (in_str === true) throw new Error(\"Format |\" + fmt + \"| unterminated string \");\n return out;\n}\n\nSSF._split = split_fmt;\nconst abstime = /\\[[HhMmSs]*\\]/;\n\nfunction fmt_is_date(fmt) {\n let i = 0, /*cc = 0,*/ c = \"\", o = \"\";\n while (i < fmt.length) {\n switch ((c = fmt.charAt(i))) {\n case 'G':\n if (isgeneral(fmt, i)) i += 6;\n i++;\n break;\n case '\"':\n for (; (/*cc=*/fmt.charCodeAt(++i)) !== 34 && i < fmt.length;) ++i;\n ++i;\n break;\n case '\\\\':\n i += 2;\n break;\n case '_':\n i += 2;\n break;\n case '@':\n ++i;\n break;\n case 'B':\n case 'b':\n if (fmt.charAt(i + 1) === \"1\" || fmt.charAt(i + 1) === \"2\") return true;\n /* falls through */\n case 'M':\n case 'D':\n case 'Y':\n case 'H':\n case 'S':\n case 'E':\n /* falls through */\n case 'm':\n case 'd':\n case 'y':\n case 'h':\n case 's':\n case 'e':\n case 'g':\n return true;\n case 'A':\n case 'a':\n if (fmt.substr(i, 3).toUpperCase() === \"A/P\") return true;\n if (fmt.substr(i, 5).toUpperCase() === \"AM/PM\") return true;\n ++i;\n break;\n case '[':\n o = c;\n while (fmt.charAt(i++) !== ']' && i < fmt.length) o += fmt.charAt(i);\n if (o.match(abstime)) return true;\n break;\n case '.':\n /* falls through */\n case '0':\n case '#':\n while (i < fmt.length && (\"0#?.,E+-%\".indexOf(c = fmt.charAt(++i)) > -1 || (c == '\\\\' && fmt.charAt(i + 1) == \"-\" && \"0#\".indexOf(fmt.charAt(i + 2)) > -1))) {/* empty */\n }\n break;\n case '?':\n while (fmt.charAt(++i) === c) {/* empty */\n }\n break;\n case '*':\n ++i;\n if (fmt.charAt(i) === ' ' || fmt.charAt(i) === '*') ++i;\n break;\n case '(':\n case ')':\n ++i;\n break;\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n while (i < fmt.length && \"0123456789\".indexOf(fmt.charAt(++i)) > -1) {/* empty */\n }\n break;\n case ' ':\n ++i;\n break;\n default:\n ++i;\n break;\n }\n }\n return false;\n}\n\nSSF.is_date = fmt_is_date;\n\nfunction eval_fmt(fmt, v, opts, flen) {\n let out = [], o = \"\", i = 0, c = \"\", lst = 't', dt, j, cc;\n let hr = 'H';\n /* Tokenize */\n while (i < fmt.length) {\n switch ((c = fmt.charAt(i))) {\n case 'G': /* General */\n if (!isgeneral(fmt, i)) throw new Error('unrecognized character ' + c + ' in ' + fmt);\n out[out.length] = {t: 'G', v: 'General'};\n i += 7;\n break;\n case '\"': /* Literal text */\n for (o = \"\"; (cc = fmt.charCodeAt(++i)) !== 34 && i < fmt.length;) o += String.fromCharCode(cc);\n out[out.length] = {t: 't', v: o};\n ++i;\n break;\n case '\\\\':\n const w = fmt.charAt(++i), t = (w === \"(\" || w === \")\") ? w : 't';\n out[out.length] = {t: t, v: w};\n ++i;\n break;\n case '_':\n out[out.length] = {t: 't', v: \" \"};\n i += 2;\n break;\n case '@': /* Text Placeholder */\n out[out.length] = {t: 'T', v: v};\n ++i;\n break;\n case 'B':\n case 'b':\n if (fmt.charAt(i + 1) === \"1\" || fmt.charAt(i + 1) === \"2\") {\n if (dt == null) {\n dt = parse_date_code(v, opts, fmt.charAt(i + 1) === \"2\");\n if (dt == null) return \"\";\n }\n out[out.length] = {t: 'X', v: fmt.substr(i, 2)};\n lst = c;\n i += 2;\n break;\n }\n /* falls through */\n case 'M':\n case 'D':\n case 'Y':\n case 'H':\n case 'S':\n case 'E':\n c = c.toLowerCase();\n /* falls through */\n case 'm':\n case 'd':\n case 'y':\n case 'h':\n case 's':\n case 'e':\n case 'g':\n if (v < 0) return \"\";\n if (dt == null) {\n dt = parse_date_code(v, opts);\n if (dt == null) return \"\";\n }\n o = c;\n while (++i < fmt.length && fmt.charAt(i).toLowerCase() === c) o += c;\n if (c === 'm' && lst.toLowerCase() === 'h') c = 'M';\n if (c === 'h') c = hr;\n out[out.length] = {t: c, v: o};\n lst = c;\n break;\n case 'A':\n case 'a':\n const q = {t: c, v: c};\n if (dt == null) dt = parse_date_code(v, opts);\n if (fmt.substr(i, 3).toUpperCase() === \"A/P\") {\n if (dt != null) q.v = dt.H >= 12 ? \"P\" : \"A\";\n q.t = 'T';\n hr = 'h';\n i += 3;\n } else if (fmt.substr(i, 5).toUpperCase() === \"AM/PM\") {\n if (dt != null) q.v = dt.H >= 12 ? \"PM\" : \"AM\";\n q.t = 'T';\n i += 5;\n hr = 'h';\n } else {\n q.t = \"t\";\n ++i;\n }\n if (dt == null && q.t === 'T') return \"\";\n out[out.length] = q;\n lst = c;\n break;\n case '[':\n o = c;\n while (fmt.charAt(i++) !== ']' && i < fmt.length) o += fmt.charAt(i);\n if (o.slice(-1) !== ']') throw 'unterminated \"[\" block: |' + o + '|';\n if (o.match(abstime)) {\n if (dt == null) {\n dt = parse_date_code(v, opts);\n if (dt == null) return \"\";\n }\n out[out.length] = {t: 'Z', v: o.toLowerCase()};\n lst = o.charAt(1);\n } else if (o.indexOf(\"$\") > -1) {\n o = (o.match(/\\$([^-\\[\\]]*)/) || [])[1] || \"$\";\n if (!fmt_is_date(fmt)) out[out.length] = {t: 't', v: o};\n }\n break;\n /* Numbers */\n case '.':\n if (dt != null) {\n o = c;\n while (++i < fmt.length && (c = fmt.charAt(i)) === \"0\") o += c;\n out[out.length] = {t: 's', v: o};\n break;\n }\n /* falls through */\n case '0':\n case '#':\n o = c;\n while ((++i < fmt.length && \"0#?.,E+-%\".indexOf(c = fmt.charAt(i)) > -1) || (c == '\\\\' && fmt.charAt(i + 1) == \"-\" && i < fmt.length - 2 && \"0#\".indexOf(fmt.charAt(i + 2)) > -1)) o += c;\n out[out.length] = {t: 'n', v: o};\n break;\n case '?':\n o = c;\n while (fmt.charAt(++i) === c) o += c;\n out[out.length] = {t: c, v: o};\n lst = c;\n break;\n case '*':\n ++i;\n if (fmt.charAt(i) === ' ' || fmt.charAt(i) === '*') ++i;\n break; // **\n case '(':\n case ')':\n out[out.length] = {t: (flen === 1 || (typeof v === 'number' && v < 0) ? 't' : c), v: c};\n ++i;\n break;\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n o = c;\n while (i < fmt.length && \"0123456789\".indexOf(fmt.charAt(++i)) > -1) o += fmt.charAt(i);\n out[out.length] = {t: 'D', v: o};\n break;\n case ' ':\n out[out.length] = {t: c, v: c};\n ++i;\n break;\n default:\n if (\",$-+/():!^&'~{}<>=€acfijklopqrtuvwxzP\".indexOf(c) === -1) throw new Error('unrecognized character ' + c + ' in ' + fmt);\n out[out.length] = {t: 't', v: c};\n ++i;\n break;\n }\n }\n let bt = 0, ss0 = 0, ssm;\n for (i = out.length - 1, lst = 't'; i >= 0; --i) {\n switch (out[i].t) {\n case 'h':\n case 'H':\n out[i].t = hr;\n lst = 'h';\n if (bt < 1) bt = 1;\n break;\n case 's':\n if ((ssm = out[i].v.match(/\\.0+$/))) ss0 = Math.max(ss0, ssm[0].length - 1);\n if (bt < 3) bt = 3;\n /* falls through */\n case 'd':\n case 'y':\n case 'M':\n case 'e':\n lst = out[i].t;\n break;\n case 'm':\n if (lst === 's') {\n out[i].t = 'M';\n if (bt < 2) bt = 2;\n }\n break;\n case 'X': /*if(out[i].v === \"B2\");*/\n break;\n case 'Z':\n if (bt < 1 && out[i].v.match(/[Hh]/)) bt = 1;\n if (bt < 2 && out[i].v.match(/[Mm]/)) bt = 2;\n if (bt < 3 && out[i].v.match(/[Ss]/)) bt = 3;\n }\n }\n switch (bt) {\n case 0:\n break;\n case 1:\n if (dt.u >= 0.5) {\n dt.u = 0;\n ++dt.S;\n }\n if (dt.S >= 60) {\n dt.S = 0;\n ++dt.M;\n }\n if (dt.M >= 60) {\n dt.M = 0;\n ++dt.H;\n }\n break;\n case 2:\n if (dt.u >= 0.5) {\n dt.u = 0;\n ++dt.S;\n }\n if (dt.S >= 60) {\n dt.S = 0;\n ++dt.M;\n }\n break;\n }\n /* replace fields */\n let nstr = \"\", jj;\n for (i = 0; i < out.length; ++i) {\n switch (out[i].t) {\n case 't':\n case 'T':\n case ' ':\n case 'D':\n break;\n case 'X':\n out[i].v = \"\";\n out[i].t = \";\";\n break;\n case 'd':\n case 'm':\n case 'y':\n case 'h':\n case 'H':\n case 'M':\n case 's':\n case 'e':\n case 'b':\n case 'Z':\n out[i].v = write_date(out[i].t.charCodeAt(0), out[i].v, dt, ss0);\n out[i].t = 't';\n break;\n case 'n':\n case '(':\n case '?':\n jj = i + 1;\n while (out[jj] != null && (\n (c = out[jj].t) === \"?\" || c === \"D\" ||\n ((c === \" \" || c === \"t\") && out[jj + 1] != null && (out[jj + 1].t === '?' || out[jj + 1].t === \"t\" && out[jj + 1].v === '/')) ||\n (out[i].t === '(' && (c === ' ' || c === 'n' || c === ')')) ||\n (c === 't' && (out[jj].v === '/' || out[jj].v === ' ' && out[jj + 1] != null && out[jj + 1].t === '?'))\n )) {\n out[i].v += out[jj].v;\n out[jj] = {v: \"\", t: \";\"};\n ++jj;\n }\n nstr += out[i].v;\n i = jj - 1;\n break;\n case 'G':\n out[i].t = 't';\n out[i].v = general_fmt(v, opts);\n break;\n }\n }\n let vv = \"\", myv, ostr;\n if (nstr.length > 0) {\n if (nstr.charCodeAt(0) === 40) /* '(' */ {\n myv = (v < 0 && nstr.charCodeAt(0) === 45 ? -v : v);\n ostr = write_num('(', nstr, myv);\n } else {\n myv = (v < 0 && flen > 1 ? -v : v);\n ostr = write_num('n', nstr, myv);\n if (myv < 0 && out[0] && out[0].t === 't') {\n ostr = ostr.substr(1);\n out[0].v = \"-\" + out[0].v;\n }\n }\n jj = ostr.length - 1;\n let decpt = out.length;\n for (i = 0; i < out.length; ++i) if (out[i] != null && out[i].t !== 't' && out[i].v.indexOf(\".\") > -1) {\n decpt = i;\n break;\n }\n let lasti = out.length;\n if (decpt === out.length && ostr.indexOf(\"E\") === -1) {\n for (i = out.length - 1; i >= 0; --i) {\n if (out[i] == null || 'n?('.indexOf(out[i].t) === -1) continue;\n if (jj >= out[i].v.length - 1) {\n jj -= out[i].v.length;\n out[i].v = ostr.substr(jj + 1, out[i].v.length);\n } else if (jj < 0) out[i].v = \"\";\n else {\n out[i].v = ostr.substr(0, jj + 1);\n jj = -1;\n }\n out[i].t = 't';\n lasti = i;\n }\n if (jj >= 0 && lasti < out.length) out[lasti].v = ostr.substr(0, jj + 1) + out[lasti].v;\n } else if (decpt !== out.length && ostr.indexOf(\"E\") === -1) {\n jj = ostr.indexOf(\".\") - 1;\n for (i = decpt; i >= 0; --i) {\n if (out[i] == null || 'n?('.indexOf(out[i].t) === -1) continue;\n j = out[i].v.indexOf(\".\") > -1 && i === decpt ? out[i].v.indexOf(\".\") - 1 : out[i].v.length - 1;\n vv = out[i].v.substr(j + 1);\n for (; j >= 0; --j) {\n if (jj >= 0 && (out[i].v.charAt(j) === \"0\" || out[i].v.charAt(j) === \"#\")) vv = ostr.charAt(jj--) + vv;\n }\n out[i].v = vv;\n out[i].t = 't';\n lasti = i;\n }\n if (jj >= 0 && lasti < out.length) out[lasti].v = ostr.substr(0, jj + 1) + out[lasti].v;\n jj = ostr.indexOf(\".\") + 1;\n for (i = decpt; i < out.length; ++i) {\n if (out[i] == null || ('n?('.indexOf(out[i].t) === -1 && i !== decpt)) continue;\n j = out[i].v.indexOf(\".\") > -1 && i === decpt ? out[i].v.indexOf(\".\") + 1 : 0;\n vv = out[i].v.substr(0, j);\n for (; j < out[i].v.length; ++j) {\n if (jj < ostr.length) vv += ostr.charAt(jj++);\n }\n out[i].v = vv;\n out[i].t = 't';\n lasti = i;\n }\n }\n }\n for (i = 0; i < out.length; ++i) if (out[i] != null && 'n(?'.indexOf(out[i].t) > -1) {\n myv = (flen > 1 && v < 0 && i > 0 && out[i - 1].v === \"-\" ? -v : v);\n out[i].v = write_num(out[i].t, out[i].v, myv);\n out[i].t = 't';\n }\n let retval = \"\";\n for (i = 0; i !== out.length; ++i) if (out[i] != null) retval += out[i].v;\n return retval;\n}\n\nSSF._eval = eval_fmt;\nconst cfregex = /\\[[=<>]/;\nconst cfregex2 = /\\[([=<>]*)(-?\\d+\\.?\\d*)\\]/;\n\nfunction chkcond(v, rr) {\n if (rr == null) return false;\n const thresh = parseFloat(rr[2]);\n switch (rr[1]) {\n case \"=\":\n if (v === thresh) return true;\n break;\n case \">\":\n if (v > thresh) return true;\n break;\n case \"<\":\n if (v < thresh) return true;\n break;\n case \"<>\":\n if (v !== thresh) return true;\n break;\n case \">=\":\n if (v >= thresh) return true;\n break;\n case \"<=\":\n if (v <= thresh) return true;\n break;\n }\n return false;\n}\n\nfunction choose_fmt(f, v) {\n let fmt = split_fmt(f);\n let l = fmt.length, lat = fmt[l - 1].indexOf(\"@\");\n if (l < 4 && lat > -1) --l;\n if (fmt.length > 4) throw new Error(\"cannot find right format for |\" + fmt.join(\"|\") + \"|\");\n if (typeof v !== \"number\") return [4, fmt.length === 4 || lat > -1 ? fmt[fmt.length - 1] : \"@\"];\n switch (fmt.length) {\n case 1:\n fmt = lat > -1 ? [\"General\", \"General\", \"General\", fmt[0]] : [fmt[0], fmt[0], fmt[0], \"@\"];\n break;\n case 2:\n fmt = lat > -1 ? [fmt[0], fmt[0], fmt[0], fmt[1]] : [fmt[0], fmt[1], fmt[0], \"@\"];\n break;\n case 3:\n fmt = lat > -1 ? [fmt[0], fmt[1], fmt[0], fmt[2]] : [fmt[0], fmt[1], fmt[2], \"@\"];\n break;\n case 4:\n break;\n }\n const ff = v > 0 ? fmt[0] : v < 0 ? fmt[1] : fmt[2];\n if (fmt[0].indexOf(\"[\") === -1 && fmt[1].indexOf(\"[\") === -1) return [l, ff];\n if (fmt[0].match(cfregex) != null || fmt[1].match(cfregex) != null) {\n const m1 = fmt[0].match(cfregex2);\n const m2 = fmt[1].match(cfregex2);\n return chkcond(v, m1) ? [l, fmt[0]] : chkcond(v, m2) ? [l, fmt[1]] : [l, fmt[m1 != null && m2 != null ? 2 : 1]];\n }\n return [l, ff];\n}\n\nfunction format(fmt, v, o) {\n if (o == null) o = {};\n let sfmt = \"\";\n switch (typeof fmt) {\n case \"string\":\n if (fmt === \"m/d/yy\" && o.dateNF) sfmt = o.dateNF;\n else sfmt = fmt;\n break;\n case \"number\":\n if (fmt === 14 && o.dateNF) sfmt = o.dateNF;\n else sfmt = (o.table != null ? (o.table) : table_fmt)[fmt];\n break;\n }\n if (isgeneral(sfmt, 0)) return general_fmt(v, o);\n if (v instanceof Date) v = datenum_local(v, o.date1904);\n const f = choose_fmt(sfmt, v);\n if (isgeneral(f[1])) return general_fmt(v, o);\n if (v === true) v = \"TRUE\"; else if (v === false) v = \"FALSE\";\n else if (v === \"\" || v == null) return \"\";\n return eval_fmt(f[1], v, o, f[0]);\n}\n\nfunction load_entry(fmt, idx) {\n if (typeof idx !== 'number') {\n idx = +idx || -1;\n for (let i = 0; i < 0x0188; ++i) {\n if (table_fmt[i] === undefined) {\n if (idx < 0) idx = i;\n continue;\n }\n if (table_fmt[i] === fmt) {\n idx = i;\n break;\n }\n }\n if (idx < 0) idx = 0x187;\n }\n table_fmt[idx] = fmt;\n return idx;\n}\n\n/**\n * Load format string\n * @param fmt - format\n * @param [idx] - index\n * @returns {number}\n */\nSSF.load = load_entry;\n\n/**\n * The underlying object, mapping numeric keys to format strings.\n * return {{}}\n */\nSSF._table = table_fmt;\n\n/**\n * Gets the internal format table (number to format mapping).\n * @return {{}}\n */\nSSF.get_table = function get_table() {\n return table_fmt;\n};\nSSF.load_table = function load_table(tbl) {\n for (let i = 0; i !== 0x0188; ++i)\n if (tbl[i] !== undefined) load_entry(tbl[i], i);\n};\nSSF.init_table = init_table;\n\n/**\n * Render value using format string or code.\n * If fmt is a string, it will be parsed and evaluated. If fmt is a number, the actual format will be the\n * corresponding entry in the internal format table. For a raw numeric format like 000, the value should be\n * passed as a string.\n *\n * Date arguments are interpreted in the local time of the JS client.\n *\n * @param {string|number} fmt - format\n * @param {any} v - values\n * @param {{date1904: boolean}|undefined} [o] - options\n * @returns {string|*|string|undefined}\n */\nSSF.format = format;\n\nmodule.exports = SSF;\n","(function (window, factory) {\n if (typeof exports === 'object') {\n module.exports = factory();\n } else if (typeof define === 'function' && define.amd) {\n define(factory);\n } else {\n window.jStat = factory();\n }\n})(this, function () {\nvar jStat = (function(Math, undefined) {\n\n// For quick reference.\nvar concat = Array.prototype.concat;\nvar slice = Array.prototype.slice;\nvar toString = Object.prototype.toString;\n\n// Calculate correction for IEEE error\n// TODO: This calculation can be improved.\nfunction calcRdx(n, m) {\n var val = n > m ? n : m;\n return Math.pow(10,\n 17 - ~~(Math.log(((val > 0) ? val : -val)) * Math.LOG10E));\n}\n\n\nvar isArray = Array.isArray || function isArray(arg) {\n return toString.call(arg) === '[object Array]';\n};\n\n\nfunction isFunction(arg) {\n return toString.call(arg) === '[object Function]';\n}\n\n\nfunction isNumber(num) {\n return (typeof num === 'number') ? num - num === 0 : false;\n}\n\n\n// Converts the jStat matrix to vector.\nfunction toVector(arr) {\n return concat.apply([], arr);\n}\n\n\n// The one and only jStat constructor.\nfunction jStat() {\n return new jStat._init(arguments);\n}\n\n\n// TODO: Remove after all references in src files have been removed.\njStat.fn = jStat.prototype;\n\n\n// By separating the initializer from the constructor it's easier to handle\n// always returning a new instance whether \"new\" was used or not.\njStat._init = function _init(args) {\n // If first argument is an array, must be vector or matrix.\n if (isArray(args[0])) {\n // Check if matrix.\n if (isArray(args[0][0])) {\n // See if a mapping function was also passed.\n if (isFunction(args[1]))\n args[0] = jStat.map(args[0], args[1]);\n // Iterate over each is faster than this.push.apply(this, args[0].\n for (var i = 0; i < args[0].length; i++)\n this[i] = args[0][i];\n this.length = args[0].length;\n\n // Otherwise must be a vector.\n } else {\n this[0] = isFunction(args[1]) ? jStat.map(args[0], args[1]) : args[0];\n this.length = 1;\n }\n\n // If first argument is number, assume creation of sequence.\n } else if (isNumber(args[0])) {\n this[0] = jStat.seq.apply(null, args);\n this.length = 1;\n\n // Handle case when jStat object is passed to jStat.\n } else if (args[0] instanceof jStat) {\n // Duplicate the object and pass it back.\n return jStat(args[0].toArray());\n\n // Unexpected argument value, return empty jStat object.\n // TODO: This is strange behavior. Shouldn't this throw or some such to let\n // the user know they had bad arguments?\n } else {\n this[0] = [];\n this.length = 1;\n }\n\n return this;\n};\njStat._init.prototype = jStat.prototype;\njStat._init.constructor = jStat;\n\n\n// Utility functions.\n// TODO: for internal use only?\njStat.utils = {\n calcRdx: calcRdx,\n isArray: isArray,\n isFunction: isFunction,\n isNumber: isNumber,\n toVector: toVector\n};\n\n\njStat._random_fn = Math.random;\njStat.setRandom = function setRandom(fn) {\n if (typeof fn !== 'function')\n throw new TypeError('fn is not a function');\n jStat._random_fn = fn;\n};\n\n\n// Easily extend the jStat object.\n// TODO: is this seriously necessary?\njStat.extend = function extend(obj) {\n var i, j;\n\n if (arguments.length === 1) {\n for (j in obj)\n jStat[j] = obj[j];\n return this;\n }\n\n for (i = 1; i < arguments.length; i++) {\n for (j in arguments[i])\n obj[j] = arguments[i][j];\n }\n\n return obj;\n};\n\n\n// Returns the number of rows in the matrix.\njStat.rows = function rows(arr) {\n return arr.length || 1;\n};\n\n\n// Returns the number of columns in the matrix.\njStat.cols = function cols(arr) {\n return arr[0].length || 1;\n};\n\n\n// Returns the dimensions of the object { rows: i, cols: j }\njStat.dimensions = function dimensions(arr) {\n return {\n rows: jStat.rows(arr),\n cols: jStat.cols(arr)\n };\n};\n\n\n// Returns a specified row as a vector or return a sub matrix by pick some rows\njStat.row = function row(arr, index) {\n if (isArray(index)) {\n return index.map(function(i) {\n return jStat.row(arr, i);\n })\n }\n return arr[index];\n};\n\n\n// return row as array\n// rowa([[1,2],[3,4]],0) -> [1,2]\njStat.rowa = function rowa(arr, i) {\n return jStat.row(arr, i);\n};\n\n\n// Returns the specified column as a vector or return a sub matrix by pick some\n// columns\njStat.col = function col(arr, index) {\n if (isArray(index)) {\n var submat = jStat.arange(arr.length).map(function() {\n return new Array(index.length);\n });\n index.forEach(function(ind, i){\n jStat.arange(arr.length).forEach(function(j) {\n submat[j][i] = arr[j][ind];\n });\n });\n return submat;\n }\n var column = new Array(arr.length);\n for (var i = 0; i < arr.length; i++)\n column[i] = [arr[i][index]];\n return column;\n};\n\n\n// return column as array\n// cola([[1,2],[3,4]],0) -> [1,3]\njStat.cola = function cola(arr, i) {\n return jStat.col(arr, i).map(function(a){ return a[0] });\n};\n\n\n// Returns the diagonal of the matrix\njStat.diag = function diag(arr) {\n var nrow = jStat.rows(arr);\n var res = new Array(nrow);\n for (var row = 0; row < nrow; row++)\n res[row] = [arr[row][row]];\n return res;\n};\n\n\n// Returns the anti-diagonal of the matrix\njStat.antidiag = function antidiag(arr) {\n var nrow = jStat.rows(arr) - 1;\n var res = new Array(nrow);\n for (var i = 0; nrow >= 0; nrow--, i++)\n res[i] = [arr[i][nrow]];\n return res;\n};\n\n// Transpose a matrix or array.\njStat.transpose = function transpose(arr) {\n var obj = [];\n var objArr, rows, cols, j, i;\n\n // Make sure arr is in matrix format.\n if (!isArray(arr[0]))\n arr = [arr];\n\n rows = arr.length;\n cols = arr[0].length;\n\n for (i = 0; i < cols; i++) {\n objArr = new Array(rows);\n for (j = 0; j < rows; j++)\n objArr[j] = arr[j][i];\n obj.push(objArr);\n }\n\n // If obj is vector, return only single array.\n return obj.length === 1 ? obj[0] : obj;\n};\n\n\n// Map a function to an array or array of arrays.\n// \"toAlter\" is an internal variable.\njStat.map = function map(arr, func, toAlter) {\n var row, nrow, ncol, res, col;\n\n if (!isArray(arr[0]))\n arr = [arr];\n\n nrow = arr.length;\n ncol = arr[0].length;\n res = toAlter ? arr : new Array(nrow);\n\n for (row = 0; row < nrow; row++) {\n // if the row doesn't exist, create it\n if (!res[row])\n res[row] = new Array(ncol);\n for (col = 0; col < ncol; col++)\n res[row][col] = func(arr[row][col], row, col);\n }\n\n return res.length === 1 ? res[0] : res;\n};\n\n\n// Cumulatively combine the elements of an array or array of arrays using a function.\njStat.cumreduce = function cumreduce(arr, func, toAlter) {\n var row, nrow, ncol, res, col;\n\n if (!isArray(arr[0]))\n arr = [arr];\n\n nrow = arr.length;\n ncol = arr[0].length;\n res = toAlter ? arr : new Array(nrow);\n\n for (row = 0; row < nrow; row++) {\n // if the row doesn't exist, create it\n if (!res[row])\n res[row] = new Array(ncol);\n if (ncol > 0)\n res[row][0] = arr[row][0];\n for (col = 1; col < ncol; col++)\n res[row][col] = func(res[row][col-1], arr[row][col]);\n }\n return res.length === 1 ? res[0] : res;\n};\n\n\n// Destructively alter an array.\njStat.alter = function alter(arr, func) {\n return jStat.map(arr, func, true);\n};\n\n\n// Generate a rows x cols matrix according to the supplied function.\njStat.create = function create(rows, cols, func) {\n var res = new Array(rows);\n var i, j;\n\n if (isFunction(cols)) {\n func = cols;\n cols = rows;\n }\n\n for (i = 0; i < rows; i++) {\n res[i] = new Array(cols);\n for (j = 0; j < cols; j++)\n res[i][j] = func(i, j);\n }\n\n return res;\n};\n\n\nfunction retZero() { return 0; }\n\n\n// Generate a rows x cols matrix of zeros.\njStat.zeros = function zeros(rows, cols) {\n if (!isNumber(cols))\n cols = rows;\n return jStat.create(rows, cols, retZero);\n};\n\n\nfunction retOne() { return 1; }\n\n\n// Generate a rows x cols matrix of ones.\njStat.ones = function ones(rows, cols) {\n if (!isNumber(cols))\n cols = rows;\n return jStat.create(rows, cols, retOne);\n};\n\n\n// Generate a rows x cols matrix of uniformly random numbers.\njStat.rand = function rand(rows, cols) {\n if (!isNumber(cols))\n cols = rows;\n return jStat.create(rows, cols, jStat._random_fn);\n};\n\n\nfunction retIdent(i, j) { return i === j ? 1 : 0; }\n\n\n// Generate an identity matrix of size row x cols.\njStat.identity = function identity(rows, cols) {\n if (!isNumber(cols))\n cols = rows;\n return jStat.create(rows, cols, retIdent);\n};\n\n\n// Tests whether a matrix is symmetric\njStat.symmetric = function symmetric(arr) {\n var size = arr.length;\n var row, col;\n\n if (arr.length !== arr[0].length)\n return false;\n\n for (row = 0; row < size; row++) {\n for (col = 0; col < size; col++)\n if (arr[col][row] !== arr[row][col])\n return false;\n }\n\n return true;\n};\n\n\n// Set all values to zero.\njStat.clear = function clear(arr) {\n return jStat.alter(arr, retZero);\n};\n\n\n// Generate sequence.\njStat.seq = function seq(min, max, length, func) {\n if (!isFunction(func))\n func = false;\n\n var arr = [];\n var hival = calcRdx(min, max);\n var step = (max * hival - min * hival) / ((length - 1) * hival);\n var current = min;\n var cnt;\n\n // Current is assigned using a technique to compensate for IEEE error.\n // TODO: Needs better implementation.\n for (cnt = 0;\n current <= max && cnt < length;\n cnt++, current = (min * hival + step * hival * cnt) / hival) {\n arr.push((func ? func(current, cnt) : current));\n }\n\n return arr;\n};\n\n\n// arange(5) -> [0,1,2,3,4]\n// arange(1,5) -> [1,2,3,4]\n// arange(5,1,-1) -> [5,4,3,2]\njStat.arange = function arange(start, end, step) {\n var rl = [];\n var i;\n step = step || 1;\n if (end === undefined) {\n end = start;\n start = 0;\n }\n if (start === end || step === 0) {\n return [];\n }\n if (start < end && step < 0) {\n return [];\n }\n if (start > end && step > 0) {\n return [];\n }\n if (step > 0) {\n for (i = start; i < end; i += step) {\n rl.push(i);\n }\n } else {\n for (i = start; i > end; i += step) {\n rl.push(i);\n }\n }\n return rl;\n};\n\n\n// A=[[1,2,3],[4,5,6],[7,8,9]]\n// slice(A,{row:{end:2},col:{start:1}}) -> [[2,3],[5,6]]\n// slice(A,1,{start:1}) -> [5,6]\n// as numpy code A[:2,1:]\njStat.slice = (function(){\n function _slice(list, start, end, step) {\n // note it's not equal to range.map mode it's a bug\n var i;\n var rl = [];\n var length = list.length;\n if (start === undefined && end === undefined && step === undefined) {\n return jStat.copy(list);\n }\n\n start = start || 0;\n end = end || list.length;\n start = start >= 0 ? start : length + start;\n end = end >= 0 ? end : length + end;\n step = step || 1;\n if (start === end || step === 0) {\n return [];\n }\n if (start < end && step < 0) {\n return [];\n }\n if (start > end && step > 0) {\n return [];\n }\n if (step > 0) {\n for (i = start; i < end; i += step) {\n rl.push(list[i]);\n }\n } else {\n for (i = start; i > end;i += step) {\n rl.push(list[i]);\n }\n }\n return rl;\n }\n\n function slice(list, rcSlice) {\n var colSlice, rowSlice;\n rcSlice = rcSlice || {};\n if (isNumber(rcSlice.row)) {\n if (isNumber(rcSlice.col))\n return list[rcSlice.row][rcSlice.col];\n var row = jStat.rowa(list, rcSlice.row);\n colSlice = rcSlice.col || {};\n return _slice(row, colSlice.start, colSlice.end, colSlice.step);\n }\n\n if (isNumber(rcSlice.col)) {\n var col = jStat.cola(list, rcSlice.col);\n rowSlice = rcSlice.row || {};\n return _slice(col, rowSlice.start, rowSlice.end, rowSlice.step);\n }\n\n rowSlice = rcSlice.row || {};\n colSlice = rcSlice.col || {};\n var rows = _slice(list, rowSlice.start, rowSlice.end, rowSlice.step);\n return rows.map(function(row) {\n return _slice(row, colSlice.start, colSlice.end, colSlice.step);\n });\n }\n\n return slice;\n}());\n\n\n// A=[[1,2,3],[4,5,6],[7,8,9]]\n// sliceAssign(A,{row:{start:1},col:{start:1}},[[0,0],[0,0]])\n// A=[[1,2,3],[4,0,0],[7,0,0]]\njStat.sliceAssign = function sliceAssign(A, rcSlice, B) {\n var nl, ml;\n if (isNumber(rcSlice.row)) {\n if (isNumber(rcSlice.col))\n return A[rcSlice.row][rcSlice.col] = B;\n rcSlice.col = rcSlice.col || {};\n rcSlice.col.start = rcSlice.col.start || 0;\n rcSlice.col.end = rcSlice.col.end || A[0].length;\n rcSlice.col.step = rcSlice.col.step || 1;\n nl = jStat.arange(rcSlice.col.start,\n Math.min(A.length, rcSlice.col.end),\n rcSlice.col.step);\n var m = rcSlice.row;\n nl.forEach(function(n, i) {\n A[m][n] = B[i];\n });\n return A;\n }\n\n if (isNumber(rcSlice.col)) {\n rcSlice.row = rcSlice.row || {};\n rcSlice.row.start = rcSlice.row.start || 0;\n rcSlice.row.end = rcSlice.row.end || A.length;\n rcSlice.row.step = rcSlice.row.step || 1;\n ml = jStat.arange(rcSlice.row.start,\n Math.min(A[0].length, rcSlice.row.end),\n rcSlice.row.step);\n var n = rcSlice.col;\n ml.forEach(function(m, j) {\n A[m][n] = B[j];\n });\n return A;\n }\n\n if (B[0].length === undefined) {\n B = [B];\n }\n rcSlice.row.start = rcSlice.row.start || 0;\n rcSlice.row.end = rcSlice.row.end || A.length;\n rcSlice.row.step = rcSlice.row.step || 1;\n rcSlice.col.start = rcSlice.col.start || 0;\n rcSlice.col.end = rcSlice.col.end || A[0].length;\n rcSlice.col.step = rcSlice.col.step || 1;\n ml = jStat.arange(rcSlice.row.start,\n Math.min(A.length, rcSlice.row.end),\n rcSlice.row.step);\n nl = jStat.arange(rcSlice.col.start,\n Math.min(A[0].length, rcSlice.col.end),\n rcSlice.col.step);\n ml.forEach(function(m, i) {\n nl.forEach(function(n, j) {\n A[m][n] = B[i][j];\n });\n });\n return A;\n};\n\n\n// [1,2,3] ->\n// [[1,0,0],[0,2,0],[0,0,3]]\njStat.diagonal = function diagonal(diagArray) {\n var mat = jStat.zeros(diagArray.length, diagArray.length);\n diagArray.forEach(function(t, i) {\n mat[i][i] = t;\n });\n return mat;\n};\n\n\n// return copy of A\njStat.copy = function copy(A) {\n return A.map(function(row) {\n if (isNumber(row))\n return row;\n return row.map(function(t) {\n return t;\n });\n });\n};\n\n\n// TODO: Go over this entire implementation. Seems a tragic waste of resources\n// doing all this work. Instead, and while ugly, use new Function() to generate\n// a custom function for each static method.\n\n// Quick reference.\nvar jProto = jStat.prototype;\n\n// Default length.\njProto.length = 0;\n\n// For internal use only.\n// TODO: Check if they're actually used, and if they are then rename them\n// to _*\njProto.push = Array.prototype.push;\njProto.sort = Array.prototype.sort;\njProto.splice = Array.prototype.splice;\njProto.slice = Array.prototype.slice;\n\n\n// Return a clean array.\njProto.toArray = function toArray() {\n return this.length > 1 ? slice.call(this) : slice.call(this)[0];\n};\n\n\n// Map a function to a matrix or vector.\njProto.map = function map(func, toAlter) {\n return jStat(jStat.map(this, func, toAlter));\n};\n\n\n// Cumulatively combine the elements of a matrix or vector using a function.\njProto.cumreduce = function cumreduce(func, toAlter) {\n return jStat(jStat.cumreduce(this, func, toAlter));\n};\n\n\n// Destructively alter an array.\njProto.alter = function alter(func) {\n jStat.alter(this, func);\n return this;\n};\n\n\n// Extend prototype with methods that have no argument.\n(function(funcs) {\n for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n jProto[passfunc] = function(func) {\n var self = this,\n results;\n // Check for callback.\n if (func) {\n setTimeout(function() {\n func.call(self, jProto[passfunc].call(self));\n });\n return this;\n }\n results = jStat[passfunc](this);\n return isArray(results) ? jStat(results) : results;\n };\n })(funcs[i]);\n})('transpose clear symmetric rows cols dimensions diag antidiag'.split(' '));\n\n\n// Extend prototype with methods that have one argument.\n(function(funcs) {\n for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n jProto[passfunc] = function(index, func) {\n var self = this;\n // check for callback\n if (func) {\n setTimeout(function() {\n func.call(self, jProto[passfunc].call(self, index));\n });\n return this;\n }\n return jStat(jStat[passfunc](this, index));\n };\n })(funcs[i]);\n})('row col'.split(' '));\n\n\n// Extend prototype with simple shortcut methods.\n(function(funcs) {\n for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n jProto[passfunc] = function() {\n return jStat(jStat[passfunc].apply(null, arguments));\n };\n })(funcs[i]);\n})('create zeros ones rand identity'.split(' '));\n\n\n// Exposing jStat.\nreturn jStat;\n\n}(Math));\n(function(jStat, Math) {\n\nvar isFunction = jStat.utils.isFunction;\n\n// Ascending functions for sort\nfunction ascNum(a, b) { return a - b; }\n\nfunction clip(arg, min, max) {\n return Math.max(min, Math.min(arg, max));\n}\n\n\n// sum of an array\njStat.sum = function sum(arr) {\n var sum = 0;\n var i = arr.length;\n while (--i >= 0)\n sum += arr[i];\n return sum;\n};\n\n\n// sum squared\njStat.sumsqrd = function sumsqrd(arr) {\n var sum = 0;\n var i = arr.length;\n while (--i >= 0)\n sum += arr[i] * arr[i];\n return sum;\n};\n\n\n// sum of squared errors of prediction (SSE)\njStat.sumsqerr = function sumsqerr(arr) {\n var mean = jStat.mean(arr);\n var sum = 0;\n var i = arr.length;\n var tmp;\n while (--i >= 0) {\n tmp = arr[i] - mean;\n sum += tmp * tmp;\n }\n return sum;\n};\n\n// sum of an array in each row\njStat.sumrow = function sumrow(arr) {\n var sum = 0;\n var i = arr.length;\n while (--i >= 0)\n sum += arr[i];\n return sum;\n};\n\n// product of an array\njStat.product = function product(arr) {\n var prod = 1;\n var i = arr.length;\n while (--i >= 0)\n prod *= arr[i];\n return prod;\n};\n\n\n// minimum value of an array\njStat.min = function min(arr) {\n var low = arr[0];\n var i = 0;\n while (++i < arr.length)\n if (arr[i] < low)\n low = arr[i];\n return low;\n};\n\n\n// maximum value of an array\njStat.max = function max(arr) {\n var high = arr[0];\n var i = 0;\n while (++i < arr.length)\n if (arr[i] > high)\n high = arr[i];\n return high;\n};\n\n\n// unique values of an array\njStat.unique = function unique(arr) {\n var hash = {}, _arr = [];\n for(var i = 0; i < arr.length; i++) {\n if (!hash[arr[i]]) {\n hash[arr[i]] = true;\n _arr.push(arr[i]);\n }\n }\n return _arr;\n};\n\n\n// mean value of an array\njStat.mean = function mean(arr) {\n return jStat.sum(arr) / arr.length;\n};\n\n\n// mean squared error (MSE)\njStat.meansqerr = function meansqerr(arr) {\n return jStat.sumsqerr(arr) / arr.length;\n};\n\n\n// geometric mean of an array\njStat.geomean = function geomean(arr) {\n var logs = arr.map(Math.log)\n var meanOfLogs = jStat.mean(logs)\n return Math.exp(meanOfLogs)\n};\n\n\n// median of an array\njStat.median = function median(arr) {\n var arrlen = arr.length;\n var _arr = arr.slice().sort(ascNum);\n // check if array is even or odd, then return the appropriate\n return !(arrlen & 1)\n ? (_arr[(arrlen / 2) - 1 ] + _arr[(arrlen / 2)]) / 2\n : _arr[(arrlen / 2) | 0 ];\n};\n\n\n// cumulative sum of an array\njStat.cumsum = function cumsum(arr) {\n return jStat.cumreduce(arr, function (a, b) { return a + b; });\n};\n\n\n// cumulative product of an array\njStat.cumprod = function cumprod(arr) {\n return jStat.cumreduce(arr, function (a, b) { return a * b; });\n};\n\n\n// successive differences of a sequence\njStat.diff = function diff(arr) {\n var diffs = [];\n var arrLen = arr.length;\n var i;\n for (i = 1; i < arrLen; i++)\n diffs.push(arr[i] - arr[i - 1]);\n return diffs;\n};\n\n\n// ranks of an array\njStat.rank = function (arr) {\n var i;\n var distinctNumbers = [];\n var numberCounts = {};\n for (i = 0; i < arr.length; i++) {\n var number = arr[i];\n if (numberCounts[number]) {\n numberCounts[number]++;\n } else {\n numberCounts[number] = 1;\n distinctNumbers.push(number);\n }\n }\n\n var sortedDistinctNumbers = distinctNumbers.sort(ascNum);\n var numberRanks = {};\n var currentRank = 1;\n for (i = 0; i < sortedDistinctNumbers.length; i++) {\n var number = sortedDistinctNumbers[i];\n var count = numberCounts[number];\n var first = currentRank;\n var last = currentRank + count - 1;\n var rank = (first + last) / 2;\n numberRanks[number] = rank;\n currentRank += count;\n }\n\n return arr.map(function (number) {\n return numberRanks[number];\n });\n};\n\n\n// mode of an array\n// if there are multiple modes of an array, return all of them\n// is this the appropriate way of handling it?\njStat.mode = function mode(arr) {\n var arrLen = arr.length;\n var _arr = arr.slice().sort(ascNum);\n var count = 1;\n var maxCount = 0;\n var numMaxCount = 0;\n var mode_arr = [];\n var i;\n\n for (i = 0; i < arrLen; i++) {\n if (_arr[i] === _arr[i + 1]) {\n count++;\n } else {\n if (count > maxCount) {\n mode_arr = [_arr[i]];\n maxCount = count;\n numMaxCount = 0;\n }\n // are there multiple max counts\n else if (count === maxCount) {\n mode_arr.push(_arr[i]);\n numMaxCount++;\n }\n // resetting count for new value in array\n count = 1;\n }\n }\n\n return numMaxCount === 0 ? mode_arr[0] : mode_arr;\n};\n\n\n// range of an array\njStat.range = function range(arr) {\n return jStat.max(arr) - jStat.min(arr);\n};\n\n// variance of an array\n// flag = true indicates sample instead of population\njStat.variance = function variance(arr, flag) {\n return jStat.sumsqerr(arr) / (arr.length - (flag ? 1 : 0));\n};\n\n// pooled variance of an array of arrays\njStat.pooledvariance = function pooledvariance(arr) {\n var sumsqerr = arr.reduce(function (a, samples) {return a + jStat.sumsqerr(samples);}, 0);\n var count = arr.reduce(function (a, samples) {return a + samples.length;}, 0);\n return sumsqerr / (count - arr.length);\n};\n\n// deviation of an array\njStat.deviation = function (arr) {\n var mean = jStat.mean(arr);\n var arrlen = arr.length;\n var dev = new Array(arrlen);\n for (var i = 0; i < arrlen; i++) {\n dev[i] = arr[i] - mean;\n }\n return dev;\n};\n\n// standard deviation of an array\n// flag = true indicates sample instead of population\njStat.stdev = function stdev(arr, flag) {\n return Math.sqrt(jStat.variance(arr, flag));\n};\n\n// pooled standard deviation of an array of arrays\njStat.pooledstdev = function pooledstdev(arr) {\n return Math.sqrt(jStat.pooledvariance(arr));\n};\n\n// mean deviation (mean absolute deviation) of an array\njStat.meandev = function meandev(arr) {\n var mean = jStat.mean(arr);\n var a = [];\n for (var i = arr.length - 1; i >= 0; i--) {\n a.push(Math.abs(arr[i] - mean));\n }\n return jStat.mean(a);\n};\n\n\n// median deviation (median absolute deviation) of an array\njStat.meddev = function meddev(arr) {\n var median = jStat.median(arr);\n var a = [];\n for (var i = arr.length - 1; i >= 0; i--) {\n a.push(Math.abs(arr[i] - median));\n }\n return jStat.median(a);\n};\n\n\n// coefficient of variation\njStat.coeffvar = function coeffvar(arr) {\n return jStat.stdev(arr) / jStat.mean(arr);\n};\n\n\n// quartiles of an array\njStat.quartiles = function quartiles(arr) {\n var arrlen = arr.length;\n var _arr = arr.slice().sort(ascNum);\n return [\n _arr[ Math.round((arrlen) / 4) - 1 ],\n _arr[ Math.round((arrlen) / 2) - 1 ],\n _arr[ Math.round((arrlen) * 3 / 4) - 1 ]\n ];\n};\n\n\n// Arbitary quantiles of an array. Direct port of the scipy.stats\n// implementation by Pierre GF Gerard-Marchant.\njStat.quantiles = function quantiles(arr, quantilesArray, alphap, betap) {\n var sortedArray = arr.slice().sort(ascNum);\n var quantileVals = [quantilesArray.length];\n var n = arr.length;\n var i, p, m, aleph, k, gamma;\n\n if (typeof alphap === 'undefined')\n alphap = 3 / 8;\n if (typeof betap === 'undefined')\n betap = 3 / 8;\n\n for (i = 0; i < quantilesArray.length; i++) {\n p = quantilesArray[i];\n m = alphap + p * (1 - alphap - betap);\n aleph = n * p + m;\n k = Math.floor(clip(aleph, 1, n - 1));\n gamma = clip(aleph - k, 0, 1);\n quantileVals[i] = (1 - gamma) * sortedArray[k - 1] + gamma * sortedArray[k];\n }\n\n return quantileVals;\n};\n\n// Return the k-th percentile of values in a range, where k is in the range 0..1, inclusive.\n// Passing true for the exclusive parameter excludes both endpoints of the range.\njStat.percentile = function percentile(arr, k, exclusive) {\n var _arr = arr.slice().sort(ascNum);\n var realIndex = k * (_arr.length + (exclusive ? 1 : -1)) + (exclusive ? 0 : 1);\n var index = parseInt(realIndex);\n var frac = realIndex - index;\n if (index + 1 < _arr.length) {\n return _arr[index - 1] + frac * (_arr[index] - _arr[index - 1]);\n } else {\n return _arr[index - 1];\n }\n}\n\n// The percentile rank of score in a given array. Returns the percentage\n// of all values in the input array that are less than (kind='strict') or\n// less or equal than (kind='weak') score. Default is weak.\njStat.percentileOfScore = function percentileOfScore(arr, score, kind) {\n var counter = 0;\n var len = arr.length;\n var strict = false;\n var value, i;\n\n if (kind === 'strict')\n strict = true;\n\n for (i = 0; i < len; i++) {\n value = arr[i];\n if ((strict && value < score) ||\n (!strict && value <= score)) {\n counter++;\n }\n }\n\n return counter / len;\n};\n\n\n// Histogram (bin count) data\njStat.histogram = function histogram(arr, binCnt) {\n binCnt = binCnt || 4;\n var first = jStat.min(arr);\n var binWidth = (jStat.max(arr) - first) / binCnt;\n var len = arr.length;\n var bins = [];\n var i;\n\n for (i = 0; i < binCnt; i++)\n bins[i] = 0;\n for (i = 0; i < len; i++)\n bins[Math.min(Math.floor(((arr[i] - first) / binWidth)), binCnt - 1)] += 1;\n\n return bins;\n};\n\n\n// covariance of two arrays\njStat.covariance = function covariance(arr1, arr2) {\n var u = jStat.mean(arr1);\n var v = jStat.mean(arr2);\n var arr1Len = arr1.length;\n var sq_dev = new Array(arr1Len);\n var i;\n\n for (i = 0; i < arr1Len; i++)\n sq_dev[i] = (arr1[i] - u) * (arr2[i] - v);\n\n return jStat.sum(sq_dev) / (arr1Len - 1);\n};\n\n\n// (pearson's) population correlation coefficient, rho\njStat.corrcoeff = function corrcoeff(arr1, arr2) {\n return jStat.covariance(arr1, arr2) /\n jStat.stdev(arr1, 1) /\n jStat.stdev(arr2, 1);\n};\n\n // (spearman's) rank correlation coefficient, sp\njStat.spearmancoeff = function (arr1, arr2) {\n arr1 = jStat.rank(arr1);\n arr2 = jStat.rank(arr2);\n //return pearson's correlation of the ranks:\n return jStat.corrcoeff(arr1, arr2);\n}\n\n\n// statistical standardized moments (general form of skew/kurt)\njStat.stanMoment = function stanMoment(arr, n) {\n var mu = jStat.mean(arr);\n var sigma = jStat.stdev(arr);\n var len = arr.length;\n var skewSum = 0;\n\n for (var i = 0; i < len; i++)\n skewSum += Math.pow((arr[i] - mu) / sigma, n);\n\n return skewSum / arr.length;\n};\n\n// (pearson's) moment coefficient of skewness\njStat.skewness = function skewness(arr) {\n return jStat.stanMoment(arr, 3);\n};\n\n// (pearson's) (excess) kurtosis\njStat.kurtosis = function kurtosis(arr) {\n return jStat.stanMoment(arr, 4) - 3;\n};\n\n\nvar jProto = jStat.prototype;\n\n\n// Extend jProto with method for calculating cumulative sums and products.\n// This differs from the similar extension below as cumsum and cumprod should\n// not be run again in the case fullbool === true.\n// If a matrix is passed, automatically assume operation should be done on the\n// columns.\n(function(funcs) {\n for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n // If a matrix is passed, automatically assume operation should be done on\n // the columns.\n jProto[passfunc] = function(fullbool, func) {\n var arr = [];\n var i = 0;\n var tmpthis = this;\n // Assignment reassignation depending on how parameters were passed in.\n if (isFunction(fullbool)) {\n func = fullbool;\n fullbool = false;\n }\n // Check if a callback was passed with the function.\n if (func) {\n setTimeout(function() {\n func.call(tmpthis, jProto[passfunc].call(tmpthis, fullbool));\n });\n return this;\n }\n // Check if matrix and run calculations.\n if (this.length > 1) {\n tmpthis = fullbool === true ? this : this.transpose();\n for (; i < tmpthis.length; i++)\n arr[i] = jStat[passfunc](tmpthis[i]);\n return arr;\n }\n // Pass fullbool if only vector, not a matrix. for variance and stdev.\n return jStat[passfunc](this[0], fullbool);\n };\n })(funcs[i]);\n})(('cumsum cumprod').split(' '));\n\n\n// Extend jProto with methods which don't require arguments and work on columns.\n(function(funcs) {\n for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n // If a matrix is passed, automatically assume operation should be done on\n // the columns.\n jProto[passfunc] = function(fullbool, func) {\n var arr = [];\n var i = 0;\n var tmpthis = this;\n // Assignment reassignation depending on how parameters were passed in.\n if (isFunction(fullbool)) {\n func = fullbool;\n fullbool = false;\n }\n // Check if a callback was passed with the function.\n if (func) {\n setTimeout(function() {\n func.call(tmpthis, jProto[passfunc].call(tmpthis, fullbool));\n });\n return this;\n }\n // Check if matrix and run calculations.\n if (this.length > 1) {\n if (passfunc !== 'sumrow')\n tmpthis = fullbool === true ? this : this.transpose();\n for (; i < tmpthis.length; i++)\n arr[i] = jStat[passfunc](tmpthis[i]);\n return fullbool === true\n ? jStat[passfunc](jStat.utils.toVector(arr))\n : arr;\n }\n // Pass fullbool if only vector, not a matrix. for variance and stdev.\n return jStat[passfunc](this[0], fullbool);\n };\n })(funcs[i]);\n})(('sum sumsqrd sumsqerr sumrow product min max unique mean meansqerr ' +\n 'geomean median diff rank mode range variance deviation stdev meandev ' +\n 'meddev coeffvar quartiles histogram skewness kurtosis').split(' '));\n\n\n// Extend jProto with functions that take arguments. Operations on matrices are\n// done on columns.\n(function(funcs) {\n for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n jProto[passfunc] = function() {\n var arr = [];\n var i = 0;\n var tmpthis = this;\n var args = Array.prototype.slice.call(arguments);\n var callbackFunction;\n\n // If the last argument is a function, we assume it's a callback; we\n // strip the callback out and call the function again.\n if (isFunction(args[args.length - 1])) {\n callbackFunction = args[args.length - 1];\n var argsToPass = args.slice(0, args.length - 1);\n\n setTimeout(function() {\n callbackFunction.call(tmpthis,\n jProto[passfunc].apply(tmpthis, argsToPass));\n });\n return this;\n\n // Otherwise we curry the function args and call normally.\n } else {\n callbackFunction = undefined;\n var curriedFunction = function curriedFunction(vector) {\n return jStat[passfunc].apply(tmpthis, [vector].concat(args));\n }\n }\n\n // If this is a matrix, run column-by-column.\n if (this.length > 1) {\n tmpthis = tmpthis.transpose();\n for (; i < tmpthis.length; i++)\n arr[i] = curriedFunction(tmpthis[i]);\n return arr;\n }\n\n // Otherwise run on the vector.\n return curriedFunction(this[0]);\n };\n })(funcs[i]);\n})('quantiles percentileOfScore'.split(' '));\n\n}(jStat, Math));\n// Special functions //\n(function(jStat, Math) {\n\n// Log-gamma function\njStat.gammaln = function gammaln(x) {\n var j = 0;\n var cof = [\n 76.18009172947146, -86.50532032941677, 24.01409824083091,\n -1.231739572450155, 0.1208650973866179e-2, -0.5395239384953e-5\n ];\n var ser = 1.000000000190015;\n var xx, y, tmp;\n tmp = (y = xx = x) + 5.5;\n tmp -= (xx + 0.5) * Math.log(tmp);\n for (; j < 6; j++)\n ser += cof[j] / ++y;\n return Math.log(2.5066282746310005 * ser / xx) - tmp;\n};\n\n/*\n * log-gamma function to support poisson distribution sampling. The\n * algorithm comes from SPECFUN by Shanjie Zhang and Jianming Jin and their\n * book \"Computation of Special Functions\", 1996, John Wiley & Sons, Inc.\n */\njStat.loggam = function loggam(x) {\n var x0, x2, xp, gl, gl0;\n var k, n;\n\n var a = [8.333333333333333e-02, -2.777777777777778e-03,\n 7.936507936507937e-04, -5.952380952380952e-04,\n 8.417508417508418e-04, -1.917526917526918e-03,\n 6.410256410256410e-03, -2.955065359477124e-02,\n 1.796443723688307e-01, -1.39243221690590e+00];\n x0 = x;\n n = 0;\n if ((x == 1.0) || (x == 2.0)) {\n return 0.0;\n }\n if (x <= 7.0) {\n n = Math.floor(7 - x);\n x0 = x + n;\n }\n x2 = 1.0 / (x0 * x0);\n xp = 2 * Math.PI;\n gl0 = a[9];\n for (k = 8; k >= 0; k--) {\n gl0 *= x2;\n gl0 += a[k];\n }\n gl = gl0 / x0 + 0.5 * Math.log(xp) + (x0 - 0.5) * Math.log(x0) - x0;\n if (x <= 7.0) {\n for (k = 1; k <= n; k++) {\n gl -= Math.log(x0 - 1.0);\n x0 -= 1.0;\n }\n }\n return gl;\n}\n\n// gamma of x\njStat.gammafn = function gammafn(x) {\n var p = [-1.716185138865495, 24.76565080557592, -379.80425647094563,\n 629.3311553128184, 866.9662027904133, -31451.272968848367,\n -36144.413418691176, 66456.14382024054\n ];\n var q = [-30.8402300119739, 315.35062697960416, -1015.1563674902192,\n -3107.771671572311, 22538.118420980151, 4755.8462775278811,\n -134659.9598649693, -115132.2596755535];\n var fact = false;\n var n = 0;\n var xden = 0;\n var xnum = 0;\n var y = x;\n var i, z, yi, res;\n if (x > 171.6243769536076) {\n return Infinity;\n }\n if (y <= 0) {\n res = y % 1 + 3.6e-16;\n if (res) {\n fact = (!(y & 1) ? 1 : -1) * Math.PI / Math.sin(Math.PI * res);\n y = 1 - y;\n } else {\n return Infinity;\n }\n }\n yi = y;\n if (y < 1) {\n z = y++;\n } else {\n z = (y -= n = (y | 0) - 1) - 1;\n }\n for (i = 0; i < 8; ++i) {\n xnum = (xnum + p[i]) * z;\n xden = xden * z + q[i];\n }\n res = xnum / xden + 1;\n if (yi < y) {\n res /= yi;\n } else if (yi > y) {\n for (i = 0; i < n; ++i) {\n res *= y;\n y++;\n }\n }\n if (fact) {\n res = fact / res;\n }\n return res;\n};\n\n\n// lower incomplete gamma function, which is usually typeset with a\n// lower-case greek gamma as the function symbol\njStat.gammap = function gammap(a, x) {\n return jStat.lowRegGamma(a, x) * jStat.gammafn(a);\n};\n\n\n// The lower regularized incomplete gamma function, usually written P(a,x)\njStat.lowRegGamma = function lowRegGamma(a, x) {\n var aln = jStat.gammaln(a);\n var ap = a;\n var sum = 1 / a;\n var del = sum;\n var b = x + 1 - a;\n var c = 1 / 1.0e-30;\n var d = 1 / b;\n var h = d;\n var i = 1;\n // calculate maximum number of itterations required for a\n var ITMAX = -~(Math.log((a >= 1) ? a : 1 / a) * 8.5 + a * 0.4 + 17);\n var an;\n\n if (x < 0 || a <= 0) {\n return NaN;\n } else if (x < a + 1) {\n for (; i <= ITMAX; i++) {\n sum += del *= x / ++ap;\n }\n return (sum * Math.exp(-x + a * Math.log(x) - (aln)));\n }\n\n for (; i <= ITMAX; i++) {\n an = -i * (i - a);\n b += 2;\n d = an * d + b;\n c = b + an / c;\n d = 1 / d;\n h *= d * c;\n }\n\n return (1 - h * Math.exp(-x + a * Math.log(x) - (aln)));\n};\n\n// natural log factorial of n\njStat.factorialln = function factorialln(n) {\n return n < 0 ? NaN : jStat.gammaln(n + 1);\n};\n\n// factorial of n\njStat.factorial = function factorial(n) {\n return n < 0 ? NaN : jStat.gammafn(n + 1);\n};\n\n// combinations of n, m\njStat.combination = function combination(n, m) {\n // make sure n or m don't exceed the upper limit of usable values\n return (n > 170 || m > 170)\n ? Math.exp(jStat.combinationln(n, m))\n : (jStat.factorial(n) / jStat.factorial(m)) / jStat.factorial(n - m);\n};\n\n\njStat.combinationln = function combinationln(n, m){\n return jStat.factorialln(n) - jStat.factorialln(m) - jStat.factorialln(n - m);\n};\n\n\n// permutations of n, m\njStat.permutation = function permutation(n, m) {\n return jStat.factorial(n) / jStat.factorial(n - m);\n};\n\n\n// beta function\njStat.betafn = function betafn(x, y) {\n // ensure arguments are positive\n if (x <= 0 || y <= 0)\n return undefined;\n // make sure x + y doesn't exceed the upper limit of usable values\n return (x + y > 170)\n ? Math.exp(jStat.betaln(x, y))\n : jStat.gammafn(x) * jStat.gammafn(y) / jStat.gammafn(x + y);\n};\n\n\n// natural logarithm of beta function\njStat.betaln = function betaln(x, y) {\n return jStat.gammaln(x) + jStat.gammaln(y) - jStat.gammaln(x + y);\n};\n\n\n// Evaluates the continued fraction for incomplete beta function by modified\n// Lentz's method.\njStat.betacf = function betacf(x, a, b) {\n var fpmin = 1e-30;\n var m = 1;\n var qab = a + b;\n var qap = a + 1;\n var qam = a - 1;\n var c = 1;\n var d = 1 - qab * x / qap;\n var m2, aa, del, h;\n\n // These q's will be used in factors that occur in the coefficients\n if (Math.abs(d) < fpmin)\n d = fpmin;\n d = 1 / d;\n h = d;\n\n for (; m <= 100; m++) {\n m2 = 2 * m;\n aa = m * (b - m) * x / ((qam + m2) * (a + m2));\n // One step (the even one) of the recurrence\n d = 1 + aa * d;\n if (Math.abs(d) < fpmin)\n d = fpmin;\n c = 1 + aa / c;\n if (Math.abs(c) < fpmin)\n c = fpmin;\n d = 1 / d;\n h *= d * c;\n aa = -(a + m) * (qab + m) * x / ((a + m2) * (qap + m2));\n // Next step of the recurrence (the odd one)\n d = 1 + aa * d;\n if (Math.abs(d) < fpmin)\n d = fpmin;\n c = 1 + aa / c;\n if (Math.abs(c) < fpmin)\n c = fpmin;\n d = 1 / d;\n del = d * c;\n h *= del;\n if (Math.abs(del - 1.0) < 3e-7)\n break;\n }\n\n return h;\n};\n\n\n// Returns the inverse of the lower regularized inomplete gamma function\njStat.gammapinv = function gammapinv(p, a) {\n var j = 0;\n var a1 = a - 1;\n var EPS = 1e-8;\n var gln = jStat.gammaln(a);\n var x, err, t, u, pp, lna1, afac;\n\n if (p >= 1)\n return Math.max(100, a + 100 * Math.sqrt(a));\n if (p <= 0)\n return 0;\n if (a > 1) {\n lna1 = Math.log(a1);\n afac = Math.exp(a1 * (lna1 - 1) - gln);\n pp = (p < 0.5) ? p : 1 - p;\n t = Math.sqrt(-2 * Math.log(pp));\n x = (2.30753 + t * 0.27061) / (1 + t * (0.99229 + t * 0.04481)) - t;\n if (p < 0.5)\n x = -x;\n x = Math.max(1e-3,\n a * Math.pow(1 - 1 / (9 * a) - x / (3 * Math.sqrt(a)), 3));\n } else {\n t = 1 - a * (0.253 + a * 0.12);\n if (p < t)\n x = Math.pow(p / t, 1 / a);\n else\n x = 1 - Math.log(1 - (p - t) / (1 - t));\n }\n\n for(; j < 12; j++) {\n if (x <= 0)\n return 0;\n err = jStat.lowRegGamma(a, x) - p;\n if (a > 1)\n t = afac * Math.exp(-(x - a1) + a1 * (Math.log(x) - lna1));\n else\n t = Math.exp(-x + a1 * Math.log(x) - gln);\n u = err / t;\n x -= (t = u / (1 - 0.5 * Math.min(1, u * ((a - 1) / x - 1))));\n if (x <= 0)\n x = 0.5 * (x + t);\n if (Math.abs(t) < EPS * x)\n break;\n }\n\n return x;\n};\n\n\n// Returns the error function erf(x)\njStat.erf = function erf(x) {\n var cof = [-1.3026537197817094, 6.4196979235649026e-1, 1.9476473204185836e-2,\n -9.561514786808631e-3, -9.46595344482036e-4, 3.66839497852761e-4,\n 4.2523324806907e-5, -2.0278578112534e-5, -1.624290004647e-6,\n 1.303655835580e-6, 1.5626441722e-8, -8.5238095915e-8,\n 6.529054439e-9, 5.059343495e-9, -9.91364156e-10,\n -2.27365122e-10, 9.6467911e-11, 2.394038e-12,\n -6.886027e-12, 8.94487e-13, 3.13092e-13,\n -1.12708e-13, 3.81e-16, 7.106e-15,\n -1.523e-15, -9.4e-17, 1.21e-16,\n -2.8e-17];\n var j = cof.length - 1;\n var isneg = false;\n var d = 0;\n var dd = 0;\n var t, ty, tmp, res;\n\n if (x < 0) {\n x = -x;\n isneg = true;\n }\n\n t = 2 / (2 + x);\n ty = 4 * t - 2;\n\n for(; j > 0; j--) {\n tmp = d;\n d = ty * d - dd + cof[j];\n dd = tmp;\n }\n\n res = t * Math.exp(-x * x + 0.5 * (cof[0] + ty * d) - dd);\n return isneg ? res - 1 : 1 - res;\n};\n\n\n// Returns the complmentary error function erfc(x)\njStat.erfc = function erfc(x) {\n return 1 - jStat.erf(x);\n};\n\n\n// Returns the inverse of the complementary error function\njStat.erfcinv = function erfcinv(p) {\n var j = 0;\n var x, err, t, pp;\n if (p >= 2)\n return -100;\n if (p <= 0)\n return 100;\n pp = (p < 1) ? p : 2 - p;\n t = Math.sqrt(-2 * Math.log(pp / 2));\n x = -0.70711 * ((2.30753 + t * 0.27061) /\n (1 + t * (0.99229 + t * 0.04481)) - t);\n for (; j < 2; j++) {\n err = jStat.erfc(x) - pp;\n x += err / (1.12837916709551257 * Math.exp(-x * x) - x * err);\n }\n return (p < 1) ? x : -x;\n};\n\n\n// Returns the inverse of the incomplete beta function\njStat.ibetainv = function ibetainv(p, a, b) {\n var EPS = 1e-8;\n var a1 = a - 1;\n var b1 = b - 1;\n var j = 0;\n var lna, lnb, pp, t, u, err, x, al, h, w, afac;\n if (p <= 0)\n return 0;\n if (p >= 1)\n return 1;\n if (a >= 1 && b >= 1) {\n pp = (p < 0.5) ? p : 1 - p;\n t = Math.sqrt(-2 * Math.log(pp));\n x = (2.30753 + t * 0.27061) / (1 + t* (0.99229 + t * 0.04481)) - t;\n if (p < 0.5)\n x = -x;\n al = (x * x - 3) / 6;\n h = 2 / (1 / (2 * a - 1) + 1 / (2 * b - 1));\n w = (x * Math.sqrt(al + h) / h) - (1 / (2 * b - 1) - 1 / (2 * a - 1)) *\n (al + 5 / 6 - 2 / (3 * h));\n x = a / (a + b * Math.exp(2 * w));\n } else {\n lna = Math.log(a / (a + b));\n lnb = Math.log(b / (a + b));\n t = Math.exp(a * lna) / a;\n u = Math.exp(b * lnb) / b;\n w = t + u;\n if (p < t / w)\n x = Math.pow(a * w * p, 1 / a);\n else\n x = 1 - Math.pow(b * w * (1 - p), 1 / b);\n }\n afac = -jStat.gammaln(a) - jStat.gammaln(b) + jStat.gammaln(a + b);\n for(; j < 10; j++) {\n if (x === 0 || x === 1)\n return x;\n err = jStat.ibeta(x, a, b) - p;\n t = Math.exp(a1 * Math.log(x) + b1 * Math.log(1 - x) + afac);\n u = err / t;\n x -= (t = u / (1 - 0.5 * Math.min(1, u * (a1 / x - b1 / (1 - x)))));\n if (x <= 0)\n x = 0.5 * (x + t);\n if (x >= 1)\n x = 0.5 * (x + t + 1);\n if (Math.abs(t) < EPS * x && j > 0)\n break;\n }\n return x;\n};\n\n\n// Returns the incomplete beta function I_x(a,b)\njStat.ibeta = function ibeta(x, a, b) {\n // Factors in front of the continued fraction.\n var bt = (x === 0 || x === 1) ? 0 :\n Math.exp(jStat.gammaln(a + b) - jStat.gammaln(a) -\n jStat.gammaln(b) + a * Math.log(x) + b *\n Math.log(1 - x));\n if (x < 0 || x > 1)\n return false;\n if (x < (a + 1) / (a + b + 2))\n // Use continued fraction directly.\n return bt * jStat.betacf(x, a, b) / a;\n // else use continued fraction after making the symmetry transformation.\n return 1 - bt * jStat.betacf(1 - x, b, a) / b;\n};\n\n\n// Returns a normal deviate (mu=0, sigma=1).\n// If n and m are specified it returns a object of normal deviates.\njStat.randn = function randn(n, m) {\n var u, v, x, y, q;\n if (!m)\n m = n;\n if (n)\n return jStat.create(n, m, function() { return jStat.randn(); });\n do {\n u = jStat._random_fn();\n v = 1.7156 * (jStat._random_fn() - 0.5);\n x = u - 0.449871;\n y = Math.abs(v) + 0.386595;\n q = x * x + y * (0.19600 * y - 0.25472 * x);\n } while (q > 0.27597 && (q > 0.27846 || v * v > -4 * Math.log(u) * u * u));\n return v / u;\n};\n\n\n// Returns a gamma deviate by the method of Marsaglia and Tsang.\njStat.randg = function randg(shape, n, m) {\n var oalph = shape;\n var a1, a2, u, v, x, mat;\n if (!m)\n m = n;\n if (!shape)\n shape = 1;\n if (n) {\n mat = jStat.zeros(n,m);\n mat.alter(function() { return jStat.randg(shape); });\n return mat;\n }\n if (shape < 1)\n shape += 1;\n a1 = shape - 1 / 3;\n a2 = 1 / Math.sqrt(9 * a1);\n do {\n do {\n x = jStat.randn();\n v = 1 + a2 * x;\n } while(v <= 0);\n v = v * v * v;\n u = jStat._random_fn();\n } while(u > 1 - 0.331 * Math.pow(x, 4) &&\n Math.log(u) > 0.5 * x*x + a1 * (1 - v + Math.log(v)));\n // alpha > 1\n if (shape == oalph)\n return a1 * v;\n // alpha < 1\n do {\n u = jStat._random_fn();\n } while(u === 0);\n return Math.pow(u, 1 / oalph) * a1 * v;\n};\n\n\n// making use of static methods on the instance\n(function(funcs) {\n for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n jStat.fn[passfunc] = function() {\n return jStat(\n jStat.map(this, function(value) { return jStat[passfunc](value); }));\n }\n })(funcs[i]);\n})('gammaln gammafn factorial factorialln'.split(' '));\n\n\n(function(funcs) {\n for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n jStat.fn[passfunc] = function() {\n return jStat(jStat[passfunc].apply(null, arguments));\n };\n })(funcs[i]);\n})('randn'.split(' '));\n\n}(jStat, Math));\n(function(jStat, Math) {\n\n// generate all distribution instance methods\n(function(list) {\n for (var i = 0; i < list.length; i++) (function(func) {\n // distribution instance method\n jStat[func] = function f(a, b, c) {\n if (!(this instanceof f))\n return new f(a, b, c);\n this._a = a;\n this._b = b;\n this._c = c;\n return this;\n };\n // distribution method to be used on a jStat instance\n jStat.fn[func] = function(a, b, c) {\n var newthis = jStat[func](a, b, c);\n newthis.data = this;\n return newthis;\n };\n // sample instance method\n jStat[func].prototype.sample = function(arr) {\n var a = this._a;\n var b = this._b;\n var c = this._c;\n if (arr)\n return jStat.alter(arr, function() {\n return jStat[func].sample(a, b, c);\n });\n else\n return jStat[func].sample(a, b, c);\n };\n // generate the pdf, cdf and inv instance methods\n (function(vals) {\n for (var i = 0; i < vals.length; i++) (function(fnfunc) {\n jStat[func].prototype[fnfunc] = function(x) {\n var a = this._a;\n var b = this._b;\n var c = this._c;\n if (!x && x !== 0)\n x = this.data;\n if (typeof x !== 'number') {\n return jStat.fn.map.call(x, function(x) {\n return jStat[func][fnfunc](x, a, b, c);\n });\n }\n return jStat[func][fnfunc](x, a, b, c);\n };\n })(vals[i]);\n })('pdf cdf inv'.split(' '));\n // generate the mean, median, mode and variance instance methods\n (function(vals) {\n for (var i = 0; i < vals.length; i++) (function(fnfunc) {\n jStat[func].prototype[fnfunc] = function() {\n return jStat[func][fnfunc](this._a, this._b, this._c);\n };\n })(vals[i]);\n })('mean median mode variance'.split(' '));\n })(list[i]);\n})((\n 'beta centralF cauchy chisquare exponential gamma invgamma kumaraswamy ' +\n 'laplace lognormal noncentralt normal pareto studentt weibull uniform ' +\n 'binomial negbin hypgeom poisson triangular tukey arcsine'\n).split(' '));\n\n\n\n// extend beta function with static methods\njStat.extend(jStat.beta, {\n pdf: function pdf(x, alpha, beta) {\n // PDF is zero outside the support\n if (x > 1 || x < 0)\n return 0;\n // PDF is one for the uniform case\n if (alpha == 1 && beta == 1)\n return 1;\n\n if (alpha < 512 && beta < 512) {\n return (Math.pow(x, alpha - 1) * Math.pow(1 - x, beta - 1)) /\n jStat.betafn(alpha, beta);\n } else {\n return Math.exp((alpha - 1) * Math.log(x) +\n (beta - 1) * Math.log(1 - x) -\n jStat.betaln(alpha, beta));\n }\n },\n\n cdf: function cdf(x, alpha, beta) {\n return (x > 1 || x < 0) ? (x > 1) * 1 : jStat.ibeta(x, alpha, beta);\n },\n\n inv: function inv(x, alpha, beta) {\n return jStat.ibetainv(x, alpha, beta);\n },\n\n mean: function mean(alpha, beta) {\n return alpha / (alpha + beta);\n },\n\n median: function median(alpha, beta) {\n return jStat.ibetainv(0.5, alpha, beta);\n },\n\n mode: function mode(alpha, beta) {\n return (alpha - 1 ) / ( alpha + beta - 2);\n },\n\n // return a random sample\n sample: function sample(alpha, beta) {\n var u = jStat.randg(alpha);\n return u / (u + jStat.randg(beta));\n },\n\n variance: function variance(alpha, beta) {\n return (alpha * beta) / (Math.pow(alpha + beta, 2) * (alpha + beta + 1));\n }\n});\n\n// extend F function with static methods\njStat.extend(jStat.centralF, {\n // This implementation of the pdf function avoids float overflow\n // See the way that R calculates this value:\n // https://svn.r-project.org/R/trunk/src/nmath/df.c\n pdf: function pdf(x, df1, df2) {\n var p, q, f;\n\n if (x < 0)\n return 0;\n\n if (df1 <= 2) {\n if (x === 0 && df1 < 2) {\n return Infinity;\n }\n if (x === 0 && df1 === 2) {\n return 1;\n }\n return (1 / jStat.betafn(df1 / 2, df2 / 2)) *\n Math.pow(df1 / df2, df1 / 2) *\n Math.pow(x, (df1/2) - 1) *\n Math.pow((1 + (df1 / df2) * x), -(df1 + df2) / 2);\n }\n\n p = (df1 * x) / (df2 + x * df1);\n q = df2 / (df2 + x * df1);\n f = df1 * q / 2.0;\n return f * jStat.binomial.pdf((df1 - 2) / 2, (df1 + df2 - 2) / 2, p);\n },\n\n cdf: function cdf(x, df1, df2) {\n if (x < 0)\n return 0;\n return jStat.ibeta((df1 * x) / (df1 * x + df2), df1 / 2, df2 / 2);\n },\n\n inv: function inv(x, df1, df2) {\n return df2 / (df1 * (1 / jStat.ibetainv(x, df1 / 2, df2 / 2) - 1));\n },\n\n mean: function mean(df1, df2) {\n return (df2 > 2) ? df2 / (df2 - 2) : undefined;\n },\n\n mode: function mode(df1, df2) {\n return (df1 > 2) ? (df2 * (df1 - 2)) / (df1 * (df2 + 2)) : undefined;\n },\n\n // return a random sample\n sample: function sample(df1, df2) {\n var x1 = jStat.randg(df1 / 2) * 2;\n var x2 = jStat.randg(df2 / 2) * 2;\n return (x1 / df1) / (x2 / df2);\n },\n\n variance: function variance(df1, df2) {\n if (df2 <= 4)\n return undefined;\n return 2 * df2 * df2 * (df1 + df2 - 2) /\n (df1 * (df2 - 2) * (df2 - 2) * (df2 - 4));\n }\n});\n\n\n// extend cauchy function with static methods\njStat.extend(jStat.cauchy, {\n pdf: function pdf(x, local, scale) {\n if (scale < 0) { return 0; }\n\n return (scale / (Math.pow(x - local, 2) + Math.pow(scale, 2))) / Math.PI;\n },\n\n cdf: function cdf(x, local, scale) {\n return Math.atan((x - local) / scale) / Math.PI + 0.5;\n },\n\n inv: function(p, local, scale) {\n return local + scale * Math.tan(Math.PI * (p - 0.5));\n },\n\n median: function median(local/*, scale*/) {\n return local;\n },\n\n mode: function mode(local/*, scale*/) {\n return local;\n },\n\n sample: function sample(local, scale) {\n return jStat.randn() *\n Math.sqrt(1 / (2 * jStat.randg(0.5))) * scale + local;\n }\n});\n\n\n\n// extend chisquare function with static methods\njStat.extend(jStat.chisquare, {\n pdf: function pdf(x, dof) {\n if (x < 0)\n return 0;\n return (x === 0 && dof === 2) ? 0.5 :\n Math.exp((dof / 2 - 1) * Math.log(x) - x / 2 - (dof / 2) *\n Math.log(2) - jStat.gammaln(dof / 2));\n },\n\n cdf: function cdf(x, dof) {\n if (x < 0)\n return 0;\n return jStat.lowRegGamma(dof / 2, x / 2);\n },\n\n inv: function(p, dof) {\n return 2 * jStat.gammapinv(p, 0.5 * dof);\n },\n\n mean : function(dof) {\n return dof;\n },\n\n // TODO: this is an approximation (is there a better way?)\n median: function median(dof) {\n return dof * Math.pow(1 - (2 / (9 * dof)), 3);\n },\n\n mode: function mode(dof) {\n return (dof - 2 > 0) ? dof - 2 : 0;\n },\n\n sample: function sample(dof) {\n return jStat.randg(dof / 2) * 2;\n },\n\n variance: function variance(dof) {\n return 2 * dof;\n }\n});\n\n\n\n// extend exponential function with static methods\njStat.extend(jStat.exponential, {\n pdf: function pdf(x, rate) {\n return x < 0 ? 0 : rate * Math.exp(-rate * x);\n },\n\n cdf: function cdf(x, rate) {\n return x < 0 ? 0 : 1 - Math.exp(-rate * x);\n },\n\n inv: function(p, rate) {\n return -Math.log(1 - p) / rate;\n },\n\n mean : function(rate) {\n return 1 / rate;\n },\n\n median: function (rate) {\n return (1 / rate) * Math.log(2);\n },\n\n mode: function mode(/*rate*/) {\n return 0;\n },\n\n sample: function sample(rate) {\n return -1 / rate * Math.log(jStat._random_fn());\n },\n\n variance : function(rate) {\n return Math.pow(rate, -2);\n }\n});\n\n\n\n// extend gamma function with static methods\njStat.extend(jStat.gamma, {\n pdf: function pdf(x, shape, scale) {\n if (x < 0)\n return 0;\n return (x === 0 && shape === 1) ? 1 / scale :\n Math.exp((shape - 1) * Math.log(x) - x / scale -\n jStat.gammaln(shape) - shape * Math.log(scale));\n },\n\n cdf: function cdf(x, shape, scale) {\n if (x < 0)\n return 0;\n return jStat.lowRegGamma(shape, x / scale);\n },\n\n inv: function(p, shape, scale) {\n return jStat.gammapinv(p, shape) * scale;\n },\n\n mean : function(shape, scale) {\n return shape * scale;\n },\n\n mode: function mode(shape, scale) {\n if(shape > 1) return (shape - 1) * scale;\n return undefined;\n },\n\n sample: function sample(shape, scale) {\n return jStat.randg(shape) * scale;\n },\n\n variance: function variance(shape, scale) {\n return shape * scale * scale;\n }\n});\n\n// extend inverse gamma function with static methods\njStat.extend(jStat.invgamma, {\n pdf: function pdf(x, shape, scale) {\n if (x <= 0)\n return 0;\n return Math.exp(-(shape + 1) * Math.log(x) - scale / x -\n jStat.gammaln(shape) + shape * Math.log(scale));\n },\n\n cdf: function cdf(x, shape, scale) {\n if (x <= 0)\n return 0;\n return 1 - jStat.lowRegGamma(shape, scale / x);\n },\n\n inv: function(p, shape, scale) {\n return scale / jStat.gammapinv(1 - p, shape);\n },\n\n mean : function(shape, scale) {\n return (shape > 1) ? scale / (shape - 1) : undefined;\n },\n\n mode: function mode(shape, scale) {\n return scale / (shape + 1);\n },\n\n sample: function sample(shape, scale) {\n return scale / jStat.randg(shape);\n },\n\n variance: function variance(shape, scale) {\n if (shape <= 2)\n return undefined;\n return scale * scale / ((shape - 1) * (shape - 1) * (shape - 2));\n }\n});\n\n\n// extend kumaraswamy function with static methods\njStat.extend(jStat.kumaraswamy, {\n pdf: function pdf(x, alpha, beta) {\n if (x === 0 && alpha === 1)\n return beta;\n else if (x === 1 && beta === 1)\n return alpha;\n return Math.exp(Math.log(alpha) + Math.log(beta) + (alpha - 1) *\n Math.log(x) + (beta - 1) *\n Math.log(1 - Math.pow(x, alpha)));\n },\n\n cdf: function cdf(x, alpha, beta) {\n if (x < 0)\n return 0;\n else if (x > 1)\n return 1;\n return (1 - Math.pow(1 - Math.pow(x, alpha), beta));\n },\n\n inv: function inv(p, alpha, beta) {\n return Math.pow(1 - Math.pow(1 - p, 1 / beta), 1 / alpha);\n },\n\n mean : function(alpha, beta) {\n return (beta * jStat.gammafn(1 + 1 / alpha) *\n jStat.gammafn(beta)) / (jStat.gammafn(1 + 1 / alpha + beta));\n },\n\n median: function median(alpha, beta) {\n return Math.pow(1 - Math.pow(2, -1 / beta), 1 / alpha);\n },\n\n mode: function mode(alpha, beta) {\n if (!(alpha >= 1 && beta >= 1 && (alpha !== 1 && beta !== 1)))\n return undefined;\n return Math.pow((alpha - 1) / (alpha * beta - 1), 1 / alpha);\n },\n\n variance: function variance(/*alpha, beta*/) {\n throw new Error('variance not yet implemented');\n // TODO: complete this\n }\n});\n\n\n\n// extend lognormal function with static methods\njStat.extend(jStat.lognormal, {\n pdf: function pdf(x, mu, sigma) {\n if (x <= 0)\n return 0;\n return Math.exp(-Math.log(x) - 0.5 * Math.log(2 * Math.PI) -\n Math.log(sigma) - Math.pow(Math.log(x) - mu, 2) /\n (2 * sigma * sigma));\n },\n\n cdf: function cdf(x, mu, sigma) {\n if (x < 0)\n return 0;\n return 0.5 +\n (0.5 * jStat.erf((Math.log(x) - mu) / Math.sqrt(2 * sigma * sigma)));\n },\n\n inv: function(p, mu, sigma) {\n return Math.exp(-1.41421356237309505 * sigma * jStat.erfcinv(2 * p) + mu);\n },\n\n mean: function mean(mu, sigma) {\n return Math.exp(mu + sigma * sigma / 2);\n },\n\n median: function median(mu/*, sigma*/) {\n return Math.exp(mu);\n },\n\n mode: function mode(mu, sigma) {\n return Math.exp(mu - sigma * sigma);\n },\n\n sample: function sample(mu, sigma) {\n return Math.exp(jStat.randn() * sigma + mu);\n },\n\n variance: function variance(mu, sigma) {\n return (Math.exp(sigma * sigma) - 1) * Math.exp(2 * mu + sigma * sigma);\n }\n});\n\n\n\n// extend noncentralt function with static methods\njStat.extend(jStat.noncentralt, {\n pdf: function pdf(x, dof, ncp) {\n var tol = 1e-14;\n if (Math.abs(ncp) < tol) // ncp approx 0; use student-t\n return jStat.studentt.pdf(x, dof)\n\n if (Math.abs(x) < tol) { // different formula for x == 0\n return Math.exp(jStat.gammaln((dof + 1) / 2) - ncp * ncp / 2 -\n 0.5 * Math.log(Math.PI * dof) - jStat.gammaln(dof / 2));\n }\n\n // formula for x != 0\n return dof / x *\n (jStat.noncentralt.cdf(x * Math.sqrt(1 + 2 / dof), dof+2, ncp) -\n jStat.noncentralt.cdf(x, dof, ncp));\n },\n\n cdf: function cdf(x, dof, ncp) {\n var tol = 1e-14;\n var min_iterations = 200;\n\n if (Math.abs(ncp) < tol) // ncp approx 0; use student-t\n return jStat.studentt.cdf(x, dof);\n\n // turn negative x into positive and flip result afterwards\n var flip = false;\n if (x < 0) {\n flip = true;\n ncp = -ncp;\n }\n\n var prob = jStat.normal.cdf(-ncp, 0, 1);\n var value = tol + 1;\n // use value at last two steps to determine convergence\n var lastvalue = value;\n var y = x * x / (x * x + dof);\n var j = 0;\n var p = Math.exp(-ncp * ncp / 2);\n var q = Math.exp(-ncp * ncp / 2 - 0.5 * Math.log(2) -\n jStat.gammaln(3 / 2)) * ncp;\n while (j < min_iterations || lastvalue > tol || value > tol) {\n lastvalue = value;\n if (j > 0) {\n p *= (ncp * ncp) / (2 * j);\n q *= (ncp * ncp) / (2 * (j + 1 / 2));\n }\n value = p * jStat.beta.cdf(y, j + 0.5, dof / 2) +\n q * jStat.beta.cdf(y, j+1, dof/2);\n prob += 0.5 * value;\n j++;\n }\n\n return flip ? (1 - prob) : prob;\n }\n});\n\n\n// extend normal function with static methods\njStat.extend(jStat.normal, {\n pdf: function pdf(x, mean, std) {\n return Math.exp(-0.5 * Math.log(2 * Math.PI) -\n Math.log(std) - Math.pow(x - mean, 2) / (2 * std * std));\n },\n\n cdf: function cdf(x, mean, std) {\n return 0.5 * (1 + jStat.erf((x - mean) / Math.sqrt(2 * std * std)));\n },\n\n inv: function(p, mean, std) {\n return -1.41421356237309505 * std * jStat.erfcinv(2 * p) + mean;\n },\n\n mean : function(mean/*, std*/) {\n return mean;\n },\n\n median: function median(mean/*, std*/) {\n return mean;\n },\n\n mode: function (mean/*, std*/) {\n return mean;\n },\n\n sample: function sample(mean, std) {\n return jStat.randn() * std + mean;\n },\n\n variance : function(mean, std) {\n return std * std;\n }\n});\n\n\n\n// extend pareto function with static methods\njStat.extend(jStat.pareto, {\n pdf: function pdf(x, scale, shape) {\n if (x < scale)\n return 0;\n return (shape * Math.pow(scale, shape)) / Math.pow(x, shape + 1);\n },\n\n cdf: function cdf(x, scale, shape) {\n if (x < scale)\n return 0;\n return 1 - Math.pow(scale / x, shape);\n },\n\n inv: function inv(p, scale, shape) {\n return scale / Math.pow(1 - p, 1 / shape);\n },\n\n mean: function mean(scale, shape) {\n if (shape <= 1)\n return undefined;\n return (shape * Math.pow(scale, shape)) / (shape - 1);\n },\n\n median: function median(scale, shape) {\n return scale * (shape * Math.SQRT2);\n },\n\n mode: function mode(scale/*, shape*/) {\n return scale;\n },\n\n variance : function(scale, shape) {\n if (shape <= 2)\n return undefined;\n return (scale*scale * shape) / (Math.pow(shape - 1, 2) * (shape - 2));\n }\n});\n\n\n\n// extend studentt function with static methods\njStat.extend(jStat.studentt, {\n pdf: function pdf(x, dof) {\n dof = dof > 1e100 ? 1e100 : dof;\n return (1/(Math.sqrt(dof) * jStat.betafn(0.5, dof/2))) *\n Math.pow(1 + ((x * x) / dof), -((dof + 1) / 2));\n },\n\n cdf: function cdf(x, dof) {\n var dof2 = dof / 2;\n return jStat.ibeta((x + Math.sqrt(x * x + dof)) /\n (2 * Math.sqrt(x * x + dof)), dof2, dof2);\n },\n\n inv: function(p, dof) {\n var x = jStat.ibetainv(2 * Math.min(p, 1 - p), 0.5 * dof, 0.5);\n x = Math.sqrt(dof * (1 - x) / x);\n return (p > 0.5) ? x : -x;\n },\n\n mean: function mean(dof) {\n return (dof > 1) ? 0 : undefined;\n },\n\n median: function median(/*dof*/) {\n return 0;\n },\n\n mode: function mode(/*dof*/) {\n return 0;\n },\n\n sample: function sample(dof) {\n return jStat.randn() * Math.sqrt(dof / (2 * jStat.randg(dof / 2)));\n },\n\n variance: function variance(dof) {\n return (dof > 2) ? dof / (dof - 2) : (dof > 1) ? Infinity : undefined;\n }\n});\n\n\n\n// extend weibull function with static methods\njStat.extend(jStat.weibull, {\n pdf: function pdf(x, scale, shape) {\n if (x < 0 || scale < 0 || shape < 0)\n return 0;\n return (shape / scale) * Math.pow((x / scale), (shape - 1)) *\n Math.exp(-(Math.pow((x / scale), shape)));\n },\n\n cdf: function cdf(x, scale, shape) {\n return x < 0 ? 0 : 1 - Math.exp(-Math.pow((x / scale), shape));\n },\n\n inv: function(p, scale, shape) {\n return scale * Math.pow(-Math.log(1 - p), 1 / shape);\n },\n\n mean : function(scale, shape) {\n return scale * jStat.gammafn(1 + 1 / shape);\n },\n\n median: function median(scale, shape) {\n return scale * Math.pow(Math.log(2), 1 / shape);\n },\n\n mode: function mode(scale, shape) {\n if (shape <= 1)\n return 0;\n return scale * Math.pow((shape - 1) / shape, 1 / shape);\n },\n\n sample: function sample(scale, shape) {\n return scale * Math.pow(-Math.log(jStat._random_fn()), 1 / shape);\n },\n\n variance: function variance(scale, shape) {\n return scale * scale * jStat.gammafn(1 + 2 / shape) -\n Math.pow(jStat.weibull.mean(scale, shape), 2);\n }\n});\n\n\n\n// extend uniform function with static methods\njStat.extend(jStat.uniform, {\n pdf: function pdf(x, a, b) {\n return (x < a || x > b) ? 0 : 1 / (b - a);\n },\n\n cdf: function cdf(x, a, b) {\n if (x < a)\n return 0;\n else if (x < b)\n return (x - a) / (b - a);\n return 1;\n },\n\n inv: function(p, a, b) {\n return a + (p * (b - a));\n },\n\n mean: function mean(a, b) {\n return 0.5 * (a + b);\n },\n\n median: function median(a, b) {\n return jStat.mean(a, b);\n },\n\n mode: function mode(/*a, b*/) {\n throw new Error('mode is not yet implemented');\n },\n\n sample: function sample(a, b) {\n return (a / 2 + b / 2) + (b / 2 - a / 2) * (2 * jStat._random_fn() - 1);\n },\n\n variance: function variance(a, b) {\n return Math.pow(b - a, 2) / 12;\n }\n});\n\n\n// Got this from http://www.math.ucla.edu/~tom/distributions/binomial.html\nfunction betinc(x, a, b, eps) {\n var a0 = 0;\n var b0 = 1;\n var a1 = 1;\n var b1 = 1;\n var m9 = 0;\n var a2 = 0;\n var c9;\n\n while (Math.abs((a1 - a2) / a1) > eps) {\n a2 = a1;\n c9 = -(a + m9) * (a + b + m9) * x / (a + 2 * m9) / (a + 2 * m9 + 1);\n a0 = a1 + c9 * a0;\n b0 = b1 + c9 * b0;\n m9 = m9 + 1;\n c9 = m9 * (b - m9) * x / (a + 2 * m9 - 1) / (a + 2 * m9);\n a1 = a0 + c9 * a1;\n b1 = b0 + c9 * b1;\n a0 = a0 / b1;\n b0 = b0 / b1;\n a1 = a1 / b1;\n b1 = 1;\n }\n\n return a1 / a;\n}\n\n\n// extend uniform function with static methods\njStat.extend(jStat.binomial, {\n pdf: function pdf(k, n, p) {\n return (p === 0 || p === 1) ?\n ((n * p) === k ? 1 : 0) :\n jStat.combination(n, k) * Math.pow(p, k) * Math.pow(1 - p, n - k);\n },\n\n cdf: function cdf(x, n, p) {\n var betacdf;\n var eps = 1e-10;\n\n if (x < 0)\n return 0;\n if (x >= n)\n return 1;\n if (p < 0 || p > 1 || n <= 0)\n return NaN;\n\n x = Math.floor(x);\n var z = p;\n var a = x + 1;\n var b = n - x;\n var s = a + b;\n var bt = Math.exp(jStat.gammaln(s) - jStat.gammaln(b) -\n jStat.gammaln(a) + a * Math.log(z) + b * Math.log(1 - z));\n\n if (z < (a + 1) / (s + 2))\n betacdf = bt * betinc(z, a, b, eps);\n else\n betacdf = 1 - bt * betinc(1 - z, b, a, eps);\n\n return Math.round((1 - betacdf) * (1 / eps)) / (1 / eps);\n }\n});\n\n\n\n// extend uniform function with static methods\njStat.extend(jStat.negbin, {\n pdf: function pdf(k, r, p) {\n if (k !== k >>> 0)\n return false;\n if (k < 0)\n return 0;\n return jStat.combination(k + r - 1, r - 1) *\n Math.pow(1 - p, k) * Math.pow(p, r);\n },\n\n cdf: function cdf(x, r, p) {\n var sum = 0,\n k = 0;\n if (x < 0) return 0;\n for (; k <= x; k++) {\n sum += jStat.negbin.pdf(k, r, p);\n }\n return sum;\n }\n});\n\n\n\n// extend uniform function with static methods\njStat.extend(jStat.hypgeom, {\n pdf: function pdf(k, N, m, n) {\n // Hypergeometric PDF.\n\n // A simplification of the CDF algorithm below.\n\n // k = number of successes drawn\n // N = population size\n // m = number of successes in population\n // n = number of items drawn from population\n\n if(k !== k | 0) {\n return false;\n } else if(k < 0 || k < m - (N - n)) {\n // It's impossible to have this few successes drawn.\n return 0;\n } else if(k > n || k > m) {\n // It's impossible to have this many successes drawn.\n return 0;\n } else if (m * 2 > N) {\n // More than half the population is successes.\n\n if(n * 2 > N) {\n // More than half the population is sampled.\n\n return jStat.hypgeom.pdf(N - m - n + k, N, N - m, N - n)\n } else {\n // Half or less of the population is sampled.\n\n return jStat.hypgeom.pdf(n - k, N, N - m, n);\n }\n\n } else if(n * 2 > N) {\n // Half or less is successes.\n\n return jStat.hypgeom.pdf(m - k, N, m, N - n);\n\n } else if(m < n) {\n // We want to have the number of things sampled to be less than the\n // successes available. So swap the definitions of successful and sampled.\n return jStat.hypgeom.pdf(k, N, n, m);\n } else {\n // If we get here, half or less of the population was sampled, half or\n // less of it was successes, and we had fewer sampled things than\n // successes. Now we can do this complicated iterative algorithm in an\n // efficient way.\n\n // The basic premise of the algorithm is that we partially normalize our\n // intermediate product to keep it in a numerically good region, and then\n // finish the normalization at the end.\n\n // This variable holds the scaled probability of the current number of\n // successes.\n var scaledPDF = 1;\n\n // This keeps track of how much we have normalized.\n var samplesDone = 0;\n\n for(var i = 0; i < k; i++) {\n // For every possible number of successes up to that observed...\n\n while(scaledPDF > 1 && samplesDone < n) {\n // Intermediate result is growing too big. Apply some of the\n // normalization to shrink everything.\n\n scaledPDF *= 1 - (m / (N - samplesDone));\n\n // Say we've normalized by this sample already.\n samplesDone++;\n }\n\n // Work out the partially-normalized hypergeometric PDF for the next\n // number of successes\n scaledPDF *= (n - i) * (m - i) / ((i + 1) * (N - m - n + i + 1));\n }\n\n for(; samplesDone < n; samplesDone++) {\n // Apply all the rest of the normalization\n scaledPDF *= 1 - (m / (N - samplesDone));\n }\n\n // Bound answer sanely before returning.\n return Math.min(1, Math.max(0, scaledPDF));\n }\n },\n\n cdf: function cdf(x, N, m, n) {\n // Hypergeometric CDF.\n\n // This algorithm is due to Prof. Thomas S. Ferguson, ,\n // and comes from his hypergeometric test calculator at\n // .\n\n // x = number of successes drawn\n // N = population size\n // m = number of successes in population\n // n = number of items drawn from population\n\n if(x < 0 || x < m - (N - n)) {\n // It's impossible to have this few successes drawn or fewer.\n return 0;\n } else if(x >= n || x >= m) {\n // We will always have this many successes or fewer.\n return 1;\n } else if (m * 2 > N) {\n // More than half the population is successes.\n\n if(n * 2 > N) {\n // More than half the population is sampled.\n\n return jStat.hypgeom.cdf(N - m - n + x, N, N - m, N - n)\n } else {\n // Half or less of the population is sampled.\n\n return 1 - jStat.hypgeom.cdf(n - x - 1, N, N - m, n);\n }\n\n } else if(n * 2 > N) {\n // Half or less is successes.\n\n return 1 - jStat.hypgeom.cdf(m - x - 1, N, m, N - n);\n\n } else if(m < n) {\n // We want to have the number of things sampled to be less than the\n // successes available. So swap the definitions of successful and sampled.\n return jStat.hypgeom.cdf(x, N, n, m);\n } else {\n // If we get here, half or less of the population was sampled, half or\n // less of it was successes, and we had fewer sampled things than\n // successes. Now we can do this complicated iterative algorithm in an\n // efficient way.\n\n // The basic premise of the algorithm is that we partially normalize our\n // intermediate sum to keep it in a numerically good region, and then\n // finish the normalization at the end.\n\n // Holds the intermediate, scaled total CDF.\n var scaledCDF = 1;\n\n // This variable holds the scaled probability of the current number of\n // successes.\n var scaledPDF = 1;\n\n // This keeps track of how much we have normalized.\n var samplesDone = 0;\n\n for(var i = 0; i < x; i++) {\n // For every possible number of successes up to that observed...\n\n while(scaledCDF > 1 && samplesDone < n) {\n // Intermediate result is growing too big. Apply some of the\n // normalization to shrink everything.\n\n var factor = 1 - (m / (N - samplesDone));\n\n scaledPDF *= factor;\n scaledCDF *= factor;\n\n // Say we've normalized by this sample already.\n samplesDone++;\n }\n\n // Work out the partially-normalized hypergeometric PDF for the next\n // number of successes\n scaledPDF *= (n - i) * (m - i) / ((i + 1) * (N - m - n + i + 1));\n\n // Add to the CDF answer.\n scaledCDF += scaledPDF;\n }\n\n for(; samplesDone < n; samplesDone++) {\n // Apply all the rest of the normalization\n scaledCDF *= 1 - (m / (N - samplesDone));\n }\n\n // Bound answer sanely before returning.\n return Math.min(1, Math.max(0, scaledCDF));\n }\n }\n});\n\n\n\n// extend uniform function with static methods\njStat.extend(jStat.poisson, {\n pdf: function pdf(k, l) {\n if (l < 0 || (k % 1) !== 0 || k < 0) {\n return 0;\n }\n\n return Math.pow(l, k) * Math.exp(-l) / jStat.factorial(k);\n },\n\n cdf: function cdf(x, l) {\n var sumarr = [],\n k = 0;\n if (x < 0) return 0;\n for (; k <= x; k++) {\n sumarr.push(jStat.poisson.pdf(k, l));\n }\n return jStat.sum(sumarr);\n },\n\n mean : function(l) {\n return l;\n },\n\n variance : function(l) {\n return l;\n },\n\n sampleSmall: function sampleSmall(l) {\n var p = 1, k = 0, L = Math.exp(-l);\n do {\n k++;\n p *= jStat._random_fn();\n } while (p > L);\n return k - 1;\n },\n\n sampleLarge: function sampleLarge(l) {\n var lam = l;\n var k;\n var U, V, slam, loglam, a, b, invalpha, vr, us;\n\n slam = Math.sqrt(lam);\n loglam = Math.log(lam);\n b = 0.931 + 2.53 * slam;\n a = -0.059 + 0.02483 * b;\n invalpha = 1.1239 + 1.1328 / (b - 3.4);\n vr = 0.9277 - 3.6224 / (b - 2);\n\n while (1) {\n U = Math.random() - 0.5;\n V = Math.random();\n us = 0.5 - Math.abs(U);\n k = Math.floor((2 * a / us + b) * U + lam + 0.43);\n if ((us >= 0.07) && (V <= vr)) {\n return k;\n }\n if ((k < 0) || ((us < 0.013) && (V > us))) {\n continue;\n }\n /* log(V) == log(0.0) ok here */\n /* if U==0.0 so that us==0.0, log is ok since always returns */\n if ((Math.log(V) + Math.log(invalpha) - Math.log(a / (us * us) + b)) <= (-lam + k * loglam - jStat.loggam(k + 1))) {\n return k;\n }\n }\n },\n\n sample: function sample(l) {\n if (l < 10)\n return this.sampleSmall(l);\n else\n return this.sampleLarge(l);\n }\n});\n\n// extend triangular function with static methods\njStat.extend(jStat.triangular, {\n pdf: function pdf(x, a, b, c) {\n if (b <= a || c < a || c > b) {\n return NaN;\n } else {\n if (x < a || x > b) {\n return 0;\n } else if (x < c) {\n return (2 * (x - a)) / ((b - a) * (c - a));\n } else if (x === c) {\n return (2 / (b - a));\n } else { // x > c\n return (2 * (b - x)) / ((b - a) * (b - c));\n }\n }\n },\n\n cdf: function cdf(x, a, b, c) {\n if (b <= a || c < a || c > b)\n return NaN;\n if (x <= a)\n return 0;\n else if (x >= b)\n return 1;\n if (x <= c)\n return Math.pow(x - a, 2) / ((b - a) * (c - a));\n else // x > c\n return 1 - Math.pow(b - x, 2) / ((b - a) * (b - c));\n },\n\n inv: function inv(p, a, b, c) {\n if (b <= a || c < a || c > b) {\n return NaN;\n } else {\n if (p <= ((c - a) / (b - a))) {\n return a + (b - a) * Math.sqrt(p * ((c - a) / (b - a)));\n } else { // p > ((c - a) / (b - a))\n return a + (b - a) * (1 - Math.sqrt((1 - p) * (1 - ((c - a) / (b - a)))));\n }\n }\n },\n\n mean: function mean(a, b, c) {\n return (a + b + c) / 3;\n },\n\n median: function median(a, b, c) {\n if (c <= (a + b) / 2) {\n return b - Math.sqrt((b - a) * (b - c)) / Math.sqrt(2);\n } else if (c > (a + b) / 2) {\n return a + Math.sqrt((b - a) * (c - a)) / Math.sqrt(2);\n }\n },\n\n mode: function mode(a, b, c) {\n return c;\n },\n\n sample: function sample(a, b, c) {\n var u = jStat._random_fn();\n if (u < ((c - a) / (b - a)))\n return a + Math.sqrt(u * (b - a) * (c - a))\n return b - Math.sqrt((1 - u) * (b - a) * (b - c));\n },\n\n variance: function variance(a, b, c) {\n return (a * a + b * b + c * c - a * b - a * c - b * c) / 18;\n }\n});\n\n\n// extend arcsine function with static methods\njStat.extend(jStat.arcsine, {\n pdf: function pdf(x, a, b) {\n if (b <= a) return NaN;\n\n return (x <= a || x >= b) ? 0 :\n (2 / Math.PI) *\n Math.pow(Math.pow(b - a, 2) -\n Math.pow(2 * x - a - b, 2), -0.5);\n },\n\n cdf: function cdf(x, a, b) {\n if (x < a)\n return 0;\n else if (x < b)\n return (2 / Math.PI) * Math.asin(Math.sqrt((x - a)/(b - a)));\n return 1;\n },\n\n inv: function(p, a, b) {\n return a + (0.5 - 0.5 * Math.cos(Math.PI * p)) * (b - a);\n },\n\n mean: function mean(a, b) {\n if (b <= a) return NaN;\n return (a + b) / 2;\n },\n\n median: function median(a, b) {\n if (b <= a) return NaN;\n return (a + b) / 2;\n },\n\n mode: function mode(/*a, b*/) {\n throw new Error('mode is not yet implemented');\n },\n\n sample: function sample(a, b) {\n return ((a + b) / 2) + ((b - a) / 2) *\n Math.sin(2 * Math.PI * jStat.uniform.sample(0, 1));\n },\n\n variance: function variance(a, b) {\n if (b <= a) return NaN;\n return Math.pow(b - a, 2) / 8;\n }\n});\n\n\nfunction laplaceSign(x) { return x / Math.abs(x); }\n\njStat.extend(jStat.laplace, {\n pdf: function pdf(x, mu, b) {\n return (b <= 0) ? 0 : (Math.exp(-Math.abs(x - mu) / b)) / (2 * b);\n },\n\n cdf: function cdf(x, mu, b) {\n if (b <= 0) { return 0; }\n\n if(x < mu) {\n return 0.5 * Math.exp((x - mu) / b);\n } else {\n return 1 - 0.5 * Math.exp(- (x - mu) / b);\n }\n },\n\n mean: function(mu/*, b*/) {\n return mu;\n },\n\n median: function(mu/*, b*/) {\n return mu;\n },\n\n mode: function(mu/*, b*/) {\n return mu;\n },\n\n variance: function(mu, b) {\n return 2 * b * b;\n },\n\n sample: function sample(mu, b) {\n var u = jStat._random_fn() - 0.5;\n\n return mu - (b * laplaceSign(u) * Math.log(1 - (2 * Math.abs(u))));\n }\n});\n\nfunction tukeyWprob(w, rr, cc) {\n var nleg = 12;\n var ihalf = 6;\n\n var C1 = -30;\n var C2 = -50;\n var C3 = 60;\n var bb = 8;\n var wlar = 3;\n var wincr1 = 2;\n var wincr2 = 3;\n var xleg = [\n 0.981560634246719250690549090149,\n 0.904117256370474856678465866119,\n 0.769902674194304687036893833213,\n 0.587317954286617447296702418941,\n 0.367831498998180193752691536644,\n 0.125233408511468915472441369464\n ];\n var aleg = [\n 0.047175336386511827194615961485,\n 0.106939325995318430960254718194,\n 0.160078328543346226334652529543,\n 0.203167426723065921749064455810,\n 0.233492536538354808760849898925,\n 0.249147045813402785000562436043\n ];\n\n var qsqz = w * 0.5;\n\n // if w >= 16 then the integral lower bound (occurs for c=20)\n // is 0.99999999999995 so return a value of 1.\n\n if (qsqz >= bb)\n return 1.0;\n\n // find (f(w/2) - 1) ^ cc\n // (first term in integral of hartley's form).\n\n var pr_w = 2 * jStat.normal.cdf(qsqz, 0, 1, 1, 0) - 1; // erf(qsqz / M_SQRT2)\n // if pr_w ^ cc < 2e-22 then set pr_w = 0\n if (pr_w >= Math.exp(C2 / cc))\n pr_w = Math.pow(pr_w, cc);\n else\n pr_w = 0.0;\n\n // if w is large then the second component of the\n // integral is small, so fewer intervals are needed.\n\n var wincr;\n if (w > wlar)\n wincr = wincr1;\n else\n wincr = wincr2;\n\n // find the integral of second term of hartley's form\n // for the integral of the range for equal-length\n // intervals using legendre quadrature. limits of\n // integration are from (w/2, 8). two or three\n // equal-length intervals are used.\n\n // blb and bub are lower and upper limits of integration.\n\n var blb = qsqz;\n var binc = (bb - qsqz) / wincr;\n var bub = blb + binc;\n var einsum = 0.0;\n\n // integrate over each interval\n\n var cc1 = cc - 1.0;\n for (var wi = 1; wi <= wincr; wi++) {\n var elsum = 0.0;\n var a = 0.5 * (bub + blb);\n\n // legendre quadrature with order = nleg\n\n var b = 0.5 * (bub - blb);\n\n for (var jj = 1; jj <= nleg; jj++) {\n var j, xx;\n if (ihalf < jj) {\n j = (nleg - jj) + 1;\n xx = xleg[j-1];\n } else {\n j = jj;\n xx = -xleg[j-1];\n }\n var c = b * xx;\n var ac = a + c;\n\n // if exp(-qexpo/2) < 9e-14,\n // then doesn't contribute to integral\n\n var qexpo = ac * ac;\n if (qexpo > C3)\n break;\n\n var pplus = 2 * jStat.normal.cdf(ac, 0, 1, 1, 0);\n var pminus= 2 * jStat.normal.cdf(ac, w, 1, 1, 0);\n\n // if rinsum ^ (cc-1) < 9e-14,\n // then doesn't contribute to integral\n\n var rinsum = (pplus * 0.5) - (pminus * 0.5);\n if (rinsum >= Math.exp(C1 / cc1)) {\n rinsum = (aleg[j-1] * Math.exp(-(0.5 * qexpo))) * Math.pow(rinsum, cc1);\n elsum += rinsum;\n }\n }\n elsum *= (((2.0 * b) * cc) / Math.sqrt(2 * Math.PI));\n einsum += elsum;\n blb = bub;\n bub += binc;\n }\n\n // if pr_w ^ rr < 9e-14, then return 0\n pr_w += einsum;\n if (pr_w <= Math.exp(C1 / rr))\n return 0;\n\n pr_w = Math.pow(pr_w, rr);\n if (pr_w >= 1) // 1 was iMax was eps\n return 1;\n return pr_w;\n}\n\nfunction tukeyQinv(p, c, v) {\n var p0 = 0.322232421088;\n var q0 = 0.993484626060e-01;\n var p1 = -1.0;\n var q1 = 0.588581570495;\n var p2 = -0.342242088547;\n var q2 = 0.531103462366;\n var p3 = -0.204231210125;\n var q3 = 0.103537752850;\n var p4 = -0.453642210148e-04;\n var q4 = 0.38560700634e-02;\n var c1 = 0.8832;\n var c2 = 0.2368;\n var c3 = 1.214;\n var c4 = 1.208;\n var c5 = 1.4142;\n var vmax = 120.0;\n\n var ps = 0.5 - 0.5 * p;\n var yi = Math.sqrt(Math.log(1.0 / (ps * ps)));\n var t = yi + (((( yi * p4 + p3) * yi + p2) * yi + p1) * yi + p0)\n / (((( yi * q4 + q3) * yi + q2) * yi + q1) * yi + q0);\n if (v < vmax) t += (t * t * t + t) / v / 4.0;\n var q = c1 - c2 * t;\n if (v < vmax) q += -c3 / v + c4 * t / v;\n return t * (q * Math.log(c - 1.0) + c5);\n}\n\njStat.extend(jStat.tukey, {\n cdf: function cdf(q, nmeans, df) {\n // Identical implementation as the R ptukey() function as of commit 68947\n var rr = 1;\n var cc = nmeans;\n\n var nlegq = 16;\n var ihalfq = 8;\n\n var eps1 = -30.0;\n var eps2 = 1.0e-14;\n var dhaf = 100.0;\n var dquar = 800.0;\n var deigh = 5000.0;\n var dlarg = 25000.0;\n var ulen1 = 1.0;\n var ulen2 = 0.5;\n var ulen3 = 0.25;\n var ulen4 = 0.125;\n var xlegq = [\n 0.989400934991649932596154173450,\n 0.944575023073232576077988415535,\n 0.865631202387831743880467897712,\n 0.755404408355003033895101194847,\n 0.617876244402643748446671764049,\n 0.458016777657227386342419442984,\n 0.281603550779258913230460501460,\n 0.950125098376374401853193354250e-1\n ];\n var alegq = [\n 0.271524594117540948517805724560e-1,\n 0.622535239386478928628438369944e-1,\n 0.951585116824927848099251076022e-1,\n 0.124628971255533872052476282192,\n 0.149595988816576732081501730547,\n 0.169156519395002538189312079030,\n 0.182603415044923588866763667969,\n 0.189450610455068496285396723208\n ];\n\n if (q <= 0)\n return 0;\n\n // df must be > 1\n // there must be at least two values\n\n if (df < 2 || rr < 1 || cc < 2) return NaN;\n\n if (!Number.isFinite(q))\n return 1;\n\n if (df > dlarg)\n return tukeyWprob(q, rr, cc);\n\n // calculate leading constant\n\n var f2 = df * 0.5;\n var f2lf = ((f2 * Math.log(df)) - (df * Math.log(2))) - jStat.gammaln(f2);\n var f21 = f2 - 1.0;\n\n // integral is divided into unit, half-unit, quarter-unit, or\n // eighth-unit length intervals depending on the value of the\n // degrees of freedom.\n\n var ff4 = df * 0.25;\n var ulen;\n if (df <= dhaf) ulen = ulen1;\n else if (df <= dquar) ulen = ulen2;\n else if (df <= deigh) ulen = ulen3;\n else ulen = ulen4;\n\n f2lf += Math.log(ulen);\n\n // integrate over each subinterval\n\n var ans = 0.0;\n\n for (var i = 1; i <= 50; i++) {\n var otsum = 0.0;\n\n // legendre quadrature with order = nlegq\n // nodes (stored in xlegq) are symmetric around zero.\n\n var twa1 = (2 * i - 1) * ulen;\n\n for (var jj = 1; jj <= nlegq; jj++) {\n var j, t1;\n if (ihalfq < jj) {\n j = jj - ihalfq - 1;\n t1 = (f2lf + (f21 * Math.log(twa1 + (xlegq[j] * ulen))))\n - (((xlegq[j] * ulen) + twa1) * ff4);\n } else {\n j = jj - 1;\n t1 = (f2lf + (f21 * Math.log(twa1 - (xlegq[j] * ulen))))\n + (((xlegq[j] * ulen) - twa1) * ff4);\n }\n\n // if exp(t1) < 9e-14, then doesn't contribute to integral\n var qsqz;\n if (t1 >= eps1) {\n if (ihalfq < jj) {\n qsqz = q * Math.sqrt(((xlegq[j] * ulen) + twa1) * 0.5);\n } else {\n qsqz = q * Math.sqrt(((-(xlegq[j] * ulen)) + twa1) * 0.5);\n }\n\n // call wprob to find integral of range portion\n\n var wprb = tukeyWprob(qsqz, rr, cc);\n var rotsum = (wprb * alegq[j]) * Math.exp(t1);\n otsum += rotsum;\n }\n // end legendre integral for interval i\n // L200:\n }\n\n // if integral for interval i < 1e-14, then stop.\n // However, in order to avoid small area under left tail,\n // at least 1 / ulen intervals are calculated.\n if (i * ulen >= 1.0 && otsum <= eps2)\n break;\n\n // end of interval i\n // L330:\n\n ans += otsum;\n }\n\n if (otsum > eps2) { // not converged\n throw new Error('tukey.cdf failed to converge');\n }\n if (ans > 1)\n ans = 1;\n return ans;\n },\n\n inv: function(p, nmeans, df) {\n // Identical implementation as the R qtukey() function as of commit 68947\n var rr = 1;\n var cc = nmeans;\n\n var eps = 0.0001;\n var maxiter = 50;\n\n // df must be > 1 ; there must be at least two values\n if (df < 2 || rr < 1 || cc < 2) return NaN;\n\n if (p < 0 || p > 1) return NaN;\n if (p === 0) return 0;\n if (p === 1) return Infinity;\n\n // Initial value\n\n var x0 = tukeyQinv(p, cc, df);\n\n // Find prob(value < x0)\n\n var valx0 = jStat.tukey.cdf(x0, nmeans, df) - p;\n\n // Find the second iterate and prob(value < x1).\n // If the first iterate has probability value\n // exceeding p then second iterate is 1 less than\n // first iterate; otherwise it is 1 greater.\n\n var x1;\n if (valx0 > 0.0)\n x1 = Math.max(0.0, x0 - 1.0);\n else\n x1 = x0 + 1.0;\n var valx1 = jStat.tukey.cdf(x1, nmeans, df) - p;\n\n // Find new iterate\n\n var ans;\n for(var iter = 1; iter < maxiter; iter++) {\n ans = x1 - ((valx1 * (x1 - x0)) / (valx1 - valx0));\n valx0 = valx1;\n\n // New iterate must be >= 0\n\n x0 = x1;\n if (ans < 0.0) {\n ans = 0.0;\n valx1 = -p;\n }\n // Find prob(value < new iterate)\n\n valx1 = jStat.tukey.cdf(ans, nmeans, df) - p;\n x1 = ans;\n\n // If the difference between two successive\n // iterates is less than eps, stop\n\n var xabs = Math.abs(x1 - x0);\n if (xabs < eps)\n return ans;\n }\n\n throw new Error('tukey.inv failed to converge');\n }\n});\n\n}(jStat, Math));\n/* Provides functions for the solution of linear system of equations, integration, extrapolation,\n * interpolation, eigenvalue problems, differential equations and PCA analysis. */\n\n(function(jStat, Math) {\n\nvar push = Array.prototype.push;\nvar isArray = jStat.utils.isArray;\n\nfunction isUsable(arg) {\n return isArray(arg) || arg instanceof jStat;\n}\n\njStat.extend({\n\n // add a vector/matrix to a vector/matrix or scalar\n add: function add(arr, arg) {\n // check if arg is a vector or scalar\n if (isUsable(arg)) {\n if (!isUsable(arg[0])) arg = [ arg ];\n return jStat.map(arr, function(value, row, col) {\n return value + arg[row][col];\n });\n }\n return jStat.map(arr, function(value) { return value + arg; });\n },\n\n // subtract a vector or scalar from the vector\n subtract: function subtract(arr, arg) {\n // check if arg is a vector or scalar\n if (isUsable(arg)) {\n if (!isUsable(arg[0])) arg = [ arg ];\n return jStat.map(arr, function(value, row, col) {\n return value - arg[row][col] || 0;\n });\n }\n return jStat.map(arr, function(value) { return value - arg; });\n },\n\n // matrix division\n divide: function divide(arr, arg) {\n if (isUsable(arg)) {\n if (!isUsable(arg[0])) arg = [ arg ];\n return jStat.multiply(arr, jStat.inv(arg));\n }\n return jStat.map(arr, function(value) { return value / arg; });\n },\n\n // matrix multiplication\n multiply: function multiply(arr, arg) {\n var row, col, nrescols, sum, nrow, ncol, res, rescols;\n // eg: arr = 2 arg = 3 -> 6 for res[0][0] statement closure\n if (arr.length === undefined && arg.length === undefined) {\n return arr * arg;\n }\n nrow = arr.length,\n ncol = arr[0].length,\n res = jStat.zeros(nrow, nrescols = (isUsable(arg)) ? arg[0].length : ncol),\n rescols = 0;\n if (isUsable(arg)) {\n for (; rescols < nrescols; rescols++) {\n for (row = 0; row < nrow; row++) {\n sum = 0;\n for (col = 0; col < ncol; col++)\n sum += arr[row][col] * arg[col][rescols];\n res[row][rescols] = sum;\n }\n }\n return (nrow === 1 && rescols === 1) ? res[0][0] : res;\n }\n return jStat.map(arr, function(value) { return value * arg; });\n },\n\n // outer([1,2,3],[4,5,6])\n // ===\n // [[1],[2],[3]] times [[4,5,6]]\n // ->\n // [[4,5,6],[8,10,12],[12,15,18]]\n outer:function outer(A, B) {\n return jStat.multiply(A.map(function(t){ return [t] }), [B]);\n },\n\n\n // Returns the dot product of two matricies\n dot: function dot(arr, arg) {\n if (!isUsable(arr[0])) arr = [ arr ];\n if (!isUsable(arg[0])) arg = [ arg ];\n // convert column to row vector\n var left = (arr[0].length === 1 && arr.length !== 1) ? jStat.transpose(arr) : arr,\n right = (arg[0].length === 1 && arg.length !== 1) ? jStat.transpose(arg) : arg,\n res = [],\n row = 0,\n nrow = left.length,\n ncol = left[0].length,\n sum, col;\n for (; row < nrow; row++) {\n res[row] = [];\n sum = 0;\n for (col = 0; col < ncol; col++)\n sum += left[row][col] * right[row][col];\n res[row] = sum;\n }\n return (res.length === 1) ? res[0] : res;\n },\n\n // raise every element by a scalar\n pow: function pow(arr, arg) {\n return jStat.map(arr, function(value) { return Math.pow(value, arg); });\n },\n\n // exponentiate every element\n exp: function exp(arr) {\n return jStat.map(arr, function(value) { return Math.exp(value); });\n },\n\n // generate the natural log of every element\n log: function exp(arr) {\n return jStat.map(arr, function(value) { return Math.log(value); });\n },\n\n // generate the absolute values of the vector\n abs: function abs(arr) {\n return jStat.map(arr, function(value) { return Math.abs(value); });\n },\n\n // computes the p-norm of the vector\n // In the case that a matrix is passed, uses the first row as the vector\n norm: function norm(arr, p) {\n var nnorm = 0,\n i = 0;\n // check the p-value of the norm, and set for most common case\n if (isNaN(p)) p = 2;\n // check if multi-dimensional array, and make vector correction\n if (isUsable(arr[0])) arr = arr[0];\n // vector norm\n for (; i < arr.length; i++) {\n nnorm += Math.pow(Math.abs(arr[i]), p);\n }\n return Math.pow(nnorm, 1 / p);\n },\n\n // computes the angle between two vectors in rads\n // In case a matrix is passed, this uses the first row as the vector\n angle: function angle(arr, arg) {\n return Math.acos(jStat.dot(arr, arg) / (jStat.norm(arr) * jStat.norm(arg)));\n },\n\n // augment one matrix by another\n // Note: this function returns a matrix, not a jStat object\n aug: function aug(a, b) {\n var newarr = [];\n var i;\n for (i = 0; i < a.length; i++) {\n newarr.push(a[i].slice());\n }\n for (i = 0; i < newarr.length; i++) {\n push.apply(newarr[i], b[i]);\n }\n return newarr;\n },\n\n // The inv() function calculates the inverse of a matrix\n // Create the inverse by augmenting the matrix by the identity matrix of the\n // appropriate size, and then use G-J elimination on the augmented matrix.\n inv: function inv(a) {\n var rows = a.length;\n var cols = a[0].length;\n var b = jStat.identity(rows, cols);\n var c = jStat.gauss_jordan(a, b);\n var result = [];\n var i = 0;\n var j;\n\n //We need to copy the inverse portion to a new matrix to rid G-J artifacts\n for (; i < rows; i++) {\n result[i] = [];\n for (j = cols; j < c[0].length; j++)\n result[i][j - cols] = c[i][j];\n }\n return result;\n },\n\n // calculate the determinant of a matrix\n det: function det(a) {\n if (a.length === 2) {\n return a[0][0] * a[1][1] - a[0][1] * a[1][0];\n }\n\n var determinant = 0;\n for (var i = 0; i < a.length; i++) {\n // build a sub matrix without column `i`\n var submatrix = [];\n for (var row = 1; row < a.length; row++) {\n submatrix[row - 1] = [];\n for (var col = 0; col < a.length; col++) {\n if (col < i) {\n submatrix[row - 1][col] = a[row][col];\n } else if (col > i) {\n submatrix[row - 1][col - 1] = a[row][col];\n }\n }\n }\n\n // alternate between + and - between determinants\n var sign = i % 2 ? -1 : 1;\n determinant += det(submatrix) * a[0][i] * sign;\n }\n\n return determinant\n },\n\n gauss_elimination: function gauss_elimination(a, b) {\n var i = 0,\n j = 0,\n n = a.length,\n m = a[0].length,\n factor = 1,\n sum = 0,\n x = [],\n maug, pivot, temp, k;\n a = jStat.aug(a, b);\n maug = a[0].length;\n for(i = 0; i < n; i++) {\n pivot = a[i][i];\n j = i;\n for (k = i + 1; k < m; k++) {\n if (pivot < Math.abs(a[k][i])) {\n pivot = a[k][i];\n j = k;\n }\n }\n if (j != i) {\n for(k = 0; k < maug; k++) {\n temp = a[i][k];\n a[i][k] = a[j][k];\n a[j][k] = temp;\n }\n }\n for (j = i + 1; j < n; j++) {\n factor = a[j][i] / a[i][i];\n for(k = i; k < maug; k++) {\n a[j][k] = a[j][k] - factor * a[i][k];\n }\n }\n }\n for (i = n - 1; i >= 0; i--) {\n sum = 0;\n for (j = i + 1; j<= n - 1; j++) {\n sum = sum + x[j] * a[i][j];\n }\n x[i] =(a[i][maug - 1] - sum) / a[i][i];\n }\n return x;\n },\n\n gauss_jordan: function gauss_jordan(a, b) {\n var m = jStat.aug(a, b);\n var h = m.length;\n var w = m[0].length;\n var c = 0;\n var x, y, y2;\n // find max pivot\n for (y = 0; y < h; y++) {\n var maxrow = y;\n for (y2 = y+1; y2 < h; y2++) {\n if (Math.abs(m[y2][y]) > Math.abs(m[maxrow][y]))\n maxrow = y2;\n }\n var tmp = m[y];\n m[y] = m[maxrow];\n m[maxrow] = tmp\n for (y2 = y+1; y2 < h; y2++) {\n c = m[y2][y] / m[y][y];\n for (x = y; x < w; x++) {\n m[y2][x] -= m[y][x] * c;\n }\n }\n }\n // backsubstitute\n for (y = h-1; y >= 0; y--) {\n c = m[y][y];\n for (y2 = 0; y2 < y; y2++) {\n for (x = w-1; x > y-1; x--) {\n m[y2][x] -= m[y][x] * m[y2][y] / c;\n }\n }\n m[y][y] /= c;\n for (x = h; x < w; x++) {\n m[y][x] /= c;\n }\n }\n return m;\n },\n\n // solve equation\n // Ax=b\n // A is upper triangular matrix\n // A=[[1,2,3],[0,4,5],[0,6,7]]\n // b=[1,2,3]\n // triaUpSolve(A,b) // -> [2.666,0.1666,1.666]\n // if you use matrix style\n // A=[[1,2,3],[0,4,5],[0,6,7]]\n // b=[[1],[2],[3]]\n // will return [[2.666],[0.1666],[1.666]]\n triaUpSolve: function triaUpSolve(A, b) {\n var size = A[0].length;\n var x = jStat.zeros(1, size)[0];\n var parts;\n var matrix_mode = false;\n\n if (b[0].length != undefined) {\n b = b.map(function(i){ return i[0] });\n matrix_mode = true;\n }\n\n jStat.arange(size - 1, -1, -1).forEach(function(i) {\n parts = jStat.arange(i + 1, size).map(function(j) {\n return x[j] * A[i][j];\n });\n x[i] = (b[i] - jStat.sum(parts)) / A[i][i];\n });\n\n if (matrix_mode)\n return x.map(function(i){ return [i] });\n return x;\n },\n\n triaLowSolve: function triaLowSolve(A, b) {\n // like to triaUpSolve but A is lower triangular matrix\n var size = A[0].length;\n var x = jStat.zeros(1, size)[0];\n var parts;\n\n var matrix_mode=false;\n if (b[0].length != undefined) {\n b = b.map(function(i){ return i[0] });\n matrix_mode = true;\n }\n\n jStat.arange(size).forEach(function(i) {\n parts = jStat.arange(i).map(function(j) {\n return A[i][j] * x[j];\n });\n x[i] = (b[i] - jStat.sum(parts)) / A[i][i];\n })\n\n if (matrix_mode)\n return x.map(function(i){ return [i] });\n return x;\n },\n\n\n // A -> [L,U]\n // A=LU\n // L is lower triangular matrix\n // U is upper triangular matrix\n lu: function lu(A) {\n var size = A.length;\n //var L=jStat.diagonal(jStat.ones(1,size)[0]);\n var L = jStat.identity(size);\n var R = jStat.zeros(A.length, A[0].length);\n var parts;\n jStat.arange(size).forEach(function(t) {\n R[0][t] = A[0][t];\n });\n jStat.arange(1, size).forEach(function(l) {\n jStat.arange(l).forEach(function(i) {\n parts = jStat.arange(i).map(function(jj) {\n return L[l][jj] * R[jj][i];\n });\n L[l][i] = (A[l][i] - jStat.sum(parts)) / R[i][i];\n });\n jStat.arange(l, size).forEach(function(j) {\n parts = jStat.arange(l).map(function(jj) {\n return L[l][jj] * R[jj][j];\n });\n R[l][j] = A[parts.length][j] - jStat.sum(parts);\n });\n });\n return [L, R];\n },\n\n // A -> T\n // A=TT'\n // T is lower triangular matrix\n cholesky: function cholesky(A) {\n var size = A.length;\n var T = jStat.zeros(A.length, A[0].length);\n var parts;\n jStat.arange(size).forEach(function(i) {\n parts = jStat.arange(i).map(function(t) {\n return Math.pow(T[i][t],2);\n });\n T[i][i] = Math.sqrt(A[i][i] - jStat.sum(parts));\n jStat.arange(i + 1, size).forEach(function(j) {\n parts = jStat.arange(i).map(function(t) {\n return T[i][t] * T[j][t];\n });\n T[j][i] = (A[i][j] - jStat.sum(parts)) / T[i][i];\n });\n });\n return T;\n },\n\n\n gauss_jacobi: function gauss_jacobi(a, b, x, r) {\n var i = 0;\n var j = 0;\n var n = a.length;\n var l = [];\n var u = [];\n var d = [];\n var xv, c, h, xk;\n for (; i < n; i++) {\n l[i] = [];\n u[i] = [];\n d[i] = [];\n for (j = 0; j < n; j++) {\n if (i > j) {\n l[i][j] = a[i][j];\n u[i][j] = d[i][j] = 0;\n } else if (i < j) {\n u[i][j] = a[i][j];\n l[i][j] = d[i][j] = 0;\n } else {\n d[i][j] = a[i][j];\n l[i][j] = u[i][j] = 0;\n }\n }\n }\n h = jStat.multiply(jStat.multiply(jStat.inv(d), jStat.add(l, u)), -1);\n c = jStat.multiply(jStat.inv(d), b);\n xv = x;\n xk = jStat.add(jStat.multiply(h, x), c);\n i = 2;\n while (Math.abs(jStat.norm(jStat.subtract(xk,xv))) > r) {\n xv = xk;\n xk = jStat.add(jStat.multiply(h, xv), c);\n i++;\n }\n return xk;\n },\n\n gauss_seidel: function gauss_seidel(a, b, x, r) {\n var i = 0;\n var n = a.length;\n var l = [];\n var u = [];\n var d = [];\n var j, xv, c, h, xk;\n for (; i < n; i++) {\n l[i] = [];\n u[i] = [];\n d[i] = [];\n for (j = 0; j < n; j++) {\n if (i > j) {\n l[i][j] = a[i][j];\n u[i][j] = d[i][j] = 0;\n } else if (i < j) {\n u[i][j] = a[i][j];\n l[i][j] = d[i][j] = 0;\n } else {\n d[i][j] = a[i][j];\n l[i][j] = u[i][j] = 0;\n }\n }\n }\n h = jStat.multiply(jStat.multiply(jStat.inv(jStat.add(d, l)), u), -1);\n c = jStat.multiply(jStat.inv(jStat.add(d, l)), b);\n xv = x;\n xk = jStat.add(jStat.multiply(h, x), c);\n i = 2;\n while (Math.abs(jStat.norm(jStat.subtract(xk, xv))) > r) {\n xv = xk;\n xk = jStat.add(jStat.multiply(h, xv), c);\n i = i + 1;\n }\n return xk;\n },\n\n SOR: function SOR(a, b, x, r, w) {\n var i = 0;\n var n = a.length;\n var l = [];\n var u = [];\n var d = [];\n var j, xv, c, h, xk;\n for (; i < n; i++) {\n l[i] = [];\n u[i] = [];\n d[i] = [];\n for (j = 0; j < n; j++) {\n if (i > j) {\n l[i][j] = a[i][j];\n u[i][j] = d[i][j] = 0;\n } else if (i < j) {\n u[i][j] = a[i][j];\n l[i][j] = d[i][j] = 0;\n } else {\n d[i][j] = a[i][j];\n l[i][j] = u[i][j] = 0;\n }\n }\n }\n h = jStat.multiply(jStat.inv(jStat.add(d, jStat.multiply(l, w))),\n jStat.subtract(jStat.multiply(d, 1 - w),\n jStat.multiply(u, w)));\n c = jStat.multiply(jStat.multiply(jStat.inv(jStat.add(d,\n jStat.multiply(l, w))), b), w);\n xv = x;\n xk = jStat.add(jStat.multiply(h, x), c);\n i = 2;\n while (Math.abs(jStat.norm(jStat.subtract(xk, xv))) > r) {\n xv = xk;\n xk = jStat.add(jStat.multiply(h, xv), c);\n i++;\n }\n return xk;\n },\n\n householder: function householder(a) {\n var m = a.length;\n var n = a[0].length;\n var i = 0;\n var w = [];\n var p = [];\n var alpha, r, k, j, factor;\n for (; i < m - 1; i++) {\n alpha = 0;\n for (j = i + 1; j < n; j++)\n alpha += (a[j][i] * a[j][i]);\n factor = (a[i + 1][i] > 0) ? -1 : 1;\n alpha = factor * Math.sqrt(alpha);\n r = Math.sqrt((((alpha * alpha) - a[i + 1][i] * alpha) / 2));\n w = jStat.zeros(m, 1);\n w[i + 1][0] = (a[i + 1][i] - alpha) / (2 * r);\n for (k = i + 2; k < m; k++) w[k][0] = a[k][i] / (2 * r);\n p = jStat.subtract(jStat.identity(m, n),\n jStat.multiply(jStat.multiply(w, jStat.transpose(w)), 2));\n a = jStat.multiply(p, jStat.multiply(a, p));\n }\n return a;\n },\n\n // A -> [Q,R]\n // Q is orthogonal matrix\n // R is upper triangular\n QR: (function() {\n // x -> Q\n // find a orthogonal matrix Q st.\n // Qx=y\n // y is [||x||,0,0,...]\n\n // quick ref\n var sum = jStat.sum;\n var range = jStat.arange;\n\n function qr2(x) {\n // quick impletation\n // https://www.stat.wisc.edu/~larget/math496/qr.html\n\n var n = x.length;\n var p = x[0].length;\n\n var r = jStat.zeros(p, p);\n x = jStat.copy(x);\n\n var i,j,k;\n for(j = 0; j < p; j++){\n r[j][j] = Math.sqrt(sum(range(n).map(function(i){\n return x[i][j] * x[i][j];\n })));\n for(i = 0; i < n; i++){\n x[i][j] = x[i][j] / r[j][j];\n }\n for(k = j+1; k < p; k++){\n r[j][k] = sum(range(n).map(function(i){\n return x[i][j] * x[i][k];\n }));\n for(i = 0; i < n; i++){\n x[i][k] = x[i][k] - x[i][j]*r[j][k];\n }\n }\n }\n return [x, r];\n }\n\n return qr2;\n }()),\n\n lstsq: (function() {\n // solve least squard problem for Ax=b as QR decomposition way if b is\n // [[b1],[b2],[b3]] form will return [[x1],[x2],[x3]] array form solution\n // else b is [b1,b2,b3] form will return [x1,x2,x3] array form solution\n function R_I(A) {\n A = jStat.copy(A);\n var size = A.length;\n var I = jStat.identity(size);\n jStat.arange(size - 1, -1, -1).forEach(function(i) {\n jStat.sliceAssign(\n I, { row: i }, jStat.divide(jStat.slice(I, { row: i }), A[i][i]));\n jStat.sliceAssign(\n A, { row: i }, jStat.divide(jStat.slice(A, { row: i }), A[i][i]));\n jStat.arange(i).forEach(function(j) {\n var c = jStat.multiply(A[j][i], -1);\n var Aj = jStat.slice(A, { row: j });\n var cAi = jStat.multiply(jStat.slice(A, { row: i }), c);\n jStat.sliceAssign(A, { row: j }, jStat.add(Aj, cAi));\n var Ij = jStat.slice(I, { row: j });\n var cIi = jStat.multiply(jStat.slice(I, { row: i }), c);\n jStat.sliceAssign(I, { row: j }, jStat.add(Ij, cIi));\n })\n });\n return I;\n }\n\n function qr_solve(A, b){\n var array_mode = false;\n if (b[0].length === undefined) {\n // [c1,c2,c3] mode\n b = b.map(function(x){ return [x] });\n array_mode = true;\n }\n var QR = jStat.QR(A);\n var Q = QR[0];\n var R = QR[1];\n var attrs = A[0].length;\n var Q1 = jStat.slice(Q,{col:{end:attrs}});\n var R1 = jStat.slice(R,{row:{end:attrs}});\n var RI = R_I(R1);\n var Q2 = jStat.transpose(Q1);\n\n if(Q2[0].length === undefined){\n Q2 = [Q2]; // The confusing jStat.multifly implementation threat nature process again.\n }\n\n var x = jStat.multiply(jStat.multiply(RI, Q2), b);\n\n if(x.length === undefined){\n x = [[x]]; // The confusing jStat.multifly implementation threat nature process again.\n }\n\n\n if (array_mode)\n return x.map(function(i){ return i[0] });\n return x;\n }\n\n return qr_solve;\n }()),\n\n jacobi: function jacobi(a) {\n var condition = 1;\n var n = a.length;\n var e = jStat.identity(n, n);\n var ev = [];\n var b, i, j, p, q, maxim, theta, s;\n // condition === 1 only if tolerance is not reached\n while (condition === 1) {\n maxim = a[0][1];\n p = 0;\n q = 1;\n for (i = 0; i < n; i++) {\n for (j = 0; j < n; j++) {\n if (i != j) {\n if (maxim < Math.abs(a[i][j])) {\n maxim = Math.abs(a[i][j]);\n p = i;\n q = j;\n }\n }\n }\n }\n if (a[p][p] === a[q][q])\n theta = (a[p][q] > 0) ? Math.PI / 4 : -Math.PI / 4;\n else\n theta = Math.atan(2 * a[p][q] / (a[p][p] - a[q][q])) / 2;\n s = jStat.identity(n, n);\n s[p][p] = Math.cos(theta);\n s[p][q] = -Math.sin(theta);\n s[q][p] = Math.sin(theta);\n s[q][q] = Math.cos(theta);\n // eigen vector matrix\n e = jStat.multiply(e, s);\n b = jStat.multiply(jStat.multiply(jStat.inv(s), a), s);\n a = b;\n condition = 0;\n for (i = 1; i < n; i++) {\n for (j = 1; j < n; j++) {\n if (i != j && Math.abs(a[i][j]) > 0.001) {\n condition = 1;\n }\n }\n }\n }\n for (i = 0; i < n; i++) ev.push(a[i][i]);\n //returns both the eigenvalue and eigenmatrix\n return [e, ev];\n },\n\n rungekutta: function rungekutta(f, h, p, t_j, u_j, order) {\n var k1, k2, u_j1, k3, k4;\n if (order === 2) {\n while (t_j <= p) {\n k1 = h * f(t_j, u_j);\n k2 = h * f(t_j + h, u_j + k1);\n u_j1 = u_j + (k1 + k2) / 2;\n u_j = u_j1;\n t_j = t_j + h;\n }\n }\n if (order === 4) {\n while (t_j <= p) {\n k1 = h * f(t_j, u_j);\n k2 = h * f(t_j + h / 2, u_j + k1 / 2);\n k3 = h * f(t_j + h / 2, u_j + k2 / 2);\n k4 = h * f(t_j +h, u_j + k3);\n u_j1 = u_j + (k1 + 2 * k2 + 2 * k3 + k4) / 6;\n u_j = u_j1;\n t_j = t_j + h;\n }\n }\n return u_j;\n },\n\n romberg: function romberg(f, a, b, order) {\n var i = 0;\n var h = (b - a) / 2;\n var x = [];\n var h1 = [];\n var g = [];\n var m, a1, j, k, I;\n while (i < order / 2) {\n I = f(a);\n for (j = a, k = 0; j <= b; j = j + h, k++) x[k] = j;\n m = x.length;\n for (j = 1; j < m - 1; j++) {\n I += (((j % 2) !== 0) ? 4 : 2) * f(x[j]);\n }\n I = (h / 3) * (I + f(b));\n g[i] = I;\n h /= 2;\n i++;\n }\n a1 = g.length;\n m = 1;\n while (a1 !== 1) {\n for (j = 0; j < a1 - 1; j++)\n h1[j] = ((Math.pow(4, m)) * g[j + 1] - g[j]) / (Math.pow(4, m) - 1);\n a1 = h1.length;\n g = h1;\n h1 = [];\n m++;\n }\n return g;\n },\n\n richardson: function richardson(X, f, x, h) {\n function pos(X, x) {\n var i = 0;\n var n = X.length;\n var p;\n for (; i < n; i++)\n if (X[i] === x) p = i;\n return p;\n }\n var h_min = Math.abs(x - X[pos(X, x) + 1]);\n var i = 0;\n var g = [];\n var h1 = [];\n var y1, y2, m, a, j;\n while (h >= h_min) {\n y1 = pos(X, x + h);\n y2 = pos(X, x);\n g[i] = (f[y1] - 2 * f[y2] + f[2 * y2 - y1]) / (h * h);\n h /= 2;\n i++;\n }\n a = g.length;\n m = 1;\n while (a != 1) {\n for (j = 0; j < a - 1; j++)\n h1[j] = ((Math.pow(4, m)) * g[j + 1] - g[j]) / (Math.pow(4, m) - 1);\n a = h1.length;\n g = h1;\n h1 = [];\n m++;\n }\n return g;\n },\n\n simpson: function simpson(f, a, b, n) {\n var h = (b - a) / n;\n var I = f(a);\n var x = [];\n var j = a;\n var k = 0;\n var i = 1;\n var m;\n for (; j <= b; j = j + h, k++)\n x[k] = j;\n m = x.length;\n for (; i < m - 1; i++) {\n I += ((i % 2 !== 0) ? 4 : 2) * f(x[i]);\n }\n return (h / 3) * (I + f(b));\n },\n\n hermite: function hermite(X, F, dF, value) {\n var n = X.length;\n var p = 0;\n var i = 0;\n var l = [];\n var dl = [];\n var A = [];\n var B = [];\n var j;\n for (; i < n; i++) {\n l[i] = 1;\n for (j = 0; j < n; j++) {\n if (i != j) l[i] *= (value - X[j]) / (X[i] - X[j]);\n }\n dl[i] = 0;\n for (j = 0; j < n; j++) {\n if (i != j) dl[i] += 1 / (X [i] - X[j]);\n }\n A[i] = (1 - 2 * (value - X[i]) * dl[i]) * (l[i] * l[i]);\n B[i] = (value - X[i]) * (l[i] * l[i]);\n p += (A[i] * F[i] + B[i] * dF[i]);\n }\n return p;\n },\n\n lagrange: function lagrange(X, F, value) {\n var p = 0;\n var i = 0;\n var j, l;\n var n = X.length;\n for (; i < n; i++) {\n l = F[i];\n for (j = 0; j < n; j++) {\n // calculating the lagrange polynomial L_i\n if (i != j) l *= (value - X[j]) / (X[i] - X[j]);\n }\n // adding the lagrange polynomials found above\n p += l;\n }\n return p;\n },\n\n cubic_spline: function cubic_spline(X, F, value) {\n var n = X.length;\n var i = 0, j;\n var A = [];\n var B = [];\n var alpha = [];\n var c = [];\n var h = [];\n var b = [];\n var d = [];\n for (; i < n - 1; i++)\n h[i] = X[i + 1] - X[i];\n alpha[0] = 0;\n for (i = 1; i < n - 1; i++) {\n alpha[i] = (3 / h[i]) * (F[i + 1] - F[i]) -\n (3 / h[i-1]) * (F[i] - F[i-1]);\n }\n for (i = 1; i < n - 1; i++) {\n A[i] = [];\n B[i] = [];\n A[i][i-1] = h[i-1];\n A[i][i] = 2 * (h[i - 1] + h[i]);\n A[i][i+1] = h[i];\n B[i][0] = alpha[i];\n }\n c = jStat.multiply(jStat.inv(A), B);\n for (j = 0; j < n - 1; j++) {\n b[j] = (F[j + 1] - F[j]) / h[j] - h[j] * (c[j + 1][0] + 2 * c[j][0]) / 3;\n d[j] = (c[j + 1][0] - c[j][0]) / (3 * h[j]);\n }\n for (j = 0; j < n; j++) {\n if (X[j] > value) break;\n }\n j -= 1;\n return F[j] + (value - X[j]) * b[j] + jStat.sq(value-X[j]) *\n c[j] + (value - X[j]) * jStat.sq(value - X[j]) * d[j];\n },\n\n gauss_quadrature: function gauss_quadrature() {\n throw new Error('gauss_quadrature not yet implemented');\n },\n\n PCA: function PCA(X) {\n var m = X.length;\n var n = X[0].length;\n var i = 0;\n var j, temp1;\n var u = [];\n var D = [];\n var result = [];\n var temp2 = [];\n var Y = [];\n var Bt = [];\n var B = [];\n var C = [];\n var V = [];\n var Vt = [];\n for (i = 0; i < m; i++) {\n u[i] = jStat.sum(X[i]) / n;\n }\n for (i = 0; i < n; i++) {\n B[i] = [];\n for(j = 0; j < m; j++) {\n B[i][j] = X[j][i] - u[j];\n }\n }\n B = jStat.transpose(B);\n for (i = 0; i < m; i++) {\n C[i] = [];\n for (j = 0; j < m; j++) {\n C[i][j] = (jStat.dot([B[i]], [B[j]])) / (n - 1);\n }\n }\n result = jStat.jacobi(C);\n V = result[0];\n D = result[1];\n Vt = jStat.transpose(V);\n for (i = 0; i < D.length; i++) {\n for (j = i; j < D.length; j++) {\n if(D[i] < D[j]) {\n temp1 = D[i];\n D[i] = D[j];\n D[j] = temp1;\n temp2 = Vt[i];\n Vt[i] = Vt[j];\n Vt[j] = temp2;\n }\n }\n }\n Bt = jStat.transpose(B);\n for (i = 0; i < m; i++) {\n Y[i] = [];\n for (j = 0; j < Bt.length; j++) {\n Y[i][j] = jStat.dot([Vt[i]], [Bt[j]]);\n }\n }\n return [X, D, Vt, Y];\n }\n});\n\n// extend jStat.fn with methods that require one argument\n(function(funcs) {\n for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n jStat.fn[passfunc] = function(arg, func) {\n var tmpthis = this;\n // check for callback\n if (func) {\n setTimeout(function() {\n func.call(tmpthis, jStat.fn[passfunc].call(tmpthis, arg));\n }, 15);\n return this;\n }\n if (typeof jStat[passfunc](this, arg) === 'number')\n return jStat[passfunc](this, arg);\n else\n return jStat(jStat[passfunc](this, arg));\n };\n }(funcs[i]));\n}('add divide multiply subtract dot pow exp log abs norm angle'.split(' ')));\n\n}(jStat, Math));\n(function(jStat, Math) {\n\nvar slice = [].slice;\nvar isNumber = jStat.utils.isNumber;\nvar isArray = jStat.utils.isArray;\n\n// flag==true denotes use of sample standard deviation\n// Z Statistics\njStat.extend({\n // 2 different parameter lists:\n // (value, mean, sd)\n // (value, array, flag)\n zscore: function zscore() {\n var args = slice.call(arguments);\n if (isNumber(args[1])) {\n return (args[0] - args[1]) / args[2];\n }\n return (args[0] - jStat.mean(args[1])) / jStat.stdev(args[1], args[2]);\n },\n\n // 3 different paramter lists:\n // (value, mean, sd, sides)\n // (zscore, sides)\n // (value, array, sides, flag)\n ztest: function ztest() {\n var args = slice.call(arguments);\n var z;\n if (isArray(args[1])) {\n // (value, array, sides, flag)\n z = jStat.zscore(args[0],args[1],args[3]);\n return (args[2] === 1) ?\n (jStat.normal.cdf(-Math.abs(z), 0, 1)) :\n (jStat.normal.cdf(-Math.abs(z), 0, 1)*2);\n } else {\n if (args.length > 2) {\n // (value, mean, sd, sides)\n z = jStat.zscore(args[0],args[1],args[2]);\n return (args[3] === 1) ?\n (jStat.normal.cdf(-Math.abs(z),0,1)) :\n (jStat.normal.cdf(-Math.abs(z),0,1)* 2);\n } else {\n // (zscore, sides)\n z = args[0];\n return (args[1] === 1) ?\n (jStat.normal.cdf(-Math.abs(z),0,1)) :\n (jStat.normal.cdf(-Math.abs(z),0,1)*2);\n }\n }\n }\n});\n\njStat.extend(jStat.fn, {\n zscore: function zscore(value, flag) {\n return (value - this.mean()) / this.stdev(flag);\n },\n\n ztest: function ztest(value, sides, flag) {\n var zscore = Math.abs(this.zscore(value, flag));\n return (sides === 1) ?\n (jStat.normal.cdf(-zscore, 0, 1)) :\n (jStat.normal.cdf(-zscore, 0, 1) * 2);\n }\n});\n\n// T Statistics\njStat.extend({\n // 2 parameter lists\n // (value, mean, sd, n)\n // (value, array)\n tscore: function tscore() {\n var args = slice.call(arguments);\n return (args.length === 4) ?\n ((args[0] - args[1]) / (args[2] / Math.sqrt(args[3]))) :\n ((args[0] - jStat.mean(args[1])) /\n (jStat.stdev(args[1], true) / Math.sqrt(args[1].length)));\n },\n\n // 3 different paramter lists:\n // (value, mean, sd, n, sides)\n // (tscore, n, sides)\n // (value, array, sides)\n ttest: function ttest() {\n var args = slice.call(arguments);\n var tscore;\n if (args.length === 5) {\n tscore = Math.abs(jStat.tscore(args[0], args[1], args[2], args[3]));\n return (args[4] === 1) ?\n (jStat.studentt.cdf(-tscore, args[3]-1)) :\n (jStat.studentt.cdf(-tscore, args[3]-1)*2);\n }\n if (isNumber(args[1])) {\n tscore = Math.abs(args[0])\n return (args[2] == 1) ?\n (jStat.studentt.cdf(-tscore, args[1]-1)) :\n (jStat.studentt.cdf(-tscore, args[1]-1) * 2);\n }\n tscore = Math.abs(jStat.tscore(args[0], args[1]))\n return (args[2] == 1) ?\n (jStat.studentt.cdf(-tscore, args[1].length-1)) :\n (jStat.studentt.cdf(-tscore, args[1].length-1) * 2);\n }\n});\n\njStat.extend(jStat.fn, {\n tscore: function tscore(value) {\n return (value - this.mean()) / (this.stdev(true) / Math.sqrt(this.cols()));\n },\n\n ttest: function ttest(value, sides) {\n return (sides === 1) ?\n (1 - jStat.studentt.cdf(Math.abs(this.tscore(value)), this.cols()-1)) :\n (jStat.studentt.cdf(-Math.abs(this.tscore(value)), this.cols()-1)*2);\n }\n});\n\n// F Statistics\njStat.extend({\n // Paramter list is as follows:\n // (array1, array2, array3, ...)\n // or it is an array of arrays\n // array of arrays conversion\n anovafscore: function anovafscore() {\n var args = slice.call(arguments),\n expVar, sample, sampMean, sampSampMean, tmpargs, unexpVar, i, j;\n if (args.length === 1) {\n tmpargs = new Array(args[0].length);\n for (i = 0; i < args[0].length; i++) {\n tmpargs[i] = args[0][i];\n }\n args = tmpargs;\n }\n // Builds sample array\n sample = new Array();\n for (i = 0; i < args.length; i++) {\n sample = sample.concat(args[i]);\n }\n sampMean = jStat.mean(sample);\n // Computes the explained variance\n expVar = 0;\n for (i = 0; i < args.length; i++) {\n expVar = expVar + args[i].length * Math.pow(jStat.mean(args[i]) - sampMean, 2);\n }\n expVar /= (args.length - 1);\n // Computes unexplained variance\n unexpVar = 0;\n for (i = 0; i < args.length; i++) {\n sampSampMean = jStat.mean(args[i]);\n for (j = 0; j < args[i].length; j++) {\n unexpVar += Math.pow(args[i][j] - sampSampMean, 2);\n }\n }\n unexpVar /= (sample.length - args.length);\n return expVar / unexpVar;\n },\n\n // 2 different paramter setups\n // (array1, array2, array3, ...)\n // (anovafscore, df1, df2)\n anovaftest: function anovaftest() {\n var args = slice.call(arguments),\n df1, df2, n, i;\n if (isNumber(args[0])) {\n return 1 - jStat.centralF.cdf(args[0], args[1], args[2]);\n }\n var anovafscore = jStat.anovafscore(args);\n df1 = args.length - 1;\n n = 0;\n for (i = 0; i < args.length; i++) {\n n = n + args[i].length;\n }\n df2 = n - df1 - 1;\n return 1 - jStat.centralF.cdf(anovafscore, df1, df2);\n },\n\n ftest: function ftest(fscore, df1, df2) {\n return 1 - jStat.centralF.cdf(fscore, df1, df2);\n }\n});\n\njStat.extend(jStat.fn, {\n anovafscore: function anovafscore() {\n return jStat.anovafscore(this.toArray());\n },\n\n anovaftes: function anovaftes() {\n var n = 0;\n var i;\n for (i = 0; i < this.length; i++) {\n n = n + this[i].length;\n }\n return jStat.ftest(this.anovafscore(), this.length - 1, n - this.length);\n }\n});\n\n// Tukey's range test\njStat.extend({\n // 2 parameter lists\n // (mean1, mean2, n1, n2, sd)\n // (array1, array2, sd)\n qscore: function qscore() {\n var args = slice.call(arguments);\n var mean1, mean2, n1, n2, sd;\n if (isNumber(args[0])) {\n mean1 = args[0];\n mean2 = args[1];\n n1 = args[2];\n n2 = args[3];\n sd = args[4];\n } else {\n mean1 = jStat.mean(args[0]);\n mean2 = jStat.mean(args[1]);\n n1 = args[0].length;\n n2 = args[1].length;\n sd = args[2];\n }\n return Math.abs(mean1 - mean2) / (sd * Math.sqrt((1 / n1 + 1 / n2) / 2));\n },\n\n // 3 different parameter lists:\n // (qscore, n, k)\n // (mean1, mean2, n1, n2, sd, n, k)\n // (array1, array2, sd, n, k)\n qtest: function qtest() {\n var args = slice.call(arguments);\n\n var qscore;\n if (args.length === 3) {\n qscore = args[0];\n args = args.slice(1);\n } else if (args.length === 7) {\n qscore = jStat.qscore(args[0], args[1], args[2], args[3], args[4]);\n args = args.slice(5);\n } else {\n qscore = jStat.qscore(args[0], args[1], args[2]);\n args = args.slice(3);\n }\n\n var n = args[0];\n var k = args[1];\n\n return 1 - jStat.tukey.cdf(qscore, k, n - k);\n },\n\n tukeyhsd: function tukeyhsd(arrays) {\n var sd = jStat.pooledstdev(arrays);\n var means = arrays.map(function (arr) {return jStat.mean(arr);});\n var n = arrays.reduce(function (n, arr) {return n + arr.length;}, 0);\n\n var results = [];\n for (var i = 0; i < arrays.length; ++i) {\n for (var j = i + 1; j < arrays.length; ++j) {\n var p = jStat.qtest(means[i], means[j], arrays[i].length, arrays[j].length, sd, n, arrays.length);\n results.push([[i, j], p]);\n }\n }\n\n return results;\n }\n});\n\n// Error Bounds\njStat.extend({\n // 2 different parameter setups\n // (value, alpha, sd, n)\n // (value, alpha, array)\n normalci: function normalci() {\n var args = slice.call(arguments),\n ans = new Array(2),\n change;\n if (args.length === 4) {\n change = Math.abs(jStat.normal.inv(args[1] / 2, 0, 1) *\n args[2] / Math.sqrt(args[3]));\n } else {\n change = Math.abs(jStat.normal.inv(args[1] / 2, 0, 1) *\n jStat.stdev(args[2]) / Math.sqrt(args[2].length));\n }\n ans[0] = args[0] - change;\n ans[1] = args[0] + change;\n return ans;\n },\n\n // 2 different parameter setups\n // (value, alpha, sd, n)\n // (value, alpha, array)\n tci: function tci() {\n var args = slice.call(arguments),\n ans = new Array(2),\n change;\n if (args.length === 4) {\n change = Math.abs(jStat.studentt.inv(args[1] / 2, args[3] - 1) *\n args[2] / Math.sqrt(args[3]));\n } else {\n change = Math.abs(jStat.studentt.inv(args[1] / 2, args[2].length - 1) *\n jStat.stdev(args[2], true) / Math.sqrt(args[2].length));\n }\n ans[0] = args[0] - change;\n ans[1] = args[0] + change;\n return ans;\n },\n\n significant: function significant(pvalue, alpha) {\n return pvalue < alpha;\n }\n});\n\njStat.extend(jStat.fn, {\n normalci: function normalci(value, alpha) {\n return jStat.normalci(value, alpha, this.toArray());\n },\n\n tci: function tci(value, alpha) {\n return jStat.tci(value, alpha, this.toArray());\n }\n});\n\n// internal method for calculating the z-score for a difference of proportions test\nfunction differenceOfProportions(p1, n1, p2, n2) {\n if (p1 > 1 || p2 > 1 || p1 <= 0 || p2 <= 0) {\n throw new Error(\"Proportions should be greater than 0 and less than 1\")\n }\n var pooled = (p1 * n1 + p2 * n2) / (n1 + n2);\n var se = Math.sqrt(pooled * (1 - pooled) * ((1/n1) + (1/n2)));\n return (p1 - p2) / se;\n}\n\n// Difference of Proportions\njStat.extend(jStat.fn, {\n oneSidedDifferenceOfProportions: function oneSidedDifferenceOfProportions(p1, n1, p2, n2) {\n var z = differenceOfProportions(p1, n1, p2, n2);\n return jStat.ztest(z, 1);\n },\n\n twoSidedDifferenceOfProportions: function twoSidedDifferenceOfProportions(p1, n1, p2, n2) {\n var z = differenceOfProportions(p1, n1, p2, n2);\n return jStat.ztest(z, 2);\n }\n});\n\n}(jStat, Math));\njStat.models = (function(){\n function sub_regress(exog) {\n var var_count = exog[0].length;\n var modelList = jStat.arange(var_count).map(function(endog_index) {\n var exog_index =\n jStat.arange(var_count).filter(function(i){return i!==endog_index});\n return ols(jStat.col(exog, endog_index).map(function(x){ return x[0] }),\n jStat.col(exog, exog_index))\n });\n return modelList;\n }\n\n // do OLS model regress\n // exog have include const columns ,it will not generate it .In fact, exog is\n // \"design matrix\" look at\n //https://en.wikipedia.org/wiki/Design_matrix\n function ols(endog, exog) {\n var nobs = endog.length;\n var df_model = exog[0].length - 1;\n var df_resid = nobs-df_model - 1;\n var coef = jStat.lstsq(exog, endog);\n var predict =\n jStat.multiply(exog, coef.map(function(x) { return [x] }))\n .map(function(p) { return p[0] });\n var resid = jStat.subtract(endog, predict);\n var ybar = jStat.mean(endog);\n // constant cause problem\n // var SST = jStat.sum(endog.map(function(y) {\n // return Math.pow(y-ybar,2);\n // }));\n var SSE = jStat.sum(predict.map(function(f) {\n return Math.pow(f - ybar, 2);\n }));\n var SSR = jStat.sum(endog.map(function(y, i) {\n return Math.pow(y - predict[i], 2);\n }));\n var SST = SSE + SSR;\n var R2 = (SSE / SST);\n return {\n exog:exog,\n endog:endog,\n nobs:nobs,\n df_model:df_model,\n df_resid:df_resid,\n coef:coef,\n predict:predict,\n resid:resid,\n ybar:ybar,\n SST:SST,\n SSE:SSE,\n SSR:SSR,\n R2:R2\n };\n }\n\n // H0: b_I=0\n // H1: b_I!=0\n function t_test(model) {\n var subModelList = sub_regress(model.exog);\n //var sigmaHat=jStat.stdev(model.resid);\n var sigmaHat = Math.sqrt(model.SSR / (model.df_resid));\n var seBetaHat = subModelList.map(function(mod) {\n var SST = mod.SST;\n var R2 = mod.R2;\n return sigmaHat / Math.sqrt(SST * (1 - R2));\n });\n var tStatistic = model.coef.map(function(coef, i) {\n return (coef - 0) / seBetaHat[i];\n });\n var pValue = tStatistic.map(function(t) {\n var leftppf = jStat.studentt.cdf(t, model.df_resid);\n return (leftppf > 0.5 ? 1 - leftppf : leftppf) * 2;\n });\n var c = jStat.studentt.inv(0.975, model.df_resid);\n var interval95 = model.coef.map(function(coef, i) {\n var d = c * seBetaHat[i];\n return [coef - d, coef + d];\n })\n return {\n se: seBetaHat,\n t: tStatistic,\n p: pValue,\n sigmaHat: sigmaHat,\n interval95: interval95\n };\n }\n\n function F_test(model) {\n var F_statistic =\n (model.R2 / model.df_model) / ((1 - model.R2) / model.df_resid);\n var fcdf = function(x, n1, n2) {\n return jStat.beta.cdf(x / (n2 / n1 + x), n1 / 2, n2 / 2)\n }\n var pvalue = 1 - fcdf(F_statistic, model.df_model, model.df_resid);\n return { F_statistic: F_statistic, pvalue: pvalue };\n }\n\n function ols_wrap(endog, exog) {\n var model = ols(endog,exog);\n var ttest = t_test(model);\n var ftest = F_test(model);\n // Provide the Wherry / Ezekiel / McNemar / Cohen Adjusted R^2\n // Which matches the 'adjusted R^2' provided by R's lm package\n var adjust_R2 =\n 1 - (1 - model.R2) * ((model.nobs - 1) / (model.df_resid));\n model.t = ttest;\n model.f = ftest;\n model.adjust_R2 = adjust_R2;\n return model;\n }\n\n return { ols: ols_wrap };\n})();\n//To regress, simply build X matrix\n//(append column of 1's) using\n//buildxmatrix and build the Y\n//matrix using buildymatrix\n//(simply the transpose)\n//and run regress.\n\n\n\n//Regressions\n\njStat.extend({\n buildxmatrix: function buildxmatrix(){\n //Parameters will be passed in as such\n //(array1,array2,array3,...)\n //as (x1,x2,x3,...)\n //needs to be (1,x1,x2,x3,...)\n var matrixRows = new Array(arguments.length);\n for(var i=0;i1){\n result = [];\n for (i = 0; i < A.rows(); i++) {\n result[i] = [];\n for (j = 0; j < B.cols(); j++) {\n sum = 0;\n for (k = 0; k < A.cols(); k++) {\n sum += A.toArray()[i][k] * B.toArray()[k][j];\n }\n result[i][j] = sum;\n }\n }\n return jStat(result);\n }\n result = [];\n for (i = 0; i < A.rows(); i++) {\n result[i] = [];\n for (j = 0; j < B.cols(); j++) {\n sum = 0;\n for (k = 0; k < A.cols(); k++) {\n sum += A.toArray()[i][k] * B.toArray()[j];\n }\n result[i][j] = sum;\n }\n }\n return jStat(result);\n }\n },\n\n //regress and regresst to be fixed\n\n regress: function regress(jMatX,jMatY){\n //print(\"regressin!\");\n //print(jMatX.toArray());\n var innerinv = jStat.xtranspxinv(jMatX);\n //print(innerinv);\n var xtransp = jMatX.transpose();\n var next = jStat.matrixmult(jStat(innerinv),xtransp);\n return jStat.matrixmult(next,jMatY);\n\n },\n\n regresst: function regresst(jMatX,jMatY,sides){\n var beta = jStat.regress(jMatX,jMatY);\n\n var compile = {};\n compile.anova = {};\n var jMatYBar = jStat.jMatYBar(jMatX, beta);\n compile.yBar = jMatYBar;\n var yAverage = jMatY.mean();\n compile.anova.residuals = jStat.residuals(jMatY, jMatYBar);\n\n compile.anova.ssr = jStat.ssr(jMatYBar, yAverage);\n compile.anova.msr = compile.anova.ssr / (jMatX[0].length - 1);\n\n compile.anova.sse = jStat.sse(jMatY, jMatYBar);\n compile.anova.mse =\n compile.anova.sse / (jMatY.length - (jMatX[0].length - 1) - 1);\n\n compile.anova.sst = jStat.sst(jMatY, yAverage);\n compile.anova.mst = compile.anova.sst / (jMatY.length - 1);\n\n compile.anova.r2 = 1 - (compile.anova.sse / compile.anova.sst);\n if (compile.anova.r2 < 0) compile.anova.r2 = 0;\n\n compile.anova.fratio = compile.anova.msr / compile.anova.mse;\n compile.anova.pvalue =\n jStat.anovaftest(compile.anova.fratio,\n jMatX[0].length - 1,\n jMatY.length - (jMatX[0].length - 1) - 1);\n\n compile.anova.rmse = Math.sqrt(compile.anova.mse);\n\n compile.anova.r2adj = 1 - (compile.anova.mse / compile.anova.mst);\n if (compile.anova.r2adj < 0) compile.anova.r2adj = 0;\n\n compile.stats = new Array(jMatX[0].length);\n var covar = jStat.xtranspxinv(jMatX);\n var sds, ts, ps;\n\n for(var i=0; i subband filtering -> mdct routine\n *\n * Copyright (c) 1999-2000 Takehiro Tominaga\n *\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n * Library General Public License for more details.\n *\n * You should have received a copy of the GNU Library General Public\n * License along with this library; if not, write to the\n * Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n * Boston, MA 02111-1307, USA.\n */\n/*\n * Special Thanks to Patrick De Smet for your advices.\n */\n\n/* $Id: NewMDCT.java,v 1.11 2011/05/24 20:48:06 kenchis Exp $ */\n\n//package mp3;\n\n//import java.util.Arrays;\nvar common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nvar Encoder = require('./Encoder.js');\n\n\nfunction NewMDCT() {\n\n\tvar enwindow = [\n\t\t\t-4.77e-07 * 0.740951125354959 / 2.384e-06,\n\t\t\t1.03951e-04 * 0.740951125354959 / 2.384e-06,\n\t\t\t9.53674e-04 * 0.740951125354959 / 2.384e-06,\n\t\t\t2.841473e-03 * 0.740951125354959 / 2.384e-06,\n\t\t\t3.5758972e-02 * 0.740951125354959 / 2.384e-06,\n\t\t\t3.401756e-03 * 0.740951125354959 / 2.384e-06,\n\t\t\t9.83715e-04 * 0.740951125354959 / 2.384e-06,\n\t\t\t9.9182e-05 * 0.740951125354959 / 2.384e-06, /* 15 */\n\t\t\t1.2398e-05 * 0.740951125354959 / 2.384e-06,\n\t\t\t1.91212e-04 * 0.740951125354959 / 2.384e-06,\n\t\t\t2.283096e-03 * 0.740951125354959 / 2.384e-06,\n\t\t\t1.6994476e-02 * 0.740951125354959 / 2.384e-06,\n\t\t\t-1.8756866e-02 * 0.740951125354959 / 2.384e-06,\n\t\t\t-2.630711e-03 * 0.740951125354959 / 2.384e-06,\n\t\t\t-2.47478e-04 * 0.740951125354959 / 2.384e-06,\n\t\t\t-1.4782e-05 * 0.740951125354959 / 2.384e-06,\n\t\t\t9.063471690191471e-01, 1.960342806591213e-01,\n\n\t\t\t-4.77e-07 * 0.773010453362737 / 2.384e-06,\n\t\t\t1.05858e-04 * 0.773010453362737 / 2.384e-06,\n\t\t\t9.30786e-04 * 0.773010453362737 / 2.384e-06,\n\t\t\t2.521515e-03 * 0.773010453362737 / 2.384e-06,\n\t\t\t3.5694122e-02 * 0.773010453362737 / 2.384e-06,\n\t\t\t3.643036e-03 * 0.773010453362737 / 2.384e-06,\n\t\t\t9.91821e-04 * 0.773010453362737 / 2.384e-06,\n\t\t\t9.6321e-05 * 0.773010453362737 / 2.384e-06, /* 14 */\n\t\t\t1.1444e-05 * 0.773010453362737 / 2.384e-06,\n\t\t\t1.65462e-04 * 0.773010453362737 / 2.384e-06,\n\t\t\t2.110004e-03 * 0.773010453362737 / 2.384e-06,\n\t\t\t1.6112804e-02 * 0.773010453362737 / 2.384e-06,\n\t\t\t-1.9634247e-02 * 0.773010453362737 / 2.384e-06,\n\t\t\t-2.803326e-03 * 0.773010453362737 / 2.384e-06,\n\t\t\t-2.77042e-04 * 0.773010453362737 / 2.384e-06,\n\t\t\t-1.6689e-05 * 0.773010453362737 / 2.384e-06,\n\t\t\t8.206787908286602e-01, 3.901806440322567e-01,\n\n\t\t\t-4.77e-07 * 0.803207531480645 / 2.384e-06,\n\t\t\t1.07288e-04 * 0.803207531480645 / 2.384e-06,\n\t\t\t9.02653e-04 * 0.803207531480645 / 2.384e-06,\n\t\t\t2.174854e-03 * 0.803207531480645 / 2.384e-06,\n\t\t\t3.5586357e-02 * 0.803207531480645 / 2.384e-06,\n\t\t\t3.858566e-03 * 0.803207531480645 / 2.384e-06,\n\t\t\t9.95159e-04 * 0.803207531480645 / 2.384e-06,\n\t\t\t9.3460e-05 * 0.803207531480645 / 2.384e-06, /* 13 */\n\t\t\t1.0014e-05 * 0.803207531480645 / 2.384e-06,\n\t\t\t1.40190e-04 * 0.803207531480645 / 2.384e-06,\n\t\t\t1.937389e-03 * 0.803207531480645 / 2.384e-06,\n\t\t\t1.5233517e-02 * 0.803207531480645 / 2.384e-06,\n\t\t\t-2.0506859e-02 * 0.803207531480645 / 2.384e-06,\n\t\t\t-2.974033e-03 * 0.803207531480645 / 2.384e-06,\n\t\t\t-3.07560e-04 * 0.803207531480645 / 2.384e-06,\n\t\t\t-1.8120e-05 * 0.803207531480645 / 2.384e-06,\n\t\t\t7.416505462720353e-01, 5.805693545089249e-01,\n\n\t\t\t-4.77e-07 * 0.831469612302545 / 2.384e-06,\n\t\t\t1.08242e-04 * 0.831469612302545 / 2.384e-06,\n\t\t\t8.68797e-04 * 0.831469612302545 / 2.384e-06,\n\t\t\t1.800537e-03 * 0.831469612302545 / 2.384e-06,\n\t\t\t3.5435200e-02 * 0.831469612302545 / 2.384e-06,\n\t\t\t4.049301e-03 * 0.831469612302545 / 2.384e-06,\n\t\t\t9.94205e-04 * 0.831469612302545 / 2.384e-06,\n\t\t\t9.0599e-05 * 0.831469612302545 / 2.384e-06, /* 12 */\n\t\t\t9.060e-06 * 0.831469612302545 / 2.384e-06,\n\t\t\t1.16348e-04 * 0.831469612302545 / 2.384e-06,\n\t\t\t1.766682e-03 * 0.831469612302545 / 2.384e-06,\n\t\t\t1.4358521e-02 * 0.831469612302545 / 2.384e-06,\n\t\t\t-2.1372318e-02 * 0.831469612302545 / 2.384e-06,\n\t\t\t-3.14188e-03 * 0.831469612302545 / 2.384e-06,\n\t\t\t-3.39031e-04 * 0.831469612302545 / 2.384e-06,\n\t\t\t-1.9550e-05 * 0.831469612302545 / 2.384e-06,\n\t\t\t6.681786379192989e-01, 7.653668647301797e-01,\n\n\t\t\t-4.77e-07 * 0.857728610000272 / 2.384e-06,\n\t\t\t1.08719e-04 * 0.857728610000272 / 2.384e-06,\n\t\t\t8.29220e-04 * 0.857728610000272 / 2.384e-06,\n\t\t\t1.399517e-03 * 0.857728610000272 / 2.384e-06,\n\t\t\t3.5242081e-02 * 0.857728610000272 / 2.384e-06,\n\t\t\t4.215240e-03 * 0.857728610000272 / 2.384e-06,\n\t\t\t9.89437e-04 * 0.857728610000272 / 2.384e-06,\n\t\t\t8.7261e-05 * 0.857728610000272 / 2.384e-06, /* 11 */\n\t\t\t8.106e-06 * 0.857728610000272 / 2.384e-06,\n\t\t\t9.3937e-05 * 0.857728610000272 / 2.384e-06,\n\t\t\t1.597881e-03 * 0.857728610000272 / 2.384e-06,\n\t\t\t1.3489246e-02 * 0.857728610000272 / 2.384e-06,\n\t\t\t-2.2228718e-02 * 0.857728610000272 / 2.384e-06,\n\t\t\t-3.306866e-03 * 0.857728610000272 / 2.384e-06,\n\t\t\t-3.71456e-04 * 0.857728610000272 / 2.384e-06,\n\t\t\t-2.1458e-05 * 0.857728610000272 / 2.384e-06,\n\t\t\t5.993769336819237e-01, 9.427934736519954e-01,\n\n\t\t\t-4.77e-07 * 0.881921264348355 / 2.384e-06,\n\t\t\t1.08719e-04 * 0.881921264348355 / 2.384e-06,\n\t\t\t7.8392e-04 * 0.881921264348355 / 2.384e-06,\n\t\t\t9.71317e-04 * 0.881921264348355 / 2.384e-06,\n\t\t\t3.5007000e-02 * 0.881921264348355 / 2.384e-06,\n\t\t\t4.357815e-03 * 0.881921264348355 / 2.384e-06,\n\t\t\t9.80854e-04 * 0.881921264348355 / 2.384e-06,\n\t\t\t8.3923e-05 * 0.881921264348355 / 2.384e-06, /* 10 */\n\t\t\t7.629e-06 * 0.881921264348355 / 2.384e-06,\n\t\t\t7.2956e-05 * 0.881921264348355 / 2.384e-06,\n\t\t\t1.432419e-03 * 0.881921264348355 / 2.384e-06,\n\t\t\t1.2627602e-02 * 0.881921264348355 / 2.384e-06,\n\t\t\t-2.3074150e-02 * 0.881921264348355 / 2.384e-06,\n\t\t\t-3.467083e-03 * 0.881921264348355 / 2.384e-06,\n\t\t\t-4.04358e-04 * 0.881921264348355 / 2.384e-06,\n\t\t\t-2.3365e-05 * 0.881921264348355 / 2.384e-06,\n\t\t\t5.345111359507916e-01, 1.111140466039205e+00,\n\n\t\t\t-9.54e-07 * 0.903989293123443 / 2.384e-06,\n\t\t\t1.08242e-04 * 0.903989293123443 / 2.384e-06,\n\t\t\t7.31945e-04 * 0.903989293123443 / 2.384e-06,\n\t\t\t5.15938e-04 * 0.903989293123443 / 2.384e-06,\n\t\t\t3.4730434e-02 * 0.903989293123443 / 2.384e-06,\n\t\t\t4.477024e-03 * 0.903989293123443 / 2.384e-06,\n\t\t\t9.68933e-04 * 0.903989293123443 / 2.384e-06,\n\t\t\t8.0585e-05 * 0.903989293123443 / 2.384e-06, /* 9 */\n\t\t\t6.676e-06 * 0.903989293123443 / 2.384e-06,\n\t\t\t5.2929e-05 * 0.903989293123443 / 2.384e-06,\n\t\t\t1.269817e-03 * 0.903989293123443 / 2.384e-06,\n\t\t\t1.1775017e-02 * 0.903989293123443 / 2.384e-06,\n\t\t\t-2.3907185e-02 * 0.903989293123443 / 2.384e-06,\n\t\t\t-3.622532e-03 * 0.903989293123443 / 2.384e-06,\n\t\t\t-4.38213e-04 * 0.903989293123443 / 2.384e-06,\n\t\t\t-2.5272e-05 * 0.903989293123443 / 2.384e-06,\n\t\t\t4.729647758913199e-01, 1.268786568327291e+00,\n\n\t\t\t-9.54e-07 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t1.06812e-04 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t6.74248e-04 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t3.3379e-05 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t3.4412861e-02 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t4.573822e-03 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t9.54151e-04 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t7.6771e-05 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t6.199e-06 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t3.4332e-05 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t1.111031e-03 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t1.0933399e-02 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t-2.4725437e-02 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t-3.771782e-03 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t-4.72546e-04 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t-2.7657e-05 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t4.1421356237309504879e-01, /* tan(PI/8) */\n\t\t\t1.414213562373095e+00,\n\n\t\t\t-9.54e-07 * 0.941544065183021 / 2.384e-06,\n\t\t\t1.05381e-04 * 0.941544065183021 / 2.384e-06,\n\t\t\t6.10352e-04 * 0.941544065183021 / 2.384e-06,\n\t\t\t-4.75883e-04 * 0.941544065183021 / 2.384e-06,\n\t\t\t3.4055710e-02 * 0.941544065183021 / 2.384e-06,\n\t\t\t4.649162e-03 * 0.941544065183021 / 2.384e-06,\n\t\t\t9.35555e-04 * 0.941544065183021 / 2.384e-06,\n\t\t\t7.3433e-05 * 0.941544065183021 / 2.384e-06, /* 7 */\n\t\t\t5.245e-06 * 0.941544065183021 / 2.384e-06,\n\t\t\t1.7166e-05 * 0.941544065183021 / 2.384e-06,\n\t\t\t9.56535e-04 * 0.941544065183021 / 2.384e-06,\n\t\t\t1.0103703e-02 * 0.941544065183021 / 2.384e-06,\n\t\t\t-2.5527000e-02 * 0.941544065183021 / 2.384e-06,\n\t\t\t-3.914356e-03 * 0.941544065183021 / 2.384e-06,\n\t\t\t-5.07355e-04 * 0.941544065183021 / 2.384e-06,\n\t\t\t-3.0041e-05 * 0.941544065183021 / 2.384e-06,\n\t\t\t3.578057213145241e-01, 1.546020906725474e+00,\n\n\t\t\t-9.54e-07 * 0.956940335732209 / 2.384e-06,\n\t\t\t1.02520e-04 * 0.956940335732209 / 2.384e-06,\n\t\t\t5.39303e-04 * 0.956940335732209 / 2.384e-06,\n\t\t\t-1.011848e-03 * 0.956940335732209 / 2.384e-06,\n\t\t\t3.3659935e-02 * 0.956940335732209 / 2.384e-06,\n\t\t\t4.703045e-03 * 0.956940335732209 / 2.384e-06,\n\t\t\t9.15051e-04 * 0.956940335732209 / 2.384e-06,\n\t\t\t7.0095e-05 * 0.956940335732209 / 2.384e-06, /* 6 */\n\t\t\t4.768e-06 * 0.956940335732209 / 2.384e-06,\n\t\t\t9.54e-07 * 0.956940335732209 / 2.384e-06,\n\t\t\t8.06808e-04 * 0.956940335732209 / 2.384e-06,\n\t\t\t9.287834e-03 * 0.956940335732209 / 2.384e-06,\n\t\t\t-2.6310921e-02 * 0.956940335732209 / 2.384e-06,\n\t\t\t-4.048824e-03 * 0.956940335732209 / 2.384e-06,\n\t\t\t-5.42164e-04 * 0.956940335732209 / 2.384e-06,\n\t\t\t-3.2425e-05 * 0.956940335732209 / 2.384e-06,\n\t\t\t3.033466836073424e-01, 1.662939224605090e+00,\n\n\t\t\t-1.431e-06 * 0.970031253194544 / 2.384e-06,\n\t\t\t9.9182e-05 * 0.970031253194544 / 2.384e-06,\n\t\t\t4.62532e-04 * 0.970031253194544 / 2.384e-06,\n\t\t\t-1.573563e-03 * 0.970031253194544 / 2.384e-06,\n\t\t\t3.3225536e-02 * 0.970031253194544 / 2.384e-06,\n\t\t\t4.737377e-03 * 0.970031253194544 / 2.384e-06,\n\t\t\t8.91685e-04 * 0.970031253194544 / 2.384e-06,\n\t\t\t6.6280e-05 * 0.970031253194544 / 2.384e-06, /* 5 */\n\t\t\t4.292e-06 * 0.970031253194544 / 2.384e-06,\n\t\t\t-1.3828e-05 * 0.970031253194544 / 2.384e-06,\n\t\t\t6.61850e-04 * 0.970031253194544 / 2.384e-06,\n\t\t\t8.487225e-03 * 0.970031253194544 / 2.384e-06,\n\t\t\t-2.7073860e-02 * 0.970031253194544 / 2.384e-06,\n\t\t\t-4.174709e-03 * 0.970031253194544 / 2.384e-06,\n\t\t\t-5.76973e-04 * 0.970031253194544 / 2.384e-06,\n\t\t\t-3.4809e-05 * 0.970031253194544 / 2.384e-06,\n\t\t\t2.504869601913055e-01, 1.763842528696710e+00,\n\n\t\t\t-1.431e-06 * 0.98078528040323 / 2.384e-06,\n\t\t\t9.5367e-05 * 0.98078528040323 / 2.384e-06,\n\t\t\t3.78609e-04 * 0.98078528040323 / 2.384e-06,\n\t\t\t-2.161503e-03 * 0.98078528040323 / 2.384e-06,\n\t\t\t3.2754898e-02 * 0.98078528040323 / 2.384e-06,\n\t\t\t4.752159e-03 * 0.98078528040323 / 2.384e-06,\n\t\t\t8.66413e-04 * 0.98078528040323 / 2.384e-06,\n\t\t\t6.2943e-05 * 0.98078528040323 / 2.384e-06, /* 4 */\n\t\t\t3.815e-06 * 0.98078528040323 / 2.384e-06,\n\t\t\t-2.718e-05 * 0.98078528040323 / 2.384e-06,\n\t\t\t5.22137e-04 * 0.98078528040323 / 2.384e-06,\n\t\t\t7.703304e-03 * 0.98078528040323 / 2.384e-06,\n\t\t\t-2.7815342e-02 * 0.98078528040323 / 2.384e-06,\n\t\t\t-4.290581e-03 * 0.98078528040323 / 2.384e-06,\n\t\t\t-6.11782e-04 * 0.98078528040323 / 2.384e-06,\n\t\t\t-3.7670e-05 * 0.98078528040323 / 2.384e-06,\n\t\t\t1.989123673796580e-01, 1.847759065022573e+00,\n\n\t\t\t-1.907e-06 * 0.989176509964781 / 2.384e-06,\n\t\t\t9.0122e-05 * 0.989176509964781 / 2.384e-06,\n\t\t\t2.88486e-04 * 0.989176509964781 / 2.384e-06,\n\t\t\t-2.774239e-03 * 0.989176509964781 / 2.384e-06,\n\t\t\t3.2248020e-02 * 0.989176509964781 / 2.384e-06,\n\t\t\t4.748821e-03 * 0.989176509964781 / 2.384e-06,\n\t\t\t8.38757e-04 * 0.989176509964781 / 2.384e-06,\n\t\t\t5.9605e-05 * 0.989176509964781 / 2.384e-06, /* 3 */\n\t\t\t3.338e-06 * 0.989176509964781 / 2.384e-06,\n\t\t\t-3.9577e-05 * 0.989176509964781 / 2.384e-06,\n\t\t\t3.88145e-04 * 0.989176509964781 / 2.384e-06,\n\t\t\t6.937027e-03 * 0.989176509964781 / 2.384e-06,\n\t\t\t-2.8532982e-02 * 0.989176509964781 / 2.384e-06,\n\t\t\t-4.395962e-03 * 0.989176509964781 / 2.384e-06,\n\t\t\t-6.46591e-04 * 0.989176509964781 / 2.384e-06,\n\t\t\t-4.0531e-05 * 0.989176509964781 / 2.384e-06,\n\t\t\t1.483359875383474e-01, 1.913880671464418e+00,\n\n\t\t\t-1.907e-06 * 0.995184726672197 / 2.384e-06,\n\t\t\t8.4400e-05 * 0.995184726672197 / 2.384e-06,\n\t\t\t1.91689e-04 * 0.995184726672197 / 2.384e-06,\n\t\t\t-3.411293e-03 * 0.995184726672197 / 2.384e-06,\n\t\t\t3.1706810e-02 * 0.995184726672197 / 2.384e-06,\n\t\t\t4.728317e-03 * 0.995184726672197 / 2.384e-06,\n\t\t\t8.09669e-04 * 0.995184726672197 / 2.384e-06,\n\t\t\t5.579e-05 * 0.995184726672197 / 2.384e-06,\n\t\t\t3.338e-06 * 0.995184726672197 / 2.384e-06,\n\t\t\t-5.0545e-05 * 0.995184726672197 / 2.384e-06,\n\t\t\t2.59876e-04 * 0.995184726672197 / 2.384e-06,\n\t\t\t6.189346e-03 * 0.995184726672197 / 2.384e-06,\n\t\t\t-2.9224873e-02 * 0.995184726672197 / 2.384e-06,\n\t\t\t-4.489899e-03 * 0.995184726672197 / 2.384e-06,\n\t\t\t-6.80923e-04 * 0.995184726672197 / 2.384e-06,\n\t\t\t-4.3392e-05 * 0.995184726672197 / 2.384e-06,\n\t\t\t9.849140335716425e-02, 1.961570560806461e+00,\n\n\t\t\t-2.384e-06 * 0.998795456205172 / 2.384e-06,\n\t\t\t7.7724e-05 * 0.998795456205172 / 2.384e-06,\n\t\t\t8.8215e-05 * 0.998795456205172 / 2.384e-06,\n\t\t\t-4.072189e-03 * 0.998795456205172 / 2.384e-06,\n\t\t\t3.1132698e-02 * 0.998795456205172 / 2.384e-06,\n\t\t\t4.691124e-03 * 0.998795456205172 / 2.384e-06,\n\t\t\t7.79152e-04 * 0.998795456205172 / 2.384e-06,\n\t\t\t5.2929e-05 * 0.998795456205172 / 2.384e-06,\n\t\t\t2.861e-06 * 0.998795456205172 / 2.384e-06,\n\t\t\t-6.0558e-05 * 0.998795456205172 / 2.384e-06,\n\t\t\t1.37329e-04 * 0.998795456205172 / 2.384e-06,\n\t\t\t5.462170e-03 * 0.998795456205172 / 2.384e-06,\n\t\t\t-2.9890060e-02 * 0.998795456205172 / 2.384e-06,\n\t\t\t-4.570484e-03 * 0.998795456205172 / 2.384e-06,\n\t\t\t-7.14302e-04 * 0.998795456205172 / 2.384e-06,\n\t\t\t-4.6253e-05 * 0.998795456205172 / 2.384e-06,\n\t\t\t4.912684976946725e-02, 1.990369453344394e+00,\n\n\t\t\t3.5780907e-02 * Util.SQRT2 * 0.5 / 2.384e-06,\n\t\t\t1.7876148e-02 * Util.SQRT2 * 0.5 / 2.384e-06,\n\t\t\t3.134727e-03 * Util.SQRT2 * 0.5 / 2.384e-06,\n\t\t\t2.457142e-03 * Util.SQRT2 * 0.5 / 2.384e-06,\n\t\t\t9.71317e-04 * Util.SQRT2 * 0.5 / 2.384e-06,\n\t\t\t2.18868e-04 * Util.SQRT2 * 0.5 / 2.384e-06,\n\t\t\t1.01566e-04 * Util.SQRT2 * 0.5 / 2.384e-06,\n\t\t\t1.3828e-05 * Util.SQRT2 * 0.5 / 2.384e-06,\n\n\t\t\t3.0526638e-02 / 2.384e-06, 4.638195e-03 / 2.384e-06,\n\t\t\t7.47204e-04 / 2.384e-06, 4.9591e-05 / 2.384e-06,\n\t\t\t4.756451e-03 / 2.384e-06, 2.1458e-05 / 2.384e-06,\n\t\t\t-6.9618e-05 / 2.384e-06, /* 2.384e-06/2.384e-06 */\n\t];\n\n\tvar NS = 12;\n\tvar NL = 36;\n\n\tvar win = [\n\t [\n\t 2.382191739347913e-13,\n\t 6.423305872147834e-13,\n\t 9.400849094049688e-13,\n\t 1.122435026096556e-12,\n\t 1.183840321267481e-12,\n\t 1.122435026096556e-12,\n\t 9.400849094049690e-13,\n\t 6.423305872147839e-13,\n\t 2.382191739347918e-13,\n\n\t 5.456116108943412e-12,\n\t 4.878985199565852e-12,\n\t 4.240448995017367e-12,\n\t 3.559909094758252e-12,\n\t 2.858043359288075e-12,\n\t 2.156177623817898e-12,\n\t 1.475637723558783e-12,\n\t 8.371015190102974e-13,\n\t 2.599706096327376e-13,\n\n\t -5.456116108943412e-12,\n\t -4.878985199565852e-12,\n\t -4.240448995017367e-12,\n\t -3.559909094758252e-12,\n\t -2.858043359288076e-12,\n\t -2.156177623817898e-12,\n\t -1.475637723558783e-12,\n\t -8.371015190102975e-13,\n\t -2.599706096327376e-13,\n\n\t -2.382191739347923e-13,\n\t -6.423305872147843e-13,\n\t -9.400849094049696e-13,\n\t -1.122435026096556e-12,\n\t -1.183840321267481e-12,\n\t -1.122435026096556e-12,\n\t -9.400849094049694e-13,\n\t -6.423305872147840e-13,\n\t -2.382191739347918e-13,\n\t ],\n\t [\n\t 2.382191739347913e-13,\n\t 6.423305872147834e-13,\n\t 9.400849094049688e-13,\n\t 1.122435026096556e-12,\n\t 1.183840321267481e-12,\n\t 1.122435026096556e-12,\n\t 9.400849094049688e-13,\n\t 6.423305872147841e-13,\n\t 2.382191739347918e-13,\n\n\t 5.456116108943413e-12,\n\t 4.878985199565852e-12,\n\t 4.240448995017367e-12,\n\t 3.559909094758253e-12,\n\t 2.858043359288075e-12,\n\t 2.156177623817898e-12,\n\t 1.475637723558782e-12,\n\t 8.371015190102975e-13,\n\t 2.599706096327376e-13,\n\n\t -5.461314069809755e-12,\n\t -4.921085770524055e-12,\n\t -4.343405037091838e-12,\n\t -3.732668368707687e-12,\n\t -3.093523840190885e-12,\n\t -2.430835727329465e-12,\n\t -1.734679010007751e-12,\n\t -9.748253656609281e-13,\n\t -2.797435120168326e-13,\n\n\t 0.000000000000000e+00,\n\t 0.000000000000000e+00,\n\t 0.000000000000000e+00,\n\t 0.000000000000000e+00,\n\t 0.000000000000000e+00,\n\t 0.000000000000000e+00,\n\t -2.283748241799531e-13,\n\t -4.037858874020686e-13,\n\t -2.146547464825323e-13,\n\t ],\n\t [\n\t 1.316524975873958e-01, /* win[SHORT_TYPE] */\n\t 4.142135623730950e-01,\n\t 7.673269879789602e-01,\n\n\t 1.091308501069271e+00, /* tantab_l */\n\t 1.303225372841206e+00,\n\t 1.569685577117490e+00,\n\t 1.920982126971166e+00,\n\t 2.414213562373094e+00,\n\t 3.171594802363212e+00,\n\t 4.510708503662055e+00,\n\t 7.595754112725146e+00,\n\t 2.290376554843115e+01,\n\n\t 0.98480775301220802032, /* cx */\n\t 0.64278760968653936292,\n\t 0.34202014332566882393,\n\t 0.93969262078590842791,\n\t -0.17364817766693030343,\n\t -0.76604444311897790243,\n\t 0.86602540378443870761,\n\t 0.500000000000000e+00,\n\n\t -5.144957554275265e-01, /* ca */\n\t -4.717319685649723e-01,\n\t -3.133774542039019e-01,\n\t -1.819131996109812e-01,\n\t -9.457419252642064e-02,\n\t -4.096558288530405e-02,\n\t -1.419856857247115e-02,\n\t -3.699974673760037e-03,\n\n\t 8.574929257125442e-01, /* cs */\n\t 8.817419973177052e-01,\n\t 9.496286491027329e-01,\n\t 9.833145924917901e-01,\n\t 9.955178160675857e-01,\n\t 9.991605581781475e-01,\n\t 9.998991952444470e-01,\n\t 9.999931550702802e-01,\n\t ],\n\t [\n\t 0.000000000000000e+00,\n\t 0.000000000000000e+00,\n\t 0.000000000000000e+00,\n\t 0.000000000000000e+00,\n\t 0.000000000000000e+00,\n\t 0.000000000000000e+00,\n\t 2.283748241799531e-13,\n\t 4.037858874020686e-13,\n\t 2.146547464825323e-13,\n\n\t 5.461314069809755e-12,\n\t 4.921085770524055e-12,\n\t 4.343405037091838e-12,\n\t 3.732668368707687e-12,\n\t 3.093523840190885e-12,\n\t 2.430835727329466e-12,\n\t 1.734679010007751e-12,\n\t 9.748253656609281e-13,\n\t 2.797435120168326e-13,\n\n\t -5.456116108943413e-12,\n\t -4.878985199565852e-12,\n\t -4.240448995017367e-12,\n\t -3.559909094758253e-12,\n\t -2.858043359288075e-12,\n\t -2.156177623817898e-12,\n\t -1.475637723558782e-12,\n\t -8.371015190102975e-13,\n\t -2.599706096327376e-13,\n\n\t -2.382191739347913e-13,\n\t -6.423305872147834e-13,\n\t -9.400849094049688e-13,\n\t -1.122435026096556e-12,\n\t -1.183840321267481e-12,\n\t -1.122435026096556e-12,\n\t -9.400849094049688e-13,\n\t -6.423305872147841e-13,\n\t -2.382191739347918e-13,\n\t ]\n\t];\n\n\tvar tantab_l = win[Encoder.SHORT_TYPE];\n\tvar cx = win[Encoder.SHORT_TYPE];\n\tvar ca = win[Encoder.SHORT_TYPE];\n\tvar cs = win[Encoder.SHORT_TYPE];\n\n\t/**\n\t * new IDCT routine written by Takehiro TOMINAGA\n\t *\n\t * PURPOSE: Overlapping window on PCM samples
\n\t *\n\t * SEMANTICS:
\n\t * 32 16-bit pcm samples are scaled to fractional 2's complement and\n\t * concatenated to the end of the window buffer #x#. The updated window\n\t * buffer #x# is then windowed by the analysis window #c# to produce the\n\t * windowed sample #z#\n\t */\n\tvar order = [\n\t 0, 1, 16, 17, 8, 9, 24, 25, 4, 5, 20, 21, 12, 13, 28, 29,\n\t 2, 3, 18, 19, 10, 11, 26, 27, 6, 7, 22, 23, 14, 15, 30, 31\n\t];\n\n\t/**\n\t * returns sum_j=0^31 a[j]*cos(PI*j*(k+1/2)/32), 0<=k<32\n\t */\n\tfunction window_subband(x1, x1Pos, a) {\n\t\tvar wp = 10;\n\n\t\tvar x2 = x1Pos + 238 - 14 - 286;\n\n\t\tfor (var i = -15; i < 0; i++) {\n\t\t\tvar w, s, t;\n\n\t\t\tw = enwindow[wp + -10];\n\t\t\ts = x1[x2 + -224] * w;\n\t\t\tt = x1[x1Pos + 224] * w;\n\t\t\tw = enwindow[wp + -9];\n\t\t\ts += x1[x2 + -160] * w;\n\t\t\tt += x1[x1Pos + 160] * w;\n\t\t\tw = enwindow[wp + -8];\n\t\t\ts += x1[x2 + -96] * w;\n\t\t\tt += x1[x1Pos + 96] * w;\n\t\t\tw = enwindow[wp + -7];\n\t\t\ts += x1[x2 + -32] * w;\n\t\t\tt += x1[x1Pos + 32] * w;\n\t\t\tw = enwindow[wp + -6];\n\t\t\ts += x1[x2 + 32] * w;\n\t\t\tt += x1[x1Pos + -32] * w;\n\t\t\tw = enwindow[wp + -5];\n\t\t\ts += x1[x2 + 96] * w;\n\t\t\tt += x1[x1Pos + -96] * w;\n\t\t\tw = enwindow[wp + -4];\n\t\t\ts += x1[x2 + 160] * w;\n\t\t\tt += x1[x1Pos + -160] * w;\n\t\t\tw = enwindow[wp + -3];\n\t\t\ts += x1[x2 + 224] * w;\n\t\t\tt += x1[x1Pos + -224] * w;\n\n\t\t\tw = enwindow[wp + -2];\n\t\t\ts += x1[x1Pos + -256] * w;\n\t\t\tt -= x1[x2 + 256] * w;\n\t\t\tw = enwindow[wp + -1];\n\t\t\ts += x1[x1Pos + -192] * w;\n\t\t\tt -= x1[x2 + 192] * w;\n\t\t\tw = enwindow[wp + 0];\n\t\t\ts += x1[x1Pos + -128] * w;\n\t\t\tt -= x1[x2 + 128] * w;\n\t\t\tw = enwindow[wp + 1];\n\t\t\ts += x1[x1Pos + -64] * w;\n\t\t\tt -= x1[x2 + 64] * w;\n\t\t\tw = enwindow[wp + 2];\n\t\t\ts += x1[x1Pos + 0] * w;\n\t\t\tt -= x1[x2 + 0] * w;\n\t\t\tw = enwindow[wp + 3];\n\t\t\ts += x1[x1Pos + 64] * w;\n\t\t\tt -= x1[x2 + -64] * w;\n\t\t\tw = enwindow[wp + 4];\n\t\t\ts += x1[x1Pos + 128] * w;\n\t\t\tt -= x1[x2 + -128] * w;\n\t\t\tw = enwindow[wp + 5];\n\t\t\ts += x1[x1Pos + 192] * w;\n\t\t\tt -= x1[x2 + -192] * w;\n\n\t\t\t/*\n\t\t\t * this multiplyer could be removed, but it needs more 256 FLOAT\n\t\t\t * data. thinking about the data cache performance, I think we\n\t\t\t * should not use such a huge table. tt 2000/Oct/25\n\t\t\t */\n\t\t\ts *= enwindow[wp + 6];\n\t\t\tw = t - s;\n\t\t\ta[30 + i * 2] = t + s;\n\t\t\ta[31 + i * 2] = enwindow[wp + 7] * w;\n\t\t\twp += 18;\n\t\t\tx1Pos--;\n\t\t\tx2++;\n\t\t}\n\t\t{\n\t\t\tvar s, t, u, v;\n\t\t\tt = x1[x1Pos + -16] * enwindow[wp + -10];\n\t\t\ts = x1[x1Pos + -32] * enwindow[wp + -2];\n\t\t\tt += (x1[x1Pos + -48] - x1[x1Pos + 16]) * enwindow[wp + -9];\n\t\t\ts += x1[x1Pos + -96] * enwindow[wp + -1];\n\t\t\tt += (x1[x1Pos + -80] + x1[x1Pos + 48]) * enwindow[wp + -8];\n\t\t\ts += x1[x1Pos + -160] * enwindow[wp + 0];\n\t\t\tt += (x1[x1Pos + -112] - x1[x1Pos + 80]) * enwindow[wp + -7];\n\t\t\ts += x1[x1Pos + -224] * enwindow[wp + 1];\n\t\t\tt += (x1[x1Pos + -144] + x1[x1Pos + 112]) * enwindow[wp + -6];\n\t\t\ts -= x1[x1Pos + 32] * enwindow[wp + 2];\n\t\t\tt += (x1[x1Pos + -176] - x1[x1Pos + 144]) * enwindow[wp + -5];\n\t\t\ts -= x1[x1Pos + 96] * enwindow[wp + 3];\n\t\t\tt += (x1[x1Pos + -208] + x1[x1Pos + 176]) * enwindow[wp + -4];\n\t\t\ts -= x1[x1Pos + 160] * enwindow[wp + 4];\n\t\t\tt += (x1[x1Pos + -240] - x1[x1Pos + 208]) * enwindow[wp + -3];\n\t\t\ts -= x1[x1Pos + 224];\n\n\t\t\tu = s - t;\n\t\t\tv = s + t;\n\n\t\t\tt = a[14];\n\t\t\ts = a[15] - t;\n\n\t\t\ta[31] = v + t; /* A0 */\n\t\t\ta[30] = u + s; /* A1 */\n\t\t\ta[15] = u - s; /* A2 */\n\t\t\ta[14] = v - t; /* A3 */\n\t\t}\n\t\t{\n\t\t\tvar xr;\n\t\t\txr = a[28] - a[0];\n\t\t\ta[0] += a[28];\n\t\t\ta[28] = xr * enwindow[wp + -2 * 18 + 7];\n\t\t\txr = a[29] - a[1];\n\t\t\ta[1] += a[29];\n\t\t\ta[29] = xr * enwindow[wp + -2 * 18 + 7];\n\n\t\t\txr = a[26] - a[2];\n\t\t\ta[2] += a[26];\n\t\t\ta[26] = xr * enwindow[wp + -4 * 18 + 7];\n\t\t\txr = a[27] - a[3];\n\t\t\ta[3] += a[27];\n\t\t\ta[27] = xr * enwindow[wp + -4 * 18 + 7];\n\n\t\t\txr = a[24] - a[4];\n\t\t\ta[4] += a[24];\n\t\t\ta[24] = xr * enwindow[wp + -6 * 18 + 7];\n\t\t\txr = a[25] - a[5];\n\t\t\ta[5] += a[25];\n\t\t\ta[25] = xr * enwindow[wp + -6 * 18 + 7];\n\n\t\t\txr = a[22] - a[6];\n\t\t\ta[6] += a[22];\n\t\t\ta[22] = xr * Util.SQRT2;\n\t\t\txr = a[23] - a[7];\n\t\t\ta[7] += a[23];\n\t\t\ta[23] = xr * Util.SQRT2 - a[7];\n\t\t\ta[7] -= a[6];\n\t\t\ta[22] -= a[7];\n\t\t\ta[23] -= a[22];\n\n\t\t\txr = a[6];\n\t\t\ta[6] = a[31] - xr;\n\t\t\ta[31] = a[31] + xr;\n\t\t\txr = a[7];\n\t\t\ta[7] = a[30] - xr;\n\t\t\ta[30] = a[30] + xr;\n\t\t\txr = a[22];\n\t\t\ta[22] = a[15] - xr;\n\t\t\ta[15] = a[15] + xr;\n\t\t\txr = a[23];\n\t\t\ta[23] = a[14] - xr;\n\t\t\ta[14] = a[14] + xr;\n\n\t\t\txr = a[20] - a[8];\n\t\t\ta[8] += a[20];\n\t\t\ta[20] = xr * enwindow[wp + -10 * 18 + 7];\n\t\t\txr = a[21] - a[9];\n\t\t\ta[9] += a[21];\n\t\t\ta[21] = xr * enwindow[wp + -10 * 18 + 7];\n\n\t\t\txr = a[18] - a[10];\n\t\t\ta[10] += a[18];\n\t\t\ta[18] = xr * enwindow[wp + -12 * 18 + 7];\n\t\t\txr = a[19] - a[11];\n\t\t\ta[11] += a[19];\n\t\t\ta[19] = xr * enwindow[wp + -12 * 18 + 7];\n\n\t\t\txr = a[16] - a[12];\n\t\t\ta[12] += a[16];\n\t\t\ta[16] = xr * enwindow[wp + -14 * 18 + 7];\n\t\t\txr = a[17] - a[13];\n\t\t\ta[13] += a[17];\n\t\t\ta[17] = xr * enwindow[wp + -14 * 18 + 7];\n\n\t\t\txr = -a[20] + a[24];\n\t\t\ta[20] += a[24];\n\t\t\ta[24] = xr * enwindow[wp + -12 * 18 + 7];\n\t\t\txr = -a[21] + a[25];\n\t\t\ta[21] += a[25];\n\t\t\ta[25] = xr * enwindow[wp + -12 * 18 + 7];\n\n\t\t\txr = a[4] - a[8];\n\t\t\ta[4] += a[8];\n\t\t\ta[8] = xr * enwindow[wp + -12 * 18 + 7];\n\t\t\txr = a[5] - a[9];\n\t\t\ta[5] += a[9];\n\t\t\ta[9] = xr * enwindow[wp + -12 * 18 + 7];\n\n\t\t\txr = a[0] - a[12];\n\t\t\ta[0] += a[12];\n\t\t\ta[12] = xr * enwindow[wp + -4 * 18 + 7];\n\t\t\txr = a[1] - a[13];\n\t\t\ta[1] += a[13];\n\t\t\ta[13] = xr * enwindow[wp + -4 * 18 + 7];\n\t\t\txr = a[16] - a[28];\n\t\t\ta[16] += a[28];\n\t\t\ta[28] = xr * enwindow[wp + -4 * 18 + 7];\n\t\t\txr = -a[17] + a[29];\n\t\t\ta[17] += a[29];\n\t\t\ta[29] = xr * enwindow[wp + -4 * 18 + 7];\n\n\t\t\txr = Util.SQRT2 * (a[2] - a[10]);\n\t\t\ta[2] += a[10];\n\t\t\ta[10] = xr;\n\t\t\txr = Util.SQRT2 * (a[3] - a[11]);\n\t\t\ta[3] += a[11];\n\t\t\ta[11] = xr;\n\t\t\txr = Util.SQRT2 * (-a[18] + a[26]);\n\t\t\ta[18] += a[26];\n\t\t\ta[26] = xr - a[18];\n\t\t\txr = Util.SQRT2 * (-a[19] + a[27]);\n\t\t\ta[19] += a[27];\n\t\t\ta[27] = xr - a[19];\n\n\t\t\txr = a[2];\n\t\t\ta[19] -= a[3];\n\t\t\ta[3] -= xr;\n\t\t\ta[2] = a[31] - xr;\n\t\t\ta[31] += xr;\n\t\t\txr = a[3];\n\t\t\ta[11] -= a[19];\n\t\t\ta[18] -= xr;\n\t\t\ta[3] = a[30] - xr;\n\t\t\ta[30] += xr;\n\t\t\txr = a[18];\n\t\t\ta[27] -= a[11];\n\t\t\ta[19] -= xr;\n\t\t\ta[18] = a[15] - xr;\n\t\t\ta[15] += xr;\n\n\t\t\txr = a[19];\n\t\t\ta[10] -= xr;\n\t\t\ta[19] = a[14] - xr;\n\t\t\ta[14] += xr;\n\t\t\txr = a[10];\n\t\t\ta[11] -= xr;\n\t\t\ta[10] = a[23] - xr;\n\t\t\ta[23] += xr;\n\t\t\txr = a[11];\n\t\t\ta[26] -= xr;\n\t\t\ta[11] = a[22] - xr;\n\t\t\ta[22] += xr;\n\t\t\txr = a[26];\n\t\t\ta[27] -= xr;\n\t\t\ta[26] = a[7] - xr;\n\t\t\ta[7] += xr;\n\n\t\t\txr = a[27];\n\t\t\ta[27] = a[6] - xr;\n\t\t\ta[6] += xr;\n\n\t\t\txr = Util.SQRT2 * (a[0] - a[4]);\n\t\t\ta[0] += a[4];\n\t\t\ta[4] = xr;\n\t\t\txr = Util.SQRT2 * (a[1] - a[5]);\n\t\t\ta[1] += a[5];\n\t\t\ta[5] = xr;\n\t\t\txr = Util.SQRT2 * (a[16] - a[20]);\n\t\t\ta[16] += a[20];\n\t\t\ta[20] = xr;\n\t\t\txr = Util.SQRT2 * (a[17] - a[21]);\n\t\t\ta[17] += a[21];\n\t\t\ta[21] = xr;\n\n\t\t\txr = -Util.SQRT2 * (a[8] - a[12]);\n\t\t\ta[8] += a[12];\n\t\t\ta[12] = xr - a[8];\n\t\t\txr = -Util.SQRT2 * (a[9] - a[13]);\n\t\t\ta[9] += a[13];\n\t\t\ta[13] = xr - a[9];\n\t\t\txr = -Util.SQRT2 * (a[25] - a[29]);\n\t\t\ta[25] += a[29];\n\t\t\ta[29] = xr - a[25];\n\t\t\txr = -Util.SQRT2 * (a[24] + a[28]);\n\t\t\ta[24] -= a[28];\n\t\t\ta[28] = xr - a[24];\n\n\t\t\txr = a[24] - a[16];\n\t\t\ta[24] = xr;\n\t\t\txr = a[20] - xr;\n\t\t\ta[20] = xr;\n\t\t\txr = a[28] - xr;\n\t\t\ta[28] = xr;\n\n\t\t\txr = a[25] - a[17];\n\t\t\ta[25] = xr;\n\t\t\txr = a[21] - xr;\n\t\t\ta[21] = xr;\n\t\t\txr = a[29] - xr;\n\t\t\ta[29] = xr;\n\n\t\t\txr = a[17] - a[1];\n\t\t\ta[17] = xr;\n\t\t\txr = a[9] - xr;\n\t\t\ta[9] = xr;\n\t\t\txr = a[25] - xr;\n\t\t\ta[25] = xr;\n\t\t\txr = a[5] - xr;\n\t\t\ta[5] = xr;\n\t\t\txr = a[21] - xr;\n\t\t\ta[21] = xr;\n\t\t\txr = a[13] - xr;\n\t\t\ta[13] = xr;\n\t\t\txr = a[29] - xr;\n\t\t\ta[29] = xr;\n\n\t\t\txr = a[1] - a[0];\n\t\t\ta[1] = xr;\n\t\t\txr = a[16] - xr;\n\t\t\ta[16] = xr;\n\t\t\txr = a[17] - xr;\n\t\t\ta[17] = xr;\n\t\t\txr = a[8] - xr;\n\t\t\ta[8] = xr;\n\t\t\txr = a[9] - xr;\n\t\t\ta[9] = xr;\n\t\t\txr = a[24] - xr;\n\t\t\ta[24] = xr;\n\t\t\txr = a[25] - xr;\n\t\t\ta[25] = xr;\n\t\t\txr = a[4] - xr;\n\t\t\ta[4] = xr;\n\t\t\txr = a[5] - xr;\n\t\t\ta[5] = xr;\n\t\t\txr = a[20] - xr;\n\t\t\ta[20] = xr;\n\t\t\txr = a[21] - xr;\n\t\t\ta[21] = xr;\n\t\t\txr = a[12] - xr;\n\t\t\ta[12] = xr;\n\t\t\txr = a[13] - xr;\n\t\t\ta[13] = xr;\n\t\t\txr = a[28] - xr;\n\t\t\ta[28] = xr;\n\t\t\txr = a[29] - xr;\n\t\t\ta[29] = xr;\n\n\t\t\txr = a[0];\n\t\t\ta[0] += a[31];\n\t\t\ta[31] -= xr;\n\t\t\txr = a[1];\n\t\t\ta[1] += a[30];\n\t\t\ta[30] -= xr;\n\t\t\txr = a[16];\n\t\t\ta[16] += a[15];\n\t\t\ta[15] -= xr;\n\t\t\txr = a[17];\n\t\t\ta[17] += a[14];\n\t\t\ta[14] -= xr;\n\t\t\txr = a[8];\n\t\t\ta[8] += a[23];\n\t\t\ta[23] -= xr;\n\t\t\txr = a[9];\n\t\t\ta[9] += a[22];\n\t\t\ta[22] -= xr;\n\t\t\txr = a[24];\n\t\t\ta[24] += a[7];\n\t\t\ta[7] -= xr;\n\t\t\txr = a[25];\n\t\t\ta[25] += a[6];\n\t\t\ta[6] -= xr;\n\t\t\txr = a[4];\n\t\t\ta[4] += a[27];\n\t\t\ta[27] -= xr;\n\t\t\txr = a[5];\n\t\t\ta[5] += a[26];\n\t\t\ta[26] -= xr;\n\t\t\txr = a[20];\n\t\t\ta[20] += a[11];\n\t\t\ta[11] -= xr;\n\t\t\txr = a[21];\n\t\t\ta[21] += a[10];\n\t\t\ta[10] -= xr;\n\t\t\txr = a[12];\n\t\t\ta[12] += a[19];\n\t\t\ta[19] -= xr;\n\t\t\txr = a[13];\n\t\t\ta[13] += a[18];\n\t\t\ta[18] -= xr;\n\t\t\txr = a[28];\n\t\t\ta[28] += a[3];\n\t\t\ta[3] -= xr;\n\t\t\txr = a[29];\n\t\t\ta[29] += a[2];\n\t\t\ta[2] -= xr;\n\t\t}\n\t}\n\n\t/**\n\t * Function: Calculation of the MDCT In the case of long blocks (type 0,1,3)\n\t * there are 36 coefficents in the time domain and 18 in the frequency\n\t * domain.
\n\t * In the case of short blocks (type 2) there are 3 transformations with\n\t * short length. This leads to 12 coefficents in the time and 6 in the\n\t * frequency domain. In this case the results are stored side by side in the\n\t * vector out[].\n\t *\n\t * New layer3\n\t */\n\tfunction mdct_short(inout, inoutPos) {\n\t\tfor (var l = 0; l < 3; l++) {\n\t\t\tvar tc0, tc1, tc2, ts0, ts1, ts2;\n\n\t\t\tts0 = inout[inoutPos + 2 * 3] * win[Encoder.SHORT_TYPE][0]\n\t\t\t\t\t- inout[inoutPos + 5 * 3];\n\t\t\ttc0 = inout[inoutPos + 0 * 3] * win[Encoder.SHORT_TYPE][2]\n\t\t\t\t\t- inout[inoutPos + 3 * 3];\n\t\t\ttc1 = ts0 + tc0;\n\t\t\ttc2 = ts0 - tc0;\n\n\t\t\tts0 = inout[inoutPos + 5 * 3] * win[Encoder.SHORT_TYPE][0]\n\t\t\t\t\t+ inout[inoutPos + 2 * 3];\n\t\t\ttc0 = inout[inoutPos + 3 * 3] * win[Encoder.SHORT_TYPE][2]\n\t\t\t\t\t+ inout[inoutPos + 0 * 3];\n\t\t\tts1 = ts0 + tc0;\n\t\t\tts2 = -ts0 + tc0;\n\n\t\t\ttc0 = (inout[inoutPos + 1 * 3] * win[Encoder.SHORT_TYPE][1] - inout[inoutPos + 4 * 3]) * 2.069978111953089e-11;\n\t\t\t/*\n\t\t\t * tritab_s [ 1 ]\n\t\t\t */\n\t\t\tts0 = (inout[inoutPos + 4 * 3] * win[Encoder.SHORT_TYPE][1] + inout[inoutPos + 1 * 3]) * 2.069978111953089e-11;\n\t\t\t/*\n\t\t\t * tritab_s [ 1 ]\n\t\t\t */\n\t\t\tinout[inoutPos + 3 * 0] = tc1 * 1.907525191737280e-11 + tc0;\n\t\t\t/*\n\t\t\t * tritab_s[ 2 ]\n\t\t\t */\n\t\t\tinout[inoutPos + 3 * 5] = -ts1 * 1.907525191737280e-11 + ts0;\n\t\t\t/*\n\t\t\t * tritab_s[0 ]\n\t\t\t */\n\t\t\ttc2 = tc2 * 0.86602540378443870761 * 1.907525191737281e-11;\n\t\t\t/*\n\t\t\t * tritab_s[ 2]\n\t\t\t */\n\t\t\tts1 = ts1 * 0.5 * 1.907525191737281e-11 + ts0;\n\t\t\tinout[inoutPos + 3 * 1] = tc2 - ts1;\n\t\t\tinout[inoutPos + 3 * 2] = tc2 + ts1;\n\n\t\t\ttc1 = tc1 * 0.5 * 1.907525191737281e-11 - tc0;\n\t\t\tts2 = ts2 * 0.86602540378443870761 * 1.907525191737281e-11;\n\t\t\t/*\n\t\t\t * tritab_s[ 0]\n\t\t\t */\n\t\t\tinout[inoutPos + 3 * 3] = tc1 + ts2;\n\t\t\tinout[inoutPos + 3 * 4] = tc1 - ts2;\n\n\t\t\tinoutPos++;\n\t\t}\n\t}\n\n\tfunction mdct_long(out, outPos, _in) {\n\t\tvar ct, st;\n\t\t{\n\t\t\tvar tc1, tc2, tc3, tc4, ts5, ts6, ts7, ts8;\n\t\t\t/* 1,2, 5,6, 9,10, 13,14, 17 */\n\t\t\ttc1 = _in[17] - _in[9];\n\t\t\ttc3 = _in[15] - _in[11];\n\t\t\ttc4 = _in[14] - _in[12];\n\t\t\tts5 = _in[0] + _in[8];\n\t\t\tts6 = _in[1] + _in[7];\n\t\t\tts7 = _in[2] + _in[6];\n\t\t\tts8 = _in[3] + _in[5];\n\n\t\t\tout[outPos + 17] = (ts5 + ts7 - ts8) - (ts6 - _in[4]);\n\t\t\tst = (ts5 + ts7 - ts8) * cx[12 + 7] + (ts6 - _in[4]);\n\t\t\tct = (tc1 - tc3 - tc4) * cx[12 + 6];\n\t\t\tout[outPos + 5] = ct + st;\n\t\t\tout[outPos + 6] = ct - st;\n\n\t\t\ttc2 = (_in[16] - _in[10]) * cx[12 + 6];\n\t\t\tts6 = ts6 * cx[12 + 7] + _in[4];\n\t\t\tct = tc1 * cx[12 + 0] + tc2 + tc3 * cx[12 + 1] + tc4 * cx[12 + 2];\n\t\t\tst = -ts5 * cx[12 + 4] + ts6 - ts7 * cx[12 + 5] + ts8 * cx[12 + 3];\n\t\t\tout[outPos + 1] = ct + st;\n\t\t\tout[outPos + 2] = ct - st;\n\n\t\t\tct = tc1 * cx[12 + 1] - tc2 - tc3 * cx[12 + 2] + tc4 * cx[12 + 0];\n\t\t\tst = -ts5 * cx[12 + 5] + ts6 - ts7 * cx[12 + 3] + ts8 * cx[12 + 4];\n\t\t\tout[outPos + 9] = ct + st;\n\t\t\tout[outPos + 10] = ct - st;\n\n\t\t\tct = tc1 * cx[12 + 2] - tc2 + tc3 * cx[12 + 0] - tc4 * cx[12 + 1];\n\t\t\tst = ts5 * cx[12 + 3] - ts6 + ts7 * cx[12 + 4] - ts8 * cx[12 + 5];\n\t\t\tout[outPos + 13] = ct + st;\n\t\t\tout[outPos + 14] = ct - st;\n\t\t}\n\t\t{\n\t\t\tvar ts1, ts2, ts3, ts4, tc5, tc6, tc7, tc8;\n\n\t\t\tts1 = _in[8] - _in[0];\n\t\t\tts3 = _in[6] - _in[2];\n\t\t\tts4 = _in[5] - _in[3];\n\t\t\ttc5 = _in[17] + _in[9];\n\t\t\ttc6 = _in[16] + _in[10];\n\t\t\ttc7 = _in[15] + _in[11];\n\t\t\ttc8 = _in[14] + _in[12];\n\n\t\t\tout[outPos + 0] = (tc5 + tc7 + tc8) + (tc6 + _in[13]);\n\t\t\tct = (tc5 + tc7 + tc8) * cx[12 + 7] - (tc6 + _in[13]);\n\t\t\tst = (ts1 - ts3 + ts4) * cx[12 + 6];\n\t\t\tout[outPos + 11] = ct + st;\n\t\t\tout[outPos + 12] = ct - st;\n\n\t\t\tts2 = (_in[7] - _in[1]) * cx[12 + 6];\n\t\t\ttc6 = _in[13] - tc6 * cx[12 + 7];\n\t\t\tct = tc5 * cx[12 + 3] - tc6 + tc7 * cx[12 + 4] + tc8 * cx[12 + 5];\n\t\t\tst = ts1 * cx[12 + 2] + ts2 + ts3 * cx[12 + 0] + ts4 * cx[12 + 1];\n\t\t\tout[outPos + 3] = ct + st;\n\t\t\tout[outPos + 4] = ct - st;\n\n\t\t\tct = -tc5 * cx[12 + 5] + tc6 - tc7 * cx[12 + 3] - tc8 * cx[12 + 4];\n\t\t\tst = ts1 * cx[12 + 1] + ts2 - ts3 * cx[12 + 2] - ts4 * cx[12 + 0];\n\t\t\tout[outPos + 7] = ct + st;\n\t\t\tout[outPos + 8] = ct - st;\n\n\t\t\tct = -tc5 * cx[12 + 4] + tc6 - tc7 * cx[12 + 5] - tc8 * cx[12 + 3];\n\t\t\tst = ts1 * cx[12 + 0] - ts2 + ts3 * cx[12 + 1] - ts4 * cx[12 + 2];\n\t\t\tout[outPos + 15] = ct + st;\n\t\t\tout[outPos + 16] = ct - st;\n\t\t}\n\t}\n\n\tthis.mdct_sub48 = function(gfc, w0, w1) {\n\t\tvar wk = w0;\n\t\tvar wkPos = 286;\n\t\t/* thinking cache performance, ch->gr loop is better than gr->ch loop */\n\t\tfor (var ch = 0; ch < gfc.channels_out; ch++) {\n\t\t\tfor (var gr = 0; gr < gfc.mode_gr; gr++) {\n\t\t\t\tvar band;\n\t\t\t\tvar gi = (gfc.l3_side.tt[gr][ch]);\n\t\t\t\tvar mdct_enc = gi.xr;\n\t\t\t\tvar mdct_encPos = 0;\n\t\t\t\tvar samp = gfc.sb_sample[ch][1 - gr];\n\t\t\t\tvar sampPos = 0;\n\n\t\t\t\tfor (var k = 0; k < 18 / 2; k++) {\n\t\t\t\t\twindow_subband(wk, wkPos, samp[sampPos]);\n\t\t\t\t\twindow_subband(wk, wkPos + 32, samp[sampPos + 1]);\n\t\t\t\t\tsampPos += 2;\n\t\t\t\t\twkPos += 64;\n\t\t\t\t\t/*\n\t\t\t\t\t * Compensate for inversion in the analysis filter\n\t\t\t\t\t */\n\t\t\t\t\tfor (band = 1; band < 32; band += 2) {\n\t\t\t\t\t\tsamp[sampPos - 1][band] *= -1;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t/*\n\t\t\t\t * Perform imdct of 18 previous subband samples + 18 current\n\t\t\t\t * subband samples\n\t\t\t\t */\n\t\t\t\tfor (band = 0; band < 32; band++, mdct_encPos += 18) {\n\t\t\t\t\tvar type = gi.block_type;\n\t\t\t\t\tvar band0 = gfc.sb_sample[ch][gr];\n\t\t\t\t\tvar band1 = gfc.sb_sample[ch][1 - gr];\n\t\t\t\t\tif (gi.mixed_block_flag != 0 && band < 2)\n\t\t\t\t\t\ttype = 0;\n\t\t\t\t\tif (gfc.amp_filter[band] < 1e-12) {\n\t\t\t\t\t\tArrays.fill(mdct_enc, mdct_encPos + 0,\n\t\t\t\t\t\t\t\tmdct_encPos + 18, 0);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (gfc.amp_filter[band] < 1.0) {\n\t\t\t\t\t\t\tfor (var k = 0; k < 18; k++)\n\t\t\t\t\t\t\t\tband1[k][order[band]] *= gfc.amp_filter[band];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (type == Encoder.SHORT_TYPE) {\n\t\t\t\t\t\t\tfor (var k = -NS / 4; k < 0; k++) {\n\t\t\t\t\t\t\t\tvar w = win[Encoder.SHORT_TYPE][k + 3];\n\t\t\t\t\t\t\t\tmdct_enc[mdct_encPos + k * 3 + 9] = band0[9 + k][order[band]]\n\t\t\t\t\t\t\t\t\t\t* w - band0[8 - k][order[band]];\n\t\t\t\t\t\t\t\tmdct_enc[mdct_encPos + k * 3 + 18] = band0[14 - k][order[band]]\n\t\t\t\t\t\t\t\t\t\t* w + band0[15 + k][order[band]];\n\t\t\t\t\t\t\t\tmdct_enc[mdct_encPos + k * 3 + 10] = band0[15 + k][order[band]]\n\t\t\t\t\t\t\t\t\t\t* w - band0[14 - k][order[band]];\n\t\t\t\t\t\t\t\tmdct_enc[mdct_encPos + k * 3 + 19] = band1[2 - k][order[band]]\n\t\t\t\t\t\t\t\t\t\t* w + band1[3 + k][order[band]];\n\t\t\t\t\t\t\t\tmdct_enc[mdct_encPos + k * 3 + 11] = band1[3 + k][order[band]]\n\t\t\t\t\t\t\t\t\t\t* w - band1[2 - k][order[band]];\n\t\t\t\t\t\t\t\tmdct_enc[mdct_encPos + k * 3 + 20] = band1[8 - k][order[band]]\n\t\t\t\t\t\t\t\t\t\t* w + band1[9 + k][order[band]];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmdct_short(mdct_enc, mdct_encPos);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar work = new_float(18);\n\t\t\t\t\t\t\tfor (var k = -NL / 4; k < 0; k++) {\n\t\t\t\t\t\t\t\tvar a, b;\n\t\t\t\t\t\t\t\ta = win[type][k + 27]\n\t\t\t\t\t\t\t\t\t\t* band1[k + 9][order[band]]\n\t\t\t\t\t\t\t\t\t\t+ win[type][k + 36]\n\t\t\t\t\t\t\t\t\t\t* band1[8 - k][order[band]];\n\t\t\t\t\t\t\t\tb = win[type][k + 9]\n\t\t\t\t\t\t\t\t\t\t* band0[k + 9][order[band]]\n\t\t\t\t\t\t\t\t\t\t- win[type][k + 18]\n\t\t\t\t\t\t\t\t\t\t* band0[8 - k][order[band]];\n\t\t\t\t\t\t\t\twork[k + 9] = a - b * tantab_l[3 + k + 9];\n\t\t\t\t\t\t\t\twork[k + 18] = a * tantab_l[3 + k + 9] + b;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tmdct_long(mdct_enc, mdct_encPos, work);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t/*\n\t\t\t\t\t * Perform aliasing reduction butterfly\n\t\t\t\t\t */\n\t\t\t\t\tif (type != Encoder.SHORT_TYPE && band != 0) {\n\t\t\t\t\t\tfor (var k = 7; k >= 0; --k) {\n\t\t\t\t\t\t\tvar bu, bd;\n\t\t\t\t\t\t\tbu = mdct_enc[mdct_encPos + k] * ca[20 + k]\n\t\t\t\t\t\t\t\t\t+ mdct_enc[mdct_encPos + -1 - k]\n\t\t\t\t\t\t\t\t\t* cs[28 + k];\n\t\t\t\t\t\t\tbd = mdct_enc[mdct_encPos + k] * cs[28 + k]\n\t\t\t\t\t\t\t\t\t- mdct_enc[mdct_encPos + -1 - k]\n\t\t\t\t\t\t\t\t\t* ca[20 + k];\n\n\t\t\t\t\t\t\tmdct_enc[mdct_encPos + -1 - k] = bu;\n\t\t\t\t\t\t\tmdct_enc[mdct_encPos + k] = bd;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\twk = w1;\n\t\t\twkPos = 286;\n\t\t\tif (gfc.mode_gr == 1) {\n\t\t\t\tfor (var i = 0; i < 18; i++) {\n\t\t\t\t\tSystem.arraycopy(gfc.sb_sample[ch][1][i], 0,\n\t\t\t\t\t\t\tgfc.sb_sample[ch][0][i], 0, 32);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nmodule.exports = NewMDCT;\n","var Encoder = require('./Encoder.js');\nvar common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nfunction III_psy_xmin() {\n this.l = new_float(Encoder.SBMAX_l);\n this.s = new_float_n([Encoder.SBMAX_s, 3]);\n\n var self = this;\n this.assign = function (iii_psy_xmin) {\n System.arraycopy(iii_psy_xmin.l, 0, self.l, 0, Encoder.SBMAX_l);\n for (var i = 0; i < Encoder.SBMAX_s; i++) {\n for (var j = 0; j < 3; j++) {\n self.s[i][j] = iii_psy_xmin.s[i][j];\n }\n }\n }\n}\n\nmodule.exports = III_psy_xmin;\n","//package mp3;\n\nvar III_psy_xmin = require('./III_psy_xmin.js');\n\nfunction III_psy_ratio() {\n\tthis.thm = new III_psy_xmin();\n\tthis.en = new III_psy_xmin();\n}\n\nmodule.exports = III_psy_ratio;\n","var common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\n/**\n * ENCDELAY The encoder delay.\n *\n * Minimum allowed is MDCTDELAY (see below)\n *\n * The first 96 samples will be attenuated, so using a value less than 96\n * will result in corrupt data for the first 96-ENCDELAY samples.\n *\n * suggested: 576 set to 1160 to sync with FhG.\n */\nEncoder.ENCDELAY = 576;\n/**\n * make sure there is at least one complete frame after the last frame\n * containing real data\n *\n * Using a value of 288 would be sufficient for a a very sophisticated\n * decoder that can decode granule-by-granule instead of frame by frame. But\n * lets not assume this, and assume the decoder will not decode frame N\n * unless it also has data for frame N+1\n */\nEncoder.POSTDELAY = 1152;\n\n/**\n * delay of the MDCT used in mdct.c original ISO routines had a delay of\n * 528! Takehiro's routines:\n */\nEncoder.MDCTDELAY = 48;\nEncoder.FFTOFFSET = (224 + Encoder.MDCTDELAY);\n\n/**\n * Most decoders, including the one we use, have a delay of 528 samples.\n */\nEncoder.DECDELAY = 528;\n\n/**\n * number of subbands\n */\nEncoder.SBLIMIT = 32;\n\n/**\n * parition bands bands\n */\nEncoder.CBANDS = 64;\n\n/**\n * number of critical bands/scale factor bands where masking is computed\n */\nEncoder.SBPSY_l = 21;\nEncoder.SBPSY_s = 12;\n\n/**\n * total number of scalefactor bands encoded\n */\nEncoder.SBMAX_l = 22;\nEncoder.SBMAX_s = 13;\nEncoder.PSFB21 = 6;\nEncoder.PSFB12 = 6;\n\n/**\n * FFT sizes\n */\nEncoder.BLKSIZE = 1024;\nEncoder.HBLKSIZE = (Encoder.BLKSIZE / 2 + 1);\nEncoder.BLKSIZE_s = 256;\nEncoder.HBLKSIZE_s = (Encoder.BLKSIZE_s / 2 + 1);\n\nEncoder.NORM_TYPE = 0;\nEncoder.START_TYPE = 1;\nEncoder.SHORT_TYPE = 2;\nEncoder.STOP_TYPE = 3;\n\n/**\n *
\n * Mode Extention:\n * When we are in stereo mode, there are 4 possible methods to store these\n * two channels. The stereo modes -m? are using a subset of them.\n *\n *  -ms: MPG_MD_LR_LR\n *  -mj: MPG_MD_LR_LR and MPG_MD_MS_LR\n *  -mf: MPG_MD_MS_LR\n *  -mi: all\n * 
\n */\nEncoder.MPG_MD_LR_LR = 0;\nEncoder.MPG_MD_LR_I = 1;\nEncoder.MPG_MD_MS_LR = 2;\nEncoder.MPG_MD_MS_I = 3;\n\nEncoder.fircoef = [-0.0207887 * 5, -0.0378413 * 5,\n -0.0432472 * 5, -0.031183 * 5, 7.79609e-18 * 5, 0.0467745 * 5,\n 0.10091 * 5, 0.151365 * 5, 0.187098 * 5];\n\nfunction Encoder() {\n var NewMDCT = require('./NewMDCT.js');\n var III_psy_ratio = require('./III_psy_ratio.js');\n\n var FFTOFFSET = Encoder.FFTOFFSET;\n var MPG_MD_MS_LR = Encoder.MPG_MD_MS_LR;\n //BitStream bs;\n //PsyModel psy;\n //VBRTag vbr;\n //QuantizePVT qupvt;\n var bs = null;\n this.psy = null;\n var psy = null;\n var vbr = null;\n var qupvt = null;\n\n //public final void setModules(BitStream bs, PsyModel psy, QuantizePVT qupvt,\n // VBRTag vbr) {\n this.setModules = function (_bs, _psy, _qupvt, _vbr) {\n bs = _bs;\n this.psy = _psy;\n psy = _psy;\n vbr = _vbr;\n qupvt = _qupvt;\n };\n\n var newMDCT = new NewMDCT();\n\n /***********************************************************************\n *\n * encoder and decoder delays\n *\n ***********************************************************************/\n\n /**\n *
\n     * layer III enc->dec delay:  1056 (1057?)   (observed)\n     * layer  II enc->dec delay:   480  (481?)   (observed)\n     *\n     * polyphase 256-16             (dec or enc)        = 240\n     * mdct      256+32  (9*32)     (dec or enc)        = 288\n     * total:    512+16\n     *\n     * My guess is that delay of polyphase filterbank is actualy 240.5\n     * (there are technical reasons for this, see postings in mp3encoder).\n     * So total Encode+Decode delay = ENCDELAY + 528 + 1\n     * 
\n */\n\n\n /**\n * auto-adjust of ATH, useful for low volume Gabriel Bouvigne 3 feb 2001\n *\n * modifies some values in gfp.internal_flags.ATH (gfc.ATH)\n */\n//private void adjust_ATH(final LameInternalFlags gfc) {\n function adjust_ATH(gfc) {\n var gr2_max, max_pow;\n\n if (gfc.ATH.useAdjust == 0) {\n gfc.ATH.adjust = 1.0;\n /* no adjustment */\n return;\n }\n\n /* jd - 2001 mar 12, 27, jun 30 */\n /* loudness based on equal loudness curve; */\n /* use granule with maximum combined loudness */\n max_pow = gfc.loudness_sq[0][0];\n gr2_max = gfc.loudness_sq[1][0];\n if (gfc.channels_out == 2) {\n max_pow += gfc.loudness_sq[0][1];\n gr2_max += gfc.loudness_sq[1][1];\n } else {\n max_pow += max_pow;\n gr2_max += gr2_max;\n }\n if (gfc.mode_gr == 2) {\n max_pow = Math.max(max_pow, gr2_max);\n }\n max_pow *= 0.5;\n /* max_pow approaches 1.0 for full band noise */\n\n /* jd - 2001 mar 31, jun 30 */\n /* user tuning of ATH adjustment region */\n max_pow *= gfc.ATH.aaSensitivityP;\n\n /*\n * adjust ATH depending on range of maximum value\n */\n\n /* jd - 2001 feb27, mar12,20, jun30, jul22 */\n /* continuous curves based on approximation */\n /* to GB's original values. */\n /* For an increase in approximate loudness, */\n /* set ATH adjust to adjust_limit immediately */\n /* after a delay of one frame. */\n /* For a loudness decrease, reduce ATH adjust */\n /* towards adjust_limit gradually. */\n /* max_pow is a loudness squared or a power. */\n if (max_pow > 0.03125) { /* ((1 - 0.000625)/ 31.98) from curve below */\n if (gfc.ATH.adjust >= 1.0) {\n gfc.ATH.adjust = 1.0;\n } else {\n /* preceding frame has lower ATH adjust; */\n /* ascend only to the preceding adjust_limit */\n /* in case there is leading low volume */\n if (gfc.ATH.adjust < gfc.ATH.adjustLimit) {\n gfc.ATH.adjust = gfc.ATH.adjustLimit;\n }\n }\n gfc.ATH.adjustLimit = 1.0;\n } else { /* adjustment curve */\n /* about 32 dB maximum adjust (0.000625) */\n var adj_lim_new = 31.98 * max_pow + 0.000625;\n if (gfc.ATH.adjust >= adj_lim_new) { /* descend gradually */\n gfc.ATH.adjust *= adj_lim_new * 0.075 + 0.925;\n if (gfc.ATH.adjust < adj_lim_new) { /* stop descent */\n gfc.ATH.adjust = adj_lim_new;\n }\n } else { /* ascend */\n if (gfc.ATH.adjustLimit >= adj_lim_new) {\n gfc.ATH.adjust = adj_lim_new;\n } else {\n /* preceding frame has lower ATH adjust; */\n /* ascend only to the preceding adjust_limit */\n if (gfc.ATH.adjust < gfc.ATH.adjustLimit) {\n gfc.ATH.adjust = gfc.ATH.adjustLimit;\n }\n }\n }\n gfc.ATH.adjustLimit = adj_lim_new;\n }\n }\n\n /**\n *
\n     *  some simple statistics\n     *\n     *  bitrate index 0: free bitrate . not allowed in VBR mode\n     *  : bitrates, kbps depending on MPEG version\n     *  bitrate index 15: forbidden\n     *\n     *  mode_ext:\n     *  0:  LR\n     *  1:  LR-i\n     *  2:  MS\n     *  3:  MS-i\n     * 
\n */\n function updateStats(gfc) {\n var gr, ch;\n assert(0 <= gfc.bitrate_index && gfc.bitrate_index < 16);\n assert(0 <= gfc.mode_ext && gfc.mode_ext < 4);\n\n /* count bitrate indices */\n gfc.bitrate_stereoMode_Hist[gfc.bitrate_index][4]++;\n gfc.bitrate_stereoMode_Hist[15][4]++;\n\n /* count 'em for every mode extension in case of 2 channel encoding */\n if (gfc.channels_out == 2) {\n gfc.bitrate_stereoMode_Hist[gfc.bitrate_index][gfc.mode_ext]++;\n gfc.bitrate_stereoMode_Hist[15][gfc.mode_ext]++;\n }\n for (gr = 0; gr < gfc.mode_gr; ++gr) {\n for (ch = 0; ch < gfc.channels_out; ++ch) {\n var bt = gfc.l3_side.tt[gr][ch].block_type | 0;\n if (gfc.l3_side.tt[gr][ch].mixed_block_flag != 0)\n bt = 4;\n gfc.bitrate_blockType_Hist[gfc.bitrate_index][bt]++;\n gfc.bitrate_blockType_Hist[gfc.bitrate_index][5]++;\n gfc.bitrate_blockType_Hist[15][bt]++;\n gfc.bitrate_blockType_Hist[15][5]++;\n }\n }\n }\n\n function lame_encode_frame_init(gfp, inbuf) {\n var gfc = gfp.internal_flags;\n\n var ch, gr;\n\n if (gfc.lame_encode_frame_init == 0) {\n /* prime the MDCT/polyphase filterbank with a short block */\n var i, j;\n var primebuff0 = new_float(286 + 1152 + 576);\n var primebuff1 = new_float(286 + 1152 + 576);\n gfc.lame_encode_frame_init = 1;\n for (i = 0, j = 0; i < 286 + 576 * (1 + gfc.mode_gr); ++i) {\n if (i < 576 * gfc.mode_gr) {\n primebuff0[i] = 0;\n if (gfc.channels_out == 2)\n primebuff1[i] = 0;\n } else {\n primebuff0[i] = inbuf[0][j];\n if (gfc.channels_out == 2)\n primebuff1[i] = inbuf[1][j];\n ++j;\n }\n }\n /* polyphase filtering / mdct */\n for (gr = 0; gr < gfc.mode_gr; gr++) {\n for (ch = 0; ch < gfc.channels_out; ch++) {\n gfc.l3_side.tt[gr][ch].block_type = Encoder.SHORT_TYPE;\n }\n }\n newMDCT.mdct_sub48(gfc, primebuff0, primebuff1);\n\n /* check FFT will not use a negative starting offset */\n assert(576 >= Encoder.FFTOFFSET);\n /* check if we have enough data for FFT */\n assert(gfc.mf_size >= (Encoder.BLKSIZE + gfp.framesize - Encoder.FFTOFFSET));\n /* check if we have enough data for polyphase filterbank */\n assert(gfc.mf_size >= (512 + gfp.framesize - 32));\n }\n\n }\n\n /**\n *
\n     * encodeframe()           Layer 3\n     *\n     * encode a single frame\n     *\n     *\n     *    lame_encode_frame()\n     *\n     *\n     *                           gr 0            gr 1\n     *    inbuf:           |--------------|--------------|--------------|\n     *\n     *\n     *    Polyphase (18 windows, each shifted 32)\n     *    gr 0:\n     *    window1          <----512---.\n     *    window18                 <----512---.\n     *\n     *    gr 1:\n     *    window1                         <----512---.\n     *    window18                                <----512---.\n     *\n     *\n     *\n     *    MDCT output:  |--------------|--------------|--------------|\n     *\n     *    FFT's                    <---------1024---------.\n     *                                             <---------1024-------.\n     *\n     *\n     *\n     *        inbuf = buffer of PCM data size=MP3 framesize\n     *        encoder acts on inbuf[ch][0], but output is delayed by MDCTDELAY\n     *        so the MDCT coefficints are from inbuf[ch][-MDCTDELAY]\n     *\n     *        psy-model FFT has a 1 granule delay, so we feed it data for the\n     *        next granule.\n     *        FFT is centered over granule:  224+576+224\n     *        So FFT starts at:   576-224-MDCTDELAY\n     *\n     *        MPEG2:  FFT ends at:  BLKSIZE+576-224-MDCTDELAY      (1328)\n     *        MPEG1:  FFT ends at:  BLKSIZE+2*576-224-MDCTDELAY    (1904)\n     *\n     *        MPEG2:  polyphase first window:  [0..511]\n     *                          18th window:   [544..1055]          (1056)\n     *        MPEG1:            36th window:   [1120..1631]         (1632)\n     *                data needed:  512+framesize-32\n     *\n     *        A close look newmdct.c shows that the polyphase filterbank\n     *        only uses data from [0..510] for each window.  Perhaps because the window\n     *        used by the filterbank is zero for the last point, so Takehiro's\n     *        code doesn't bother to compute with it.\n     *\n     *        FFT starts at 576-224-MDCTDELAY (304)  = 576-FFTOFFSET\n     *\n     * 
\n */\n\n\n this.lame_encode_mp3_frame = function (gfp, inbuf_l, inbuf_r, mp3buf, mp3bufPos, mp3buf_size) {\n var mp3count;\n var masking_LR = new_array_n([2, 2]);\n /*\n * LR masking &\n * energy\n */\n masking_LR[0][0] = new III_psy_ratio();\n masking_LR[0][1] = new III_psy_ratio();\n masking_LR[1][0] = new III_psy_ratio();\n masking_LR[1][1] = new III_psy_ratio();\n var masking_MS = new_array_n([2, 2]);\n /* MS masking & energy */\n masking_MS[0][0] = new III_psy_ratio();\n masking_MS[0][1] = new III_psy_ratio();\n masking_MS[1][0] = new III_psy_ratio();\n masking_MS[1][1] = new III_psy_ratio();\n //III_psy_ratio masking[][];\n var masking;\n /* pointer to selected maskings */\n var inbuf = [null, null];\n var gfc = gfp.internal_flags;\n\n var tot_ener = new_float_n([2, 4]);\n var ms_ener_ratio = [.5, .5];\n var pe = [[0., 0.], [0., 0.]];\n var pe_MS = [[0., 0.], [0., 0.]];\n\n//float[][] pe_use;\n var pe_use;\n\n var ch, gr;\n\n inbuf[0] = inbuf_l;\n inbuf[1] = inbuf_r;\n\n if (gfc.lame_encode_frame_init == 0) {\n /* first run? */\n lame_encode_frame_init(gfp, inbuf);\n\n }\n\n /********************** padding *****************************/\n /**\n *
\n         * padding method as described in\n         * \"MPEG-Layer3 / Bitstream Syntax and Decoding\"\n         * by Martin Sieler, Ralph Sperschneider\n         *\n         * note: there is no padding for the very first frame\n         *\n         * Robert Hegemann 2000-06-22\n         * 
\n */\n gfc.padding = 0;\n if ((gfc.slot_lag -= gfc.frac_SpF) < 0) {\n gfc.slot_lag += gfp.out_samplerate;\n gfc.padding = 1;\n }\n\n /****************************************\n * Stage 1: psychoacoustic model *\n ****************************************/\n\n if (gfc.psymodel != 0) {\n /*\n * psychoacoustic model psy model has a 1 granule (576) delay that\n * we must compensate for (mt 6/99).\n */\n var ret;\n var bufp = [null, null];\n /* address of beginning of left & right granule */\n var bufpPos = 0;\n /* address of beginning of left & right granule */\n var blocktype = new_int(2);\n\n for (gr = 0; gr < gfc.mode_gr; gr++) {\n\n for (ch = 0; ch < gfc.channels_out; ch++) {\n bufp[ch] = inbuf[ch];\n bufpPos = 576 + gr * 576 - Encoder.FFTOFFSET;\n }\n if (gfp.VBR == VbrMode.vbr_mtrh || gfp.VBR == VbrMode.vbr_mt) {\n ret = psy.L3psycho_anal_vbr(gfp, bufp, bufpPos, gr,\n masking_LR, masking_MS, pe[gr], pe_MS[gr],\n tot_ener[gr], blocktype);\n } else {\n ret = psy.L3psycho_anal_ns(gfp, bufp, bufpPos, gr,\n masking_LR, masking_MS, pe[gr], pe_MS[gr],\n tot_ener[gr], blocktype);\n }\n if (ret != 0)\n return -4;\n\n if (gfp.mode == MPEGMode.JOINT_STEREO) {\n ms_ener_ratio[gr] = tot_ener[gr][2] + tot_ener[gr][3];\n if (ms_ener_ratio[gr] > 0)\n ms_ener_ratio[gr] = tot_ener[gr][3] / ms_ener_ratio[gr];\n }\n\n /* block type flags */\n for (ch = 0; ch < gfc.channels_out; ch++) {\n var cod_info = gfc.l3_side.tt[gr][ch];\n cod_info.block_type = blocktype[ch];\n cod_info.mixed_block_flag = 0;\n }\n }\n } else {\n /* no psy model */\n for (gr = 0; gr < gfc.mode_gr; gr++)\n for (ch = 0; ch < gfc.channels_out; ch++) {\n gfc.l3_side.tt[gr][ch].block_type = Encoder.NORM_TYPE;\n gfc.l3_side.tt[gr][ch].mixed_block_flag = 0;\n pe_MS[gr][ch] = pe[gr][ch] = 700;\n }\n }\n\n /* auto-adjust of ATH, useful for low volume */\n adjust_ATH(gfc);\n\n /****************************************\n * Stage 2: MDCT *\n ****************************************/\n\n /* polyphase filtering / mdct */\n newMDCT.mdct_sub48(gfc, inbuf[0], inbuf[1]);\n\n /****************************************\n * Stage 3: MS/LR decision *\n ****************************************/\n\n /* Here will be selected MS or LR coding of the 2 stereo channels */\n gfc.mode_ext = Encoder.MPG_MD_LR_LR;\n\n if (gfp.force_ms) {\n gfc.mode_ext = Encoder.MPG_MD_MS_LR;\n } else if (gfp.mode == MPEGMode.JOINT_STEREO) {\n /*\n * ms_ratio = is scaled, for historical reasons, to look like a\n * ratio of side_channel / total. 0 = signal is 100% mono .5 = L & R\n * uncorrelated\n */\n\n /**\n *
\n             * [0] and [1] are the results for the two granules in MPEG-1,\n             * in MPEG-2 it's only a faked averaging of the same value\n             * _prev is the value of the last granule of the previous frame\n             * _next is the value of the first granule of the next frame\n             * 
\n */\n\n var sum_pe_MS = 0.;\n var sum_pe_LR = 0.;\n for (gr = 0; gr < gfc.mode_gr; gr++) {\n for (ch = 0; ch < gfc.channels_out; ch++) {\n sum_pe_MS += pe_MS[gr][ch];\n sum_pe_LR += pe[gr][ch];\n }\n }\n\n /* based on PE: M/S coding would not use much more bits than L/R */\n if (sum_pe_MS <= 1.00 * sum_pe_LR) {\n\n var gi0 = gfc.l3_side.tt[0];\n var gi1 = gfc.l3_side.tt[gfc.mode_gr - 1];\n\n if (gi0[0].block_type == gi0[1].block_type\n && gi1[0].block_type == gi1[1].block_type) {\n\n gfc.mode_ext = Encoder.MPG_MD_MS_LR;\n }\n }\n }\n\n /* bit and noise allocation */\n if (gfc.mode_ext == MPG_MD_MS_LR) {\n masking = masking_MS;\n /* use MS masking */\n pe_use = pe_MS;\n } else {\n masking = masking_LR;\n /* use LR masking */\n pe_use = pe;\n }\n\n /* copy data for MP3 frame analyzer */\n if (gfp.analysis && gfc.pinfo != null) {\n for (gr = 0; gr < gfc.mode_gr; gr++) {\n for (ch = 0; ch < gfc.channels_out; ch++) {\n gfc.pinfo.ms_ratio[gr] = gfc.ms_ratio[gr];\n gfc.pinfo.ms_ener_ratio[gr] = ms_ener_ratio[gr];\n gfc.pinfo.blocktype[gr][ch] = gfc.l3_side.tt[gr][ch].block_type;\n gfc.pinfo.pe[gr][ch] = pe_use[gr][ch];\n System.arraycopy(gfc.l3_side.tt[gr][ch].xr, 0,\n gfc.pinfo.xr[gr][ch], 0, 576);\n /*\n * in psymodel, LR and MS data was stored in pinfo. switch\n * to MS data:\n */\n if (gfc.mode_ext == MPG_MD_MS_LR) {\n gfc.pinfo.ers[gr][ch] = gfc.pinfo.ers[gr][ch + 2];\n System.arraycopy(gfc.pinfo.energy[gr][ch + 2], 0,\n gfc.pinfo.energy[gr][ch], 0,\n gfc.pinfo.energy[gr][ch].length);\n }\n }\n }\n }\n\n /****************************************\n * Stage 4: quantization loop *\n ****************************************/\n\n if (gfp.VBR == VbrMode.vbr_off || gfp.VBR == VbrMode.vbr_abr) {\n\n var i;\n var f;\n\n for (i = 0; i < 18; i++)\n gfc.nsPsy.pefirbuf[i] = gfc.nsPsy.pefirbuf[i + 1];\n\n f = 0.0;\n for (gr = 0; gr < gfc.mode_gr; gr++)\n for (ch = 0; ch < gfc.channels_out; ch++)\n f += pe_use[gr][ch];\n gfc.nsPsy.pefirbuf[18] = f;\n\n f = gfc.nsPsy.pefirbuf[9];\n for (i = 0; i < 9; i++)\n f += (gfc.nsPsy.pefirbuf[i] + gfc.nsPsy.pefirbuf[18 - i])\n * Encoder.fircoef[i];\n\n f = (670 * 5 * gfc.mode_gr * gfc.channels_out) / f;\n for (gr = 0; gr < gfc.mode_gr; gr++) {\n for (ch = 0; ch < gfc.channels_out; ch++) {\n pe_use[gr][ch] *= f;\n }\n }\n }\n gfc.iteration_loop.iteration_loop(gfp, pe_use, ms_ener_ratio, masking);\n\n /****************************************\n * Stage 5: bitstream formatting *\n ****************************************/\n\n /* write the frame to the bitstream */\n bs.format_bitstream(gfp);\n\n /* copy mp3 bit buffer into array */\n mp3count = bs.copy_buffer(gfc, mp3buf, mp3bufPos, mp3buf_size, 1);\n\n if (gfp.bWriteVbrTag)\n vbr.addVbrFrame(gfp);\n\n if (gfp.analysis && gfc.pinfo != null) {\n for (ch = 0; ch < gfc.channels_out; ch++) {\n var j;\n for (j = 0; j < FFTOFFSET; j++)\n gfc.pinfo.pcmdata[ch][j] = gfc.pinfo.pcmdata[ch][j\n + gfp.framesize];\n for (j = FFTOFFSET; j < 1600; j++) {\n gfc.pinfo.pcmdata[ch][j] = inbuf[ch][j - FFTOFFSET];\n }\n }\n qupvt.set_frame_pinfo(gfp, masking);\n }\n\n updateStats(gfc);\n\n return mp3count;\n }\n}\n\n\nmodule.exports = Encoder;\n","var common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nvar Encoder = require('./Encoder.js');\n\nfunction FFT() {\n\n var window = new_float(Encoder.BLKSIZE);\n var window_s = new_float(Encoder.BLKSIZE_s / 2);\n\n var costab = [\n 9.238795325112867e-01, 3.826834323650898e-01,\n 9.951847266721969e-01, 9.801714032956060e-02,\n 9.996988186962042e-01, 2.454122852291229e-02,\n 9.999811752826011e-01, 6.135884649154475e-03\n ];\n\n function fht(fz, fzPos, n) {\n var tri = 0;\n var k4;\n var fi;\n var gi;\n\n n <<= 1;\n /* to get BLKSIZE, because of 3DNow! ASM routine */\n var fn = fzPos + n;\n k4 = 4;\n do {\n var s1, c1;\n var i, k1, k2, k3, kx;\n kx = k4 >> 1;\n k1 = k4;\n k2 = k4 << 1;\n k3 = k2 + k1;\n k4 = k2 << 1;\n fi = fzPos;\n gi = fi + kx;\n do {\n var f0, f1, f2, f3;\n f1 = fz[fi + 0] - fz[fi + k1];\n f0 = fz[fi + 0] + fz[fi + k1];\n f3 = fz[fi + k2] - fz[fi + k3];\n f2 = fz[fi + k2] + fz[fi + k3];\n fz[fi + k2] = f0 - f2;\n fz[fi + 0] = f0 + f2;\n fz[fi + k3] = f1 - f3;\n fz[fi + k1] = f1 + f3;\n f1 = fz[gi + 0] - fz[gi + k1];\n f0 = fz[gi + 0] + fz[gi + k1];\n f3 = (Util.SQRT2 * fz[gi + k3]);\n f2 = (Util.SQRT2 * fz[gi + k2]);\n fz[gi + k2] = f0 - f2;\n fz[gi + 0] = f0 + f2;\n fz[gi + k3] = f1 - f3;\n fz[gi + k1] = f1 + f3;\n gi += k4;\n fi += k4;\n } while (fi < fn);\n c1 = costab[tri + 0];\n s1 = costab[tri + 1];\n for (i = 1; i < kx; i++) {\n var c2, s2;\n c2 = 1 - (2 * s1) * s1;\n s2 = (2 * s1) * c1;\n fi = fzPos + i;\n gi = fzPos + k1 - i;\n do {\n var a, b, g0, f0, f1, g1, f2, g2, f3, g3;\n b = s2 * fz[fi + k1] - c2 * fz[gi + k1];\n a = c2 * fz[fi + k1] + s2 * fz[gi + k1];\n f1 = fz[fi + 0] - a;\n f0 = fz[fi + 0] + a;\n g1 = fz[gi + 0] - b;\n g0 = fz[gi + 0] + b;\n b = s2 * fz[fi + k3] - c2 * fz[gi + k3];\n a = c2 * fz[fi + k3] + s2 * fz[gi + k3];\n f3 = fz[fi + k2] - a;\n f2 = fz[fi + k2] + a;\n g3 = fz[gi + k2] - b;\n g2 = fz[gi + k2] + b;\n b = s1 * f2 - c1 * g3;\n a = c1 * f2 + s1 * g3;\n fz[fi + k2] = f0 - a;\n fz[fi + 0] = f0 + a;\n fz[gi + k3] = g1 - b;\n fz[gi + k1] = g1 + b;\n b = c1 * g2 - s1 * f3;\n a = s1 * g2 + c1 * f3;\n fz[gi + k2] = g0 - a;\n fz[gi + 0] = g0 + a;\n fz[fi + k3] = f1 - b;\n fz[fi + k1] = f1 + b;\n gi += k4;\n fi += k4;\n } while (fi < fn);\n c2 = c1;\n c1 = c2 * costab[tri + 0] - s1 * costab[tri + 1];\n s1 = c2 * costab[tri + 1] + s1 * costab[tri + 0];\n }\n tri += 2;\n } while (k4 < n);\n }\n\n var rv_tbl = [0x00, 0x80, 0x40,\n 0xc0, 0x20, 0xa0, 0x60, 0xe0, 0x10,\n 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70,\n 0xf0, 0x08, 0x88, 0x48, 0xc8, 0x28,\n 0xa8, 0x68, 0xe8, 0x18, 0x98, 0x58,\n 0xd8, 0x38, 0xb8, 0x78, 0xf8, 0x04,\n 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64,\n 0xe4, 0x14, 0x94, 0x54, 0xd4, 0x34,\n 0xb4, 0x74, 0xf4, 0x0c, 0x8c, 0x4c,\n 0xcc, 0x2c, 0xac, 0x6c, 0xec, 0x1c,\n 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c,\n 0xfc, 0x02, 0x82, 0x42, 0xc2, 0x22,\n 0xa2, 0x62, 0xe2, 0x12, 0x92, 0x52,\n 0xd2, 0x32, 0xb2, 0x72, 0xf2, 0x0a,\n 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a,\n 0xea, 0x1a, 0x9a, 0x5a, 0xda, 0x3a,\n 0xba, 0x7a, 0xfa, 0x06, 0x86, 0x46,\n 0xc6, 0x26, 0xa6, 0x66, 0xe6, 0x16,\n 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76,\n 0xf6, 0x0e, 0x8e, 0x4e, 0xce, 0x2e,\n 0xae, 0x6e, 0xee, 0x1e, 0x9e, 0x5e,\n 0xde, 0x3e, 0xbe, 0x7e, 0xfe];\n\n this.fft_short = function (gfc, x_real, chn, buffer, bufPos) {\n for (var b = 0; b < 3; b++) {\n var x = Encoder.BLKSIZE_s / 2;\n var k = 0xffff & ((576 / 3) * (b + 1));\n var j = Encoder.BLKSIZE_s / 8 - 1;\n do {\n var f0, f1, f2, f3, w;\n var i = rv_tbl[j << 2] & 0xff;\n\n f0 = window_s[i] * buffer[chn][bufPos + i + k];\n w = window_s[0x7f - i] * buffer[chn][bufPos + i + k + 0x80];\n f1 = f0 - w;\n f0 = f0 + w;\n f2 = window_s[i + 0x40] * buffer[chn][bufPos + i + k + 0x40];\n w = window_s[0x3f - i] * buffer[chn][bufPos + i + k + 0xc0];\n f3 = f2 - w;\n f2 = f2 + w;\n\n x -= 4;\n x_real[b][x + 0] = f0 + f2;\n x_real[b][x + 2] = f0 - f2;\n x_real[b][x + 1] = f1 + f3;\n x_real[b][x + 3] = f1 - f3;\n\n f0 = window_s[i + 0x01] * buffer[chn][bufPos + i + k + 0x01];\n w = window_s[0x7e - i] * buffer[chn][bufPos + i + k + 0x81];\n f1 = f0 - w;\n f0 = f0 + w;\n f2 = window_s[i + 0x41] * buffer[chn][bufPos + i + k + 0x41];\n w = window_s[0x3e - i] * buffer[chn][bufPos + i + k + 0xc1];\n f3 = f2 - w;\n f2 = f2 + w;\n\n x_real[b][x + Encoder.BLKSIZE_s / 2 + 0] = f0 + f2;\n x_real[b][x + Encoder.BLKSIZE_s / 2 + 2] = f0 - f2;\n x_real[b][x + Encoder.BLKSIZE_s / 2 + 1] = f1 + f3;\n x_real[b][x + Encoder.BLKSIZE_s / 2 + 3] = f1 - f3;\n } while (--j >= 0);\n\n fht(x_real[b], x, Encoder.BLKSIZE_s / 2);\n /* BLKSIZE_s/2 because of 3DNow! ASM routine */\n /* BLKSIZE/2 because of 3DNow! ASM routine */\n }\n }\n\n this.fft_long = function (gfc, y, chn, buffer, bufPos) {\n var jj = Encoder.BLKSIZE / 8 - 1;\n var x = Encoder.BLKSIZE / 2;\n\n do {\n var f0, f1, f2, f3, w;\n var i = rv_tbl[jj] & 0xff;\n f0 = window[i] * buffer[chn][bufPos + i];\n w = window[i + 0x200] * buffer[chn][bufPos + i + 0x200];\n f1 = f0 - w;\n f0 = f0 + w;\n f2 = window[i + 0x100] * buffer[chn][bufPos + i + 0x100];\n w = window[i + 0x300] * buffer[chn][bufPos + i + 0x300];\n f3 = f2 - w;\n f2 = f2 + w;\n\n x -= 4;\n y[x + 0] = f0 + f2;\n y[x + 2] = f0 - f2;\n y[x + 1] = f1 + f3;\n y[x + 3] = f1 - f3;\n\n f0 = window[i + 0x001] * buffer[chn][bufPos + i + 0x001];\n w = window[i + 0x201] * buffer[chn][bufPos + i + 0x201];\n f1 = f0 - w;\n f0 = f0 + w;\n f2 = window[i + 0x101] * buffer[chn][bufPos + i + 0x101];\n w = window[i + 0x301] * buffer[chn][bufPos + i + 0x301];\n f3 = f2 - w;\n f2 = f2 + w;\n\n y[x + Encoder.BLKSIZE / 2 + 0] = f0 + f2;\n y[x + Encoder.BLKSIZE / 2 + 2] = f0 - f2;\n y[x + Encoder.BLKSIZE / 2 + 1] = f1 + f3;\n y[x + Encoder.BLKSIZE / 2 + 3] = f1 - f3;\n } while (--jj >= 0);\n\n fht(y, x, Encoder.BLKSIZE / 2);\n /* BLKSIZE/2 because of 3DNow! ASM routine */\n }\n\n this.init_fft = function (gfc) {\n /* The type of window used here will make no real difference, but */\n /*\n * in the interest of merging nspsytune stuff - switch to blackman\n * window\n */\n for (var i = 0; i < Encoder.BLKSIZE; i++)\n /* blackman window */\n window[i] = (0.42 - 0.5 * Math.cos(2 * Math.PI * (i + .5)\n / Encoder.BLKSIZE) + 0.08 * Math.cos(4 * Math.PI * (i + .5)\n / Encoder.BLKSIZE));\n\n for (var i = 0; i < Encoder.BLKSIZE_s / 2; i++)\n window_s[i] = (0.5 * (1.0 - Math.cos(2.0 * Math.PI\n * (i + 0.5) / Encoder.BLKSIZE_s)));\n\n }\n\n}\n\nmodule.exports = FFT;\n","/*\n * psymodel.c\n *\n * Copyright (c) 1999-2000 Mark Taylor\n * Copyright (c) 2001-2002 Naoki Shibata\n * Copyright (c) 2000-2003 Takehiro Tominaga\n * Copyright (c) 2000-2008 Robert Hegemann\n * Copyright (c) 2000-2005 Gabriel Bouvigne\n * Copyright (c) 2000-2005 Alexander Leidinger\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n * Library General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the\n * Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n * Boston, MA 02111-1307, USA.\n */\n\n/* $Id: PsyModel.java,v 1.27 2011/05/24 20:48:06 kenchis Exp $ */\n\n\n/*\n PSYCHO ACOUSTICS\n\n\n This routine computes the psycho acoustics, delayed by one granule.\n\n Input: buffer of PCM data (1024 samples).\n\n This window should be centered over the 576 sample granule window.\n The routine will compute the psycho acoustics for\n this granule, but return the psycho acoustics computed\n for the *previous* granule. This is because the block\n type of the previous granule can only be determined\n after we have computed the psycho acoustics for the following\n granule.\n\n Output: maskings and energies for each scalefactor band.\n block type, PE, and some correlation measures.\n The PE is used by CBR modes to determine if extra bits\n from the bit reservoir should be used. The correlation\n measures are used to determine mid/side or regular stereo.\n */\n/*\n Notation:\n\n barks: a non-linear frequency scale. Mapping from frequency to\n barks is given by freq2bark()\n\n scalefactor bands: The spectrum (frequencies) are broken into\n SBMAX \"scalefactor bands\". Thes bands\n are determined by the MPEG ISO spec. In\n the noise shaping/quantization code, we allocate\n bits among the partition bands to achieve the\n best possible quality\n\n partition bands: The spectrum is also broken into about\n 64 \"partition bands\". Each partition\n band is about .34 barks wide. There are about 2-5\n partition bands for each scalefactor band.\n\n LAME computes all psycho acoustic information for each partition\n band. Then at the end of the computations, this information\n is mapped to scalefactor bands. The energy in each scalefactor\n band is taken as the sum of the energy in all partition bands\n which overlap the scalefactor band. The maskings can be computed\n in the same way (and thus represent the average masking in that band)\n or by taking the minmum value multiplied by the number of\n partition bands used (which represents a minimum masking in that band).\n */\n/*\n The general outline is as follows:\n\n 1. compute the energy in each partition band\n 2. compute the tonality in each partition band\n 3. compute the strength of each partion band \"masker\"\n 4. compute the masking (via the spreading function applied to each masker)\n 5. Modifications for mid/side masking.\n\n Each partition band is considiered a \"masker\". The strength\n of the i'th masker in band j is given by:\n\n s3(bark(i)-bark(j))*strength(i)\n\n The strength of the masker is a function of the energy and tonality.\n The more tonal, the less masking. LAME uses a simple linear formula\n (controlled by NMT and TMN) which says the strength is given by the\n energy divided by a linear function of the tonality.\n */\n/*\n s3() is the \"spreading function\". It is given by a formula\n determined via listening tests.\n\n The total masking in the j'th partition band is the sum over\n all maskings i. It is thus given by the convolution of\n the strength with s3(), the \"spreading function.\"\n\n masking(j) = sum_over_i s3(i-j)*strength(i) = s3 o strength\n\n where \"o\" = convolution operator. s3 is given by a formula determined\n via listening tests. It is normalized so that s3 o 1 = 1.\n\n Note: instead of a simple convolution, LAME also has the\n option of using \"additive masking\"\n\n The most critical part is step 2, computing the tonality of each\n partition band. LAME has two tonality estimators. The first\n is based on the ISO spec, and measures how predictiable the\n signal is over time. The more predictable, the more tonal.\n The second measure is based on looking at the spectrum of\n a single granule. The more peaky the spectrum, the more\n tonal. By most indications, the latter approach is better.\n\n Finally, in step 5, the maskings for the mid and side\n channel are possibly increased. Under certain circumstances,\n noise in the mid & side channels is assumed to also\n be masked by strong maskers in the L or R channels.\n\n\n Other data computed by the psy-model:\n\n ms_ratio side-channel / mid-channel masking ratio (for previous granule)\n ms_ratio_next side-channel / mid-channel masking ratio for this granule\n\n percep_entropy[2] L and R values (prev granule) of PE - A measure of how\n much pre-echo is in the previous granule\n percep_entropy_MS[2] mid and side channel values (prev granule) of percep_entropy\n energy[4] L,R,M,S energy in each channel, prev granule\n blocktype_d[2] block type to use for previous granule\n */\n//package mp3;\n\n//import java.util.Arrays;\nvar common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nvar FFT = require(\"./FFT.js\");\nvar Encoder = require(\"./Encoder.js\");\n\nfunction PsyModel() {\n\n var fft = new FFT();\n\n var LOG10 = 2.30258509299404568402;\n\n var rpelev = 2;\n var rpelev2 = 16;\n var rpelev_s = 2;\n var rpelev2_s = 16;\n\n /* size of each partition band, in barks: */\n var DELBARK = .34;\n\n /* tuned for output level (sensitive to energy scale) */\n var VO_SCALE = (1. / (14752 * 14752) / (Encoder.BLKSIZE / 2));\n\n var temporalmask_sustain_sec = 0.01;\n\n var NS_PREECHO_ATT0 = 0.8;\n var NS_PREECHO_ATT1 = 0.6;\n var NS_PREECHO_ATT2 = 0.3;\n\n var NS_MSFIX = 3.5;\n\n var NSATTACKTHRE = 4.4;\n var NSATTACKTHRE_S = 25;\n\n var NSFIRLEN = 21;\n\n /* size of each partition band, in barks: */\n var LN_TO_LOG10 = 0.2302585093;\n\n function NON_LINEAR_SCALE_ENERGY(x) {\n return x;\n }\n\n /**\n *
\n     *       L3psycho_anal.  Compute psycho acoustics.\n     *\n     *       Data returned to the calling program must be delayed by one\n     *       granule.\n     *\n     *       This is done in two places.\n     *       If we do not need to know the blocktype, the copying\n     *       can be done here at the top of the program: we copy the data for\n     *       the last granule (computed during the last call) before it is\n     *       overwritten with the new data.  It looks like this:\n     *\n     *       0. static psymodel_data\n     *       1. calling_program_data = psymodel_data\n     *       2. compute psymodel_data\n     *\n     *       For data which needs to know the blocktype, the copying must be\n     *       done at the end of this loop, and the old values must be saved:\n     *\n     *       0. static psymodel_data_old\n     *       1. compute psymodel_data\n     *       2. compute possible block type of this granule\n     *       3. compute final block type of previous granule based on #2.\n     *       4. calling_program_data = psymodel_data_old\n     *       5. psymodel_data_old = psymodel_data\n     *     psycho_loudness_approx\n     *       jd - 2001 mar 12\n     *    in:  energy   - BLKSIZE/2 elements of frequency magnitudes ^ 2\n     *         gfp      - uses out_samplerate, ATHtype (also needed for ATHformula)\n     *    returns: loudness^2 approximation, a positive value roughly tuned for a value\n     *             of 1.0 for signals near clipping.\n     *    notes:   When calibrated, feeding this function binary white noise at sample\n     *             values +32767 or -32768 should return values that approach 3.\n     *             ATHformula is used to approximate an equal loudness curve.\n     *    future:  Data indicates that the shape of the equal loudness curve varies\n     *             with intensity.  This function might be improved by using an equal\n     *             loudness curve shaped for typical playback levels (instead of the\n     *             ATH, that is shaped for the threshold).  A flexible realization might\n     *             simply bend the existing ATH curve to achieve the desired shape.\n     *             However, the potential gain may not be enough to justify an effort.\n     * 
\n */\n function psycho_loudness_approx(energy, gfc) {\n var loudness_power = 0.0;\n /* apply weights to power in freq. bands */\n for (var i = 0; i < Encoder.BLKSIZE / 2; ++i)\n loudness_power += energy[i] * gfc.ATH.eql_w[i];\n loudness_power *= VO_SCALE;\n\n return loudness_power;\n }\n\n function compute_ffts(gfp, fftenergy, fftenergy_s, wsamp_l, wsamp_lPos, wsamp_s, wsamp_sPos, gr_out, chn, buffer, bufPos) {\n var gfc = gfp.internal_flags;\n if (chn < 2) {\n fft.fft_long(gfc, wsamp_l[wsamp_lPos], chn, buffer, bufPos);\n fft.fft_short(gfc, wsamp_s[wsamp_sPos], chn, buffer, bufPos);\n }\n /* FFT data for mid and side channel is derived from L & R */\n else if (chn == 2) {\n for (var j = Encoder.BLKSIZE - 1; j >= 0; --j) {\n var l = wsamp_l[wsamp_lPos + 0][j];\n var r = wsamp_l[wsamp_lPos + 1][j];\n wsamp_l[wsamp_lPos + 0][j] = (l + r) * Util.SQRT2 * 0.5;\n wsamp_l[wsamp_lPos + 1][j] = (l - r) * Util.SQRT2 * 0.5;\n }\n for (var b = 2; b >= 0; --b) {\n for (var j = Encoder.BLKSIZE_s - 1; j >= 0; --j) {\n var l = wsamp_s[wsamp_sPos + 0][b][j];\n var r = wsamp_s[wsamp_sPos + 1][b][j];\n wsamp_s[wsamp_sPos + 0][b][j] = (l + r) * Util.SQRT2 * 0.5;\n wsamp_s[wsamp_sPos + 1][b][j] = (l - r) * Util.SQRT2 * 0.5;\n }\n }\n }\n\n /*********************************************************************\n * compute energies\n *********************************************************************/\n fftenergy[0] = NON_LINEAR_SCALE_ENERGY(wsamp_l[wsamp_lPos + 0][0]);\n fftenergy[0] *= fftenergy[0];\n\n for (var j = Encoder.BLKSIZE / 2 - 1; j >= 0; --j) {\n var re = (wsamp_l[wsamp_lPos + 0])[Encoder.BLKSIZE / 2 - j];\n var im = (wsamp_l[wsamp_lPos + 0])[Encoder.BLKSIZE / 2 + j];\n fftenergy[Encoder.BLKSIZE / 2 - j] = NON_LINEAR_SCALE_ENERGY((re\n * re + im * im) * 0.5);\n }\n for (var b = 2; b >= 0; --b) {\n fftenergy_s[b][0] = (wsamp_s[wsamp_sPos + 0])[b][0];\n fftenergy_s[b][0] *= fftenergy_s[b][0];\n for (var j = Encoder.BLKSIZE_s / 2 - 1; j >= 0; --j) {\n var re = (wsamp_s[wsamp_sPos + 0])[b][Encoder.BLKSIZE_s\n / 2 - j];\n var im = (wsamp_s[wsamp_sPos + 0])[b][Encoder.BLKSIZE_s\n / 2 + j];\n fftenergy_s[b][Encoder.BLKSIZE_s / 2 - j] = NON_LINEAR_SCALE_ENERGY((re\n * re + im * im) * 0.5);\n }\n }\n /* total energy */\n {\n var totalenergy = 0.0;\n for (var j = 11; j < Encoder.HBLKSIZE; j++)\n totalenergy += fftenergy[j];\n\n gfc.tot_ener[chn] = totalenergy;\n }\n\n if (gfp.analysis) {\n for (var j = 0; j < Encoder.HBLKSIZE; j++) {\n gfc.pinfo.energy[gr_out][chn][j] = gfc.pinfo.energy_save[chn][j];\n gfc.pinfo.energy_save[chn][j] = fftenergy[j];\n }\n gfc.pinfo.pe[gr_out][chn] = gfc.pe[chn];\n }\n\n /*********************************************************************\n * compute loudness approximation (used for ATH auto-level adjustment)\n *********************************************************************/\n if (gfp.athaa_loudapprox == 2 && chn < 2) {\n // no loudness for mid/side ch\n gfc.loudness_sq[gr_out][chn] = gfc.loudness_sq_save[chn];\n gfc.loudness_sq_save[chn] = psycho_loudness_approx(fftenergy, gfc);\n }\n }\n\n /* mask_add optimization */\n /* init the limit values used to avoid computing log in mask_add when it is not necessary */\n\n /**\n *
\n     *  For example, with i = 10*log10(m2/m1)/10*16         (= log10(m2/m1)*16)\n     *\n     * abs(i)>8 is equivalent (as i is an integer) to\n     * abs(i)>=9\n     * i>=9 || i<=-9\n     * equivalent to (as i is the biggest integer smaller than log10(m2/m1)*16\n     * or the smallest integer bigger than log10(m2/m1)*16 depending on the sign of log10(m2/m1)*16)\n     * log10(m2/m1)>=9/16 || log10(m2/m1)<=-9/16\n     * exp10 is strictly increasing thus this is equivalent to\n     * m2/m1 >= 10^(9/16) || m2/m1<=10^(-9/16) which are comparisons to constants\n     * 
\n */\n\n /**\n * as in if(i>8)\n */\n var I1LIMIT = 8;\n /**\n * as in if(i>24) . changed 23\n */\n var I2LIMIT = 23;\n /**\n * as in if(m<15)\n */\n var MLIMIT = 15;\n\n var ma_max_i1;\n var ma_max_i2;\n var ma_max_m;\n\n /**\n * This is the masking table:
\n * According to tonality, values are going from 0dB (TMN) to 9.3dB (NMT).
\n * After additive masking computation, 8dB are added, so final values are\n * going from 8dB to 17.3dB\n *\n * pow(10, -0.0..-0.6)\n */\n var tab = [1.0, 0.79433, 0.63096, 0.63096,\n 0.63096, 0.63096, 0.63096, 0.25119, 0.11749];\n\n function init_mask_add_max_values() {\n ma_max_i1 = Math.pow(10, (I1LIMIT + 1) / 16.0);\n ma_max_i2 = Math.pow(10, (I2LIMIT + 1) / 16.0);\n ma_max_m = Math.pow(10, (MLIMIT) / 10.0);\n }\n\n var table1 = [3.3246 * 3.3246,\n 3.23837 * 3.23837, 3.15437 * 3.15437, 3.00412 * 3.00412,\n 2.86103 * 2.86103, 2.65407 * 2.65407, 2.46209 * 2.46209,\n 2.284 * 2.284, 2.11879 * 2.11879, 1.96552 * 1.96552,\n 1.82335 * 1.82335, 1.69146 * 1.69146, 1.56911 * 1.56911,\n 1.46658 * 1.46658, 1.37074 * 1.37074, 1.31036 * 1.31036,\n 1.25264 * 1.25264, 1.20648 * 1.20648, 1.16203 * 1.16203,\n 1.12765 * 1.12765, 1.09428 * 1.09428, 1.0659 * 1.0659,\n 1.03826 * 1.03826, 1.01895 * 1.01895, 1];\n\n var table2 = [1.33352 * 1.33352,\n 1.35879 * 1.35879, 1.38454 * 1.38454, 1.39497 * 1.39497,\n 1.40548 * 1.40548, 1.3537 * 1.3537, 1.30382 * 1.30382,\n 1.22321 * 1.22321, 1.14758 * 1.14758, 1];\n\n var table3 = [2.35364 * 2.35364,\n 2.29259 * 2.29259, 2.23313 * 2.23313, 2.12675 * 2.12675,\n 2.02545 * 2.02545, 1.87894 * 1.87894, 1.74303 * 1.74303,\n 1.61695 * 1.61695, 1.49999 * 1.49999, 1.39148 * 1.39148,\n 1.29083 * 1.29083, 1.19746 * 1.19746, 1.11084 * 1.11084,\n 1.03826 * 1.03826];\n\n /**\n * addition of simultaneous masking Naoki Shibata 2000/7\n */\n function mask_add(m1, m2, kk, b, gfc, shortblock) {\n var ratio;\n\n if (m2 > m1) {\n if (m2 < (m1 * ma_max_i2))\n ratio = m2 / m1;\n else\n return (m1 + m2);\n } else {\n if (m1 >= (m2 * ma_max_i2))\n return (m1 + m2);\n ratio = m1 / m2;\n }\n\n /* Should always be true, just checking */\n assert(m1 >= 0);\n assert(m2 >= 0);\n\n m1 += m2;\n //if (((long)(b + 3) & 0xffffffff) <= 3 + 3) {\n if ((b + 3) <= 3 + 3) {\n /* approximately, 1 bark = 3 partitions */\n /* 65% of the cases */\n /* originally 'if(i > 8)' */\n if (ratio >= ma_max_i1) {\n /* 43% of the total */\n return m1;\n }\n\n /* 22% of the total */\n var i = 0 | (Util.FAST_LOG10_X(ratio, 16.0));\n return m1 * table2[i];\n }\n\n /**\n *
\n         * m<15 equ log10((m1+m2)/gfc.ATH.cb[k])<1.5\n         * equ (m1+m2)/gfc.ATH.cb[k]<10^1.5\n         * equ (m1+m2)<10^1.5 * gfc.ATH.cb[k]\n         * 
\n */\n var i = 0 | Util.FAST_LOG10_X(ratio, 16.0);\n if (shortblock != 0) {\n m2 = gfc.ATH.cb_s[kk] * gfc.ATH.adjust;\n } else {\n m2 = gfc.ATH.cb_l[kk] * gfc.ATH.adjust;\n }\n assert(m2 >= 0);\n if (m1 < ma_max_m * m2) {\n /* 3% of the total */\n /* Originally if (m > 0) { */\n if (m1 > m2) {\n var f, r;\n\n f = 1.0;\n if (i <= 13)\n f = table3[i];\n\n r = Util.FAST_LOG10_X(m1 / m2, 10.0 / 15.0);\n return m1 * ((table1[i] - f) * r + f);\n }\n\n if (i > 13)\n return m1;\n\n return m1 * table3[i];\n }\n\n /* 10% of total */\n return m1 * table1[i];\n }\n\n var table2_ = [1.33352 * 1.33352,\n 1.35879 * 1.35879, 1.38454 * 1.38454, 1.39497 * 1.39497,\n 1.40548 * 1.40548, 1.3537 * 1.3537, 1.30382 * 1.30382,\n 1.22321 * 1.22321, 1.14758 * 1.14758, 1];\n\n /**\n * addition of simultaneous masking Naoki Shibata 2000/7\n */\n function vbrpsy_mask_add(m1, m2, b) {\n var ratio;\n\n if (m1 < 0) {\n m1 = 0;\n }\n if (m2 < 0) {\n m2 = 0;\n }\n if (m1 <= 0) {\n return m2;\n }\n if (m2 <= 0) {\n return m1;\n }\n if (m2 > m1) {\n ratio = m2 / m1;\n } else {\n ratio = m1 / m2;\n }\n if (-2 <= b && b <= 2) {\n /* approximately, 1 bark = 3 partitions */\n /* originally 'if(i > 8)' */\n if (ratio >= ma_max_i1) {\n return m1 + m2;\n } else {\n var i = 0 | (Util.FAST_LOG10_X(ratio, 16.0));\n return (m1 + m2) * table2_[i];\n }\n }\n if (ratio < ma_max_i2) {\n return m1 + m2;\n }\n if (m1 < m2) {\n m1 = m2;\n }\n return m1;\n }\n\n /**\n * compute interchannel masking effects\n */\n function calc_interchannel_masking(gfp, ratio) {\n var gfc = gfp.internal_flags;\n if (gfc.channels_out > 1) {\n for (var sb = 0; sb < Encoder.SBMAX_l; sb++) {\n var l = gfc.thm[0].l[sb];\n var r = gfc.thm[1].l[sb];\n gfc.thm[0].l[sb] += r * ratio;\n gfc.thm[1].l[sb] += l * ratio;\n }\n for (var sb = 0; sb < Encoder.SBMAX_s; sb++) {\n for (var sblock = 0; sblock < 3; sblock++) {\n var l = gfc.thm[0].s[sb][sblock];\n var r = gfc.thm[1].s[sb][sblock];\n gfc.thm[0].s[sb][sblock] += r * ratio;\n gfc.thm[1].s[sb][sblock] += l * ratio;\n }\n }\n }\n }\n\n /**\n * compute M/S thresholds from Johnston & Ferreira 1992 ICASSP paper\n */\n function msfix1(gfc) {\n for (var sb = 0; sb < Encoder.SBMAX_l; sb++) {\n /* use this fix if L & R masking differs by 2db or less */\n /* if db = 10*log10(x2/x1) < 2 */\n /* if (x2 < 1.58*x1) { */\n if (gfc.thm[0].l[sb] > 1.58 * gfc.thm[1].l[sb]\n || gfc.thm[1].l[sb] > 1.58 * gfc.thm[0].l[sb])\n continue;\n var mld = gfc.mld_l[sb] * gfc.en[3].l[sb];\n var rmid = Math.max(gfc.thm[2].l[sb],\n Math.min(gfc.thm[3].l[sb], mld));\n\n mld = gfc.mld_l[sb] * gfc.en[2].l[sb];\n var rside = Math.max(gfc.thm[3].l[sb],\n Math.min(gfc.thm[2].l[sb], mld));\n gfc.thm[2].l[sb] = rmid;\n gfc.thm[3].l[sb] = rside;\n }\n\n for (var sb = 0; sb < Encoder.SBMAX_s; sb++) {\n for (var sblock = 0; sblock < 3; sblock++) {\n if (gfc.thm[0].s[sb][sblock] > 1.58 * gfc.thm[1].s[sb][sblock]\n || gfc.thm[1].s[sb][sblock] > 1.58 * gfc.thm[0].s[sb][sblock])\n continue;\n var mld = gfc.mld_s[sb] * gfc.en[3].s[sb][sblock];\n var rmid = Math.max(gfc.thm[2].s[sb][sblock],\n Math.min(gfc.thm[3].s[sb][sblock], mld));\n\n mld = gfc.mld_s[sb] * gfc.en[2].s[sb][sblock];\n var rside = Math.max(gfc.thm[3].s[sb][sblock],\n Math.min(gfc.thm[2].s[sb][sblock], mld));\n\n gfc.thm[2].s[sb][sblock] = rmid;\n gfc.thm[3].s[sb][sblock] = rside;\n }\n }\n }\n\n /**\n * Adjust M/S maskings if user set \"msfix\"\n *\n * Naoki Shibata 2000\n */\n function ns_msfix(gfc, msfix, athadjust) {\n var msfix2 = msfix;\n var athlower = Math.pow(10, athadjust);\n\n msfix *= 2.0;\n msfix2 *= 2.0;\n for (var sb = 0; sb < Encoder.SBMAX_l; sb++) {\n var thmLR, thmM, thmS, ath;\n ath = (gfc.ATH.cb_l[gfc.bm_l[sb]]) * athlower;\n thmLR = Math.min(Math.max(gfc.thm[0].l[sb], ath),\n Math.max(gfc.thm[1].l[sb], ath));\n thmM = Math.max(gfc.thm[2].l[sb], ath);\n thmS = Math.max(gfc.thm[3].l[sb], ath);\n if (thmLR * msfix < thmM + thmS) {\n var f = thmLR * msfix2 / (thmM + thmS);\n thmM *= f;\n thmS *= f;\n assert(thmM + thmS > 0);\n }\n gfc.thm[2].l[sb] = Math.min(thmM, gfc.thm[2].l[sb]);\n gfc.thm[3].l[sb] = Math.min(thmS, gfc.thm[3].l[sb]);\n }\n\n athlower *= ( Encoder.BLKSIZE_s / Encoder.BLKSIZE);\n for (var sb = 0; sb < Encoder.SBMAX_s; sb++) {\n for (var sblock = 0; sblock < 3; sblock++) {\n var thmLR, thmM, thmS, ath;\n ath = (gfc.ATH.cb_s[gfc.bm_s[sb]]) * athlower;\n thmLR = Math.min(Math.max(gfc.thm[0].s[sb][sblock], ath),\n Math.max(gfc.thm[1].s[sb][sblock], ath));\n thmM = Math.max(gfc.thm[2].s[sb][sblock], ath);\n thmS = Math.max(gfc.thm[3].s[sb][sblock], ath);\n\n if (thmLR * msfix < thmM + thmS) {\n var f = thmLR * msfix / (thmM + thmS);\n thmM *= f;\n thmS *= f;\n assert(thmM + thmS > 0);\n }\n gfc.thm[2].s[sb][sblock] = Math.min(gfc.thm[2].s[sb][sblock],\n thmM);\n gfc.thm[3].s[sb][sblock] = Math.min(gfc.thm[3].s[sb][sblock],\n thmS);\n }\n }\n }\n\n /**\n * short block threshold calculation (part 2)\n *\n * partition band bo_s[sfb] is at the transition from scalefactor band sfb\n * to the next one sfb+1; enn and thmm have to be split between them\n */\n function convert_partition2scalefac_s(gfc, eb, thr, chn, sblock) {\n var sb, b;\n var enn = 0.0;\n var thmm = 0.0;\n for (sb = b = 0; sb < Encoder.SBMAX_s; ++b, ++sb) {\n var bo_s_sb = gfc.bo_s[sb];\n var npart_s = gfc.npart_s;\n var b_lim = bo_s_sb < npart_s ? bo_s_sb : npart_s;\n while (b < b_lim) {\n assert(eb[b] >= 0);\n // iff failed, it may indicate some index error elsewhere\n assert(thr[b] >= 0);\n enn += eb[b];\n thmm += thr[b];\n b++;\n }\n gfc.en[chn].s[sb][sblock] = enn;\n gfc.thm[chn].s[sb][sblock] = thmm;\n\n if (b >= npart_s) {\n ++sb;\n break;\n }\n assert(eb[b] >= 0);\n // iff failed, it may indicate some index error elsewhere\n assert(thr[b] >= 0);\n {\n /* at transition sfb . sfb+1 */\n var w_curr = gfc.PSY.bo_s_weight[sb];\n var w_next = 1.0 - w_curr;\n enn = w_curr * eb[b];\n thmm = w_curr * thr[b];\n gfc.en[chn].s[sb][sblock] += enn;\n gfc.thm[chn].s[sb][sblock] += thmm;\n enn = w_next * eb[b];\n thmm = w_next * thr[b];\n }\n }\n /* zero initialize the rest */\n for (; sb < Encoder.SBMAX_s; ++sb) {\n gfc.en[chn].s[sb][sblock] = 0;\n gfc.thm[chn].s[sb][sblock] = 0;\n }\n }\n\n /**\n * longblock threshold calculation (part 2)\n */\n function convert_partition2scalefac_l(gfc, eb, thr, chn) {\n var sb, b;\n var enn = 0.0;\n var thmm = 0.0;\n for (sb = b = 0; sb < Encoder.SBMAX_l; ++b, ++sb) {\n var bo_l_sb = gfc.bo_l[sb];\n var npart_l = gfc.npart_l;\n var b_lim = bo_l_sb < npart_l ? bo_l_sb : npart_l;\n while (b < b_lim) {\n assert(eb[b] >= 0);\n // iff failed, it may indicate some index error elsewhere\n assert(thr[b] >= 0);\n enn += eb[b];\n thmm += thr[b];\n b++;\n }\n gfc.en[chn].l[sb] = enn;\n gfc.thm[chn].l[sb] = thmm;\n\n if (b >= npart_l) {\n ++sb;\n break;\n }\n assert(eb[b] >= 0);\n assert(thr[b] >= 0);\n {\n /* at transition sfb . sfb+1 */\n var w_curr = gfc.PSY.bo_l_weight[sb];\n var w_next = 1.0 - w_curr;\n enn = w_curr * eb[b];\n thmm = w_curr * thr[b];\n gfc.en[chn].l[sb] += enn;\n gfc.thm[chn].l[sb] += thmm;\n enn = w_next * eb[b];\n thmm = w_next * thr[b];\n }\n }\n /* zero initialize the rest */\n for (; sb < Encoder.SBMAX_l; ++sb) {\n gfc.en[chn].l[sb] = 0;\n gfc.thm[chn].l[sb] = 0;\n }\n }\n\n function compute_masking_s(gfp, fftenergy_s, eb, thr, chn, sblock) {\n var gfc = gfp.internal_flags;\n var j, b;\n\n for (b = j = 0; b < gfc.npart_s; ++b) {\n var ebb = 0, m = 0;\n var n = gfc.numlines_s[b];\n for (var i = 0; i < n; ++i, ++j) {\n var el = fftenergy_s[sblock][j];\n ebb += el;\n if (m < el)\n m = el;\n }\n eb[b] = ebb;\n }\n assert(b == gfc.npart_s);\n assert(j == 129);\n for (j = b = 0; b < gfc.npart_s; b++) {\n var kk = gfc.s3ind_s[b][0];\n var ecb = gfc.s3_ss[j++] * eb[kk];\n ++kk;\n while (kk <= gfc.s3ind_s[b][1]) {\n ecb += gfc.s3_ss[j] * eb[kk];\n ++j;\n ++kk;\n }\n\n { /* limit calculated threshold by previous granule */\n var x = rpelev_s * gfc.nb_s1[chn][b];\n thr[b] = Math.min(ecb, x);\n }\n if (gfc.blocktype_old[chn & 1] == Encoder.SHORT_TYPE) {\n /* limit calculated threshold by even older granule */\n var x = rpelev2_s * gfc.nb_s2[chn][b];\n var y = thr[b];\n thr[b] = Math.min(x, y);\n }\n\n gfc.nb_s2[chn][b] = gfc.nb_s1[chn][b];\n gfc.nb_s1[chn][b] = ecb;\n assert(thr[b] >= 0);\n }\n for (; b <= Encoder.CBANDS; ++b) {\n eb[b] = 0;\n thr[b] = 0;\n }\n }\n\n function block_type_set(gfp, uselongblock, blocktype_d, blocktype) {\n var gfc = gfp.internal_flags;\n\n if (gfp.short_blocks == ShortBlock.short_block_coupled\n /* force both channels to use the same block type */\n /* this is necessary if the frame is to be encoded in ms_stereo. */\n /* But even without ms_stereo, FhG does this */\n && !(uselongblock[0] != 0 && uselongblock[1] != 0))\n uselongblock[0] = uselongblock[1] = 0;\n\n /*\n * update the blocktype of the previous granule, since it depends on\n * what happend in this granule\n */\n for (var chn = 0; chn < gfc.channels_out; chn++) {\n blocktype[chn] = Encoder.NORM_TYPE;\n /* disable short blocks */\n if (gfp.short_blocks == ShortBlock.short_block_dispensed)\n uselongblock[chn] = 1;\n if (gfp.short_blocks == ShortBlock.short_block_forced)\n uselongblock[chn] = 0;\n\n if (uselongblock[chn] != 0) {\n /* no attack : use long blocks */\n assert(gfc.blocktype_old[chn] != Encoder.START_TYPE);\n if (gfc.blocktype_old[chn] == Encoder.SHORT_TYPE)\n blocktype[chn] = Encoder.STOP_TYPE;\n } else {\n /* attack : use short blocks */\n blocktype[chn] = Encoder.SHORT_TYPE;\n if (gfc.blocktype_old[chn] == Encoder.NORM_TYPE) {\n gfc.blocktype_old[chn] = Encoder.START_TYPE;\n }\n if (gfc.blocktype_old[chn] == Encoder.STOP_TYPE)\n gfc.blocktype_old[chn] = Encoder.SHORT_TYPE;\n }\n\n blocktype_d[chn] = gfc.blocktype_old[chn];\n // value returned to calling program\n gfc.blocktype_old[chn] = blocktype[chn];\n // save for next call to l3psy_anal\n }\n }\n\n function NS_INTERP(x, y, r) {\n /* was pow((x),(r))*pow((y),1-(r)) */\n if (r >= 1.0) {\n /* 99.7% of the time */\n return x;\n }\n if (r <= 0.0)\n return y;\n if (y > 0.0) {\n /* rest of the time */\n return (Math.pow(x / y, r) * y);\n }\n /* never happens */\n return 0.0;\n }\n\n /**\n * these values are tuned only for 44.1kHz...\n */\n var regcoef_s = [11.8, 13.6, 17.2, 32, 46.5,\n 51.3, 57.5, 67.1, 71.5, 84.6, 97.6, 130,\n /* 255.8 */\n ];\n\n function pecalc_s(mr, masking_lower) {\n var pe_s = 1236.28 / 4;\n for (var sb = 0; sb < Encoder.SBMAX_s - 1; sb++) {\n for (var sblock = 0; sblock < 3; sblock++) {\n var thm = mr.thm.s[sb][sblock];\n assert(sb < regcoef_s.length);\n if (thm > 0.0) {\n var x = thm * masking_lower;\n var en = mr.en.s[sb][sblock];\n if (en > x) {\n if (en > x * 1e10) {\n pe_s += regcoef_s[sb] * (10.0 * LOG10);\n } else {\n assert(x > 0);\n pe_s += regcoef_s[sb] * Util.FAST_LOG10(en / x);\n }\n }\n }\n }\n }\n\n return pe_s;\n }\n\n /**\n * these values are tuned only for 44.1kHz...\n */\n var regcoef_l = [6.8, 5.8, 5.8, 6.4, 6.5, 9.9,\n 12.1, 14.4, 15, 18.9, 21.6, 26.9, 34.2, 40.2, 46.8, 56.5,\n 60.7, 73.9, 85.7, 93.4, 126.1,\n /* 241.3 */\n ];\n\n function pecalc_l(mr, masking_lower) {\n var pe_l = 1124.23 / 4;\n for (var sb = 0; sb < Encoder.SBMAX_l - 1; sb++) {\n var thm = mr.thm.l[sb];\n assert(sb < regcoef_l.length);\n if (thm > 0.0) {\n var x = thm * masking_lower;\n var en = mr.en.l[sb];\n if (en > x) {\n if (en > x * 1e10) {\n pe_l += regcoef_l[sb] * (10.0 * LOG10);\n } else {\n assert(x > 0);\n pe_l += regcoef_l[sb] * Util.FAST_LOG10(en / x);\n }\n }\n }\n }\n return pe_l;\n }\n\n function calc_energy(gfc, fftenergy, eb, max, avg) {\n var b, j;\n\n for (b = j = 0; b < gfc.npart_l; ++b) {\n var ebb = 0, m = 0;\n var i;\n for (i = 0; i < gfc.numlines_l[b]; ++i, ++j) {\n var el = fftenergy[j];\n assert(el >= 0);\n ebb += el;\n if (m < el)\n m = el;\n }\n eb[b] = ebb;\n max[b] = m;\n avg[b] = ebb * gfc.rnumlines_l[b];\n assert(gfc.rnumlines_l[b] >= 0);\n assert(ebb >= 0);\n assert(eb[b] >= 0);\n assert(max[b] >= 0);\n assert(avg[b] >= 0);\n }\n }\n\n function calc_mask_index_l(gfc, max, avg, mask_idx) {\n var last_tab_entry = tab.length - 1;\n var b = 0;\n var a = avg[b] + avg[b + 1];\n assert(a >= 0);\n if (a > 0.0) {\n var m = max[b];\n if (m < max[b + 1])\n m = max[b + 1];\n assert((gfc.numlines_l[b] + gfc.numlines_l[b + 1] - 1) > 0);\n a = 20.0 * (m * 2.0 - a)\n / (a * (gfc.numlines_l[b] + gfc.numlines_l[b + 1] - 1));\n var k = 0 | a;\n if (k > last_tab_entry)\n k = last_tab_entry;\n mask_idx[b] = k;\n } else {\n mask_idx[b] = 0;\n }\n\n for (b = 1; b < gfc.npart_l - 1; b++) {\n a = avg[b - 1] + avg[b] + avg[b + 1];\n assert(a >= 0);\n if (a > 0.0) {\n var m = max[b - 1];\n if (m < max[b])\n m = max[b];\n if (m < max[b + 1])\n m = max[b + 1];\n assert((gfc.numlines_l[b - 1] + gfc.numlines_l[b] + gfc.numlines_l[b + 1] - 1) > 0);\n a = 20.0\n * (m * 3.0 - a)\n / (a * (gfc.numlines_l[b - 1] + gfc.numlines_l[b]\n + gfc.numlines_l[b + 1] - 1));\n var k = 0 | a;\n if (k > last_tab_entry)\n k = last_tab_entry;\n mask_idx[b] = k;\n } else {\n mask_idx[b] = 0;\n }\n }\n assert(b > 0);\n assert(b == gfc.npart_l - 1);\n\n a = avg[b - 1] + avg[b];\n assert(a >= 0);\n if (a > 0.0) {\n var m = max[b - 1];\n if (m < max[b])\n m = max[b];\n assert((gfc.numlines_l[b - 1] + gfc.numlines_l[b] - 1) > 0);\n a = 20.0 * (m * 2.0 - a)\n / (a * (gfc.numlines_l[b - 1] + gfc.numlines_l[b] - 1));\n var k = 0 | a;\n if (k > last_tab_entry)\n k = last_tab_entry;\n mask_idx[b] = k;\n } else {\n mask_idx[b] = 0;\n }\n assert(b == (gfc.npart_l - 1));\n }\n\n var fircoef = [\n -8.65163e-18 * 2, -0.00851586 * 2, -6.74764e-18 * 2, 0.0209036 * 2,\n -3.36639e-17 * 2, -0.0438162 * 2, -1.54175e-17 * 2, 0.0931738 * 2,\n -5.52212e-17 * 2, -0.313819 * 2\n ];\n\n this.L3psycho_anal_ns = function (gfp, buffer, bufPos, gr_out, masking_ratio, masking_MS_ratio, percep_entropy, percep_MS_entropy, energy, blocktype_d) {\n /*\n * to get a good cache performance, one has to think about the sequence,\n * in which the variables are used.\n */\n var gfc = gfp.internal_flags;\n\n /* fft and energy calculation */\n var wsamp_L = new_float_n([2, Encoder.BLKSIZE]);\n var wsamp_S = new_float_n([2, 3, Encoder.BLKSIZE_s]);\n\n /* convolution */\n var eb_l = new_float(Encoder.CBANDS + 1);\n var eb_s = new_float(Encoder.CBANDS + 1);\n var thr = new_float(Encoder.CBANDS + 2);\n\n /* block type */\n var blocktype = new_int(2), uselongblock = new_int(2);\n\n /* usual variables like loop indices, etc.. */\n var numchn, chn;\n var b, i, j, k;\n var sb, sblock;\n\n /* variables used for --nspsytune */\n var ns_hpfsmpl = new_float_n([2, 576]);\n var pcfact;\n var mask_idx_l = new_int(Encoder.CBANDS + 2), mask_idx_s = new_int(Encoder.CBANDS + 2);\n\n Arrays.fill(mask_idx_s, 0);\n\n numchn = gfc.channels_out;\n /* chn=2 and 3 = Mid and Side channels */\n if (gfp.mode == MPEGMode.JOINT_STEREO)\n numchn = 4;\n\n if (gfp.VBR == VbrMode.vbr_off)\n pcfact = gfc.ResvMax == 0 ? 0 : ( gfc.ResvSize)\n / gfc.ResvMax * 0.5;\n else if (gfp.VBR == VbrMode.vbr_rh || gfp.VBR == VbrMode.vbr_mtrh\n || gfp.VBR == VbrMode.vbr_mt) {\n pcfact = 0.6;\n } else\n pcfact = 1.0;\n\n /**********************************************************************\n * Apply HPF of fs/4 to the input signal. This is used for attack\n * detection / handling.\n **********************************************************************/\n /* Don't copy the input buffer into a temporary buffer */\n /* unroll the loop 2 times */\n for (chn = 0; chn < gfc.channels_out; chn++) {\n /* apply high pass filter of fs/4 */\n var firbuf = buffer[chn];\n var firbufPos = bufPos + 576 - 350 - NSFIRLEN + 192;\n assert(fircoef.length == ((NSFIRLEN - 1) / 2));\n for (i = 0; i < 576; i++) {\n var sum1, sum2;\n sum1 = firbuf[firbufPos + i + 10];\n sum2 = 0.0;\n for (j = 0; j < ((NSFIRLEN - 1) / 2) - 1; j += 2) {\n sum1 += fircoef[j]\n * (firbuf[firbufPos + i + j] + firbuf[firbufPos + i\n + NSFIRLEN - j]);\n sum2 += fircoef[j + 1]\n * (firbuf[firbufPos + i + j + 1] + firbuf[firbufPos\n + i + NSFIRLEN - j - 1]);\n }\n ns_hpfsmpl[chn][i] = sum1 + sum2;\n }\n masking_ratio[gr_out][chn].en.assign(gfc.en[chn]);\n masking_ratio[gr_out][chn].thm.assign(gfc.thm[chn]);\n if (numchn > 2) {\n /* MS maskings */\n /* percep_MS_entropy [chn-2] = gfc . pe [chn]; */\n masking_MS_ratio[gr_out][chn].en.assign(gfc.en[chn + 2]);\n masking_MS_ratio[gr_out][chn].thm.assign(gfc.thm[chn + 2]);\n }\n }\n\n for (chn = 0; chn < numchn; chn++) {\n var wsamp_l;\n var wsamp_s;\n var en_subshort = new_float(12);\n var en_short = [0, 0, 0, 0];\n var attack_intensity = new_float(12);\n var ns_uselongblock = 1;\n var attackThreshold;\n var max = new_float(Encoder.CBANDS), avg = new_float(Encoder.CBANDS);\n var ns_attacks = [0, 0, 0, 0];\n var fftenergy = new_float(Encoder.HBLKSIZE);\n var fftenergy_s = new_float_n([3, Encoder.HBLKSIZE_s]);\n\n /*\n * rh 20040301: the following loops do access one off the limits so\n * I increase the array dimensions by one and initialize the\n * accessed values to zero\n */\n assert(gfc.npart_s <= Encoder.CBANDS);\n assert(gfc.npart_l <= Encoder.CBANDS);\n\n /***************************************************************\n * determine the block type (window type)\n ***************************************************************/\n /* calculate energies of each sub-shortblocks */\n for (i = 0; i < 3; i++) {\n en_subshort[i] = gfc.nsPsy.last_en_subshort[chn][i + 6];\n assert(gfc.nsPsy.last_en_subshort[chn][i + 4] > 0);\n attack_intensity[i] = en_subshort[i]\n / gfc.nsPsy.last_en_subshort[chn][i + 4];\n en_short[0] += en_subshort[i];\n }\n\n if (chn == 2) {\n for (i = 0; i < 576; i++) {\n var l, r;\n l = ns_hpfsmpl[0][i];\n r = ns_hpfsmpl[1][i];\n ns_hpfsmpl[0][i] = l + r;\n ns_hpfsmpl[1][i] = l - r;\n }\n }\n {\n var pf = ns_hpfsmpl[chn & 1];\n var pfPos = 0;\n for (i = 0; i < 9; i++) {\n var pfe = pfPos + 576 / 9;\n var p = 1.;\n for (; pfPos < pfe; pfPos++)\n if (p < Math.abs(pf[pfPos]))\n p = Math.abs(pf[pfPos]);\n\n gfc.nsPsy.last_en_subshort[chn][i] = en_subshort[i + 3] = p;\n en_short[1 + i / 3] += p;\n if (p > en_subshort[i + 3 - 2]) {\n assert(en_subshort[i + 3 - 2] > 0);\n p = p / en_subshort[i + 3 - 2];\n } else if (en_subshort[i + 3 - 2] > p * 10.0) {\n assert(p > 0);\n p = en_subshort[i + 3 - 2] / (p * 10.0);\n } else\n p = 0.0;\n attack_intensity[i + 3] = p;\n }\n }\n\n if (gfp.analysis) {\n var x = attack_intensity[0];\n for (i = 1; i < 12; i++)\n if (x < attack_intensity[i])\n x = attack_intensity[i];\n gfc.pinfo.ers[gr_out][chn] = gfc.pinfo.ers_save[chn];\n gfc.pinfo.ers_save[chn] = x;\n }\n\n /* compare energies between sub-shortblocks */\n attackThreshold = (chn == 3) ? gfc.nsPsy.attackthre_s\n : gfc.nsPsy.attackthre;\n for (i = 0; i < 12; i++)\n if (0 == ns_attacks[i / 3]\n && attack_intensity[i] > attackThreshold)\n ns_attacks[i / 3] = (i % 3) + 1;\n\n /*\n * should have energy change between short blocks, in order to avoid\n * periodic signals\n */\n for (i = 1; i < 4; i++) {\n var ratio;\n if (en_short[i - 1] > en_short[i]) {\n assert(en_short[i] > 0);\n ratio = en_short[i - 1] / en_short[i];\n } else {\n assert(en_short[i - 1] > 0);\n ratio = en_short[i] / en_short[i - 1];\n }\n if (ratio < 1.7) {\n ns_attacks[i] = 0;\n if (i == 1)\n ns_attacks[0] = 0;\n }\n }\n\n if (ns_attacks[0] != 0 && gfc.nsPsy.lastAttacks[chn] != 0)\n ns_attacks[0] = 0;\n\n if (gfc.nsPsy.lastAttacks[chn] == 3\n || (ns_attacks[0] + ns_attacks[1] + ns_attacks[2] + ns_attacks[3]) != 0) {\n ns_uselongblock = 0;\n\n if (ns_attacks[1] != 0 && ns_attacks[0] != 0)\n ns_attacks[1] = 0;\n if (ns_attacks[2] != 0 && ns_attacks[1] != 0)\n ns_attacks[2] = 0;\n if (ns_attacks[3] != 0 && ns_attacks[2] != 0)\n ns_attacks[3] = 0;\n }\n\n if (chn < 2) {\n uselongblock[chn] = ns_uselongblock;\n } else {\n if (ns_uselongblock == 0) {\n uselongblock[0] = uselongblock[1] = 0;\n }\n }\n\n /*\n * there is a one granule delay. Copy maskings computed last call\n * into masking_ratio to return to calling program.\n */\n energy[chn] = gfc.tot_ener[chn];\n\n /*********************************************************************\n * compute FFTs\n *********************************************************************/\n wsamp_s = wsamp_S;\n wsamp_l = wsamp_L;\n compute_ffts(gfp, fftenergy, fftenergy_s, wsamp_l, (chn & 1),\n wsamp_s, (chn & 1), gr_out, chn, buffer, bufPos);\n\n /*********************************************************************\n * Calculate the energy and the tonality of each partition.\n *********************************************************************/\n calc_energy(gfc, fftenergy, eb_l, max, avg);\n calc_mask_index_l(gfc, max, avg, mask_idx_l);\n /* compute masking thresholds for short blocks */\n for (sblock = 0; sblock < 3; sblock++) {\n var enn, thmm;\n compute_masking_s(gfp, fftenergy_s, eb_s, thr, chn, sblock);\n convert_partition2scalefac_s(gfc, eb_s, thr, chn, sblock);\n /**** short block pre-echo control ****/\n for (sb = 0; sb < Encoder.SBMAX_s; sb++) {\n thmm = gfc.thm[chn].s[sb][sblock];\n\n thmm *= NS_PREECHO_ATT0;\n if (ns_attacks[sblock] >= 2 || ns_attacks[sblock + 1] == 1) {\n var idx = (sblock != 0) ? sblock - 1 : 2;\n var p = NS_INTERP(gfc.thm[chn].s[sb][idx], thmm,\n NS_PREECHO_ATT1 * pcfact);\n thmm = Math.min(thmm, p);\n }\n\n if (ns_attacks[sblock] == 1) {\n var idx = (sblock != 0) ? sblock - 1 : 2;\n var p = NS_INTERP(gfc.thm[chn].s[sb][idx], thmm,\n NS_PREECHO_ATT2 * pcfact);\n thmm = Math.min(thmm, p);\n } else if ((sblock != 0 && ns_attacks[sblock - 1] == 3)\n || (sblock == 0 && gfc.nsPsy.lastAttacks[chn] == 3)) {\n var idx = (sblock != 2) ? sblock + 1 : 0;\n var p = NS_INTERP(gfc.thm[chn].s[sb][idx], thmm,\n NS_PREECHO_ATT2 * pcfact);\n thmm = Math.min(thmm, p);\n }\n\n /* pulse like signal detection for fatboy.wav and so on */\n enn = en_subshort[sblock * 3 + 3]\n + en_subshort[sblock * 3 + 4]\n + en_subshort[sblock * 3 + 5];\n if (en_subshort[sblock * 3 + 5] * 6 < enn) {\n thmm *= 0.5;\n if (en_subshort[sblock * 3 + 4] * 6 < enn)\n thmm *= 0.5;\n }\n\n gfc.thm[chn].s[sb][sblock] = thmm;\n }\n }\n gfc.nsPsy.lastAttacks[chn] = ns_attacks[2];\n\n /*********************************************************************\n * convolve the partitioned energy and unpredictability with the\n * spreading function, s3_l[b][k]\n ********************************************************************/\n k = 0;\n {\n for (b = 0; b < gfc.npart_l; b++) {\n /*\n * convolve the partitioned energy with the spreading\n * function\n */\n var kk = gfc.s3ind[b][0];\n var eb2 = eb_l[kk] * tab[mask_idx_l[kk]];\n var ecb = gfc.s3_ll[k++] * eb2;\n while (++kk <= gfc.s3ind[b][1]) {\n eb2 = eb_l[kk] * tab[mask_idx_l[kk]];\n ecb = mask_add(ecb, gfc.s3_ll[k++] * eb2, kk, kk - b,\n gfc, 0);\n }\n ecb *= 0.158489319246111;\n /* pow(10,-0.8) */\n\n /**** long block pre-echo control ****/\n /**\n *
\n                     * dont use long block pre-echo control if previous granule was\n                     * a short block.  This is to avoid the situation:\n                     * frame0:  quiet (very low masking)\n                     * frame1:  surge  (triggers short blocks)\n                     * frame2:  regular frame.  looks like pre-echo when compared to\n                     *          frame0, but all pre-echo was in frame1.\n                     * 
\n */\n /*\n * chn=0,1 L and R channels\n *\n * chn=2,3 S and M channels.\n */\n\n if (gfc.blocktype_old[chn & 1] == Encoder.SHORT_TYPE)\n thr[b] = ecb;\n else\n thr[b] = NS_INTERP(\n Math.min(ecb, Math.min(rpelev\n * gfc.nb_1[chn][b], rpelev2\n * gfc.nb_2[chn][b])), ecb, pcfact);\n\n gfc.nb_2[chn][b] = gfc.nb_1[chn][b];\n gfc.nb_1[chn][b] = ecb;\n }\n }\n for (; b <= Encoder.CBANDS; ++b) {\n eb_l[b] = 0;\n thr[b] = 0;\n }\n /* compute masking thresholds for long blocks */\n convert_partition2scalefac_l(gfc, eb_l, thr, chn);\n }\n /* end loop over chn */\n\n if (gfp.mode == MPEGMode.STEREO || gfp.mode == MPEGMode.JOINT_STEREO) {\n if (gfp.interChRatio > 0.0) {\n calc_interchannel_masking(gfp, gfp.interChRatio);\n }\n }\n\n if (gfp.mode == MPEGMode.JOINT_STEREO) {\n var msfix;\n msfix1(gfc);\n msfix = gfp.msfix;\n if (Math.abs(msfix) > 0.0)\n ns_msfix(gfc, msfix, gfp.ATHlower * gfc.ATH.adjust);\n }\n\n /***************************************************************\n * determine final block type\n ***************************************************************/\n block_type_set(gfp, uselongblock, blocktype_d, blocktype);\n\n /*********************************************************************\n * compute the value of PE to return ... no delay and advance\n *********************************************************************/\n for (chn = 0; chn < numchn; chn++) {\n var ppe;\n var ppePos = 0;\n var type;\n var mr;\n\n if (chn > 1) {\n ppe = percep_MS_entropy;\n ppePos = -2;\n type = Encoder.NORM_TYPE;\n if (blocktype_d[0] == Encoder.SHORT_TYPE\n || blocktype_d[1] == Encoder.SHORT_TYPE)\n type = Encoder.SHORT_TYPE;\n mr = masking_MS_ratio[gr_out][chn - 2];\n } else {\n ppe = percep_entropy;\n ppePos = 0;\n type = blocktype_d[chn];\n mr = masking_ratio[gr_out][chn];\n }\n\n if (type == Encoder.SHORT_TYPE)\n ppe[ppePos + chn] = pecalc_s(mr, gfc.masking_lower);\n else\n ppe[ppePos + chn] = pecalc_l(mr, gfc.masking_lower);\n\n if (gfp.analysis)\n gfc.pinfo.pe[gr_out][chn] = ppe[ppePos + chn];\n\n }\n return 0;\n }\n\n function vbrpsy_compute_fft_l(gfp, buffer, bufPos, chn, gr_out, fftenergy, wsamp_l, wsamp_lPos) {\n var gfc = gfp.internal_flags;\n if (chn < 2) {\n fft.fft_long(gfc, wsamp_l[wsamp_lPos], chn, buffer, bufPos);\n } else if (chn == 2) {\n /* FFT data for mid and side channel is derived from L & R */\n for (var j = Encoder.BLKSIZE - 1; j >= 0; --j) {\n var l = wsamp_l[wsamp_lPos + 0][j];\n var r = wsamp_l[wsamp_lPos + 1][j];\n wsamp_l[wsamp_lPos + 0][j] = (l + r) * Util.SQRT2 * 0.5;\n wsamp_l[wsamp_lPos + 1][j] = (l - r) * Util.SQRT2 * 0.5;\n }\n }\n\n /*********************************************************************\n * compute energies\n *********************************************************************/\n fftenergy[0] = NON_LINEAR_SCALE_ENERGY(wsamp_l[wsamp_lPos + 0][0]);\n fftenergy[0] *= fftenergy[0];\n\n for (var j = Encoder.BLKSIZE / 2 - 1; j >= 0; --j) {\n var re = wsamp_l[wsamp_lPos + 0][Encoder.BLKSIZE / 2 - j];\n var im = wsamp_l[wsamp_lPos + 0][Encoder.BLKSIZE / 2 + j];\n fftenergy[Encoder.BLKSIZE / 2 - j] = NON_LINEAR_SCALE_ENERGY((re\n * re + im * im) * 0.5);\n }\n /* total energy */\n {\n var totalenergy = 0.0;\n for (var j = 11; j < Encoder.HBLKSIZE; j++)\n totalenergy += fftenergy[j];\n\n gfc.tot_ener[chn] = totalenergy;\n }\n\n if (gfp.analysis) {\n for (var j = 0; j < Encoder.HBLKSIZE; j++) {\n gfc.pinfo.energy[gr_out][chn][j] = gfc.pinfo.energy_save[chn][j];\n gfc.pinfo.energy_save[chn][j] = fftenergy[j];\n }\n gfc.pinfo.pe[gr_out][chn] = gfc.pe[chn];\n }\n }\n\n function vbrpsy_compute_fft_s(gfp, buffer, bufPos, chn, sblock, fftenergy_s, wsamp_s, wsamp_sPos) {\n var gfc = gfp.internal_flags;\n\n if (sblock == 0 && chn < 2) {\n fft.fft_short(gfc, wsamp_s[wsamp_sPos], chn, buffer, bufPos);\n }\n if (chn == 2) {\n /* FFT data for mid and side channel is derived from L & R */\n for (var j = Encoder.BLKSIZE_s - 1; j >= 0; --j) {\n var l = wsamp_s[wsamp_sPos + 0][sblock][j];\n var r = wsamp_s[wsamp_sPos + 1][sblock][j];\n wsamp_s[wsamp_sPos + 0][sblock][j] = (l + r) * Util.SQRT2 * 0.5;\n wsamp_s[wsamp_sPos + 1][sblock][j] = (l - r) * Util.SQRT2 * 0.5;\n }\n }\n\n /*********************************************************************\n * compute energies\n *********************************************************************/\n fftenergy_s[sblock][0] = wsamp_s[wsamp_sPos + 0][sblock][0];\n fftenergy_s[sblock][0] *= fftenergy_s[sblock][0];\n for (var j = Encoder.BLKSIZE_s / 2 - 1; j >= 0; --j) {\n var re = wsamp_s[wsamp_sPos + 0][sblock][Encoder.BLKSIZE_s / 2 - j];\n var im = wsamp_s[wsamp_sPos + 0][sblock][Encoder.BLKSIZE_s / 2 + j];\n fftenergy_s[sblock][Encoder.BLKSIZE_s / 2 - j] = NON_LINEAR_SCALE_ENERGY((re\n * re + im * im) * 0.5);\n }\n }\n\n /**\n * compute loudness approximation (used for ATH auto-level adjustment)\n */\n function vbrpsy_compute_loudness_approximation_l(gfp, gr_out, chn, fftenergy) {\n var gfc = gfp.internal_flags;\n if (gfp.athaa_loudapprox == 2 && chn < 2) {\n // no loudness for mid/side ch\n gfc.loudness_sq[gr_out][chn] = gfc.loudness_sq_save[chn];\n gfc.loudness_sq_save[chn] = psycho_loudness_approx(fftenergy, gfc);\n }\n }\n\n var fircoef_ = [-8.65163e-18 * 2,\n -0.00851586 * 2, -6.74764e-18 * 2, 0.0209036 * 2,\n -3.36639e-17 * 2, -0.0438162 * 2, -1.54175e-17 * 2,\n 0.0931738 * 2, -5.52212e-17 * 2, -0.313819 * 2];\n\n /**\n * Apply HPF of fs/4 to the input signal. This is used for attack detection\n * / handling.\n */\n function vbrpsy_attack_detection(gfp, buffer, bufPos, gr_out, masking_ratio, masking_MS_ratio, energy, sub_short_factor, ns_attacks, uselongblock) {\n var ns_hpfsmpl = new_float_n([2, 576]);\n var gfc = gfp.internal_flags;\n var n_chn_out = gfc.channels_out;\n /* chn=2 and 3 = Mid and Side channels */\n var n_chn_psy = (gfp.mode == MPEGMode.JOINT_STEREO) ? 4 : n_chn_out;\n /* Don't copy the input buffer into a temporary buffer */\n /* unroll the loop 2 times */\n for (var chn = 0; chn < n_chn_out; chn++) {\n /* apply high pass filter of fs/4 */\n firbuf = buffer[chn];\n var firbufPos = bufPos + 576 - 350 - NSFIRLEN + 192;\n assert(fircoef_.length == ((NSFIRLEN - 1) / 2));\n for (var i = 0; i < 576; i++) {\n var sum1, sum2;\n sum1 = firbuf[firbufPos + i + 10];\n sum2 = 0.0;\n for (var j = 0; j < ((NSFIRLEN - 1) / 2) - 1; j += 2) {\n sum1 += fircoef_[j]\n * (firbuf[firbufPos + i + j] + firbuf[firbufPos + i\n + NSFIRLEN - j]);\n sum2 += fircoef_[j + 1]\n * (firbuf[firbufPos + i + j + 1] + firbuf[firbufPos\n + i + NSFIRLEN - j - 1]);\n }\n ns_hpfsmpl[chn][i] = sum1 + sum2;\n }\n masking_ratio[gr_out][chn].en.assign(gfc.en[chn]);\n masking_ratio[gr_out][chn].thm.assign(gfc.thm[chn]);\n if (n_chn_psy > 2) {\n /* MS maskings */\n /* percep_MS_entropy [chn-2] = gfc . pe [chn]; */\n masking_MS_ratio[gr_out][chn].en.assign(gfc.en[chn + 2]);\n masking_MS_ratio[gr_out][chn].thm.assign(gfc.thm[chn + 2]);\n }\n }\n for (var chn = 0; chn < n_chn_psy; chn++) {\n var attack_intensity = new_float(12);\n var en_subshort = new_float(12);\n var en_short = [0, 0, 0, 0];\n var pf = ns_hpfsmpl[chn & 1];\n var pfPos = 0;\n var attackThreshold = (chn == 3) ? gfc.nsPsy.attackthre_s\n : gfc.nsPsy.attackthre;\n var ns_uselongblock = 1;\n\n if (chn == 2) {\n for (var i = 0, j = 576; j > 0; ++i, --j) {\n var l = ns_hpfsmpl[0][i];\n var r = ns_hpfsmpl[1][i];\n ns_hpfsmpl[0][i] = l + r;\n ns_hpfsmpl[1][i] = l - r;\n }\n }\n /***************************************************************\n * determine the block type (window type)\n ***************************************************************/\n /* calculate energies of each sub-shortblocks */\n for (var i = 0; i < 3; i++) {\n en_subshort[i] = gfc.nsPsy.last_en_subshort[chn][i + 6];\n assert(gfc.nsPsy.last_en_subshort[chn][i + 4] > 0);\n attack_intensity[i] = en_subshort[i]\n / gfc.nsPsy.last_en_subshort[chn][i + 4];\n en_short[0] += en_subshort[i];\n }\n\n for (var i = 0; i < 9; i++) {\n var pfe = pfPos + 576 / 9;\n var p = 1.;\n for (; pfPos < pfe; pfPos++)\n if (p < Math.abs(pf[pfPos]))\n p = Math.abs(pf[pfPos]);\n\n gfc.nsPsy.last_en_subshort[chn][i] = en_subshort[i + 3] = p;\n en_short[1 + i / 3] += p;\n if (p > en_subshort[i + 3 - 2]) {\n assert(en_subshort[i + 3 - 2] > 0);\n p = p / en_subshort[i + 3 - 2];\n } else if (en_subshort[i + 3 - 2] > p * 10.0) {\n assert(p > 0);\n p = en_subshort[i + 3 - 2] / (p * 10.0);\n } else {\n p = 0.0;\n }\n attack_intensity[i + 3] = p;\n }\n /* pulse like signal detection for fatboy.wav and so on */\n for (var i = 0; i < 3; ++i) {\n var enn = en_subshort[i * 3 + 3]\n + en_subshort[i * 3 + 4] + en_subshort[i * 3 + 5];\n var factor = 1.;\n if (en_subshort[i * 3 + 5] * 6 < enn) {\n factor *= 0.5;\n if (en_subshort[i * 3 + 4] * 6 < enn) {\n factor *= 0.5;\n }\n }\n sub_short_factor[chn][i] = factor;\n }\n\n if (gfp.analysis) {\n var x = attack_intensity[0];\n for (var i = 1; i < 12; i++) {\n if (x < attack_intensity[i]) {\n x = attack_intensity[i];\n }\n }\n gfc.pinfo.ers[gr_out][chn] = gfc.pinfo.ers_save[chn];\n gfc.pinfo.ers_save[chn] = x;\n }\n\n /* compare energies between sub-shortblocks */\n for (var i = 0; i < 12; i++) {\n if (0 == ns_attacks[chn][i / 3]\n && attack_intensity[i] > attackThreshold) {\n ns_attacks[chn][i / 3] = (i % 3) + 1;\n }\n }\n\n /*\n * should have energy change between short blocks, in order to avoid\n * periodic signals\n */\n /* Good samples to show the effect are Trumpet test songs */\n /*\n * GB: tuned (1) to avoid too many short blocks for test sample\n * TRUMPET\n */\n /*\n * RH: tuned (2) to let enough short blocks through for test sample\n * FSOL and SNAPS\n */\n for (var i = 1; i < 4; i++) {\n var u = en_short[i - 1];\n var v = en_short[i];\n var m = Math.max(u, v);\n if (m < 40000) { /* (2) */\n if (u < 1.7 * v && v < 1.7 * u) { /* (1) */\n if (i == 1 && ns_attacks[chn][0] <= ns_attacks[chn][i]) {\n ns_attacks[chn][0] = 0;\n }\n ns_attacks[chn][i] = 0;\n }\n }\n }\n\n if (ns_attacks[chn][0] <= gfc.nsPsy.lastAttacks[chn]) {\n ns_attacks[chn][0] = 0;\n }\n\n if (gfc.nsPsy.lastAttacks[chn] == 3\n || (ns_attacks[chn][0] + ns_attacks[chn][1]\n + ns_attacks[chn][2] + ns_attacks[chn][3]) != 0) {\n ns_uselongblock = 0;\n\n if (ns_attacks[chn][1] != 0 && ns_attacks[chn][0] != 0) {\n ns_attacks[chn][1] = 0;\n }\n if (ns_attacks[chn][2] != 0 && ns_attacks[chn][1] != 0) {\n ns_attacks[chn][2] = 0;\n }\n if (ns_attacks[chn][3] != 0 && ns_attacks[chn][2] != 0) {\n ns_attacks[chn][3] = 0;\n }\n }\n if (chn < 2) {\n uselongblock[chn] = ns_uselongblock;\n } else {\n if (ns_uselongblock == 0) {\n uselongblock[0] = uselongblock[1] = 0;\n }\n }\n\n /*\n * there is a one granule delay. Copy maskings computed last call\n * into masking_ratio to return to calling program.\n */\n energy[chn] = gfc.tot_ener[chn];\n }\n }\n\n function vbrpsy_skip_masking_s(gfc, chn, sblock) {\n if (sblock == 0) {\n for (var b = 0; b < gfc.npart_s; b++) {\n gfc.nb_s2[chn][b] = gfc.nb_s1[chn][b];\n gfc.nb_s1[chn][b] = 0;\n }\n }\n }\n\n function vbrpsy_skip_masking_l(gfc, chn) {\n for (var b = 0; b < gfc.npart_l; b++) {\n gfc.nb_2[chn][b] = gfc.nb_1[chn][b];\n gfc.nb_1[chn][b] = 0;\n }\n }\n\n function psyvbr_calc_mask_index_s(gfc, max, avg, mask_idx) {\n var last_tab_entry = tab.length - 1;\n var b = 0;\n var a = avg[b] + avg[b + 1];\n assert(a >= 0);\n if (a > 0.0) {\n var m = max[b];\n if (m < max[b + 1])\n m = max[b + 1];\n assert((gfc.numlines_s[b] + gfc.numlines_s[b + 1] - 1) > 0);\n a = 20.0 * (m * 2.0 - a)\n / (a * (gfc.numlines_s[b] + gfc.numlines_s[b + 1] - 1));\n var k = 0 | a;\n if (k > last_tab_entry)\n k = last_tab_entry;\n mask_idx[b] = k;\n } else {\n mask_idx[b] = 0;\n }\n\n for (b = 1; b < gfc.npart_s - 1; b++) {\n a = avg[b - 1] + avg[b] + avg[b + 1];\n assert(b + 1 < gfc.npart_s);\n assert(a >= 0);\n if (a > 0.0) {\n var m = max[b - 1];\n if (m < max[b])\n m = max[b];\n if (m < max[b + 1])\n m = max[b + 1];\n assert((gfc.numlines_s[b - 1] + gfc.numlines_s[b] + gfc.numlines_s[b + 1] - 1) > 0);\n a = 20.0\n * (m * 3.0 - a)\n / (a * (gfc.numlines_s[b - 1] + gfc.numlines_s[b]\n + gfc.numlines_s[b + 1] - 1));\n var k = 0 | a;\n if (k > last_tab_entry)\n k = last_tab_entry;\n mask_idx[b] = k;\n } else {\n mask_idx[b] = 0;\n }\n }\n assert(b > 0);\n assert(b == gfc.npart_s - 1);\n\n a = avg[b - 1] + avg[b];\n assert(a >= 0);\n if (a > 0.0) {\n var m = max[b - 1];\n if (m < max[b])\n m = max[b];\n assert((gfc.numlines_s[b - 1] + gfc.numlines_s[b] - 1) > 0);\n a = 20.0 * (m * 2.0 - a)\n / (a * (gfc.numlines_s[b - 1] + gfc.numlines_s[b] - 1));\n var k = 0 | a;\n if (k > last_tab_entry)\n k = last_tab_entry;\n mask_idx[b] = k;\n } else {\n mask_idx[b] = 0;\n }\n assert(b == (gfc.npart_s - 1));\n }\n\n function vbrpsy_compute_masking_s(gfp, fftenergy_s, eb, thr, chn, sblock) {\n var gfc = gfp.internal_flags;\n var max = new float[Encoder.CBANDS], avg = new_float(Encoder.CBANDS);\n var i, j, b;\n var mask_idx_s = new int[Encoder.CBANDS];\n\n for (b = j = 0; b < gfc.npart_s; ++b) {\n var ebb = 0, m = 0;\n var n = gfc.numlines_s[b];\n for (i = 0; i < n; ++i, ++j) {\n var el = fftenergy_s[sblock][j];\n ebb += el;\n if (m < el)\n m = el;\n }\n eb[b] = ebb;\n assert(ebb >= 0);\n max[b] = m;\n assert(n > 0);\n avg[b] = ebb / n;\n assert(avg[b] >= 0);\n }\n assert(b == gfc.npart_s);\n assert(j == 129);\n for (; b < Encoder.CBANDS; ++b) {\n max[b] = 0;\n avg[b] = 0;\n }\n psyvbr_calc_mask_index_s(gfc, max, avg, mask_idx_s);\n for (j = b = 0; b < gfc.npart_s; b++) {\n var kk = gfc.s3ind_s[b][0];\n var last = gfc.s3ind_s[b][1];\n var dd, dd_n;\n var x, ecb, avg_mask;\n dd = mask_idx_s[kk];\n dd_n = 1;\n ecb = gfc.s3_ss[j] * eb[kk] * tab[mask_idx_s[kk]];\n ++j;\n ++kk;\n while (kk <= last) {\n dd += mask_idx_s[kk];\n dd_n += 1;\n x = gfc.s3_ss[j] * eb[kk] * tab[mask_idx_s[kk]];\n ecb = vbrpsy_mask_add(ecb, x, kk - b);\n ++j;\n ++kk;\n }\n dd = (1 + 2 * dd) / (2 * dd_n);\n avg_mask = tab[dd] * 0.5;\n ecb *= avg_mask;\n thr[b] = ecb;\n gfc.nb_s2[chn][b] = gfc.nb_s1[chn][b];\n gfc.nb_s1[chn][b] = ecb;\n {\n /*\n * if THR exceeds EB, the quantization routines will take the\n * difference from other bands. in case of strong tonal samples\n * (tonaltest.wav) this leads to heavy distortions. that's why\n * we limit THR here.\n */\n x = max[b];\n x *= gfc.minval_s[b];\n x *= avg_mask;\n if (thr[b] > x) {\n thr[b] = x;\n }\n }\n if (gfc.masking_lower > 1) {\n thr[b] *= gfc.masking_lower;\n }\n if (thr[b] > eb[b]) {\n thr[b] = eb[b];\n }\n if (gfc.masking_lower < 1) {\n thr[b] *= gfc.masking_lower;\n }\n\n assert(thr[b] >= 0);\n }\n for (; b < Encoder.CBANDS; ++b) {\n eb[b] = 0;\n thr[b] = 0;\n }\n }\n\n function vbrpsy_compute_masking_l(gfc, fftenergy, eb_l, thr, chn) {\n var max = new_float(Encoder.CBANDS), avg = new_float(Encoder.CBANDS);\n var mask_idx_l = new_int(Encoder.CBANDS + 2);\n var b;\n\n /*********************************************************************\n * Calculate the energy and the tonality of each partition.\n *********************************************************************/\n calc_energy(gfc, fftenergy, eb_l, max, avg);\n calc_mask_index_l(gfc, max, avg, mask_idx_l);\n\n /*********************************************************************\n * convolve the partitioned energy and unpredictability with the\n * spreading function, s3_l[b][k]\n ********************************************************************/\n var k = 0;\n for (b = 0; b < gfc.npart_l; b++) {\n var x, ecb, avg_mask, t;\n /* convolve the partitioned energy with the spreading function */\n var kk = gfc.s3ind[b][0];\n var last = gfc.s3ind[b][1];\n var dd = 0, dd_n = 0;\n dd = mask_idx_l[kk];\n dd_n += 1;\n ecb = gfc.s3_ll[k] * eb_l[kk] * tab[mask_idx_l[kk]];\n ++k;\n ++kk;\n while (kk <= last) {\n dd += mask_idx_l[kk];\n dd_n += 1;\n x = gfc.s3_ll[k] * eb_l[kk] * tab[mask_idx_l[kk]];\n t = vbrpsy_mask_add(ecb, x, kk - b);\n ecb = t;\n ++k;\n ++kk;\n }\n dd = (1 + 2 * dd) / (2 * dd_n);\n avg_mask = tab[dd] * 0.5;\n ecb *= avg_mask;\n\n /**** long block pre-echo control ****/\n /**\n *
\n             * dont use long block pre-echo control if previous granule was\n             * a short block.  This is to avoid the situation:\n             * frame0:  quiet (very low masking)\n             * frame1:  surge  (triggers short blocks)\n             * frame2:  regular frame.  looks like pre-echo when compared to\n             *          frame0, but all pre-echo was in frame1.\n             * 
\n */\n /*\n * chn=0,1 L and R channels chn=2,3 S and M channels.\n */\n if (gfc.blocktype_old[chn & 0x01] == Encoder.SHORT_TYPE) {\n var ecb_limit = rpelev * gfc.nb_1[chn][b];\n if (ecb_limit > 0) {\n thr[b] = Math.min(ecb, ecb_limit);\n } else {\n /**\n *
\n                     * Robert 071209:\n                     * Because we don't calculate long block psy when we know a granule\n                     * should be of short blocks, we don't have any clue how the granule\n                     * before would have looked like as a long block. So we have to guess\n                     * a little bit for this END_TYPE block.\n                     * Most of the time we get away with this sloppyness. (fingers crossed :)\n                     * The speed increase is worth it.\n                     * 
\n */\n thr[b] = Math.min(ecb, eb_l[b] * NS_PREECHO_ATT2);\n }\n } else {\n var ecb_limit_2 = rpelev2 * gfc.nb_2[chn][b];\n var ecb_limit_1 = rpelev * gfc.nb_1[chn][b];\n var ecb_limit;\n if (ecb_limit_2 <= 0) {\n ecb_limit_2 = ecb;\n }\n if (ecb_limit_1 <= 0) {\n ecb_limit_1 = ecb;\n }\n if (gfc.blocktype_old[chn & 0x01] == Encoder.NORM_TYPE) {\n ecb_limit = Math.min(ecb_limit_1, ecb_limit_2);\n } else {\n ecb_limit = ecb_limit_1;\n }\n thr[b] = Math.min(ecb, ecb_limit);\n }\n gfc.nb_2[chn][b] = gfc.nb_1[chn][b];\n gfc.nb_1[chn][b] = ecb;\n {\n /*\n * if THR exceeds EB, the quantization routines will take the\n * difference from other bands. in case of strong tonal samples\n * (tonaltest.wav) this leads to heavy distortions. that's why\n * we limit THR here.\n */\n x = max[b];\n x *= gfc.minval_l[b];\n x *= avg_mask;\n if (thr[b] > x) {\n thr[b] = x;\n }\n }\n if (gfc.masking_lower > 1) {\n thr[b] *= gfc.masking_lower;\n }\n if (thr[b] > eb_l[b]) {\n thr[b] = eb_l[b];\n }\n if (gfc.masking_lower < 1) {\n thr[b] *= gfc.masking_lower;\n }\n assert(thr[b] >= 0);\n }\n for (; b < Encoder.CBANDS; ++b) {\n eb_l[b] = 0;\n thr[b] = 0;\n }\n }\n\n function vbrpsy_compute_block_type(gfp, uselongblock) {\n var gfc = gfp.internal_flags;\n\n if (gfp.short_blocks == ShortBlock.short_block_coupled\n /* force both channels to use the same block type */\n /* this is necessary if the frame is to be encoded in ms_stereo. */\n /* But even without ms_stereo, FhG does this */\n && !(uselongblock[0] != 0 && uselongblock[1] != 0))\n uselongblock[0] = uselongblock[1] = 0;\n\n for (var chn = 0; chn < gfc.channels_out; chn++) {\n /* disable short blocks */\n if (gfp.short_blocks == ShortBlock.short_block_dispensed) {\n uselongblock[chn] = 1;\n }\n if (gfp.short_blocks == ShortBlock.short_block_forced) {\n uselongblock[chn] = 0;\n }\n }\n }\n\n function vbrpsy_apply_block_type(gfp, uselongblock, blocktype_d) {\n var gfc = gfp.internal_flags;\n\n /*\n * update the blocktype of the previous granule, since it depends on\n * what happend in this granule\n */\n for (var chn = 0; chn < gfc.channels_out; chn++) {\n var blocktype = Encoder.NORM_TYPE;\n /* disable short blocks */\n\n if (uselongblock[chn] != 0) {\n /* no attack : use long blocks */\n assert(gfc.blocktype_old[chn] != Encoder.START_TYPE);\n if (gfc.blocktype_old[chn] == Encoder.SHORT_TYPE)\n blocktype = Encoder.STOP_TYPE;\n } else {\n /* attack : use short blocks */\n blocktype = Encoder.SHORT_TYPE;\n if (gfc.blocktype_old[chn] == Encoder.NORM_TYPE) {\n gfc.blocktype_old[chn] = Encoder.START_TYPE;\n }\n if (gfc.blocktype_old[chn] == Encoder.STOP_TYPE)\n gfc.blocktype_old[chn] = Encoder.SHORT_TYPE;\n }\n\n blocktype_d[chn] = gfc.blocktype_old[chn];\n // value returned to calling program\n gfc.blocktype_old[chn] = blocktype;\n // save for next call to l3psy_anal\n }\n }\n\n /**\n * compute M/S thresholds from Johnston & Ferreira 1992 ICASSP paper\n */\n function vbrpsy_compute_MS_thresholds(eb, thr, cb_mld, ath_cb, athadjust, msfix, n) {\n var msfix2 = msfix * 2;\n var athlower = msfix > 0 ? Math.pow(10, athadjust) : 1;\n var rside, rmid;\n for (var b = 0; b < n; ++b) {\n var ebM = eb[2][b];\n var ebS = eb[3][b];\n var thmL = thr[0][b];\n var thmR = thr[1][b];\n var thmM = thr[2][b];\n var thmS = thr[3][b];\n\n /* use this fix if L & R masking differs by 2db or less */\n if (thmL <= 1.58 * thmR && thmR <= 1.58 * thmL) {\n var mld_m = cb_mld[b] * ebS;\n var mld_s = cb_mld[b] * ebM;\n rmid = Math.max(thmM, Math.min(thmS, mld_m));\n rside = Math.max(thmS, Math.min(thmM, mld_s));\n } else {\n rmid = thmM;\n rside = thmS;\n }\n if (msfix > 0) {\n /***************************************************************/\n /* Adjust M/S maskings if user set \"msfix\" */\n /***************************************************************/\n /* Naoki Shibata 2000 */\n var thmLR, thmMS;\n var ath = ath_cb[b] * athlower;\n thmLR = Math.min(Math.max(thmL, ath), Math.max(thmR, ath));\n thmM = Math.max(rmid, ath);\n thmS = Math.max(rside, ath);\n thmMS = thmM + thmS;\n if (thmMS > 0 && (thmLR * msfix2) < thmMS) {\n var f = thmLR * msfix2 / thmMS;\n thmM *= f;\n thmS *= f;\n assert(thmMS > 0);\n }\n rmid = Math.min(thmM, rmid);\n rside = Math.min(thmS, rside);\n }\n if (rmid > ebM) {\n rmid = ebM;\n }\n if (rside > ebS) {\n rside = ebS;\n }\n thr[2][b] = rmid;\n thr[3][b] = rside;\n }\n }\n\n this.L3psycho_anal_vbr = function (gfp, buffer, bufPos, gr_out, masking_ratio, masking_MS_ratio, percep_entropy, percep_MS_entropy, energy, blocktype_d) {\n var gfc = gfp.internal_flags;\n\n /* fft and energy calculation */\n var wsamp_l;\n var wsamp_s;\n var fftenergy = new_float(Encoder.HBLKSIZE);\n var fftenergy_s = new_float_n([3, Encoder.HBLKSIZE_s]);\n var wsamp_L = new_float_n([2, Encoder.BLKSIZE]);\n var wsamp_S = new_float_n([2, 3, Encoder.BLKSIZE_s]);\n var eb = new_float_n([4, Encoder.CBANDS]), thr = new_float_n([4, Encoder.CBANDS]);\n var sub_short_factor = new_float_n([4, 3]);\n var pcfact = 0.6;\n\n /* block type */\n var ns_attacks = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0],\n [0, 0, 0, 0]];\n var uselongblock = new_int(2);\n\n /* usual variables like loop indices, etc.. */\n\n /* chn=2 and 3 = Mid and Side channels */\n var n_chn_psy = (gfp.mode == MPEGMode.JOINT_STEREO) ? 4\n : gfc.channels_out;\n\n vbrpsy_attack_detection(gfp, buffer, bufPos, gr_out, masking_ratio,\n masking_MS_ratio, energy, sub_short_factor, ns_attacks,\n uselongblock);\n\n vbrpsy_compute_block_type(gfp, uselongblock);\n\n /* LONG BLOCK CASE */\n {\n for (var chn = 0; chn < n_chn_psy; chn++) {\n var ch01 = chn & 0x01;\n wsamp_l = wsamp_L;\n vbrpsy_compute_fft_l(gfp, buffer, bufPos, chn, gr_out,\n fftenergy, wsamp_l, ch01);\n\n vbrpsy_compute_loudness_approximation_l(gfp, gr_out, chn,\n fftenergy);\n\n if (uselongblock[ch01] != 0) {\n vbrpsy_compute_masking_l(gfc, fftenergy, eb[chn], thr[chn],\n chn);\n } else {\n vbrpsy_skip_masking_l(gfc, chn);\n }\n }\n if ((uselongblock[0] + uselongblock[1]) == 2) {\n /* M/S channel */\n if (gfp.mode == MPEGMode.JOINT_STEREO) {\n vbrpsy_compute_MS_thresholds(eb, thr, gfc.mld_cb_l,\n gfc.ATH.cb_l, gfp.ATHlower * gfc.ATH.adjust,\n gfp.msfix, gfc.npart_l);\n }\n }\n /* TODO: apply adaptive ATH masking here ?? */\n for (var chn = 0; chn < n_chn_psy; chn++) {\n var ch01 = chn & 0x01;\n if (uselongblock[ch01] != 0) {\n convert_partition2scalefac_l(gfc, eb[chn], thr[chn], chn);\n }\n }\n }\n\n /* SHORT BLOCKS CASE */\n {\n for (var sblock = 0; sblock < 3; sblock++) {\n for (var chn = 0; chn < n_chn_psy; ++chn) {\n var ch01 = chn & 0x01;\n\n if (uselongblock[ch01] != 0) {\n vbrpsy_skip_masking_s(gfc, chn, sblock);\n } else {\n /* compute masking thresholds for short blocks */\n wsamp_s = wsamp_S;\n vbrpsy_compute_fft_s(gfp, buffer, bufPos, chn, sblock,\n fftenergy_s, wsamp_s, ch01);\n vbrpsy_compute_masking_s(gfp, fftenergy_s, eb[chn],\n thr[chn], chn, sblock);\n }\n }\n if ((uselongblock[0] + uselongblock[1]) == 0) {\n /* M/S channel */\n if (gfp.mode == MPEGMode.JOINT_STEREO) {\n vbrpsy_compute_MS_thresholds(eb, thr, gfc.mld_cb_s,\n gfc.ATH.cb_s, gfp.ATHlower * gfc.ATH.adjust,\n gfp.msfix, gfc.npart_s);\n }\n /* L/R channel */\n }\n /* TODO: apply adaptive ATH masking here ?? */\n for (var chn = 0; chn < n_chn_psy; ++chn) {\n var ch01 = chn & 0x01;\n if (0 == uselongblock[ch01]) {\n convert_partition2scalefac_s(gfc, eb[chn], thr[chn],\n chn, sblock);\n }\n }\n }\n\n /**** short block pre-echo control ****/\n for (var chn = 0; chn < n_chn_psy; chn++) {\n var ch01 = chn & 0x01;\n\n if (uselongblock[ch01] != 0) {\n continue;\n }\n for (var sb = 0; sb < Encoder.SBMAX_s; sb++) {\n var new_thmm = new_float(3);\n for (var sblock = 0; sblock < 3; sblock++) {\n var thmm = gfc.thm[chn].s[sb][sblock];\n thmm *= NS_PREECHO_ATT0;\n\n if (ns_attacks[chn][sblock] >= 2\n || ns_attacks[chn][sblock + 1] == 1) {\n var idx = (sblock != 0) ? sblock - 1 : 2;\n var p = NS_INTERP(gfc.thm[chn].s[sb][idx], thmm,\n NS_PREECHO_ATT1 * pcfact);\n thmm = Math.min(thmm, p);\n } else if (ns_attacks[chn][sblock] == 1) {\n var idx = (sblock != 0) ? sblock - 1 : 2;\n var p = NS_INTERP(gfc.thm[chn].s[sb][idx], thmm,\n NS_PREECHO_ATT2 * pcfact);\n thmm = Math.min(thmm, p);\n } else if ((sblock != 0 && ns_attacks[chn][sblock - 1] == 3)\n || (sblock == 0 && gfc.nsPsy.lastAttacks[chn] == 3)) {\n var idx = (sblock != 2) ? sblock + 1 : 0;\n var p = NS_INTERP(gfc.thm[chn].s[sb][idx], thmm,\n NS_PREECHO_ATT2 * pcfact);\n thmm = Math.min(thmm, p);\n }\n\n /* pulse like signal detection for fatboy.wav and so on */\n thmm *= sub_short_factor[chn][sblock];\n\n new_thmm[sblock] = thmm;\n }\n for (var sblock = 0; sblock < 3; sblock++) {\n gfc.thm[chn].s[sb][sblock] = new_thmm[sblock];\n }\n }\n }\n }\n for (var chn = 0; chn < n_chn_psy; chn++) {\n gfc.nsPsy.lastAttacks[chn] = ns_attacks[chn][2];\n }\n\n /***************************************************************\n * determine final block type\n ***************************************************************/\n vbrpsy_apply_block_type(gfp, uselongblock, blocktype_d);\n\n /*********************************************************************\n * compute the value of PE to return ... no delay and advance\n *********************************************************************/\n for (var chn = 0; chn < n_chn_psy; chn++) {\n var ppe;\n var ppePos;\n var type;\n var mr;\n\n if (chn > 1) {\n ppe = percep_MS_entropy;\n ppePos = -2;\n type = Encoder.NORM_TYPE;\n if (blocktype_d[0] == Encoder.SHORT_TYPE\n || blocktype_d[1] == Encoder.SHORT_TYPE)\n type = Encoder.SHORT_TYPE;\n mr = masking_MS_ratio[gr_out][chn - 2];\n } else {\n ppe = percep_entropy;\n ppePos = 0;\n type = blocktype_d[chn];\n mr = masking_ratio[gr_out][chn];\n }\n\n if (type == Encoder.SHORT_TYPE) {\n ppe[ppePos + chn] = pecalc_s(mr, gfc.masking_lower);\n } else {\n ppe[ppePos + chn] = pecalc_l(mr, gfc.masking_lower);\n }\n\n if (gfp.analysis) {\n gfc.pinfo.pe[gr_out][chn] = ppe[ppePos + chn];\n }\n }\n return 0;\n }\n\n function s3_func_x(bark, hf_slope) {\n var tempx = bark, tempy;\n\n if (tempx >= 0) {\n tempy = -tempx * 27;\n } else {\n tempy = tempx * hf_slope;\n }\n if (tempy <= -72.0) {\n return 0;\n }\n return Math.exp(tempy * LN_TO_LOG10);\n }\n\n function norm_s3_func_x(hf_slope) {\n var lim_a = 0, lim_b = 0;\n {\n var x = 0, l, h;\n for (x = 0; s3_func_x(x, hf_slope) > 1e-20; x -= 1)\n ;\n l = x;\n h = 0;\n while (Math.abs(h - l) > 1e-12) {\n x = (h + l) / 2;\n if (s3_func_x(x, hf_slope) > 0) {\n h = x;\n } else {\n l = x;\n }\n }\n lim_a = l;\n }\n {\n var x = 0, l, h;\n for (x = 0; s3_func_x(x, hf_slope) > 1e-20; x += 1)\n ;\n l = 0;\n h = x;\n while (Math.abs(h - l) > 1e-12) {\n x = (h + l) / 2;\n if (s3_func_x(x, hf_slope) > 0) {\n l = x;\n } else {\n h = x;\n }\n }\n lim_b = h;\n }\n {\n var sum = 0;\n var m = 1000;\n var i;\n for (i = 0; i <= m; ++i) {\n var x = lim_a + i * (lim_b - lim_a) / m;\n var y = s3_func_x(x, hf_slope);\n sum += y;\n }\n {\n var norm = (m + 1) / (sum * (lim_b - lim_a));\n /* printf( \"norm = %lf\\n\",norm); */\n return norm;\n }\n }\n }\n\n /**\n * The spreading function. Values returned in units of energy\n */\n function s3_func(bark) {\n var tempx, x, tempy, temp;\n tempx = bark;\n if (tempx >= 0)\n tempx *= 3;\n else\n tempx *= 1.5;\n\n if (tempx >= 0.5 && tempx <= 2.5) {\n temp = tempx - 0.5;\n x = 8.0 * (temp * temp - 2.0 * temp);\n } else\n x = 0.0;\n tempx += 0.474;\n tempy = 15.811389 + 7.5 * tempx - 17.5\n * Math.sqrt(1.0 + tempx * tempx);\n\n if (tempy <= -60.0)\n return 0.0;\n\n tempx = Math.exp((x + tempy) * LN_TO_LOG10);\n\n /**\n *
\n         * Normalization.  The spreading function should be normalized so that:\n         * +inf\n         * /\n         * |  s3 [ bark ]  d(bark)   =  1\n         * /\n         * -inf\n         * 
\n */\n tempx /= .6609193;\n return tempx;\n }\n\n /**\n * see for example \"Zwicker: Psychoakustik, 1982; ISBN 3-540-11401-7\n */\n function freq2bark(freq) {\n /* input: freq in hz output: barks */\n if (freq < 0)\n freq = 0;\n freq = freq * 0.001;\n return 13.0 * Math.atan(.76 * freq) + 3.5\n * Math.atan(freq * freq / (7.5 * 7.5));\n }\n\n function init_numline(numlines, bo, bm, bval, bval_width, mld, bo_w, sfreq, blksize, scalepos, deltafreq, sbmax) {\n var b_frq = new_float(Encoder.CBANDS + 1);\n var sample_freq_frac = sfreq / (sbmax > 15 ? 2 * 576 : 2 * 192);\n var partition = new_int(Encoder.HBLKSIZE);\n var i;\n sfreq /= blksize;\n var j = 0;\n var ni = 0;\n /* compute numlines, the number of spectral lines in each partition band */\n /* each partition band should be about DELBARK wide. */\n for (i = 0; i < Encoder.CBANDS; i++) {\n var bark1;\n var j2;\n bark1 = freq2bark(sfreq * j);\n\n b_frq[i] = sfreq * j;\n\n for (j2 = j; freq2bark(sfreq * j2) - bark1 < DELBARK\n && j2 <= blksize / 2; j2++)\n ;\n\n numlines[i] = j2 - j;\n ni = i + 1;\n\n while (j < j2) {\n assert(j < Encoder.HBLKSIZE);\n partition[j++] = i;\n }\n if (j > blksize / 2) {\n j = blksize / 2;\n ++i;\n break;\n }\n }\n assert(i < Encoder.CBANDS);\n b_frq[i] = sfreq * j;\n\n for (var sfb = 0; sfb < sbmax; sfb++) {\n var i1, i2, start, end;\n var arg;\n start = scalepos[sfb];\n end = scalepos[sfb + 1];\n\n i1 = 0 | Math.floor(.5 + deltafreq * (start - .5));\n if (i1 < 0)\n i1 = 0;\n i2 = 0 | Math.floor(.5 + deltafreq * (end - .5));\n\n if (i2 > blksize / 2)\n i2 = blksize / 2;\n\n bm[sfb] = (partition[i1] + partition[i2]) / 2;\n bo[sfb] = partition[i2];\n var f_tmp = sample_freq_frac * end;\n /*\n * calculate how much of this band belongs to current scalefactor\n * band\n */\n bo_w[sfb] = (f_tmp - b_frq[bo[sfb]])\n / (b_frq[bo[sfb] + 1] - b_frq[bo[sfb]]);\n if (bo_w[sfb] < 0) {\n bo_w[sfb] = 0;\n } else {\n if (bo_w[sfb] > 1) {\n bo_w[sfb] = 1;\n }\n }\n /* setup stereo demasking thresholds */\n /* formula reverse enginerred from plot in paper */\n arg = freq2bark(sfreq * scalepos[sfb] * deltafreq);\n arg = ( Math.min(arg, 15.5) / 15.5);\n\n mld[sfb] = Math.pow(10.0,\n 1.25 * (1 - Math.cos(Math.PI * arg)) - 2.5);\n }\n\n /* compute bark values of each critical band */\n j = 0;\n for (var k = 0; k < ni; k++) {\n var w = numlines[k];\n var bark1, bark2;\n\n bark1 = freq2bark(sfreq * (j));\n bark2 = freq2bark(sfreq * (j + w - 1));\n bval[k] = .5 * (bark1 + bark2);\n\n bark1 = freq2bark(sfreq * (j - .5));\n bark2 = freq2bark(sfreq * (j + w - .5));\n bval_width[k] = bark2 - bark1;\n j += w;\n }\n\n return ni;\n }\n\n function init_s3_values(s3ind, npart, bval, bval_width, norm, use_old_s3) {\n var s3 = new_float_n([Encoder.CBANDS, Encoder.CBANDS]);\n /*\n * The s3 array is not linear in the bark scale.\n *\n * bval[x] should be used to get the bark value.\n */\n var j;\n var numberOfNoneZero = 0;\n\n /**\n *
\n         * s[i][j], the value of the spreading function,\n         * centered at band j (masker), for band i (maskee)\n         *\n         * i.e.: sum over j to spread into signal barkval=i\n         * NOTE: i and j are used opposite as in the ISO docs\n         * 
\n */\n if (use_old_s3) {\n for (var i = 0; i < npart; i++) {\n for (j = 0; j < npart; j++) {\n var v = s3_func(bval[i] - bval[j]) * bval_width[j];\n s3[i][j] = v * norm[i];\n }\n }\n } else {\n for (j = 0; j < npart; j++) {\n var hf_slope = 15 + Math.min(21 / bval[j], 12);\n var s3_x_norm = norm_s3_func_x(hf_slope);\n for (var i = 0; i < npart; i++) {\n var v = s3_x_norm\n * s3_func_x(bval[i] - bval[j], hf_slope)\n * bval_width[j];\n s3[i][j] = v * norm[i];\n }\n }\n }\n for (var i = 0; i < npart; i++) {\n for (j = 0; j < npart; j++) {\n if (s3[i][j] > 0.0)\n break;\n }\n s3ind[i][0] = j;\n\n for (j = npart - 1; j > 0; j--) {\n if (s3[i][j] > 0.0)\n break;\n }\n s3ind[i][1] = j;\n numberOfNoneZero += (s3ind[i][1] - s3ind[i][0] + 1);\n }\n\n var p = new_float(numberOfNoneZero);\n var k = 0;\n for (var i = 0; i < npart; i++)\n for (j = s3ind[i][0]; j <= s3ind[i][1]; j++)\n p[k++] = s3[i][j];\n\n return p;\n }\n\n function stereo_demask(f) {\n /* setup stereo demasking thresholds */\n /* formula reverse enginerred from plot in paper */\n var arg = freq2bark(f);\n arg = (Math.min(arg, 15.5) / 15.5);\n\n return Math.pow(10.0,\n 1.25 * (1 - Math.cos(Math.PI * arg)) - 2.5);\n }\n\n /**\n * NOTE: the bitrate reduction from the inter-channel masking effect is low\n * compared to the chance of getting annyoing artefacts. L3psycho_anal_vbr\n * does not use this feature. (Robert 071216)\n */\n this.psymodel_init = function (gfp) {\n var gfc = gfp.internal_flags;\n var i;\n var useOldS3 = true;\n var bvl_a = 13, bvl_b = 24;\n var snr_l_a = 0, snr_l_b = 0;\n var snr_s_a = -8.25, snr_s_b = -4.5;\n var bval = new_float(Encoder.CBANDS);\n var bval_width = new_float(Encoder.CBANDS);\n var norm = new_float(Encoder.CBANDS);\n var sfreq = gfp.out_samplerate;\n\n switch (gfp.experimentalZ) {\n default:\n case 0:\n useOldS3 = true;\n break;\n case 1:\n useOldS3 = (gfp.VBR == VbrMode.vbr_mtrh || gfp.VBR == VbrMode.vbr_mt) ? false\n : true;\n break;\n case 2:\n useOldS3 = false;\n break;\n case 3:\n bvl_a = 8;\n snr_l_a = -1.75;\n snr_l_b = -0.0125;\n snr_s_a = -8.25;\n snr_s_b = -2.25;\n break;\n }\n gfc.ms_ener_ratio_old = .25;\n gfc.blocktype_old[0] = gfc.blocktype_old[1] = Encoder.NORM_TYPE;\n // the vbr header is long blocks\n\n for (i = 0; i < 4; ++i) {\n for (var j = 0; j < Encoder.CBANDS; ++j) {\n gfc.nb_1[i][j] = 1e20;\n gfc.nb_2[i][j] = 1e20;\n gfc.nb_s1[i][j] = gfc.nb_s2[i][j] = 1.0;\n }\n for (var sb = 0; sb < Encoder.SBMAX_l; sb++) {\n gfc.en[i].l[sb] = 1e20;\n gfc.thm[i].l[sb] = 1e20;\n }\n for (var j = 0; j < 3; ++j) {\n for (var sb = 0; sb < Encoder.SBMAX_s; sb++) {\n gfc.en[i].s[sb][j] = 1e20;\n gfc.thm[i].s[sb][j] = 1e20;\n }\n gfc.nsPsy.lastAttacks[i] = 0;\n }\n for (var j = 0; j < 9; j++)\n gfc.nsPsy.last_en_subshort[i][j] = 10.;\n }\n\n /* init. for loudness approx. -jd 2001 mar 27 */\n gfc.loudness_sq_save[0] = gfc.loudness_sq_save[1] = 0.0;\n\n /*************************************************************************\n * now compute the psychoacoustic model specific constants\n ************************************************************************/\n /* compute numlines, bo, bm, bval, bval_width, mld */\n\n gfc.npart_l = init_numline(gfc.numlines_l, gfc.bo_l, gfc.bm_l, bval,\n bval_width, gfc.mld_l, gfc.PSY.bo_l_weight, sfreq,\n Encoder.BLKSIZE, gfc.scalefac_band.l, Encoder.BLKSIZE\n / (2.0 * 576), Encoder.SBMAX_l);\n assert(gfc.npart_l < Encoder.CBANDS);\n /* compute the spreading function */\n for (i = 0; i < gfc.npart_l; i++) {\n var snr = snr_l_a;\n if (bval[i] >= bvl_a) {\n snr = snr_l_b * (bval[i] - bvl_a) / (bvl_b - bvl_a) + snr_l_a\n * (bvl_b - bval[i]) / (bvl_b - bvl_a);\n }\n norm[i] = Math.pow(10.0, snr / 10.0);\n if (gfc.numlines_l[i] > 0) {\n gfc.rnumlines_l[i] = 1.0 / gfc.numlines_l[i];\n } else {\n gfc.rnumlines_l[i] = 0;\n }\n }\n gfc.s3_ll = init_s3_values(gfc.s3ind, gfc.npart_l, bval, bval_width,\n norm, useOldS3);\n\n /* compute long block specific values, ATH and MINVAL */\n var j = 0;\n for (i = 0; i < gfc.npart_l; i++) {\n var x;\n\n /* ATH */\n x = Float.MAX_VALUE;\n for (var k = 0; k < gfc.numlines_l[i]; k++, j++) {\n var freq = sfreq * j / (1000.0 * Encoder.BLKSIZE);\n var level;\n /*\n * ATH below 100 Hz constant, not further climbing\n */\n level = this.ATHformula(freq * 1000, gfp) - 20;\n // scale to FFT units; returned value is in dB\n level = Math.pow(10., 0.1 * level);\n // convert from dB . energy\n level *= gfc.numlines_l[i];\n if (x > level)\n x = level;\n }\n gfc.ATH.cb_l[i] = x;\n\n /*\n * MINVAL. For low freq, the strength of the masking is limited by\n * minval this is an ISO MPEG1 thing, dont know if it is really\n * needed\n */\n /*\n * FIXME: it does work to reduce low-freq problems in S53-Wind-Sax\n * and lead-voice samples, but introduces some 3 kbps bit bloat too.\n * TODO: Further refinement of the shape of this hack.\n */\n x = -20 + bval[i] * 20 / 10;\n if (x > 6) {\n x = 100;\n }\n if (x < -15) {\n x = -15;\n }\n x -= 8.;\n gfc.minval_l[i] = (Math.pow(10.0, x / 10.) * gfc.numlines_l[i]);\n }\n\n /************************************************************************\n * do the same things for short blocks\n ************************************************************************/\n gfc.npart_s = init_numline(gfc.numlines_s, gfc.bo_s, gfc.bm_s, bval,\n bval_width, gfc.mld_s, gfc.PSY.bo_s_weight, sfreq,\n Encoder.BLKSIZE_s, gfc.scalefac_band.s, Encoder.BLKSIZE_s\n / (2.0 * 192), Encoder.SBMAX_s);\n assert(gfc.npart_s < Encoder.CBANDS);\n\n /* SNR formula. short block is normalized by SNR. is it still right ? */\n j = 0;\n for (i = 0; i < gfc.npart_s; i++) {\n var x;\n var snr = snr_s_a;\n if (bval[i] >= bvl_a) {\n snr = snr_s_b * (bval[i] - bvl_a) / (bvl_b - bvl_a) + snr_s_a\n * (bvl_b - bval[i]) / (bvl_b - bvl_a);\n }\n norm[i] = Math.pow(10.0, snr / 10.0);\n\n /* ATH */\n x = Float.MAX_VALUE;\n for (var k = 0; k < gfc.numlines_s[i]; k++, j++) {\n var freq = sfreq * j / (1000.0 * Encoder.BLKSIZE_s);\n var level;\n /* freq = Min(.1,freq); */\n /*\n * ATH below 100 Hz constant, not\n * further climbing\n */\n level = this.ATHformula(freq * 1000, gfp) - 20;\n // scale to FFT units; returned value is in dB\n level = Math.pow(10., 0.1 * level);\n // convert from dB . energy\n level *= gfc.numlines_s[i];\n if (x > level)\n x = level;\n }\n gfc.ATH.cb_s[i] = x;\n\n /*\n * MINVAL. For low freq, the strength of the masking is limited by\n * minval this is an ISO MPEG1 thing, dont know if it is really\n * needed\n */\n x = (-7.0 + bval[i] * 7.0 / 12.0);\n if (bval[i] > 12) {\n x *= 1 + Math.log(1 + x) * 3.1;\n }\n if (bval[i] < 12) {\n x *= 1 + Math.log(1 - x) * 2.3;\n }\n if (x < -15) {\n x = -15;\n }\n x -= 8;\n gfc.minval_s[i] = Math.pow(10.0, x / 10)\n * gfc.numlines_s[i];\n }\n\n gfc.s3_ss = init_s3_values(gfc.s3ind_s, gfc.npart_s, bval, bval_width,\n norm, useOldS3);\n\n init_mask_add_max_values();\n fft.init_fft(gfc);\n\n /* setup temporal masking */\n gfc.decay = Math.exp(-1.0 * LOG10\n / (temporalmask_sustain_sec * sfreq / 192.0));\n\n {\n var msfix;\n msfix = NS_MSFIX;\n if ((gfp.exp_nspsytune & 2) != 0)\n msfix = 1.0;\n if (Math.abs(gfp.msfix) > 0.0)\n msfix = gfp.msfix;\n gfp.msfix = msfix;\n\n /*\n * spread only from npart_l bands. Normally, we use the spreading\n * function to convolve from npart_l down to npart_l bands\n */\n for (var b = 0; b < gfc.npart_l; b++)\n if (gfc.s3ind[b][1] > gfc.npart_l - 1)\n gfc.s3ind[b][1] = gfc.npart_l - 1;\n }\n\n /*\n * prepare for ATH auto adjustment: we want to decrease the ATH by 12 dB\n * per second\n */\n var frame_duration = (576. * gfc.mode_gr / sfreq);\n gfc.ATH.decay = Math.pow(10., -12. / 10. * frame_duration);\n gfc.ATH.adjust = 0.01;\n /* minimum, for leading low loudness */\n gfc.ATH.adjustLimit = 1.0;\n /* on lead, allow adjust up to maximum */\n\n assert(gfc.bo_l[Encoder.SBMAX_l - 1] <= gfc.npart_l);\n assert(gfc.bo_s[Encoder.SBMAX_s - 1] <= gfc.npart_s);\n\n if (gfp.ATHtype != -1) {\n /* compute equal loudness weights (eql_w) */\n var freq;\n var freq_inc = gfp.out_samplerate\n / (Encoder.BLKSIZE);\n var eql_balance = 0.0;\n freq = 0.0;\n for (i = 0; i < Encoder.BLKSIZE / 2; ++i) {\n /* convert ATH dB to relative power (not dB) */\n /* to determine eql_w */\n freq += freq_inc;\n gfc.ATH.eql_w[i] = 1. / Math.pow(10, this.ATHformula(freq, gfp) / 10);\n eql_balance += gfc.ATH.eql_w[i];\n }\n eql_balance = 1.0 / eql_balance;\n for (i = Encoder.BLKSIZE / 2; --i >= 0;) { /* scale weights */\n gfc.ATH.eql_w[i] *= eql_balance;\n }\n }\n {\n for (var b = j = 0; b < gfc.npart_s; ++b) {\n for (i = 0; i < gfc.numlines_s[b]; ++i) {\n ++j;\n }\n }\n assert(j == 129);\n for (var b = j = 0; b < gfc.npart_l; ++b) {\n for (i = 0; i < gfc.numlines_l[b]; ++i) {\n ++j;\n }\n }\n assert(j == 513);\n }\n j = 0;\n for (i = 0; i < gfc.npart_l; i++) {\n var freq = sfreq * (j + gfc.numlines_l[i] / 2) / (1.0 * Encoder.BLKSIZE);\n gfc.mld_cb_l[i] = stereo_demask(freq);\n j += gfc.numlines_l[i];\n }\n for (; i < Encoder.CBANDS; ++i) {\n gfc.mld_cb_l[i] = 1;\n }\n j = 0;\n for (i = 0; i < gfc.npart_s; i++) {\n var freq = sfreq * (j + gfc.numlines_s[i] / 2) / (1.0 * Encoder.BLKSIZE_s);\n gfc.mld_cb_s[i] = stereo_demask(freq);\n j += gfc.numlines_s[i];\n }\n for (; i < Encoder.CBANDS; ++i) {\n gfc.mld_cb_s[i] = 1;\n }\n return 0;\n }\n\n /**\n * Those ATH formulas are returning their minimum value for input = -1\n */\n function ATHformula_GB(f, value) {\n /**\n *
\n         *  from Painter & Spanias\n         *           modified by Gabriel Bouvigne to better fit the reality\n         *           ath =    3.640 * pow(f,-0.8)\n         *           - 6.800 * exp(-0.6*pow(f-3.4,2.0))\n         *           + 6.000 * exp(-0.15*pow(f-8.7,2.0))\n         *           + 0.6* 0.001 * pow(f,4.0);\n         *\n         *\n         *           In the past LAME was using the Painter &Spanias formula.\n         *           But we had some recurrent problems with HF content.\n         *           We measured real ATH values, and found the older formula\n         *           to be inaccurate in the higher part. So we made this new\n         *           formula and this solved most of HF problematic test cases.\n         *           The tradeoff is that in VBR mode it increases a lot the\n         *           bitrate.\n         * 
\n */\n\n /*\n * This curve can be adjusted according to the VBR scale: it adjusts\n * from something close to Painter & Spanias on V9 up to Bouvigne's\n * formula for V0. This way the VBR bitrate is more balanced according\n * to the -V value.\n */\n\n // the following Hack allows to ask for the lowest value\n if (f < -.3)\n f = 3410;\n\n // convert to khz\n f /= 1000;\n f = Math.max(0.1, f);\n var ath = 3.640 * Math.pow(f, -0.8) - 6.800\n * Math.exp(-0.6 * Math.pow(f - 3.4, 2.0)) + 6.000\n * Math.exp(-0.15 * Math.pow(f - 8.7, 2.0))\n + (0.6 + 0.04 * value) * 0.001 * Math.pow(f, 4.0);\n return ath;\n }\n\n this.ATHformula = function (f, gfp) {\n var ath;\n switch (gfp.ATHtype) {\n case 0:\n ath = ATHformula_GB(f, 9);\n break;\n case 1:\n // over sensitive, should probably be removed\n ath = ATHformula_GB(f, -1);\n break;\n case 2:\n ath = ATHformula_GB(f, 0);\n break;\n case 3:\n // modification of GB formula by Roel\n ath = ATHformula_GB(f, 1) + 6;\n break;\n case 4:\n ath = ATHformula_GB(f, gfp.ATHcurve);\n break;\n default:\n ath = ATHformula_GB(f, 0);\n break;\n }\n return ath;\n }\n\n}\n\nmodule.exports = PsyModel;\n","//package mp3;\n\n/* MPEG modes */\nfunction MPEGMode(ordinal) {\n var _ordinal = ordinal;\n this.ordinal = function () {\n return _ordinal;\n }\n}\n\nMPEGMode.STEREO = new MPEGMode(0);\nMPEGMode.JOINT_STEREO = new MPEGMode(1);\nMPEGMode.DUAL_CHANNEL = new MPEGMode(2);\nMPEGMode.MONO = new MPEGMode(3);\nMPEGMode.NOT_SET = new MPEGMode(4);\n\nmodule.exports = MPEGMode;\n","var MPEGMode = require('./MPEGMode.js');\n\nfunction LameGlobalFlags() {\n\n this.class_id = 0;\n\n /* input description */\n\n /**\n * number of samples. default=-1\n */\n this.num_samples = 0;\n /**\n * input number of channels. default=2\n */\n this.num_channels = 0;\n /**\n * input_samp_rate in Hz. default=44.1 kHz\n */\n this.in_samplerate = 0;\n /**\n * output_samp_rate. default: LAME picks best value at least not used for\n * MP3 decoding: Remember 44.1 kHz MP3s and AC97\n */\n this.out_samplerate = 0;\n /**\n * scale input by this amount before encoding at least not used for MP3\n * decoding\n */\n this.scale = 0.;\n /**\n * scale input of channel 0 (left) by this amount before encoding\n */\n this.scale_left = 0.;\n /**\n * scale input of channel 1 (right) by this amount before encoding\n */\n this.scale_right = 0.;\n\n /* general control params */\n /**\n * collect data for a MP3 frame analyzer?\n */\n this.analysis = false;\n /**\n * add Xing VBR tag?\n */\n this.bWriteVbrTag = false;\n\n /**\n * use lame/mpglib to convert mp3 to wav\n */\n this.decode_only = false;\n /**\n * quality setting 0=best, 9=worst default=5\n */\n this.quality = 0;\n /**\n * see enum default = LAME picks best value\n */\n this.mode = MPEGMode.STEREO;\n /**\n * force M/S mode. requires mode=1\n */\n this.force_ms = false;\n /**\n * use free format? default=0\n */\n this.free_format = false;\n /**\n * find the RG value? default=0\n */\n this.findReplayGain = false;\n /**\n * decode on the fly? default=0\n */\n this.decode_on_the_fly = false;\n /**\n * 1 (default) writes ID3 tags, 0 not\n */\n this.write_id3tag_automatic = false;\n\n /*\n * set either brate>0 or compression_ratio>0, LAME will compute the value of\n * the variable not set. Default is compression_ratio = 11.025\n */\n /**\n * bitrate\n */\n this.brate = 0;\n /**\n * sizeof(wav file)/sizeof(mp3 file)\n */\n this.compression_ratio = 0.;\n\n /* frame params */\n /**\n * mark as copyright. default=0\n */\n this.copyright = 0;\n /**\n * mark as original. default=1\n */\n this.original = 0;\n /**\n * the MP3 'private extension' bit. Meaningless\n */\n this.extension = 0;\n /**\n * Input PCM is emphased PCM (for instance from one of the rarely emphased\n * CDs), it is STRONGLY not recommended to use this, because psycho does not\n * take it into account, and last but not least many decoders don't care\n * about these bits\n */\n this.emphasis = 0;\n /**\n * use 2 bytes per frame for a CRC checksum. default=0\n */\n this.error_protection = 0;\n /**\n * enforce ISO spec as much as possible\n */\n this.strict_ISO = false;\n\n /**\n * use bit reservoir?\n */\n this.disable_reservoir = false;\n\n /* quantization/noise shaping */\n this.quant_comp = 0;\n this.quant_comp_short = 0;\n this.experimentalY = false;\n this.experimentalZ = 0;\n this.exp_nspsytune = 0;\n\n this.preset = 0;\n\n /* VBR control */\n this.VBR = null;\n /**\n * Range [0,...,1[\n */\n this.VBR_q_frac = 0.;\n /**\n * Range [0,...,9]\n */\n this.VBR_q = 0;\n this.VBR_mean_bitrate_kbps = 0;\n this.VBR_min_bitrate_kbps = 0;\n this.VBR_max_bitrate_kbps = 0;\n /**\n * strictly enforce VBR_min_bitrate normaly, it will be violated for analog\n * silence\n */\n this.VBR_hard_min = 0;\n\n /* resampling and filtering */\n\n /**\n * freq in Hz. 0=lame choses. -1=no filter\n */\n this.lowpassfreq = 0;\n /**\n * freq in Hz. 0=lame choses. -1=no filter\n */\n this.highpassfreq = 0;\n /**\n * freq width of filter, in Hz (default=15%)\n */\n this.lowpasswidth = 0;\n /**\n * freq width of filter, in Hz (default=15%)\n */\n this.highpasswidth = 0;\n\n /*\n * psycho acoustics and other arguments which you should not change unless\n * you know what you are doing\n */\n\n this.maskingadjust = 0.;\n this.maskingadjust_short = 0.;\n /**\n * only use ATH\n */\n this.ATHonly = false;\n /**\n * only use ATH for short blocks\n */\n this.ATHshort = false;\n /**\n * disable ATH\n */\n this.noATH = false;\n /**\n * select ATH formula\n */\n this.ATHtype = 0;\n /**\n * change ATH formula 4 shape\n */\n this.ATHcurve = 0.;\n /**\n * lower ATH by this many db\n */\n this.ATHlower = 0.;\n /**\n * select ATH auto-adjust scheme\n */\n this.athaa_type = 0;\n /**\n * select ATH auto-adjust loudness calc\n */\n this.athaa_loudapprox = 0;\n /**\n * dB, tune active region of auto-level\n */\n this.athaa_sensitivity = 0.;\n this.short_blocks = null;\n /**\n * use temporal masking effect\n */\n this.useTemporal = false;\n this.interChRatio = 0.;\n /**\n * Naoki's adjustment of Mid/Side maskings\n */\n this.msfix = 0.;\n\n /**\n * 0 off, 1 on\n */\n this.tune = false;\n /**\n * used to pass values for debugging and stuff\n */\n this.tune_value_a = 0.;\n\n /************************************************************************/\n /* internal variables, do not set... */\n /* provided because they may be of use to calling application */\n /************************************************************************/\n\n /**\n * 0=MPEG-2/2.5 1=MPEG-1\n */\n this.version = 0;\n this.encoder_delay = 0;\n /**\n * number of samples of padding appended to input\n */\n this.encoder_padding = 0;\n this.framesize = 0;\n /**\n * number of frames encoded\n */\n this.frameNum = 0;\n /**\n * is this struct owned by calling program or lame?\n */\n this.lame_allocated_gfp = 0;\n /**************************************************************************/\n /* more internal variables are stored in this structure: */\n /**************************************************************************/\n this.internal_flags = null;\n}\n\nmodule.exports = LameGlobalFlags;\n","var Encoder = require('./Encoder.js');\n\nvar L3Side = {};\n\n\n\t/**\n\t * max scalefactor band, max(SBMAX_l, SBMAX_s*3, (SBMAX_s-3)*3+8)\n\t */\nL3Side.SFBMAX = (Encoder.SBMAX_s * 3);\n\nmodule.exports = L3Side;\n","//package mp3;\nvar common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nvar L3Side = require('./L3Side.js');\n\nfunction GrInfo() {\n //float xr[] = new float[576];\n this.xr = new_float(576);\n //int l3_enc[] = new int[576];\n this.l3_enc = new_int(576);\n //int scalefac[] = new int[L3Side.SFBMAX];\n this.scalefac = new_int(L3Side.SFBMAX);\n this.xrpow_max = 0.;\n\n this.part2_3_length = 0;\n this.big_values = 0;\n this.count1 = 0;\n this.global_gain = 0;\n this.scalefac_compress = 0;\n this.block_type = 0;\n this.mixed_block_flag = 0;\n this.table_select = new_int(3);\n this.subblock_gain = new_int(3 + 1);\n this.region0_count = 0;\n this.region1_count = 0;\n this.preflag = 0;\n this.scalefac_scale = 0;\n this.count1table_select = 0;\n\n this.part2_length = 0;\n this.sfb_lmax = 0;\n this.sfb_smin = 0;\n this.psy_lmax = 0;\n this.sfbmax = 0;\n this.psymax = 0;\n this.sfbdivide = 0;\n this.width = new_int(L3Side.SFBMAX);\n this.window = new_int(L3Side.SFBMAX);\n this.count1bits = 0;\n /**\n * added for LSF\n */\n this.sfb_partition_table = null;\n this.slen = new_int(4);\n\n this.max_nonzero_coeff = 0;\n\n var self = this;\n function clone_int(array) {\n return new Int32Array(array);\n }\n function clone_float(array) {\n return new Float32Array(array);\n }\n this.assign = function (other) {\n self.xr = clone_float(other.xr); //.slice(0); //clone();\n self.l3_enc = clone_int(other.l3_enc); //.slice(0); //clone();\n self.scalefac = clone_int(other.scalefac);//.slice(0); //clone();\n self.xrpow_max = other.xrpow_max;\n\n self.part2_3_length = other.part2_3_length;\n self.big_values = other.big_values;\n self.count1 = other.count1;\n self.global_gain = other.global_gain;\n self.scalefac_compress = other.scalefac_compress;\n self.block_type = other.block_type;\n self.mixed_block_flag = other.mixed_block_flag;\n self.table_select = clone_int(other.table_select);//.slice(0); //clone();\n self.subblock_gain = clone_int(other.subblock_gain); //.slice(0); //.clone();\n self.region0_count = other.region0_count;\n self.region1_count = other.region1_count;\n self.preflag = other.preflag;\n self.scalefac_scale = other.scalefac_scale;\n self.count1table_select = other.count1table_select;\n\n self.part2_length = other.part2_length;\n self.sfb_lmax = other.sfb_lmax;\n self.sfb_smin = other.sfb_smin;\n self.psy_lmax = other.psy_lmax;\n self.sfbmax = other.sfbmax;\n self.psymax = other.psymax;\n self.sfbdivide = other.sfbdivide;\n self.width = clone_int(other.width); //.slice(0); //.clone();\n self.window = clone_int(other.window); //.slice(0); //.clone();\n self.count1bits = other.count1bits;\n\n self.sfb_partition_table = other.sfb_partition_table.slice(0); //.clone();\n self.slen = clone_int(other.slen); //.slice(0); //.clone();\n self.max_nonzero_coeff = other.max_nonzero_coeff;\n }\n}\n\nmodule.exports = GrInfo;\n","var common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nvar GrInfo = require('./GrInfo.js');\n\nfunction IIISideInfo() {\n this.tt = [[null, null], [null, null]];\n this.main_data_begin = 0;\n this.private_bits = 0;\n this.resvDrain_pre = 0;\n this.resvDrain_post = 0;\n this.scfsi = [new_int(4), new_int(4)];\n\n for (var gr = 0; gr < 2; gr++) {\n for (var ch = 0; ch < 2; ch++) {\n this.tt[gr][ch] = new GrInfo();\n }\n }\n}\n\nmodule.exports = IIISideInfo;\n","//package mp3;\n\n/**\n * Layer III side information.\n *\n * @author Ken\n *\n */\n\nvar common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nvar Encoder = require('./Encoder.js');\n\nfunction ScaleFac(arrL, arrS, arr21, arr12) {\n\n this.l = new_int(1 + Encoder.SBMAX_l);\n this.s = new_int(1 + Encoder.SBMAX_s);\n this.psfb21 = new_int(1 + Encoder.PSFB21);\n this.psfb12 = new_int(1 + Encoder.PSFB12);\n var l = this.l;\n var s = this.s;\n\n if (arguments.length == 4) {\n //public ScaleFac(final int[] arrL, final int[] arrS, final int[] arr21,\n // final int[] arr12) {\n this.arrL = arguments[0];\n this.arrS = arguments[1];\n this.arr21 = arguments[2];\n this.arr12 = arguments[3];\n\n System.arraycopy(this.arrL, 0, l, 0, Math.min(this.arrL.length, this.l.length));\n System.arraycopy(this.arrS, 0, s, 0, Math.min(this.arrS.length, this.s.length));\n System.arraycopy(this.arr21, 0, this.psfb21, 0, Math.min(this.arr21.length, this.psfb21.length));\n System.arraycopy(this.arr12, 0, this.psfb12, 0, Math.min(this.arr12.length, this.psfb12.length));\n }\n}\n\nmodule.exports = ScaleFac;\n","var common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nvar Encoder = require('./Encoder.js');\n\n//package mp3;\n\n/**\n * Variables used for --nspsytune\n *\n * @author Ken\n *\n */\nfunction NsPsy() {\n this.last_en_subshort = new_float_n([4, 9]);\n this.lastAttacks = new_int(4);\n this.pefirbuf = new_float(19);\n this.longfact = new_float(Encoder.SBMAX_l);\n this.shortfact = new_float(Encoder.SBMAX_s);\n\n /**\n * short block tuning\n */\n this.attackthre = 0.;\n this.attackthre_s = 0.;\n}\n\nmodule.exports = NsPsy;\n","//package mp3;\n\nfunction VBRSeekInfo() {\n /**\n * What we have seen so far.\n */\n this.sum = 0;\n /**\n * How many frames we have seen in this chunk.\n */\n this.seen = 0;\n /**\n * How many frames we want to collect into one chunk.\n */\n this.want = 0;\n /**\n * Actual position in our bag.\n */\n this.pos = 0;\n /**\n * Size of our bag.\n */\n this.size = 0;\n /**\n * Pointer to our bag.\n */\n this.bag = null;\n this.nVbrNumFrames = 0;\n this.nBytesWritten = 0;\n /* VBR tag data */\n this.TotalFrameSize = 0;\n}\n\nmodule.exports = VBRSeekInfo;\n","var common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nvar IIISideInfo = require('./IIISideInfo.js');\nvar ScaleFac = require('./ScaleFac.js');\nvar NsPsy = require('./NsPsy.js');\nvar VBRSeekInfo = require('./VBRSeekInfo.js');\nvar III_psy_xmin = require('./III_psy_xmin.js');\nvar Encoder = require('./Encoder.js');\nvar L3Side = require('./L3Side.js');\n\n\nLameInternalFlags.MFSIZE = (3 * 1152 + Encoder.ENCDELAY - Encoder.MDCTDELAY);\nLameInternalFlags.MAX_HEADER_BUF = 256;\nLameInternalFlags.MAX_BITS_PER_CHANNEL = 4095;\nLameInternalFlags.MAX_BITS_PER_GRANULE = 7680;\nLameInternalFlags.BPC = 320;\n\nfunction LameInternalFlags() {\n var MAX_HEADER_LEN = 40;\n\n\n /********************************************************************\n * internal variables NOT set by calling program, and should not be *\n * modified by the calling program *\n ********************************************************************/\n\n /**\n * Some remarks to the Class_ID field: The Class ID is an Identifier for a\n * pointer to this struct. It is very unlikely that a pointer to\n * lame_global_flags has the same 32 bits in it's structure (large and other\n * special properties, for instance prime).\n *\n * To test that the structure is right and initialized, use: if ( gfc .\n * Class_ID == LAME_ID ) ... Other remark: If you set a flag to 0 for uninit\n * data and 1 for init data, the right test should be \"if (flag == 1)\" and\n * NOT \"if (flag)\". Unintended modification of this element will be\n * otherwise misinterpreted as an init.\n */\n this.Class_ID = 0;\n\n this.lame_encode_frame_init = 0;\n this.iteration_init_init = 0;\n this.fill_buffer_resample_init = 0;\n\n //public float mfbuf[][] = new float[2][MFSIZE];\n this.mfbuf = new_float_n([2, LameInternalFlags.MFSIZE]);\n\n /**\n * granules per frame\n */\n this.mode_gr = 0;\n /**\n * number of channels in the input data stream (PCM or decoded PCM)\n */\n this.channels_in = 0;\n /**\n * number of channels in the output data stream (not used for decoding)\n */\n this.channels_out = 0;\n /**\n * input_samp_rate/output_samp_rate\n */\n //public double resample_ratio;\n this.resample_ratio = 0.;\n\n this.mf_samples_to_encode = 0;\n this.mf_size = 0;\n /**\n * min bitrate index\n */\n this.VBR_min_bitrate = 0;\n /**\n * max bitrate index\n */\n this.VBR_max_bitrate = 0;\n this.bitrate_index = 0;\n this.samplerate_index = 0;\n this.mode_ext = 0;\n\n /* lowpass and highpass filter control */\n /**\n * normalized frequency bounds of passband\n */\n this.lowpass1 = 0.;\n this.lowpass2 = 0.;\n /**\n * normalized frequency bounds of passband\n */\n this.highpass1 = 0.;\n this.highpass2 = 0.;\n\n /**\n * 0 = none 1 = ISO AAC model 2 = allow scalefac_select=1\n */\n this.noise_shaping = 0;\n\n /**\n * 0 = ISO model: amplify all distorted bands
\n * 1 = amplify within 50% of max (on db scale)
\n * 2 = amplify only most distorted band
\n * 3 = method 1 and refine with method 2
\n */\n this.noise_shaping_amp = 0;\n /**\n * 0 = no substep
\n * 1 = use substep shaping at last step(VBR only)
\n * (not implemented yet)
\n * 2 = use substep inside loop
\n * 3 = use substep inside loop and last step
\n */\n this.substep_shaping = 0;\n\n /**\n * 1 = gpsycho. 0 = none\n */\n this.psymodel = 0;\n /**\n * 0 = stop at over=0, all scalefacs amplified or
\n * a scalefac has reached max value
\n * 1 = stop when all scalefacs amplified or a scalefac has reached max value
\n * 2 = stop when all scalefacs amplified\n */\n this.noise_shaping_stop = 0;\n\n /**\n * 0 = no, 1 = yes\n */\n this.subblock_gain = 0;\n /**\n * 0 = no. 1=outside loop 2=inside loop(slow)\n */\n this.use_best_huffman = 0;\n\n /**\n * 0 = stop early after 0 distortion found. 1 = full search\n */\n this.full_outer_loop = 0;\n\n //public IIISideInfo l3_side = new IIISideInfo();\n this.l3_side = new IIISideInfo();\n this.ms_ratio = new_float(2);\n\n /* used for padding */\n /**\n * padding for the current frame?\n */\n this.padding = 0;\n this.frac_SpF = 0;\n this.slot_lag = 0;\n\n /**\n * optional ID3 tags\n */\n //public ID3TagSpec tag_spec;\n this.tag_spec = null;\n this.nMusicCRC = 0;\n\n /* variables used by Quantize */\n //public int OldValue[] = new int[2];\n this.OldValue = new_int(2);\n //public int CurrentStep[] = new int[2];\n this.CurrentStep = new_int(2);\n\n this.masking_lower = 0.;\n //public int bv_scf[] = new int[576];\n this.bv_scf = new_int(576);\n //public int pseudohalf[] = new int[L3Side.SFBMAX];\n this.pseudohalf = new_int(L3Side.SFBMAX);\n\n /**\n * will be set in lame_init_params\n */\n this.sfb21_extra = false;\n\n /* BPC = maximum number of filter convolution windows to precompute */\n //public float[][] inbuf_old = new float[2][];\n this.inbuf_old = new Array(2);\n //public float[][] blackfilt = new float[2 * BPC + 1][];\n this.blackfilt = new Array(2 * LameInternalFlags.BPC + 1);\n //public double itime[] = new double[2];\n this.itime = new_double(2);\n this.sideinfo_len = 0;\n\n /* variables for newmdct.c */\n //public float sb_sample[][][][] = new float[2][2][18][Encoder.SBLIMIT];\n this.sb_sample = new_float_n([2, 2, 18, Encoder.SBLIMIT]);\n this.amp_filter = new_float(32);\n\n /* variables for BitStream */\n\n /**\n *
\n     * mpeg1: buffer=511 bytes  smallest frame: 96-38(sideinfo)=58\n     * max number of frames in reservoir:  8\n     * mpeg2: buffer=255 bytes.  smallest frame: 24-23bytes=1\n     * with VBR, if you are encoding all silence, it is possible to\n     * have 8kbs/24khz frames with 1byte of data each, which means we need\n     * to buffer up to 255 headers!\n     * 
\n */\n /**\n * also, max_header_buf has to be a power of two\n */\n /**\n * max size of header is 38\n */\n\n function Header() {\n this.write_timing = 0;\n this.ptr = 0;\n //public byte buf[] = new byte[MAX_HEADER_LEN];\n this.buf = new_byte(MAX_HEADER_LEN);\n }\n\n this.header = new Array(LameInternalFlags.MAX_HEADER_BUF);\n\n this.h_ptr = 0;\n this.w_ptr = 0;\n this.ancillary_flag = 0;\n\n /* variables for Reservoir */\n /**\n * in bits\n */\n this.ResvSize = 0;\n /**\n * in bits\n */\n this.ResvMax = 0;\n\n //public ScaleFac scalefac_band = new ScaleFac();\n this.scalefac_band = new ScaleFac();\n\n /* daa from PsyModel */\n /* The static variables \"r\", \"phi_sav\", \"new\", \"old\" and \"oldest\" have */\n /* to be remembered for the unpredictability measure. For \"r\" and */\n /* \"phi_sav\", the first index from the left is the channel select and */\n /* the second index is the \"age\" of the data. */\n this.minval_l = new_float(Encoder.CBANDS);\n this.minval_s = new_float(Encoder.CBANDS);\n this.nb_1 = new_float_n([4, Encoder.CBANDS]);\n this.nb_2 = new_float_n([4, Encoder.CBANDS]);\n this.nb_s1 = new_float_n([4, Encoder.CBANDS]);\n this.nb_s2 = new_float_n([4, Encoder.CBANDS]);\n this.s3_ss = null;\n this.s3_ll = null;\n this.decay = 0.;\n\n //public III_psy_xmin[] thm = new III_psy_xmin[4];\n //public III_psy_xmin[] en = new III_psy_xmin[4];\n this.thm = new Array(4);\n this.en = new Array(4);\n\n /**\n * fft and energy calculation\n */\n this.tot_ener = new_float(4);\n\n /* loudness calculation (for adaptive threshold of hearing) */\n /**\n * loudness^2 approx. per granule and channel\n */\n this.loudness_sq = new_float_n([2, 2]);\n /**\n * account for granule delay of L3psycho_anal\n */\n this.loudness_sq_save = new_float(2);\n\n /**\n * Scale Factor Bands\n */\n this.mld_l = new_float(Encoder.SBMAX_l);\n this.mld_s = new_float(Encoder.SBMAX_s);\n this.bm_l = new_int(Encoder.SBMAX_l);\n this.bo_l = new_int(Encoder.SBMAX_l);\n this.bm_s = new_int(Encoder.SBMAX_s);\n this.bo_s = new_int(Encoder.SBMAX_s);\n this.npart_l = 0;\n this.npart_s = 0;\n\n this.s3ind = new_int_n([Encoder.CBANDS, 2]);\n this.s3ind_s = new_int_n([Encoder.CBANDS, 2]);\n\n this.numlines_s = new_int(Encoder.CBANDS);\n this.numlines_l = new_int(Encoder.CBANDS);\n this.rnumlines_l = new_float(Encoder.CBANDS);\n this.mld_cb_l = new_float(Encoder.CBANDS);\n this.mld_cb_s = new_float(Encoder.CBANDS);\n this.numlines_s_num1 = 0;\n this.numlines_l_num1 = 0;\n\n /* ratios */\n this.pe = new_float(4);\n this.ms_ratio_s_old = 0.;\n this.ms_ratio_l_old = 0.;\n this.ms_ener_ratio_old = 0.;\n\n /**\n * block type\n */\n this.blocktype_old = new_int(2);\n\n /**\n * variables used for --nspsytune\n */\n this.nsPsy = new NsPsy();\n\n /**\n * used for Xing VBR header\n */\n this.VBR_seek_table = new VBRSeekInfo();\n\n /**\n * all ATH related stuff\n */\n //public ATH ATH;\n this.ATH = null;\n\n this.PSY = null;\n\n this.nogap_total = 0;\n this.nogap_current = 0;\n\n /* ReplayGain */\n this.decode_on_the_fly = true;\n this.findReplayGain = true;\n this.findPeakSample = true;\n this.PeakSample = 0.;\n this.RadioGain = 0;\n this.AudiophileGain = 0;\n //public ReplayGain rgdata;\n this.rgdata = null;\n\n /**\n * gain change required for preventing clipping\n */\n this.noclipGainChange = 0;\n /**\n * user-specified scale factor required for preventing clipping\n */\n this.noclipScale = 0.;\n\n /* simple statistics */\n this.bitrate_stereoMode_Hist = new_int_n([16, 4 + 1]);\n /**\n * norm/start/short/stop/mixed(short)/sum\n */\n this.bitrate_blockType_Hist = new_int_n([16, 4 + 1 + 1]);\n\n //public PlottingData pinfo;\n //public MPGLib.mpstr_tag hip;\n this.pinfo = null;\n this.hip = null;\n\n this.in_buffer_nsamples = 0;\n //public float[] in_buffer_0;\n //public float[] in_buffer_1;\n this.in_buffer_0 = null;\n this.in_buffer_1 = null;\n\n //public IIterationLoop iteration_loop;\n this.iteration_loop = null;\n\n for (var i = 0; i < this.en.length; i++) {\n this.en[i] = new III_psy_xmin();\n }\n for (var i = 0; i < this.thm.length; i++) {\n this.thm[i] = new III_psy_xmin();\n }\n for (var i = 0; i < this.header.length; i++) {\n this.header[i] = new Header();\n }\n\n}\n\nmodule.exports = LameInternalFlags;\n","var common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nvar Encoder = require('./Encoder.js');\n\n/**\n * ATH related stuff, if something new ATH related has to be added, please plug\n * it here into the ATH.\n */\nfunction ATH() {\n /**\n * Method for the auto adjustment.\n */\n this.useAdjust = 0;\n /**\n * factor for tuning the (sample power) point below which adaptive threshold\n * of hearing adjustment occurs\n */\n this.aaSensitivityP = 0.;\n /**\n * Lowering based on peak volume, 1 = no lowering.\n */\n this.adjust = 0.;\n /**\n * Limit for dynamic ATH adjust.\n */\n this.adjustLimit = 0.;\n /**\n * Determined to lower x dB each second.\n */\n this.decay = 0.;\n /**\n * Lowest ATH value.\n */\n this.floor = 0.;\n /**\n * ATH for sfbs in long blocks.\n */\n this.l = new_float(Encoder.SBMAX_l);\n /**\n * ATH for sfbs in short blocks.\n */\n this.s = new_float(Encoder.SBMAX_s);\n /**\n * ATH for partitioned sfb21 in long blocks.\n */\n this.psfb21 = new_float(Encoder.PSFB21);\n /**\n * ATH for partitioned sfb12 in short blocks.\n */\n this.psfb12 = new_float(Encoder.PSFB12);\n /**\n * ATH for long block convolution bands.\n */\n this.cb_l = new_float(Encoder.CBANDS);\n /**\n * ATH for short block convolution bands.\n */\n this.cb_s = new_float(Encoder.CBANDS);\n /**\n * Equal loudness weights (based on ATH).\n */\n this.eql_w = new_float(Encoder.BLKSIZE / 2);\n}\n\nmodule.exports = ATH;\n","/*\n * ReplayGainAnalysis - analyzes input samples and give the recommended dB change\n * Copyright (C) 2001 David Robinson and Glen Sawyer\n * Improvements and optimizations added by Frank Klemm, and by Marcel Muller \n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n *\n * concept and filter values by David Robinson (David@Robinson.org)\n * -- blame him if you think the idea is flawed\n * original coding by Glen Sawyer (mp3gain@hotmail.com)\n * -- blame him if you think this runs too slowly, or the coding is otherwise flawed\n *\n * lots of code improvements by Frank Klemm ( http://www.uni-jena.de/~pfk/mpp/ )\n * -- credit him for all the _good_ programming ;)\n *\n *\n * For an explanation of the concepts and the basic algorithms involved, go to:\n * http://www.replaygain.org/\n */\n\n/*\n * Here's the deal. Call\n *\n * InitGainAnalysis ( long samplefreq );\n *\n * to initialize everything. Call\n *\n * AnalyzeSamples ( var Float_t* left_samples,\n * var Float_t* right_samples,\n * size_t num_samples,\n * int num_channels );\n *\n * as many times as you want, with as many or as few samples as you want.\n * If mono, pass the sample buffer in through left_samples, leave\n * right_samples NULL, and make sure num_channels = 1.\n *\n * GetTitleGain()\n *\n * will return the recommended dB level change for all samples analyzed\n * SINCE THE LAST TIME you called GetTitleGain() OR InitGainAnalysis().\n *\n * GetAlbumGain()\n *\n * will return the recommended dB level change for all samples analyzed\n * since InitGainAnalysis() was called and finalized with GetTitleGain().\n *\n * Pseudo-code to process an album:\n *\n * Float_t l_samples [4096];\n * Float_t r_samples [4096];\n * size_t num_samples;\n * unsigned int num_songs;\n * unsigned int i;\n *\n * InitGainAnalysis ( 44100 );\n * for ( i = 1; i <= num_songs; i++ ) {\n * while ( ( num_samples = getSongSamples ( song[i], left_samples, right_samples ) ) > 0 )\n * AnalyzeSamples ( left_samples, right_samples, num_samples, 2 );\n * fprintf (\"Recommended dB change for song %2d: %+6.2 dB\\n\", i, GetTitleGain() );\n * }\n * fprintf (\"Recommended dB change for whole album: %+6.2 dB\\n\", GetAlbumGain() );\n */\n\n/*\n * So here's the main source of potential code confusion:\n *\n * The filters applied to the incoming samples are IIR filters,\n * meaning they rely on up to number of previous samples\n * AND up to number of previous filtered samples.\n *\n * I set up the AnalyzeSamples routine to minimize memory usage and interface\n * complexity. The speed isn't compromised too much (I don't think), but the\n * internal complexity is higher than it should be for such a relatively\n * simple routine.\n *\n * Optimization/clarity suggestions are welcome.\n */\nvar common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\n/**\n * Table entries per dB\n */\nGainAnalysis.STEPS_per_dB = 100.;\n/**\n * Table entries for 0...MAX_dB (normal max. values are 70...80 dB)\n */\nGainAnalysis.MAX_dB = 120.;\nGainAnalysis.GAIN_NOT_ENOUGH_SAMPLES = -24601;\nGainAnalysis.GAIN_ANALYSIS_ERROR = 0;\nGainAnalysis.GAIN_ANALYSIS_OK = 1;\nGainAnalysis.INIT_GAIN_ANALYSIS_ERROR = 0;\nGainAnalysis.INIT_GAIN_ANALYSIS_OK = 1;\n\nGainAnalysis.YULE_ORDER = 10;\nGainAnalysis.MAX_ORDER = GainAnalysis.YULE_ORDER;\n\nGainAnalysis.MAX_SAMP_FREQ = 48000;\nGainAnalysis.RMS_WINDOW_TIME_NUMERATOR = 1;\nGainAnalysis.RMS_WINDOW_TIME_DENOMINATOR = 20;\nGainAnalysis.MAX_SAMPLES_PER_WINDOW = ((GainAnalysis.MAX_SAMP_FREQ * GainAnalysis.RMS_WINDOW_TIME_NUMERATOR) / GainAnalysis.RMS_WINDOW_TIME_DENOMINATOR + 1);\n\nfunction GainAnalysis() {\n /**\n * calibration value for 89dB\n */\n var PINK_REF = 64.82;\n\n var YULE_ORDER = GainAnalysis.YULE_ORDER;\n /**\n * percentile which is louder than the proposed level\n */\n var RMS_PERCENTILE = 0.95;\n /**\n * maximum allowed sample frequency [Hz]\n */\n var MAX_SAMP_FREQ = GainAnalysis.MAX_SAMP_FREQ;\n var RMS_WINDOW_TIME_NUMERATOR = GainAnalysis.RMS_WINDOW_TIME_NUMERATOR;\n /**\n * numerator / denominator = time slice size [s]\n */\n var RMS_WINDOW_TIME_DENOMINATOR = GainAnalysis.RMS_WINDOW_TIME_DENOMINATOR;\n /**\n * max. Samples per Time slice\n */\n var MAX_SAMPLES_PER_WINDOW = GainAnalysis.MAX_SAMPLES_PER_WINDOW;\n\n\n var ABYule = [\n [0.03857599435200, -3.84664617118067, -0.02160367184185,\n 7.81501653005538, -0.00123395316851, -11.34170355132042,\n -0.00009291677959, 13.05504219327545, -0.01655260341619,\n -12.28759895145294, 0.02161526843274, 9.48293806319790,\n -0.02074045215285, -5.87257861775999, 0.00594298065125,\n 2.75465861874613, 0.00306428023191, -0.86984376593551,\n 0.00012025322027, 0.13919314567432, 0.00288463683916],\n [0.05418656406430, -3.47845948550071, -0.02911007808948,\n 6.36317777566148, -0.00848709379851, -8.54751527471874,\n -0.00851165645469, 9.47693607801280, -0.00834990904936,\n -8.81498681370155, 0.02245293253339, 6.85401540936998,\n -0.02596338512915, -4.39470996079559, 0.01624864962975,\n 2.19611684890774, -0.00240879051584, -0.75104302451432,\n 0.00674613682247, 0.13149317958808, -0.00187763777362],\n [0.15457299681924, -2.37898834973084, -0.09331049056315,\n 2.84868151156327, -0.06247880153653, -2.64577170229825,\n 0.02163541888798, 2.23697657451713, -0.05588393329856,\n -1.67148153367602, 0.04781476674921, 1.00595954808547,\n 0.00222312597743, -0.45953458054983, 0.03174092540049,\n 0.16378164858596, -0.01390589421898, -0.05032077717131,\n 0.00651420667831, 0.02347897407020, -0.00881362733839],\n [0.30296907319327, -1.61273165137247, -0.22613988682123,\n 1.07977492259970, -0.08587323730772, -0.25656257754070,\n 0.03282930172664, -0.16276719120440, -0.00915702933434,\n -0.22638893773906, -0.02364141202522, 0.39120800788284,\n -0.00584456039913, -0.22138138954925, 0.06276101321749,\n 0.04500235387352, -0.00000828086748, 0.02005851806501,\n 0.00205861885564, 0.00302439095741, -0.02950134983287],\n [0.33642304856132, -1.49858979367799, -0.25572241425570,\n 0.87350271418188, -0.11828570177555, 0.12205022308084,\n 0.11921148675203, -0.80774944671438, -0.07834489609479,\n 0.47854794562326, -0.00469977914380, -0.12453458140019,\n -0.00589500224440, -0.04067510197014, 0.05724228140351,\n 0.08333755284107, 0.00832043980773, -0.04237348025746,\n -0.01635381384540, 0.02977207319925, -0.01760176568150],\n [0.44915256608450, -0.62820619233671, -0.14351757464547,\n 0.29661783706366, -0.22784394429749, -0.37256372942400,\n -0.01419140100551, 0.00213767857124, 0.04078262797139,\n -0.42029820170918, -0.12398163381748, 0.22199650564824,\n 0.04097565135648, 0.00613424350682, 0.10478503600251,\n 0.06747620744683, -0.01863887810927, 0.05784820375801,\n -0.03193428438915, 0.03222754072173, 0.00541907748707],\n [0.56619470757641, -1.04800335126349, -0.75464456939302,\n 0.29156311971249, 0.16242137742230, -0.26806001042947,\n 0.16744243493672, 0.00819999645858, -0.18901604199609,\n 0.45054734505008, 0.30931782841830, -0.33032403314006,\n -0.27562961986224, 0.06739368333110, 0.00647310677246,\n -0.04784254229033, 0.08647503780351, 0.01639907836189,\n -0.03788984554840, 0.01807364323573, -0.00588215443421],\n [0.58100494960553, -0.51035327095184, -0.53174909058578,\n -0.31863563325245, -0.14289799034253, -0.20256413484477,\n 0.17520704835522, 0.14728154134330, 0.02377945217615,\n 0.38952639978999, 0.15558449135573, -0.23313271880868,\n -0.25344790059353, -0.05246019024463, 0.01628462406333,\n -0.02505961724053, 0.06920467763959, 0.02442357316099,\n -0.03721611395801, 0.01818801111503, -0.00749618797172],\n [0.53648789255105, -0.25049871956020, -0.42163034350696,\n -0.43193942311114, -0.00275953611929, -0.03424681017675,\n 0.04267842219415, -0.04678328784242, -0.10214864179676,\n 0.26408300200955, 0.14590772289388, 0.15113130533216,\n -0.02459864859345, -0.17556493366449, -0.11202315195388,\n -0.18823009262115, -0.04060034127000, 0.05477720428674,\n 0.04788665548180, 0.04704409688120, -0.02217936801134]];\n\n var ABButter = [\n [0.98621192462708, -1.97223372919527, -1.97242384925416,\n 0.97261396931306, 0.98621192462708],\n [0.98500175787242, -1.96977855582618, -1.97000351574484,\n 0.97022847566350, 0.98500175787242],\n [0.97938932735214, -1.95835380975398, -1.95877865470428,\n 0.95920349965459, 0.97938932735214],\n [0.97531843204928, -1.95002759149878, -1.95063686409857,\n 0.95124613669835, 0.97531843204928],\n [0.97316523498161, -1.94561023566527, -1.94633046996323,\n 0.94705070426118, 0.97316523498161],\n [0.96454515552826, -1.92783286977036, -1.92909031105652,\n 0.93034775234268, 0.96454515552826],\n [0.96009142950541, -1.91858953033784, -1.92018285901082,\n 0.92177618768381, 0.96009142950541],\n [0.95856916599601, -1.91542108074780, -1.91713833199203,\n 0.91885558323625, 0.95856916599601],\n [0.94597685600279, -1.88903307939452, -1.89195371200558,\n 0.89487434461664, 0.94597685600279]];\n\n\n /**\n * When calling this procedure, make sure that ip[-order] and op[-order]\n * point to real data\n */\n //private void filterYule(final float[] input, int inputPos, float[] output,\n //int outputPos, int nSamples, final float[] kernel) {\n function filterYule(input, inputPos, output, outputPos, nSamples, kernel) {\n\n while ((nSamples--) != 0) {\n /* 1e-10 is a hack to avoid slowdown because of denormals */\n output[outputPos] = 1e-10 + input[inputPos + 0] * kernel[0]\n - output[outputPos - 1] * kernel[1] + input[inputPos - 1]\n * kernel[2] - output[outputPos - 2] * kernel[3]\n + input[inputPos - 2] * kernel[4] - output[outputPos - 3]\n * kernel[5] + input[inputPos - 3] * kernel[6]\n - output[outputPos - 4] * kernel[7] + input[inputPos - 4]\n * kernel[8] - output[outputPos - 5] * kernel[9]\n + input[inputPos - 5] * kernel[10] - output[outputPos - 6]\n * kernel[11] + input[inputPos - 6] * kernel[12]\n - output[outputPos - 7] * kernel[13] + input[inputPos - 7]\n * kernel[14] - output[outputPos - 8] * kernel[15]\n + input[inputPos - 8] * kernel[16] - output[outputPos - 9]\n * kernel[17] + input[inputPos - 9] * kernel[18]\n - output[outputPos - 10] * kernel[19]\n + input[inputPos - 10] * kernel[20];\n ++outputPos;\n ++inputPos;\n }\n }\n\n//private void filterButter(final float[] input, int inputPos,\n// float[] output, int outputPos, int nSamples, final float[] kernel) {\n function filterButter(input, inputPos, output, outputPos, nSamples, kernel) {\n\n while ((nSamples--) != 0) {\n output[outputPos] = input[inputPos + 0] * kernel[0]\n - output[outputPos - 1] * kernel[1] + input[inputPos - 1]\n * kernel[2] - output[outputPos - 2] * kernel[3]\n + input[inputPos - 2] * kernel[4];\n ++outputPos;\n ++inputPos;\n }\n }\n\n /**\n * @return INIT_GAIN_ANALYSIS_OK if successful, INIT_GAIN_ANALYSIS_ERROR if\n * not\n */\n function ResetSampleFrequency(rgData, samplefreq) {\n /* zero out initial values */\n for (var i = 0; i < MAX_ORDER; i++)\n rgData.linprebuf[i] = rgData.lstepbuf[i] = rgData.loutbuf[i] = rgData.rinprebuf[i] = rgData.rstepbuf[i] = rgData.routbuf[i] = 0.;\n\n switch (0 | (samplefreq)) {\n case 48000:\n rgData.reqindex = 0;\n break;\n case 44100:\n rgData.reqindex = 1;\n break;\n case 32000:\n rgData.reqindex = 2;\n break;\n case 24000:\n rgData.reqindex = 3;\n break;\n case 22050:\n rgData.reqindex = 4;\n break;\n case 16000:\n rgData.reqindex = 5;\n break;\n case 12000:\n rgData.reqindex = 6;\n break;\n case 11025:\n rgData.reqindex = 7;\n break;\n case 8000:\n rgData.reqindex = 8;\n break;\n default:\n return INIT_GAIN_ANALYSIS_ERROR;\n }\n\n rgData.sampleWindow = 0 | ((samplefreq * RMS_WINDOW_TIME_NUMERATOR\n + RMS_WINDOW_TIME_DENOMINATOR - 1) / RMS_WINDOW_TIME_DENOMINATOR);\n\n rgData.lsum = 0.;\n rgData.rsum = 0.;\n rgData.totsamp = 0;\n\n Arrays.ill(rgData.A, 0);\n\n return INIT_GAIN_ANALYSIS_OK;\n }\n\n this.InitGainAnalysis = function (rgData, samplefreq) {\n if (ResetSampleFrequency(rgData, samplefreq) != INIT_GAIN_ANALYSIS_OK) {\n return INIT_GAIN_ANALYSIS_ERROR;\n }\n\n rgData.linpre = MAX_ORDER;\n rgData.rinpre = MAX_ORDER;\n rgData.lstep = MAX_ORDER;\n rgData.rstep = MAX_ORDER;\n rgData.lout = MAX_ORDER;\n rgData.rout = MAX_ORDER;\n\n Arrays.fill(rgData.B, 0);\n\n return INIT_GAIN_ANALYSIS_OK;\n };\n\n /**\n * square\n */\n function fsqr(d) {\n return d * d;\n }\n\n this.AnalyzeSamples = function (rgData, left_samples, left_samplesPos, right_samples, right_samplesPos, num_samples,\n num_channels) {\n var curleft;\n var curleftBase;\n var curright;\n var currightBase;\n var batchsamples;\n var cursamples;\n var cursamplepos;\n\n if (num_samples == 0)\n return GAIN_ANALYSIS_OK;\n\n cursamplepos = 0;\n batchsamples = num_samples;\n\n switch (num_channels) {\n case 1:\n right_samples = left_samples;\n right_samplesPos = left_samplesPos;\n break;\n case 2:\n break;\n default:\n return GAIN_ANALYSIS_ERROR;\n }\n\n if (num_samples < MAX_ORDER) {\n System.arraycopy(left_samples, left_samplesPos, rgData.linprebuf,\n MAX_ORDER, num_samples);\n System.arraycopy(right_samples, right_samplesPos, rgData.rinprebuf,\n MAX_ORDER, num_samples);\n } else {\n System.arraycopy(left_samples, left_samplesPos, rgData.linprebuf,\n MAX_ORDER, MAX_ORDER);\n System.arraycopy(right_samples, right_samplesPos, rgData.rinprebuf,\n MAX_ORDER, MAX_ORDER);\n }\n\n while (batchsamples > 0) {\n cursamples = batchsamples > rgData.sampleWindow - rgData.totsamp ? rgData.sampleWindow\n - rgData.totsamp\n : batchsamples;\n if (cursamplepos < MAX_ORDER) {\n curleft = rgData.linpre + cursamplepos;\n curleftBase = rgData.linprebuf;\n curright = rgData.rinpre + cursamplepos;\n currightBase = rgData.rinprebuf;\n if (cursamples > MAX_ORDER - cursamplepos)\n cursamples = MAX_ORDER - cursamplepos;\n } else {\n curleft = left_samplesPos + cursamplepos;\n curleftBase = left_samples;\n curright = right_samplesPos + cursamplepos;\n currightBase = right_samples;\n }\n\n filterYule(curleftBase, curleft, rgData.lstepbuf, rgData.lstep\n + rgData.totsamp, cursamples, ABYule[rgData.reqindex]);\n filterYule(currightBase, curright, rgData.rstepbuf, rgData.rstep\n + rgData.totsamp, cursamples, ABYule[rgData.reqindex]);\n\n filterButter(rgData.lstepbuf, rgData.lstep + rgData.totsamp,\n rgData.loutbuf, rgData.lout + rgData.totsamp, cursamples,\n ABButter[rgData.reqindex]);\n filterButter(rgData.rstepbuf, rgData.rstep + rgData.totsamp,\n rgData.routbuf, rgData.rout + rgData.totsamp, cursamples,\n ABButter[rgData.reqindex]);\n\n curleft = rgData.lout + rgData.totsamp;\n /* Get the squared values */\n curleftBase = rgData.loutbuf;\n curright = rgData.rout + rgData.totsamp;\n currightBase = rgData.routbuf;\n\n var i = cursamples % 8;\n while ((i--) != 0) {\n rgData.lsum += fsqr(curleftBase[curleft++]);\n rgData.rsum += fsqr(currightBase[curright++]);\n }\n i = cursamples / 8;\n while ((i--) != 0) {\n rgData.lsum += fsqr(curleftBase[curleft + 0])\n + fsqr(curleftBase[curleft + 1])\n + fsqr(curleftBase[curleft + 2])\n + fsqr(curleftBase[curleft + 3])\n + fsqr(curleftBase[curleft + 4])\n + fsqr(curleftBase[curleft + 5])\n + fsqr(curleftBase[curleft + 6])\n + fsqr(curleftBase[curleft + 7]);\n curleft += 8;\n rgData.rsum += fsqr(currightBase[curright + 0])\n + fsqr(currightBase[curright + 1])\n + fsqr(currightBase[curright + 2])\n + fsqr(currightBase[curright + 3])\n + fsqr(currightBase[curright + 4])\n + fsqr(currightBase[curright + 5])\n + fsqr(currightBase[curright + 6])\n + fsqr(currightBase[curright + 7]);\n curright += 8;\n }\n\n batchsamples -= cursamples;\n cursamplepos += cursamples;\n rgData.totsamp += cursamples;\n if (rgData.totsamp == rgData.sampleWindow) {\n /* Get the Root Mean Square (RMS) for this set of samples */\n var val = GainAnalysis.STEPS_per_dB\n * 10.\n * Math.log10((rgData.lsum + rgData.rsum)\n / rgData.totsamp * 0.5 + 1.e-37);\n var ival = (val <= 0) ? 0 : 0 | val;\n if (ival >= rgData.A.length)\n ival = rgData.A.length - 1;\n rgData.A[ival]++;\n rgData.lsum = rgData.rsum = 0.;\n\n System.arraycopy(rgData.loutbuf, rgData.totsamp,\n rgData.loutbuf, 0, MAX_ORDER);\n System.arraycopy(rgData.routbuf, rgData.totsamp,\n rgData.routbuf, 0, MAX_ORDER);\n System.arraycopy(rgData.lstepbuf, rgData.totsamp,\n rgData.lstepbuf, 0, MAX_ORDER);\n System.arraycopy(rgData.rstepbuf, rgData.totsamp,\n rgData.rstepbuf, 0, MAX_ORDER);\n rgData.totsamp = 0;\n }\n if (rgData.totsamp > rgData.sampleWindow) {\n /*\n * somehow I really screwed up: Error in programming! Contact\n * author about totsamp > sampleWindow\n */\n return GAIN_ANALYSIS_ERROR;\n }\n }\n if (num_samples < MAX_ORDER) {\n System.arraycopy(rgData.linprebuf, num_samples, rgData.linprebuf,\n 0, MAX_ORDER - num_samples);\n System.arraycopy(rgData.rinprebuf, num_samples, rgData.rinprebuf,\n 0, MAX_ORDER - num_samples);\n System.arraycopy(left_samples, left_samplesPos, rgData.linprebuf,\n MAX_ORDER - num_samples, num_samples);\n System.arraycopy(right_samples, right_samplesPos, rgData.rinprebuf,\n MAX_ORDER - num_samples, num_samples);\n } else {\n System.arraycopy(left_samples, left_samplesPos + num_samples\n - MAX_ORDER, rgData.linprebuf, 0, MAX_ORDER);\n System.arraycopy(right_samples, right_samplesPos + num_samples\n - MAX_ORDER, rgData.rinprebuf, 0, MAX_ORDER);\n }\n\n return GAIN_ANALYSIS_OK;\n };\n\n function analyzeResult(Array, len) {\n var i;\n\n var elems = 0;\n for (i = 0; i < len; i++)\n elems += Array[i];\n if (elems == 0)\n return GAIN_NOT_ENOUGH_SAMPLES;\n\n var upper = 0 | Math.ceil(elems * (1. - RMS_PERCENTILE));\n for (i = len; i-- > 0;) {\n if ((upper -= Array[i]) <= 0)\n break;\n }\n\n //return (float) ((float) PINK_REF - (float) i / (float) STEPS_per_dB);\n return (PINK_REF - i / GainAnalysis.STEPS_per_dB);\n }\n\n this.GetTitleGain = function (rgData) {\n var retval = analyzeResult(rgData.A, rgData.A.length);\n\n for (var i = 0; i < rgData.A.length; i++) {\n rgData.B[i] += rgData.A[i];\n rgData.A[i] = 0;\n }\n\n for (var i = 0; i < MAX_ORDER; i++)\n rgData.linprebuf[i] = rgData.lstepbuf[i] = rgData.loutbuf[i] = rgData.rinprebuf[i] = rgData.rstepbuf[i] = rgData.routbuf[i] = 0.;\n\n rgData.totsamp = 0;\n rgData.lsum = rgData.rsum = 0.;\n return retval;\n }\n\n}\n\nmodule.exports = GainAnalysis;\n","var common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nvar GainAnalysis = require('./GainAnalysis.js');\n\nfunction ReplayGain() {\n this.linprebuf = new_float(GainAnalysis.MAX_ORDER * 2);\n /**\n * left input samples, with pre-buffer\n */\n this.linpre = 0;\n this.lstepbuf = new_float(GainAnalysis.MAX_SAMPLES_PER_WINDOW + GainAnalysis.MAX_ORDER);\n /**\n * left \"first step\" (i.e. post first filter) samples\n */\n this.lstep = 0;\n this.loutbuf = new_float(GainAnalysis.MAX_SAMPLES_PER_WINDOW + GainAnalysis.MAX_ORDER);\n /**\n * left \"out\" (i.e. post second filter) samples\n */\n this.lout = 0;\n this.rinprebuf = new_float(GainAnalysis.MAX_ORDER * 2);\n /**\n * right input samples ...\n */\n this.rinpre = 0;\n this.rstepbuf = new_float(GainAnalysis.MAX_SAMPLES_PER_WINDOW + GainAnalysis.MAX_ORDER);\n this.rstep = 0;\n this.routbuf = new_float(GainAnalysis.MAX_SAMPLES_PER_WINDOW + GainAnalysis.MAX_ORDER);\n this.rout = 0;\n /**\n * number of samples required to reach number of milliseconds required\n * for RMS window\n */\n this.sampleWindow = 0;\n this.totsamp = 0;\n this.lsum = 0.;\n this.rsum = 0.;\n this.freqindex = 0;\n this.first = 0;\n this.A = new_int(0 | (GainAnalysis.STEPS_per_dB * GainAnalysis.MAX_dB));\n this.B = new_int(0 | (GainAnalysis.STEPS_per_dB * GainAnalysis.MAX_dB));\n\n}\n\nmodule.exports = ReplayGain;\n","function MeanBits(meanBits) {\n this.bits = meanBits;\n}\n\nmodule.exports = MeanBits;\n","var common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nvar MeanBits = require('./MeanBits.js');\nvar Encoder = require('./Encoder.js');\nvar L3Side = require('./L3Side.js');\nvar LameInternalFlags = require('./LameInternalFlags.js');\n\nfunction CBRNewIterationLoop(_quantize) {\n var quantize = _quantize;\n this.quantize = quantize;\n\tthis.iteration_loop = function(gfp, pe, ms_ener_ratio, ratio) {\n\t\tvar gfc = gfp.internal_flags;\n var l3_xmin = new_float(L3Side.SFBMAX);\n\t\tvar xrpow = new_float(576);\n\t\tvar targ_bits = new_int(2);\n\t\tvar mean_bits = 0, max_bits;\n\t\tvar l3_side = gfc.l3_side;\n\n\t\tvar mb = new MeanBits(mean_bits);\n\t\tthis.quantize.rv.ResvFrameBegin(gfp, mb);\n\t\tmean_bits = mb.bits;\n\n\t\t/* quantize! */\n\t\tfor (var gr = 0; gr < gfc.mode_gr; gr++) {\n\n\t\t\t/*\n\t\t\t * calculate needed bits\n\t\t\t */\n\t\t\tmax_bits = this.quantize.qupvt.on_pe(gfp, pe, targ_bits, mean_bits,\n\t\t\t\t\tgr, gr);\n\n\t\t\tif (gfc.mode_ext == Encoder.MPG_MD_MS_LR) {\n\t\t\t\tthis.quantize.ms_convert(gfc.l3_side, gr);\n\t\t\t\tthis.quantize.qupvt.reduce_side(targ_bits, ms_ener_ratio[gr],\n\t\t\t\t\t\tmean_bits, max_bits);\n\t\t\t}\n\n\t\t\tfor (var ch = 0; ch < gfc.channels_out; ch++) {\n\t\t\t\tvar adjust, masking_lower_db;\n\t\t\t\tvar cod_info = l3_side.tt[gr][ch];\n\n\t\t\t\tif (cod_info.block_type != Encoder.SHORT_TYPE) {\n\t\t\t\t\t// NORM, START or STOP type\n\t\t\t\t\tadjust = 0;\n\t\t\t\t\tmasking_lower_db = gfc.PSY.mask_adjust - adjust;\n\t\t\t\t} else {\n\t\t\t\t\tadjust = 0;\n\t\t\t\t\tmasking_lower_db = gfc.PSY.mask_adjust_short - adjust;\n\t\t\t\t}\n\t\t\t\tgfc.masking_lower = Math.pow(10.0,\n\t\t\t\t\t\tmasking_lower_db * 0.1);\n\n\t\t\t\t/*\n\t\t\t\t * init_outer_loop sets up cod_info, scalefac and xrpow\n\t\t\t\t */\n\t\t\t\tthis.quantize.init_outer_loop(gfc, cod_info);\n\t\t\t\tif (this.quantize.init_xrpow(gfc, cod_info, xrpow)) {\n\t\t\t\t\t/*\n\t\t\t\t\t * xr contains energy we will have to encode calculate the\n\t\t\t\t\t * masking abilities find some good quantization in\n\t\t\t\t\t * outer_loop\n\t\t\t\t\t */\n\t\t\t\t\tthis.quantize.qupvt.calc_xmin(gfp, ratio[gr][ch], cod_info,\n\t\t\t\t\t\t\tl3_xmin);\n\t\t\t\t\tthis.quantize.outer_loop(gfp, cod_info, l3_xmin, xrpow, ch,\n\t\t\t\t\t\t\ttarg_bits[ch]);\n\t\t\t\t}\n\n\t\t\t\tthis.quantize.iteration_finish_one(gfc, gr, ch);\n\t\t\t\tassert (cod_info.part2_3_length <= LameInternalFlags.MAX_BITS_PER_CHANNEL);\n\t\t\t\tassert (cod_info.part2_3_length <= targ_bits[ch]);\n\t\t\t} /* for ch */\n\t\t} /* for gr */\n\n\t\tthis.quantize.rv.ResvFrameEnd(gfc, mean_bits);\n\t}\n}\nmodule.exports = CBRNewIterationLoop;\n","function HuffCodeTab(len, max, tab, hl) {\n this.xlen = len;\n this.linmax = max;\n this.table = tab;\n this.hlen = hl;\n}\n\nvar Tables = {};\n\n\nTables.t1HB = [\n 1, 1,\n 1, 0\n];\n\nTables.t2HB = [\n 1, 2, 1,\n 3, 1, 1,\n 3, 2, 0\n];\n\nTables.t3HB = [\n 3, 2, 1,\n 1, 1, 1,\n 3, 2, 0\n];\n\nTables.t5HB = [\n 1, 2, 6, 5,\n 3, 1, 4, 4,\n 7, 5, 7, 1,\n 6, 1, 1, 0\n];\n\nTables.t6HB = [\n 7, 3, 5, 1,\n 6, 2, 3, 2,\n 5, 4, 4, 1,\n 3, 3, 2, 0\n];\n\nTables.t7HB = [\n 1, 2, 10, 19, 16, 10,\n 3, 3, 7, 10, 5, 3,\n 11, 4, 13, 17, 8, 4,\n 12, 11, 18, 15, 11, 2,\n 7, 6, 9, 14, 3, 1,\n 6, 4, 5, 3, 2, 0\n];\n\nTables.t8HB = [\n 3, 4, 6, 18, 12, 5,\n 5, 1, 2, 16, 9, 3,\n 7, 3, 5, 14, 7, 3,\n 19, 17, 15, 13, 10, 4,\n 13, 5, 8, 11, 5, 1,\n 12, 4, 4, 1, 1, 0\n];\n\nTables.t9HB = [\n 7, 5, 9, 14, 15, 7,\n 6, 4, 5, 5, 6, 7,\n 7, 6, 8, 8, 8, 5,\n 15, 6, 9, 10, 5, 1,\n 11, 7, 9, 6, 4, 1,\n 14, 4, 6, 2, 6, 0\n];\n\nTables.t10HB = [\n 1, 2, 10, 23, 35, 30, 12, 17,\n 3, 3, 8, 12, 18, 21, 12, 7,\n 11, 9, 15, 21, 32, 40, 19, 6,\n 14, 13, 22, 34, 46, 23, 18, 7,\n 20, 19, 33, 47, 27, 22, 9, 3,\n 31, 22, 41, 26, 21, 20, 5, 3,\n 14, 13, 10, 11, 16, 6, 5, 1,\n 9, 8, 7, 8, 4, 4, 2, 0\n];\n\nTables.t11HB = [\n 3, 4, 10, 24, 34, 33, 21, 15,\n 5, 3, 4, 10, 32, 17, 11, 10,\n 11, 7, 13, 18, 30, 31, 20, 5,\n 25, 11, 19, 59, 27, 18, 12, 5,\n 35, 33, 31, 58, 30, 16, 7, 5,\n 28, 26, 32, 19, 17, 15, 8, 14,\n 14, 12, 9, 13, 14, 9, 4, 1,\n 11, 4, 6, 6, 6, 3, 2, 0\n];\n\nTables.t12HB = [\n 9, 6, 16, 33, 41, 39, 38, 26,\n 7, 5, 6, 9, 23, 16, 26, 11,\n 17, 7, 11, 14, 21, 30, 10, 7,\n 17, 10, 15, 12, 18, 28, 14, 5,\n 32, 13, 22, 19, 18, 16, 9, 5,\n 40, 17, 31, 29, 17, 13, 4, 2,\n 27, 12, 11, 15, 10, 7, 4, 1,\n 27, 12, 8, 12, 6, 3, 1, 0\n];\n\nTables.t13HB = [\n 1, 5, 14, 21, 34, 51, 46, 71, 42, 52, 68, 52, 67, 44, 43, 19,\n 3, 4, 12, 19, 31, 26, 44, 33, 31, 24, 32, 24, 31, 35, 22, 14,\n 15, 13, 23, 36, 59, 49, 77, 65, 29, 40, 30, 40, 27, 33, 42, 16,\n 22, 20, 37, 61, 56, 79, 73, 64, 43, 76, 56, 37, 26, 31, 25, 14,\n 35, 16, 60, 57, 97, 75, 114, 91, 54, 73, 55, 41, 48, 53, 23, 24,\n 58, 27, 50, 96, 76, 70, 93, 84, 77, 58, 79, 29, 74, 49, 41, 17,\n 47, 45, 78, 74, 115, 94, 90, 79, 69, 83, 71, 50, 59, 38, 36, 15,\n 72, 34, 56, 95, 92, 85, 91, 90, 86, 73, 77, 65, 51, 44, 43, 42,\n 43, 20, 30, 44, 55, 78, 72, 87, 78, 61, 46, 54, 37, 30, 20, 16,\n 53, 25, 41, 37, 44, 59, 54, 81, 66, 76, 57, 54, 37, 18, 39, 11,\n 35, 33, 31, 57, 42, 82, 72, 80, 47, 58, 55, 21, 22, 26, 38, 22,\n 53, 25, 23, 38, 70, 60, 51, 36, 55, 26, 34, 23, 27, 14, 9, 7,\n 34, 32, 28, 39, 49, 75, 30, 52, 48, 40, 52, 28, 18, 17, 9, 5,\n 45, 21, 34, 64, 56, 50, 49, 45, 31, 19, 12, 15, 10, 7, 6, 3,\n 48, 23, 20, 39, 36, 35, 53, 21, 16, 23, 13, 10, 6, 1, 4, 2,\n 16, 15, 17, 27, 25, 20, 29, 11, 17, 12, 16, 8, 1, 1, 0, 1\n];\n\nTables.t15HB = [\n 7, 12, 18, 53, 47, 76, 124, 108, 89, 123, 108, 119, 107, 81, 122, 63,\n 13, 5, 16, 27, 46, 36, 61, 51, 42, 70, 52, 83, 65, 41, 59, 36,\n 19, 17, 15, 24, 41, 34, 59, 48, 40, 64, 50, 78, 62, 80, 56, 33,\n 29, 28, 25, 43, 39, 63, 55, 93, 76, 59, 93, 72, 54, 75, 50, 29,\n 52, 22, 42, 40, 67, 57, 95, 79, 72, 57, 89, 69, 49, 66, 46, 27,\n 77, 37, 35, 66, 58, 52, 91, 74, 62, 48, 79, 63, 90, 62, 40, 38,\n 125, 32, 60, 56, 50, 92, 78, 65, 55, 87, 71, 51, 73, 51, 70, 30,\n 109, 53, 49, 94, 88, 75, 66, 122, 91, 73, 56, 42, 64, 44, 21, 25,\n 90, 43, 41, 77, 73, 63, 56, 92, 77, 66, 47, 67, 48, 53, 36, 20,\n 71, 34, 67, 60, 58, 49, 88, 76, 67, 106, 71, 54, 38, 39, 23, 15,\n 109, 53, 51, 47, 90, 82, 58, 57, 48, 72, 57, 41, 23, 27, 62, 9,\n 86, 42, 40, 37, 70, 64, 52, 43, 70, 55, 42, 25, 29, 18, 11, 11,\n 118, 68, 30, 55, 50, 46, 74, 65, 49, 39, 24, 16, 22, 13, 14, 7,\n 91, 44, 39, 38, 34, 63, 52, 45, 31, 52, 28, 19, 14, 8, 9, 3,\n 123, 60, 58, 53, 47, 43, 32, 22, 37, 24, 17, 12, 15, 10, 2, 1,\n 71, 37, 34, 30, 28, 20, 17, 26, 21, 16, 10, 6, 8, 6, 2, 0\n];\n\nTables.t16HB = [\n 1, 5, 14, 44, 74, 63, 110, 93, 172, 149, 138, 242, 225, 195, 376, 17,\n 3, 4, 12, 20, 35, 62, 53, 47, 83, 75, 68, 119, 201, 107, 207, 9,\n 15, 13, 23, 38, 67, 58, 103, 90, 161, 72, 127, 117, 110, 209, 206, 16,\n 45, 21, 39, 69, 64, 114, 99, 87, 158, 140, 252, 212, 199, 387, 365, 26,\n 75, 36, 68, 65, 115, 101, 179, 164, 155, 264, 246, 226, 395, 382, 362, 9,\n 66, 30, 59, 56, 102, 185, 173, 265, 142, 253, 232, 400, 388, 378, 445, 16,\n 111, 54, 52, 100, 184, 178, 160, 133, 257, 244, 228, 217, 385, 366, 715, 10,\n 98, 48, 91, 88, 165, 157, 148, 261, 248, 407, 397, 372, 380, 889, 884, 8,\n 85, 84, 81, 159, 156, 143, 260, 249, 427, 401, 392, 383, 727, 713, 708, 7,\n 154, 76, 73, 141, 131, 256, 245, 426, 406, 394, 384, 735, 359, 710, 352, 11,\n 139, 129, 67, 125, 247, 233, 229, 219, 393, 743, 737, 720, 885, 882, 439, 4,\n 243, 120, 118, 115, 227, 223, 396, 746, 742, 736, 721, 712, 706, 223, 436, 6,\n 202, 224, 222, 218, 216, 389, 386, 381, 364, 888, 443, 707, 440, 437, 1728, 4,\n 747, 211, 210, 208, 370, 379, 734, 723, 714, 1735, 883, 877, 876, 3459, 865, 2,\n 377, 369, 102, 187, 726, 722, 358, 711, 709, 866, 1734, 871, 3458, 870, 434, 0,\n 12, 10, 7, 11, 10, 17, 11, 9, 13, 12, 10, 7, 5, 3, 1, 3\n];\n\nTables.t24HB = [\n 15, 13, 46, 80, 146, 262, 248, 434, 426, 669, 653, 649, 621, 517, 1032, 88,\n 14, 12, 21, 38, 71, 130, 122, 216, 209, 198, 327, 345, 319, 297, 279, 42,\n 47, 22, 41, 74, 68, 128, 120, 221, 207, 194, 182, 340, 315, 295, 541, 18,\n 81, 39, 75, 70, 134, 125, 116, 220, 204, 190, 178, 325, 311, 293, 271, 16,\n 147, 72, 69, 135, 127, 118, 112, 210, 200, 188, 352, 323, 306, 285, 540, 14,\n 263, 66, 129, 126, 119, 114, 214, 202, 192, 180, 341, 317, 301, 281, 262, 12,\n 249, 123, 121, 117, 113, 215, 206, 195, 185, 347, 330, 308, 291, 272, 520, 10,\n 435, 115, 111, 109, 211, 203, 196, 187, 353, 332, 313, 298, 283, 531, 381, 17,\n 427, 212, 208, 205, 201, 193, 186, 177, 169, 320, 303, 286, 268, 514, 377, 16,\n 335, 199, 197, 191, 189, 181, 174, 333, 321, 305, 289, 275, 521, 379, 371, 11,\n 668, 184, 183, 179, 175, 344, 331, 314, 304, 290, 277, 530, 383, 373, 366, 10,\n 652, 346, 171, 168, 164, 318, 309, 299, 287, 276, 263, 513, 375, 368, 362, 6,\n 648, 322, 316, 312, 307, 302, 292, 284, 269, 261, 512, 376, 370, 364, 359, 4,\n 620, 300, 296, 294, 288, 282, 273, 266, 515, 380, 374, 369, 365, 361, 357, 2,\n 1033, 280, 278, 274, 267, 264, 259, 382, 378, 372, 367, 363, 360, 358, 356, 0,\n 43, 20, 19, 17, 15, 13, 11, 9, 7, 6, 4, 7, 5, 3, 1, 3\n];\n\nTables.t32HB = [\n 1 << 0, 5 << 1, 4 << 1, 5 << 2, 6 << 1, 5 << 2, 4 << 2, 4 << 3,\n 7 << 1, 3 << 2, 6 << 2, 0 << 3, 7 << 2, 2 << 3, 3 << 3, 1 << 4\n];\n\nTables.t33HB = [\n 15 << 0, 14 << 1, 13 << 1, 12 << 2, 11 << 1, 10 << 2, 9 << 2, 8 << 3,\n 7 << 1, 6 << 2, 5 << 2, 4 << 3, 3 << 2, 2 << 3, 1 << 3, 0 << 4\n];\n\nTables.t1l = [\n 1, 4,\n 3, 5\n];\n\nTables.t2l = [\n 1, 4, 7,\n 4, 5, 7,\n 6, 7, 8\n];\n\nTables.t3l = [\n 2, 3, 7,\n 4, 4, 7,\n 6, 7, 8\n];\n\nTables.t5l = [\n 1, 4, 7, 8,\n 4, 5, 8, 9,\n 7, 8, 9, 10,\n 8, 8, 9, 10\n];\n\nTables.t6l = [\n 3, 4, 6, 8,\n 4, 4, 6, 7,\n 5, 6, 7, 8,\n 7, 7, 8, 9\n];\n\nTables.t7l = [\n 1, 4, 7, 9, 9, 10,\n 4, 6, 8, 9, 9, 10,\n 7, 7, 9, 10, 10, 11,\n 8, 9, 10, 11, 11, 11,\n 8, 9, 10, 11, 11, 12,\n 9, 10, 11, 12, 12, 12\n];\n\nTables.t8l = [\n 2, 4, 7, 9, 9, 10,\n 4, 4, 6, 10, 10, 10,\n 7, 6, 8, 10, 10, 11,\n 9, 10, 10, 11, 11, 12,\n 9, 9, 10, 11, 12, 12,\n 10, 10, 11, 11, 13, 13\n];\n\nTables.t9l = [\n 3, 4, 6, 7, 9, 10,\n 4, 5, 6, 7, 8, 10,\n 5, 6, 7, 8, 9, 10,\n 7, 7, 8, 9, 9, 10,\n 8, 8, 9, 9, 10, 11,\n 9, 9, 10, 10, 11, 11\n];\n\nTables.t10l = [\n 1, 4, 7, 9, 10, 10, 10, 11,\n 4, 6, 8, 9, 10, 11, 10, 10,\n 7, 8, 9, 10, 11, 12, 11, 11,\n 8, 9, 10, 11, 12, 12, 11, 12,\n 9, 10, 11, 12, 12, 12, 12, 12,\n 10, 11, 12, 12, 13, 13, 12, 13,\n 9, 10, 11, 12, 12, 12, 13, 13,\n 10, 10, 11, 12, 12, 13, 13, 13\n];\n\nTables.t11l = [\n 2, 4, 6, 8, 9, 10, 9, 10,\n 4, 5, 6, 8, 10, 10, 9, 10,\n 6, 7, 8, 9, 10, 11, 10, 10,\n 8, 8, 9, 11, 10, 12, 10, 11,\n 9, 10, 10, 11, 11, 12, 11, 12,\n 9, 10, 11, 12, 12, 13, 12, 13,\n 9, 9, 9, 10, 11, 12, 12, 12,\n 9, 9, 10, 11, 12, 12, 12, 12\n];\n\nTables.t12l = [\n 4, 4, 6, 8, 9, 10, 10, 10,\n 4, 5, 6, 7, 9, 9, 10, 10,\n 6, 6, 7, 8, 9, 10, 9, 10,\n 7, 7, 8, 8, 9, 10, 10, 10,\n 8, 8, 9, 9, 10, 10, 10, 11,\n 9, 9, 10, 10, 10, 11, 10, 11,\n 9, 9, 9, 10, 10, 11, 11, 12,\n 10, 10, 10, 11, 11, 11, 11, 12\n];\n\nTables.t13l = [\n 1, 5, 7, 8, 9, 10, 10, 11, 10, 11, 12, 12, 13, 13, 14, 14,\n 4, 6, 8, 9, 10, 10, 11, 11, 11, 11, 12, 12, 13, 14, 14, 14,\n 7, 8, 9, 10, 11, 11, 12, 12, 11, 12, 12, 13, 13, 14, 15, 15,\n 8, 9, 10, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 15, 15,\n 9, 9, 11, 11, 12, 12, 13, 13, 12, 13, 13, 14, 14, 15, 15, 16,\n 10, 10, 11, 12, 12, 12, 13, 13, 13, 13, 14, 13, 15, 15, 16, 16,\n 10, 11, 12, 12, 13, 13, 13, 13, 13, 14, 14, 14, 15, 15, 16, 16,\n 11, 11, 12, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 16, 18, 18,\n 10, 10, 11, 12, 12, 13, 13, 14, 14, 14, 14, 15, 15, 16, 17, 17,\n 11, 11, 12, 12, 13, 13, 13, 15, 14, 15, 15, 16, 16, 16, 18, 17,\n 11, 12, 12, 13, 13, 14, 14, 15, 14, 15, 16, 15, 16, 17, 18, 19,\n 12, 12, 12, 13, 14, 14, 14, 14, 15, 15, 15, 16, 17, 17, 17, 18,\n 12, 13, 13, 14, 14, 15, 14, 15, 16, 16, 17, 17, 17, 18, 18, 18,\n 13, 13, 14, 15, 15, 15, 16, 16, 16, 16, 16, 17, 18, 17, 18, 18,\n 14, 14, 14, 15, 15, 15, 17, 16, 16, 19, 17, 17, 17, 19, 18, 18,\n 13, 14, 15, 16, 16, 16, 17, 16, 17, 17, 18, 18, 21, 20, 21, 18\n];\n\nTables.t15l = [\n 3, 5, 6, 8, 8, 9, 10, 10, 10, 11, 11, 12, 12, 12, 13, 14,\n 5, 5, 7, 8, 9, 9, 10, 10, 10, 11, 11, 12, 12, 12, 13, 13,\n 6, 7, 7, 8, 9, 9, 10, 10, 10, 11, 11, 12, 12, 13, 13, 13,\n 7, 8, 8, 9, 9, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13,\n 8, 8, 9, 9, 10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 13, 13,\n 9, 9, 9, 10, 10, 10, 11, 11, 11, 11, 12, 12, 13, 13, 13, 14,\n 10, 9, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 13, 14, 14,\n 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 14,\n 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 14, 14, 14,\n 10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14,\n 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 13, 14, 15, 14,\n 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 15,\n 12, 12, 11, 12, 12, 12, 13, 13, 13, 13, 13, 13, 14, 14, 15, 15,\n 12, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 14, 15, 15,\n 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 14, 15,\n 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 15, 15, 15, 15\n];\n\nTables.t16_5l = [\n 1, 5, 7, 9, 10, 10, 11, 11, 12, 12, 12, 13, 13, 13, 14, 11,\n 4, 6, 8, 9, 10, 11, 11, 11, 12, 12, 12, 13, 14, 13, 14, 11,\n 7, 8, 9, 10, 11, 11, 12, 12, 13, 12, 13, 13, 13, 14, 14, 12,\n 9, 9, 10, 11, 11, 12, 12, 12, 13, 13, 14, 14, 14, 15, 15, 13,\n 10, 10, 11, 11, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 12,\n 10, 10, 11, 11, 12, 13, 13, 14, 13, 14, 14, 15, 15, 15, 16, 13,\n 11, 11, 11, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 16, 13,\n 11, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 15, 15, 17, 17, 13,\n 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 15, 15, 16, 16, 16, 13,\n 12, 12, 12, 13, 13, 14, 14, 15, 15, 15, 15, 16, 15, 16, 15, 14,\n 12, 13, 12, 13, 14, 14, 14, 14, 15, 16, 16, 16, 17, 17, 16, 13,\n 13, 13, 13, 13, 14, 14, 15, 16, 16, 16, 16, 16, 16, 15, 16, 14,\n 13, 14, 14, 14, 14, 15, 15, 15, 15, 17, 16, 16, 16, 16, 18, 14,\n 15, 14, 14, 14, 15, 15, 16, 16, 16, 18, 17, 17, 17, 19, 17, 14,\n 14, 15, 13, 14, 16, 16, 15, 16, 16, 17, 18, 17, 19, 17, 16, 14,\n 11, 11, 11, 12, 12, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 12\n];\n\nTables.t16l = [\n 1, 5, 7, 9, 10, 10, 11, 11, 12, 12, 12, 13, 13, 13, 14, 10,\n 4, 6, 8, 9, 10, 11, 11, 11, 12, 12, 12, 13, 14, 13, 14, 10,\n 7, 8, 9, 10, 11, 11, 12, 12, 13, 12, 13, 13, 13, 14, 14, 11,\n 9, 9, 10, 11, 11, 12, 12, 12, 13, 13, 14, 14, 14, 15, 15, 12,\n 10, 10, 11, 11, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 11,\n 10, 10, 11, 11, 12, 13, 13, 14, 13, 14, 14, 15, 15, 15, 16, 12,\n 11, 11, 11, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 16, 12,\n 11, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 15, 15, 17, 17, 12,\n 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 15, 15, 16, 16, 16, 12,\n 12, 12, 12, 13, 13, 14, 14, 15, 15, 15, 15, 16, 15, 16, 15, 13,\n 12, 13, 12, 13, 14, 14, 14, 14, 15, 16, 16, 16, 17, 17, 16, 12,\n 13, 13, 13, 13, 14, 14, 15, 16, 16, 16, 16, 16, 16, 15, 16, 13,\n 13, 14, 14, 14, 14, 15, 15, 15, 15, 17, 16, 16, 16, 16, 18, 13,\n 15, 14, 14, 14, 15, 15, 16, 16, 16, 18, 17, 17, 17, 19, 17, 13,\n 14, 15, 13, 14, 16, 16, 15, 16, 16, 17, 18, 17, 19, 17, 16, 13,\n 10, 10, 10, 11, 11, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 10\n];\n\nTables.t24l = [\n 4, 5, 7, 8, 9, 10, 10, 11, 11, 12, 12, 12, 12, 12, 13, 10,\n 5, 6, 7, 8, 9, 10, 10, 11, 11, 11, 12, 12, 12, 12, 12, 10,\n 7, 7, 8, 9, 9, 10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 9,\n 8, 8, 9, 9, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 9,\n 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 12, 12, 12, 12, 13, 9,\n 10, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 9,\n 10, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 9,\n 11, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 10,\n 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 10,\n 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 10,\n 12, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 10,\n 12, 12, 11, 11, 11, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 10,\n 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 10,\n 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 10,\n 13, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 10,\n 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 6\n];\n\nTables.t32l = [\n 1 + 0, 4 + 1, 4 + 1, 5 + 2, 4 + 1, 6 + 2, 5 + 2, 6 + 3,\n 4 + 1, 5 + 2, 5 + 2, 6 + 3, 5 + 2, 6 + 3, 6 + 3, 6 + 4\n];\n\nTables.t33l = [\n 4 + 0, 4 + 1, 4 + 1, 4 + 2, 4 + 1, 4 + 2, 4 + 2, 4 + 3,\n 4 + 1, 4 + 2, 4 + 2, 4 + 3, 4 + 2, 4 + 3, 4 + 3, 4 + 4\n];\n\nTables.ht = [\n /* xlen, linmax, table, hlen */\n new HuffCodeTab(0, 0, null, null),\n new HuffCodeTab(2, 0, Tables.t1HB, Tables.t1l),\n new HuffCodeTab(3, 0, Tables.t2HB, Tables.t2l),\n new HuffCodeTab(3, 0, Tables.t3HB, Tables.t3l),\n new HuffCodeTab(0, 0, null, null), /* Apparently not used */\n new HuffCodeTab(4, 0, Tables.t5HB, Tables.t5l),\n new HuffCodeTab(4, 0, Tables.t6HB, Tables.t6l),\n new HuffCodeTab(6, 0, Tables.t7HB, Tables.t7l),\n new HuffCodeTab(6, 0, Tables.t8HB, Tables.t8l),\n new HuffCodeTab(6, 0, Tables.t9HB, Tables.t9l),\n new HuffCodeTab(8, 0, Tables.t10HB, Tables.t10l),\n new HuffCodeTab(8, 0, Tables.t11HB, Tables.t11l),\n new HuffCodeTab(8, 0, Tables.t12HB, Tables.t12l),\n new HuffCodeTab(16, 0, Tables.t13HB, Tables.t13l),\n new HuffCodeTab(0, 0, null, Tables.t16_5l), /* Apparently not used */\n new HuffCodeTab(16, 0, Tables.t15HB, Tables.t15l),\n\n new HuffCodeTab(1, 1, Tables.t16HB, Tables.t16l),\n new HuffCodeTab(2, 3, Tables.t16HB, Tables.t16l),\n new HuffCodeTab(3, 7, Tables.t16HB, Tables.t16l),\n new HuffCodeTab(4, 15, Tables.t16HB, Tables.t16l),\n new HuffCodeTab(6, 63, Tables.t16HB, Tables.t16l),\n new HuffCodeTab(8, 255, Tables.t16HB, Tables.t16l),\n new HuffCodeTab(10, 1023, Tables.t16HB, Tables.t16l),\n new HuffCodeTab(13, 8191, Tables.t16HB, Tables.t16l),\n\n new HuffCodeTab(4, 15, Tables.t24HB, Tables.t24l),\n new HuffCodeTab(5, 31, Tables.t24HB, Tables.t24l),\n new HuffCodeTab(6, 63, Tables.t24HB, Tables.t24l),\n new HuffCodeTab(7, 127, Tables.t24HB, Tables.t24l),\n new HuffCodeTab(8, 255, Tables.t24HB, Tables.t24l),\n new HuffCodeTab(9, 511, Tables.t24HB, Tables.t24l),\n new HuffCodeTab(11, 2047, Tables.t24HB, Tables.t24l),\n new HuffCodeTab(13, 8191, Tables.t24HB, Tables.t24l),\n\n new HuffCodeTab(0, 0, Tables.t32HB, Tables.t32l),\n new HuffCodeTab(0, 0, Tables.t33HB, Tables.t33l),\n];\n\n/**\n * \n * for (i = 0; i < 16*16; i++) [\n * largetbl[i] = ((ht[16].hlen[i]) << 16) + ht[24].hlen[i];\n * ]\n * \n *\n */\nTables.largetbl = [\n 0x010004, 0x050005, 0x070007, 0x090008, 0x0a0009, 0x0a000a, 0x0b000a, 0x0b000b,\n 0x0c000b, 0x0c000c, 0x0c000c, 0x0d000c, 0x0d000c, 0x0d000c, 0x0e000d, 0x0a000a,\n 0x040005, 0x060006, 0x080007, 0x090008, 0x0a0009, 0x0b000a, 0x0b000a, 0x0b000b,\n 0x0c000b, 0x0c000b, 0x0c000c, 0x0d000c, 0x0e000c, 0x0d000c, 0x0e000c, 0x0a000a,\n 0x070007, 0x080007, 0x090008, 0x0a0009, 0x0b0009, 0x0b000a, 0x0c000a, 0x0c000b,\n 0x0d000b, 0x0c000b, 0x0d000b, 0x0d000c, 0x0d000c, 0x0e000c, 0x0e000d, 0x0b0009,\n 0x090008, 0x090008, 0x0a0009, 0x0b0009, 0x0b000a, 0x0c000a, 0x0c000a, 0x0c000b,\n 0x0d000b, 0x0d000b, 0x0e000b, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x0c0009,\n 0x0a0009, 0x0a0009, 0x0b0009, 0x0b000a, 0x0c000a, 0x0c000a, 0x0d000a, 0x0d000b,\n 0x0d000b, 0x0e000b, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x0f000d, 0x0b0009,\n 0x0a000a, 0x0a0009, 0x0b000a, 0x0b000a, 0x0c000a, 0x0d000a, 0x0d000b, 0x0e000b,\n 0x0d000b, 0x0e000b, 0x0e000c, 0x0f000c, 0x0f000c, 0x0f000c, 0x10000c, 0x0c0009,\n 0x0b000a, 0x0b000a, 0x0b000a, 0x0c000a, 0x0d000a, 0x0d000b, 0x0d000b, 0x0d000b,\n 0x0e000b, 0x0e000c, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x10000d, 0x0c0009,\n 0x0b000b, 0x0b000a, 0x0c000a, 0x0c000a, 0x0d000b, 0x0d000b, 0x0d000b, 0x0e000b,\n 0x0e000c, 0x0f000c, 0x0f000c, 0x0f000c, 0x0f000c, 0x11000d, 0x11000d, 0x0c000a,\n 0x0b000b, 0x0c000b, 0x0c000b, 0x0d000b, 0x0d000b, 0x0d000b, 0x0e000b, 0x0e000b,\n 0x0f000b, 0x0f000c, 0x0f000c, 0x0f000c, 0x10000c, 0x10000d, 0x10000d, 0x0c000a,\n 0x0c000b, 0x0c000b, 0x0c000b, 0x0d000b, 0x0d000b, 0x0e000b, 0x0e000b, 0x0f000c,\n 0x0f000c, 0x0f000c, 0x0f000c, 0x10000c, 0x0f000d, 0x10000d, 0x0f000d, 0x0d000a,\n 0x0c000c, 0x0d000b, 0x0c000b, 0x0d000b, 0x0e000b, 0x0e000c, 0x0e000c, 0x0e000c,\n 0x0f000c, 0x10000c, 0x10000c, 0x10000d, 0x11000d, 0x11000d, 0x10000d, 0x0c000a,\n 0x0d000c, 0x0d000c, 0x0d000b, 0x0d000b, 0x0e000b, 0x0e000c, 0x0f000c, 0x10000c,\n 0x10000c, 0x10000c, 0x10000c, 0x10000d, 0x10000d, 0x0f000d, 0x10000d, 0x0d000a,\n 0x0d000c, 0x0e000c, 0x0e000c, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x0f000c,\n 0x0f000c, 0x11000c, 0x10000d, 0x10000d, 0x10000d, 0x10000d, 0x12000d, 0x0d000a,\n 0x0f000c, 0x0e000c, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x10000c, 0x10000c,\n 0x10000d, 0x12000d, 0x11000d, 0x11000d, 0x11000d, 0x13000d, 0x11000d, 0x0d000a,\n 0x0e000d, 0x0f000c, 0x0d000c, 0x0e000c, 0x10000c, 0x10000c, 0x0f000c, 0x10000d,\n 0x10000d, 0x11000d, 0x12000d, 0x11000d, 0x13000d, 0x11000d, 0x10000d, 0x0d000a,\n 0x0a0009, 0x0a0009, 0x0a0009, 0x0b0009, 0x0b0009, 0x0c0009, 0x0c0009, 0x0c0009,\n 0x0d0009, 0x0d0009, 0x0d0009, 0x0d000a, 0x0d000a, 0x0d000a, 0x0d000a, 0x0a0006\n];\n/**\n * \n * for (i = 0; i < 3*3; i++) [\n * table23[i] = ((ht[2].hlen[i]) << 16) + ht[3].hlen[i];\n * ]\n * \n *\n */\nTables.table23 = [\n 0x010002, 0x040003, 0x070007,\n 0x040004, 0x050004, 0x070007,\n 0x060006, 0x070007, 0x080008\n];\n\n/**\n * \n * for (i = 0; i < 4*4; i++) [\n * table56[i] = ((ht[5].hlen[i]) << 16) + ht[6].hlen[i];\n * ]\n * \n *\n */\nTables.table56 = [\n 0x010003, 0x040004, 0x070006, 0x080008, 0x040004, 0x050004, 0x080006, 0x090007,\n 0x070005, 0x080006, 0x090007, 0x0a0008, 0x080007, 0x080007, 0x090008, 0x0a0009\n];\n\nTables.bitrate_table = [\n [0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, -1], /* MPEG 2 */\n [0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, -1], /* MPEG 1 */\n [0, 8, 16, 24, 32, 40, 48, 56, 64, -1, -1, -1, -1, -1, -1, -1], /* MPEG 2.5 */\n];\n\n/**\n * MPEG 2, MPEG 1, MPEG 2.5.\n */\nTables.samplerate_table = [\n [22050, 24000, 16000, -1],\n [44100, 48000, 32000, -1],\n [11025, 12000, 8000, -1],\n];\n\n/**\n * This is the scfsi_band table from 2.4.2.7 of the IS.\n */\nTables.scfsi_band = [0, 6, 11, 16, 21];\n\nmodule.exports = Tables;\n","/*\n * quantize_pvt source file\n *\n * Copyright (c) 1999-2002 Takehiro Tominaga\n * Copyright (c) 2000-2002 Robert Hegemann\n * Copyright (c) 2001 Naoki Shibata\n * Copyright (c) 2002-2005 Gabriel Bouvigne\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n * Library General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the\n * Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n * Boston, MA 02111-1307, USA.\n */\n\n/* $Id: QuantizePVT.java,v 1.24 2011/05/24 20:48:06 kenchis Exp $ */\nvar ScaleFac = require('./ScaleFac.js');\nvar common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nvar Encoder = require('./Encoder.js');\nvar MeanBits = require('./MeanBits.js');\nvar LameInternalFlags = require('./LameInternalFlags.js');\n\nQuantizePVT.Q_MAX = (256 + 1);\nQuantizePVT.Q_MAX2 = 116;\nQuantizePVT.LARGE_BITS = 100000;\nQuantizePVT.IXMAX_VAL = 8206;\n\nfunction QuantizePVT() {\n\n var tak = null;\n var rv = null;\n var psy = null;\n\n this.setModules = function (_tk, _rv, _psy) {\n tak = _tk;\n rv = _rv;\n psy = _psy;\n };\n\n function POW20(x) {\n assert(0 <= (x + QuantizePVT.Q_MAX2) && x < QuantizePVT.Q_MAX);\n return pow20[x + QuantizePVT.Q_MAX2];\n }\n\n this.IPOW20 = function (x) {\n assert(0 <= x && x < QuantizePVT.Q_MAX);\n return ipow20[x];\n }\n\n /**\n * smallest such that 1.0+DBL_EPSILON != 1.0\n */\n var DBL_EPSILON = 2.2204460492503131e-016;\n\n /**\n * ix always <= 8191+15. see count_bits()\n */\n var IXMAX_VAL = QuantizePVT.IXMAX_VAL;\n\n var PRECALC_SIZE = (IXMAX_VAL + 2);\n\n var Q_MAX = QuantizePVT.Q_MAX;\n\n\n /**\n * \n * minimum possible number of\n * -cod_info.global_gain + ((scalefac[] + (cod_info.preflag ? pretab[sfb] : 0))\n * << (cod_info.scalefac_scale + 1)) + cod_info.subblock_gain[cod_info.window[sfb]] * 8;\n *\n * for long block, 0+((15+3)<<2) = 18*4 = 72\n * for short block, 0+(15<<2)+7*8 = 15*4+56 = 116\n * \n */\n var Q_MAX2 = QuantizePVT.Q_MAX2;\n\n var LARGE_BITS = QuantizePVT.LARGE_BITS;\n\n\n /**\n * Assuming dynamic range=96dB, this value should be 92\n */\n var NSATHSCALE = 100;\n\n /**\n * The following table is used to implement the scalefactor partitioning for\n * MPEG2 as described in section 2.4.3.2 of the IS. The indexing corresponds\n * to the way the tables are presented in the IS:\n *\n * [table_number][row_in_table][column of nr_of_sfb]\n */\n this.nr_of_sfb_block = [\n [[6, 5, 5, 5], [9, 9, 9, 9], [6, 9, 9, 9]],\n [[6, 5, 7, 3], [9, 9, 12, 6], [6, 9, 12, 6]],\n [[11, 10, 0, 0], [18, 18, 0, 0], [15, 18, 0, 0]],\n [[7, 7, 7, 0], [12, 12, 12, 0], [6, 15, 12, 0]],\n [[6, 6, 6, 3], [12, 9, 9, 6], [6, 12, 9, 6]],\n [[8, 8, 5, 0], [15, 12, 9, 0], [6, 18, 9, 0]]];\n\n /**\n * Table B.6: layer3 preemphasis\n */\n var pretab = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,\n 2, 2, 3, 3, 3, 2, 0];\n this.pretab = pretab;\n\n /**\n * Here are MPEG1 Table B.8 and MPEG2 Table B.1 -- Layer III scalefactor\n * bands.
\n * Index into this using a method such as:
\n * idx = fr_ps.header.sampling_frequency + (fr_ps.header.version * 3)\n */\n this.sfBandIndex = [\n // Table B.2.b: 22.05 kHz\n new ScaleFac([0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 116, 140, 168, 200, 238, 284, 336, 396, 464,\n 522, 576],\n [0, 4, 8, 12, 18, 24, 32, 42, 56, 74, 100, 132, 174, 192]\n , [0, 0, 0, 0, 0, 0, 0] // sfb21 pseudo sub bands\n , [0, 0, 0, 0, 0, 0, 0] // sfb12 pseudo sub bands\n ),\n /* Table B.2.c: 24 kHz */ /* docs: 332. mpg123(broken): 330 */\n new ScaleFac([0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 114, 136, 162, 194, 232, 278, 332, 394, 464,\n 540, 576],\n [0, 4, 8, 12, 18, 26, 36, 48, 62, 80, 104, 136, 180, 192]\n , [0, 0, 0, 0, 0, 0, 0] /* sfb21 pseudo sub bands */\n , [0, 0, 0, 0, 0, 0, 0] /* sfb12 pseudo sub bands */\n ),\n /* Table B.2.a: 16 kHz */\n new ScaleFac([0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 116, 140, 168, 200, 238, 284, 336, 396, 464,\n 522, 576],\n [0, 4, 8, 12, 18, 26, 36, 48, 62, 80, 104, 134, 174, 192]\n , [0, 0, 0, 0, 0, 0, 0] /* sfb21 pseudo sub bands */\n , [0, 0, 0, 0, 0, 0, 0] /* sfb12 pseudo sub bands */\n ),\n /* Table B.8.b: 44.1 kHz */\n new ScaleFac([0, 4, 8, 12, 16, 20, 24, 30, 36, 44, 52, 62, 74, 90, 110, 134, 162, 196, 238, 288, 342, 418,\n 576],\n [0, 4, 8, 12, 16, 22, 30, 40, 52, 66, 84, 106, 136, 192]\n , [0, 0, 0, 0, 0, 0, 0] /* sfb21 pseudo sub bands */\n , [0, 0, 0, 0, 0, 0, 0] /* sfb12 pseudo sub bands */\n ),\n /* Table B.8.c: 48 kHz */\n new ScaleFac([0, 4, 8, 12, 16, 20, 24, 30, 36, 42, 50, 60, 72, 88, 106, 128, 156, 190, 230, 276, 330, 384,\n 576],\n [0, 4, 8, 12, 16, 22, 28, 38, 50, 64, 80, 100, 126, 192]\n , [0, 0, 0, 0, 0, 0, 0] /* sfb21 pseudo sub bands */\n , [0, 0, 0, 0, 0, 0, 0] /* sfb12 pseudo sub bands */\n ),\n /* Table B.8.a: 32 kHz */\n new ScaleFac([0, 4, 8, 12, 16, 20, 24, 30, 36, 44, 54, 66, 82, 102, 126, 156, 194, 240, 296, 364, 448, 550,\n 576],\n [0, 4, 8, 12, 16, 22, 30, 42, 58, 78, 104, 138, 180, 192]\n , [0, 0, 0, 0, 0, 0, 0] /* sfb21 pseudo sub bands */\n , [0, 0, 0, 0, 0, 0, 0] /* sfb12 pseudo sub bands */\n ),\n /* MPEG-2.5 11.025 kHz */\n new ScaleFac([0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 116, 140, 168, 200, 238, 284, 336, 396, 464,\n 522, 576],\n [0 / 3, 12 / 3, 24 / 3, 36 / 3, 54 / 3, 78 / 3, 108 / 3, 144 / 3, 186 / 3, 240 / 3, 312 / 3,\n 402 / 3, 522 / 3, 576 / 3]\n , [0, 0, 0, 0, 0, 0, 0] /* sfb21 pseudo sub bands */\n , [0, 0, 0, 0, 0, 0, 0] /* sfb12 pseudo sub bands */\n ),\n /* MPEG-2.5 12 kHz */\n new ScaleFac([0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 116, 140, 168, 200, 238, 284, 336, 396, 464,\n 522, 576],\n [0 / 3, 12 / 3, 24 / 3, 36 / 3, 54 / 3, 78 / 3, 108 / 3, 144 / 3, 186 / 3, 240 / 3, 312 / 3,\n 402 / 3, 522 / 3, 576 / 3]\n , [0, 0, 0, 0, 0, 0, 0] /* sfb21 pseudo sub bands */\n , [0, 0, 0, 0, 0, 0, 0] /* sfb12 pseudo sub bands */\n ),\n /* MPEG-2.5 8 kHz */\n new ScaleFac([0, 12, 24, 36, 48, 60, 72, 88, 108, 132, 160, 192, 232, 280, 336, 400, 476, 566, 568, 570,\n 572, 574, 576],\n [0 / 3, 24 / 3, 48 / 3, 72 / 3, 108 / 3, 156 / 3, 216 / 3, 288 / 3, 372 / 3, 480 / 3, 486 / 3,\n 492 / 3, 498 / 3, 576 / 3]\n , [0, 0, 0, 0, 0, 0, 0] /* sfb21 pseudo sub bands */\n , [0, 0, 0, 0, 0, 0, 0] /* sfb12 pseudo sub bands */\n )\n ];\n\n var pow20 = new_float(Q_MAX + Q_MAX2 + 1);\n var ipow20 = new_float(Q_MAX);\n var pow43 = new_float(PRECALC_SIZE);\n\n var adj43 = new_float(PRECALC_SIZE);\n this.adj43 = adj43;\n\n /**\n *
\n     * compute the ATH for each scalefactor band cd range: 0..96db\n     *\n     * Input: 3.3kHz signal 32767 amplitude (3.3kHz is where ATH is smallest =\n     * -5db) longblocks: sfb=12 en0/bw=-11db max_en0 = 1.3db shortblocks: sfb=5\n     * -9db 0db\n     *\n     * Input: 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 (repeated) longblocks: amp=1\n     * sfb=12 en0/bw=-103 db max_en0 = -92db amp=32767 sfb=12 -12 db -1.4db\n     *\n     * Input: 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 (repeated) shortblocks: amp=1\n     * sfb=5 en0/bw= -99 -86 amp=32767 sfb=5 -9 db 4db\n     *\n     *\n     * MAX energy of largest wave at 3.3kHz = 1db AVE energy of largest wave at\n     * 3.3kHz = -11db Let's take AVE: -11db = maximum signal in sfb=12. Dynamic\n     * range of CD: 96db. Therefor energy of smallest audible wave in sfb=12 =\n     * -11 - 96 = -107db = ATH at 3.3kHz.\n     *\n     * ATH formula for this wave: -5db. To adjust to LAME scaling, we need ATH =\n     * ATH_formula - 103 (db) ATH = ATH * 2.5e-10 (ener)\n     * 
\n */\n function ATHmdct(gfp, f) {\n var ath = psy.ATHformula(f, gfp);\n\n ath -= NSATHSCALE;\n\n /* modify the MDCT scaling for the ATH and convert to energy */\n ath = Math.pow(10.0, ath / 10.0 + gfp.ATHlower);\n return ath;\n }\n\n function compute_ath(gfp) {\n var ATH_l = gfp.internal_flags.ATH.l;\n var ATH_psfb21 = gfp.internal_flags.ATH.psfb21;\n var ATH_s = gfp.internal_flags.ATH.s;\n var ATH_psfb12 = gfp.internal_flags.ATH.psfb12;\n var gfc = gfp.internal_flags;\n var samp_freq = gfp.out_samplerate;\n\n for (var sfb = 0; sfb < Encoder.SBMAX_l; sfb++) {\n var start = gfc.scalefac_band.l[sfb];\n var end = gfc.scalefac_band.l[sfb + 1];\n ATH_l[sfb] = Float.MAX_VALUE;\n for (var i = start; i < end; i++) {\n var freq = i * samp_freq / (2 * 576);\n var ATH_f = ATHmdct(gfp, freq);\n /* freq in kHz */\n ATH_l[sfb] = Math.min(ATH_l[sfb], ATH_f);\n }\n }\n\n for (var sfb = 0; sfb < Encoder.PSFB21; sfb++) {\n var start = gfc.scalefac_band.psfb21[sfb];\n var end = gfc.scalefac_band.psfb21[sfb + 1];\n ATH_psfb21[sfb] = Float.MAX_VALUE;\n for (var i = start; i < end; i++) {\n var freq = i * samp_freq / (2 * 576);\n var ATH_f = ATHmdct(gfp, freq);\n /* freq in kHz */\n ATH_psfb21[sfb] = Math.min(ATH_psfb21[sfb], ATH_f);\n }\n }\n\n for (var sfb = 0; sfb < Encoder.SBMAX_s; sfb++) {\n var start = gfc.scalefac_band.s[sfb];\n var end = gfc.scalefac_band.s[sfb + 1];\n ATH_s[sfb] = Float.MAX_VALUE;\n for (var i = start; i < end; i++) {\n var freq = i * samp_freq / (2 * 192);\n var ATH_f = ATHmdct(gfp, freq);\n /* freq in kHz */\n ATH_s[sfb] = Math.min(ATH_s[sfb], ATH_f);\n }\n ATH_s[sfb] *= (gfc.scalefac_band.s[sfb + 1] - gfc.scalefac_band.s[sfb]);\n }\n\n for (var sfb = 0; sfb < Encoder.PSFB12; sfb++) {\n var start = gfc.scalefac_band.psfb12[sfb];\n var end = gfc.scalefac_band.psfb12[sfb + 1];\n ATH_psfb12[sfb] = Float.MAX_VALUE;\n for (var i = start; i < end; i++) {\n var freq = i * samp_freq / (2 * 192);\n var ATH_f = ATHmdct(gfp, freq);\n /* freq in kHz */\n ATH_psfb12[sfb] = Math.min(ATH_psfb12[sfb], ATH_f);\n }\n /* not sure about the following */\n ATH_psfb12[sfb] *= (gfc.scalefac_band.s[13] - gfc.scalefac_band.s[12]);\n }\n\n /*\n * no-ATH mode: reduce ATH to -200 dB\n */\n if (gfp.noATH) {\n for (var sfb = 0; sfb < Encoder.SBMAX_l; sfb++) {\n ATH_l[sfb] = 1E-20;\n }\n for (var sfb = 0; sfb < Encoder.PSFB21; sfb++) {\n ATH_psfb21[sfb] = 1E-20;\n }\n for (var sfb = 0; sfb < Encoder.SBMAX_s; sfb++) {\n ATH_s[sfb] = 1E-20;\n }\n for (var sfb = 0; sfb < Encoder.PSFB12; sfb++) {\n ATH_psfb12[sfb] = 1E-20;\n }\n }\n\n /*\n * work in progress, don't rely on it too much\n */\n gfc.ATH.floor = 10. * Math.log10(ATHmdct(gfp, -1.));\n }\n\n /**\n * initialization for iteration_loop\n */\n this.iteration_init = function (gfp) {\n var gfc = gfp.internal_flags;\n var l3_side = gfc.l3_side;\n var i;\n\n if (gfc.iteration_init_init == 0) {\n gfc.iteration_init_init = 1;\n\n l3_side.main_data_begin = 0;\n compute_ath(gfp);\n\n pow43[0] = 0.0;\n for (i = 1; i < PRECALC_SIZE; i++)\n pow43[i] = Math.pow(i, 4.0 / 3.0);\n\n for (i = 0; i < PRECALC_SIZE - 1; i++)\n adj43[i] = ((i + 1) - Math.pow(\n 0.5 * (pow43[i] + pow43[i + 1]), 0.75));\n adj43[i] = 0.5;\n\n for (i = 0; i < Q_MAX; i++)\n ipow20[i] = Math.pow(2.0, (i - 210) * -0.1875);\n for (i = 0; i <= Q_MAX + Q_MAX2; i++)\n pow20[i] = Math.pow(2.0, (i - 210 - Q_MAX2) * 0.25);\n\n tak.huffman_init(gfc);\n\n {\n var bass, alto, treble, sfb21;\n\n i = (gfp.exp_nspsytune >> 2) & 63;\n if (i >= 32)\n i -= 64;\n bass = Math.pow(10, i / 4.0 / 10.0);\n\n i = (gfp.exp_nspsytune >> 8) & 63;\n if (i >= 32)\n i -= 64;\n alto = Math.pow(10, i / 4.0 / 10.0);\n\n i = (gfp.exp_nspsytune >> 14) & 63;\n if (i >= 32)\n i -= 64;\n treble = Math.pow(10, i / 4.0 / 10.0);\n\n /*\n * to be compatible with Naoki's original code, the next 6 bits\n * define only the amount of changing treble for sfb21\n */\n i = (gfp.exp_nspsytune >> 20) & 63;\n if (i >= 32)\n i -= 64;\n sfb21 = treble * Math.pow(10, i / 4.0 / 10.0);\n for (i = 0; i < Encoder.SBMAX_l; i++) {\n var f;\n if (i <= 6)\n f = bass;\n else if (i <= 13)\n f = alto;\n else if (i <= 20)\n f = treble;\n else\n f = sfb21;\n\n gfc.nsPsy.longfact[i] = f;\n }\n for (i = 0; i < Encoder.SBMAX_s; i++) {\n var f;\n if (i <= 5)\n f = bass;\n else if (i <= 10)\n f = alto;\n else if (i <= 11)\n f = treble;\n else\n f = sfb21;\n\n gfc.nsPsy.shortfact[i] = f;\n }\n }\n }\n }\n\n /**\n * allocate bits among 2 channels based on PE
\n * mt 6/99
\n * bugfixes rh 8/01: often allocated more than the allowed 4095 bits\n */\n this.on_pe = function (gfp, pe,\n targ_bits, mean_bits, gr, cbr) {\n var gfc = gfp.internal_flags;\n var tbits = 0, bits;\n var add_bits = new_int(2);\n var ch;\n\n /* allocate targ_bits for granule */\n var mb = new MeanBits(tbits);\n var extra_bits = rv.ResvMaxBits(gfp, mean_bits, mb, cbr);\n tbits = mb.bits;\n /* maximum allowed bits for this granule */\n var max_bits = tbits + extra_bits;\n if (max_bits > LameInternalFlags.MAX_BITS_PER_GRANULE) {\n // hard limit per granule\n max_bits = LameInternalFlags.MAX_BITS_PER_GRANULE;\n }\n for (bits = 0, ch = 0; ch < gfc.channels_out; ++ch) {\n /******************************************************************\n * allocate bits for each channel\n ******************************************************************/\n targ_bits[ch] = Math.min(LameInternalFlags.MAX_BITS_PER_CHANNEL,\n tbits / gfc.channels_out);\n\n add_bits[ch] = 0 | (targ_bits[ch] * pe[gr][ch] / 700.0 - targ_bits[ch]);\n\n /* at most increase bits by 1.5*average */\n if (add_bits[ch] > mean_bits * 3 / 4)\n add_bits[ch] = mean_bits * 3 / 4;\n if (add_bits[ch] < 0)\n add_bits[ch] = 0;\n\n if (add_bits[ch] + targ_bits[ch] > LameInternalFlags.MAX_BITS_PER_CHANNEL)\n add_bits[ch] = Math.max(0,\n LameInternalFlags.MAX_BITS_PER_CHANNEL - targ_bits[ch]);\n\n bits += add_bits[ch];\n }\n if (bits > extra_bits) {\n for (ch = 0; ch < gfc.channels_out; ++ch) {\n add_bits[ch] = extra_bits * add_bits[ch] / bits;\n }\n }\n\n for (ch = 0; ch < gfc.channels_out; ++ch) {\n targ_bits[ch] += add_bits[ch];\n extra_bits -= add_bits[ch];\n }\n\n for (bits = 0, ch = 0; ch < gfc.channels_out; ++ch) {\n bits += targ_bits[ch];\n }\n if (bits > LameInternalFlags.MAX_BITS_PER_GRANULE) {\n var sum = 0;\n for (ch = 0; ch < gfc.channels_out; ++ch) {\n targ_bits[ch] *= LameInternalFlags.MAX_BITS_PER_GRANULE;\n targ_bits[ch] /= bits;\n sum += targ_bits[ch];\n }\n assert(sum <= LameInternalFlags.MAX_BITS_PER_GRANULE);\n }\n\n return max_bits;\n }\n\n this.reduce_side = function (targ_bits, ms_ener_ratio, mean_bits, max_bits) {\n assert(max_bits <= LameInternalFlags.MAX_BITS_PER_GRANULE);\n assert(targ_bits[0] + targ_bits[1] <= LameInternalFlags.MAX_BITS_PER_GRANULE);\n\n /*\n * ms_ener_ratio = 0: allocate 66/33 mid/side fac=.33 ms_ener_ratio =.5:\n * allocate 50/50 mid/side fac= 0\n */\n /* 75/25 split is fac=.5 */\n var fac = .33 * (.5 - ms_ener_ratio) / .5;\n if (fac < 0)\n fac = 0;\n if (fac > .5)\n fac = .5;\n\n /* number of bits to move from side channel to mid channel */\n /* move_bits = fac*targ_bits[1]; */\n var move_bits = 0 | (fac * .5 * (targ_bits[0] + targ_bits[1]));\n\n if (move_bits > LameInternalFlags.MAX_BITS_PER_CHANNEL - targ_bits[0]) {\n move_bits = LameInternalFlags.MAX_BITS_PER_CHANNEL - targ_bits[0];\n }\n if (move_bits < 0)\n move_bits = 0;\n\n if (targ_bits[1] >= 125) {\n /* dont reduce side channel below 125 bits */\n if (targ_bits[1] - move_bits > 125) {\n\n /* if mid channel already has 2x more than average, dont bother */\n /* mean_bits = bits per granule (for both channels) */\n if (targ_bits[0] < mean_bits)\n targ_bits[0] += move_bits;\n targ_bits[1] -= move_bits;\n } else {\n targ_bits[0] += targ_bits[1] - 125;\n targ_bits[1] = 125;\n }\n }\n\n move_bits = targ_bits[0] + targ_bits[1];\n if (move_bits > max_bits) {\n targ_bits[0] = (max_bits * targ_bits[0]) / move_bits;\n targ_bits[1] = (max_bits * targ_bits[1]) / move_bits;\n }\n assert(targ_bits[0] <= LameInternalFlags.MAX_BITS_PER_CHANNEL);\n assert(targ_bits[1] <= LameInternalFlags.MAX_BITS_PER_CHANNEL);\n assert(targ_bits[0] + targ_bits[1] <= LameInternalFlags.MAX_BITS_PER_GRANULE);\n };\n\n /**\n * Robert Hegemann 2001-04-27:\n * this adjusts the ATH, keeping the original noise floor\n * affects the higher frequencies more than the lower ones\n */\n this.athAdjust = function (a, x, athFloor) {\n /*\n * work in progress\n */\n var o = 90.30873362;\n var p = 94.82444863;\n var u = Util.FAST_LOG10_X(x, 10.0);\n var v = a * a;\n var w = 0.0;\n u -= athFloor;\n /* undo scaling */\n if (v > 1E-20)\n w = 1. + Util.FAST_LOG10_X(v, 10.0 / o);\n if (w < 0)\n w = 0.;\n u *= w;\n u += athFloor + o - p;\n /* redo scaling */\n\n return Math.pow(10., 0.1 * u);\n };\n\n /**\n * Calculate the allowed distortion for each scalefactor band, as determined\n * by the psychoacoustic model. xmin(sb) = ratio(sb) * en(sb) / bw(sb)\n *\n * returns number of sfb's with energy > ATH\n */\n this.calc_xmin = function (gfp, ratio, cod_info, pxmin) {\n var pxminPos = 0;\n var gfc = gfp.internal_flags;\n var gsfb, j = 0, ath_over = 0;\n var ATH = gfc.ATH;\n var xr = cod_info.xr;\n var enable_athaa_fix = (gfp.VBR == VbrMode.vbr_mtrh) ? 1 : 0;\n var masking_lower = gfc.masking_lower;\n\n if (gfp.VBR == VbrMode.vbr_mtrh || gfp.VBR == VbrMode.vbr_mt) {\n /* was already done in PSY-Model */\n masking_lower = 1.0;\n }\n\n for (gsfb = 0; gsfb < cod_info.psy_lmax; gsfb++) {\n var en0, xmin;\n var rh1, rh2;\n var width, l;\n\n if (gfp.VBR == VbrMode.vbr_rh || gfp.VBR == VbrMode.vbr_mtrh)\n xmin = athAdjust(ATH.adjust, ATH.l[gsfb], ATH.floor);\n else\n xmin = ATH.adjust * ATH.l[gsfb];\n\n width = cod_info.width[gsfb];\n rh1 = xmin / width;\n rh2 = DBL_EPSILON;\n l = width >> 1;\n en0 = 0.0;\n do {\n var xa, xb;\n xa = xr[j] * xr[j];\n en0 += xa;\n rh2 += (xa < rh1) ? xa : rh1;\n j++;\n xb = xr[j] * xr[j];\n en0 += xb;\n rh2 += (xb < rh1) ? xb : rh1;\n j++;\n } while (--l > 0);\n if (en0 > xmin)\n ath_over++;\n\n if (gsfb == Encoder.SBPSY_l) {\n var x = xmin * gfc.nsPsy.longfact[gsfb];\n if (rh2 < x) {\n rh2 = x;\n }\n }\n if (enable_athaa_fix != 0) {\n xmin = rh2;\n }\n if (!gfp.ATHonly) {\n var e = ratio.en.l[gsfb];\n if (e > 0.0) {\n var x;\n x = en0 * ratio.thm.l[gsfb] * masking_lower / e;\n if (enable_athaa_fix != 0)\n x *= gfc.nsPsy.longfact[gsfb];\n if (xmin < x)\n xmin = x;\n }\n }\n if (enable_athaa_fix != 0)\n pxmin[pxminPos++] = xmin;\n else\n pxmin[pxminPos++] = xmin * gfc.nsPsy.longfact[gsfb];\n }\n /* end of long block loop */\n\n /* use this function to determine the highest non-zero coeff */\n var max_nonzero = 575;\n if (cod_info.block_type != Encoder.SHORT_TYPE) {\n // NORM, START or STOP type, but not SHORT\n var k = 576;\n while (k-- != 0 && BitStream.EQ(xr[k], 0)) {\n max_nonzero = k;\n }\n }\n cod_info.max_nonzero_coeff = max_nonzero;\n\n for (var sfb = cod_info.sfb_smin; gsfb < cod_info.psymax; sfb++, gsfb += 3) {\n var width, b;\n var tmpATH;\n if (gfp.VBR == VbrMode.vbr_rh || gfp.VBR == VbrMode.vbr_mtrh)\n tmpATH = athAdjust(ATH.adjust, ATH.s[sfb], ATH.floor);\n else\n tmpATH = ATH.adjust * ATH.s[sfb];\n\n width = cod_info.width[gsfb];\n for (b = 0; b < 3; b++) {\n var en0 = 0.0, xmin;\n var rh1, rh2;\n var l = width >> 1;\n\n rh1 = tmpATH / width;\n rh2 = DBL_EPSILON;\n do {\n var xa, xb;\n xa = xr[j] * xr[j];\n en0 += xa;\n rh2 += (xa < rh1) ? xa : rh1;\n j++;\n xb = xr[j] * xr[j];\n en0 += xb;\n rh2 += (xb < rh1) ? xb : rh1;\n j++;\n } while (--l > 0);\n if (en0 > tmpATH)\n ath_over++;\n if (sfb == Encoder.SBPSY_s) {\n var x = tmpATH * gfc.nsPsy.shortfact[sfb];\n if (rh2 < x) {\n rh2 = x;\n }\n }\n if (enable_athaa_fix != 0)\n xmin = rh2;\n else\n xmin = tmpATH;\n\n if (!gfp.ATHonly && !gfp.ATHshort) {\n var e = ratio.en.s[sfb][b];\n if (e > 0.0) {\n var x;\n x = en0 * ratio.thm.s[sfb][b] * masking_lower / e;\n if (enable_athaa_fix != 0)\n x *= gfc.nsPsy.shortfact[sfb];\n if (xmin < x)\n xmin = x;\n }\n }\n if (enable_athaa_fix != 0)\n pxmin[pxminPos++] = xmin;\n else\n pxmin[pxminPos++] = xmin * gfc.nsPsy.shortfact[sfb];\n }\n /* b */\n if (gfp.useTemporal) {\n if (pxmin[pxminPos - 3] > pxmin[pxminPos - 3 + 1])\n pxmin[pxminPos - 3 + 1] += (pxmin[pxminPos - 3] - pxmin[pxminPos - 3 + 1])\n * gfc.decay;\n if (pxmin[pxminPos - 3 + 1] > pxmin[pxminPos - 3 + 2])\n pxmin[pxminPos - 3 + 2] += (pxmin[pxminPos - 3 + 1] - pxmin[pxminPos - 3 + 2])\n * gfc.decay;\n }\n }\n /* end of short block sfb loop */\n\n return ath_over;\n };\n\n function StartLine(j) {\n this.s = j;\n }\n\n this.calc_noise_core = function (cod_info, startline, l, step) {\n var noise = 0;\n var j = startline.s;\n var ix = cod_info.l3_enc;\n\n if (j > cod_info.count1) {\n while ((l--) != 0) {\n var temp;\n temp = cod_info.xr[j];\n j++;\n noise += temp * temp;\n temp = cod_info.xr[j];\n j++;\n noise += temp * temp;\n }\n } else if (j > cod_info.big_values) {\n var ix01 = new_float(2);\n ix01[0] = 0;\n ix01[1] = step;\n while ((l--) != 0) {\n var temp;\n temp = Math.abs(cod_info.xr[j]) - ix01[ix[j]];\n j++;\n noise += temp * temp;\n temp = Math.abs(cod_info.xr[j]) - ix01[ix[j]];\n j++;\n noise += temp * temp;\n }\n } else {\n while ((l--) != 0) {\n var temp;\n temp = Math.abs(cod_info.xr[j]) - pow43[ix[j]] * step;\n j++;\n noise += temp * temp;\n temp = Math.abs(cod_info.xr[j]) - pow43[ix[j]] * step;\n j++;\n noise += temp * temp;\n }\n }\n\n startline.s = j;\n return noise;\n }\n\n /**\n *
\n     * -oo dB  =>  -1.00\n     * - 6 dB  =>  -0.97\n     * - 3 dB  =>  -0.80\n     * - 2 dB  =>  -0.64\n     * - 1 dB  =>  -0.38\n     *   0 dB  =>   0.00\n     * + 1 dB  =>  +0.49\n     * + 2 dB  =>  +1.06\n     * + 3 dB  =>  +1.68\n     * + 6 dB  =>  +3.69\n     * +10 dB  =>  +6.45\n     * 
\n */\n this.calc_noise = function (cod_info, l3_xmin, distort, res, prev_noise) {\n var distortPos = 0;\n var l3_xminPos = 0;\n var sfb, l, over = 0;\n var over_noise_db = 0;\n /* 0 dB relative to masking */\n var tot_noise_db = 0;\n /* -200 dB relative to masking */\n var max_noise = -20.0;\n var j = 0;\n var scalefac = cod_info.scalefac;\n var scalefacPos = 0;\n\n res.over_SSD = 0;\n\n for (sfb = 0; sfb < cod_info.psymax; sfb++) {\n var s = cod_info.global_gain\n - (((scalefac[scalefacPos++]) + (cod_info.preflag != 0 ? pretab[sfb]\n : 0)) << (cod_info.scalefac_scale + 1))\n - cod_info.subblock_gain[cod_info.window[sfb]] * 8;\n var noise = 0.0;\n\n if (prev_noise != null && (prev_noise.step[sfb] == s)) {\n\n /* use previously computed values */\n noise = prev_noise.noise[sfb];\n j += cod_info.width[sfb];\n distort[distortPos++] = noise / l3_xmin[l3_xminPos++];\n\n noise = prev_noise.noise_log[sfb];\n\n } else {\n var step = POW20(s);\n l = cod_info.width[sfb] >> 1;\n\n if ((j + cod_info.width[sfb]) > cod_info.max_nonzero_coeff) {\n var usefullsize;\n usefullsize = cod_info.max_nonzero_coeff - j + 1;\n\n if (usefullsize > 0)\n l = usefullsize >> 1;\n else\n l = 0;\n }\n\n var sl = new StartLine(j);\n noise = this.calc_noise_core(cod_info, sl, l, step);\n j = sl.s;\n\n if (prev_noise != null) {\n /* save noise values */\n prev_noise.step[sfb] = s;\n prev_noise.noise[sfb] = noise;\n }\n\n noise = distort[distortPos++] = noise / l3_xmin[l3_xminPos++];\n\n /* multiplying here is adding in dB, but can overflow */\n noise = Util.FAST_LOG10(Math.max(noise, 1E-20));\n\n if (prev_noise != null) {\n /* save noise values */\n prev_noise.noise_log[sfb] = noise;\n }\n }\n\n if (prev_noise != null) {\n /* save noise values */\n prev_noise.global_gain = cod_info.global_gain;\n }\n\n tot_noise_db += noise;\n\n if (noise > 0.0) {\n var tmp;\n\n tmp = Math.max(0 | (noise * 10 + .5), 1);\n res.over_SSD += tmp * tmp;\n\n over++;\n /* multiplying here is adding in dB -but can overflow */\n /* over_noise *= noise; */\n over_noise_db += noise;\n }\n max_noise = Math.max(max_noise, noise);\n\n }\n\n res.over_count = over;\n res.tot_noise = tot_noise_db;\n res.over_noise = over_noise_db;\n res.max_noise = max_noise;\n\n return over;\n }\n\n /**\n * updates plotting data\n *\n * Mark Taylor 2000-??-??\n *\n * Robert Hegemann: moved noise/distortion calc into it\n */\n this.set_pinfo = function (gfp, cod_info, ratio, gr, ch) {\n var gfc = gfp.internal_flags;\n var sfb, sfb2;\n var l;\n var en0, en1;\n var ifqstep = (cod_info.scalefac_scale == 0) ? .5 : 1.0;\n var scalefac = cod_info.scalefac;\n\n var l3_xmin = new_float(L3Side.SFBMAX);\n var xfsf = new_float(L3Side.SFBMAX);\n var noise = new CalcNoiseResult();\n\n calc_xmin(gfp, ratio, cod_info, l3_xmin);\n calc_noise(cod_info, l3_xmin, xfsf, noise, null);\n\n var j = 0;\n sfb2 = cod_info.sfb_lmax;\n if (cod_info.block_type != Encoder.SHORT_TYPE\n && 0 == cod_info.mixed_block_flag)\n sfb2 = 22;\n for (sfb = 0; sfb < sfb2; sfb++) {\n var start = gfc.scalefac_band.l[sfb];\n var end = gfc.scalefac_band.l[sfb + 1];\n var bw = end - start;\n for (en0 = 0.0; j < end; j++)\n en0 += cod_info.xr[j] * cod_info.xr[j];\n en0 /= bw;\n /* convert to MDCT units */\n /* scaling so it shows up on FFT plot */\n en1 = 1e15;\n gfc.pinfo.en[gr][ch][sfb] = en1 * en0;\n gfc.pinfo.xfsf[gr][ch][sfb] = en1 * l3_xmin[sfb] * xfsf[sfb] / bw;\n\n if (ratio.en.l[sfb] > 0 && !gfp.ATHonly)\n en0 = en0 / ratio.en.l[sfb];\n else\n en0 = 0.0;\n\n gfc.pinfo.thr[gr][ch][sfb] = en1\n * Math.max(en0 * ratio.thm.l[sfb], gfc.ATH.l[sfb]);\n\n /* there is no scalefactor bands >= SBPSY_l */\n gfc.pinfo.LAMEsfb[gr][ch][sfb] = 0;\n if (cod_info.preflag != 0 && sfb >= 11)\n gfc.pinfo.LAMEsfb[gr][ch][sfb] = -ifqstep * pretab[sfb];\n\n if (sfb < Encoder.SBPSY_l) {\n /* scfsi should be decoded by caller side */\n assert(scalefac[sfb] >= 0);\n gfc.pinfo.LAMEsfb[gr][ch][sfb] -= ifqstep * scalefac[sfb];\n }\n }\n /* for sfb */\n\n if (cod_info.block_type == Encoder.SHORT_TYPE) {\n sfb2 = sfb;\n for (sfb = cod_info.sfb_smin; sfb < Encoder.SBMAX_s; sfb++) {\n var start = gfc.scalefac_band.s[sfb];\n var end = gfc.scalefac_band.s[sfb + 1];\n var bw = end - start;\n for (var i = 0; i < 3; i++) {\n for (en0 = 0.0, l = start; l < end; l++) {\n en0 += cod_info.xr[j] * cod_info.xr[j];\n j++;\n }\n en0 = Math.max(en0 / bw, 1e-20);\n /* convert to MDCT units */\n /* scaling so it shows up on FFT plot */\n en1 = 1e15;\n\n gfc.pinfo.en_s[gr][ch][3 * sfb + i] = en1 * en0;\n gfc.pinfo.xfsf_s[gr][ch][3 * sfb + i] = en1 * l3_xmin[sfb2]\n * xfsf[sfb2] / bw;\n if (ratio.en.s[sfb][i] > 0)\n en0 = en0 / ratio.en.s[sfb][i];\n else\n en0 = 0.0;\n if (gfp.ATHonly || gfp.ATHshort)\n en0 = 0;\n\n gfc.pinfo.thr_s[gr][ch][3 * sfb + i] = en1\n * Math.max(en0 * ratio.thm.s[sfb][i],\n gfc.ATH.s[sfb]);\n\n /* there is no scalefactor bands >= SBPSY_s */\n gfc.pinfo.LAMEsfb_s[gr][ch][3 * sfb + i] = -2.0\n * cod_info.subblock_gain[i];\n if (sfb < Encoder.SBPSY_s) {\n gfc.pinfo.LAMEsfb_s[gr][ch][3 * sfb + i] -= ifqstep\n * scalefac[sfb2];\n }\n sfb2++;\n }\n }\n }\n /* block type short */\n gfc.pinfo.LAMEqss[gr][ch] = cod_info.global_gain;\n gfc.pinfo.LAMEmainbits[gr][ch] = cod_info.part2_3_length\n + cod_info.part2_length;\n gfc.pinfo.LAMEsfbits[gr][ch] = cod_info.part2_length;\n\n gfc.pinfo.over[gr][ch] = noise.over_count;\n gfc.pinfo.max_noise[gr][ch] = noise.max_noise * 10.0;\n gfc.pinfo.over_noise[gr][ch] = noise.over_noise * 10.0;\n gfc.pinfo.tot_noise[gr][ch] = noise.tot_noise * 10.0;\n gfc.pinfo.over_SSD[gr][ch] = noise.over_SSD;\n }\n\n /**\n * updates plotting data for a whole frame\n *\n * Robert Hegemann 2000-10-21\n */\n function set_frame_pinfo(gfp, ratio) {\n var gfc = gfp.internal_flags;\n\n gfc.masking_lower = 1.0;\n\n /*\n * for every granule and channel patch l3_enc and set info\n */\n for (var gr = 0; gr < gfc.mode_gr; gr++) {\n for (var ch = 0; ch < gfc.channels_out; ch++) {\n var cod_info = gfc.l3_side.tt[gr][ch];\n var scalefac_sav = new_int(L3Side.SFBMAX);\n System.arraycopy(cod_info.scalefac, 0, scalefac_sav, 0,\n scalefac_sav.length);\n\n /*\n * reconstruct the scalefactors in case SCFSI was used\n */\n if (gr == 1) {\n var sfb;\n for (sfb = 0; sfb < cod_info.sfb_lmax; sfb++) {\n if (cod_info.scalefac[sfb] < 0) /* scfsi */\n cod_info.scalefac[sfb] = gfc.l3_side.tt[0][ch].scalefac[sfb];\n }\n }\n\n set_pinfo(gfp, cod_info, ratio[gr][ch], gr, ch);\n System.arraycopy(scalefac_sav, 0, cod_info.scalefac, 0,\n scalefac_sav.length);\n }\n /* for ch */\n }\n /* for gr */\n }\n\n}\n\nmodule.exports = QuantizePVT;\n","/*\n *\tMP3 huffman table selecting and bit counting\n *\n *\tCopyright (c) 1999-2005 Takehiro TOMINAGA\n *\tCopyright (c) 2002-2005 Gabriel Bouvigne\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\t See the GNU\n * Library General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the\n * Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n * Boston, MA 02111-1307, USA.\n */\n\n/* $Id: Takehiro.java,v 1.26 2011/05/24 20:48:06 kenchis Exp $ */\n\n//package mp3;\n\n//import java.util.Arrays;\nvar common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nvar Encoder = require('./Encoder.js');\nvar Tables = require('./Tables.js');\nvar GrInfo = require('./GrInfo.js');\nvar QuantizePVT = require('./QuantizePVT.js');\n\n\nfunction Takehiro() {\n\n var qupvt = null;\n this.qupvt = null;\n\n this.setModules = function (_qupvt) {\n this.qupvt = _qupvt;\n qupvt = _qupvt;\n }\n\n function Bits(b) {\n this.bits = 0 | b;\n }\n\n var subdv_table = [[0, 0], /* 0 bands */\n [0, 0], /* 1 bands */\n [0, 0], /* 2 bands */\n [0, 0], /* 3 bands */\n [0, 0], /* 4 bands */\n [0, 1], /* 5 bands */\n [1, 1], /* 6 bands */\n [1, 1], /* 7 bands */\n [1, 2], /* 8 bands */\n [2, 2], /* 9 bands */\n [2, 3], /* 10 bands */\n [2, 3], /* 11 bands */\n [3, 4], /* 12 bands */\n [3, 4], /* 13 bands */\n [3, 4], /* 14 bands */\n [4, 5], /* 15 bands */\n [4, 5], /* 16 bands */\n [4, 6], /* 17 bands */\n [5, 6], /* 18 bands */\n [5, 6], /* 19 bands */\n [5, 7], /* 20 bands */\n [6, 7], /* 21 bands */\n [6, 7], /* 22 bands */\n ];\n\n /**\n * nonlinear quantization of xr More accurate formula than the ISO formula.\n * Takes into account the fact that we are quantizing xr . ix, but we want\n * ix^4/3 to be as close as possible to x^4/3. (taking the nearest int would\n * mean ix is as close as possible to xr, which is different.)\n *\n * From Segher Boessenkool 11/1999\n *\n * 09/2000: ASM code removed in favor of IEEE754 hack by Takehiro Tominaga.\n * If you need the ASM code, check CVS circa Aug 2000.\n *\n * 01/2004: Optimizations by Gabriel Bouvigne\n */\n function quantize_lines_xrpow_01(l, istep, xr, xrPos, ix, ixPos) {\n var compareval0 = (1.0 - 0.4054) / istep;\n\n assert(l > 0);\n l = l >> 1;\n while ((l--) != 0) {\n ix[ixPos++] = (compareval0 > xr[xrPos++]) ? 0 : 1;\n ix[ixPos++] = (compareval0 > xr[xrPos++]) ? 0 : 1;\n }\n }\n\n /**\n * XRPOW_FTOI is a macro to convert floats to ints.
\n * if XRPOW_FTOI(x) = nearest_int(x), then QUANTFAC(x)=adj43asm[x]
\n * ROUNDFAC= -0.0946
\n *\n * if XRPOW_FTOI(x) = floor(x), then QUANTFAC(x)=asj43[x]
\n * ROUNDFAC=0.4054
\n *\n * Note: using floor() or 0| is extremely slow. On machines where the\n * TAKEHIRO_IEEE754_HACK code above does not work, it is worthwile to write\n * some ASM for XRPOW_FTOI().\n */\n function quantize_lines_xrpow(l, istep, xr, xrPos, ix, ixPos) {\n assert(l > 0);\n\n l = l >> 1;\n var remaining = l % 2;\n l = l >> 1;\n while (l-- != 0) {\n var x0, x1, x2, x3;\n var rx0, rx1, rx2, rx3;\n\n x0 = xr[xrPos++] * istep;\n x1 = xr[xrPos++] * istep;\n rx0 = 0 | x0;\n x2 = xr[xrPos++] * istep;\n rx1 = 0 | x1;\n x3 = xr[xrPos++] * istep;\n rx2 = 0 | x2;\n x0 += qupvt.adj43[rx0];\n rx3 = 0 | x3;\n x1 += qupvt.adj43[rx1];\n ix[ixPos++] = 0 | x0;\n x2 += qupvt.adj43[rx2];\n ix[ixPos++] = 0 | x1;\n x3 += qupvt.adj43[rx3];\n ix[ixPos++] = 0 | x2;\n ix[ixPos++] = 0 | x3;\n }\n if (remaining != 0) {\n var x0, x1;\n var rx0, rx1;\n\n x0 = xr[xrPos++] * istep;\n x1 = xr[xrPos++] * istep;\n rx0 = 0 | x0;\n rx1 = 0 | x1;\n x0 += qupvt.adj43[rx0];\n x1 += qupvt.adj43[rx1];\n ix[ixPos++] = 0 | x0;\n ix[ixPos++] = 0 | x1;\n }\n }\n\n /**\n * Quantization function This function will select which lines to quantize\n * and call the proper quantization function\n */\n function quantize_xrpow(xp, pi, istep, codInfo, prevNoise) {\n /* quantize on xr^(3/4) instead of xr */\n var sfb;\n var sfbmax;\n var j = 0;\n var prev_data_use;\n var accumulate = 0;\n var accumulate01 = 0;\n var xpPos = 0;\n var iData = pi;\n var iDataPos = 0;\n var acc_iData = iData;\n var acc_iDataPos = 0;\n var acc_xp = xp;\n var acc_xpPos = 0;\n\n /*\n * Reusing previously computed data does not seems to work if global\n * gain is changed. Finding why it behaves this way would allow to use a\n * cache of previously computed values (let's 10 cached values per sfb)\n * that would probably provide a noticeable speedup\n */\n prev_data_use = (prevNoise != null && (codInfo.global_gain == prevNoise.global_gain));\n\n if (codInfo.block_type == Encoder.SHORT_TYPE)\n sfbmax = 38;\n else\n sfbmax = 21;\n\n for (sfb = 0; sfb <= sfbmax; sfb++) {\n var step = -1;\n\n if (prev_data_use || codInfo.block_type == Encoder.NORM_TYPE) {\n step = codInfo.global_gain\n - ((codInfo.scalefac[sfb] + (codInfo.preflag != 0 ? qupvt.pretab[sfb]\n : 0)) << (codInfo.scalefac_scale + 1))\n - codInfo.subblock_gain[codInfo.window[sfb]] * 8;\n }\n assert(codInfo.width[sfb] >= 0);\n if (prev_data_use && (prevNoise.step[sfb] == step)) {\n /*\n * do not recompute this part, but compute accumulated lines\n */\n if (accumulate != 0) {\n quantize_lines_xrpow(accumulate, istep, acc_xp, acc_xpPos,\n acc_iData, acc_iDataPos);\n accumulate = 0;\n }\n if (accumulate01 != 0) {\n quantize_lines_xrpow_01(accumulate01, istep, acc_xp,\n acc_xpPos, acc_iData, acc_iDataPos);\n accumulate01 = 0;\n }\n } else { /* should compute this part */\n var l = codInfo.width[sfb];\n\n if ((j + codInfo.width[sfb]) > codInfo.max_nonzero_coeff) {\n /* do not compute upper zero part */\n var usefullsize;\n usefullsize = codInfo.max_nonzero_coeff - j + 1;\n Arrays.fill(pi, codInfo.max_nonzero_coeff, 576, 0);\n l = usefullsize;\n\n if (l < 0) {\n l = 0;\n }\n\n /* no need to compute higher sfb values */\n sfb = sfbmax + 1;\n }\n\n /* accumulate lines to quantize */\n if (0 == accumulate && 0 == accumulate01) {\n acc_iData = iData;\n acc_iDataPos = iDataPos;\n acc_xp = xp;\n acc_xpPos = xpPos;\n }\n if (prevNoise != null && prevNoise.sfb_count1 > 0\n && sfb >= prevNoise.sfb_count1\n && prevNoise.step[sfb] > 0\n && step >= prevNoise.step[sfb]) {\n\n if (accumulate != 0) {\n quantize_lines_xrpow(accumulate, istep, acc_xp,\n acc_xpPos, acc_iData, acc_iDataPos);\n accumulate = 0;\n acc_iData = iData;\n acc_iDataPos = iDataPos;\n acc_xp = xp;\n acc_xpPos = xpPos;\n }\n accumulate01 += l;\n } else {\n if (accumulate01 != 0) {\n quantize_lines_xrpow_01(accumulate01, istep, acc_xp,\n acc_xpPos, acc_iData, acc_iDataPos);\n accumulate01 = 0;\n acc_iData = iData;\n acc_iDataPos = iDataPos;\n acc_xp = xp;\n acc_xpPos = xpPos;\n }\n accumulate += l;\n }\n\n if (l <= 0) {\n /*\n * rh: 20040215 may happen due to \"prev_data_use\"\n * optimization\n */\n if (accumulate01 != 0) {\n quantize_lines_xrpow_01(accumulate01, istep, acc_xp,\n acc_xpPos, acc_iData, acc_iDataPos);\n accumulate01 = 0;\n }\n if (accumulate != 0) {\n quantize_lines_xrpow(accumulate, istep, acc_xp,\n acc_xpPos, acc_iData, acc_iDataPos);\n accumulate = 0;\n }\n\n break;\n /* ends for-loop */\n }\n }\n if (sfb <= sfbmax) {\n iDataPos += codInfo.width[sfb];\n xpPos += codInfo.width[sfb];\n j += codInfo.width[sfb];\n }\n }\n if (accumulate != 0) { /* last data part */\n quantize_lines_xrpow(accumulate, istep, acc_xp, acc_xpPos,\n acc_iData, acc_iDataPos);\n accumulate = 0;\n }\n if (accumulate01 != 0) { /* last data part */\n quantize_lines_xrpow_01(accumulate01, istep, acc_xp, acc_xpPos,\n acc_iData, acc_iDataPos);\n accumulate01 = 0;\n }\n\n }\n\n /**\n * ix_max\n */\n function ix_max(ix, ixPos, endPos) {\n var max1 = 0, max2 = 0;\n\n do {\n var x1 = ix[ixPos++];\n var x2 = ix[ixPos++];\n if (max1 < x1)\n max1 = x1;\n\n if (max2 < x2)\n max2 = x2;\n } while (ixPos < endPos);\n if (max1 < max2)\n max1 = max2;\n return max1;\n }\n\n function count_bit_ESC(ix, ixPos, end, t1, t2, s) {\n /* ESC-table is used */\n var linbits = Tables.ht[t1].xlen * 65536 + Tables.ht[t2].xlen;\n var sum = 0, sum2;\n\n do {\n var x = ix[ixPos++];\n var y = ix[ixPos++];\n\n if (x != 0) {\n if (x > 14) {\n x = 15;\n sum += linbits;\n }\n x *= 16;\n }\n\n if (y != 0) {\n if (y > 14) {\n y = 15;\n sum += linbits;\n }\n x += y;\n }\n\n sum += Tables.largetbl[x];\n } while (ixPos < end);\n\n sum2 = sum & 0xffff;\n sum >>= 16;\n\n if (sum > sum2) {\n sum = sum2;\n t1 = t2;\n }\n\n s.bits += sum;\n return t1;\n }\n\n function count_bit_noESC(ix, ixPos, end, s) {\n /* No ESC-words */\n var sum1 = 0;\n var hlen1 = Tables.ht[1].hlen;\n\n do {\n var x = ix[ixPos + 0] * 2 + ix[ixPos + 1];\n ixPos += 2;\n sum1 += hlen1[x];\n } while (ixPos < end);\n\n s.bits += sum1;\n return 1;\n }\n\n function count_bit_noESC_from2(ix, ixPos, end, t1, s) {\n /* No ESC-words */\n var sum = 0, sum2;\n var xlen = Tables.ht[t1].xlen;\n var hlen;\n if (t1 == 2)\n hlen = Tables.table23;\n else\n hlen = Tables.table56;\n\n do {\n var x = ix[ixPos + 0] * xlen + ix[ixPos + 1];\n ixPos += 2;\n sum += hlen[x];\n } while (ixPos < end);\n\n sum2 = sum & 0xffff;\n sum >>= 16;\n\n if (sum > sum2) {\n sum = sum2;\n t1++;\n }\n\n s.bits += sum;\n return t1;\n }\n\n function count_bit_noESC_from3(ix, ixPos, end, t1, s) {\n /* No ESC-words */\n var sum1 = 0;\n var sum2 = 0;\n var sum3 = 0;\n var xlen = Tables.ht[t1].xlen;\n var hlen1 = Tables.ht[t1].hlen;\n var hlen2 = Tables.ht[t1 + 1].hlen;\n var hlen3 = Tables.ht[t1 + 2].hlen;\n\n do {\n var x = ix[ixPos + 0] * xlen + ix[ixPos + 1];\n ixPos += 2;\n sum1 += hlen1[x];\n sum2 += hlen2[x];\n sum3 += hlen3[x];\n } while (ixPos < end);\n var t = t1;\n if (sum1 > sum2) {\n sum1 = sum2;\n t++;\n }\n if (sum1 > sum3) {\n sum1 = sum3;\n t = t1 + 2;\n }\n s.bits += sum1;\n\n return t;\n }\n\n /*************************************************************************/\n /* choose table */\n /*************************************************************************/\n\n var huf_tbl_noESC = [1, 2, 5, 7, 7, 10, 10, 13, 13,\n 13, 13, 13, 13, 13, 13];\n\n /**\n * Choose the Huffman table that will encode ix[begin..end] with the fewest\n * bits.\n *\n * Note: This code contains knowledge about the sizes and characteristics of\n * the Huffman tables as defined in the IS (Table B.7), and will not work\n * with any arbitrary tables.\n */\n function choose_table(ix, ixPos, endPos, s) {\n var max = ix_max(ix, ixPos, endPos);\n\n switch (max) {\n case 0:\n return max;\n\n case 1:\n return count_bit_noESC(ix, ixPos, endPos, s);\n\n case 2:\n case 3:\n return count_bit_noESC_from2(ix, ixPos, endPos,\n huf_tbl_noESC[max - 1], s);\n\n case 4:\n case 5:\n case 6:\n case 7:\n case 8:\n case 9:\n case 10:\n case 11:\n case 12:\n case 13:\n case 14:\n case 15:\n return count_bit_noESC_from3(ix, ixPos, endPos,\n huf_tbl_noESC[max - 1], s);\n\n default:\n /* try tables with linbits */\n if (max > QuantizePVT.IXMAX_VAL) {\n s.bits = QuantizePVT.LARGE_BITS;\n return -1;\n }\n max -= 15;\n var choice2;\n for (choice2 = 24; choice2 < 32; choice2++) {\n if (Tables.ht[choice2].linmax >= max) {\n break;\n }\n }\n var choice;\n for (choice = choice2 - 8; choice < 24; choice++) {\n if (Tables.ht[choice].linmax >= max) {\n break;\n }\n }\n return count_bit_ESC(ix, ixPos, endPos, choice, choice2, s);\n }\n }\n\n /**\n * count_bit\n */\n this.noquant_count_bits = function (gfc, gi, prev_noise) {\n var ix = gi.l3_enc;\n var i = Math.min(576, ((gi.max_nonzero_coeff + 2) >> 1) << 1);\n\n if (prev_noise != null)\n prev_noise.sfb_count1 = 0;\n\n /* Determine count1 region */\n for (; i > 1; i -= 2)\n if ((ix[i - 1] | ix[i - 2]) != 0)\n break;\n gi.count1 = i;\n\n /* Determines the number of bits to encode the quadruples. */\n var a1 = 0;\n var a2 = 0;\n for (; i > 3; i -= 4) {\n var p;\n /* hack to check if all values <= 1 */\n //throw \"TODO: HACK if ((((long) ix[i - 1] | (long) ix[i - 2] | (long) ix[i - 3] | (long) ix[i - 4]) & 0xffffffffL) > 1L \"\n //if (true) {\n if (((ix[i - 1] | ix[i - 2] | ix[i - 3] | ix[i - 4]) & 0x7fffffff) > 1) {\n break;\n }\n p = ((ix[i - 4] * 2 + ix[i - 3]) * 2 + ix[i - 2]) * 2 + ix[i - 1];\n a1 += Tables.t32l[p];\n a2 += Tables.t33l[p];\n }\n var bits = a1;\n gi.count1table_select = 0;\n if (a1 > a2) {\n bits = a2;\n gi.count1table_select = 1;\n }\n\n gi.count1bits = bits;\n gi.big_values = i;\n if (i == 0)\n return bits;\n\n if (gi.block_type == Encoder.SHORT_TYPE) {\n a1 = 3 * gfc.scalefac_band.s[3];\n if (a1 > gi.big_values)\n a1 = gi.big_values;\n a2 = gi.big_values;\n\n } else if (gi.block_type == Encoder.NORM_TYPE) {\n assert(i <= 576);\n /* bv_scf has 576 entries (0..575) */\n a1 = gi.region0_count = gfc.bv_scf[i - 2];\n a2 = gi.region1_count = gfc.bv_scf[i - 1];\n\n assert(a1 + a2 + 2 < Encoder.SBPSY_l);\n a2 = gfc.scalefac_band.l[a1 + a2 + 2];\n a1 = gfc.scalefac_band.l[a1 + 1];\n if (a2 < i) {\n var bi = new Bits(bits);\n gi.table_select[2] = choose_table(ix, a2, i, bi);\n bits = bi.bits;\n }\n } else {\n gi.region0_count = 7;\n /* gi.region1_count = SBPSY_l - 7 - 1; */\n gi.region1_count = Encoder.SBMAX_l - 1 - 7 - 1;\n a1 = gfc.scalefac_band.l[7 + 1];\n a2 = i;\n if (a1 > a2) {\n a1 = a2;\n }\n }\n\n /* have to allow for the case when bigvalues < region0 < region1 */\n /* (and region0, region1 are ignored) */\n a1 = Math.min(a1, i);\n a2 = Math.min(a2, i);\n\n assert(a1 >= 0);\n assert(a2 >= 0);\n\n /* Count the number of bits necessary to code the bigvalues region. */\n if (0 < a1) {\n var bi = new Bits(bits);\n gi.table_select[0] = choose_table(ix, 0, a1, bi);\n bits = bi.bits;\n }\n if (a1 < a2) {\n var bi = new Bits(bits);\n gi.table_select[1] = choose_table(ix, a1, a2, bi);\n bits = bi.bits;\n }\n if (gfc.use_best_huffman == 2) {\n gi.part2_3_length = bits;\n best_huffman_divide(gfc, gi);\n bits = gi.part2_3_length;\n }\n\n if (prev_noise != null) {\n if (gi.block_type == Encoder.NORM_TYPE) {\n var sfb = 0;\n while (gfc.scalefac_band.l[sfb] < gi.big_values) {\n sfb++;\n }\n prev_noise.sfb_count1 = sfb;\n }\n }\n\n return bits;\n }\n\n this.count_bits = function (gfc, xr, gi, prev_noise) {\n var ix = gi.l3_enc;\n\n /* since quantize_xrpow uses table lookup, we need to check this first: */\n var w = (QuantizePVT.IXMAX_VAL) / qupvt.IPOW20(gi.global_gain);\n\n if (gi.xrpow_max > w)\n return QuantizePVT.LARGE_BITS;\n\n quantize_xrpow(xr, ix, qupvt.IPOW20(gi.global_gain), gi, prev_noise);\n\n if ((gfc.substep_shaping & 2) != 0) {\n var j = 0;\n /* 0.634521682242439 = 0.5946*2**(.5*0.1875) */\n var gain = gi.global_gain + gi.scalefac_scale;\n var roundfac = 0.634521682242439 / qupvt.IPOW20(gain);\n for (var sfb = 0; sfb < gi.sfbmax; sfb++) {\n var width = gi.width[sfb];\n assert(width >= 0);\n if (0 == gfc.pseudohalf[sfb]) {\n j += width;\n } else {\n var k;\n for (k = j, j += width; k < j; ++k) {\n ix[k] = (xr[k] >= roundfac) ? ix[k] : 0;\n }\n }\n }\n }\n return this.noquant_count_bits(gfc, gi, prev_noise);\n }\n\n /**\n * re-calculate the best scalefac_compress using scfsi the saved bits are\n * kept in the bit reservoir.\n */\n function recalc_divide_init(gfc, cod_info, ix, r01_bits, r01_div, r0_tbl, r1_tbl) {\n var bigv = cod_info.big_values;\n\n for (var r0 = 0; r0 <= 7 + 15; r0++) {\n r01_bits[r0] = QuantizePVT.LARGE_BITS;\n }\n\n for (var r0 = 0; r0 < 16; r0++) {\n var a1 = gfc.scalefac_band.l[r0 + 1];\n if (a1 >= bigv)\n break;\n var r0bits = 0;\n var bi = new Bits(r0bits);\n var r0t = choose_table(ix, 0, a1, bi);\n r0bits = bi.bits;\n\n for (var r1 = 0; r1 < 8; r1++) {\n var a2 = gfc.scalefac_band.l[r0 + r1 + 2];\n if (a2 >= bigv)\n break;\n var bits = r0bits;\n bi = new Bits(bits);\n var r1t = choose_table(ix, a1, a2, bi);\n bits = bi.bits;\n if (r01_bits[r0 + r1] > bits) {\n r01_bits[r0 + r1] = bits;\n r01_div[r0 + r1] = r0;\n r0_tbl[r0 + r1] = r0t;\n r1_tbl[r0 + r1] = r1t;\n }\n }\n }\n }\n\n function recalc_divide_sub(gfc, cod_info2, gi, ix, r01_bits, r01_div, r0_tbl, r1_tbl) {\n var bigv = cod_info2.big_values;\n\n for (var r2 = 2; r2 < Encoder.SBMAX_l + 1; r2++) {\n var a2 = gfc.scalefac_band.l[r2];\n if (a2 >= bigv)\n break;\n var bits = r01_bits[r2 - 2] + cod_info2.count1bits;\n if (gi.part2_3_length <= bits)\n break;\n\n var bi = new Bits(bits);\n var r2t = choose_table(ix, a2, bigv, bi);\n bits = bi.bits;\n if (gi.part2_3_length <= bits)\n continue;\n\n gi.assign(cod_info2);\n gi.part2_3_length = bits;\n gi.region0_count = r01_div[r2 - 2];\n gi.region1_count = r2 - 2 - r01_div[r2 - 2];\n gi.table_select[0] = r0_tbl[r2 - 2];\n gi.table_select[1] = r1_tbl[r2 - 2];\n gi.table_select[2] = r2t;\n }\n }\n\n this.best_huffman_divide = function (gfc, gi) {\n var cod_info2 = new GrInfo();\n var ix = gi.l3_enc;\n var r01_bits = new_int(7 + 15 + 1);\n var r01_div = new_int(7 + 15 + 1);\n var r0_tbl = new_int(7 + 15 + 1);\n var r1_tbl = new_int(7 + 15 + 1);\n\n /* SHORT BLOCK stuff fails for MPEG2 */\n if (gi.block_type == Encoder.SHORT_TYPE && gfc.mode_gr == 1)\n return;\n\n cod_info2.assign(gi);\n if (gi.block_type == Encoder.NORM_TYPE) {\n recalc_divide_init(gfc, gi, ix, r01_bits, r01_div, r0_tbl, r1_tbl);\n recalc_divide_sub(gfc, cod_info2, gi, ix, r01_bits, r01_div,\n r0_tbl, r1_tbl);\n }\n var i = cod_info2.big_values;\n if (i == 0 || (ix[i - 2] | ix[i - 1]) > 1)\n return;\n\n i = gi.count1 + 2;\n if (i > 576)\n return;\n\n /* Determines the number of bits to encode the quadruples. */\n cod_info2.assign(gi);\n cod_info2.count1 = i;\n var a1 = 0;\n var a2 = 0;\n\n assert(i <= 576);\n\n for (; i > cod_info2.big_values; i -= 4) {\n var p = ((ix[i - 4] * 2 + ix[i - 3]) * 2 + ix[i - 2]) * 2\n + ix[i - 1];\n a1 += Tables.t32l[p];\n a2 += Tables.t33l[p];\n }\n cod_info2.big_values = i;\n\n cod_info2.count1table_select = 0;\n if (a1 > a2) {\n a1 = a2;\n cod_info2.count1table_select = 1;\n }\n\n cod_info2.count1bits = a1;\n\n if (cod_info2.block_type == Encoder.NORM_TYPE)\n recalc_divide_sub(gfc, cod_info2, gi, ix, r01_bits, r01_div,\n r0_tbl, r1_tbl);\n else {\n /* Count the number of bits necessary to code the bigvalues region. */\n cod_info2.part2_3_length = a1;\n a1 = gfc.scalefac_band.l[7 + 1];\n if (a1 > i) {\n a1 = i;\n }\n if (a1 > 0) {\n var bi = new Bits(cod_info2.part2_3_length);\n cod_info2.table_select[0] = choose_table(ix, 0, a1, bi);\n cod_info2.part2_3_length = bi.bits;\n }\n if (i > a1) {\n var bi = new Bits(cod_info2.part2_3_length);\n cod_info2.table_select[1] = choose_table(ix, a1, i, bi);\n cod_info2.part2_3_length = bi.bits;\n }\n if (gi.part2_3_length > cod_info2.part2_3_length)\n gi.assign(cod_info2);\n }\n }\n\n var slen1_n = [1, 1, 1, 1, 8, 2, 2, 2, 4, 4, 4, 8, 8, 8, 16, 16];\n var slen2_n = [1, 2, 4, 8, 1, 2, 4, 8, 2, 4, 8, 2, 4, 8, 4, 8];\n var slen1_tab = [0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4];\n var slen2_tab = [0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3];\n Takehiro.slen1_tab = slen1_tab;\n Takehiro.slen2_tab = slen2_tab;\n\n function scfsi_calc(ch, l3_side) {\n var sfb;\n var gi = l3_side.tt[1][ch];\n var g0 = l3_side.tt[0][ch];\n\n for (var i = 0; i < Tables.scfsi_band.length - 1; i++) {\n for (sfb = Tables.scfsi_band[i]; sfb < Tables.scfsi_band[i + 1]; sfb++) {\n if (g0.scalefac[sfb] != gi.scalefac[sfb]\n && gi.scalefac[sfb] >= 0)\n break;\n }\n if (sfb == Tables.scfsi_band[i + 1]) {\n for (sfb = Tables.scfsi_band[i]; sfb < Tables.scfsi_band[i + 1]; sfb++) {\n gi.scalefac[sfb] = -1;\n }\n l3_side.scfsi[ch][i] = 1;\n }\n }\n var s1 = 0;\n var c1 = 0;\n for (sfb = 0; sfb < 11; sfb++) {\n if (gi.scalefac[sfb] == -1)\n continue;\n c1++;\n if (s1 < gi.scalefac[sfb])\n s1 = gi.scalefac[sfb];\n }\n var s2 = 0;\n var c2 = 0;\n for (; sfb < Encoder.SBPSY_l; sfb++) {\n if (gi.scalefac[sfb] == -1)\n continue;\n c2++;\n if (s2 < gi.scalefac[sfb])\n s2 = gi.scalefac[sfb];\n }\n\n for (var i = 0; i < 16; i++) {\n if (s1 < slen1_n[i] && s2 < slen2_n[i]) {\n var c = slen1_tab[i] * c1 + slen2_tab[i] * c2;\n if (gi.part2_length > c) {\n gi.part2_length = c;\n gi.scalefac_compress = i;\n }\n }\n }\n }\n\n /**\n * Find the optimal way to store the scalefactors. Only call this routine\n * after final scalefactors have been chosen and the channel/granule will\n * not be re-encoded.\n */\n this.best_scalefac_store = function (gfc, gr, ch, l3_side) {\n /* use scalefac_scale if we can */\n var gi = l3_side.tt[gr][ch];\n var sfb, i, j, l;\n var recalc = 0;\n\n /*\n * remove scalefacs from bands with ix=0. This idea comes from the AAC\n * ISO docs. added mt 3/00\n */\n /* check if l3_enc=0 */\n j = 0;\n for (sfb = 0; sfb < gi.sfbmax; sfb++) {\n var width = gi.width[sfb];\n assert(width >= 0);\n j += width;\n for (l = -width; l < 0; l++) {\n if (gi.l3_enc[l + j] != 0)\n break;\n }\n if (l == 0)\n gi.scalefac[sfb] = recalc = -2;\n /* anything goes. */\n /*\n * only best_scalefac_store and calc_scfsi know--and only they\n * should know--about the magic number -2.\n */\n }\n\n if (0 == gi.scalefac_scale && 0 == gi.preflag) {\n var s = 0;\n for (sfb = 0; sfb < gi.sfbmax; sfb++)\n if (gi.scalefac[sfb] > 0)\n s |= gi.scalefac[sfb];\n\n if (0 == (s & 1) && s != 0) {\n for (sfb = 0; sfb < gi.sfbmax; sfb++)\n if (gi.scalefac[sfb] > 0)\n gi.scalefac[sfb] >>= 1;\n\n gi.scalefac_scale = recalc = 1;\n }\n }\n\n if (0 == gi.preflag && gi.block_type != Encoder.SHORT_TYPE\n && gfc.mode_gr == 2) {\n for (sfb = 11; sfb < Encoder.SBPSY_l; sfb++)\n if (gi.scalefac[sfb] < qupvt.pretab[sfb]\n && gi.scalefac[sfb] != -2)\n break;\n if (sfb == Encoder.SBPSY_l) {\n for (sfb = 11; sfb < Encoder.SBPSY_l; sfb++)\n if (gi.scalefac[sfb] > 0)\n gi.scalefac[sfb] -= qupvt.pretab[sfb];\n\n gi.preflag = recalc = 1;\n }\n }\n\n for (i = 0; i < 4; i++)\n l3_side.scfsi[ch][i] = 0;\n\n if (gfc.mode_gr == 2 && gr == 1\n && l3_side.tt[0][ch].block_type != Encoder.SHORT_TYPE\n && l3_side.tt[1][ch].block_type != Encoder.SHORT_TYPE) {\n scfsi_calc(ch, l3_side);\n recalc = 0;\n }\n for (sfb = 0; sfb < gi.sfbmax; sfb++) {\n if (gi.scalefac[sfb] == -2) {\n gi.scalefac[sfb] = 0;\n /* if anything goes, then 0 is a good choice */\n }\n }\n if (recalc != 0) {\n if (gfc.mode_gr == 2) {\n this.scale_bitcount(gi);\n } else {\n this.scale_bitcount_lsf(gfc, gi);\n }\n }\n }\n\n function all_scalefactors_not_negative(scalefac, n) {\n for (var i = 0; i < n; ++i) {\n if (scalefac[i] < 0)\n return false;\n }\n return true;\n }\n\n /**\n * number of bits used to encode scalefacs.\n *\n * 18*slen1_tab[i] + 18*slen2_tab[i]\n */\n var scale_short = [0, 18, 36, 54, 54, 36, 54, 72,\n 54, 72, 90, 72, 90, 108, 108, 126];\n\n /**\n * number of bits used to encode scalefacs.\n *\n * 17*slen1_tab[i] + 18*slen2_tab[i]\n */\n var scale_mixed = [0, 18, 36, 54, 51, 35, 53, 71,\n 52, 70, 88, 69, 87, 105, 104, 122];\n\n /**\n * number of bits used to encode scalefacs.\n *\n * 11*slen1_tab[i] + 10*slen2_tab[i]\n */\n var scale_long = [0, 10, 20, 30, 33, 21, 31, 41, 32, 42,\n 52, 43, 53, 63, 64, 74];\n\n /**\n * Also calculates the number of bits necessary to code the scalefactors.\n */\n this.scale_bitcount = function (cod_info) {\n var k, sfb, max_slen1 = 0, max_slen2 = 0;\n\n /* maximum values */\n var tab;\n var scalefac = cod_info.scalefac;\n\n assert(all_scalefactors_not_negative(scalefac, cod_info.sfbmax));\n\n if (cod_info.block_type == Encoder.SHORT_TYPE) {\n tab = scale_short;\n if (cod_info.mixed_block_flag != 0)\n tab = scale_mixed;\n } else { /* block_type == 1,2,or 3 */\n tab = scale_long;\n if (0 == cod_info.preflag) {\n for (sfb = 11; sfb < Encoder.SBPSY_l; sfb++)\n if (scalefac[sfb] < qupvt.pretab[sfb])\n break;\n\n if (sfb == Encoder.SBPSY_l) {\n cod_info.preflag = 1;\n for (sfb = 11; sfb < Encoder.SBPSY_l; sfb++)\n scalefac[sfb] -= qupvt.pretab[sfb];\n }\n }\n }\n\n for (sfb = 0; sfb < cod_info.sfbdivide; sfb++)\n if (max_slen1 < scalefac[sfb])\n max_slen1 = scalefac[sfb];\n\n for (; sfb < cod_info.sfbmax; sfb++)\n if (max_slen2 < scalefac[sfb])\n max_slen2 = scalefac[sfb];\n\n /*\n * from Takehiro TOMINAGA 10/99 loop over *all*\n * posible values of scalefac_compress to find the one which uses the\n * smallest number of bits. ISO would stop at first valid index\n */\n cod_info.part2_length = QuantizePVT.LARGE_BITS;\n for (k = 0; k < 16; k++) {\n if (max_slen1 < slen1_n[k] && max_slen2 < slen2_n[k]\n && cod_info.part2_length > tab[k]) {\n cod_info.part2_length = tab[k];\n cod_info.scalefac_compress = k;\n }\n }\n return cod_info.part2_length == QuantizePVT.LARGE_BITS;\n }\n\n /**\n * table of largest scalefactor values for MPEG2\n */\n var max_range_sfac_tab = [[15, 15, 7, 7],\n [15, 15, 7, 0], [7, 3, 0, 0], [15, 31, 31, 0],\n [7, 7, 7, 0], [3, 3, 0, 0]];\n\n /**\n * Also counts the number of bits to encode the scalefacs but for MPEG 2\n * Lower sampling frequencies (24, 22.05 and 16 kHz.)\n *\n * This is reverse-engineered from section 2.4.3.2 of the MPEG2 IS,\n * \"Audio Decoding Layer III\"\n */\n this.scale_bitcount_lsf = function (gfc, cod_info) {\n var table_number, row_in_table, partition, nr_sfb, window;\n var over;\n var i, sfb;\n var max_sfac = new_int(4);\n//var partition_table;\n var scalefac = cod_info.scalefac;\n\n /*\n * Set partition table. Note that should try to use table one, but do\n * not yet...\n */\n if (cod_info.preflag != 0)\n table_number = 2;\n else\n table_number = 0;\n\n for (i = 0; i < 4; i++)\n max_sfac[i] = 0;\n\n if (cod_info.block_type == Encoder.SHORT_TYPE) {\n row_in_table = 1;\n var partition_table = qupvt.nr_of_sfb_block[table_number][row_in_table];\n for (sfb = 0, partition = 0; partition < 4; partition++) {\n nr_sfb = partition_table[partition] / 3;\n for (i = 0; i < nr_sfb; i++, sfb++)\n for (window = 0; window < 3; window++)\n if (scalefac[sfb * 3 + window] > max_sfac[partition])\n max_sfac[partition] = scalefac[sfb * 3 + window];\n }\n } else {\n row_in_table = 0;\n var partition_table = qupvt.nr_of_sfb_block[table_number][row_in_table];\n for (sfb = 0, partition = 0; partition < 4; partition++) {\n nr_sfb = partition_table[partition];\n for (i = 0; i < nr_sfb; i++, sfb++)\n if (scalefac[sfb] > max_sfac[partition])\n max_sfac[partition] = scalefac[sfb];\n }\n }\n\n for (over = false, partition = 0; partition < 4; partition++) {\n if (max_sfac[partition] > max_range_sfac_tab[table_number][partition])\n over = true;\n }\n if (!over) {\n var slen1, slen2, slen3, slen4;\n\n cod_info.sfb_partition_table = qupvt.nr_of_sfb_block[table_number][row_in_table];\n for (partition = 0; partition < 4; partition++)\n cod_info.slen[partition] = log2tab[max_sfac[partition]];\n\n /* set scalefac_compress */\n slen1 = cod_info.slen[0];\n slen2 = cod_info.slen[1];\n slen3 = cod_info.slen[2];\n slen4 = cod_info.slen[3];\n\n switch (table_number) {\n case 0:\n cod_info.scalefac_compress = (((slen1 * 5) + slen2) << 4)\n + (slen3 << 2) + slen4;\n break;\n\n case 1:\n cod_info.scalefac_compress = 400 + (((slen1 * 5) + slen2) << 2)\n + slen3;\n break;\n\n case 2:\n cod_info.scalefac_compress = 500 + (slen1 * 3) + slen2;\n break;\n\n default:\n System.err.printf(\"intensity stereo not implemented yet\\n\");\n break;\n }\n }\n if (!over) {\n assert(cod_info.sfb_partition_table != null);\n cod_info.part2_length = 0;\n for (partition = 0; partition < 4; partition++)\n cod_info.part2_length += cod_info.slen[partition]\n * cod_info.sfb_partition_table[partition];\n }\n return over;\n }\n\n /*\n * Since no bands have been over-amplified, we can set scalefac_compress and\n * slen[] for the formatter\n */\n var log2tab = [0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4,\n 4, 4, 4, 4];\n\n this.huffman_init = function (gfc) {\n for (var i = 2; i <= 576; i += 2) {\n var scfb_anz = 0, bv_index;\n while (gfc.scalefac_band.l[++scfb_anz] < i)\n ;\n\n bv_index = subdv_table[scfb_anz][0]; // .region0_count\n while (gfc.scalefac_band.l[bv_index + 1] > i)\n bv_index--;\n\n if (bv_index < 0) {\n /*\n * this is an indication that everything is going to be encoded\n * as region0: bigvalues < region0 < region1 so lets set\n * region0, region1 to some value larger than bigvalues\n */\n bv_index = subdv_table[scfb_anz][0]; // .region0_count\n }\n\n gfc.bv_scf[i - 2] = bv_index;\n\n bv_index = subdv_table[scfb_anz][1]; // .region1_count\n while (gfc.scalefac_band.l[bv_index + gfc.bv_scf[i - 2] + 2] > i)\n bv_index--;\n\n if (bv_index < 0) {\n bv_index = subdv_table[scfb_anz][1]; // .region1_count\n }\n\n gfc.bv_scf[i - 1] = bv_index;\n }\n }\n}\n\nmodule.exports = Takehiro;\n","var common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nvar Takehiro = require('./Takehiro.js');\nvar Tables = require('./Tables.js');\nvar Encoder = require('./Encoder.js');\nvar LameInternalFlags = require('./LameInternalFlags.js');\n\nBitStream.EQ = function (a, b) {\n return (Math.abs(a) > Math.abs(b)) ? (Math.abs((a) - (b)) <= (Math\n .abs(a) * 1e-6))\n : (Math.abs((a) - (b)) <= (Math.abs(b) * 1e-6));\n};\n\nBitStream.NEQ = function (a, b) {\n return !BitStream.EQ(a, b);\n};\n\nfunction BitStream() {\n var self = this;\n var CRC16_POLYNOMIAL = 0x8005;\n\n /*\n * we work with ints, so when doing bit manipulation, we limit ourselves to\n * MAX_LENGTH-2 just to be on the safe side\n */\n var MAX_LENGTH = 32;\n\n //GainAnalysis ga;\n //MPGLib mpg;\n //Version ver;\n //VBRTag vbr;\n var ga = null;\n var mpg = null;\n var ver = null;\n var vbr = null;\n\n //public final void setModules(GainAnalysis ga, MPGLib mpg, Version ver,\n //\tVBRTag vbr) {\n\n this.setModules = function (_ga, _mpg, _ver, _vbr) {\n ga = _ga;\n mpg = _mpg;\n ver = _ver;\n vbr = _vbr;\n };\n\n /**\n * Bit stream buffer.\n */\n //private byte[] buf;\n var buf = null;\n /**\n * Bit counter of bit stream.\n */\n var totbit = 0;\n /**\n * Pointer to top byte in buffer.\n */\n var bufByteIdx = 0;\n /**\n * Pointer to top bit of top byte in buffer.\n */\n var bufBitIdx = 0;\n\n /**\n * compute bitsperframe and mean_bits for a layer III frame\n */\n this.getframebits = function (gfp) {\n var gfc = gfp.internal_flags;\n var bit_rate;\n\n /* get bitrate in kbps [?] */\n if (gfc.bitrate_index != 0)\n bit_rate = Tables.bitrate_table[gfp.version][gfc.bitrate_index];\n else\n bit_rate = gfp.brate;\n assert(8 <= bit_rate && bit_rate <= 640);\n\n /* main encoding routine toggles padding on and off */\n /* one Layer3 Slot consists of 8 bits */\n var bytes = 0 | (gfp.version + 1) * 72000 * bit_rate / gfp.out_samplerate + gfc.padding;\n return 8 * bytes;\n };\n\n function putheader_bits(gfc) {\n System.arraycopy(gfc.header[gfc.w_ptr].buf, 0, buf, bufByteIdx, gfc.sideinfo_len);\n bufByteIdx += gfc.sideinfo_len;\n totbit += gfc.sideinfo_len * 8;\n gfc.w_ptr = (gfc.w_ptr + 1) & (LameInternalFlags.MAX_HEADER_BUF - 1);\n }\n\n /**\n * write j bits into the bit stream\n */\n function putbits2(gfc, val, j) {\n assert(j < MAX_LENGTH - 2);\n\n while (j > 0) {\n var k;\n if (bufBitIdx == 0) {\n bufBitIdx = 8;\n bufByteIdx++;\n assert(bufByteIdx < Lame.LAME_MAXMP3BUFFER);\n assert(gfc.header[gfc.w_ptr].write_timing >= totbit);\n if (gfc.header[gfc.w_ptr].write_timing == totbit) {\n putheader_bits(gfc);\n }\n buf[bufByteIdx] = 0;\n }\n\n k = Math.min(j, bufBitIdx);\n j -= k;\n\n bufBitIdx -= k;\n\n assert(j < MAX_LENGTH);\n /* 32 too large on 32 bit machines */\n assert(bufBitIdx < MAX_LENGTH);\n\n buf[bufByteIdx] |= ((val >> j) << bufBitIdx);\n totbit += k;\n }\n }\n\n /**\n * write j bits into the bit stream, ignoring frame headers\n */\n function putbits_noheaders(gfc, val, j) {\n assert(j < MAX_LENGTH - 2);\n\n while (j > 0) {\n var k;\n if (bufBitIdx == 0) {\n bufBitIdx = 8;\n bufByteIdx++;\n assert(bufByteIdx < Lame.LAME_MAXMP3BUFFER);\n buf[bufByteIdx] = 0;\n }\n\n k = Math.min(j, bufBitIdx);\n j -= k;\n\n bufBitIdx -= k;\n\n assert(j < MAX_LENGTH);\n /* 32 too large on 32 bit machines */\n assert(bufBitIdx < MAX_LENGTH);\n\n buf[bufByteIdx] |= ((val >> j) << bufBitIdx);\n totbit += k;\n }\n }\n\n /**\n * Some combinations of bitrate, Fs, and stereo make it impossible to stuff\n * out a frame using just main_data, due to the limited number of bits to\n * indicate main_data_length. In these situations, we put stuffing bits into\n * the ancillary data...\n */\n function drain_into_ancillary(gfp, remainingBits) {\n var gfc = gfp.internal_flags;\n var i;\n assert(remainingBits >= 0);\n\n if (remainingBits >= 8) {\n putbits2(gfc, 0x4c, 8);\n remainingBits -= 8;\n }\n if (remainingBits >= 8) {\n putbits2(gfc, 0x41, 8);\n remainingBits -= 8;\n }\n if (remainingBits >= 8) {\n putbits2(gfc, 0x4d, 8);\n remainingBits -= 8;\n }\n if (remainingBits >= 8) {\n putbits2(gfc, 0x45, 8);\n remainingBits -= 8;\n }\n\n if (remainingBits >= 32) {\n var version = ver.getLameShortVersion();\n if (remainingBits >= 32)\n for (i = 0; i < version.length && remainingBits >= 8; ++i) {\n remainingBits -= 8;\n putbits2(gfc, version.charAt(i), 8);\n }\n }\n\n for (; remainingBits >= 1; remainingBits -= 1) {\n putbits2(gfc, gfc.ancillary_flag, 1);\n gfc.ancillary_flag ^= (!gfp.disable_reservoir ? 1 : 0);\n }\n\n assert(remainingBits == 0);\n\n }\n\n /**\n * write N bits into the header\n */\n function writeheader(gfc, val, j) {\n var ptr = gfc.header[gfc.h_ptr].ptr;\n\n while (j > 0) {\n var k = Math.min(j, 8 - (ptr & 7));\n j -= k;\n assert(j < MAX_LENGTH);\n /* >> 32 too large for 32 bit machines */\n\n gfc.header[gfc.h_ptr].buf[ptr >> 3] |= ((val >> j)) << (8 - (ptr & 7) - k);\n ptr += k;\n }\n gfc.header[gfc.h_ptr].ptr = ptr;\n }\n\n function CRC_update(value, crc) {\n value <<= 8;\n for (var i = 0; i < 8; i++) {\n value <<= 1;\n crc <<= 1;\n\n if ((((crc ^ value) & 0x10000) != 0))\n crc ^= CRC16_POLYNOMIAL;\n }\n return crc;\n }\n\n this.CRC_writeheader = function (gfc, header) {\n var crc = 0xffff;\n /* (jo) init crc16 for error_protection */\n\n crc = CRC_update(header[2] & 0xff, crc);\n crc = CRC_update(header[3] & 0xff, crc);\n for (var i = 6; i < gfc.sideinfo_len; i++) {\n crc = CRC_update(header[i] & 0xff, crc);\n }\n\n header[4] = (byte)(crc >> 8);\n header[5] = (byte)(crc & 255);\n };\n\n function encodeSideInfo2(gfp, bitsPerFrame) {\n var gfc = gfp.internal_flags;\n var l3_side;\n var gr, ch;\n\n l3_side = gfc.l3_side;\n gfc.header[gfc.h_ptr].ptr = 0;\n Arrays.fill(gfc.header[gfc.h_ptr].buf, 0, gfc.sideinfo_len, 0);\n if (gfp.out_samplerate < 16000)\n writeheader(gfc, 0xffe, 12);\n else\n writeheader(gfc, 0xfff, 12);\n writeheader(gfc, (gfp.version), 1);\n writeheader(gfc, 4 - 3, 2);\n writeheader(gfc, (!gfp.error_protection ? 1 : 0), 1);\n writeheader(gfc, (gfc.bitrate_index), 4);\n writeheader(gfc, (gfc.samplerate_index), 2);\n writeheader(gfc, (gfc.padding), 1);\n writeheader(gfc, (gfp.extension), 1);\n writeheader(gfc, (gfp.mode.ordinal()), 2);\n writeheader(gfc, (gfc.mode_ext), 2);\n writeheader(gfc, (gfp.copyright), 1);\n writeheader(gfc, (gfp.original), 1);\n writeheader(gfc, (gfp.emphasis), 2);\n if (gfp.error_protection) {\n writeheader(gfc, 0, 16);\n /* dummy */\n }\n\n if (gfp.version == 1) {\n /* MPEG1 */\n assert(l3_side.main_data_begin >= 0);\n writeheader(gfc, (l3_side.main_data_begin), 9);\n\n if (gfc.channels_out == 2)\n writeheader(gfc, l3_side.private_bits, 3);\n else\n writeheader(gfc, l3_side.private_bits, 5);\n\n for (ch = 0; ch < gfc.channels_out; ch++) {\n var band;\n for (band = 0; band < 4; band++) {\n writeheader(gfc, l3_side.scfsi[ch][band], 1);\n }\n }\n\n for (gr = 0; gr < 2; gr++) {\n for (ch = 0; ch < gfc.channels_out; ch++) {\n var gi = l3_side.tt[gr][ch];\n writeheader(gfc, gi.part2_3_length + gi.part2_length, 12);\n writeheader(gfc, gi.big_values / 2, 9);\n writeheader(gfc, gi.global_gain, 8);\n writeheader(gfc, gi.scalefac_compress, 4);\n\n if (gi.block_type != Encoder.NORM_TYPE) {\n writeheader(gfc, 1, 1);\n /* window_switching_flag */\n writeheader(gfc, gi.block_type, 2);\n writeheader(gfc, gi.mixed_block_flag, 1);\n\n if (gi.table_select[0] == 14)\n gi.table_select[0] = 16;\n writeheader(gfc, gi.table_select[0], 5);\n if (gi.table_select[1] == 14)\n gi.table_select[1] = 16;\n writeheader(gfc, gi.table_select[1], 5);\n\n writeheader(gfc, gi.subblock_gain[0], 3);\n writeheader(gfc, gi.subblock_gain[1], 3);\n writeheader(gfc, gi.subblock_gain[2], 3);\n } else {\n writeheader(gfc, 0, 1);\n /* window_switching_flag */\n if (gi.table_select[0] == 14)\n gi.table_select[0] = 16;\n writeheader(gfc, gi.table_select[0], 5);\n if (gi.table_select[1] == 14)\n gi.table_select[1] = 16;\n writeheader(gfc, gi.table_select[1], 5);\n if (gi.table_select[2] == 14)\n gi.table_select[2] = 16;\n writeheader(gfc, gi.table_select[2], 5);\n\n assert(0 <= gi.region0_count && gi.region0_count < 16);\n assert(0 <= gi.region1_count && gi.region1_count < 8);\n writeheader(gfc, gi.region0_count, 4);\n writeheader(gfc, gi.region1_count, 3);\n }\n writeheader(gfc, gi.preflag, 1);\n writeheader(gfc, gi.scalefac_scale, 1);\n writeheader(gfc, gi.count1table_select, 1);\n }\n }\n } else {\n /* MPEG2 */\n assert(l3_side.main_data_begin >= 0);\n writeheader(gfc, (l3_side.main_data_begin), 8);\n writeheader(gfc, l3_side.private_bits, gfc.channels_out);\n\n gr = 0;\n for (ch = 0; ch < gfc.channels_out; ch++) {\n var gi = l3_side.tt[gr][ch];\n writeheader(gfc, gi.part2_3_length + gi.part2_length, 12);\n writeheader(gfc, gi.big_values / 2, 9);\n writeheader(gfc, gi.global_gain, 8);\n writeheader(gfc, gi.scalefac_compress, 9);\n\n if (gi.block_type != Encoder.NORM_TYPE) {\n writeheader(gfc, 1, 1);\n /* window_switching_flag */\n writeheader(gfc, gi.block_type, 2);\n writeheader(gfc, gi.mixed_block_flag, 1);\n\n if (gi.table_select[0] == 14)\n gi.table_select[0] = 16;\n writeheader(gfc, gi.table_select[0], 5);\n if (gi.table_select[1] == 14)\n gi.table_select[1] = 16;\n writeheader(gfc, gi.table_select[1], 5);\n\n writeheader(gfc, gi.subblock_gain[0], 3);\n writeheader(gfc, gi.subblock_gain[1], 3);\n writeheader(gfc, gi.subblock_gain[2], 3);\n } else {\n writeheader(gfc, 0, 1);\n /* window_switching_flag */\n if (gi.table_select[0] == 14)\n gi.table_select[0] = 16;\n writeheader(gfc, gi.table_select[0], 5);\n if (gi.table_select[1] == 14)\n gi.table_select[1] = 16;\n writeheader(gfc, gi.table_select[1], 5);\n if (gi.table_select[2] == 14)\n gi.table_select[2] = 16;\n writeheader(gfc, gi.table_select[2], 5);\n\n assert(0 <= gi.region0_count && gi.region0_count < 16);\n assert(0 <= gi.region1_count && gi.region1_count < 8);\n writeheader(gfc, gi.region0_count, 4);\n writeheader(gfc, gi.region1_count, 3);\n }\n\n writeheader(gfc, gi.scalefac_scale, 1);\n writeheader(gfc, gi.count1table_select, 1);\n }\n }\n\n if (gfp.error_protection) {\n /* (jo) error_protection: add crc16 information to header */\n CRC_writeheader(gfc, gfc.header[gfc.h_ptr].buf);\n }\n\n {\n var old = gfc.h_ptr;\n assert(gfc.header[old].ptr == gfc.sideinfo_len * 8);\n\n gfc.h_ptr = (old + 1) & (LameInternalFlags.MAX_HEADER_BUF - 1);\n gfc.header[gfc.h_ptr].write_timing = gfc.header[old].write_timing\n + bitsPerFrame;\n\n if (gfc.h_ptr == gfc.w_ptr) {\n /* yikes! we are out of header buffer space */\n System.err\n .println(\"Error: MAX_HEADER_BUF too small in bitstream.c \\n\");\n }\n\n }\n }\n\n function huffman_coder_count1(gfc, gi) {\n /* Write count1 area */\n var h = Tables.ht[gi.count1table_select + 32];\n var i, bits = 0;\n\n var ix = gi.big_values;\n var xr = gi.big_values;\n assert(gi.count1table_select < 2);\n\n for (i = (gi.count1 - gi.big_values) / 4; i > 0; --i) {\n var huffbits = 0;\n var p = 0, v;\n\n v = gi.l3_enc[ix + 0];\n if (v != 0) {\n p += 8;\n if (gi.xr[xr + 0] < 0)\n huffbits++;\n assert(v <= 1);\n }\n\n v = gi.l3_enc[ix + 1];\n if (v != 0) {\n p += 4;\n huffbits *= 2;\n if (gi.xr[xr + 1] < 0)\n huffbits++;\n assert(v <= 1);\n }\n\n v = gi.l3_enc[ix + 2];\n if (v != 0) {\n p += 2;\n huffbits *= 2;\n if (gi.xr[xr + 2] < 0)\n huffbits++;\n assert(v <= 1);\n }\n\n v = gi.l3_enc[ix + 3];\n if (v != 0) {\n p++;\n huffbits *= 2;\n if (gi.xr[xr + 3] < 0)\n huffbits++;\n assert(v <= 1);\n }\n\n ix += 4;\n xr += 4;\n putbits2(gfc, huffbits + h.table[p], h.hlen[p]);\n bits += h.hlen[p];\n }\n return bits;\n }\n\n /**\n * Implements the pseudocode of page 98 of the IS\n */\n function Huffmancode(gfc, tableindex, start, end, gi) {\n var h = Tables.ht[tableindex];\n var bits = 0;\n\n assert(tableindex < 32);\n if (0 == tableindex)\n return bits;\n\n for (var i = start; i < end; i += 2) {\n var cbits = 0;\n var xbits = 0;\n var linbits = h.xlen;\n var xlen = h.xlen;\n var ext = 0;\n var x1 = gi.l3_enc[i];\n var x2 = gi.l3_enc[i + 1];\n\n if (x1 != 0) {\n if (gi.xr[i] < 0)\n ext++;\n cbits--;\n }\n\n if (tableindex > 15) {\n /* use ESC-words */\n if (x1 > 14) {\n var linbits_x1 = x1 - 15;\n assert(linbits_x1 <= h.linmax);\n ext |= linbits_x1 << 1;\n xbits = linbits;\n x1 = 15;\n }\n\n if (x2 > 14) {\n var linbits_x2 = x2 - 15;\n assert(linbits_x2 <= h.linmax);\n ext <<= linbits;\n ext |= linbits_x2;\n xbits += linbits;\n x2 = 15;\n }\n xlen = 16;\n }\n\n if (x2 != 0) {\n ext <<= 1;\n if (gi.xr[i + 1] < 0)\n ext++;\n cbits--;\n }\n\n assert((x1 | x2) < 16);\n\n x1 = x1 * xlen + x2;\n xbits -= cbits;\n cbits += h.hlen[x1];\n\n assert(cbits <= MAX_LENGTH);\n assert(xbits <= MAX_LENGTH);\n\n putbits2(gfc, h.table[x1], cbits);\n putbits2(gfc, ext, xbits);\n bits += cbits + xbits;\n }\n return bits;\n }\n\n /**\n * Note the discussion of huffmancodebits() on pages 28 and 29 of the IS, as\n * well as the definitions of the side information on pages 26 and 27.\n */\n function ShortHuffmancodebits(gfc, gi) {\n var region1Start = 3 * gfc.scalefac_band.s[3];\n if (region1Start > gi.big_values)\n region1Start = gi.big_values;\n\n /* short blocks do not have a region2 */\n var bits = Huffmancode(gfc, gi.table_select[0], 0, region1Start, gi);\n bits += Huffmancode(gfc, gi.table_select[1], region1Start,\n gi.big_values, gi);\n return bits;\n }\n\n function LongHuffmancodebits(gfc, gi) {\n var bigvalues, bits;\n var region1Start, region2Start;\n\n bigvalues = gi.big_values;\n assert(0 <= bigvalues && bigvalues <= 576);\n\n var i = gi.region0_count + 1;\n assert(0 <= i);\n assert(i < gfc.scalefac_band.l.length);\n region1Start = gfc.scalefac_band.l[i];\n i += gi.region1_count + 1;\n assert(0 <= i);\n assert(i < gfc.scalefac_band.l.length);\n region2Start = gfc.scalefac_band.l[i];\n\n if (region1Start > bigvalues)\n region1Start = bigvalues;\n\n if (region2Start > bigvalues)\n region2Start = bigvalues;\n\n bits = Huffmancode(gfc, gi.table_select[0], 0, region1Start, gi);\n bits += Huffmancode(gfc, gi.table_select[1], region1Start,\n region2Start, gi);\n bits += Huffmancode(gfc, gi.table_select[2], region2Start, bigvalues,\n gi);\n return bits;\n }\n\n function writeMainData(gfp) {\n var gr, ch, sfb, data_bits, tot_bits = 0;\n var gfc = gfp.internal_flags;\n var l3_side = gfc.l3_side;\n\n if (gfp.version == 1) {\n /* MPEG 1 */\n for (gr = 0; gr < 2; gr++) {\n for (ch = 0; ch < gfc.channels_out; ch++) {\n var gi = l3_side.tt[gr][ch];\n var slen1 = Takehiro.slen1_tab[gi.scalefac_compress];\n var slen2 = Takehiro.slen2_tab[gi.scalefac_compress];\n data_bits = 0;\n for (sfb = 0; sfb < gi.sfbdivide; sfb++) {\n if (gi.scalefac[sfb] == -1)\n continue;\n /* scfsi is used */\n putbits2(gfc, gi.scalefac[sfb], slen1);\n data_bits += slen1;\n }\n for (; sfb < gi.sfbmax; sfb++) {\n if (gi.scalefac[sfb] == -1)\n continue;\n /* scfsi is used */\n putbits2(gfc, gi.scalefac[sfb], slen2);\n data_bits += slen2;\n }\n assert(data_bits == gi.part2_length);\n\n if (gi.block_type == Encoder.SHORT_TYPE) {\n data_bits += ShortHuffmancodebits(gfc, gi);\n } else {\n data_bits += LongHuffmancodebits(gfc, gi);\n }\n data_bits += huffman_coder_count1(gfc, gi);\n /* does bitcount in quantize.c agree with actual bit count? */\n assert(data_bits == gi.part2_3_length + gi.part2_length);\n tot_bits += data_bits;\n }\n /* for ch */\n }\n /* for gr */\n } else {\n /* MPEG 2 */\n gr = 0;\n for (ch = 0; ch < gfc.channels_out; ch++) {\n var gi = l3_side.tt[gr][ch];\n var i, sfb_partition, scale_bits = 0;\n assert(gi.sfb_partition_table != null);\n data_bits = 0;\n sfb = 0;\n sfb_partition = 0;\n\n if (gi.block_type == Encoder.SHORT_TYPE) {\n for (; sfb_partition < 4; sfb_partition++) {\n var sfbs = gi.sfb_partition_table[sfb_partition] / 3;\n var slen = gi.slen[sfb_partition];\n for (i = 0; i < sfbs; i++, sfb++) {\n putbits2(gfc,\n Math.max(gi.scalefac[sfb * 3 + 0], 0), slen);\n putbits2(gfc,\n Math.max(gi.scalefac[sfb * 3 + 1], 0), slen);\n putbits2(gfc,\n Math.max(gi.scalefac[sfb * 3 + 2], 0), slen);\n scale_bits += 3 * slen;\n }\n }\n data_bits += ShortHuffmancodebits(gfc, gi);\n } else {\n for (; sfb_partition < 4; sfb_partition++) {\n var sfbs = gi.sfb_partition_table[sfb_partition];\n var slen = gi.slen[sfb_partition];\n for (i = 0; i < sfbs; i++, sfb++) {\n putbits2(gfc, Math.max(gi.scalefac[sfb], 0), slen);\n scale_bits += slen;\n }\n }\n data_bits += LongHuffmancodebits(gfc, gi);\n }\n data_bits += huffman_coder_count1(gfc, gi);\n /* does bitcount in quantize.c agree with actual bit count? */\n assert(data_bits == gi.part2_3_length);\n assert(scale_bits == gi.part2_length);\n tot_bits += scale_bits + data_bits;\n }\n /* for ch */\n }\n /* for gf */\n return tot_bits;\n }\n\n /* main_data */\n\n function TotalBytes() {\n this.total = 0;\n }\n\n /*\n * compute the number of bits required to flush all mp3 frames currently in\n * the buffer. This should be the same as the reservoir size. Only call this\n * routine between frames - i.e. only after all headers and data have been\n * added to the buffer by format_bitstream().\n *\n * Also compute total_bits_output = size of mp3 buffer (including frame\n * headers which may not have yet been send to the mp3 buffer) + number of\n * bits needed to flush all mp3 frames.\n *\n * total_bytes_output is the size of the mp3 output buffer if\n * lame_encode_flush_nogap() was called right now.\n */\n function compute_flushbits(gfp, total_bytes_output) {\n var gfc = gfp.internal_flags;\n var flushbits, remaining_headers;\n var bitsPerFrame;\n var last_ptr, first_ptr;\n first_ptr = gfc.w_ptr;\n /* first header to add to bitstream */\n last_ptr = gfc.h_ptr - 1;\n /* last header to add to bitstream */\n if (last_ptr == -1)\n last_ptr = LameInternalFlags.MAX_HEADER_BUF - 1;\n\n /* add this many bits to bitstream so we can flush all headers */\n flushbits = gfc.header[last_ptr].write_timing - totbit;\n total_bytes_output.total = flushbits;\n\n if (flushbits >= 0) {\n /* if flushbits >= 0, some headers have not yet been written */\n /* reduce flushbits by the size of the headers */\n remaining_headers = 1 + last_ptr - first_ptr;\n if (last_ptr < first_ptr)\n remaining_headers = 1 + last_ptr - first_ptr\n + LameInternalFlags.MAX_HEADER_BUF;\n flushbits -= remaining_headers * 8 * gfc.sideinfo_len;\n }\n\n /*\n * finally, add some bits so that the last frame is complete these bits\n * are not necessary to decode the last frame, but some decoders will\n * ignore last frame if these bits are missing\n */\n bitsPerFrame = self.getframebits(gfp);\n flushbits += bitsPerFrame;\n total_bytes_output.total += bitsPerFrame;\n /* round up: */\n if ((total_bytes_output.total % 8) != 0)\n total_bytes_output.total = 1 + (total_bytes_output.total / 8);\n else\n total_bytes_output.total = (total_bytes_output.total / 8);\n total_bytes_output.total += bufByteIdx + 1;\n\n if (flushbits < 0) {\n System.err.println(\"strange error flushing buffer ... \\n\");\n }\n return flushbits;\n }\n\n this.flush_bitstream = function (gfp) {\n var gfc = gfp.internal_flags;\n var l3_side;\n var flushbits;\n var last_ptr = gfc.h_ptr - 1;\n /* last header to add to bitstream */\n if (last_ptr == -1)\n last_ptr = LameInternalFlags.MAX_HEADER_BUF - 1;\n l3_side = gfc.l3_side;\n\n if ((flushbits = compute_flushbits(gfp, new TotalBytes())) < 0)\n return;\n drain_into_ancillary(gfp, flushbits);\n\n /* check that the 100% of the last frame has been written to bitstream */\n assert(gfc.header[last_ptr].write_timing + this.getframebits(gfp) == totbit);\n\n /*\n * we have padded out all frames with ancillary data, which is the same\n * as filling the bitreservoir with ancillary data, so :\n */\n gfc.ResvSize = 0;\n l3_side.main_data_begin = 0;\n\n /* save the ReplayGain value */\n if (gfc.findReplayGain) {\n var RadioGain = ga.GetTitleGain(gfc.rgdata);\n assert(NEQ(RadioGain, GainAnalysis.GAIN_NOT_ENOUGH_SAMPLES));\n gfc.RadioGain = Math.floor(RadioGain * 10.0 + 0.5) | 0;\n /* round to nearest */\n }\n\n /* find the gain and scale change required for no clipping */\n if (gfc.findPeakSample) {\n gfc.noclipGainChange = Math.ceil(Math\n .log10(gfc.PeakSample / 32767.0) * 20.0 * 10.0) | 0;\n /* round up */\n\n if (gfc.noclipGainChange > 0) {\n /* clipping occurs */\n if (EQ(gfp.scale, 1.0) || EQ(gfp.scale, 0.0))\n gfc.noclipScale = (Math\n .floor((32767.0 / gfc.PeakSample) * 100.0) / 100.0);\n /* round down */\n else {\n /*\n * the user specified his own scaling factor. We could\n * suggest the scaling factor of\n * (32767.0/gfp.PeakSample)*(gfp.scale) but it's usually\n * very inaccurate. So we'd rather not advice him on the\n * scaling factor.\n */\n gfc.noclipScale = -1;\n }\n } else\n /* no clipping */\n gfc.noclipScale = -1;\n }\n };\n\n this.add_dummy_byte = function (gfp, val, n) {\n var gfc = gfp.internal_flags;\n var i;\n\n while (n-- > 0) {\n putbits_noheaders(gfc, val, 8);\n\n for (i = 0; i < LameInternalFlags.MAX_HEADER_BUF; ++i)\n gfc.header[i].write_timing += 8;\n }\n };\n\n /**\n * This is called after a frame of audio has been quantized and coded. It\n * will write the encoded audio to the bitstream. Note that from a layer3\n * encoder's perspective the bit stream is primarily a series of main_data()\n * blocks, with header and side information inserted at the proper locations\n * to maintain framing. (See Figure A.7 in the IS).\n */\n this.format_bitstream = function (gfp) {\n var gfc = gfp.internal_flags;\n var l3_side;\n l3_side = gfc.l3_side;\n\n var bitsPerFrame = this.getframebits(gfp);\n drain_into_ancillary(gfp, l3_side.resvDrain_pre);\n\n encodeSideInfo2(gfp, bitsPerFrame);\n var bits = 8 * gfc.sideinfo_len;\n bits += writeMainData(gfp);\n drain_into_ancillary(gfp, l3_side.resvDrain_post);\n bits += l3_side.resvDrain_post;\n\n l3_side.main_data_begin += (bitsPerFrame - bits) / 8;\n\n /*\n * compare number of bits needed to clear all buffered mp3 frames with\n * what we think the resvsize is:\n */\n if (compute_flushbits(gfp, new TotalBytes()) != gfc.ResvSize) {\n System.err.println(\"Internal buffer inconsistency. flushbits <> ResvSize\");\n }\n\n /*\n * compare main_data_begin for the next frame with what we think the\n * resvsize is:\n */\n if ((l3_side.main_data_begin * 8) != gfc.ResvSize) {\n System.err.printf(\"bit reservoir error: \\n\"\n + \"l3_side.main_data_begin: %d \\n\"\n + \"Resvoir size: %d \\n\"\n + \"resv drain (post) %d \\n\"\n + \"resv drain (pre) %d \\n\"\n + \"header and sideinfo: %d \\n\"\n + \"data bits: %d \\n\"\n + \"total bits: %d (remainder: %d) \\n\"\n + \"bitsperframe: %d \\n\",\n 8 * l3_side.main_data_begin, gfc.ResvSize,\n l3_side.resvDrain_post, l3_side.resvDrain_pre,\n 8 * gfc.sideinfo_len, bits - l3_side.resvDrain_post - 8\n * gfc.sideinfo_len, bits, bits % 8, bitsPerFrame);\n\n System.err.println(\"This is a fatal error. It has several possible causes:\");\n System.err.println(\"90%% LAME compiled with buggy version of gcc using advanced optimizations\");\n System.err.println(\" 9%% Your system is overclocked\");\n System.err.println(\" 1%% bug in LAME encoding library\");\n\n gfc.ResvSize = l3_side.main_data_begin * 8;\n }\n //;\n assert(totbit % 8 == 0);\n\n if (totbit > 1000000000) {\n /*\n * to avoid totbit overflow, (at 8h encoding at 128kbs) lets reset\n * bit counter\n */\n var i;\n for (i = 0; i < LameInternalFlags.MAX_HEADER_BUF; ++i)\n gfc.header[i].write_timing -= totbit;\n totbit = 0;\n }\n\n return 0;\n };\n\n /**\n *
\n     * copy data out of the internal MP3 bit buffer into a user supplied\n     *       unsigned char buffer.\n     *\n     *       mp3data=0      indicates data in buffer is an id3tags and VBR tags\n     *       mp3data=1      data is real mp3 frame data.\n     * 
\n */\n this.copy_buffer = function (gfc, buffer, bufferPos, size, mp3data) {\n var minimum = bufByteIdx + 1;\n if (minimum <= 0)\n return 0;\n if (size != 0 && minimum > size) {\n /* buffer is too small */\n return -1;\n }\n System.arraycopy(buf, 0, buffer, bufferPos, minimum);\n bufByteIdx = -1;\n bufBitIdx = 0;\n\n if (mp3data != 0) {\n var crc = new_int(1);\n crc[0] = gfc.nMusicCRC;\n vbr.updateMusicCRC(crc, buffer, bufferPos, minimum);\n gfc.nMusicCRC = crc[0];\n\n /**\n * sum number of bytes belonging to the mp3 stream this info will be\n * written into the Xing/LAME header for seeking\n */\n if (minimum > 0) {\n gfc.VBR_seek_table.nBytesWritten += minimum;\n }\n\n if (gfc.decode_on_the_fly) { /* decode the frame */\n var pcm_buf = new_float_n([2, 1152]);\n var mp3_in = minimum;\n var samples_out = -1;\n var i;\n\n /* re-synthesis to pcm. Repeat until we get a samples_out=0 */\n while (samples_out != 0) {\n\n samples_out = mpg.hip_decode1_unclipped(gfc.hip, buffer,\n bufferPos, mp3_in, pcm_buf[0], pcm_buf[1]);\n /*\n * samples_out = 0: need more data to decode samples_out =\n * -1: error. Lets assume 0 pcm output samples_out = number\n * of samples output\n */\n\n /*\n * set the lenght of the mp3 input buffer to zero, so that\n * in the next iteration of the loop we will be querying\n * mpglib about buffered data\n */\n mp3_in = 0;\n\n if (samples_out == -1) {\n /*\n * error decoding. Not fatal, but might screw up the\n * ReplayGain tag. What should we do? Ignore for now\n */\n samples_out = 0;\n }\n if (samples_out > 0) {\n /* process the PCM data */\n\n /*\n * this should not be possible, and indicates we have\n * overflown the pcm_buf buffer\n */\n assert(samples_out <= 1152);\n\n if (gfc.findPeakSample) {\n for (i = 0; i < samples_out; i++) {\n if (pcm_buf[0][i] > gfc.PeakSample)\n gfc.PeakSample = pcm_buf[0][i];\n else if (-pcm_buf[0][i] > gfc.PeakSample)\n gfc.PeakSample = -pcm_buf[0][i];\n }\n if (gfc.channels_out > 1)\n for (i = 0; i < samples_out; i++) {\n if (pcm_buf[1][i] > gfc.PeakSample)\n gfc.PeakSample = pcm_buf[1][i];\n else if (-pcm_buf[1][i] > gfc.PeakSample)\n gfc.PeakSample = -pcm_buf[1][i];\n }\n }\n\n if (gfc.findReplayGain)\n if (ga.AnalyzeSamples(gfc.rgdata, pcm_buf[0], 0,\n pcm_buf[1], 0, samples_out,\n gfc.channels_out) == GainAnalysis.GAIN_ANALYSIS_ERROR)\n return -6;\n\n }\n /* if (samples_out>0) */\n }\n /* while (samples_out!=0) */\n }\n /* if (gfc.decode_on_the_fly) */\n\n }\n /* if (mp3data) */\n return minimum;\n };\n\n this.init_bit_stream_w = function (gfc) {\n buf = new_byte(Lame.LAME_MAXMP3BUFFER);\n\n gfc.h_ptr = gfc.w_ptr = 0;\n gfc.header[gfc.h_ptr].write_timing = 0;\n bufByteIdx = -1;\n bufBitIdx = 0;\n totbit = 0;\n };\n\n // From machine.h\n\n\n}\n\nmodule.exports = BitStream;\n","var common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar new_short_n = common.new_short_n;\nvar assert = common.assert;\n\nvar PsyModel = require('./PsyModel.js');\nvar LameGlobalFlags = require('./LameGlobalFlags.js');\nvar LameInternalFlags = require('./LameInternalFlags.js');\nvar ATH = require('./ATH.js');\nvar ReplayGain = require('./ReplayGain.js');\nvar CBRNewIterationLoop = require('./CBRNewIterationLoop.js');\nvar BitStream = require('./BitStream.js');\nvar Tables = require('./Tables.js');\nvar Encoder = require('./Encoder.js');\n\nfunction Lame() {\n var self = this;\n var LAME_MAXALBUMART = (128 * 1024);\n\n Lame.V9 = 410;\n Lame.V8 = 420;\n Lame.V7 = 430;\n Lame.V6 = 440;\n Lame.V5 = 450;\n Lame.V4 = 460;\n Lame.V3 = 470;\n Lame.V2 = 480;\n Lame.V1 = 490;\n Lame.V0 = 500;\n\n /* still there for compatibility */\n\n Lame.R3MIX = 1000;\n Lame.STANDARD = 1001;\n Lame.EXTREME = 1002;\n Lame.INSANE = 1003;\n Lame.STANDARD_FAST = 1004;\n Lame.EXTREME_FAST = 1005;\n Lame.MEDIUM = 1006;\n Lame.MEDIUM_FAST = 1007;\n\n /**\n * maximum size of mp3buffer needed if you encode at most 1152 samples for\n * each call to lame_encode_buffer. see lame_encode_buffer() below\n * (LAME_MAXMP3BUFFER is now obsolete)\n */\n var LAME_MAXMP3BUFFER = (16384 + LAME_MAXALBUMART);\n Lame.LAME_MAXMP3BUFFER = LAME_MAXMP3BUFFER;\n\n var ga;\n var bs;\n var p;\n var qupvt;\n var qu;\n var psy = new PsyModel();\n var vbr;\n var ver;\n var id3;\n var mpglib;\n this.enc = new Encoder();\n\n this.setModules = function (_ga, _bs, _p, _qupvt, _qu, _vbr, _ver, _id3, _mpglib) {\n ga = _ga;\n bs = _bs;\n p = _p;\n qupvt = _qupvt;\n qu = _qu;\n vbr = _vbr;\n ver = _ver;\n id3 = _id3;\n mpglib = _mpglib;\n this.enc.setModules(bs, psy, qupvt, vbr);\n }\n\n /**\n * PSY Model related stuff\n */\n function PSY() {\n /**\n * The dbQ stuff.\n */\n this.mask_adjust = 0.;\n /**\n * The dbQ stuff.\n */\n this.mask_adjust_short = 0.;\n /* at transition from one scalefactor band to next */\n /**\n * Band weight long scalefactor bands.\n */\n this.bo_l_weight = new_float(Encoder.SBMAX_l);\n /**\n * Band weight short scalefactor bands.\n */\n this.bo_s_weight = new_float(Encoder.SBMAX_s);\n }\n\n function LowPassHighPass() {\n this.lowerlimit = 0.;\n }\n\n function BandPass(bitrate, lPass) {\n this.lowpass = lPass;\n }\n\n var LAME_ID = 0xFFF88E3B;\n\n function lame_init_old(gfp) {\n var gfc;\n\n gfp.class_id = LAME_ID;\n\n gfc = gfp.internal_flags = new LameInternalFlags();\n\n /* Global flags. set defaults here for non-zero values */\n /* see lame.h for description */\n /*\n * set integer values to -1 to mean that LAME will compute the best\n * value, UNLESS the calling program as set it (and the value is no\n * longer -1)\n */\n\n gfp.mode = MPEGMode.NOT_SET;\n gfp.original = 1;\n gfp.in_samplerate = 44100;\n gfp.num_channels = 2;\n gfp.num_samples = -1;\n\n gfp.bWriteVbrTag = true;\n gfp.quality = -1;\n gfp.short_blocks = null;\n gfc.subblock_gain = -1;\n\n gfp.lowpassfreq = 0;\n gfp.highpassfreq = 0;\n gfp.lowpasswidth = -1;\n gfp.highpasswidth = -1;\n\n gfp.VBR = VbrMode.vbr_off;\n gfp.VBR_q = 4;\n gfp.ATHcurve = -1;\n gfp.VBR_mean_bitrate_kbps = 128;\n gfp.VBR_min_bitrate_kbps = 0;\n gfp.VBR_max_bitrate_kbps = 0;\n gfp.VBR_hard_min = 0;\n gfc.VBR_min_bitrate = 1;\n /* not 0 ????? */\n gfc.VBR_max_bitrate = 13;\n /* not 14 ????? */\n\n gfp.quant_comp = -1;\n gfp.quant_comp_short = -1;\n\n gfp.msfix = -1;\n\n gfc.resample_ratio = 1;\n\n gfc.OldValue[0] = 180;\n gfc.OldValue[1] = 180;\n gfc.CurrentStep[0] = 4;\n gfc.CurrentStep[1] = 4;\n gfc.masking_lower = 1;\n gfc.nsPsy.attackthre = -1;\n gfc.nsPsy.attackthre_s = -1;\n\n gfp.scale = -1;\n\n gfp.athaa_type = -1;\n gfp.ATHtype = -1;\n /* default = -1 = set in lame_init_params */\n gfp.athaa_loudapprox = -1;\n /* 1 = flat loudness approx. (total energy) */\n /* 2 = equal loudness curve */\n gfp.athaa_sensitivity = 0.0;\n /* no offset */\n gfp.useTemporal = null;\n gfp.interChRatio = -1;\n\n /*\n * The reason for int mf_samples_to_encode = ENCDELAY + POSTDELAY;\n * ENCDELAY = internal encoder delay. And then we have to add\n * POSTDELAY=288 because of the 50% MDCT overlap. A 576 MDCT granule\n * decodes to 1152 samples. To synthesize the 576 samples centered under\n * this granule we need the previous granule for the first 288 samples\n * (no problem), and the next granule for the next 288 samples (not\n * possible if this is last granule). So we need to pad with 288 samples\n * to make sure we can encode the 576 samples we are interested in.\n */\n gfc.mf_samples_to_encode = Encoder.ENCDELAY + Encoder.POSTDELAY;\n gfp.encoder_padding = 0;\n gfc.mf_size = Encoder.ENCDELAY - Encoder.MDCTDELAY;\n /*\n * we pad input with this many 0's\n */\n\n gfp.findReplayGain = false;\n gfp.decode_on_the_fly = false;\n\n gfc.decode_on_the_fly = false;\n gfc.findReplayGain = false;\n gfc.findPeakSample = false;\n\n gfc.RadioGain = 0;\n gfc.AudiophileGain = 0;\n gfc.noclipGainChange = 0;\n gfc.noclipScale = -1.0;\n\n gfp.preset = 0;\n\n gfp.write_id3tag_automatic = true;\n return 0;\n }\n\n this.lame_init = function () {\n var gfp = new LameGlobalFlags();\n\n var ret = lame_init_old(gfp);\n if (ret != 0) {\n return null;\n }\n\n gfp.lame_allocated_gfp = 1;\n return gfp;\n }\n\n function filter_coef(x) {\n if (x > 1.0)\n return 0.0;\n if (x <= 0.0)\n return 1.0;\n\n return Math.cos(Math.PI / 2 * x);\n }\n\n this.nearestBitrateFullIndex = function (bitrate) {\n /* borrowed from DM abr presets */\n\n var full_bitrate_table = [8, 16, 24, 32, 40, 48, 56, 64, 80,\n 96, 112, 128, 160, 192, 224, 256, 320];\n\n var lower_range = 0, lower_range_kbps = 0, upper_range = 0, upper_range_kbps = 0;\n\n /* We assume specified bitrate will be 320kbps */\n upper_range_kbps = full_bitrate_table[16];\n upper_range = 16;\n lower_range_kbps = full_bitrate_table[16];\n lower_range = 16;\n\n /*\n * Determine which significant bitrates the value specified falls\n * between, if loop ends without breaking then we were correct above\n * that the value was 320\n */\n for (var b = 0; b < 16; b++) {\n if ((Math.max(bitrate, full_bitrate_table[b + 1])) != bitrate) {\n upper_range_kbps = full_bitrate_table[b + 1];\n upper_range = b + 1;\n lower_range_kbps = full_bitrate_table[b];\n lower_range = (b);\n break;\n /* We found upper range */\n }\n }\n\n /* Determine which range the value specified is closer to */\n if ((upper_range_kbps - bitrate) > (bitrate - lower_range_kbps)) {\n return lower_range;\n }\n return upper_range;\n }\n\n function optimum_samplefreq(lowpassfreq, input_samplefreq) {\n /*\n * Rules:\n *\n * - if possible, sfb21 should NOT be used\n */\n var suggested_samplefreq = 44100;\n\n if (input_samplefreq >= 48000)\n suggested_samplefreq = 48000;\n else if (input_samplefreq >= 44100)\n suggested_samplefreq = 44100;\n else if (input_samplefreq >= 32000)\n suggested_samplefreq = 32000;\n else if (input_samplefreq >= 24000)\n suggested_samplefreq = 24000;\n else if (input_samplefreq >= 22050)\n suggested_samplefreq = 22050;\n else if (input_samplefreq >= 16000)\n suggested_samplefreq = 16000;\n else if (input_samplefreq >= 12000)\n suggested_samplefreq = 12000;\n else if (input_samplefreq >= 11025)\n suggested_samplefreq = 11025;\n else if (input_samplefreq >= 8000)\n suggested_samplefreq = 8000;\n\n if (lowpassfreq == -1)\n return suggested_samplefreq;\n\n if (lowpassfreq <= 15960)\n suggested_samplefreq = 44100;\n if (lowpassfreq <= 15250)\n suggested_samplefreq = 32000;\n if (lowpassfreq <= 11220)\n suggested_samplefreq = 24000;\n if (lowpassfreq <= 9970)\n suggested_samplefreq = 22050;\n if (lowpassfreq <= 7230)\n suggested_samplefreq = 16000;\n if (lowpassfreq <= 5420)\n suggested_samplefreq = 12000;\n if (lowpassfreq <= 4510)\n suggested_samplefreq = 11025;\n if (lowpassfreq <= 3970)\n suggested_samplefreq = 8000;\n\n if (input_samplefreq < suggested_samplefreq) {\n /*\n * choose a valid MPEG sample frequency above the input sample\n * frequency to avoid SFB21/12 bitrate bloat rh 061115\n */\n if (input_samplefreq > 44100) {\n return 48000;\n }\n if (input_samplefreq > 32000) {\n return 44100;\n }\n if (input_samplefreq > 24000) {\n return 32000;\n }\n if (input_samplefreq > 22050) {\n return 24000;\n }\n if (input_samplefreq > 16000) {\n return 22050;\n }\n if (input_samplefreq > 12000) {\n return 16000;\n }\n if (input_samplefreq > 11025) {\n return 12000;\n }\n if (input_samplefreq > 8000) {\n return 11025;\n }\n return 8000;\n }\n return suggested_samplefreq;\n }\n\n /**\n * convert samp freq in Hz to index\n */\n function SmpFrqIndex(sample_freq, gpf) {\n switch (sample_freq) {\n case 44100:\n gpf.version = 1;\n return 0;\n case 48000:\n gpf.version = 1;\n return 1;\n case 32000:\n gpf.version = 1;\n return 2;\n case 22050:\n gpf.version = 0;\n return 0;\n case 24000:\n gpf.version = 0;\n return 1;\n case 16000:\n gpf.version = 0;\n return 2;\n case 11025:\n gpf.version = 0;\n return 0;\n case 12000:\n gpf.version = 0;\n return 1;\n case 8000:\n gpf.version = 0;\n return 2;\n default:\n gpf.version = 0;\n return -1;\n }\n }\n\n /**\n * @param bRate\n * legal rates from 8 to 320\n */\n function FindNearestBitrate(bRate, version, samplerate) {\n /* MPEG-1 or MPEG-2 LSF */\n if (samplerate < 16000)\n version = 2;\n\n var bitrate = Tables.bitrate_table[version][1];\n\n for (var i = 2; i <= 14; i++) {\n if (Tables.bitrate_table[version][i] > 0) {\n if (Math.abs(Tables.bitrate_table[version][i] - bRate) < Math\n .abs(bitrate - bRate))\n bitrate = Tables.bitrate_table[version][i];\n }\n }\n return bitrate;\n }\n\n /**\n * @param bRate\n * legal rates from 32 to 448 kbps\n * @param version\n * MPEG-1 or MPEG-2/2.5 LSF\n */\n function BitrateIndex(bRate, version, samplerate) {\n /* convert bitrate in kbps to index */\n if (samplerate < 16000)\n version = 2;\n for (var i = 0; i <= 14; i++) {\n if (Tables.bitrate_table[version][i] > 0) {\n if (Tables.bitrate_table[version][i] == bRate) {\n return i;\n }\n }\n }\n return -1;\n }\n\n function optimum_bandwidth(lh, bitrate) {\n /**\n *
\n         *  Input:\n         *      bitrate     total bitrate in kbps\n         *\n         *   Output:\n         *      lowerlimit: best lowpass frequency limit for input filter in Hz\n         *      upperlimit: best highpass frequency limit for input filter in Hz\n         * 
\n */\n var freq_map = [new BandPass(8, 2000),\n new BandPass(16, 3700), new BandPass(24, 3900),\n new BandPass(32, 5500), new BandPass(40, 7000),\n new BandPass(48, 7500), new BandPass(56, 10000),\n new BandPass(64, 11000), new BandPass(80, 13500),\n new BandPass(96, 15100), new BandPass(112, 15600),\n new BandPass(128, 17000), new BandPass(160, 17500),\n new BandPass(192, 18600), new BandPass(224, 19400),\n new BandPass(256, 19700), new BandPass(320, 20500)];\n\n var table_index = self.nearestBitrateFullIndex(bitrate);\n lh.lowerlimit = freq_map[table_index].lowpass;\n }\n\n function lame_init_params_ppflt(gfp) {\n var gfc = gfp.internal_flags;\n /***************************************************************/\n /* compute info needed for polyphase filter (filter type==0, default) */\n /***************************************************************/\n\n var lowpass_band = 32;\n var highpass_band = -1;\n\n if (gfc.lowpass1 > 0) {\n var minband = 999;\n for (var band = 0; band <= 31; band++) {\n var freq = (band / 31.0);\n /* this band and above will be zeroed: */\n if (freq >= gfc.lowpass2) {\n lowpass_band = Math.min(lowpass_band, band);\n }\n if (gfc.lowpass1 < freq && freq < gfc.lowpass2) {\n minband = Math.min(minband, band);\n }\n }\n\n /*\n * compute the *actual* transition band implemented by the polyphase\n * filter\n */\n if (minband == 999) {\n gfc.lowpass1 = (lowpass_band - .75) / 31.0;\n } else {\n gfc.lowpass1 = (minband - .75) / 31.0;\n }\n gfc.lowpass2 = lowpass_band / 31.0;\n }\n\n /*\n * make sure highpass filter is within 90% of what the effective\n * highpass frequency will be\n */\n if (gfc.highpass2 > 0) {\n if (gfc.highpass2 < .9 * (.75 / 31.0)) {\n gfc.highpass1 = 0;\n gfc.highpass2 = 0;\n System.err.println(\"Warning: highpass filter disabled. \"\n + \"highpass frequency too small\\n\");\n }\n }\n\n if (gfc.highpass2 > 0) {\n var maxband = -1;\n for (var band = 0; band <= 31; band++) {\n var freq = band / 31.0;\n /* this band and below will be zereod */\n if (freq <= gfc.highpass1) {\n highpass_band = Math.max(highpass_band, band);\n }\n if (gfc.highpass1 < freq && freq < gfc.highpass2) {\n maxband = Math.max(maxband, band);\n }\n }\n /*\n * compute the *actual* transition band implemented by the polyphase\n * filter\n */\n gfc.highpass1 = highpass_band / 31.0;\n if (maxband == -1) {\n gfc.highpass2 = (highpass_band + .75) / 31.0;\n } else {\n gfc.highpass2 = (maxband + .75) / 31.0;\n }\n }\n\n for (var band = 0; band < 32; band++) {\n var fc1, fc2;\n var freq = band / 31.0;\n if (gfc.highpass2 > gfc.highpass1) {\n fc1 = filter_coef((gfc.highpass2 - freq)\n / (gfc.highpass2 - gfc.highpass1 + 1e-20));\n } else {\n fc1 = 1.0;\n }\n if (gfc.lowpass2 > gfc.lowpass1) {\n fc2 = filter_coef((freq - gfc.lowpass1)\n / (gfc.lowpass2 - gfc.lowpass1 + 1e-20));\n } else {\n fc2 = 1.0;\n }\n gfc.amp_filter[band] = (fc1 * fc2);\n }\n }\n\n function lame_init_qval(gfp) {\n var gfc = gfp.internal_flags;\n\n switch (gfp.quality) {\n default:\n case 9: /* no psymodel, no noise shaping */\n gfc.psymodel = 0;\n gfc.noise_shaping = 0;\n gfc.noise_shaping_amp = 0;\n gfc.noise_shaping_stop = 0;\n gfc.use_best_huffman = 0;\n gfc.full_outer_loop = 0;\n break;\n\n case 8:\n gfp.quality = 7;\n //$FALL-THROUGH$\n case 7:\n /*\n * use psymodel (for short block and m/s switching), but no noise\n * shapping\n */\n gfc.psymodel = 1;\n gfc.noise_shaping = 0;\n gfc.noise_shaping_amp = 0;\n gfc.noise_shaping_stop = 0;\n gfc.use_best_huffman = 0;\n gfc.full_outer_loop = 0;\n break;\n\n case 6:\n gfc.psymodel = 1;\n if (gfc.noise_shaping == 0)\n gfc.noise_shaping = 1;\n gfc.noise_shaping_amp = 0;\n gfc.noise_shaping_stop = 0;\n if (gfc.subblock_gain == -1)\n gfc.subblock_gain = 1;\n gfc.use_best_huffman = 0;\n gfc.full_outer_loop = 0;\n break;\n\n case 5:\n gfc.psymodel = 1;\n if (gfc.noise_shaping == 0)\n gfc.noise_shaping = 1;\n gfc.noise_shaping_amp = 0;\n gfc.noise_shaping_stop = 0;\n if (gfc.subblock_gain == -1)\n gfc.subblock_gain = 1;\n gfc.use_best_huffman = 0;\n gfc.full_outer_loop = 0;\n break;\n\n case 4:\n gfc.psymodel = 1;\n if (gfc.noise_shaping == 0)\n gfc.noise_shaping = 1;\n gfc.noise_shaping_amp = 0;\n gfc.noise_shaping_stop = 0;\n if (gfc.subblock_gain == -1)\n gfc.subblock_gain = 1;\n gfc.use_best_huffman = 1;\n gfc.full_outer_loop = 0;\n break;\n\n case 3:\n gfc.psymodel = 1;\n if (gfc.noise_shaping == 0)\n gfc.noise_shaping = 1;\n gfc.noise_shaping_amp = 1;\n gfc.noise_shaping_stop = 1;\n if (gfc.subblock_gain == -1)\n gfc.subblock_gain = 1;\n gfc.use_best_huffman = 1;\n gfc.full_outer_loop = 0;\n break;\n\n case 2:\n gfc.psymodel = 1;\n if (gfc.noise_shaping == 0)\n gfc.noise_shaping = 1;\n if (gfc.substep_shaping == 0)\n gfc.substep_shaping = 2;\n gfc.noise_shaping_amp = 1;\n gfc.noise_shaping_stop = 1;\n if (gfc.subblock_gain == -1)\n gfc.subblock_gain = 1;\n gfc.use_best_huffman = 1;\n /* inner loop */\n gfc.full_outer_loop = 0;\n break;\n\n case 1:\n gfc.psymodel = 1;\n if (gfc.noise_shaping == 0)\n gfc.noise_shaping = 1;\n if (gfc.substep_shaping == 0)\n gfc.substep_shaping = 2;\n gfc.noise_shaping_amp = 2;\n gfc.noise_shaping_stop = 1;\n if (gfc.subblock_gain == -1)\n gfc.subblock_gain = 1;\n gfc.use_best_huffman = 1;\n gfc.full_outer_loop = 0;\n break;\n\n case 0:\n gfc.psymodel = 1;\n if (gfc.noise_shaping == 0)\n gfc.noise_shaping = 1;\n if (gfc.substep_shaping == 0)\n gfc.substep_shaping = 2;\n gfc.noise_shaping_amp = 2;\n gfc.noise_shaping_stop = 1;\n if (gfc.subblock_gain == -1)\n gfc.subblock_gain = 1;\n gfc.use_best_huffman = 1;\n /*\n * type 2 disabled because of it slowness, in favor of full outer\n * loop search\n */\n gfc.full_outer_loop = 0;\n /*\n * full outer loop search disabled because of audible distortions it\n * may generate rh 060629\n */\n break;\n }\n\n }\n\n function lame_init_bitstream(gfp) {\n var gfc = gfp.internal_flags;\n gfp.frameNum = 0;\n\n if (gfp.write_id3tag_automatic) {\n id3.id3tag_write_v2(gfp);\n }\n /* initialize histogram data optionally used by frontend */\n\n gfc.bitrate_stereoMode_Hist = new_int_n([16, 4 + 1]);\n gfc.bitrate_blockType_Hist = new_int_n([16, 4 + 1 + 1]);\n\n gfc.PeakSample = 0.0;\n\n /* Write initial VBR Header to bitstream and init VBR data */\n if (gfp.bWriteVbrTag)\n vbr.InitVbrTag(gfp);\n }\n\n /********************************************************************\n * initialize internal params based on data in gf (globalflags struct filled\n * in by calling program)\n *\n * OUTLINE:\n *\n * We first have some complex code to determine bitrate, output samplerate\n * and mode. It is complicated by the fact that we allow the user to set\n * some or all of these parameters, and need to determine best possible\n * values for the rest of them:\n *\n * 1. set some CPU related flags 2. check if we are mono.mono, stereo.mono\n * or stereo.stereo 3. compute bitrate and output samplerate: user may have\n * set compression ratio user may have set a bitrate user may have set a\n * output samplerate 4. set some options which depend on output samplerate\n * 5. compute the actual compression ratio 6. set mode based on compression\n * ratio\n *\n * The remaining code is much simpler - it just sets options based on the\n * mode & compression ratio:\n *\n * set allow_diff_short based on mode select lowpass filter based on\n * compression ratio & mode set the bitrate index, and min/max bitrates for\n * VBR modes disable VBR tag if it is not appropriate initialize the\n * bitstream initialize scalefac_band data set sideinfo_len (based on\n * channels, CRC, out_samplerate) write an id3v2 tag into the bitstream\n * write VBR tag into the bitstream set mpeg1/2 flag estimate the number of\n * frames (based on a lot of data)\n *\n * now we set more flags: nspsytune: see code VBR modes see code CBR/ABR see\n * code\n *\n * Finally, we set the algorithm flags based on the gfp.quality value\n * lame_init_qval(gfp);\n *\n ********************************************************************/\n this.lame_init_params = function (gfp) {\n var gfc = gfp.internal_flags;\n\n gfc.Class_ID = 0;\n if (gfc.ATH == null)\n gfc.ATH = new ATH();\n if (gfc.PSY == null)\n gfc.PSY = new PSY();\n if (gfc.rgdata == null)\n gfc.rgdata = new ReplayGain();\n\n gfc.channels_in = gfp.num_channels;\n if (gfc.channels_in == 1)\n gfp.mode = MPEGMode.MONO;\n gfc.channels_out = (gfp.mode == MPEGMode.MONO) ? 1 : 2;\n gfc.mode_ext = Encoder.MPG_MD_MS_LR;\n if (gfp.mode == MPEGMode.MONO)\n gfp.force_ms = false;\n /*\n * don't allow forced mid/side stereo for mono output\n */\n\n if (gfp.VBR == VbrMode.vbr_off && gfp.VBR_mean_bitrate_kbps != 128\n && gfp.brate == 0)\n gfp.brate = gfp.VBR_mean_bitrate_kbps;\n\n if (gfp.VBR == VbrMode.vbr_off || gfp.VBR == VbrMode.vbr_mtrh\n || gfp.VBR == VbrMode.vbr_mt) {\n /* these modes can handle free format condition */\n } else {\n gfp.free_format = false;\n /* mode can't be mixed with free format */\n }\n\n if (gfp.VBR == VbrMode.vbr_off && gfp.brate == 0) {\n /* no bitrate or compression ratio specified, use 11.025 */\n if (BitStream.EQ(gfp.compression_ratio, 0))\n gfp.compression_ratio = 11.025;\n /*\n * rate to compress a CD down to exactly 128000 bps\n */\n }\n\n /* find bitrate if user specify a compression ratio */\n if (gfp.VBR == VbrMode.vbr_off && gfp.compression_ratio > 0) {\n\n if (gfp.out_samplerate == 0)\n gfp.out_samplerate = map2MP3Frequency((int)(0.97 * gfp.in_samplerate));\n /*\n * round up with a margin of 3 %\n */\n\n /*\n * choose a bitrate for the output samplerate which achieves\n * specified compression ratio\n */\n gfp.brate = 0 | (gfp.out_samplerate * 16 * gfc.channels_out / (1.e3 * gfp.compression_ratio));\n\n /* we need the version for the bitrate table look up */\n gfc.samplerate_index = SmpFrqIndex(gfp.out_samplerate, gfp);\n\n if (!gfp.free_format) /*\n * for non Free Format find the nearest allowed\n * bitrate\n */\n gfp.brate = FindNearestBitrate(gfp.brate, gfp.version,\n gfp.out_samplerate);\n }\n\n if (gfp.out_samplerate != 0) {\n if (gfp.out_samplerate < 16000) {\n gfp.VBR_mean_bitrate_kbps = Math.max(gfp.VBR_mean_bitrate_kbps,\n 8);\n gfp.VBR_mean_bitrate_kbps = Math.min(gfp.VBR_mean_bitrate_kbps,\n 64);\n } else if (gfp.out_samplerate < 32000) {\n gfp.VBR_mean_bitrate_kbps = Math.max(gfp.VBR_mean_bitrate_kbps,\n 8);\n gfp.VBR_mean_bitrate_kbps = Math.min(gfp.VBR_mean_bitrate_kbps,\n 160);\n } else {\n gfp.VBR_mean_bitrate_kbps = Math.max(gfp.VBR_mean_bitrate_kbps,\n 32);\n gfp.VBR_mean_bitrate_kbps = Math.min(gfp.VBR_mean_bitrate_kbps,\n 320);\n }\n }\n\n /****************************************************************/\n /* if a filter has not been enabled, see if we should add one: */\n /****************************************************************/\n if (gfp.lowpassfreq == 0) {\n var lowpass = 16000.;\n\n switch (gfp.VBR) {\n case VbrMode.vbr_off:\n {\n var lh = new LowPassHighPass();\n optimum_bandwidth(lh, gfp.brate);\n lowpass = lh.lowerlimit;\n break;\n }\n case VbrMode.vbr_abr:\n {\n var lh = new LowPassHighPass();\n optimum_bandwidth(lh, gfp.VBR_mean_bitrate_kbps);\n lowpass = lh.lowerlimit;\n break;\n }\n case VbrMode.vbr_rh:\n {\n var x = [19500, 19000, 18600, 18000, 17500, 16000,\n 15600, 14900, 12500, 10000, 3950];\n if (0 <= gfp.VBR_q && gfp.VBR_q <= 9) {\n var a = x[gfp.VBR_q], b = x[gfp.VBR_q + 1], m = gfp.VBR_q_frac;\n lowpass = linear_int(a, b, m);\n } else {\n lowpass = 19500;\n }\n break;\n }\n default:\n {\n var x = [19500, 19000, 18500, 18000, 17500, 16500,\n 15500, 14500, 12500, 9500, 3950];\n if (0 <= gfp.VBR_q && gfp.VBR_q <= 9) {\n var a = x[gfp.VBR_q], b = x[gfp.VBR_q + 1], m = gfp.VBR_q_frac;\n lowpass = linear_int(a, b, m);\n } else {\n lowpass = 19500;\n }\n }\n }\n if (gfp.mode == MPEGMode.MONO\n && (gfp.VBR == VbrMode.vbr_off || gfp.VBR == VbrMode.vbr_abr))\n lowpass *= 1.5;\n\n gfp.lowpassfreq = lowpass | 0;\n }\n\n if (gfp.out_samplerate == 0) {\n if (2 * gfp.lowpassfreq > gfp.in_samplerate) {\n gfp.lowpassfreq = gfp.in_samplerate / 2;\n }\n gfp.out_samplerate = optimum_samplefreq(gfp.lowpassfreq | 0,\n gfp.in_samplerate);\n }\n\n gfp.lowpassfreq = Math.min(20500, gfp.lowpassfreq);\n gfp.lowpassfreq = Math.min(gfp.out_samplerate / 2, gfp.lowpassfreq);\n\n if (gfp.VBR == VbrMode.vbr_off) {\n gfp.compression_ratio = gfp.out_samplerate * 16 * gfc.channels_out\n / (1.e3 * gfp.brate);\n }\n if (gfp.VBR == VbrMode.vbr_abr) {\n gfp.compression_ratio = gfp.out_samplerate * 16 * gfc.channels_out\n / (1.e3 * gfp.VBR_mean_bitrate_kbps);\n }\n\n /*\n * do not compute ReplayGain values and do not find the peak sample if\n * we can't store them\n */\n if (!gfp.bWriteVbrTag) {\n gfp.findReplayGain = false;\n gfp.decode_on_the_fly = false;\n gfc.findPeakSample = false;\n }\n gfc.findReplayGain = gfp.findReplayGain;\n gfc.decode_on_the_fly = gfp.decode_on_the_fly;\n\n if (gfc.decode_on_the_fly)\n gfc.findPeakSample = true;\n\n if (gfc.findReplayGain) {\n if (ga.InitGainAnalysis(gfc.rgdata, gfp.out_samplerate) == GainAnalysis.INIT_GAIN_ANALYSIS_ERROR) {\n gfp.internal_flags = null;\n return -6;\n }\n }\n\n if (gfc.decode_on_the_fly && !gfp.decode_only) {\n if (gfc.hip != null) {\n mpglib.hip_decode_exit(gfc.hip);\n }\n gfc.hip = mpglib.hip_decode_init();\n }\n\n gfc.mode_gr = gfp.out_samplerate <= 24000 ? 1 : 2;\n /*\n * Number of granules per frame\n */\n gfp.framesize = 576 * gfc.mode_gr;\n gfp.encoder_delay = Encoder.ENCDELAY;\n\n gfc.resample_ratio = gfp.in_samplerate / gfp.out_samplerate;\n\n /**\n *
\n         *  sample freq       bitrate     compression ratio\n         *     [kHz]      [kbps/channel]   for 16 bit input\n         *     44.1            56               12.6\n         *     44.1            64               11.025\n         *     44.1            80                8.82\n         *     22.05           24               14.7\n         *     22.05           32               11.025\n         *     22.05           40                8.82\n         *     16              16               16.0\n         *     16              24               10.667\n         * 
\n */\n /**\n *
\n         *  For VBR, take a guess at the compression_ratio.\n         *  For example:\n         *\n         *    VBR_q    compression     like\n         *     -        4.4         320 kbps/44 kHz\n         *   0...1      5.5         256 kbps/44 kHz\n         *     2        7.3         192 kbps/44 kHz\n         *     4        8.8         160 kbps/44 kHz\n         *     6       11           128 kbps/44 kHz\n         *     9       14.7          96 kbps\n         *\n         *  for lower bitrates, downsample with --resample\n         * 
\n */\n switch (gfp.VBR) {\n case VbrMode.vbr_mt:\n case VbrMode.vbr_rh:\n case VbrMode.vbr_mtrh:\n {\n /* numbers are a bit strange, but they determine the lowpass value */\n var cmp = [5.7, 6.5, 7.3, 8.2, 10, 11.9, 13, 14,\n 15, 16.5];\n gfp.compression_ratio = cmp[gfp.VBR_q];\n }\n break;\n case VbrMode.vbr_abr:\n gfp.compression_ratio = gfp.out_samplerate * 16 * gfc.channels_out\n / (1.e3 * gfp.VBR_mean_bitrate_kbps);\n break;\n default:\n gfp.compression_ratio = gfp.out_samplerate * 16 * gfc.channels_out\n / (1.e3 * gfp.brate);\n break;\n }\n\n /*\n * mode = -1 (not set by user) or mode = MONO (because of only 1 input\n * channel). If mode has not been set, then select J-STEREO\n */\n if (gfp.mode == MPEGMode.NOT_SET) {\n gfp.mode = MPEGMode.JOINT_STEREO;\n }\n\n /* apply user driven high pass filter */\n if (gfp.highpassfreq > 0) {\n gfc.highpass1 = 2. * gfp.highpassfreq;\n\n if (gfp.highpasswidth >= 0)\n gfc.highpass2 = 2. * (gfp.highpassfreq + gfp.highpasswidth);\n else\n /* 0% above on default */\n gfc.highpass2 = (1 + 0.00) * 2. * gfp.highpassfreq;\n\n gfc.highpass1 /= gfp.out_samplerate;\n gfc.highpass2 /= gfp.out_samplerate;\n } else {\n gfc.highpass1 = 0;\n gfc.highpass2 = 0;\n }\n /* apply user driven low pass filter */\n if (gfp.lowpassfreq > 0) {\n gfc.lowpass2 = 2. * gfp.lowpassfreq;\n if (gfp.lowpasswidth >= 0) {\n gfc.lowpass1 = 2. * (gfp.lowpassfreq - gfp.lowpasswidth);\n if (gfc.lowpass1 < 0) /* has to be >= 0 */\n gfc.lowpass1 = 0;\n } else { /* 0% below on default */\n gfc.lowpass1 = (1 - 0.00) * 2. * gfp.lowpassfreq;\n }\n gfc.lowpass1 /= gfp.out_samplerate;\n gfc.lowpass2 /= gfp.out_samplerate;\n } else {\n gfc.lowpass1 = 0;\n gfc.lowpass2 = 0;\n }\n\n /**********************************************************************/\n /* compute info needed for polyphase filter (filter type==0, default) */\n /**********************************************************************/\n lame_init_params_ppflt(gfp);\n /*******************************************************\n * samplerate and bitrate index\n *******************************************************/\n gfc.samplerate_index = SmpFrqIndex(gfp.out_samplerate, gfp);\n if (gfc.samplerate_index < 0) {\n gfp.internal_flags = null;\n return -1;\n }\n\n if (gfp.VBR == VbrMode.vbr_off) {\n if (gfp.free_format) {\n gfc.bitrate_index = 0;\n } else {\n gfp.brate = FindNearestBitrate(gfp.brate, gfp.version,\n gfp.out_samplerate);\n gfc.bitrate_index = BitrateIndex(gfp.brate, gfp.version,\n gfp.out_samplerate);\n if (gfc.bitrate_index <= 0) {\n gfp.internal_flags = null;\n return -1;\n }\n }\n } else {\n gfc.bitrate_index = 1;\n }\n\n /* for CBR, we will write an \"info\" tag. */\n\n if (gfp.analysis)\n gfp.bWriteVbrTag = false;\n\n /* some file options not allowed if output is: not specified or stdout */\n if (gfc.pinfo != null)\n gfp.bWriteVbrTag = false;\n /* disable Xing VBR tag */\n\n bs.init_bit_stream_w(gfc);\n\n var j = gfc.samplerate_index + (3 * gfp.version) + 6\n * (gfp.out_samplerate < 16000 ? 1 : 0);\n for (var i = 0; i < Encoder.SBMAX_l + 1; i++)\n gfc.scalefac_band.l[i] = qupvt.sfBandIndex[j].l[i];\n\n for (var i = 0; i < Encoder.PSFB21 + 1; i++) {\n var size = (gfc.scalefac_band.l[22] - gfc.scalefac_band.l[21])\n / Encoder.PSFB21;\n var start = gfc.scalefac_band.l[21] + i * size;\n gfc.scalefac_band.psfb21[i] = start;\n }\n gfc.scalefac_band.psfb21[Encoder.PSFB21] = 576;\n\n for (var i = 0; i < Encoder.SBMAX_s + 1; i++)\n gfc.scalefac_band.s[i] = qupvt.sfBandIndex[j].s[i];\n\n for (var i = 0; i < Encoder.PSFB12 + 1; i++) {\n var size = (gfc.scalefac_band.s[13] - gfc.scalefac_band.s[12])\n / Encoder.PSFB12;\n var start = gfc.scalefac_band.s[12] + i * size;\n gfc.scalefac_band.psfb12[i] = start;\n }\n gfc.scalefac_band.psfb12[Encoder.PSFB12] = 192;\n /* determine the mean bitrate for main data */\n if (gfp.version == 1) /* MPEG 1 */\n gfc.sideinfo_len = (gfc.channels_out == 1) ? 4 + 17 : 4 + 32;\n else\n /* MPEG 2 */\n gfc.sideinfo_len = (gfc.channels_out == 1) ? 4 + 9 : 4 + 17;\n\n if (gfp.error_protection)\n gfc.sideinfo_len += 2;\n\n lame_init_bitstream(gfp);\n\n gfc.Class_ID = LAME_ID;\n\n {\n var k;\n\n for (k = 0; k < 19; k++)\n gfc.nsPsy.pefirbuf[k] = 700 * gfc.mode_gr * gfc.channels_out;\n\n if (gfp.ATHtype == -1)\n gfp.ATHtype = 4;\n }\n assert(gfp.VBR_q <= 9);\n assert(gfp.VBR_q >= 0);\n\n switch (gfp.VBR) {\n\n case VbrMode.vbr_mt:\n gfp.VBR = VbrMode.vbr_mtrh;\n //$FALL-THROUGH$\n case VbrMode.vbr_mtrh:\n {\n if (gfp.useTemporal == null) {\n gfp.useTemporal = false;\n /* off by default for this VBR mode */\n }\n\n p.apply_preset(gfp, 500 - (gfp.VBR_q * 10), 0);\n /**\n *
\n                 *   The newer VBR code supports only a limited\n                 *     subset of quality levels:\n                 *     9-5=5 are the same, uses x^3/4 quantization\n                 *   4-0=0 are the same  5 plus best huffman divide code\n                 * 
\n */\n if (gfp.quality < 0)\n gfp.quality = LAME_DEFAULT_QUALITY;\n if (gfp.quality < 5)\n gfp.quality = 0;\n if (gfp.quality > 5)\n gfp.quality = 5;\n\n gfc.PSY.mask_adjust = gfp.maskingadjust;\n gfc.PSY.mask_adjust_short = gfp.maskingadjust_short;\n\n /*\n * sfb21 extra only with MPEG-1 at higher sampling rates\n */\n if (gfp.experimentalY)\n gfc.sfb21_extra = false;\n else\n gfc.sfb21_extra = (gfp.out_samplerate > 44000);\n\n gfc.iteration_loop = new VBRNewIterationLoop(qu);\n break;\n\n }\n case VbrMode.vbr_rh:\n {\n\n p.apply_preset(gfp, 500 - (gfp.VBR_q * 10), 0);\n\n gfc.PSY.mask_adjust = gfp.maskingadjust;\n gfc.PSY.mask_adjust_short = gfp.maskingadjust_short;\n\n /*\n * sfb21 extra only with MPEG-1 at higher sampling rates\n */\n if (gfp.experimentalY)\n gfc.sfb21_extra = false;\n else\n gfc.sfb21_extra = (gfp.out_samplerate > 44000);\n\n /*\n * VBR needs at least the output of GPSYCHO, so we have to garantee\n * that by setting a minimum quality level, actually level 6 does\n * it. down to level 6\n */\n if (gfp.quality > 6)\n gfp.quality = 6;\n\n if (gfp.quality < 0)\n gfp.quality = LAME_DEFAULT_QUALITY;\n\n gfc.iteration_loop = new VBROldIterationLoop(qu);\n break;\n }\n\n default: /* cbr/abr */\n {\n var vbrmode;\n\n /*\n * no sfb21 extra with CBR code\n */\n gfc.sfb21_extra = false;\n\n if (gfp.quality < 0)\n gfp.quality = LAME_DEFAULT_QUALITY;\n\n vbrmode = gfp.VBR;\n if (vbrmode == VbrMode.vbr_off)\n gfp.VBR_mean_bitrate_kbps = gfp.brate;\n /* second, set parameters depending on bitrate */\n p.apply_preset(gfp, gfp.VBR_mean_bitrate_kbps, 0);\n gfp.VBR = vbrmode;\n\n gfc.PSY.mask_adjust = gfp.maskingadjust;\n gfc.PSY.mask_adjust_short = gfp.maskingadjust_short;\n\n if (vbrmode == VbrMode.vbr_off) {\n gfc.iteration_loop = new CBRNewIterationLoop(qu);\n } else {\n gfc.iteration_loop = new ABRIterationLoop(qu);\n }\n break;\n }\n }\n assert(gfp.scale >= 0);\n /* initialize default values common for all modes */\n\n if (gfp.VBR != VbrMode.vbr_off) { /* choose a min/max bitrate for VBR */\n /* if the user didn't specify VBR_max_bitrate: */\n gfc.VBR_min_bitrate = 1;\n /*\n * default: allow 8 kbps (MPEG-2) or 32 kbps (MPEG-1)\n */\n gfc.VBR_max_bitrate = 14;\n /*\n * default: allow 160 kbps (MPEG-2) or 320 kbps (MPEG-1)\n */\n if (gfp.out_samplerate < 16000)\n gfc.VBR_max_bitrate = 8;\n /* default: allow 64 kbps (MPEG-2.5) */\n if (gfp.VBR_min_bitrate_kbps != 0) {\n gfp.VBR_min_bitrate_kbps = FindNearestBitrate(\n gfp.VBR_min_bitrate_kbps, gfp.version,\n gfp.out_samplerate);\n gfc.VBR_min_bitrate = BitrateIndex(gfp.VBR_min_bitrate_kbps,\n gfp.version, gfp.out_samplerate);\n if (gfc.VBR_min_bitrate < 0)\n return -1;\n }\n if (gfp.VBR_max_bitrate_kbps != 0) {\n gfp.VBR_max_bitrate_kbps = FindNearestBitrate(\n gfp.VBR_max_bitrate_kbps, gfp.version,\n gfp.out_samplerate);\n gfc.VBR_max_bitrate = BitrateIndex(gfp.VBR_max_bitrate_kbps,\n gfp.version, gfp.out_samplerate);\n if (gfc.VBR_max_bitrate < 0)\n return -1;\n }\n gfp.VBR_min_bitrate_kbps = Tables.bitrate_table[gfp.version][gfc.VBR_min_bitrate];\n gfp.VBR_max_bitrate_kbps = Tables.bitrate_table[gfp.version][gfc.VBR_max_bitrate];\n gfp.VBR_mean_bitrate_kbps = Math.min(\n Tables.bitrate_table[gfp.version][gfc.VBR_max_bitrate],\n gfp.VBR_mean_bitrate_kbps);\n gfp.VBR_mean_bitrate_kbps = Math.max(\n Tables.bitrate_table[gfp.version][gfc.VBR_min_bitrate],\n gfp.VBR_mean_bitrate_kbps);\n }\n\n /* just another daily changing developer switch */\n if (gfp.tune) {\n gfc.PSY.mask_adjust += gfp.tune_value_a;\n gfc.PSY.mask_adjust_short += gfp.tune_value_a;\n }\n\n /* initialize internal qval settings */\n lame_init_qval(gfp);\n assert(gfp.scale >= 0);\n /*\n * automatic ATH adjustment on\n */\n if (gfp.athaa_type < 0)\n gfc.ATH.useAdjust = 3;\n else\n gfc.ATH.useAdjust = gfp.athaa_type;\n\n /* initialize internal adaptive ATH settings -jd */\n gfc.ATH.aaSensitivityP = Math.pow(10.0, gfp.athaa_sensitivity\n / -10.0);\n\n if (gfp.short_blocks == null) {\n gfp.short_blocks = ShortBlock.short_block_allowed;\n }\n\n /*\n * Note Jan/2003: Many hardware decoders cannot handle short blocks in\n * regular stereo mode unless they are coupled (same type in both\n * channels) it is a rare event (1 frame per min. or so) that LAME would\n * use uncoupled short blocks, so lets turn them off until we decide how\n * to handle this. No other encoders allow uncoupled short blocks, even\n * though it is in the standard.\n */\n /*\n * rh 20040217: coupling makes no sense for mono and dual-mono streams\n */\n if (gfp.short_blocks == ShortBlock.short_block_allowed\n && (gfp.mode == MPEGMode.JOINT_STEREO || gfp.mode == MPEGMode.STEREO)) {\n gfp.short_blocks = ShortBlock.short_block_coupled;\n }\n\n if (gfp.quant_comp < 0)\n gfp.quant_comp = 1;\n if (gfp.quant_comp_short < 0)\n gfp.quant_comp_short = 0;\n\n if (gfp.msfix < 0)\n gfp.msfix = 0;\n\n /* select psychoacoustic model */\n gfp.exp_nspsytune = gfp.exp_nspsytune | 1;\n\n if (gfp.internal_flags.nsPsy.attackthre < 0)\n gfp.internal_flags.nsPsy.attackthre = PsyModel.NSATTACKTHRE;\n if (gfp.internal_flags.nsPsy.attackthre_s < 0)\n gfp.internal_flags.nsPsy.attackthre_s = PsyModel.NSATTACKTHRE_S;\n\n assert(gfp.scale >= 0);\n\n if (gfp.scale < 0)\n gfp.scale = 1;\n\n if (gfp.ATHtype < 0)\n gfp.ATHtype = 4;\n\n if (gfp.ATHcurve < 0)\n gfp.ATHcurve = 4;\n\n if (gfp.athaa_loudapprox < 0)\n gfp.athaa_loudapprox = 2;\n\n if (gfp.interChRatio < 0)\n gfp.interChRatio = 0;\n\n if (gfp.useTemporal == null)\n gfp.useTemporal = true;\n /* on by default */\n\n /*\n * padding method as described in\n * \"MPEG-Layer3 / Bitstream Syntax and Decoding\" by Martin Sieler, Ralph\n * Sperschneider\n *\n * note: there is no padding for the very first frame\n *\n * Robert Hegemann 2000-06-22\n */\n gfc.slot_lag = gfc.frac_SpF = 0;\n if (gfp.VBR == VbrMode.vbr_off)\n gfc.slot_lag = gfc.frac_SpF = (((gfp.version + 1) * 72000 * gfp.brate) % gfp.out_samplerate) | 0;\n\n qupvt.iteration_init(gfp);\n psy.psymodel_init(gfp);\n assert(gfp.scale >= 0);\n return 0;\n }\n\n function update_inbuffer_size(gfc, nsamples) {\n if (gfc.in_buffer_0 == null || gfc.in_buffer_nsamples < nsamples) {\n gfc.in_buffer_0 = new_float(nsamples);\n gfc.in_buffer_1 = new_float(nsamples);\n gfc.in_buffer_nsamples = nsamples;\n }\n }\n\n this.lame_encode_flush = function (gfp, mp3buffer, mp3bufferPos, mp3buffer_size) {\n var gfc = gfp.internal_flags;\n var buffer = new_short_n([2, 1152]);\n var imp3 = 0, mp3count, mp3buffer_size_remaining;\n\n /*\n * we always add POSTDELAY=288 padding to make sure granule with real\n * data can be complety decoded (because of 50% overlap with next\n * granule\n */\n var end_padding;\n var frames_left;\n var samples_to_encode = gfc.mf_samples_to_encode - Encoder.POSTDELAY;\n var mf_needed = calcNeeded(gfp);\n\n /* Was flush already called? */\n if (gfc.mf_samples_to_encode < 1) {\n return 0;\n }\n mp3count = 0;\n\n if (gfp.in_samplerate != gfp.out_samplerate) {\n /*\n * delay due to resampling; needs to be fixed, if resampling code\n * gets changed\n */\n samples_to_encode += 16. * gfp.out_samplerate / gfp.in_samplerate;\n }\n end_padding = gfp.framesize - (samples_to_encode % gfp.framesize);\n if (end_padding < 576)\n end_padding += gfp.framesize;\n gfp.encoder_padding = end_padding;\n\n frames_left = (samples_to_encode + end_padding) / gfp.framesize;\n\n /*\n * send in a frame of 0 padding until all internal sample buffers are\n * flushed\n */\n while (frames_left > 0 && imp3 >= 0) {\n var bunch = mf_needed - gfc.mf_size;\n var frame_num = gfp.frameNum;\n\n bunch *= gfp.in_samplerate;\n bunch /= gfp.out_samplerate;\n if (bunch > 1152)\n bunch = 1152;\n if (bunch < 1)\n bunch = 1;\n\n mp3buffer_size_remaining = mp3buffer_size - mp3count;\n\n /* if user specifed buffer size = 0, dont check size */\n if (mp3buffer_size == 0)\n mp3buffer_size_remaining = 0;\n\n imp3 = this.lame_encode_buffer(gfp, buffer[0], buffer[1], bunch,\n mp3buffer, mp3bufferPos, mp3buffer_size_remaining);\n\n mp3bufferPos += imp3;\n mp3count += imp3;\n frames_left -= (frame_num != gfp.frameNum) ? 1 : 0;\n }\n /*\n * Set gfc.mf_samples_to_encode to 0, so we may detect and break loops\n * calling it more than once in a row.\n */\n gfc.mf_samples_to_encode = 0;\n\n if (imp3 < 0) {\n /* some type of fatal error */\n return imp3;\n }\n\n mp3buffer_size_remaining = mp3buffer_size - mp3count;\n /* if user specifed buffer size = 0, dont check size */\n if (mp3buffer_size == 0)\n mp3buffer_size_remaining = 0;\n\n /* mp3 related stuff. bit buffer might still contain some mp3 data */\n bs.flush_bitstream(gfp);\n imp3 = bs.copy_buffer(gfc, mp3buffer, mp3bufferPos,\n mp3buffer_size_remaining, 1);\n if (imp3 < 0) {\n /* some type of fatal error */\n return imp3;\n }\n mp3bufferPos += imp3;\n mp3count += imp3;\n mp3buffer_size_remaining = mp3buffer_size - mp3count;\n /* if user specifed buffer size = 0, dont check size */\n if (mp3buffer_size == 0)\n mp3buffer_size_remaining = 0;\n\n if (gfp.write_id3tag_automatic) {\n /* write a id3 tag to the bitstream */\n id3.id3tag_write_v1(gfp);\n\n imp3 = bs.copy_buffer(gfc, mp3buffer, mp3bufferPos,\n mp3buffer_size_remaining, 0);\n\n if (imp3 < 0) {\n return imp3;\n }\n mp3count += imp3;\n }\n return mp3count;\n };\n\n this.lame_encode_buffer = function (gfp, buffer_l, buffer_r, nsamples, mp3buf, mp3bufPos, mp3buf_size) {\n var gfc = gfp.internal_flags;\n var in_buffer = [null, null];\n\n if (gfc.Class_ID != LAME_ID)\n return -3;\n\n if (nsamples == 0)\n return 0;\n\n update_inbuffer_size(gfc, nsamples);\n\n in_buffer[0] = gfc.in_buffer_0;\n in_buffer[1] = gfc.in_buffer_1;\n\n /* make a copy of input buffer, changing type to sample_t */\n for (var i = 0; i < nsamples; i++) {\n in_buffer[0][i] = buffer_l[i];\n if (gfc.channels_in > 1)\n in_buffer[1][i] = buffer_r[i];\n }\n\n return lame_encode_buffer_sample(gfp, in_buffer[0], in_buffer[1],\n nsamples, mp3buf, mp3bufPos, mp3buf_size);\n }\n\n function calcNeeded(gfp) {\n var mf_needed = Encoder.BLKSIZE + gfp.framesize - Encoder.FFTOFFSET;\n /*\n * amount needed for FFT\n */\n mf_needed = Math.max(mf_needed, 512 + gfp.framesize - 32);\n assert(LameInternalFlags.MFSIZE >= mf_needed);\n\n return mf_needed;\n }\n\n function lame_encode_buffer_sample(gfp, buffer_l, buffer_r, nsamples, mp3buf, mp3bufPos, mp3buf_size) {\n var gfc = gfp.internal_flags;\n var mp3size = 0, ret, i, ch, mf_needed;\n var mp3out;\n var mfbuf = [null, null];\n var in_buffer = [null, null];\n\n if (gfc.Class_ID != LAME_ID)\n return -3;\n\n if (nsamples == 0)\n return 0;\n\n /* copy out any tags that may have been written into bitstream */\n mp3out = bs.copy_buffer(gfc, mp3buf, mp3bufPos, mp3buf_size, 0);\n if (mp3out < 0)\n return mp3out;\n /* not enough buffer space */\n mp3bufPos += mp3out;\n mp3size += mp3out;\n\n in_buffer[0] = buffer_l;\n in_buffer[1] = buffer_r;\n\n /* Apply user defined re-scaling */\n\n /* user selected scaling of the samples */\n if (BitStream.NEQ(gfp.scale, 0) && BitStream.NEQ(gfp.scale, 1.0)) {\n for (i = 0; i < nsamples; ++i) {\n in_buffer[0][i] *= gfp.scale;\n if (gfc.channels_out == 2)\n in_buffer[1][i] *= gfp.scale;\n }\n }\n\n /* user selected scaling of the channel 0 (left) samples */\n if (BitStream.NEQ(gfp.scale_left, 0)\n && BitStream.NEQ(gfp.scale_left, 1.0)) {\n for (i = 0; i < nsamples; ++i) {\n in_buffer[0][i] *= gfp.scale_left;\n }\n }\n\n /* user selected scaling of the channel 1 (right) samples */\n if (BitStream.NEQ(gfp.scale_right, 0)\n && BitStream.NEQ(gfp.scale_right, 1.0)) {\n for (i = 0; i < nsamples; ++i) {\n in_buffer[1][i] *= gfp.scale_right;\n }\n }\n\n /* Downsample to Mono if 2 channels in and 1 channel out */\n if (gfp.num_channels == 2 && gfc.channels_out == 1) {\n for (i = 0; i < nsamples; ++i) {\n in_buffer[0][i] = 0.5 * ( in_buffer[0][i] + in_buffer[1][i]);\n in_buffer[1][i] = 0.0;\n }\n }\n\n mf_needed = calcNeeded(gfp);\n\n mfbuf[0] = gfc.mfbuf[0];\n mfbuf[1] = gfc.mfbuf[1];\n\n var in_bufferPos = 0;\n while (nsamples > 0) {\n var in_buffer_ptr = [null, null];\n var n_in = 0;\n /* number of input samples processed with fill_buffer */\n var n_out = 0;\n /* number of samples output with fill_buffer */\n /* n_in <> n_out if we are resampling */\n\n in_buffer_ptr[0] = in_buffer[0];\n in_buffer_ptr[1] = in_buffer[1];\n /* copy in new samples into mfbuf, with resampling */\n var inOut = new InOut();\n fill_buffer(gfp, mfbuf, in_buffer_ptr, in_bufferPos, nsamples,\n inOut);\n n_in = inOut.n_in;\n n_out = inOut.n_out;\n\n /* compute ReplayGain of resampled input if requested */\n if (gfc.findReplayGain && !gfc.decode_on_the_fly)\n if (ga.AnalyzeSamples(gfc.rgdata, mfbuf[0], gfc.mf_size,\n mfbuf[1], gfc.mf_size, n_out, gfc.channels_out) == GainAnalysis.GAIN_ANALYSIS_ERROR)\n return -6;\n\n /* update in_buffer counters */\n nsamples -= n_in;\n in_bufferPos += n_in;\n if (gfc.channels_out == 2)\n ;// in_bufferPos += n_in;\n\n /* update mfbuf[] counters */\n gfc.mf_size += n_out;\n assert(gfc.mf_size <= LameInternalFlags.MFSIZE);\n\n /*\n * lame_encode_flush may have set gfc.mf_sample_to_encode to 0 so we\n * have to reinitialize it here when that happened.\n */\n if (gfc.mf_samples_to_encode < 1) {\n gfc.mf_samples_to_encode = Encoder.ENCDELAY + Encoder.POSTDELAY;\n }\n gfc.mf_samples_to_encode += n_out;\n\n if (gfc.mf_size >= mf_needed) {\n /* encode the frame. */\n /* mp3buf = pointer to current location in buffer */\n /* mp3buf_size = size of original mp3 output buffer */\n /* = 0 if we should not worry about the */\n /* buffer size because calling program is */\n /* to lazy to compute it */\n /* mp3size = size of data written to buffer so far */\n /* mp3buf_size-mp3size = amount of space avalable */\n\n var buf_size = mp3buf_size - mp3size;\n if (mp3buf_size == 0)\n buf_size = 0;\n\n ret = lame_encode_frame(gfp, mfbuf[0], mfbuf[1], mp3buf,\n mp3bufPos, buf_size);\n\n if (ret < 0)\n return ret;\n mp3bufPos += ret;\n mp3size += ret;\n\n /* shift out old samples */\n gfc.mf_size -= gfp.framesize;\n gfc.mf_samples_to_encode -= gfp.framesize;\n for (ch = 0; ch < gfc.channels_out; ch++)\n for (i = 0; i < gfc.mf_size; i++)\n mfbuf[ch][i] = mfbuf[ch][i + gfp.framesize];\n }\n }\n assert(nsamples == 0);\n\n return mp3size;\n }\n\n function lame_encode_frame(gfp, inbuf_l, inbuf_r, mp3buf, mp3bufPos, mp3buf_size) {\n var ret = self.enc.lame_encode_mp3_frame(gfp, inbuf_l, inbuf_r, mp3buf,\n mp3bufPos, mp3buf_size);\n gfp.frameNum++;\n return ret;\n }\n\n function InOut() {\n this.n_in = 0;\n this.n_out = 0;\n }\n\n\n function NumUsed() {\n this.num_used = 0;\n }\n\n /**\n * Greatest common divisor.\n *

\n * Joint work of Euclid and M. Hendry\n */\n function gcd(i, j) {\n return j != 0 ? gcd(j, i % j) : i;\n }\n\n /**\n * Resampling via FIR filter, blackman window.\n */\n function blackman(x, fcn, l) {\n /*\n * This algorithm from: SIGNAL PROCESSING ALGORITHMS IN FORTRAN AND C\n * S.D. Stearns and R.A. David, Prentice-Hall, 1992\n */\n var wcn = (Math.PI * fcn);\n\n x /= l;\n if (x < 0)\n x = 0;\n if (x > 1)\n x = 1;\n var x2 = x - .5;\n\n var bkwn = 0.42 - 0.5 * Math.cos(2 * x * Math.PI) + 0.08 * Math.cos(4 * x * Math.PI);\n if (Math.abs(x2) < 1e-9)\n return (wcn / Math.PI);\n else\n return (bkwn * Math.sin(l * wcn * x2) / (Math.PI * l * x2));\n }\n\n function fill_buffer_resample(gfp, outbuf, outbufPos, desired_len, inbuf, in_bufferPos, len, num_used, ch) {\n var gfc = gfp.internal_flags;\n var i, j = 0, k;\n /* number of convolution functions to pre-compute */\n var bpc = gfp.out_samplerate\n / gcd(gfp.out_samplerate, gfp.in_samplerate);\n if (bpc > LameInternalFlags.BPC)\n bpc = LameInternalFlags.BPC;\n\n var intratio = (Math.abs(gfc.resample_ratio\n - Math.floor(.5 + gfc.resample_ratio)) < .0001) ? 1 : 0;\n var fcn = 1.00 / gfc.resample_ratio;\n if (fcn > 1.00)\n fcn = 1.00;\n var filter_l = 31;\n if (0 == filter_l % 2)\n --filter_l;\n /* must be odd */\n filter_l += intratio;\n /* unless resample_ratio=int, it must be even */\n\n var BLACKSIZE = filter_l + 1;\n /* size of data needed for FIR */\n\n if (gfc.fill_buffer_resample_init == 0) {\n gfc.inbuf_old[0] = new_float(BLACKSIZE);\n gfc.inbuf_old[1] = new_float(BLACKSIZE);\n for (i = 0; i <= 2 * bpc; ++i)\n gfc.blackfilt[i] = new_float(BLACKSIZE);\n\n gfc.itime[0] = 0;\n gfc.itime[1] = 0;\n\n /* precompute blackman filter coefficients */\n for (j = 0; j <= 2 * bpc; j++) {\n var sum = 0.;\n var offset = (j - bpc) / (2. * bpc);\n for (i = 0; i <= filter_l; i++)\n sum += gfc.blackfilt[j][i] = blackman(i - offset, fcn,\n filter_l);\n for (i = 0; i <= filter_l; i++)\n gfc.blackfilt[j][i] /= sum;\n }\n gfc.fill_buffer_resample_init = 1;\n }\n\n var inbuf_old = gfc.inbuf_old[ch];\n\n /* time of j'th element in inbuf = itime + j/ifreq; */\n /* time of k'th element in outbuf = j/ofreq */\n for (k = 0; k < desired_len; k++) {\n var time0;\n var joff;\n\n time0 = k * gfc.resample_ratio;\n /* time of k'th output sample */\n j = 0 | Math.floor(time0 - gfc.itime[ch]);\n\n /* check if we need more input data */\n if ((filter_l + j - filter_l / 2) >= len)\n break;\n\n /* blackman filter. by default, window centered at j+.5(filter_l%2) */\n /* but we want a window centered at time0. */\n var offset = (time0 - gfc.itime[ch] - (j + .5 * (filter_l % 2)));\n assert(Math.abs(offset) <= .501);\n\n /* find the closest precomputed window for this offset: */\n joff = 0 | Math.floor((offset * 2 * bpc) + bpc + .5);\n var xvalue = 0.;\n for (i = 0; i <= filter_l; ++i) {\n var j2 = i + j - filter_l / 2;\n var y;\n assert(j2 < len);\n assert(j2 + BLACKSIZE >= 0);\n y = (j2 < 0) ? inbuf_old[BLACKSIZE + j2] : inbuf[in_bufferPos\n + j2];\n xvalue += y * gfc.blackfilt[joff][i];\n }\n outbuf[outbufPos + k] = xvalue;\n }\n\n /* k = number of samples added to outbuf */\n /* last k sample used data from [j-filter_l/2,j+filter_l-filter_l/2] */\n\n /* how many samples of input data were used: */\n num_used.num_used = Math.min(len, filter_l + j - filter_l / 2);\n\n /*\n * adjust our input time counter. Incriment by the number of samples\n * used, then normalize so that next output sample is at time 0, next\n * input buffer is at time itime[ch]\n */\n gfc.itime[ch] += num_used.num_used - k * gfc.resample_ratio;\n\n /* save the last BLACKSIZE samples into the inbuf_old buffer */\n if (num_used.num_used >= BLACKSIZE) {\n for (i = 0; i < BLACKSIZE; i++)\n inbuf_old[i] = inbuf[in_bufferPos + num_used.num_used + i\n - BLACKSIZE];\n } else {\n /* shift in num_used.num_used samples into inbuf_old */\n var n_shift = BLACKSIZE - num_used.num_used;\n /*\n * number of samples to\n * shift\n */\n\n /*\n * shift n_shift samples by num_used.num_used, to make room for the\n * num_used new samples\n */\n for (i = 0; i < n_shift; ++i)\n inbuf_old[i] = inbuf_old[i + num_used.num_used];\n\n /* shift in the num_used.num_used samples */\n for (j = 0; i < BLACKSIZE; ++i, ++j)\n inbuf_old[i] = inbuf[in_bufferPos + j];\n\n assert(j == num_used.num_used);\n }\n return k;\n /* return the number samples created at the new samplerate */\n }\n\n function fill_buffer(gfp, mfbuf, in_buffer, in_bufferPos, nsamples, io) {\n var gfc = gfp.internal_flags;\n\n /* copy in new samples into mfbuf, with resampling if necessary */\n if ((gfc.resample_ratio < .9999) || (gfc.resample_ratio > 1.0001)) {\n for (var ch = 0; ch < gfc.channels_out; ch++) {\n var numUsed = new NumUsed();\n io.n_out = fill_buffer_resample(gfp, mfbuf[ch], gfc.mf_size,\n gfp.framesize, in_buffer[ch], in_bufferPos, nsamples,\n numUsed, ch);\n io.n_in = numUsed.num_used;\n }\n } else {\n io.n_out = Math.min(gfp.framesize, nsamples);\n io.n_in = io.n_out;\n for (var i = 0; i < io.n_out; ++i) {\n mfbuf[0][gfc.mf_size + i] = in_buffer[0][in_bufferPos + i];\n if (gfc.channels_out == 2)\n mfbuf[1][gfc.mf_size + i] = in_buffer[1][in_bufferPos + i];\n }\n }\n }\n\n}\n\nmodule.exports = Lame;\n","var common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nfunction Presets() {\n function VBRPresets(qual, comp, compS,\n y, shThreshold, shThresholdS,\n adj, adjShort, lower,\n curve, sens, inter,\n joint, mod, fix) {\n this.vbr_q = qual;\n this.quant_comp = comp;\n this.quant_comp_s = compS;\n this.expY = y;\n this.st_lrm = shThreshold;\n this.st_s = shThresholdS;\n this.masking_adj = adj;\n this.masking_adj_short = adjShort;\n this.ath_lower = lower;\n this.ath_curve = curve;\n this.ath_sensitivity = sens;\n this.interch = inter;\n this.safejoint = joint;\n this.sfb21mod = mod;\n this.msfix = fix;\n }\n\n function ABRPresets(kbps, comp, compS,\n joint, fix, shThreshold,\n shThresholdS, bass, sc,\n mask, lower, curve,\n interCh, sfScale) {\n this.quant_comp = comp;\n this.quant_comp_s = compS;\n this.safejoint = joint;\n this.nsmsfix = fix;\n this.st_lrm = shThreshold;\n this.st_s = shThresholdS;\n this.nsbass = bass;\n this.scale = sc;\n this.masking_adj = mask;\n this.ath_lower = lower;\n this.ath_curve = curve;\n this.interch = interCh;\n this.sfscale = sfScale;\n }\n\n var lame;\n\n this.setModules = function (_lame) {\n lame = _lame;\n };\n\n /**\n *

\n     * Switch mappings for VBR mode VBR_RH\n     *             vbr_q  qcomp_l  qcomp_s  expY  st_lrm   st_s  mask adj_l  adj_s  ath_lower  ath_curve  ath_sens  interChR  safejoint sfb21mod  msfix\n     * 
\n */\n var vbr_old_switch_map = [\n new VBRPresets(0, 9, 9, 0, 5.20, 125.0, -4.2, -6.3, 4.8, 1, 0, 0, 2, 21, 0.97),\n new VBRPresets(1, 9, 9, 0, 5.30, 125.0, -3.6, -5.6, 4.5, 1.5, 0, 0, 2, 21, 1.35),\n new VBRPresets(2, 9, 9, 0, 5.60, 125.0, -2.2, -3.5, 2.8, 2, 0, 0, 2, 21, 1.49),\n new VBRPresets(3, 9, 9, 1, 5.80, 130.0, -1.8, -2.8, 2.6, 3, -4, 0, 2, 20, 1.64),\n new VBRPresets(4, 9, 9, 1, 6.00, 135.0, -0.7, -1.1, 1.1, 3.5, -8, 0, 2, 0, 1.79),\n new VBRPresets(5, 9, 9, 1, 6.40, 140.0, 0.5, 0.4, -7.5, 4, -12, 0.0002, 0, 0, 1.95),\n new VBRPresets(6, 9, 9, 1, 6.60, 145.0, 0.67, 0.65, -14.7, 6.5, -19, 0.0004, 0, 0, 2.30),\n new VBRPresets(7, 9, 9, 1, 6.60, 145.0, 0.8, 0.75, -19.7, 8, -22, 0.0006, 0, 0, 2.70),\n new VBRPresets(8, 9, 9, 1, 6.60, 145.0, 1.2, 1.15, -27.5, 10, -23, 0.0007, 0, 0, 0),\n new VBRPresets(9, 9, 9, 1, 6.60, 145.0, 1.6, 1.6, -36, 11, -25, 0.0008, 0, 0, 0),\n new VBRPresets(10, 9, 9, 1, 6.60, 145.0, 2.0, 2.0, -36, 12, -25, 0.0008, 0, 0, 0)\n ];\n\n /**\n *
\n     *                 vbr_q  qcomp_l  qcomp_s  expY  st_lrm   st_s  mask adj_l  adj_s  ath_lower  ath_curve  ath_sens  interChR  safejoint sfb21mod  msfix\n     * 
\n */\n var vbr_psy_switch_map = [\n new VBRPresets(0, 9, 9, 0, 4.20, 25.0, -7.0, -4.0, 7.5, 1, 0, 0, 2, 26, 0.97),\n new VBRPresets(1, 9, 9, 0, 4.20, 25.0, -5.6, -3.6, 4.5, 1.5, 0, 0, 2, 21, 1.35),\n new VBRPresets(2, 9, 9, 0, 4.20, 25.0, -4.4, -1.8, 2, 2, 0, 0, 2, 18, 1.49),\n new VBRPresets(3, 9, 9, 1, 4.20, 25.0, -3.4, -1.25, 1.1, 3, -4, 0, 2, 15, 1.64),\n new VBRPresets(4, 9, 9, 1, 4.20, 25.0, -2.2, 0.1, 0, 3.5, -8, 0, 2, 0, 1.79),\n new VBRPresets(5, 9, 9, 1, 4.20, 25.0, -1.0, 1.65, -7.7, 4, -12, 0.0002, 0, 0, 1.95),\n new VBRPresets(6, 9, 9, 1, 4.20, 25.0, -0.0, 2.47, -7.7, 6.5, -19, 0.0004, 0, 0, 2),\n new VBRPresets(7, 9, 9, 1, 4.20, 25.0, 0.5, 2.0, -14.5, 8, -22, 0.0006, 0, 0, 2),\n new VBRPresets(8, 9, 9, 1, 4.20, 25.0, 1.0, 2.4, -22.0, 10, -23, 0.0007, 0, 0, 2),\n new VBRPresets(9, 9, 9, 1, 4.20, 25.0, 1.5, 2.95, -30.0, 11, -25, 0.0008, 0, 0, 2),\n new VBRPresets(10, 9, 9, 1, 4.20, 25.0, 2.0, 2.95, -36.0, 12, -30, 0.0008, 0, 0, 2)\n ];\n\n function apply_vbr_preset(gfp, a, enforce) {\n var vbr_preset = gfp.VBR == VbrMode.vbr_rh ? vbr_old_switch_map\n : vbr_psy_switch_map;\n\n var x = gfp.VBR_q_frac;\n var p = vbr_preset[a];\n var q = vbr_preset[a + 1];\n var set = p;\n\n // NOOP(vbr_q);\n // NOOP(quant_comp);\n // NOOP(quant_comp_s);\n // NOOP(expY);\n p.st_lrm = p.st_lrm + x * (q.st_lrm - p.st_lrm);\n // LERP(st_lrm);\n p.st_s = p.st_s + x * (q.st_s - p.st_s);\n // LERP(st_s);\n p.masking_adj = p.masking_adj + x * (q.masking_adj - p.masking_adj);\n // LERP(masking_adj);\n p.masking_adj_short = p.masking_adj_short + x\n * (q.masking_adj_short - p.masking_adj_short);\n // LERP(masking_adj_short);\n p.ath_lower = p.ath_lower + x * (q.ath_lower - p.ath_lower);\n // LERP(ath_lower);\n p.ath_curve = p.ath_curve + x * (q.ath_curve - p.ath_curve);\n // LERP(ath_curve);\n p.ath_sensitivity = p.ath_sensitivity + x\n * (q.ath_sensitivity - p.ath_sensitivity);\n // LERP(ath_sensitivity);\n p.interch = p.interch + x * (q.interch - p.interch);\n // LERP(interch);\n // NOOP(safejoint);\n // NOOP(sfb21mod);\n p.msfix = p.msfix + x * (q.msfix - p.msfix);\n // LERP(msfix);\n\n lame_set_VBR_q(gfp, set.vbr_q);\n\n if (enforce != 0)\n gfp.quant_comp = set.quant_comp;\n else if (!(Math.abs(gfp.quant_comp - -1) > 0))\n gfp.quant_comp = set.quant_comp;\n // SET_OPTION(quant_comp, set.quant_comp, -1);\n if (enforce != 0)\n gfp.quant_comp_short = set.quant_comp_s;\n else if (!(Math.abs(gfp.quant_comp_short - -1) > 0))\n gfp.quant_comp_short = set.quant_comp_s;\n // SET_OPTION(quant_comp_short, set.quant_comp_s, -1);\n if (set.expY != 0) {\n gfp.experimentalY = set.expY != 0;\n }\n if (enforce != 0)\n gfp.internal_flags.nsPsy.attackthre = set.st_lrm;\n else if (!(Math.abs(gfp.internal_flags.nsPsy.attackthre - -1) > 0))\n gfp.internal_flags.nsPsy.attackthre = set.st_lrm;\n // SET_OPTION(short_threshold_lrm, set.st_lrm, -1);\n if (enforce != 0)\n gfp.internal_flags.nsPsy.attackthre_s = set.st_s;\n else if (!(Math.abs(gfp.internal_flags.nsPsy.attackthre_s - -1) > 0))\n gfp.internal_flags.nsPsy.attackthre_s = set.st_s;\n // SET_OPTION(short_threshold_s, set.st_s, -1);\n if (enforce != 0)\n gfp.maskingadjust = set.masking_adj;\n else if (!(Math.abs(gfp.maskingadjust - 0) > 0))\n gfp.maskingadjust = set.masking_adj;\n // SET_OPTION(maskingadjust, set.masking_adj, 0);\n if (enforce != 0)\n gfp.maskingadjust_short = set.masking_adj_short;\n else if (!(Math.abs(gfp.maskingadjust_short - 0) > 0))\n gfp.maskingadjust_short = set.masking_adj_short;\n // SET_OPTION(maskingadjust_short, set.masking_adj_short, 0);\n if (enforce != 0)\n gfp.ATHlower = -set.ath_lower / 10.0;\n else if (!(Math.abs((-gfp.ATHlower * 10.0) - 0) > 0))\n gfp.ATHlower = -set.ath_lower / 10.0;\n // SET_OPTION(ATHlower, set.ath_lower, 0);\n if (enforce != 0)\n gfp.ATHcurve = set.ath_curve;\n else if (!(Math.abs(gfp.ATHcurve - -1) > 0))\n gfp.ATHcurve = set.ath_curve;\n // SET_OPTION(ATHcurve, set.ath_curve, -1);\n if (enforce != 0)\n gfp.athaa_sensitivity = set.ath_sensitivity;\n else if (!(Math.abs(gfp.athaa_sensitivity - -1) > 0))\n gfp.athaa_sensitivity = set.ath_sensitivity;\n // SET_OPTION(athaa_sensitivity, set.ath_sensitivity, 0);\n if (set.interch > 0) {\n if (enforce != 0)\n gfp.interChRatio = set.interch;\n else if (!(Math.abs(gfp.interChRatio - -1) > 0))\n gfp.interChRatio = set.interch;\n // SET_OPTION(interChRatio, set.interch, -1);\n }\n\n /* parameters for which there is no proper set/get interface */\n if (set.safejoint > 0) {\n gfp.exp_nspsytune = gfp.exp_nspsytune | set.safejoint;\n }\n if (set.sfb21mod > 0) {\n gfp.exp_nspsytune = gfp.exp_nspsytune | (set.sfb21mod << 20);\n }\n if (enforce != 0)\n gfp.msfix = set.msfix;\n else if (!(Math.abs(gfp.msfix - -1) > 0))\n gfp.msfix = set.msfix;\n // SET_OPTION(msfix, set.msfix, -1);\n\n if (enforce == 0) {\n gfp.VBR_q = a;\n gfp.VBR_q_frac = x;\n }\n }\n\n /**\n *
\n     *  Switch mappings for ABR mode\n     *\n     *              kbps  quant q_s safejoint nsmsfix st_lrm  st_s  ns-bass scale   msk ath_lwr ath_curve  interch , sfscale\n     * 
\n */\n var abr_switch_map = [\n new ABRPresets(8, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, -30.0, 11, 0.0012, 1), /* 8, impossible to use in stereo */\n new ABRPresets(16, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, -25.0, 11, 0.0010, 1), /* 16 */\n new ABRPresets(24, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, -20.0, 11, 0.0010, 1), /* 24 */\n new ABRPresets(32, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, -15.0, 11, 0.0010, 1), /* 32 */\n new ABRPresets(40, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, -10.0, 11, 0.0009, 1), /* 40 */\n new ABRPresets(48, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, -10.0, 11, 0.0009, 1), /* 48 */\n new ABRPresets(56, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, -6.0, 11, 0.0008, 1), /* 56 */\n new ABRPresets(64, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, -2.0, 11, 0.0008, 1), /* 64 */\n new ABRPresets(80, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, .0, 8, 0.0007, 1), /* 80 */\n new ABRPresets(96, 9, 9, 0, 2.50, 6.60, 145, 0, 0.95, 0, 1.0, 5.5, 0.0006, 1), /* 96 */\n new ABRPresets(112, 9, 9, 0, 2.25, 6.60, 145, 0, 0.95, 0, 2.0, 4.5, 0.0005, 1), /* 112 */\n new ABRPresets(128, 9, 9, 0, 1.95, 6.40, 140, 0, 0.95, 0, 3.0, 4, 0.0002, 1), /* 128 */\n new ABRPresets(160, 9, 9, 1, 1.79, 6.00, 135, 0, 0.95, -2, 5.0, 3.5, 0, 1), /* 160 */\n new ABRPresets(192, 9, 9, 1, 1.49, 5.60, 125, 0, 0.97, -4, 7.0, 3, 0, 0), /* 192 */\n new ABRPresets(224, 9, 9, 1, 1.25, 5.20, 125, 0, 0.98, -6, 9.0, 2, 0, 0), /* 224 */\n new ABRPresets(256, 9, 9, 1, 0.97, 5.20, 125, 0, 1.00, -8, 10.0, 1, 0, 0), /* 256 */\n new ABRPresets(320, 9, 9, 1, 0.90, 5.20, 125, 0, 1.00, -10, 12.0, 0, 0, 0) /* 320 */\n ];\n\n function apply_abr_preset(gfp, preset, enforce) {\n /* Variables for the ABR stuff */\n var actual_bitrate = preset;\n\n var r = lame.nearestBitrateFullIndex(preset);\n\n gfp.VBR = VbrMode.vbr_abr;\n gfp.VBR_mean_bitrate_kbps = actual_bitrate;\n gfp.VBR_mean_bitrate_kbps = Math.min(gfp.VBR_mean_bitrate_kbps, 320);\n gfp.VBR_mean_bitrate_kbps = Math.max(gfp.VBR_mean_bitrate_kbps, 8);\n gfp.brate = gfp.VBR_mean_bitrate_kbps;\n if (gfp.VBR_mean_bitrate_kbps > 320) {\n gfp.disable_reservoir = true;\n }\n\n /* parameters for which there is no proper set/get interface */\n if (abr_switch_map[r].safejoint > 0)\n gfp.exp_nspsytune = gfp.exp_nspsytune | 2;\n /* safejoint */\n\n if (abr_switch_map[r].sfscale > 0) {\n gfp.internal_flags.noise_shaping = 2;\n }\n /* ns-bass tweaks */\n if (Math.abs(abr_switch_map[r].nsbass) > 0) {\n var k = (int)(abr_switch_map[r].nsbass * 4);\n if (k < 0)\n k += 64;\n gfp.exp_nspsytune = gfp.exp_nspsytune | (k << 2);\n }\n\n if (enforce != 0)\n gfp.quant_comp = abr_switch_map[r].quant_comp;\n else if (!(Math.abs(gfp.quant_comp - -1) > 0))\n gfp.quant_comp = abr_switch_map[r].quant_comp;\n // SET_OPTION(quant_comp, abr_switch_map[r].quant_comp, -1);\n if (enforce != 0)\n gfp.quant_comp_short = abr_switch_map[r].quant_comp_s;\n else if (!(Math.abs(gfp.quant_comp_short - -1) > 0))\n gfp.quant_comp_short = abr_switch_map[r].quant_comp_s;\n // SET_OPTION(quant_comp_short, abr_switch_map[r].quant_comp_s, -1);\n\n if (enforce != 0)\n gfp.msfix = abr_switch_map[r].nsmsfix;\n else if (!(Math.abs(gfp.msfix - -1) > 0))\n gfp.msfix = abr_switch_map[r].nsmsfix;\n // SET_OPTION(msfix, abr_switch_map[r].nsmsfix, -1);\n\n if (enforce != 0)\n gfp.internal_flags.nsPsy.attackthre = abr_switch_map[r].st_lrm;\n else if (!(Math.abs(gfp.internal_flags.nsPsy.attackthre - -1) > 0))\n gfp.internal_flags.nsPsy.attackthre = abr_switch_map[r].st_lrm;\n // SET_OPTION(short_threshold_lrm, abr_switch_map[r].st_lrm, -1);\n if (enforce != 0)\n gfp.internal_flags.nsPsy.attackthre_s = abr_switch_map[r].st_s;\n else if (!(Math.abs(gfp.internal_flags.nsPsy.attackthre_s - -1) > 0))\n gfp.internal_flags.nsPsy.attackthre_s = abr_switch_map[r].st_s;\n // SET_OPTION(short_threshold_s, abr_switch_map[r].st_s, -1);\n\n /*\n * ABR seems to have big problems with clipping, especially at low\n * bitrates\n */\n /*\n * so we compensate for that here by using a scale value depending on\n * bitrate\n */\n if (enforce != 0)\n gfp.scale = abr_switch_map[r].scale;\n else if (!(Math.abs(gfp.scale - -1) > 0))\n gfp.scale = abr_switch_map[r].scale;\n // SET_OPTION(scale, abr_switch_map[r].scale, -1);\n\n if (enforce != 0)\n gfp.maskingadjust = abr_switch_map[r].masking_adj;\n else if (!(Math.abs(gfp.maskingadjust - 0) > 0))\n gfp.maskingadjust = abr_switch_map[r].masking_adj;\n // SET_OPTION(maskingadjust, abr_switch_map[r].masking_adj, 0);\n if (abr_switch_map[r].masking_adj > 0) {\n if (enforce != 0)\n gfp.maskingadjust_short = (abr_switch_map[r].masking_adj * .9);\n else if (!(Math.abs(gfp.maskingadjust_short - 0) > 0))\n gfp.maskingadjust_short = (abr_switch_map[r].masking_adj * .9);\n // SET_OPTION(maskingadjust_short, abr_switch_map[r].masking_adj *\n // .9, 0);\n } else {\n if (enforce != 0)\n gfp.maskingadjust_short = (abr_switch_map[r].masking_adj * 1.1);\n else if (!(Math.abs(gfp.maskingadjust_short - 0) > 0))\n gfp.maskingadjust_short = (abr_switch_map[r].masking_adj * 1.1);\n // SET_OPTION(maskingadjust_short, abr_switch_map[r].masking_adj *\n // 1.1, 0);\n }\n\n if (enforce != 0)\n gfp.ATHlower = -abr_switch_map[r].ath_lower / 10.;\n else if (!(Math.abs((-gfp.ATHlower * 10.) - 0) > 0))\n gfp.ATHlower = -abr_switch_map[r].ath_lower / 10.;\n // SET_OPTION(ATHlower, abr_switch_map[r].ath_lower, 0);\n if (enforce != 0)\n gfp.ATHcurve = abr_switch_map[r].ath_curve;\n else if (!(Math.abs(gfp.ATHcurve - -1) > 0))\n gfp.ATHcurve = abr_switch_map[r].ath_curve;\n // SET_OPTION(ATHcurve, abr_switch_map[r].ath_curve, -1);\n\n if (enforce != 0)\n gfp.interChRatio = abr_switch_map[r].interch;\n else if (!(Math.abs(gfp.interChRatio - -1) > 0))\n gfp.interChRatio = abr_switch_map[r].interch;\n // SET_OPTION(interChRatio, abr_switch_map[r].interch, -1);\n\n return preset;\n }\n\n this.apply_preset = function(gfp, preset, enforce) {\n /* translate legacy presets */\n switch (preset) {\n case Lame.R3MIX:\n {\n preset = Lame.V3;\n gfp.VBR = VbrMode.vbr_mtrh;\n break;\n }\n case Lame.MEDIUM:\n {\n preset = Lame.V4;\n gfp.VBR = VbrMode.vbr_rh;\n break;\n }\n case Lame.MEDIUM_FAST:\n {\n preset = Lame.V4;\n gfp.VBR = VbrMode.vbr_mtrh;\n break;\n }\n case Lame.STANDARD:\n {\n preset = Lame.V2;\n gfp.VBR = VbrMode.vbr_rh;\n break;\n }\n case Lame.STANDARD_FAST:\n {\n preset = Lame.V2;\n gfp.VBR = VbrMode.vbr_mtrh;\n break;\n }\n case Lame.EXTREME:\n {\n preset = Lame.V0;\n gfp.VBR = VbrMode.vbr_rh;\n break;\n }\n case Lame.EXTREME_FAST:\n {\n preset = Lame.V0;\n gfp.VBR = VbrMode.vbr_mtrh;\n break;\n }\n case Lame.INSANE:\n {\n preset = 320;\n gfp.preset = preset;\n apply_abr_preset(gfp, preset, enforce);\n gfp.VBR = VbrMode.vbr_off;\n return preset;\n }\n }\n\n gfp.preset = preset;\n {\n switch (preset) {\n case Lame.V9:\n apply_vbr_preset(gfp, 9, enforce);\n return preset;\n case Lame.V8:\n apply_vbr_preset(gfp, 8, enforce);\n return preset;\n case Lame.V7:\n apply_vbr_preset(gfp, 7, enforce);\n return preset;\n case Lame.V6:\n apply_vbr_preset(gfp, 6, enforce);\n return preset;\n case Lame.V5:\n apply_vbr_preset(gfp, 5, enforce);\n return preset;\n case Lame.V4:\n apply_vbr_preset(gfp, 4, enforce);\n return preset;\n case Lame.V3:\n apply_vbr_preset(gfp, 3, enforce);\n return preset;\n case Lame.V2:\n apply_vbr_preset(gfp, 2, enforce);\n return preset;\n case Lame.V1:\n apply_vbr_preset(gfp, 1, enforce);\n return preset;\n case Lame.V0:\n apply_vbr_preset(gfp, 0, enforce);\n return preset;\n default:\n break;\n }\n }\n if (8 <= preset && preset <= 320) {\n return apply_abr_preset(gfp, preset, enforce);\n }\n\n /* no corresponding preset found */\n gfp.preset = 0;\n return preset;\n }\n\n // Rest from getset.c:\n\n /**\n * VBR quality level.
\n * 0 = highest
\n * 9 = lowest\n */\n function lame_set_VBR_q(gfp, VBR_q) {\n var ret = 0;\n\n if (0 > VBR_q) {\n /* Unknown VBR quality level! */\n ret = -1;\n VBR_q = 0;\n }\n if (9 < VBR_q) {\n ret = -1;\n VBR_q = 9;\n }\n\n gfp.VBR_q = VBR_q;\n gfp.VBR_q_frac = 0;\n return ret;\n }\n\n}\n\nmodule.exports = Presets;\n","function VBRQuantize() {\n var qupvt;\n var tak;\n\n this.setModules = function (_qupvt, _tk) {\n qupvt = _qupvt;\n tak = _tk;\n }\n //TODO\n\n}\n\nmodule.exports = VBRQuantize;\n","//package mp3;\n\nfunction CalcNoiseResult() {\n /**\n * sum of quantization noise > masking\n */\n this.over_noise = 0.;\n /**\n * sum of all quantization noise\n */\n this.tot_noise = 0.;\n /**\n * max quantization noise\n */\n this.max_noise = 0.;\n /**\n * number of quantization noise > masking\n */\n this.over_count = 0;\n /**\n * SSD-like cost of distorted bands\n */\n this.over_SSD = 0;\n this.bits = 0;\n}\n\nmodule.exports = CalcNoiseResult;\n","var common = require('./common.js');\nvar new_float = common.new_float;\nvar new_int = common.new_int;\nvar assert = common.assert;\n\nfunction CalcNoiseData() {\n this.global_gain = 0;\n this.sfb_count1 = 0;\n this.step = new_int(39);\n this.noise = new_float(39);\n this.noise_log = new_float(39);\n}\n\nmodule.exports = CalcNoiseData;\n","/*\n * MP3 quantization\n *\n * Copyright (c) 1999-2000 Mark Taylor\n * Copyright (c) 1999-2003 Takehiro Tominaga\n * Copyright (c) 2000-2007 Robert Hegemann\n * Copyright (c) 2001-2005 Gabriel Bouvigne\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n * Library General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the\n * Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n * Boston, MA 02111-1307, USA.\n */\n\n/* $Id: Quantize.java,v 1.24 2011/05/24 20:48:06 kenchis Exp $ */\n\n//package mp3;\n\n//import java.util.Arrays;\nvar common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nvar VBRQuantize = require('./VBRQuantize.js');\nvar CalcNoiseResult = require('./CalcNoiseResult.js');\nvar CalcNoiseData = require('./CalcNoiseData.js');\nvar Encoder = require('./Encoder.js');\nvar GrInfo = require('./GrInfo.js');\nvar L3Side = require('./L3Side.js');\n\nfunction Quantize() {\n var bs;\n this.rv = null;\n var rv;\n this.qupvt = null;\n var qupvt;\n\n var vbr = new VBRQuantize();\n var tk;\n\n this.setModules = function (_bs, _rv, _qupvt, _tk) {\n bs = _bs;\n rv = _rv;\n this.rv = _rv;\n qupvt = _qupvt;\n this.qupvt = _qupvt;\n tk = _tk;\n vbr.setModules(qupvt, tk);\n }\n\n /**\n * convert from L/R <. Mid/Side\n */\n this.ms_convert = function (l3_side, gr) {\n for (var i = 0; i < 576; ++i) {\n var l = l3_side.tt[gr][0].xr[i];\n var r = l3_side.tt[gr][1].xr[i];\n l3_side.tt[gr][0].xr[i] = (l + r) * (Util.SQRT2 * 0.5);\n l3_side.tt[gr][1].xr[i] = (l - r) * (Util.SQRT2 * 0.5);\n }\n };\n\n /**\n * mt 6/99\n *\n * initializes cod_info, scalefac and xrpow\n *\n * returns 0 if all energies in xr are zero, else 1\n */\n function init_xrpow_core(cod_info, xrpow, upper, sum) {\n sum = 0;\n for (var i = 0; i <= upper; ++i) {\n var tmp = Math.abs(cod_info.xr[i]);\n sum += tmp;\n xrpow[i] = Math.sqrt(tmp * Math.sqrt(tmp));\n\n if (xrpow[i] > cod_info.xrpow_max)\n cod_info.xrpow_max = xrpow[i];\n }\n return sum;\n }\n\n this.init_xrpow = function (gfc, cod_info, xrpow) {\n var sum = 0;\n var upper = 0 | cod_info.max_nonzero_coeff;\n\n assert(xrpow != null);\n cod_info.xrpow_max = 0;\n\n /*\n * check if there is some energy we have to quantize and calculate xrpow\n * matching our fresh scalefactors\n */\n assert(0 <= upper && upper <= 575);\n\n Arrays.fill(xrpow, upper, 576, 0);\n\n sum = init_xrpow_core(cod_info, xrpow, upper, sum);\n\n /*\n * return 1 if we have something to quantize, else 0\n */\n if (sum > 1E-20) {\n var j = 0;\n if ((gfc.substep_shaping & 2) != 0)\n j = 1;\n\n for (var i = 0; i < cod_info.psymax; i++)\n gfc.pseudohalf[i] = j;\n\n return true;\n }\n\n Arrays.fill(cod_info.l3_enc, 0, 576, 0);\n return false;\n }\n\n /**\n * Gabriel Bouvigne feb/apr 2003
\n * Analog silence detection in partitionned sfb21 or sfb12 for short blocks\n *\n * From top to bottom of sfb, changes to 0 coeffs which are below ath. It\n * stops on the first coeff higher than ath.\n */\n function psfb21_analogsilence(gfc, cod_info) {\n var ath = gfc.ATH;\n var xr = cod_info.xr;\n\n if (cod_info.block_type != Encoder.SHORT_TYPE) {\n /* NORM, START or STOP type, but not SHORT blocks */\n var stop = false;\n for (var gsfb = Encoder.PSFB21 - 1; gsfb >= 0 && !stop; gsfb--) {\n var start = gfc.scalefac_band.psfb21[gsfb];\n var end = gfc.scalefac_band.psfb21[gsfb + 1];\n var ath21 = qupvt.athAdjust(ath.adjust, ath.psfb21[gsfb],\n ath.floor);\n\n if (gfc.nsPsy.longfact[21] > 1e-12)\n ath21 *= gfc.nsPsy.longfact[21];\n\n for (var j = end - 1; j >= start; j--) {\n if (Math.abs(xr[j]) < ath21)\n xr[j] = 0;\n else {\n stop = true;\n break;\n }\n }\n }\n } else {\n /* note: short blocks coeffs are reordered */\n for (var block = 0; block < 3; block++) {\n var stop = false;\n for (var gsfb = Encoder.PSFB12 - 1; gsfb >= 0 && !stop; gsfb--) {\n var start = gfc.scalefac_band.s[12]\n * 3\n + (gfc.scalefac_band.s[13] - gfc.scalefac_band.s[12])\n * block\n + (gfc.scalefac_band.psfb12[gsfb] - gfc.scalefac_band.psfb12[0]);\n var end = start\n + (gfc.scalefac_band.psfb12[gsfb + 1] - gfc.scalefac_band.psfb12[gsfb]);\n var ath12 = qupvt.athAdjust(ath.adjust, ath.psfb12[gsfb],\n ath.floor);\n\n if (gfc.nsPsy.shortfact[12] > 1e-12)\n ath12 *= gfc.nsPsy.shortfact[12];\n\n for (var j = end - 1; j >= start; j--) {\n if (Math.abs(xr[j]) < ath12)\n xr[j] = 0;\n else {\n stop = true;\n break;\n }\n }\n }\n }\n }\n\n }\n\n this.init_outer_loop = function (gfc, cod_info) {\n /*\n * initialize fresh cod_info\n */\n cod_info.part2_3_length = 0;\n cod_info.big_values = 0;\n cod_info.count1 = 0;\n cod_info.global_gain = 210;\n cod_info.scalefac_compress = 0;\n /* mixed_block_flag, block_type was set in psymodel.c */\n cod_info.table_select[0] = 0;\n cod_info.table_select[1] = 0;\n cod_info.table_select[2] = 0;\n cod_info.subblock_gain[0] = 0;\n cod_info.subblock_gain[1] = 0;\n cod_info.subblock_gain[2] = 0;\n cod_info.subblock_gain[3] = 0;\n /* this one is always 0 */\n cod_info.region0_count = 0;\n cod_info.region1_count = 0;\n cod_info.preflag = 0;\n cod_info.scalefac_scale = 0;\n cod_info.count1table_select = 0;\n cod_info.part2_length = 0;\n cod_info.sfb_lmax = Encoder.SBPSY_l;\n cod_info.sfb_smin = Encoder.SBPSY_s;\n cod_info.psy_lmax = gfc.sfb21_extra ? Encoder.SBMAX_l : Encoder.SBPSY_l;\n cod_info.psymax = cod_info.psy_lmax;\n cod_info.sfbmax = cod_info.sfb_lmax;\n cod_info.sfbdivide = 11;\n for (var sfb = 0; sfb < Encoder.SBMAX_l; sfb++) {\n cod_info.width[sfb] = gfc.scalefac_band.l[sfb + 1]\n - gfc.scalefac_band.l[sfb];\n /* which is always 0. */\n cod_info.window[sfb] = 3;\n }\n if (cod_info.block_type == Encoder.SHORT_TYPE) {\n var ixwork = new_float(576);\n\n cod_info.sfb_smin = 0;\n cod_info.sfb_lmax = 0;\n if (cod_info.mixed_block_flag != 0) {\n /*\n * MPEG-1: sfbs 0-7 long block, 3-12 short blocks MPEG-2(.5):\n * sfbs 0-5 long block, 3-12 short blocks\n */\n cod_info.sfb_smin = 3;\n cod_info.sfb_lmax = gfc.mode_gr * 2 + 4;\n }\n cod_info.psymax = cod_info.sfb_lmax\n + 3\n * ((gfc.sfb21_extra ? Encoder.SBMAX_s : Encoder.SBPSY_s) - cod_info.sfb_smin);\n cod_info.sfbmax = cod_info.sfb_lmax + 3\n * (Encoder.SBPSY_s - cod_info.sfb_smin);\n cod_info.sfbdivide = cod_info.sfbmax - 18;\n cod_info.psy_lmax = cod_info.sfb_lmax;\n /* re-order the short blocks, for more efficient encoding below */\n /* By Takehiro TOMINAGA */\n /*\n * Within each scalefactor band, data is given for successive time\n * windows, beginning with window 0 and ending with window 2. Within\n * each window, the quantized values are then arranged in order of\n * increasing frequency...\n */\n var ix = gfc.scalefac_band.l[cod_info.sfb_lmax];\n System.arraycopy(cod_info.xr, 0, ixwork, 0, 576);\n for (var sfb = cod_info.sfb_smin; sfb < Encoder.SBMAX_s; sfb++) {\n var start = gfc.scalefac_band.s[sfb];\n var end = gfc.scalefac_band.s[sfb + 1];\n for (var window = 0; window < 3; window++) {\n for (var l = start; l < end; l++) {\n cod_info.xr[ix++] = ixwork[3 * l + window];\n }\n }\n }\n\n var j = cod_info.sfb_lmax;\n for (var sfb = cod_info.sfb_smin; sfb < Encoder.SBMAX_s; sfb++) {\n cod_info.width[j] = cod_info.width[j + 1] = cod_info.width[j + 2] = gfc.scalefac_band.s[sfb + 1]\n - gfc.scalefac_band.s[sfb];\n cod_info.window[j] = 0;\n cod_info.window[j + 1] = 1;\n cod_info.window[j + 2] = 2;\n j += 3;\n }\n }\n\n cod_info.count1bits = 0;\n cod_info.sfb_partition_table = qupvt.nr_of_sfb_block[0][0];\n cod_info.slen[0] = 0;\n cod_info.slen[1] = 0;\n cod_info.slen[2] = 0;\n cod_info.slen[3] = 0;\n\n cod_info.max_nonzero_coeff = 575;\n\n /*\n * fresh scalefactors are all zero\n */\n Arrays.fill(cod_info.scalefac, 0);\n\n psfb21_analogsilence(gfc, cod_info);\n };\n\n function BinSearchDirection(ordinal) {\n this.ordinal = ordinal;\n }\n\n BinSearchDirection.BINSEARCH_NONE = new BinSearchDirection(0);\n BinSearchDirection.BINSEARCH_UP = new BinSearchDirection(1);\n BinSearchDirection.BINSEARCH_DOWN = new BinSearchDirection(2);\n\n /**\n * author/date??\n *\n * binary step size search used by outer_loop to get a quantizer step size\n * to start with\n */\n function bin_search_StepSize(gfc, cod_info, desired_rate, ch, xrpow) {\n var nBits;\n var CurrentStep = gfc.CurrentStep[ch];\n var flagGoneOver = false;\n var start = gfc.OldValue[ch];\n var Direction = BinSearchDirection.BINSEARCH_NONE;\n cod_info.global_gain = start;\n desired_rate -= cod_info.part2_length;\n\n assert(CurrentStep != 0);\n for (; ;) {\n var step;\n nBits = tk.count_bits(gfc, xrpow, cod_info, null);\n\n if (CurrentStep == 1 || nBits == desired_rate)\n break;\n /* nothing to adjust anymore */\n\n if (nBits > desired_rate) {\n /* increase Quantize_StepSize */\n if (Direction == BinSearchDirection.BINSEARCH_DOWN)\n flagGoneOver = true;\n\n if (flagGoneOver)\n CurrentStep /= 2;\n Direction = BinSearchDirection.BINSEARCH_UP;\n step = CurrentStep;\n } else {\n /* decrease Quantize_StepSize */\n if (Direction == BinSearchDirection.BINSEARCH_UP)\n flagGoneOver = true;\n\n if (flagGoneOver)\n CurrentStep /= 2;\n Direction = BinSearchDirection.BINSEARCH_DOWN;\n step = -CurrentStep;\n }\n cod_info.global_gain += step;\n if (cod_info.global_gain < 0) {\n cod_info.global_gain = 0;\n flagGoneOver = true;\n }\n if (cod_info.global_gain > 255) {\n cod_info.global_gain = 255;\n flagGoneOver = true;\n }\n }\n\n assert(cod_info.global_gain >= 0);\n assert(cod_info.global_gain < 256);\n\n while (nBits > desired_rate && cod_info.global_gain < 255) {\n cod_info.global_gain++;\n nBits = tk.count_bits(gfc, xrpow, cod_info, null);\n }\n gfc.CurrentStep[ch] = (start - cod_info.global_gain >= 4) ? 4 : 2;\n gfc.OldValue[ch] = cod_info.global_gain;\n cod_info.part2_3_length = nBits;\n return nBits;\n }\n\n this.trancate_smallspectrums = function (gfc, gi, l3_xmin, work) {\n var distort = new_float(L3Side.SFBMAX);\n\n if ((0 == (gfc.substep_shaping & 4) && gi.block_type == Encoder.SHORT_TYPE)\n || (gfc.substep_shaping & 0x80) != 0)\n return;\n qupvt.calc_noise(gi, l3_xmin, distort, new CalcNoiseResult(), null);\n for (var j = 0; j < 576; j++) {\n var xr = 0.0;\n if (gi.l3_enc[j] != 0)\n xr = Math.abs(gi.xr[j]);\n work[j] = xr;\n }\n\n var j = 0;\n var sfb = 8;\n if (gi.block_type == Encoder.SHORT_TYPE)\n sfb = 6;\n do {\n var allowedNoise, trancateThreshold;\n var nsame, start;\n\n var width = gi.width[sfb];\n j += width;\n if (distort[sfb] >= 1.0)\n continue;\n\n Arrays.sort(work, j - width, width);\n if (BitStream.EQ(work[j - 1], 0.0))\n continue;\n /* all zero sfb */\n\n allowedNoise = (1.0 - distort[sfb]) * l3_xmin[sfb];\n trancateThreshold = 0.0;\n start = 0;\n do {\n var noise;\n for (nsame = 1; start + nsame < width; nsame++)\n if (BitStream.NEQ(work[start + j - width], work[start + j\n + nsame - width]))\n break;\n\n noise = work[start + j - width] * work[start + j - width]\n * nsame;\n if (allowedNoise < noise) {\n if (start != 0)\n trancateThreshold = work[start + j - width - 1];\n break;\n }\n allowedNoise -= noise;\n start += nsame;\n } while (start < width);\n if (BitStream.EQ(trancateThreshold, 0.0))\n continue;\n\n do {\n if (Math.abs(gi.xr[j - width]) <= trancateThreshold)\n gi.l3_enc[j - width] = 0;\n } while (--width > 0);\n } while (++sfb < gi.psymax);\n\n gi.part2_3_length = tk.noquant_count_bits(gfc, gi, null);\n };\n\n /**\n * author/date??\n *\n * Function: Returns zero if there is a scalefac which has not been\n * amplified. Otherwise it returns one.\n */\n function loop_break(cod_info) {\n for (var sfb = 0; sfb < cod_info.sfbmax; sfb++)\n if (cod_info.scalefac[sfb]\n + cod_info.subblock_gain[cod_info.window[sfb]] == 0)\n return false;\n\n return true;\n }\n\n /* mt 5/99: Function: Improved calc_noise for a single channel */\n\n function penalties(noise) {\n return Util.FAST_LOG10((0.368 + 0.632 * noise * noise * noise));\n }\n\n /**\n * author/date??\n *\n * several different codes to decide which quantization is better\n */\n function get_klemm_noise(distort, gi) {\n var klemm_noise = 1E-37;\n for (var sfb = 0; sfb < gi.psymax; sfb++)\n klemm_noise += penalties(distort[sfb]);\n\n return Math.max(1e-20, klemm_noise);\n }\n\n function quant_compare(quant_comp, best, calc, gi, distort) {\n /**\n * noise is given in decibels (dB) relative to masking thesholds.
\n *\n * over_noise: ??? (the previous comment is fully wrong)
\n * tot_noise: ??? (the previous comment is fully wrong)
\n * max_noise: max quantization noise\n */\n var better;\n\n switch (quant_comp) {\n default:\n case 9:\n {\n if (best.over_count > 0) {\n /* there are distorted sfb */\n better = calc.over_SSD <= best.over_SSD;\n if (calc.over_SSD == best.over_SSD)\n better = calc.bits < best.bits;\n } else {\n /* no distorted sfb */\n better = ((calc.max_noise < 0) && ((calc.max_noise * 10 + calc.bits) <= (best.max_noise * 10 + best.bits)));\n }\n break;\n }\n\n case 0:\n better = calc.over_count < best.over_count\n || (calc.over_count == best.over_count && calc.over_noise < best.over_noise)\n || (calc.over_count == best.over_count\n && BitStream.EQ(calc.over_noise, best.over_noise) && calc.tot_noise < best.tot_noise);\n break;\n\n case 8:\n calc.max_noise = get_klemm_noise(distort, gi);\n //$FALL-THROUGH$\n case 1:\n better = calc.max_noise < best.max_noise;\n break;\n case 2:\n better = calc.tot_noise < best.tot_noise;\n break;\n case 3:\n better = (calc.tot_noise < best.tot_noise)\n && (calc.max_noise < best.max_noise);\n break;\n case 4:\n better = (calc.max_noise <= 0.0 && best.max_noise > 0.2)\n || (calc.max_noise <= 0.0 && best.max_noise < 0.0\n && best.max_noise > calc.max_noise - 0.2 && calc.tot_noise < best.tot_noise)\n || (calc.max_noise <= 0.0 && best.max_noise > 0.0\n && best.max_noise > calc.max_noise - 0.2 && calc.tot_noise < best.tot_noise\n + best.over_noise)\n || (calc.max_noise > 0.0 && best.max_noise > -0.05\n && best.max_noise > calc.max_noise - 0.1 && calc.tot_noise\n + calc.over_noise < best.tot_noise\n + best.over_noise)\n || (calc.max_noise > 0.0 && best.max_noise > -0.1\n && best.max_noise > calc.max_noise - 0.15 && calc.tot_noise\n + calc.over_noise + calc.over_noise < best.tot_noise\n + best.over_noise + best.over_noise);\n break;\n case 5:\n better = calc.over_noise < best.over_noise\n || (BitStream.EQ(calc.over_noise, best.over_noise) && calc.tot_noise < best.tot_noise);\n break;\n case 6:\n better = calc.over_noise < best.over_noise\n || (BitStream.EQ(calc.over_noise, best.over_noise) && (calc.max_noise < best.max_noise || (BitStream\n .EQ(calc.max_noise, best.max_noise) && calc.tot_noise <= best.tot_noise)));\n break;\n case 7:\n better = calc.over_count < best.over_count\n || calc.over_noise < best.over_noise;\n break;\n }\n\n if (best.over_count == 0) {\n /*\n * If no distorted bands, only use this quantization if it is\n * better, and if it uses less bits. Unfortunately, part2_3_length\n * is sometimes a poor estimator of the final size at low bitrates.\n */\n better = better && calc.bits < best.bits;\n }\n\n return better;\n }\n\n /**\n * author/date??\n *\n *
\n     *  Amplify the scalefactor bands that violate the masking threshold.\n     *  See ISO 11172-3 Section C.1.5.4.3.5\n     *\n     *  distort[] = noise/masking\n     *  distort[] > 1   ==> noise is not masked\n     *  distort[] < 1   ==> noise is masked\n     *  max_dist = maximum value of distort[]\n     *\n     *  Three algorithms:\n     *  noise_shaping_amp\n     *        0             Amplify all bands with distort[]>1.\n     *\n     *        1             Amplify all bands with distort[] >= max_dist^(.5);\n     *                     ( 50% in the db scale)\n     *\n     *        2             Amplify first band with distort[] >= max_dist;\n     *\n     *\n     *  For algorithms 0 and 1, if max_dist < 1, then amplify all bands\n     *  with distort[] >= .95*max_dist.  This is to make sure we always\n     *  amplify at least one band.\n     * 
\n */\n function amp_scalefac_bands(gfp, cod_info, distort, xrpow, bRefine) {\n var gfc = gfp.internal_flags;\n var ifqstep34;\n\n if (cod_info.scalefac_scale == 0) {\n ifqstep34 = 1.29683955465100964055;\n /* 2**(.75*.5) */\n } else {\n ifqstep34 = 1.68179283050742922612;\n /* 2**(.75*1) */\n }\n\n /* compute maximum value of distort[] */\n var trigger = 0;\n for (var sfb = 0; sfb < cod_info.sfbmax; sfb++) {\n if (trigger < distort[sfb])\n trigger = distort[sfb];\n }\n\n var noise_shaping_amp = gfc.noise_shaping_amp;\n if (noise_shaping_amp == 3) {\n if (bRefine)\n noise_shaping_amp = 2;\n else\n noise_shaping_amp = 1;\n }\n switch (noise_shaping_amp) {\n case 2:\n /* amplify exactly 1 band */\n break;\n\n case 1:\n /* amplify bands within 50% of max (on db scale) */\n if (trigger > 1.0)\n trigger = Math.pow(trigger, .5);\n else\n trigger *= .95;\n break;\n\n case 0:\n default:\n /* ISO algorithm. amplify all bands with distort>1 */\n if (trigger > 1.0)\n trigger = 1.0;\n else\n trigger *= .95;\n break;\n }\n\n var j = 0;\n for (var sfb = 0; sfb < cod_info.sfbmax; sfb++) {\n var width = cod_info.width[sfb];\n var l;\n j += width;\n if (distort[sfb] < trigger)\n continue;\n\n if ((gfc.substep_shaping & 2) != 0) {\n gfc.pseudohalf[sfb] = (0 == gfc.pseudohalf[sfb]) ? 1 : 0;\n if (0 == gfc.pseudohalf[sfb] && gfc.noise_shaping_amp == 2)\n return;\n }\n cod_info.scalefac[sfb]++;\n for (l = -width; l < 0; l++) {\n xrpow[j + l] *= ifqstep34;\n if (xrpow[j + l] > cod_info.xrpow_max)\n cod_info.xrpow_max = xrpow[j + l];\n }\n\n if (gfc.noise_shaping_amp == 2)\n return;\n }\n }\n\n /**\n * Takehiro Tominaga 2000-xx-xx\n *\n * turns on scalefac scale and adjusts scalefactors\n */\n function inc_scalefac_scale(cod_info, xrpow) {\n var ifqstep34 = 1.29683955465100964055;\n\n var j = 0;\n for (var sfb = 0; sfb < cod_info.sfbmax; sfb++) {\n var width = cod_info.width[sfb];\n var s = cod_info.scalefac[sfb];\n if (cod_info.preflag != 0)\n s += qupvt.pretab[sfb];\n j += width;\n if ((s & 1) != 0) {\n s++;\n for (var l = -width; l < 0; l++) {\n xrpow[j + l] *= ifqstep34;\n if (xrpow[j + l] > cod_info.xrpow_max)\n cod_info.xrpow_max = xrpow[j + l];\n }\n }\n cod_info.scalefac[sfb] = s >> 1;\n }\n cod_info.preflag = 0;\n cod_info.scalefac_scale = 1;\n }\n\n /**\n * Takehiro Tominaga 2000-xx-xx\n *\n * increases the subblock gain and adjusts scalefactors\n */\n function inc_subblock_gain(gfc, cod_info, xrpow) {\n var sfb;\n var scalefac = cod_info.scalefac;\n\n /* subbloc_gain can't do anything in the long block region */\n for (sfb = 0; sfb < cod_info.sfb_lmax; sfb++) {\n if (scalefac[sfb] >= 16)\n return true;\n }\n\n for (var window = 0; window < 3; window++) {\n var s1 = 0;\n var s2 = 0;\n\n for (sfb = cod_info.sfb_lmax + window; sfb < cod_info.sfbdivide; sfb += 3) {\n if (s1 < scalefac[sfb])\n s1 = scalefac[sfb];\n }\n for (; sfb < cod_info.sfbmax; sfb += 3) {\n if (s2 < scalefac[sfb])\n s2 = scalefac[sfb];\n }\n\n if (s1 < 16 && s2 < 8)\n continue;\n\n if (cod_info.subblock_gain[window] >= 7)\n return true;\n\n /*\n * even though there is no scalefactor for sfb12 subblock gain\n * affects upper frequencies too, that's why we have to go up to\n * SBMAX_s\n */\n cod_info.subblock_gain[window]++;\n var j = gfc.scalefac_band.l[cod_info.sfb_lmax];\n for (sfb = cod_info.sfb_lmax + window; sfb < cod_info.sfbmax; sfb += 3) {\n var amp;\n var width = cod_info.width[sfb];\n var s = scalefac[sfb];\n assert(s >= 0);\n s = s - (4 >> cod_info.scalefac_scale);\n if (s >= 0) {\n scalefac[sfb] = s;\n j += width * 3;\n continue;\n }\n\n scalefac[sfb] = 0;\n {\n var gain = 210 + (s << (cod_info.scalefac_scale + 1));\n amp = qupvt.IPOW20(gain);\n }\n j += width * (window + 1);\n for (var l = -width; l < 0; l++) {\n xrpow[j + l] *= amp;\n if (xrpow[j + l] > cod_info.xrpow_max)\n cod_info.xrpow_max = xrpow[j + l];\n }\n j += width * (3 - window - 1);\n }\n\n {\n var amp = qupvt.IPOW20(202);\n j += cod_info.width[sfb] * (window + 1);\n for (var l = -cod_info.width[sfb]; l < 0; l++) {\n xrpow[j + l] *= amp;\n if (xrpow[j + l] > cod_info.xrpow_max)\n cod_info.xrpow_max = xrpow[j + l];\n }\n }\n }\n return false;\n }\n\n /**\n *
\n     *  Takehiro Tominaga /date??\n     *  Robert Hegemann 2000-09-06: made a function of it\n     *\n     *  amplifies scalefactor bands,\n     *   - if all are already amplified returns 0\n     *   - if some bands are amplified too much:\n     *      * try to increase scalefac_scale\n     *      * if already scalefac_scale was set\n     *          try on short blocks to increase subblock gain\n     * 
\n */\n function balance_noise(gfp, cod_info, distort, xrpow, bRefine) {\n var gfc = gfp.internal_flags;\n\n amp_scalefac_bands(gfp, cod_info, distort, xrpow, bRefine);\n\n /*\n * check to make sure we have not amplified too much loop_break returns\n * 0 if there is an unamplified scalefac scale_bitcount returns 0 if no\n * scalefactors are too large\n */\n\n var status = loop_break(cod_info);\n\n if (status)\n return false;\n /* all bands amplified */\n\n /*\n * not all scalefactors have been amplified. so these scalefacs are\n * possibly valid. encode them:\n */\n if (gfc.mode_gr == 2)\n status = tk.scale_bitcount(cod_info);\n else\n status = tk.scale_bitcount_lsf(gfc, cod_info);\n\n if (!status)\n return true;\n /* amplified some bands not exceeding limits */\n\n /*\n * some scalefactors are too large. lets try setting scalefac_scale=1\n */\n if (gfc.noise_shaping > 1) {\n Arrays.fill(gfc.pseudohalf, 0);\n if (0 == cod_info.scalefac_scale) {\n inc_scalefac_scale(cod_info, xrpow);\n status = false;\n } else {\n if (cod_info.block_type == Encoder.SHORT_TYPE\n && gfc.subblock_gain > 0) {\n status = (inc_subblock_gain(gfc, cod_info, xrpow) || loop_break(cod_info));\n }\n }\n }\n\n if (!status) {\n if (gfc.mode_gr == 2)\n status = tk.scale_bitcount(cod_info);\n else\n status = tk.scale_bitcount_lsf(gfc, cod_info);\n }\n return !status;\n }\n\n /**\n *
\n     *  Function: The outer iteration loop controls the masking conditions\n     *  of all scalefactorbands. It computes the best scalefac and\n     *  global gain. This module calls the inner iteration loop\n     *\n     *  mt 5/99 completely rewritten to allow for bit reservoir control,\n     *  mid/side channels with L/R or mid/side masking thresholds,\n     *  and chooses best quantization instead of last quantization when\n     *  no distortion free quantization can be found.\n     *\n     *  added VBR support mt 5/99\n     *\n     *  some code shuffle rh 9/00\n     * 
\n *\n * @param l3_xmin\n * allowed distortion\n * @param xrpow\n * coloured magnitudes of spectral\n * @param targ_bits\n * maximum allowed bits\n */\n this.outer_loop = function (gfp, cod_info, l3_xmin, xrpow, ch, targ_bits) {\n var gfc = gfp.internal_flags;\n var cod_info_w = new GrInfo();\n var save_xrpow = new_float(576);\n var distort = new_float(L3Side.SFBMAX);\n var best_noise_info = new CalcNoiseResult();\n var better;\n var prev_noise = new CalcNoiseData();\n var best_part2_3_length = 9999999;\n var bEndOfSearch = false;\n var bRefine = false;\n var best_ggain_pass1 = 0;\n\n bin_search_StepSize(gfc, cod_info, targ_bits, ch, xrpow);\n\n if (0 == gfc.noise_shaping)\n /* fast mode, no noise shaping, we are ready */\n return 100;\n /* default noise_info.over_count */\n\n /* compute the distortion in this quantization */\n /* coefficients and thresholds both l/r (or both mid/side) */\n qupvt.calc_noise(cod_info, l3_xmin, distort, best_noise_info,\n prev_noise);\n best_noise_info.bits = cod_info.part2_3_length;\n\n cod_info_w.assign(cod_info);\n var age = 0;\n System.arraycopy(xrpow, 0, save_xrpow, 0, 576);\n\n while (!bEndOfSearch) {\n /* BEGIN MAIN LOOP */\n do {\n var noise_info = new CalcNoiseResult();\n var search_limit;\n var maxggain = 255;\n\n /*\n * When quantization with no distorted bands is found, allow up\n * to X new unsuccesful tries in serial. This gives us more\n * possibilities for different quant_compare modes. Much more\n * than 3 makes not a big difference, it is only slower.\n */\n\n if ((gfc.substep_shaping & 2) != 0) {\n search_limit = 20;\n } else {\n search_limit = 3;\n }\n\n /*\n * Check if the last scalefactor band is distorted. in VBR mode\n * we can't get rid of the distortion, so quit now and VBR mode\n * will try again with more bits. (makes a 10% speed increase,\n * the files I tested were binary identical, 2000/05/20 Robert\n * Hegemann) distort[] > 1 means noise > allowed noise\n */\n if (gfc.sfb21_extra) {\n if (distort[cod_info_w.sfbmax] > 1.0)\n break;\n if (cod_info_w.block_type == Encoder.SHORT_TYPE\n && (distort[cod_info_w.sfbmax + 1] > 1.0 || distort[cod_info_w.sfbmax + 2] > 1.0))\n break;\n }\n\n /* try a new scalefactor conbination on cod_info_w */\n if (!balance_noise(gfp, cod_info_w, distort, xrpow, bRefine))\n break;\n if (cod_info_w.scalefac_scale != 0)\n maxggain = 254;\n\n /*\n * inner_loop starts with the initial quantization step computed\n * above and slowly increases until the bits < huff_bits. Thus\n * it is important not to start with too large of an inital\n * quantization step. Too small is ok, but inner_loop will take\n * longer\n */\n var huff_bits = targ_bits - cod_info_w.part2_length;\n if (huff_bits <= 0)\n break;\n\n /*\n * increase quantizer stepsize until needed bits are below\n * maximum\n */\n while ((cod_info_w.part2_3_length = tk.count_bits(gfc, xrpow,\n cod_info_w, prev_noise)) > huff_bits\n && cod_info_w.global_gain <= maxggain)\n cod_info_w.global_gain++;\n\n if (cod_info_w.global_gain > maxggain)\n break;\n\n if (best_noise_info.over_count == 0) {\n\n while ((cod_info_w.part2_3_length = tk.count_bits(gfc,\n xrpow, cod_info_w, prev_noise)) > best_part2_3_length\n && cod_info_w.global_gain <= maxggain)\n cod_info_w.global_gain++;\n\n if (cod_info_w.global_gain > maxggain)\n break;\n }\n\n /* compute the distortion in this quantization */\n qupvt.calc_noise(cod_info_w, l3_xmin, distort, noise_info,\n prev_noise);\n noise_info.bits = cod_info_w.part2_3_length;\n\n /*\n * check if this quantization is better than our saved\n * quantization\n */\n if (cod_info.block_type != Encoder.SHORT_TYPE) {\n // NORM, START or STOP type\n better = gfp.quant_comp;\n } else\n better = gfp.quant_comp_short;\n\n better = quant_compare(better, best_noise_info, noise_info,\n cod_info_w, distort) ? 1 : 0;\n\n /* save data so we can restore this quantization later */\n if (better != 0) {\n best_part2_3_length = cod_info.part2_3_length;\n best_noise_info = noise_info;\n cod_info.assign(cod_info_w);\n age = 0;\n /* save data so we can restore this quantization later */\n /* store for later reuse */\n System.arraycopy(xrpow, 0, save_xrpow, 0, 576);\n } else {\n /* early stop? */\n if (gfc.full_outer_loop == 0) {\n if (++age > search_limit\n && best_noise_info.over_count == 0)\n break;\n if ((gfc.noise_shaping_amp == 3) && bRefine && age > 30)\n break;\n if ((gfc.noise_shaping_amp == 3)\n && bRefine\n && (cod_info_w.global_gain - best_ggain_pass1) > 15)\n break;\n }\n }\n } while ((cod_info_w.global_gain + cod_info_w.scalefac_scale) < 255);\n\n if (gfc.noise_shaping_amp == 3) {\n if (!bRefine) {\n /* refine search */\n cod_info_w.assign(cod_info);\n System.arraycopy(save_xrpow, 0, xrpow, 0, 576);\n age = 0;\n best_ggain_pass1 = cod_info_w.global_gain;\n\n bRefine = true;\n } else {\n /* search already refined, stop */\n bEndOfSearch = true;\n }\n\n } else {\n bEndOfSearch = true;\n }\n }\n\n assert((cod_info.global_gain + cod_info.scalefac_scale) <= 255);\n /*\n * finish up\n */\n if (gfp.VBR == VbrMode.vbr_rh || gfp.VBR == VbrMode.vbr_mtrh)\n /* restore for reuse on next try */\n System.arraycopy(save_xrpow, 0, xrpow, 0, 576);\n /*\n * do the 'substep shaping'\n */\n else if ((gfc.substep_shaping & 1) != 0)\n trancate_smallspectrums(gfc, cod_info, l3_xmin, xrpow);\n\n return best_noise_info.over_count;\n }\n\n /**\n * Robert Hegemann 2000-09-06\n *\n * update reservoir status after FINAL quantization/bitrate\n */\n this.iteration_finish_one = function (gfc, gr, ch) {\n var l3_side = gfc.l3_side;\n var cod_info = l3_side.tt[gr][ch];\n\n /*\n * try some better scalefac storage\n */\n tk.best_scalefac_store(gfc, gr, ch, l3_side);\n\n /*\n * best huffman_divide may save some bits too\n */\n if (gfc.use_best_huffman == 1)\n tk.best_huffman_divide(gfc, cod_info);\n\n /*\n * update reservoir status after FINAL quantization/bitrate\n */\n rv.ResvAdjust(gfc, cod_info);\n };\n\n /**\n *\n * 2000-09-04 Robert Hegemann\n *\n * @param l3_xmin\n * allowed distortion of the scalefactor\n * @param xrpow\n * coloured magnitudes of spectral values\n */\n this.VBR_encode_granule = function (gfp, cod_info, l3_xmin, xrpow, ch, min_bits, max_bits) {\n var gfc = gfp.internal_flags;\n var bst_cod_info = new GrInfo();\n var bst_xrpow = new_float(576);\n var Max_bits = max_bits;\n var real_bits = max_bits + 1;\n var this_bits = (max_bits + min_bits) / 2;\n var dbits, over, found = 0;\n var sfb21_extra = gfc.sfb21_extra;\n\n assert(Max_bits <= LameInternalFlags.MAX_BITS_PER_CHANNEL);\n Arrays.fill(bst_cod_info.l3_enc, 0);\n\n /*\n * search within round about 40 bits of optimal\n */\n do {\n assert(this_bits >= min_bits);\n assert(this_bits <= max_bits);\n assert(min_bits <= max_bits);\n\n if (this_bits > Max_bits - 42)\n gfc.sfb21_extra = false;\n else\n gfc.sfb21_extra = sfb21_extra;\n\n over = outer_loop(gfp, cod_info, l3_xmin, xrpow, ch, this_bits);\n\n /*\n * is quantization as good as we are looking for ? in this case: is\n * no scalefactor band distorted?\n */\n if (over <= 0) {\n found = 1;\n /*\n * now we know it can be done with \"real_bits\" and maybe we can\n * skip some iterations\n */\n real_bits = cod_info.part2_3_length;\n\n /*\n * store best quantization so far\n */\n bst_cod_info.assign(cod_info);\n System.arraycopy(xrpow, 0, bst_xrpow, 0, 576);\n\n /*\n * try with fewer bits\n */\n max_bits = real_bits - 32;\n dbits = max_bits - min_bits;\n this_bits = (max_bits + min_bits) / 2;\n } else {\n /*\n * try with more bits\n */\n min_bits = this_bits + 32;\n dbits = max_bits - min_bits;\n this_bits = (max_bits + min_bits) / 2;\n\n if (found != 0) {\n found = 2;\n /*\n * start again with best quantization so far\n */\n cod_info.assign(bst_cod_info);\n System.arraycopy(bst_xrpow, 0, xrpow, 0, 576);\n }\n }\n } while (dbits > 12);\n\n gfc.sfb21_extra = sfb21_extra;\n\n /*\n * found=0 => nothing found, use last one found=1 => we just found the\n * best and left the loop found=2 => we restored a good one and have now\n * l3_enc to restore too\n */\n if (found == 2) {\n System.arraycopy(bst_cod_info.l3_enc, 0, cod_info.l3_enc, 0, 576);\n }\n assert(cod_info.part2_3_length <= Max_bits);\n }\n\n /**\n * Robert Hegemann 2000-09-05\n *\n * calculates * how many bits are available for analog silent granules * how\n * many bits to use for the lowest allowed bitrate * how many bits each\n * bitrate would provide\n */\n this.get_framebits = function (gfp, frameBits) {\n var gfc = gfp.internal_flags;\n\n /*\n * always use at least this many bits per granule per channel unless we\n * detect analog silence, see below\n */\n gfc.bitrate_index = gfc.VBR_min_bitrate;\n var bitsPerFrame = bs.getframebits(gfp);\n\n /*\n * bits for analog silence\n */\n gfc.bitrate_index = 1;\n bitsPerFrame = bs.getframebits(gfp);\n\n for (var i = 1; i <= gfc.VBR_max_bitrate; i++) {\n gfc.bitrate_index = i;\n var mb = new MeanBits(bitsPerFrame);\n frameBits[i] = rv.ResvFrameBegin(gfp, mb);\n bitsPerFrame = mb.bits;\n }\n };\n\n /* RH: this one needs to be overhauled sometime */\n\n /**\n *
\n     *  2000-09-04 Robert Hegemann\n     *\n     *  * converts LR to MS coding when necessary\n     *  * calculates allowed/adjusted quantization noise amounts\n     *  * detects analog silent frames\n     *\n     *  some remarks:\n     *  - lower masking depending on Quality setting\n     *  - quality control together with adjusted ATH MDCT scaling\n     *    on lower quality setting allocate more noise from\n     *    ATH masking, and on higher quality setting allocate\n     *    less noise from ATH masking.\n     *  - experiments show that going more than 2dB over GPSYCHO's\n     *    limits ends up in very annoying artefacts\n     * 
\n */\n this.VBR_old_prepare = function (gfp, pe, ms_ener_ratio, ratio, l3_xmin, frameBits, min_bits,\n max_bits, bands) {\n var gfc = gfp.internal_flags;\n\n var masking_lower_db, adjust = 0.0;\n var analog_silence = 1;\n var bits = 0;\n\n gfc.bitrate_index = gfc.VBR_max_bitrate;\n var avg = rv.ResvFrameBegin(gfp, new MeanBits(0)) / gfc.mode_gr;\n\n get_framebits(gfp, frameBits);\n\n for (var gr = 0; gr < gfc.mode_gr; gr++) {\n var mxb = qupvt.on_pe(gfp, pe, max_bits[gr], avg, gr, 0);\n if (gfc.mode_ext == Encoder.MPG_MD_MS_LR) {\n ms_convert(gfc.l3_side, gr);\n qupvt.reduce_side(max_bits[gr], ms_ener_ratio[gr], avg, mxb);\n }\n for (var ch = 0; ch < gfc.channels_out; ++ch) {\n var cod_info = gfc.l3_side.tt[gr][ch];\n\n if (cod_info.block_type != Encoder.SHORT_TYPE) {\n // NORM, START or STOP type\n adjust = 1.28 / (1 + Math\n .exp(3.5 - pe[gr][ch] / 300.)) - 0.05;\n masking_lower_db = gfc.PSY.mask_adjust - adjust;\n } else {\n adjust = 2.56 / (1 + Math\n .exp(3.5 - pe[gr][ch] / 300.)) - 0.14;\n masking_lower_db = gfc.PSY.mask_adjust_short - adjust;\n }\n gfc.masking_lower = Math.pow(10.0,\n masking_lower_db * 0.1);\n\n init_outer_loop(gfc, cod_info);\n bands[gr][ch] = qupvt.calc_xmin(gfp, ratio[gr][ch], cod_info,\n l3_xmin[gr][ch]);\n if (bands[gr][ch] != 0)\n analog_silence = 0;\n\n min_bits[gr][ch] = 126;\n\n bits += max_bits[gr][ch];\n }\n }\n for (var gr = 0; gr < gfc.mode_gr; gr++) {\n for (var ch = 0; ch < gfc.channels_out; ch++) {\n if (bits > frameBits[gfc.VBR_max_bitrate]) {\n max_bits[gr][ch] *= frameBits[gfc.VBR_max_bitrate];\n max_bits[gr][ch] /= bits;\n }\n if (min_bits[gr][ch] > max_bits[gr][ch])\n min_bits[gr][ch] = max_bits[gr][ch];\n\n }\n /* for ch */\n }\n /* for gr */\n\n return analog_silence;\n };\n\n this.bitpressure_strategy = function (gfc, l3_xmin, min_bits, max_bits) {\n for (var gr = 0; gr < gfc.mode_gr; gr++) {\n for (var ch = 0; ch < gfc.channels_out; ch++) {\n var gi = gfc.l3_side.tt[gr][ch];\n var pxmin = l3_xmin[gr][ch];\n var pxminPos = 0;\n for (var sfb = 0; sfb < gi.psy_lmax; sfb++)\n pxmin[pxminPos++] *= 1. + .029 * sfb * sfb\n / Encoder.SBMAX_l / Encoder.SBMAX_l;\n\n if (gi.block_type == Encoder.SHORT_TYPE) {\n for (var sfb = gi.sfb_smin; sfb < Encoder.SBMAX_s; sfb++) {\n pxmin[pxminPos++] *= 1. + .029 * sfb * sfb\n / Encoder.SBMAX_s / Encoder.SBMAX_s;\n pxmin[pxminPos++] *= 1. + .029 * sfb * sfb\n / Encoder.SBMAX_s / Encoder.SBMAX_s;\n pxmin[pxminPos++] *= 1. + .029 * sfb * sfb\n / Encoder.SBMAX_s / Encoder.SBMAX_s;\n }\n }\n max_bits[gr][ch] = 0 | Math.max(min_bits[gr][ch],\n 0.9 * max_bits[gr][ch]);\n }\n }\n };\n\n this.VBR_new_prepare = function (gfp, pe, ratio, l3_xmin, frameBits, max_bits) {\n var gfc = gfp.internal_flags;\n\n var analog_silence = 1;\n var avg = 0, bits = 0;\n var maximum_framebits;\n\n if (!gfp.free_format) {\n gfc.bitrate_index = gfc.VBR_max_bitrate;\n\n var mb = new MeanBits(avg);\n rv.ResvFrameBegin(gfp, mb);\n avg = mb.bits;\n\n get_framebits(gfp, frameBits);\n maximum_framebits = frameBits[gfc.VBR_max_bitrate];\n } else {\n gfc.bitrate_index = 0;\n var mb = new MeanBits(avg);\n maximum_framebits = rv.ResvFrameBegin(gfp, mb);\n avg = mb.bits;\n frameBits[0] = maximum_framebits;\n }\n\n for (var gr = 0; gr < gfc.mode_gr; gr++) {\n qupvt.on_pe(gfp, pe, max_bits[gr], avg, gr, 0);\n if (gfc.mode_ext == Encoder.MPG_MD_MS_LR) {\n ms_convert(gfc.l3_side, gr);\n }\n for (var ch = 0; ch < gfc.channels_out; ++ch) {\n var cod_info = gfc.l3_side.tt[gr][ch];\n\n gfc.masking_lower = Math.pow(10.0,\n gfc.PSY.mask_adjust * 0.1);\n\n init_outer_loop(gfc, cod_info);\n if (0 != qupvt.calc_xmin(gfp, ratio[gr][ch], cod_info,\n l3_xmin[gr][ch]))\n analog_silence = 0;\n\n bits += max_bits[gr][ch];\n }\n }\n for (var gr = 0; gr < gfc.mode_gr; gr++) {\n for (var ch = 0; ch < gfc.channels_out; ch++) {\n if (bits > maximum_framebits) {\n max_bits[gr][ch] *= maximum_framebits;\n max_bits[gr][ch] /= bits;\n }\n\n }\n /* for ch */\n }\n /* for gr */\n\n return analog_silence;\n };\n\n /**\n * calculates target bits for ABR encoding\n *\n * mt 2000/05/31\n */\n this.calc_target_bits = function (gfp, pe, ms_ener_ratio, targ_bits, analog_silence_bits, max_frame_bits) {\n var gfc = gfp.internal_flags;\n var l3_side = gfc.l3_side;\n var res_factor;\n var gr, ch, totbits, mean_bits = 0;\n\n gfc.bitrate_index = gfc.VBR_max_bitrate;\n var mb = new MeanBits(mean_bits);\n max_frame_bits[0] = rv.ResvFrameBegin(gfp, mb);\n mean_bits = mb.bits;\n\n gfc.bitrate_index = 1;\n mean_bits = bs.getframebits(gfp) - gfc.sideinfo_len * 8;\n analog_silence_bits[0] = mean_bits / (gfc.mode_gr * gfc.channels_out);\n\n mean_bits = gfp.VBR_mean_bitrate_kbps * gfp.framesize * 1000;\n if ((gfc.substep_shaping & 1) != 0)\n mean_bits *= 1.09;\n mean_bits /= gfp.out_samplerate;\n mean_bits -= gfc.sideinfo_len * 8;\n mean_bits /= (gfc.mode_gr * gfc.channels_out);\n\n /**\n *
\n         *           res_factor is the percentage of the target bitrate that should\n         *           be used on average.  the remaining bits are added to the\n         *           bitreservoir and used for difficult to encode frames.\n         *\n         *           Since we are tracking the average bitrate, we should adjust\n         *           res_factor \"on the fly\", increasing it if the average bitrate\n         *           is greater than the requested bitrate, and decreasing it\n         *           otherwise.  Reasonable ranges are from .9 to 1.0\n         *\n         *           Until we get the above suggestion working, we use the following\n         *           tuning:\n         *           compression ratio    res_factor\n         *           5.5  (256kbps)         1.0      no need for bitreservoir\n         *           11   (128kbps)         .93      7% held for reservoir\n         *\n         *           with linear interpolation for other values.\n         * 
\n */\n res_factor = .93 + .07 * (11.0 - gfp.compression_ratio)\n / (11.0 - 5.5);\n if (res_factor < .90)\n res_factor = .90;\n if (res_factor > 1.00)\n res_factor = 1.00;\n\n for (gr = 0; gr < gfc.mode_gr; gr++) {\n var sum = 0;\n for (ch = 0; ch < gfc.channels_out; ch++) {\n targ_bits[gr][ch] = (int)(res_factor * mean_bits);\n\n if (pe[gr][ch] > 700) {\n var add_bits = (int)((pe[gr][ch] - 700) / 1.4);\n\n var cod_info = l3_side.tt[gr][ch];\n targ_bits[gr][ch] = (int)(res_factor * mean_bits);\n\n /* short blocks use a little extra, no matter what the pe */\n if (cod_info.block_type == Encoder.SHORT_TYPE) {\n if (add_bits < mean_bits / 2)\n add_bits = mean_bits / 2;\n }\n /* at most increase bits by 1.5*average */\n if (add_bits > mean_bits * 3 / 2)\n add_bits = mean_bits * 3 / 2;\n else if (add_bits < 0)\n add_bits = 0;\n\n targ_bits[gr][ch] += add_bits;\n }\n if (targ_bits[gr][ch] > LameInternalFlags.MAX_BITS_PER_CHANNEL) {\n targ_bits[gr][ch] = LameInternalFlags.MAX_BITS_PER_CHANNEL;\n }\n sum += targ_bits[gr][ch];\n }\n /* for ch */\n if (sum > LameInternalFlags.MAX_BITS_PER_GRANULE) {\n for (ch = 0; ch < gfc.channels_out; ++ch) {\n targ_bits[gr][ch] *= LameInternalFlags.MAX_BITS_PER_GRANULE;\n targ_bits[gr][ch] /= sum;\n }\n }\n }\n /* for gr */\n\n if (gfc.mode_ext == Encoder.MPG_MD_MS_LR)\n for (gr = 0; gr < gfc.mode_gr; gr++) {\n qupvt.reduce_side(targ_bits[gr], ms_ener_ratio[gr], mean_bits\n * gfc.channels_out,\n LameInternalFlags.MAX_BITS_PER_GRANULE);\n }\n\n /*\n * sum target bits\n */\n totbits = 0;\n for (gr = 0; gr < gfc.mode_gr; gr++) {\n for (ch = 0; ch < gfc.channels_out; ch++) {\n if (targ_bits[gr][ch] > LameInternalFlags.MAX_BITS_PER_CHANNEL)\n targ_bits[gr][ch] = LameInternalFlags.MAX_BITS_PER_CHANNEL;\n totbits += targ_bits[gr][ch];\n }\n }\n\n /*\n * repartion target bits if needed\n */\n if (totbits > max_frame_bits[0]) {\n for (gr = 0; gr < gfc.mode_gr; gr++) {\n for (ch = 0; ch < gfc.channels_out; ch++) {\n targ_bits[gr][ch] *= max_frame_bits[0];\n targ_bits[gr][ch] /= totbits;\n }\n }\n }\n }\n\n}\n\nmodule.exports = Quantize;\n","/*\n * bit reservoir source file\n *\n * Copyright (c) 1999-2000 Mark Taylor\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n * Library General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the\n * Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n * Boston, MA 02111-1307, USA.\n */\n\n/* $Id: Reservoir.java,v 1.9 2011/05/24 20:48:06 kenchis Exp $ */\n\n//package mp3;\n\n/**\n * ResvFrameBegin:
\n * Called (repeatedly) at the beginning of a frame. Updates the maximum size of\n * the reservoir, and checks to make sure main_data_begin was set properly by\n * the formatter
\n * Background information:\n * \n * This is the original text from the ISO standard. Because of sooo many bugs\n * and irritations correcting comments are added in brackets []. A '^W' means\n * you should remove the last word.\n * \n *
\n *  1. The following rule can be used to calculate the maximum\n *     number of bits used for one granule [^W frame]:
\n * At the highest possible bitrate of Layer III (320 kbps\n * per stereo signal [^W^W^W], 48 kHz) the frames must be of\n * [^W^W^W are designed to have] constant length, i.e.\n * one buffer [^W^W the frame] length is:
\n * \n * 320 kbps * 1152/48 kHz = 7680 bit = 960 byte\n * \n * This value is used as the maximum buffer per channel [^W^W] at\n * lower bitrates [than 320 kbps]. At 64 kbps mono or 128 kbps\n * stereo the main granule length is 64 kbps * 576/48 kHz = 768 bit\n * [per granule and channel] at 48 kHz sampling frequency.\n * This means that there is a maximum deviation (short time buffer\n * [= reservoir]) of 7680 - 2*2*768 = 4608 bits is allowed at 64 kbps.\n * The actual deviation is equal to the number of bytes [with the\n * meaning of octets] denoted by the main_data_end offset pointer.\n * The actual maximum deviation is (2^9-1)*8 bit = 4088 bits\n * [for MPEG-1 and (2^8-1)*8 bit for MPEG-2, both are hard limits].\n * ... The xchange of buffer bits between the left and right channel\n * is allowed without restrictions [exception: dual channel].\n * Because of the [constructed] constraint on the buffer size\n * main_data_end is always set to 0 in the case of bit_rate_index==14,\n * i.e. data rate 320 kbps per stereo signal [^W^W^W]. In this case\n * all data are allocated between adjacent header [^W sync] words\n * [, i.e. there is no buffering at all].\n *
\n */\n\nvar common = require('./common.js');\nvar assert = common.assert;\n\nfunction Reservoir() {\n\tvar bs;\n\n\tthis.setModules = function(_bs) {\n\t\tbs = _bs;\n\t}\n\n\tthis.ResvFrameBegin = function(gfp, mean_bits) {\n\t\tvar gfc = gfp.internal_flags;\n\t\tvar maxmp3buf;\n\t\tvar l3_side = gfc.l3_side;\n\n\t\tvar frameLength = bs.getframebits(gfp);\n\t\tmean_bits.bits = (frameLength - gfc.sideinfo_len * 8) / gfc.mode_gr;\n\n\t\t/**\n\t\t *
\n\t\t *  Meaning of the variables:\n\t\t *      resvLimit: (0, 8, ..., 8*255 (MPEG-2), 8*511 (MPEG-1))\n\t\t *          Number of bits can be stored in previous frame(s) due to\n\t\t *          counter size constaints\n\t\t *      maxmp3buf: ( ??? ... 8*1951 (MPEG-1 and 2), 8*2047 (MPEG-2.5))\n\t\t *          Number of bits allowed to encode one frame (you can take 8*511 bit\n\t\t *          from the bit reservoir and at most 8*1440 bit from the current\n\t\t *          frame (320 kbps, 32 kHz), so 8*1951 bit is the largest possible\n\t\t *          value for MPEG-1 and -2)\n\t\t * \n\t\t *          maximum allowed granule/channel size times 4 = 8*2047 bits.,\n\t\t *          so this is the absolute maximum supported by the format.\n\t\t * \n\t\t * \n\t\t *      fullFrameBits:  maximum number of bits available for encoding\n\t\t *                      the current frame.\n\t\t * \n\t\t *      mean_bits:      target number of bits per granule.\n\t\t * \n\t\t *      frameLength:\n\t\t * \n\t\t *      gfc.ResvMax:   maximum allowed reservoir\n\t\t * \n\t\t *      gfc.ResvSize:  current reservoir size\n\t\t * \n\t\t *      l3_side.resvDrain_pre:\n\t\t *         ancillary data to be added to previous frame:\n\t\t *         (only usefull in VBR modes if it is possible to have\n\t\t *         maxmp3buf < fullFrameBits)).  Currently disabled,\n\t\t *         see #define NEW_DRAIN\n\t\t *         2010-02-13: RH now enabled, it seems to be needed for CBR too,\n\t\t *                     as there exists one example, where the FhG decoder\n\t\t *                     can't decode a -b320 CBR file anymore.\n\t\t * \n\t\t *      l3_side.resvDrain_post:\n\t\t *         ancillary data to be added to this frame:\n\t\t * \n\t\t * 
\n\t\t */\n\n\t\t/* main_data_begin has 9 bits in MPEG-1, 8 bits MPEG-2 */\n\t\tvar resvLimit = (8 * 256) * gfc.mode_gr - 8;\n\n\t\t/*\n\t\t * maximum allowed frame size. dont use more than this number of bits,\n\t\t * even if the frame has the space for them:\n\t\t */\n\t\tif (gfp.brate > 320) {\n\t\t\t/* in freeformat the buffer is constant */\n\t\t\tmaxmp3buf = 8 * ((int) ((gfp.brate * 1000)\n\t\t\t\t\t/ (gfp.out_samplerate / 1152) / 8 + .5));\n\t\t} else {\n\t\t\t/*\n\t\t\t * all mp3 decoders should have enough buffer to handle this value:\n\t\t\t * size of a 320kbps 32kHz frame\n\t\t\t */\n\t\t\tmaxmp3buf = 8 * 1440;\n\n\t\t\t/*\n\t\t\t * Bouvigne suggests this more lax interpretation of the ISO doc\n\t\t\t * instead of using 8*960.\n\t\t\t */\n\n\t\t\tif (gfp.strict_ISO) {\n\t\t\t\tmaxmp3buf = 8 * ((int) (320000 / (gfp.out_samplerate / 1152) / 8 + .5));\n\t\t\t}\n\t\t}\n\n\t\tgfc.ResvMax = maxmp3buf - frameLength;\n\t\tif (gfc.ResvMax > resvLimit)\n\t\t\tgfc.ResvMax = resvLimit;\n\t\tif (gfc.ResvMax < 0 || gfp.disable_reservoir)\n\t\t\tgfc.ResvMax = 0;\n\n\t\tvar fullFrameBits = mean_bits.bits * gfc.mode_gr\n\t\t\t\t+ Math.min(gfc.ResvSize, gfc.ResvMax);\n\n\t\tif (fullFrameBits > maxmp3buf)\n\t\t\tfullFrameBits = maxmp3buf;\n\n\t\tassert (0 == gfc.ResvMax % 8);\n\t\tassert (gfc.ResvMax >= 0);\n\n\t\tl3_side.resvDrain_pre = 0;\n\n\t\t// frame analyzer code\n\t\tif (gfc.pinfo != null) {\n\t\t\t/*\n\t\t\t * expected bits per channel per granule [is this also right for\n\t\t\t * mono/stereo, MPEG-1/2 ?]\n\t\t\t */\n\t\t\tgfc.pinfo.mean_bits = mean_bits.bits / 2;\n\t\t\tgfc.pinfo.resvsize = gfc.ResvSize;\n\t\t}\n\n\t\treturn fullFrameBits;\n\t}\n\n\t/**\n\t * returns targ_bits: target number of bits to use for 1 granule
\n\t * extra_bits: amount extra available from reservoir
\n\t * Mark Taylor 4/99\n\t */\n\tthis.ResvMaxBits = function(gfp, mean_bits, targ_bits, cbr) {\n\t\tvar gfc = gfp.internal_flags;\n\t\tvar add_bits;\n var ResvSize = gfc.ResvSize, ResvMax = gfc.ResvMax;\n\n\t\t/* compensate the saved bits used in the 1st granule */\n\t\tif (cbr != 0)\n\t\t\tResvSize += mean_bits;\n\n\t\tif ((gfc.substep_shaping & 1) != 0)\n\t\t\tResvMax *= 0.9;\n\n\t\ttarg_bits.bits = mean_bits;\n\n\t\t/* extra bits if the reservoir is almost full */\n\t\tif (ResvSize * 10 > ResvMax * 9) {\n\t\t\tadd_bits = ResvSize - (ResvMax * 9) / 10;\n\t\t\ttarg_bits.bits += add_bits;\n\t\t\tgfc.substep_shaping |= 0x80;\n\t\t} else {\n\t\t\tadd_bits = 0;\n\t\t\tgfc.substep_shaping &= 0x7f;\n\t\t\t/*\n\t\t\t * build up reservoir. this builds the reservoir a little slower\n\t\t\t * than FhG. It could simple be mean_bits/15, but this was rigged to\n\t\t\t * always produce 100 (the old value) at 128kbs\n\t\t\t */\n\t\t\tif (!gfp.disable_reservoir && 0 == (gfc.substep_shaping & 1))\n\t\t\t\ttarg_bits.bits -= .1 * mean_bits;\n\t\t}\n\n\t\t/* amount from the reservoir we are allowed to use. ISO says 6/10 */\n\t\tvar extra_bits = (ResvSize < (gfc.ResvMax * 6) / 10 ? ResvSize\n\t\t\t\t: (gfc.ResvMax * 6) / 10);\n\t\textra_bits -= add_bits;\n\n\t\tif (extra_bits < 0)\n\t\t\textra_bits = 0;\n\t\treturn extra_bits;\n\t}\n\n\t/**\n\t * Called after a granule's bit allocation. Readjusts the size of the\n\t * reservoir to reflect the granule's usage.\n\t */\n\tthis.ResvAdjust = function(gfc, gi) {\n\t\tgfc.ResvSize -= gi.part2_3_length + gi.part2_length;\n\t}\n\n\t/**\n\t * Called after all granules in a frame have been allocated. Makes sure that\n\t * the reservoir size is within limits, possibly by adding stuffing bits.\n\t */\n\tthis.ResvFrameEnd = function(gfc, mean_bits) {\n\t\tvar over_bits;\n\t\tvar l3_side = gfc.l3_side;\n\n\t\tgfc.ResvSize += mean_bits * gfc.mode_gr;\n\t\tvar stuffingBits = 0;\n\t\tl3_side.resvDrain_post = 0;\n\t\tl3_side.resvDrain_pre = 0;\n\n\t\t/* we must be byte aligned */\n\t\tif ((over_bits = gfc.ResvSize % 8) != 0)\n\t\t\tstuffingBits += over_bits;\n\n\t\tover_bits = (gfc.ResvSize - stuffingBits) - gfc.ResvMax;\n\t\tif (over_bits > 0) {\n\t\t\tassert (0 == over_bits % 8);\n\t\t\tassert (over_bits >= 0);\n\t\t\tstuffingBits += over_bits;\n\t\t}\n\n\t\t/*\n\t\t * NOTE: enabling the NEW_DRAIN code fixes some problems with FhG\n\t\t * decoder shipped with MS Windows operating systems. Using this, it is\n\t\t * even possible to use Gabriel's lax buffer consideration again, which\n\t\t * assumes, any decoder should have a buffer large enough for a 320 kbps\n\t\t * frame at 32 kHz sample rate.\n\t\t * \n\t\t * old drain code: lame -b320 BlackBird.wav --. does not play with\n\t\t * GraphEdit.exe using FhG decoder V1.5 Build 50\n\t\t * \n\t\t * new drain code: lame -b320 BlackBird.wav --. plays fine with\n\t\t * GraphEdit.exe using FhG decoder V1.5 Build 50\n\t\t * \n\t\t * Robert Hegemann, 2010-02-13.\n\t\t */\n\t\t/*\n\t\t * drain as many bits as possible into previous frame ancillary data In\n\t\t * particular, in VBR mode ResvMax may have changed, and we have to make\n\t\t * sure main_data_begin does not create a reservoir bigger than ResvMax\n\t\t * mt 4/00\n\t\t */\n\t\t{\n\t\t\tvar mdb_bytes = Math.min(l3_side.main_data_begin * 8, stuffingBits) / 8;\n\t\t\tl3_side.resvDrain_pre += 8 * mdb_bytes;\n\t\t\tstuffingBits -= 8 * mdb_bytes;\n\t\t\tgfc.ResvSize -= 8 * mdb_bytes;\n\t\t\tl3_side.main_data_begin -= mdb_bytes;\n\t\t}\n\t\t/* drain the rest into this frames ancillary data */\n\t\tl3_side.resvDrain_post += stuffingBits;\n\t\tgfc.ResvSize -= stuffingBits;\n\t}\n}\n\nmodule.exports = Reservoir;\n","function Version() {\n\n /**\n * URL for the LAME website.\n */\n var LAME_URL = \"http://www.mp3dev.org/\";\n\n /**\n * Major version number.\n */\n var LAME_MAJOR_VERSION = 3;\n /**\n * Minor version number.\n */\n var LAME_MINOR_VERSION = 98;\n /**\n * Patch level.\n */\n var LAME_PATCH_VERSION = 4;\n\n /**\n * Major version number.\n */\n var PSY_MAJOR_VERSION = 0;\n /**\n * Minor version number.\n */\n var PSY_MINOR_VERSION = 93;\n\n /**\n * A string which describes the version of LAME.\n *\n * @return string which describes the version of LAME\n */\n this.getLameVersion = function () {\n // primary to write screen reports\n return (LAME_MAJOR_VERSION + \".\" + LAME_MINOR_VERSION + \".\" + LAME_PATCH_VERSION);\n }\n\n /**\n * The short version of the LAME version string.\n *\n * @return short version of the LAME version string\n */\n this.getLameShortVersion = function () {\n // Adding date and time to version string makes it harder for output\n // validation\n return (LAME_MAJOR_VERSION + \".\" + LAME_MINOR_VERSION + \".\" + LAME_PATCH_VERSION);\n }\n\n /**\n * The shortest version of the LAME version string.\n *\n * @return shortest version of the LAME version string\n */\n this.getLameVeryShortVersion = function () {\n // Adding date and time to version string makes it harder for output\n return (\"LAME\" + LAME_MAJOR_VERSION + \".\" + LAME_MINOR_VERSION + \"r\");\n }\n\n /**\n * String which describes the version of GPSYCHO\n *\n * @return string which describes the version of GPSYCHO\n */\n this.getPsyVersion = function () {\n return (PSY_MAJOR_VERSION + \".\" + PSY_MINOR_VERSION);\n }\n\n /**\n * String which is a URL for the LAME website.\n *\n * @return string which is a URL for the LAME website\n */\n this.getLameUrl = function () {\n return LAME_URL;\n }\n\n /**\n * Quite useless for a java version, however we are compatible ;-)\n *\n * @return \"32bits\"\n */\n this.getLameOsBitness = function () {\n return \"32bits\";\n }\n\n}\n\nmodule.exports = Version;\n","var common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\n/**\n * A Vbr header may be present in the ancillary data field of the first frame of\n * an mp3 bitstream
\n * The Vbr header (optionally) contains\n *
    \n *
  • frames total number of audio frames in the bitstream\n *
  • bytes total number of bytes in the bitstream\n *
  • toc table of contents\n *
\n *\n * toc (table of contents) gives seek points for random access.
\n * The ith entry determines the seek point for i-percent duration.
\n * seek point in bytes = (toc[i]/256.0) * total_bitstream_bytes
\n * e.g. half duration seek point = (toc[50]/256.0) * total_bitstream_bytes\n */\nVBRTag.NUMTOCENTRIES = 100;\nVBRTag.MAXFRAMESIZE = 2880;\n\nfunction VBRTag() {\n\n var lame;\n var bs;\n var v;\n\n this.setModules = function (_lame, _bs, _v) {\n lame = _lame;\n bs = _bs;\n v = _v;\n };\n\n var FRAMES_FLAG = 0x0001;\n var BYTES_FLAG = 0x0002;\n var TOC_FLAG = 0x0004;\n var VBR_SCALE_FLAG = 0x0008;\n\n var NUMTOCENTRIES = VBRTag.NUMTOCENTRIES;\n\n /**\n * (0xB40) the max freeformat 640 32kHz framesize.\n */\n var MAXFRAMESIZE = VBRTag.MAXFRAMESIZE;\n\n /**\n *
\n     *    4 bytes for Header Tag\n     *    4 bytes for Header Flags\n     *  100 bytes for entry (toc)\n     *    4 bytes for frame size\n     *    4 bytes for stream size\n     *    4 bytes for VBR scale. a VBR quality indicator: 0=best 100=worst\n     *   20 bytes for LAME tag.  for example, \"LAME3.12 (beta 6)\"\n     * ___________\n     *  140 bytes\n     * 
\n */\n var VBRHEADERSIZE = (NUMTOCENTRIES + 4 + 4 + 4 + 4 + 4);\n\n var LAMEHEADERSIZE = (VBRHEADERSIZE + 9 + 1 + 1 + 8\n + 1 + 1 + 3 + 1 + 1 + 2 + 4 + 2 + 2);\n\n /**\n * The size of the Xing header MPEG-1, bit rate in kbps.\n */\n var XING_BITRATE1 = 128;\n /**\n * The size of the Xing header MPEG-2, bit rate in kbps.\n */\n var XING_BITRATE2 = 64;\n /**\n * The size of the Xing header MPEG-2.5, bit rate in kbps.\n */\n var XING_BITRATE25 = 32;\n\n /**\n * ISO-8859-1 charset for byte to string operations.\n */\n var ISO_8859_1 = null; //Charset.forName(\"ISO-8859-1\");\n\n /**\n * VBR header magic string.\n */\n var VBRTag0 = \"Xing\";\n /**\n * VBR header magic string (VBR == VBRMode.vbr_off).\n */\n var VBRTag1 = \"Info\";\n\n /**\n * Lookup table for fast CRC-16 computation. Uses the polynomial\n * x^16+x^15+x^2+1\n */\n var crc16Lookup = [0x0000, 0xC0C1, 0xC181, 0x0140,\n 0xC301, 0x03C0, 0x0280, 0xC241, 0xC601, 0x06C0, 0x0780, 0xC741,\n 0x0500, 0xC5C1, 0xC481, 0x0440, 0xCC01, 0x0CC0, 0x0D80, 0xCD41,\n 0x0F00, 0xCFC1, 0xCE81, 0x0E40, 0x0A00, 0xCAC1, 0xCB81, 0x0B40,\n 0xC901, 0x09C0, 0x0880, 0xC841, 0xD801, 0x18C0, 0x1980, 0xD941,\n 0x1B00, 0xDBC1, 0xDA81, 0x1A40, 0x1E00, 0xDEC1, 0xDF81, 0x1F40,\n 0xDD01, 0x1DC0, 0x1C80, 0xDC41, 0x1400, 0xD4C1, 0xD581, 0x1540,\n 0xD701, 0x17C0, 0x1680, 0xD641, 0xD201, 0x12C0, 0x1380, 0xD341,\n 0x1100, 0xD1C1, 0xD081, 0x1040, 0xF001, 0x30C0, 0x3180, 0xF141,\n 0x3300, 0xF3C1, 0xF281, 0x3240, 0x3600, 0xF6C1, 0xF781, 0x3740,\n 0xF501, 0x35C0, 0x3480, 0xF441, 0x3C00, 0xFCC1, 0xFD81, 0x3D40,\n 0xFF01, 0x3FC0, 0x3E80, 0xFE41, 0xFA01, 0x3AC0, 0x3B80, 0xFB41,\n 0x3900, 0xF9C1, 0xF881, 0x3840, 0x2800, 0xE8C1, 0xE981, 0x2940,\n 0xEB01, 0x2BC0, 0x2A80, 0xEA41, 0xEE01, 0x2EC0, 0x2F80, 0xEF41,\n 0x2D00, 0xEDC1, 0xEC81, 0x2C40, 0xE401, 0x24C0, 0x2580, 0xE541,\n 0x2700, 0xE7C1, 0xE681, 0x2640, 0x2200, 0xE2C1, 0xE381, 0x2340,\n 0xE101, 0x21C0, 0x2080, 0xE041, 0xA001, 0x60C0, 0x6180, 0xA141,\n 0x6300, 0xA3C1, 0xA281, 0x6240, 0x6600, 0xA6C1, 0xA781, 0x6740,\n 0xA501, 0x65C0, 0x6480, 0xA441, 0x6C00, 0xACC1, 0xAD81, 0x6D40,\n 0xAF01, 0x6FC0, 0x6E80, 0xAE41, 0xAA01, 0x6AC0, 0x6B80, 0xAB41,\n 0x6900, 0xA9C1, 0xA881, 0x6840, 0x7800, 0xB8C1, 0xB981, 0x7940,\n 0xBB01, 0x7BC0, 0x7A80, 0xBA41, 0xBE01, 0x7EC0, 0x7F80, 0xBF41,\n 0x7D00, 0xBDC1, 0xBC81, 0x7C40, 0xB401, 0x74C0, 0x7580, 0xB541,\n 0x7700, 0xB7C1, 0xB681, 0x7640, 0x7200, 0xB2C1, 0xB381, 0x7340,\n 0xB101, 0x71C0, 0x7080, 0xB041, 0x5000, 0x90C1, 0x9181, 0x5140,\n 0x9301, 0x53C0, 0x5280, 0x9241, 0x9601, 0x56C0, 0x5780, 0x9741,\n 0x5500, 0x95C1, 0x9481, 0x5440, 0x9C01, 0x5CC0, 0x5D80, 0x9D41,\n 0x5F00, 0x9FC1, 0x9E81, 0x5E40, 0x5A00, 0x9AC1, 0x9B81, 0x5B40,\n 0x9901, 0x59C0, 0x5880, 0x9841, 0x8801, 0x48C0, 0x4980, 0x8941,\n 0x4B00, 0x8BC1, 0x8A81, 0x4A40, 0x4E00, 0x8EC1, 0x8F81, 0x4F40,\n 0x8D01, 0x4DC0, 0x4C80, 0x8C41, 0x4400, 0x84C1, 0x8581, 0x4540,\n 0x8701, 0x47C0, 0x4680, 0x8641, 0x8201, 0x42C0, 0x4380, 0x8341,\n 0x4100, 0x81C1, 0x8081, 0x4040];\n\n /***********************************************************************\n * Robert Hegemann 2001-01-17\n ***********************************************************************/\n\n function addVbr(v, bitrate) {\n v.nVbrNumFrames++;\n v.sum += bitrate;\n v.seen++;\n\n if (v.seen < v.want) {\n return;\n }\n\n if (v.pos < v.size) {\n v.bag[v.pos] = v.sum;\n v.pos++;\n v.seen = 0;\n }\n if (v.pos == v.size) {\n for (var i = 1; i < v.size; i += 2) {\n v.bag[i / 2] = v.bag[i];\n }\n v.want *= 2;\n v.pos /= 2;\n }\n }\n\n function xingSeekTable(v, t) {\n if (v.pos <= 0)\n return;\n\n for (var i = 1; i < NUMTOCENTRIES; ++i) {\n var j = i / NUMTOCENTRIES, act, sum;\n var indx = 0 | (Math.floor(j * v.pos));\n if (indx > v.pos - 1)\n indx = v.pos - 1;\n act = v.bag[indx];\n sum = v.sum;\n var seek_point = 0 | (256. * act / sum);\n if (seek_point > 255)\n seek_point = 255;\n t[i] = 0xff & seek_point;\n }\n }\n\n /**\n * Add VBR entry, used to fill the VBR TOC entries.\n *\n * @param gfp\n * global flags\n */\n this.addVbrFrame = function (gfp) {\n var gfc = gfp.internal_flags;\n var kbps = Tables.bitrate_table[gfp.version][gfc.bitrate_index];\n assert(gfc.VBR_seek_table.bag != null);\n addVbr(gfc.VBR_seek_table, kbps);\n }\n\n /**\n * Read big endian integer (4-bytes) from header.\n *\n * @param buf\n * header containing the integer\n * @param bufPos\n * offset into the header\n * @return extracted integer\n */\n function extractInteger(buf, bufPos) {\n var x = buf[bufPos + 0] & 0xff;\n x <<= 8;\n x |= buf[bufPos + 1] & 0xff;\n x <<= 8;\n x |= buf[bufPos + 2] & 0xff;\n x <<= 8;\n x |= buf[bufPos + 3] & 0xff;\n return x;\n }\n\n /**\n * Write big endian integer (4-bytes) in the header.\n *\n * @param buf\n * header to write the integer into\n * @param bufPos\n * offset into the header\n * @param value\n * integer value to write\n */\n function createInteger(buf, bufPos, value) {\n buf[bufPos + 0] = 0xff & ((value >> 24) & 0xff);\n buf[bufPos + 1] = 0xff & ((value >> 16) & 0xff);\n buf[bufPos + 2] = 0xff & ((value >> 8) & 0xff);\n buf[bufPos + 3] = 0xff & (value & 0xff);\n }\n\n /**\n * Write big endian short (2-bytes) in the header.\n *\n * @param buf\n * header to write the integer into\n * @param bufPos\n * offset into the header\n * @param value\n * integer value to write\n */\n function createShort(buf, bufPos, value) {\n buf[bufPos + 0] = 0xff & ((value >> 8) & 0xff);\n buf[bufPos + 1] = 0xff & (value & 0xff);\n }\n\n /**\n * Check for magic strings (Xing/Info).\n *\n * @param buf\n * header to check\n * @param bufPos\n * header offset to check\n * @return magic string found\n */\n function isVbrTag(buf, bufPos) {\n return new String(buf, bufPos, VBRTag0.length(), ISO_8859_1)\n .equals(VBRTag0)\n || new String(buf, bufPos, VBRTag1.length(), ISO_8859_1)\n .equals(VBRTag1);\n }\n\n function shiftInBitsValue(x, n, v) {\n return 0xff & ((x << n) | (v & ~(-1 << n)));\n }\n\n /**\n * Construct the MP3 header using the settings of the global flags.\n *\n * \n *\n * @param gfp\n * global flags\n * @param buffer\n * header\n */\n function setLameTagFrameHeader(gfp, buffer) {\n var gfc = gfp.internal_flags;\n\n // MP3 Sync Word\n buffer[0] = shiftInBitsValue(buffer[0], 8, 0xff);\n\n buffer[1] = shiftInBitsValue(buffer[1], 3, 7);\n buffer[1] = shiftInBitsValue(buffer[1], 1,\n (gfp.out_samplerate < 16000) ? 0 : 1);\n // Version\n buffer[1] = shiftInBitsValue(buffer[1], 1, gfp.version);\n // 01 == Layer 3\n buffer[1] = shiftInBitsValue(buffer[1], 2, 4 - 3);\n // Error protection\n buffer[1] = shiftInBitsValue(buffer[1], 1, (!gfp.error_protection) ? 1\n : 0);\n\n // Bit rate\n buffer[2] = shiftInBitsValue(buffer[2], 4, gfc.bitrate_index);\n // Frequency\n buffer[2] = shiftInBitsValue(buffer[2], 2, gfc.samplerate_index);\n // Pad. Bit\n buffer[2] = shiftInBitsValue(buffer[2], 1, 0);\n // Priv. Bit\n buffer[2] = shiftInBitsValue(buffer[2], 1, gfp.extension);\n\n // Mode\n buffer[3] = shiftInBitsValue(buffer[3], 2, gfp.mode.ordinal());\n // Mode extension (Used with Joint Stereo)\n buffer[3] = shiftInBitsValue(buffer[3], 2, gfc.mode_ext);\n // Copy\n buffer[3] = shiftInBitsValue(buffer[3], 1, gfp.copyright);\n // Original\n buffer[3] = shiftInBitsValue(buffer[3], 1, gfp.original);\n // Emphasis\n buffer[3] = shiftInBitsValue(buffer[3], 2, gfp.emphasis);\n\n /* the default VBR header. 48 kbps layer III, no padding, no crc */\n /* but sampling freq, mode and copyright/copy protection taken */\n /* from first valid frame */\n buffer[0] = 0xff;\n var abyte = 0xff & (buffer[1] & 0xf1);\n var bitrate;\n if (1 == gfp.version) {\n bitrate = XING_BITRATE1;\n } else {\n if (gfp.out_samplerate < 16000)\n bitrate = XING_BITRATE25;\n else\n bitrate = XING_BITRATE2;\n }\n\n if (gfp.VBR == VbrMode.vbr_off)\n bitrate = gfp.brate;\n\n var bbyte;\n if (gfp.free_format)\n bbyte = 0x00;\n else\n bbyte = 0xff & (16 * lame.BitrateIndex(bitrate, gfp.version,\n gfp.out_samplerate));\n\n /*\n * Use as much of the info from the real frames in the Xing header:\n * samplerate, channels, crc, etc...\n */\n if (gfp.version == 1) {\n /* MPEG1 */\n buffer[1] = 0xff & (abyte | 0x0a);\n /* was 0x0b; */\n abyte = 0xff & (buffer[2] & 0x0d);\n /* AF keep also private bit */\n buffer[2] = 0xff & (bbyte | abyte);\n /* 64kbs MPEG1 frame */\n } else {\n /* MPEG2 */\n buffer[1] = 0xff & (abyte | 0x02);\n /* was 0x03; */\n abyte = 0xff & (buffer[2] & 0x0d);\n /* AF keep also private bit */\n buffer[2] = 0xff & (bbyte | abyte);\n /* 64kbs MPEG2 frame */\n }\n }\n\n /**\n * Get VBR tag information\n *\n * @param buf\n * header to analyze\n * @param bufPos\n * offset into the header\n * @return VBR tag data\n */\n this.getVbrTag = function (buf) {\n var pTagData = new VBRTagData();\n var bufPos = 0;\n\n /* get Vbr header data */\n pTagData.flags = 0;\n\n /* get selected MPEG header data */\n var hId = (buf[bufPos + 1] >> 3) & 1;\n var hSrIndex = (buf[bufPos + 2] >> 2) & 3;\n var hMode = (buf[bufPos + 3] >> 6) & 3;\n var hBitrate = ((buf[bufPos + 2] >> 4) & 0xf);\n hBitrate = Tables.bitrate_table[hId][hBitrate];\n\n /* check for FFE syncword */\n if ((buf[bufPos + 1] >> 4) == 0xE)\n pTagData.samprate = Tables.samplerate_table[2][hSrIndex];\n else\n pTagData.samprate = Tables.samplerate_table[hId][hSrIndex];\n\n /* determine offset of header */\n if (hId != 0) {\n /* mpeg1 */\n if (hMode != 3)\n bufPos += (32 + 4);\n else\n bufPos += (17 + 4);\n } else {\n /* mpeg2 */\n if (hMode != 3)\n bufPos += (17 + 4);\n else\n bufPos += (9 + 4);\n }\n\n if (!isVbrTag(buf, bufPos))\n return null;\n\n bufPos += 4;\n\n pTagData.hId = hId;\n\n /* get flags */\n var head_flags = pTagData.flags = extractInteger(buf, bufPos);\n bufPos += 4;\n\n if ((head_flags & FRAMES_FLAG) != 0) {\n pTagData.frames = extractInteger(buf, bufPos);\n bufPos += 4;\n }\n\n if ((head_flags & BYTES_FLAG) != 0) {\n pTagData.bytes = extractInteger(buf, bufPos);\n bufPos += 4;\n }\n\n if ((head_flags & TOC_FLAG) != 0) {\n if (pTagData.toc != null) {\n for (var i = 0; i < NUMTOCENTRIES; i++)\n pTagData.toc[i] = buf[bufPos + i];\n }\n bufPos += NUMTOCENTRIES;\n }\n\n pTagData.vbrScale = -1;\n\n if ((head_flags & VBR_SCALE_FLAG) != 0) {\n pTagData.vbrScale = extractInteger(buf, bufPos);\n bufPos += 4;\n }\n\n pTagData.headersize = ((hId + 1) * 72000 * hBitrate)\n / pTagData.samprate;\n\n bufPos += 21;\n var encDelay = buf[bufPos + 0] << 4;\n encDelay += buf[bufPos + 1] >> 4;\n var encPadding = (buf[bufPos + 1] & 0x0F) << 8;\n encPadding += buf[bufPos + 2] & 0xff;\n /* check for reasonable values (this may be an old Xing header, */\n /* not a INFO tag) */\n if (encDelay < 0 || encDelay > 3000)\n encDelay = -1;\n if (encPadding < 0 || encPadding > 3000)\n encPadding = -1;\n\n pTagData.encDelay = encDelay;\n pTagData.encPadding = encPadding;\n\n /* success */\n return pTagData;\n }\n\n /**\n * Initializes the header\n *\n * @param gfp\n * global flags\n */\n this.InitVbrTag = function (gfp) {\n var gfc = gfp.internal_flags;\n\n /**\n *
\n         * Xing VBR pretends to be a 48kbs layer III frame.  (at 44.1kHz).\n         * (at 48kHz they use 56kbs since 48kbs frame not big enough for\n         * table of contents)\n         * let's always embed Xing header inside a 64kbs layer III frame.\n         * this gives us enough room for a LAME version string too.\n         * size determined by sampling frequency (MPEG1)\n         * 32kHz:    216 bytes@48kbs    288bytes@ 64kbs\n         * 44.1kHz:  156 bytes          208bytes@64kbs     (+1 if padding = 1)\n         * 48kHz:    144 bytes          192\n         *\n         * MPEG 2 values are the same since the framesize and samplerate\n         * are each reduced by a factor of 2.\n         * 
\n */\n var kbps_header;\n if (1 == gfp.version) {\n kbps_header = XING_BITRATE1;\n } else {\n if (gfp.out_samplerate < 16000)\n kbps_header = XING_BITRATE25;\n else\n kbps_header = XING_BITRATE2;\n }\n\n if (gfp.VBR == VbrMode.vbr_off)\n kbps_header = gfp.brate;\n\n // make sure LAME Header fits into Frame\n var totalFrameSize = ((gfp.version + 1) * 72000 * kbps_header)\n / gfp.out_samplerate;\n var headerSize = (gfc.sideinfo_len + LAMEHEADERSIZE);\n gfc.VBR_seek_table.TotalFrameSize = totalFrameSize;\n if (totalFrameSize < headerSize || totalFrameSize > MAXFRAMESIZE) {\n /* disable tag, it wont fit */\n gfp.bWriteVbrTag = false;\n return;\n }\n\n gfc.VBR_seek_table.nVbrNumFrames = 0;\n gfc.VBR_seek_table.nBytesWritten = 0;\n gfc.VBR_seek_table.sum = 0;\n\n gfc.VBR_seek_table.seen = 0;\n gfc.VBR_seek_table.want = 1;\n gfc.VBR_seek_table.pos = 0;\n\n if (gfc.VBR_seek_table.bag == null) {\n gfc.VBR_seek_table.bag = new int[400];\n gfc.VBR_seek_table.size = 400;\n }\n\n // write dummy VBR tag of all 0's into bitstream\n var buffer = new_byte(MAXFRAMESIZE);\n\n setLameTagFrameHeader(gfp, buffer);\n var n = gfc.VBR_seek_table.TotalFrameSize;\n for (var i = 0; i < n; ++i) {\n bs.add_dummy_byte(gfp, buffer[i] & 0xff, 1);\n }\n }\n\n /**\n * Fast CRC-16 computation (uses table crc16Lookup).\n *\n * @param value\n * @param crc\n * @return\n */\n function crcUpdateLookup(value, crc) {\n var tmp = crc ^ value;\n crc = (crc >> 8) ^ crc16Lookup[tmp & 0xff];\n return crc;\n }\n\n this.updateMusicCRC = function (crc, buffer, bufferPos, size) {\n for (var i = 0; i < size; ++i)\n crc[0] = crcUpdateLookup(buffer[bufferPos + i], crc[0]);\n }\n\n /**\n * Write LAME info: mini version + info on various switches used (Jonathan\n * Dee 2001/08/31).\n *\n * @param gfp\n * global flags\n * @param musicLength\n * music length\n * @param streamBuffer\n * pointer to output buffer\n * @param streamBufferPos\n * offset into the output buffer\n * @param crc\n * computation of CRC-16 of Lame Tag so far (starting at frame\n * sync)\n * @return number of bytes written to the stream\n */\n function putLameVBR(gfp, musicLength, streamBuffer, streamBufferPos, crc) {\n var gfc = gfp.internal_flags;\n var bytesWritten = 0;\n\n /* encoder delay */\n var encDelay = gfp.encoder_delay;\n /* encoder padding */\n var encPadding = gfp.encoder_padding;\n\n /* recall: gfp.VBR_q is for example set by the switch -V */\n /* gfp.quality by -q, -h, -f, etc */\n var quality = (100 - 10 * gfp.VBR_q - gfp.quality);\n\n var version = v.getLameVeryShortVersion();\n var vbr;\n var revision = 0x00;\n var revMethod;\n // numbering different in vbr_mode vs. Lame tag\n var vbrTypeTranslator = [1, 5, 3, 2, 4, 0, 3];\n var lowpass = 0 | (((gfp.lowpassfreq / 100.0) + .5) > 255 ? 255\n : (gfp.lowpassfreq / 100.0) + .5);\n var peakSignalAmplitude = 0;\n var radioReplayGain = 0;\n var audiophileReplayGain = 0;\n var noiseShaping = gfp.internal_flags.noise_shaping;\n var stereoMode = 0;\n var nonOptimal = 0;\n var sourceFreq = 0;\n var misc = 0;\n var musicCRC = 0;\n\n // psy model type: Gpsycho or NsPsytune\n var expNPsyTune = (gfp.exp_nspsytune & 1) != 0;\n var safeJoint = (gfp.exp_nspsytune & 2) != 0;\n var noGapMore = false;\n var noGapPrevious = false;\n var noGapCount = gfp.internal_flags.nogap_total;\n var noGapCurr = gfp.internal_flags.nogap_current;\n\n // 4 bits\n var athType = gfp.ATHtype;\n var flags = 0;\n\n // vbr modes\n var abrBitrate;\n switch (gfp.VBR) {\n case vbr_abr:\n abrBitrate = gfp.VBR_mean_bitrate_kbps;\n break;\n case vbr_off:\n abrBitrate = gfp.brate;\n break;\n default:\n abrBitrate = gfp.VBR_min_bitrate_kbps;\n }\n\n // revision and vbr method\n if (gfp.VBR.ordinal() < vbrTypeTranslator.length)\n vbr = vbrTypeTranslator[gfp.VBR.ordinal()];\n else\n vbr = 0x00; // unknown\n\n revMethod = 0x10 * revision + vbr;\n\n // ReplayGain\n if (gfc.findReplayGain) {\n if (gfc.RadioGain > 0x1FE)\n gfc.RadioGain = 0x1FE;\n if (gfc.RadioGain < -0x1FE)\n gfc.RadioGain = -0x1FE;\n\n // set name code\n radioReplayGain = 0x2000;\n // set originator code to `determined automatically'\n radioReplayGain |= 0xC00;\n\n if (gfc.RadioGain >= 0) {\n // set gain adjustment\n radioReplayGain |= gfc.RadioGain;\n } else {\n // set the sign bit\n radioReplayGain |= 0x200;\n // set gain adjustment\n radioReplayGain |= -gfc.RadioGain;\n }\n }\n\n // peak sample\n if (gfc.findPeakSample)\n peakSignalAmplitude = Math\n .abs(0 | ((( gfc.PeakSample) / 32767.0) * Math.pow(2, 23) + .5));\n\n // nogap\n if (noGapCount != -1) {\n if (noGapCurr > 0)\n noGapPrevious = true;\n\n if (noGapCurr < noGapCount - 1)\n noGapMore = true;\n }\n\n // flags\n flags = athType + ((expNPsyTune ? 1 : 0) << 4)\n + ((safeJoint ? 1 : 0) << 5) + ((noGapMore ? 1 : 0) << 6)\n + ((noGapPrevious ? 1 : 0) << 7);\n\n if (quality < 0)\n quality = 0;\n\n // stereo mode field (Intensity stereo is not implemented)\n switch (gfp.mode) {\n case MONO:\n stereoMode = 0;\n break;\n case STEREO:\n stereoMode = 1;\n break;\n case DUAL_CHANNEL:\n stereoMode = 2;\n break;\n case JOINT_STEREO:\n if (gfp.force_ms)\n stereoMode = 4;\n else\n stereoMode = 3;\n break;\n case NOT_SET:\n //$FALL-THROUGH$\n default:\n stereoMode = 7;\n break;\n }\n\n if (gfp.in_samplerate <= 32000)\n sourceFreq = 0x00;\n else if (gfp.in_samplerate == 48000)\n sourceFreq = 0x02;\n else if (gfp.in_samplerate > 48000)\n sourceFreq = 0x03;\n else {\n // default is 44100Hz\n sourceFreq = 0x01;\n }\n\n // Check if the user overrided the default LAME behavior with some\n // nasty options\n if (gfp.short_blocks == ShortBlock.short_block_forced\n || gfp.short_blocks == ShortBlock.short_block_dispensed\n || ((gfp.lowpassfreq == -1) && (gfp.highpassfreq == -1)) || /* \"-k\" */\n (gfp.scale_left < gfp.scale_right)\n || (gfp.scale_left > gfp.scale_right)\n || (gfp.disable_reservoir && gfp.brate < 320) || gfp.noATH\n || gfp.ATHonly || (athType == 0) || gfp.in_samplerate <= 32000)\n nonOptimal = 1;\n\n misc = noiseShaping + (stereoMode << 2) + (nonOptimal << 5)\n + (sourceFreq << 6);\n\n musicCRC = gfc.nMusicCRC;\n\n // Write all this information into the stream\n\n createInteger(streamBuffer, streamBufferPos + bytesWritten, quality);\n bytesWritten += 4;\n\n for (var j = 0; j < 9; j++) {\n streamBuffer[streamBufferPos + bytesWritten + j] = 0xff & version .charAt(j);\n }\n bytesWritten += 9;\n\n streamBuffer[streamBufferPos + bytesWritten] = 0xff & revMethod;\n bytesWritten++;\n\n streamBuffer[streamBufferPos + bytesWritten] = 0xff & lowpass;\n bytesWritten++;\n\n createInteger(streamBuffer, streamBufferPos + bytesWritten,\n peakSignalAmplitude);\n bytesWritten += 4;\n\n createShort(streamBuffer, streamBufferPos + bytesWritten,\n radioReplayGain);\n bytesWritten += 2;\n\n createShort(streamBuffer, streamBufferPos + bytesWritten,\n audiophileReplayGain);\n bytesWritten += 2;\n\n streamBuffer[streamBufferPos + bytesWritten] = 0xff & flags;\n bytesWritten++;\n\n if (abrBitrate >= 255)\n streamBuffer[streamBufferPos + bytesWritten] = 0xFF;\n else\n streamBuffer[streamBufferPos + bytesWritten] = 0xff & abrBitrate;\n bytesWritten++;\n\n streamBuffer[streamBufferPos + bytesWritten] = 0xff & (encDelay >> 4);\n streamBuffer[streamBufferPos + bytesWritten + 1] = 0xff & ((encDelay << 4) + (encPadding >> 8));\n streamBuffer[streamBufferPos + bytesWritten + 2] = 0xff & encPadding;\n\n bytesWritten += 3;\n\n streamBuffer[streamBufferPos + bytesWritten] = 0xff & misc;\n bytesWritten++;\n\n // unused in rev0\n streamBuffer[streamBufferPos + bytesWritten++] = 0;\n\n createShort(streamBuffer, streamBufferPos + bytesWritten, gfp.preset);\n bytesWritten += 2;\n\n createInteger(streamBuffer, streamBufferPos + bytesWritten, musicLength);\n bytesWritten += 4;\n\n createShort(streamBuffer, streamBufferPos + bytesWritten, musicCRC);\n bytesWritten += 2;\n\n // Calculate tag CRC.... must be done here, since it includes previous\n // information\n\n for (var i = 0; i < bytesWritten; i++)\n crc = crcUpdateLookup(streamBuffer[streamBufferPos + i], crc);\n\n createShort(streamBuffer, streamBufferPos + bytesWritten, crc);\n bytesWritten += 2;\n\n return bytesWritten;\n }\n\n function skipId3v2(fpStream) {\n // seek to the beginning of the stream\n fpStream.seek(0);\n // read 10 bytes in case there's an ID3 version 2 header here\n var id3v2Header = new_byte(10);\n fpStream.readFully(id3v2Header);\n /* does the stream begin with the ID3 version 2 file identifier? */\n var id3v2TagSize;\n if (!new String(id3v2Header, \"ISO-8859-1\").startsWith(\"ID3\")) {\n /*\n * the tag size (minus the 10-byte header) is encoded into four\n * bytes where the most significant bit is clear in each byte\n */\n id3v2TagSize = (((id3v2Header[6] & 0x7f) << 21)\n | ((id3v2Header[7] & 0x7f) << 14)\n | ((id3v2Header[8] & 0x7f) << 7) | (id3v2Header[9] & 0x7f))\n + id3v2Header.length;\n } else {\n /* no ID3 version 2 tag in this stream */\n id3v2TagSize = 0;\n }\n return id3v2TagSize;\n }\n\n this.getLameTagFrame = function (gfp, buffer) {\n var gfc = gfp.internal_flags;\n\n if (!gfp.bWriteVbrTag) {\n return 0;\n }\n if (gfc.Class_ID != Lame.LAME_ID) {\n return 0;\n }\n if (gfc.VBR_seek_table.pos <= 0) {\n return 0;\n }\n if (buffer.length < gfc.VBR_seek_table.TotalFrameSize) {\n return gfc.VBR_seek_table.TotalFrameSize;\n }\n\n Arrays.fill(buffer, 0, gfc.VBR_seek_table.TotalFrameSize, 0);\n\n // 4 bytes frame header\n setLameTagFrameHeader(gfp, buffer);\n\n // Create TOC entries\n var toc = new_byte(NUMTOCENTRIES);\n\n if (gfp.free_format) {\n for (var i = 1; i < NUMTOCENTRIES; ++i)\n toc[i] = 0xff & (255 * i / 100);\n } else {\n xingSeekTable(gfc.VBR_seek_table, toc);\n }\n\n // Start writing the tag after the zero frame\n var streamIndex = gfc.sideinfo_len;\n /**\n * Note: Xing header specifies that Xing data goes in the ancillary data\n * with NO ERROR PROTECTION. If error protecton in enabled, the Xing\n * data still starts at the same offset, and now it is in sideinfo data\n * block, and thus will not decode correctly by non-Xing tag aware\n * players\n */\n if (gfp.error_protection)\n streamIndex -= 2;\n\n // Put Vbr tag\n if (gfp.VBR == VbrMode.vbr_off) {\n buffer[streamIndex++] = 0xff & VBRTag1.charAt(0);\n buffer[streamIndex++] = 0xff & VBRTag1.charAt(1);\n buffer[streamIndex++] = 0xff & VBRTag1.charAt(2);\n buffer[streamIndex++] = 0xff & VBRTag1.charAt(3);\n\n } else {\n buffer[streamIndex++] = 0xff & VBRTag0.charAt(0);\n buffer[streamIndex++] = 0xff & VBRTag0.charAt(1);\n buffer[streamIndex++] = 0xff & VBRTag0.charAt(2);\n buffer[streamIndex++] = 0xff & VBRTag0.charAt(3);\n }\n\n // Put header flags\n createInteger(buffer, streamIndex, FRAMES_FLAG + BYTES_FLAG + TOC_FLAG\n + VBR_SCALE_FLAG);\n streamIndex += 4;\n\n // Put Total Number of frames\n createInteger(buffer, streamIndex, gfc.VBR_seek_table.nVbrNumFrames);\n streamIndex += 4;\n\n // Put total audio stream size, including Xing/LAME Header\n var streamSize = (gfc.VBR_seek_table.nBytesWritten + gfc.VBR_seek_table.TotalFrameSize);\n createInteger(buffer, streamIndex, 0 | streamSize);\n streamIndex += 4;\n\n /* Put TOC */\n System.arraycopy(toc, 0, buffer, streamIndex, toc.length);\n streamIndex += toc.length;\n\n if (gfp.error_protection) {\n // (jo) error_protection: add crc16 information to header\n bs.CRC_writeheader(gfc, buffer);\n }\n\n // work out CRC so far: initially crc = 0\n var crc = 0x00;\n for (var i = 0; i < streamIndex; i++)\n crc = crcUpdateLookup(buffer[i], crc);\n // Put LAME VBR info\n streamIndex += putLameVBR(gfp, streamSize, buffer, streamIndex, crc);\n\n return gfc.VBR_seek_table.TotalFrameSize;\n }\n\n /**\n * Write final VBR tag to the file.\n *\n * @param gfp\n * global flags\n * @param stream\n * stream to add the VBR tag to\n * @return 0 (OK), -1 else\n * @throws IOException\n * I/O error\n */\n this.putVbrTag = function (gfp, stream) {\n var gfc = gfp.internal_flags;\n\n if (gfc.VBR_seek_table.pos <= 0)\n return -1;\n\n // Seek to end of file\n stream.seek(stream.length());\n\n // Get file size, abort if file has zero length.\n if (stream.length() == 0)\n return -1;\n\n // The VBR tag may NOT be located at the beginning of the stream. If an\n // ID3 version 2 tag was added, then it must be skipped to write the VBR\n // tag data.\n var id3v2TagSize = skipId3v2(stream);\n\n // Seek to the beginning of the stream\n stream.seek(id3v2TagSize);\n\n var buffer = new_byte(MAXFRAMESIZE);\n var bytes = getLameTagFrame(gfp, buffer);\n if (bytes > buffer.length) {\n return -1;\n }\n\n if (bytes < 1) {\n return 0;\n }\n\n // Put it all to disk again\n stream.write(buffer, 0, bytes);\n // success\n return 0;\n }\n\n}\n\nmodule.exports = VBRTag;\n","var common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nLame = require('./Lame.js');\nPresets = require('./Presets.js');\nGainAnalysis = require('./GainAnalysis.js');\nQuantizePVT = require('./QuantizePVT.js');\nQuantize = require('./Quantize.js');\nTakehiro = require('./Takehiro.js');\nReservoir = require('./Reservoir.js');\nMPEGMode = require('./MPEGMode.js');\nBitStream = require('./BitStream.js');\nvar Encoder = require('./Encoder.js');\nvar Version = require('./Version.js');\nvar VBRTag = require('./VBRTag.js');\n\nfunction GetAudio() {\n var parse;\n var mpg;\n\n this.setModules = function (parse2, mpg2) {\n parse = parse2;\n mpg = mpg2;\n }\n}\n\n\nfunction Parse() {\n var ver;\n var id3;\n var pre;\n\n this.setModules = function (ver2, id32, pre2) {\n ver = ver2;\n id3 = id32;\n pre = pre2;\n }\n}\n\nfunction MPGLib() {\n}\n\nfunction ID3Tag() {\n var bits;\n var ver;\n\n this.setModules = function (_bits, _ver) {\n bits = _bits;\n ver = _ver;\n }\n}\n\nfunction Mp3Encoder(channels, samplerate, kbps) {\n if (arguments.length != 3) {\n console.error('WARN: Mp3Encoder(channels, samplerate, kbps) not specified');\n channels = 1;\n samplerate = 44100;\n kbps = 128;\n }\n var lame = new Lame();\n var gaud = new GetAudio();\n var ga = new GainAnalysis();\n var bs = new BitStream();\n var p = new Presets();\n var qupvt = new QuantizePVT();\n var qu = new Quantize();\n var vbr = new VBRTag();\n var ver = new Version();\n var id3 = new ID3Tag();\n var rv = new Reservoir();\n var tak = new Takehiro();\n var parse = new Parse();\n var mpg = new MPGLib();\n\n lame.setModules(ga, bs, p, qupvt, qu, vbr, ver, id3, mpg);\n bs.setModules(ga, mpg, ver, vbr);\n id3.setModules(bs, ver);\n p.setModules(lame);\n qu.setModules(bs, rv, qupvt, tak);\n qupvt.setModules(tak, rv, lame.enc.psy);\n rv.setModules(bs);\n tak.setModules(qupvt);\n vbr.setModules(lame, bs, ver);\n gaud.setModules(parse, mpg);\n parse.setModules(ver, id3, p);\n\n var gfp = lame.lame_init();\n\n gfp.num_channels = channels;\n gfp.in_samplerate = samplerate;\n gfp.brate = kbps;\n gfp.mode = MPEGMode.STEREO;\n gfp.quality = 3;\n gfp.bWriteVbrTag = false;\n gfp.disable_reservoir = true;\n gfp.write_id3tag_automatic = false;\n\n var retcode = lame.lame_init_params(gfp);\n assert(0 == retcode);\n var maxSamples = 1152;\n var mp3buf_size = 0 | (1.25 * maxSamples + 7200);\n var mp3buf = new_byte(mp3buf_size);\n\n this.encodeBuffer = function (left, right) {\n if (channels == 1) {\n right = left;\n }\n assert(left.length == right.length);\n if (left.length > maxSamples) {\n maxSamples = left.length;\n mp3buf_size = 0 | (1.25 * maxSamples + 7200);\n mp3buf = new_byte(mp3buf_size);\n }\n\n var _sz = lame.lame_encode_buffer(gfp, left, right, left.length, mp3buf, 0, mp3buf_size);\n return new Int8Array(mp3buf.subarray(0, _sz));\n };\n\n this.flush = function () {\n var _sz = lame.lame_encode_flush(gfp, mp3buf, 0, mp3buf_size);\n return new Int8Array(mp3buf.subarray(0, _sz));\n };\n}\n\nfunction WavHeader() {\n this.dataOffset = 0;\n this.dataLen = 0;\n this.channels = 0;\n this.sampleRate = 0;\n}\n\nfunction fourccToInt(fourcc) {\n return fourcc.charCodeAt(0) << 24 | fourcc.charCodeAt(1) << 16 | fourcc.charCodeAt(2) << 8 | fourcc.charCodeAt(3);\n}\n\nWavHeader.RIFF = fourccToInt(\"RIFF\");\nWavHeader.WAVE = fourccToInt(\"WAVE\");\nWavHeader.fmt_ = fourccToInt(\"fmt \");\nWavHeader.data = fourccToInt(\"data\");\n\nWavHeader.readHeader = function (dataView) {\n var w = new WavHeader();\n\n var header = dataView.getUint32(0, false);\n if (WavHeader.RIFF != header) {\n return;\n }\n var fileLen = dataView.getUint32(4, true);\n if (WavHeader.WAVE != dataView.getUint32(8, false)) {\n return;\n }\n if (WavHeader.fmt_ != dataView.getUint32(12, false)) {\n return;\n }\n var fmtLen = dataView.getUint32(16, true);\n var pos = 16 + 4;\n switch (fmtLen) {\n case 16:\n case 18:\n w.channels = dataView.getUint16(pos + 2, true);\n w.sampleRate = dataView.getUint32(pos + 4, true);\n break;\n default:\n throw 'extended fmt chunk not implemented';\n }\n pos += fmtLen;\n var data = WavHeader.data;\n var len = 0;\n while (data != header) {\n header = dataView.getUint32(pos, false);\n len = dataView.getUint32(pos + 4, true);\n if (data == header) {\n break;\n }\n pos += (len + 8);\n }\n w.dataLen = len;\n w.dataOffset = pos + 8;\n return w;\n};\n\nmodule.exports.Mp3Encoder = Mp3Encoder;\nmodule.exports.WavHeader = WavHeader;\n","import { Mp3Encoder } from 'lamejs';\n\nclass Encoder {\n constructor(config) {\n this.config = {\n sampleRate: 44100,\n bitRate: 128\n };\n\n Object.assign(this.config, config);\n\n this.mp3Encoder = new Mp3Encoder(\n 1,\n this.config.sampleRate,\n this.config.bitRate\n );\n\n // Audio is processed by frames of 1152 samples per audio channel\n // http://lame.sourceforge.net/tech-FAQ.txt\n this.maxSamples = 1152;\n\n this.samplesMono = null;\n this.clearBuffer();\n }\n\n /**\n * Clear active buffer\n */\n clearBuffer() {\n this.dataBuffer = [];\n }\n\n /**\n * Append new audio buffer to current active buffer\n * @param {Buffer} buffer\n */\n appendToBuffer(buffer) {\n this.dataBuffer.push(new Int8Array(buffer));\n }\n\n /**\n * Float current data to 16 bits PCM\n * @param {Float32Array} input\n * @param {Int16Array} output\n */\n floatTo16BitPCM(input, output) {\n for (let i = 0; i < input.length; i++) {\n const s = Math.max(-1, Math.min(1, input[i]));\n output[i] = (s < 0 ? s * 0x8000 : s * 0x7FFF);\n }\n }\n\n /**\n * Convert buffer to proper format\n * @param {Array} arrayBuffer\n */\n convertBuffer(arrayBuffer) {\n const data = new Float32Array(arrayBuffer);\n const out = new Int16Array(arrayBuffer.length);\n this.floatTo16BitPCM(data, out);\n\n return out;\n }\n\n /**\n * Encode and append current buffer to dataBuffer\n * @param {Array} arrayBuffer\n */\n encode(arrayBuffer) {\n this.samplesMono = this.convertBuffer(arrayBuffer);\n let remaining = this.samplesMono.length;\n\n for (let i = 0; remaining >= 0; i += this.maxSamples) {\n const left = this.samplesMono.subarray(i, i + this.maxSamples);\n const mp3buffer = this.mp3Encoder.encodeBuffer(left);\n this.appendToBuffer(mp3buffer);\n remaining -= this.maxSamples;\n }\n }\n\n /**\n * Return full dataBuffer\n */\n finish() {\n this.appendToBuffer(this.mp3Encoder.flush());\n\n return this.dataBuffer;\n }\n};\n\nexport default Encoder;\n","import Encoder from './encoder';\n\nclass MicRecorder {\n constructor(config) {\n this.config = {\n // 128 or 160 kbit/s – mid-range bitrate quality\n bitRate: 128,\n\n // There is a known issue with some macOS machines, where the recording\n // will sometimes have a loud 'pop' or 'pop-click' sound. This flag\n // prevents getting audio from the microphone a few milliseconds after\n // the begining of the recording. It also helps to remove the mouse\n // \"click\" sound from the output mp3 file.\n startRecordingAt: 300,\n deviceId: null,\n };\n\n this.activeStream = null;\n this.context = null;\n this.microphone = null;\n this.processor = null;\n this.startTime = 0;\n\n Object.assign(this.config, config);\n }\n\n /**\n * Starts to listen for the microphone sound\n * @param {MediaStream} stream\n */\n addMicrophoneListener(stream) {\n this.activeStream = stream;\n\n // This prevents the weird noise once you start listening to the microphone\n this.timerToStart = setTimeout(() => {\n delete this.timerToStart;\n }, this.config.startRecordingAt);\n\n // Set up Web Audio API to process data from the media stream (microphone).\n this.microphone = this.context.createMediaStreamSource(stream);\n\n // Settings a bufferSize of 0 instructs the browser to choose the best bufferSize\n this.processor = this.context.createScriptProcessor(0, 1, 1);\n\n // Add all buffers from LAME into an array.\n this.processor.onaudioprocess = (event) => {\n if (this.timerToStart) {\n return;\n }\n\n // Send microphone data to LAME for MP3 encoding while recording.\n this.lameEncoder.encode(event.inputBuffer.getChannelData(0));\n };\n\n // Begin retrieving microphone data.\n this.microphone.connect(this.processor);\n this.processor.connect(this.context.destination);\n };\n\n /**\n * Disconnect microphone, processor and remove activeStream\n */\n stop() {\n if (this.processor && this.microphone) {\n // Clean up the Web Audio API resources.\n this.microphone.disconnect();\n this.processor.disconnect();\n\n // If all references using this.context are destroyed, context is closed\n // automatically. DOMException is fired when trying to close again\n if (this.context && this.context.state !== 'closed') {\n this.context.close();\n }\n\n this.processor.onaudioprocess = null;\n\n // Stop all audio tracks. Also, removes recording icon from chrome tab\n this.activeStream.getAudioTracks().forEach(track => track.stop());\n }\n\n return this;\n };\n\n /**\n * Requests access to the microphone and start recording\n * @return Promise\n */\n start() {\n const AudioContext = window.AudioContext || window.webkitAudioContext;\n this.context = new AudioContext();\n this.config.sampleRate = this.context.sampleRate;\n this.lameEncoder = new Encoder(this.config);\n\n const audio = this.config.deviceId ? { deviceId: { exact: this.config.deviceId } } : true;\n\n return new Promise((resolve, reject) => {\n navigator.mediaDevices.getUserMedia({ audio })\n .then(stream => {\n this.addMicrophoneListener(stream);\n resolve(stream);\n }).catch(function(err) {\n reject(err);\n });\n })\n };\n\n /**\n * Return Mp3 Buffer and Blob with type mp3\n * @return {Promise}\n */\n getMp3() {\n const finalBuffer = this.lameEncoder.finish();\n\n return new Promise((resolve, reject) => {\n if (finalBuffer.length === 0) {\n reject(new Error('No buffer to send'));\n } else {\n resolve([finalBuffer, new Blob(finalBuffer, { type: 'audio/mp3' })]);\n this.lameEncoder.clearBuffer();\n }\n });\n };\n};\n\nexport default MicRecorder;\n","var moment = module.exports = require(\"./moment-timezone\");\nmoment.tz.load(require('./data/packed/latest.json'));\n","//! moment-timezone.js\n//! version : 0.5.43\n//! Copyright (c) JS Foundation and other contributors\n//! license : MIT\n//! github.com/moment/moment-timezone\n\n(function (root, factory) {\n\t\"use strict\";\n\n\t/*global define*/\n\tif (typeof module === 'object' && module.exports) {\n\t\tmodule.exports = factory(require('moment')); // Node\n\t} else if (typeof define === 'function' && define.amd) {\n\t\tdefine(['moment'], factory); // AMD\n\t} else {\n\t\tfactory(root.moment); // Browser\n\t}\n}(this, function (moment) {\n\t\"use strict\";\n\n\t// Resolves es6 module loading issue\n\tif (moment.version === undefined && moment.default) {\n\t\tmoment = moment.default;\n\t}\n\n\t// Do not load moment-timezone a second time.\n\t// if (moment.tz !== undefined) {\n\t// \tlogError('Moment Timezone ' + moment.tz.version + ' was already loaded ' + (moment.tz.dataVersion ? 'with data from ' : 'without any data') + moment.tz.dataVersion);\n\t// \treturn moment;\n\t// }\n\n\tvar VERSION = \"0.5.43\",\n\t\tzones = {},\n\t\tlinks = {},\n\t\tcountries = {},\n\t\tnames = {},\n\t\tguesses = {},\n\t\tcachedGuess;\n\n\tif (!moment || typeof moment.version !== 'string') {\n\t\tlogError('Moment Timezone requires Moment.js. See https://momentjs.com/timezone/docs/#/use-it/browser/');\n\t}\n\n\tvar momentVersion = moment.version.split('.'),\n\t\tmajor = +momentVersion[0],\n\t\tminor = +momentVersion[1];\n\n\t// Moment.js version check\n\tif (major < 2 || (major === 2 && minor < 6)) {\n\t\tlogError('Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js ' + moment.version + '. See momentjs.com');\n\t}\n\n\t/************************************\n\t\tUnpacking\n\t************************************/\n\n\tfunction charCodeToInt(charCode) {\n\t\tif (charCode > 96) {\n\t\t\treturn charCode - 87;\n\t\t} else if (charCode > 64) {\n\t\t\treturn charCode - 29;\n\t\t}\n\t\treturn charCode - 48;\n\t}\n\n\tfunction unpackBase60(string) {\n\t\tvar i = 0,\n\t\t\tparts = string.split('.'),\n\t\t\twhole = parts[0],\n\t\t\tfractional = parts[1] || '',\n\t\t\tmultiplier = 1,\n\t\t\tnum,\n\t\t\tout = 0,\n\t\t\tsign = 1;\n\n\t\t// handle negative numbers\n\t\tif (string.charCodeAt(0) === 45) {\n\t\t\ti = 1;\n\t\t\tsign = -1;\n\t\t}\n\n\t\t// handle digits before the decimal\n\t\tfor (i; i < whole.length; i++) {\n\t\t\tnum = charCodeToInt(whole.charCodeAt(i));\n\t\t\tout = 60 * out + num;\n\t\t}\n\n\t\t// handle digits after the decimal\n\t\tfor (i = 0; i < fractional.length; i++) {\n\t\t\tmultiplier = multiplier / 60;\n\t\t\tnum = charCodeToInt(fractional.charCodeAt(i));\n\t\t\tout += num * multiplier;\n\t\t}\n\n\t\treturn out * sign;\n\t}\n\n\tfunction arrayToInt (array) {\n\t\tfor (var i = 0; i < array.length; i++) {\n\t\t\tarray[i] = unpackBase60(array[i]);\n\t\t}\n\t}\n\n\tfunction intToUntil (array, length) {\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tarray[i] = Math.round((array[i - 1] || 0) + (array[i] * 60000)); // minutes to milliseconds\n\t\t}\n\n\t\tarray[length - 1] = Infinity;\n\t}\n\n\tfunction mapIndices (source, indices) {\n\t\tvar out = [], i;\n\n\t\tfor (i = 0; i < indices.length; i++) {\n\t\t\tout[i] = source[indices[i]];\n\t\t}\n\n\t\treturn out;\n\t}\n\n\tfunction unpack (string) {\n\t\tvar data = string.split('|'),\n\t\t\toffsets = data[2].split(' '),\n\t\t\tindices = data[3].split(''),\n\t\t\tuntils = data[4].split(' ');\n\n\t\tarrayToInt(offsets);\n\t\tarrayToInt(indices);\n\t\tarrayToInt(untils);\n\n\t\tintToUntil(untils, indices.length);\n\n\t\treturn {\n\t\t\tname : data[0],\n\t\t\tabbrs : mapIndices(data[1].split(' '), indices),\n\t\t\toffsets : mapIndices(offsets, indices),\n\t\t\tuntils : untils,\n\t\t\tpopulation : data[5] | 0\n\t\t};\n\t}\n\n\t/************************************\n\t\tZone object\n\t************************************/\n\n\tfunction Zone (packedString) {\n\t\tif (packedString) {\n\t\t\tthis._set(unpack(packedString));\n\t\t}\n\t}\n\n\tZone.prototype = {\n\t\t_set : function (unpacked) {\n\t\t\tthis.name = unpacked.name;\n\t\t\tthis.abbrs = unpacked.abbrs;\n\t\t\tthis.untils = unpacked.untils;\n\t\t\tthis.offsets = unpacked.offsets;\n\t\t\tthis.population = unpacked.population;\n\t\t},\n\n\t\t_index : function (timestamp) {\n\t\t\tvar target = +timestamp,\n\t\t\t\tuntils = this.untils,\n\t\t\t\ti;\n\n\t\t\tfor (i = 0; i < untils.length; i++) {\n\t\t\t\tif (target < untils[i]) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tcountries : function () {\n\t\t\tvar zone_name = this.name;\n\t\t\treturn Object.keys(countries).filter(function (country_code) {\n\t\t\t\treturn countries[country_code].zones.indexOf(zone_name) !== -1;\n\t\t\t});\n\t\t},\n\n\t\tparse : function (timestamp) {\n\t\t\tvar target = +timestamp,\n\t\t\t\toffsets = this.offsets,\n\t\t\t\tuntils = this.untils,\n\t\t\t\tmax = untils.length - 1,\n\t\t\t\toffset, offsetNext, offsetPrev, i;\n\n\t\t\tfor (i = 0; i < max; i++) {\n\t\t\t\toffset = offsets[i];\n\t\t\t\toffsetNext = offsets[i + 1];\n\t\t\t\toffsetPrev = offsets[i ? i - 1 : i];\n\n\t\t\t\tif (offset < offsetNext && tz.moveAmbiguousForward) {\n\t\t\t\t\toffset = offsetNext;\n\t\t\t\t} else if (offset > offsetPrev && tz.moveInvalidForward) {\n\t\t\t\t\toffset = offsetPrev;\n\t\t\t\t}\n\n\t\t\t\tif (target < untils[i] - (offset * 60000)) {\n\t\t\t\t\treturn offsets[i];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn offsets[max];\n\t\t},\n\n\t\tabbr : function (mom) {\n\t\t\treturn this.abbrs[this._index(mom)];\n\t\t},\n\n\t\toffset : function (mom) {\n\t\t\tlogError(\"zone.offset has been deprecated in favor of zone.utcOffset\");\n\t\t\treturn this.offsets[this._index(mom)];\n\t\t},\n\n\t\tutcOffset : function (mom) {\n\t\t\treturn this.offsets[this._index(mom)];\n\t\t}\n\t};\n\n\t/************************************\n\t\tCountry object\n\t************************************/\n\n\tfunction Country (country_name, zone_names) {\n\t\tthis.name = country_name;\n\t\tthis.zones = zone_names;\n\t}\n\n\t/************************************\n\t\tCurrent Timezone\n\t************************************/\n\n\tfunction OffsetAt(at) {\n\t\tvar timeString = at.toTimeString();\n\t\tvar abbr = timeString.match(/\\([a-z ]+\\)/i);\n\t\tif (abbr && abbr[0]) {\n\t\t\t// 17:56:31 GMT-0600 (CST)\n\t\t\t// 17:56:31 GMT-0600 (Central Standard Time)\n\t\t\tabbr = abbr[0].match(/[A-Z]/g);\n\t\t\tabbr = abbr ? abbr.join('') : undefined;\n\t\t} else {\n\t\t\t// 17:56:31 CST\n\t\t\t// 17:56:31 GMT+0800 (台北標準時間)\n\t\t\tabbr = timeString.match(/[A-Z]{3,5}/g);\n\t\t\tabbr = abbr ? abbr[0] : undefined;\n\t\t}\n\n\t\tif (abbr === 'GMT') {\n\t\t\tabbr = undefined;\n\t\t}\n\n\t\tthis.at = +at;\n\t\tthis.abbr = abbr;\n\t\tthis.offset = at.getTimezoneOffset();\n\t}\n\n\tfunction ZoneScore(zone) {\n\t\tthis.zone = zone;\n\t\tthis.offsetScore = 0;\n\t\tthis.abbrScore = 0;\n\t}\n\n\tZoneScore.prototype.scoreOffsetAt = function (offsetAt) {\n\t\tthis.offsetScore += Math.abs(this.zone.utcOffset(offsetAt.at) - offsetAt.offset);\n\t\tif (this.zone.abbr(offsetAt.at).replace(/[^A-Z]/g, '') !== offsetAt.abbr) {\n\t\t\tthis.abbrScore++;\n\t\t}\n\t};\n\n\tfunction findChange(low, high) {\n\t\tvar mid, diff;\n\n\t\twhile ((diff = ((high.at - low.at) / 12e4 | 0) * 6e4)) {\n\t\t\tmid = new OffsetAt(new Date(low.at + diff));\n\t\t\tif (mid.offset === low.offset) {\n\t\t\t\tlow = mid;\n\t\t\t} else {\n\t\t\t\thigh = mid;\n\t\t\t}\n\t\t}\n\n\t\treturn low;\n\t}\n\n\tfunction userOffsets() {\n\t\tvar startYear = new Date().getFullYear() - 2,\n\t\t\tlast = new OffsetAt(new Date(startYear, 0, 1)),\n\t\t\toffsets = [last],\n\t\t\tchange, next, i;\n\n\t\tfor (i = 1; i < 48; i++) {\n\t\t\tnext = new OffsetAt(new Date(startYear, i, 1));\n\t\t\tif (next.offset !== last.offset) {\n\t\t\t\tchange = findChange(last, next);\n\t\t\t\toffsets.push(change);\n\t\t\t\toffsets.push(new OffsetAt(new Date(change.at + 6e4)));\n\t\t\t}\n\t\t\tlast = next;\n\t\t}\n\n\t\tfor (i = 0; i < 4; i++) {\n\t\t\toffsets.push(new OffsetAt(new Date(startYear + i, 0, 1)));\n\t\t\toffsets.push(new OffsetAt(new Date(startYear + i, 6, 1)));\n\t\t}\n\n\t\treturn offsets;\n\t}\n\n\tfunction sortZoneScores (a, b) {\n\t\tif (a.offsetScore !== b.offsetScore) {\n\t\t\treturn a.offsetScore - b.offsetScore;\n\t\t}\n\t\tif (a.abbrScore !== b.abbrScore) {\n\t\t\treturn a.abbrScore - b.abbrScore;\n\t\t}\n\t\tif (a.zone.population !== b.zone.population) {\n\t\t\treturn b.zone.population - a.zone.population;\n\t\t}\n\t\treturn b.zone.name.localeCompare(a.zone.name);\n\t}\n\n\tfunction addToGuesses (name, offsets) {\n\t\tvar i, offset;\n\t\tarrayToInt(offsets);\n\t\tfor (i = 0; i < offsets.length; i++) {\n\t\t\toffset = offsets[i];\n\t\t\tguesses[offset] = guesses[offset] || {};\n\t\t\tguesses[offset][name] = true;\n\t\t}\n\t}\n\n\tfunction guessesForUserOffsets (offsets) {\n\t\tvar offsetsLength = offsets.length,\n\t\t\tfilteredGuesses = {},\n\t\t\tout = [],\n\t\t\ti, j, guessesOffset;\n\n\t\tfor (i = 0; i < offsetsLength; i++) {\n\t\t\tguessesOffset = guesses[offsets[i].offset] || {};\n\t\t\tfor (j in guessesOffset) {\n\t\t\t\tif (guessesOffset.hasOwnProperty(j)) {\n\t\t\t\t\tfilteredGuesses[j] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (i in filteredGuesses) {\n\t\t\tif (filteredGuesses.hasOwnProperty(i)) {\n\t\t\t\tout.push(names[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn out;\n\t}\n\n\tfunction rebuildGuess () {\n\n\t\t// use Intl API when available and returning valid time zone\n\t\ttry {\n\t\t\tvar intlName = Intl.DateTimeFormat().resolvedOptions().timeZone;\n\t\t\tif (intlName && intlName.length > 3) {\n\t\t\t\tvar name = names[normalizeName(intlName)];\n\t\t\t\tif (name) {\n\t\t\t\t\treturn name;\n\t\t\t\t}\n\t\t\t\tlogError(\"Moment Timezone found \" + intlName + \" from the Intl api, but did not have that data loaded.\");\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t// Intl unavailable, fall back to manual guessing.\n\t\t}\n\n\t\tvar offsets = userOffsets(),\n\t\t\toffsetsLength = offsets.length,\n\t\t\tguesses = guessesForUserOffsets(offsets),\n\t\t\tzoneScores = [],\n\t\t\tzoneScore, i, j;\n\n\t\tfor (i = 0; i < guesses.length; i++) {\n\t\t\tzoneScore = new ZoneScore(getZone(guesses[i]), offsetsLength);\n\t\t\tfor (j = 0; j < offsetsLength; j++) {\n\t\t\t\tzoneScore.scoreOffsetAt(offsets[j]);\n\t\t\t}\n\t\t\tzoneScores.push(zoneScore);\n\t\t}\n\n\t\tzoneScores.sort(sortZoneScores);\n\n\t\treturn zoneScores.length > 0 ? zoneScores[0].zone.name : undefined;\n\t}\n\n\tfunction guess (ignoreCache) {\n\t\tif (!cachedGuess || ignoreCache) {\n\t\t\tcachedGuess = rebuildGuess();\n\t\t}\n\t\treturn cachedGuess;\n\t}\n\n\t/************************************\n\t\tGlobal Methods\n\t************************************/\n\n\tfunction normalizeName (name) {\n\t\treturn (name || '').toLowerCase().replace(/\\//g, '_');\n\t}\n\n\tfunction addZone (packed) {\n\t\tvar i, name, split, normalized;\n\n\t\tif (typeof packed === \"string\") {\n\t\t\tpacked = [packed];\n\t\t}\n\n\t\tfor (i = 0; i < packed.length; i++) {\n\t\t\tsplit = packed[i].split('|');\n\t\t\tname = split[0];\n\t\t\tnormalized = normalizeName(name);\n\t\t\tzones[normalized] = packed[i];\n\t\t\tnames[normalized] = name;\n\t\t\taddToGuesses(normalized, split[2].split(' '));\n\t\t}\n\t}\n\n\tfunction getZone (name, caller) {\n\n\t\tname = normalizeName(name);\n\n\t\tvar zone = zones[name];\n\t\tvar link;\n\n\t\tif (zone instanceof Zone) {\n\t\t\treturn zone;\n\t\t}\n\n\t\tif (typeof zone === 'string') {\n\t\t\tzone = new Zone(zone);\n\t\t\tzones[name] = zone;\n\t\t\treturn zone;\n\t\t}\n\n\t\t// Pass getZone to prevent recursion more than 1 level deep\n\t\tif (links[name] && caller !== getZone && (link = getZone(links[name], getZone))) {\n\t\t\tzone = zones[name] = new Zone();\n\t\t\tzone._set(link);\n\t\t\tzone.name = names[name];\n\t\t\treturn zone;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tfunction getNames () {\n\t\tvar i, out = [];\n\n\t\tfor (i in names) {\n\t\t\tif (names.hasOwnProperty(i) && (zones[i] || zones[links[i]]) && names[i]) {\n\t\t\t\tout.push(names[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn out.sort();\n\t}\n\n\tfunction getCountryNames () {\n\t\treturn Object.keys(countries);\n\t}\n\n\tfunction addLink (aliases) {\n\t\tvar i, alias, normal0, normal1;\n\n\t\tif (typeof aliases === \"string\") {\n\t\t\taliases = [aliases];\n\t\t}\n\n\t\tfor (i = 0; i < aliases.length; i++) {\n\t\t\talias = aliases[i].split('|');\n\n\t\t\tnormal0 = normalizeName(alias[0]);\n\t\t\tnormal1 = normalizeName(alias[1]);\n\n\t\t\tlinks[normal0] = normal1;\n\t\t\tnames[normal0] = alias[0];\n\n\t\t\tlinks[normal1] = normal0;\n\t\t\tnames[normal1] = alias[1];\n\t\t}\n\t}\n\n\tfunction addCountries (data) {\n\t\tvar i, country_code, country_zones, split;\n\t\tif (!data || !data.length) return;\n\t\tfor (i = 0; i < data.length; i++) {\n\t\t\tsplit = data[i].split('|');\n\t\t\tcountry_code = split[0].toUpperCase();\n\t\t\tcountry_zones = split[1].split(' ');\n\t\t\tcountries[country_code] = new Country(\n\t\t\t\tcountry_code,\n\t\t\t\tcountry_zones\n\t\t\t);\n\t\t}\n\t}\n\n\tfunction getCountry (name) {\n\t\tname = name.toUpperCase();\n\t\treturn countries[name] || null;\n\t}\n\n\tfunction zonesForCountry(country, with_offset) {\n\t\tcountry = getCountry(country);\n\n\t\tif (!country) return null;\n\n\t\tvar zones = country.zones.sort();\n\n\t\tif (with_offset) {\n\t\t\treturn zones.map(function (zone_name) {\n\t\t\t\tvar zone = getZone(zone_name);\n\t\t\t\treturn {\n\t\t\t\t\tname: zone_name,\n\t\t\t\t\toffset: zone.utcOffset(new Date())\n\t\t\t\t};\n\t\t\t});\n\t\t}\n\n\t\treturn zones;\n\t}\n\n\tfunction loadData (data) {\n\t\taddZone(data.zones);\n\t\taddLink(data.links);\n\t\taddCountries(data.countries);\n\t\ttz.dataVersion = data.version;\n\t}\n\n\tfunction zoneExists (name) {\n\t\tif (!zoneExists.didShowError) {\n\t\t\tzoneExists.didShowError = true;\n\t\t\t\tlogError(\"moment.tz.zoneExists('\" + name + \"') has been deprecated in favor of !moment.tz.zone('\" + name + \"')\");\n\t\t}\n\t\treturn !!getZone(name);\n\t}\n\n\tfunction needsOffset (m) {\n\t\tvar isUnixTimestamp = (m._f === 'X' || m._f === 'x');\n\t\treturn !!(m._a && (m._tzm === undefined) && !isUnixTimestamp);\n\t}\n\n\tfunction logError (message) {\n\t\tif (typeof console !== 'undefined' && typeof console.error === 'function') {\n\t\t\tconsole.error(message);\n\t\t}\n\t}\n\n\t/************************************\n\t\tmoment.tz namespace\n\t************************************/\n\n\tfunction tz (input) {\n\t\tvar args = Array.prototype.slice.call(arguments, 0, -1),\n\t\t\tname = arguments[arguments.length - 1],\n\t\t\tzone = getZone(name),\n\t\t\tout = moment.utc.apply(null, args);\n\n\t\tif (zone && !moment.isMoment(input) && needsOffset(out)) {\n\t\t\tout.add(zone.parse(out), 'minutes');\n\t\t}\n\n\t\tout.tz(name);\n\n\t\treturn out;\n\t}\n\n\ttz.version = VERSION;\n\ttz.dataVersion = '';\n\ttz._zones = zones;\n\ttz._links = links;\n\ttz._names = names;\n\ttz._countries\t= countries;\n\ttz.add = addZone;\n\ttz.link = addLink;\n\ttz.load = loadData;\n\ttz.zone = getZone;\n\ttz.zoneExists = zoneExists; // deprecated in 0.1.0\n\ttz.guess = guess;\n\ttz.names = getNames;\n\ttz.Zone = Zone;\n\ttz.unpack = unpack;\n\ttz.unpackBase60 = unpackBase60;\n\ttz.needsOffset = needsOffset;\n\ttz.moveInvalidForward = true;\n\ttz.moveAmbiguousForward = false;\n\ttz.countries = getCountryNames;\n\ttz.zonesForCountry = zonesForCountry;\n\n\t/************************************\n\t\tInterface with Moment.js\n\t************************************/\n\n\tvar fn = moment.fn;\n\n\tmoment.tz = tz;\n\n\tmoment.defaultZone = null;\n\n\tmoment.updateOffset = function (mom, keepTime) {\n\t\tvar zone = moment.defaultZone,\n\t\t\toffset;\n\n\t\tif (mom._z === undefined) {\n\t\t\tif (zone && needsOffset(mom) && !mom._isUTC) {\n\t\t\t\tmom._d = moment.utc(mom._a)._d;\n\t\t\t\tmom.utc().add(zone.parse(mom), 'minutes');\n\t\t\t}\n\t\t\tmom._z = zone;\n\t\t}\n\t\tif (mom._z) {\n\t\t\toffset = mom._z.utcOffset(mom);\n\t\t\tif (Math.abs(offset) < 16) {\n\t\t\t\toffset = offset / 60;\n\t\t\t}\n\t\t\tif (mom.utcOffset !== undefined) {\n\t\t\t\tvar z = mom._z;\n\t\t\t\tmom.utcOffset(-offset, keepTime);\n\t\t\t\tmom._z = z;\n\t\t\t} else {\n\t\t\t\tmom.zone(offset, keepTime);\n\t\t\t}\n\t\t}\n\t};\n\n\tfn.tz = function (name, keepTime) {\n\t\tif (name) {\n\t\t\tif (typeof name !== 'string') {\n\t\t\t\tthrow new Error('Time zone name must be a string, got ' + name + ' [' + typeof name + ']');\n\t\t\t}\n\t\t\tthis._z = getZone(name);\n\t\t\tif (this._z) {\n\t\t\t\tmoment.updateOffset(this, keepTime);\n\t\t\t} else {\n\t\t\t\tlogError(\"Moment Timezone has no data for \" + name + \". See http://momentjs.com/timezone/docs/#/data-loading/.\");\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif (this._z) { return this._z.name; }\n\t};\n\n\tfunction abbrWrap (old) {\n\t\treturn function () {\n\t\t\tif (this._z) { return this._z.abbr(this); }\n\t\t\treturn old.call(this);\n\t\t};\n\t}\n\n\tfunction resetZoneWrap (old) {\n\t\treturn function () {\n\t\t\tthis._z = null;\n\t\t\treturn old.apply(this, arguments);\n\t\t};\n\t}\n\n\tfunction resetZoneWrap2 (old) {\n\t\treturn function () {\n\t\t\tif (arguments.length > 0) this._z = null;\n\t\t\treturn old.apply(this, arguments);\n\t\t};\n\t}\n\n\tfn.zoneName = abbrWrap(fn.zoneName);\n\tfn.zoneAbbr = abbrWrap(fn.zoneAbbr);\n\tfn.utc = resetZoneWrap(fn.utc);\n\tfn.local = resetZoneWrap(fn.local);\n\tfn.utcOffset = resetZoneWrap2(fn.utcOffset);\n\n\tmoment.tz.setDefault = function(name) {\n\t\tif (major < 2 || (major === 2 && minor < 9)) {\n\t\t\tlogError('Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js ' + moment.version + '.');\n\t\t}\n\t\tmoment.defaultZone = name ? getZone(name) : null;\n\t\treturn moment;\n\t};\n\n\t// Cloning a moment should include the _z property.\n\tvar momentProperties = moment.momentProperties;\n\tif (Object.prototype.toString.call(momentProperties) === '[object Array]') {\n\t\t// moment 2.8.1+\n\t\tmomentProperties.push('_z');\n\t\tmomentProperties.push('_a');\n\t} else if (momentProperties) {\n\t\t// moment 2.7.0\n\t\tmomentProperties._z = null;\n\t}\n\n\t// INJECT DATA\n\n\treturn moment;\n}));\n","//! moment.js\n//! version : 2.29.4\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n global.moment = factory()\n}(this, (function () { 'use strict';\n\n var hookCallback;\n\n function hooks() {\n return hookCallback.apply(null, arguments);\n }\n\n // This is done to register the method called with moment()\n // without creating circular dependencies.\n function setHookCallback(callback) {\n hookCallback = callback;\n }\n\n function isArray(input) {\n return (\n input instanceof Array ||\n Object.prototype.toString.call(input) === '[object Array]'\n );\n }\n\n function isObject(input) {\n // IE8 will treat undefined and null as object if it wasn't for\n // input != null\n return (\n input != null &&\n Object.prototype.toString.call(input) === '[object Object]'\n );\n }\n\n function hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\n }\n\n function isObjectEmpty(obj) {\n if (Object.getOwnPropertyNames) {\n return Object.getOwnPropertyNames(obj).length === 0;\n } else {\n var k;\n for (k in obj) {\n if (hasOwnProp(obj, k)) {\n return false;\n }\n }\n return true;\n }\n }\n\n function isUndefined(input) {\n return input === void 0;\n }\n\n function isNumber(input) {\n return (\n typeof input === 'number' ||\n Object.prototype.toString.call(input) === '[object Number]'\n );\n }\n\n function isDate(input) {\n return (\n input instanceof Date ||\n Object.prototype.toString.call(input) === '[object Date]'\n );\n }\n\n function map(arr, fn) {\n var res = [],\n i,\n arrLen = arr.length;\n for (i = 0; i < arrLen; ++i) {\n res.push(fn(arr[i], i));\n }\n return res;\n }\n\n function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n\n return a;\n }\n\n function createUTC(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n }\n\n function defaultParsingFlags() {\n // We need to deep clone this object.\n return {\n empty: false,\n unusedTokens: [],\n unusedInput: [],\n overflow: -2,\n charsLeftOver: 0,\n nullInput: false,\n invalidEra: null,\n invalidMonth: null,\n invalidFormat: false,\n userInvalidated: false,\n iso: false,\n parsedDateParts: [],\n era: null,\n meridiem: null,\n rfc2822: false,\n weekdayMismatch: false,\n };\n }\n\n function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\n }\n\n var some;\n if (Array.prototype.some) {\n some = Array.prototype.some;\n } else {\n some = function (fun) {\n var t = Object(this),\n len = t.length >>> 0,\n i;\n\n for (i = 0; i < len; i++) {\n if (i in t && fun.call(this, t[i], i, t)) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n function isValid(m) {\n if (m._isValid == null) {\n var flags = getParsingFlags(m),\n parsedParts = some.call(flags.parsedDateParts, function (i) {\n return i != null;\n }),\n isNowValid =\n !isNaN(m._d.getTime()) &&\n flags.overflow < 0 &&\n !flags.empty &&\n !flags.invalidEra &&\n !flags.invalidMonth &&\n !flags.invalidWeekday &&\n !flags.weekdayMismatch &&\n !flags.nullInput &&\n !flags.invalidFormat &&\n !flags.userInvalidated &&\n (!flags.meridiem || (flags.meridiem && parsedParts));\n\n if (m._strict) {\n isNowValid =\n isNowValid &&\n flags.charsLeftOver === 0 &&\n flags.unusedTokens.length === 0 &&\n flags.bigHour === undefined;\n }\n\n if (Object.isFrozen == null || !Object.isFrozen(m)) {\n m._isValid = isNowValid;\n } else {\n return isNowValid;\n }\n }\n return m._isValid;\n }\n\n function createInvalid(flags) {\n var m = createUTC(NaN);\n if (flags != null) {\n extend(getParsingFlags(m), flags);\n } else {\n getParsingFlags(m).userInvalidated = true;\n }\n\n return m;\n }\n\n // Plugins that add properties should also add the key here (null value),\n // so we can properly clone ourselves.\n var momentProperties = (hooks.momentProperties = []),\n updateInProgress = false;\n\n function copyConfig(to, from) {\n var i,\n prop,\n val,\n momentPropertiesLen = momentProperties.length;\n\n if (!isUndefined(from._isAMomentObject)) {\n to._isAMomentObject = from._isAMomentObject;\n }\n if (!isUndefined(from._i)) {\n to._i = from._i;\n }\n if (!isUndefined(from._f)) {\n to._f = from._f;\n }\n if (!isUndefined(from._l)) {\n to._l = from._l;\n }\n if (!isUndefined(from._strict)) {\n to._strict = from._strict;\n }\n if (!isUndefined(from._tzm)) {\n to._tzm = from._tzm;\n }\n if (!isUndefined(from._isUTC)) {\n to._isUTC = from._isUTC;\n }\n if (!isUndefined(from._offset)) {\n to._offset = from._offset;\n }\n if (!isUndefined(from._pf)) {\n to._pf = getParsingFlags(from);\n }\n if (!isUndefined(from._locale)) {\n to._locale = from._locale;\n }\n\n if (momentPropertiesLen > 0) {\n for (i = 0; i < momentPropertiesLen; i++) {\n prop = momentProperties[i];\n val = from[prop];\n if (!isUndefined(val)) {\n to[prop] = val;\n }\n }\n }\n\n return to;\n }\n\n // Moment prototype object\n function Moment(config) {\n copyConfig(this, config);\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n if (!this.isValid()) {\n this._d = new Date(NaN);\n }\n // Prevent infinite loop in case updateOffset creates new moment\n // objects.\n if (updateInProgress === false) {\n updateInProgress = true;\n hooks.updateOffset(this);\n updateInProgress = false;\n }\n }\n\n function isMoment(obj) {\n return (\n obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n );\n }\n\n function warn(msg) {\n if (\n hooks.suppressDeprecationWarnings === false &&\n typeof console !== 'undefined' &&\n console.warn\n ) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n\n function deprecate(msg, fn) {\n var firstTime = true;\n\n return extend(function () {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(null, msg);\n }\n if (firstTime) {\n var args = [],\n arg,\n i,\n key,\n argLen = arguments.length;\n for (i = 0; i < argLen; i++) {\n arg = '';\n if (typeof arguments[i] === 'object') {\n arg += '\\n[' + i + '] ';\n for (key in arguments[0]) {\n if (hasOwnProp(arguments[0], key)) {\n arg += key + ': ' + arguments[0][key] + ', ';\n }\n }\n arg = arg.slice(0, -2); // Remove trailing comma and space\n } else {\n arg = arguments[i];\n }\n args.push(arg);\n }\n warn(\n msg +\n '\\nArguments: ' +\n Array.prototype.slice.call(args).join('') +\n '\\n' +\n new Error().stack\n );\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n }\n\n var deprecations = {};\n\n function deprecateSimple(name, msg) {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(name, msg);\n }\n if (!deprecations[name]) {\n warn(msg);\n deprecations[name] = true;\n }\n }\n\n hooks.suppressDeprecationWarnings = false;\n hooks.deprecationHandler = null;\n\n function isFunction(input) {\n return (\n (typeof Function !== 'undefined' && input instanceof Function) ||\n Object.prototype.toString.call(input) === '[object Function]'\n );\n }\n\n function set(config) {\n var prop, i;\n for (i in config) {\n if (hasOwnProp(config, i)) {\n prop = config[i];\n if (isFunction(prop)) {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\n }\n }\n }\n this._config = config;\n // Lenient ordinal parsing accepts just a number in addition to\n // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n this._dayOfMonthOrdinalParseLenient = new RegExp(\n (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n '|' +\n /\\d{1,2}/.source\n );\n }\n\n function mergeConfigs(parentConfig, childConfig) {\n var res = extend({}, parentConfig),\n prop;\n for (prop in childConfig) {\n if (hasOwnProp(childConfig, prop)) {\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n res[prop] = {};\n extend(res[prop], parentConfig[prop]);\n extend(res[prop], childConfig[prop]);\n } else if (childConfig[prop] != null) {\n res[prop] = childConfig[prop];\n } else {\n delete res[prop];\n }\n }\n }\n for (prop in parentConfig) {\n if (\n hasOwnProp(parentConfig, prop) &&\n !hasOwnProp(childConfig, prop) &&\n isObject(parentConfig[prop])\n ) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n }\n\n function Locale(config) {\n if (config != null) {\n this.set(config);\n }\n }\n\n var keys;\n\n if (Object.keys) {\n keys = Object.keys;\n } else {\n keys = function (obj) {\n var i,\n res = [];\n for (i in obj) {\n if (hasOwnProp(obj, i)) {\n res.push(i);\n }\n }\n return res;\n };\n }\n\n var defaultCalendar = {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n };\n\n function calendar(key, mom, now) {\n var output = this._calendar[key] || this._calendar['sameElse'];\n return isFunction(output) ? output.call(mom, now) : output;\n }\n\n function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (\n (sign ? (forceSign ? '+' : '') : '-') +\n Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n absNumber\n );\n }\n\n var formattingTokens =\n /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n formatFunctions = {},\n formatTokenFunctions = {};\n\n // token: 'M'\n // padded: ['MM', 2]\n // ordinal: 'Mo'\n // callback: function () { this.month() + 1 }\n function addFormatToken(token, padded, ordinal, callback) {\n var func = callback;\n if (typeof callback === 'string') {\n func = function () {\n return this[callback]();\n };\n }\n if (token) {\n formatTokenFunctions[token] = func;\n }\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(\n func.apply(this, arguments),\n token\n );\n };\n }\n }\n\n function removeFormattingTokens(input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|\\]$/g, '');\n }\n return input.replace(/\\\\/g, '');\n }\n\n function makeFormatFunction(format) {\n var array = format.match(formattingTokens),\n i,\n length;\n\n for (i = 0, length = array.length; i < length; i++) {\n if (formatTokenFunctions[array[i]]) {\n array[i] = formatTokenFunctions[array[i]];\n } else {\n array[i] = removeFormattingTokens(array[i]);\n }\n }\n\n return function (mom) {\n var output = '',\n i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i])\n ? array[i].call(mom, format)\n : array[i];\n }\n return output;\n };\n }\n\n // format date using native date object\n function formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n\n format = expandFormat(format, m.localeData());\n formatFunctions[format] =\n formatFunctions[format] || makeFormatFunction(format);\n\n return formatFunctions[format](m);\n }\n\n function expandFormat(format, locale) {\n var i = 5;\n\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(\n localFormattingTokens,\n replaceLongDateFormatTokens\n );\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n }\n\n var defaultLongDateFormat = {\n LTS: 'h:mm:ss A',\n LT: 'h:mm A',\n L: 'MM/DD/YYYY',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY h:mm A',\n LLLL: 'dddd, MMMM D, YYYY h:mm A',\n };\n\n function longDateFormat(key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n\n if (format || !formatUpper) {\n return format;\n }\n\n this._longDateFormat[key] = formatUpper\n .match(formattingTokens)\n .map(function (tok) {\n if (\n tok === 'MMMM' ||\n tok === 'MM' ||\n tok === 'DD' ||\n tok === 'dddd'\n ) {\n return tok.slice(1);\n }\n return tok;\n })\n .join('');\n\n return this._longDateFormat[key];\n }\n\n var defaultInvalidDate = 'Invalid date';\n\n function invalidDate() {\n return this._invalidDate;\n }\n\n var defaultOrdinal = '%d',\n defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n function ordinal(number) {\n return this._ordinal.replace('%d', number);\n }\n\n var defaultRelativeTime = {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n w: 'a week',\n ww: '%d weeks',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n };\n\n function relativeTime(number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return isFunction(output)\n ? output(number, withoutSuffix, string, isFuture)\n : output.replace(/%d/i, number);\n }\n\n function pastFuture(diff, output) {\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n }\n\n var aliases = {};\n\n function addUnitAlias(unit, shorthand) {\n var lowerCase = unit.toLowerCase();\n aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n }\n\n function normalizeUnits(units) {\n return typeof units === 'string'\n ? aliases[units] || aliases[units.toLowerCase()]\n : undefined;\n }\n\n function normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\n\n for (prop in inputObject) {\n if (hasOwnProp(inputObject, prop)) {\n normalizedProp = normalizeUnits(prop);\n if (normalizedProp) {\n normalizedInput[normalizedProp] = inputObject[prop];\n }\n }\n }\n\n return normalizedInput;\n }\n\n var priorities = {};\n\n function addUnitPriority(unit, priority) {\n priorities[unit] = priority;\n }\n\n function getPrioritizedUnits(unitsObj) {\n var units = [],\n u;\n for (u in unitsObj) {\n if (hasOwnProp(unitsObj, u)) {\n units.push({ unit: u, priority: priorities[u] });\n }\n }\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\n }\n\n function isLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n }\n\n function absFloor(number) {\n if (number < 0) {\n // -0 -> 0\n return Math.ceil(number) || 0;\n } else {\n return Math.floor(number);\n }\n }\n\n function toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n\n return value;\n }\n\n function makeGetSet(unit, keepTime) {\n return function (value) {\n if (value != null) {\n set$1(this, unit, value);\n hooks.updateOffset(this, keepTime);\n return this;\n } else {\n return get(this, unit);\n }\n };\n }\n\n function get(mom, unit) {\n return mom.isValid()\n ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()\n : NaN;\n }\n\n function set$1(mom, unit, value) {\n if (mom.isValid() && !isNaN(value)) {\n if (\n unit === 'FullYear' &&\n isLeapYear(mom.year()) &&\n mom.month() === 1 &&\n mom.date() === 29\n ) {\n value = toInt(value);\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](\n value,\n mom.month(),\n daysInMonth(value, mom.month())\n );\n } else {\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n }\n }\n }\n\n // MOMENTS\n\n function stringGet(units) {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units]();\n }\n return this;\n }\n\n function stringSet(units, value) {\n if (typeof units === 'object') {\n units = normalizeObjectUnits(units);\n var prioritized = getPrioritizedUnits(units),\n i,\n prioritizedLen = prioritized.length;\n for (i = 0; i < prioritizedLen; i++) {\n this[prioritized[i].unit](units[prioritized[i].unit]);\n }\n } else {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units](value);\n }\n }\n return this;\n }\n\n var match1 = /\\d/, // 0 - 9\n match2 = /\\d\\d/, // 00 - 99\n match3 = /\\d{3}/, // 000 - 999\n match4 = /\\d{4}/, // 0000 - 9999\n match6 = /[+-]?\\d{6}/, // -999999 - 999999\n match1to2 = /\\d\\d?/, // 0 - 99\n match3to4 = /\\d\\d\\d\\d?/, // 999 - 9999\n match5to6 = /\\d\\d\\d\\d\\d\\d?/, // 99999 - 999999\n match1to3 = /\\d{1,3}/, // 0 - 999\n match1to4 = /\\d{1,4}/, // 0 - 9999\n match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n matchUnsigned = /\\d+/, // 0 - inf\n matchSigned = /[+-]?\\d+/, // -inf - inf\n matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n // any word (or two) characters or numbers including two/three word month in arabic.\n // includes scottish gaelic two word and hyphenated months\n matchWord =\n /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n regexes;\n\n regexes = {};\n\n function addRegexToken(token, regex, strictRegex) {\n regexes[token] = isFunction(regex)\n ? regex\n : function (isStrict, localeData) {\n return isStrict && strictRegex ? strictRegex : regex;\n };\n }\n\n function getParseRegexForToken(token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\n\n return regexes[token](config._strict, config._locale);\n }\n\n // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n function unescapeFormat(s) {\n return regexEscape(\n s\n .replace('\\\\', '')\n .replace(\n /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n function (matched, p1, p2, p3, p4) {\n return p1 || p2 || p3 || p4;\n }\n )\n );\n }\n\n function regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n var tokens = {};\n\n function addParseToken(token, callback) {\n var i,\n func = callback,\n tokenLen;\n if (typeof token === 'string') {\n token = [token];\n }\n if (isNumber(callback)) {\n func = function (input, array) {\n array[callback] = toInt(input);\n };\n }\n tokenLen = token.length;\n for (i = 0; i < tokenLen; i++) {\n tokens[token[i]] = func;\n }\n }\n\n function addWeekParseToken(token, callback) {\n addParseToken(token, function (input, array, config, token) {\n config._w = config._w || {};\n callback(input, config._w, config, token);\n });\n }\n\n function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n }\n\n var YEAR = 0,\n MONTH = 1,\n DATE = 2,\n HOUR = 3,\n MINUTE = 4,\n SECOND = 5,\n MILLISECOND = 6,\n WEEK = 7,\n WEEKDAY = 8;\n\n function mod(n, x) {\n return ((n % x) + x) % x;\n }\n\n var indexOf;\n\n if (Array.prototype.indexOf) {\n indexOf = Array.prototype.indexOf;\n } else {\n indexOf = function (o) {\n // I know\n var i;\n for (i = 0; i < this.length; ++i) {\n if (this[i] === o) {\n return i;\n }\n }\n return -1;\n };\n }\n\n function daysInMonth(year, month) {\n if (isNaN(year) || isNaN(month)) {\n return NaN;\n }\n var modMonth = mod(month, 12);\n year += (month - modMonth) / 12;\n return modMonth === 1\n ? isLeapYear(year)\n ? 29\n : 28\n : 31 - ((modMonth % 7) % 2);\n }\n\n // FORMATTING\n\n addFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n });\n\n addFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\n });\n\n addFormatToken('MMMM', 0, 0, function (format) {\n return this.localeData().months(this, format);\n });\n\n // ALIASES\n\n addUnitAlias('month', 'M');\n\n // PRIORITY\n\n addUnitPriority('month', 8);\n\n // PARSING\n\n addRegexToken('M', match1to2);\n addRegexToken('MM', match1to2, match2);\n addRegexToken('MMM', function (isStrict, locale) {\n return locale.monthsShortRegex(isStrict);\n });\n addRegexToken('MMMM', function (isStrict, locale) {\n return locale.monthsRegex(isStrict);\n });\n\n addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n });\n\n addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n var month = config._locale.monthsParse(input, token, config._strict);\n // if we didn't find a month name, mark the date as invalid.\n if (month != null) {\n array[MONTH] = month;\n } else {\n getParsingFlags(config).invalidMonth = input;\n }\n });\n\n // LOCALES\n\n var defaultLocaleMonths =\n 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n defaultLocaleMonthsShort =\n 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n defaultMonthsShortRegex = matchWord,\n defaultMonthsRegex = matchWord;\n\n function localeMonths(m, format) {\n if (!m) {\n return isArray(this._months)\n ? this._months\n : this._months['standalone'];\n }\n return isArray(this._months)\n ? this._months[m.month()]\n : this._months[\n (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n ? 'format'\n : 'standalone'\n ][m.month()];\n }\n\n function localeMonthsShort(m, format) {\n if (!m) {\n return isArray(this._monthsShort)\n ? this._monthsShort\n : this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort)\n ? this._monthsShort[m.month()]\n : this._monthsShort[\n MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n ][m.month()];\n }\n\n function handleStrictParse(monthName, format, strict) {\n var i,\n ii,\n mom,\n llc = monthName.toLocaleLowerCase();\n if (!this._monthsParse) {\n // this is not used\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n for (i = 0; i < 12; ++i) {\n mom = createUTC([2000, i]);\n this._shortMonthsParse[i] = this.monthsShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeMonthsParse(monthName, format, strict) {\n var i, mom, regex;\n\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\n\n if (!this._monthsParse) {\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n }\n\n // TODO: add sorting\n // Sorting makes sure if one month (or abbr) is a prefix of another\n // see sorting in computeMonthsParse\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n if (strict && !this._longMonthsParse[i]) {\n this._longMonthsParse[i] = new RegExp(\n '^' + this.months(mom, '').replace('.', '') + '$',\n 'i'\n );\n this._shortMonthsParse[i] = new RegExp(\n '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n 'i'\n );\n }\n if (!strict && !this._monthsParse[i]) {\n regex =\n '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'MMMM' &&\n this._longMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'MMM' &&\n this._shortMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function setMonth(mom, value) {\n var dayOfMonth;\n\n if (!mom.isValid()) {\n // No op\n return mom;\n }\n\n if (typeof value === 'string') {\n if (/^\\d+$/.test(value)) {\n value = toInt(value);\n } else {\n value = mom.localeData().monthsParse(value);\n // TODO: Another silent failure?\n if (!isNumber(value)) {\n return mom;\n }\n }\n }\n\n dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n return mom;\n }\n\n function getSetMonth(value) {\n if (value != null) {\n setMonth(this, value);\n hooks.updateOffset(this, true);\n return this;\n } else {\n return get(this, 'Month');\n }\n }\n\n function getDaysInMonth() {\n return daysInMonth(this.year(), this.month());\n }\n\n function monthsShortRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsShortStrictRegex;\n } else {\n return this._monthsShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsShortRegex')) {\n this._monthsShortRegex = defaultMonthsShortRegex;\n }\n return this._monthsShortStrictRegex && isStrict\n ? this._monthsShortStrictRegex\n : this._monthsShortRegex;\n }\n }\n\n function monthsRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsStrictRegex;\n } else {\n return this._monthsRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsRegex')) {\n this._monthsRegex = defaultMonthsRegex;\n }\n return this._monthsStrictRegex && isStrict\n ? this._monthsStrictRegex\n : this._monthsRegex;\n }\n }\n\n function computeMonthsParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom;\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n shortPieces.push(this.monthsShort(mom, ''));\n longPieces.push(this.months(mom, ''));\n mixedPieces.push(this.months(mom, ''));\n mixedPieces.push(this.monthsShort(mom, ''));\n }\n // Sorting makes sure if one month (or abbr) is a prefix of another it\n // will match the longer piece.\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n for (i = 0; i < 12; i++) {\n shortPieces[i] = regexEscape(shortPieces[i]);\n longPieces[i] = regexEscape(longPieces[i]);\n }\n for (i = 0; i < 24; i++) {\n mixedPieces[i] = regexEscape(mixedPieces[i]);\n }\n\n this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._monthsShortRegex = this._monthsRegex;\n this._monthsStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._monthsShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken('Y', 0, 0, function () {\n var y = this.year();\n return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n });\n\n addFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\n });\n\n addFormatToken(0, ['YYYY', 4], 0, 'year');\n addFormatToken(0, ['YYYYY', 5], 0, 'year');\n addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n // ALIASES\n\n addUnitAlias('year', 'y');\n\n // PRIORITIES\n\n addUnitPriority('year', 1);\n\n // PARSING\n\n addRegexToken('Y', matchSigned);\n addRegexToken('YY', match1to2, match2);\n addRegexToken('YYYY', match1to4, match4);\n addRegexToken('YYYYY', match1to6, match6);\n addRegexToken('YYYYYY', match1to6, match6);\n\n addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n addParseToken('YYYY', function (input, array) {\n array[YEAR] =\n input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n });\n addParseToken('YY', function (input, array) {\n array[YEAR] = hooks.parseTwoDigitYear(input);\n });\n addParseToken('Y', function (input, array) {\n array[YEAR] = parseInt(input, 10);\n });\n\n // HELPERS\n\n function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n }\n\n // HOOKS\n\n hooks.parseTwoDigitYear = function (input) {\n return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n };\n\n // MOMENTS\n\n var getSetYear = makeGetSet('FullYear', true);\n\n function getIsLeapYear() {\n return isLeapYear(this.year());\n }\n\n function createDate(y, m, d, h, M, s, ms) {\n // can't just apply() to create a date:\n // https://stackoverflow.com/q/181348\n var date;\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n date = new Date(y + 400, m, d, h, M, s, ms);\n if (isFinite(date.getFullYear())) {\n date.setFullYear(y);\n }\n } else {\n date = new Date(y, m, d, h, M, s, ms);\n }\n\n return date;\n }\n\n function createUTCDate(y) {\n var date, args;\n // the Date.UTC function remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n args = Array.prototype.slice.call(arguments);\n // preserve leap years using a full 400 year cycle, then reset\n args[0] = y + 400;\n date = new Date(Date.UTC.apply(null, args));\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(y);\n }\n } else {\n date = new Date(Date.UTC.apply(null, arguments));\n }\n\n return date;\n }\n\n // start-of-first-week - start-of-year\n function firstWeekOffset(year, dow, doy) {\n var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n fwd = 7 + dow - doy,\n // first-week day local weekday -- which local weekday is fwd\n fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n return -fwdlw + fwd - 1;\n }\n\n // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n var localWeekday = (7 + weekday - dow) % 7,\n weekOffset = firstWeekOffset(year, dow, doy),\n dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n resYear,\n resDayOfYear;\n\n if (dayOfYear <= 0) {\n resYear = year - 1;\n resDayOfYear = daysInYear(resYear) + dayOfYear;\n } else if (dayOfYear > daysInYear(year)) {\n resYear = year + 1;\n resDayOfYear = dayOfYear - daysInYear(year);\n } else {\n resYear = year;\n resDayOfYear = dayOfYear;\n }\n\n return {\n year: resYear,\n dayOfYear: resDayOfYear,\n };\n }\n\n function weekOfYear(mom, dow, doy) {\n var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n resWeek,\n resYear;\n\n if (week < 1) {\n resYear = mom.year() - 1;\n resWeek = week + weeksInYear(resYear, dow, doy);\n } else if (week > weeksInYear(mom.year(), dow, doy)) {\n resWeek = week - weeksInYear(mom.year(), dow, doy);\n resYear = mom.year() + 1;\n } else {\n resYear = mom.year();\n resWeek = week;\n }\n\n return {\n week: resWeek,\n year: resYear,\n };\n }\n\n function weeksInYear(year, dow, doy) {\n var weekOffset = firstWeekOffset(year, dow, doy),\n weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n }\n\n // FORMATTING\n\n addFormatToken('w', ['ww', 2], 'wo', 'week');\n addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n // ALIASES\n\n addUnitAlias('week', 'w');\n addUnitAlias('isoWeek', 'W');\n\n // PRIORITIES\n\n addUnitPriority('week', 5);\n addUnitPriority('isoWeek', 5);\n\n // PARSING\n\n addRegexToken('w', match1to2);\n addRegexToken('ww', match1to2, match2);\n addRegexToken('W', match1to2);\n addRegexToken('WW', match1to2, match2);\n\n addWeekParseToken(\n ['w', 'ww', 'W', 'WW'],\n function (input, week, config, token) {\n week[token.substr(0, 1)] = toInt(input);\n }\n );\n\n // HELPERS\n\n // LOCALES\n\n function localeWeek(mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n }\n\n var defaultLocaleWeek = {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n };\n\n function localeFirstDayOfWeek() {\n return this._week.dow;\n }\n\n function localeFirstDayOfYear() {\n return this._week.doy;\n }\n\n // MOMENTS\n\n function getSetWeek(input) {\n var week = this.localeData().week(this);\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n function getSetISOWeek(input) {\n var week = weekOfYear(this, 1, 4).week;\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('d', 0, 'do', 'day');\n\n addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n });\n\n addFormatToken('e', 0, 0, 'weekday');\n addFormatToken('E', 0, 0, 'isoWeekday');\n\n // ALIASES\n\n addUnitAlias('day', 'd');\n addUnitAlias('weekday', 'e');\n addUnitAlias('isoWeekday', 'E');\n\n // PRIORITY\n addUnitPriority('day', 11);\n addUnitPriority('weekday', 11);\n addUnitPriority('isoWeekday', 11);\n\n // PARSING\n\n addRegexToken('d', match1to2);\n addRegexToken('e', match1to2);\n addRegexToken('E', match1to2);\n addRegexToken('dd', function (isStrict, locale) {\n return locale.weekdaysMinRegex(isStrict);\n });\n addRegexToken('ddd', function (isStrict, locale) {\n return locale.weekdaysShortRegex(isStrict);\n });\n addRegexToken('dddd', function (isStrict, locale) {\n return locale.weekdaysRegex(isStrict);\n });\n\n addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n var weekday = config._locale.weekdaysParse(input, token, config._strict);\n // if we didn't get a weekday name, mark the date as invalid\n if (weekday != null) {\n week.d = weekday;\n } else {\n getParsingFlags(config).invalidWeekday = input;\n }\n });\n\n addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n week[token] = toInt(input);\n });\n\n // HELPERS\n\n function parseWeekday(input, locale) {\n if (typeof input !== 'string') {\n return input;\n }\n\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n\n return null;\n }\n\n function parseIsoWeekday(input, locale) {\n if (typeof input === 'string') {\n return locale.weekdaysParse(input) % 7 || 7;\n }\n return isNaN(input) ? null : input;\n }\n\n // LOCALES\n function shiftWeekdays(ws, n) {\n return ws.slice(n, 7).concat(ws.slice(0, n));\n }\n\n var defaultLocaleWeekdays =\n 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n defaultWeekdaysRegex = matchWord,\n defaultWeekdaysShortRegex = matchWord,\n defaultWeekdaysMinRegex = matchWord;\n\n function localeWeekdays(m, format) {\n var weekdays = isArray(this._weekdays)\n ? this._weekdays\n : this._weekdays[\n m && m !== true && this._weekdays.isFormat.test(format)\n ? 'format'\n : 'standalone'\n ];\n return m === true\n ? shiftWeekdays(weekdays, this._week.dow)\n : m\n ? weekdays[m.day()]\n : weekdays;\n }\n\n function localeWeekdaysShort(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n : m\n ? this._weekdaysShort[m.day()]\n : this._weekdaysShort;\n }\n\n function localeWeekdaysMin(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n : m\n ? this._weekdaysMin[m.day()]\n : this._weekdaysMin;\n }\n\n function handleStrictParse$1(weekdayName, format, strict) {\n var i,\n ii,\n mom,\n llc = weekdayName.toLocaleLowerCase();\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._minWeekdaysParse = [];\n\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(\n mom,\n ''\n ).toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeWeekdaysParse(weekdayName, format, strict) {\n var i, mom, regex;\n\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\n\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n\n mom = createUTC([2000, 1]).day(i);\n if (strict && !this._fullWeekdaysParse[i]) {\n this._fullWeekdaysParse[i] = new RegExp(\n '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._shortWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._minWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n }\n if (!this._weekdaysParse[i]) {\n regex =\n '^' +\n this.weekdays(mom, '') +\n '|^' +\n this.weekdaysShort(mom, '') +\n '|^' +\n this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'dddd' &&\n this._fullWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'ddd' &&\n this._shortWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'dd' &&\n this._minWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function getSetDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n if (input != null) {\n input = parseWeekday(input, this.localeData());\n return this.add(input - day, 'd');\n } else {\n return day;\n }\n }\n\n function getSetLocaleDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n return input == null ? weekday : this.add(input - weekday, 'd');\n }\n\n function getSetISODayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n // behaves the same as moment#day except\n // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n // as a setter, sunday should belong to the previous week.\n\n if (input != null) {\n var weekday = parseIsoWeekday(input, this.localeData());\n return this.day(this.day() % 7 ? weekday : weekday - 7);\n } else {\n return this.day() || 7;\n }\n }\n\n function weekdaysRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysStrictRegex;\n } else {\n return this._weekdaysRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n this._weekdaysRegex = defaultWeekdaysRegex;\n }\n return this._weekdaysStrictRegex && isStrict\n ? this._weekdaysStrictRegex\n : this._weekdaysRegex;\n }\n }\n\n function weekdaysShortRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysShortStrictRegex;\n } else {\n return this._weekdaysShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n }\n return this._weekdaysShortStrictRegex && isStrict\n ? this._weekdaysShortStrictRegex\n : this._weekdaysShortRegex;\n }\n }\n\n function weekdaysMinRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysMinStrictRegex;\n } else {\n return this._weekdaysMinRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n }\n return this._weekdaysMinStrictRegex && isStrict\n ? this._weekdaysMinStrictRegex\n : this._weekdaysMinRegex;\n }\n }\n\n function computeWeekdaysParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var minPieces = [],\n shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n minp,\n shortp,\n longp;\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, 1]).day(i);\n minp = regexEscape(this.weekdaysMin(mom, ''));\n shortp = regexEscape(this.weekdaysShort(mom, ''));\n longp = regexEscape(this.weekdays(mom, ''));\n minPieces.push(minp);\n shortPieces.push(shortp);\n longPieces.push(longp);\n mixedPieces.push(minp);\n mixedPieces.push(shortp);\n mixedPieces.push(longp);\n }\n // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n // will match the longer piece.\n minPieces.sort(cmpLenRev);\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n\n this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._weekdaysShortRegex = this._weekdaysRegex;\n this._weekdaysMinRegex = this._weekdaysRegex;\n\n this._weekdaysStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysMinStrictRegex = new RegExp(\n '^(' + minPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n function hFormat() {\n return this.hours() % 12 || 12;\n }\n\n function kFormat() {\n return this.hours() || 24;\n }\n\n addFormatToken('H', ['HH', 2], 0, 'hour');\n addFormatToken('h', ['hh', 2], 0, hFormat);\n addFormatToken('k', ['kk', 2], 0, kFormat);\n\n addFormatToken('hmm', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('hmmss', 0, 0, function () {\n return (\n '' +\n hFormat.apply(this) +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n addFormatToken('Hmm', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('Hmmss', 0, 0, function () {\n return (\n '' +\n this.hours() +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n function meridiem(token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(\n this.hours(),\n this.minutes(),\n lowercase\n );\n });\n }\n\n meridiem('a', true);\n meridiem('A', false);\n\n // ALIASES\n\n addUnitAlias('hour', 'h');\n\n // PRIORITY\n addUnitPriority('hour', 13);\n\n // PARSING\n\n function matchMeridiem(isStrict, locale) {\n return locale._meridiemParse;\n }\n\n addRegexToken('a', matchMeridiem);\n addRegexToken('A', matchMeridiem);\n addRegexToken('H', match1to2);\n addRegexToken('h', match1to2);\n addRegexToken('k', match1to2);\n addRegexToken('HH', match1to2, match2);\n addRegexToken('hh', match1to2, match2);\n addRegexToken('kk', match1to2, match2);\n\n addRegexToken('hmm', match3to4);\n addRegexToken('hmmss', match5to6);\n addRegexToken('Hmm', match3to4);\n addRegexToken('Hmmss', match5to6);\n\n addParseToken(['H', 'HH'], HOUR);\n addParseToken(['k', 'kk'], function (input, array, config) {\n var kInput = toInt(input);\n array[HOUR] = kInput === 24 ? 0 : kInput;\n });\n addParseToken(['a', 'A'], function (input, array, config) {\n config._isPm = config._locale.isPM(input);\n config._meridiem = input;\n });\n addParseToken(['h', 'hh'], function (input, array, config) {\n array[HOUR] = toInt(input);\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('Hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n });\n addParseToken('Hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n });\n\n // LOCALES\n\n function localeIsPM(input) {\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n // Using charAt should be more compatible.\n return (input + '').toLowerCase().charAt(0) === 'p';\n }\n\n var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n // Setting the hour should keep the time, because the user explicitly\n // specified which hour they want. So trying to maintain the same hour (in\n // a new timezone) makes sense. Adding/subtracting hours does not follow\n // this rule.\n getSetHour = makeGetSet('Hours', true);\n\n function localeMeridiem(hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n }\n\n var baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n\n week: defaultLocaleWeek,\n\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n\n meridiemParse: defaultLocaleMeridiemParse,\n };\n\n // internal storage for locale config files\n var locales = {},\n localeFamilies = {},\n globalLocale;\n\n function commonPrefix(arr1, arr2) {\n var i,\n minl = Math.min(arr1.length, arr2.length);\n for (i = 0; i < minl; i += 1) {\n if (arr1[i] !== arr2[i]) {\n return i;\n }\n }\n return minl;\n }\n\n function normalizeLocale(key) {\n return key ? key.toLowerCase().replace('_', '-') : key;\n }\n\n // pick the locale from the array\n // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n function chooseLocale(names) {\n var i = 0,\n j,\n next,\n locale,\n split;\n\n while (i < names.length) {\n split = normalizeLocale(names[i]).split('-');\n j = split.length;\n next = normalizeLocale(names[i + 1]);\n next = next ? next.split('-') : null;\n while (j > 0) {\n locale = loadLocale(split.slice(0, j).join('-'));\n if (locale) {\n return locale;\n }\n if (\n next &&\n next.length >= j &&\n commonPrefix(split, next) >= j - 1\n ) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n j--;\n }\n i++;\n }\n return globalLocale;\n }\n\n function isLocaleNameSane(name) {\n // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n return name.match('^[^/\\\\\\\\]*$') != null;\n }\n\n function loadLocale(name) {\n var oldLocale = null,\n aliasedRequire;\n // TODO: Find a better way to register and load all the locales in Node\n if (\n locales[name] === undefined &&\n typeof module !== 'undefined' &&\n module &&\n module.exports &&\n isLocaleNameSane(name)\n ) {\n try {\n oldLocale = globalLocale._abbr;\n aliasedRequire = require;\n aliasedRequire('./locale/' + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {\n // mark as not found to avoid repeating expensive file require call causing high CPU\n // when trying to find en-US, en_US, en-us for every format call\n locales[name] = null; // null means not found\n }\n }\n return locales[name];\n }\n\n // This function will load locale and then set the global locale. If\n // no arguments are passed in, it will simply return the current global\n // locale key.\n function getSetGlobalLocale(key, values) {\n var data;\n if (key) {\n if (isUndefined(values)) {\n data = getLocale(key);\n } else {\n data = defineLocale(key, values);\n }\n\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n } else {\n if (typeof console !== 'undefined' && console.warn) {\n //warn user if arguments are passed but the locale could not be set\n console.warn(\n 'Locale ' + key + ' not found. Did you forget to load it?'\n );\n }\n }\n }\n\n return globalLocale._abbr;\n }\n\n function defineLocale(name, config) {\n if (config !== null) {\n var locale,\n parentConfig = baseConfig;\n config.abbr = name;\n if (locales[name] != null) {\n deprecateSimple(\n 'defineLocaleOverride',\n 'use moment.updateLocale(localeName, config) to change ' +\n 'an existing locale. moment.defineLocale(localeName, ' +\n 'config) should only be used for creating a new locale ' +\n 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n );\n parentConfig = locales[name]._config;\n } else if (config.parentLocale != null) {\n if (locales[config.parentLocale] != null) {\n parentConfig = locales[config.parentLocale]._config;\n } else {\n locale = loadLocale(config.parentLocale);\n if (locale != null) {\n parentConfig = locale._config;\n } else {\n if (!localeFamilies[config.parentLocale]) {\n localeFamilies[config.parentLocale] = [];\n }\n localeFamilies[config.parentLocale].push({\n name: name,\n config: config,\n });\n return null;\n }\n }\n }\n locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n if (localeFamilies[name]) {\n localeFamilies[name].forEach(function (x) {\n defineLocale(x.name, x.config);\n });\n }\n\n // backwards compat for now: also set the locale\n // make sure we set the locale AFTER all child locales have been\n // created, so we won't end up with the child locale set.\n getSetGlobalLocale(name);\n\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n\n function updateLocale(name, config) {\n if (config != null) {\n var locale,\n tmpLocale,\n parentConfig = baseConfig;\n\n if (locales[name] != null && locales[name].parentLocale != null) {\n // Update existing child locale in-place to avoid memory-leaks\n locales[name].set(mergeConfigs(locales[name]._config, config));\n } else {\n // MERGE\n tmpLocale = loadLocale(name);\n if (tmpLocale != null) {\n parentConfig = tmpLocale._config;\n }\n config = mergeConfigs(parentConfig, config);\n if (tmpLocale == null) {\n // updateLocale is called for creating a new locale\n // Set abbr so it will have a name (getters return\n // undefined otherwise).\n config.abbr = name;\n }\n locale = new Locale(config);\n locale.parentLocale = locales[name];\n locales[name] = locale;\n }\n\n // backwards compat for now: also set the locale\n getSetGlobalLocale(name);\n } else {\n // pass null for config to unupdate, useful for tests\n if (locales[name] != null) {\n if (locales[name].parentLocale != null) {\n locales[name] = locales[name].parentLocale;\n if (name === getSetGlobalLocale()) {\n getSetGlobalLocale(name);\n }\n } else if (locales[name] != null) {\n delete locales[name];\n }\n }\n }\n return locales[name];\n }\n\n // returns locale data\n function getLocale(key) {\n var locale;\n\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n\n if (!key) {\n return globalLocale;\n }\n\n if (!isArray(key)) {\n //short-circuit everything else\n locale = loadLocale(key);\n if (locale) {\n return locale;\n }\n key = [key];\n }\n\n return chooseLocale(key);\n }\n\n function listLocales() {\n return keys(locales);\n }\n\n function checkOverflow(m) {\n var overflow,\n a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow =\n a[MONTH] < 0 || a[MONTH] > 11\n ? MONTH\n : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n ? DATE\n : a[HOUR] < 0 ||\n a[HOUR] > 24 ||\n (a[HOUR] === 24 &&\n (a[MINUTE] !== 0 ||\n a[SECOND] !== 0 ||\n a[MILLISECOND] !== 0))\n ? HOUR\n : a[MINUTE] < 0 || a[MINUTE] > 59\n ? MINUTE\n : a[SECOND] < 0 || a[SECOND] > 59\n ? SECOND\n : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n ? MILLISECOND\n : -1;\n\n if (\n getParsingFlags(m)._overflowDayOfYear &&\n (overflow < YEAR || overflow > DATE)\n ) {\n overflow = DATE;\n }\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n overflow = WEEK;\n }\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n overflow = WEEKDAY;\n }\n\n getParsingFlags(m).overflow = overflow;\n }\n\n return m;\n }\n\n // iso 8601 regex\n // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n var extendedIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n basicIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n isoDates = [\n ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n ['YYYY-DDD', /\\d{4}-\\d{3}/],\n ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n ['YYYYYYMMDD', /[+-]\\d{10}/],\n ['YYYYMMDD', /\\d{8}/],\n ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n ['YYYYDDD', /\\d{7}/],\n ['YYYYMM', /\\d{6}/, false],\n ['YYYY', /\\d{4}/, false],\n ],\n // iso time formats and regexes\n isoTimes = [\n ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n ['HH:mm', /\\d\\d:\\d\\d/],\n ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n ['HHmm', /\\d\\d\\d\\d/],\n ['HH', /\\d\\d/],\n ],\n aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n rfc2822 =\n /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n obsOffsets = {\n UT: 0,\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60,\n };\n\n // date from iso format\n function configFromISO(config) {\n var i,\n l,\n string = config._i,\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n allowTime,\n dateFormat,\n timeFormat,\n tzFormat,\n isoDatesLen = isoDates.length,\n isoTimesLen = isoTimes.length;\n\n if (match) {\n getParsingFlags(config).iso = true;\n for (i = 0, l = isoDatesLen; i < l; i++) {\n if (isoDates[i][1].exec(match[1])) {\n dateFormat = isoDates[i][0];\n allowTime = isoDates[i][2] !== false;\n break;\n }\n }\n if (dateFormat == null) {\n config._isValid = false;\n return;\n }\n if (match[3]) {\n for (i = 0, l = isoTimesLen; i < l; i++) {\n if (isoTimes[i][1].exec(match[3])) {\n // match[2] should be 'T' or space\n timeFormat = (match[2] || ' ') + isoTimes[i][0];\n break;\n }\n }\n if (timeFormat == null) {\n config._isValid = false;\n return;\n }\n }\n if (!allowTime && timeFormat != null) {\n config._isValid = false;\n return;\n }\n if (match[4]) {\n if (tzRegex.exec(match[4])) {\n tzFormat = 'Z';\n } else {\n config._isValid = false;\n return;\n }\n }\n config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n configFromStringAndFormat(config);\n } else {\n config._isValid = false;\n }\n }\n\n function extractFromRFC2822Strings(\n yearStr,\n monthStr,\n dayStr,\n hourStr,\n minuteStr,\n secondStr\n ) {\n var result = [\n untruncateYear(yearStr),\n defaultLocaleMonthsShort.indexOf(monthStr),\n parseInt(dayStr, 10),\n parseInt(hourStr, 10),\n parseInt(minuteStr, 10),\n ];\n\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n\n return result;\n }\n\n function untruncateYear(yearStr) {\n var year = parseInt(yearStr, 10);\n if (year <= 49) {\n return 2000 + year;\n } else if (year <= 999) {\n return 1900 + year;\n }\n return year;\n }\n\n function preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n .replace(/(\\s\\s+)/g, ' ')\n .replace(/^\\s\\s*/, '')\n .replace(/\\s\\s*$/, '');\n }\n\n function checkWeekday(weekdayStr, parsedInput, config) {\n if (weekdayStr) {\n // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n weekdayActual = new Date(\n parsedInput[0],\n parsedInput[1],\n parsedInput[2]\n ).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\n }\n\n function calculateOffset(obsOffset, militaryOffset, numOffset) {\n if (obsOffset) {\n return obsOffsets[obsOffset];\n } else if (militaryOffset) {\n // the only allowed military tz is Z\n return 0;\n } else {\n var hm = parseInt(numOffset, 10),\n m = hm % 100,\n h = (hm - m) / 100;\n return h * 60 + m;\n }\n }\n\n // date and time from ref 2822 format\n function configFromRFC2822(config) {\n var match = rfc2822.exec(preprocessRFC2822(config._i)),\n parsedArray;\n if (match) {\n parsedArray = extractFromRFC2822Strings(\n match[4],\n match[3],\n match[2],\n match[5],\n match[6],\n match[7]\n );\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n config._d = createUTCDate.apply(null, config._a);\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n getParsingFlags(config).rfc2822 = true;\n } else {\n config._isValid = false;\n }\n }\n\n // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n function configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n if (matched !== null) {\n config._d = new Date(+matched[1]);\n return;\n }\n\n configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n configFromRFC2822(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n if (config._strict) {\n config._isValid = false;\n } else {\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n }\n\n hooks.createFromInputFallback = deprecate(\n 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n }\n );\n\n // Pick the first defined of two or three arguments.\n function defaults(a, b, c) {\n if (a != null) {\n return a;\n }\n if (b != null) {\n return b;\n }\n return c;\n }\n\n function currentDateArray(config) {\n // hooks is actually the exported moment object\n var nowValue = new Date(hooks.now());\n if (config._useUTC) {\n return [\n nowValue.getUTCFullYear(),\n nowValue.getUTCMonth(),\n nowValue.getUTCDate(),\n ];\n }\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n }\n\n // convert an array to a date.\n // the array should mirror the parameters below\n // note: all values past the year are optional and will default to the lowest possible value.\n // [year, month, day , hour, minute, second, millisecond]\n function configFromArray(config) {\n var i,\n date,\n input = [],\n currentDate,\n expectedWeekday,\n yearToUse;\n\n if (config._d) {\n return;\n }\n\n currentDate = currentDateArray(config);\n\n //compute day of the year from weeks and weekdays\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n dayOfYearFromWeekInfo(config);\n }\n\n //if the day of the year is set, figure out what it is\n if (config._dayOfYear != null) {\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n if (\n config._dayOfYear > daysInYear(yearToUse) ||\n config._dayOfYear === 0\n ) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\n\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\n config._a[MONTH] = date.getUTCMonth();\n config._a[DATE] = date.getUTCDate();\n }\n\n // Default to current date.\n // * if no year, month, day of month are given, default to today\n // * if day of month is given, default month and year\n // * if month is given, default only year\n // * if year is given, don't default anything\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\n config._a[i] = input[i] = currentDate[i];\n }\n\n // Zero out whatever was not defaulted, including time\n for (; i < 7; i++) {\n config._a[i] = input[i] =\n config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (\n config._a[HOUR] === 24 &&\n config._a[MINUTE] === 0 &&\n config._a[SECOND] === 0 &&\n config._a[MILLISECOND] === 0\n ) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(\n null,\n input\n );\n expectedWeekday = config._useUTC\n ? config._d.getUTCDay()\n : config._d.getDay();\n\n // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (\n config._w &&\n typeof config._w.d !== 'undefined' &&\n config._w.d !== expectedWeekday\n ) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n w = config._w;\n if (w.GG != null || w.W != null || w.E != null) {\n dow = 1;\n doy = 4;\n\n // TODO: We need to take the current isoWeekYear, but that depends on\n // how we interpret now (local, utc, fixed offset). So create\n // a now version of current config (take local/utc/offset flags, and\n // create now).\n weekYear = defaults(\n w.GG,\n config._a[YEAR],\n weekOfYear(createLocal(), 1, 4).year\n );\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n if (weekday < 1 || weekday > 7) {\n weekdayOverflow = true;\n }\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n\n curWeek = weekOfYear(createLocal(), dow, doy);\n\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n // Default to current week.\n week = defaults(w.w, curWeek.week);\n\n if (w.d != null) {\n // weekday -- low day numbers are considered next week\n weekday = w.d;\n if (weekday < 0 || weekday > 6) {\n weekdayOverflow = true;\n }\n } else if (w.e != null) {\n // local weekday -- counting starts from beginning of week\n weekday = w.e + dow;\n if (w.e < 0 || w.e > 6) {\n weekdayOverflow = true;\n }\n } else {\n // default to beginning of week\n weekday = dow;\n }\n }\n if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n getParsingFlags(config)._overflowWeeks = true;\n } else if (weekdayOverflow != null) {\n getParsingFlags(config)._overflowWeekday = true;\n } else {\n temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n config._a[YEAR] = temp.year;\n config._dayOfYear = temp.dayOfYear;\n }\n }\n\n // constant that refers to the ISO standard\n hooks.ISO_8601 = function () {};\n\n // constant that refers to the RFC 2822 form\n hooks.RFC_2822 = function () {};\n\n // date from string and format string\n function configFromStringAndFormat(config) {\n // TODO: Move this to another part of the creation flow to prevent circular deps\n if (config._f === hooks.ISO_8601) {\n configFromISO(config);\n return;\n }\n if (config._f === hooks.RFC_2822) {\n configFromRFC2822(config);\n return;\n }\n config._a = [];\n getParsingFlags(config).empty = true;\n\n // This array is used to make a Date, either with `new Date` or `Date.UTC`\n var string = '' + config._i,\n i,\n parsedInput,\n tokens,\n token,\n skipped,\n stringLength = string.length,\n totalParsedInputLength = 0,\n era,\n tokenLen;\n\n tokens =\n expandFormat(config._f, config._locale).match(formattingTokens) || [];\n tokenLen = tokens.length;\n for (i = 0; i < tokenLen; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n [])[0];\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n string = string.slice(\n string.indexOf(parsedInput) + parsedInput.length\n );\n totalParsedInputLength += parsedInput.length;\n }\n // don't parse if it's not a known token\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n } else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n addTimeToArrayFromToken(token, parsedInput, config);\n } else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n }\n\n // add remaining unparsed input length to the string\n getParsingFlags(config).charsLeftOver =\n stringLength - totalParsedInputLength;\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n }\n\n // clear _12h flag if hour is <= 12\n if (\n config._a[HOUR] <= 12 &&\n getParsingFlags(config).bigHour === true &&\n config._a[HOUR] > 0\n ) {\n getParsingFlags(config).bigHour = undefined;\n }\n\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem;\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(\n config._locale,\n config._a[HOUR],\n config._meridiem\n );\n\n // handle era\n era = getParsingFlags(config).era;\n if (era !== null) {\n config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n }\n\n configFromArray(config);\n checkOverflow(config);\n }\n\n function meridiemFixWrap(locale, hour, meridiem) {\n var isPm;\n\n if (meridiem == null) {\n // nothing to do\n return hour;\n }\n if (locale.meridiemHour != null) {\n return locale.meridiemHour(hour, meridiem);\n } else if (locale.isPM != null) {\n // Fallback\n isPm = locale.isPM(meridiem);\n if (isPm && hour < 12) {\n hour += 12;\n }\n if (!isPm && hour === 12) {\n hour = 0;\n }\n return hour;\n } else {\n // this is not supposed to happen\n return hour;\n }\n }\n\n // date from string and array of format strings\n function configFromStringAndArray(config) {\n var tempConfig,\n bestMoment,\n scoreToBeat,\n i,\n currentScore,\n validFormatFound,\n bestFormatIsValid = false,\n configfLen = config._f.length;\n\n if (configfLen === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\n\n for (i = 0; i < configfLen; i++) {\n currentScore = 0;\n validFormatFound = false;\n tempConfig = copyConfig({}, config);\n if (config._useUTC != null) {\n tempConfig._useUTC = config._useUTC;\n }\n tempConfig._f = config._f[i];\n configFromStringAndFormat(tempConfig);\n\n if (isValid(tempConfig)) {\n validFormatFound = true;\n }\n\n // if there is any input that was not parsed add a penalty for that format\n currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n //or tokens\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n getParsingFlags(tempConfig).score = currentScore;\n\n if (!bestFormatIsValid) {\n if (\n scoreToBeat == null ||\n currentScore < scoreToBeat ||\n validFormatFound\n ) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n if (validFormatFound) {\n bestFormatIsValid = true;\n }\n }\n } else {\n if (currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n }\n }\n }\n\n extend(config, bestMoment || tempConfig);\n }\n\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n\n var i = normalizeObjectUnits(config._i),\n dayOrDate = i.day === undefined ? i.date : i.day;\n config._a = map(\n [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n function (obj) {\n return obj && parseInt(obj, 10);\n }\n );\n\n configFromArray(config);\n }\n\n function createFromConfig(config) {\n var res = new Moment(checkOverflow(prepareConfig(config)));\n if (res._nextDay) {\n // Adding is smart enough around DST\n res.add(1, 'd');\n res._nextDay = undefined;\n }\n\n return res;\n }\n\n function prepareConfig(config) {\n var input = config._i,\n format = config._f;\n\n config._locale = config._locale || getLocale(config._l);\n\n if (input === null || (format === undefined && input === '')) {\n return createInvalid({ nullInput: true });\n }\n\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\n\n if (isMoment(input)) {\n return new Moment(checkOverflow(input));\n } else if (isDate(input)) {\n config._d = input;\n } else if (isArray(format)) {\n configFromStringAndArray(config);\n } else if (format) {\n configFromStringAndFormat(config);\n } else {\n configFromInput(config);\n }\n\n if (!isValid(config)) {\n config._d = null;\n }\n\n return config;\n }\n\n function configFromInput(config) {\n var input = config._i;\n if (isUndefined(input)) {\n config._d = new Date(hooks.now());\n } else if (isDate(input)) {\n config._d = new Date(input.valueOf());\n } else if (typeof input === 'string') {\n configFromString(config);\n } else if (isArray(input)) {\n config._a = map(input.slice(0), function (obj) {\n return parseInt(obj, 10);\n });\n configFromArray(config);\n } else if (isObject(input)) {\n configFromObject(config);\n } else if (isNumber(input)) {\n // from milliseconds\n config._d = new Date(input);\n } else {\n hooks.createFromInputFallback(config);\n }\n }\n\n function createLocalOrUTC(input, format, locale, strict, isUTC) {\n var c = {};\n\n if (format === true || format === false) {\n strict = format;\n format = undefined;\n }\n\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n\n if (\n (isObject(input) && isObjectEmpty(input)) ||\n (isArray(input) && input.length === 0)\n ) {\n input = undefined;\n }\n // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n\n return createFromConfig(c);\n }\n\n function createLocal(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n\n var prototypeMin = deprecate(\n 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other < this ? this : other;\n } else {\n return createInvalid();\n }\n }\n ),\n prototypeMax = deprecate(\n 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other > this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n // Pick a moment m from moments so that m[fn](other) is true for all\n // other. This relies on the function fn to be transitive.\n //\n // moments should either be an array of moment objects or an array, whose\n // first element is an array of moment objects.\n function pickBy(fn, moments) {\n var res, i;\n if (moments.length === 1 && isArray(moments[0])) {\n moments = moments[0];\n }\n if (!moments.length) {\n return createLocal();\n }\n res = moments[0];\n for (i = 1; i < moments.length; ++i) {\n if (!moments[i].isValid() || moments[i][fn](res)) {\n res = moments[i];\n }\n }\n return res;\n }\n\n // TODO: Use [].sort instead?\n function min() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isBefore', args);\n }\n\n function max() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isAfter', args);\n }\n\n var now = function () {\n return Date.now ? Date.now() : +new Date();\n };\n\n var ordering = [\n 'year',\n 'quarter',\n 'month',\n 'week',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'millisecond',\n ];\n\n function isDurationValid(m) {\n var key,\n unitHasDecimal = false,\n i,\n orderLen = ordering.length;\n for (key in m) {\n if (\n hasOwnProp(m, key) &&\n !(\n indexOf.call(ordering, key) !== -1 &&\n (m[key] == null || !isNaN(m[key]))\n )\n ) {\n return false;\n }\n }\n\n for (i = 0; i < orderLen; ++i) {\n if (m[ordering[i]]) {\n if (unitHasDecimal) {\n return false; // only allow non-integers for smallest unit\n }\n if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n unitHasDecimal = true;\n }\n }\n }\n\n return true;\n }\n\n function isValid$1() {\n return this._isValid;\n }\n\n function createInvalid$1() {\n return createDuration(NaN);\n }\n\n function Duration(duration) {\n var normalizedInput = normalizeObjectUnits(duration),\n years = normalizedInput.year || 0,\n quarters = normalizedInput.quarter || 0,\n months = normalizedInput.month || 0,\n weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n days = normalizedInput.day || 0,\n hours = normalizedInput.hour || 0,\n minutes = normalizedInput.minute || 0,\n seconds = normalizedInput.second || 0,\n milliseconds = normalizedInput.millisecond || 0;\n\n this._isValid = isDurationValid(normalizedInput);\n\n // representation for dateAddRemove\n this._milliseconds =\n +milliseconds +\n seconds * 1e3 + // 1000\n minutes * 6e4 + // 1000 * 60\n hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n // Because of dateAddRemove treats 24 hours as different from a\n // day when working around DST, we need to store them separately\n this._days = +days + weeks * 7;\n // It is impossible to translate months into days without knowing\n // which months you are are talking about, so we have to store\n // it separately.\n this._months = +months + quarters * 3 + years * 12;\n\n this._data = {};\n\n this._locale = getLocale();\n\n this._bubble();\n }\n\n function isDuration(obj) {\n return obj instanceof Duration;\n }\n\n function absRound(number) {\n if (number < 0) {\n return Math.round(-1 * number) * -1;\n } else {\n return Math.round(number);\n }\n }\n\n // compare two arrays, return the number of differences\n function compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n for (i = 0; i < len; i++) {\n if (\n (dontConvert && array1[i] !== array2[i]) ||\n (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n ) {\n diffs++;\n }\n }\n return diffs + lengthDiff;\n }\n\n // FORMATTING\n\n function offset(token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset(),\n sign = '+';\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n return (\n sign +\n zeroFill(~~(offset / 60), 2) +\n separator +\n zeroFill(~~offset % 60, 2)\n );\n });\n }\n\n offset('Z', ':');\n offset('ZZ', '');\n\n // PARSING\n\n addRegexToken('Z', matchShortOffset);\n addRegexToken('ZZ', matchShortOffset);\n addParseToken(['Z', 'ZZ'], function (input, array, config) {\n config._useUTC = true;\n config._tzm = offsetFromString(matchShortOffset, input);\n });\n\n // HELPERS\n\n // timezone chunker\n // '+10:00' > ['10', '00']\n // '-1530' > ['-15', '30']\n var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n function offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher),\n chunk,\n parts,\n minutes;\n\n if (matches === null) {\n return null;\n }\n\n chunk = matches[matches.length - 1] || [];\n parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n }\n\n // Return a moment from input, that is local/utc/zone equivalent to model.\n function cloneWithOffset(input, model) {\n var res, diff;\n if (model._isUTC) {\n res = model.clone();\n diff =\n (isMoment(input) || isDate(input)\n ? input.valueOf()\n : createLocal(input).valueOf()) - res.valueOf();\n // Use low-level api, because this fn is low-level api.\n res._d.setTime(res._d.valueOf() + diff);\n hooks.updateOffset(res, false);\n return res;\n } else {\n return createLocal(input).local();\n }\n }\n\n function getDateOffset(m) {\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n // https://github.com/moment/moment/pull/1871\n return -Math.round(m._d.getTimezoneOffset());\n }\n\n // HOOKS\n\n // This function will be called whenever a moment is mutated.\n // It is intended to keep the offset in sync with the timezone.\n hooks.updateOffset = function () {};\n\n // MOMENTS\n\n // keepLocalTime = true means only change the timezone, without\n // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n // +0200, so we adjust the time as needed, to be valid.\n //\n // Keeping the time actually adds/subtracts (one hour)\n // from the actual represented time. That is why we call updateOffset\n // a second time. In case it wants us to change the offset again\n // _changeInProgress == true case, then we have to adjust, because\n // there is no such time in the given timezone.\n function getSetOffset(input, keepLocalTime, keepMinutes) {\n var offset = this._offset || 0,\n localAdjust;\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(matchShortOffset, input);\n if (input === null) {\n return this;\n }\n } else if (Math.abs(input) < 16 && !keepMinutes) {\n input = input * 60;\n }\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n this._offset = input;\n this._isUTC = true;\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n addSubtract(\n this,\n createDuration(input - offset, 'm'),\n 1,\n false\n );\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n }\n\n function getSetZone(input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n\n this.utcOffset(input, keepLocalTime);\n\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n\n function setOffsetToUTC(keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n\n function setOffsetToLocal(keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\n }\n\n function setOffsetToParsedOffset() {\n if (this._tzm != null) {\n this.utcOffset(this._tzm, false, true);\n } else if (typeof this._i === 'string') {\n var tZone = offsetFromString(matchOffset, this._i);\n if (tZone != null) {\n this.utcOffset(tZone);\n } else {\n this.utcOffset(0, true);\n }\n }\n return this;\n }\n\n function hasAlignedHourOffset(input) {\n if (!this.isValid()) {\n return false;\n }\n input = input ? createLocal(input).utcOffset() : 0;\n\n return (this.utcOffset() - input) % 60 === 0;\n }\n\n function isDaylightSavingTime() {\n return (\n this.utcOffset() > this.clone().month(0).utcOffset() ||\n this.utcOffset() > this.clone().month(5).utcOffset()\n );\n }\n\n function isDaylightSavingTimeShifted() {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n\n var c = {},\n other;\n\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted =\n this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n\n return this._isDSTShifted;\n }\n\n function isLocal() {\n return this.isValid() ? !this._isUTC : false;\n }\n\n function isUtcOffset() {\n return this.isValid() ? this._isUTC : false;\n }\n\n function isUtc() {\n return this.isValid() ? this._isUTC && this._offset === 0 : false;\n }\n\n // ASP.NET json date format regex\n var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n // and further modified to allow for strings containing both week and day\n isoRegex =\n /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n function createDuration(input, key) {\n var duration = input,\n // matching against regexp is expensive, do it on demand\n match = null,\n sign,\n ret,\n diffRes;\n\n if (isDuration(input)) {\n duration = {\n ms: input._milliseconds,\n d: input._days,\n M: input._months,\n };\n } else if (isNumber(input) || !isNaN(+input)) {\n duration = {};\n if (key) {\n duration[key] = +input;\n } else {\n duration.milliseconds = +input;\n }\n } else if ((match = aspNetRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: 0,\n d: toInt(match[DATE]) * sign,\n h: toInt(match[HOUR]) * sign,\n m: toInt(match[MINUTE]) * sign,\n s: toInt(match[SECOND]) * sign,\n ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n };\n } else if ((match = isoRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: parseIso(match[2], sign),\n M: parseIso(match[3], sign),\n w: parseIso(match[4], sign),\n d: parseIso(match[5], sign),\n h: parseIso(match[6], sign),\n m: parseIso(match[7], sign),\n s: parseIso(match[8], sign),\n };\n } else if (duration == null) {\n // checks for null or undefined\n duration = {};\n } else if (\n typeof duration === 'object' &&\n ('from' in duration || 'to' in duration)\n ) {\n diffRes = momentsDifference(\n createLocal(duration.from),\n createLocal(duration.to)\n );\n\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n\n ret = new Duration(duration);\n\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n\n if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n ret._isValid = input._isValid;\n }\n\n return ret;\n }\n\n createDuration.fn = Duration.prototype;\n createDuration.invalid = createInvalid$1;\n\n function parseIso(inp, sign) {\n // We'd normally use ~~inp for this, but unfortunately it also\n // converts floats to ints.\n // inp may be undefined, so careful calling replace on it.\n var res = inp && parseFloat(inp.replace(',', '.'));\n // apply sign while we're at it\n return (isNaN(res) ? 0 : res) * sign;\n }\n\n function positiveMomentsDifference(base, other) {\n var res = {};\n\n res.months =\n other.month() - base.month() + (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n\n res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n return res;\n }\n\n function momentsDifference(base, other) {\n var res;\n if (!(base.isValid() && other.isValid())) {\n return { milliseconds: 0, months: 0 };\n }\n\n other = cloneWithOffset(other, base);\n if (base.isBefore(other)) {\n res = positiveMomentsDifference(base, other);\n } else {\n res = positiveMomentsDifference(other, base);\n res.milliseconds = -res.milliseconds;\n res.months = -res.months;\n }\n\n return res;\n }\n\n // TODO: remove 'name' arg after deprecation is removed\n function createAdder(direction, name) {\n return function (val, period) {\n var dur, tmp;\n //invert the arguments, but complain about it\n if (period !== null && !isNaN(+period)) {\n deprecateSimple(\n name,\n 'moment().' +\n name +\n '(period, number) is deprecated. Please use moment().' +\n name +\n '(number, period). ' +\n 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n );\n tmp = val;\n val = period;\n period = tmp;\n }\n\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\n }\n\n function addSubtract(mom, duration, isAdding, updateOffset) {\n var milliseconds = duration._milliseconds,\n days = absRound(duration._days),\n months = absRound(duration._months);\n\n if (!mom.isValid()) {\n // No op\n return;\n }\n\n updateOffset = updateOffset == null ? true : updateOffset;\n\n if (months) {\n setMonth(mom, get(mom, 'Month') + months * isAdding);\n }\n if (days) {\n set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n }\n if (milliseconds) {\n mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n }\n if (updateOffset) {\n hooks.updateOffset(mom, days || months);\n }\n }\n\n var add = createAdder(1, 'add'),\n subtract = createAdder(-1, 'subtract');\n\n function isString(input) {\n return typeof input === 'string' || input instanceof String;\n }\n\n // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n function isMomentInput(input) {\n return (\n isMoment(input) ||\n isDate(input) ||\n isString(input) ||\n isNumber(input) ||\n isNumberOrStringArray(input) ||\n isMomentInputObject(input) ||\n input === null ||\n input === undefined\n );\n }\n\n function isMomentInputObject(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'years',\n 'year',\n 'y',\n 'months',\n 'month',\n 'M',\n 'days',\n 'day',\n 'd',\n 'dates',\n 'date',\n 'D',\n 'hours',\n 'hour',\n 'h',\n 'minutes',\n 'minute',\n 'm',\n 'seconds',\n 'second',\n 's',\n 'milliseconds',\n 'millisecond',\n 'ms',\n ],\n i,\n property,\n propertyLen = properties.length;\n\n for (i = 0; i < propertyLen; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function isNumberOrStringArray(input) {\n var arrayTest = isArray(input),\n dataTypeTest = false;\n if (arrayTest) {\n dataTypeTest =\n input.filter(function (item) {\n return !isNumber(item) && isString(input);\n }).length === 0;\n }\n return arrayTest && dataTypeTest;\n }\n\n function isCalendarSpec(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'sameDay',\n 'nextDay',\n 'lastDay',\n 'nextWeek',\n 'lastWeek',\n 'sameElse',\n ],\n i,\n property;\n\n for (i = 0; i < properties.length; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6\n ? 'sameElse'\n : diff < -1\n ? 'lastWeek'\n : diff < 0\n ? 'lastDay'\n : diff < 1\n ? 'sameDay'\n : diff < 2\n ? 'nextDay'\n : diff < 7\n ? 'nextWeek'\n : 'sameElse';\n }\n\n function calendar$1(time, formats) {\n // Support for single parameter, formats only overload to the calendar function\n if (arguments.length === 1) {\n if (!arguments[0]) {\n time = undefined;\n formats = undefined;\n } else if (isMomentInput(arguments[0])) {\n time = arguments[0];\n formats = undefined;\n } else if (isCalendarSpec(arguments[0])) {\n formats = arguments[0];\n time = undefined;\n }\n }\n // We want to compare the start of today, vs this.\n // Getting start-of-today depends on whether we're local/utc/offset or not.\n var now = time || createLocal(),\n sod = cloneWithOffset(now, this).startOf('day'),\n format = hooks.calendarFormat(this, sod) || 'sameElse',\n output =\n formats &&\n (isFunction(formats[format])\n ? formats[format].call(this, now)\n : formats[format]);\n\n return this.format(\n output || this.localeData().calendar(format, this, createLocal(now))\n );\n }\n\n function clone() {\n return new Moment(this);\n }\n\n function isAfter(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() > localInput.valueOf();\n } else {\n return localInput.valueOf() < this.clone().startOf(units).valueOf();\n }\n }\n\n function isBefore(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() < localInput.valueOf();\n } else {\n return this.clone().endOf(units).valueOf() < localInput.valueOf();\n }\n }\n\n function isBetween(from, to, units, inclusivity) {\n var localFrom = isMoment(from) ? from : createLocal(from),\n localTo = isMoment(to) ? to : createLocal(to);\n if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n return false;\n }\n inclusivity = inclusivity || '()';\n return (\n (inclusivity[0] === '('\n ? this.isAfter(localFrom, units)\n : !this.isBefore(localFrom, units)) &&\n (inclusivity[1] === ')'\n ? this.isBefore(localTo, units)\n : !this.isAfter(localTo, units))\n );\n }\n\n function isSame(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input),\n inputMs;\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() === localInput.valueOf();\n } else {\n inputMs = localInput.valueOf();\n return (\n this.clone().startOf(units).valueOf() <= inputMs &&\n inputMs <= this.clone().endOf(units).valueOf()\n );\n }\n }\n\n function isSameOrAfter(input, units) {\n return this.isSame(input, units) || this.isAfter(input, units);\n }\n\n function isSameOrBefore(input, units) {\n return this.isSame(input, units) || this.isBefore(input, units);\n }\n\n function diff(input, units, asFloat) {\n var that, zoneDelta, output;\n\n if (!this.isValid()) {\n return NaN;\n }\n\n that = cloneWithOffset(input, this);\n\n if (!that.isValid()) {\n return NaN;\n }\n\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n units = normalizeUnits(units);\n\n switch (units) {\n case 'year':\n output = monthDiff(this, that) / 12;\n break;\n case 'month':\n output = monthDiff(this, that);\n break;\n case 'quarter':\n output = monthDiff(this, that) / 3;\n break;\n case 'second':\n output = (this - that) / 1e3;\n break; // 1000\n case 'minute':\n output = (this - that) / 6e4;\n break; // 1000 * 60\n case 'hour':\n output = (this - that) / 36e5;\n break; // 1000 * 60 * 60\n case 'day':\n output = (this - that - zoneDelta) / 864e5;\n break; // 1000 * 60 * 60 * 24, negate dst\n case 'week':\n output = (this - that - zoneDelta) / 6048e5;\n break; // 1000 * 60 * 60 * 24 * 7, negate dst\n default:\n output = this - that;\n }\n\n return asFloat ? output : absFloor(output);\n }\n\n function monthDiff(a, b) {\n if (a.date() < b.date()) {\n // end-of-month calculations work correct when the start month has more\n // days than the end month.\n return -monthDiff(b, a);\n }\n // difference in months\n var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n // b is in (anchor - 1 month, anchor + 1 month)\n anchor = a.clone().add(wholeMonthDiff, 'months'),\n anchor2,\n adjust;\n\n if (b - anchor < 0) {\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor - anchor2);\n } else {\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor2 - anchor);\n }\n\n //check for negative zero, return zero if negative zero\n return -(wholeMonthDiff + adjust) || 0;\n }\n\n hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n function toString() {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n }\n\n function toISOString(keepOffset) {\n if (!this.isValid()) {\n return null;\n }\n var utc = keepOffset !== true,\n m = utc ? this.clone().utc() : this;\n if (m.year() < 0 || m.year() > 9999) {\n return formatMoment(\n m,\n utc\n ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n if (isFunction(Date.prototype.toISOString)) {\n // native implementation is ~50x faster, use it when we can\n if (utc) {\n return this.toDate().toISOString();\n } else {\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n .toISOString()\n .replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(\n m,\n utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n\n /**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\n function inspect() {\n if (!this.isValid()) {\n return 'moment.invalid(/* ' + this._i + ' */)';\n }\n var func = 'moment',\n zone = '',\n prefix,\n year,\n datetime,\n suffix;\n if (!this.isLocal()) {\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n zone = 'Z';\n }\n prefix = '[' + func + '(\"]';\n year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n datetime = '-MM-DD[T]HH:mm:ss.SSS';\n suffix = zone + '[\")]';\n\n return this.format(prefix + year + datetime + suffix);\n }\n\n function format(inputString) {\n if (!inputString) {\n inputString = this.isUtc()\n ? hooks.defaultFormatUtc\n : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n\n function from(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ to: this, from: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function fromNow(withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n }\n\n function to(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ from: this, to: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function toNow(withoutSuffix) {\n return this.to(createLocal(), withoutSuffix);\n }\n\n // If passed a locale key, it will set the locale for this\n // instance. Otherwise, it will return the locale configuration\n // variables for this instance.\n function locale(key) {\n var newLocaleData;\n\n if (key === undefined) {\n return this._locale._abbr;\n } else {\n newLocaleData = getLocale(key);\n if (newLocaleData != null) {\n this._locale = newLocaleData;\n }\n return this;\n }\n }\n\n var lang = deprecate(\n 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n }\n );\n\n function localeData() {\n return this._locale;\n }\n\n var MS_PER_SECOND = 1000,\n MS_PER_MINUTE = 60 * MS_PER_SECOND,\n MS_PER_HOUR = 60 * MS_PER_MINUTE,\n MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n // actual modulo - handles negative numbers (for dates before 1970):\n function mod$1(dividend, divisor) {\n return ((dividend % divisor) + divisor) % divisor;\n }\n\n function localStartOfDate(y, m, d) {\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return new Date(y, m, d).valueOf();\n }\n }\n\n function utcStartOfDate(y, m, d) {\n // Date.UTC remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return Date.UTC(y, m, d);\n }\n }\n\n function startOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year(), 0, 1);\n break;\n case 'quarter':\n time = startOfDate(\n this.year(),\n this.month() - (this.month() % 3),\n 1\n );\n break;\n case 'month':\n time = startOfDate(this.year(), this.month(), 1);\n break;\n case 'week':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday()\n );\n break;\n case 'isoWeek':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1)\n );\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date());\n break;\n case 'hour':\n time = this._d.valueOf();\n time -= mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n );\n break;\n case 'minute':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_MINUTE);\n break;\n case 'second':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_SECOND);\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function endOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year() + 1, 0, 1) - 1;\n break;\n case 'quarter':\n time =\n startOfDate(\n this.year(),\n this.month() - (this.month() % 3) + 3,\n 1\n ) - 1;\n break;\n case 'month':\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n break;\n case 'week':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday() + 7\n ) - 1;\n break;\n case 'isoWeek':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1) + 7\n ) - 1;\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n break;\n case 'hour':\n time = this._d.valueOf();\n time +=\n MS_PER_HOUR -\n mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n ) -\n 1;\n break;\n case 'minute':\n time = this._d.valueOf();\n time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n break;\n case 'second':\n time = this._d.valueOf();\n time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function valueOf() {\n return this._d.valueOf() - (this._offset || 0) * 60000;\n }\n\n function unix() {\n return Math.floor(this.valueOf() / 1000);\n }\n\n function toDate() {\n return new Date(this.valueOf());\n }\n\n function toArray() {\n var m = this;\n return [\n m.year(),\n m.month(),\n m.date(),\n m.hour(),\n m.minute(),\n m.second(),\n m.millisecond(),\n ];\n }\n\n function toObject() {\n var m = this;\n return {\n years: m.year(),\n months: m.month(),\n date: m.date(),\n hours: m.hours(),\n minutes: m.minutes(),\n seconds: m.seconds(),\n milliseconds: m.milliseconds(),\n };\n }\n\n function toJSON() {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n }\n\n function isValid$2() {\n return isValid(this);\n }\n\n function parsingFlags() {\n return extend({}, getParsingFlags(this));\n }\n\n function invalidAt() {\n return getParsingFlags(this).overflow;\n }\n\n function creationData() {\n return {\n input: this._i,\n format: this._f,\n locale: this._locale,\n isUTC: this._isUTC,\n strict: this._strict,\n };\n }\n\n addFormatToken('N', 0, 0, 'eraAbbr');\n addFormatToken('NN', 0, 0, 'eraAbbr');\n addFormatToken('NNN', 0, 0, 'eraAbbr');\n addFormatToken('NNNN', 0, 0, 'eraName');\n addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n addFormatToken('y', ['yy', 2], 0, 'eraYear');\n addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n addRegexToken('N', matchEraAbbr);\n addRegexToken('NN', matchEraAbbr);\n addRegexToken('NNN', matchEraAbbr);\n addRegexToken('NNNN', matchEraName);\n addRegexToken('NNNNN', matchEraNarrow);\n\n addParseToken(\n ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n function (input, array, config, token) {\n var era = config._locale.erasParse(input, token, config._strict);\n if (era) {\n getParsingFlags(config).era = era;\n } else {\n getParsingFlags(config).invalidEra = input;\n }\n }\n );\n\n addRegexToken('y', matchUnsigned);\n addRegexToken('yy', matchUnsigned);\n addRegexToken('yyy', matchUnsigned);\n addRegexToken('yyyy', matchUnsigned);\n addRegexToken('yo', matchEraYearOrdinal);\n\n addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n addParseToken(['yo'], function (input, array, config, token) {\n var match;\n if (config._locale._eraYearOrdinalRegex) {\n match = input.match(config._locale._eraYearOrdinalRegex);\n }\n\n if (config._locale.eraYearOrdinalParse) {\n array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n } else {\n array[YEAR] = parseInt(input, 10);\n }\n });\n\n function localeEras(m, format) {\n var i,\n l,\n date,\n eras = this._eras || getLocale('en')._eras;\n for (i = 0, l = eras.length; i < l; ++i) {\n switch (typeof eras[i].since) {\n case 'string':\n // truncate time\n date = hooks(eras[i].since).startOf('day');\n eras[i].since = date.valueOf();\n break;\n }\n\n switch (typeof eras[i].until) {\n case 'undefined':\n eras[i].until = +Infinity;\n break;\n case 'string':\n // truncate time\n date = hooks(eras[i].until).startOf('day').valueOf();\n eras[i].until = date.valueOf();\n break;\n }\n }\n return eras;\n }\n\n function localeErasParse(eraName, format, strict) {\n var i,\n l,\n eras = this.eras(),\n name,\n abbr,\n narrow;\n eraName = eraName.toUpperCase();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n name = eras[i].name.toUpperCase();\n abbr = eras[i].abbr.toUpperCase();\n narrow = eras[i].narrow.toUpperCase();\n\n if (strict) {\n switch (format) {\n case 'N':\n case 'NN':\n case 'NNN':\n if (abbr === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNN':\n if (name === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNNN':\n if (narrow === eraName) {\n return eras[i];\n }\n break;\n }\n } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n return eras[i];\n }\n }\n }\n\n function localeErasConvertYear(era, year) {\n var dir = era.since <= era.until ? +1 : -1;\n if (year === undefined) {\n return hooks(era.since).year();\n } else {\n return hooks(era.since).year() + (year - era.offset) * dir;\n }\n }\n\n function getEraName() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].name;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].name;\n }\n }\n\n return '';\n }\n\n function getEraNarrow() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].narrow;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].narrow;\n }\n }\n\n return '';\n }\n\n function getEraAbbr() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].abbr;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].abbr;\n }\n }\n\n return '';\n }\n\n function getEraYear() {\n var i,\n l,\n dir,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (\n (eras[i].since <= val && val <= eras[i].until) ||\n (eras[i].until <= val && val <= eras[i].since)\n ) {\n return (\n (this.year() - hooks(eras[i].since).year()) * dir +\n eras[i].offset\n );\n }\n }\n\n return this.year();\n }\n\n function erasNameRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNameRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNameRegex : this._erasRegex;\n }\n\n function erasAbbrRegex(isStrict) {\n if (!hasOwnProp(this, '_erasAbbrRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasAbbrRegex : this._erasRegex;\n }\n\n function erasNarrowRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNarrowRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNarrowRegex : this._erasRegex;\n }\n\n function matchEraAbbr(isStrict, locale) {\n return locale.erasAbbrRegex(isStrict);\n }\n\n function matchEraName(isStrict, locale) {\n return locale.erasNameRegex(isStrict);\n }\n\n function matchEraNarrow(isStrict, locale) {\n return locale.erasNarrowRegex(isStrict);\n }\n\n function matchEraYearOrdinal(isStrict, locale) {\n return locale._eraYearOrdinalRegex || matchUnsigned;\n }\n\n function computeErasParse() {\n var abbrPieces = [],\n namePieces = [],\n narrowPieces = [],\n mixedPieces = [],\n i,\n l,\n eras = this.eras();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n namePieces.push(regexEscape(eras[i].name));\n abbrPieces.push(regexEscape(eras[i].abbr));\n narrowPieces.push(regexEscape(eras[i].narrow));\n\n mixedPieces.push(regexEscape(eras[i].name));\n mixedPieces.push(regexEscape(eras[i].abbr));\n mixedPieces.push(regexEscape(eras[i].narrow));\n }\n\n this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n this._erasNarrowRegex = new RegExp(\n '^(' + narrowPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n });\n\n addFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n });\n\n function addWeekYearFormatToken(token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\n }\n\n addWeekYearFormatToken('gggg', 'weekYear');\n addWeekYearFormatToken('ggggg', 'weekYear');\n addWeekYearFormatToken('GGGG', 'isoWeekYear');\n addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n // ALIASES\n\n addUnitAlias('weekYear', 'gg');\n addUnitAlias('isoWeekYear', 'GG');\n\n // PRIORITY\n\n addUnitPriority('weekYear', 1);\n addUnitPriority('isoWeekYear', 1);\n\n // PARSING\n\n addRegexToken('G', matchSigned);\n addRegexToken('g', matchSigned);\n addRegexToken('GG', match1to2, match2);\n addRegexToken('gg', match1to2, match2);\n addRegexToken('GGGG', match1to4, match4);\n addRegexToken('gggg', match1to4, match4);\n addRegexToken('GGGGG', match1to6, match6);\n addRegexToken('ggggg', match1to6, match6);\n\n addWeekParseToken(\n ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n function (input, week, config, token) {\n week[token.substr(0, 2)] = toInt(input);\n }\n );\n\n addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n week[token] = hooks.parseTwoDigitYear(input);\n });\n\n // MOMENTS\n\n function getSetWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.week(),\n this.weekday(),\n this.localeData()._week.dow,\n this.localeData()._week.doy\n );\n }\n\n function getSetISOWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.isoWeek(),\n this.isoWeekday(),\n 1,\n 4\n );\n }\n\n function getISOWeeksInYear() {\n return weeksInYear(this.year(), 1, 4);\n }\n\n function getISOWeeksInISOWeekYear() {\n return weeksInYear(this.isoWeekYear(), 1, 4);\n }\n\n function getWeeksInYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n }\n\n function getWeeksInWeekYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n }\n\n function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n var weeksTarget;\n if (input == null) {\n return weekOfYear(this, dow, doy).year;\n } else {\n weeksTarget = weeksInYear(input, dow, doy);\n if (week > weeksTarget) {\n week = weeksTarget;\n }\n return setWeekAll.call(this, input, week, weekday, dow, doy);\n }\n }\n\n function setWeekAll(weekYear, week, weekday, dow, doy) {\n var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n this.year(date.getUTCFullYear());\n this.month(date.getUTCMonth());\n this.date(date.getUTCDate());\n return this;\n }\n\n // FORMATTING\n\n addFormatToken('Q', 0, 'Qo', 'quarter');\n\n // ALIASES\n\n addUnitAlias('quarter', 'Q');\n\n // PRIORITY\n\n addUnitPriority('quarter', 7);\n\n // PARSING\n\n addRegexToken('Q', match1);\n addParseToken('Q', function (input, array) {\n array[MONTH] = (toInt(input) - 1) * 3;\n });\n\n // MOMENTS\n\n function getSetQuarter(input) {\n return input == null\n ? Math.ceil((this.month() + 1) / 3)\n : this.month((input - 1) * 3 + (this.month() % 3));\n }\n\n // FORMATTING\n\n addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n // ALIASES\n\n addUnitAlias('date', 'D');\n\n // PRIORITY\n addUnitPriority('date', 9);\n\n // PARSING\n\n addRegexToken('D', match1to2);\n addRegexToken('DD', match1to2, match2);\n addRegexToken('Do', function (isStrict, locale) {\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n return isStrict\n ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n : locale._dayOfMonthOrdinalParseLenient;\n });\n\n addParseToken(['D', 'DD'], DATE);\n addParseToken('Do', function (input, array) {\n array[DATE] = toInt(input.match(match1to2)[0]);\n });\n\n // MOMENTS\n\n var getSetDayOfMonth = makeGetSet('Date', true);\n\n // FORMATTING\n\n addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n // ALIASES\n\n addUnitAlias('dayOfYear', 'DDD');\n\n // PRIORITY\n addUnitPriority('dayOfYear', 4);\n\n // PARSING\n\n addRegexToken('DDD', match1to3);\n addRegexToken('DDDD', match3);\n addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n config._dayOfYear = toInt(input);\n });\n\n // HELPERS\n\n // MOMENTS\n\n function getSetDayOfYear(input) {\n var dayOfYear =\n Math.round(\n (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n ) + 1;\n return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('m', ['mm', 2], 0, 'minute');\n\n // ALIASES\n\n addUnitAlias('minute', 'm');\n\n // PRIORITY\n\n addUnitPriority('minute', 14);\n\n // PARSING\n\n addRegexToken('m', match1to2);\n addRegexToken('mm', match1to2, match2);\n addParseToken(['m', 'mm'], MINUTE);\n\n // MOMENTS\n\n var getSetMinute = makeGetSet('Minutes', false);\n\n // FORMATTING\n\n addFormatToken('s', ['ss', 2], 0, 'second');\n\n // ALIASES\n\n addUnitAlias('second', 's');\n\n // PRIORITY\n\n addUnitPriority('second', 15);\n\n // PARSING\n\n addRegexToken('s', match1to2);\n addRegexToken('ss', match1to2, match2);\n addParseToken(['s', 'ss'], SECOND);\n\n // MOMENTS\n\n var getSetSecond = makeGetSet('Seconds', false);\n\n // FORMATTING\n\n addFormatToken('S', 0, 0, function () {\n return ~~(this.millisecond() / 100);\n });\n\n addFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\n });\n\n addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n addFormatToken(0, ['SSSS', 4], 0, function () {\n return this.millisecond() * 10;\n });\n addFormatToken(0, ['SSSSS', 5], 0, function () {\n return this.millisecond() * 100;\n });\n addFormatToken(0, ['SSSSSS', 6], 0, function () {\n return this.millisecond() * 1000;\n });\n addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n return this.millisecond() * 10000;\n });\n addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n return this.millisecond() * 100000;\n });\n addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n return this.millisecond() * 1000000;\n });\n\n // ALIASES\n\n addUnitAlias('millisecond', 'ms');\n\n // PRIORITY\n\n addUnitPriority('millisecond', 16);\n\n // PARSING\n\n addRegexToken('S', match1to3, match1);\n addRegexToken('SS', match1to3, match2);\n addRegexToken('SSS', match1to3, match3);\n\n var token, getSetMillisecond;\n for (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n }\n\n function parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n }\n\n for (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\n }\n\n getSetMillisecond = makeGetSet('Milliseconds', false);\n\n // FORMATTING\n\n addFormatToken('z', 0, 0, 'zoneAbbr');\n addFormatToken('zz', 0, 0, 'zoneName');\n\n // MOMENTS\n\n function getZoneAbbr() {\n return this._isUTC ? 'UTC' : '';\n }\n\n function getZoneName() {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n }\n\n var proto = Moment.prototype;\n\n proto.add = add;\n proto.calendar = calendar$1;\n proto.clone = clone;\n proto.diff = diff;\n proto.endOf = endOf;\n proto.format = format;\n proto.from = from;\n proto.fromNow = fromNow;\n proto.to = to;\n proto.toNow = toNow;\n proto.get = stringGet;\n proto.invalidAt = invalidAt;\n proto.isAfter = isAfter;\n proto.isBefore = isBefore;\n proto.isBetween = isBetween;\n proto.isSame = isSame;\n proto.isSameOrAfter = isSameOrAfter;\n proto.isSameOrBefore = isSameOrBefore;\n proto.isValid = isValid$2;\n proto.lang = lang;\n proto.locale = locale;\n proto.localeData = localeData;\n proto.max = prototypeMax;\n proto.min = prototypeMin;\n proto.parsingFlags = parsingFlags;\n proto.set = stringSet;\n proto.startOf = startOf;\n proto.subtract = subtract;\n proto.toArray = toArray;\n proto.toObject = toObject;\n proto.toDate = toDate;\n proto.toISOString = toISOString;\n proto.inspect = inspect;\n if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n return 'Moment<' + this.format() + '>';\n };\n }\n proto.toJSON = toJSON;\n proto.toString = toString;\n proto.unix = unix;\n proto.valueOf = valueOf;\n proto.creationData = creationData;\n proto.eraName = getEraName;\n proto.eraNarrow = getEraNarrow;\n proto.eraAbbr = getEraAbbr;\n proto.eraYear = getEraYear;\n proto.year = getSetYear;\n proto.isLeapYear = getIsLeapYear;\n proto.weekYear = getSetWeekYear;\n proto.isoWeekYear = getSetISOWeekYear;\n proto.quarter = proto.quarters = getSetQuarter;\n proto.month = getSetMonth;\n proto.daysInMonth = getDaysInMonth;\n proto.week = proto.weeks = getSetWeek;\n proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n proto.weeksInYear = getWeeksInYear;\n proto.weeksInWeekYear = getWeeksInWeekYear;\n proto.isoWeeksInYear = getISOWeeksInYear;\n proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n proto.date = getSetDayOfMonth;\n proto.day = proto.days = getSetDayOfWeek;\n proto.weekday = getSetLocaleDayOfWeek;\n proto.isoWeekday = getSetISODayOfWeek;\n proto.dayOfYear = getSetDayOfYear;\n proto.hour = proto.hours = getSetHour;\n proto.minute = proto.minutes = getSetMinute;\n proto.second = proto.seconds = getSetSecond;\n proto.millisecond = proto.milliseconds = getSetMillisecond;\n proto.utcOffset = getSetOffset;\n proto.utc = setOffsetToUTC;\n proto.local = setOffsetToLocal;\n proto.parseZone = setOffsetToParsedOffset;\n proto.hasAlignedHourOffset = hasAlignedHourOffset;\n proto.isDST = isDaylightSavingTime;\n proto.isLocal = isLocal;\n proto.isUtcOffset = isUtcOffset;\n proto.isUtc = isUtc;\n proto.isUTC = isUtc;\n proto.zoneAbbr = getZoneAbbr;\n proto.zoneName = getZoneName;\n proto.dates = deprecate(\n 'dates accessor is deprecated. Use date instead.',\n getSetDayOfMonth\n );\n proto.months = deprecate(\n 'months accessor is deprecated. Use month instead',\n getSetMonth\n );\n proto.years = deprecate(\n 'years accessor is deprecated. Use year instead',\n getSetYear\n );\n proto.zone = deprecate(\n 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n getSetZone\n );\n proto.isDSTShifted = deprecate(\n 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n isDaylightSavingTimeShifted\n );\n\n function createUnix(input) {\n return createLocal(input * 1000);\n }\n\n function createInZone() {\n return createLocal.apply(null, arguments).parseZone();\n }\n\n function preParsePostFormat(string) {\n return string;\n }\n\n var proto$1 = Locale.prototype;\n\n proto$1.calendar = calendar;\n proto$1.longDateFormat = longDateFormat;\n proto$1.invalidDate = invalidDate;\n proto$1.ordinal = ordinal;\n proto$1.preparse = preParsePostFormat;\n proto$1.postformat = preParsePostFormat;\n proto$1.relativeTime = relativeTime;\n proto$1.pastFuture = pastFuture;\n proto$1.set = set;\n proto$1.eras = localeEras;\n proto$1.erasParse = localeErasParse;\n proto$1.erasConvertYear = localeErasConvertYear;\n proto$1.erasAbbrRegex = erasAbbrRegex;\n proto$1.erasNameRegex = erasNameRegex;\n proto$1.erasNarrowRegex = erasNarrowRegex;\n\n proto$1.months = localeMonths;\n proto$1.monthsShort = localeMonthsShort;\n proto$1.monthsParse = localeMonthsParse;\n proto$1.monthsRegex = monthsRegex;\n proto$1.monthsShortRegex = monthsShortRegex;\n proto$1.week = localeWeek;\n proto$1.firstDayOfYear = localeFirstDayOfYear;\n proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n proto$1.weekdays = localeWeekdays;\n proto$1.weekdaysMin = localeWeekdaysMin;\n proto$1.weekdaysShort = localeWeekdaysShort;\n proto$1.weekdaysParse = localeWeekdaysParse;\n\n proto$1.weekdaysRegex = weekdaysRegex;\n proto$1.weekdaysShortRegex = weekdaysShortRegex;\n proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n proto$1.isPM = localeIsPM;\n proto$1.meridiem = localeMeridiem;\n\n function get$1(format, index, field, setter) {\n var locale = getLocale(),\n utc = createUTC().set(setter, index);\n return locale[field](utc, format);\n }\n\n function listMonthsImpl(format, index, field) {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n\n if (index != null) {\n return get$1(format, index, field, 'month');\n }\n\n var i,\n out = [];\n for (i = 0; i < 12; i++) {\n out[i] = get$1(format, i, field, 'month');\n }\n return out;\n }\n\n // ()\n // (5)\n // (fmt, 5)\n // (fmt)\n // (true)\n // (true, 5)\n // (true, fmt, 5)\n // (true, fmt)\n function listWeekdaysImpl(localeSorted, format, index, field) {\n if (typeof localeSorted === 'boolean') {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n } else {\n format = localeSorted;\n index = format;\n localeSorted = false;\n\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n }\n\n var locale = getLocale(),\n shift = localeSorted ? locale._week.dow : 0,\n i,\n out = [];\n\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\n }\n\n for (i = 0; i < 7; i++) {\n out[i] = get$1(format, (i + shift) % 7, field, 'day');\n }\n return out;\n }\n\n function listMonths(format, index) {\n return listMonthsImpl(format, index, 'months');\n }\n\n function listMonthsShort(format, index) {\n return listMonthsImpl(format, index, 'monthsShort');\n }\n\n function listWeekdays(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n }\n\n function listWeekdaysShort(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n }\n\n function listWeekdaysMin(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n }\n\n getSetGlobalLocale('en', {\n eras: [\n {\n since: '0001-01-01',\n until: +Infinity,\n offset: 1,\n name: 'Anno Domini',\n narrow: 'AD',\n abbr: 'AD',\n },\n {\n since: '0000-12-31',\n until: -Infinity,\n offset: 1,\n name: 'Before Christ',\n narrow: 'BC',\n abbr: 'BC',\n },\n ],\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n toInt((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n });\n\n // Side effect imports\n\n hooks.lang = deprecate(\n 'moment.lang is deprecated. Use moment.locale instead.',\n getSetGlobalLocale\n );\n hooks.langData = deprecate(\n 'moment.langData is deprecated. Use moment.localeData instead.',\n getLocale\n );\n\n var mathAbs = Math.abs;\n\n function abs() {\n var data = this._data;\n\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\n\n data.milliseconds = mathAbs(data.milliseconds);\n data.seconds = mathAbs(data.seconds);\n data.minutes = mathAbs(data.minutes);\n data.hours = mathAbs(data.hours);\n data.months = mathAbs(data.months);\n data.years = mathAbs(data.years);\n\n return this;\n }\n\n function addSubtract$1(duration, input, value, direction) {\n var other = createDuration(input, value);\n\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\n\n return duration._bubble();\n }\n\n // supports only 2.0-style add(1, 's') or add(duration)\n function add$1(input, value) {\n return addSubtract$1(this, input, value, 1);\n }\n\n // supports only 2.0-style subtract(1, 's') or subtract(duration)\n function subtract$1(input, value) {\n return addSubtract$1(this, input, value, -1);\n }\n\n function absCeil(number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\n }\n }\n\n function bubble() {\n var milliseconds = this._milliseconds,\n days = this._days,\n months = this._months,\n data = this._data,\n seconds,\n minutes,\n hours,\n years,\n monthsFromDays;\n\n // if we have a mix of positive and negative values, bubble down first\n // check: https://github.com/moment/moment/issues/2166\n if (\n !(\n (milliseconds >= 0 && days >= 0 && months >= 0) ||\n (milliseconds <= 0 && days <= 0 && months <= 0)\n )\n ) {\n milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n days = 0;\n months = 0;\n }\n\n // The following code bubbles up values, see the tests for\n // examples of what that means.\n data.milliseconds = milliseconds % 1000;\n\n seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\n\n days += absFloor(hours / 24);\n\n // convert days to months\n monthsFromDays = absFloor(daysToMonths(days));\n months += monthsFromDays;\n days -= absCeil(monthsToDays(monthsFromDays));\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n data.days = days;\n data.months = months;\n data.years = years;\n\n return this;\n }\n\n function daysToMonths(days) {\n // 400 years have 146097 days (taking into account leap year rules)\n // 400 years have 12 months === 4800\n return (days * 4800) / 146097;\n }\n\n function monthsToDays(months) {\n // the reverse of daysToMonths\n return (months * 146097) / 4800;\n }\n\n function as(units) {\n if (!this.isValid()) {\n return NaN;\n }\n var days,\n months,\n milliseconds = this._milliseconds;\n\n units = normalizeUnits(units);\n\n if (units === 'month' || units === 'quarter' || units === 'year') {\n days = this._days + milliseconds / 864e5;\n months = this._months + daysToMonths(days);\n switch (units) {\n case 'month':\n return months;\n case 'quarter':\n return months / 3;\n case 'year':\n return months / 12;\n }\n } else {\n // handle milliseconds separately because of floating point math errors (issue #1867)\n days = this._days + Math.round(monthsToDays(this._months));\n switch (units) {\n case 'week':\n return days / 7 + milliseconds / 6048e5;\n case 'day':\n return days + milliseconds / 864e5;\n case 'hour':\n return days * 24 + milliseconds / 36e5;\n case 'minute':\n return days * 1440 + milliseconds / 6e4;\n case 'second':\n return days * 86400 + milliseconds / 1000;\n // Math.floor prevents floating point math errors here\n case 'millisecond':\n return Math.floor(days * 864e5) + milliseconds;\n default:\n throw new Error('Unknown unit ' + units);\n }\n }\n }\n\n // TODO: Use this.as('ms')?\n function valueOf$1() {\n if (!this.isValid()) {\n return NaN;\n }\n return (\n this._milliseconds +\n this._days * 864e5 +\n (this._months % 12) * 2592e6 +\n toInt(this._months / 12) * 31536e6\n );\n }\n\n function makeAs(alias) {\n return function () {\n return this.as(alias);\n };\n }\n\n var asMilliseconds = makeAs('ms'),\n asSeconds = makeAs('s'),\n asMinutes = makeAs('m'),\n asHours = makeAs('h'),\n asDays = makeAs('d'),\n asWeeks = makeAs('w'),\n asMonths = makeAs('M'),\n asQuarters = makeAs('Q'),\n asYears = makeAs('y');\n\n function clone$1() {\n return createDuration(this);\n }\n\n function get$2(units) {\n units = normalizeUnits(units);\n return this.isValid() ? this[units + 's']() : NaN;\n }\n\n function makeGetter(name) {\n return function () {\n return this.isValid() ? this._data[name] : NaN;\n };\n }\n\n var milliseconds = makeGetter('milliseconds'),\n seconds = makeGetter('seconds'),\n minutes = makeGetter('minutes'),\n hours = makeGetter('hours'),\n days = makeGetter('days'),\n months = makeGetter('months'),\n years = makeGetter('years');\n\n function weeks() {\n return absFloor(this.days() / 7);\n }\n\n var round = Math.round,\n thresholds = {\n ss: 44, // a few seconds to seconds\n s: 45, // seconds to minute\n m: 45, // minutes to hour\n h: 22, // hours to day\n d: 26, // days to month/week\n w: null, // weeks to month\n M: 11, // months to year\n };\n\n // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n }\n\n function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n var duration = createDuration(posNegDuration).abs(),\n seconds = round(duration.as('s')),\n minutes = round(duration.as('m')),\n hours = round(duration.as('h')),\n days = round(duration.as('d')),\n months = round(duration.as('M')),\n weeks = round(duration.as('w')),\n years = round(duration.as('y')),\n a =\n (seconds <= thresholds.ss && ['s', seconds]) ||\n (seconds < thresholds.s && ['ss', seconds]) ||\n (minutes <= 1 && ['m']) ||\n (minutes < thresholds.m && ['mm', minutes]) ||\n (hours <= 1 && ['h']) ||\n (hours < thresholds.h && ['hh', hours]) ||\n (days <= 1 && ['d']) ||\n (days < thresholds.d && ['dd', days]);\n\n if (thresholds.w != null) {\n a =\n a ||\n (weeks <= 1 && ['w']) ||\n (weeks < thresholds.w && ['ww', weeks]);\n }\n a = a ||\n (months <= 1 && ['M']) ||\n (months < thresholds.M && ['MM', months]) ||\n (years <= 1 && ['y']) || ['yy', years];\n\n a[2] = withoutSuffix;\n a[3] = +posNegDuration > 0;\n a[4] = locale;\n return substituteTimeAgo.apply(null, a);\n }\n\n // This function allows you to set the rounding function for relative time strings\n function getSetRelativeTimeRounding(roundingFunction) {\n if (roundingFunction === undefined) {\n return round;\n }\n if (typeof roundingFunction === 'function') {\n round = roundingFunction;\n return true;\n }\n return false;\n }\n\n // This function allows you to set a threshold for relative time strings\n function getSetRelativeTimeThreshold(threshold, limit) {\n if (thresholds[threshold] === undefined) {\n return false;\n }\n if (limit === undefined) {\n return thresholds[threshold];\n }\n thresholds[threshold] = limit;\n if (threshold === 's') {\n thresholds.ss = limit - 1;\n }\n return true;\n }\n\n function humanize(argWithSuffix, argThresholds) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var withSuffix = false,\n th = thresholds,\n locale,\n output;\n\n if (typeof argWithSuffix === 'object') {\n argThresholds = argWithSuffix;\n argWithSuffix = false;\n }\n if (typeof argWithSuffix === 'boolean') {\n withSuffix = argWithSuffix;\n }\n if (typeof argThresholds === 'object') {\n th = Object.assign({}, thresholds, argThresholds);\n if (argThresholds.s != null && argThresholds.ss == null) {\n th.ss = argThresholds.s - 1;\n }\n }\n\n locale = this.localeData();\n output = relativeTime$1(this, !withSuffix, th, locale);\n\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n\n return locale.postformat(output);\n }\n\n var abs$1 = Math.abs;\n\n function sign(x) {\n return (x > 0) - (x < 0) || +x;\n }\n\n function toISOString$1() {\n // for ISO strings we do not use the normal bubbling rules:\n // * milliseconds bubble up until they become hours\n // * days do not bubble at all\n // * months bubble up until they become years\n // This is because there is no context-free conversion between hours and days\n // (think of clock changes)\n // and also not between days and months (28-31 days per month)\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var seconds = abs$1(this._milliseconds) / 1000,\n days = abs$1(this._days),\n months = abs$1(this._months),\n minutes,\n hours,\n years,\n s,\n total = this.asSeconds(),\n totalSign,\n ymSign,\n daysSign,\n hmsSign;\n\n if (!total) {\n // this is the same as C#'s (Noda) and python (isodate)...\n // but not other JS (goog.date)\n return 'P0D';\n }\n\n // 3600 seconds -> 60 minutes -> 1 hour\n minutes = absFloor(seconds / 60);\n hours = absFloor(minutes / 60);\n seconds %= 60;\n minutes %= 60;\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n totalSign = total < 0 ? '-' : '';\n ymSign = sign(this._months) !== sign(total) ? '-' : '';\n daysSign = sign(this._days) !== sign(total) ? '-' : '';\n hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n return (\n totalSign +\n 'P' +\n (years ? ymSign + years + 'Y' : '') +\n (months ? ymSign + months + 'M' : '') +\n (days ? daysSign + days + 'D' : '') +\n (hours || minutes || seconds ? 'T' : '') +\n (hours ? hmsSign + hours + 'H' : '') +\n (minutes ? hmsSign + minutes + 'M' : '') +\n (seconds ? hmsSign + s + 'S' : '')\n );\n }\n\n var proto$2 = Duration.prototype;\n\n proto$2.isValid = isValid$1;\n proto$2.abs = abs;\n proto$2.add = add$1;\n proto$2.subtract = subtract$1;\n proto$2.as = as;\n proto$2.asMilliseconds = asMilliseconds;\n proto$2.asSeconds = asSeconds;\n proto$2.asMinutes = asMinutes;\n proto$2.asHours = asHours;\n proto$2.asDays = asDays;\n proto$2.asWeeks = asWeeks;\n proto$2.asMonths = asMonths;\n proto$2.asQuarters = asQuarters;\n proto$2.asYears = asYears;\n proto$2.valueOf = valueOf$1;\n proto$2._bubble = bubble;\n proto$2.clone = clone$1;\n proto$2.get = get$2;\n proto$2.milliseconds = milliseconds;\n proto$2.seconds = seconds;\n proto$2.minutes = minutes;\n proto$2.hours = hours;\n proto$2.days = days;\n proto$2.weeks = weeks;\n proto$2.months = months;\n proto$2.years = years;\n proto$2.humanize = humanize;\n proto$2.toISOString = toISOString$1;\n proto$2.toString = toISOString$1;\n proto$2.toJSON = toISOString$1;\n proto$2.locale = locale;\n proto$2.localeData = localeData;\n\n proto$2.toIsoString = deprecate(\n 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n toISOString$1\n );\n proto$2.lang = lang;\n\n // FORMATTING\n\n addFormatToken('X', 0, 0, 'unix');\n addFormatToken('x', 0, 0, 'valueOf');\n\n // PARSING\n\n addRegexToken('x', matchSigned);\n addRegexToken('X', matchTimestamp);\n addParseToken('X', function (input, array, config) {\n config._d = new Date(parseFloat(input) * 1000);\n });\n addParseToken('x', function (input, array, config) {\n config._d = new Date(toInt(input));\n });\n\n //! moment.js\n\n hooks.version = '2.29.4';\n\n setHookCallback(createLocal);\n\n hooks.fn = proto;\n hooks.min = min;\n hooks.max = max;\n hooks.now = now;\n hooks.utc = createUTC;\n hooks.unix = createUnix;\n hooks.months = listMonths;\n hooks.isDate = isDate;\n hooks.locale = getSetGlobalLocale;\n hooks.invalid = createInvalid;\n hooks.duration = createDuration;\n hooks.isMoment = isMoment;\n hooks.weekdays = listWeekdays;\n hooks.parseZone = createInZone;\n hooks.localeData = getLocale;\n hooks.isDuration = isDuration;\n hooks.monthsShort = listMonthsShort;\n hooks.weekdaysMin = listWeekdaysMin;\n hooks.defineLocale = defineLocale;\n hooks.updateLocale = updateLocale;\n hooks.locales = listLocales;\n hooks.weekdaysShort = listWeekdaysShort;\n hooks.normalizeUnits = normalizeUnits;\n hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n hooks.calendarFormat = getCalendarFormat;\n hooks.prototype = proto;\n\n // currently HTML5 input type only supports 24-hour formats\n hooks.HTML5_FMT = {\n DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // \n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // \n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // \n DATE: 'YYYY-MM-DD', // \n TIME: 'HH:mm', // \n TIME_SECONDS: 'HH:mm:ss', // \n TIME_MS: 'HH:mm:ss.SSS', // \n WEEK: 'GGGG-[W]WW', // \n MONTH: 'YYYY-MM', // \n };\n\n return hooks;\n\n})));\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","var mode = require('./mode');\n\nfunction QR8bitByte(data) {\n\tthis.mode = mode.MODE_8BIT_BYTE;\n\tthis.data = data;\n}\n\nQR8bitByte.prototype = {\n\n\tgetLength : function(buffer) {\n\t\treturn this.data.length;\n\t},\n\t\n\twrite : function(buffer) {\n\t\tfor (var i = 0; i < this.data.length; i++) {\n\t\t\t// not JIS ...\n\t\t\tbuffer.put(this.data.charCodeAt(i), 8);\n\t\t}\n\t}\n};\n\nmodule.exports = QR8bitByte;\n\n","function QRBitBuffer() {\n\tthis.buffer = new Array();\n\tthis.length = 0;\n}\n\nQRBitBuffer.prototype = {\n\n\tget : function(index) {\n\t\tvar bufIndex = Math.floor(index / 8);\n\t\treturn ( (this.buffer[bufIndex] >>> (7 - index % 8) ) & 1) == 1;\n\t},\n\t\n\tput : function(num, length) {\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tthis.putBit( ( (num >>> (length - i - 1) ) & 1) == 1);\n\t\t}\n\t},\n\t\n\tgetLengthInBits : function() {\n\t\treturn this.length;\n\t},\n\t\n\tputBit : function(bit) {\n\t\n\t\tvar bufIndex = Math.floor(this.length / 8);\n\t\tif (this.buffer.length <= bufIndex) {\n\t\t\tthis.buffer.push(0);\n\t\t}\n\t\n\t\tif (bit) {\n\t\t\tthis.buffer[bufIndex] |= (0x80 >>> (this.length % 8) );\n\t\t}\n\t\n\t\tthis.length++;\n\t}\n};\n\nmodule.exports = QRBitBuffer;\n","module.exports = {\n\tL : 1,\n\tM : 0,\n\tQ : 3,\n\tH : 2\n};\n\n","var math = require('./math');\n\nfunction QRPolynomial(num, shift) {\n\n\tif (num.length == undefined) {\n\t\tthrow new Error(num.length + \"/\" + shift);\n\t}\n\n\tvar offset = 0;\n\n\twhile (offset < num.length && num[offset] == 0) {\n\t\toffset++;\n\t}\n\n\tthis.num = new Array(num.length - offset + shift);\n\tfor (var i = 0; i < num.length - offset; i++) {\n\t\tthis.num[i] = num[i + offset];\n\t}\n}\n\nQRPolynomial.prototype = {\n\n\tget : function(index) {\n\t\treturn this.num[index];\n\t},\n\t\n\tgetLength : function() {\n\t\treturn this.num.length;\n\t},\n\t\n\tmultiply : function(e) {\n\t\n\t\tvar num = new Array(this.getLength() + e.getLength() - 1);\n\t\n\t\tfor (var i = 0; i < this.getLength(); i++) {\n\t\t\tfor (var j = 0; j < e.getLength(); j++) {\n\t\t\t\tnum[i + j] ^= math.gexp(math.glog(this.get(i) ) + math.glog(e.get(j) ) );\n\t\t\t}\n\t\t}\n\t\n\t\treturn new QRPolynomial(num, 0);\n\t},\n\t\n\tmod : function(e) {\n\t\n\t\tif (this.getLength() - e.getLength() < 0) {\n\t\t\treturn this;\n\t\t}\n\t\n\t\tvar ratio = math.glog(this.get(0) ) - math.glog(e.get(0) );\n\t\n\t\tvar num = new Array(this.getLength() );\n\t\t\n\t\tfor (var i = 0; i < this.getLength(); i++) {\n\t\t\tnum[i] = this.get(i);\n\t\t}\n\t\t\n\t\tfor (var i = 0; i < e.getLength(); i++) {\n\t\t\tnum[i] ^= math.gexp(math.glog(e.get(i) ) + ratio);\n\t\t}\n\t\n\t\t// recursive call\n\t\treturn new QRPolynomial(num, 0).mod(e);\n\t}\n};\n\nmodule.exports = QRPolynomial;\n","var BitByte = require('./8BitByte');\nvar RSBlock = require('./RSBlock');\nvar BitBuffer = require('./BitBuffer');\nvar util = require('./util');\nvar Polynomial = require('./Polynomial');\n\nfunction QRCode(typeNumber, errorCorrectLevel) {\n\tthis.typeNumber = typeNumber;\n\tthis.errorCorrectLevel = errorCorrectLevel;\n\tthis.modules = null;\n\tthis.moduleCount = 0;\n\tthis.dataCache = null;\n\tthis.dataList = [];\n}\n\n// for client side minification\nvar proto = QRCode.prototype;\n\nproto.addData = function(data) {\n\tvar newData = new BitByte(data);\n\tthis.dataList.push(newData);\n\tthis.dataCache = null;\n};\n\nproto.isDark = function(row, col) {\n\tif (row < 0 || this.moduleCount <= row || col < 0 || this.moduleCount <= col) {\n\t\tthrow new Error(row + \",\" + col);\n\t}\n\treturn this.modules[row][col];\n};\n\nproto.getModuleCount = function() {\n\treturn this.moduleCount;\n};\n\nproto.make = function() {\n\t// Calculate automatically typeNumber if provided is < 1\n\tif (this.typeNumber < 1 ){\n\t\tvar typeNumber = 1;\n\t\tfor (typeNumber = 1; typeNumber < 40; typeNumber++) {\n\t\t\tvar rsBlocks = RSBlock.getRSBlocks(typeNumber, this.errorCorrectLevel);\n\n\t\t\tvar buffer = new BitBuffer();\n\t\t\tvar totalDataCount = 0;\n\t\t\tfor (var i = 0; i < rsBlocks.length; i++) {\n\t\t\t\ttotalDataCount += rsBlocks[i].dataCount;\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < this.dataList.length; i++) {\n\t\t\t\tvar data = this.dataList[i];\n\t\t\t\tbuffer.put(data.mode, 4);\n\t\t\t\tbuffer.put(data.getLength(), util.getLengthInBits(data.mode, typeNumber) );\n\t\t\t\tdata.write(buffer);\n\t\t\t}\n\t\t\tif (buffer.getLengthInBits() <= totalDataCount * 8)\n\t\t\t\tbreak;\n\t\t}\n\t\tthis.typeNumber = typeNumber;\n\t}\n\tthis.makeImpl(false, this.getBestMaskPattern() );\n};\n\nproto.makeImpl = function(test, maskPattern) {\n\t\n\tthis.moduleCount = this.typeNumber * 4 + 17;\n\tthis.modules = new Array(this.moduleCount);\n\t\n\tfor (var row = 0; row < this.moduleCount; row++) {\n\t\t\n\t\tthis.modules[row] = new Array(this.moduleCount);\n\t\t\n\t\tfor (var col = 0; col < this.moduleCount; col++) {\n\t\t\tthis.modules[row][col] = null;//(col + row) % 3;\n\t\t}\n\t}\n\n\tthis.setupPositionProbePattern(0, 0);\n\tthis.setupPositionProbePattern(this.moduleCount - 7, 0);\n\tthis.setupPositionProbePattern(0, this.moduleCount - 7);\n\tthis.setupPositionAdjustPattern();\n\tthis.setupTimingPattern();\n\tthis.setupTypeInfo(test, maskPattern);\n\t\n\tif (this.typeNumber >= 7) {\n\t\tthis.setupTypeNumber(test);\n\t}\n\n\tif (this.dataCache == null) {\n\t\tthis.dataCache = QRCode.createData(this.typeNumber, this.errorCorrectLevel, this.dataList);\n\t}\n\n\tthis.mapData(this.dataCache, maskPattern);\n};\n\nproto.setupPositionProbePattern = function(row, col) {\n\t\n\tfor (var r = -1; r <= 7; r++) {\n\t\t\n\t\tif (row + r <= -1 || this.moduleCount <= row + r) continue;\n\t\t\n\t\tfor (var c = -1; c <= 7; c++) {\n\t\t\t\n\t\t\tif (col + c <= -1 || this.moduleCount <= col + c) continue;\n\t\t\t\n\t\t\tif ( (0 <= r && r <= 6 && (c == 0 || c == 6) )\n\t\t\t\t\t|| (0 <= c && c <= 6 && (r == 0 || r == 6) )\n\t\t\t\t\t|| (2 <= r && r <= 4 && 2 <= c && c <= 4) ) {\n\t\t\t\tthis.modules[row + r][col + c] = true;\n\t\t\t} else {\n\t\t\t\tthis.modules[row + r][col + c] = false;\n\t\t\t}\n\t\t}\t\t\n\t}\t\t\n};\n\nproto.getBestMaskPattern = function() {\n\n\tvar minLostPoint = 0;\n\tvar pattern = 0;\n\n\tfor (var i = 0; i < 8; i++) {\n\t\t\n\t\tthis.makeImpl(true, i);\n\n\t\tvar lostPoint = util.getLostPoint(this);\n\n\t\tif (i == 0 || minLostPoint > lostPoint) {\n\t\t\tminLostPoint = lostPoint;\n\t\t\tpattern = i;\n\t\t}\n\t}\n\n\treturn pattern;\n};\n\nproto.createMovieClip = function(target_mc, instance_name, depth) {\n\n\tvar qr_mc = target_mc.createEmptyMovieClip(instance_name, depth);\n\tvar cs = 1;\n\n\tthis.make();\n\n\tfor (var row = 0; row < this.modules.length; row++) {\n\t\t\n\t\tvar y = row * cs;\n\t\t\n\t\tfor (var col = 0; col < this.modules[row].length; col++) {\n\n\t\t\tvar x = col * cs;\n\t\t\tvar dark = this.modules[row][col];\n\t\t\n\t\t\tif (dark) {\n\t\t\t\tqr_mc.beginFill(0, 100);\n\t\t\t\tqr_mc.moveTo(x, y);\n\t\t\t\tqr_mc.lineTo(x + cs, y);\n\t\t\t\tqr_mc.lineTo(x + cs, y + cs);\n\t\t\t\tqr_mc.lineTo(x, y + cs);\n\t\t\t\tqr_mc.endFill();\n\t\t\t}\n\t\t}\n\t}\n\t\n\treturn qr_mc;\n};\n\nproto.setupTimingPattern = function() {\n\t\n\tfor (var r = 8; r < this.moduleCount - 8; r++) {\n\t\tif (this.modules[r][6] != null) {\n\t\t\tcontinue;\n\t\t}\n\t\tthis.modules[r][6] = (r % 2 == 0);\n\t}\n\n\tfor (var c = 8; c < this.moduleCount - 8; c++) {\n\t\tif (this.modules[6][c] != null) {\n\t\t\tcontinue;\n\t\t}\n\t\tthis.modules[6][c] = (c % 2 == 0);\n\t}\n};\n\nproto.setupPositionAdjustPattern = function() {\n\n\tvar pos = util.getPatternPosition(this.typeNumber);\n\t\n\tfor (var i = 0; i < pos.length; i++) {\n\t\n\t\tfor (var j = 0; j < pos.length; j++) {\n\t\t\n\t\t\tvar row = pos[i];\n\t\t\tvar col = pos[j];\n\t\t\t\n\t\t\tif (this.modules[row][col] != null) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t\n\t\t\tfor (var r = -2; r <= 2; r++) {\n\t\t\t\n\t\t\t\tfor (var c = -2; c <= 2; c++) {\n\t\t\t\t\n\t\t\t\t\tif (r == -2 || r == 2 || c == -2 || c == 2\n\t\t\t\t\t\t\t|| (r == 0 && c == 0) ) {\n\t\t\t\t\t\tthis.modules[row + r][col + c] = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.modules[row + r][col + c] = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\nproto.setupTypeNumber = function(test) {\n\n\tvar bits = util.getBCHTypeNumber(this.typeNumber);\n\n\tfor (var i = 0; i < 18; i++) {\n\t\tvar mod = (!test && ( (bits >> i) & 1) == 1);\n\t\tthis.modules[Math.floor(i / 3)][i % 3 + this.moduleCount - 8 - 3] = mod;\n\t}\n\n\tfor (var i = 0; i < 18; i++) {\n\t\tvar mod = (!test && ( (bits >> i) & 1) == 1);\n\t\tthis.modules[i % 3 + this.moduleCount - 8 - 3][Math.floor(i / 3)] = mod;\n\t}\n};\n\nproto.setupTypeInfo = function(test, maskPattern) {\n\n\tvar data = (this.errorCorrectLevel << 3) | maskPattern;\n\tvar bits = util.getBCHTypeInfo(data);\n\n\t// vertical\t\t\n\tfor (var i = 0; i < 15; i++) {\n\n\t\tvar mod = (!test && ( (bits >> i) & 1) == 1);\n\n\t\tif (i < 6) {\n\t\t\tthis.modules[i][8] = mod;\n\t\t} else if (i < 8) {\n\t\t\tthis.modules[i + 1][8] = mod;\n\t\t} else {\n\t\t\tthis.modules[this.moduleCount - 15 + i][8] = mod;\n\t\t}\n\t}\n\n\t// horizontal\n\tfor (var i = 0; i < 15; i++) {\n\n\t\tvar mod = (!test && ( (bits >> i) & 1) == 1);\n\t\t\n\t\tif (i < 8) {\n\t\t\tthis.modules[8][this.moduleCount - i - 1] = mod;\n\t\t} else if (i < 9) {\n\t\t\tthis.modules[8][15 - i - 1 + 1] = mod;\n\t\t} else {\n\t\t\tthis.modules[8][15 - i - 1] = mod;\n\t\t}\n\t}\n\n\t// fixed module\n\tthis.modules[this.moduleCount - 8][8] = (!test);\n};\n\nproto.mapData = function(data, maskPattern) {\n\t\n\tvar inc = -1;\n\tvar row = this.moduleCount - 1;\n\tvar bitIndex = 7;\n\tvar byteIndex = 0;\n\t\n\tfor (var col = this.moduleCount - 1; col > 0; col -= 2) {\n\n\t\tif (col == 6) col--;\n\n\t\twhile (true) {\n\n\t\t\tfor (var c = 0; c < 2; c++) {\n\t\t\t\t\n\t\t\t\tif (this.modules[row][col - c] == null) {\n\t\t\t\t\t\n\t\t\t\t\tvar dark = false;\n\n\t\t\t\t\tif (byteIndex < data.length) {\n\t\t\t\t\t\tdark = ( ( (data[byteIndex] >>> bitIndex) & 1) == 1);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar mask = util.getMask(maskPattern, row, col - c);\n\n\t\t\t\t\tif (mask) {\n\t\t\t\t\t\tdark = !dark;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tthis.modules[row][col - c] = dark;\n\t\t\t\t\tbitIndex--;\n\n\t\t\t\t\tif (bitIndex == -1) {\n\t\t\t\t\t\tbyteIndex++;\n\t\t\t\t\t\tbitIndex = 7;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\trow += inc;\n\n\t\t\tif (row < 0 || this.moduleCount <= row) {\n\t\t\t\trow -= inc;\n\t\t\t\tinc = -inc;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n};\n\nQRCode.PAD0 = 0xEC;\nQRCode.PAD1 = 0x11;\n\nQRCode.createData = function(typeNumber, errorCorrectLevel, dataList) {\n\t\n\tvar rsBlocks = RSBlock.getRSBlocks(typeNumber, errorCorrectLevel);\n\t\n\tvar buffer = new BitBuffer();\n\t\n\tfor (var i = 0; i < dataList.length; i++) {\n\t\tvar data = dataList[i];\n\t\tbuffer.put(data.mode, 4);\n\t\tbuffer.put(data.getLength(), util.getLengthInBits(data.mode, typeNumber) );\n\t\tdata.write(buffer);\n\t}\n\n\t// calc num max data.\n\tvar totalDataCount = 0;\n\tfor (var i = 0; i < rsBlocks.length; i++) {\n\t\ttotalDataCount += rsBlocks[i].dataCount;\n\t}\n\n\tif (buffer.getLengthInBits() > totalDataCount * 8) {\n\t\tthrow new Error(\"code length overflow. (\"\n\t\t\t+ buffer.getLengthInBits()\n\t\t\t+ \">\"\n\t\t\t+ totalDataCount * 8\n\t\t\t+ \")\");\n\t}\n\n\t// end code\n\tif (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {\n\t\tbuffer.put(0, 4);\n\t}\n\n\t// padding\n\twhile (buffer.getLengthInBits() % 8 != 0) {\n\t\tbuffer.putBit(false);\n\t}\n\n\t// padding\n\twhile (true) {\n\t\t\n\t\tif (buffer.getLengthInBits() >= totalDataCount * 8) {\n\t\t\tbreak;\n\t\t}\n\t\tbuffer.put(QRCode.PAD0, 8);\n\t\t\n\t\tif (buffer.getLengthInBits() >= totalDataCount * 8) {\n\t\t\tbreak;\n\t\t}\n\t\tbuffer.put(QRCode.PAD1, 8);\n\t}\n\n\treturn QRCode.createBytes(buffer, rsBlocks);\n};\n\nQRCode.createBytes = function(buffer, rsBlocks) {\n\n\tvar offset = 0;\n\t\n\tvar maxDcCount = 0;\n\tvar maxEcCount = 0;\n\t\n\tvar dcdata = new Array(rsBlocks.length);\n\tvar ecdata = new Array(rsBlocks.length);\n\t\n\tfor (var r = 0; r < rsBlocks.length; r++) {\n\n\t\tvar dcCount = rsBlocks[r].dataCount;\n\t\tvar ecCount = rsBlocks[r].totalCount - dcCount;\n\n\t\tmaxDcCount = Math.max(maxDcCount, dcCount);\n\t\tmaxEcCount = Math.max(maxEcCount, ecCount);\n\t\t\n\t\tdcdata[r] = new Array(dcCount);\n\t\t\n\t\tfor (var i = 0; i < dcdata[r].length; i++) {\n\t\t\tdcdata[r][i] = 0xff & buffer.buffer[i + offset];\n\t\t}\n\t\toffset += dcCount;\n\t\t\n\t\tvar rsPoly = util.getErrorCorrectPolynomial(ecCount);\n\t\tvar rawPoly = new Polynomial(dcdata[r], rsPoly.getLength() - 1);\n\n\t\tvar modPoly = rawPoly.mod(rsPoly);\n\t\tecdata[r] = new Array(rsPoly.getLength() - 1);\n\t\tfor (var i = 0; i < ecdata[r].length; i++) {\n var modIndex = i + modPoly.getLength() - ecdata[r].length;\n\t\t\tecdata[r][i] = (modIndex >= 0)? modPoly.get(modIndex) : 0;\n\t\t}\n\n\t}\n\t\n\tvar totalCodeCount = 0;\n\tfor (var i = 0; i < rsBlocks.length; i++) {\n\t\ttotalCodeCount += rsBlocks[i].totalCount;\n\t}\n\n\tvar data = new Array(totalCodeCount);\n\tvar index = 0;\n\n\tfor (var i = 0; i < maxDcCount; i++) {\n\t\tfor (var r = 0; r < rsBlocks.length; r++) {\n\t\t\tif (i < dcdata[r].length) {\n\t\t\t\tdata[index++] = dcdata[r][i];\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (var i = 0; i < maxEcCount; i++) {\n\t\tfor (var r = 0; r < rsBlocks.length; r++) {\n\t\t\tif (i < ecdata[r].length) {\n\t\t\t\tdata[index++] = ecdata[r][i];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn data;\n};\n\nmodule.exports = QRCode;\n\n","// ErrorCorrectLevel\nvar ECL = require('./ErrorCorrectLevel');\n\nfunction QRRSBlock(totalCount, dataCount) {\n\tthis.totalCount = totalCount;\n\tthis.dataCount = dataCount;\n}\n\nQRRSBlock.RS_BLOCK_TABLE = [\n\n\t// L\n\t// M\n\t// Q\n\t// H\n\n\t// 1\n\t[1, 26, 19],\n\t[1, 26, 16],\n\t[1, 26, 13],\n\t[1, 26, 9],\n\t\n\t// 2\n\t[1, 44, 34],\n\t[1, 44, 28],\n\t[1, 44, 22],\n\t[1, 44, 16],\n\n\t// 3\n\t[1, 70, 55],\n\t[1, 70, 44],\n\t[2, 35, 17],\n\t[2, 35, 13],\n\n\t// 4\t\t\n\t[1, 100, 80],\n\t[2, 50, 32],\n\t[2, 50, 24],\n\t[4, 25, 9],\n\t\n\t// 5\n\t[1, 134, 108],\n\t[2, 67, 43],\n\t[2, 33, 15, 2, 34, 16],\n\t[2, 33, 11, 2, 34, 12],\n\t\n\t// 6\n\t[2, 86, 68],\n\t[4, 43, 27],\n\t[4, 43, 19],\n\t[4, 43, 15],\n\t\n\t// 7\t\t\n\t[2, 98, 78],\n\t[4, 49, 31],\n\t[2, 32, 14, 4, 33, 15],\n\t[4, 39, 13, 1, 40, 14],\n\t\n\t// 8\n\t[2, 121, 97],\n\t[2, 60, 38, 2, 61, 39],\n\t[4, 40, 18, 2, 41, 19],\n\t[4, 40, 14, 2, 41, 15],\n\t\n\t// 9\n\t[2, 146, 116],\n\t[3, 58, 36, 2, 59, 37],\n\t[4, 36, 16, 4, 37, 17],\n\t[4, 36, 12, 4, 37, 13],\n\t\n\t// 10\t\t\n\t[2, 86, 68, 2, 87, 69],\n\t[4, 69, 43, 1, 70, 44],\n\t[6, 43, 19, 2, 44, 20],\n\t[6, 43, 15, 2, 44, 16],\n\n\t// 11\n\t[4, 101, 81],\n\t[1, 80, 50, 4, 81, 51],\n\t[4, 50, 22, 4, 51, 23],\n\t[3, 36, 12, 8, 37, 13],\n\n\t// 12\n\t[2, 116, 92, 2, 117, 93],\n\t[6, 58, 36, 2, 59, 37],\n\t[4, 46, 20, 6, 47, 21],\n\t[7, 42, 14, 4, 43, 15],\n\n\t// 13\n\t[4, 133, 107],\n\t[8, 59, 37, 1, 60, 38],\n\t[8, 44, 20, 4, 45, 21],\n\t[12, 33, 11, 4, 34, 12],\n\n\t// 14\n\t[3, 145, 115, 1, 146, 116],\n\t[4, 64, 40, 5, 65, 41],\n\t[11, 36, 16, 5, 37, 17],\n\t[11, 36, 12, 5, 37, 13],\n\n\t// 15\n\t[5, 109, 87, 1, 110, 88],\n\t[5, 65, 41, 5, 66, 42],\n\t[5, 54, 24, 7, 55, 25],\n\t[11, 36, 12],\n\n\t// 16\n\t[5, 122, 98, 1, 123, 99],\n\t[7, 73, 45, 3, 74, 46],\n\t[15, 43, 19, 2, 44, 20],\n\t[3, 45, 15, 13, 46, 16],\n\n\t// 17\n\t[1, 135, 107, 5, 136, 108],\n\t[10, 74, 46, 1, 75, 47],\n\t[1, 50, 22, 15, 51, 23],\n\t[2, 42, 14, 17, 43, 15],\n\n\t// 18\n\t[5, 150, 120, 1, 151, 121],\n\t[9, 69, 43, 4, 70, 44],\n\t[17, 50, 22, 1, 51, 23],\n\t[2, 42, 14, 19, 43, 15],\n\n\t// 19\n\t[3, 141, 113, 4, 142, 114],\n\t[3, 70, 44, 11, 71, 45],\n\t[17, 47, 21, 4, 48, 22],\n\t[9, 39, 13, 16, 40, 14],\n\n\t// 20\n\t[3, 135, 107, 5, 136, 108],\n\t[3, 67, 41, 13, 68, 42],\n\t[15, 54, 24, 5, 55, 25],\n\t[15, 43, 15, 10, 44, 16],\n\n\t// 21\n\t[4, 144, 116, 4, 145, 117],\n\t[17, 68, 42],\n\t[17, 50, 22, 6, 51, 23],\n\t[19, 46, 16, 6, 47, 17],\n\n\t// 22\n\t[2, 139, 111, 7, 140, 112],\n\t[17, 74, 46],\n\t[7, 54, 24, 16, 55, 25],\n\t[34, 37, 13],\n\n\t// 23\n\t[4, 151, 121, 5, 152, 122],\n\t[4, 75, 47, 14, 76, 48],\n\t[11, 54, 24, 14, 55, 25],\n\t[16, 45, 15, 14, 46, 16],\n\n\t// 24\n\t[6, 147, 117, 4, 148, 118],\n\t[6, 73, 45, 14, 74, 46],\n\t[11, 54, 24, 16, 55, 25],\n\t[30, 46, 16, 2, 47, 17],\n\n\t// 25\n\t[8, 132, 106, 4, 133, 107],\n\t[8, 75, 47, 13, 76, 48],\n\t[7, 54, 24, 22, 55, 25],\n\t[22, 45, 15, 13, 46, 16],\n\n\t// 26\n\t[10, 142, 114, 2, 143, 115],\n\t[19, 74, 46, 4, 75, 47],\n\t[28, 50, 22, 6, 51, 23],\n\t[33, 46, 16, 4, 47, 17],\n\n\t// 27\n\t[8, 152, 122, 4, 153, 123],\n\t[22, 73, 45, 3, 74, 46],\n\t[8, 53, 23, 26, 54, 24],\n\t[12, 45, 15, 28, 46, 16],\n\n\t// 28\n\t[3, 147, 117, 10, 148, 118],\n\t[3, 73, 45, 23, 74, 46],\n\t[4, 54, 24, 31, 55, 25],\n\t[11, 45, 15, 31, 46, 16],\n\n\t// 29\n\t[7, 146, 116, 7, 147, 117],\n\t[21, 73, 45, 7, 74, 46],\n\t[1, 53, 23, 37, 54, 24],\n\t[19, 45, 15, 26, 46, 16],\n\n\t// 30\n\t[5, 145, 115, 10, 146, 116],\n\t[19, 75, 47, 10, 76, 48],\n\t[15, 54, 24, 25, 55, 25],\n\t[23, 45, 15, 25, 46, 16],\n\n\t// 31\n\t[13, 145, 115, 3, 146, 116],\n\t[2, 74, 46, 29, 75, 47],\n\t[42, 54, 24, 1, 55, 25],\n\t[23, 45, 15, 28, 46, 16],\n\n\t// 32\n\t[17, 145, 115],\n\t[10, 74, 46, 23, 75, 47],\n\t[10, 54, 24, 35, 55, 25],\n\t[19, 45, 15, 35, 46, 16],\n\n\t// 33\n\t[17, 145, 115, 1, 146, 116],\n\t[14, 74, 46, 21, 75, 47],\n\t[29, 54, 24, 19, 55, 25],\n\t[11, 45, 15, 46, 46, 16],\n\n\t// 34\n\t[13, 145, 115, 6, 146, 116],\n\t[14, 74, 46, 23, 75, 47],\n\t[44, 54, 24, 7, 55, 25],\n\t[59, 46, 16, 1, 47, 17],\n\n\t// 35\n\t[12, 151, 121, 7, 152, 122],\n\t[12, 75, 47, 26, 76, 48],\n\t[39, 54, 24, 14, 55, 25],\n\t[22, 45, 15, 41, 46, 16],\n\n\t// 36\n\t[6, 151, 121, 14, 152, 122],\n\t[6, 75, 47, 34, 76, 48],\n\t[46, 54, 24, 10, 55, 25],\n\t[2, 45, 15, 64, 46, 16],\n\n\t// 37\n\t[17, 152, 122, 4, 153, 123],\n\t[29, 74, 46, 14, 75, 47],\n\t[49, 54, 24, 10, 55, 25],\n\t[24, 45, 15, 46, 46, 16],\n\n\t// 38\n\t[4, 152, 122, 18, 153, 123],\n\t[13, 74, 46, 32, 75, 47],\n\t[48, 54, 24, 14, 55, 25],\n\t[42, 45, 15, 32, 46, 16],\n\n\t// 39\n\t[20, 147, 117, 4, 148, 118],\n\t[40, 75, 47, 7, 76, 48],\n\t[43, 54, 24, 22, 55, 25],\n\t[10, 45, 15, 67, 46, 16],\n\n\t// 40\n\t[19, 148, 118, 6, 149, 119],\n\t[18, 75, 47, 31, 76, 48],\n\t[34, 54, 24, 34, 55, 25],\n\t[20, 45, 15, 61, 46, 16]\n];\n\nQRRSBlock.getRSBlocks = function(typeNumber, errorCorrectLevel) {\n\t\n\tvar rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel);\n\t\n\tif (rsBlock == undefined) {\n\t\tthrow new Error(\"bad rs block @ typeNumber:\" + typeNumber + \"/errorCorrectLevel:\" + errorCorrectLevel);\n\t}\n\n\tvar length = rsBlock.length / 3;\n\t\n\tvar list = new Array();\n\t\n\tfor (var i = 0; i < length; i++) {\n\n\t\tvar count = rsBlock[i * 3 + 0];\n\t\tvar totalCount = rsBlock[i * 3 + 1];\n\t\tvar dataCount = rsBlock[i * 3 + 2];\n\n\t\tfor (var j = 0; j < count; j++) {\n\t\t\tlist.push(new QRRSBlock(totalCount, dataCount) );\t\n\t\t}\n\t}\n\t\n\treturn list;\n}\n\nQRRSBlock.getRsBlockTable = function(typeNumber, errorCorrectLevel) {\n\n\tswitch(errorCorrectLevel) {\n\tcase ECL.L :\n\t\treturn QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];\n\tcase ECL.M :\n\t\treturn QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];\n\tcase ECL.Q :\n\t\treturn QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];\n\tcase ECL.H :\n\t\treturn QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];\n\tdefault :\n\t\treturn undefined;\n\t}\n}\n\nmodule.exports = QRRSBlock;\n","var QRMath = {\n\n\tglog : function(n) {\n\t\n\t\tif (n < 1) {\n\t\t\tthrow new Error(\"glog(\" + n + \")\");\n\t\t}\n\t\t\n\t\treturn QRMath.LOG_TABLE[n];\n\t},\n\t\n\tgexp : function(n) {\n\t\n\t\twhile (n < 0) {\n\t\t\tn += 255;\n\t\t}\n\t\n\t\twhile (n >= 256) {\n\t\t\tn -= 255;\n\t\t}\n\t\n\t\treturn QRMath.EXP_TABLE[n];\n\t},\n\t\n\tEXP_TABLE : new Array(256),\n\t\n\tLOG_TABLE : new Array(256)\n\n};\n\t\nfor (var i = 0; i < 8; i++) {\n\tQRMath.EXP_TABLE[i] = 1 << i;\n}\nfor (var i = 8; i < 256; i++) {\n\tQRMath.EXP_TABLE[i] = QRMath.EXP_TABLE[i - 4]\n\t\t^ QRMath.EXP_TABLE[i - 5]\n\t\t^ QRMath.EXP_TABLE[i - 6]\n\t\t^ QRMath.EXP_TABLE[i - 8];\n}\nfor (var i = 0; i < 255; i++) {\n\tQRMath.LOG_TABLE[QRMath.EXP_TABLE[i] ] = i;\n}\n\nmodule.exports = QRMath;\n","module.exports = {\n\tMODE_NUMBER :\t\t1 << 0,\n\tMODE_ALPHA_NUM : \t1 << 1,\n\tMODE_8BIT_BYTE : \t1 << 2,\n\tMODE_KANJI :\t\t1 << 3\n};\n","var Mode = require('./mode');\nvar Polynomial = require('./Polynomial');\nvar math = require('./math');\n\nvar QRMaskPattern = {\n\tPATTERN000 : 0,\n\tPATTERN001 : 1,\n\tPATTERN010 : 2,\n\tPATTERN011 : 3,\n\tPATTERN100 : 4,\n\tPATTERN101 : 5,\n\tPATTERN110 : 6,\n\tPATTERN111 : 7\n};\n\nvar QRUtil = {\n\n PATTERN_POSITION_TABLE : [\n\t [],\n\t [6, 18],\n\t [6, 22],\n\t [6, 26],\n\t [6, 30],\n\t [6, 34],\n\t [6, 22, 38],\n\t [6, 24, 42],\n\t [6, 26, 46],\n\t [6, 28, 50],\n\t [6, 30, 54],\t\t\n\t [6, 32, 58],\n\t [6, 34, 62],\n\t [6, 26, 46, 66],\n\t [6, 26, 48, 70],\n\t [6, 26, 50, 74],\n\t [6, 30, 54, 78],\n\t [6, 30, 56, 82],\n\t [6, 30, 58, 86],\n\t [6, 34, 62, 90],\n\t [6, 28, 50, 72, 94],\n\t [6, 26, 50, 74, 98],\n\t [6, 30, 54, 78, 102],\n\t [6, 28, 54, 80, 106],\n\t [6, 32, 58, 84, 110],\n\t [6, 30, 58, 86, 114],\n\t [6, 34, 62, 90, 118],\n\t [6, 26, 50, 74, 98, 122],\n\t [6, 30, 54, 78, 102, 126],\n\t [6, 26, 52, 78, 104, 130],\n\t [6, 30, 56, 82, 108, 134],\n\t [6, 34, 60, 86, 112, 138],\n\t [6, 30, 58, 86, 114, 142],\n\t [6, 34, 62, 90, 118, 146],\n\t [6, 30, 54, 78, 102, 126, 150],\n\t [6, 24, 50, 76, 102, 128, 154],\n\t [6, 28, 54, 80, 106, 132, 158],\n\t [6, 32, 58, 84, 110, 136, 162],\n\t [6, 26, 54, 82, 110, 138, 166],\n\t [6, 30, 58, 86, 114, 142, 170]\n ],\n\n G15 : (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0),\n G18 : (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0),\n G15_MASK : (1 << 14) | (1 << 12) | (1 << 10)\t| (1 << 4) | (1 << 1),\n\n getBCHTypeInfo : function(data) {\n\t var d = data << 10;\n\t while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) {\n\t\t d ^= (QRUtil.G15 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) ) ); \t\n\t }\n\t return ( (data << 10) | d) ^ QRUtil.G15_MASK;\n },\n\n getBCHTypeNumber : function(data) {\n\t var d = data << 12;\n\t while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) {\n\t\t d ^= (QRUtil.G18 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) ) ); \t\n\t }\n\t return (data << 12) | d;\n },\n\n getBCHDigit : function(data) {\n\n\t var digit = 0;\n\n\t while (data != 0) {\n\t\t digit++;\n\t\t data >>>= 1;\n\t }\n\n\t return digit;\n },\n\n getPatternPosition : function(typeNumber) {\n\t return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1];\n },\n\n getMask : function(maskPattern, i, j) {\n\t \n\t switch (maskPattern) {\n\t\t \n\t case QRMaskPattern.PATTERN000 : return (i + j) % 2 == 0;\n\t case QRMaskPattern.PATTERN001 : return i % 2 == 0;\n\t case QRMaskPattern.PATTERN010 : return j % 3 == 0;\n\t case QRMaskPattern.PATTERN011 : return (i + j) % 3 == 0;\n\t case QRMaskPattern.PATTERN100 : return (Math.floor(i / 2) + Math.floor(j / 3) ) % 2 == 0;\n\t case QRMaskPattern.PATTERN101 : return (i * j) % 2 + (i * j) % 3 == 0;\n\t case QRMaskPattern.PATTERN110 : return ( (i * j) % 2 + (i * j) % 3) % 2 == 0;\n\t case QRMaskPattern.PATTERN111 : return ( (i * j) % 3 + (i + j) % 2) % 2 == 0;\n\n\t default :\n\t\t throw new Error(\"bad maskPattern:\" + maskPattern);\n\t }\n },\n\n getErrorCorrectPolynomial : function(errorCorrectLength) {\n\n\t var a = new Polynomial([1], 0);\n\n\t for (var i = 0; i < errorCorrectLength; i++) {\n\t\t a = a.multiply(new Polynomial([1, math.gexp(i)], 0) );\n\t }\n\n\t return a;\n },\n\n getLengthInBits : function(mode, type) {\n\n\t if (1 <= type && type < 10) {\n\n\t\t // 1 - 9\n\n\t\t switch(mode) {\n\t\t case Mode.MODE_NUMBER \t: return 10;\n\t\t case Mode.MODE_ALPHA_NUM \t: return 9;\n\t\t case Mode.MODE_8BIT_BYTE\t: return 8;\n\t\t case Mode.MODE_KANJI \t: return 8;\n\t\t default :\n\t\t\t throw new Error(\"mode:\" + mode);\n\t\t }\n\n\t } else if (type < 27) {\n\n\t\t // 10 - 26\n\n\t\t switch(mode) {\n\t\t case Mode.MODE_NUMBER \t: return 12;\n\t\t case Mode.MODE_ALPHA_NUM \t: return 11;\n\t\t case Mode.MODE_8BIT_BYTE\t: return 16;\n\t\t case Mode.MODE_KANJI \t: return 10;\n\t\t default :\n\t\t\t throw new Error(\"mode:\" + mode);\n\t\t }\n\n\t } else if (type < 41) {\n\n\t\t // 27 - 40\n\n\t\t switch(mode) {\n\t\t case Mode.MODE_NUMBER \t: return 14;\n\t\t case Mode.MODE_ALPHA_NUM\t: return 13;\n\t\t case Mode.MODE_8BIT_BYTE\t: return 16;\n\t\t case Mode.MODE_KANJI \t: return 12;\n\t\t default :\n\t\t\t throw new Error(\"mode:\" + mode);\n\t\t }\n\n\t } else {\n\t\t throw new Error(\"type:\" + type);\n\t }\n },\n\n getLostPoint : function(qrCode) {\n\t \n\t var moduleCount = qrCode.getModuleCount();\n\t \n\t var lostPoint = 0;\n\t \n\t // LEVEL1\n\t \n\t for (var row = 0; row < moduleCount; row++) {\n\n\t\t for (var col = 0; col < moduleCount; col++) {\n\n\t\t\t var sameCount = 0;\n\t\t\t var dark = qrCode.isDark(row, col);\n\n\t\t\t\tfor (var r = -1; r <= 1; r++) {\n\n\t\t\t\t if (row + r < 0 || moduleCount <= row + r) {\n\t\t\t\t\t continue;\n\t\t\t\t }\n\n\t\t\t\t for (var c = -1; c <= 1; c++) {\n\n\t\t\t\t\t if (col + c < 0 || moduleCount <= col + c) {\n\t\t\t\t\t\t continue;\n\t\t\t\t\t }\n\n\t\t\t\t\t if (r == 0 && c == 0) {\n\t\t\t\t\t\t continue;\n\t\t\t\t\t }\n\n\t\t\t\t\t if (dark == qrCode.isDark(row + r, col + c) ) {\n\t\t\t\t\t\t sameCount++;\n\t\t\t\t\t }\n\t\t\t\t }\n\t\t\t }\n\n\t\t\t if (sameCount > 5) {\n\t\t\t\t lostPoint += (3 + sameCount - 5);\n\t\t\t }\n\t\t }\n\t }\n\n\t // LEVEL2\n\n\t for (var row = 0; row < moduleCount - 1; row++) {\n\t\t for (var col = 0; col < moduleCount - 1; col++) {\n\t\t\t var count = 0;\n\t\t\t if (qrCode.isDark(row, col ) ) count++;\n\t\t\t if (qrCode.isDark(row + 1, col ) ) count++;\n\t\t\t if (qrCode.isDark(row, col + 1) ) count++;\n\t\t\t if (qrCode.isDark(row + 1, col + 1) ) count++;\n\t\t\t if (count == 0 || count == 4) {\n\t\t\t\t lostPoint += 3;\n\t\t\t }\n\t\t }\n\t }\n\n\t // LEVEL3\n\n\t for (var row = 0; row < moduleCount; row++) {\n\t\t for (var col = 0; col < moduleCount - 6; col++) {\n\t\t\t if (qrCode.isDark(row, col)\n\t\t\t\t\t && !qrCode.isDark(row, col + 1)\n\t\t\t\t\t && qrCode.isDark(row, col + 2)\n\t\t\t\t\t && qrCode.isDark(row, col + 3)\n\t\t\t\t\t && qrCode.isDark(row, col + 4)\n\t\t\t\t\t && !qrCode.isDark(row, col + 5)\n\t\t\t\t\t && qrCode.isDark(row, col + 6) ) {\n\t\t\t\t lostPoint += 40;\n\t\t\t }\n\t\t }\n\t }\n\n\t for (var col = 0; col < moduleCount; col++) {\n\t\t for (var row = 0; row < moduleCount - 6; row++) {\n\t\t\t if (qrCode.isDark(row, col)\n\t\t\t\t\t && !qrCode.isDark(row + 1, col)\n\t\t\t\t\t && qrCode.isDark(row + 2, col)\n\t\t\t\t\t && qrCode.isDark(row + 3, col)\n\t\t\t\t\t && qrCode.isDark(row + 4, col)\n\t\t\t\t\t && !qrCode.isDark(row + 5, col)\n\t\t\t\t\t && qrCode.isDark(row + 6, col) ) {\n\t\t\t\t lostPoint += 40;\n\t\t\t }\n\t\t }\n\t }\n\n\t // LEVEL4\n\t \n\t var darkCount = 0;\n\n\t for (var col = 0; col < moduleCount; col++) {\n\t\t for (var row = 0; row < moduleCount; row++) {\n\t\t\t if (qrCode.isDark(row, col) ) {\n\t\t\t\t darkCount++;\n\t\t\t }\n\t\t }\n\t }\n\t \n\t var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;\n\t lostPoint += ratio * 10;\n\n\t return lostPoint;\t\t\n }\n};\n\nmodule.exports = QRUtil;\n","/**\n * @license React\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),ca=require(\"scheduler\");function p(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;cb}return!1}function v(a,b,c,d,e,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f;this.removeEmptyString=g}var z={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){z[a]=new v(a,0,!1,a,null,!1,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];z[b]=new v(b,1,!1,a[1],null,!1,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){z[a]=new v(a,2,!1,a.toLowerCase(),null,!1,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){z[a]=new v(a,2,!1,a,null,!1,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){z[a]=new v(a,3,!1,a.toLowerCase(),null,!1,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){z[a]=new v(a,3,!0,a,null,!1,!1)});[\"capture\",\"download\"].forEach(function(a){z[a]=new v(a,4,!1,a,null,!1,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){z[a]=new v(a,6,!1,a,null,!1,!1)});[\"rowSpan\",\"start\"].forEach(function(a){z[a]=new v(a,5,!1,a.toLowerCase(),null,!1,!1)});var ra=/[\\-:]([a-z])/g;function sa(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(ra,\nsa);z[b]=new v(b,1,!1,a,null,!1,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1,!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1,!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!1,!1)});\nz.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!0,!0)});\nfunction ta(a,b,c,d){var e=z.hasOwnProperty(b)?z[b]:null;if(null!==e?0!==e.type:d||!(2h||e[g]!==f[h]){var k=\"\\n\"+e[g].replace(\" at new \",\" at \");a.displayName&&k.includes(\"\")&&(k=k.replace(\"\",a.displayName));return k}while(1<=g&&0<=h)}break}}}finally{Na=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:\"\")?Ma(a):\"\"}\nfunction Pa(a){switch(a.tag){case 5:return Ma(a.type);case 16:return Ma(\"Lazy\");case 13:return Ma(\"Suspense\");case 19:return Ma(\"SuspenseList\");case 0:case 2:case 15:return a=Oa(a.type,!1),a;case 11:return a=Oa(a.type.render,!1),a;case 1:return a=Oa(a.type,!0),a;default:return\"\"}}\nfunction Qa(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case ya:return\"Fragment\";case wa:return\"Portal\";case Aa:return\"Profiler\";case za:return\"StrictMode\";case Ea:return\"Suspense\";case Fa:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case Ca:return(a.displayName||\"Context\")+\".Consumer\";case Ba:return(a._context.displayName||\"Context\")+\".Provider\";case Da:var b=a.render;a=a.displayName;a||(a=b.displayName||\nb.name||\"\",a=\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");return a;case Ga:return b=a.displayName||null,null!==b?b:Qa(a.type)||\"Memo\";case Ha:b=a._payload;a=a._init;try{return Qa(a(b))}catch(c){}}return null}\nfunction Ra(a){var b=a.type;switch(a.tag){case 24:return\"Cache\";case 9:return(b.displayName||\"Context\")+\".Consumer\";case 10:return(b._context.displayName||\"Context\")+\".Provider\";case 18:return\"DehydratedFragment\";case 11:return a=b.render,a=a.displayName||a.name||\"\",b.displayName||(\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");case 7:return\"Fragment\";case 5:return b;case 4:return\"Portal\";case 3:return\"Root\";case 6:return\"Text\";case 16:return Qa(b);case 8:return b===za?\"StrictMode\":\"Mode\";case 22:return\"Offscreen\";\ncase 12:return\"Profiler\";case 21:return\"Scope\";case 13:return\"Suspense\";case 19:return\"SuspenseList\";case 25:return\"TracingMarker\";case 1:case 0:case 17:case 2:case 14:case 15:if(\"function\"===typeof b)return b.displayName||b.name||null;if(\"string\"===typeof b)return b}return null}function Sa(a){switch(typeof a){case \"boolean\":case \"number\":case \"string\":case \"undefined\":return a;case \"object\":return a;default:return\"\"}}\nfunction Ta(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction Ua(a){var b=Ta(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function Va(a){a._valueTracker||(a._valueTracker=Ua(a))}function Wa(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=Ta(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Xa(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}\nfunction Ya(a,b){var c=b.checked;return A({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}function Za(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=Sa(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function ab(a,b){b=b.checked;null!=b&&ta(a,\"checked\",b,!1)}\nfunction bb(a,b){ab(a,b);var c=Sa(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?cb(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&cb(a,b.type,Sa(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction db(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction cb(a,b,c){if(\"number\"!==b||Xa(a.ownerDocument)!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}var eb=Array.isArray;\nfunction fb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e\"+b.valueOf().toString()+\"\";for(b=mb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction ob(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar pb={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,\nzoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},qb=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(pb).forEach(function(a){qb.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);pb[b]=pb[a]})});function rb(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||pb.hasOwnProperty(a)&&pb[a]?(\"\"+b).trim():b+\"px\"}\nfunction sb(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=rb(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var tb=A({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction ub(a,b){if(b){if(tb[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(p(137,a));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(p(60));if(\"object\"!==typeof b.dangerouslySetInnerHTML||!(\"__html\"in b.dangerouslySetInnerHTML))throw Error(p(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(p(62));}}\nfunction vb(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}var wb=null;function xb(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}var yb=null,zb=null,Ab=null;\nfunction Bb(a){if(a=Cb(a)){if(\"function\"!==typeof yb)throw Error(p(280));var b=a.stateNode;b&&(b=Db(b),yb(a.stateNode,a.type,b))}}function Eb(a){zb?Ab?Ab.push(a):Ab=[a]:zb=a}function Fb(){if(zb){var a=zb,b=Ab;Ab=zb=null;Bb(a);if(b)for(a=0;a>>=0;return 0===a?32:31-(pc(a)/qc|0)|0}var rc=64,sc=4194304;\nfunction tc(a){switch(a&-a){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return a&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return a&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;\ndefault:return a}}function uc(a,b){var c=a.pendingLanes;if(0===c)return 0;var d=0,e=a.suspendedLanes,f=a.pingedLanes,g=c&268435455;if(0!==g){var h=g&~e;0!==h?d=tc(h):(f&=g,0!==f&&(d=tc(f)))}else g=c&~e,0!==g?d=tc(g):0!==f&&(d=tc(f));if(0===d)return 0;if(0!==b&&b!==d&&0===(b&e)&&(e=d&-d,f=b&-b,e>=f||16===e&&0!==(f&4194240)))return b;0!==(d&4)&&(d|=c&16);b=a.entangledLanes;if(0!==b)for(a=a.entanglements,b&=d;0c;c++)b.push(a);return b}\nfunction Ac(a,b,c){a.pendingLanes|=b;536870912!==b&&(a.suspendedLanes=0,a.pingedLanes=0);a=a.eventTimes;b=31-oc(b);a[b]=c}function Bc(a,b){var c=a.pendingLanes&~b;a.pendingLanes=b;a.suspendedLanes=0;a.pingedLanes=0;a.expiredLanes&=b;a.mutableReadLanes&=b;a.entangledLanes&=b;b=a.entanglements;var d=a.eventTimes;for(a=a.expirationTimes;0=be),ee=String.fromCharCode(32),fe=!1;\nfunction ge(a,b){switch(a){case \"keyup\":return-1!==$d.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"focusout\":return!0;default:return!1}}function he(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var ie=!1;function je(a,b){switch(a){case \"compositionend\":return he(b);case \"keypress\":if(32!==b.which)return null;fe=!0;return ee;case \"textInput\":return a=b.data,a===ee&&fe?null:a;default:return null}}\nfunction ke(a,b){if(ie)return\"compositionend\"===a||!ae&&ge(a,b)?(a=nd(),md=ld=kd=null,ie=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Je(c)}}function Le(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Le(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}\nfunction Me(){for(var a=window,b=Xa();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=Xa(a.document)}return b}function Ne(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}\nfunction Oe(a){var b=Me(),c=a.focusedElem,d=a.selectionRange;if(b!==c&&c&&c.ownerDocument&&Le(c.ownerDocument.documentElement,c)){if(null!==d&&Ne(c))if(b=d.start,a=d.end,void 0===a&&(a=b),\"selectionStart\"in c)c.selectionStart=b,c.selectionEnd=Math.min(a,c.value.length);else if(a=(b=c.ownerDocument||document)&&b.defaultView||window,a.getSelection){a=a.getSelection();var e=c.textContent.length,f=Math.min(d.start,e);d=void 0===d.end?f:Math.min(d.end,e);!a.extend&&f>d&&(e=d,d=f,f=e);e=Ke(c,f);var g=Ke(c,\nd);e&&g&&(1!==a.rangeCount||a.anchorNode!==e.node||a.anchorOffset!==e.offset||a.focusNode!==g.node||a.focusOffset!==g.offset)&&(b=b.createRange(),b.setStart(e.node,e.offset),a.removeAllRanges(),f>d?(a.addRange(b),a.extend(g.node,g.offset)):(b.setEnd(g.node,g.offset),a.addRange(b)))}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});\"function\"===typeof c.focus&&c.focus();for(c=0;c=document.documentMode,Qe=null,Re=null,Se=null,Te=!1;\nfunction Ue(a,b,c){var d=c.window===c?c.document:9===c.nodeType?c:c.ownerDocument;Te||null==Qe||Qe!==Xa(d)||(d=Qe,\"selectionStart\"in d&&Ne(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Se&&Ie(Se,d)||(Se=d,d=oe(Re,\"onSelect\"),0Tf||(a.current=Sf[Tf],Sf[Tf]=null,Tf--)}function G(a,b){Tf++;Sf[Tf]=a.current;a.current=b}var Vf={},H=Uf(Vf),Wf=Uf(!1),Xf=Vf;function Yf(a,b){var c=a.type.contextTypes;if(!c)return Vf;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}\nfunction Zf(a){a=a.childContextTypes;return null!==a&&void 0!==a}function $f(){E(Wf);E(H)}function ag(a,b,c){if(H.current!==Vf)throw Error(p(168));G(H,b);G(Wf,c)}function bg(a,b,c){var d=a.stateNode;b=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in b))throw Error(p(108,Ra(a)||\"Unknown\",e));return A({},c,d)}\nfunction cg(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Vf;Xf=H.current;G(H,a);G(Wf,Wf.current);return!0}function dg(a,b,c){var d=a.stateNode;if(!d)throw Error(p(169));c?(a=bg(a,b,Xf),d.__reactInternalMemoizedMergedChildContext=a,E(Wf),E(H),G(H,a)):E(Wf);G(Wf,c)}var eg=null,fg=!1,gg=!1;function hg(a){null===eg?eg=[a]:eg.push(a)}function ig(a){fg=!0;hg(a)}\nfunction jg(){if(!gg&&null!==eg){gg=!0;var a=0,b=C;try{var c=eg;for(C=1;a>=g;e-=g;rg=1<<32-oc(b)+e|c<w?(x=u,u=null):x=u.sibling;var n=r(e,u,h[w],k);if(null===n){null===u&&(u=x);break}a&&u&&null===n.alternate&&b(e,u);g=f(n,g,w);null===m?l=n:m.sibling=n;m=n;u=x}if(w===h.length)return c(e,u),I&&tg(e,w),l;if(null===u){for(;ww?(x=m,m=null):x=m.sibling;var t=r(e,m,n.value,k);if(null===t){null===m&&(m=x);break}a&&m&&null===t.alternate&&b(e,m);g=f(t,g,w);null===u?l=t:u.sibling=t;u=t;m=x}if(n.done)return c(e,\nm),I&&tg(e,w),l;if(null===m){for(;!n.done;w++,n=h.next())n=q(e,n.value,k),null!==n&&(g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);I&&tg(e,w);return l}for(m=d(e,m);!n.done;w++,n=h.next())n=y(m,e,w,n.value,k),null!==n&&(a&&null!==n.alternate&&m.delete(null===n.key?w:n.key),g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);a&&m.forEach(function(a){return b(e,a)});I&&tg(e,w);return l}function J(a,d,f,h){\"object\"===typeof f&&null!==f&&f.type===ya&&null===f.key&&(f=f.props.children);if(\"object\"===typeof f&&null!==f){switch(f.$$typeof){case va:a:{for(var k=\nf.key,l=d;null!==l;){if(l.key===k){k=f.type;if(k===ya){if(7===l.tag){c(a,l.sibling);d=e(l,f.props.children);d.return=a;a=d;break a}}else if(l.elementType===k||\"object\"===typeof k&&null!==k&&k.$$typeof===Ha&&uh(k)===l.type){c(a,l.sibling);d=e(l,f.props);d.ref=sh(a,l,f);d.return=a;a=d;break a}c(a,l);break}else b(a,l);l=l.sibling}f.type===ya?(d=Ah(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=yh(f.type,f.key,f.props,null,a.mode,h),h.ref=sh(a,d,f),h.return=a,a=h)}return g(a);case wa:a:{for(l=f.key;null!==\nd;){if(d.key===l)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=zh(f,a.mode,h);d.return=a;a=d}return g(a);case Ha:return l=f._init,J(a,d,l(f._payload),h)}if(eb(f))return n(a,d,f,h);if(Ka(f))return t(a,d,f,h);th(a,f)}return\"string\"===typeof f&&\"\"!==f||\"number\"===typeof f?(f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):\n(c(a,d),d=xh(f,a.mode,h),d.return=a,a=d),g(a)):c(a,d)}return J}var Bh=vh(!0),Ch=vh(!1),Dh={},Eh=Uf(Dh),Fh=Uf(Dh),Gh=Uf(Dh);function Hh(a){if(a===Dh)throw Error(p(174));return a}function Ih(a,b){G(Gh,b);G(Fh,a);G(Eh,Dh);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:lb(null,\"\");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=lb(b,a)}E(Eh);G(Eh,b)}function Jh(){E(Eh);E(Fh);E(Gh)}\nfunction Kh(a){Hh(Gh.current);var b=Hh(Eh.current);var c=lb(b,a.type);b!==c&&(G(Fh,a),G(Eh,c))}function Lh(a){Fh.current===a&&(E(Eh),E(Fh))}var M=Uf(0);\nfunction Mh(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||\"$?\"===c.data||\"$!\"===c.data))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.flags&128))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}var Nh=[];\nfunction Oh(){for(var a=0;ac?c:4;a(!0);var d=Qh.transition;Qh.transition={};try{a(!1),b()}finally{C=c,Qh.transition=d}}function Fi(){return di().memoizedState}\nfunction Gi(a,b,c){var d=lh(a);c={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(Hi(a))Ii(b,c);else if(c=Yg(a,b,c,d),null!==c){var e=L();mh(c,a,d,e);Ji(c,b,d)}}\nfunction ri(a,b,c){var d=lh(a),e={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(Hi(a))Ii(b,e);else{var f=a.alternate;if(0===a.lanes&&(null===f||0===f.lanes)&&(f=b.lastRenderedReducer,null!==f))try{var g=b.lastRenderedState,h=f(g,c);e.hasEagerState=!0;e.eagerState=h;if(He(h,g)){var k=b.interleaved;null===k?(e.next=e,Xg(b)):(e.next=k.next,k.next=e);b.interleaved=e;return}}catch(l){}finally{}c=Yg(a,b,e,d);null!==c&&(e=L(),mh(c,a,d,e),Ji(c,b,d))}}\nfunction Hi(a){var b=a.alternate;return a===N||null!==b&&b===N}function Ii(a,b){Th=Sh=!0;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}function Ji(a,b,c){if(0!==(c&4194240)){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nvar ai={readContext:Vg,useCallback:Q,useContext:Q,useEffect:Q,useImperativeHandle:Q,useInsertionEffect:Q,useLayoutEffect:Q,useMemo:Q,useReducer:Q,useRef:Q,useState:Q,useDebugValue:Q,useDeferredValue:Q,useTransition:Q,useMutableSource:Q,useSyncExternalStore:Q,useId:Q,unstable_isNewReconciler:!1},Yh={readContext:Vg,useCallback:function(a,b){ci().memoizedState=[a,void 0===b?null:b];return a},useContext:Vg,useEffect:vi,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return ti(4194308,\n4,yi.bind(null,b,a),c)},useLayoutEffect:function(a,b){return ti(4194308,4,a,b)},useInsertionEffect:function(a,b){return ti(4,2,a,b)},useMemo:function(a,b){var c=ci();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=ci();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};d.queue=a;a=a.dispatch=Gi.bind(null,N,a);return[d.memoizedState,a]},useRef:function(a){var b=\nci();a={current:a};return b.memoizedState=a},useState:qi,useDebugValue:Ai,useDeferredValue:function(a){return ci().memoizedState=a},useTransition:function(){var a=qi(!1),b=a[0];a=Ei.bind(null,a[1]);ci().memoizedState=a;return[b,a]},useMutableSource:function(){},useSyncExternalStore:function(a,b,c){var d=N,e=ci();if(I){if(void 0===c)throw Error(p(407));c=c()}else{c=b();if(null===R)throw Error(p(349));0!==(Rh&30)||ni(d,b,c)}e.memoizedState=c;var f={value:c,getSnapshot:b};e.queue=f;vi(ki.bind(null,d,\nf,a),[a]);d.flags|=2048;li(9,mi.bind(null,d,f,c,b),void 0,null);return c},useId:function(){var a=ci(),b=R.identifierPrefix;if(I){var c=sg;var d=rg;c=(d&~(1<<32-oc(d)-1)).toString(32)+c;b=\":\"+b+\"R\"+c;c=Uh++;0\\x3c/script>\",a=a.removeChild(a.firstChild)):\n\"string\"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),\"select\"===c&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[Of]=b;a[Pf]=d;Aj(a,b,!1,!1);b.stateNode=a;a:{g=vb(c,d);switch(c){case \"dialog\":D(\"cancel\",a);D(\"close\",a);e=d;break;case \"iframe\":case \"object\":case \"embed\":D(\"load\",a);e=d;break;case \"video\":case \"audio\":for(e=0;eHj&&(b.flags|=128,d=!0,Ej(f,!1),b.lanes=4194304)}else{if(!d)if(a=Mh(g),null!==a){if(b.flags|=128,d=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.flags|=4),Ej(f,!0),null===f.tail&&\"hidden\"===f.tailMode&&!g.alternate&&!I)return S(b),null}else 2*B()-f.renderingStartTime>Hj&&1073741824!==c&&(b.flags|=128,d=!0,Ej(f,!1),b.lanes=4194304);f.isBackwards?(g.sibling=b.child,b.child=g):(c=f.last,null!==c?c.sibling=g:b.child=g,f.last=g)}if(null!==f.tail)return b=f.tail,f.rendering=\nb,f.tail=b.sibling,f.renderingStartTime=B(),b.sibling=null,c=M.current,G(M,d?c&1|2:c&1),b;S(b);return null;case 22:case 23:return Ij(),d=null!==b.memoizedState,null!==a&&null!==a.memoizedState!==d&&(b.flags|=8192),d&&0!==(b.mode&1)?0!==(gj&1073741824)&&(S(b),b.subtreeFlags&6&&(b.flags|=8192)):S(b),null;case 24:return null;case 25:return null}throw Error(p(156,b.tag));}\nfunction Jj(a,b){wg(b);switch(b.tag){case 1:return Zf(b.type)&&$f(),a=b.flags,a&65536?(b.flags=a&-65537|128,b):null;case 3:return Jh(),E(Wf),E(H),Oh(),a=b.flags,0!==(a&65536)&&0===(a&128)?(b.flags=a&-65537|128,b):null;case 5:return Lh(b),null;case 13:E(M);a=b.memoizedState;if(null!==a&&null!==a.dehydrated){if(null===b.alternate)throw Error(p(340));Ig()}a=b.flags;return a&65536?(b.flags=a&-65537|128,b):null;case 19:return E(M),null;case 4:return Jh(),null;case 10:return Rg(b.type._context),null;case 22:case 23:return Ij(),\nnull;case 24:return null;default:return null}}var Kj=!1,U=!1,Lj=\"function\"===typeof WeakSet?WeakSet:Set,V=null;function Mj(a,b){var c=a.ref;if(null!==c)if(\"function\"===typeof c)try{c(null)}catch(d){W(a,b,d)}else c.current=null}function Nj(a,b,c){try{c()}catch(d){W(a,b,d)}}var Oj=!1;\nfunction Pj(a,b){Cf=dd;a=Me();if(Ne(a)){if(\"selectionStart\"in a)var c={start:a.selectionStart,end:a.selectionEnd};else a:{c=(c=a.ownerDocument)&&c.defaultView||window;var d=c.getSelection&&c.getSelection();if(d&&0!==d.rangeCount){c=d.anchorNode;var e=d.anchorOffset,f=d.focusNode;d=d.focusOffset;try{c.nodeType,f.nodeType}catch(F){c=null;break a}var g=0,h=-1,k=-1,l=0,m=0,q=a,r=null;b:for(;;){for(var y;;){q!==c||0!==e&&3!==q.nodeType||(h=g+e);q!==f||0!==d&&3!==q.nodeType||(k=g+d);3===q.nodeType&&(g+=\nq.nodeValue.length);if(null===(y=q.firstChild))break;r=q;q=y}for(;;){if(q===a)break b;r===c&&++l===e&&(h=g);r===f&&++m===d&&(k=g);if(null!==(y=q.nextSibling))break;q=r;r=q.parentNode}q=y}c=-1===h||-1===k?null:{start:h,end:k}}else c=null}c=c||{start:0,end:0}}else c=null;Df={focusedElem:a,selectionRange:c};dd=!1;for(V=b;null!==V;)if(b=V,a=b.child,0!==(b.subtreeFlags&1028)&&null!==a)a.return=b,V=a;else for(;null!==V;){b=V;try{var n=b.alternate;if(0!==(b.flags&1024))switch(b.tag){case 0:case 11:case 15:break;\ncase 1:if(null!==n){var t=n.memoizedProps,J=n.memoizedState,x=b.stateNode,w=x.getSnapshotBeforeUpdate(b.elementType===b.type?t:Lg(b.type,t),J);x.__reactInternalSnapshotBeforeUpdate=w}break;case 3:var u=b.stateNode.containerInfo;1===u.nodeType?u.textContent=\"\":9===u.nodeType&&u.documentElement&&u.removeChild(u.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(p(163));}}catch(F){W(b,b.return,F)}a=b.sibling;if(null!==a){a.return=b.return;V=a;break}V=b.return}n=Oj;Oj=!1;return n}\nfunction Qj(a,b,c){var d=b.updateQueue;d=null!==d?d.lastEffect:null;if(null!==d){var e=d=d.next;do{if((e.tag&a)===a){var f=e.destroy;e.destroy=void 0;void 0!==f&&Nj(b,c,f)}e=e.next}while(e!==d)}}function Rj(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.create;c.destroy=d()}c=c.next}while(c!==b)}}function Sj(a){var b=a.ref;if(null!==b){var c=a.stateNode;switch(a.tag){case 5:a=c;break;default:a=c}\"function\"===typeof b?b(a):b.current=a}}\nfunction Tj(a){var b=a.alternate;null!==b&&(a.alternate=null,Tj(b));a.child=null;a.deletions=null;a.sibling=null;5===a.tag&&(b=a.stateNode,null!==b&&(delete b[Of],delete b[Pf],delete b[of],delete b[Qf],delete b[Rf]));a.stateNode=null;a.return=null;a.dependencies=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.stateNode=null;a.updateQueue=null}function Uj(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction Vj(a){a:for(;;){for(;null===a.sibling;){if(null===a.return||Uj(a.return))return null;a=a.return}a.sibling.return=a.return;for(a=a.sibling;5!==a.tag&&6!==a.tag&&18!==a.tag;){if(a.flags&2)continue a;if(null===a.child||4===a.tag)continue a;else a.child.return=a,a=a.child}if(!(a.flags&2))return a.stateNode}}\nfunction Wj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=Bf));else if(4!==d&&(a=a.child,null!==a))for(Wj(a,b,c),a=a.sibling;null!==a;)Wj(a,b,c),a=a.sibling}\nfunction Xj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(Xj(a,b,c),a=a.sibling;null!==a;)Xj(a,b,c),a=a.sibling}var X=null,Yj=!1;function Zj(a,b,c){for(c=c.child;null!==c;)ak(a,b,c),c=c.sibling}\nfunction ak(a,b,c){if(lc&&\"function\"===typeof lc.onCommitFiberUnmount)try{lc.onCommitFiberUnmount(kc,c)}catch(h){}switch(c.tag){case 5:U||Mj(c,b);case 6:var d=X,e=Yj;X=null;Zj(a,b,c);X=d;Yj=e;null!==X&&(Yj?(a=X,c=c.stateNode,8===a.nodeType?a.parentNode.removeChild(c):a.removeChild(c)):X.removeChild(c.stateNode));break;case 18:null!==X&&(Yj?(a=X,c=c.stateNode,8===a.nodeType?Kf(a.parentNode,c):1===a.nodeType&&Kf(a,c),bd(a)):Kf(X,c.stateNode));break;case 4:d=X;e=Yj;X=c.stateNode.containerInfo;Yj=!0;\nZj(a,b,c);X=d;Yj=e;break;case 0:case 11:case 14:case 15:if(!U&&(d=c.updateQueue,null!==d&&(d=d.lastEffect,null!==d))){e=d=d.next;do{var f=e,g=f.destroy;f=f.tag;void 0!==g&&(0!==(f&2)?Nj(c,b,g):0!==(f&4)&&Nj(c,b,g));e=e.next}while(e!==d)}Zj(a,b,c);break;case 1:if(!U&&(Mj(c,b),d=c.stateNode,\"function\"===typeof d.componentWillUnmount))try{d.props=c.memoizedProps,d.state=c.memoizedState,d.componentWillUnmount()}catch(h){W(c,b,h)}Zj(a,b,c);break;case 21:Zj(a,b,c);break;case 22:c.mode&1?(U=(d=U)||null!==\nc.memoizedState,Zj(a,b,c),U=d):Zj(a,b,c);break;default:Zj(a,b,c)}}function bk(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Lj);b.forEach(function(b){var d=ck.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}\nfunction dk(a,b){var c=b.deletions;if(null!==c)for(var d=0;de&&(e=g);d&=~f}d=e;d=B()-d;d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*mk(d/1960))-d;if(10a?16:a;if(null===xk)var d=!1;else{a=xk;xk=null;yk=0;if(0!==(K&6))throw Error(p(331));var e=K;K|=4;for(V=a.current;null!==V;){var f=V,g=f.child;if(0!==(V.flags&16)){var h=f.deletions;if(null!==h){for(var k=0;kB()-gk?Lk(a,0):sk|=c);Ek(a,b)}function Zk(a,b){0===b&&(0===(a.mode&1)?b=1:(b=sc,sc<<=1,0===(sc&130023424)&&(sc=4194304)));var c=L();a=Zg(a,b);null!==a&&(Ac(a,b,c),Ek(a,c))}function vj(a){var b=a.memoizedState,c=0;null!==b&&(c=b.retryLane);Zk(a,c)}\nfunction ck(a,b){var c=0;switch(a.tag){case 13:var d=a.stateNode;var e=a.memoizedState;null!==e&&(c=e.retryLane);break;case 19:d=a.stateNode;break;default:throw Error(p(314));}null!==d&&d.delete(b);Zk(a,c)}var Wk;\nWk=function(a,b,c){if(null!==a)if(a.memoizedProps!==b.pendingProps||Wf.current)Ug=!0;else{if(0===(a.lanes&c)&&0===(b.flags&128))return Ug=!1,zj(a,b,c);Ug=0!==(a.flags&131072)?!0:!1}else Ug=!1,I&&0!==(b.flags&1048576)&&ug(b,ng,b.index);b.lanes=0;switch(b.tag){case 2:var d=b.type;jj(a,b);a=b.pendingProps;var e=Yf(b,H.current);Tg(b,c);e=Xh(null,b,d,a,e,c);var f=bi();b.flags|=1;\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof?(b.tag=1,b.memoizedState=null,b.updateQueue=\nnull,Zf(d)?(f=!0,cg(b)):f=!1,b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null,ah(b),e.updater=nh,b.stateNode=e,e._reactInternals=b,rh(b,d,a,c),b=kj(null,b,d,!0,f,c)):(b.tag=0,I&&f&&vg(b),Yi(null,b,e,c),b=b.child);return b;case 16:d=b.elementType;a:{jj(a,b);a=b.pendingProps;e=d._init;d=e(d._payload);b.type=d;e=b.tag=$k(d);a=Lg(d,a);switch(e){case 0:b=dj(null,b,d,a,c);break a;case 1:b=ij(null,b,d,a,c);break a;case 11:b=Zi(null,b,d,a,c);break a;case 14:b=aj(null,b,d,Lg(d.type,a),c);break a}throw Error(p(306,\nd,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),dj(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),ij(a,b,d,e,c);case 3:a:{lj(b);if(null===a)throw Error(p(387));d=b.pendingProps;f=b.memoizedState;e=f.element;bh(a,b);gh(b,d,null,c);var g=b.memoizedState;d=g.element;if(f.isDehydrated)if(f={element:d,isDehydrated:!1,cache:g.cache,pendingSuspenseBoundaries:g.pendingSuspenseBoundaries,transitions:g.transitions},b.updateQueue.baseState=\nf,b.memoizedState=f,b.flags&256){e=Ki(Error(p(423)),b);b=mj(a,b,d,c,e);break a}else if(d!==e){e=Ki(Error(p(424)),b);b=mj(a,b,d,c,e);break a}else for(yg=Lf(b.stateNode.containerInfo.firstChild),xg=b,I=!0,zg=null,c=Ch(b,null,d,c),b.child=c;c;)c.flags=c.flags&-3|4096,c=c.sibling;else{Ig();if(d===e){b=$i(a,b,c);break a}Yi(a,b,d,c)}b=b.child}return b;case 5:return Kh(b),null===a&&Eg(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,g=e.children,Ef(d,e)?g=null:null!==f&&Ef(d,f)&&(b.flags|=32),\nhj(a,b),Yi(a,b,g,c),b.child;case 6:return null===a&&Eg(b),null;case 13:return pj(a,b,c);case 4:return Ih(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Bh(b,null,d,c):Yi(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),Zi(a,b,d,e,c);case 7:return Yi(a,b,b.pendingProps,c),b.child;case 8:return Yi(a,b,b.pendingProps.children,c),b.child;case 12:return Yi(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;f=b.memoizedProps;\ng=e.value;G(Mg,d._currentValue);d._currentValue=g;if(null!==f)if(He(f.value,g)){if(f.children===e.children&&!Wf.current){b=$i(a,b,c);break a}}else for(f=b.child,null!==f&&(f.return=b);null!==f;){var h=f.dependencies;if(null!==h){g=f.child;for(var k=h.firstContext;null!==k;){if(k.context===d){if(1===f.tag){k=ch(-1,c&-c);k.tag=2;var l=f.updateQueue;if(null!==l){l=l.shared;var m=l.pending;null===m?k.next=k:(k.next=m.next,m.next=k);l.pending=k}}f.lanes|=c;k=f.alternate;null!==k&&(k.lanes|=c);Sg(f.return,\nc,b);h.lanes|=c;break}k=k.next}}else if(10===f.tag)g=f.type===b.type?null:f.child;else if(18===f.tag){g=f.return;if(null===g)throw Error(p(341));g.lanes|=c;h=g.alternate;null!==h&&(h.lanes|=c);Sg(g,c,b);g=f.sibling}else g=f.child;if(null!==g)g.return=f;else for(g=f;null!==g;){if(g===b){g=null;break}f=g.sibling;if(null!==f){f.return=g.return;g=f;break}g=g.return}f=g}Yi(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,d=b.pendingProps.children,Tg(b,c),e=Vg(e),d=d(e),b.flags|=1,Yi(a,b,d,c),\nb.child;case 14:return d=b.type,e=Lg(d,b.pendingProps),e=Lg(d.type,e),aj(a,b,d,e,c);case 15:return cj(a,b,b.type,b.pendingProps,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),jj(a,b),b.tag=1,Zf(d)?(a=!0,cg(b)):a=!1,Tg(b,c),ph(b,d,e),rh(b,d,e,c),kj(null,b,d,!0,a,c);case 19:return yj(a,b,c);case 22:return ej(a,b,c)}throw Error(p(156,b.tag));};function Gk(a,b){return ac(a,b)}\nfunction al(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.subtreeFlags=this.flags=0;this.deletions=null;this.childLanes=this.lanes=0;this.alternate=null}function Bg(a,b,c,d){return new al(a,b,c,d)}function bj(a){a=a.prototype;return!(!a||!a.isReactComponent)}\nfunction $k(a){if(\"function\"===typeof a)return bj(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===Da)return 11;if(a===Ga)return 14}return 2}\nfunction wh(a,b){var c=a.alternate;null===c?(c=Bg(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.type=a.type,c.flags=0,c.subtreeFlags=0,c.deletions=null);c.flags=a.flags&14680064;c.childLanes=a.childLanes;c.lanes=a.lanes;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{lanes:b.lanes,firstContext:b.firstContext};\nc.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction yh(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)bj(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case ya:return Ah(c.children,e,f,b);case za:g=8;e|=8;break;case Aa:return a=Bg(12,c,b,e|2),a.elementType=Aa,a.lanes=f,a;case Ea:return a=Bg(13,c,b,e),a.elementType=Ea,a.lanes=f,a;case Fa:return a=Bg(19,c,b,e),a.elementType=Fa,a.lanes=f,a;case Ia:return qj(c,e,f,b);default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case Ba:g=10;break a;case Ca:g=9;break a;case Da:g=11;\nbreak a;case Ga:g=14;break a;case Ha:g=16;d=null;break a}throw Error(p(130,null==a?a:typeof a,\"\"));}b=Bg(g,c,b,e);b.elementType=a;b.type=d;b.lanes=f;return b}function Ah(a,b,c,d){a=Bg(7,a,d,b);a.lanes=c;return a}function qj(a,b,c,d){a=Bg(22,a,d,b);a.elementType=Ia;a.lanes=c;a.stateNode={isHidden:!1};return a}function xh(a,b,c){a=Bg(6,a,null,b);a.lanes=c;return a}\nfunction zh(a,b,c){b=Bg(4,null!==a.children?a.children:[],a.key,b);b.lanes=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction bl(a,b,c,d,e){this.tag=b;this.containerInfo=a;this.finishedWork=this.pingCache=this.current=this.pendingChildren=null;this.timeoutHandle=-1;this.callbackNode=this.pendingContext=this.context=null;this.callbackPriority=0;this.eventTimes=zc(0);this.expirationTimes=zc(-1);this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0;this.entanglements=zc(0);this.identifierPrefix=d;this.onRecoverableError=e;this.mutableSourceEagerHydrationData=\nnull}function cl(a,b,c,d,e,f,g,h,k){a=new bl(a,b,c,h,k);1===b?(b=1,!0===f&&(b|=8)):b=0;f=Bg(3,null,null,b);a.current=f;f.stateNode=a;f.memoizedState={element:d,isDehydrated:c,cache:null,transitions:null,pendingSuspenseBoundaries:null};ah(f);return a}function dl(a,b,c){var d=3= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nvar propTypes = {\n bgColor: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.string]).isRequired,\n bgD: _propTypes2.default.string.isRequired,\n fgColor: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.string]).isRequired,\n fgD: _propTypes2.default.string.isRequired,\n size: _propTypes2.default.number.isRequired,\n title: _propTypes2.default.string,\n viewBoxSize: _propTypes2.default.number.isRequired,\n xmlns: _propTypes2.default.string\n};\n\nvar defaultProps = {\n title: undefined,\n xmlns: \"http://www.w3.org/2000/svg\"\n};\n\nvar QRCodeSvg = (0, _react.forwardRef)(function (_ref, ref) {\n var bgColor = _ref.bgColor,\n bgD = _ref.bgD,\n fgD = _ref.fgD,\n fgColor = _ref.fgColor,\n size = _ref.size,\n title = _ref.title,\n viewBoxSize = _ref.viewBoxSize,\n props = _objectWithoutProperties(_ref, [\"bgColor\", \"bgD\", \"fgD\", \"fgColor\", \"size\", \"title\", \"viewBoxSize\"]);\n\n return _react2.default.createElement(\n \"svg\",\n _extends({}, props, { height: size, ref: ref, viewBox: \"0 0 \" + viewBoxSize + \" \" + viewBoxSize, width: size }),\n title ? _react2.default.createElement(\n \"title\",\n null,\n title\n ) : null,\n _react2.default.createElement(\"path\", { d: bgD, fill: bgColor }),\n _react2.default.createElement(\"path\", { d: fgD, fill: fgColor })\n );\n});\n\nQRCodeSvg.displayName = \"QRCodeSvg\";\nQRCodeSvg.propTypes = propTypes;\nQRCodeSvg.defaultProps = defaultProps;\n\nexports.default = QRCodeSvg;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _QRCode = require(\"qr.js/lib/QRCode\");\n\nvar _QRCode2 = _interopRequireDefault(_QRCode);\n\nvar _ErrorCorrectLevel = require(\"qr.js/lib/ErrorCorrectLevel\");\n\nvar _ErrorCorrectLevel2 = _interopRequireDefault(_ErrorCorrectLevel);\n\nvar _propTypes = require(\"prop-types\");\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _QRCodeSvg = require(\"./QRCodeSvg\");\n\nvar _QRCodeSvg2 = _interopRequireDefault(_QRCodeSvg);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } // A `qr.js` doesn't handle error level of zero (M) so we need to do it right, thus the deep require.\n\n\nvar propTypes = {\n bgColor: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.string]),\n fgColor: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.string]),\n level: _propTypes2.default.string,\n size: _propTypes2.default.number,\n value: _propTypes2.default.string.isRequired\n};\n\nvar defaultProps = {\n bgColor: \"#FFFFFF\",\n fgColor: \"#000000\",\n level: \"L\",\n size: 256\n};\n\nvar QRCode = (0, _react.forwardRef)(function (_ref, ref) {\n var bgColor = _ref.bgColor,\n fgColor = _ref.fgColor,\n level = _ref.level,\n size = _ref.size,\n value = _ref.value,\n props = _objectWithoutProperties(_ref, [\"bgColor\", \"fgColor\", \"level\", \"size\", \"value\"]);\n\n // Use type === -1 to automatically pick the best type.\n var qrcode = new _QRCode2.default(-1, _ErrorCorrectLevel2.default[level]);\n qrcode.addData(value);\n qrcode.make();\n var cells = qrcode.modules;\n return _react2.default.createElement(_QRCodeSvg2.default, _extends({}, props, {\n bgColor: bgColor,\n bgD: cells.map(function (row, rowIndex) {\n return row.map(function (cell, cellIndex) {\n return !cell ? \"M \" + cellIndex + \" \" + rowIndex + \" l 1 0 0 1 -1 0 Z\" : \"\";\n }).join(\" \");\n }).join(\" \"),\n fgColor: fgColor,\n fgD: cells.map(function (row, rowIndex) {\n return row.map(function (cell, cellIndex) {\n return cell ? \"M \" + cellIndex + \" \" + rowIndex + \" l 1 0 0 1 -1 0 Z\" : \"\";\n }).join(\" \");\n }).join(\" \"),\n ref: ref,\n size: size,\n viewBoxSize: cells.length\n }));\n});\n\nQRCode.displayName = \"QRCode\";\nQRCode.propTypes = propTypes;\nQRCode.defaultProps = defaultProps;\n\nexports.default = QRCode;","import React from 'react'\n\nlet renderErr = 'Renderer Error ☝️'\n\nexport const actions = {\n init: 'init',\n}\n\nexport const defaultRenderer = ({ value = '' }) => value;\nexport const emptyRenderer = () => <> ;\n\nexport const defaultColumn = {\n Cell: defaultRenderer,\n width: 150,\n minWidth: 0,\n maxWidth: Number.MAX_SAFE_INTEGER,\n}\n\nfunction mergeProps(...propList) {\n return propList.reduce((props, next) => {\n const { style, className, ...rest } = next\n\n props = {\n ...props,\n ...rest,\n }\n\n if (style) {\n props.style = props.style\n ? { ...(props.style || {}), ...(style || {}) }\n : style\n }\n\n if (className) {\n props.className = props.className\n ? props.className + ' ' + className\n : className\n }\n\n if (props.className === '') {\n delete props.className\n }\n\n return props\n }, {})\n}\n\nfunction handlePropGetter(prevProps, userProps, meta) {\n // Handle a lambda, pass it the previous props\n if (typeof userProps === 'function') {\n return handlePropGetter({}, userProps(prevProps, meta))\n }\n\n // Handle an array, merge each item as separate props\n if (Array.isArray(userProps)) {\n return mergeProps(prevProps, ...userProps)\n }\n\n // Handle an object by default, merge the two objects\n return mergeProps(prevProps, userProps)\n}\n\nexport const makePropGetter = (hooks, meta = {}) => {\n return (userProps = {}) =>\n [...hooks, userProps].reduce(\n (prev, next) =>\n handlePropGetter(prev, next, {\n ...meta,\n userProps,\n }),\n {}\n )\n}\n\nexport const reduceHooks = (hooks, initial, meta = {}, allowUndefined) =>\n hooks.reduce((prev, next) => {\n const nextValue = next(prev, meta)\n if (process.env.NODE_ENV !== 'production') {\n if (!allowUndefined && typeof nextValue === 'undefined') {\n console.info(next)\n throw new Error(\n 'React Table: A reducer hook ☝️ just returned undefined! This is not allowed.'\n )\n }\n }\n return nextValue\n }, initial)\n\nexport const loopHooks = (hooks, context, meta = {}) =>\n hooks.forEach(hook => {\n const nextValue = hook(context, meta)\n if (process.env.NODE_ENV !== 'production') {\n if (typeof nextValue !== 'undefined') {\n console.info(hook, nextValue)\n throw new Error(\n 'React Table: A loop-type hook ☝️ just returned a value! This is not allowed.'\n )\n }\n }\n })\n\nexport function ensurePluginOrder(plugins, befores, pluginName, afters) {\n if (process.env.NODE_ENV !== 'production' && afters) {\n throw new Error(\n `Defining plugins in the \"after\" section of ensurePluginOrder is no longer supported (see plugin ${pluginName})`\n )\n }\n const pluginIndex = plugins.findIndex(\n plugin => plugin.pluginName === pluginName\n )\n\n if (pluginIndex === -1) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(`The plugin \"${pluginName}\" was not found in the plugin list!\nThis usually means you need to need to name your plugin hook by setting the 'pluginName' property of the hook function, eg:\n\n ${pluginName}.pluginName = '${pluginName}'\n`)\n }\n }\n\n befores.forEach(before => {\n const beforeIndex = plugins.findIndex(\n plugin => plugin.pluginName === before\n )\n if (beforeIndex > -1 && beforeIndex > pluginIndex) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(\n `React Table: The ${pluginName} plugin hook must be placed after the ${before} plugin hook!`\n )\n }\n }\n })\n}\n\nexport function functionalUpdate(updater, old) {\n return typeof updater === 'function' ? updater(old) : updater\n}\n\nexport function useGetLatest(obj) {\n const ref = React.useRef()\n ref.current = obj\n\n return React.useCallback(() => ref.current, [])\n}\n\n// SSR has issues with useLayoutEffect still, so use useEffect during SSR\nexport const safeUseLayoutEffect =\n typeof document !== 'undefined' ? React.useLayoutEffect : React.useEffect\n\nexport function useMountedLayoutEffect(fn, deps) {\n const mountedRef = React.useRef(false)\n\n safeUseLayoutEffect(() => {\n if (mountedRef.current) {\n fn()\n }\n mountedRef.current = true\n // eslint-disable-next-line\n }, deps)\n}\n\nexport function useAsyncDebounce(defaultFn, defaultWait = 0) {\n const debounceRef = React.useRef({})\n\n const getDefaultFn = useGetLatest(defaultFn)\n const getDefaultWait = useGetLatest(defaultWait)\n\n return React.useCallback(\n async (...args) => {\n if (!debounceRef.current.promise) {\n debounceRef.current.promise = new Promise((resolve, reject) => {\n debounceRef.current.resolve = resolve\n debounceRef.current.reject = reject\n })\n }\n\n if (debounceRef.current.timeout) {\n clearTimeout(debounceRef.current.timeout)\n }\n\n debounceRef.current.timeout = setTimeout(async () => {\n delete debounceRef.current.timeout\n try {\n debounceRef.current.resolve(await getDefaultFn()(...args))\n } catch (err) {\n debounceRef.current.reject(err)\n } finally {\n delete debounceRef.current.promise\n }\n }, getDefaultWait())\n\n return debounceRef.current.promise\n },\n [getDefaultFn, getDefaultWait]\n )\n}\n\nexport function makeRenderer(instance, column, meta = {}) {\n return (type, userProps = {}) => {\n const Comp = typeof type === 'string' ? column[type] : type\n\n if (typeof Comp === 'undefined') {\n console.info(column)\n throw new Error(renderErr)\n }\n\n return flexRender(Comp, { ...instance, column, ...meta, ...userProps })\n }\n}\n\nexport function flexRender(Comp, props) {\n return isReactComponent(Comp) ? : Comp\n}\n\nfunction isReactComponent(component) {\n return (\n isClassComponent(component) ||\n typeof component === 'function' ||\n isExoticComponent(component)\n )\n}\n\nfunction isClassComponent(component) {\n return (\n typeof component === 'function' &&\n (() => {\n const proto = Object.getPrototypeOf(component)\n return proto.prototype && proto.prototype.isReactComponent\n })()\n )\n}\n\nfunction isExoticComponent(component) {\n return (\n typeof component === 'object' &&\n typeof component.$$typeof === 'symbol' &&\n ['react.memo', 'react.forward_ref'].includes(component.$$typeof.description)\n )\n}\n","import { defaultColumn, emptyRenderer } from './publicUtils'\n\n// Find the depth of the columns\nexport function findMaxDepth(columns, depth = 0) {\n return columns.reduce((prev, curr) => {\n if (curr.columns) {\n return Math.max(prev, findMaxDepth(curr.columns, depth + 1))\n }\n return depth\n }, 0)\n}\n\n// Build the visible columns, headers and flat column list\nexport function linkColumnStructure(columns, parent, depth = 0) {\n return columns.map(column => {\n column = {\n ...column,\n parent,\n depth,\n }\n\n assignColumnAccessor(column)\n\n if (column.columns) {\n column.columns = linkColumnStructure(column.columns, column, depth + 1)\n }\n return column\n })\n}\n\nexport function flattenColumns(columns) {\n return flattenBy(columns, 'columns')\n}\n\nexport function assignColumnAccessor(column) {\n // First check for string accessor\n let { id, accessor, Header } = column\n\n if (typeof accessor === 'string') {\n id = id || accessor\n const accessorPath = accessor.split('.')\n accessor = row => getBy(row, accessorPath)\n }\n\n if (!id && typeof Header === 'string' && Header) {\n id = Header\n }\n\n if (!id && column.columns) {\n console.error(column)\n throw new Error('A column ID (or unique \"Header\" value) is required!')\n }\n\n if (!id) {\n console.error(column)\n throw new Error('A column ID (or string accessor) is required!')\n }\n\n Object.assign(column, {\n id,\n accessor,\n })\n\n return column\n}\n\nexport function decorateColumn(column, userDefaultColumn) {\n if (!userDefaultColumn) {\n throw new Error()\n }\n Object.assign(column, {\n // Make sure there is a fallback header, just in case\n Header: emptyRenderer,\n Footer: emptyRenderer,\n ...defaultColumn,\n ...userDefaultColumn,\n ...column,\n })\n\n Object.assign(column, {\n originalWidth: column.width,\n })\n\n return column\n}\n\n// Build the header groups from the bottom up\nexport function makeHeaderGroups(\n allColumns,\n defaultColumn,\n additionalHeaderProperties = () => ({})\n) {\n const headerGroups = []\n\n let scanColumns = allColumns\n\n let uid = 0\n const getUID = () => uid++\n\n while (scanColumns.length) {\n // The header group we are creating\n const headerGroup = {\n headers: [],\n }\n\n // The parent columns we're going to scan next\n const parentColumns = []\n\n const hasParents = scanColumns.some(d => d.parent)\n\n // Scan each column for parents\n scanColumns.forEach(column => {\n // What is the latest (last) parent column?\n let latestParentColumn = [...parentColumns].reverse()[0]\n\n let newParent\n\n if (hasParents) {\n // If the column has a parent, add it if necessary\n if (column.parent) {\n newParent = {\n ...column.parent,\n originalId: column.parent.id,\n id: `${column.parent.id}_${getUID()}`,\n headers: [column],\n ...additionalHeaderProperties(column),\n }\n } else {\n // If other columns have parents, we'll need to add a place holder if necessary\n const originalId = `${column.id}_placeholder`\n newParent = decorateColumn(\n {\n originalId,\n id: `${column.id}_placeholder_${getUID()}`,\n placeholderOf: column,\n headers: [column],\n ...additionalHeaderProperties(column),\n },\n defaultColumn\n )\n }\n\n // If the resulting parent columns are the same, just add\n // the column and increment the header span\n if (\n latestParentColumn &&\n latestParentColumn.originalId === newParent.originalId\n ) {\n latestParentColumn.headers.push(column)\n } else {\n parentColumns.push(newParent)\n }\n }\n\n headerGroup.headers.push(column)\n })\n\n headerGroups.push(headerGroup)\n\n // Start scanning the parent columns\n scanColumns = parentColumns\n }\n\n return headerGroups.reverse()\n}\n\nconst pathObjCache = new Map()\n\nexport function getBy(obj, path, def) {\n if (!path) {\n return obj\n }\n const cacheKey = typeof path === 'function' ? path : JSON.stringify(path)\n\n const pathObj =\n pathObjCache.get(cacheKey) ||\n (() => {\n const pathObj = makePathArray(path)\n pathObjCache.set(cacheKey, pathObj)\n return pathObj\n })()\n\n let val\n\n try {\n val = pathObj.reduce((cursor, pathPart) => cursor[pathPart], obj)\n } catch (e) {\n // continue regardless of error\n }\n return typeof val !== 'undefined' ? val : def\n}\n\nexport function getFirstDefined(...args) {\n for (let i = 0; i < args.length; i += 1) {\n if (typeof args[i] !== 'undefined') {\n return args[i]\n }\n }\n}\n\nexport function getElementDimensions(element) {\n const rect = element.getBoundingClientRect()\n const style = window.getComputedStyle(element)\n const margins = {\n left: parseInt(style.marginLeft),\n right: parseInt(style.marginRight),\n }\n const padding = {\n left: parseInt(style.paddingLeft),\n right: parseInt(style.paddingRight),\n }\n return {\n left: Math.ceil(rect.left),\n width: Math.ceil(rect.width),\n outerWidth: Math.ceil(\n rect.width + margins.left + margins.right + padding.left + padding.right\n ),\n marginLeft: margins.left,\n marginRight: margins.right,\n paddingLeft: padding.left,\n paddingRight: padding.right,\n scrollWidth: element.scrollWidth,\n }\n}\n\nexport function isFunction(a) {\n if (typeof a === 'function') {\n return a\n }\n}\n\nexport function flattenBy(arr, key) {\n const flat = []\n\n const recurse = arr => {\n arr.forEach(d => {\n if (!d[key]) {\n flat.push(d)\n } else {\n recurse(d[key])\n }\n })\n }\n\n recurse(arr)\n\n return flat\n}\n\nexport function expandRows(\n rows,\n { manualExpandedKey, expanded, expandSubRows = true }\n) {\n const expandedRows = []\n\n const handleRow = (row, addToExpandedRows = true) => {\n row.isExpanded =\n (row.original && row.original[manualExpandedKey]) || expanded[row.id]\n\n row.canExpand = row.subRows && !!row.subRows.length\n\n if (addToExpandedRows) {\n expandedRows.push(row)\n }\n\n if (row.subRows && row.subRows.length && row.isExpanded) {\n row.subRows.forEach(row => handleRow(row, expandSubRows))\n }\n }\n\n rows.forEach(row => handleRow(row))\n\n return expandedRows\n}\n\nexport function getFilterMethod(filter, userFilterTypes, filterTypes) {\n return (\n isFunction(filter) ||\n userFilterTypes[filter] ||\n filterTypes[filter] ||\n filterTypes.text\n )\n}\n\nexport function shouldAutoRemoveFilter(autoRemove, value, column) {\n return autoRemove ? autoRemove(value, column) : typeof value === 'undefined'\n}\n\nexport function unpreparedAccessWarning() {\n throw new Error(\n 'React-Table: You have not called prepareRow(row) one or more rows you are attempting to render.'\n )\n}\n\nlet passiveSupported = null\nexport function passiveEventSupported() {\n // memoize support to avoid adding multiple test events\n if (typeof passiveSupported === 'boolean') return passiveSupported\n\n let supported = false\n try {\n const options = {\n get passive() {\n supported = true\n return false\n },\n }\n\n window.addEventListener('test', null, options)\n window.removeEventListener('test', null, options)\n } catch (err) {\n supported = false\n }\n passiveSupported = supported\n return passiveSupported\n}\n\n//\n\nconst reOpenBracket = /\\[/g\nconst reCloseBracket = /\\]/g\n\nfunction makePathArray(obj) {\n return (\n flattenDeep(obj)\n // remove all periods in parts\n .map(d => String(d).replace('.', '_'))\n // join parts using period\n .join('.')\n // replace brackets with periods\n .replace(reOpenBracket, '.')\n .replace(reCloseBracket, '')\n // split it back out on periods\n .split('.')\n )\n}\n\nfunction flattenDeep(arr, newArr = []) {\n if (!Array.isArray(arr)) {\n newArr.push(arr)\n } else {\n for (let i = 0; i < arr.length; i += 1) {\n flattenDeep(arr[i], newArr)\n }\n }\n return newArr\n}\n","const defaultGetTableProps = props => ({\n role: 'table',\n ...props,\n})\n\nconst defaultGetTableBodyProps = props => ({\n role: 'rowgroup',\n ...props,\n})\n\nconst defaultGetHeaderProps = (props, { column }) => ({\n key: `header_${column.id}`,\n colSpan: column.totalVisibleHeaderCount,\n role: 'columnheader',\n ...props,\n})\n\nconst defaultGetFooterProps = (props, { column }) => ({\n key: `footer_${column.id}`,\n colSpan: column.totalVisibleHeaderCount,\n ...props,\n})\n\nconst defaultGetHeaderGroupProps = (props, { index }) => ({\n key: `headerGroup_${index}`,\n role: 'row',\n ...props,\n})\n\nconst defaultGetFooterGroupProps = (props, { index }) => ({\n key: `footerGroup_${index}`,\n ...props,\n})\n\nconst defaultGetRowProps = (props, { row }) => ({\n key: `row_${row.id}`,\n role: 'row',\n ...props,\n})\n\nconst defaultGetCellProps = (props, { cell }) => ({\n key: `cell_${cell.row.id}_${cell.column.id}`,\n role: 'cell',\n ...props,\n})\n\nexport default function makeDefaultPluginHooks() {\n return {\n useOptions: [],\n stateReducers: [],\n useControlledState: [],\n columns: [],\n columnsDeps: [],\n allColumns: [],\n allColumnsDeps: [],\n accessValue: [],\n materializedColumns: [],\n materializedColumnsDeps: [],\n useInstanceAfterData: [],\n visibleColumns: [],\n visibleColumnsDeps: [],\n headerGroups: [],\n headerGroupsDeps: [],\n useInstanceBeforeDimensions: [],\n useInstance: [],\n prepareRow: [],\n getTableProps: [defaultGetTableProps],\n getTableBodyProps: [defaultGetTableBodyProps],\n getHeaderGroupProps: [defaultGetHeaderGroupProps],\n getFooterGroupProps: [defaultGetFooterGroupProps],\n getHeaderProps: [defaultGetHeaderProps],\n getFooterProps: [defaultGetFooterProps],\n getRowProps: [defaultGetRowProps],\n getCellProps: [defaultGetCellProps],\n useFinalInstance: [],\n }\n}\n","import React from 'react'\n\nimport {\n actions,\n functionalUpdate,\n useGetLatest,\n makePropGetter,\n useMountedLayoutEffect,\n} from '../publicUtils'\n\nactions.resetHiddenColumns = 'resetHiddenColumns'\nactions.toggleHideColumn = 'toggleHideColumn'\nactions.setHiddenColumns = 'setHiddenColumns'\nactions.toggleHideAllColumns = 'toggleHideAllColumns'\n\nexport const useColumnVisibility = hooks => {\n hooks.getToggleHiddenProps = [defaultGetToggleHiddenProps]\n hooks.getToggleHideAllColumnsProps = [defaultGetToggleHideAllColumnsProps]\n\n hooks.stateReducers.push(reducer)\n hooks.useInstanceBeforeDimensions.push(useInstanceBeforeDimensions)\n hooks.headerGroupsDeps.push((deps, { instance }) => [\n ...deps,\n instance.state.hiddenColumns,\n ])\n hooks.useInstance.push(useInstance)\n}\n\nuseColumnVisibility.pluginName = 'useColumnVisibility'\n\nconst defaultGetToggleHiddenProps = (props, { column }) => [\n props,\n {\n onChange: e => {\n column.toggleHidden(!e.target.checked)\n },\n style: {\n cursor: 'pointer',\n },\n checked: column.isVisible,\n title: 'Toggle Column Visible',\n },\n]\n\nconst defaultGetToggleHideAllColumnsProps = (props, { instance }) => [\n props,\n {\n onChange: e => {\n instance.toggleHideAllColumns(!e.target.checked)\n },\n style: {\n cursor: 'pointer',\n },\n checked: !instance.allColumnsHidden && !instance.state.hiddenColumns.length,\n title: 'Toggle All Columns Hidden',\n indeterminate:\n !instance.allColumnsHidden && instance.state.hiddenColumns.length,\n },\n]\n\nfunction reducer(state, action, previousState, instance) {\n if (action.type === actions.init) {\n return {\n hiddenColumns: [],\n ...state,\n }\n }\n\n if (action.type === actions.resetHiddenColumns) {\n return {\n ...state,\n hiddenColumns: instance.initialState.hiddenColumns || [],\n }\n }\n\n if (action.type === actions.toggleHideColumn) {\n const should =\n typeof action.value !== 'undefined'\n ? action.value\n : !state.hiddenColumns.includes(action.columnId)\n\n const hiddenColumns = should\n ? [...state.hiddenColumns, action.columnId]\n : state.hiddenColumns.filter(d => d !== action.columnId)\n\n return {\n ...state,\n hiddenColumns,\n }\n }\n\n if (action.type === actions.setHiddenColumns) {\n return {\n ...state,\n hiddenColumns: functionalUpdate(action.value, state.hiddenColumns),\n }\n }\n\n if (action.type === actions.toggleHideAllColumns) {\n const shouldAll =\n typeof action.value !== 'undefined'\n ? action.value\n : !state.hiddenColumns.length\n\n return {\n ...state,\n hiddenColumns: shouldAll ? instance.allColumns.map(d => d.id) : [],\n }\n }\n}\n\nfunction useInstanceBeforeDimensions(instance) {\n const {\n headers,\n state: { hiddenColumns },\n } = instance\n\n const isMountedRef = React.useRef(false)\n\n if (!isMountedRef.current) {\n }\n\n const handleColumn = (column, parentVisible) => {\n column.isVisible = parentVisible && !hiddenColumns.includes(column.id)\n\n let totalVisibleHeaderCount = 0\n\n if (column.headers && column.headers.length) {\n column.headers.forEach(\n subColumn =>\n (totalVisibleHeaderCount += handleColumn(subColumn, column.isVisible))\n )\n } else {\n totalVisibleHeaderCount = column.isVisible ? 1 : 0\n }\n\n column.totalVisibleHeaderCount = totalVisibleHeaderCount\n\n return totalVisibleHeaderCount\n }\n\n let totalVisibleHeaderCount = 0\n\n headers.forEach(\n subHeader => (totalVisibleHeaderCount += handleColumn(subHeader, true))\n )\n}\n\nfunction useInstance(instance) {\n const {\n columns,\n flatHeaders,\n dispatch,\n allColumns,\n getHooks,\n state: { hiddenColumns },\n autoResetHiddenColumns = true,\n } = instance\n\n const getInstance = useGetLatest(instance)\n\n const allColumnsHidden = allColumns.length === hiddenColumns.length\n\n const toggleHideColumn = React.useCallback(\n (columnId, value) =>\n dispatch({ type: actions.toggleHideColumn, columnId, value }),\n [dispatch]\n )\n\n const setHiddenColumns = React.useCallback(\n value => dispatch({ type: actions.setHiddenColumns, value }),\n [dispatch]\n )\n\n const toggleHideAllColumns = React.useCallback(\n value => dispatch({ type: actions.toggleHideAllColumns, value }),\n [dispatch]\n )\n\n const getToggleHideAllColumnsProps = makePropGetter(\n getHooks().getToggleHideAllColumnsProps,\n { instance: getInstance() }\n )\n\n flatHeaders.forEach(column => {\n column.toggleHidden = value => {\n dispatch({\n type: actions.toggleHideColumn,\n columnId: column.id,\n value,\n })\n }\n\n column.getToggleHiddenProps = makePropGetter(\n getHooks().getToggleHiddenProps,\n {\n instance: getInstance(),\n column,\n }\n )\n })\n\n const getAutoResetHiddenColumns = useGetLatest(autoResetHiddenColumns)\n\n useMountedLayoutEffect(() => {\n if (getAutoResetHiddenColumns()) {\n dispatch({ type: actions.resetHiddenColumns })\n }\n }, [dispatch, columns])\n\n Object.assign(instance, {\n allColumnsHidden,\n toggleHideColumn,\n setHiddenColumns,\n toggleHideAllColumns,\n getToggleHideAllColumnsProps,\n })\n}\n","import React from 'react'\n\n//\n\nimport {\n linkColumnStructure,\n flattenColumns,\n assignColumnAccessor,\n unpreparedAccessWarning,\n makeHeaderGroups,\n decorateColumn,\n} from '../utils'\n\nimport {\n useGetLatest,\n reduceHooks,\n actions,\n loopHooks,\n makePropGetter,\n makeRenderer,\n} from '../publicUtils'\n\nimport makeDefaultPluginHooks from '../makeDefaultPluginHooks'\n\nimport { useColumnVisibility } from './useColumnVisibility'\n\nconst defaultInitialState = {}\nconst defaultColumnInstance = {}\nconst defaultReducer = (state, action, prevState) => state\nconst defaultGetSubRows = (row, index) => row.subRows || []\nconst defaultGetRowId = (row, index, parent) =>\n `${parent ? [parent.id, index].join('.') : index}`\nconst defaultUseControlledState = d => d\n\nfunction applyDefaults(props) {\n const {\n initialState = defaultInitialState,\n defaultColumn = defaultColumnInstance,\n getSubRows = defaultGetSubRows,\n getRowId = defaultGetRowId,\n stateReducer = defaultReducer,\n useControlledState = defaultUseControlledState,\n ...rest\n } = props\n\n return {\n ...rest,\n initialState,\n defaultColumn,\n getSubRows,\n getRowId,\n stateReducer,\n useControlledState,\n }\n}\n\nexport const useTable = (props, ...plugins) => {\n // Apply default props\n props = applyDefaults(props)\n\n // Add core plugins\n plugins = [useColumnVisibility, ...plugins]\n\n // Create the table instance\n let instanceRef = React.useRef({})\n\n // Create a getter for the instance (helps avoid a lot of potential memory leaks)\n const getInstance = useGetLatest(instanceRef.current)\n\n // Assign the props, plugins and hooks to the instance\n Object.assign(getInstance(), {\n ...props,\n plugins,\n hooks: makeDefaultPluginHooks(),\n })\n\n // Allow plugins to register hooks as early as possible\n plugins.filter(Boolean).forEach(plugin => {\n plugin(getInstance().hooks)\n })\n\n // Consume all hooks and make a getter for them\n const getHooks = useGetLatest(getInstance().hooks)\n getInstance().getHooks = getHooks\n delete getInstance().hooks\n\n // Allow useOptions hooks to modify the options coming into the table\n Object.assign(\n getInstance(),\n reduceHooks(getHooks().useOptions, applyDefaults(props))\n )\n\n const {\n data,\n columns: userColumns,\n initialState,\n defaultColumn,\n getSubRows,\n getRowId,\n stateReducer,\n useControlledState,\n } = getInstance()\n\n // Setup user reducer ref\n const getStateReducer = useGetLatest(stateReducer)\n\n // Build the reducer\n const reducer = React.useCallback(\n (state, action) => {\n // Detect invalid actions\n if (!action.type) {\n console.info({ action })\n throw new Error('Unknown Action 👆')\n }\n\n // Reduce the state from all plugin reducers\n return [\n ...getHooks().stateReducers,\n // Allow the user to add their own state reducer(s)\n ...(Array.isArray(getStateReducer())\n ? getStateReducer()\n : [getStateReducer()]),\n ].reduce(\n (s, handler) => handler(s, action, state, getInstance()) || s,\n state\n )\n },\n [getHooks, getStateReducer, getInstance]\n )\n\n // Start the reducer\n const [reducerState, dispatch] = React.useReducer(reducer, undefined, () =>\n reducer(initialState, { type: actions.init })\n )\n\n // Allow the user to control the final state with hooks\n const state = reduceHooks(\n [...getHooks().useControlledState, useControlledState],\n reducerState,\n { instance: getInstance() }\n )\n\n Object.assign(getInstance(), {\n state,\n dispatch,\n })\n\n // Decorate All the columns\n const columns = React.useMemo(\n () =>\n linkColumnStructure(\n reduceHooks(getHooks().columns, userColumns, {\n instance: getInstance(),\n })\n ),\n [\n getHooks,\n getInstance,\n userColumns,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n ...reduceHooks(getHooks().columnsDeps, [], { instance: getInstance() }),\n ]\n )\n getInstance().columns = columns\n\n // Get the flat list of all columns and allow hooks to decorate\n // those columns (and trigger this memoization via deps)\n let allColumns = React.useMemo(\n () =>\n reduceHooks(getHooks().allColumns, flattenColumns(columns), {\n instance: getInstance(),\n }).map(assignColumnAccessor),\n [\n columns,\n getHooks,\n getInstance,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n ...reduceHooks(getHooks().allColumnsDeps, [], {\n instance: getInstance(),\n }),\n ]\n )\n getInstance().allColumns = allColumns\n\n // Access the row model using initial columns\n const [rows, flatRows, rowsById] = React.useMemo(() => {\n let rows = []\n let flatRows = []\n const rowsById = {}\n\n const allColumnsQueue = [...allColumns]\n\n while (allColumnsQueue.length) {\n const column = allColumnsQueue.shift()\n accessRowsForColumn({\n data,\n rows,\n flatRows,\n rowsById,\n column,\n getRowId,\n getSubRows,\n accessValueHooks: getHooks().accessValue,\n getInstance,\n })\n }\n\n return [rows, flatRows, rowsById]\n }, [allColumns, data, getRowId, getSubRows, getHooks, getInstance])\n\n Object.assign(getInstance(), {\n rows,\n initialRows: [...rows],\n flatRows,\n rowsById,\n // materializedColumns,\n })\n\n loopHooks(getHooks().useInstanceAfterData, getInstance())\n\n // Get the flat list of all columns AFTER the rows\n // have been access, and allow hooks to decorate\n // those columns (and trigger this memoization via deps)\n let visibleColumns = React.useMemo(\n () =>\n reduceHooks(getHooks().visibleColumns, allColumns, {\n instance: getInstance(),\n }).map(d => decorateColumn(d, defaultColumn)),\n [\n getHooks,\n allColumns,\n getInstance,\n defaultColumn,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n ...reduceHooks(getHooks().visibleColumnsDeps, [], {\n instance: getInstance(),\n }),\n ]\n )\n\n // Combine new visible columns with all columns\n allColumns = React.useMemo(() => {\n const columns = [...visibleColumns]\n\n allColumns.forEach(column => {\n if (!columns.find(d => d.id === column.id)) {\n columns.push(column)\n }\n })\n\n return columns\n }, [allColumns, visibleColumns])\n getInstance().allColumns = allColumns\n\n if (process.env.NODE_ENV !== 'production') {\n const duplicateColumns = allColumns.filter((column, i) => {\n return allColumns.findIndex(d => d.id === column.id) !== i\n })\n\n if (duplicateColumns.length) {\n console.info(allColumns)\n throw new Error(\n `Duplicate columns were found with ids: \"${duplicateColumns\n .map(d => d.id)\n .join(', ')}\" in the columns array above`\n )\n }\n }\n\n // Make the headerGroups\n const headerGroups = React.useMemo(\n () =>\n reduceHooks(\n getHooks().headerGroups,\n makeHeaderGroups(visibleColumns, defaultColumn),\n getInstance()\n ),\n [\n getHooks,\n visibleColumns,\n defaultColumn,\n getInstance,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n ...reduceHooks(getHooks().headerGroupsDeps, [], {\n instance: getInstance(),\n }),\n ]\n )\n getInstance().headerGroups = headerGroups\n\n // Get the first level of headers\n const headers = React.useMemo(\n () => (headerGroups.length ? headerGroups[0].headers : []),\n [headerGroups]\n )\n getInstance().headers = headers\n\n // Provide a flat header list for utilities\n getInstance().flatHeaders = headerGroups.reduce(\n (all, headerGroup) => [...all, ...headerGroup.headers],\n []\n )\n\n loopHooks(getHooks().useInstanceBeforeDimensions, getInstance())\n\n // Filter columns down to visible ones\n const visibleColumnsDep = visibleColumns\n .filter(d => d.isVisible)\n .map(d => d.id)\n .sort()\n .join('_')\n\n visibleColumns = React.useMemo(\n () => visibleColumns.filter(d => d.isVisible),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [visibleColumns, visibleColumnsDep]\n )\n getInstance().visibleColumns = visibleColumns\n\n // Header Visibility is needed by this point\n const [\n totalColumnsMinWidth,\n totalColumnsWidth,\n totalColumnsMaxWidth,\n ] = calculateHeaderWidths(headers)\n\n getInstance().totalColumnsMinWidth = totalColumnsMinWidth\n getInstance().totalColumnsWidth = totalColumnsWidth\n getInstance().totalColumnsMaxWidth = totalColumnsMaxWidth\n\n loopHooks(getHooks().useInstance, getInstance())\n\n // Each materialized header needs to be assigned a render function and other\n // prop getter properties here.\n ;[...getInstance().flatHeaders, ...getInstance().allColumns].forEach(\n column => {\n // Give columns/headers rendering power\n column.render = makeRenderer(getInstance(), column)\n\n // Give columns/headers a default getHeaderProps\n column.getHeaderProps = makePropGetter(getHooks().getHeaderProps, {\n instance: getInstance(),\n column,\n })\n\n // Give columns/headers a default getFooterProps\n column.getFooterProps = makePropGetter(getHooks().getFooterProps, {\n instance: getInstance(),\n column,\n })\n }\n )\n\n getInstance().headerGroups = React.useMemo(\n () =>\n headerGroups.filter((headerGroup, i) => {\n // Filter out any headers and headerGroups that don't have visible columns\n headerGroup.headers = headerGroup.headers.filter(column => {\n const recurse = headers =>\n headers.filter(column => {\n if (column.headers) {\n return recurse(column.headers)\n }\n return column.isVisible\n }).length\n if (column.headers) {\n return recurse(column.headers)\n }\n return column.isVisible\n })\n\n // Give headerGroups getRowProps\n if (headerGroup.headers.length) {\n headerGroup.getHeaderGroupProps = makePropGetter(\n getHooks().getHeaderGroupProps,\n { instance: getInstance(), headerGroup, index: i }\n )\n\n headerGroup.getFooterGroupProps = makePropGetter(\n getHooks().getFooterGroupProps,\n { instance: getInstance(), headerGroup, index: i }\n )\n\n return true\n }\n\n return false\n }),\n [headerGroups, getInstance, getHooks]\n )\n\n getInstance().footerGroups = [...getInstance().headerGroups].reverse()\n\n // The prepareRow function is absolutely necessary and MUST be called on\n // any rows the user wishes to be displayed.\n\n getInstance().prepareRow = React.useCallback(\n row => {\n row.getRowProps = makePropGetter(getHooks().getRowProps, {\n instance: getInstance(),\n row,\n })\n\n // Build the visible cells for each row\n row.allCells = allColumns.map(column => {\n const value = row.values[column.id]\n\n const cell = {\n column,\n row,\n value,\n }\n\n // Give each cell a getCellProps base\n cell.getCellProps = makePropGetter(getHooks().getCellProps, {\n instance: getInstance(),\n cell,\n })\n\n // Give each cell a renderer function (supports multiple renderers)\n cell.render = makeRenderer(getInstance(), column, {\n row,\n cell,\n value,\n })\n\n return cell\n })\n\n row.cells = visibleColumns.map(column =>\n row.allCells.find(cell => cell.column.id === column.id)\n )\n\n // need to apply any row specific hooks (useExpanded requires this)\n loopHooks(getHooks().prepareRow, row, { instance: getInstance() })\n },\n [getHooks, getInstance, allColumns, visibleColumns]\n )\n\n getInstance().getTableProps = makePropGetter(getHooks().getTableProps, {\n instance: getInstance(),\n })\n\n getInstance().getTableBodyProps = makePropGetter(\n getHooks().getTableBodyProps,\n {\n instance: getInstance(),\n }\n )\n\n loopHooks(getHooks().useFinalInstance, getInstance())\n\n return getInstance()\n}\n\nfunction calculateHeaderWidths(headers, left = 0) {\n let sumTotalMinWidth = 0\n let sumTotalWidth = 0\n let sumTotalMaxWidth = 0\n let sumTotalFlexWidth = 0\n\n headers.forEach(header => {\n let { headers: subHeaders } = header\n\n header.totalLeft = left\n\n if (subHeaders && subHeaders.length) {\n const [\n totalMinWidth,\n totalWidth,\n totalMaxWidth,\n totalFlexWidth,\n ] = calculateHeaderWidths(subHeaders, left)\n header.totalMinWidth = totalMinWidth\n header.totalWidth = totalWidth\n header.totalMaxWidth = totalMaxWidth\n header.totalFlexWidth = totalFlexWidth\n } else {\n header.totalMinWidth = header.minWidth\n header.totalWidth = Math.min(\n Math.max(header.minWidth, header.width),\n header.maxWidth\n )\n header.totalMaxWidth = header.maxWidth\n header.totalFlexWidth = header.canResize ? header.totalWidth : 0\n }\n if (header.isVisible) {\n left += header.totalWidth\n sumTotalMinWidth += header.totalMinWidth\n sumTotalWidth += header.totalWidth\n sumTotalMaxWidth += header.totalMaxWidth\n sumTotalFlexWidth += header.totalFlexWidth\n }\n })\n\n return [sumTotalMinWidth, sumTotalWidth, sumTotalMaxWidth, sumTotalFlexWidth]\n}\n\nfunction accessRowsForColumn({\n data,\n rows,\n flatRows,\n rowsById,\n column,\n getRowId,\n getSubRows,\n accessValueHooks,\n getInstance,\n}) {\n // Access the row's data column-by-column\n // We do it this way so we can incrementally add materialized\n // columns after the first pass and avoid excessive looping\n const accessRow = (originalRow, rowIndex, depth = 0, parent, parentRows) => {\n // Keep the original reference around\n const original = originalRow\n\n const id = getRowId(originalRow, rowIndex, parent)\n\n let row = rowsById[id]\n\n // If the row hasn't been created, let's make it\n if (!row) {\n row = {\n id,\n original,\n index: rowIndex,\n depth,\n cells: [{}], // This is a dummy cell\n }\n\n // Override common array functions (and the dummy cell's getCellProps function)\n // to show an error if it is accessed without calling prepareRow\n row.cells.map = unpreparedAccessWarning\n row.cells.filter = unpreparedAccessWarning\n row.cells.forEach = unpreparedAccessWarning\n row.cells[0].getCellProps = unpreparedAccessWarning\n\n // Create the cells and values\n row.values = {}\n\n // Push this row into the parentRows array\n parentRows.push(row)\n // Keep track of every row in a flat array\n flatRows.push(row)\n // Also keep track of every row by its ID\n rowsById[id] = row\n\n // Get the original subrows\n row.originalSubRows = getSubRows(originalRow, rowIndex)\n\n // Then recursively access them\n if (row.originalSubRows) {\n const subRows = []\n row.originalSubRows.forEach((d, i) =>\n accessRow(d, i, depth + 1, row, subRows)\n )\n // Keep the new subRows array on the row\n row.subRows = subRows\n }\n } else if (row.subRows) {\n // If the row exists, then it's already been accessed\n // Keep recursing, but don't worry about passing the\n // accumlator array (those rows already exist)\n row.originalSubRows.forEach((d, i) => accessRow(d, i, depth + 1, row))\n }\n\n // If the column has an accessor, use it to get a value\n if (column.accessor) {\n row.values[column.id] = column.accessor(\n originalRow,\n rowIndex,\n row,\n parentRows,\n data\n )\n }\n\n // Allow plugins to manipulate the column value\n row.values[column.id] = reduceHooks(\n accessValueHooks,\n row.values[column.id],\n {\n row,\n column,\n instance: getInstance(),\n },\n true\n )\n }\n\n data.forEach((originalRow, rowIndex) =>\n accessRow(originalRow, rowIndex, 0, undefined, rows)\n )\n}\n","import React from 'react'\n\nimport { expandRows } from '../utils'\n\nimport {\n useGetLatest,\n actions,\n useMountedLayoutEffect,\n makePropGetter,\n ensurePluginOrder,\n} from '../publicUtils'\n\n// Actions\nactions.resetExpanded = 'resetExpanded'\nactions.toggleRowExpanded = 'toggleRowExpanded'\nactions.toggleAllRowsExpanded = 'toggleAllRowsExpanded'\n\nexport const useExpanded = hooks => {\n hooks.getToggleAllRowsExpandedProps = [defaultGetToggleAllRowsExpandedProps]\n hooks.getToggleRowExpandedProps = [defaultGetToggleRowExpandedProps]\n hooks.stateReducers.push(reducer)\n hooks.useInstance.push(useInstance)\n hooks.prepareRow.push(prepareRow)\n}\n\nuseExpanded.pluginName = 'useExpanded'\n\nconst defaultGetToggleAllRowsExpandedProps = (props, { instance }) => [\n props,\n {\n onClick: e => {\n instance.toggleAllRowsExpanded()\n },\n style: {\n cursor: 'pointer',\n },\n title: 'Toggle All Rows Expanded',\n },\n]\n\nconst defaultGetToggleRowExpandedProps = (props, { row }) => [\n props,\n {\n onClick: () => {\n row.toggleRowExpanded()\n },\n style: {\n cursor: 'pointer',\n },\n title: 'Toggle Row Expanded',\n },\n]\n\n// Reducer\nfunction reducer(state, action, previousState, instance) {\n if (action.type === actions.init) {\n return {\n expanded: {},\n ...state,\n }\n }\n\n if (action.type === actions.resetExpanded) {\n return {\n ...state,\n expanded: instance.initialState.expanded || {},\n }\n }\n\n if (action.type === actions.toggleAllRowsExpanded) {\n const { value } = action\n const { rowsById } = instance\n\n const isAllRowsExpanded =\n Object.keys(rowsById).length === Object.keys(state.expanded).length\n\n const expandAll = typeof value !== 'undefined' ? value : !isAllRowsExpanded\n\n if (expandAll) {\n const expanded = {}\n\n Object.keys(rowsById).forEach(rowId => {\n expanded[rowId] = true\n })\n\n return {\n ...state,\n expanded,\n }\n }\n\n return {\n ...state,\n expanded: {},\n }\n }\n\n if (action.type === actions.toggleRowExpanded) {\n const { id, value: setExpanded } = action\n const exists = state.expanded[id]\n\n const shouldExist =\n typeof setExpanded !== 'undefined' ? setExpanded : !exists\n\n if (!exists && shouldExist) {\n return {\n ...state,\n expanded: {\n ...state.expanded,\n [id]: true,\n },\n }\n } else if (exists && !shouldExist) {\n const { [id]: _, ...rest } = state.expanded\n return {\n ...state,\n expanded: rest,\n }\n } else {\n return state\n }\n }\n}\n\nfunction useInstance(instance) {\n const {\n data,\n rows,\n rowsById,\n manualExpandedKey = 'expanded',\n paginateExpandedRows = true,\n expandSubRows = true,\n autoResetExpanded = true,\n getHooks,\n plugins,\n state: { expanded },\n dispatch,\n } = instance\n\n ensurePluginOrder(\n plugins,\n ['useSortBy', 'useGroupBy', 'usePivotColumns', 'useGlobalFilter'],\n 'useExpanded'\n )\n\n const getAutoResetExpanded = useGetLatest(autoResetExpanded)\n\n let isAllRowsExpanded = Boolean(\n Object.keys(rowsById).length && Object.keys(expanded).length\n )\n\n if (isAllRowsExpanded) {\n if (Object.keys(rowsById).some(id => !expanded[id])) {\n isAllRowsExpanded = false\n }\n }\n\n // Bypass any effects from firing when this changes\n useMountedLayoutEffect(() => {\n if (getAutoResetExpanded()) {\n dispatch({ type: actions.resetExpanded })\n }\n }, [dispatch, data])\n\n const toggleRowExpanded = React.useCallback(\n (id, value) => {\n dispatch({ type: actions.toggleRowExpanded, id, value })\n },\n [dispatch]\n )\n\n const toggleAllRowsExpanded = React.useCallback(\n value => dispatch({ type: actions.toggleAllRowsExpanded, value }),\n [dispatch]\n )\n\n const expandedRows = React.useMemo(() => {\n if (paginateExpandedRows) {\n return expandRows(rows, { manualExpandedKey, expanded, expandSubRows })\n }\n\n return rows\n }, [paginateExpandedRows, rows, manualExpandedKey, expanded, expandSubRows])\n\n const expandedDepth = React.useMemo(() => findExpandedDepth(expanded), [\n expanded,\n ])\n\n const getInstance = useGetLatest(instance)\n\n const getToggleAllRowsExpandedProps = makePropGetter(\n getHooks().getToggleAllRowsExpandedProps,\n { instance: getInstance() }\n )\n\n Object.assign(instance, {\n preExpandedRows: rows,\n expandedRows,\n rows: expandedRows,\n expandedDepth,\n isAllRowsExpanded,\n toggleRowExpanded,\n toggleAllRowsExpanded,\n getToggleAllRowsExpandedProps,\n })\n}\n\nfunction prepareRow(row, { instance: { getHooks }, instance }) {\n row.toggleRowExpanded = set => instance.toggleRowExpanded(row.id, set)\n\n row.getToggleRowExpandedProps = makePropGetter(\n getHooks().getToggleRowExpandedProps,\n {\n instance,\n row,\n }\n )\n}\n\nfunction findExpandedDepth(expanded) {\n let maxDepth = 0\n\n Object.keys(expanded).forEach(id => {\n const splitId = id.split('.')\n maxDepth = Math.max(maxDepth, splitId.length)\n })\n\n return maxDepth\n}\n","export const text = (rows, ids, filterValue) => {\n rows = rows.filter(row => {\n return ids.some(id => {\n const rowValue = row.values[id]\n return String(rowValue)\n .toLowerCase()\n .includes(String(filterValue).toLowerCase())\n })\n })\n return rows\n}\n\ntext.autoRemove = val => !val\n\nexport const exactText = (rows, ids, filterValue) => {\n return rows.filter(row => {\n return ids.some(id => {\n const rowValue = row.values[id]\n return rowValue !== undefined\n ? String(rowValue).toLowerCase() === String(filterValue).toLowerCase()\n : true\n })\n })\n}\n\nexactText.autoRemove = val => !val\n\nexport const exactTextCase = (rows, ids, filterValue) => {\n return rows.filter(row => {\n return ids.some(id => {\n const rowValue = row.values[id]\n return rowValue !== undefined\n ? String(rowValue) === String(filterValue)\n : true\n })\n })\n}\n\nexactTextCase.autoRemove = val => !val\n\nexport const includes = (rows, ids, filterValue) => {\n return rows.filter(row => {\n return ids.some(id => {\n const rowValue = row.values[id]\n return rowValue.includes(filterValue)\n })\n })\n}\n\nincludes.autoRemove = val => !val || !val.length\n\nexport const includesAll = (rows, ids, filterValue) => {\n return rows.filter(row => {\n return ids.some(id => {\n const rowValue = row.values[id]\n return (\n rowValue &&\n rowValue.length &&\n filterValue.every(val => rowValue.includes(val))\n )\n })\n })\n}\n\nincludesAll.autoRemove = val => !val || !val.length\n\nexport const includesSome = (rows, ids, filterValue) => {\n return rows.filter(row => {\n return ids.some(id => {\n const rowValue = row.values[id]\n return (\n rowValue &&\n rowValue.length &&\n filterValue.some(val => rowValue.includes(val))\n )\n })\n })\n}\n\nincludesSome.autoRemove = val => !val || !val.length\n\nexport const includesValue = (rows, ids, filterValue) => {\n return rows.filter(row => {\n return ids.some(id => {\n const rowValue = row.values[id]\n return filterValue.includes(rowValue)\n })\n })\n}\n\nincludesValue.autoRemove = val => !val || !val.length\n\nexport const exact = (rows, ids, filterValue) => {\n return rows.filter(row => {\n return ids.some(id => {\n const rowValue = row.values[id]\n return rowValue === filterValue\n })\n })\n}\n\nexact.autoRemove = val => typeof val === 'undefined'\n\nexport const equals = (rows, ids, filterValue) => {\n return rows.filter(row => {\n return ids.some(id => {\n const rowValue = row.values[id]\n // eslint-disable-next-line eqeqeq\n return rowValue == filterValue\n })\n })\n}\n\nequals.autoRemove = val => val == null\n\nexport const between = (rows, ids, filterValue) => {\n let [min, max] = filterValue || []\n\n min = typeof min === 'number' ? min : -Infinity\n max = typeof max === 'number' ? max : Infinity\n\n if (min > max) {\n const temp = min\n min = max\n max = temp\n }\n\n return rows.filter(row => {\n return ids.some(id => {\n const rowValue = row.values[id]\n return rowValue >= min && rowValue <= max\n })\n })\n}\n\nbetween.autoRemove = val =>\n !val || (typeof val[0] !== 'number' && typeof val[1] !== 'number')\n","import React from 'react'\n\nimport {\n getFirstDefined,\n getFilterMethod,\n shouldAutoRemoveFilter,\n} from '../utils'\n\nimport {\n actions,\n useGetLatest,\n functionalUpdate,\n useMountedLayoutEffect,\n} from '../publicUtils'\n\nimport * as filterTypes from '../filterTypes'\n\n// Actions\nactions.resetFilters = 'resetFilters'\nactions.setFilter = 'setFilter'\nactions.setAllFilters = 'setAllFilters'\n\nexport const useFilters = hooks => {\n hooks.stateReducers.push(reducer)\n hooks.useInstance.push(useInstance)\n}\n\nuseFilters.pluginName = 'useFilters'\n\nfunction reducer(state, action, previousState, instance) {\n if (action.type === actions.init) {\n return {\n filters: [],\n ...state,\n }\n }\n\n if (action.type === actions.resetFilters) {\n return {\n ...state,\n filters: instance.initialState.filters || [],\n }\n }\n\n if (action.type === actions.setFilter) {\n const { columnId, filterValue } = action\n const { allColumns, filterTypes: userFilterTypes } = instance\n\n const column = allColumns.find(d => d.id === columnId)\n\n if (!column) {\n throw new Error(\n `React-Table: Could not find a column with id: ${columnId}`\n )\n }\n\n const filterMethod = getFilterMethod(\n column.filter,\n userFilterTypes || {},\n filterTypes\n )\n\n const previousfilter = state.filters.find(d => d.id === columnId)\n\n const newFilter = functionalUpdate(\n filterValue,\n previousfilter && previousfilter.value\n )\n\n //\n if (shouldAutoRemoveFilter(filterMethod.autoRemove, newFilter, column)) {\n return {\n ...state,\n filters: state.filters.filter(d => d.id !== columnId),\n }\n }\n\n if (previousfilter) {\n return {\n ...state,\n filters: state.filters.map(d => {\n if (d.id === columnId) {\n return { id: columnId, value: newFilter }\n }\n return d\n }),\n }\n }\n\n return {\n ...state,\n filters: [...state.filters, { id: columnId, value: newFilter }],\n }\n }\n\n if (action.type === actions.setAllFilters) {\n const { filters } = action\n const { allColumns, filterTypes: userFilterTypes } = instance\n\n return {\n ...state,\n // Filter out undefined values\n filters: functionalUpdate(filters, state.filters).filter(filter => {\n const column = allColumns.find(d => d.id === filter.id)\n const filterMethod = getFilterMethod(\n column.filter,\n userFilterTypes || {},\n filterTypes\n )\n\n if (\n shouldAutoRemoveFilter(filterMethod.autoRemove, filter.value, column)\n ) {\n return false\n }\n return true\n }),\n }\n }\n}\n\nfunction useInstance(instance) {\n const {\n data,\n rows,\n flatRows,\n rowsById,\n allColumns,\n filterTypes: userFilterTypes,\n manualFilters,\n defaultCanFilter = false,\n disableFilters,\n state: { filters },\n dispatch,\n autoResetFilters = true,\n } = instance\n\n const setFilter = React.useCallback(\n (columnId, filterValue) => {\n dispatch({ type: actions.setFilter, columnId, filterValue })\n },\n [dispatch]\n )\n\n const setAllFilters = React.useCallback(\n filters => {\n dispatch({\n type: actions.setAllFilters,\n filters,\n })\n },\n [dispatch]\n )\n\n allColumns.forEach(column => {\n const {\n id,\n accessor,\n defaultCanFilter: columnDefaultCanFilter,\n disableFilters: columnDisableFilters,\n } = column\n\n // Determine if a column is filterable\n column.canFilter = accessor\n ? getFirstDefined(\n columnDisableFilters === true ? false : undefined,\n disableFilters === true ? false : undefined,\n true\n )\n : getFirstDefined(columnDefaultCanFilter, defaultCanFilter, false)\n\n // Provide the column a way of updating the filter value\n column.setFilter = val => setFilter(column.id, val)\n\n // Provide the current filter value to the column for\n // convenience\n const found = filters.find(d => d.id === id)\n column.filterValue = found && found.value\n })\n\n const [\n filteredRows,\n filteredFlatRows,\n filteredRowsById,\n ] = React.useMemo(() => {\n if (manualFilters || !filters.length) {\n return [rows, flatRows, rowsById]\n }\n\n const filteredFlatRows = []\n const filteredRowsById = {}\n\n // Filters top level and nested rows\n const filterRows = (rows, depth = 0) => {\n let filteredRows = rows\n\n filteredRows = filters.reduce(\n (filteredSoFar, { id: columnId, value: filterValue }) => {\n // Find the filters column\n const column = allColumns.find(d => d.id === columnId)\n\n if (!column) {\n return filteredSoFar\n }\n\n if (depth === 0) {\n column.preFilteredRows = filteredSoFar\n }\n\n const filterMethod = getFilterMethod(\n column.filter,\n userFilterTypes || {},\n filterTypes\n )\n\n if (!filterMethod) {\n console.warn(\n `Could not find a valid 'column.filter' for column with the ID: ${column.id}.`\n )\n return filteredSoFar\n }\n\n // Pass the rows, id, filterValue and column to the filterMethod\n // to get the filtered rows back\n column.filteredRows = filterMethod(\n filteredSoFar,\n [columnId],\n filterValue\n )\n\n return column.filteredRows\n },\n rows\n )\n\n // Apply the filter to any subRows\n // We technically could do this recursively in the above loop,\n // but that would severely hinder the API for the user, since they\n // would be required to do that recursion in some scenarios\n filteredRows.forEach(row => {\n filteredFlatRows.push(row)\n filteredRowsById[row.id] = row\n if (!row.subRows) {\n return\n }\n\n row.subRows =\n row.subRows && row.subRows.length > 0\n ? filterRows(row.subRows, depth + 1)\n : row.subRows\n })\n\n return filteredRows\n }\n\n return [filterRows(rows), filteredFlatRows, filteredRowsById]\n }, [\n manualFilters,\n filters,\n rows,\n flatRows,\n rowsById,\n allColumns,\n userFilterTypes,\n ])\n\n React.useMemo(() => {\n // Now that each filtered column has it's partially filtered rows,\n // lets assign the final filtered rows to all of the other columns\n const nonFilteredColumns = allColumns.filter(\n column => !filters.find(d => d.id === column.id)\n )\n\n // This essentially enables faceted filter options to be built easily\n // using every column's preFilteredRows value\n nonFilteredColumns.forEach(column => {\n column.preFilteredRows = filteredRows\n column.filteredRows = filteredRows\n })\n }, [filteredRows, filters, allColumns])\n\n const getAutoResetFilters = useGetLatest(autoResetFilters)\n\n useMountedLayoutEffect(() => {\n if (getAutoResetFilters()) {\n dispatch({ type: actions.resetFilters })\n }\n }, [dispatch, manualFilters ? null : data])\n\n Object.assign(instance, {\n preFilteredRows: rows,\n preFilteredFlatRows: flatRows,\n preFilteredRowsById: rowsById,\n filteredRows,\n filteredFlatRows,\n filteredRowsById,\n rows: filteredRows,\n flatRows: filteredFlatRows,\n rowsById: filteredRowsById,\n setFilter,\n setAllFilters,\n })\n}\n","import React from 'react'\n\nimport {\n getFilterMethod,\n shouldAutoRemoveFilter,\n getFirstDefined,\n} from '../utils'\n\nimport {\n actions,\n useMountedLayoutEffect,\n functionalUpdate,\n useGetLatest,\n} from '../publicUtils'\n\nimport * as filterTypes from '../filterTypes'\n\n// Actions\nactions.resetGlobalFilter = 'resetGlobalFilter'\nactions.setGlobalFilter = 'setGlobalFilter'\n\nexport const useGlobalFilter = hooks => {\n hooks.stateReducers.push(reducer)\n hooks.useInstance.push(useInstance)\n}\n\nuseGlobalFilter.pluginName = 'useGlobalFilter'\n\nfunction reducer(state, action, previousState, instance) {\n if (action.type === actions.resetGlobalFilter) {\n return {\n ...state,\n globalFilter: instance.initialState.globalFilter || undefined,\n }\n }\n\n if (action.type === actions.setGlobalFilter) {\n const { filterValue } = action\n const { userFilterTypes } = instance\n\n const filterMethod = getFilterMethod(\n instance.globalFilter,\n userFilterTypes || {},\n filterTypes\n )\n\n const newFilter = functionalUpdate(filterValue, state.globalFilter)\n\n //\n if (shouldAutoRemoveFilter(filterMethod.autoRemove, newFilter)) {\n const { globalFilter, ...stateWithoutGlobalFilter } = state\n return stateWithoutGlobalFilter\n }\n\n return {\n ...state,\n globalFilter: newFilter,\n }\n }\n}\n\nfunction useInstance(instance) {\n const {\n data,\n rows,\n flatRows,\n rowsById,\n allColumns,\n filterTypes: userFilterTypes,\n globalFilter,\n manualGlobalFilter,\n state: { globalFilter: globalFilterValue },\n dispatch,\n autoResetGlobalFilter = true,\n disableGlobalFilter,\n } = instance\n\n const setGlobalFilter = React.useCallback(\n filterValue => {\n dispatch({ type: actions.setGlobalFilter, filterValue })\n },\n [dispatch]\n )\n\n // TODO: Create a filter cache for incremental high speed multi-filtering\n // This gets pretty complicated pretty fast, since you have to maintain a\n // cache for each row group (top-level rows, and each row's recursive subrows)\n // This would make multi-filtering a lot faster though. Too far?\n\n const [\n globalFilteredRows,\n globalFilteredFlatRows,\n globalFilteredRowsById,\n ] = React.useMemo(() => {\n if (manualGlobalFilter || typeof globalFilterValue === 'undefined') {\n return [rows, flatRows, rowsById]\n }\n\n const filteredFlatRows = []\n const filteredRowsById = {}\n\n const filterMethod = getFilterMethod(\n globalFilter,\n userFilterTypes || {},\n filterTypes\n )\n\n if (!filterMethod) {\n console.warn(`Could not find a valid 'globalFilter' option.`)\n return rows\n }\n\n allColumns.forEach(column => {\n const { disableGlobalFilter: columnDisableGlobalFilter } = column\n\n column.canFilter = getFirstDefined(\n columnDisableGlobalFilter === true ? false : undefined,\n disableGlobalFilter === true ? false : undefined,\n true\n )\n })\n\n const filterableColumns = allColumns.filter(c => c.canFilter === true)\n\n // Filters top level and nested rows\n const filterRows = filteredRows => {\n filteredRows = filterMethod(\n filteredRows,\n filterableColumns.map(d => d.id),\n globalFilterValue\n )\n\n filteredRows.forEach(row => {\n filteredFlatRows.push(row)\n filteredRowsById[row.id] = row\n\n row.subRows =\n row.subRows && row.subRows.length\n ? filterRows(row.subRows)\n : row.subRows\n })\n\n return filteredRows\n }\n\n return [filterRows(rows), filteredFlatRows, filteredRowsById]\n }, [\n manualGlobalFilter,\n globalFilterValue,\n globalFilter,\n userFilterTypes,\n allColumns,\n rows,\n flatRows,\n rowsById,\n disableGlobalFilter,\n ])\n\n const getAutoResetGlobalFilter = useGetLatest(autoResetGlobalFilter)\n\n useMountedLayoutEffect(() => {\n if (getAutoResetGlobalFilter()) {\n dispatch({ type: actions.resetGlobalFilter })\n }\n }, [dispatch, manualGlobalFilter ? null : data])\n\n Object.assign(instance, {\n preGlobalFilteredRows: rows,\n preGlobalFilteredFlatRows: flatRows,\n preGlobalFilteredRowsById: rowsById,\n globalFilteredRows,\n globalFilteredFlatRows,\n globalFilteredRowsById,\n rows: globalFilteredRows,\n flatRows: globalFilteredFlatRows,\n rowsById: globalFilteredRowsById,\n setGlobalFilter,\n disableGlobalFilter,\n })\n}\n","export function sum(values, aggregatedValues) {\n // It's faster to just add the aggregations together instead of\n // process leaf nodes individually\n return aggregatedValues.reduce(\n (sum, next) => sum + (typeof next === 'number' ? next : 0),\n 0\n )\n}\n\nexport function min(values) {\n let min = values[0] || 0\n\n values.forEach(value => {\n if (typeof value === 'number') {\n min = Math.min(min, value)\n }\n })\n\n return min\n}\n\nexport function max(values) {\n let max = values[0] || 0\n\n values.forEach(value => {\n if (typeof value === 'number') {\n max = Math.max(max, value)\n }\n })\n\n return max\n}\n\nexport function minMax(values) {\n let min = values[0] || 0\n let max = values[0] || 0\n\n values.forEach(value => {\n if (typeof value === 'number') {\n min = Math.min(min, value)\n max = Math.max(max, value)\n }\n })\n\n return `${min}..${max}`\n}\n\nexport function average(values) {\n return sum(null, values) / values.length\n}\n\nexport function median(values) {\n if (!values.length) {\n return null\n }\n\n const mid = Math.floor(values.length / 2)\n const nums = [...values].sort((a, b) => a - b)\n return values.length % 2 !== 0 ? nums[mid] : (nums[mid - 1] + nums[mid]) / 2\n}\n\nexport function unique(values) {\n return Array.from(new Set(values).values())\n}\n\nexport function uniqueCount(values) {\n return new Set(values).size\n}\n\nexport function count(values) {\n return values.length\n}\n","import React from 'react'\n\nimport * as aggregations from '../aggregations'\n\nimport { getFirstDefined, flattenBy } from '../utils'\n\nimport {\n actions,\n makePropGetter,\n ensurePluginOrder,\n useMountedLayoutEffect,\n useGetLatest,\n} from '../publicUtils'\n\nconst emptyArray = []\nconst emptyObject = {}\n\n// Actions\nactions.resetGroupBy = 'resetGroupBy'\nactions.setGroupBy = 'setGroupBy'\nactions.toggleGroupBy = 'toggleGroupBy'\n\nexport const useGroupBy = hooks => {\n hooks.getGroupByToggleProps = [defaultGetGroupByToggleProps]\n hooks.stateReducers.push(reducer)\n hooks.visibleColumnsDeps.push((deps, { instance }) => [\n ...deps,\n instance.state.groupBy,\n ])\n hooks.visibleColumns.push(visibleColumns)\n hooks.useInstance.push(useInstance)\n hooks.prepareRow.push(prepareRow)\n}\n\nuseGroupBy.pluginName = 'useGroupBy'\n\nconst defaultGetGroupByToggleProps = (props, { header }) => [\n props,\n {\n onClick: header.canGroupBy\n ? e => {\n e.persist()\n header.toggleGroupBy()\n }\n : undefined,\n style: {\n cursor: header.canGroupBy ? 'pointer' : undefined,\n },\n title: 'Toggle GroupBy',\n },\n]\n\n// Reducer\nfunction reducer(state, action, previousState, instance) {\n if (action.type === actions.init) {\n return {\n groupBy: [],\n ...state,\n }\n }\n\n if (action.type === actions.resetGroupBy) {\n return {\n ...state,\n groupBy: instance.initialState.groupBy || [],\n }\n }\n\n if (action.type === actions.setGroupBy) {\n const { value } = action\n return {\n ...state,\n groupBy: value,\n }\n }\n\n if (action.type === actions.toggleGroupBy) {\n const { columnId, value: setGroupBy } = action\n\n const resolvedGroupBy =\n typeof setGroupBy !== 'undefined'\n ? setGroupBy\n : !state.groupBy.includes(columnId)\n\n if (resolvedGroupBy) {\n return {\n ...state,\n groupBy: [...state.groupBy, columnId],\n }\n }\n\n return {\n ...state,\n groupBy: state.groupBy.filter(d => d !== columnId),\n }\n }\n}\n\nfunction visibleColumns(\n columns,\n {\n instance: {\n state: { groupBy },\n },\n }\n) {\n // Sort grouped columns to the start of the column list\n // before the headers are built\n\n const groupByColumns = groupBy\n .map(g => columns.find(col => col.id === g))\n .filter(Boolean)\n\n const nonGroupByColumns = columns.filter(col => !groupBy.includes(col.id))\n\n columns = [...groupByColumns, ...nonGroupByColumns]\n\n columns.forEach(column => {\n column.isGrouped = groupBy.includes(column.id)\n column.groupedIndex = groupBy.indexOf(column.id)\n })\n\n return columns\n}\n\nconst defaultUserAggregations = {}\n\nfunction useInstance(instance) {\n const {\n data,\n rows,\n flatRows,\n rowsById,\n allColumns,\n flatHeaders,\n groupByFn = defaultGroupByFn,\n manualGroupBy,\n aggregations: userAggregations = defaultUserAggregations,\n plugins,\n state: { groupBy },\n dispatch,\n autoResetGroupBy = true,\n disableGroupBy,\n defaultCanGroupBy,\n getHooks,\n } = instance\n\n ensurePluginOrder(plugins, ['useColumnOrder', 'useFilters'], 'useGroupBy')\n\n const getInstance = useGetLatest(instance)\n\n allColumns.forEach(column => {\n const {\n accessor,\n defaultGroupBy: defaultColumnGroupBy,\n disableGroupBy: columnDisableGroupBy,\n } = column\n\n column.canGroupBy = accessor\n ? getFirstDefined(\n column.canGroupBy,\n columnDisableGroupBy === true ? false : undefined,\n disableGroupBy === true ? false : undefined,\n true\n )\n : getFirstDefined(\n column.canGroupBy,\n defaultColumnGroupBy,\n defaultCanGroupBy,\n false\n )\n\n if (column.canGroupBy) {\n column.toggleGroupBy = () => instance.toggleGroupBy(column.id)\n }\n\n column.Aggregated = column.Aggregated || column.Cell\n })\n\n const toggleGroupBy = React.useCallback(\n (columnId, value) => {\n dispatch({ type: actions.toggleGroupBy, columnId, value })\n },\n [dispatch]\n )\n\n const setGroupBy = React.useCallback(\n value => {\n dispatch({ type: actions.setGroupBy, value })\n },\n [dispatch]\n )\n\n flatHeaders.forEach(header => {\n header.getGroupByToggleProps = makePropGetter(\n getHooks().getGroupByToggleProps,\n { instance: getInstance(), header }\n )\n })\n\n const [\n groupedRows,\n groupedFlatRows,\n groupedRowsById,\n onlyGroupedFlatRows,\n onlyGroupedRowsById,\n nonGroupedFlatRows,\n nonGroupedRowsById,\n ] = React.useMemo(() => {\n if (manualGroupBy || !groupBy.length) {\n return [\n rows,\n flatRows,\n rowsById,\n emptyArray,\n emptyObject,\n flatRows,\n rowsById,\n ]\n }\n\n // Ensure that the list of filtered columns exist\n const existingGroupBy = groupBy.filter(g =>\n allColumns.find(col => col.id === g)\n )\n\n // Find the columns that can or are aggregating\n // Uses each column to aggregate rows into a single value\n const aggregateRowsToValues = (leafRows, groupedRows, depth) => {\n const values = {}\n\n allColumns.forEach(column => {\n // Don't aggregate columns that are in the groupBy\n if (existingGroupBy.includes(column.id)) {\n values[column.id] = groupedRows[0]\n ? groupedRows[0].values[column.id]\n : null\n return\n }\n\n // Aggregate the values\n let aggregateFn =\n typeof column.aggregate === 'function'\n ? column.aggregate\n : userAggregations[column.aggregate] ||\n aggregations[column.aggregate]\n\n if (aggregateFn) {\n // Get the columnValues to aggregate\n const groupedValues = groupedRows.map(row => row.values[column.id])\n\n // Get the columnValues to aggregate\n const leafValues = leafRows.map(row => {\n let columnValue = row.values[column.id]\n\n if (!depth && column.aggregateValue) {\n const aggregateValueFn =\n typeof column.aggregateValue === 'function'\n ? column.aggregateValue\n : userAggregations[column.aggregateValue] ||\n aggregations[column.aggregateValue]\n\n if (!aggregateValueFn) {\n console.info({ column })\n throw new Error(\n `React Table: Invalid column.aggregateValue option for column listed above`\n )\n }\n\n columnValue = aggregateValueFn(columnValue, row, column)\n }\n return columnValue\n })\n\n values[column.id] = aggregateFn(leafValues, groupedValues)\n } else if (column.aggregate) {\n console.info({ column })\n throw new Error(\n `React Table: Invalid column.aggregate option for column listed above`\n )\n } else {\n values[column.id] = null\n }\n })\n\n return values\n }\n\n let groupedFlatRows = []\n const groupedRowsById = {}\n const onlyGroupedFlatRows = []\n const onlyGroupedRowsById = {}\n const nonGroupedFlatRows = []\n const nonGroupedRowsById = {}\n\n // Recursively group the data\n const groupUpRecursively = (rows, depth = 0, parentId) => {\n // This is the last level, just return the rows\n if (depth === existingGroupBy.length) {\n return rows.map((row) => ({ ...row, depth }))\n }\n\n const columnId = existingGroupBy[depth]\n\n // Group the rows together for this level\n let rowGroupsMap = groupByFn(rows, columnId)\n\n // Peform aggregations for each group\n const aggregatedGroupedRows = Object.entries(rowGroupsMap).map(\n ([groupByVal, groupedRows], index) => {\n let id = `${columnId}:${groupByVal}`\n id = parentId ? `${parentId}>${id}` : id\n\n // First, Recurse to group sub rows before aggregation\n const subRows = groupUpRecursively(groupedRows, depth + 1, id)\n\n // Flatten the leaf rows of the rows in this group\n const leafRows = depth\n ? flattenBy(groupedRows, 'leafRows')\n : groupedRows\n\n const values = aggregateRowsToValues(leafRows, groupedRows, depth)\n\n const row = {\n id,\n isGrouped: true,\n groupByID: columnId,\n groupByVal,\n values,\n subRows,\n leafRows,\n depth,\n index,\n }\n\n subRows.forEach(subRow => {\n groupedFlatRows.push(subRow)\n groupedRowsById[subRow.id] = subRow\n if (subRow.isGrouped) {\n onlyGroupedFlatRows.push(subRow)\n onlyGroupedRowsById[subRow.id] = subRow\n } else {\n nonGroupedFlatRows.push(subRow)\n nonGroupedRowsById[subRow.id] = subRow\n }\n })\n\n return row\n }\n )\n\n return aggregatedGroupedRows\n }\n\n const groupedRows = groupUpRecursively(rows)\n\n groupedRows.forEach(subRow => {\n groupedFlatRows.push(subRow)\n groupedRowsById[subRow.id] = subRow\n if (subRow.isGrouped) {\n onlyGroupedFlatRows.push(subRow)\n onlyGroupedRowsById[subRow.id] = subRow\n } else {\n nonGroupedFlatRows.push(subRow)\n nonGroupedRowsById[subRow.id] = subRow\n }\n })\n\n // Assign the new data\n return [\n groupedRows,\n groupedFlatRows,\n groupedRowsById,\n onlyGroupedFlatRows,\n onlyGroupedRowsById,\n nonGroupedFlatRows,\n nonGroupedRowsById,\n ]\n }, [\n manualGroupBy,\n groupBy,\n rows,\n flatRows,\n rowsById,\n allColumns,\n userAggregations,\n groupByFn,\n ])\n\n const getAutoResetGroupBy = useGetLatest(autoResetGroupBy)\n\n useMountedLayoutEffect(() => {\n if (getAutoResetGroupBy()) {\n dispatch({ type: actions.resetGroupBy })\n }\n }, [dispatch, manualGroupBy ? null : data])\n\n Object.assign(instance, {\n preGroupedRows: rows,\n preGroupedFlatRow: flatRows,\n preGroupedRowsById: rowsById,\n groupedRows,\n groupedFlatRows,\n groupedRowsById,\n onlyGroupedFlatRows,\n onlyGroupedRowsById,\n nonGroupedFlatRows,\n nonGroupedRowsById,\n rows: groupedRows,\n flatRows: groupedFlatRows,\n rowsById: groupedRowsById,\n toggleGroupBy,\n setGroupBy,\n })\n}\n\nfunction prepareRow(row) {\n row.allCells.forEach(cell => {\n // Grouped cells are in the groupBy and the pivot cell for the row\n cell.isGrouped = cell.column.isGrouped && cell.column.id === row.groupByID\n // Placeholder cells are any columns in the groupBy that are not grouped\n cell.isPlaceholder = !cell.isGrouped && cell.column.isGrouped\n // Aggregated cells are not grouped, not repeated, but still have subRows\n cell.isAggregated =\n !cell.isGrouped && !cell.isPlaceholder && row.subRows?.length\n })\n}\n\nexport function defaultGroupByFn(rows, columnId) {\n return rows.reduce((prev, row, i) => {\n // TODO: Might want to implement a key serializer here so\n // irregular column values can still be grouped if needed?\n const resKey = `${row.values[columnId]}`\n prev[resKey] = Array.isArray(prev[resKey]) ? prev[resKey] : []\n prev[resKey].push(row)\n return prev\n }, {})\n}\n","const reSplitAlphaNumeric = /([0-9]+)/gm\n\n// Mixed sorting is slow, but very inclusive of many edge cases.\n// It handles numbers, mixed alphanumeric combinations, and even\n// null, undefined, and Infinity\nexport const alphanumeric = (rowA, rowB, columnId) => {\n let [a, b] = getRowValuesByColumnID(rowA, rowB, columnId)\n\n // Force to strings (or \"\" for unsupported types)\n a = toString(a)\n b = toString(b)\n\n // Split on number groups, but keep the delimiter\n // Then remove falsey split values\n a = a.split(reSplitAlphaNumeric).filter(Boolean)\n b = b.split(reSplitAlphaNumeric).filter(Boolean)\n\n // While\n while (a.length && b.length) {\n let aa = a.shift()\n let bb = b.shift()\n\n const an = parseInt(aa, 10)\n const bn = parseInt(bb, 10)\n\n const combo = [an, bn].sort()\n\n // Both are string\n if (isNaN(combo[0])) {\n if (aa > bb) {\n return 1\n }\n if (bb > aa) {\n return -1\n }\n continue\n }\n\n // One is a string, one is a number\n if (isNaN(combo[1])) {\n return isNaN(an) ? -1 : 1\n }\n\n // Both are numbers\n if (an > bn) {\n return 1\n }\n if (bn > an) {\n return -1\n }\n }\n\n return a.length - b.length\n}\nexport function datetime(rowA, rowB, columnId) {\n let [a, b] = getRowValuesByColumnID(rowA, rowB, columnId)\n\n a = a.getTime()\n b = b.getTime()\n\n return compareBasic(a, b)\n}\n\nexport function basic(rowA, rowB, columnId) {\n let [a, b] = getRowValuesByColumnID(rowA, rowB, columnId)\n\n return compareBasic(a, b)\n}\n\nexport function string(rowA, rowB, columnId) {\n let [a, b] = getRowValuesByColumnID(rowA, rowB, columnId)\n\n a = a.split('').filter(Boolean)\n b = b.split('').filter(Boolean)\n\n while (a.length && b.length) {\n let aa = a.shift()\n let bb = b.shift()\n\n let alower = aa.toLowerCase()\n let blower = bb.toLowerCase()\n\n // Case insensitive comparison until characters match\n if (alower > blower) {\n return 1\n }\n if (blower > alower) {\n return -1\n }\n // If lowercase characters are identical\n if (aa > bb) {\n return 1\n }\n if (bb > aa) {\n return -1\n }\n continue\n }\n\n return a.length - b.length\n}\n\nexport function number(rowA, rowB, columnId) {\n let [a, b] = getRowValuesByColumnID(rowA, rowB, columnId)\n\n const replaceNonNumeric = /[^0-9.]/gi\n\n a = Number(String(a).replace(replaceNonNumeric, ''))\n b = Number(String(b).replace(replaceNonNumeric, ''))\n\n return compareBasic(a, b)\n}\n\n// Utils\n\nfunction compareBasic(a, b) {\n return a === b ? 0 : a > b ? 1 : -1\n}\n\nfunction getRowValuesByColumnID(row1, row2, columnId) {\n return [row1.values[columnId], row2.values[columnId]]\n}\n\nfunction toString(a) {\n if (typeof a === 'number') {\n if (isNaN(a) || a === Infinity || a === -Infinity) {\n return ''\n }\n return String(a)\n }\n if (typeof a === 'string') {\n return a\n }\n return ''\n}\n","import React from 'react'\n\nimport {\n actions,\n ensurePluginOrder,\n defaultColumn,\n makePropGetter,\n useGetLatest,\n useMountedLayoutEffect,\n} from '../publicUtils'\n\nimport { getFirstDefined, isFunction } from '../utils'\n\nimport * as sortTypes from '../sortTypes'\n\n// Actions\nactions.resetSortBy = 'resetSortBy'\nactions.setSortBy = 'setSortBy'\nactions.toggleSortBy = 'toggleSortBy'\nactions.clearSortBy = 'clearSortBy'\n\ndefaultColumn.sortType = 'alphanumeric'\ndefaultColumn.sortDescFirst = false\n\nexport const useSortBy = hooks => {\n hooks.getSortByToggleProps = [defaultGetSortByToggleProps]\n hooks.stateReducers.push(reducer)\n hooks.useInstance.push(useInstance)\n}\n\nuseSortBy.pluginName = 'useSortBy'\n\nconst defaultGetSortByToggleProps = (props, { instance, column }) => {\n const { isMultiSortEvent = e => e.shiftKey } = instance\n\n return [\n props,\n {\n onClick: column.canSort\n ? e => {\n e.persist()\n column.toggleSortBy(\n undefined,\n !instance.disableMultiSort && isMultiSortEvent(e)\n )\n }\n : undefined,\n style: {\n cursor: column.canSort ? 'pointer' : undefined,\n },\n title: column.canSort ? 'Toggle SortBy' : undefined,\n },\n ]\n}\n\n// Reducer\nfunction reducer(state, action, previousState, instance) {\n if (action.type === actions.init) {\n return {\n sortBy: [],\n ...state,\n }\n }\n\n if (action.type === actions.resetSortBy) {\n return {\n ...state,\n sortBy: instance.initialState.sortBy || [],\n }\n }\n\n if (action.type === actions.clearSortBy) {\n const { sortBy } = state\n const newSortBy = sortBy.filter(d => d.id !== action.columnId)\n\n return {\n ...state,\n sortBy: newSortBy,\n }\n }\n\n if (action.type === actions.setSortBy) {\n const { sortBy } = action\n return {\n ...state,\n sortBy,\n }\n }\n\n if (action.type === actions.toggleSortBy) {\n const { columnId, desc, multi } = action\n\n const {\n allColumns,\n disableMultiSort,\n disableSortRemove,\n disableMultiRemove,\n maxMultiSortColCount = Number.MAX_SAFE_INTEGER,\n } = instance\n\n const { sortBy } = state\n\n // Find the column for this columnId\n const column = allColumns.find(d => d.id === columnId)\n const { sortDescFirst } = column\n\n // Find any existing sortBy for this column\n const existingSortBy = sortBy.find(d => d.id === columnId)\n const existingIndex = sortBy.findIndex(d => d.id === columnId)\n const hasDescDefined = typeof desc !== 'undefined' && desc !== null\n\n let newSortBy = []\n\n // What should we do with this sort action?\n let sortAction\n\n if (!disableMultiSort && multi) {\n if (existingSortBy) {\n sortAction = 'toggle'\n } else {\n sortAction = 'add'\n }\n } else {\n // Normal mode\n if (existingIndex !== sortBy.length - 1 || sortBy.length !== 1) {\n sortAction = 'replace'\n } else if (existingSortBy) {\n sortAction = 'toggle'\n } else {\n sortAction = 'replace'\n }\n }\n\n // Handle toggle states that will remove the sortBy\n if (\n sortAction === 'toggle' && // Must be toggling\n !disableSortRemove && // If disableSortRemove, disable in general\n !hasDescDefined && // Must not be setting desc\n (multi ? !disableMultiRemove : true) && // If multi, don't allow if disableMultiRemove\n ((existingSortBy && // Finally, detect if it should indeed be removed\n existingSortBy.desc &&\n !sortDescFirst) ||\n (!existingSortBy.desc && sortDescFirst))\n ) {\n sortAction = 'remove'\n }\n\n if (sortAction === 'replace') {\n newSortBy = [\n {\n id: columnId,\n desc: hasDescDefined ? desc : sortDescFirst,\n },\n ]\n } else if (sortAction === 'add') {\n newSortBy = [\n ...sortBy,\n {\n id: columnId,\n desc: hasDescDefined ? desc : sortDescFirst,\n },\n ]\n // Take latest n columns\n newSortBy.splice(0, newSortBy.length - maxMultiSortColCount)\n } else if (sortAction === 'toggle') {\n // This flips (or sets) the\n newSortBy = sortBy.map(d => {\n if (d.id === columnId) {\n return {\n ...d,\n desc: hasDescDefined ? desc : !existingSortBy.desc,\n }\n }\n return d\n })\n } else if (sortAction === 'remove') {\n newSortBy = sortBy.filter(d => d.id !== columnId)\n }\n\n return {\n ...state,\n sortBy: newSortBy,\n }\n }\n}\n\nfunction useInstance(instance) {\n const {\n data,\n rows,\n flatRows,\n allColumns,\n orderByFn = defaultOrderByFn,\n sortTypes: userSortTypes,\n manualSortBy,\n defaultCanSort,\n disableSortBy,\n flatHeaders,\n state: { sortBy },\n dispatch,\n plugins,\n getHooks,\n autoResetSortBy = true,\n } = instance\n\n ensurePluginOrder(\n plugins,\n ['useFilters', 'useGlobalFilter', 'useGroupBy', 'usePivotColumns'],\n 'useSortBy'\n )\n\n const setSortBy = React.useCallback(\n sortBy => {\n dispatch({ type: actions.setSortBy, sortBy })\n },\n [dispatch]\n )\n\n // Updates sorting based on a columnId, desc flag and multi flag\n const toggleSortBy = React.useCallback(\n (columnId, desc, multi) => {\n dispatch({ type: actions.toggleSortBy, columnId, desc, multi })\n },\n [dispatch]\n )\n\n // use reference to avoid memory leak in #1608\n const getInstance = useGetLatest(instance)\n\n // Add the getSortByToggleProps method to columns and headers\n flatHeaders.forEach(column => {\n const {\n accessor,\n canSort: defaultColumnCanSort,\n disableSortBy: columnDisableSortBy,\n id,\n } = column\n\n const canSort = accessor\n ? getFirstDefined(\n columnDisableSortBy === true ? false : undefined,\n disableSortBy === true ? false : undefined,\n true\n )\n : getFirstDefined(defaultCanSort, defaultColumnCanSort, false)\n\n column.canSort = canSort\n\n if (column.canSort) {\n column.toggleSortBy = (desc, multi) =>\n toggleSortBy(column.id, desc, multi)\n\n column.clearSortBy = () => {\n dispatch({ type: actions.clearSortBy, columnId: column.id })\n }\n }\n\n column.getSortByToggleProps = makePropGetter(\n getHooks().getSortByToggleProps,\n {\n instance: getInstance(),\n column,\n }\n )\n\n const columnSort = sortBy.find(d => d.id === id)\n column.isSorted = !!columnSort\n column.sortedIndex = sortBy.findIndex(d => d.id === id)\n column.isSortedDesc = column.isSorted ? columnSort.desc : undefined\n })\n\n const [sortedRows, sortedFlatRows] = React.useMemo(() => {\n if (manualSortBy || !sortBy.length) {\n return [rows, flatRows]\n }\n\n const sortedFlatRows = []\n\n // Filter out sortBys that correspond to non existing columns\n const availableSortBy = sortBy.filter(sort =>\n allColumns.find(col => col.id === sort.id)\n )\n\n const sortData = rows => {\n // Use the orderByFn to compose multiple sortBy's together.\n // This will also perform a stable sorting using the row index\n // if needed.\n const sortedData = orderByFn(\n rows,\n availableSortBy.map(sort => {\n // Support custom sorting methods for each column\n const column = allColumns.find(d => d.id === sort.id)\n\n if (!column) {\n throw new Error(\n `React-Table: Could not find a column with id: ${sort.id} while sorting`\n )\n }\n\n const { sortType } = column\n\n // Look up sortBy functions in this order:\n // column function\n // column string lookup on user sortType\n // column string lookup on built-in sortType\n // default function\n // default string lookup on user sortType\n // default string lookup on built-in sortType\n const sortMethod =\n isFunction(sortType) ||\n (userSortTypes || {})[sortType] ||\n sortTypes[sortType]\n\n if (!sortMethod) {\n throw new Error(\n `React-Table: Could not find a valid sortType of '${sortType}' for column '${sort.id}'.`\n )\n }\n\n // Return the correct sortFn.\n // This function should always return in ascending order\n return (a, b) => sortMethod(a, b, sort.id, sort.desc)\n }),\n // Map the directions\n availableSortBy.map(sort => {\n // Detect and use the sortInverted option\n const column = allColumns.find(d => d.id === sort.id)\n\n if (column && column.sortInverted) {\n return sort.desc\n }\n\n return !sort.desc\n })\n )\n\n // If there are sub-rows, sort them\n sortedData.forEach(row => {\n sortedFlatRows.push(row)\n if (!row.subRows || row.subRows.length === 0) {\n return\n }\n row.subRows = sortData(row.subRows)\n })\n\n return sortedData\n }\n\n return [sortData(rows), sortedFlatRows]\n }, [\n manualSortBy,\n sortBy,\n rows,\n flatRows,\n allColumns,\n orderByFn,\n userSortTypes,\n ])\n\n const getAutoResetSortBy = useGetLatest(autoResetSortBy)\n\n useMountedLayoutEffect(() => {\n if (getAutoResetSortBy()) {\n dispatch({ type: actions.resetSortBy })\n }\n }, [manualSortBy ? null : data])\n\n Object.assign(instance, {\n preSortedRows: rows,\n preSortedFlatRows: flatRows,\n sortedRows,\n sortedFlatRows,\n rows: sortedRows,\n flatRows: sortedFlatRows,\n setSortBy,\n toggleSortBy,\n })\n}\n\nexport function defaultOrderByFn(arr, funcs, dirs) {\n return [...arr].sort((rowA, rowB) => {\n for (let i = 0; i < funcs.length; i += 1) {\n const sortFn = funcs[i]\n const desc = dirs[i] === false || dirs[i] === 'desc'\n const sortInt = sortFn(rowA, rowB)\n if (sortInt !== 0) {\n return desc ? -sortInt : sortInt\n }\n }\n return dirs[0] ? rowA.index - rowB.index : rowB.index - rowA.index\n })\n}\n","import React from 'react'\n\n//\n\nimport {\n actions,\n ensurePluginOrder,\n functionalUpdate,\n useMountedLayoutEffect,\n useGetLatest,\n} from '../publicUtils'\n\nimport { expandRows } from '../utils'\n\nconst pluginName = 'usePagination'\n\n// Actions\nactions.resetPage = 'resetPage'\nactions.gotoPage = 'gotoPage'\nactions.setPageSize = 'setPageSize'\n\nexport const usePagination = hooks => {\n hooks.stateReducers.push(reducer)\n hooks.useInstance.push(useInstance)\n}\n\nusePagination.pluginName = pluginName\n\nfunction reducer(state, action, previousState, instance) {\n if (action.type === actions.init) {\n return {\n pageSize: 10,\n pageIndex: 0,\n ...state,\n }\n }\n\n if (action.type === actions.resetPage) {\n return {\n ...state,\n pageIndex: instance.initialState.pageIndex || 0,\n }\n }\n\n if (action.type === actions.gotoPage) {\n const { pageCount, page } = instance\n const newPageIndex = functionalUpdate(action.pageIndex, state.pageIndex)\n let canNavigate = false\n\n if (newPageIndex > state.pageIndex) {\n // next page\n canNavigate =\n pageCount === -1\n ? page.length >= state.pageSize\n : newPageIndex < pageCount\n } else if (newPageIndex < state.pageIndex) {\n // prev page\n canNavigate = newPageIndex > -1\n }\n\n if (!canNavigate) {\n return state\n }\n\n return {\n ...state,\n pageIndex: newPageIndex,\n }\n }\n\n if (action.type === actions.setPageSize) {\n const { pageSize } = action\n const topRowIndex = state.pageSize * state.pageIndex\n const pageIndex = Math.floor(topRowIndex / pageSize)\n\n return {\n ...state,\n pageIndex,\n pageSize,\n }\n }\n}\n\nfunction useInstance(instance) {\n const {\n rows,\n autoResetPage = true,\n manualExpandedKey = 'expanded',\n plugins,\n pageCount: userPageCount,\n paginateExpandedRows = true,\n expandSubRows = true,\n state: {\n pageSize,\n pageIndex,\n expanded,\n globalFilter,\n filters,\n groupBy,\n sortBy,\n },\n dispatch,\n data,\n manualPagination,\n } = instance\n\n ensurePluginOrder(\n plugins,\n ['useGlobalFilter', 'useFilters', 'useGroupBy', 'useSortBy', 'useExpanded'],\n 'usePagination'\n )\n\n const getAutoResetPage = useGetLatest(autoResetPage)\n\n useMountedLayoutEffect(() => {\n if (getAutoResetPage()) {\n dispatch({ type: actions.resetPage })\n }\n }, [\n dispatch,\n manualPagination ? null : data,\n globalFilter,\n filters,\n groupBy,\n sortBy,\n ])\n\n const pageCount = manualPagination\n ? userPageCount\n : Math.ceil(rows.length / pageSize)\n\n const pageOptions = React.useMemo(\n () =>\n pageCount > 0\n ? [...new Array(pageCount)].fill(null).map((d, i) => i)\n : [],\n [pageCount]\n )\n\n const page = React.useMemo(() => {\n let page\n\n if (manualPagination) {\n page = rows\n } else {\n const pageStart = pageSize * pageIndex\n const pageEnd = pageStart + pageSize\n\n page = rows.slice(pageStart, pageEnd)\n }\n\n if (paginateExpandedRows) {\n return page\n }\n\n return expandRows(page, { manualExpandedKey, expanded, expandSubRows })\n }, [\n expandSubRows,\n expanded,\n manualExpandedKey,\n manualPagination,\n pageIndex,\n pageSize,\n paginateExpandedRows,\n rows,\n ])\n\n const canPreviousPage = pageIndex > 0\n const canNextPage =\n pageCount === -1 ? page.length >= pageSize : pageIndex < pageCount - 1\n\n const gotoPage = React.useCallback(\n pageIndex => {\n dispatch({ type: actions.gotoPage, pageIndex })\n },\n [dispatch]\n )\n\n const previousPage = React.useCallback(() => {\n return gotoPage(old => old - 1)\n }, [gotoPage])\n\n const nextPage = React.useCallback(() => {\n return gotoPage(old => old + 1)\n }, [gotoPage])\n\n const setPageSize = React.useCallback(\n pageSize => {\n dispatch({ type: actions.setPageSize, pageSize })\n },\n [dispatch]\n )\n\n Object.assign(instance, {\n pageOptions,\n pageCount,\n page,\n canPreviousPage,\n canNextPage,\n gotoPage,\n previousPage,\n nextPage,\n setPageSize,\n })\n}\n","/* istanbul ignore file */\n\nimport {\n actions,\n makePropGetter,\n ensurePluginOrder,\n useMountedLayoutEffect,\n useGetLatest,\n} from '../publicUtils'\n\nimport { flattenColumns, getFirstDefined } from '../utils'\n\n// Actions\nactions.resetPivot = 'resetPivot'\nactions.togglePivot = 'togglePivot'\n\nexport const _UNSTABLE_usePivotColumns = hooks => {\n hooks.getPivotToggleProps = [defaultGetPivotToggleProps]\n hooks.stateReducers.push(reducer)\n hooks.useInstanceAfterData.push(useInstanceAfterData)\n hooks.allColumns.push(allColumns)\n hooks.accessValue.push(accessValue)\n hooks.materializedColumns.push(materializedColumns)\n hooks.materializedColumnsDeps.push(materializedColumnsDeps)\n hooks.visibleColumns.push(visibleColumns)\n hooks.visibleColumnsDeps.push(visibleColumnsDeps)\n hooks.useInstance.push(useInstance)\n hooks.prepareRow.push(prepareRow)\n}\n\n_UNSTABLE_usePivotColumns.pluginName = 'usePivotColumns'\n\nconst defaultPivotColumns = []\n\nconst defaultGetPivotToggleProps = (props, { header }) => [\n props,\n {\n onClick: header.canPivot\n ? e => {\n e.persist()\n header.togglePivot()\n }\n : undefined,\n style: {\n cursor: header.canPivot ? 'pointer' : undefined,\n },\n title: 'Toggle Pivot',\n },\n]\n\n// Reducer\nfunction reducer(state, action, previousState, instance) {\n if (action.type === actions.init) {\n return {\n pivotColumns: defaultPivotColumns,\n ...state,\n }\n }\n\n if (action.type === actions.resetPivot) {\n return {\n ...state,\n pivotColumns: instance.initialState.pivotColumns || defaultPivotColumns,\n }\n }\n\n if (action.type === actions.togglePivot) {\n const { columnId, value: setPivot } = action\n\n const resolvedPivot =\n typeof setPivot !== 'undefined'\n ? setPivot\n : !state.pivotColumns.includes(columnId)\n\n if (resolvedPivot) {\n return {\n ...state,\n pivotColumns: [...state.pivotColumns, columnId],\n }\n }\n\n return {\n ...state,\n pivotColumns: state.pivotColumns.filter(d => d !== columnId),\n }\n }\n}\n\nfunction useInstanceAfterData(instance) {\n instance.allColumns.forEach(column => {\n column.isPivotSource = instance.state.pivotColumns.includes(column.id)\n })\n}\n\nfunction allColumns(columns, { instance }) {\n columns.forEach(column => {\n column.isPivotSource = instance.state.pivotColumns.includes(column.id)\n column.uniqueValues = new Set()\n })\n return columns\n}\n\nfunction accessValue(value, { column }) {\n if (column.uniqueValues && typeof value !== 'undefined') {\n column.uniqueValues.add(value)\n }\n return value\n}\n\nfunction materializedColumns(materialized, { instance }) {\n const { allColumns, state } = instance\n\n if (!state.pivotColumns.length || !state.groupBy || !state.groupBy.length) {\n return materialized\n }\n\n const pivotColumns = state.pivotColumns\n .map(id => allColumns.find(d => d.id === id))\n .filter(Boolean)\n\n const sourceColumns = allColumns.filter(\n d =>\n !d.isPivotSource &&\n !state.groupBy.includes(d.id) &&\n !state.pivotColumns.includes(d.id)\n )\n\n const buildPivotColumns = (depth = 0, parent, pivotFilters = []) => {\n const pivotColumn = pivotColumns[depth]\n\n if (!pivotColumn) {\n return sourceColumns.map(sourceColumn => {\n // TODO: We could offer support here for renesting pivoted\n // columns inside copies of their header groups. For now,\n // that seems like it would be (1) overkill on nesting, considering\n // you already get nesting for every pivot level and (2)\n // really hard. :)\n\n return {\n ...sourceColumn,\n canPivot: false,\n isPivoted: true,\n parent,\n depth: depth,\n id: `${parent ? `${parent.id}.${sourceColumn.id}` : sourceColumn.id}`,\n accessor: (originalRow, i, row) => {\n if (pivotFilters.every(filter => filter(row))) {\n return row.values[sourceColumn.id]\n }\n },\n }\n })\n }\n\n const uniqueValues = Array.from(pivotColumn.uniqueValues).sort()\n\n return uniqueValues.map(uniqueValue => {\n const columnGroup = {\n ...pivotColumn,\n Header:\n pivotColumn.PivotHeader || typeof pivotColumn.header === 'string'\n ? `${pivotColumn.Header}: ${uniqueValue}`\n : uniqueValue,\n isPivotGroup: true,\n parent,\n depth,\n id: parent\n ? `${parent.id}.${pivotColumn.id}.${uniqueValue}`\n : `${pivotColumn.id}.${uniqueValue}`,\n pivotValue: uniqueValue,\n }\n\n columnGroup.columns = buildPivotColumns(depth + 1, columnGroup, [\n ...pivotFilters,\n row => row.values[pivotColumn.id] === uniqueValue,\n ])\n\n return columnGroup\n })\n }\n\n const newMaterialized = flattenColumns(buildPivotColumns())\n\n return [...materialized, ...newMaterialized]\n}\n\nfunction materializedColumnsDeps(\n deps,\n {\n instance: {\n state: { pivotColumns, groupBy },\n },\n }\n) {\n return [...deps, pivotColumns, groupBy]\n}\n\nfunction visibleColumns(visibleColumns, { instance: { state } }) {\n visibleColumns = visibleColumns.filter(d => !d.isPivotSource)\n\n if (state.pivotColumns.length && state.groupBy && state.groupBy.length) {\n visibleColumns = visibleColumns.filter(\n column => column.isGrouped || column.isPivoted\n )\n }\n\n return visibleColumns\n}\n\nfunction visibleColumnsDeps(deps, { instance }) {\n return [...deps, instance.state.pivotColumns, instance.state.groupBy]\n}\n\nfunction useInstance(instance) {\n const {\n columns,\n allColumns,\n flatHeaders,\n // pivotFn = defaultPivotFn,\n // manualPivot,\n getHooks,\n plugins,\n dispatch,\n autoResetPivot = true,\n manaulPivot,\n disablePivot,\n defaultCanPivot,\n } = instance\n\n ensurePluginOrder(plugins, ['useGroupBy'], 'usePivotColumns')\n\n const getInstance = useGetLatest(instance)\n\n allColumns.forEach(column => {\n const {\n accessor,\n defaultPivot: defaultColumnPivot,\n disablePivot: columnDisablePivot,\n } = column\n\n column.canPivot = accessor\n ? getFirstDefined(\n column.canPivot,\n columnDisablePivot === true ? false : undefined,\n disablePivot === true ? false : undefined,\n true\n )\n : getFirstDefined(\n column.canPivot,\n defaultColumnPivot,\n defaultCanPivot,\n false\n )\n\n if (column.canPivot) {\n column.togglePivot = () => instance.togglePivot(column.id)\n }\n\n column.Aggregated = column.Aggregated || column.Cell\n })\n\n const togglePivot = (columnId, value) => {\n dispatch({ type: actions.togglePivot, columnId, value })\n }\n\n flatHeaders.forEach(header => {\n header.getPivotToggleProps = makePropGetter(\n getHooks().getPivotToggleProps,\n {\n instance: getInstance(),\n header,\n }\n )\n })\n\n const getAutoResetPivot = useGetLatest(autoResetPivot)\n\n useMountedLayoutEffect(() => {\n if (getAutoResetPivot()) {\n dispatch({ type: actions.resetPivot })\n }\n }, [dispatch, manaulPivot ? null : columns])\n\n Object.assign(instance, {\n togglePivot,\n })\n}\n\nfunction prepareRow(row) {\n row.allCells.forEach(cell => {\n // Grouped cells are in the pivotColumns and the pivot cell for the row\n cell.isPivoted = cell.column.isPivoted\n })\n}\n","import React from 'react'\n\nimport {\n actions,\n makePropGetter,\n ensurePluginOrder,\n useGetLatest,\n useMountedLayoutEffect,\n} from '../publicUtils'\n\nconst pluginName = 'useRowSelect'\n\n// Actions\nactions.resetSelectedRows = 'resetSelectedRows'\nactions.toggleAllRowsSelected = 'toggleAllRowsSelected'\nactions.toggleRowSelected = 'toggleRowSelected'\nactions.toggleAllPageRowsSelected = 'toggleAllPageRowsSelected'\n\nexport const useRowSelect = hooks => {\n hooks.getToggleRowSelectedProps = [defaultGetToggleRowSelectedProps]\n hooks.getToggleAllRowsSelectedProps = [defaultGetToggleAllRowsSelectedProps]\n hooks.getToggleAllPageRowsSelectedProps = [\n defaultGetToggleAllPageRowsSelectedProps,\n ]\n hooks.stateReducers.push(reducer)\n hooks.useInstance.push(useInstance)\n hooks.prepareRow.push(prepareRow)\n}\n\nuseRowSelect.pluginName = pluginName\n\nconst defaultGetToggleRowSelectedProps = (props, { instance, row }) => {\n const { manualRowSelectedKey = 'isSelected' } = instance\n let checked = false\n\n if (row.original && row.original[manualRowSelectedKey]) {\n checked = true\n } else {\n checked = row.isSelected\n }\n\n return [\n props,\n {\n onChange: e => {\n row.toggleRowSelected(e.target.checked)\n },\n style: {\n cursor: 'pointer',\n },\n checked,\n title: 'Toggle Row Selected',\n indeterminate: row.isSomeSelected,\n },\n ]\n}\n\nconst defaultGetToggleAllRowsSelectedProps = (props, { instance }) => [\n props,\n {\n onChange: e => {\n instance.toggleAllRowsSelected(e.target.checked)\n },\n style: {\n cursor: 'pointer',\n },\n checked: instance.isAllRowsSelected,\n title: 'Toggle All Rows Selected',\n indeterminate: Boolean(\n !instance.isAllRowsSelected &&\n Object.keys(instance.state.selectedRowIds).length\n ),\n },\n]\n\nconst defaultGetToggleAllPageRowsSelectedProps = (props, { instance }) => [\n props,\n {\n onChange(e) {\n instance.toggleAllPageRowsSelected(e.target.checked)\n },\n style: {\n cursor: 'pointer',\n },\n checked: instance.isAllPageRowsSelected,\n title: 'Toggle All Current Page Rows Selected',\n indeterminate: Boolean(\n !instance.isAllPageRowsSelected &&\n instance.page.some(({ id }) => instance.state.selectedRowIds[id])\n ),\n },\n]\n\n// eslint-disable-next-line max-params\nfunction reducer(state, action, previousState, instance) {\n if (action.type === actions.init) {\n return {\n selectedRowIds: {},\n ...state,\n }\n }\n\n if (action.type === actions.resetSelectedRows) {\n return {\n ...state,\n selectedRowIds: instance.initialState.selectedRowIds || {},\n }\n }\n\n if (action.type === actions.toggleAllRowsSelected) {\n const { value: setSelected } = action\n const {\n isAllRowsSelected,\n rowsById,\n nonGroupedRowsById = rowsById,\n } = instance\n\n const selectAll =\n typeof setSelected !== 'undefined' ? setSelected : !isAllRowsSelected\n\n // Only remove/add the rows that are visible on the screen\n // Leave all the other rows that are selected alone.\n const selectedRowIds = Object.assign({}, state.selectedRowIds)\n\n if (selectAll) {\n Object.keys(nonGroupedRowsById).forEach(rowId => {\n selectedRowIds[rowId] = true\n })\n } else {\n Object.keys(nonGroupedRowsById).forEach(rowId => {\n delete selectedRowIds[rowId]\n })\n }\n\n return {\n ...state,\n selectedRowIds,\n }\n }\n\n if (action.type === actions.toggleRowSelected) {\n const { id, value: setSelected } = action\n const { rowsById, selectSubRows = true, getSubRows } = instance\n const isSelected = state.selectedRowIds[id]\n const shouldExist =\n typeof setSelected !== 'undefined' ? setSelected : !isSelected\n\n if (isSelected === shouldExist) {\n return state\n }\n\n const newSelectedRowIds = { ...state.selectedRowIds }\n\n const handleRowById = id => {\n const row = rowsById[id]\n\n if (row) {\n if (!row.isGrouped) {\n if (shouldExist) {\n newSelectedRowIds[id] = true\n } else {\n delete newSelectedRowIds[id]\n }\n }\n\n if (selectSubRows && getSubRows(row)) {\n return getSubRows(row).forEach(row => handleRowById(row.id))\n }\n }\n }\n\n handleRowById(id)\n\n return {\n ...state,\n selectedRowIds: newSelectedRowIds,\n }\n }\n\n if (action.type === actions.toggleAllPageRowsSelected) {\n const { value: setSelected } = action\n const {\n page,\n rowsById,\n selectSubRows = true,\n isAllPageRowsSelected,\n getSubRows,\n } = instance\n\n const selectAll =\n typeof setSelected !== 'undefined' ? setSelected : !isAllPageRowsSelected\n\n const newSelectedRowIds = { ...state.selectedRowIds }\n\n const handleRowById = id => {\n const row = rowsById[id]\n\n if (!row.isGrouped) {\n if (selectAll) {\n newSelectedRowIds[id] = true\n } else {\n delete newSelectedRowIds[id]\n }\n }\n\n if (selectSubRows && getSubRows(row)) {\n return getSubRows(row).forEach(row => handleRowById(row.id))\n }\n }\n\n page.forEach(row => handleRowById(row.id))\n\n return {\n ...state,\n selectedRowIds: newSelectedRowIds,\n }\n }\n return state\n}\n\nfunction useInstance(instance) {\n const {\n data,\n rows,\n getHooks,\n plugins,\n rowsById,\n nonGroupedRowsById = rowsById,\n autoResetSelectedRows = true,\n state: { selectedRowIds },\n selectSubRows = true,\n dispatch,\n page,\n getSubRows,\n } = instance\n\n ensurePluginOrder(\n plugins,\n ['useFilters', 'useGroupBy', 'useSortBy', 'useExpanded', 'usePagination'],\n 'useRowSelect'\n )\n\n const selectedFlatRows = React.useMemo(() => {\n const selectedFlatRows = []\n\n rows.forEach(row => {\n const isSelected = selectSubRows\n ? getRowIsSelected(row, selectedRowIds, getSubRows)\n : !!selectedRowIds[row.id]\n row.isSelected = !!isSelected\n row.isSomeSelected = isSelected === null\n\n if (isSelected) {\n selectedFlatRows.push(row)\n }\n })\n\n return selectedFlatRows\n }, [rows, selectSubRows, selectedRowIds, getSubRows])\n\n let isAllRowsSelected = Boolean(\n Object.keys(nonGroupedRowsById).length && Object.keys(selectedRowIds).length\n )\n\n let isAllPageRowsSelected = isAllRowsSelected\n\n if (isAllRowsSelected) {\n if (Object.keys(nonGroupedRowsById).some(id => !selectedRowIds[id])) {\n isAllRowsSelected = false\n }\n }\n\n if (!isAllRowsSelected) {\n if (page && page.length && page.some(({ id }) => !selectedRowIds[id])) {\n isAllPageRowsSelected = false\n }\n }\n\n const getAutoResetSelectedRows = useGetLatest(autoResetSelectedRows)\n\n useMountedLayoutEffect(() => {\n if (getAutoResetSelectedRows()) {\n dispatch({ type: actions.resetSelectedRows })\n }\n }, [dispatch, data])\n\n const toggleAllRowsSelected = React.useCallback(\n value => dispatch({ type: actions.toggleAllRowsSelected, value }),\n [dispatch]\n )\n\n const toggleAllPageRowsSelected = React.useCallback(\n value => dispatch({ type: actions.toggleAllPageRowsSelected, value }),\n [dispatch]\n )\n\n const toggleRowSelected = React.useCallback(\n (id, value) => dispatch({ type: actions.toggleRowSelected, id, value }),\n [dispatch]\n )\n\n const getInstance = useGetLatest(instance)\n\n const getToggleAllRowsSelectedProps = makePropGetter(\n getHooks().getToggleAllRowsSelectedProps,\n { instance: getInstance() }\n )\n\n const getToggleAllPageRowsSelectedProps = makePropGetter(\n getHooks().getToggleAllPageRowsSelectedProps,\n { instance: getInstance() }\n )\n\n Object.assign(instance, {\n selectedFlatRows,\n isAllRowsSelected,\n isAllPageRowsSelected,\n toggleRowSelected,\n toggleAllRowsSelected,\n getToggleAllRowsSelectedProps,\n getToggleAllPageRowsSelectedProps,\n toggleAllPageRowsSelected,\n })\n}\n\nfunction prepareRow(row, { instance }) {\n row.toggleRowSelected = set => instance.toggleRowSelected(row.id, set)\n\n row.getToggleRowSelectedProps = makePropGetter(\n instance.getHooks().getToggleRowSelectedProps,\n { instance: instance, row }\n )\n}\n\nfunction getRowIsSelected(row, selectedRowIds, getSubRows) {\n if (selectedRowIds[row.id]) {\n return true\n }\n\n const subRows = getSubRows(row)\n\n if (subRows && subRows.length) {\n let allChildrenSelected = true\n let someSelected = false\n\n subRows.forEach(subRow => {\n // Bail out early if we know both of these\n if (someSelected && !allChildrenSelected) {\n return\n }\n\n if (getRowIsSelected(subRow, selectedRowIds, getSubRows)) {\n someSelected = true\n } else {\n allChildrenSelected = false\n }\n })\n return allChildrenSelected ? true : someSelected ? null : false\n }\n\n return false\n}\n","import React from 'react'\n\nimport {\n actions,\n functionalUpdate,\n useMountedLayoutEffect,\n useGetLatest,\n} from '../publicUtils'\n\nconst defaultInitialRowStateAccessor = row => ({})\nconst defaultInitialCellStateAccessor = cell => ({})\n\n// Actions\nactions.setRowState = 'setRowState'\nactions.setCellState = 'setCellState'\nactions.resetRowState = 'resetRowState'\n\nexport const useRowState = hooks => {\n hooks.stateReducers.push(reducer)\n hooks.useInstance.push(useInstance)\n hooks.prepareRow.push(prepareRow)\n}\n\nuseRowState.pluginName = 'useRowState'\n\nfunction reducer(state, action, previousState, instance) {\n const {\n initialRowStateAccessor = defaultInitialRowStateAccessor,\n initialCellStateAccessor = defaultInitialCellStateAccessor,\n rowsById,\n } = instance\n\n if (action.type === actions.init) {\n return {\n rowState: {},\n ...state,\n }\n }\n\n if (action.type === actions.resetRowState) {\n return {\n ...state,\n rowState: instance.initialState.rowState || {},\n }\n }\n\n if (action.type === actions.setRowState) {\n const { rowId, value } = action\n\n const oldRowState =\n typeof state.rowState[rowId] !== 'undefined'\n ? state.rowState[rowId]\n : initialRowStateAccessor(rowsById[rowId])\n\n return {\n ...state,\n rowState: {\n ...state.rowState,\n [rowId]: functionalUpdate(value, oldRowState),\n },\n }\n }\n\n if (action.type === actions.setCellState) {\n const { rowId, columnId, value } = action\n\n const oldRowState =\n typeof state.rowState[rowId] !== 'undefined'\n ? state.rowState[rowId]\n : initialRowStateAccessor(rowsById[rowId])\n\n const oldCellState =\n typeof oldRowState?.cellState?.[columnId] !== 'undefined'\n ? oldRowState.cellState[columnId]\n : initialCellStateAccessor(\n rowsById[rowId]?.cells?.find(cell => cell.column.id === columnId)\n )\n\n return {\n ...state,\n rowState: {\n ...state.rowState,\n [rowId]: {\n ...oldRowState,\n cellState: {\n ...(oldRowState.cellState || {}),\n [columnId]: functionalUpdate(value, oldCellState),\n },\n },\n },\n }\n }\n}\n\nfunction useInstance(instance) {\n const { autoResetRowState = true, data, dispatch } = instance\n\n const setRowState = React.useCallback(\n (rowId, value) =>\n dispatch({\n type: actions.setRowState,\n rowId,\n value,\n }),\n [dispatch]\n )\n\n const setCellState = React.useCallback(\n (rowId, columnId, value) =>\n dispatch({\n type: actions.setCellState,\n rowId,\n columnId,\n value,\n }),\n [dispatch]\n )\n\n const getAutoResetRowState = useGetLatest(autoResetRowState)\n\n useMountedLayoutEffect(() => {\n if (getAutoResetRowState()) {\n dispatch({ type: actions.resetRowState })\n }\n }, [data])\n\n Object.assign(instance, {\n setRowState,\n setCellState,\n })\n}\n\nfunction prepareRow(row, { instance }) {\n const {\n initialRowStateAccessor = defaultInitialRowStateAccessor,\n initialCellStateAccessor = defaultInitialCellStateAccessor,\n state: { rowState },\n } = instance\n\n if (row) {\n row.state =\n typeof rowState[row.id] !== 'undefined'\n ? rowState[row.id]\n : initialRowStateAccessor(row)\n\n row.setState = updater => {\n return instance.setRowState(row.id, updater)\n }\n\n row.cells.forEach(cell => {\n if (!row.state.cellState) {\n row.state.cellState = {}\n }\n\n cell.state =\n typeof row.state.cellState[cell.column.id] !== 'undefined'\n ? row.state.cellState[cell.column.id]\n : initialCellStateAccessor(cell)\n\n cell.setState = updater => {\n return instance.setCellState(row.id, cell.column.id, updater)\n }\n })\n }\n}\n","import React from 'react'\n\nimport { functionalUpdate, actions } from '../publicUtils'\n\n// Actions\nactions.resetColumnOrder = 'resetColumnOrder'\nactions.setColumnOrder = 'setColumnOrder'\n\nexport const useColumnOrder = hooks => {\n hooks.stateReducers.push(reducer)\n hooks.visibleColumnsDeps.push((deps, { instance }) => {\n return [...deps, instance.state.columnOrder]\n })\n hooks.visibleColumns.push(visibleColumns)\n hooks.useInstance.push(useInstance)\n}\n\nuseColumnOrder.pluginName = 'useColumnOrder'\n\nfunction reducer(state, action, previousState, instance) {\n if (action.type === actions.init) {\n return {\n columnOrder: [],\n ...state,\n }\n }\n\n if (action.type === actions.resetColumnOrder) {\n return {\n ...state,\n columnOrder: instance.initialState.columnOrder || [],\n }\n }\n\n if (action.type === actions.setColumnOrder) {\n return {\n ...state,\n columnOrder: functionalUpdate(action.columnOrder, state.columnOrder),\n }\n }\n}\n\nfunction visibleColumns(\n columns,\n {\n instance: {\n state: { columnOrder },\n },\n }\n) {\n // If there is no order, return the normal columns\n if (!columnOrder || !columnOrder.length) {\n return columns\n }\n\n const columnOrderCopy = [...columnOrder]\n\n // If there is an order, make a copy of the columns\n const columnsCopy = [...columns]\n\n // And make a new ordered array of the columns\n const columnsInOrder = []\n\n // Loop over the columns and place them in order into the new array\n while (columnsCopy.length && columnOrderCopy.length) {\n const targetColumnId = columnOrderCopy.shift()\n const foundIndex = columnsCopy.findIndex(d => d.id === targetColumnId)\n if (foundIndex > -1) {\n columnsInOrder.push(columnsCopy.splice(foundIndex, 1)[0])\n }\n }\n\n // If there are any columns left, add them to the end\n return [...columnsInOrder, ...columnsCopy]\n}\n\nfunction useInstance(instance) {\n const { dispatch } = instance\n\n instance.setColumnOrder = React.useCallback(\n columnOrder => {\n return dispatch({ type: actions.setColumnOrder, columnOrder })\n },\n [dispatch]\n )\n}\n","import React from 'react'\n\nimport {\n actions,\n defaultColumn,\n makePropGetter,\n useGetLatest,\n ensurePluginOrder,\n useMountedLayoutEffect,\n} from '../publicUtils'\n\nimport { getFirstDefined, passiveEventSupported } from '../utils'\n\n// Default Column\ndefaultColumn.canResize = true\n\n// Actions\nactions.columnStartResizing = 'columnStartResizing'\nactions.columnResizing = 'columnResizing'\nactions.columnDoneResizing = 'columnDoneResizing'\nactions.resetResize = 'resetResize'\n\nexport const useResizeColumns = hooks => {\n hooks.getResizerProps = [defaultGetResizerProps]\n hooks.getHeaderProps.push({\n style: {\n position: 'relative',\n },\n })\n hooks.stateReducers.push(reducer)\n hooks.useInstance.push(useInstance)\n hooks.useInstanceBeforeDimensions.push(useInstanceBeforeDimensions)\n}\n\nconst defaultGetResizerProps = (props, { instance, header }) => {\n const { dispatch } = instance\n\n const onResizeStart = (e, header) => {\n let isTouchEvent = false\n if (e.type === 'touchstart') {\n // lets not respond to multiple touches (e.g. 2 or 3 fingers)\n if (e.touches && e.touches.length > 1) {\n return\n }\n isTouchEvent = true\n }\n const headersToResize = getLeafHeaders(header)\n const headerIdWidths = headersToResize.map(d => [d.id, d.totalWidth])\n\n const clientX = isTouchEvent ? Math.round(e.touches[0].clientX) : e.clientX\n\n let raf\n let mostRecentClientX\n\n const dispatchEnd = () => {\n window.cancelAnimationFrame(raf)\n raf = null\n dispatch({ type: actions.columnDoneResizing })\n }\n const dispatchMove = () => {\n window.cancelAnimationFrame(raf)\n raf = null\n dispatch({ type: actions.columnResizing, clientX: mostRecentClientX })\n }\n\n const scheduleDispatchMoveOnNextAnimationFrame = clientXPos => {\n mostRecentClientX = clientXPos\n if (!raf) {\n raf = window.requestAnimationFrame(dispatchMove)\n }\n }\n\n const handlersAndEvents = {\n mouse: {\n moveEvent: 'mousemove',\n moveHandler: e => scheduleDispatchMoveOnNextAnimationFrame(e.clientX),\n upEvent: 'mouseup',\n upHandler: e => {\n document.removeEventListener(\n 'mousemove',\n handlersAndEvents.mouse.moveHandler\n )\n document.removeEventListener(\n 'mouseup',\n handlersAndEvents.mouse.upHandler\n )\n dispatchEnd()\n },\n },\n touch: {\n moveEvent: 'touchmove',\n moveHandler: e => {\n if (e.cancelable) {\n e.preventDefault()\n e.stopPropagation()\n }\n scheduleDispatchMoveOnNextAnimationFrame(e.touches[0].clientX)\n return false\n },\n upEvent: 'touchend',\n upHandler: e => {\n document.removeEventListener(\n handlersAndEvents.touch.moveEvent,\n handlersAndEvents.touch.moveHandler\n )\n document.removeEventListener(\n handlersAndEvents.touch.upEvent,\n handlersAndEvents.touch.moveHandler\n )\n dispatchEnd()\n },\n },\n }\n\n const events = isTouchEvent\n ? handlersAndEvents.touch\n : handlersAndEvents.mouse\n const passiveIfSupported = passiveEventSupported()\n ? { passive: false }\n : false\n document.addEventListener(\n events.moveEvent,\n events.moveHandler,\n passiveIfSupported\n )\n document.addEventListener(\n events.upEvent,\n events.upHandler,\n passiveIfSupported\n )\n\n dispatch({\n type: actions.columnStartResizing,\n columnId: header.id,\n columnWidth: header.totalWidth,\n headerIdWidths,\n clientX,\n })\n }\n\n return [\n props,\n {\n onMouseDown: e => e.persist() || onResizeStart(e, header),\n onTouchStart: e => e.persist() || onResizeStart(e, header),\n style: {\n cursor: 'col-resize',\n },\n draggable: false,\n role: 'separator',\n },\n ]\n}\n\nuseResizeColumns.pluginName = 'useResizeColumns'\n\nfunction reducer(state, action) {\n if (action.type === actions.init) {\n return {\n columnResizing: {\n columnWidths: {},\n },\n ...state,\n }\n }\n\n if (action.type === actions.resetResize) {\n return {\n ...state,\n columnResizing: {\n columnWidths: {},\n },\n }\n }\n\n if (action.type === actions.columnStartResizing) {\n const { clientX, columnId, columnWidth, headerIdWidths } = action\n\n return {\n ...state,\n columnResizing: {\n ...state.columnResizing,\n startX: clientX,\n headerIdWidths,\n columnWidth,\n isResizingColumn: columnId,\n },\n }\n }\n\n if (action.type === actions.columnResizing) {\n const { clientX } = action\n const { startX, columnWidth, headerIdWidths = [] } = state.columnResizing\n\n const deltaX = clientX - startX\n const percentageDeltaX = deltaX / columnWidth\n\n const newColumnWidths = {}\n\n headerIdWidths.forEach(([headerId, headerWidth]) => {\n newColumnWidths[headerId] = Math.max(\n headerWidth + headerWidth * percentageDeltaX,\n 0\n )\n })\n\n return {\n ...state,\n columnResizing: {\n ...state.columnResizing,\n columnWidths: {\n ...state.columnResizing.columnWidths,\n ...newColumnWidths,\n },\n },\n }\n }\n\n if (action.type === actions.columnDoneResizing) {\n return {\n ...state,\n columnResizing: {\n ...state.columnResizing,\n startX: null,\n isResizingColumn: null,\n },\n }\n }\n}\n\nconst useInstanceBeforeDimensions = instance => {\n const {\n flatHeaders,\n disableResizing,\n getHooks,\n state: { columnResizing },\n } = instance\n\n const getInstance = useGetLatest(instance)\n\n flatHeaders.forEach(header => {\n const canResize = getFirstDefined(\n header.disableResizing === true ? false : undefined,\n disableResizing === true ? false : undefined,\n true\n )\n\n header.canResize = canResize\n header.width =\n columnResizing.columnWidths[header.id] ||\n header.originalWidth ||\n header.width\n header.isResizing = columnResizing.isResizingColumn === header.id\n\n if (canResize) {\n header.getResizerProps = makePropGetter(getHooks().getResizerProps, {\n instance: getInstance(),\n header,\n })\n }\n })\n}\n\nfunction useInstance(instance) {\n const { plugins, dispatch, autoResetResize = true, columns } = instance\n\n ensurePluginOrder(plugins, ['useAbsoluteLayout'], 'useResizeColumns')\n\n const getAutoResetResize = useGetLatest(autoResetResize)\n useMountedLayoutEffect(() => {\n if (getAutoResetResize()) {\n dispatch({ type: actions.resetResize })\n }\n }, [columns])\n\n const resetResizing = React.useCallback(\n () => dispatch({ type: actions.resetResize }),\n [dispatch]\n )\n\n Object.assign(instance, {\n resetResizing,\n })\n}\n\nfunction getLeafHeaders(header) {\n const leafHeaders = []\n const recurseHeader = header => {\n if (header.columns && header.columns.length) {\n header.columns.map(recurseHeader)\n }\n leafHeaders.push(header)\n }\n recurseHeader(header)\n return leafHeaders\n}\n","const cellStyles = {\n position: 'absolute',\n top: 0,\n}\n\nexport const useAbsoluteLayout = hooks => {\n hooks.getTableBodyProps.push(getRowStyles)\n hooks.getRowProps.push(getRowStyles)\n hooks.getHeaderGroupProps.push(getRowStyles)\n hooks.getFooterGroupProps.push(getRowStyles)\n\n hooks.getHeaderProps.push((props, { column }) => [\n props,\n {\n style: {\n ...cellStyles,\n left: `${column.totalLeft}px`,\n width: `${column.totalWidth}px`,\n },\n },\n ])\n\n hooks.getCellProps.push((props, { cell }) => [\n props,\n {\n style: {\n ...cellStyles,\n left: `${cell.column.totalLeft}px`,\n width: `${cell.column.totalWidth}px`,\n },\n },\n ])\n\n hooks.getFooterProps.push((props, { column }) => [\n props,\n {\n style: {\n ...cellStyles,\n left: `${column.totalLeft}px`,\n width: `${column.totalWidth}px`,\n },\n },\n ])\n}\n\nuseAbsoluteLayout.pluginName = 'useAbsoluteLayout'\n\nconst getRowStyles = (props, { instance }) => [\n props,\n {\n style: {\n position: 'relative',\n width: `${instance.totalColumnsWidth}px`,\n },\n },\n]\n","const cellStyles = {\n display: 'inline-block',\n boxSizing: 'border-box',\n}\n\nconst getRowStyles = (props, { instance }) => [\n props,\n {\n style: {\n display: 'flex',\n width: `${instance.totalColumnsWidth}px`,\n },\n },\n]\n\nexport const useBlockLayout = hooks => {\n hooks.getRowProps.push(getRowStyles)\n hooks.getHeaderGroupProps.push(getRowStyles)\n hooks.getFooterGroupProps.push(getRowStyles)\n\n hooks.getHeaderProps.push((props, { column }) => [\n props,\n {\n style: {\n ...cellStyles,\n width: `${column.totalWidth}px`,\n },\n },\n ])\n\n hooks.getCellProps.push((props, { cell }) => [\n props,\n {\n style: {\n ...cellStyles,\n width: `${cell.column.totalWidth}px`,\n },\n },\n ])\n\n hooks.getFooterProps.push((props, { column }) => [\n props,\n {\n style: {\n ...cellStyles,\n width: `${column.totalWidth}px`,\n },\n },\n ])\n}\n\nuseBlockLayout.pluginName = 'useBlockLayout'\n","export function useFlexLayout(hooks) {\n hooks.getTableProps.push(getTableProps)\n hooks.getRowProps.push(getRowStyles)\n hooks.getHeaderGroupProps.push(getRowStyles)\n hooks.getFooterGroupProps.push(getRowStyles)\n hooks.getHeaderProps.push(getHeaderProps)\n hooks.getCellProps.push(getCellProps)\n hooks.getFooterProps.push(getFooterProps)\n}\n\nuseFlexLayout.pluginName = 'useFlexLayout'\n\nconst getTableProps = (props, { instance }) => [\n props,\n {\n style: {\n minWidth: `${instance.totalColumnsMinWidth}px`,\n },\n },\n]\n\nconst getRowStyles = (props, { instance }) => [\n props,\n {\n style: {\n display: 'flex',\n flex: '1 0 auto',\n minWidth: `${instance.totalColumnsMinWidth}px`,\n },\n },\n]\n\nconst getHeaderProps = (props, { column }) => [\n props,\n {\n style: {\n boxSizing: 'border-box',\n flex: column.totalFlexWidth\n ? `${column.totalFlexWidth} 0 auto`\n : undefined,\n minWidth: `${column.totalMinWidth}px`,\n width: `${column.totalWidth}px`,\n },\n },\n]\n\nconst getCellProps = (props, { cell }) => [\n props,\n {\n style: {\n boxSizing: 'border-box',\n flex: `${cell.column.totalFlexWidth} 0 auto`,\n minWidth: `${cell.column.totalMinWidth}px`,\n width: `${cell.column.totalWidth}px`,\n },\n },\n]\n\nconst getFooterProps = (props, { column }) => [\n props,\n {\n style: {\n boxSizing: 'border-box',\n flex: column.totalFlexWidth\n ? `${column.totalFlexWidth} 0 auto`\n : undefined,\n minWidth: `${column.totalMinWidth}px`,\n width: `${column.totalWidth}px`,\n },\n },\n]\n","import { actions } from '../publicUtils'\n\n// Actions\nactions.columnStartResizing = 'columnStartResizing'\nactions.columnResizing = 'columnResizing'\nactions.columnDoneResizing = 'columnDoneResizing'\nactions.resetResize = 'resetResize'\n\nexport function useGridLayout(hooks) {\n hooks.stateReducers.push(reducer)\n hooks.getTableProps.push(getTableProps)\n hooks.getHeaderProps.push(getHeaderProps)\n hooks.getRowProps.push(getRowProps)\n}\n\nuseGridLayout.pluginName = 'useGridLayout'\n\nconst getTableProps = (props, { instance }) => {\n const gridTemplateColumns = instance.visibleColumns.map(column => {\n if (instance.state.gridLayout.columnWidths[column.id])\n return `${instance.state.gridLayout.columnWidths[column.id]}px`\n // When resizing, lock the width of all unset columns\n // instead of using user-provided width or defaultColumn width,\n // which could potentially be 'auto' or 'fr' units that don't scale linearly\n if (instance.state.columnResizing?.isResizingColumn)\n return `${instance.state.gridLayout.startWidths[column.id]}px`\n if (typeof column.width === 'number') return `${column.width}px`\n return column.width\n })\n return [\n props,\n {\n style: {\n display: `grid`,\n gridTemplateColumns: gridTemplateColumns.join(` `),\n },\n },\n ]\n}\n\nconst getHeaderProps = (props, { column }) => [\n props,\n {\n id: `header-cell-${column.id}`,\n style: {\n position: `sticky`, //enables a scroll wrapper to be placed around the table and have sticky headers\n gridColumn: `span ${column.totalVisibleHeaderCount}`,\n },\n },\n]\n\nconst getRowProps = (props, { row }) => {\n if (row.isExpanded) {\n return [\n props,\n {\n style: {\n gridColumn: `1 / ${row.cells.length + 1}`,\n },\n },\n ]\n }\n return [props, {}]\n}\n\nfunction reducer(state, action, previousState, instance) {\n if (action.type === actions.init) {\n return {\n gridLayout: {\n columnWidths: {},\n },\n ...state,\n }\n }\n\n if (action.type === actions.resetResize) {\n return {\n ...state,\n gridLayout: {\n columnWidths: {},\n },\n }\n }\n\n if (action.type === actions.columnStartResizing) {\n const { columnId, headerIdWidths } = action\n const columnWidth = getElementWidth(columnId)\n\n if (columnWidth !== undefined) {\n const startWidths = instance.visibleColumns.reduce(\n (acc, column) => ({\n ...acc,\n [column.id]: getElementWidth(column.id),\n }),\n {}\n )\n const minWidths = instance.visibleColumns.reduce(\n (acc, column) => ({\n ...acc,\n [column.id]: column.minWidth,\n }),\n {}\n )\n const maxWidths = instance.visibleColumns.reduce(\n (acc, column) => ({\n ...acc,\n [column.id]: column.maxWidth,\n }),\n {}\n )\n\n const headerIdGridWidths = headerIdWidths.map(([headerId]) => [\n headerId,\n getElementWidth(headerId),\n ])\n\n return {\n ...state,\n gridLayout: {\n ...state.gridLayout,\n startWidths,\n minWidths,\n maxWidths,\n headerIdGridWidths,\n columnWidth,\n },\n }\n } else {\n return state\n }\n }\n\n if (action.type === actions.columnResizing) {\n const { clientX } = action\n const { startX } = state.columnResizing\n const {\n columnWidth,\n minWidths,\n maxWidths,\n headerIdGridWidths = [],\n } = state.gridLayout\n\n const deltaX = clientX - startX\n const percentageDeltaX = deltaX / columnWidth\n\n const newColumnWidths = {}\n\n headerIdGridWidths.forEach(([headerId, headerWidth]) => {\n newColumnWidths[headerId] = Math.min(\n Math.max(\n minWidths[headerId],\n headerWidth + headerWidth * percentageDeltaX\n ),\n maxWidths[headerId]\n )\n })\n\n return {\n ...state,\n gridLayout: {\n ...state.gridLayout,\n columnWidths: {\n ...state.gridLayout.columnWidths,\n ...newColumnWidths,\n },\n },\n }\n }\n\n if (action.type === actions.columnDoneResizing) {\n return {\n ...state,\n gridLayout: {\n ...state.gridLayout,\n startWidths: {},\n minWidths: {},\n maxWidths: {},\n },\n }\n }\n}\n\nfunction getElementWidth(columnId) {\n const width = document.getElementById(`header-cell-${columnId}`)?.offsetWidth\n\n if (width !== undefined) {\n return width\n }\n}\n","if (process.env.NODE_ENV === 'production') {\n module.exports = require('./dist/react-table.production.min.js')\n} else {\n module.exports = require('./dist/react-table.development.js')\n}\n","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","/**\n * @license React\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var l=Symbol.for(\"react.element\"),n=Symbol.for(\"react.portal\"),p=Symbol.for(\"react.fragment\"),q=Symbol.for(\"react.strict_mode\"),r=Symbol.for(\"react.profiler\"),t=Symbol.for(\"react.provider\"),u=Symbol.for(\"react.context\"),v=Symbol.for(\"react.forward_ref\"),w=Symbol.for(\"react.suspense\"),x=Symbol.for(\"react.memo\"),y=Symbol.for(\"react.lazy\"),z=Symbol.iterator;function A(a){if(null===a||\"object\"!==typeof a)return null;a=z&&a[z]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}\nvar B={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,D={};function E(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}E.prototype.isReactComponent={};\nE.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw Error(\"setState(...): takes an object of state variables to update or a function which returns an object of state variables.\");this.updater.enqueueSetState(this,a,b,\"setState\")};E.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};function F(){}F.prototype=E.prototype;function G(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}var H=G.prototype=new F;\nH.constructor=G;C(H,E.prototype);H.isPureReactComponent=!0;var I=Array.isArray,J=Object.prototype.hasOwnProperty,K={current:null},L={key:!0,ref:!0,__self:!0,__source:!0};\nfunction M(a,b,e){var d,c={},k=null,h=null;if(null!=b)for(d in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(k=\"\"+b.key),b)J.call(b,d)&&!L.hasOwnProperty(d)&&(c[d]=b[d]);var g=arguments.length-2;if(1===g)c.children=e;else if(1= this.input.length) {\n throw Error(\"Unexpected end of input\")\n }\n this.idx++\n }\n\n RegExpParser.prototype.loc = function(begin) {\n return { begin: begin, end: this.idx }\n }\n\n // consts and utilities\n var hexDigitPattern = /[0-9a-fA-F]/\n var decimalPattern = /[0-9]/\n var decimalPatternNoZero = /[1-9]/\n\n function cc(char) {\n return char.charCodeAt(0)\n }\n\n function insertToSet(item, set) {\n if (item.length !== undefined) {\n item.forEach(function(subItem) {\n set.push(subItem)\n })\n } else {\n set.push(item)\n }\n }\n\n function addFlag(flagObj, flagKey) {\n if (flagObj[flagKey] === true) {\n throw \"duplicate flag \" + flagKey\n }\n\n flagObj[flagKey] = true\n }\n\n function ASSERT_EXISTS(obj) {\n // istanbul ignore next\n if (obj === undefined) {\n throw Error(\"Internal Error - Should never get here!\")\n }\n }\n\n // istanbul ignore next\n function ASSERT_NEVER_REACH_HERE() {\n throw Error(\"Internal Error - Should never get here!\")\n }\n\n var i\n var digitsCharCodes = []\n for (i = cc(\"0\"); i <= cc(\"9\"); i++) {\n digitsCharCodes.push(i)\n }\n\n var wordCharCodes = [cc(\"_\")].concat(digitsCharCodes)\n for (i = cc(\"a\"); i <= cc(\"z\"); i++) {\n wordCharCodes.push(i)\n }\n\n for (i = cc(\"A\"); i <= cc(\"Z\"); i++) {\n wordCharCodes.push(i)\n }\n\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#character-classes\n var whitespaceCodes = [\n cc(\" \"),\n cc(\"\\f\"),\n cc(\"\\n\"),\n cc(\"\\r\"),\n cc(\"\\t\"),\n cc(\"\\v\"),\n cc(\"\\t\"),\n cc(\"\\u00a0\"),\n cc(\"\\u1680\"),\n cc(\"\\u2000\"),\n cc(\"\\u2001\"),\n cc(\"\\u2002\"),\n cc(\"\\u2003\"),\n cc(\"\\u2004\"),\n cc(\"\\u2005\"),\n cc(\"\\u2006\"),\n cc(\"\\u2007\"),\n cc(\"\\u2008\"),\n cc(\"\\u2009\"),\n cc(\"\\u200a\"),\n cc(\"\\u2028\"),\n cc(\"\\u2029\"),\n cc(\"\\u202f\"),\n cc(\"\\u205f\"),\n cc(\"\\u3000\"),\n cc(\"\\ufeff\")\n ]\n\n function BaseRegExpVisitor() {}\n\n BaseRegExpVisitor.prototype.visitChildren = function(node) {\n for (var key in node) {\n var child = node[key]\n /* istanbul ignore else */\n if (node.hasOwnProperty(key)) {\n if (child.type !== undefined) {\n this.visit(child)\n } else if (Array.isArray(child)) {\n child.forEach(function(subChild) {\n this.visit(subChild)\n }, this)\n }\n }\n }\n }\n\n BaseRegExpVisitor.prototype.visit = function(node) {\n switch (node.type) {\n case \"Pattern\":\n this.visitPattern(node)\n break\n case \"Flags\":\n this.visitFlags(node)\n break\n case \"Disjunction\":\n this.visitDisjunction(node)\n break\n case \"Alternative\":\n this.visitAlternative(node)\n break\n case \"StartAnchor\":\n this.visitStartAnchor(node)\n break\n case \"EndAnchor\":\n this.visitEndAnchor(node)\n break\n case \"WordBoundary\":\n this.visitWordBoundary(node)\n break\n case \"NonWordBoundary\":\n this.visitNonWordBoundary(node)\n break\n case \"Lookahead\":\n this.visitLookahead(node)\n break\n case \"NegativeLookahead\":\n this.visitNegativeLookahead(node)\n break\n case \"Character\":\n this.visitCharacter(node)\n break\n case \"Set\":\n this.visitSet(node)\n break\n case \"Group\":\n this.visitGroup(node)\n break\n case \"GroupBackReference\":\n this.visitGroupBackReference(node)\n break\n case \"Quantifier\":\n this.visitQuantifier(node)\n break\n }\n\n this.visitChildren(node)\n }\n\n BaseRegExpVisitor.prototype.visitPattern = function(node) {}\n\n BaseRegExpVisitor.prototype.visitFlags = function(node) {}\n\n BaseRegExpVisitor.prototype.visitDisjunction = function(node) {}\n\n BaseRegExpVisitor.prototype.visitAlternative = function(node) {}\n\n // Assertion\n BaseRegExpVisitor.prototype.visitStartAnchor = function(node) {}\n\n BaseRegExpVisitor.prototype.visitEndAnchor = function(node) {}\n\n BaseRegExpVisitor.prototype.visitWordBoundary = function(node) {}\n\n BaseRegExpVisitor.prototype.visitNonWordBoundary = function(node) {}\n\n BaseRegExpVisitor.prototype.visitLookahead = function(node) {}\n\n BaseRegExpVisitor.prototype.visitNegativeLookahead = function(node) {}\n\n // atoms\n BaseRegExpVisitor.prototype.visitCharacter = function(node) {}\n\n BaseRegExpVisitor.prototype.visitSet = function(node) {}\n\n BaseRegExpVisitor.prototype.visitGroup = function(node) {}\n\n BaseRegExpVisitor.prototype.visitGroupBackReference = function(node) {}\n\n BaseRegExpVisitor.prototype.visitQuantifier = function(node) {}\n\n return {\n RegExpParser: RegExpParser,\n BaseRegExpVisitor: BaseRegExpVisitor,\n VERSION: \"0.5.0\"\n }\n }\n)\n","/**\n * @license React\n * scheduler.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';function f(a,b){var c=a.length;a.push(b);a:for(;0>>1,e=a[d];if(0>>1;dg(C,c))ng(x,C)?(a[d]=x,a[n]=c,d=n):(a[d]=C,a[m]=c,d=m);else if(ng(x,c))a[d]=x,a[n]=c,d=n;else break a}}return b}\nfunction g(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}if(\"object\"===typeof performance&&\"function\"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}var r=[],t=[],u=1,v=null,y=3,z=!1,A=!1,B=!1,D=\"function\"===typeof setTimeout?setTimeout:null,E=\"function\"===typeof clearTimeout?clearTimeout:null,F=\"undefined\"!==typeof setImmediate?setImmediate:null;\n\"undefined\"!==typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function G(a){for(var b=h(t);null!==b;){if(null===b.callback)k(t);else if(b.startTime<=a)k(t),b.sortIndex=b.expirationTime,f(r,b);else break;b=h(t)}}function H(a){B=!1;G(a);if(!A)if(null!==h(r))A=!0,I(J);else{var b=h(t);null!==b&&K(H,b.startTime-a)}}\nfunction J(a,b){A=!1;B&&(B=!1,E(L),L=-1);z=!0;var c=y;try{G(b);for(v=h(r);null!==v&&(!(v.expirationTime>b)||a&&!M());){var d=v.callback;if(\"function\"===typeof d){v.callback=null;y=v.priorityLevel;var e=d(v.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?v.callback=e:v===h(r)&&k(r);G(b)}else k(r);v=h(r)}if(null!==v)var w=!0;else{var m=h(t);null!==m&&K(H,m.startTime-b);w=!1}return w}finally{v=null,y=c,z=!1}}var N=!1,O=null,L=-1,P=5,Q=-1;\nfunction M(){return exports.unstable_now()-Qa||125d?(a.sortIndex=c,f(t,a),null===h(r)&&a===h(t)&&(B?(E(L),L=-1):B=!0,K(H,c-d))):(a.sortIndex=e,f(r,a),A||z||(A=!0,I(J)));return a};\nexports.unstable_shouldYield=M;exports.unstable_wrapCallback=function(a){var b=y;return function(){var c=y;y=b;try{return a.apply(this,arguments)}finally{y=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nmodule.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\nmodule.exports = _arrayWithHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}\nmodule.exports = _arrayWithoutHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n return self;\n}\nmodule.exports = _assertThisInitialized, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n _next(undefined);\n });\n };\n}\nmodule.exports = _asyncToGenerator, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\nmodule.exports = _classCallCheck, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var setPrototypeOf = require(\"./setPrototypeOf.js\");\nvar isNativeReflectConstruct = require(\"./isNativeReflectConstruct.js\");\nfunction _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n module.exports = _construct = Reflect.construct.bind(), module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n } else {\n module.exports = _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) setPrototypeOf(instance, Class.prototype);\n return instance;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n }\n return _construct.apply(null, arguments);\n}\nmodule.exports = _construct, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var toPropertyKey = require(\"./toPropertyKey.js\");\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, toPropertyKey(descriptor.key), descriptor);\n }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\nmodule.exports = _createClass, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\nfunction _createForOfIteratorHelper(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n if (!it) {\n if (Array.isArray(o) || (it = unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n var i = 0;\n var F = function F() {};\n return {\n s: F,\n n: function n() {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function e(_e) {\n throw _e;\n },\n f: F\n };\n }\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n var normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function s() {\n it = it.call(o);\n },\n n: function n() {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function e(_e2) {\n didErr = true;\n err = _e2;\n },\n f: function f() {\n try {\n if (!normalCompletion && it[\"return\"] != null) it[\"return\"]();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}\nmodule.exports = _createForOfIteratorHelper, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var getPrototypeOf = require(\"./getPrototypeOf.js\");\nvar isNativeReflectConstruct = require(\"./isNativeReflectConstruct.js\");\nvar possibleConstructorReturn = require(\"./possibleConstructorReturn.js\");\nfunction _createSuper(Derived) {\n var hasNativeReflectConstruct = isNativeReflectConstruct();\n return function _createSuperInternal() {\n var Super = getPrototypeOf(Derived),\n result;\n if (hasNativeReflectConstruct) {\n var NewTarget = getPrototypeOf(this).constructor;\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n return possibleConstructorReturn(this, result);\n };\n}\nmodule.exports = _createSuper, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var toPropertyKey = require(\"./toPropertyKey.js\");\nfunction _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nmodule.exports = _defineProperty, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _getPrototypeOf(o) {\n module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _getPrototypeOf(o);\n}\nmodule.exports = _getPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var setPrototypeOf = require(\"./setPrototypeOf.js\");\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}\nmodule.exports = _inherits, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\nmodule.exports = _isNativeFunction, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\nmodule.exports = _isNativeReflectConstruct, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nmodule.exports = _iterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _iterableToArrayLimit(arr, i) {\n var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"];\n if (null != _i) {\n var _s,\n _e,\n _x,\n _r,\n _arr = [],\n _n = !0,\n _d = !1;\n try {\n if (_x = (_i = _i.call(arr)).next, 0 === i) {\n if (Object(_i) !== _i) return;\n _n = !1;\n } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0);\n } catch (err) {\n _d = !0, _e = err;\n } finally {\n try {\n if (!_n && null != _i[\"return\"] && (_r = _i[\"return\"](), Object(_r) !== _r)) return;\n } finally {\n if (_d) throw _e;\n }\n }\n return _arr;\n }\n}\nmodule.exports = _iterableToArrayLimit, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nmodule.exports = _nonIterableRest, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nmodule.exports = _nonIterableSpread, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var defineProperty = require(\"./defineProperty.js\");\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n return target;\n}\nmodule.exports = _objectSpread2, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar assertThisInitialized = require(\"./assertThisInitialized.js\");\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n return assertThisInitialized(self);\n}\nmodule.exports = _possibleConstructorReturn, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nfunction _regeneratorRuntime() {\n \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */\n module.exports = _regeneratorRuntime = function _regeneratorRuntime() {\n return exports;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n var exports = {},\n Op = Object.prototype,\n hasOwn = Op.hasOwnProperty,\n defineProperty = Object.defineProperty || function (obj, key, desc) {\n obj[key] = desc.value;\n },\n $Symbol = \"function\" == typeof Symbol ? Symbol : {},\n iteratorSymbol = $Symbol.iterator || \"@@iterator\",\n asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\",\n toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n function define(obj, key, value) {\n return Object.defineProperty(obj, key, {\n value: value,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }), obj[key];\n }\n try {\n define({}, \"\");\n } catch (err) {\n define = function define(obj, key, value) {\n return obj[key] = value;\n };\n }\n function wrap(innerFn, outerFn, self, tryLocsList) {\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator,\n generator = Object.create(protoGenerator.prototype),\n context = new Context(tryLocsList || []);\n return defineProperty(generator, \"_invoke\", {\n value: makeInvokeMethod(innerFn, self, context)\n }), generator;\n }\n function tryCatch(fn, obj, arg) {\n try {\n return {\n type: \"normal\",\n arg: fn.call(obj, arg)\n };\n } catch (err) {\n return {\n type: \"throw\",\n arg: err\n };\n }\n }\n exports.wrap = wrap;\n var ContinueSentinel = {};\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n var getProto = Object.getPrototypeOf,\n NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype);\n var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function (method) {\n define(prototype, method, function (arg) {\n return this._invoke(method, arg);\n });\n });\n }\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (\"throw\" !== record.type) {\n var result = record.arg,\n value = result.value;\n return value && \"object\" == _typeof(value) && hasOwn.call(value, \"__await\") ? PromiseImpl.resolve(value.__await).then(function (value) {\n invoke(\"next\", value, resolve, reject);\n }, function (err) {\n invoke(\"throw\", err, resolve, reject);\n }) : PromiseImpl.resolve(value).then(function (unwrapped) {\n result.value = unwrapped, resolve(result);\n }, function (error) {\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n reject(record.arg);\n }\n var previousPromise;\n defineProperty(this, \"_invoke\", {\n value: function value(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function (resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n }\n });\n }\n function makeInvokeMethod(innerFn, self, context) {\n var state = \"suspendedStart\";\n return function (method, arg) {\n if (\"executing\" === state) throw new Error(\"Generator is already running\");\n if (\"completed\" === state) {\n if (\"throw\" === method) throw arg;\n return doneResult();\n }\n for (context.method = method, context.arg = arg;;) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n if (\"next\" === context.method) context.sent = context._sent = context.arg;else if (\"throw\" === context.method) {\n if (\"suspendedStart\" === state) throw state = \"completed\", context.arg;\n context.dispatchException(context.arg);\n } else \"return\" === context.method && context.abrupt(\"return\", context.arg);\n state = \"executing\";\n var record = tryCatch(innerFn, self, context);\n if (\"normal\" === record.type) {\n if (state = context.done ? \"completed\" : \"suspendedYield\", record.arg === ContinueSentinel) continue;\n return {\n value: record.arg,\n done: context.done\n };\n }\n \"throw\" === record.type && (state = \"completed\", context.method = \"throw\", context.arg = record.arg);\n }\n };\n }\n function maybeInvokeDelegate(delegate, context) {\n var methodName = context.method,\n method = delegate.iterator[methodName];\n if (undefined === method) return context.delegate = null, \"throw\" === methodName && delegate.iterator[\"return\"] && (context.method = \"return\", context.arg = undefined, maybeInvokeDelegate(delegate, context), \"throw\" === context.method) || \"return\" !== methodName && (context.method = \"throw\", context.arg = new TypeError(\"The iterator does not provide a '\" + methodName + \"' method\")), ContinueSentinel;\n var record = tryCatch(method, delegate.iterator, context.arg);\n if (\"throw\" === record.type) return context.method = \"throw\", context.arg = record.arg, context.delegate = null, ContinueSentinel;\n var info = record.arg;\n return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, \"return\" !== context.method && (context.method = \"next\", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = \"throw\", context.arg = new TypeError(\"iterator result is not an object\"), context.delegate = null, ContinueSentinel);\n }\n function pushTryEntry(locs) {\n var entry = {\n tryLoc: locs[0]\n };\n 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry);\n }\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\", delete record.arg, entry.completion = record;\n }\n function Context(tryLocsList) {\n this.tryEntries = [{\n tryLoc: \"root\"\n }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0);\n }\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) return iteratorMethod.call(iterable);\n if (\"function\" == typeof iterable.next) return iterable;\n if (!isNaN(iterable.length)) {\n var i = -1,\n next = function next() {\n for (; ++i < iterable.length;) if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next;\n return next.value = undefined, next.done = !0, next;\n };\n return next.next = next;\n }\n }\n return {\n next: doneResult\n };\n }\n function doneResult() {\n return {\n value: undefined,\n done: !0\n };\n }\n return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, \"constructor\", {\n value: GeneratorFunctionPrototype,\n configurable: !0\n }), defineProperty(GeneratorFunctionPrototype, \"constructor\", {\n value: GeneratorFunction,\n configurable: !0\n }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, \"GeneratorFunction\"), exports.isGeneratorFunction = function (genFun) {\n var ctor = \"function\" == typeof genFun && genFun.constructor;\n return !!ctor && (ctor === GeneratorFunction || \"GeneratorFunction\" === (ctor.displayName || ctor.name));\n }, exports.mark = function (genFun) {\n return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, \"GeneratorFunction\")), genFun.prototype = Object.create(Gp), genFun;\n }, exports.awrap = function (arg) {\n return {\n __await: arg\n };\n }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n void 0 === PromiseImpl && (PromiseImpl = Promise);\n var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl);\n return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) {\n return result.done ? result.value : iter.next();\n });\n }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, \"Generator\"), define(Gp, iteratorSymbol, function () {\n return this;\n }), define(Gp, \"toString\", function () {\n return \"[object Generator]\";\n }), exports.keys = function (val) {\n var object = Object(val),\n keys = [];\n for (var key in object) keys.push(key);\n return keys.reverse(), function next() {\n for (; keys.length;) {\n var key = keys.pop();\n if (key in object) return next.value = key, next.done = !1, next;\n }\n return next.done = !0, next;\n };\n }, exports.values = values, Context.prototype = {\n constructor: Context,\n reset: function reset(skipTempReset) {\n if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) \"t\" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined);\n },\n stop: function stop() {\n this.done = !0;\n var rootRecord = this.tryEntries[0].completion;\n if (\"throw\" === rootRecord.type) throw rootRecord.arg;\n return this.rval;\n },\n dispatchException: function dispatchException(exception) {\n if (this.done) throw exception;\n var context = this;\n function handle(loc, caught) {\n return record.type = \"throw\", record.arg = exception, context.next = loc, caught && (context.method = \"next\", context.arg = undefined), !!caught;\n }\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i],\n record = entry.completion;\n if (\"root\" === entry.tryLoc) return handle(\"end\");\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\"),\n hasFinally = hasOwn.call(entry, \"finallyLoc\");\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);\n if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);\n } else {\n if (!hasFinally) throw new Error(\"try statement without catch or finally\");\n if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);\n }\n }\n }\n },\n abrupt: function abrupt(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev && hasOwn.call(entry, \"finallyLoc\") && this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n finallyEntry && (\"break\" === type || \"continue\" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null);\n var record = finallyEntry ? finallyEntry.completion : {};\n return record.type = type, record.arg = arg, finallyEntry ? (this.method = \"next\", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record);\n },\n complete: function complete(record, afterLoc) {\n if (\"throw\" === record.type) throw record.arg;\n return \"break\" === record.type || \"continue\" === record.type ? this.next = record.arg : \"return\" === record.type ? (this.rval = this.arg = record.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel;\n },\n finish: function finish(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel;\n }\n },\n \"catch\": function _catch(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (\"throw\" === record.type) {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n throw new Error(\"illegal catch attempt\");\n },\n delegateYield: function delegateYield(iterable, resultName, nextLoc) {\n return this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n }, \"next\" === this.method && (this.arg = undefined), ContinueSentinel;\n }\n }, exports;\n}\nmodule.exports = _regeneratorRuntime, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _setPrototypeOf(o, p);\n}\nmodule.exports = _setPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayWithHoles = require(\"./arrayWithHoles.js\");\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit.js\");\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\nvar nonIterableRest = require(\"./nonIterableRest.js\");\nfunction _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}\nmodule.exports = _slicedToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayWithoutHoles = require(\"./arrayWithoutHoles.js\");\nvar iterableToArray = require(\"./iterableToArray.js\");\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\nvar nonIterableSpread = require(\"./nonIterableSpread.js\");\nfunction _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}\nmodule.exports = _toConsumableArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nfunction _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}\nmodule.exports = _toPrimitive, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar toPrimitive = require(\"./toPrimitive.js\");\nfunction _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}\nmodule.exports = _toPropertyKey, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return (module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _typeof(obj);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\nmodule.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var getPrototypeOf = require(\"./getPrototypeOf.js\");\nvar setPrototypeOf = require(\"./setPrototypeOf.js\");\nvar isNativeFunction = require(\"./isNativeFunction.js\");\nvar construct = require(\"./construct.js\");\nfunction _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n module.exports = _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !isNativeFunction(Class)) return Class;\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n _cache.set(Class, Wrapper);\n }\n function Wrapper() {\n return construct(Class, arguments, getPrototypeOf(this).constructor);\n }\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return setPrototypeOf(Wrapper, Class);\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _wrapNativeSuper(Class);\n}\nmodule.exports = _wrapNativeSuper, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","// TODO(Babel 8): Remove this file.\n\nvar runtime = require(\"../helpers/regeneratorRuntime\")();\nmodule.exports = runtime;\n\n// Copied from https://github.com/facebook/regenerator/blob/main/packages/runtime/runtime.js#L736=\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}","import defineProperty from \"./defineProperty.js\";\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n return keys;\n}\nexport default function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n return target;\n}","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","export default function _iterableToArrayLimit(arr, i) {\n var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"];\n if (null != _i) {\n var _s,\n _e,\n _x,\n _r,\n _arr = [],\n _n = !0,\n _d = !1;\n try {\n if (_x = (_i = _i.call(arr)).next, 0 === i) {\n if (Object(_i) !== _i) return;\n _n = !1;\n } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0);\n } catch (err) {\n _d = !0, _e = err;\n } finally {\n try {\n if (!_n && null != _i[\"return\"] && (_r = _i[\"return\"](), Object(_r) !== _r)) return;\n } finally {\n if (_d) throw _e;\n }\n }\n return _arr;\n }\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nexport default function _createForOfIteratorHelper(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n if (!it) {\n if (Array.isArray(o) || (it = unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n var i = 0;\n var F = function F() {};\n return {\n s: F,\n n: function n() {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function e(_e) {\n throw _e;\n },\n f: F\n };\n }\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n var normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function s() {\n it = it.call(o);\n },\n n: function n() {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function e(_e2) {\n didErr = true;\n err = _e2;\n },\n f: function f() {\n try {\n if (!normalCompletion && it[\"return\"] != null) it[\"return\"]();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}","export default function _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}","import * as React from \"react\";\nimport type {\n History,\n InitialEntry,\n Location,\n MemoryHistory,\n Path,\n To\n} from \"history\";\nimport {\n Action as NavigationType,\n createMemoryHistory,\n parsePath\n} from \"history\";\n\nexport type { Location, Path, To, NavigationType };\n\nfunction invariant(cond: any, message: string): asserts cond {\n if (!cond) throw new Error(message);\n}\n\nfunction warning(cond: any, message: string): void {\n if (!cond) {\n // eslint-disable-next-line no-console\n if (typeof console !== \"undefined\") console.warn(message);\n\n try {\n // Welcome to debugging React Router!\n //\n // This error is thrown as a convenience so you can more easily\n // find the source for a warning that appears in the console by\n // enabling \"pause on exceptions\" in your JavaScript debugger.\n throw new Error(message);\n // eslint-disable-next-line no-empty\n } catch (e) {}\n }\n}\n\nconst alreadyWarned: Record = {};\nfunction warningOnce(key: string, cond: boolean, message: string) {\n if (!cond && !alreadyWarned[key]) {\n alreadyWarned[key] = true;\n warning(false, message);\n }\n}\n\n///////////////////////////////////////////////////////////////////////////////\n// CONTEXT\n///////////////////////////////////////////////////////////////////////////////\n\n/**\n * A Navigator is a \"location changer\"; it's how you get to different locations.\n *\n * Every history instance conforms to the Navigator interface, but the\n * distinction is useful primarily when it comes to the low-level API\n * where both the location and a navigator must be provided separately in order\n * to avoid \"tearing\" that may occur in a suspense-enabled app if the action\n * and/or location were to be read directly from the history instance.\n */\nexport type Navigator = Pick;\n\ninterface NavigationContextObject {\n basename: string;\n navigator: Navigator;\n static: boolean;\n}\n\nconst NavigationContext = React.createContext(null!);\n\nif (__DEV__) {\n NavigationContext.displayName = \"Navigation\";\n}\n\ninterface LocationContextObject {\n location: Location;\n navigationType: NavigationType;\n}\n\nconst LocationContext = React.createContext(null!);\n\nif (__DEV__) {\n LocationContext.displayName = \"Location\";\n}\n\ninterface RouteContextObject {\n outlet: React.ReactElement | null;\n matches: RouteMatch[];\n}\n\nconst RouteContext = React.createContext({\n outlet: null,\n matches: []\n});\n\nif (__DEV__) {\n RouteContext.displayName = \"Route\";\n}\n\n///////////////////////////////////////////////////////////////////////////////\n// COMPONENTS\n///////////////////////////////////////////////////////////////////////////////\n\nexport interface MemoryRouterProps {\n basename?: string;\n children?: React.ReactNode;\n initialEntries?: InitialEntry[];\n initialIndex?: number;\n}\n\n/**\n * A that stores all entries in memory.\n *\n * @see https://reactrouter.com/docs/en/v6/api#memoryrouter\n */\nexport function MemoryRouter({\n basename,\n children,\n initialEntries,\n initialIndex\n}: MemoryRouterProps): React.ReactElement {\n let historyRef = React.useRef();\n if (historyRef.current == null) {\n historyRef.current = createMemoryHistory({ initialEntries, initialIndex });\n }\n\n let history = historyRef.current;\n let [state, setState] = React.useState({\n action: history.action,\n location: history.location\n });\n\n React.useLayoutEffect(() => history.listen(setState), [history]);\n\n return (\n \n );\n}\n\nexport interface NavigateProps {\n to: To;\n replace?: boolean;\n state?: any;\n}\n\n/**\n * Changes the current location.\n *\n * Note: This API is mostly useful in React.Component subclasses that are not\n * able to use hooks. In functional components, we recommend you use the\n * `useNavigate` hook instead.\n *\n * @see https://reactrouter.com/docs/en/v6/api#navigate\n */\nexport function Navigate({ to, replace, state }: NavigateProps): null {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of\n // the router loaded. We can help them understand how to avoid that.\n ` may be used only in the context of a component.`\n );\n\n warning(\n !React.useContext(NavigationContext).static,\n ` must not be used on the initial render in a . ` +\n `This is a no-op, but you should modify your code so the is ` +\n `only ever rendered in response to some user interaction or state change.`\n );\n\n let navigate = useNavigate();\n React.useEffect(() => {\n navigate(to, { replace, state });\n });\n\n return null;\n}\n\nexport interface OutletProps {\n context?: unknown;\n}\n\n/**\n * Renders the child route's element, if there is one.\n *\n * @see https://reactrouter.com/docs/en/v6/api#outlet\n */\nexport function Outlet(props: OutletProps): React.ReactElement | null {\n return useOutlet(props.context);\n}\n\nexport interface RouteProps {\n caseSensitive?: boolean;\n children?: React.ReactNode;\n element?: React.ReactNode | null;\n index?: boolean;\n path?: string;\n}\n\nexport interface PathRouteProps {\n caseSensitive?: boolean;\n children?: React.ReactNode;\n element?: React.ReactNode | null;\n index?: false;\n path: string;\n}\n\nexport interface LayoutRouteProps {\n children?: React.ReactNode;\n element?: React.ReactNode | null;\n}\n\nexport interface IndexRouteProps {\n element?: React.ReactNode | null;\n index: true;\n}\n\n/**\n * Declares an element that should be rendered at a certain URL path.\n *\n * @see https://reactrouter.com/docs/en/v6/api#route\n */\nexport function Route(\n _props: PathRouteProps | LayoutRouteProps | IndexRouteProps\n): React.ReactElement | null {\n invariant(\n false,\n `A is only ever to be used as the child of element, ` +\n `never rendered directly. Please wrap your in a .`\n );\n}\n\nexport interface RouterProps {\n basename?: string;\n children?: React.ReactNode;\n location: Partial | string;\n navigationType?: NavigationType;\n navigator: Navigator;\n static?: boolean;\n}\n\n/**\n * Provides location context for the rest of the app.\n *\n * Note: You usually won't render a directly. Instead, you'll render a\n * router that is more specific to your environment such as a \n * in web browsers or a for server rendering.\n *\n * @see https://reactrouter.com/docs/en/v6/api#router\n */\nexport function Router({\n basename: basenameProp = \"/\",\n children = null,\n location: locationProp,\n navigationType = NavigationType.Pop,\n navigator,\n static: staticProp = false\n}: RouterProps): React.ReactElement | null {\n invariant(\n !useInRouterContext(),\n `You cannot render a inside another .` +\n ` You should never have more than one in your app.`\n );\n\n let basename = normalizePathname(basenameProp);\n let navigationContext = React.useMemo(\n () => ({ basename, navigator, static: staticProp }),\n [basename, navigator, staticProp]\n );\n\n if (typeof locationProp === \"string\") {\n locationProp = parsePath(locationProp);\n }\n\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n state = null,\n key = \"default\"\n } = locationProp;\n\n let location = React.useMemo(() => {\n let trailingPathname = stripBasename(pathname, basename);\n\n if (trailingPathname == null) {\n return null;\n }\n\n return {\n pathname: trailingPathname,\n search,\n hash,\n state,\n key\n };\n }, [basename, pathname, search, hash, state, key]);\n\n warning(\n location != null,\n ` is not able to match the URL ` +\n `\"${pathname}${search}${hash}\" because it does not start with the ` +\n `basename, so the won't render anything.`\n );\n\n if (location == null) {\n return null;\n }\n\n return (\n \n \n \n );\n}\n\nexport interface RoutesProps {\n children?: React.ReactNode;\n location?: Partial | string;\n}\n\n/**\n * A container for a nested tree of elements that renders the branch\n * that best matches the current location.\n *\n * @see https://reactrouter.com/docs/en/v6/api#routes\n */\nexport function Routes({\n children,\n location\n}: RoutesProps): React.ReactElement | null {\n return useRoutes(createRoutesFromChildren(children), location);\n}\n\n///////////////////////////////////////////////////////////////////////////////\n// HOOKS\n///////////////////////////////////////////////////////////////////////////////\n\n/**\n * Returns the full href for the given \"to\" value. This is useful for building\n * custom links that are also accessible and preserve right-click behavior.\n *\n * @see https://reactrouter.com/docs/en/v6/api#usehref\n */\nexport function useHref(to: To): string {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useHref() may be used only in the context of a component.`\n );\n\n let { basename, navigator } = React.useContext(NavigationContext);\n let { hash, pathname, search } = useResolvedPath(to);\n\n let joinedPathname = pathname;\n if (basename !== \"/\") {\n let toPathname = getToPathname(to);\n let endsWithSlash = toPathname != null && toPathname.endsWith(\"/\");\n joinedPathname =\n pathname === \"/\"\n ? basename + (endsWithSlash ? \"/\" : \"\")\n : joinPaths([basename, pathname]);\n }\n\n return navigator.createHref({ pathname: joinedPathname, search, hash });\n}\n\n/**\n * Returns true if this component is a descendant of a .\n *\n * @see https://reactrouter.com/docs/en/v6/api#useinroutercontext\n */\nexport function useInRouterContext(): boolean {\n return React.useContext(LocationContext) != null;\n}\n\n/**\n * Returns the current location object, which represents the current URL in web\n * browsers.\n *\n * Note: If you're using this it may mean you're doing some of your own\n * \"routing\" in your app, and we'd like to know what your use case is. We may\n * be able to provide something higher-level to better suit your needs.\n *\n * @see https://reactrouter.com/docs/en/v6/api#uselocation\n */\nexport function useLocation(): Location {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useLocation() may be used only in the context of a component.`\n );\n\n return React.useContext(LocationContext).location;\n}\n\ntype ParamParseFailed = { failed: true };\n\ntype ParamParseSegment =\n // Check here if there exists a forward slash in the string.\n Segment extends `${infer LeftSegment}/${infer RightSegment}`\n ? // If there is a forward slash, then attempt to parse each side of the\n // forward slash.\n ParamParseSegment extends infer LeftResult\n ? ParamParseSegment extends infer RightResult\n ? LeftResult extends string\n ? // If the left side is successfully parsed as a param, then check if\n // the right side can be successfully parsed as well. If both sides\n // can be parsed, then the result is a union of the two sides\n // (read: \"foo\" | \"bar\").\n RightResult extends string\n ? LeftResult | RightResult\n : LeftResult\n : // If the left side is not successfully parsed as a param, then check\n // if only the right side can be successfully parse as a param. If it\n // can, then the result is just right, else it's a failure.\n RightResult extends string\n ? RightResult\n : ParamParseFailed\n : ParamParseFailed\n : // If the left side didn't parse into a param, then just check the right\n // side.\n ParamParseSegment extends infer RightResult\n ? RightResult extends string\n ? RightResult\n : ParamParseFailed\n : ParamParseFailed\n : // If there's no forward slash, then check if this segment starts with a\n // colon. If it does, then this is a dynamic segment, so the result is\n // just the remainder of the string. Otherwise, it's a failure.\n Segment extends `:${infer Remaining}`\n ? Remaining\n : ParamParseFailed;\n\n// Attempt to parse the given string segment. If it fails, then just return the\n// plain string type as a default fallback. Otherwise return the union of the\n// parsed string literals that were referenced as dynamic segments in the route.\ntype ParamParseKey =\n ParamParseSegment extends string\n ? ParamParseSegment\n : string;\n\n/**\n * Returns the current navigation action which describes how the router came to\n * the current location, either by a pop, push, or replace on the history stack.\n *\n * @see https://reactrouter.com/docs/en/v6/api#usenavigationtype\n */\nexport function useNavigationType(): NavigationType {\n return React.useContext(LocationContext).navigationType;\n}\n\n/**\n * Returns true if the URL for the given \"to\" value matches the current URL.\n * This is useful for components that need to know \"active\" state, e.g.\n * .\n *\n * @see https://reactrouter.com/docs/en/v6/api#usematch\n */\nexport function useMatch<\n ParamKey extends ParamParseKey,\n Path extends string\n>(pattern: PathPattern | Path): PathMatch | null {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useMatch() may be used only in the context of a component.`\n );\n\n let { pathname } = useLocation();\n return React.useMemo(\n () => matchPath(pattern, pathname),\n [pathname, pattern]\n );\n}\n\n/**\n * The interface for the navigate() function returned from useNavigate().\n */\nexport interface NavigateFunction {\n (to: To, options?: NavigateOptions): void;\n (delta: number): void;\n}\n\nexport interface NavigateOptions {\n replace?: boolean;\n state?: any;\n}\n\n/**\n * Returns an imperative method for changing the location. Used by s, but\n * may also be used by other elements to change the location.\n *\n * @see https://reactrouter.com/docs/en/v6/api#usenavigate\n */\nexport function useNavigate(): NavigateFunction {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useNavigate() may be used only in the context of a component.`\n );\n\n let { basename, navigator } = React.useContext(NavigationContext);\n let { matches } = React.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n\n let routePathnamesJson = JSON.stringify(\n matches.map(match => match.pathnameBase)\n );\n\n let activeRef = React.useRef(false);\n React.useEffect(() => {\n activeRef.current = true;\n });\n\n let navigate: NavigateFunction = React.useCallback(\n (to: To | number, options: NavigateOptions = {}) => {\n warning(\n activeRef.current,\n `You should call navigate() in a React.useEffect(), not when ` +\n `your component is first rendered.`\n );\n\n if (!activeRef.current) return;\n\n if (typeof to === \"number\") {\n navigator.go(to);\n return;\n }\n\n let path = resolveTo(\n to,\n JSON.parse(routePathnamesJson),\n locationPathname\n );\n\n if (basename !== \"/\") {\n path.pathname = joinPaths([basename, path.pathname]);\n }\n\n (!!options.replace ? navigator.replace : navigator.push)(\n path,\n options.state\n );\n },\n [basename, navigator, routePathnamesJson, locationPathname]\n );\n\n return navigate;\n}\n\nconst OutletContext = React.createContext(null);\n\n/**\n * Returns the context (if provided) for the child route at this level of the route\n * hierarchy.\n * @see https://reactrouter.com/docs/en/v6/api#useoutletcontext\n */\nexport function useOutletContext(): Context {\n return React.useContext(OutletContext) as Context;\n}\n\n/**\n * Returns the element for the child route at this level of the route\n * hierarchy. Used internally by to render child routes.\n *\n * @see https://reactrouter.com/docs/en/v6/api#useoutlet\n */\nexport function useOutlet(context?: unknown): React.ReactElement | null {\n let outlet = React.useContext(RouteContext).outlet;\n if (outlet) {\n return (\n {outlet}\n );\n }\n return outlet;\n}\n\n/**\n * Returns an object of key/value pairs of the dynamic params from the current\n * URL that were matched by the route path.\n *\n * @see https://reactrouter.com/docs/en/v6/api#useparams\n */\nexport function useParams<\n ParamsOrKey extends string | Record = string\n>(): Readonly<\n [ParamsOrKey] extends [string] ? Params : Partial\n> {\n let { matches } = React.useContext(RouteContext);\n let routeMatch = matches[matches.length - 1];\n return routeMatch ? (routeMatch.params as any) : {};\n}\n\n/**\n * Resolves the pathname of the given `to` value against the current location.\n *\n * @see https://reactrouter.com/docs/en/v6/api#useresolvedpath\n */\nexport function useResolvedPath(to: To): Path {\n let { matches } = React.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n\n let routePathnamesJson = JSON.stringify(\n matches.map(match => match.pathnameBase)\n );\n\n return React.useMemo(\n () => resolveTo(to, JSON.parse(routePathnamesJson), locationPathname),\n [to, routePathnamesJson, locationPathname]\n );\n}\n\n/**\n * Returns the element of the route that matched the current location, prepared\n * with the correct context to render the remainder of the route tree. Route\n * elements in the tree must render an to render their child route's\n * element.\n *\n * @see https://reactrouter.com/docs/en/v6/api#useroutes\n */\nexport function useRoutes(\n routes: RouteObject[],\n locationArg?: Partial | string\n): React.ReactElement | null {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useRoutes() may be used only in the context of a component.`\n );\n\n let { matches: parentMatches } = React.useContext(RouteContext);\n let routeMatch = parentMatches[parentMatches.length - 1];\n let parentParams = routeMatch ? routeMatch.params : {};\n let parentPathname = routeMatch ? routeMatch.pathname : \"/\";\n let parentPathnameBase = routeMatch ? routeMatch.pathnameBase : \"/\";\n let parentRoute = routeMatch && routeMatch.route;\n\n if (__DEV__) {\n // You won't get a warning about 2 different under a \n // without a trailing *, but this is a best-effort warning anyway since we\n // cannot even give the warning unless they land at the parent route.\n //\n // Example:\n //\n // \n // {/* This route path MUST end with /* because otherwise\n // it will never match /blog/post/123 */}\n // } />\n // } />\n // \n //\n // function Blog() {\n // return (\n // \n // } />\n // \n // );\n // }\n let parentPath = (parentRoute && parentRoute.path) || \"\";\n warningOnce(\n parentPathname,\n !parentRoute || parentPath.endsWith(\"*\"),\n `You rendered descendant (or called \\`useRoutes()\\`) at ` +\n `\"${parentPathname}\" (under ) but the ` +\n `parent route path has no trailing \"*\". This means if you navigate ` +\n `deeper, the parent won't match anymore and therefore the child ` +\n `routes will never render.\\n\\n` +\n `Please change the parent to .`\n );\n }\n\n let locationFromContext = useLocation();\n\n let location;\n if (locationArg) {\n let parsedLocationArg =\n typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n\n invariant(\n parentPathnameBase === \"/\" ||\n parsedLocationArg.pathname?.startsWith(parentPathnameBase),\n `When overriding the location using \\`\\` or \\`useRoutes(routes, location)\\`, ` +\n `the location pathname must begin with the portion of the URL pathname that was ` +\n `matched by all parent routes. The current pathname base is \"${parentPathnameBase}\" ` +\n `but pathname \"${parsedLocationArg.pathname}\" was given in the \\`location\\` prop.`\n );\n\n location = parsedLocationArg;\n } else {\n location = locationFromContext;\n }\n\n let pathname = location.pathname || \"/\";\n let remainingPathname =\n parentPathnameBase === \"/\"\n ? pathname\n : pathname.slice(parentPathnameBase.length) || \"/\";\n let matches = matchRoutes(routes, { pathname: remainingPathname });\n\n if (__DEV__) {\n warning(\n parentRoute || matches != null,\n `No routes matched location \"${location.pathname}${location.search}${location.hash}\" `\n );\n\n warning(\n matches == null ||\n matches[matches.length - 1].route.element !== undefined,\n `Matched leaf route at location \"${location.pathname}${location.search}${location.hash}\" does not have an element. ` +\n `This means it will render an with a null value by default resulting in an \"empty\" page.`\n );\n }\n\n return _renderMatches(\n matches &&\n matches.map(match =>\n Object.assign({}, match, {\n params: Object.assign({}, parentParams, match.params),\n pathname: joinPaths([parentPathnameBase, match.pathname]),\n pathnameBase:\n match.pathnameBase === \"/\"\n ? parentPathnameBase\n : joinPaths([parentPathnameBase, match.pathnameBase])\n })\n ),\n parentMatches\n );\n}\n\n///////////////////////////////////////////////////////////////////////////////\n// UTILS\n///////////////////////////////////////////////////////////////////////////////\n\n/**\n * Creates a route config from a React \"children\" object, which is usually\n * either a `` element or an array of them. Used internally by\n * `` to create a route config from its children.\n *\n * @see https://reactrouter.com/docs/en/v6/api#createroutesfromchildren\n */\nexport function createRoutesFromChildren(\n children: React.ReactNode\n): RouteObject[] {\n let routes: RouteObject[] = [];\n\n React.Children.forEach(children, element => {\n if (!React.isValidElement(element)) {\n // Ignore non-elements. This allows people to more easily inline\n // conditionals in their route config.\n return;\n }\n\n if (element.type === React.Fragment) {\n // Transparently support React.Fragment and its children.\n routes.push.apply(\n routes,\n createRoutesFromChildren(element.props.children)\n );\n return;\n }\n\n invariant(\n element.type === Route,\n `[${\n typeof element.type === \"string\" ? element.type : element.type.name\n }] is not a component. All component children of must be a or `\n );\n\n let route: RouteObject = {\n caseSensitive: element.props.caseSensitive,\n element: element.props.element,\n index: element.props.index,\n path: element.props.path\n };\n\n if (element.props.children) {\n route.children = createRoutesFromChildren(element.props.children);\n }\n\n routes.push(route);\n });\n\n return routes;\n}\n\n/**\n * The parameters that were parsed from the URL path.\n */\nexport type Params = {\n readonly [key in Key]: string | undefined;\n};\n\n/**\n * A route object represents a logical route, with (optionally) its child\n * routes organized in a tree-like structure.\n */\nexport interface RouteObject {\n caseSensitive?: boolean;\n children?: RouteObject[];\n element?: React.ReactNode;\n index?: boolean;\n path?: string;\n}\n\n/**\n * Returns a path with params interpolated.\n *\n * @see https://reactrouter.com/docs/en/v6/api#generatepath\n */\nexport function generatePath(path: string, params: Params = {}): string {\n return path\n .replace(/:(\\w+)/g, (_, key) => {\n invariant(params[key] != null, `Missing \":${key}\" param`);\n return params[key]!;\n })\n .replace(/\\/*\\*$/, _ =>\n params[\"*\"] == null ? \"\" : params[\"*\"].replace(/^\\/*/, \"/\")\n );\n}\n\n/**\n * A RouteMatch contains info about how a route matched a URL.\n */\nexport interface RouteMatch {\n /**\n * The names and values of dynamic parameters in the URL.\n */\n params: Params;\n /**\n * The portion of the URL pathname that was matched.\n */\n pathname: string;\n /**\n * The portion of the URL pathname that was matched before child routes.\n */\n pathnameBase: string;\n /**\n * The route object that was used to match.\n */\n route: RouteObject;\n}\n\n/**\n * Matches the given routes to a location and returns the match data.\n *\n * @see https://reactrouter.com/docs/en/v6/api#matchroutes\n */\nexport function matchRoutes(\n routes: RouteObject[],\n locationArg: Partial | string,\n basename = \"/\"\n): RouteMatch[] | null {\n let location =\n typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n\n let pathname = stripBasename(location.pathname || \"/\", basename);\n\n if (pathname == null) {\n return null;\n }\n\n let branches = flattenRoutes(routes);\n rankRouteBranches(branches);\n\n let matches = null;\n for (let i = 0; matches == null && i < branches.length; ++i) {\n matches = matchRouteBranch(branches[i], pathname);\n }\n\n return matches;\n}\n\ninterface RouteMeta {\n relativePath: string;\n caseSensitive: boolean;\n childrenIndex: number;\n route: RouteObject;\n}\n\ninterface RouteBranch {\n path: string;\n score: number;\n routesMeta: RouteMeta[];\n}\n\nfunction flattenRoutes(\n routes: RouteObject[],\n branches: RouteBranch[] = [],\n parentsMeta: RouteMeta[] = [],\n parentPath = \"\"\n): RouteBranch[] {\n routes.forEach((route, index) => {\n let meta: RouteMeta = {\n relativePath: route.path || \"\",\n caseSensitive: route.caseSensitive === true,\n childrenIndex: index,\n route\n };\n\n if (meta.relativePath.startsWith(\"/\")) {\n invariant(\n meta.relativePath.startsWith(parentPath),\n `Absolute route path \"${meta.relativePath}\" nested under path ` +\n `\"${parentPath}\" is not valid. An absolute child route path ` +\n `must start with the combined path of all its parent routes.`\n );\n\n meta.relativePath = meta.relativePath.slice(parentPath.length);\n }\n\n let path = joinPaths([parentPath, meta.relativePath]);\n let routesMeta = parentsMeta.concat(meta);\n\n // Add the children before adding this route to the array so we traverse the\n // route tree depth-first and child routes appear before their parents in\n // the \"flattened\" version.\n if (route.children && route.children.length > 0) {\n invariant(\n route.index !== true,\n `Index routes must not have child routes. Please remove ` +\n `all child routes from route path \"${path}\".`\n );\n\n flattenRoutes(route.children, branches, routesMeta, path);\n }\n\n // Routes without a path shouldn't ever match by themselves unless they are\n // index routes, so don't add them to the list of possible branches.\n if (route.path == null && !route.index) {\n return;\n }\n\n branches.push({ path, score: computeScore(path, route.index), routesMeta });\n });\n\n return branches;\n}\n\nfunction rankRouteBranches(branches: RouteBranch[]): void {\n branches.sort((a, b) =>\n a.score !== b.score\n ? b.score - a.score // Higher score first\n : compareIndexes(\n a.routesMeta.map(meta => meta.childrenIndex),\n b.routesMeta.map(meta => meta.childrenIndex)\n )\n );\n}\n\nconst paramRe = /^:\\w+$/;\nconst dynamicSegmentValue = 3;\nconst indexRouteValue = 2;\nconst emptySegmentValue = 1;\nconst staticSegmentValue = 10;\nconst splatPenalty = -2;\nconst isSplat = (s: string) => s === \"*\";\n\nfunction computeScore(path: string, index: boolean | undefined): number {\n let segments = path.split(\"/\");\n let initialScore = segments.length;\n if (segments.some(isSplat)) {\n initialScore += splatPenalty;\n }\n\n if (index) {\n initialScore += indexRouteValue;\n }\n\n return segments\n .filter(s => !isSplat(s))\n .reduce(\n (score, segment) =>\n score +\n (paramRe.test(segment)\n ? dynamicSegmentValue\n : segment === \"\"\n ? emptySegmentValue\n : staticSegmentValue),\n initialScore\n );\n}\n\nfunction compareIndexes(a: number[], b: number[]): number {\n let siblings =\n a.length === b.length && a.slice(0, -1).every((n, i) => n === b[i]);\n\n return siblings\n ? // If two routes are siblings, we should try to match the earlier sibling\n // first. This allows people to have fine-grained control over the matching\n // behavior by simply putting routes with identical paths in the order they\n // want them tried.\n a[a.length - 1] - b[b.length - 1]\n : // Otherwise, it doesn't really make sense to rank non-siblings by index,\n // so they sort equally.\n 0;\n}\n\nfunction matchRouteBranch(\n branch: RouteBranch,\n pathname: string\n): RouteMatch[] | null {\n let { routesMeta } = branch;\n\n let matchedParams = {};\n let matchedPathname = \"/\";\n let matches: RouteMatch[] = [];\n for (let i = 0; i < routesMeta.length; ++i) {\n let meta = routesMeta[i];\n let end = i === routesMeta.length - 1;\n let remainingPathname =\n matchedPathname === \"/\"\n ? pathname\n : pathname.slice(matchedPathname.length) || \"/\";\n let match = matchPath(\n { path: meta.relativePath, caseSensitive: meta.caseSensitive, end },\n remainingPathname\n );\n\n if (!match) return null;\n\n Object.assign(matchedParams, match.params);\n\n let route = meta.route;\n\n matches.push({\n params: matchedParams,\n pathname: joinPaths([matchedPathname, match.pathname]),\n pathnameBase: joinPaths([matchedPathname, match.pathnameBase]),\n route\n });\n\n if (match.pathnameBase !== \"/\") {\n matchedPathname = joinPaths([matchedPathname, match.pathnameBase]);\n }\n }\n\n return matches;\n}\n\n/**\n * Renders the result of `matchRoutes()` into a React element.\n */\nexport function renderMatches(\n matches: RouteMatch[] | null\n): React.ReactElement | null {\n return _renderMatches(matches);\n}\n\nfunction _renderMatches(\n matches: RouteMatch[] | null,\n parentMatches: RouteMatch[] = []\n): React.ReactElement | null {\n if (matches == null) return null;\n\n return matches.reduceRight((outlet, match, index) => {\n return (\n \n }\n value={{\n outlet,\n matches: parentMatches.concat(matches.slice(0, index + 1))\n }}\n />\n );\n }, null as React.ReactElement | null);\n}\n\n/**\n * A PathPattern is used to match on some portion of a URL pathname.\n */\nexport interface PathPattern {\n /**\n * A string to match against a URL pathname. May contain `:id`-style segments\n * to indicate placeholders for dynamic parameters. May also end with `/*` to\n * indicate matching the rest of the URL pathname.\n */\n path: Path;\n /**\n * Should be `true` if the static portions of the `path` should be matched in\n * the same case.\n */\n caseSensitive?: boolean;\n /**\n * Should be `true` if this pattern should match the entire URL pathname.\n */\n end?: boolean;\n}\n\n/**\n * A PathMatch contains info about how a PathPattern matched on a URL pathname.\n */\nexport interface PathMatch {\n /**\n * The names and values of dynamic parameters in the URL.\n */\n params: Params;\n /**\n * The portion of the URL pathname that was matched.\n */\n pathname: string;\n /**\n * The portion of the URL pathname that was matched before child routes.\n */\n pathnameBase: string;\n /**\n * The pattern that was used to match.\n */\n pattern: PathPattern;\n}\n\ntype Mutable = {\n -readonly [P in keyof T]: T[P];\n};\n\n/**\n * Performs pattern matching on a URL pathname and returns information about\n * the match.\n *\n * @see https://reactrouter.com/docs/en/v6/api#matchpath\n */\nexport function matchPath<\n ParamKey extends ParamParseKey,\n Path extends string\n>(\n pattern: PathPattern | Path,\n pathname: string\n): PathMatch | null {\n if (typeof pattern === \"string\") {\n pattern = { path: pattern, caseSensitive: false, end: true };\n }\n\n let [matcher, paramNames] = compilePath(\n pattern.path,\n pattern.caseSensitive,\n pattern.end\n );\n\n let match = pathname.match(matcher);\n if (!match) return null;\n\n let matchedPathname = match[0];\n let pathnameBase = matchedPathname.replace(/(.)\\/+$/, \"$1\");\n let captureGroups = match.slice(1);\n let params: Params = paramNames.reduce>(\n (memo, paramName, index) => {\n // We need to compute the pathnameBase here using the raw splat value\n // instead of using params[\"*\"] later because it will be decoded then\n if (paramName === \"*\") {\n let splatValue = captureGroups[index] || \"\";\n pathnameBase = matchedPathname\n .slice(0, matchedPathname.length - splatValue.length)\n .replace(/(.)\\/+$/, \"$1\");\n }\n\n memo[paramName] = safelyDecodeURIComponent(\n captureGroups[index] || \"\",\n paramName\n );\n return memo;\n },\n {}\n );\n\n return {\n params,\n pathname: matchedPathname,\n pathnameBase,\n pattern\n };\n}\n\nfunction compilePath(\n path: string,\n caseSensitive = false,\n end = true\n): [RegExp, string[]] {\n warning(\n path === \"*\" || !path.endsWith(\"*\") || path.endsWith(\"/*\"),\n `Route path \"${path}\" will be treated as if it were ` +\n `\"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must ` +\n `always follow a \\`/\\` in the pattern. To get rid of this warning, ` +\n `please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n );\n\n let paramNames: string[] = [];\n let regexpSource =\n \"^\" +\n path\n .replace(/\\/*\\*?$/, \"\") // Ignore trailing / and /*, we'll handle it below\n .replace(/^\\/*/, \"/\") // Make sure it has a leading /\n .replace(/[\\\\.*+^$?{}|()[\\]]/g, \"\\\\$&\") // Escape special regex chars\n .replace(/:(\\w+)/g, (_: string, paramName: string) => {\n paramNames.push(paramName);\n return \"([^\\\\/]+)\";\n });\n\n if (path.endsWith(\"*\")) {\n paramNames.push(\"*\");\n regexpSource +=\n path === \"*\" || path === \"/*\"\n ? \"(.*)$\" // Already matched the initial /, just match the rest\n : \"(?:\\\\/(.+)|\\\\/*)$\"; // Don't include the / in params[\"*\"]\n } else {\n regexpSource += end\n ? \"\\\\/*$\" // When matching to the end, ignore trailing slashes\n : // Otherwise, match a word boundary or a proceeding /. The word boundary restricts\n // parent routes to matching only their own words and nothing more, e.g. parent\n // route \"/home\" should not match \"/home2\".\n \"(?:\\\\b|\\\\/|$)\";\n }\n\n let matcher = new RegExp(regexpSource, caseSensitive ? undefined : \"i\");\n\n return [matcher, paramNames];\n}\n\nfunction safelyDecodeURIComponent(value: string, paramName: string) {\n try {\n return decodeURIComponent(value);\n } catch (error) {\n warning(\n false,\n `The value for the URL param \"${paramName}\" will not be decoded because` +\n ` the string \"${value}\" is a malformed URL segment. This is probably` +\n ` due to a bad percent encoding (${error}).`\n );\n\n return value;\n }\n}\n\n/**\n * Returns a resolved path object relative to the given pathname.\n *\n * @see https://reactrouter.com/docs/en/v6/api#resolvepath\n */\nexport function resolvePath(to: To, fromPathname = \"/\"): Path {\n let {\n pathname: toPathname,\n search = \"\",\n hash = \"\"\n } = typeof to === \"string\" ? parsePath(to) : to;\n\n let pathname = toPathname\n ? toPathname.startsWith(\"/\")\n ? toPathname\n : resolvePathname(toPathname, fromPathname)\n : fromPathname;\n\n return {\n pathname,\n search: normalizeSearch(search),\n hash: normalizeHash(hash)\n };\n}\n\nfunction resolvePathname(relativePath: string, fromPathname: string): string {\n let segments = fromPathname.replace(/\\/+$/, \"\").split(\"/\");\n let relativeSegments = relativePath.split(\"/\");\n\n relativeSegments.forEach(segment => {\n if (segment === \"..\") {\n // Keep the root \"\" segment so the pathname starts at /\n if (segments.length > 1) segments.pop();\n } else if (segment !== \".\") {\n segments.push(segment);\n }\n });\n\n return segments.length > 1 ? segments.join(\"/\") : \"/\";\n}\n\nfunction resolveTo(\n toArg: To,\n routePathnames: string[],\n locationPathname: string\n): Path {\n let to = typeof toArg === \"string\" ? parsePath(toArg) : toArg;\n let toPathname = toArg === \"\" || to.pathname === \"\" ? \"/\" : to.pathname;\n\n // If a pathname is explicitly provided in `to`, it should be relative to the\n // route context. This is explained in `Note on `` values` in our\n // migration guide from v5 as a means of disambiguation between `to` values\n // that begin with `/` and those that do not. However, this is problematic for\n // `to` values that do not provide a pathname. `to` can simply be a search or\n // hash string, in which case we should assume that the navigation is relative\n // to the current location's pathname and *not* the route pathname.\n let from: string;\n if (toPathname == null) {\n from = locationPathname;\n } else {\n let routePathnameIndex = routePathnames.length - 1;\n\n if (toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n\n // Each leading .. segment means \"go up one route\" instead of \"go up one\n // URL segment\". This is a key difference from how works and a\n // major reason we call this a \"to\" value instead of a \"href\".\n while (toSegments[0] === \"..\") {\n toSegments.shift();\n routePathnameIndex -= 1;\n }\n\n to.pathname = toSegments.join(\"/\");\n }\n\n // If there are more \"..\" segments than parent routes, resolve relative to\n // the root / URL.\n from = routePathnameIndex >= 0 ? routePathnames[routePathnameIndex] : \"/\";\n }\n\n let path = resolvePath(to, from);\n\n // Ensure the pathname has a trailing slash if the original to value had one.\n if (\n toPathname &&\n toPathname !== \"/\" &&\n toPathname.endsWith(\"/\") &&\n !path.pathname.endsWith(\"/\")\n ) {\n path.pathname += \"/\";\n }\n\n return path;\n}\n\nfunction getToPathname(to: To): string | undefined {\n // Empty strings should be treated the same as / paths\n return to === \"\" || (to as Path).pathname === \"\"\n ? \"/\"\n : typeof to === \"string\"\n ? parsePath(to).pathname\n : to.pathname;\n}\n\nfunction stripBasename(pathname: string, basename: string): string | null {\n if (basename === \"/\") return pathname;\n\n if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {\n return null;\n }\n\n let nextChar = pathname.charAt(basename.length);\n if (nextChar && nextChar !== \"/\") {\n // pathname does not start with basename/\n return null;\n }\n\n return pathname.slice(basename.length) || \"/\";\n}\n\nconst joinPaths = (paths: string[]): string =>\n paths.join(\"/\").replace(/\\/\\/+/g, \"/\");\n\nconst normalizePathname = (pathname: string): string =>\n pathname.replace(/\\/+$/, \"\").replace(/^\\/*/, \"/\");\n\nconst normalizeSearch = (search: string): string =>\n !search || search === \"?\"\n ? \"\"\n : search.startsWith(\"?\")\n ? search\n : \"?\" + search;\n\nconst normalizeHash = (hash: string): string =>\n !hash || hash === \"#\" ? \"\" : hash.startsWith(\"#\") ? hash : \"#\" + hash;\n\n///////////////////////////////////////////////////////////////////////////////\n// DANGER! PLEASE READ ME!\n// We provide these exports as an escape hatch in the event that you need any\n// routing data that we don't provide an explicit API for. With that said, we\n// want to cover your use case if we can, so if you feel the need to use these\n// we want to hear from you. Let us know what you're building and we'll do our\n// best to make sure we can support you!\n//\n// We consider these exports an implementation detail and do not guarantee\n// against any breaking changes, regardless of the semver release. Use with\n// extreme caution and only if you understand the consequences. Godspeed.\n///////////////////////////////////////////////////////////////////////////////\n\n/** @internal */\nexport {\n NavigationContext as UNSAFE_NavigationContext,\n LocationContext as UNSAFE_LocationContext,\n RouteContext as UNSAFE_RouteContext\n};\n","import * as React from \"react\";\nimport type { BrowserHistory, HashHistory, History } from \"history\";\nimport { createBrowserHistory, createHashHistory, createPath } from \"history\";\nimport {\n MemoryRouter,\n Navigate,\n Outlet,\n Route,\n Router,\n Routes,\n createRoutesFromChildren,\n generatePath,\n matchRoutes,\n matchPath,\n resolvePath,\n renderMatches,\n useHref,\n useInRouterContext,\n useLocation,\n useMatch,\n useNavigate,\n useNavigationType,\n useOutlet,\n useParams,\n useResolvedPath,\n useRoutes,\n useOutletContext\n} from \"react-router\";\nimport type { To } from \"react-router\";\n\nfunction warning(cond: boolean, message: string): void {\n if (!cond) {\n // eslint-disable-next-line no-console\n if (typeof console !== \"undefined\") console.warn(message);\n\n try {\n // Welcome to debugging React Router!\n //\n // This error is thrown as a convenience so you can more easily\n // find the source for a warning that appears in the console by\n // enabling \"pause on exceptions\" in your JavaScript debugger.\n throw new Error(message);\n // eslint-disable-next-line no-empty\n } catch (e) {}\n }\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// RE-EXPORTS\n////////////////////////////////////////////////////////////////////////////////\n\n// Note: Keep in sync with react-router exports!\nexport {\n MemoryRouter,\n Navigate,\n Outlet,\n Route,\n Router,\n Routes,\n createRoutesFromChildren,\n generatePath,\n matchRoutes,\n matchPath,\n renderMatches,\n resolvePath,\n useHref,\n useInRouterContext,\n useLocation,\n useMatch,\n useNavigate,\n useNavigationType,\n useOutlet,\n useParams,\n useResolvedPath,\n useRoutes,\n useOutletContext\n};\n\nexport type {\n Location,\n Path,\n To,\n NavigationType,\n MemoryRouterProps,\n NavigateFunction,\n NavigateOptions,\n NavigateProps,\n Navigator,\n OutletProps,\n Params,\n PathMatch,\n RouteMatch,\n RouteObject,\n RouteProps,\n PathRouteProps,\n LayoutRouteProps,\n IndexRouteProps,\n RouterProps,\n RoutesProps\n} from \"react-router\";\n\n///////////////////////////////////////////////////////////////////////////////\n// DANGER! PLEASE READ ME!\n// We provide these exports as an escape hatch in the event that you need any\n// routing data that we don't provide an explicit API for. With that said, we\n// want to cover your use case if we can, so if you feel the need to use these\n// we want to hear from you. Let us know what you're building and we'll do our\n// best to make sure we can support you!\n//\n// We consider these exports an implementation detail and do not guarantee\n// against any breaking changes, regardless of the semver release. Use with\n// extreme caution and only if you understand the consequences. Godspeed.\n///////////////////////////////////////////////////////////////////////////////\n\n/** @internal */\nexport {\n UNSAFE_NavigationContext,\n UNSAFE_LocationContext,\n UNSAFE_RouteContext\n} from \"react-router\";\n\n////////////////////////////////////////////////////////////////////////////////\n// COMPONENTS\n////////////////////////////////////////////////////////////////////////////////\n\nexport interface BrowserRouterProps {\n basename?: string;\n children?: React.ReactNode;\n window?: Window;\n}\n\n/**\n * A `` for use in web browsers. Provides the cleanest URLs.\n */\nexport function BrowserRouter({\n basename,\n children,\n window\n}: BrowserRouterProps) {\n let historyRef = React.useRef();\n if (historyRef.current == null) {\n historyRef.current = createBrowserHistory({ window });\n }\n\n let history = historyRef.current;\n let [state, setState] = React.useState({\n action: history.action,\n location: history.location\n });\n\n React.useLayoutEffect(() => history.listen(setState), [history]);\n\n return (\n \n );\n}\n\nexport interface HashRouterProps {\n basename?: string;\n children?: React.ReactNode;\n window?: Window;\n}\n\n/**\n * A `` for use in web browsers. Stores the location in the hash\n * portion of the URL so it is not sent to the server.\n */\nexport function HashRouter({ basename, children, window }: HashRouterProps) {\n let historyRef = React.useRef();\n if (historyRef.current == null) {\n historyRef.current = createHashHistory({ window });\n }\n\n let history = historyRef.current;\n let [state, setState] = React.useState({\n action: history.action,\n location: history.location\n });\n\n React.useLayoutEffect(() => history.listen(setState), [history]);\n\n return (\n \n );\n}\n\nexport interface HistoryRouterProps {\n basename?: string;\n children?: React.ReactNode;\n history: History;\n}\n\n/**\n * A `` that accepts a pre-instantiated history object. It's important\n * to note that using your own history object is highly discouraged and may add\n * two versions of the history library to your bundles unless you use the same\n * version of the history library that React Router uses internally.\n */\nfunction HistoryRouter({ basename, children, history }: HistoryRouterProps) {\n const [state, setState] = React.useState({\n action: history.action,\n location: history.location\n });\n\n React.useLayoutEffect(() => history.listen(setState), [history]);\n\n return (\n \n );\n}\n\nif (__DEV__) {\n HistoryRouter.displayName = \"unstable_HistoryRouter\";\n}\n\nexport { HistoryRouter as unstable_HistoryRouter };\n\nfunction isModifiedEvent(event: React.MouseEvent) {\n return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\n\nexport interface LinkProps\n extends Omit, \"href\"> {\n reloadDocument?: boolean;\n replace?: boolean;\n state?: any;\n to: To;\n}\n\n/**\n * The public API for rendering a history-aware .\n */\nexport const Link = React.forwardRef(\n function LinkWithRef(\n { onClick, reloadDocument, replace = false, state, target, to, ...rest },\n ref\n ) {\n let href = useHref(to);\n let internalOnClick = useLinkClickHandler(to, { replace, state, target });\n function handleClick(\n event: React.MouseEvent\n ) {\n if (onClick) onClick(event);\n if (!event.defaultPrevented && !reloadDocument) {\n internalOnClick(event);\n }\n }\n\n return (\n // eslint-disable-next-line jsx-a11y/anchor-has-content\n \n );\n }\n);\n\nif (__DEV__) {\n Link.displayName = \"Link\";\n}\n\nexport interface NavLinkProps\n extends Omit {\n children:\n | React.ReactNode\n | ((props: { isActive: boolean }) => React.ReactNode);\n caseSensitive?: boolean;\n className?: string | ((props: { isActive: boolean }) => string);\n end?: boolean;\n style?:\n | React.CSSProperties\n | ((props: { isActive: boolean }) => React.CSSProperties);\n}\n\n/**\n * A wrapper that knows if it's \"active\" or not.\n */\nexport const NavLink = React.forwardRef(\n function NavLinkWithRef(\n {\n \"aria-current\": ariaCurrentProp = \"page\",\n caseSensitive = false,\n className: classNameProp = \"\",\n end = false,\n style: styleProp,\n to,\n children,\n ...rest\n },\n ref\n ) {\n let location = useLocation();\n let path = useResolvedPath(to);\n\n let locationPathname = location.pathname;\n let toPathname = path.pathname;\n if (!caseSensitive) {\n locationPathname = locationPathname.toLowerCase();\n toPathname = toPathname.toLowerCase();\n }\n\n let isActive =\n locationPathname === toPathname ||\n (!end &&\n locationPathname.startsWith(toPathname) &&\n locationPathname.charAt(toPathname.length) === \"/\");\n\n let ariaCurrent = isActive ? ariaCurrentProp : undefined;\n\n let className: string;\n if (typeof classNameProp === \"function\") {\n className = classNameProp({ isActive });\n } else {\n // If the className prop is not a function, we use a default `active`\n // class for s that are active. In v5 `active` was the default\n // value for `activeClassName`, but we are removing that API and can still\n // use the old default behavior for a cleaner upgrade path and keep the\n // simple styling rules working as they currently do.\n className = [classNameProp, isActive ? \"active\" : null]\n .filter(Boolean)\n .join(\" \");\n }\n\n let style =\n typeof styleProp === \"function\" ? styleProp({ isActive }) : styleProp;\n\n return (\n \n {typeof children === \"function\" ? children({ isActive }) : children}\n \n );\n }\n);\n\nif (__DEV__) {\n NavLink.displayName = \"NavLink\";\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// HOOKS\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Handles the click behavior for router `` components. This is useful if\n * you need to create custom `` components with the same click behavior we\n * use in our exported ``.\n */\nexport function useLinkClickHandler(\n to: To,\n {\n target,\n replace: replaceProp,\n state\n }: {\n target?: React.HTMLAttributeAnchorTarget;\n replace?: boolean;\n state?: any;\n } = {}\n): (event: React.MouseEvent) => void {\n let navigate = useNavigate();\n let location = useLocation();\n let path = useResolvedPath(to);\n\n return React.useCallback(\n (event: React.MouseEvent) => {\n if (\n event.button === 0 && // Ignore everything but left clicks\n (!target || target === \"_self\") && // Let browser handle \"target=_blank\" etc.\n !isModifiedEvent(event) // Ignore clicks with modifier keys\n ) {\n event.preventDefault();\n\n // If the URL hasn't changed, a regular will do a replace instead of\n // a push, so do the same here.\n let replace =\n !!replaceProp || createPath(location) === createPath(path);\n\n navigate(to, { replace, state });\n }\n },\n [location, navigate, path, replaceProp, state, target, to]\n );\n}\n\n/**\n * A convenient wrapper for reading and writing search parameters via the\n * URLSearchParams interface.\n */\nexport function useSearchParams(defaultInit?: URLSearchParamsInit) {\n warning(\n typeof URLSearchParams !== \"undefined\",\n `You cannot use the \\`useSearchParams\\` hook in a browser that does not ` +\n `support the URLSearchParams API. If you need to support Internet ` +\n `Explorer 11, we recommend you load a polyfill such as ` +\n `https://github.com/ungap/url-search-params\\n\\n` +\n `If you're unsure how to load polyfills, we recommend you check out ` +\n `https://polyfill.io/v3/ which provides some recommendations about how ` +\n `to load polyfills only for users that need them, instead of for every ` +\n `user.`\n );\n\n let defaultSearchParamsRef = React.useRef(createSearchParams(defaultInit));\n\n let location = useLocation();\n let searchParams = React.useMemo(() => {\n let searchParams = createSearchParams(location.search);\n\n for (let key of defaultSearchParamsRef.current.keys()) {\n if (!searchParams.has(key)) {\n defaultSearchParamsRef.current.getAll(key).forEach(value => {\n searchParams.append(key, value);\n });\n }\n }\n\n return searchParams;\n }, [location.search]);\n\n let navigate = useNavigate();\n let setSearchParams = React.useCallback(\n (\n nextInit: URLSearchParamsInit,\n navigateOptions?: { replace?: boolean; state?: any }\n ) => {\n navigate(\"?\" + createSearchParams(nextInit), navigateOptions);\n },\n [navigate]\n );\n\n return [searchParams, setSearchParams] as const;\n}\n\nexport type ParamKeyValuePair = [string, string];\n\nexport type URLSearchParamsInit =\n | string\n | ParamKeyValuePair[]\n | Record\n | URLSearchParams;\n\n/**\n * Creates a URLSearchParams object using the given initializer.\n *\n * This is identical to `new URLSearchParams(init)` except it also\n * supports arrays as values in the object form of the initializer\n * instead of just strings. This is convenient when you need multiple\n * values for a given key, but don't want to use an array initializer.\n *\n * For example, instead of:\n *\n * let searchParams = new URLSearchParams([\n * ['sort', 'name'],\n * ['sort', 'price']\n * ]);\n *\n * you can do:\n *\n * let searchParams = createSearchParams({\n * sort: ['name', 'price']\n * });\n */\nexport function createSearchParams(\n init: URLSearchParamsInit = \"\"\n): URLSearchParams {\n return new URLSearchParams(\n typeof init === \"string\" ||\n Array.isArray(init) ||\n init instanceof URLSearchParams\n ? init\n : Object.keys(init).reduce((memo, key) => {\n let value = init[key];\n return memo.concat(\n Array.isArray(value) ? value.map(v => [key, v]) : [[key, value]]\n );\n }, [] as ParamKeyValuePair[])\n );\n}\n","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n _next(undefined);\n });\n };\n}","const ACCOUNTS = `\nquery {\n accounts(|placeholder|) {\n error {\n type\n message\n }\n \n accounts {\n id\n status\n type\n organisation_1 {\n unique_reference_name\n id\n type\n users {\n id\n }\n info {\n name\n country\n country_text\n website\n currency\n logo_image_url\n }\n }\n organisation_2 {\n unique_reference_name\n id\n type\n users {\n id\n }\n info {\n name\n country\n country_text\n website\n currency\n logo_image_url\n }\n }\n \n \n sub_accounts{\n id\n type\n status\n organisation_1 {\n unique_reference_name\n id\n type\n info {\n name\n country\n country_text\n website\n currency\n logo_image_url\n }\n }\n organisation_2 {\n unique_reference_name\n id\n type\n info {\n name\n country\n country_text\n website\n currency\n logo_image_url\n }\n }\n }\n \n \n }\n \n }\n}\n\n`\n\nconst ADD_CATALOGUE_PRODUCT_TO_CLAIM = `\nmutation {\n add_catalogue_product_to_claim(|placeholder|) {\n error {\n type\n message\n }\n item {\n id\n status\n }\n }\n}\n`\n\nconst ADD_MANUAL_PRODUCT_TO_CLAIM = `\nmutation {\n add_manual_product_to_claim(|placeholder|) {\n error {\n type\n message\n }\n item {\n id\n status\n claim\n\n category {\n id\n category_a\n category_b\n category_c\n category_d\n display_name\n }\n\n date_created\n date_updated\n\n is_manual\n quantity\n\n product {\n id\n date_created\n date_updated\n\n date_verified\n date_released\n dates_released\n\n brand\n category\n common_name\n description\n\n status\n type\n\n ean_codes\n metadata\n model_number\n model_numbers\n\n images {\n main\n thumbnail_web\n thumbnail_print\n }\n properties {\n name\n display_name\n value\n }\n }\n }\n }\n}\n`\n\nconst ADD_REPLACEMENT = `\nmutation {\n add_replacement(|placeholder|) {\n error {\n type\n message\n }\n item {\n id\n status\n }\n }\n}\n`\n\nconst APPROVE_POST_TENDER_ITEM = `\nmutation {\n approve_post_tender_item(|placeholder|) {\n error {\n type\n message\n }\n item {\n id\n status\n }\n }\n}\n`\n\nconst CATEGORIES = `\nquery {\n categories(sort_by:[{ field:\"display_name\" order:ASCENDING }]) {\n error {\n type\n message\n }\n categories {\n id\n category_a\n category_b\n category_c\n category_d\n display_name\n }\n }\n}\n`\n\nconst CLAIMS_MINIMAL = `\nquery{\n claims(|placeholder|){\n error{\n type\n message\n }\n claims{\n id\n date_created\n created_by{\n id\n username\n }\n owned_by{\n id\n username\n }\n }\n }\n}\n` // minimal fields for all claims for organisation with user included\n\nconst CLAIMS_SEARCH = `\nquery {\n claims(|placeholder|) {\n error {\n type\n message\n }\n statuses\n count\n claims {\n country\n created_by {\n info {\n first_name\n last_name\n profile_image_url\n }\n }\n date_sla_expiry\n date_tender_expiry\n date_updated\n id\n insurer_claim_number\n item_count\n organisation {\n id\n info {\n name\n country\n logo_image_url\n }\n unique_reference_name\n }\n owned_by {\n username\n info {\n first_name\n last_name\n profile_image_url\n }\n }\n status\n status_reason\n }\n }\n}\n`\n\n\nconst CLAIMS_WITH_ITEMS = `\nquery {\n claims(|placeholder|) {\n error {\n type\n message\n }\n \n count\n \n claims {\n cc_recipients{\n id,\n email,\n full_name,\n first_name\n last_name,\n }\n attachments{\n id\n object_type\n content_type\n date_created\n date_updated\n file_name\n object_id\n user{\n id\n username\n }\n url\n }\n country\n metadata\n location_text\n total_cost\n tat_minutes\n cost_vat\n claimant_report_s3_key\n comments{\n message\n }\n cost_subtotal\n created_by {\n id\n info {\n first_name\n last_name\n profile_image_url\n }\n status\n status_reason\n username\n }\n delivery_costs {\n supplier_id\n supplier_name\n delivery_cost\n is_winning_tender\n is_adhoc\n }\n date_created\n date_quantified\n date_quantification_requested\n date_sla_expiry\n date_tender_expiry\n date_updated\n id\n insurer_claim_number\n insurer_policy_number\n item_count\n item_count_unique\n locality\n organisation {\n id\n info {\n name\n country\n currency\n currency_symbol\n logo_image_url\n }\n unique_reference_name\n }\n suppliers {\n id\n display_name\n unique_reference_name\n logo_image_url\n }\n owned_by {\n id\n status\n username\n info {\n first_name\n last_name\n profile_image_url\n }\n }\n quantification_requested_by {\n id\n info {\n first_name\n last_name\n }\n }\n postal_code\n locality\n status\n status_reason\n \n possible_items{\n brand\n category{\n category_a\n category_b\n category_c\n category_d\n display_name\n id\n }\n claimant_quote\n description\n model_number\n proto_products{\n id\n brand\n common_name\n model_number\n description\n category \n images{\n thumbnail_web\n }\n }\n quantity\n }\n \n items {\n claimant_quote\n id\n date_created\n date_updated\n is_tender_item\n is_manual\n status\n status_reason\n type\n metadata{\n claimed_amount\n comment\n date_purchased\n incident_location\n purchase_price\n purchase_source\n replacement_quote\n attachments{\n id\n object_type\n content_type\n date_created\n date_updated\n file_name\n object_id\n user{\n id\n username\n }\n url\n }\n }\n category {\n id\n category_a\n category_b\n category_c\n category_d\n display_name\n }\n quantity\n supplier_panel {\n id\n name\n unique_reference_name\n status\n ranking\n time_to_quote_minutes\n supplier {\n is_adhoc\n id\n info {\n name\n country\n currency\n currency_symbol\n logo_image_url\n }\n }\n recommended_replacement {\n product {\n id\n date_created\n date_updated\n\n date_verified\n date_released\n dates_released\n\n brand\n category\n common_name\n description\n\n status\n type\n\n ean_codes\n metadata\n model_number\n model_numbers\n\n images {\n main\n thumbnail_web\n thumbnail_print\n }\n properties {\n name\n display_name\n value\n }\n }\n quote {\n id\n status\n country\n currency\n currency_symbol\n is_manual\n price\n brand\n description\n supplier {\n id\n unique_reference_name\n display_name\n }\n }\n }\n }\n possible_replacements {\n product {\n id\n date_created\n date_updated\n\n date_verified\n date_released\n dates_released\n\n brand\n category\n common_name\n description\n\n status\n type\n\n ean_codes\n metadata\n model_number\n model_numbers\n\n images {\n main\n thumbnail_web\n thumbnail_print\n }\n properties {\n name\n display_name\n value\n }\n }\n quotes {\n id\n status\n country\n currency\n is_manual\n currency_symbol\n description\n price\n brand\n supplier {\n id\n unique_reference_name\n }\n }\n }\n product {\n id\n date_created\n date_updated\n\n date_verified\n date_released\n dates_released\n\n brand\n category\n common_name\n description\n\n status\n type\n\n ean_codes\n metadata\n model_number\n model_numbers\n \n ai_generated\n\n images {\n main\n thumbnail_web\n thumbnail_print\n }\n properties {\n name\n display_name\n value\n }\n }\n replacement {\n product {\n id\n date_created\n date_updated\n\n date_verified\n date_released\n dates_released\n\n brand\n category\n common_name\n description\n\n status\n type\n\n ean_codes\n metadata\n model_number\n model_numbers\n\n images {\n main\n thumbnail_web\n thumbnail_print\n }\n properties {\n name\n display_name\n value\n }\n }\n quote {\n id\n status\n country\n currency\n currency_symbol\n price\n brand\n date_expiry\n is_manual\n description\n match_accuracy\n supplier {\n id\n unique_reference_name\n display_name\n }\n }\n note\n date_selected\n selected_by\n is_system_selected\n }\n }\n }\n }\n}\n`\n\nconst CONVERT_MANUAL_ITEM_TO_CATALOGUE_ITEM = `\nmutation {\n convert_manual_item_to_catalogue_item(|placeholder|) {\n error {\n message\n type\n }\n item {\n id\n status\n }\n }\n}\n`\n\nconst CREATE_ORGANISATION = `\nmutation {\n create_organisation(|placeholder|) {\n error {\n type\n message\n }\n organisation {\n id\n unique_reference_name\n info{\n name\n }\n }\n }\n}\n`\n\nconst CREATE_USER = `\nmutation {\n create_user(|placeholder|) {\n error {\n type\n message\n }\n user{\n id\n }\n }\n}\n`\n\nconst CREATE_CLAIM = `\nmutation {\n create_claim(|placeholder|) {\n error {\n type\n message\n }\n claim {\n id\n status\n }\n }\n}\n`\n\nconst CREATE_MANUAL_QUOTE = `\nmutation {\n create_manual_quote(|placeholder|) {\n error {\n type\n message\n }\n quote {\n id\n status\n }\n }\n}\n`\n\nconst SUPPLIER_SET_PREFERRED_REPLACEMENT = `\nmutation {\n supplier_set_preferred_replacement(|placeholder|) {\n error {\n type\n message\n }\n item{\n id\n claim\n }\n }\n}\n`\n\nconst CREATE_SETTLEMENT = `\nmutation {\n create_settlement(|placeholder|) {\n error {\n type\n message\n }\n settlement {\n id\n country\n status\n settlement_engine_status\n method\n currency\n value\n excess\n }\n }\n}\n`\n\nconst CREATE_MANUAL_REPLACEMENT = `\nmutation {\n create_manual_replacement(|placeholder|) {\n error {\n type\n message\n }\n item {\n id\n status\n claim\n\n category {\n id\n category_a\n category_b\n category_c\n category_d\n display_name\n }\n\n date_created\n date_updated\n\n is_manual\n quantity\n\n product {\n id\n date_created\n date_updated\n\n date_verified\n date_released\n dates_released\n\n brand\n category\n common_name\n description\n\n status\n type\n\n ean_codes\n metadata\n model_number\n model_numbers\n\n images {\n main\n thumbnail_web\n thumbnail_print\n }\n properties {\n name\n display_name\n value\n }\n }\n }\n }\n}\n`\n\nconst CURRENT_USER = `\nquery {\n current_user(|placeholder|) {\n error {\n type\n message\n }\n user {\n id\n date_created\n date_updated\n info {\n first_name\n last_name\n profile_image_url\n mfa_enabled\n }\n roles {\n name\n }\n organisation {\n id\n info {\n name\n country\n country_text\n currency\n currency_symbol\n }\n type\n unique_reference_name\n }\n status\n status_reason\n username\n }\n }\n}\n`\n\nconst USER_FULL = `\nquery {\n users(|placeholder|){\n error {\n type\n message\n }\n users{\n id\n organisation{\n id\n type\n unique_reference_name\n }\n date_created \n date_updated\n status\n status_reason\n username\n info{\n first_name\n last_name\n full_name\n profile_image_url\n }\n roles{\n id\n date_created\n date_updated\n organisation\n name\n status\n # permissions{\n # account\n # actions\n # }\n }\n permissions{\n account\n actions\n }\n }\n }\n}\n`\n\nconst ROLES = `\nquery {\n roles(|placeholder|){\n roles{\n name\n id\n permissions{\n account\n actions\n }\n }\n }\n}\n`\n\nconst DEACTIVATE_USER = `\nmutation {\n deactivate_user(|placeholder|) {\n error{\n type\n message\n }\n user{\n id\n status\n }\n }\n}\n`\n\nconst DEACTIVATE_ORGANISATION = `\nmutation {\n deactivate_organisation(|placeholder|) {\n error{\n type\n message\n }\n organisation{\n id\n status\n }\n }\n}\n`\n\nconst ACTIVATE_ORGANISATION = `\nmutation {\n activate_organisation(|placeholder|) {\n error{\n type\n message\n }\n organisation{\n id\n status\n }\n }\n}\n`\n\nconst ACTIVATE_ACCOUNT = `\nmutation {\n activate_account(|placeholder|) {\n error{\n type\n message\n }\n account{\n id\n status\n }\n }\n}\n`\n\nconst DEACTIVATE_ACCOUNT = `\nmutation {\n deactivate_account(|placeholder|) {\n error{\n type\n message\n }\n account{\n id\n status\n }\n }\n}\n`\n\n\nconst DELETE_CLAIM = `\nmutation {\n delete_claim(|placeholder|) {\n error {\n message\n type\n }\n claim {\n id\n date_created\n date_updated\n status\n }\n }\n}\n`\n\nconst DELETE_ITEM = `\nmutation {\n delete_item(|placeholder|) {\n error {\n type\n message\n }\n item {\n id\n status\n quantity\n }\n }\n}\n`\n\nconst DELETE_MANUAL_QUOTE = `\nmutation { \n delete_manual_quote(|placeholder|) {\n error {\n type\n message\n }\n quote {\n id\n status\n }\n }\n}\n`\n\nconst DELETE_TENDER = `\nmutation { \n delete_tender(|placeholder|) {\n error {\n type\n message\n }\n item {\n id\n status\n }\n }\n}\n`\n\nconst DISMISS_ALL_PENDING_TENDER = `\nmutation {\n dismiss_all_pending_tender(|placeholder|) {\n error {\n message\n type\n }\n claim {\n id\n date_created\n date_updated\n status\n }\n }\n}\n`\n\nconst DISMISS_TENDER = `\nmutation {\n dismiss_tender(|placeholder|) {\n error {\n type\n message\n }\n item {\n id\n status\n }\n }\n}\n`\n\nconst FILTER_SEARCH = `\nquery {\n filter_search(|placeholder|) {\n error {\n type\n message\n }\n brands{\n brand\n is_supported\n families{\n family\n categories\n }\n categories{\n families\n category\n }\n }\n auto_suggest\n count\n ai_generated\n ai_data_lacking\n found_exact_matches\n result_reason\n filters {\n name\n values {\n value\n count\n }\n display_name\n }\n products {\n id\n date_updated\n date_released\n dates_released\n\n brand\n category\n common_name\n description\n\n ean_codes\n model_number\n model_numbers\n \n ai_generated\n type\n\n images {\n main\n thumbnail_web\n thumbnail_print\n }\n properties {\n display_name\n name\n value\n }\n }\n }\n}\n`\n\nexport const PROTO_PRODUCT_PROPERTIES = `\nquery {\n proto_product_properties(|placeholder|) {\n error {\n type\n message\n }\n product {\n id\n date_updated\n date_released\n dates_released\n\n brand\n category\n common_name\n description\n\n ean_codes\n model_number\n model_numbers\n \n ai_generated\n type\n\n images {\n main\n thumbnail_web\n thumbnail_print\n }\n properties {\n display_name\n name\n value\n }\n }\n }\n}`\n\nexport const PRODUCT_PROPERTIES = `\nquery {\n product_properties(|placeholder|) {\n error {\n type\n message\n }\n product {\n id\n date_updated\n date_released\n dates_released\n\n brand\n category\n common_name\n description\n\n ean_codes\n model_number\n model_numbers\n \n ai_generated\n type\n\n images {\n main\n thumbnail_web\n thumbnail_print\n }\n properties {\n display_name\n name\n value\n }\n }\n }\n}`\n\n\nconst GENERATE_REPORT_DOWNLOAD_URL = `\nmutation {\n generate_report_download_url(|placeholder|) {\n error {\n type\n message\n }\n url\n }\n}\n`\n\n\n\nconst UPLOAD_FILE = `\nmutation upload_file($file: Upload!) { \n upload_file(|placeholder|) {\n error {type, message}\n file{\n id\n date_created\n date_updated\n file_name\n url\n user{\n id\n }\n object_id\n object_type\n content_type\n }\n }\n}\n`\n\n\nconst _UPLOAD_FILE = `\nmutation upload_file($file: Upload!) { \n upload_file(|placeholder|) {\n error {\n type\n message\n }\n id\n url\n file_name\n organisation{\n id\n unique_reference_name\n }\n user{\n id\n username\n }\n date_created\n date_updated\n }\n}\n`\n\n\nconst ORGANISATIONS = `\nquery {\n organisations(|placeholder|) {\n error {\n type\n message\n }\n organisations {\n id\n date_created\n date_updated\n status\n unique_reference_name\n type\n account_type\n info {\n name\n country\n country_text\n website\n currency\n logo_image_url\n snappy_info{\n status_text\n thank_you_text\n landing_text\n snappy_logo_url\n }\n }\n users {\n id\n username\n info {\n first_name\n last_name\n full_name\n profile_image_url\n }\n }\n }\n }\n}\n`\n\nconst ORGANISATION_OPTIONS = `\nquery OrganisationOptions {\n organisations(|placeholder|) {\n error {\n type\n message\n }\n organisations {\n id\n unique_reference_name\n type\n options {\n email_notification_option\n email_notification_address_claims\n email_notification_address_billing\n reduced_tender_threshold_percentage\n reduced_tender_minimum_suppliers\n enforce_unique_insurer_claim_number\n replacement_pattern\n sales_regions{\n level\n region\n type\n }\n sales_categories{\n date_created\n date_updated\n category_name\n category_level\n category_rule\n brands_included\n brands_excluded\n }\n delivery_costs{\n category_level\n category_name\n region_0{\n region\n cost\n }\n region_1{\n region\n cost\n }\n region_2{\n region\n cost\n }\n }\n allow_manual_quotes\n voucher{\n default_name\n validity_period_months\n supported_request_type\n }\n invoice{\n generation_type\n xero_id\n credit_facility_amount\n payment_term_days\n discount_percentage\n }\n }\n \n }\n }\n}\n`\n\nconst SETTLE = `\nmutation {\n settle(|placeholder|) {\n error {\n type\n message\n }\n settlement {\n id\n country\n status\n settlement_engine_status\n method\n currency\n value\n excess\n }\n }\n}\n`\n\nconst SETTLEMENTS = `\nquery {\n settlements(|placeholder|) {\n error {\n type\n message\n }\n settlements {\n id\n country\n created_by {\n id\n }\n organisation_insurer {\n id\n }\n organisation_supplier {\n id\n info {\n name\n logo_image_url\n }\n }\n date_created\n date_updated\n claim {\n id\n }\n items {\n id\n }\n item_count\n note\n metadata\n status\n settlement_engine_status\n change_records{\n date_updated\n user {\n id\n username\n }\n change_type\n message\n before\n after\n }\n method\n currency\n value\n excess\n }\n }\n}\n`\n\nconst UPDATE_ITEM_QUANTITY = `\nmutation {\n update_item_quantity(|placeholder|) {\n error {\n type\n message\n }\n item {\n id\n status\n }\n }\n}\n`\n\nconst UPDATE_MANUAL_ITEM = `\nmutation {\n update_manual_item(|placeholder|) {\n error {\n type\n message\n }\n item {\n id\n date_created\n date_updated\n status\n is_manual\n claim\n product {\n id\n date_created\n date_updated\n\n date_verified\n date_released\n dates_released\n\n brand\n category\n common_name\n description\n\n status\n type\n\n ean_codes\n metadata\n model_number\n model_numbers\n\n images {\n main\n thumbnail_web\n thumbnail_print\n }\n properties {\n name\n display_name\n value\n }\n } \n }\n }\n}\n`\n\nconst UPDATE_QUOTE_PRICE = `\nmutation { \n update_quote_price(|placeholder|) {\n error {\n type\n message\n }\n quote {\n id\n status\n }\n }\n}\n`\n\nconst UPDATE_ORGANISATION = `\nmutation { \n update_organisation(|placeholder|) {\n error {\n type\n message\n }\n organisation {\n id\n }\n }\n}\n`\n\nconst UPDATE_USER = `\nmutation {\n update_user(|placeholder|){\n error {\n type\n message\n }\n user {\n id\n username\n info {\n full_name\n }\n }\n \n }\n}\n`\n\nconst UPLOAD_SNAPPY_LOGO = `\nmutation { \n upload_snappy_logo(|placeholder|) {\n error {\n type\n message\n }\n organisation {\n id\n }\n }\n}\n`\n\nconst UPDATE_SETTLEMENT_VOUCHER_CODE = `\nmutation {\n update_settlement_voucher_code(|placeholder|) {\n error {\n type\n message\n }\n settlement {\n id\n status\n }\n }\n}\n`\n\nconst VERIFY_ALL_MANUAL_ITEMS = `\nmutation {\n verify_all_manual_items(|placeholder|) {\n error {\n type\n message\n }\n claim {\n id\n status\n }\n }\n}\n`\n\nconst VERIFY_MANUAL_ITEM = `\nmutation {\n verify_manual_item(|placeholder|) {\n error {\n type\n message\n }\n item {\n id\n status\n }\n }\n}\n`\n\nconst QUANTIFY_CLAIM = `\nmutation {\n quantify_claim(|placeholder|) {\n error {\n type\n message\n }\n claim {\n id\n status\n }\n }\n}\n`\n\nconst CHANGE_PASSWORD = `\nmutation {\n set_password(|placeholder|) {\n error {\n type\n message\n }\n message\n }\n}\n`\n\nconst CLAIM_COMMENT = `\nquery {\n claim_comments(|placeholder|){\n error{\n type\n message\n }\n comments{\n message\n id\n }\n }\n}\n`\n\nconst CREATE_CLAIM_COMMENT = `\nmutation {\n create_claim_comment (|placeholder|) {\n comment {\n message\n }\n }\n}\n`\n\nconst SNOOZE_CLAIM = `\nmutation {\n snooze_claim(|placeholder|){\n error{\n type\n message\n }\n claim{\n id\n }\n }\n}\n`\n\nconst SUPPLIER_DELIVERY_COST = `\nquery {\n delivery_cost (|placeholder|){\n cost\n error {\n type\n message\n }\n }\n}\n`\n\n\nconst UPDATE_ITEM_CLAIMANT_QUOTE = `\nmutation {\n update_item_claimant_quote(|placeholder|) {\n error {\n type\n message\n }\n item {\n id\n claimant_quote\n }\n }\n}\n`\n\nconst SEARCH_LOCALITIES = `\nquery {\n search_localities(|placeholder|) {\n error {\n type\n message\n }\n localities\n }\n}\n`\n\nconst REGIONS = `\nquery {\n regions (|placeholder|) {\n error {\n message\n type\n }\n regions {\n id\n region_0\n region_1\n region_2\n region_3\n }\n }\n}\n`\n\n// HAI\nconst HAI_TASK_SEARCH = `\nquery {\n hai_tasks(|placeholder|) {\n error {\n message\n type\n }\n tasks {\n description\n id\n date_created\n date_resolved\n date_updated\n date_deleted\n resolution_data\n data\n task_type\n status\n assignees {\n user\n }\n }\n }\n}\n`\n\nconst HAI_CHANGE_TASK = `\nmutation {\nresolve_hai_task(|placeholder|) {\n error {\n message\n type\n }\n task {\n assignees {\n user\n type\n }\n status\n change_records\n }\n }\n}\n`;\n\nconst DELETE_HAI_TASK = `\nmutation {\n delete_hai_task(|placeholder|){\n task{\n id\n }\n }\n}\n`\n\nconst HAI_ASSIGN_TASK = `\nmutation {\nassign_hai_task(|placeholder|) {\n error {\n message\n type\n }\n task {\n assignees {\n user\n type\n }\n }\n }\n}\n`\n\nconst ALL_SUPPLIERS = `\nquery {\n claims {\n claims {\n suppliers {\n display_name\n id\n unique_reference_name\n }\n }\n }\n}\n`\n\nconst GENERATE_SUPPLIER_DELIVERY_COSTS_SHEETS = `\nmutation {\n generate_supplier_delivery_costs_sheets(|placeholder|) {\n error{\n type\n message\n }\n urls\n }\n}\n`\n\nconst GENERATE_AI_PROTO = `\nmutation {\n generate_ai_proto(|placeholder|){\n proto_product {\n id\n date_created\n date_updated\n date_released\n dates_released\n\n date_verified\n brand\n category\n common_name\n description\n status\n type\n\n ean_codes\n metadata\n model_number\n model_numbers\n\n images {\n main\n thumbnail_web\n thumbnail_print\n }\n properties {\n display_name\n name\n value\n }\n\n }\n response_info\n response_success\n new_claim_item {\n id\n date_created\n date_updated\n is_tender_item\n is_manual\n status\n category {\n id\n category_a\n category_b\n category_c\n category_d\n display_name\n }\n quantity\n supplier_panel {\n id\n name\n unique_reference_name\n status\n ranking\n recommended_replacement {\n product {\n id\n date_created\n date_updated\n\n date_verified\n date_released\n dates_released\n\n brand\n category\n common_name\n description\n\n status\n type\n\n ean_codes\n metadata\n model_number\n model_numbers\n\n images {\n main\n thumbnail_web\n thumbnail_print\n }\n properties {\n name\n display_name\n value\n }\n }\n quote {\n id\n status\n country\n currency\n currency_symbol\n price\n brand\n }\n }\n }\n possible_replacements {\n product {\n id\n date_created\n date_updated\n\n date_verified\n date_released\n dates_released\n\n brand\n category\n common_name\n description\n\n status\n type\n\n ean_codes\n metadata\n model_number\n model_numbers\n\n images {\n main\n thumbnail_web\n thumbnail_print\n }\n properties {\n name\n display_name\n value\n }\n }\n quotes {\n id\n status\n country\n currency\n currency_symbol\n price\n brand\n supplier {\n id\n }\n }\n }\n product {\n id\n date_created\n date_updated\n\n date_verified\n date_released\n dates_released\n\n brand\n category\n common_name\n description\n\n status\n type\n\n ean_codes\n metadata\n model_number\n model_numbers\n\n images {\n main\n thumbnail_web\n thumbnail_print\n }\n properties {\n name\n display_name\n value\n }\n }\n replacement {\n product {\n id\n date_created\n date_updated\n\n date_verified\n date_released\n dates_released\n\n brand\n category\n common_name\n description\n\n status\n type\n\n ean_codes\n metadata\n model_number\n model_numbers\n\n images {\n main\n thumbnail_web\n thumbnail_print\n }\n properties {\n name\n display_name\n value\n }\n }\n quote {\n id\n status\n country\n currency\n currency_symbol\n price\n brand\n supplier {\n id\n }\n }\n note\n date_selected\n selected_by\n is_system_selected\n }\n }\n }\n}\n\n\n`\n\nconst GENERATE_SUPPLIER_QUOTES_CATALOGUES = `\nmutation {\n generate_supplier_quotes_catalogues(|placeholder|) {\n error {\n type\n message\n }\n urls\n }\n}\n`\n\nconst LOAD_SUPPLIER_DELIVERY_COST_SHEET = `\nmutation {\n load_supplier_delivery_cost_sheet(|placeholder|) {\n error {\n type\n message\n }\n success\n }\n}\n`\n\nconst LOAD_SUPPLIER_QUOTES_CATALOGUE_SHEET = `\nmutation {\n load_supplier_quotes_catalogues_sheet(|placeholder|) {\n error {\n type\n message\n }\n success\n }\n}\n`\n\nconst IMPORT_SUPPLIER_QUOTES_CATALOGUE_WORKBOOK = `\nmutation {\n import_supplier_quotes_catalogue_workbook(|placeholder|) {\n error {\n type\n message\n }\n success\n }\n}\n`\n\nconst IMPORT_SUPPLIER_DELIVERY_COST_WORKBOOK = `\nmutation {\n import_supplier_delivery_cost_workbook(|placeholder|) {\n error {\n type\n message\n }\n success\n }\n}\n`\n\nconst GENERATE_CLAIMS_REPORTS = `\nmutation {\n generate_claims_report(|placeholder|) {\n error{\n type\n message\n }\n url_csv\n url_xlsx\n output_data\n }\n}\n`\n\nconst GENERATE_SUPPLIER_CLAIMS_REPORT = `\nmutation {\n generate_supplier_claims_report(|placeholder|) {\n error{\n type\n message\n }\n url_csv\n url_xlsx\n output_data\n }\n}\n`\n\nconst UPDATE_PROTO_PRODUCT_MANUALLY = `\nmutation {\n update_proto_product_manually(|placeholder|){\n error{ type, message }\n update_result{\n ore_id\n ingot_id\n new_proto_product{\n id\n category\n common_name\n model_number\n model_numbers\n }\n \\terror{ type, message }\n }\n }\n}\n`\n\nexport const DELETE_SETTLEMENT = `\nmutation {\n delete_settlement(|placeholder|){\n error { type, message }\n settlement{\n id\n }\n }\n}\n`\n\nexport const VERIFY_SETTLEMENT_VOUCHER = `\nmutation verifySettelement {\n verify_settlement_voucher(|placeholder|){\n error{type, message}\n settlement{\n id\n }\n }\n}\n`\n\nexport const CANCEL_SETTLEMENT_VOUCHER = `\nmutation verifySettelement {\n cancel_settlement_voucher(|placeholder|){\n error{type, message}\n settlement{\n id\n }\n }\n}\n`\n\nexport const PRODUCT_CREATION_SPECS = `\nquery {\n product_creation_specs(|placeholder|){\n error{type, message}\n product_specs_by_brand{\n brand\n specs_by_importance{\n importance\n product_specs{\n id\n spec_field\n spec_values\n }\n }\n }\n }\n}\n`\n\n\n\n\nexport {\n ACCOUNTS,\n ADD_CATALOGUE_PRODUCT_TO_CLAIM,\n ADD_MANUAL_PRODUCT_TO_CLAIM,\n ADD_REPLACEMENT,\n ALL_SUPPLIERS,\n APPROVE_POST_TENDER_ITEM,\n CONVERT_MANUAL_ITEM_TO_CATALOGUE_ITEM,\n CATEGORIES,\n CLAIM_COMMENT,\n CLAIMS_MINIMAL,\n CLAIMS_SEARCH,\n CLAIMS_WITH_ITEMS,\n CREATE_ORGANISATION,\n CREATE_USER,\n CREATE_CLAIM,\n SNOOZE_CLAIM,\n CREATE_MANUAL_QUOTE,\n CREATE_MANUAL_REPLACEMENT,\n SUPPLIER_SET_PREFERRED_REPLACEMENT,\n CREATE_SETTLEMENT,\n CREATE_CLAIM_COMMENT,\n CURRENT_USER,\n USER_FULL,\n CHANGE_PASSWORD,\n ROLES,\n DEACTIVATE_USER,\n DEACTIVATE_ORGANISATION,\n ACTIVATE_ORGANISATION,\n DEACTIVATE_ACCOUNT,\n ACTIVATE_ACCOUNT,\n DELETE_CLAIM,\n DELETE_ITEM,\n DELETE_MANUAL_QUOTE,\n DELETE_TENDER,\n DISMISS_ALL_PENDING_TENDER,\n DISMISS_TENDER,\n FILTER_SEARCH,\n GENERATE_REPORT_DOWNLOAD_URL,\n HAI_TASK_SEARCH,\n HAI_CHANGE_TASK,\n DELETE_HAI_TASK,\n HAI_ASSIGN_TASK,\n ORGANISATIONS,\n ORGANISATION_OPTIONS,\n QUANTIFY_CLAIM,\n SEARCH_LOCALITIES,\n REGIONS,\n SETTLE,\n SETTLEMENTS,\n SUPPLIER_DELIVERY_COST,\n UPDATE_ITEM_CLAIMANT_QUOTE,\n UPDATE_ITEM_QUANTITY,\n UPDATE_MANUAL_ITEM,\n UPDATE_QUOTE_PRICE,\n UPDATE_SETTLEMENT_VOUCHER_CODE,\n UPDATE_ORGANISATION,\n UPDATE_USER,\n UPLOAD_SNAPPY_LOGO,\n VERIFY_ALL_MANUAL_ITEMS,\n VERIFY_MANUAL_ITEM,\n GENERATE_AI_PROTO,\n GENERATE_SUPPLIER_DELIVERY_COSTS_SHEETS,\n GENERATE_SUPPLIER_QUOTES_CATALOGUES,\n LOAD_SUPPLIER_DELIVERY_COST_SHEET,\n LOAD_SUPPLIER_QUOTES_CATALOGUE_SHEET,\n IMPORT_SUPPLIER_QUOTES_CATALOGUE_WORKBOOK,\n IMPORT_SUPPLIER_DELIVERY_COST_WORKBOOK,\n UPLOAD_FILE,\n GENERATE_CLAIMS_REPORTS,\n GENERATE_SUPPLIER_CLAIMS_REPORT,\n UPDATE_PROTO_PRODUCT_MANUALLY,\n};\n\n","export const OrganisationTypes = [\n {value: 'ROOT', label: 'Super user'},\n {value: 'ADMINISTRATOR', label: 'Administrator'},\n {value: 'SUPPLIER', label: 'Supplier'},\n {value: 'INSURER', label: 'Insurer'}\n];\n\n// TODO technical debt: refactor to use the CountryMetaData below\nexport const CountryTypes = [\n {value: 'NL', label: 'Netherlands', currency: '€'},\n {value: 'ZA', label: 'South Africa', currency: 'R'},\n {value: 'AU', label: 'Australia', currency: '$'},\n {value: 'US', label: 'U.S.A', currency: '$'},\n {value: 'BE', label: 'Belgium', currency: '€'},\n {value: 'GB', label: 'Great Britain', currency: '£'}\n];\n\nexport const CountryMetaData = [\n {code: 'NL', name: 'Netherlands', currencySymbol: '€', currencyCode: 'EUR'},\n {code: 'ZA', name: 'South Africa', currencySymbol: 'R', currencyCode: 'ZAR'},\n {code: 'AU', name: 'Australia', currencySymbol: '$', currencyCode: 'AUD'},\n {code: 'US', name: 'U.S.A', currencySymbol: '$', currencyCode: 'USD'},\n {code: 'BE', name: 'Belgium', currencySymbol: '€', currencyCode: 'EUR'},\n {code: 'GB', name: 'Great Britain', currencySymbol: '£', currencyCode: 'GBP'}\n];\n","/*\n * Helper functions to be used throughout the project\n */\n\nimport moment from \"moment-timezone\";\nimport {CountryMetaData, CountryTypes} from \"./constants\";\n\nexport const alertError = (setAlertOpen, setAlertOptions, error, callback = null) => {\n\n setAlertOptions({\n 'iconType': 'error',\n 'heading': error['type'],\n 'message': error['message'],\n 'onClose': callback\n });\n setAlertOpen(true);\n};\n\nexport function classNames(...classes){\n return classes.filter(Boolean).join(' ');\n}\n\nexport const calculateProperties = (product) => {\n\n let properties = [];\n\n if(isEmpty(product)) return '';\n\n if (product['date_released']) {\n let year = product['date_released']?.split('-')[0];\n properties.push(year);\n }\n\n let productProperties = product.properties || [];\n\n let topProperties = productProperties.slice(0, 5);\n\n topProperties.forEach((property) => {\n if (property['name'] !== 'brand') {\n\n if (property['value'] === 'Yes') {\n properties.push(property['display_name']);\n } else if (property['value'] !== 'No' && property['value'] !== 'Sometimes') {\n properties.push(property['value']);\n }\n }\n });\n\n return properties.join(' | ');\n\n};\n\nexport const compareArrays = (arrayOne, arrayTwo) => {\n\n if (arrayOne === null || arrayTwo === null) {\n return false;\n }\n\n if (arrayOne.length !== arrayTwo.length) {\n return false;\n }\n\n for (const value of arrayOne) {\n\n if (!arrayTwo.includes(value)) {\n return false;\n }\n }\n\n return true;\n\n};\n\nexport const compareDicts = (dictOne, dictTwo) => {\n\n if (dictOne === null || dictTwo === null) {\n return false;\n }\n\n if (Object.keys(dictOne).length !== Object.keys(dictTwo).length) {\n return false;\n }\n\n for (const [key, value] of Object.entries(dictOne)) {\n\n if (dictTwo[key] !== value) {\n return false;\n }\n }\n\n return true;\n\n};\n\nexport const subArray = (arr, start, end) => {\n if (!end) {\n end = -1;\n }\n return arr.slice(start, arr.length + 1 - (end * -1));\n};\n\nexport const isEmpty = (obj) => {\n\n if (!obj) return true;\n\n let propertyNames = Object.getOwnPropertyNames(obj);\n\n if (propertyNames.length === 0) {\n return true;\n }\n\n if (propertyNames.length === 1 && propertyNames[0] === 'length') {\n return true;\n }\n\n return false;\n};\n\nexport const searchParamsToDict = (searchParams) => {\n\n let query = {};\n\n for (const [key, value] of searchParams) {\n query[key] = value;\n }\n\n // If query is empty, return null\n if (Object.getOwnPropertyNames(query).length === 0) {\n return null;\n }\n\n return query;\n\n};\n\nexport function escapeDoubleQuotes(text){\n // \" --> \\\"\n // convert all \" double quotes into escaped double quotes \\\"\n // the double slash \\\\ is because the \\ character is a special character,\n // so in order to add a literal single slash, we must have 2 consecutive slashes\n\n if(!text) return text;\n\n return text.replaceAll('\"', '\\\\\"');\n}\n\nexport function capitalizeFirst(str){\n return str.toString().charAt(0).toUpperCase() + str.toString().slice(1);\n}\n\nexport function formatAsTitle(textToFormat){\n\n // e.g: diagonal_display_length --> Diagonal display length\n // e.g: ACTION_SPORTS_CAMERAS --> Action sports cameras\n\n if (!textToFormat) return '';\n if(typeof textToFormat !== 'string') return '';\n\n let text = textToFormat;\n\n text = text.toLowerCase();\n\n // replace underscores _ with spaces\n text = text.replaceAll('_', ' ');\n\n // capitalize the first letter\n text = text.charAt(0).toUpperCase() + text.slice(1);\n\n return text;\n\n}\n\nexport function allQuotesInItem(item){\n /** This function returns all the quotes available for an item\n * All the quotes are extracted from the \"supplier_panel\" and \"possible_replacements\" keys in the \"item\" object\n * Does not include any null quotes or products */\n\n let allQuotes = [\n // { quote, supplier, product }\n ];\n\n\n // Retrieve all the quotes inside the \"possible replacements\" field\n if (item.possible_replacements) {\n let quotesInPossibleReplacements = item.possible_replacements.filter(replacementData => {\n let quote = replacementData.quote;\n let product = replacementData.product;\n let supplier = replacementData.quote?.supplier || null;\n\n if (quote && product && supplier) {\n return {\n 'quote': quote,\n 'product': product,\n 'supplier': supplier\n };\n }\n });\n allQuotes.push(quotesInPossibleReplacements);\n }\n\n\n // Retrieve all the quotes inside the \"supplier panel\" field\n // The quote and product objects can be null in the recommended_placement field in the supplier_panel. Check and skip these\n if (item.supplier_panel) {\n let quotesInSupplierPanel = item.supplier_panel.filter(supplier_with_quote_and_product => {\n let quote = supplier_with_quote_and_product.recommended_replacement.quote;\n let product = supplier_with_quote_and_product.recommended_replacement.product;\n let supplier = supplier_with_quote_and_product;\n\n if (quote && product && supplier) {\n return {\n 'quote': quote,\n 'product': product,\n 'supplier': supplier\n };\n }\n });\n allQuotes.push(quotesInSupplierPanel);\n }\n\n // Remove duplicate quotes\n let quotes = [];\n for (const quoteSupplierProductData of allQuotes) {\n let alreadyAdded = quotes.find(e => e.quote?.id === quoteSupplierProductData.quote?.id);\n alreadyAdded = !isEmpty(alreadyAdded); // if its empty, we want false. isEmpty will return true\n if (!alreadyAdded) {\n quotes.push(quoteSupplierProductData);\n }\n }\n\n return quotes;\n\n}\n\nexport function allReplacementDataForItem(item){\n\n // replacement data = a quote, and product\n\n /** The structure of the \"item\" payload\n Item :\n meta info - category, date, is_manual, etc...\n product: the original proto/manaul product added in the ClaimItemSearch page\n replacement: the final selected replacement data (quote product) for this item\n supplier_pannel: this holds the \"recommended replacement data\" for each supplier, for each item\n possible_replacements: a list of \"recommended replacement (quote product)\" but with multiple quotes, 1 per supplier\n */\n\n // NO NULL - a replacement data should contain a valid quote, product, and supplier\n\n let allReplacements_QuoteProduct = [\n // {\n // 'quote': {...},\n // 'product': {...},\n // 'supplier': {...}\n // },\n ];\n\n // get all quotes from possible replacements\n let possibleReplacements = item.possible_replacements;\n\n for (let replacementData of possibleReplacements) {\n // replacementData: { product:{...}, quotes:[] }\n let product = replacementData.product;\n let allQuotesForProduct = replacementData.quotes;\n\n for (let quote of allQuotesForProduct) {\n\n let _replacement = {\n 'quote': quote,\n 'product': product,\n 'supplier': quote.supplier\n };\n\n if (!isEmpty(_replacement.quote) && !isEmpty(_replacement.product) && !isEmpty(_replacement.supplier)) {\n allReplacements_QuoteProduct.push(_replacement);\n }\n\n }\n\n }\n\n return allReplacements_QuoteProduct;\n\n}\n\nexport function getBase64(file, onSuccess, onError){\n // Create a base64 formatted string from a file (presumably from an input element)\n\n let reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = function (){\n let base64 = reader.result;\n onSuccess(base64);\n };\n reader.onerror = function (e){\n console.log('Error: Failed to parse a base64 string from file - ', e);\n onError({\n 'type': 'Base64 Failed',\n 'message': 'Failed to parse a base64 string from the input file'\n });\n };\n}\n\n// TODO can this be changed to use time.js localMomentInstanceFromUTC\nexport function toLocalTime(utcTimeString, customFormat){\n // utcTime: 2021-05-28T13:30:00Z\n // returns: 2021-05-28T13:30:00+10:00\n\n const isoFormat = 'YYYY-MM-DDTHH:mm:ss.SSS[Z]';\n\n let localTime = moment.utc(utcTimeString, 'YYYY-MM-DDTHH:mm:ss.SSS[Z]').tz(moment.tz.guess());\n\n if(customFormat){\n return localTime.format(customFormat);\n }\n\n // \"2023-09-05 14:55:39 KST\"\n return localTime.format('YYYY-MM-DD HH:mm:ss z')\n\n}\n\nexport const consoleColors = {\n // Standard Colors\n 'red': (_text) => `\\x1b[31m${_text}\\x1b[0m`,\n 'green': (_text) => `\\x1b[32m${_text}\\x1b[0m`,\n 'yellow': (_text) => `\\x1b[33m${_text}\\x1b[0m`,\n 'blue': (_text) => `\\x1b[34m${_text}\\x1b[0m`,\n 'magenta': (_text) => `\\x1b[35m${_text}\\x1b[0m`,\n 'cyan': (_text) => `\\x1b[36m${_text}\\x1b[0m`,\n 'white': (_text) => `\\x1b[37m${_text}\\x1b[0m`,\n\n // Bright Colors\n 'brightRed': (_text) => `\\x1b[91m${_text}\\x1b[0m`,\n 'brightGreen': (_text) => `\\x1b[92m${_text}\\x1b[0m`,\n 'brightYellow': (_text) => `\\x1b[93m${_text}\\x1b[0m`,\n 'brightBlue': (_text) => `\\x1b[94m${_text}\\x1b[0m`,\n 'brightMagenta': (_text) => `\\x1b[95m${_text}\\x1b[0m`,\n 'brightCyan': (_text) => `\\x1b[96m${_text}\\x1b[0m`,\n 'brightWhite': (_text) => `\\x1b[97m${_text}\\x1b[0m`,\n\n // Background Colors\n 'bgBlack': (_text) => `\\x1b[40m${_text}\\x1b[0m`,\n 'bgRed': (_text) => `\\x1b[41m${_text}\\x1b[0m`,\n 'bgGreen': (_text) => `\\x1b[42m${_text}\\x1b[0m`,\n 'bgYellow': (_text) => `\\x1b[43m${_text}\\x1b[0m`,\n 'bgBlue': (_text) => `\\x1b[44m${_text}\\x1b[0m`,\n 'bgMagenta': (_text) => `\\x1b[45m${_text}\\x1b[0m`,\n 'bgCyan': (_text) => `\\x1b[46m${_text}\\x1b[0m`,\n 'bgWhite': (_text) => `\\x1b[47m${_text}\\x1b[0m`,\n\n // Bright Background Colors\n 'bgBrightBlack': (_text) => `\\x1b[100m${_text}\\x1b[0m`, // Gray\n 'bgBrightRed': (_text) => `\\x1b[101m${_text}\\x1b[0m`,\n 'bgBrightGreen': (_text) => `\\x1b[102m${_text}\\x1b[0m`,\n 'bgBrightYellow': (_text) => `\\x1b[103m${_text}\\x1b[0m`,\n 'bgBrightBlue': (_text) => `\\x1b[104m${_text}\\x1b[0m`,\n 'bgBrightMagenta': (_text) => `\\x1b[105m${_text}\\x1b[0m`,\n 'bgBrightCyan': (_text) => `\\x1b[106m${_text}\\x1b[0m`,\n 'bgBrightWhite': (_text) => `\\x1b[107m${_text}\\x1b[0m`,\n\n // Text Styles\n 'bold': (_text) => `\\x1b[1m${_text}\\x1b[0m`,\n 'dim': (_text) => `\\x1b[2m${_text}\\x1b[0m`,\n 'italic': (_text) => `\\x1b[3m${_text}\\x1b[0m`,\n 'underline': (_text) => `\\x1b[4m${_text}\\x1b[0m`,\n 'blink': (_text) => `\\x1b[5m${_text}\\x1b[0m`,\n 'reverse': (_text) => `\\x1b[7m${_text}\\x1b[0m`, // Swap foreground & background\n 'hidden': (_text) => `\\x1b[8m${_text}\\x1b[0m`, // Hidden text\n 'strikethrough': (_text) => `\\x1b[9m${_text}\\x1b[0m`,\n\n // Reset\n 'reset': (_text) => `\\x1b[0m${_text}`\n};\n\n// Function to combine multiple styles\nexport const combineStyles = (text, ...styles) => {\n return styles.reduce((acc, style) => consoleColors[style] ? consoleColors[style](acc) : acc, text);\n};\n\n/** Example usage of multiple styles\nconsole.log(combineStyles('Hello, world!', 'brightRed', 'bgYellow', 'bold', 'underline')); */\n\nexport function currencySymbol(claim){\n /* This function will attempt to return a currency symbol\n * via multiple methods\n * 1. claim.organisation.info.currency_symbol\n * 2. claim.organisation.info.currency (3 letter code)\n * 3. claim.organisation.info.country (2 letter code)\n * 4. claim.country (2 letter code)\n * */\n\n let symbol = ''\n\n let currencySymbol = null;\n if(!claim?.organisation?.info) return '';\n\n // 1. claim.organisation.info.currency_symbol\n if(claim.organisation?.info?.currency_symbol)\n symbol = claim.organisation.info.currency_symbol;\n\n // 2. claim.organisation.info.currency (3 letter code)\n currencySymbol = CountryMetaData.find(country => country.currencyCode === claim.organisation.info.currency)?.currency;\n if(currencySymbol)\n symbol = currencySymbol;\n\n // 3. claim.organisation.info.country (2 letter code)\n currencySymbol = CountryMetaData.find(country => country.code === claim.organisation.info.country)?.currency;\n if(currencySymbol)\n symbol = currencySymbol;\n\n // 4. claim.country (2 letter code)\n currencySymbol = CountryMetaData.find(country => country.code === claim.country)?.currency;\n if(currencySymbol)\n symbol = currencySymbol;\n\n return symbol || '';\n}\n\nexport function sortClaimItems(claim){\n /* Sort the items in the supplied claim object */\n\n if(!claim?.items) return claim;\n\n try {\n claim.items.sort((a, b) => new Date(a[\"date_created\"]) - new Date(b[\"date_created\"]));\n } catch (e) {\n console.error(\"Error while sorting claim items.\");\n console.error(e);\n }\n\n return claim;\n}","const minute_ratelimit = 400;\nconst hour_ratelimit = 10000;\n\nexport default function ratelimited() {\n\n initialise();\n\n // Increase count\n sessionSet('rl_min', sessionGet('rl_min') + 1);\n sessionSet('rl_hour', sessionGet('rl_hour') + 1);\n\n // Check for runaway api calls\n // let totalHits = sessionGet('rl_min') + sessionGet('rl_hour');\n // if (totalHits > 1000) {\n // console.error(\"Runaway API calls detected - redirecting\");\n // // alert(\"Error: Runaway API calls detected\")\n // window.location.href = '/';\n // return true;\n // }\n\n // check if minute ratelimit is exceeded\n let count = parseInt(sessionGet('rl_min'));\n if (count > minute_ratelimit) {\n console.error(\"Ratelimited: m\");\n alertError(\"Too many request - Please wait a minute before continuing\");\n return true;\n }\n\n // check if hour ratelimit is exceeded\n count = parseInt(sessionGet('rl_hour'));\n if (count > hour_ratelimit) {\n console.error(\"Ratelimited: h\");\n alertError(\"Too many request - Please try again after an hour\");\n return true;\n }\n\n return false;\n}\n\nfunction sessionGet(key) {\n return parseInt(sessionStorage.getItem(key));\n}\n\nfunction sessionSet(key, v) {\n sessionStorage.setItem(key, v.toString());\n}\n\nfunction initialise() {\n /** set up the intervals to clear the count every minute and hour */\n\n if (!window.minuteInterval || !window.hourInterval) {\n window.minuteInterval = setInterval(() => {\n sessionStorage.setItem('rl_min', '0');\n }, 1000 * 60);\n\n window.hourInterval = setInterval(() => {\n sessionStorage.setItem('rl_hour', '0');\n }, 1000 * 60 * 60);\n }\n\n if (!sessionGet('rl_min')) {\n sessionSet('rl_min', '0');\n }\n if (!sessionGet('rl_hour')) {\n sessionSet('rl_hour', '0');\n }\n\n}\n\nlet alertTimeout = null;\nfunction alertError(message) {\n // TODO change to new modal\n // window.base.alertModal.onError(\"Too many request\", \"Please wait a minute before continuing\");\n\n // do not alert or redirect if the ratelimited page is open\n if(window.location.href.includes(\"ratelimited\")){\n return\n }\n\n window.clearTimeout(alertTimeout)\n alertTimeout = setTimeout(()=>{\n window.location.href = '/ratelimited'\n // alert(message)\n window.clearTimeout(alertTimeout)\n }, 1000)\n\n}\n\n","import {\n ACCOUNTS,\n ADD_CATALOGUE_PRODUCT_TO_CLAIM,\n ADD_MANUAL_PRODUCT_TO_CLAIM,\n ADD_REPLACEMENT,\n ALL_SUPPLIERS,\n APPROVE_POST_TENDER_ITEM,\n CONVERT_MANUAL_ITEM_TO_CATALOGUE_ITEM,\n CATEGORIES,\n CLAIM_COMMENT,\n CLAIMS_SEARCH,\n CLAIMS_WITH_ITEMS,\n CREATE_CLAIM,\n CREATE_USER,\n CREATE_MANUAL_QUOTE,\n CREATE_MANUAL_REPLACEMENT,\n CREATE_SETTLEMENT,\n CREATE_CLAIM_COMMENT,\n CURRENT_USER,\n CHANGE_PASSWORD,\n DELETE_CLAIM,\n DELETE_ITEM,\n DELETE_MANUAL_QUOTE,\n DELETE_TENDER,\n DISMISS_ALL_PENDING_TENDER,\n DISMISS_TENDER,\n FILTER_SEARCH,\n GENERATE_REPORT_DOWNLOAD_URL,\n HAI_TASK_SEARCH,\n HAI_CHANGE_TASK,\n HAI_ASSIGN_TASK,\n ORGANISATIONS,\n QUANTIFY_CLAIM,\n SEARCH_LOCALITIES,\n REGIONS,\n SETTLE,\n SETTLEMENTS,\n SUPPLIER_DELIVERY_COST,\n UPDATE_ITEM_CLAIMANT_QUOTE,\n UPDATE_ITEM_QUANTITY,\n UPDATE_MANUAL_ITEM,\n UPDATE_QUOTE_PRICE,\n UPDATE_SETTLEMENT_VOUCHER_CODE,\n VERIFY_ALL_MANUAL_ITEMS,\n VERIFY_MANUAL_ITEM,\n ORGANISATION_OPTIONS,\n UPDATE_ORGANISATION,\n USER_FULL,\n CLAIMS_MINIMAL,\n CREATE_ORGANISATION,\n UPDATE_USER,\n SUPPLIER_SET_PREFERRED_REPLACEMENT,\n ROLES,\n DEACTIVATE_USER,\n DEACTIVATE_ORGANISATION,\n SNOOZE_CLAIM,\n DELETE_HAI_TASK,\n GENERATE_SUPPLIER_QUOTES_CATALOGUES,\n UPLOAD_FILE,\n GENERATE_SUPPLIER_DELIVERY_COSTS_SHEETS,\n LOAD_SUPPLIER_DELIVERY_COST_SHEET,\n LOAD_SUPPLIER_QUOTES_CATALOGUE_SHEET,\n GENERATE_CLAIMS_REPORTS,\n GENERATE_AI_PROTO,\n ACTIVATE_ACCOUNT,\n DEACTIVATE_ACCOUNT,\n CREATE_ACCOUNT,\n UPDATE_PROTO_PRODUCT_MANUALLY,\n ACTIVATE_ORGANISATION,\n IMPORT_SUPPLIER_QUOTES_CATALOGUE_WORKBOOK,\n GENERATE_SUPPLIER_CLAIMS_REPORT,\n IMPORT_SUPPLIER_DELIVERY_COST_WORKBOOK,\n PROTO_PRODUCT_PROPERTIES,\n DELETE_SETTLEMENT,\n VERIFY_SETTLEMENT_VOUCHER, CANCEL_SETTLEMENT_VOUCHER, PRODUCT_CREATION_SPECS, PRODUCT_PROPERTIES\n} from './graphqlTemplates';\n\nimport {compareArrays, escapeDoubleQuotes, getBase64, sortClaimItems} from './helpers.js';\nimport ratelimited from \"./ratelimit\";\n\n\n// Base functions\n\nexport function getRequest(relativeUrl, successCallback, errorCallback, headers = null) {\n\n apiRequest('GET', relativeUrl, successCallback, errorCallback, headers);\n}\n\nexport function postRequest(relativeUrl, body, successCallback, errorCallback, headers = null) {\n\n apiRequest('POST', relativeUrl, successCallback, errorCallback, headers, body);\n}\n\nfunction graphqlRequest(query, successCallback, errorCallback) {\n\n let headers = {'Content-Type': 'application/json'};\n let body = JSON.stringify({'query': query});\n postRequest('graphql', body, successCallback, errorCallback, headers);\n\n // Developer modal\n if (window.onGraphRequest) window.onGraphRequest(query);\n}\n\nasync function apiRequest(method, relativeUrl, successCallback, errorCallback, headers = null, body = null) {\n\n // Check if this browser is ratelimited\n if (ratelimited()) return;\n\n // RECAPTCHA - awaiting backend support\n /** let recaptchaIsValid = await passedRecaptcha()\n if(!recaptchaIsValid) return console.error('RECAPTCHA SCORE IS TOO LOW')\n */\n\n let url = process.env.REACT_APP_CORE_API_URL + relativeUrl;\n\n let options = {\n 'method': method, 'credentials': 'include',\n };\n\n if (method === 'POST') {\n options['body'] = body;\n }\n\n if (headers != null) {\n options['headers'] = headers;\n }\n\n fetch(url, options)\n\n /** DEVELOPMENT Artificial delay to replicate production environment */\n // .then(async (response) => { if (window.location.hostname === 'localhost') await new Promise(r => setTimeout(r, 5000)); return response; })\n\n .then((response) => {\n\n if (!response.ok) {\n\n let fullPath = window.location.pathname\n\n /** Some paths do not require authentication. if a 401 is received whilst on these pages, do not redirect */\n // We use this filter method for partial/substring checking. \"a\" in \"/a\" = true\n let publicUnauthenticatedPath = ['/login', '/logout', '/password-reset', '/request-password-reset', '/ratelimited'].filter(path => path.includes(fullPath))\n\n if (response.status === 401) {\n if (publicUnauthenticatedPath) {\n // don't do anything\n } else {\n window.location.href = '/logout';\n return;\n }\n\n }\n\n if (response.status === 400 && relativeUrl === 'graphql') {\n return response.json();\n }\n\n throw new Error(response.status + \" \" + response.statusText);\n }\n\n let contentType = response.headers.get('Content-Type');\n\n if (contentType.includes('application/json')) {\n return response.json();\n }\n\n return response.text();\n })\n .then((data) => {\n\n if (typeof data === 'object') {\n // Check if a GraphQL syntax error occurred\n\n if ('errors' in data) {\n\n errorCallback({\n 'type': 'Invalid input', 'message': data['errors'][0]['message']\n });\n return;\n }\n\n // Extract the data from the inner dictionary\n data = Object.values(data['data'])[0];\n\n // Check if an API error occurred\n if ('error' in data && data['error'] != null) {\n let type = data['error']['type'].replaceAll('_', ' ').toLowerCase();\n let message = data['error']['message'];\n\n errorCallback({\n 'type': type, 'message': message\n });\n\n return;\n }\n }\n\n successCallback(data);\n })\n .catch((error) => {\n // TODO state loop if ERR_CONNECTION_REFUSED\n\n console.error(\"Local Error Processing Response:\", error);\n errorCallback({\n 'type': 'Local Error Processing Response:',\n 'message': 'Processing the response from the API has failed\\n ' + String(error),\n });\n })\n\n}\n\n\nlet pageTracking = {}\nlet path = ''\n\nfunction logQueries(body) {\n /** This helper function will track all the queries and mutations made on a page and print the results to the developer console */\n\n if (!body) return\n\n if (path != window.location.pathname) {\n path = window.location.pathname;\n pageTracking = {}\n }\n\n let queryName = body.substring(23, 50);\n // let queryName = body.substring(23, 200);\n\n let braceIndex = queryName.indexOf('(')\n if (braceIndex === -1) braceIndex = queryName.indexOf('{')\n queryName = queryName.substring(0, braceIndex);\n\n queryName = queryName.trim()\n\n if (queryName in pageTracking) pageTracking[queryName]++;\n else pageTracking[queryName] = 1;\n\n console.log(pageTracking);\n\n if (queryName === \"current_user\") {\n // console.trace();\n }\n\n}\n\n\nlet recaptchaPassed = false;\nlet resetRecaptchaTimeout = null;\n\nasync function passedRecaptcha(onSuccess, onFail) {\n\n if (recaptchaPassed) {\n return recaptchaPassed\n }\n\n let token;\n window.grecaptcha.ready(function () {\n window.grecaptcha.execute(process.env.REACT_APP_RECAPTCHA_SITE_KEY, {action: 'submit'}).then(_token => token = _token).catch(err => onFail());\n });\n\n const rawResponse = await fetch('https://www.google.com/recaptcha/api/siteverify', {\n method: 'POST',\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({secret: process.env.REACT_APP_RECAPTCHA_SECRET_KEY, response: token})\n });\n const content = await rawResponse.json();\n if (content.success) {\n if (content.score > 0.5) {\n passedRecaptcha = true;\n resetRecaptchaTimeout = setTimeout(() => passedRecaptcha = false, 1000 * 60 * 30) // 30 minutes\n return true\n } else {\n passedRecaptcha = false;\n return false\n }\n }\n\n}\n\n\n// Authentication functions\n\nfunction loginApi(username, password, successCallback, errorCallback) {\n\n let formData = new FormData();\n formData.append('email', username);\n formData.append('password', password);\n\n postRequest('login', formData, successCallback, errorCallback);\n}\n\nfunction logoutApi(successCallback, errorCallback) {\n\n getRequest('logout', successCallback, errorCallback);\n}\n\nfunction requestPasswordReset(username, successCallback, errorCallback) {\n\n let formData = new FormData();\n formData.append('email', username);\n\n postRequest('request-password-reset', formData, successCallback, errorCallback);\n}\n\nfunction resetPassword(resetToken, password, confirmPassword, successCallback, errorCallback) {\n\n let formData = new FormData();\n formData.append('password', password);\n formData.append('password_2', confirmPassword);\n\n let url = 'password-reset/' + resetToken;\n postRequest(url, formData, successCallback, errorCallback);\n}\n\n\n\n/** An object to hold timeouts, in order to debounce API calls as inputs are updated */\nconst debounceTimers = {};\nexport function debounceQuery(queryName, debounceMS, query){\n\n /** If there is an existing timer to trigger this query, clear it */\n if (debounceTimers.queryName) clearTimeout(debounceTimers.queryName);\n\n /** Add a new timer to trigger this query */\n debounceTimers.queryName = setTimeout(query, debounceMS);\n}\n\n\n// API functions\n\nfunction addCatalogueProductToClaim(claimId, productId, successCallback, errorCallback) {\n\n let queryArgs = `claim:\"${claimId}\" product:\"${productId}\"`;\n let query = ADD_CATALOGUE_PRODUCT_TO_CLAIM.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction addManualProductToClaim(args, successCallback, errorCallback) {\n\n let queryArgs = ``;\n\n if(args.claimId) queryArgs += ` claim:\"${args.claimId}\"`;\n else return errorCallback({type: 'Invalid input', message: 'claimId is required'});\n\n if(args.quantity) queryArgs += ` quantity:${args.quantity}`;\n\n if(args.categoryId) queryArgs += ` category:\"${args.categoryId}\"`;\n\n if(args.brand) queryArgs += ` brand:\"${escapeDoubleQuotes(args.brand)}\"`;\n\n if(args.description) queryArgs += ` description:\"${escapeDoubleQuotes(args.description)}\"`;\n\n if(args.modelNumber) queryArgs += ` model_number:\"${escapeDoubleQuotes(args.modelNumber)}\"`;\n\n if(args.eanCode) queryArgs += ` ean_code:\"${escapeDoubleQuotes(args.eanCode)}\"`;\n\n let query = ADD_MANUAL_PRODUCT_TO_CLAIM.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction addReplacement(itemId, productId, supplierId, reason, successCallback, errorCallback) {\n\n let queryArgs = `item:\"${itemId}\" product:\"${productId}\" reason:\"${reason}\"`\n if(supplierId) queryArgs += ` supplier_id:\"${supplierId}\"`;\n let query = ADD_REPLACEMENT.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction getAllSuppliers(successCallback, errorCallback) {\n let query = ALL_SUPPLIERS;\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction approvePostTenderItem(itemId, successCallback, errorCallback) {\n\n let queryArgs = `item:\"${itemId}\"`\n let query = APPROVE_POST_TENDER_ITEM.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction calculateReplacements(claimId, successCallback, errorCallback) {\n\n let queryArgs = `claim:\"${claimId}\"`\n let query = QUANTIFY_CLAIM.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction userChangePassword(password, successCallback, errorCallback) {\n let queryArgs = `password:\"${password}\"`\n let query = CHANGE_PASSWORD.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction createClaimComment(claimId, commentMessage, successCallback, errorCallback) {\n let queryArgs = `claim:\"${claimId}\" message:\"${escapeDoubleQuotes(commentMessage)}\"`\n let query = CREATE_CLAIM_COMMENT.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction snoozeClaim(claimId, snoozeAmount, successCallback, errorCallback) {\n\n let queryArgs = `claim:\"${claimId}\" time_to_snooze:${snoozeAmount}`\n let query = SNOOZE_CLAIM.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction convertManualItemToCatalogueItem(itemId, productId, successCallback, errorCallback) {\n\n let queryArgs = `item:\"${itemId}\" product:\"${productId}\"`;\n let query = CONVERT_MANUAL_ITEM_TO_CATALOGUE_ITEM.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction createOrganisation(args, successCallback, errorCallback) {\n\n let queryArgs = ``;\n\n if(args.name) queryArgs += ` name:\"${args.name}\"`;\n else return errorCallback({type: 'Invalid input', message: 'Name is required'});\n\n if(args.orgType) queryArgs += ` type:${args.orgType}`;\n else return errorCallback({type: 'Invalid input', message: 'Organisation Type is required'});\n\n if(args.country) queryArgs += ` country:${args.country}`;\n else return errorCallback({type: 'Invalid input', message: 'Country is required'});\n\n if(args.currencyCode) queryArgs += ` currency:${args.currencyCode}`;\n else return errorCallback({type: 'Invalid input', message: 'Currency is required'});\n\n if(args.website) queryArgs += ` website:\"${args.website}\"`;\n else return errorCallback({type: 'Invalid input', message: 'Website is required'});\n\n if(args.uniqueReferenceName) queryArgs += ` unique_reference_name:\"${args.uniqueReferenceName}\"`;\n else return errorCallback({type: 'Invalid input', message: 'Reference name is required'});\n\n let query = CREATE_ORGANISATION.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction createUser(args, successCallback, errorCallback) {\n // currently this function only supports 1 role\n // argument \"roles\" : requires a list of String id's, of roles that belong to that organisation\n let queryArgs = `has_playground_access:true `;\n\n if(args.organisationId) queryArgs += ` organisation:\"${args.organisationId}\"`;\n else return errorCallback({type: 'Invalid input', message: 'Organisation ID is required'});\n\n if(args.email) queryArgs += ` email:\"${args.email}\"`;\n else return errorCallback({type: 'Invalid input', message: 'Email is required'});\n\n if(args.first_name) queryArgs += ` first_name:\"${args.first_name}\"`;\n else return errorCallback({type: 'Invalid input', message: 'First name is required'});\n\n if(args.lastName) queryArgs += ` last_name:\"${args.lastName}\"`;\n else return errorCallback({type: 'Invalid input', message: 'Last name is required'});\n\n if(args.roleId) queryArgs += ` roles:[\"${args.roleId}\"]`;\n else return errorCallback({type: 'Invalid input', message: 'Role ID is required'});\n\n if(args.permissions) queryArgs += ` permissions:[]`;\n\n let query = CREATE_USER.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction createClaim(args, successCallback, errorCallback) {\n\n let queryArgs = ``;\n\n if(args.organisationId) queryArgs += ` organisation:\"${args.organisationId}\"`;\n else return errorCallback({type: 'Invalid input', message: 'Organisation ID is required'});\n\n if(args.ownedById) queryArgs += ` owned_by:\"${args.ownedById}\"`;\n if(args.insurerClaimNumber) queryArgs += ` insurer_claim_number:\"${escapeDoubleQuotes(args.insurerClaimNumber)}\"`;\n if (args.insurerPolicyNumber) queryArgs += ` insurer_policy_number:\"${escapeDoubleQuotes(args.insurerPolicyNumber)}\"`;\n if (args.postalCode) queryArgs += ` postal_code:\"${args.postalCode}\"`;\n if (args.locality) queryArgs += ` locality:\"${args.locality}\"`;\n if (args.voucherClaim) queryArgs += ` is_voucher_claim:true`;\n\n if (args.ccEmailSets && args.ccEmailSets.length > 0) {\n const ccEmailsFormatted = args.ccEmailSets\n .map(set => `{first_name: \"${escapeDoubleQuotes(set.firstName)}\", last_name: \"${escapeDoubleQuotes(set.lastName)}\", email: \"${escapeDoubleQuotes(set.email)}\"}`)\n .join(\", \");\n queryArgs += ` cc_recipients: [${ccEmailsFormatted}]`;\n }\n\n let query = CREATE_CLAIM.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction createManualQuote(productId, supplierId, reason, price, validityPeriod, itemId, successCallback, errorCallback) {\n\n let queryArgs = `product:\"${productId}\" supplier:\"${supplierId}\" reason:\"${escapeDoubleQuotes(reason)}\" price:${price} validity_period:${validityPeriod} item_id:\"${itemId}\"`;\n let query = CREATE_MANUAL_QUOTE.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction createManualReplacement(args, successCallback, errorCallback) {\n\n let queryArgs = `item:\"${args.itemId}\" reason:\"${escapeDoubleQuotes(args.reason.trim())}\"`;\n\n if (args.brand !== '' && args.brand !== null) {\n queryArgs += ` brand:\"${escapeDoubleQuotes(args.brand.trim())}\"`;\n }\n\n if (args.description !== '' && args.description !== null) {\n queryArgs += ` description:\"${escapeDoubleQuotes(args.description.trim())}\"`;\n }\n\n if (args.modelNumber !== '' && args.modelNumber !== null) {\n queryArgs += ` model_number:\"${escapeDoubleQuotes(args.modelNumber.trim())}\"`;\n }\n\n if (args.eanCode !== '' && args.eanCode !== null) {\n queryArgs += ` ean_code:\"${escapeDoubleQuotes(args.eanCode.trim())}\"`;\n }\n\n let query = CREATE_MANUAL_REPLACEMENT.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction setPreferredReplacement(args, successCallback, errorCallback) {\n\n let queryArgs = `\n item_id:\"${args.itemId}\" \n product_id:\"${args.productId}\" \n supplier_id:\"${args.supplierId}\" \n new_quote_price:${args.price} \n allow_deapi_update:${args.updateDeapi} \n validity_period:${args.validity} \n reason:\"${args.reason}\"\n `;\n\n let query = SUPPLIER_SET_PREFERRED_REPLACEMENT.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction createSettlement(args, successCallback, errorCallback) {\n\n let queryArgs = `\n claim:\"${args.claimId}\" method:${args.method} supplier:\"${args.supplierId}\" value:${args.value} excess:${args.excess}\n last_name:\"${args.lastName}\" phone_number:\"${args.phoneNumber}\" settle: true \n `;\n\n if (args.itemIds) {\n queryArgs += ` items:[\"${args.itemIds.join('\",\"')}\"]`;\n }\n\n if (args.purchase_order) {\n queryArgs += ` purchase_order:\"${args.purchase_order}\"`;\n }\n\n if (args.note) {\n queryArgs += ` note:\"${args.note}\"`\n }\n\n if (args.title) {\n queryArgs += ` title:\"${args.title}\"`;\n }\n\n if (args.firstName) {\n queryArgs += ` first_name:\"${args.firstName}\"`;\n }\n\n if (args.email) {\n queryArgs += ` email:\"${args.email}\"`;\n }\n\n // TODO uncomment once implemented on the backend\n // if (args.delivery_fee) {\n // queryArgs += ` delivery_fee:\"${args.delivery_fee}\"`;\n // }\n\n let query = CREATE_SETTLEMENT.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction deactivateUser(userId, reason, successCallback, errorCallback) {\n\n let queryArgs = `user:\"${userId}\"`;\n\n if(reason) queryArgs += ` reason:\"${reason}\"`;\n\n let query = DEACTIVATE_USER.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction deactivateOrganisation(organisationId, successCallback, errorCallback) {\n\n let queryArgs = `organisation:\"${organisationId}\" `;\n let query = DEACTIVATE_ORGANISATION.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction activateOrganisation(organisationId, successCallback, errorCallback) {\n\n let queryArgs = `organisation:\"${organisationId}\" `;\n let query = ACTIVATE_ORGANISATION.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction activateAccount(accountId, successCallback, errorCallback) {\n\n let queryArgs = `account:\"${accountId}\" `;\n let query = ACTIVATE_ACCOUNT.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction deactivateAccount(accountId, successCallback, errorCallback) {\n\n let queryArgs = `account:\"${accountId}\" `;\n let query = DEACTIVATE_ACCOUNT.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction deleteClaim(claimId, successCallback, errorCallback) {\n\n let queryArgs = `claim:\"${claimId}\"`;\n let query = DELETE_CLAIM.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction deleteItem(itemId, successCallback, errorCallback) {\n\n let queryArgs = `item:\"${itemId}\"`;\n let query = DELETE_ITEM.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction deleteManualQuote(itemId, quoteId, successCallback, errorCallback) {\n\n let queryArgs = `item:\"${itemId}\" quote:\"${quoteId}\"`;\n let query = DELETE_MANUAL_QUOTE.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction deleteTender(itemId, quoteId, successCallback, errorCallback) {\n\n let queryArgs = `item:\"${itemId}\" quote:\"${quoteId}\"`;\n let query = DELETE_TENDER.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction dismissAllPendingTender(claimId, successCallback, errorCallback) {\n\n let queryArgs = `claim:\"${claimId}\"`;\n\n let query = DISMISS_ALL_PENDING_TENDER.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction dismissTender(itemId, reason, supplierId, successCallback, errorCallback) {\n\n let queryArgs = `item:\"${itemId}\" reason:${reason}`;\n\n if (supplierId !== null) {\n queryArgs += ` supplier:\"${supplierId}\"`;\n }\n\n let query = DISMISS_TENDER.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction fetchClaim(claimId, setClaim, navigate, itemStatus = null) {\n\n // either change this\n // or change all fetchClaim implementations\n\n querySingleClaim(\n claimId,\n itemStatus,\n (data) => {\n\n let claim = data[\"claims\"][0];\n claim = sortClaimItems(claim);\n\n setClaim(claim);\n },\n (error) => {\n console.error(\"Error while fetching claim.\");\n console.error(error);\n }\n );\n\n}\n\nexport function queryFullClaim(claimId, successCallback, errorCallback) {\n let queryArgs = `id: \"${claimId}\"`;\n\n // let queryArgs = params.map(param => `${param.key}:${param.value},`).join('\\n');\n\n let query = CLAIMS_WITH_ITEMS.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction fetchUser(setUser, navigate) {\n\n queryCurrentUser(null, (data) => {\n setUser(data[\"user\"]);\n }, (error) => {\n console.error(error);\n });\n\n}\n\nfunction filterSearch(claimId, searchParameters, successCallback, errorCallback) {\n\n /** searchParameters = {\n inputSearchText: '',\n selectedCategory: SMARTPHONES\n selectedCategoryId: '',\n categoryFilters_NameValue: [\n {'name': 'brand', 'value': 'samsung'}\n ]\n }\n */\n\n let args = `claim:\"${claimId}\"`;\n\n if (searchParameters.inputSearchText) {\n /** args += ` query:\"${escapeDoubleQuotes(searchParameters.inputSearchText.trim())}\"`; // text input currently doesn't support \" double quotes */\n args += ` query:\"${escapeDoubleQuotes(searchParameters.inputSearchText.trim().replaceAll('\"', \"''\"))}\"`;\n }\n\n if (searchParameters.selectedCategory) args += ` category: ${searchParameters.selectedCategory}`;\n\n let filters = [];\n if(!searchParameters.categoryFilters_NameValue) searchParameters.categoryFilters_NameValue = [] // replace null with empty array\n for (const filter of searchParameters.categoryFilters_NameValue) {\n filters.push({\n \"field\": filter.name, \"value\": filter.value\n })\n }\n\n // If there are no category filters (brand, display, etc), don't add the filter_query argument\n if(filters){\n let filterStr = JSON.stringify(filters);\n filterStr = filterStr.replaceAll('\"field\"', \"field\")\n filterStr = filterStr.replaceAll('\"value\"', \"value\")\n args += ` filter_query: ${filterStr}`;\n }\n\n let searchQuery = FILTER_SEARCH.replace('|placeholder|', args);\n graphqlRequest(searchQuery, successCallback, errorCallback);\n}\n\nfunction filterSearchOLD(claimId, query, filterQuery, successCallback, errorCallback) {\n\n let args = `claim:\"${claimId}\"`;\n\n if (query !== null) {\n args += ` query:\"${query.trim().replaceAll('\"', \"''\")}\"`;\n }\n\n if (filterQuery !== null) {\n let filters = [];\n\n for (const [key, value] of Object.entries(filterQuery)) {\n filters.push({\n \"field\": key, \"value\": value\n })\n }\n\n let filterStr = JSON.stringify(filters);\n filterStr = filterStr.replaceAll('\"field\"', \"field\")\n filterStr = filterStr.replaceAll('\"value\"', \"value\")\n args += ` filter_query: ${filterStr}`;\n }\n\n let searchQuery = FILTER_SEARCH.replace('|placeholder|', args);\n graphqlRequest(searchQuery, successCallback, errorCallback);\n}\n\n// TODO this has been replaced, remove it after PROD has been updated (change: proto_product_properties -> product_properties). For now it's here for backwards compatibility\nexport function protoProductProperties(args, successCallback, errorCallback){\n\n let queryArgs = ``;\n\n if (args.productId) {\n queryArgs += ` id:\"${args.productId}\"`;\n } else return errorCallback({type: 'Invalid input', message: 'Product ID is required'});\n\n if (args.productCategory) {\n queryArgs += ` category:${args.productCategory}`;\n } else return errorCallback({type: 'Invalid input', message: 'Product Category name is required'});\n\n let query = PROTO_PRODUCT_PROPERTIES.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nexport function productProperties(args, successCallback, errorCallback){\n\n let queryArgs = ``;\n\n if (args.productId) {\n queryArgs += ` id:\"${args.productId}\"`;\n } else return errorCallback({type: 'Invalid input', message: 'Product ID is required'});\n\n if (args.productCategory) {\n queryArgs += ` category:${args.productCategory}`;\n } else return errorCallback({type: 'Invalid input', message: 'Product Category name is required'});\n\n let query = PRODUCT_PROPERTIES.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction HaiSearch(query, successCallback, errorCallback) {\n\n let args = `claim:\"64083ed4fdff0d321259120a\"`;\n\n if (query !== null) {\n args += ` query:\"${query.trim().replaceAll('\"', \"''\")}\"`;\n }\n\n let searchQuery = FILTER_SEARCH.replace('|placeholder|', args);\n graphqlRequest(searchQuery, successCallback, errorCallback);\n}\n\nfunction generateReportDownloadUrl(claimId, report_type, successCallback, errorCallback) {\n\n let queryArgs = `claim:\"${claimId}\" report_type:${report_type}`;\n let query = GENERATE_REPORT_DOWNLOAD_URL.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction haiTaskSearch(args, successCallback, errorCallback) {\n\n let queryArgs = `\n sort_by:{ field: \"date_created\", order: DESCENDING } \n result_limit:${args.resultLimit ? args.resultLimit : 100} \n page_number:${args.page ? args.page : 1}\n `;\n\n if(args.supplier) queryArgs += ` supplier_name:\"${args.supplier}\"`;\n if(args.status) queryArgs += ` status:${args.status}`;\n if(args.productCategory) queryArgs += ` category:${args.productCategory}`;\n if(args.sourceURL) queryArgs += ` source_url:\"${args.sourceURL}\"`;\n if(args.country) queryArgs += ` country_code:${args.country}`;\n if(args.taskType) queryArgs += ` task_type:${args.taskType}`;\n if(args.dateCreated) queryArgs += ` date_created:{date:\"${args.dateCreated.trim()}\", comparison:EQUALS}`;\n\n let query = HAI_TASK_SEARCH.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction haiTaskResolve(userID, taskID, resolve, dataHAI, status, successCallback, errorCallback) {\n\n let queryArgs = `user:\"${userID}\" task:\"${taskID}\" resolution:${resolve} `;\n if (dataHAI !== null) {\n queryArgs += ` data: [${dataHAI}]`;\n }\n if (status !== null) {\n queryArgs += ` status: ${status}`;\n }\n\n let query = HAI_CHANGE_TASK.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction haiTaskDelete(taskID, successCallback, errorCallback) {\n let queryArgs = `task: \"${taskID}\"`;\n let query = DELETE_HAI_TASK.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction haiAssignTask(userID, taskID, successCallback, errorCallback) {\n\n\n let queryArgs = `user:\"${userID}\" task:\"${taskID}\"`;\n let query = HAI_ASSIGN_TASK.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction updateSettlementVoucherCode(vtid, voucherCode, successCallback, errorCallback) {\n\n let queryArgs = `voucher_transaction_id:\"${vtid}\" supplier_voucher_code:\"${voucherCode}\"`;\n let query = UPDATE_SETTLEMENT_VOUCHER_CODE.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction searchLocalities(postalCode, countryCode, successCallback, errorCallback) {\n let queryArgs = `postal_code:\"${postalCode}\" country_iso_code:${countryCode}`;\n let query = SEARCH_LOCALITIES.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction addFilterBasedItem(args, successCallback, errorCallback) {\n\n let queryArgs = `\n claim:\"${args.claimId}\" \n category:\"${args.categoryId}\"\n brand:\"${escapeDoubleQuotes(args.brand)}\"\n description: \"${escapeDoubleQuotes(args.description)}\"\n `;\n\n let spec_query = 'spec_query:['\n for (const [key, value] of Object.entries(args.categoryFilters)) {\n spec_query += `{ field:\"${escapeDoubleQuotes(key)}\" value:\"${escapeDoubleQuotes(value)}\" }`\n }\n spec_query += ']'\n queryArgs += spec_query\n\n let query = ADD_MANUAL_PRODUCT_TO_CLAIM.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction addAiBasedItem(args, successCallback, errorCallback) {\n\n let queryArgs = `\n claim:\"${args.claimId}\"\n category:\"${args.categoryId}\"\n brand:\"${escapeDoubleQuotes(args.brand)}\"\n model_number:\"${escapeDoubleQuotes(args.modelNumber)}\"\n description: \"${escapeDoubleQuotes(args.description)}\"\n ai_generated: true\n `;\n\n // claimId, categoryId, quantity, brand, modelNumber, description, categoryFilters, propertySpecs\n\n // No category or filter selection is required for the AI item card to appear. Therefor categoryFilters may be blank\n // But ai_generated manual item mutation requires a spec query. So, make sure at minimum the brand is included.\n if (!('brand' in args.categoryFilters)) args.categoryFilters['brand'] = args.brand\n\n // Specification/Property query\n let spec_query = \"spec_query:[\"\n // Add the selected category filters\n for (const [key, value] of Object.entries(args.categoryFilters)) {\n spec_query += `{ field:\"${escapeDoubleQuotes(key)}\" value:\"${escapeDoubleQuotes(value)}\" }, \\n`\n }\n // Add the ai product generated properties/specs\n for (const property of args.propertySpecs) {\n spec_query += `{ field:\"${escapeDoubleQuotes(property.name)}\" value:\"${escapeDoubleQuotes(property.value)}\" }, \\n`\n }\n spec_query += ']'\n\n queryArgs += spec_query\n\n let query = ADD_MANUAL_PRODUCT_TO_CLAIM.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction searchRegions(postalCode, countryCode, successCallback, errorCallback) {\n let queryArgs = `postal_code:\"${postalCode}\" country_iso_code:${countryCode} auto_generate:true`;\n let query = REGIONS.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction queryRegions(postalCode, countryCode, successCallback, errorCallback) {\n let queryArgs = ``;\n if (postalCode) queryArgs += ` postal_code:\"${postalCode}\" `;\n if (countryCode) queryArgs += ` country_iso_code:${countryCode} `;\n\n let query = '';\n if (!queryArgs) query = REGIONS.replace('(|placeholder|)', '');\n else query = REGIONS.replace('|placeholder|', queryArgs);\n\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction queryAccounts(orgId, typeOrg, successCallback, errorCallback, status= null, adhoc_only) {\n\n let queryArgs = \"\";\n let query = \"\";\n\n if (orgId) {\n queryArgs += ` organisation: \"${orgId}\"`;\n }\n\n if (typeOrg) {\n queryArgs += ` types: [${typeOrg}]`;\n }\n\n if (status) {\n queryArgs += ` status: ${status}`;\n }\n\n if(adhoc_only) {\n queryArgs += ` is_adhoc: ${adhoc_only}`;\n }\n\n if(queryArgs)\n query = ACCOUNTS.replace('|placeholder|', queryArgs);\n\n // If there are no arguments, remove the placeholder including the brackets\n else\n query = ACCOUNTS.replace('(|placeholder|)', '');\n\n graphqlRequest(query, successCallback, errorCallback);\n}\n\n\nfunction queryCategories(categories, setCategories, errorCallback) {\n\n graphqlRequest(CATEGORIES, (data) => {\n\n let oldIds = [];\n let newIds = [];\n\n if (categories !== null) {\n for (const category of categories) {\n oldIds.push(category.id);\n }\n }\n\n for (const category of data[\"categories\"]) {\n newIds.push(category.id);\n }\n\n if (!compareArrays(oldIds, newIds)) {\n setCategories(data[\"categories\"]);\n }\n }, errorCallback);\n}\n\nfunction queryCategoriesBasic(successCallback, errorCallback) {\n let query = CATEGORIES.replace('|placeholder|', '');\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction queryClaimComment(claimID, successCallback, errorCallback) {\n\n let queryArgs = `claim:\"${claimID}\"`;\n\n let query = CLAIM_COMMENT.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n\n}\n\nfunction queryCurrentUser(actionsToCheck, successCallback, errorCallback) {\n\n let queryArgs = \"\";\n let query = \"\";\n\n if (actionsToCheck !== null) {\n queryArgs += ` actions_to_check: [${actionsToCheck.join(',')}]`;\n query = CURRENT_USER.replace('|placeholder|', queryArgs);\n } else {\n query = CURRENT_USER.replace('(|placeholder|)', queryArgs);\n }\n\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction queryUserFull(userId, successCallback, errorCallback) {\n\n let queryArgs = \"\";\n let query = \"\";\n\n queryArgs += ` id:\"${userId}\"`;\n query = USER_FULL.replace('|placeholder|', queryArgs);\n\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction queryRolesForOrganisation(organisationId, successCallback, errorCallback) {\n let queryArgs = `organisation:\"${organisationId}\"`;\n let query = ROLES.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction queryClaims(args, successCallback, errorCallback, resultLimitPerPage = 25) {\n\n let queryArgs = '';\n if (args !== null) {\n queryArgs = args;\n }\n\n queryArgs += ` result_limit:25 sort_by:[{ field: \"date_updated\" order: DESCENDING}]`\n let query = CLAIMS_SEARCH.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction queryClaimsMinimal(organisationId, successCallback, errorCallback) {\n let queryArgs = `organisation:\"${organisationId}\"`;\n let query = CLAIMS_MINIMAL.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction customGraphRequest(query, successCallback, errorCallback) {\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction queryOrganisations(types, userActionsToCheck, unique_name, successCallback, errorCallback, status = null, queryName = null) {\n\n let queryArgs = \"\";\n let query = \"\";\n\n if (unique_name !== null) {\n queryArgs += ` unique_reference_name:\"${unique_name}\"`;\n }\n\n if (types !== null) {\n queryArgs += ` types:[${types.join(\", \")}]`;\n }\n\n if (userActionsToCheck !== null) {\n queryArgs += ` user_actions_to_check:[${userActionsToCheck.join(\", \")}]`;\n }\n\n if (status !== null) {\n queryArgs += ` status: ${status}`;\n }\n\n if (queryArgs === \"\") {\n query = ORGANISATIONS.replace('(|placeholder|)', queryArgs);\n } else {\n query = ORGANISATIONS.replace('|placeholder|', queryArgs);\n }\n\n if(queryName) {\n query = query.replace('query {', `query ${queryName} {`);\n }\n\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction queryOrganisationOptions(orgId, successCallback, errorCallback) {\n\n let queryArgs = \"\";\n let query = \"\";\n\n queryArgs += `id:\"${orgId}\"`;\n\n query = ORGANISATION_OPTIONS.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction querySettlements(claimId, successCallback, errorCallback) {\n\n let queryArgs = `claim:\"${claimId}\"`;\n let query = SETTLEMENTS.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction querySingleClaim(claimId, itemStatus, successCallback, errorCallback) {\n\n let queryArgs = `id:\"${claimId}\"`;\n\n if (itemStatus !== null) {\n queryArgs += ` item_status:${itemStatus}`\n }\n let query = CLAIMS_WITH_ITEMS.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction settle(args, successCallback, errorCallback) {\n\n let queryArgs = `settlement:\"${args.settlementId}\" last_name:\"${args.lastName}\" phone_number:\"${args.phoneNumber}\"`;\n\n if (args.title) {\n queryArgs += ` title:\"${args.title}\"`;\n }\n\n if (args.firstName) {\n queryArgs += ` first_name:\"${args.firstName}\"`;\n }\n\n if (args.email) {\n queryArgs += ` email:\"${args.email}\"`;\n }\n\n let query = SETTLE.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction supplierDeliveryCost(args, successCallback, errorCallback) {\n\n let queryArgs = `supplier: \"${args.supplierId}\" category: \"${args.categoryId}\"`\n\n if (args.postalCode) {\n queryArgs += ` postal_code:\"${args.postalCode}\"`;\n }\n\n let query = SUPPLIER_DELIVERY_COST.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction updateItemClaimantQuote(itemId, price, successCallback, errorCallback) {\n\n if (!price) price = 0;\n\n let queryArgs = `item:\"${itemId}\" price:${price}`\n let query = UPDATE_ITEM_CLAIMANT_QUOTE.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction updateItemQuantity(itemId, quantity, successCallback, errorCallback) {\n\n let queryArgs = `item:\"${itemId}\" quantity:${quantity}`\n let query = UPDATE_ITEM_QUANTITY.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction updateManualItem(args, successCallback, errorCallback) {\n\n let queryArgs = `item:\"${args.itemId}\"`;\n\n if (args.categoryId) {\n queryArgs += ` category:\"${args.categoryId}\"`;\n }\n\n if (args.brand) {\n queryArgs += ` brand:\"${escapeDoubleQuotes(args.brand)}\"`;\n }\n\n if (args.description) {\n queryArgs += ` description:\"${escapeDoubleQuotes(args.description)}\"`;\n }\n\n if (args.modelNumber) {\n queryArgs += ` model_number:\"${escapeDoubleQuotes(args.modelNumber)}\"`;\n }\n\n if (args.eanCode) {\n queryArgs += ` ean_code:\"${args.eanCode}\"`;\n }\n\n if (args.quantity) {\n queryArgs += ` quantity:${args.quantity}`;\n }\n\n let query = UPDATE_MANUAL_ITEM.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction updateQuotePrice(itemId, quoteId, price, allow_deapi_update, successCallback, errorCallback) {\n\n let queryArgs = `item:\"${itemId}\" quote:\"${quoteId}\" price:${price} allow_deapi_update:${allow_deapi_update}`;\n let query = UPDATE_QUOTE_PRICE.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction updateOrganisation(queryArgs, successCallback, errorCallback) {\n\n let query = UPDATE_ORGANISATION.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction updateUser(userId, firstName, lastName, successCallback, errorCallback) {\n let queryArgs = `user:\"${userId}\" first_name:\"${firstName}\" last_name:\"${lastName}\" `\n let query = UPDATE_USER.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\n/*\nfunction uploadSnappyClaimsLogo(logoInBase64, filename, organisation, successCallback, errorCallback) {\n\n // slightly prone to errors https://stackoverflow.com/questions/1349404/generate-random-string-characters-in-javascript\n let unique_id = (Math.random() + 1).toString(36).substring(7); // this will generate 5 random characters, alphabet and digits. e.g bzcw5\n let unique_filename = 'logo_' + organisation.unique_reference_name + '_' + unique_id + filename\n\n let queryArgs = `organisation:\"${organisation.id}\" image_data:\"${logoInBase64}\" file_name:\"${filename}\"`;\n let query = UPLOAD_SNAPPY_LOGO.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n\n}\n*/\n\nfunction verifyAllManualItems(claimId, successCallback, errorCallback) {\n\n let queryArgs = `claim:\"${claimId}\"`;\n let query = VERIFY_ALL_MANUAL_ITEMS.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction verifyManualItem(itemId, outcome, successCallback, errorCallback) {\n\n let queryArgs = `item:\"${itemId}\" outcome:${outcome}`;\n let query = VERIFY_MANUAL_ITEM.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction generateSupplierDeliveryCostsSheet(supplierUniqueReferenceName, successCallback, errorCallback) {\n\n let queryArgs = `suppliers:[\"${supplierUniqueReferenceName}\"]`;\n let query = GENERATE_SUPPLIER_DELIVERY_COSTS_SHEETS.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction generateSupplierQuotesCatalogSheet(supplierUniqueReferenceName, successCallback, errorCallback) {\n\n let queryArgs = `suppliers:[\"${supplierUniqueReferenceName}\"]`;\n let query = GENERATE_SUPPLIER_QUOTES_CATALOGUES.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction loadSupplierDeliveryCostSheet(organisationId, fileUploadId, successCallback, errorCallback) {\n\n let queryArgs = `organisation:\"${organisationId}\" file_upload_id:\"${fileUploadId}\" test_mode:false `;\n let query = LOAD_SUPPLIER_DELIVERY_COST_SHEET.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction loadSupplierQuotesCatalogueSheet(organisationId, fileUploadId, successCallback, errorCallback) {\n\n let queryArgs = `organisation:\"${organisationId}\" file_upload_id:\"${fileUploadId}\"`;\n let query = LOAD_SUPPLIER_QUOTES_CATALOGUE_SHEET.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction importSupplierQuotesCatalogWorkbook(organisationId, fileUploadId, successCallback, errorCallback) {\n\n let queryArgs = `organisation:\"${organisationId}\" file_upload_id:\"${fileUploadId}\" test_mode:false `;\n let query = IMPORT_SUPPLIER_QUOTES_CATALOGUE_WORKBOOK.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction importSupplierDeliveryCostWorkbook(organisationId, fileUploadId, successCallback, errorCallback) {\n\n let queryArgs = `organisation:\"${organisationId}\" file_upload_id:\"${fileUploadId}\" test_mode:false `;\n let query = IMPORT_SUPPLIER_DELIVERY_COST_WORKBOOK.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\n\nfunction uploadFile(args, successCallback, errorCallback) {\n\n getBase64(\n args.file,\n (fileBase64) => {\n _uploadFile({...args, fileBase64}, successCallback, errorCallback)\n },\n errorCallback\n );\n}\n\nfunction _uploadFile(args, successCallback, errorCallback) {\n\n const metaStart = args.fileBase64.indexOf(';base64,') // spreadsheet.sheet;base64,UEsDB1BQ....\n args.fileBase64 = args.fileBase64.slice(metaStart + 8) // UEsDB1BQ....\n\n let queryArgs = `\n object_id:\"${args.objectId}\" \n object_type: ${args.objectType}\n file_name:\"${args.fileName}\" \n file:$file\n \n `;\n\n if(args.contentType) queryArgs += `content_type: ${args.contentType}`;\n \n let query = UPLOAD_FILE.replace('|placeholder|', queryArgs);\n\n let body = JSON.stringify({\n 'query': query,\n 'variables': {\n 'file': args.fileBase64\n }\n });\n\n let headers = {'Content-Type': 'application/json'};\n\n postRequest('graphql', body, successCallback, errorCallback, headers);\n}\n\nfunction generateClaimsReport(organisationId, fromDate, untilDate, successCallback, errorCallback) {\n\n let queryArgs = `organisation:\"${organisationId}\" start_date:\"${fromDate}\" end_date:\"${untilDate}\" `;\n let query = GENERATE_CLAIMS_REPORTS.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction generateSupplierClaimsReport(organisationId, fromDate, untilDate, successCallback, errorCallback) {\n\n let queryArgs = `organisation:\"${organisationId}\" start_date:\"${fromDate}\" end_date:\"${untilDate}\" `;\n let query = GENERATE_SUPPLIER_CLAIMS_REPORT.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction generateAiProto(category_name, brand, model_number, item_id, hai_task_id, successCallback, errorCallback) {\n\n let queryArgs = `\n category_name:\"${category_name}\" \n brand:\"${brand}\"\n ${model_number ? `model_number:\"${model_number}\"` : 'model_number:null'}\n \n ${item_id ? `item_id:\"${item_id}\"` : ''}\n ${hai_task_id ? `hai_task_id:\"${hai_task_id}\"` : ''}\n `;\n\n let query = GENERATE_AI_PROTO.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nfunction updateProtoProductManually(args, successCallback, errorCallback) {\n\n // proto_id: \"${protoId}\"\n // provider_image_url:${args.providerImageUrl ? `\"${args.providerImageUrl}\"` : 'null'}\n let queryArgs = `\n proto_id: \"${args.protoId}\"\n category: ${args.category}\n provider_image_url:\"${args.providerImageUrl || ''}\"\n date_released:\"${args.dateReleased}\"\n model_numbers: ${args.modelNumbers}\n ean_codes: ${args.eanCodes}\n `;\n\n if(args.itemId) queryArgs += ` item_id:\"${args.itemId}\"`;\n\n const format = (name) => name ? name.replaceAll(' ', '_').replaceAll('\"', '\\\\\"').toLowerCase() : '';\n\n /** EXAMPLE: data_spec:{\n brand : \"Samsung\" ,\n model_number_intermediate : \"85TU7000FX\" ,\n display_diagonal : \"15\\\"\" ,\n }*/\n queryArgs += 'data_spec:{ \\n'\n queryArgs += args.dataSpec.map((spec) => {\n if(!spec.name) return null;\n return ` ${format(spec.name)} : \"${escapeDoubleQuotes(spec.value)}\"`;\n }).filter(x=> !!x).join(', \\n');\n queryArgs += '}'\n\n let query = UPDATE_PROTO_PRODUCT_MANUALLY.replace('|placeholder|', queryArgs);\n\n console.log(query);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nexport function deleteSettlement(settlementId, successCallback, errorCallback) {\n\n let queryArgs = `settlement:\"${settlementId}\"`;\n let query = DELETE_SETTLEMENT.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nexport function verifySettlementVoucher(args, successCallback, errorCallback) {\n\n let queryArgs = `settlement:\"${args.settlement}\" claim_number:\"${args.claim_number}\" method:${args.method} beneficiary_id:\"${args.beneficiary_id}\"`;\n let query = VERIFY_SETTLEMENT_VOUCHER.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nexport function cancelSettlementVoucher(args, successCallback, errorCallback) {\n\n let queryArgs = `settlement:\"${args.settlement}\" claim_number:\"${args.claim_number}\" reason:\"${args.reason}\"`;\n let query = CANCEL_SETTLEMENT_VOUCHER.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nexport function productCreationSpecs(args, successCallback, errorCallback) {\n\n let queryArgs = `\n category:${args.category} \n ${args.brand ? `brands: [\"${args.brand}\"]` : ''} \n importance_levels:[${args.importanceLevels?.join(', ') || 'REQUIRED'}]`\n ;\n let query = PRODUCT_CREATION_SPECS.replace('|placeholder|', queryArgs);\n graphqlRequest(query, successCallback, errorCallback);\n}\n\nexport {\n customGraphRequest,\n addCatalogueProductToClaim,\n addManualProductToClaim,\n addReplacement,\n approvePostTenderItem,\n convertManualItemToCatalogueItem,\n calculateReplacements,\n userChangePassword,\n createOrganisation,\n createUser,\n createClaim,\n snoozeClaim,\n createManualQuote,\n createManualReplacement,\n setPreferredReplacement,\n createSettlement,\n createClaimComment,\n deactivateUser,\n deactivateOrganisation,\n activateOrganisation,\n activateAccount,\n deactivateAccount,\n deleteClaim,\n deleteItem,\n deleteManualQuote,\n deleteTender,\n dismissAllPendingTender,\n dismissTender,\n fetchClaim,\n fetchUser,\n filterSearch,\n generateReportDownloadUrl,\n getAllSuppliers,\n haiTaskSearch,\n haiTaskResolve,\n haiTaskDelete,\n haiAssignTask,\n HaiSearch,\n loginApi,\n logoutApi,\n queryAccounts,\n queryCategories,\n queryCategoriesBasic,\n queryClaimComment,\n queryCurrentUser,\n queryUserFull,\n queryRolesForOrganisation,\n queryClaims,\n queryClaimsMinimal,\n queryOrganisations,\n queryOrganisationOptions,\n querySettlements,\n querySingleClaim,\n requestPasswordReset,\n resetPassword,\n searchLocalities,\n searchRegions,\n queryRegions,\n settle,\n addFilterBasedItem,\n addAiBasedItem,\n supplierDeliveryCost,\n updateItemClaimantQuote,\n updateItemQuantity,\n updateManualItem,\n updateQuotePrice,\n updateSettlementVoucherCode,\n updateOrganisation,\n updateUser,\n verifyAllManualItems,\n verifyManualItem,\n generateAiProto,\n generateSupplierDeliveryCostsSheet,\n generateSupplierQuotesCatalogSheet,\n loadSupplierDeliveryCostSheet,\n loadSupplierQuotesCatalogueSheet,\n importSupplierQuotesCatalogWorkbook,\n importSupplierDeliveryCostWorkbook,\n uploadFile,\n generateClaimsReport,\n generateSupplierClaimsReport,\n updateProtoProductManually,\n};\n\n","import React, {useRef} from \"react\";\nimport {Outlet, useNavigate} from \"react-router-dom\";\nimport {customGraphRequest, queryCurrentUser} from \"./utils/coreApi\";\n\nexport default function PrivateRoutes (props) {\n\n const navigate = useNavigate();\n const hasCheckedCurrentUser = useRef(\"UNAUTHENTICATED\");\n\n function confirmAuthentication() {\n /** When a reload is performed, the autheticated state is lost.\n * In order to re-set the authenticated state, we make a single queryCurrentUser query\n * If the response is 401 error, then this user is not authenticated\n * Else set the authenticated state to true */\n\n // Make a queryCurrentUser query\n // If the user is returned, set props.setAuthenticated(true)\n // If a 401, then set props.setAuthenticated(false) and redirect to login\n\n if(props.user){\n hasCheckedCurrentUser.current = \"AUTHENTICATED\"\n return\n }\n\n if(hasCheckedCurrentUser.current === \"AUTHENTICATED\" || hasCheckedCurrentUser.current === \"INPROGRESS\" ){\n return\n }\n\n hasCheckedCurrentUser.current = \"INPROGRESS\"\n\n const query = ` query PrivateRoutes_MinimalQuery {\n current_user {\n error {\n type\n message\n }\n user {\n id\n username\n }\n }\n }\n `\n\n customGraphRequest(\n query,\n (data) => {\n hasCheckedCurrentUser.current = \"AUTHENTICATED\"\n },\n (error) => {\n hasCheckedCurrentUser.current = \"FAILED\"\n navigate('/logout')\n }\n );\n\n }\n\n if(props.user){\n return \n }\n else{\n confirmAuthentication();\n return ;\n }\n\n}\n\n","// Library imports\nimport React, {useEffect} from \"react\";\n\n// Local imports\nimport {logoutApi} from \"../../utils/coreApi.js\";\n\n\n// Logout container\nconst Logout = (props) => {\n\n // On every page load\n useEffect(() => {\n\n clearUser();\n\n logoutApi(successCallback, errorCallback);\n }, []);\n\n const clearUser = () => {\n\n // clear all local storage\n localStorage.clear();\n\n // clear all props\n props.setAuthenticated?.(false)\n props.setUser?.(null)\n props.setOrganisations?.(null)\n props.setSelectedCountry?.({name: '', code: ''})\n\n }\n\n const successCallback = (data) => {\n /** We want to cause a page reload, rather than to navigate, as an easy method to clear all the state data */\n // navigate('/login');\n window.location.href = '/login'\n };\n\n const errorCallback = (error) => {\n window.location.href = '/login'\n };\n\n\n // Page content\n return (\n
\n
\n );\n};\n\nexport default Logout;\n","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose.js\";\nexport default function _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}","function u(r,n,...a){if(r in n){let e=n[r];return typeof e==\"function\"?e(...a):e}let t=new Error(`Tried to handle \"${r}\" but there is no handler defined. Only defined handlers are: ${Object.keys(n).map(e=>`\"${e}\"`).join(\", \")}.`);throw Error.captureStackTrace&&Error.captureStackTrace(t,u),t}export{u as match};\n","import{Fragment as c,cloneElement as P,createElement as b,forwardRef as E,isValidElement as x}from\"react\";import{match as R}from'./match.js';var S=(a=>(a[a.None=0]=\"None\",a[a.RenderStrategy=1]=\"RenderStrategy\",a[a.Static=2]=\"Static\",a))(S||{}),j=(e=>(e[e.Unmount=0]=\"Unmount\",e[e.Hidden=1]=\"Hidden\",e))(j||{});function $({ourProps:r,theirProps:t,slot:e,defaultTag:a,features:o,visible:n=!0,name:l}){let s=T(t,r);if(n)return p(s,e,a,l);let u=o!=null?o:0;if(u&2){let{static:i=!1,...d}=s;if(i)return p(d,e,a,l)}if(u&1){let{unmount:i=!0,...d}=s;return R(i?0:1,{[0](){return null},[1](){return p({...d,hidden:!0,style:{display:\"none\"}},e,a,l)}})}return p(s,e,a,l)}function p(r,t={},e,a){let{as:o=e,children:n,refName:l=\"ref\",...s}=m(r,[\"unmount\",\"static\"]),u=r.ref!==void 0?{[l]:r.ref}:{},i=typeof n==\"function\"?n(t):n;s.className&&typeof s.className==\"function\"&&(s.className=s.className(t));let d={};if(t){let f=!1,y=[];for(let[h,g]of Object.entries(t))typeof g==\"boolean\"&&(f=!0),g===!0&&y.push(h);f&&(d[\"data-headlessui-state\"]=y.join(\" \"))}if(o===c&&Object.keys(F(s)).length>0){if(!x(i)||Array.isArray(i)&&i.length>1)throw new Error(['Passing props on \"Fragment\"!',\"\",`The current component <${a} /> is rendering a \"Fragment\".`,\"However we need to passthrough the following props:\",Object.keys(s).map(f=>` - ${f}`).join(`\n`),\"\",\"You can apply a few solutions:\",['Add an `as=\"...\"` prop, to ensure that we render an actual element instead of a \"Fragment\".',\"Render a single element as the child so that we can forward the props onto that element.\"].map(f=>` - ${f}`).join(`\n`)].join(`\n`));return P(i,Object.assign({},T(i.props,F(m(s,[\"ref\"]))),d,u,w(i.ref,u.ref)))}return b(o,Object.assign({},m(s,[\"ref\"]),o!==c&&u,o!==c&&d),i)}function w(...r){return{ref:r.every(t=>t==null)?void 0:t=>{for(let e of r)e!=null&&(typeof e==\"function\"?e(t):e.current=t)}}}function T(...r){var a;if(r.length===0)return{};if(r.length===1)return r[0];let t={},e={};for(let o of r)for(let n in o)n.startsWith(\"on\")&&typeof o[n]==\"function\"?((a=e[n])!=null||(e[n]=[]),e[n].push(o[n])):t[n]=o[n];if(t.disabled||t[\"aria-disabled\"])return Object.assign(t,Object.fromEntries(Object.keys(e).map(o=>[o,void 0])));for(let o in e)Object.assign(t,{[o](n,...l){let s=e[o];for(let u of s){if((n instanceof Event||(n==null?void 0:n.nativeEvent)instanceof Event)&&n.defaultPrevented)return;u(n,...l)}}});return t}function C(r){var t;return Object.assign(E(r),{displayName:(t=r.displayName)!=null?t:r.name})}function F(r){let t=Object.assign({},r);for(let e in t)t[e]===void 0&&delete t[e];return t}function m(r,t=[]){let e=Object.assign({},r);for(let a of t)a in e&&delete e[a];return e}export{S as Features,j as RenderStrategy,F as compact,C as forwardRefWithAs,$ as render};\n","import r,{createContext as l,useContext as d}from\"react\";let o=l(null);o.displayName=\"OpenClosedContext\";var p=(e=>(e[e.Open=0]=\"Open\",e[e.Closed=1]=\"Closed\",e))(p||{});function s(){return d(o)}function C({value:t,children:n}){return r.createElement(o.Provider,{value:t},n)}export{C as OpenClosedProvider,p as State,s as useOpenClosed};\n","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, toPropertyKey(descriptor.key), descriptor);\n }\n}\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}","var i=Object.defineProperty;var d=(t,e,n)=>e in t?i(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n;var r=(t,e,n)=>(d(t,typeof e!=\"symbol\"?e+\"\":e,n),n);class o{constructor(){r(this,\"current\",this.detect());r(this,\"handoffState\",\"pending\");r(this,\"currentId\",0)}set(e){this.current!==e&&(this.handoffState=\"pending\",this.currentId=0,this.current=e)}reset(){this.set(this.detect())}nextId(){return++this.currentId}get isServer(){return this.current===\"server\"}get isClient(){return this.current===\"client\"}detect(){return typeof window==\"undefined\"||typeof document==\"undefined\"?\"server\":\"client\"}handoff(){this.handoffState===\"pending\"&&(this.handoffState=\"complete\")}get isHandoffComplete(){return this.handoffState===\"complete\"}}let s=new o;export{s as env};\n","import{useLayoutEffect as t,useEffect as c}from\"react\";import{env as i}from'../utils/env.js';let l=(e,f)=>{i.isServer?c(e,f):t(e,f)};export{l as useIsoMorphicEffect};\n","import{useRef as r}from\"react\";import{useIsoMorphicEffect as t}from'./use-iso-morphic-effect.js';function f(){let e=r(!1);return t(()=>(e.current=!0,()=>{e.current=!1}),[]),e}export{f as useIsMounted};\n","import{useRef as t}from\"react\";import{useIsoMorphicEffect as o}from'./use-iso-morphic-effect.js';function s(e){let r=t(e);return o(()=>{r.current=e},[e]),r}export{s as useLatestValue};\n","import{useState as r,useEffect as o}from\"react\";import{env as t}from'../utils/env.js';function l(){let[e,f]=r(t.isHandoffComplete);return e&&t.isHandoffComplete===!1&&f(!1),o(()=>{e!==!0&&f(!0)},[e]),o(()=>t.handoff(),[]),e}export{l as useServerHandoffComplete};\n","import a from\"react\";import{useLatestValue as n}from'./use-latest-value.js';let o=function(t){let e=n(t);return a.useCallback((...r)=>e.current(...r),[e])};export{o as useEvent};\n","import{useRef as l,useEffect as i}from\"react\";import{useEvent as r}from'./use-event.js';let u=Symbol();function T(t,n=!0){return Object.assign(t,{[u]:n})}function y(...t){let n=l(t);i(()=>{n.current=t},[t]);let c=r(e=>{for(let o of n.current)o!=null&&(typeof o==\"function\"?o(e):o.current=e)});return t.every(e=>e==null||(e==null?void 0:e[u]))?void 0:c}export{T as optionalRef,y as useSyncRefs};\n","function t(e){typeof queueMicrotask==\"function\"?queueMicrotask(e):Promise.resolve().then(e).catch(o=>setTimeout(()=>{throw o}))}export{t as microTask};\n","import{microTask as s}from'./micro-task.js';function m(){let n=[],i=[],r={enqueue(e){i.push(e)},addEventListener(e,t,a,o){return e.addEventListener(t,a,o),r.add(()=>e.removeEventListener(t,a,o))},requestAnimationFrame(...e){let t=requestAnimationFrame(...e);return r.add(()=>cancelAnimationFrame(t))},nextFrame(...e){return r.requestAnimationFrame(()=>r.requestAnimationFrame(...e))},setTimeout(...e){let t=setTimeout(...e);return r.add(()=>clearTimeout(t))},microTask(...e){let t={current:!0};return s(()=>{t.current&&e[0]()}),r.add(()=>{t.current=!1})},add(e){return n.push(e),()=>{let t=n.indexOf(e);if(t>=0){let[a]=n.splice(t,1);a()}}},dispose(){for(let e of n.splice(0))e()},async workQueue(){for(let e of i.splice(0))await e()}};return r}export{m as disposables};\n","import{once as T}from'../../../utils/once.js';import{disposables as s}from'../../../utils/disposables.js';import{match as p}from'../../../utils/match.js';function v(t,...e){t&&e.length>0&&t.classList.add(...e)}function f(t,...e){t&&e.length>0&&t.classList.remove(...e)}function F(t,e){let n=s();if(!t)return n.dispose;let{transitionDuration:a,transitionDelay:i}=getComputedStyle(t),[m,d]=[a,i].map(o=>{let[r=0]=o.split(\",\").filter(Boolean).map(l=>l.includes(\"ms\")?parseFloat(l):parseFloat(l)*1e3).sort((l,g)=>g-l);return r});if(m+d!==0){let o=n.addEventListener(t,\"transitionend\",r=>{r.target===r.currentTarget&&(e(),o())})}else e();return n.add(()=>e()),n.dispose}function M(t,e,n,a){let i=n?\"enter\":\"leave\",m=s(),d=a!==void 0?T(a):()=>{};i===\"enter\"&&(t.removeAttribute(\"hidden\"),t.style.display=\"\");let u=p(i,{enter:()=>e.enter,leave:()=>e.leave}),o=p(i,{enter:()=>e.enterTo,leave:()=>e.leaveTo}),r=p(i,{enter:()=>e.enterFrom,leave:()=>e.leaveFrom});return f(t,...e.enter,...e.enterTo,...e.enterFrom,...e.leave,...e.leaveFrom,...e.leaveTo,...e.entered),v(t,...u,...r),m.nextFrame(()=>{f(t,...r),v(t,...o),F(t,()=>(f(t,...u),v(t,...e.entered),d()))}),m.dispose}export{M as transition};\n","function l(r){let e={called:!1};return(...t)=>{if(!e.called)return e.called=!0,r(...t)}}export{l as once};\n","import{useState as s,useEffect as o}from\"react\";import{disposables as t}from'../utils/disposables.js';function p(){let[e]=s(t);return o(()=>()=>e.dispose(),[e]),e}export{p as useDisposables};\n","import{transition as d}from'../components/transitions/utils/transition.js';import{disposables as l}from'../utils/disposables.js';import{useDisposables as f}from'./use-disposables.js';import{useIsMounted as m}from'./use-is-mounted.js';import{useIsoMorphicEffect as p}from'./use-iso-morphic-effect.js';import{useLatestValue as b}from'./use-latest-value.js';function D({container:i,direction:t,classes:o,onStart:s,onStop:u}){let a=m(),c=f(),r=b(t);p(()=>{let e=l();c.add(e.dispose);let n=i.current;if(!!n&&r.current!==\"idle\"&&!!a.current)return e.dispose(),s.current(r.current),e.add(d(n,o.current,r.current===\"enter\",()=>{e.dispose(),u.current(r.current)})),e.dispose},[t])}export{D as useTransition};\n","function e(...n){return n.filter(Boolean).join(\" \")}export{e as classNames};\n","import T,{Fragment as Q,createContext as X,useContext as W,useEffect as H,useMemo as Y,useRef as c,useState as q}from\"react\";import{Features as fe,forwardRefWithAs as z,render as Z,RenderStrategy as g}from'../../utils/render.js';import{OpenClosedProvider as Te,State as O,useOpenClosed as $}from'../../internal/open-closed.js';import{match as N}from'../../utils/match.js';import{useIsMounted as ce}from'../../hooks/use-is-mounted.js';import{useIsoMorphicEffect as me}from'../../hooks/use-iso-morphic-effect.js';import{useLatestValue as F}from'../../hooks/use-latest-value.js';import{useServerHandoffComplete as ee}from'../../hooks/use-server-handoff-complete.js';import{useSyncRefs as te}from'../../hooks/use-sync-refs.js';import{useTransition as pe}from'../../hooks/use-transition.js';import{useEvent as R}from'../../hooks/use-event.js';import{useDisposables as ve}from'../../hooks/use-disposables.js';import{classNames as he}from'../../utils/class-names.js';import{env as Ce}from'../../utils/env.js';function P(i=\"\"){return i.split(\" \").filter(e=>e.trim().length>1)}let A=X(null);A.displayName=\"TransitionContext\";var ge=(s=>(s.Visible=\"visible\",s.Hidden=\"hidden\",s))(ge||{});function be(){let i=W(A);if(i===null)throw new Error(\"A is used but it is missing a parent or .\");return i}function Ee(){let i=W(M);if(i===null)throw new Error(\"A is used but it is missing a parent or .\");return i}let M=X(null);M.displayName=\"NestingContext\";function I(i){return\"children\"in i?I(i.children):i.current.filter(({el:e})=>e.current!==null).filter(({state:e})=>e===\"visible\").length>0}function ne(i,e){let s=F(i),n=c([]),m=ce(),y=ve(),b=R((l,r=g.Hidden)=>{let t=n.current.findIndex(({el:o})=>o===l);t!==-1&&(N(r,{[g.Unmount](){n.current.splice(t,1)},[g.Hidden](){n.current[t].state=\"hidden\"}}),y.microTask(()=>{var o;!I(n)&&m.current&&((o=s.current)==null||o.call(s))}))}),E=R(l=>{let r=n.current.find(({el:t})=>t===l);return r?r.state!==\"visible\"&&(r.state=\"visible\"):n.current.push({el:l,state:\"visible\"}),()=>b(l,g.Unmount)}),S=c([]),u=c(Promise.resolve()),p=c({enter:[],leave:[],idle:[]}),d=R((l,r,t)=>{S.current.splice(0),e&&(e.chains.current[r]=e.chains.current[r].filter(([o])=>o!==l)),e==null||e.chains.current[r].push([l,new Promise(o=>{S.current.push(o)})]),e==null||e.chains.current[r].push([l,new Promise(o=>{Promise.all(p.current[r].map(([f,a])=>a)).then(()=>o())})]),r===\"enter\"?u.current=u.current.then(()=>e==null?void 0:e.wait.current).then(()=>t(r)):t(r)}),v=R((l,r,t)=>{Promise.all(p.current[r].splice(0).map(([o,f])=>f)).then(()=>{var o;(o=S.current.shift())==null||o()}).then(()=>t(r))});return Y(()=>({children:n,register:E,unregister:b,onStart:d,onStop:v,wait:u,chains:p}),[E,b,n,d,v,p,u])}function Se(){}let xe=[\"beforeEnter\",\"afterEnter\",\"beforeLeave\",\"afterLeave\"];function re(i){var s;let e={};for(let n of xe)e[n]=(s=i[n])!=null?s:Se;return e}function Pe(i){let e=c(re(i));return H(()=>{e.current=re(i)},[i]),e}let He=\"div\",ie=fe.RenderStrategy,oe=z(function(e,s){let{beforeEnter:n,afterEnter:m,beforeLeave:y,afterLeave:b,enter:E,enterFrom:S,enterTo:u,entered:p,leave:d,leaveFrom:v,leaveTo:l,...r}=e,t=c(null),o=te(t,s),f=r.unmount?g.Unmount:g.Hidden,{show:a,appear:x,initial:se}=be(),[h,_]=q(a?\"visible\":\"hidden\"),K=Ee(),{register:D,unregister:V}=K,j=c(null);H(()=>D(t),[D,t]),H(()=>{if(f===g.Hidden&&!!t.current){if(a&&h!==\"visible\"){_(\"visible\");return}return N(h,{[\"hidden\"]:()=>V(t),[\"visible\"]:()=>D(t)})}},[h,t,D,V,a,f]);let U=F({enter:P(E),enterFrom:P(S),enterTo:P(u),entered:P(p),leave:P(d),leaveFrom:P(v),leaveTo:P(l)}),L=Pe({beforeEnter:n,afterEnter:m,beforeLeave:y,afterLeave:b}),k=ee();H(()=>{if(k&&h===\"visible\"&&t.current===null)throw new Error(\"Did you forget to passthrough the `ref` to the actual DOM node?\")},[t,h,k]);let G=se&&!x,le=(()=>!k||G||j.current===a?\"idle\":a?\"enter\":\"leave\")(),ae=R(C=>N(C,{enter:()=>L.current.beforeEnter(),leave:()=>L.current.beforeLeave(),idle:()=>{}})),ue=R(C=>N(C,{enter:()=>L.current.afterEnter(),leave:()=>L.current.afterLeave(),idle:()=>{}})),w=ne(()=>{_(\"hidden\"),V(t)},K);pe({container:t,classes:U,direction:le,onStart:F(C=>{w.onStart(t,C,ae)}),onStop:F(C=>{w.onStop(t,C,ue),C===\"leave\"&&!I(w)&&(_(\"hidden\"),V(t))})}),H(()=>{!G||(f===g.Hidden?j.current=null:j.current=a)},[a,G,h]);let B=r,de={ref:o};return x&&a&&Ce.isServer&&(B={...B,className:he(r.className,...U.current.enter,...U.current.enterFrom)}),T.createElement(M.Provider,{value:w},T.createElement(Te,{value:N(h,{[\"visible\"]:O.Open,[\"hidden\"]:O.Closed})},Z({ourProps:de,theirProps:B,defaultTag:He,features:ie,visible:h===\"visible\",name:\"Transition.Child\"})))}),J=z(function(e,s){let{show:n,appear:m=!1,unmount:y,...b}=e,E=c(null),S=te(E,s);ee();let u=$();if(n===void 0&&u!==null&&(n=N(u,{[O.Open]:!0,[O.Closed]:!1})),![!0,!1].includes(n))throw new Error(\"A is used but it is missing a `show={true | false}` prop.\");let[p,d]=q(n?\"visible\":\"hidden\"),v=ne(()=>{d(\"hidden\")}),[l,r]=q(!0),t=c([n]);me(()=>{l!==!1&&t.current[t.current.length-1]!==n&&(t.current.push(n),r(!1))},[t,n]);let o=Y(()=>({show:n,appear:m,initial:l}),[n,m,l]);H(()=>{if(n)d(\"visible\");else if(!I(v))d(\"hidden\");else{let a=E.current;if(!a)return;let x=a.getBoundingClientRect();x.x===0&&x.y===0&&x.width===0&&x.height===0&&d(\"hidden\")}},[n,v]);let f={unmount:y};return T.createElement(M.Provider,{value:v},T.createElement(A.Provider,{value:o},Z({ourProps:{...f,as:Q,children:T.createElement(oe,{ref:S,...f,...b})},theirProps:{},defaultTag:Q,features:ie,visible:p===\"visible\",name:\"Transition\"})))}),Ne=z(function(e,s){let n=W(A)!==null,m=$()!==null;return T.createElement(T.Fragment,null,!n&&m?T.createElement(J,{ref:s,...e}):T.createElement(oe,{ref:s,...e}))}),Ke=Object.assign(J,{Child:Ne,Root:J});export{Ke as Transition};\n","var o;import t from\"react\";import{useIsoMorphicEffect as d}from'./use-iso-morphic-effect.js';import{useServerHandoffComplete as f}from'./use-server-handoff-complete.js';import{env as r}from'../utils/env.js';let I=(o=t.useId)!=null?o:function(){let n=f(),[e,u]=t.useState(n?()=>r.nextId():null);return d(()=>{e===null&&u(r.nextId())},[e]),e!=null?\"\"+e:void 0};export{I as useId};\n","var o=(r=>(r.Space=\" \",r.Enter=\"Enter\",r.Escape=\"Escape\",r.Backspace=\"Backspace\",r.Delete=\"Delete\",r.ArrowLeft=\"ArrowLeft\",r.ArrowUp=\"ArrowUp\",r.ArrowRight=\"ArrowRight\",r.ArrowDown=\"ArrowDown\",r.Home=\"Home\",r.End=\"End\",r.PageUp=\"PageUp\",r.PageDown=\"PageDown\",r.Tab=\"Tab\",r))(o||{});export{o as Keys};\n","function r(n){let e=n.parentElement,l=null;for(;e&&!(e instanceof HTMLFieldSetElement);)e instanceof HTMLLegendElement&&(l=e),e=e.parentElement;let t=(e==null?void 0:e.getAttribute(\"disabled\"))===\"\";return t&&i(l)?!1:t}function i(n){if(!n)return!1;let e=n.previousElementSibling;for(;e!==null;){if(e instanceof HTMLLegendElement)return!1;e=e.previousElementSibling}return!0}export{r as isDisabledReactIssue7711};\n","import{forwardRefWithAs as i,render as n}from'../utils/render.js';let a=\"div\";var s=(e=>(e[e.None=1]=\"None\",e[e.Focusable=2]=\"Focusable\",e[e.Hidden=4]=\"Hidden\",e))(s||{});let h=i(function(t,o){let{features:e=1,...r}=t,d={ref:o,\"aria-hidden\":(e&2)===2?!0:void 0,style:{position:\"fixed\",top:1,left:1,width:1,height:0,padding:0,margin:-1,overflow:\"hidden\",clip:\"rect(0, 0, 0, 0)\",whiteSpace:\"nowrap\",borderWidth:\"0\",...(e&4)===4&&(e&2)!==2&&{display:\"none\"}}};return n({ourProps:d,theirProps:r,slot:{},defaultTag:a,name:\"Hidden\"})});export{s as Features,h as Hidden};\n","import{env as n}from'./env.js';function e(r){return n.isServer?null:r instanceof Node?r.ownerDocument:r!=null&&r.hasOwnProperty(\"current\")&&r.current instanceof Node?r.current.ownerDocument:document}export{e as getOwnerDocument};\n","import{disposables as b}from'./disposables.js';import{match as M}from'./match.js';import{getOwnerDocument as m}from'./owner.js';let f=[\"[contentEditable=true]\",\"[tabindex]\",\"a[href]\",\"area[href]\",\"button:not([disabled])\",\"iframe\",\"input:not([disabled])\",\"select:not([disabled])\",\"textarea:not([disabled])\"].map(e=>`${e}:not([tabindex='-1'])`).join(\",\");var L=(n=>(n[n.First=1]=\"First\",n[n.Previous=2]=\"Previous\",n[n.Next=4]=\"Next\",n[n.Last=8]=\"Last\",n[n.WrapAround=16]=\"WrapAround\",n[n.NoScroll=32]=\"NoScroll\",n))(L||{}),N=(o=>(o[o.Error=0]=\"Error\",o[o.Overflow=1]=\"Overflow\",o[o.Success=2]=\"Success\",o[o.Underflow=3]=\"Underflow\",o))(N||{}),T=(r=>(r[r.Previous=-1]=\"Previous\",r[r.Next=1]=\"Next\",r))(T||{});function E(e=document.body){return e==null?[]:Array.from(e.querySelectorAll(f)).sort((t,r)=>Math.sign((t.tabIndex||Number.MAX_SAFE_INTEGER)-(r.tabIndex||Number.MAX_SAFE_INTEGER)))}var F=(r=>(r[r.Strict=0]=\"Strict\",r[r.Loose=1]=\"Loose\",r))(F||{});function h(e,t=0){var r;return e===((r=m(e))==null?void 0:r.body)?!1:M(t,{[0](){return e.matches(f)},[1](){let l=e;for(;l!==null;){if(l.matches(f))return!0;l=l.parentElement}return!1}})}function v(e){let t=m(e);b().nextFrame(()=>{t&&!h(t.activeElement,0)&&S(e)})}function S(e){e==null||e.focus({preventScroll:!0})}let H=[\"textarea\",\"input\"].join(\",\");function w(e){var t,r;return(r=(t=e==null?void 0:e.matches)==null?void 0:t.call(e,H))!=null?r:!1}function A(e,t=r=>r){return e.slice().sort((r,l)=>{let o=t(r),i=t(l);if(o===null||i===null)return 0;let n=o.compareDocumentPosition(i);return n&Node.DOCUMENT_POSITION_FOLLOWING?-1:n&Node.DOCUMENT_POSITION_PRECEDING?1:0})}function g(e,t){return I(E(),t,{relativeTo:e})}function I(e,t,{sorted:r=!0,relativeTo:l=null,skipElements:o=[]}={}){let i=Array.isArray(e)?e.length>0?e[0].ownerDocument:document:e.ownerDocument,n=Array.isArray(e)?r?A(e):e:E(e);o.length>0&&(n=n.filter(s=>!o.includes(s))),l=l!=null?l:i.activeElement;let d=(()=>{if(t&5)return 1;if(t&10)return-1;throw new Error(\"Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last\")})(),x=(()=>{if(t&1)return 0;if(t&2)return Math.max(0,n.indexOf(l))-1;if(t&4)return Math.max(0,n.indexOf(l))+1;if(t&8)return n.length-1;throw new Error(\"Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last\")})(),p=t&32?{preventScroll:!0}:{},c=0,a=n.length,u;do{if(c>=a||c+a<=0)return 0;let s=x+c;if(t&16)s=(s+a)%a;else{if(s<0)return 3;if(s>=a)return 1}u=n[s],u==null||u.focus(p),c+=d}while(u!==i.activeElement);return t&6&&w(u)&&u.select(),u.hasAttribute(\"tabindex\")||u.setAttribute(\"tabindex\",\"0\"),2}export{L as Focus,N as FocusResult,F as FocusableMode,S as focusElement,g as focusFrom,I as focusIn,E as getFocusableElements,h as isFocusableElement,v as restoreFocusIfNecessary,A as sortByDomNode};\n","import{useRef as t}from\"react\";import{useWindowEvent as a}from'./use-window-event.js';var s=(r=>(r[r.Forwards=0]=\"Forwards\",r[r.Backwards=1]=\"Backwards\",r))(s||{});function n(){let e=t(0);return a(\"keydown\",o=>{o.key===\"Tab\"&&(e.current=o.shiftKey?1:0)},!0),e}export{s as Direction,n as useTabDirection};\n","import{useEffect as d}from\"react\";import{useLatestValue as a}from'./use-latest-value.js';function s(e,r,n){let o=a(r);d(()=>{function t(i){o.current(i)}return window.addEventListener(e,t,n),()=>window.removeEventListener(e,t,n)},[e,n])}export{s as useWindowEvent};\n","import{useMemo as t}from\"react\";import{getOwnerDocument as o}from'../utils/owner.js';function n(...e){return t(()=>o(...e),[...e])}export{n as useOwnerDocument};\n","import{useEffect as d}from\"react\";import{useLatestValue as s}from'./use-latest-value.js';function E(n,e,a,t){let i=s(a);d(()=>{n=n!=null?n:window;function r(o){i.current(o)}return n.addEventListener(e,r,t),()=>n.removeEventListener(e,r,t)},[n,e,t])}export{E as useEventListener};\n","import{useEffect as s,useRef as f}from\"react\";import{useEvent as i}from'./use-event.js';function m(u,t){let e=f([]),r=i(u);s(()=>{let o=[...e.current];for(let[n,a]of t.entries())if(e.current[n]!==a){let l=r(t,o);return e.current=t,l}},[r,...t])}export{m as useWatch};\n","import d,{useEffect as U,useRef as T}from\"react\";import{forwardRefWithAs as C,render as I}from'../../utils/render.js';import{useServerHandoffComplete as N}from'../../hooks/use-server-handoff-complete.js';import{useSyncRefs as x}from'../../hooks/use-sync-refs.js';import{Features as F,Hidden as v}from'../../internal/hidden.js';import{focusElement as f,focusIn as b,Focus as i,FocusResult as G}from'../../utils/focus-management.js';import{match as g}from'../../utils/match.js';import{useEvent as K}from'../../hooks/use-event.js';import{useTabDirection as V,Direction as M}from'../../hooks/use-tab-direction.js';import{useIsMounted as O}from'../../hooks/use-is-mounted.js';import{useOwnerDocument as W}from'../../hooks/use-owner.js';import{useEventListener as k}from'../../hooks/use-event-listener.js';import{microTask as y}from'../../utils/micro-task.js';import{useWatch as j}from'../../hooks/use-watch.js';import{useDisposables as q}from'../../hooks/use-disposables.js';let z=\"div\";var A=(t=>(t[t.None=1]=\"None\",t[t.InitialFocus=2]=\"InitialFocus\",t[t.TabLock=4]=\"TabLock\",t[t.FocusLock=8]=\"FocusLock\",t[t.RestoreFocus=16]=\"RestoreFocus\",t[t.All=30]=\"All\",t))(A||{});let de=Object.assign(C(function(u,e){let l=T(null),a=x(l,e),{initialFocus:m,containers:t,features:n=30,...E}=u;N()||(n=1);let s=W(l);J({ownerDocument:s},Boolean(n&16));let S=Q({ownerDocument:s,container:l,initialFocus:m},Boolean(n&2));X({ownerDocument:s,container:l,containers:t,previousActiveElement:S},Boolean(n&8));let H=V(),R=K(o=>{let c=l.current;if(!c)return;(_=>_())(()=>{g(H.current,{[M.Forwards]:()=>b(c,i.First,{skipElements:[o.relatedTarget]}),[M.Backwards]:()=>b(c,i.Last,{skipElements:[o.relatedTarget]})})})}),B=q(),L=T(!1),P={ref:a,onKeyDown(o){o.key==\"Tab\"&&(L.current=!0,B.requestAnimationFrame(()=>{L.current=!1}))},onBlur(o){let c=new Set(t==null?void 0:t.current);c.add(l);let p=o.relatedTarget;!p||p.dataset.headlessuiFocusGuard!==\"true\"&&(h(c,p)||(L.current?b(l.current,g(H.current,{[M.Forwards]:()=>i.Next,[M.Backwards]:()=>i.Previous})|i.WrapAround,{relativeTo:o.target}):o.target instanceof HTMLElement&&f(o.target)))}};return d.createElement(d.Fragment,null,Boolean(n&4)&&d.createElement(v,{as:\"button\",type:\"button\",\"data-headlessui-focus-guard\":!0,onFocus:R,features:F.Focusable}),I({ourProps:P,theirProps:E,defaultTag:z,name:\"FocusTrap\"}),Boolean(n&4)&&d.createElement(v,{as:\"button\",type:\"button\",\"data-headlessui-focus-guard\":!0,onFocus:R,features:F.Focusable}))}),{features:A});function J({ownerDocument:r},u){let e=T(null);k(r==null?void 0:r.defaultView,\"focusout\",a=>{!u||e.current||(e.current=a.target)},!0),j(()=>{u||((r==null?void 0:r.activeElement)===(r==null?void 0:r.body)&&f(e.current),e.current=null)},[u]);let l=T(!1);U(()=>(l.current=!1,()=>{l.current=!0,y(()=>{!l.current||(f(e.current),e.current=null)})}),[])}function Q({ownerDocument:r,container:u,initialFocus:e},l){let a=T(null),m=O();return j(()=>{if(!l)return;let t=u.current;!t||y(()=>{if(!m.current)return;let n=r==null?void 0:r.activeElement;if(e!=null&&e.current){if((e==null?void 0:e.current)===n){a.current=n;return}}else if(t.contains(n)){a.current=n;return}e!=null&&e.current?f(e.current):b(t,i.First)===G.Error&&console.warn(\"There are no focusable elements inside the \"),a.current=r==null?void 0:r.activeElement})},[l]),a}function X({ownerDocument:r,container:u,containers:e,previousActiveElement:l},a){let m=O();k(r==null?void 0:r.defaultView,\"focus\",t=>{if(!a||!m.current)return;let n=new Set(e==null?void 0:e.current);n.add(u);let E=l.current;if(!E)return;let s=t.target;s&&s instanceof HTMLElement?h(n,s)?(l.current=s,f(s)):(t.preventDefault(),t.stopPropagation(),f(E)):f(l.current)},!0)}function h(r,u){var e;for(let l of r)if((e=l.current)!=null&&e.contains(u))return!0;return!1}export{de as FocusTrap};\n","import{getOwnerDocument as s}from'../utils/owner.js';import{useIsoMorphicEffect as d}from'./use-iso-morphic-effect.js';let i=new Set,r=new Map;function u(t){t.setAttribute(\"aria-hidden\",\"true\"),t.inert=!0}function l(t){let n=r.get(t);!n||(n[\"aria-hidden\"]===null?t.removeAttribute(\"aria-hidden\"):t.setAttribute(\"aria-hidden\",n[\"aria-hidden\"]),t.inert=n.inert)}function M(t,n=!0){d(()=>{if(!n||!t.current)return;let o=t.current,a=s(o);if(!!a){i.add(o);for(let e of r.keys())e.contains(o)&&(l(e),r.delete(e));return a.querySelectorAll(\"body > *\").forEach(e=>{if(e instanceof HTMLElement){for(let f of i)if(e.contains(f))return;i.size===1&&(r.set(e,{\"aria-hidden\":e.getAttribute(\"aria-hidden\"),inert:e.inert}),u(e))}}),()=>{if(i.delete(o),i.size>0)a.querySelectorAll(\"body > *\").forEach(e=>{if(e instanceof HTMLElement&&!r.has(e)){for(let f of i)if(e.contains(f))return;r.set(e,{\"aria-hidden\":e.getAttribute(\"aria-hidden\"),inert:e.inert}),u(e)}});else for(let e of r.keys())l(e),r.delete(e)}}},[n])}export{M as useInertOthers};\n","import t,{createContext as r,useContext as c}from\"react\";let e=r(!1);function l(){return c(e)}function P(o){return t.createElement(e.Provider,{value:o.force},o.children)}export{P as ForcePortalRoot,l as usePortalRoot};\n","import h,{Fragment as s,createContext as L,useContext as v,useEffect as m,useRef as d,useState as T}from\"react\";import{createPortal as y}from\"react-dom\";import{forwardRefWithAs as P,render as R}from'../../utils/render.js';import{useIsoMorphicEffect as G}from'../../hooks/use-iso-morphic-effect.js';import{usePortalRoot as M}from'../../internal/portal-force-root.js';import{useServerHandoffComplete as C}from'../../hooks/use-server-handoff-complete.js';import{optionalRef as O,useSyncRefs as g}from'../../hooks/use-sync-refs.js';import{useOwnerDocument as c}from'../../hooks/use-owner.js';import{microTask as H}from'../../utils/micro-task.js';import{env as E}from'../../utils/env.js';function x(i){let u=M(),o=v(A),e=c(i),[r,f]=T(()=>{if(!u&&o!==null||E.isServer)return null;let n=e==null?void 0:e.getElementById(\"headlessui-portal-root\");if(n)return n;if(e===null)return null;let t=e.createElement(\"div\");return t.setAttribute(\"id\",\"headlessui-portal-root\"),e.body.appendChild(t)});return m(()=>{r!==null&&(e!=null&&e.body.contains(r)||e==null||e.body.appendChild(r))},[r,e]),m(()=>{u||o!==null&&f(o.current)},[o,f,u]),r}let _=s,U=P(function(u,o){let e=u,r=d(null),f=g(O(a=>{r.current=a}),o),n=c(r),t=x(r),[l]=T(()=>{var a;return E.isServer?null:(a=n==null?void 0:n.createElement(\"div\"))!=null?a:null}),b=C(),p=d(!1);return G(()=>{if(p.current=!1,!(!t||!l))return t.contains(l)||(l.setAttribute(\"data-headlessui-portal\",\"\"),t.appendChild(l)),()=>{p.current=!0,H(()=>{var a;!p.current||!t||!l||(t.removeChild(l),t.childNodes.length<=0&&((a=t.parentElement)==null||a.removeChild(t)))})}},[t,l]),b?!t||!l?null:y(R({ourProps:{ref:f},theirProps:e,defaultTag:_,name:\"Portal\"}),l):null}),j=s,A=L(null),F=P(function(u,o){let{target:e,...r}=u,n={ref:g(o)};return h.createElement(A.Provider,{value:e},R({ourProps:n,theirProps:r,defaultTag:j,name:\"Popover.Group\"}))}),$=Object.assign(U,{Group:F});export{$ as Portal};\n","import f,{createContext as m,useContext as D,useMemo as l,useState as P}from\"react\";import{useId as T}from'../../hooks/use-id.js';import{forwardRefWithAs as g,render as x}from'../../utils/render.js';import{useIsoMorphicEffect as E}from'../../hooks/use-iso-morphic-effect.js';import{useSyncRefs as h}from'../../hooks/use-sync-refs.js';import{useEvent as v}from'../../hooks/use-event.js';let d=m(null);function u(){let n=D(d);if(n===null){let t=new Error(\"You used a component, but it is not inside a relevant parent.\");throw Error.captureStackTrace&&Error.captureStackTrace(t,u),t}return n}function k(){let[n,t]=P([]);return[n.length>0?n.join(\" \"):void 0,l(()=>function(e){let i=v(r=>(t(o=>[...o,r]),()=>t(o=>{let s=o.slice(),p=s.indexOf(r);return p!==-1&&s.splice(p,1),s}))),a=l(()=>({register:i,slot:e.slot,name:e.name,props:e.props}),[i,e.slot,e.name,e.props]);return f.createElement(d.Provider,{value:a},e.children)},[t])]}let S=\"p\",F=g(function(t,c){let e=T(),{id:i=`headlessui-description-${e}`,...a}=t,r=u(),o=h(c);E(()=>r.register(i),[i,r.register]);let s={ref:o,...r.props,id:i};return x({ourProps:s,theirProps:a,slot:r.slot||{},defaultTag:S,name:r.name||\"Description\"})});export{F as Description,k as useDescriptions};\n","import d,{createContext as c,useContext as m}from\"react\";import{useIsoMorphicEffect as f}from'../hooks/use-iso-morphic-effect.js';import{useEvent as p}from'../hooks/use-event.js';let a=c(()=>{});a.displayName=\"StackContext\";var s=(e=>(e[e.Add=0]=\"Add\",e[e.Remove=1]=\"Remove\",e))(s||{});function x(){return m(a)}function M({children:i,onUpdate:r,type:e,element:n,enabled:u}){let l=x(),o=p((...t)=>{r==null||r(...t),l(...t)});return f(()=>{let t=u===void 0||u===!0;return t&&o(0,e,n),()=>{t&&o(1,e,n)}},[o,e,n,u]),d.createElement(a.Provider,{value:o},i)}export{s as StackMessage,M as StackProvider,x as useStackContext};\n","import{useEffect as m}from\"react\";import{useLatestValue as c}from'./use-latest-value.js';function d(e,r,n){let o=c(r);m(()=>{function t(u){o.current(u)}return document.addEventListener(e,t,n),()=>document.removeEventListener(e,t,n)},[e,n])}export{d as useDocumentEvent};\n","import{useEffect as d,useRef as s}from\"react\";import{FocusableMode as p,isFocusableElement as C}from'../utils/focus-management.js';import{useDocumentEvent as a}from'./use-document-event.js';function L(m,E,c=!0){let i=s(!1);d(()=>{requestAnimationFrame(()=>{i.current=c})},[c]);function f(e,o){if(!i.current||e.defaultPrevented)return;let l=function r(t){return typeof t==\"function\"?r(t()):Array.isArray(t)||t instanceof Set?t:[t]}(m),n=o(e);if(n!==null&&!!n.getRootNode().contains(n)){for(let r of l){if(r===null)continue;let t=r instanceof HTMLElement?r:r.current;if(t!=null&&t.contains(n)||e.composed&&e.composedPath().includes(t))return}return!C(n,p.Loose)&&n.tabIndex!==-1&&e.preventDefault(),E(e,n)}}let u=s(null);a(\"mousedown\",e=>{var o,l;i.current&&(u.current=((l=(o=e.composedPath)==null?void 0:o.call(e))==null?void 0:l[0])||e.target)},!0),a(\"click\",e=>{!u.current||(f(e,()=>u.current),u.current=null)},!0),a(\"blur\",e=>f(e,()=>window.document.activeElement instanceof HTMLIFrameElement?window.document.activeElement:null),!0)}export{L as useOutsideClick};\n","function o(){return/iPhone/gi.test(window.navigator.platform)||/Mac/gi.test(window.navigator.platform)&&window.navigator.maxTouchPoints>0}export{o as isIOS};\n","import m,{createContext as le,createRef as ne,useContext as K,useEffect as F,useMemo as v,useReducer as ae,useRef as W,useState as ie}from\"react\";import{match as I}from'../../utils/match.js';import{forwardRefWithAs as O,render as C,Features as q}from'../../utils/render.js';import{useSyncRefs as S}from'../../hooks/use-sync-refs.js';import{Keys as se}from'../keyboard.js';import{isDisabledReactIssue7711 as de}from'../../utils/bugs.js';import{useId as L}from'../../hooks/use-id.js';import{FocusTrap as M}from'../../components/focus-trap/focus-trap.js';import{useInertOthers as pe}from'../../hooks/use-inert-others.js';import{Portal as B}from'../../components/portal/portal.js';import{ForcePortalRoot as G}from'../../internal/portal-force-root.js';import{Description as ue,useDescriptions as fe}from'../description/description.js';import{useOpenClosed as ce,State as z}from'../../internal/open-closed.js';import{useServerHandoffComplete as ge}from'../../hooks/use-server-handoff-complete.js';import{StackProvider as Te,StackMessage as J}from'../../internal/stack-context.js';import{useOutsideClick as me}from'../../hooks/use-outside-click.js';import{useOwnerDocument as De}from'../../hooks/use-owner.js';import{useEventListener as Pe}from'../../hooks/use-event-listener.js';import{Hidden as ye,Features as Ee}from'../../internal/hidden.js';import{useEvent as A}from'../../hooks/use-event.js';import{disposables as he}from'../../utils/disposables.js';import{isIOS as Re}from'../../utils/platform.js';var be=(r=>(r[r.Open=0]=\"Open\",r[r.Closed=1]=\"Closed\",r))(be||{}),ve=(e=>(e[e.SetTitleId=0]=\"SetTitleId\",e))(ve||{});let Ae={[0](t,e){return t.titleId===e.id?t:{...t,titleId:e.id}}},H=le(null);H.displayName=\"DialogContext\";function k(t){let e=K(H);if(e===null){let r=new Error(`<${t} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(r,k),r}return e}function Oe(t,e,r=()=>[document.body]){F(()=>{var c;if(!e||!t)return;let s=he(),d=window.pageYOffset;function a(n,i,l){let P=n.style.getPropertyValue(i);return Object.assign(n.style,{[i]:l}),s.add(()=>{Object.assign(n.style,{[i]:P})})}let o=t.documentElement,f=((c=t.defaultView)!=null?c:window).innerWidth-o.clientWidth;if(a(o,\"overflow\",\"hidden\"),f>0){let n=o.clientWidth-o.offsetWidth,i=f-n;a(o,\"paddingRight\",`${i}px`)}if(Re()){a(t.body,\"marginTop\",`-${d}px`),window.scrollTo(0,0);let n=null;s.addEventListener(t,\"click\",i=>{if(i.target instanceof HTMLElement)try{let l=i.target.closest(\"a\");if(!l)return;let{hash:P}=new URL(l.href),u=t.querySelector(P);u&&!r().some(_=>_.contains(u))&&(n=u)}catch{}},!0),s.addEventListener(t,\"touchmove\",i=>{i.target instanceof HTMLElement&&!r().some(l=>l.contains(i.target))&&i.preventDefault()},{passive:!1}),s.add(()=>{window.scrollTo(0,window.pageYOffset+d),n&&n.isConnected&&(n.scrollIntoView({block:\"nearest\"}),n=null)})}return s.dispose},[t,e])}function Ce(t,e){return I(e.type,Ae,t,e)}let Se=\"div\",Le=q.RenderStrategy|q.Static,Me=O(function(e,r){let s=L(),{id:d=`headlessui-dialog-${s}`,open:a,onClose:o,initialFocus:p,__demoMode:f=!1,...c}=e,[n,i]=ie(0),l=ce();a===void 0&&l!==null&&(a=I(l,{[z.Open]:!0,[z.Closed]:!1}));let P=W(new Set),u=W(null),_=S(u,r),U=W(null),y=De(u),$=e.hasOwnProperty(\"open\")||l!==null,Y=e.hasOwnProperty(\"onClose\");if(!$&&!Y)throw new Error(\"You have to provide an `open` and an `onClose` prop to the `Dialog` component.\");if(!$)throw new Error(\"You provided an `onClose` prop to the `Dialog`, but forgot an `open` prop.\");if(!Y)throw new Error(\"You provided an `open` prop to the `Dialog`, but forgot an `onClose` prop.\");if(typeof a!=\"boolean\")throw new Error(`You provided an \\`open\\` prop to the \\`Dialog\\`, but the value is not a boolean. Received: ${a}`);if(typeof o!=\"function\")throw new Error(`You provided an \\`onClose\\` prop to the \\`Dialog\\`, but the value is not a function. Received: ${o}`);let g=a?0:1,[h,Q]=ae(Ce,{titleId:null,descriptionId:null,panelRef:ne()}),R=A(()=>o(!1)),j=A(T=>Q({type:0,id:T})),x=ge()?f?!1:g===0:!1,w=n>1,X=K(H)!==null,Z=w?\"parent\":\"leaf\";pe(u,w?x:!1);let N=A(()=>{var b,D;return[...Array.from((b=y==null?void 0:y.querySelectorAll(\"body > *, [data-headlessui-portal]\"))!=null?b:[]).filter(E=>!(!(E instanceof HTMLElement)||E.contains(U.current)||h.panelRef.current&&E.contains(h.panelRef.current))),(D=h.panelRef.current)!=null?D:u.current]});me(()=>N(),R,x&&!w),Pe(y==null?void 0:y.defaultView,\"keydown\",T=>{T.defaultPrevented||T.key===se.Escape&&g===0&&(w||(T.preventDefault(),T.stopPropagation(),R()))}),Oe(y,g===0&&!X,N),F(()=>{if(g!==0||!u.current)return;let T=new IntersectionObserver(b=>{for(let D of b)D.boundingClientRect.x===0&&D.boundingClientRect.y===0&&D.boundingClientRect.width===0&&D.boundingClientRect.height===0&&R()});return T.observe(u.current),()=>T.disconnect()},[g,u,R]);let[ee,te]=fe(),oe=v(()=>[{dialogState:g,close:R,setTitleId:j},h],[g,h,R,j]),V=v(()=>({open:g===0}),[g]),re={ref:_,id:d,role:\"dialog\",\"aria-modal\":g===0?!0:void 0,\"aria-labelledby\":h.titleId,\"aria-describedby\":ee};return m.createElement(Te,{type:\"Dialog\",enabled:g===0,element:u,onUpdate:A((T,b,D)=>{b===\"Dialog\"&&I(T,{[J.Add](){P.current.add(D),i(E=>E+1)},[J.Remove](){P.current.add(D),i(E=>E-1)}})})},m.createElement(G,{force:!0},m.createElement(B,null,m.createElement(H.Provider,{value:oe},m.createElement(B.Group,{target:u},m.createElement(G,{force:!1},m.createElement(te,{slot:V,name:\"Dialog.Description\"},m.createElement(M,{initialFocus:p,containers:P,features:x?I(Z,{parent:M.features.RestoreFocus,leaf:M.features.All&~M.features.FocusLock}):M.features.None},C({ourProps:re,theirProps:c,slot:V,defaultTag:Se,features:Le,visible:g===0,name:\"Dialog\"})))))))),m.createElement(ye,{features:Ee.Hidden,ref:U}))}),ke=\"div\",we=O(function(e,r){let s=L(),{id:d=`headlessui-dialog-overlay-${s}`,...a}=e,[{dialogState:o,close:p}]=k(\"Dialog.Overlay\"),f=S(r),c=A(l=>{if(l.target===l.currentTarget){if(de(l.currentTarget))return l.preventDefault();l.preventDefault(),l.stopPropagation(),p()}}),n=v(()=>({open:o===0}),[o]);return C({ourProps:{ref:f,id:d,\"aria-hidden\":!0,onClick:c},theirProps:a,slot:n,defaultTag:ke,name:\"Dialog.Overlay\"})}),Fe=\"div\",Ie=O(function(e,r){let s=L(),{id:d=`headlessui-dialog-backdrop-${s}`,...a}=e,[{dialogState:o},p]=k(\"Dialog.Backdrop\"),f=S(r);F(()=>{if(p.panelRef.current===null)throw new Error(\"A component is being used, but a component is missing.\")},[p.panelRef]);let c=v(()=>({open:o===0}),[o]);return m.createElement(G,{force:!0},m.createElement(B,null,C({ourProps:{ref:f,id:d,\"aria-hidden\":!0},theirProps:a,slot:c,defaultTag:Fe,name:\"Dialog.Backdrop\"})))}),He=\"div\",_e=O(function(e,r){let s=L(),{id:d=`headlessui-dialog-panel-${s}`,...a}=e,[{dialogState:o},p]=k(\"Dialog.Panel\"),f=S(r,p.panelRef),c=v(()=>({open:o===0}),[o]),n=A(l=>{l.stopPropagation()});return C({ourProps:{ref:f,id:d,onClick:n},theirProps:a,slot:c,defaultTag:He,name:\"Dialog.Panel\"})}),xe=\"h2\",We=O(function(e,r){let s=L(),{id:d=`headlessui-dialog-title-${s}`,...a}=e,[{dialogState:o,setTitleId:p}]=k(\"Dialog.Title\"),f=S(r);F(()=>(p(d),()=>p(null)),[d,p]);let c=v(()=>({open:o===0}),[o]);return C({ourProps:{ref:f,id:d},theirProps:a,slot:c,defaultTag:xe,name:\"Dialog.Title\"})}),mt=Object.assign(Me,{Backdrop:Ie,Panel:_e,Overlay:we,Title:We,Description:ue});export{mt as Dialog};\n","import * as React from \"react\";\n\nfunction AdjustmentsIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M12 6V4m0 2a2 2 0 100 4m0-4a2 2 0 110 4m-6 8a2 2 0 100-4m0 4a2 2 0 110-4m0 4v2m0-6V4m6 6v10m6-2a2 2 0 100-4m0 4a2 2 0 110-4m0 4v2m0-6V4\"\n }));\n}\n\nexport default AdjustmentsIcon;","import * as React from \"react\";\n\nfunction AnnotationIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M7 8h10M7 12h4m1 8l-4-4H5a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v8a2 2 0 01-2 2h-3l-4 4z\"\n }));\n}\n\nexport default AnnotationIcon;","import * as React from \"react\";\n\nfunction ArrowRightIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M14 5l7 7m0 0l-7 7m7-7H3\"\n }));\n}\n\nexport default ArrowRightIcon;","import * as React from \"react\";\n\nfunction ArrowSmRightIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M13 7l5 5m0 0l-5 5m5-5H6\"\n }));\n}\n\nexport default ArrowSmRightIcon;","import * as React from \"react\";\n\nfunction BadgeCheckIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M9 12l2 2 4-4M7.835 4.697a3.42 3.42 0 001.946-.806 3.42 3.42 0 014.438 0 3.42 3.42 0 001.946.806 3.42 3.42 0 013.138 3.138 3.42 3.42 0 00.806 1.946 3.42 3.42 0 010 4.438 3.42 3.42 0 00-.806 1.946 3.42 3.42 0 01-3.138 3.138 3.42 3.42 0 00-1.946.806 3.42 3.42 0 01-4.438 0 3.42 3.42 0 00-1.946-.806 3.42 3.42 0 01-3.138-3.138 3.42 3.42 0 00-.806-1.946 3.42 3.42 0 010-4.438 3.42 3.42 0 00.806-1.946 3.42 3.42 0 013.138-3.138z\"\n }));\n}\n\nexport default BadgeCheckIcon;","import * as React from \"react\";\n\nfunction BanIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M18.364 18.364A9 9 0 005.636 5.636m12.728 12.728A9 9 0 015.636 5.636m12.728 12.728L5.636 5.636\"\n }));\n}\n\nexport default BanIcon;","import * as React from \"react\";\n\nfunction BookOpenIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M12 6.253v13m0-13C10.832 5.477 9.246 5 7.5 5S4.168 5.477 3 6.253v13C4.168 18.477 5.754 18 7.5 18s3.332.477 4.5 1.253m0-13C13.168 5.477 14.754 5 16.5 5c1.747 0 3.332.477 4.5 1.253v13C19.832 18.477 18.247 18 16.5 18c-1.746 0-3.332.477-4.5 1.253\"\n }));\n}\n\nexport default BookOpenIcon;","import * as React from \"react\";\n\nfunction CameraIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M3 9a2 2 0 012-2h.93a2 2 0 001.664-.89l.812-1.22A2 2 0 0110.07 4h3.86a2 2 0 011.664.89l.812 1.22A2 2 0 0018.07 7H19a2 2 0 012 2v9a2 2 0 01-2 2H5a2 2 0 01-2-2V9z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M15 13a3 3 0 11-6 0 3 3 0 016 0z\"\n }));\n}\n\nexport default CameraIcon;","import * as React from \"react\";\n\nfunction CashIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M17 9V7a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2m2 4h10a2 2 0 002-2v-6a2 2 0 00-2-2H9a2 2 0 00-2 2v6a2 2 0 002 2zm7-5a2 2 0 11-4 0 2 2 0 014 0z\"\n }));\n}\n\nexport default CashIcon;","import * as React from \"react\";\n\nfunction CheckCircleIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z\"\n }));\n}\n\nexport default CheckCircleIcon;","import * as React from \"react\";\n\nfunction CheckIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M5 13l4 4L19 7\"\n }));\n}\n\nexport default CheckIcon;","import * as React from \"react\";\n\nfunction ClipboardCheckIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"\n }));\n}\n\nexport default ClipboardCheckIcon;","import * as React from \"react\";\n\nfunction ClipboardCopyIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M8 5H6a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2v-1M8 5a2 2 0 002 2h2a2 2 0 002-2M8 5a2 2 0 012-2h2a2 2 0 012 2m0 0h2a2 2 0 012 2v3m2 4H10m0 0l3-3m-3 3l3 3\"\n }));\n}\n\nexport default ClipboardCopyIcon;","import * as React from \"react\";\n\nfunction ClipboardListIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01\"\n }));\n}\n\nexport default ClipboardListIcon;","import * as React from \"react\";\n\nfunction CloudUploadIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M7 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M15 13l-3-3m0 0l-3 3m3-3v12\"\n }));\n}\n\nexport default CloudUploadIcon;","import * as React from \"react\";\n\nfunction CollectionIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10\"\n }));\n}\n\nexport default CollectionIcon;","import * as React from \"react\";\n\nfunction CreditCardIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M3 10h18M7 15h1m4 0h1m-7 4h12a3 3 0 003-3V8a3 3 0 00-3-3H6a3 3 0 00-3 3v8a3 3 0 003 3z\"\n }));\n}\n\nexport default CreditCardIcon;","import * as React from \"react\";\n\nfunction DocumentDuplicateIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M8 7v8a2 2 0 002 2h6M8 7V5a2 2 0 012-2h4.586a1 1 0 01.707.293l4.414 4.414a1 1 0 01.293.707V15a2 2 0 01-2 2h-2M8 7H6a2 2 0 00-2 2v10a2 2 0 002 2h8a2 2 0 002-2v-2\"\n }));\n}\n\nexport default DocumentDuplicateIcon;","import * as React from \"react\";\n\nfunction DocumentReportIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M9 17v-2m3 2v-4m3 4v-6m2 10H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\"\n }));\n}\n\nexport default DocumentReportIcon;","import * as React from \"react\";\n\nfunction DocumentSearchIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M10 21h7a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v11m0 5l4.879-4.879m0 0a3 3 0 104.243-4.242 3 3 0 00-4.243 4.242z\"\n }));\n}\n\nexport default DocumentSearchIcon;","import * as React from \"react\";\n\nfunction DocumentTextIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\"\n }));\n}\n\nexport default DocumentTextIcon;","import * as React from \"react\";\n\nfunction DownloadIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4\"\n }));\n}\n\nexport default DownloadIcon;","import * as React from \"react\";\n\nfunction DuplicateIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\"\n }));\n}\n\nexport default DuplicateIcon;","import * as React from \"react\";\n\nfunction ExclamationIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\"\n }));\n}\n\nexport default ExclamationIcon;","import * as React from \"react\";\n\nfunction ExternalLinkIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14\"\n }));\n}\n\nexport default ExternalLinkIcon;","import * as React from \"react\";\n\nfunction FolderOpenIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M5 19a2 2 0 01-2-2V7a2 2 0 012-2h4l2 2h4a2 2 0 012 2v1M5 19h14a2 2 0 002-2v-5a2 2 0 00-2-2H9a2 2 0 00-2 2v5a2 2 0 01-2 2z\"\n }));\n}\n\nexport default FolderOpenIcon;","import * as React from \"react\";\n\nfunction InformationCircleIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }));\n}\n\nexport default InformationCircleIcon;","import * as React from \"react\";\n\nfunction LinkIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1\"\n }));\n}\n\nexport default LinkIcon;","import * as React from \"react\";\n\nfunction LocationMarkerIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M15 11a3 3 0 11-6 0 3 3 0 016 0z\"\n }));\n}\n\nexport default LocationMarkerIcon;","import * as React from \"react\";\n\nfunction LogoutIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1\"\n }));\n}\n\nexport default LogoutIcon;","import * as React from \"react\";\n\nfunction MailIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"\n }));\n}\n\nexport default MailIcon;","import * as React from \"react\";\n\nfunction MenuAlt2Icon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M4 6h16M4 12h16M4 18h7\"\n }));\n}\n\nexport default MenuAlt2Icon;","import * as React from \"react\";\n\nfunction MicrophoneIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M19 11a7 7 0 01-7 7m0 0a7 7 0 01-7-7m7 7v4m0 0H8m4 0h4m-4-8a3 3 0 01-3-3V5a3 3 0 116 0v6a3 3 0 01-3 3z\"\n }));\n}\n\nexport default MicrophoneIcon;","import * as React from \"react\";\n\nfunction NewspaperIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M19 20H5a2 2 0 01-2-2V6a2 2 0 012-2h10a2 2 0 012 2v1m2 13a2 2 0 01-2-2V7m2 13a2 2 0 002-2V9a2 2 0 00-2-2h-2m-4-3H9M7 16h6M7 8h6v4H7V8z\"\n }));\n}\n\nexport default NewspaperIcon;","import * as React from \"react\";\n\nfunction OfficeBuildingIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-5 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4\"\n }));\n}\n\nexport default OfficeBuildingIcon;","import * as React from \"react\";\n\nfunction PencilAltIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z\"\n }));\n}\n\nexport default PencilAltIcon;","import * as React from \"react\";\n\nfunction PencilIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z\"\n }));\n}\n\nexport default PencilIcon;","import * as React from \"react\";\n\nfunction PhotographIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z\"\n }));\n}\n\nexport default PhotographIcon;","import * as React from \"react\";\n\nfunction PlusCircleIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M12 9v3m0 0v3m0-3h3m-3 0H9m12 0a9 9 0 11-18 0 9 9 0 0118 0z\"\n }));\n}\n\nexport default PlusCircleIcon;","import * as React from \"react\";\n\nfunction PlusIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M12 4v16m8-8H4\"\n }));\n}\n\nexport default PlusIcon;","import * as React from \"react\";\n\nfunction RefreshIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\"\n }));\n}\n\nexport default RefreshIcon;","import * as React from \"react\";\n\nfunction ReplyIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M3 10h10a8 8 0 018 8v2M3 10l6 6m-6-6l6-6\"\n }));\n}\n\nexport default ReplyIcon;","import * as React from \"react\";\n\nfunction SearchCircleIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M8 16l2.879-2.879m0 0a3 3 0 104.243-4.242 3 3 0 00-4.243 4.242zM21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }));\n}\n\nexport default SearchCircleIcon;","import * as React from \"react\";\n\nfunction SearchIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\n }));\n}\n\nexport default SearchIcon;","import * as React from \"react\";\n\nfunction SparklesIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M5 3v4M3 5h4M6 17v4m-2-2h4m5-16l2.286 6.857L21 12l-5.714 2.143L13 21l-2.286-6.857L5 12l5.714-2.143L13 3z\"\n }));\n}\n\nexport default SparklesIcon;","import * as React from \"react\";\n\nfunction TrashIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16\"\n }));\n}\n\nexport default TrashIcon;","import * as React from \"react\";\n\nfunction TruckIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M9 17a2 2 0 11-4 0 2 2 0 014 0zM19 17a2 2 0 11-4 0 2 2 0 014 0z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M13 16V6a1 1 0 00-1-1H4a1 1 0 00-1 1v10a1 1 0 001 1h1m8-1a1 1 0 01-1 1H9m4-1V8a1 1 0 011-1h2.586a1 1 0 01.707.293l3.414 3.414a1 1 0 01.293.707V16a1 1 0 01-1 1h-1m-6-1a1 1 0 001 1h1M5 17a2 2 0 104 0m-4 0a2 2 0 114 0m6 0a2 2 0 104 0m-4 0a2 2 0 114 0\"\n }));\n}\n\nexport default TruckIcon;","import * as React from \"react\";\n\nfunction XIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M6 18L18 6M6 6l12 12\"\n }));\n}\n\nexport default XIcon;","import { Fragment } from 'react'\nimport { Dialog, Transition } from '@headlessui/react'\nimport {CheckIcon, ExclamationIcon, InformationCircleIcon, XIcon} from '@heroicons/react/outline';\n\nimport { classNames } from '../../utils/helpers.js';\n\n\nexport default function AlertModal(props) {\n\n let options = props.options;\n\n const renderIcon = () => {\n\n let bgColor = '';\n\n if (options.iconType === \"success\") {\n bgColor = \"bg-green-100\"\n }\n if (options.iconType === \"error\") {\n bgColor = \"bg-red-500\"\n }\n if (options.iconType === \"info\" || options.iconType === \"warning\") {\n bgColor = \"bg-white\"\n }\n\n return (\n
\n {options.iconType === \"success\" && }\n {options.iconType === \"error\" && }\n {options.iconType === \"info\" && }\n
\n );\n }\n\n const onClose = () => {\n\n props.setOpen(false);\n\n if (options.onClose !== undefined && options.onClose !== null) {\n options.onClose();\n }\n }\n\n return (\n \n \n \n
\n \n\n
\n
\n \n
\n
\n
\n {if(onClose) onClose()}}\n >\n Close\n \n \n
\n
\n
\n {renderIcon()}\n
\n
\n \n {options.heading}\n \n
\n
\n {options.message}\n
\n
\n
\n
\n
\n
\n {if(onClose) onClose()}}\n >\n OK\n \n
\n
\n \n
\n
\n
\n
\n )\n}\n","// Library imports\n\nimport { Fragment } from 'react'\nimport { Dialog, Transition } from '@headlessui/react'\nimport { CheckIcon } from '@heroicons/react/outline'\n\n\nexport default function NotificationCenter(props) {\n\n const renderMessage = () => {\n return (\n
\n
\n \n
\n
\n \n {props.message.heading}\n \n
\n

\n {props.message.message}\n

\n
\n
\n
\n );\n }\n\n return (\n props.setOpen(false)}>\n {props.setOpen(false)}}>\n \n {/*props.setOpen(false)} />*/}\n
\n \n\n
\n\n {/* This element is to trick the browser into centering the modal contents. */}\n \n ​\n \n \n
\n {renderMessage()}\n
\n \n
\n
\n
\n )\n}\n","// Library imports\nimport React, {useState} from \"react\";\nimport {useParams} from \"react-router-dom\";\n\n// Local imports\nimport AlertModal from '../modals/AlertModal.jsx';\nimport NotificationCenter from '../../components/NotificationCenter.jsx';\n\nimport {resetPassword} from \"../../utils/coreApi.js\";\nimport {alertError, classNames} from \"../../utils/helpers.js\";\n\n\nconst PasswordReset = () => {\n\n // UI states\n const [alertOpen, setAlertOpen] = useState(false);\n const [alertOptions, setAlertOptions] = useState({\n \"iconType\": \"success\",\n \"heading\": \"\",\n \"message\": \"\",\n });\n\n const [notificationCenterOpen, setNotificationCenterOpen] = useState(false);\n const notificationCenterMessage = {\n \"heading\": \"Password changed\",\n \"message\": \"Your password has successfully been changed. Redirecting to login page...\"\n }\n\n // React router\n const {token} = useParams();\n\n const [password1, setPassword1] = useState(\"\");\n const [password2, setPassword2] = useState(\"\");\n\n const upperAndLowerCaseMatch = /(?=.*[a-z])(?=.*[A-Z])/;\n const containsANumberMatch = /\\d/;\n\n const onSetPasswordClicked = (event) => {\n\n if (password1 !== password2) {\n setAlertOptions({\n \"iconType\": \"error\",\n \"heading\": \"Password mismatch\",\n \"message\": \"The two entered passwords do not match\",\n });\n setAlertOpen(true);\n return;\n }\n\n // Consists of at least 12 characters.\n if (password1.length < 12) {\n setAlertOptions({\n \"iconType\": \"error\",\n \"heading\": \"Password length\",\n \"message\": \"Atleast 12 characters are required\",\n });\n\n setAlertOpen(true);\n return;\n }\n\n // Includes UPPER & lower case characters.\n if (!upperAndLowerCaseMatch.test(password1)) {\n setAlertOptions({\n \"iconType\": \"error\",\n \"heading\": \"Case error\",\n \"message\": \"Atleast one upper and lower case character is required\",\n });\n\n setAlertOpen(true);\n return;\n }\n\n // Includes one or more numbers.\n if (!containsANumberMatch.test(password1)) {\n setAlertOptions({\n \"iconType\": \"error\",\n \"heading\": \"Number required\",\n \"message\": \"Atleast one number is required\",\n });\n\n setAlertOpen(true);\n return;\n }\n\n // Do not include the example password\n if (password1 === \"silverCloud2019\") {\n setAlertOptions({\n \"iconType\": \"error\",\n \"heading\": \"Unique password required\",\n \"message\": \"Please use a unique password\",\n });\n\n setAlertOpen(true);\n return;\n }\n\n resetPassword(\n token,\n password1,\n password2,\n (data) => {\n\n setNotificationCenterOpen(true);\n setTimeout(() => {\n window.location = \"/login\"\n }, 3000);\n },\n (error) => {\n alertError(setAlertOpen, setAlertOptions, error);\n }\n );\n\n };\n\n // Page content\n return (\n <>\n\n \n\n \n\n
\n\n {/* HEADER */}\n
\n \"SLVRCLD\n

\n Reset password\n

\n
\n\n {/* BODY */}\n
\n
\n\n

\n Enter your new password.\n

\n\n
\n\n {/* PASSWORD 1 */}\n
\n \n
\n setPassword1(e.target.value)}\n type=\"password\"\n autoComplete=\"\"\n required\n class=\"input\"\n />\n
\n
\n\n {/* PASSWORD 2 */}\n
\n \n
\n setPassword2(e.target.value)}\n type=\"password\"\n autoComplete=\"\"\n required\n class=\"input\"/>\n
\n
\n\n {/* SUBMIT */}\n
\n \n
\n\n
\n
\n\n
\n

Password requirements:

\n\n

Consists of at least 12 characters

\n\n

Includes UPPER & lower case characters

\n\n

Includes one or more numbers

\n\n

\n Passwords match\n

\n\n

For example: silverCloud2019

\n
\n\n
\n\n
\n \n );\n};\n\nexport default PasswordReset;","// Library imports\nimport React, {useState} from \"react\";\n\n// Local imports\nimport AlertModal from '../modals/AlertModal.jsx';\nimport {requestPasswordReset} from \"../../utils/coreApi.js\";\nimport {alertError} from \"../../utils/helpers.js\";\n\n\nconst RequestPasswordReset = () => {\n\n // UI states\n const [alertOpen, setAlertOpen] = useState(false);\n const [alertOptions, setAlertOptions] = useState({\n \"iconType\": \"success\",\n \"heading\": \"Password reset requested\",\n \"message\": \"Check your email for the reset link.\",\n });\n\n const requestReset = (event) => {\n\n let emailField = document.getElementById(\"email\");\n\n if (!emailField.checkValidity()) {\n return;\n }\n\n requestPasswordReset(\n emailField.value,\n (data) => {\n\n alertOptions[\"onClose\"] = () => {\n window.location = \"/login\"\n }\n setAlertOptions({...alertOptions});\n setAlertOpen(true);\n },\n (error) => {\n alertError(setAlertOpen, setAlertOptions, error);\n }\n );\n\n event.preventDefault();\n return false;\n };\n\n return (\n <>\n\n \n\n
\n\n
\n \"SLVRCLD\n

\n Reset password\n

\n
\n\n
\n
\n

\n Enter your email address to receive a password reset link.\n

\n

Note: If the email you enter is not registered\n in our system, no email will be sent.

\n
\n
\n \n
\n \n
\n
\n\n
\n
\n Incorrect username of password.\n
\n
\n\n
\n \n
\n
\n\n
\n
\n
\n \n );\n};\n\nexport default RequestPasswordReset;","// Library imports\nimport React from \"react\";\n\n\n// Login container\nconst NotFound = () => {\n\n // Page content\n return (\n
\n );\n};\n\nexport default NotFound;","import React from \"react\";\n\nconst NotFound = () => {\n\n return (\n
\n
\n {/*\n\n
\n\n {/* To prevent Headless UI focusing on the first button (focusable-object) */}\n \n\n \n \n\n
{\n e.stopPropagation(); // prevent closing the modal from clicking inside of the main content\n }}\n >\n\n {/* MODAL */}\n {\n /**\n this is to prevent the parent grabbing the click events inside the modal box\n every click event (except buttons and anchors) 'bubble up' the dom tree to the highest parent with a click handler.\n the stopProgagation stops the bubbling up the dom tree, preventing the parent gray background receiving the onclick and hiding the modal\n **/\n e.stopPropagation();\n }}>\n
\n\n
\n\n {/* HEADING */}\n \n\n \n

Add multiple categories\n for: {props.activeOrgInModal.info.name}

\n
\n\n
\n\n {/* BODY */}\n
\n\n\n
\n\n {/* EXAMPLE */}\n \n \n

\n If the checkbox is already ticket, it means the\n category is already in the list\n of included SalesCategories for this organisation\n

\n
\n\n {/* LEVEL FOLDING */}\n \n

Save the selected categories

\n
\n NB: B and C may take a few seconds to load\n
}>\n
\n \n \n \n
\n \n\n\n {/* SAVE BUTTONS */}\n
\n\n {/* ADD */}\n \n

Only add the additional selected categories

\n
\n Unselected categories will not be removed(excluded)\n
}\n >\n \n \n\n {/* SAVE */}\n \n

Update all categories

\n
\n
\n

\n - Unchanged categories won't be modified\n

\n

\n - Newly selected categories will be added (included)\n

\n

\n - Un-selected categories will be removed (excluded)\n

\n
\n
}\n >\n \n \n\n
\n\n\n
\n\n
\n\n
\n\n {allCatA.map((catA, index) => (\n\n // LEVEL A CATEGORY INSTANCE: e.g \"Tools & DIY\"\n
\n\n
\n toggleSelectCategory('CATEGORY_A', catA.name)}\n />\n

\n {catA.name}\n

\n {foldingArrow(catA.name)}\n

[{getSubCategoryCount(catA.name, 0)}]

\n
\n

\n
\n\n\n {/* LEVEL B CATEGORY INSTANCE: e.g \"Power & Cordless Tools\" */}\n
\n\n {\n shouldUnfoldB(catA.name)\n &&\n allCatB_forCatA(catA.name).map((catB, index) => (\n\n
\n\n
\n toggleSelectCategory('CATEGORY_B', catB.name)}\n />\n

\n {catB.name}\n\n \n {foldingArrow(catB.name)}\n

[{getSubCategoryCount(catB.name, 1)}]

\n
\n\n

\n
\n\n\n {/* LEVEL C CATEGORY INSTANCE: e.g \"Angle Grinders\" */}\n \n\n {\n shouldUnfoldC(catB.name)\n &&\n allCatC_forCatB(catB.name).map((catC, index) => (\n\n \n toggleSelectCategory('CATEGORY_C', catC.name)}\n />\n

{catC.name}

\n
\n\n /* ------ LEVEL B INSTANCE END ------ */\n\n ))}\n
\n\n\n
\n\n /* ------ LEVEL B INSTANCE END ------ */\n\n ))}\n\n \n\n {/* GAP */}\n {/* Different gaps between level A depending on the folding */}\n
\n\n\n \n\n // ------ LEVEL A CATEGORY INSTANCE END ---\n\n ))}\n\n\n \n\n\n \n\n \n\n {/* X CLOSE */}\n
\n props.setOpen(false)}\n >\n Close\n \n \n\n\n
\n\n \n\n {/* FOOTER */}\n
\n \n props.setOpen(false)}\n >\n Close\n \n \n\n {/* SAVE BUTTONS */}\n
\n\n {/* ADD */}\n \n

Only add the additional selected categories

\n
\n Unselected categories will not be removed(excluded)\n
}\n >\n \n \n\n {/* SAVE */}\n \n

Update all categories

\n
\n
\n

\n - Unchanged categories won't be modified\n

\n

\n - Newly selected categories will be added (included)\n

\n

\n - Un-selected categories will be removed (excluded)\n

\n
\n
}\n >\n \n \n\n \n\n \n\n \n\n \n\n \n\n \n \n \n \n\n );\n\n}\n\n\nfunction Modal_RegionCreation(props) {\n\n // Query all region data\n const [allRegionData, setAllRegionData] = useState(null);\n\n useEffect(() => {\n if (allRegionData) {\n populateRegions();\n } else {\n queryRegions(\n null,\n props.activeOrgInModal.info.country,\n (data) => {\n // data.regions should contain an array of region objects\n // each with region_0 through region_4 fields\n const uniqueRegions = data.regions;\n setAllRegionData(uniqueRegions);\n },\n (error) => props.onError(error)\n );\n }\n }, [allRegionData]);\n\n // Repacked region data to make rendering more readable and maintainable\n const [allReg0, setAllReg0] = useState([]);\n const [allReg1, setAllReg1] = useState([]);\n const [allReg2, setAllReg2] = useState([]);\n const [allReg3, setAllReg3] = useState([]);\n const [allReg4, setAllReg4] = useState([]);\n\n const populateRegions = () => {\n // Filter the regions into their respective levels\n let level0 = [];\n let level1 = [];\n let level2 = [];\n let level3 = [];\n let level4 = [];\n\n allRegionData.forEach(region => {\n // Example region structure:\n // {\n // \"id\": \"some_id\",\n // \"region_0\": \"Country\",\n // \"region_1\": \"State/Province\",\n // \"region_2\": \"City\",\n // \"region_3\": \"District\",\n // \"region_4\": \"Neighborhood\"\n // }\n\n // Level 0 (region_0)\n if (region.region_0) {\n const alreadyAdded = level0.find(r => r.name === region.region_0);\n if (!alreadyAdded) level0.push({ 'name': region.region_0 });\n }\n\n // Level 1 (region_1)\n if (region.region_1) {\n const alreadyAdded = level1.find(r => r.name === region.region_1 && r.belongsTo === region.region_0);\n if (!alreadyAdded) level1.push({\n 'name': region.region_1,\n 'belongsTo': region.region_0\n });\n }\n\n // Level 2 (region_2)\n if (region.region_2) {\n const alreadyAdded = level2.find(r => r.name === region.region_2 && r.belongsTo === region.region_1);\n if (!alreadyAdded) level2.push({\n 'name': region.region_2,\n 'belongsTo': region.region_1\n });\n }\n\n // Level 3 (region_3)\n if (region.region_3) {\n const alreadyAdded = level3.find(r => r.name === region.region_3 && r.belongsTo === region.region_2);\n if (!alreadyAdded) level3.push({\n 'name': region.region_3,\n 'belongsTo': region.region_2\n });\n }\n\n // Level 4 (region_4)\n if (region.region_4) {\n const alreadyAdded = level4.find(r => r.name === region.region_4 && r.belongsTo === region.region_3);\n if (!alreadyAdded) level4.push({\n 'name': region.region_4,\n 'belongsTo': region.region_3\n });\n }\n\n });\n\n setAllReg0(level0);\n setAllReg1(level1);\n setAllReg2(level2);\n setAllReg3(level3);\n setAllReg4(level4);\n };\n\n // Region selection\n const [selectedRegions, setSelectedRegions] = useState([]);\n\n const selectRegion = (level, name) => {\n setSelectedRegions([...selectedRegions, { level: level, name: name }]);\n }\n\n const deselectRegion = (level, name) => {\n const removed = selectedRegions.filter(r => !(r.level === level && r.name === name));\n setSelectedRegions(removed);\n }\n\n const toggleSelectRegion = (level, name) => {\n const selected = isRegionSelected(level, name);\n if (selected) {\n deselectRegion(level, name);\n } else {\n selectRegion(level, name);\n }\n }\n\n const isRegionSelected = (level, name) => {\n const exists = selectedRegions.find(r => r.level === level && r.name === name);\n return !isEmpty(exists);\n }\n\n useEffect(() => {\n populateSelectedWithExistingRegions();\n }, [props.open, allRegionData]);\n\n function populateSelectedWithExistingRegions() {\n // Look at the previously added regions inside the activeOrgInModal,\n // and populate selectedRegions with them\n if (!props.orgOptions?.options?.sales_regions || !allRegionData) return;\n\n const existingRegions = [];\n\n // Example of how a region might be stored:\n // {\n // region: \"SomeRegionName\",\n // level: \"REGION_0\" ... \"REGION_4\",\n // type: \"INCLUDE\"\n // }\n props.orgOptions.options.sales_regions.forEach(region => {\n if (region.type !== 'INCLUDE') return;\n\n // Match in full dataset\n const matchingRegion = allRegionData.find(r => {\n switch (region.level) {\n case 'REGION_0': return r.region_0 === region.region;\n case 'REGION_1': return r.region_1 === region.region;\n case 'REGION_2': return r.region_2 === region.region;\n case 'REGION_3': return r.region_3 === region.region;\n case 'REGION_4': return r.region_4 === region.region;\n default: return false;\n }\n });\n\n if (matchingRegion) {\n existingRegions.push({\n level: region.level,\n name: region.region,\n });\n }\n });\n\n setSelectedRegions(existingRegions);\n }\n\n // Folding\n const [levelFolding, setLevelFolding] = useState('1'); // By default, fold to the second level\n // We'll store opened names at each level in perLevelFolding\n const [perLevelFolding, setPerLevelFolding] = useState([]);\n const toggleRegionFolding = (regionName) => {\n if (perLevelFolding.includes(regionName)) {\n setPerLevelFolding(perLevelFolding.filter(name => name !== regionName));\n } else {\n setPerLevelFolding([...perLevelFolding, regionName]);\n }\n }\n\n // Utility to count sub-level\n function getSubRegionCount(name, level) {\n // level indicates at which level we are counting the next level down\n // level 0: count how many region_1 under region_0\n // level 1: count how many region_2 under region_1\n // etc.\n let arrayFrom, field;\n switch (level) {\n case 0: arrayFrom = allReg1; field = 'belongsTo'; break;\n case 1: arrayFrom = allReg2; field = 'belongsTo'; break;\n case 2: arrayFrom = allReg3; field = 'belongsTo'; break;\n case 3: arrayFrom = allReg4; field = 'belongsTo'; break;\n default: return 0;\n }\n\n return arrayFrom.filter(r => r[field] === name).length;\n }\n\n function reduceToParentRegions() {\n // Similar logic to reduceToParentCategories but now for 5 levels.\n // If all children of a region are selected, just select the parent.\n\n const selected0 = selectedRegions.filter(r => r.level === 'REGION_0').map(r => r.name);\n const selected1 = selectedRegions.filter(r => r.level === 'REGION_1').map(r => r.name);\n const selected2 = selectedRegions.filter(r => r.level === 'REGION_2').map(r => r.name);\n const selected3 = selectedRegions.filter(r => r.level === 'REGION_3').map(r => r.name);\n const selected4 = selectedRegions.filter(r => r.level === 'REGION_4').map(r => r.name);\n\n const s0 = new Set(selected0);\n const s1 = new Set(selected1);\n const s2 = new Set(selected2);\n const s3 = new Set(selected3);\n const s4 = new Set(selected4);\n\n // Helpers\n function allSelectedAtLevel(childArray, parentName, setOfChildNames) {\n const children = childArray.filter(c => c.belongsTo === parentName);\n return children.length > 0 && children.every(c => setOfChildNames.has(c.name));\n }\n\n function isAll4Under3Selected(r3Name) {\n return allSelectedAtLevel(allReg4, r3Name, s4);\n }\n\n function isAll3Under2Selected(r2Name) {\n // For each r3 under r2\n const r3Children = allReg3.filter(c => c.belongsTo === r2Name);\n return r3Children.length > 0 && r3Children.every(r3Child => {\n return s3.has(r3Child.name) || isAll4Under3Selected(r3Child.name);\n });\n }\n\n function isAll2Under1Selected(r1Name) {\n const r2Children = allReg2.filter(c => c.belongsTo === r1Name);\n return r2Children.length > 0 && r2Children.every(r2Child => {\n return s2.has(r2Child.name) || isAll3Under2Selected(r2Child.name);\n });\n }\n\n function isAll1Under0Selected(r0Name) {\n const r1Children = allReg1.filter(c => c.belongsTo === r0Name);\n return r1Children.length > 0 && r1Children.every(r1Child => {\n return s1.has(r1Child.name) || isAll2Under1Selected(r1Child.name);\n });\n }\n\n const finalSelection = [];\n\n // Process level 0\n for (const r0 of allReg0) {\n const r0Name = r0.name;\n\n if (isAll1Under0Selected(r0Name)) {\n // Just select REGION_0\n finalSelection.push({ level: 'REGION_0', name: r0Name });\n } else {\n // Not fully selected, go down to level 1\n const r1Children = allReg1.filter(r1 => r1.belongsTo === r0Name);\n for (const r1Child of r1Children) {\n const r1Name = r1Child.name;\n\n if (isAll2Under1Selected(r1Name)) {\n finalSelection.push({ level: 'REGION_1', name: r1Name });\n } else {\n // Check level 2\n const r2Children = allReg2.filter(r2 => r2.belongsTo === r1Name);\n for (const r2Child of r2Children) {\n const r2Name = r2Child.name;\n\n if (isAll3Under2Selected(r2Name)) {\n finalSelection.push({ level: 'REGION_2', name: r2Name });\n } else {\n // Check level 3\n const r3Children = allReg3.filter(r3 => r3.belongsTo === r2Name);\n for (const r3Child of r3Children) {\n const r3Name = r3Child.name;\n if (isAll4Under3Selected(r3Name)) {\n finalSelection.push({ level: 'REGION_3', name: r3Name });\n } else {\n // Check level 4\n const r4Children = allReg4.filter(r4 => r4.belongsTo === r3Name);\n for (const r4Child of r4Children) {\n if (s4.has(r4Child.name)) {\n finalSelection.push({ level: 'REGION_4', name: r4Child.name });\n }\n }\n\n // Include level 3 if explicitly selected\n if (s3.has(r3Name)) finalSelection.push({ level: 'REGION_3', name: r3Name });\n }\n }\n\n // Include level 2 if explicitly selected\n if (s2.has(r2Name)) finalSelection.push({ level: 'REGION_2', name: r2Name });\n }\n }\n\n // Include level 1 if explicitly selected\n if (s1.has(r1Name)) finalSelection.push({ level: 'REGION_1', name: r1Name });\n }\n }\n\n // Include level 0 if explicitly selected\n if (s0.has(r0Name)) finalSelection.push({ level: 'REGION_0', name: r0Name });\n }\n }\n\n return finalSelection;\n }\n\n function saveRegions() {\n const reducedSelectedRegions = reduceToParentRegions();\n\n const newlyAddedRegions = reducedSelectedRegions.filter(reg => {\n // Check if already in the org\n const exists = props.orgOptions?.options?.sales_regions?.find(r => r.region === reg.name && r.level === reg.level);\n return !exists;\n });\n\n if (newlyAddedRegions.length === 0) {\n return props.showNotificationModal(\n 'info',\n 'No new regions',\n 'No new regions have been selected to add to the organisation.'\n );\n }\n\n const successfulRegions = [];\n\n // Start with a resolved promise to chain subsequent operations\n let chain = Promise.resolve();\n\n newlyAddedRegions.forEach((reg, index) => {\n chain = chain\n .then(() => onAddRegion(reg.level, reg.name))\n .then(() => {\n successfulRegions.push(reg.name);\n\n // Introduce a 100ms delay before the next addition\n return new Promise(resolve => setTimeout(resolve, 100));\n });\n });\n\n chain.then(() => {\n // Once all have completed:\n props.showNotificationModal(\n 'success',\n 'Added',\n
\n The following regions have been successfully added:\n
    \n {successfulRegions.map(reg => (\n
  • {reg}
  • \n ))}\n
\n
\n );\n\n localStorage.clear();\n props.refreshOrganisationModal();\n });\n }\n\n const onAddRegion = (level, name) => {\n const addRegionToOrganisation = `\n mutation {\n supplier_include_sales_region(\n supplier: \"${props.activeOrgInModal.id}\"\n region: \"${name}\" \n level: ${level}\n ){\n error {type, message}\n organisation {\n id\n options {\n sales_regions {\n region\n level\n type\n } \n }\n }\n }\n }\n `;\n\n return new Promise((resolve) => {\n customGraphRequest(\n addRegionToOrganisation,\n () => resolve(),\n () => resolve()\n );\n });\n };\n\n const updateRegions = () => {\n // 1 --- Any regions that are in the organisation but not selected should be removed\n // 2 --- Save all newly selected regions\n // 3 --- Display a success message, showing all newly added categories, and all removed regions\n const reducedSelectedRegions = reduceToParentRegions();\n\n // Current included regions in the org\n const currentRegions = props.orgOptions?.options?.sales_regions?.filter(r => r.type === 'INCLUDE') || [];\n\n // Determine which regions to remove\n const toRemove = currentRegions.filter(curReg =>\n !reducedSelectedRegions.find(selReg => selReg.name === curReg.region && selReg.level === curReg.level)\n );\n\n // Determine which regions to add\n const toAdd = reducedSelectedRegions.filter(selReg =>\n !currentRegions.find(curReg => curReg.region === selReg.name && curReg.level === selReg.level)\n );\n\n // If no changes\n if (toAdd.length === 0 && toRemove.length === 0) {\n return props.showNotificationModal(\n 'info',\n 'No changes',\n 'No regions were changed.'\n );\n }\n\n const addedNames = [];\n const removedNames = [];\n\n // Create an array of operations (each a function returning a Promise)\n const allOperations = [\n ...toAdd.map(reg => () => onAddRegion(reg.level, reg.name).then(() => addedNames.push(reg.name))),\n ...toRemove.map(reg => () => onRemoveRegion(reg.level, reg.region).then(() => removedNames.push(reg.region)))\n ];\n\n // Execute all operations in sequence, adding a 100ms delay before each subsequent call\n allOperations.reduce(\n (acc, operation, index) => {\n return acc.then(() =>\n new Promise(resolve => setTimeout(resolve, index === 0 ? 0 : 100))\n .then(operation)\n );\n },\n Promise.resolve()\n ).then(() => {\n // Once all done, show success notification\n props.showNotificationModal(\n 'success',\n 'Regions Updated',\n
\n {addedNames.length > 0 && (\n <>\n

Added:

\n
    \n {addedNames.map(reg => (\n
  • {reg}
  • \n ))}\n
\n
\n \n )}\n {removedNames.length > 0 && (\n <>\n

Removed:

\n
    \n {removedNames.map(reg => (\n
  • {reg}
  • \n ))}\n
\n \n )}\n
\n );\n\n // Clear local storage and refresh\n localStorage.clear();\n props.refreshOrganisationModal();\n });\n }\n\n\n const onRemoveRegion = (level, name) => {\n const removeRegionFromOrganisation = `\n mutation {\n supplier_exclude_sales_region(\n supplier: \"${props.activeOrgInModal.id}\"\n region: \"${name}\" \n level: ${level}\n ){\n error {type, message}\n organisation {\n id\n options {\n sales_regions {\n region\n level\n type\n } \n }\n }\n }\n }\n `;\n\n return new Promise((resolve, reject) => {\n customGraphRequest(\n removeRegionFromOrganisation,\n () => resolve(),\n (error) => reject(error)\n );\n });\n };\n\n // Rendering logic\n\n const allReg1_forReg0 = (reg0Name) => allReg1.filter(r => r.belongsTo === reg0Name);\n const allReg2_forReg1 = (reg1Name) => allReg2.filter(r => r.belongsTo === reg1Name);\n const allReg3_forReg2 = (reg2Name) => allReg3.filter(r => r.belongsTo === reg2Name);\n const allReg4_forReg3 = (reg3Name) => allReg4.filter(r => r.belongsTo === reg3Name);\n\n const shouldUnfold1 = (reg0Name) => perLevelFolding.includes(reg0Name) || ['1','2','3','4'].includes(levelFolding);\n const shouldUnfold2 = (reg1Name) => perLevelFolding.includes(reg1Name) || ['2','3','4'].includes(levelFolding);\n const shouldUnfold3 = (reg2Name) => perLevelFolding.includes(reg2Name) || ['3','4'].includes(levelFolding);\n const shouldUnfold4 = (reg3Name) => perLevelFolding.includes(reg3Name) || ['4'].includes(levelFolding);\n\n function foldingArrow(name) {\n const style = 'h-6 btn-light shadow-none border-gray-100 text-gray-400 m-0 p-0 px-2';\n return (\n perLevelFolding.includes(name) ?\n toggleRegionFolding(name)}/>\n :\n toggleRegionFolding(name)}/>\n );\n }\n\n\n\n\n return (\n props.setOpen(false)}>\n {\n props.setOpen(false)\n }}>\n \n
\n \n\n \n\n
\n \n\n \n
\n
e.stopPropagation()}\n >\n \n\n {/* HEADER */}\n \n \n

Add multiple regions for: {props.activeOrgInModal.info.name}

\n
\n
\n\n {/* BODY */}\n
\n
\n \n \n

\n If the checkbox is already ticked, it means the\n region is already in the list\n of included SalesRegions for this organisation.\n

\n
\n\n {/* LEVEL FOLDING */}\n \n

Change folding level

\n
\n May take a few seconds to load\n
}>\n
\n \n \n \n \n \n
\n \n\n\n {/* SAVE BUTTONS */}\n
\n\n {/* ADD */}\n \n

Only add the additional selected regions

\n
\n Unselected regions will not be removed(excluded)\n
}\n >\n \n \n\n {/* SAVE */}\n \n

Update all regions

\n
\n
\n

\n - Unchanged regions won't be modified\n

\n

\n - Newly selected regions will be added (included)\n

\n

\n - Un-selected regions will be removed (excluded)\n

\n
\n
}\n >\n \n \n\n
\n\n \n\n
\n\n
\n\n {allReg0.map((reg0) => (\n
\n
\n toggleSelectRegion('REGION_0', reg0.name)}\n />\n

\n {reg0.name}\n

\n {foldingArrow(reg0.name)}\n

[{getSubRegionCount(reg0.name, 0)}]

\n
\n

\n
\n\n {/* Level 1 */}\n
\n {\n shouldUnfold1(reg0.name) &&\n allReg1_forReg0(reg0.name).map(reg1 => (\n
\n
\n toggleSelectRegion('REGION_1', reg1.name)}\n />\n

\n {reg1.name}\n

\n {foldingArrow(reg1.name)}\n

[{getSubRegionCount(reg1.name, 1)}]

\n
\n

\n
\n\n {/* Level 2 */}\n
\n {\n shouldUnfold2(reg1.name) &&\n allReg2_forReg1(reg1.name).map(reg2 => (\n
\n \n toggleSelectRegion('REGION_2', reg2.name)}\n />\n

\n {reg2.name}\n \n {foldingArrow(reg2.name)}\n

[{getSubRegionCount(reg2.name, 2)}]

\n
\n

\n
\n\n {/* Level 3 */}\n \n {\n shouldUnfold3(reg2.name) &&\n allReg3_forReg2(reg2.name).map(reg3 => (\n
\n \n toggleSelectRegion('REGION_3', reg3.name)}\n />\n

\n {reg3.name}\n \n {foldingArrow(reg3.name)}\n

[{getSubRegionCount(reg3.name, 3)}]

\n
\n

\n
\n\n {/* Level 4 */}\n \n {\n shouldUnfold4(reg3.name) &&\n allReg4_forReg3(reg3.name).map(reg4 => (\n \n toggleSelectRegion('REGION_4', reg4.name)}\n />\n

{reg4.name}

\n
\n ))\n }\n
\n
\n ))\n }\n \n \n ))\n }\n \n \n ))\n }\n \n\n {/* Spacing depending on folding level */}\n
\n \n ))}\n\n \n \n\n {/* Close Button */}\n
\n props.setOpen(false)}\n >\n Close\n \n \n
\n\n {/* FOOTER */}\n
\n \n props.setOpen(false)}\n >\n Close\n \n \n\n \n

Add regions to organisation

\n
\n Only new regions will be added\n
}\n >\n \n \n \n\n \n \n \n \n \n
\n
\n );\n}\n\n\nfunction Section_SalesRegions(props) {\n\n\n const salesRegionsTable_columns = [\n {Header: 'Level', accessor: 'level'},\n {Header: 'Region', accessor: 'region'},\n {Header: 'Status', accessor: 'type'},\n {\n Header: 'Actions', headerStyle: 'text-right', accessor: 'actions',\n searchable: false, id: 'edit',\n // width: '150%',\n Cell: ({cell}) => (\n
\n\n {\n cell.row.original.type === 'INCLUDE' ?\n\n onExcludeRegion(cell)}\n >\n Exclude\n \n\n :\n\n onIncludeRegion(cell)}\n >\n Include\n \n }\n\n
\n )\n }\n ];\n const [salesRegionsTable_data, setSalesRegionsTable_data] = useState([]);\n\n const [allRegionData, setAllRegionData] = useState(null);\n\n useEffect(() => {\n\n if (allRegionData) {\n populateRegions();\n } else {\n queryRegions(\n null, props.activeOrgInModal.info.country,\n (data) => {\n\n let regions = data['regions'];\n const uniqueRegions = removeDuplicatesByProperties(regions);\n setAllRegionData(uniqueRegions);\n\n },\n (error) => props.onError(error)\n );\n }\n\n }, [allRegionData]);\n\n function removeDuplicatesByProperties(arr) {\n const seen = new Map();\n return arr.filter((item) => {\n const key = item.region_0 + '|' + item.region_1 + '|' + item.region_2 + '|' + item.region_3;\n if (!seen.has(key)) {\n seen.set(key, true);\n return true;\n }\n return false;\n });\n }\n\n useEffect(() => {\n if (!props.showModal) setAllRegionData(null);\n }, [props.showModal]);\n\n const [regions_0, setRegions_0] = useState([]); // all regions dictionaries, with only region_0 data\n const [regions_1, setRegions_1] = useState([]); // all regions dictionaries, with region_0 and region_1 data\n const [regions_2, setRegions_2] = useState([]); // all regions dictionaries, with region_0, region_1 and region_2 data\n const [regions_3, setRegions_3] = useState([]); // all regions dictionaries, with region_0, region_1 and region_2 data\n const [selectedRegion_0, setSelectedRegion_0] = useState({}); // countries\n const [selectedRegion_1, setSelectedRegion_1] = useState({}); // provinces\n const [selectedRegion_2, setSelectedRegion_2] = useState({}); // areas\n const [selectedRegion_3, setSelectedRegion_3] = useState({}); // areas\n\n const populateRegions = () => {\n\n let r0 = [];\n let r1 = [];\n let r2 = [];\n let r3 = [];\n allRegionData.forEach(region => {\n if (region.region_0 && !region.region_1) r0.push(region);\n else if (region.region_1 && !region.region_2) r1.push(region);\n else if (region.region_2 && !region.region_3) r2.push(region);\n else if (region.region_3) {\n r3.push(region);\n }\n\n });\n setRegions_0(r0);\n setRegions_1(r1);\n setRegions_2(r2);\n setRegions_3(r3);\n\n\n // for each region 0, get all unique region 1's\n if (!props.orgOptions?.options?.sales_regions) return;\n let tabledata = [];\n props.orgOptions.options.sales_regions.forEach(region => {\n let row = {\n 'region': region.region,\n 'level': region.level,\n 'type': region.type,\n 'regionData': region // include the whole region for other functions to use\n };\n tabledata.push(row);\n });\n setSalesRegionsTable_data(tabledata);\n\n };\n\n\n const onExcludeRegion = (rowData) => {\n\n let region = rowData.row?.original?.regionData;\n\n let excludeRegionFromSupplier = `\n mutation {\n supplier_exclude_sales_region(\n supplier: \"${props.activeOrgInModal.id}\"\n region: \"${region.region}\" \n level: ${region.level}\n ){\n error {type, message}\n organisation {\n id\n options{\n sales_regions{\n level\n region\n type\n } \n }\n }\n \n }\n }\n `;\n\n customGraphRequest(\n excludeRegionFromSupplier,\n (data) => {\n\n // clear all local(cache) storage\n localStorage.clear();\n\n props.showNotificationModal('success', 'Exclude successful', 'The region has been excluded successfully');\n props.refreshOrganisationModal();\n },\n (error) => props.onError(error)\n );\n\n };\n const onIncludeRegion = (rowData) => {\n\n let region = rowData.row?.original?.regionData;\n\n let addRegionToOrganisation = `\n mutation {\n supplier_include_sales_region(\n supplier: \"${props.activeOrgInModal.id}\"\n region: \"${region.region}\" \n level: ${region.level}\n ){\n error {type, message}\n organisation {\n id\n options{\n sales_regions{\n level\n region\n type\n } \n }\n }\n \n }\n }\n `;\n\n customGraphRequest(\n addRegionToOrganisation,\n (data) => {\n\n // clear all local(cache) storage\n localStorage.clear();\n\n props.showNotificationModal('success', 'Include successful', 'The region has been included successfully');\n props.refreshOrganisationModal();\n },\n (error) => props.onError(error)\n );\n };\n\n\n const [showAddRegionInputs, setShowAddRegionInputs] = useState(false);\n const onAddRegion = () => {\n\n // Toggle show the \"add region inputs\"\n if (!showAddRegionInputs) {\n setShowAddRegionInputs(true);\n let region0 = allRegionData.find(region => region.region_0 === props.activeOrgInModal.info.country_text && !region.region_1 && !region.region_2);\n setSelectedRegion_0(region0);\n return;\n }\n\n let regionName = '';\n let regionLevel = '';\n\n if (!isEmpty(selectedRegion_3)) {\n regionName = selectedRegion_3.region_3;\n regionLevel = 'REGION_3';\n } else if (!isEmpty(selectedRegion_2)) {\n regionName = selectedRegion_2.region_2;\n regionLevel = 'REGION_2';\n } else if (!isEmpty(selectedRegion_1)) {\n regionName = selectedRegion_1.region_1;\n regionLevel = 'REGION_1';\n } else if (!isEmpty(selectedRegion_0)) {\n regionName = selectedRegion_0.region_0;\n regionLevel = 'REGION_0';\n }\n\n let addRegionToOrganisation = `\n mutation {\n supplier_include_sales_region(\n supplier: \"${props.activeOrgInModal.id}\"\n region: \"${regionName}\" \n level: ${regionLevel}\n ){\n error {type, message}\n organisation {\n id\n options{\n sales_regions{\n level\n region\n type\n } \n }\n }\n \n }\n }\n `;\n\n customGraphRequest(\n addRegionToOrganisation,\n (data) => {\n\n // clear all local(cache) storage\n localStorage.clear();\n\n props.showNotificationModal('success', 'Activation successful', 'The region has been activated successfully');\n props.refreshOrganisationModal();\n },\n (error) => props.onError(error)\n );\n\n };\n\n const onResetSalesRegions = () => {\n\n props.showConfirmModal(\n 'warning',\n 'Reset Sales Regions',\n 'Are you sure you want to reset the sales regions for this organisation?',\n 'Reset',\n () => {\n\n let resetSalesRegions = `\n mutation {\n supplier_set_sales_regions(\n supplier: \"${props.activeOrgInModal.id}\"\n regions:[] \n ){\n error{type, message}\n organisation{\n id\n options{\n sales_regions{\n level\n region\n type\n } \n }\n }\n }\n }`;\n\n customGraphRequest(\n resetSalesRegions,\n (data) => {\n\n // clear all local(cache) storage\n localStorage.clear();\n\n props.showNotificationModal('success', 'Sales regions reset', 'The sales regions have been reset successfully');\n props.refreshOrganisationModal();\n },\n (error) => props.onError(error)\n );\n\n },\n null\n );\n };\n\n function getSubRegionCount(region, level){\n let count = allRegionData.filter(r => {\n if (level == 0) {\n if (r.region_0 == region.region_0 && r.region_1) return true;\n }\n if (level == 1) {\n if (r.region_1 == region.region_1 && r.region_2) return true;\n }\n if (level == 2) {\n if (r.region_2 == region.region_2 && r.region_3) return true;\n }\n });\n return count.length;\n }\n\n // List of organisations that can see this section.\n const allowedOrgTypes = ['SUPPLIER'];\n\n // Check if the active organisation type is in the allowed list.\n const canSeeSection = allowedOrgTypes.includes(props.activeOrgInModal.type);\n\n if (!canSeeSection) {\n return <>;\n }\n\n return (\n <>\n
\n\n {/* title */}\n
\n

Sales Regions

\n\n
\n \n\n
\n
\n\n
\n \n
\n\n
\n \n
\n\n
\n \n
\n\n
\n \n
\n\n
\n\n\n \n Reset\n \n \n Add region\n \n props.setShowRegionCreationModal(true)}>\n Add multiple regions\n \n \n \n
\n\n
\n\n {/* table */}\n
\n \n
\n \n\n \n );\n}\n\n\nfunction Section_SalesCategories(props) {\n\n const salesCategoriesTable_columns = [\n {Header: 'Level', accessor: 'level'},\n {Header: 'Name', accessor: 'name'},\n {Header: 'Status', accessor: 'rule'},\n {\n Header: 'Actions', headerStyle: 'text-right', accessor: 'actions',\n searchable: false, id: 'edit',\n // width: '150%',\n Cell: ({cell}) => (\n
\n\n {\n cell.row.original.rule === 'INCLUDE' ?\n\n onExcludeCategory(cell)}\n >\n Exclude\n \n\n :\n\n onIncludeCategory(cell)}\n >\n Include\n \n }\n\n onRemoveCategory(cell)}\n >\n Remove\n \n\n
\n )\n }\n ];\n const [salesCategoriesTable_data, setSalesCategoriesTable_data] = useState([]);\n\n const [allCategoryData, setAllCategoryData] = useState(null);\n\n useEffect(() => {\n\n if (allCategoryData) {\n populateCategories();\n } else {\n queryCategoriesBasic(\n (data) => {\n setAllCategoryData(data['categories']);\n },\n (error) => props.onError(error)\n );\n }\n\n }, [allCategoryData]);\n\n useEffect(() => {\n if (!props.showModal) setAllCategoryData(null);\n }, [props.showModal]);\n\n const [category_a, setCategory_a] = useState([]); // A list of category dictionaries, unique category_a\n const [category_b, setCategory_b] = useState([]); // A list of category dictionaries, unique category_b\n const [category_c, setCategory_c] = useState([]); // A list of category dictionaries, unique category_c\n const [category_d, setCategory_d] = useState([]); // A list of category dictionaries, unique category_d\n const [selectedCategory_a, setSelectedCategory_a] = useState({});\n const [selectedCategory_b, setSelectedCategory_b] = useState({});\n const [selectedCategory_c, setSelectedCategory_c] = useState({});\n const [selectedCategory_d, setSelectedCategory_d] = useState({});\n\n const populateCategories = () => {\n\n // Filter the categories into their respective levels\n let cA = [];\n let cB = [];\n let cC = [];\n let cD = [];\n allCategoryData.forEach(category => {\n if (category.category_a) {\n !cA.find(c => c.category_a === category.category_a) && cA.push(category); // add this category, if it has not already been added to the cA array\n }\n if (category.category_b) {\n !cB.find(c => c.category_b === category.category_b) && cB.push(category); // add this category, if it has not already been added to the cB array\n }\n if (category.category_c) {\n !cC.find(c => c.category_c === category.category_c) && cC.push(category); // add this category, if it has not already been added to the cC array\n }\n if (category.category_d) {\n !cD.find(c => c.category_d === category.category_d) && cD.push(category); // add this category, if it has not already been added to the cD array\n }\n\n });\n setCategory_a(cA);\n setCategory_b(cB);\n setCategory_c(cC);\n setCategory_d(cD);\n\n\n // Populate the SalesRegion table\n if (!props.orgOptions?.options?.sales_categories) return;\n let tabledata = [];\n props.orgOptions.options.sales_categories.forEach(category => {\n let row = {\n 'name': category.category_name,\n 'level': category.category_level,\n 'rule': category.category_rule,\n 'categoryData': category // include the whole region for other functions to use\n };\n tabledata.push(row);\n });\n setSalesCategoriesTable_data(tabledata);\n\n };\n\n\n const onRemoveCategory = (rowData) => {\n\n props.showConfirmModal(\n 'warning',\n 'Remove Sales Category',\n 'Are you sure you want to remove this sales category for this organisation?',\n 'Remove',\n () => {\n\n let category = rowData.row?.original?.categoryData;\n\n let excludeRegionFromSupplier = `\n mutation {\n supplier_remove_sales_category(\n supplier: \"${props.activeOrgInModal.id}\"\n category_name: \"${category.category_name}\" \n category_level: ${category.category_level}\n ){\n error {type, message}\n organisation {\n id\n options{\n sales_categories{\n date_created\n date_updated\n category_name\n category_level\n category_rule\n brands_included\n brands_excluded\n } \n }\n }\n \n }\n }\n `;\n\n\n customGraphRequest(\n excludeRegionFromSupplier,\n (data) => {\n\n // clear all local(cache) storage\n localStorage.clear();\n\n props.showNotificationModal('success', 'Removal successful', 'The category has been removed successfully');\n props.refreshOrganisationModal();\n },\n (error) => props.onError(error)\n );\n\n },\n null\n );\n\n };\n\n const onExcludeCategory = (rowData) => {\n\n let category = rowData.row?.original?.categoryData;\n\n let excludeRegionFromSupplier = `\n mutation {\n supplier_exclude_sales_category(\n supplier: \"${props.activeOrgInModal.id}\"\n category_name: \"${category.category_name}\" \n category_level: ${category.category_level}\n ){\n error {type, message}\n organisation {\n id\n options{\n sales_categories{\n date_created\n date_updated\n category_name\n category_level\n category_rule\n brands_included\n brands_excluded\n } \n }\n }\n \n }\n }\n `;\n\n\n customGraphRequest(\n excludeRegionFromSupplier,\n (data) => {\n\n // clear all local(cache) storage\n localStorage.clear();\n\n props.showNotificationModal('success', 'Exclude successful', 'The category has been excluded successfully');\n props.refreshOrganisationModal();\n },\n (error) => props.onError(error)\n );\n\n };\n const onIncludeCategory = (rowData) => {\n\n let category = rowData.row?.original?.categoryData;\n\n let addRegionToOrganisation = `\n mutation {\n supplier_include_sales_category(\n supplier: \"${props.activeOrgInModal.id}\"\n category_name: \"${category.category_name}\" \n category_level: ${category.category_level}\n ){\n error {type, message}\n organisation {\n id\n options{\n sales_categories{\n date_created\n date_updated\n category_name\n category_level\n category_rule\n brands_included\n brands_excluded\n } \n }\n }\n \n }\n }\n `;\n\n customGraphRequest(\n addRegionToOrganisation,\n (data) => {\n\n // clear all local(cache) storage\n localStorage.clear();\n\n props.showNotificationModal('success', 'Include successful', 'The category has been included successfully');\n props.refreshOrganisationModal();\n },\n (error) => props.onError(error)\n );\n };\n\n\n const [showAddCategoryInputs, setShowAddCategoryInputs] = useState(false);\n const onAddCategory = () => {\n\n // Toggle show the \"add category inputs\"\n if (!showAddCategoryInputs) {\n setShowAddCategoryInputs(true);\n return;\n }\n\n let categoryName = '';\n let categoryLevel = '';\n\n if (!isEmpty(selectedCategory_d)) {\n categoryName = selectedCategory_d.category_d;\n categoryLevel = 'CATEGORY_D';\n } else if (!isEmpty(selectedCategory_c)) {\n categoryName = selectedCategory_c.category_c;\n categoryLevel = 'CATEGORY_C';\n } else if (!isEmpty(selectedCategory_b)) {\n categoryName = selectedCategory_b.category_b;\n categoryLevel = 'CATEGORY_B';\n } else if (!isEmpty(selectedCategory_a)) {\n categoryName = selectedCategory_a.category_a;\n categoryLevel = 'CATEGORY_A';\n }\n\n let addRegionToOrganisation = `\n mutation {\n supplier_include_sales_category(\n supplier: \"${props.activeOrgInModal.id}\"\n category_name: \"${categoryName}\" \n category_level: ${categoryLevel}\n ){\n error {type, message}\n organisation {\n id\n options{\n sales_regions{\n level\n region\n type\n } \n }\n }\n \n }\n }\n `;\n\n customGraphRequest(\n addRegionToOrganisation,\n (data) => {\n\n // clear all local(cache) storage\n localStorage.clear();\n\n props.showNotificationModal('success', 'Addition Successful', 'The category has been added successfully');\n props.refreshOrganisationModal();\n },\n (error) => props.onError(error)\n );\n\n };\n\n const onResetSalesCategories = () => {\n\n props.showConfirmModal(\n 'warning',\n 'Reset Sales Categories To Default List',\n 'Are you sure you want to reset the sales categories for this organisation to the default list of categories?',\n 'Reset',\n () => {\n\n let resetSalesRegions = `\n mutation {\n supplier_set_sales_categories(\n supplier: \"${props.activeOrgInModal.id}\"\n categories: [\n { category_level: CATEGORY_A, category_rule: INCLUDE, category_name: \"Audio Visual\" },\n { category_level: CATEGORY_A, category_rule: INCLUDE, category_name: \"Computer Equipment\" },\n { category_level: CATEGORY_A, category_rule: INCLUDE, category_name: \"Consumer Goods\" },\n { category_level: CATEGORY_A, category_rule: INCLUDE, category_name: \"Cycling, scooters and balance boards\" },\n { category_level: CATEGORY_A, category_rule: INCLUDE, category_name: \"Drones\" },\n { category_level: CATEGORY_A, category_rule: INCLUDE, category_name: \"Electronic Equipment\" },\n { category_level: CATEGORY_A, category_rule: INCLUDE, category_name: \"Eyewear\" },\n { category_level: CATEGORY_A, category_rule: INCLUDE, category_name: \"Furniture\" },\n { category_level: CATEGORY_A, category_rule: INCLUDE, category_name: \"Gaming\" },\n { category_level: CATEGORY_A, category_rule: INCLUDE, category_name: \"Garden\" },\n { category_level: CATEGORY_A, category_rule: INCLUDE, category_name: \"Generators & Power\" },\n { category_level: CATEGORY_A, category_rule: INCLUDE, category_name: \"Home Appliances\" },\n { category_level: CATEGORY_A, category_rule: INCLUDE, category_name: \"Jewellery, Watches & Pens\" },\n { category_level: CATEGORY_A, category_rule: INCLUDE, category_name: \"Luggage\" },\n { category_level: CATEGORY_A, category_rule: INCLUDE, category_name: \"Motor Vehicle Accessories\" },\n { category_level: CATEGORY_A, category_rule: INCLUDE, category_name: \"Other\" },\n { category_level: CATEGORY_A, category_rule: INCLUDE, category_name: \"Photography\" },\n { category_level: CATEGORY_A, category_rule: INCLUDE, category_name: \"Smartphones, Tablets & Wearables\" },\n { category_level: CATEGORY_A, category_rule: INCLUDE, category_name: \"Sport Equipment & Hobbies\" },\n { category_level: CATEGORY_A, category_rule: INCLUDE, category_name: \"Tools & DIY\" },\n ]\n ) {\n error{type, message}\n organisation{\n id\n options{\n sales_categories{\n date_created\n date_updated\n category_name\n category_level\n category_rule\n brands_included\n brands_excluded\n }\n }\n }\n }\n }\n `;\n\n customGraphRequest(\n resetSalesRegions,\n (data) => {\n\n // clear all local(cache) storage\n localStorage.clear();\n\n props.showNotificationModal('success', 'Sales Categories Reset', 'The sales categories have been reset successfully');\n props.refreshOrganisationModal();\n },\n (error) => props.onError(error)\n );\n\n },\n null\n );\n };\n\n function getSubCategoryCount(category, level){\n let count = allCategoryData.filter(c => {\n if (level == 0) {\n if (c.category_a == category.category_a && c.category_b) return true;\n }\n if (level == 1) {\n if (c.category_b == category.category_b && c.category_c) return true;\n }\n if (level == 2) {\n if (c.category_c == category.category_c && c.category_d) return true;\n }\n });\n return count.length;\n }\n\n // List of organisations that can see this section.\n const allowedOrgTypes = ['SUPPLIER'];\n\n // Check if the active organisation type is in the allowed list.\n const canSeeSection = allowedOrgTypes.includes(props.activeOrgInModal.type);\n\n if (!canSeeSection) {\n return <>;\n }\n\n return (\n <>\n
\n\n {/* title */}\n
\n

Sales Categories

\n\n
\n \n\n
\n
\n\n
\n \n
\n\n
\n \n
\n\n
\n \n
\n\n
\n setSelectedCategory_d(allCategoryData.find(r => r.id === e.target.value))}>\n\n\n {category_d.map(category => {\n\n let showThisCategoryD = false;\n if (!isEmpty(selectedCategory_c)) {\n if (selectedCategory_c.category_c === category.category_c) showThisCategoryD = true;\n } else if (!isEmpty(selectedCategory_b)) {\n if (selectedCategory_b.category_b === category.category_b) showThisCategoryD = true;\n } else if (!isEmpty(selectedCategory_a)) {\n if (selectedCategory_a.category_a === category.category_a) showThisCategoryD = true;\n }\n\n if (showThisCategoryD) return {category.category_d}\n else return <>\n\n }\n )}\n\n \n\n \n
\n\n
\n\n\n \n Reset\n Reset to the default list of categories\n \n\n \n Add category\n \n props.setShowCategoryCreationModal(true)}>\n Add multiple categories\n \n\n
\n \n \n
\n
\n\n
\n\n {/* table */}\n
\n \n
\n \n\n \n );\n}\n\n\nfunction EditUserModal(props){\n\n const [firstname, setFirstname] = useState('');\n const [lastname, setLastname] = useState('');\n\n const [allClaimsForUser, setAllClaimsForUser] = useState(null);\n\n useEffect(() => {\n // on modal open\n\n if (!props.activeUserInModal)\n return;\n\n if (!firstname) setFirstname(props.activeUserInModal.info.first_name);\n if (!lastname) setLastname(props.activeUserInModal.info.last_name);\n\n // get the full user info\n if (!props.activeUserInModal.status) {\n queryUserFull(\n props.activeUserInModal.id,\n (data) => {\n props.setActiveUserInModal(data['users'][0]);\n },\n (error) => props.onError(error)\n );\n }\n\n // this is for the \"Claims (30 days)\" field\n if (!allClaimsForUser && props.activeUserInModal.organisation) {\n calculateClaimsForUser();\n }\n\n }, [props.activeUserInModal, props.showModal]);\n\n function calculateClaimsForUser(){\n queryClaimsMinimal(\n props.activeUserInModal.organisation.id,\n (data) => {\n let claims = data['claims'];\n\n // 30 days ago\n let monthBack = moment().subtract(30, 'days');\n\n // loop over each claim for this organisation\n let claimsInMonth = claims.map(claim => {\n\n // was this claim created by this user\n if (claim.created_by.id === props.activeUserInModal.id) {\n\n // was this claim created within 30 days\n let claimCreatedDate = moment(claim.date_created);\n if (claimCreatedDate > monthBack) {\n return claim;\n }\n }\n });\n setAllClaimsForUser(claimsInMonth);\n\n },\n (error) => props.onError(error)\n );\n }\n\n useEffect(() => {\n /** Clear all states when the modal is hidden - same as EditOrgProfileModal - (explaination there)*/\n setAllClaimsForUser(null);\n setFirstname(null);\n setLastname(null);\n }, [props.showModal]);\n\n const onUpdateUser = () => {\n\n if (!firstname) {\n alert('Please enter a valid first name');\n return;\n } else if (!lastname) {\n alert('Please enter a valid last name');\n return;\n }\n\n updateUser(\n props.activeUserInModal.id,\n firstname,\n lastname,\n (data) => {\n\n // clear all local(cache) storage\n localStorage.clear();\n\n alert('Successfully updated user');\n props.setShowModal(false);\n window.location.reload();\n },\n (error) => {\n props.onError(error);\n props.setShowModal(false);\n }\n );\n\n };\n\n const onDeactivateUser = () => {\n let superAdmin = props.user.roles.filter(role => role.name === 'superadmin');\n if (superAdmin) {\n deactivateUser(\n props.activeUserInModal.id,\n null,\n (data) => {\n\n // clear all local(cache) storage\n localStorage.clear();\n\n alert('Successfully deactivated the user');\n props.setShowModal(false);\n window.location.reload();\n },\n (error) => props.onError(error)\n );\n }\n };\n\n if (!props.activeUserInModal)\n return <>;\n\n return (\n\n // == MODAL ==\n props.setShowModal(false)}\n >\n
\n {/* WHITE BOX */}\n {\n /**\n this is to prevent the parent grabbing the click event, when the user clicks the white box\n every click event (except buttons and anchors) 'bubble up' the dom tree to the highest parent with a click handler.\n the stopProgagation stops the bubbling up the dom tree, preventing the parent gray background receiving the onclick and hiding the modal\n **/\n e.stopPropagation();\n }}\n >\n\n {/* HEADER */}\n \n

\n Edit a User\n

\n \n
\n\n {/* BODY */}\n
\n\n {/* EXPLANATION */}\n

\n Below allows for the modifications of this user\n

\n\n {/* NAME */}\n
\n\n
\n \n setFirstname(e.target.value)}/>\n\n
\n
\n \n setLastname(e.target.value)}/>\n
\n
\n\n {/* EMAIL + ROLE */}\n
\n
\n \n

{(props.activeUserInModal || {}).username}

\n
\n
\n \n

{props.activeUserInModal && props.activeUserInModal.roles && props.activeUserInModal.roles.map(role => role.name + ' ')}

\n
\n
\n\n {/* STATUS + CLAIMS */}\n
\n
\n \n

{(props.activeUserInModal || {}).status}

\n
\n
\n \n

{allClaimsForUser && allClaimsForUser.length}

\n
\n\n
\n\n {/* FOOTER */}\n
\n \n\n
\n \n \n
\n
\n\n\n
\n \n\n \n \n\n\n );\n\n}\n\n\nfunction AddUserModal(props){\n\n const [firstName, setFirstName] = useState(null);\n const [lastName, setLastName] = useState(null);\n const [email, setEmail] = useState(null);\n const [roleId, setRoleId] = useState('admin');\n\n const [orgRoles, setOrgRoles] = useState(null); // the roles that belong to the organisation that this user is being added to\n\n useEffect(() => {\n if (!props.showModal) return; // dont query if modal is hidden\n\n if (!orgRoles) {\n queryRolesForOrganisation(\n props.crossModalCommunication_ActiveOrgInModal.id,\n (data) => {\n let roles = data['roles'];\n setOrgRoles(roles);\n roles[0] && setRoleId(roles[0].id); // set the default org role\n\n },\n (error) => props.onError(error)\n );\n }\n }, [props.showModal]);\n\n useEffect(() => {\n // when the add user modal is opened - requery the organisation roles\n setOrgRoles(null);\n }, [props.showModal]);\n\n\n const onCreateUser = () => {\n\n if (!email) return props.showAlertModal('info', 'Invalid Input', 'Please enter a valid email');\n\n else if (/[A-Z]/.test(email)) return props.showAlertModal('info', 'Invalid Input', 'Email address must be in lowercase');\n\n else if (!firstName) return props.showAlertModal('info', 'Invalid Input', 'Please enter a valid first name');\n\n else if (!lastName) return props.showAlertModal('info', 'Invalid Input', 'Please enter a valid last name');\n\n else if (!roleId) return props.showAlertModal('info', 'Invalid Input', 'Please select a role');\n\n createUser({\n organisationId:props.activeOrgInProfileModal.id,\n email:email.trim(),\n first_name:firstName.trim(),\n lastName:lastName.trim(),\n roleId:roleId,\n permissions:[],\n },\n (data) => {\n\n // clear all local(cache) storage\n localStorage.clear();\n\n props.setShowModal(false);\n props.showNotificationModal('success', 'User created', 'The user has been created successfully');\n window.location.reload();\n },\n (error) => {\n props.onError(error);\n props.setShowModal(false);\n }\n );\n };\n\n return (\n\n // == MODAL ==\n props.setShowModal(false)}\n >\n
\n {/* WHITE BOX */}\n {\n /**\n this is to prevent the parent grabbing the click event, when the user clicks the white box\n every click event (except buttons and anchors) 'bubble up' the dom tree to the highest parent with a click handler.\n the stopProgagation stops the bubbling up the dom tree, preventing the parent gray background receiving the onclick and hiding the modal\n **/\n e.stopPropagation();\n }}\n >\n\n {/* HEADER */}\n \n

\n Add a User\n

\n \n
\n\n {/* BODY */}\n
\n\n {/* EXPLANATION */}\n

\n A user may be added to this organisation on this page\n

\n\n {/* NAME + ROLE */}\n
\n
\n \n setFirstName(e.target.value)}/>\n
\n
\n \n setLastName(e.target.value)}/>\n
\n
\n \n {\n !orgRoles ?\n // Show loading spinner until the org roles are retrieved\n \n :\n \n }\n\n
\n
\n\n {/* ORGANISATION + EMAIL */}\n
\n\n
\n \n \n
\n\n\n
\n \n 0 && /[A-Z]/.test(email) && \"text-red-500\" // Warning styling if the email contains uppercase letters\n )}\n type=\"email\" value={email}\n onChange={e => setEmail(e.target.value)}\n />\n

0 && /[A-Z]/.test(email) && \"block\" || 'hidden' // Warning styling if the email contains uppercase letters\n )}>\n Ensure the email address is in lowercase before submitting\n

\n
\n\n
\n
\n\n\n
\n\n {/* FOOTER */}\n
\n \n \n
\n\n\n
\n \n\n \n \n\n\n );\n\n}\n\n\nfunction AddOrganisationModal(props){\n\n\n const [name, setName] = useState(null);\n const [referenceName, setReferenceName] = useState(null);\n const [website, setWebsite] = useState(null);\n const [orgType, setOrgType] = useState('ADMINISTRATOR');\n const [country, setCountry] = useState('NL');\n const [currencyCode, setCurrencyCode] = useState('EUR');\n\n const onCreateOrganisation = () => {\n\n if (!name) {\n alert('Please enter a name');\n return;\n } else if (!referenceName) {\n alert('Please enter a reference name');\n return;\n } else if (!website) {\n alert('Please enter a website');\n return;\n } else if (!orgType) {\n alert('Please select an organisation type');\n return;\n } else if (!country) {\n alert('Please select a country');\n return;\n } else if (!currencyCode) {\n alert('Please select a currency');\n return;\n }\n\n\n createOrganisation({\n name: name,\n orgType: orgType,\n country: country,\n currencyCode: currencyCode,\n website: website,\n uniqueReferenceName: referenceName\n },\n (data) => {\n\n // clear all local(cache) storage\n localStorage.clear();\n\n props.setShowModal(false);\n alert('Organisation successfully created');\n window.location.reload();\n },\n (error) => props.onError(error)\n );\n\n };\n\n\n return (\n\n // == MODAL ==\n props.setShowModal(false)}\n >\n
\n {/* WHITE BOX */}\n {\n /**\n this is to prevent the parent grabbing the click event, when the user clicks the white box\n every click event (except buttons and anchors) 'bubble up' the dom tree to the highest parent with a click handler.\n the stopProgagation stops the bubbling up the dom tree, preventing the parent gray background receiving the onclick and hiding the modal\n **/\n e.stopPropagation();\n }}\n >\n\n {/* HEADER */}\n \n

\n Create an Organisation\n

\n \n
\n\n {/* BODY */}\n
\n\n {/* EXPLANATION */}\n

\n Below allows for the creation of a new organisation\n

\n\n {/* NAME */}\n
\n \n setName(e.target.value)}/>\n
\n\n {/* REFERENCE NAME */}\n
\n \n setReferenceName(e.target.value)}/>\n
\n\n\n {/* WEBSITE */}\n
\n \n setWebsite(e.target.value)}/>\n
\n\n\n {/* TYPE + COUNTRY + CURRENCY */}\n
\n
\n \n
\n \n
\n\n
\n \n
\n \n
\n\n
\n \n
\n \n
\n
\n\n\n {/* FOOTER */}\n
\n \n \n
\n\n\n
\n \n\n \n \n\n\n );\n\n}\n\n\nfunction DeleteConfirmationModal(props){\n\n const [challenge, setChallenge] = useState('');\n\n return (\n\n // == MODAL ==\n props.setShowModal(false)}\n >\n
\n {/* WHITE BOX */}\n {\n /**\n this is to prevent the parent grabbing the click event, when the user clicks the white box\n every click event (except buttons and anchors) 'bubble up' the dom tree to the highest parent with a click handler.\n the stopProgagation stops the bubbling up the dom tree, preventing the parent gray background receiving the onclick and hiding the modal\n **/\n e.stopPropagation();\n }}\n >\n\n {/* HEADER */}\n \n

\n {props.options.title}\n

\n \n
\n\n {/* BODY */}\n
\n\n\n {/* EXPLANATION */}\n

\n {props.options.message}\n

\n\n setChallenge(e.target.value)}\n placeholder={('To continue, type \"') + props.options.challenge + ('\" ')}\n />\n\n\n {/* FOOTER */}\n
\n \n \n
\n\n\n
\n \n\n \n \n\n\n );\n\n}\n\n","import {useEffect} from \"react\";\n\nexport function MobileNumberInput(props) {\n\n useEffect(() => {\n /** try to automatically set the selected country code to the country of this claim */\n\n if(!props.claim) return;\n\n let countrycode = props.claim.country;\n let countrycodeSelectElement = document.querySelector('#countrycodeSelect');\n\n // Loop through all the options in the select element\n for (const element of countrycodeSelectElement.options) {\n\n // Does this option's country code match the claim's country code?\n if (element.getAttribute('data-countrycode') === countrycode) {\n\n // Yes, set the selected option to this option\n let code = element.value;\n let dummyEvent = {'target': {'value': code}};\n props.onChange(dummyEvent)\n\n break;\n }\n }\n\n }, []);\n\n // country codes (ISO 3166) and Dial codes\n return (\n {\n props.onChange(e);\n }}\n value={props.value}\n >\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {/**/}\n \n \n \n \n \n \n \n {/**/}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {/**/}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {/**/}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {/* */}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n\n}\n","// Library imports\n\nimport {Fragment, useEffect} from 'react';\nimport {Dialog, Transition} from '@headlessui/react';\nimport {XIcon} from '@heroicons/react/outline';\nimport {CheckCircleIcon} from '@heroicons/react/solid';\nimport {classNames} from '../../utils/helpers';\nimport Safe, {safe} from \"../../components/Safe\";\nimport {MobileNumberInput} from \"../../components/MobileNumberInput\";\nimport ApiButton from \"../../components/base/ApiButton\";\n\n// Local imports\n\n\nexport default function ClaimAwardModal(props) {\n\n const renderSelectedItem = (item, supplier) => {\n if (!item.selected_for_award) {\n return (<>);\n }\n\n let replacement = supplier.get_recommended_replacement(supplier, item);\n if (!replacement.quote) {\n return (<>);\n }\n\n // row data\n let qty = item.quantity || 0;\n let currencySymbol = replacement.quote.currency_symbol || ' ';\n let price = replacement.quote.price || 0;\n\n return (\n \n \n
\n
\n \n
\n
\n
\n {replacement.product.common_name}\n
\n
\n {item.category.display_name}\n
\n
\n
\n {replacement.product.type === 'MANUAL' ? replacement.product.description : ' '}\n
\n
\n
\n
\n \n {qty}\n {currencySymbol} {qty * price} \n \n props.onItemAwardChecked(e, item)}\n />\n \n \n );\n };\n\n return (\n \n {\n }}>\n
\n props.setOpen(false)}\n />\n\n
\n \n
\n
\n
\n
\n
\n Award\n Summary \n
\n props.setOpen(false)}\n >\n Close panel\n \n \n
\n
\n
\n

\n Please find a summary of the items selected\n

\n
\n
\n\n
\n
\n
\n
\n
\n\n\n
\n {/* Page header */}\n\n\n
\n
\n {/*{renderSuppliersAndItems()}*/}\n
\n
\n
\n
\n
\n
\n
\n {props.uiClaim && props.uiClaim.suppliers.map(supplier => {\n\n if (!supplier.has_selected_items(supplier)) {\n return <>;\n }\n\n return (\n <>\n

{supplier.display_name}

\n \n\n \n \n \n \n Item\n \n \n Qty\n \n \n Total\n \n \n ...\n \n \n \n \n\n {supplier.get_selected_items(supplier).map(item => (\n safe(()=> renderSelectedItem(item, supplier) )\n ))}\n\n \n \n + Delivery\n \n \n \n {props.claim && props.claim.organisation.info.currency_symbol} { supplier.do_not_deliver ? '0' : supplier.delivery_cost(supplier)}\n \n \n \n\n \n -\n Excess\n \n \n {props.claim && props.claim.organisation.info.currency_symbol} {supplier && supplier.excess ?\n supplier.excess :\n '0'}\n \n \n\n \n Invoice\n total\n \n \n \n {props.claim && props.claim.organisation.info.currency_symbol} {supplier.total_cost(supplier, !supplier.do_not_deliver, true)}\n \n \n\n \n \n
\n );\n })}\n
\n\n\n \n
\n
\n \n

\n Cost Summary\n

\n
\n\n {/* AWARD VALUE */}\n \n \n
\n \n {props.claim && props.claim.organisation.info.currency_symbol}\n
\n
\n {props.getTotalAwardValue(false)}\n
\n
\n
\n\n {/* EXCESS */}\n \n \n \n \n {props.claim && props.claim.organisation.info.currency_symbol}\n
\n props.setAwardInfo({\n ...props.awardInfo,\n excess: event.target.value\n })}\n />\n
\n
\n\n {/* INVOICE TOTAL */}\n \n \n
\n \n {props.claim && props.claim.organisation.info.currency_symbol}\n
\n
\n {props.getTotalAwardValue()}\n
\n
\n
\n\n\n \n

\n Additional Information\n

\n \n \n
\n\n {/* PURCHASE ORDER */}\n \n \n \n props.setAwardInfo({\n ...props.awardInfo,\n purchase_order: event.target.value\n })}\n />\n
\n
\n\n\n {/* CLAIMANT DETAILS */}\n \n

\n Claimant Details\n

\n \n \n \n\n {/* FIRST NAME */}\n \n \n \n props.setAwardInfo({\n ...props.awardInfo,\n name: event.target.value\n })}\n />\n \n \n\n {/* LAST NAME */}\n \n \n \n props.setAwardInfo({\n ...props.awardInfo,\n surname: event.target.value\n })}\n />\n \n \n\n {/* MOBILE */}\n \n \n\n \n\n \n props.setAwardInfo({\n ...props.awardInfo,\n country_code: e.target.value\n })}\n awardInfo={props.awardInfo}\n setAwardInfo={props.setAwardInfo}\n value={props.awardInfo.country_code}\n />\n \n\n props.setAwardInfo({\n ...props.awardInfo,\n mobile_number: e.target.value\n })}\n />\n\n\n \n \n\n\n {/* EMAIL */}\n \n \n \n props.setAwardInfo({\n ...props.awardInfo,\n email: event.target.value\n })}\n />\n \n \n\n \n\n \n\n \n
\n\n
\n \n\n \n \n \n \n\n \n \n \n \n \n
\n props.setOpen(false)}\n >\n \n Close\n \n\n
\n \n \n \n \n \n
\n
\n );\n}\n\n","// Library imports\n\nimport React, {Fragment, useState} from 'react';\nimport {Dialog, Transition} from '@headlessui/react';\n\nimport {PencilAltIcon, XIcon} from '@heroicons/react/solid';\nimport ApiButton from \"../../../components/base/ApiButton\";\n\n\nexport default function UpdateQuotePriceModal(props){\n\n // onClick functions\n const [updateCatalogPrice, setUpdateCatalogPrice] = useState(false);\n\n const onUpdateClicked = (buttonHandler) => {\n\n let price = document.getElementById('price').value;\n props.options['price'] = price;\n\n props.options['update_catalog_price'] = updateCatalogPrice;\n\n if (props.options.onConfirmClicked) {\n props.options.onConfirmClicked(props.options, buttonHandler);\n } else if (props.onConfirmClicked) {\n props.onConfirmClicked(props.options, buttonHandler);\n }\n\n return false;\n };\n\n function getCurrencySymbol (){\n if(props.options?.quote?.currency_symbol){\n return props.options?.quote?.currency_symbol;\n }\n else if (props.options?.quote?.currency){\n return props.options?.quote?.currency;\n }\n else {\n return '';\n }\n }\n\n return (\n \n {\n }}>\n
\n \n \n \n\n {/* This element is to trick the browser into centering the modal contents. */}\n \n\n \n
\n
\n
\n props.setOpen(false)}\n >\n Close\n \n \n
\n
\n
\n \n
\n
\n Update Quote Price\n

\n The quote's price may be updated below.\n

\n
\n
\n\n
\n\n
\n
\n
\n
\n\n {/* PRICE */}\n
\n \n
\n

\n {getCurrencySymbol()}\n

\n {\n const newPrice = e.target.value;\n // calculate the difference between the new price and the original price in percentage\n let priceChangePercentage = Math.abs((newPrice - props.options.quote.price) / props.options.quote.price);\n\n // is the new price more than 10% different from the original price?\n if(priceChangePercentage > 0.1){\n // prevent default\n e.preventDefault();\n\n props.showConfirmModal(\n 'info',\n 'Substantial Price Change',\n (
\n

The new price is {(priceChangePercentage * 100).toFixed(0)}% different from the original price

\n

Are you sure you want to proceed?

\n

Click cancel to revert to original price

\n
),\n 'Proceed',\n () => {\n document.getElementById('price').value = newPrice;\n },\n () => {\n document.getElementById('price').value = props.options.quote.price;\n }\n )\n }\n }}\n className=\"input rounded-none\"\n placeholder=\"0.00\"\n aria-describedby=\"price\"\n />\n
\n
\n\n {/* UPDATE CATALOG PRICE */}\n
\n setUpdateCatalogPrice(e.target.checked)}\n className=\"input w-min p-[10px] \"\n disabled={props.options?.quote?.is_manual || false}\n />\n\n \n\n {props.options?.quote?.is_manual ?\n Manually created quotes only apply to this claim\n :\n Also apply this update to the catalogue's price\n }\n
\n\n
\n
\n
\n
\n\n
\n \n props.setOpen(false)}\n >\n Cancel\n \n
\n
\n
\n \n
\n
\n
\n );\n}\n","// Library imports\n\nimport React, {Fragment, useEffect, useState} from 'react';\nimport {Combobox, Dialog, Transition} from '@headlessui/react';\nimport {XIcon} from '@heroicons/react/outline';\nimport {CheckIcon, SelectorIcon} from '@heroicons/react/solid';\n\n// Local imports\nimport {setPreferredReplacement} from '../../../utils/coreApi.js';\nimport {classNames} from '../../../utils/helpers.js';\nimport {useNavigate} from 'react-router-dom';\nimport ApiButton from \"../../../components/base/ApiButton\";\n\n\nexport default function UpdateQuoteModal(props){\n\n const navigate = useNavigate();\n\n // Data state\n const [replacementQuery, setReplacementQuery] = useState('');\n\n // Of the products in the \"possible replacements\" for this item, which one is selected\n const [selectedReplacementProduct, setSelectedReplacementProduct] = useState(null);\n\n // Does this supplier have a quote for this product? 1 quote per supplier per product\n const [selectedReplacementQuote, setSelectedReplacementQuote] = useState(null);\n\n\n const [price, setPrice] = useState(0);\n const [reason, setReason] = useState('Best replacement:');\n const [validity, setValidity] = useState('NULL');\n const [updateCatalogPrice, setUpdateCatalogPrice] = useState(false);\n\n useEffect(() => {\n\n }, []);\n\n // onClick functions\n useEffect(() => {\n\n // first set the default replacement to the defaultSelectedReplacementData, second to the supplierRecommendedReplacement, or NULL\n let recommendedReplacement = props.options?.defaultSelectedReplacementData || props.options?.supplierRecommendedReplacement || null;\n setSelectedReplacementProduct(recommendedReplacement?.product || null);\n\n setFieldsToQuote();\n }, [props.options]);\n\n useEffect(() => {\n\n setQuoteForSelectedProduct();\n\n }, [selectedReplacementProduct]);\n\n useEffect(() => {\n setFieldsToQuote();\n }, [selectedReplacementQuote]);\n\n const setQuoteForSelectedProduct = () => {\n // a new product has been selected from the replacements dropdown\n // does this supplier have a quote for the newly selected product?\n\n // first look for a quote in the possible replacements list\n let replacementDataForProduct = props.options?.item?.possible_replacements.find(replacement => replacement.product?.id === selectedReplacementProduct?.id) || null;\n let suppliersQuoteForProduct = replacementDataForProduct?.quotes?.find(quote => quote.supplier.id === props.options.supplier.id) || null;\n\n // if a quote for this product, for this supplier was not found in the possible_replacements, then look if it is available as the suppliers \"recommended replacement\"\n if (!suppliersQuoteForProduct) {\n // check if the product, of the recommended replacement quote, is for the same product selected in the \"replacement\" dropdown\n let recommendedIsSameProduct = selectedReplacementProduct?.id === props.options?.supplierRecommendedReplacement?.product?.id;\n if (recommendedIsSameProduct) suppliersQuoteForProduct = props.options?.supplierRecommendedReplacement.quote;\n }\n\n setSelectedReplacementQuote(suppliersQuoteForProduct || null);\n\n };\n\n const setFieldsToQuote = () => {\n if (!selectedReplacementQuote) {\n setPrice(0);\n setReason('');\n return;\n }\n\n setPrice(selectedReplacementQuote.price || 0);\n setValidity('NULL');\n };\n\n const onClose = () => {\n\n props.setOpen(false);\n setSelectedReplacementProduct(null);\n };\n\n const onSetPreferredReplacementAndQuoteClicked = (buttonHandler) => {\n\n if (selectedReplacementProduct === null) {\n props.onError({\n 'type': 'Invalid Input',\n 'message': 'A replacement must be selected.'\n });\n\n buttonHandler.onError('Invalid replacement');\n return;\n }\n\n let options = props.options;\n\n let productId = selectedReplacementProduct.id;\n let supplierId = options.supplier.id;\n\n let item = props.options.item;\n\n // Updating a manual quote requires a reason\n // reason and validity are hidden for auto/none-manual quotes\n if (selectedReplacementQuote?.is_manual && !reason) {\n props.showAlertModal('info', 'Reason required', 'Please specify a reason for updating this quote');\n buttonHandler.onError('Reason required');\n return;\n }\n\n setPreferredReplacement({\n itemId: item.id,\n supplierId: supplierId,\n productId: productId,\n price: price,\n validity: validity === 'NULL' ? null : validity,\n reason: reason,\n updateDeapi: updateCatalogPrice,\n },\n (data) => {\n props.showToastNotificationModal('success', 'Quote updated', 'The quote was successfully updated');\n props.onConfirmClicked(data);\n props.setOpen(false);\n setSelectedReplacementProduct(null);\n buttonHandler.onSuccess('Quote updated');\n },\n (error) => {\n props.onError(error);\n buttonHandler.onError('Failed to update quote');\n }\n );\n\n return false;\n };\n\n const onReplacementSelected = (newReplacement) => {\n setSelectedReplacementProduct(newReplacement);\n };\n\n const replacementField = () => {\n\n if (!props.options) {\n return (
);\n }\n\n let replacements = [];\n\n for (let possibleReplacement of props.options.item.possible_replacements) {\n replacements.push(possibleReplacement.product);\n }\n\n const filteredReplacements =\n replacementQuery === '' ? replacements : replacements.filter(\n (product) => {\n return product.common_name.toLowerCase().includes(replacementQuery.toLowerCase());\n }\n );\n\n if (selectedReplacementProduct === null && filteredReplacements.length > 0 && props.open) {\n setSelectedReplacementProduct(filteredReplacements[0]);\n }\n\n return (\n \n Replacement\n
\n setReplacementQuery(event.target.value)}\n displayValue={(product) => product !== null ? product.common_name : ''}\n />\n \n \n \n\n {filteredReplacements.length > 0 && (\n \n {filteredReplacements.map((product) => (\n \n classNames(\n 'relative cursor-default select-none py-2 pl-3 pr-9',\n active ? 'bg-indigo-600 text-white' : 'text-gray-900'\n )\n }\n >\n {({active, selected}) => (\n <>\n
\n \n {product.common_name}\n
\n\n {selected && (\n \n \n \n )}\n \n )}\n \n ))}\n
\n )}\n
\n
\n );\n };\n\n\n const renderFields = () => {\n\n let options = props.options;\n\n let currencySymbol = '';\n let brand = '';\n\n let claim = props.options.claim || null;\n\n currencySymbol = ` (${claim.organisation.info.currency_symbol})`;\n\n if (selectedReplacementProduct) brand = selectedReplacementProduct.brand;\n else brand = options.item.product.brand;\n\n // disable the validity for auto/none manual quotes. if no quote is available, then we are creating a new claim so enable validity\n let isAutoQuote = false;\n let isManual = selectedReplacementQuote?.is_manual || true;\n isAutoQuote = !(isManual) || false;\n if (!selectedReplacementQuote) isAutoQuote = false;\n\n return (\n
\n\n {/* REPLACEMENT DROPDOWN */}\n {replacementField()}\n\n {/* ADD REPLACEMENT */}\n
\n {\n navigate(`/claim/item-add-replacement/${options.claim.id}/${options.item.id}/${options.supplier.id}?category=${options.item.product.category.toLowerCase()}`,\n {\n state: {\n supplierId: props.options.supplier.id,\n quoteModal: \"updateQuote\",\n originPage: props.options.originPage || \"tender\",\n }\n }\n );\n }}\n className=\"btn m-0\"\n >\n Add replacement\n \n
\n\n {/* BRAND */}\n
\n \n
\n
{brand}
\n
\n
\n\n {/* PRICE */}\n
\n \n
\n setPrice(e.target.value)}\n />\n
\n
\n\n {/* VALIDITY */}\n
\n \n
\n setValidity(e.target.value)}\n >\n \n \n \n \n \n \n \n \n \n \n \n
\n
\n\n {/* REASON */}\n
\n \n
\n setReason(e.target.value)}\n />\n
\n
\n\n {/* UPDATE CATALOG PRICE */}\n {/* Only show the update catalogue price for auto/none manual quotes */}\n
\n setUpdateCatalogPrice(e.target.checked)}\n className=\"input w-min p-[10px] \"\n />\n\n \n\n {selectedReplacementQuote && selectedReplacementQuote.is_manual ?\n Manually created quotes only apply to this claim\n :\n Also apply this update to the catalogue's price\n }\n
\n\n
\n );\n };\n\n // Page content\n\n if (!props.options || !props.options.claim) return <>;\n\n return (\n \n {\n }}>\n
\n \n\n
\n \n
\n
\n
\n
\n
\n \n {selectedReplacementQuote ?\n 'Update Quote'\n :\n 'Create Quote'\n }\n \n
\n \n Close panel\n \n \n
\n
\n
\n

\n Get started by filling in the information below.\n

\n
\n
\n
\n
\n {renderFields()}\n
\n
\n
\n
\n
\n
\n \n Cancel\n \n Update Quote

\n :\n

Create Quote

\n }\n successContent={'Quote updated'}\n errorContent='Failed to update quote'\n defaultStatus={'idle'}\n />\n
\n
\n
\n \n
\n
\n
\n
\n );\n}\n","// Library imports\n\nimport {useEffect, useState} from 'react';\nimport {useNavigate, useParams} from 'react-router-dom';\n\nimport {BadgeCheckIcon, BanIcon, CreditCardIcon, PencilAltIcon} from '@heroicons/react/outline';\n\nimport {ArrowCircleLeftIcon, CheckCircleIcon} from '@heroicons/react/solid';\n\n\n// Local imports\nimport NotificationCenter from '../../components/NotificationCenter.jsx';\n\nimport AlertModal from '../modals/AlertModal.jsx';\nimport ConfirmModal from '../modals/ConfirmModal.jsx';\nimport ClaimAwardModal from '../modals/ClaimAwardModal.jsx';\n\nimport {\n createSettlement, customGraphRequest,\n querySettlements,\n updateQuotePrice\n} from '../../utils/coreApi.js';\n\nimport {alertError, calculateProperties, classNames, isEmpty} from '../../utils/helpers.js';\nimport LoadingSpinner from '../../components/ui/LoadingSpinner';\nimport UpdateQuotePriceModal from '../modals/quote_modals/UpdateQuotePriceModal';\nimport UpdateQuoteModal from '../modals/quote_modals/UpdateQuoteModal';\nimport Safe, {safe} from \"../../components/Safe\";\nimport {useDocumentTitle} from \"../../components/PageTitle\";\nimport {getCache, hasCache, setCache} from \"../../components/useQuery\";\nimport {SUPPLIER_DELIVERY_COST} from \"../../utils/graphqlTemplates\";\nimport Tooltip from \"../../components/Tooltip\";\nimport moment from \"moment-timezone\";\n\n\nexport default function ClaimIssueAward(props) {\n\n const setTitle = useDocumentTitle(\"Award\");\n\n // React router\n const navigate = useNavigate();\n const {claimId} = useParams();\n\n // UI states\n const [claimAwardOpen, setClaimAwardOpen] = useState(false);\n\n // Used for errors\n const [alertOpen, setAlertOpen] = useState(false);\n const [alertOptions, setAlertOptions] = useState({\n 'heading': '',\n 'message': ''\n });\n\n // Used for success feedback\n const [notificationOpen, setNotificationOpen] = useState(false);\n const [notificationOptions, setNotificationOptions] = useState({\n 'heading': '',\n 'message': ''\n });\n\n const [confirmModalOpen, setConfirmModalOpen] = useState(false);\n const [confirmModalOptions] = useState({\n 'heading': '',\n 'message': '',\n 'type': '',\n 'buttonText': ''\n });\n\n const [editReplacementModalOpen, setEditReplacementModalOpen] = useState(false);\n const [editReplacementModalOptions, setEditReplacementModalOptions] = useState(null);\n\n\n // Data states\n const [claim, setClaim] = useState(null);\n const [uiClaim, setUiClaim] = useState(null); // All data in this page in state\n const [settlements, setSettlements] = useState(null); // All data in this page in state\n\n const [awardInfo, setAwardInfo] = useState({name: '', surname: '', mobile_number: '', excess: ''});\n\n const [updateManualQuoteOpen, setUpdateManualQuoteOpen] = useState(false);\n const [updateManualQuoteOptions, setUpdateManualQuoteOptions] = useState(null);\n\n\n // On every page load\n useEffect(() => {\n\n if (claim === null) {\n props.updateGlobalClaim(claimId, setClaim);\n }\n\n if (claim && !props.navbarTopPageContent.claim) props.setNavbarTopPageContent({'claim': claim});\n\n if (uiClaim && !settlements) {\n let claimID = claim.id;\n querySettlements(\n claimID,\n setSettlements,\n (error) => {\n alertError(setAlertOpen, setAlertOptions, error);\n }\n );\n }\n if (settlements && !uiClaim.settlements) {\n setSettlementData();\n }\n\n if(claim) setTitle(`Award : ${claim.insurer_claim_number}`)\n\n }, [claim, uiClaim, settlements]);\n\n useEffect(() => {\n createUiClaim();\n }, [claim]);\n\n useEffect(() => distributeExcessAmongSuppliers(), [awardInfo, setAwardInfo]);\n\n\n // Helper functions\n\n const onUIClaimUpdate = () => {\n // a simple helper function to set the uiClaim state\n let copy = {...uiClaim};\n setUiClaim(copy);\n };\n\n const createUiClaim = () => {\n /** Create the uiClaim state */\n\n if (!claim) return;\n\n let newClaim = {};\n\n newClaim.claim = claim;\n newClaim.items = claim.items;\n\n // make an array of all categories present in this claim\n /* let categories = [ \"Smartphones, Tablets & Wearables\", \"Photography\" ]*/\n let categories = [/* {...}, {...} */];\n for (let item of claim.items) {\n let itemCat = item.category;\n if (!(categories.find(cat => cat.id === itemCat.id))) {\n categories.push(itemCat);\n }\n }\n newClaim.categories = categories;\n\n newClaim.suppliers = claim.suppliers;\n\n for (let supplier of newClaim.suppliers) {\n supplier.supplier_items = [];\n }\n\n // in each supplier of this item, make a copy of the item\n for (const item of claim.items) {\n\n // manual/filter items can have a null supplier panel\n if (!item.supplier_panel) continue;\n\n // add this item to each supplier that supplies this item\n for (const supplierForThisItem of item.supplier_panel) {\n let copy = {};\n copy = {...item};\n copy.selected_for_award = false;\n let _supplier = newClaim.suppliers.find(s => s.id === supplierForThisItem.id);\n _supplier?.supplier_items.push(copy);\n }\n }\n\n // setup suppliers\n setSuppliers(newClaim)\n\n // set delivery costs for this supplier\n for (let supplier of newClaim.suppliers) {\n supplier.delivery_cost_per_category = [];\n\n // for each category in this supplier\n for (const category of newClaim.categories) {\n /** Check if this supplier's delivery fee has been cached\n * If not, query the delivery fee, and cache it\n * Same usage as a normal useQuery, however directly, without the hook */\n\n let query = `\n query SupplierDeliveryCost {\n delivery_cost (|placeholder|){\n cost\n error {\n type\n message\n }\n }\n }\n `\n let queryArgs = `supplier: \"${supplier.id}\" category: \"${category.id}\" claim_id: \"${claim.id}\"`;\n if (claim.postal_code) queryArgs += ` postal_code:\"${claim.postal_code}\"`;\n\n if (claim.locality) queryArgs += ` locality:\"${claim.locality}\"`;\n\n query = SUPPLIER_DELIVERY_COST.replace('|placeholder|', queryArgs);\n // let deliveryFeeIsCached = hasCache(query);\n // TODO refactor out the delivery cost caching\n // TEMP disable caching\n let deliveryFeeIsCached = false;\n\n function deliveryFeeSuccess(data) {\n let deliveryCostForThisCategory = {...category};\n deliveryCostForThisCategory.delivery_cost_for_this_category = data.cost;\n\n /** Cache the delivery fee */\n setCache(query, data, 60);\n\n /** DEVELOPMENT: to imitate placeholder delivery data, uncomment this line */\n /** deliveryCostForThisCategory.delivery_cost_for_this_category = 100;*/\n\n supplier.delivery_cost_per_category.push(deliveryCostForThisCategory);\n }\n\n if (deliveryFeeIsCached) {\n /** Delivery fee is cached, get and set. Do not query the delivery fee */\n\n // Get the cached delivery fee\n let data = getCache(query);\n\n // Add the delivery fee to the supplier\n let deliveryCostForThisCategory = {...category};\n deliveryCostForThisCategory.delivery_cost_for_this_category = data.cost;\n supplier.delivery_cost_per_category.push(deliveryCostForThisCategory);\n }\n\n else {\n /** There is no cached delivery fee, query, set, and cache */\n customGraphRequest(\n query,\n (data) => {\n deliveryFeeSuccess(data);\n },\n props.onError\n );\n }\n\n\n }\n }\n\n // order the suppliers based on the average rank\n newClaim.suppliers.sort((a, b) => a.average_rank(a) - b.average_rank(b));\n\n setUiClaim(newClaim);\n\n };\n\n const setSuppliers = (newClaim) => {\n\n for (let supplier of newClaim.suppliers) {\n supplier.do_not_deliver = false;\n supplier.excess = 0;\n\n supplier.is_adhoc = (_supplier) => {\n // Find this supplier, in one of the item's supplier_panel, and return it's adhoc status\n for(let item of _supplier?.supplier_items) {\n const supplierReplacementObject = item.supplier_panel?.find(replacementObject => replacementObject.id === _supplier.id);\n if(!isEmpty(supplierReplacementObject)) return supplierReplacementObject.supplier?.is_adhoc;\n }\n return false;\n }\n supplier.has_selected_items = (_supplier, item = null) => {\n if (item) {\n return item.selected_for_award;\n }\n return _supplier.supplier_items.find(item => item.selected_for_award) ? true : false;\n };\n supplier.get_selected_items = (_supplier) => {\n return _supplier.supplier_items.filter(item => item.selected_for_award);\n };\n supplier.has_items_in_category = (_supplier, category) => {\n let hasItems = false;\n let _items = _supplier.supplier_items.filter(item => item.category.id === category.id);\n // if (!_item) return false;\n\n _items.forEach(_item => {\n let replacement = _supplier.get_recommended_replacement(_supplier, _item);\n if (replacement.quote) {\n hasItems = true;\n }\n });\n\n return hasItems;\n };\n supplier.has_replaceable_items = (_supplier) => {\n let replaceable = false;\n _supplier.supplier_items.forEach(item => {\n let replacement = _supplier.get_recommended_replacement(_supplier, item);\n if (replacement.quote) {\n replaceable = true;\n }\n });\n return replaceable;\n };\n\n supplier.get_recommended_replacement = (_supplier, item) => {\n return item.supplier_panel.find(s => s.id === _supplier.id).recommended_replacement;\n };\n\n supplier.delivery_cost_for_category = (_supplier, _category) => {\n return _supplier.delivery_cost_per_category.find(category => category.id === _category.id)?.delivery_cost_for_this_category || 0;\n };\n supplier.delivery_cost = (_supplier) => {\n // get selected items\n let selected_items = _supplier.get_selected_items(_supplier);\n let selected_categories = [];\n selected_items.forEach(item => {\n if (!selected_categories.find(c => c.id === item.category.id)) {\n selected_categories.push(item.category);\n }\n });\n\n let deliveryCost = 0;\n selected_categories.forEach(_category => {\n let catDeliveryCost = _supplier.delivery_cost_per_category.find(category => category.id === _category.id)?.delivery_cost_for_this_category || 0;\n if (catDeliveryCost > deliveryCost) {\n deliveryCost = catDeliveryCost;\n }\n });\n\n return deliveryCost;\n };\n supplier.delivery_cost_for_selected_items = (_supplier) => {\n return supplier?.delivery_cost(supplier) || 0;\n };\n\n supplier.item_total = (_supplier) => {\n let total = 0;\n _supplier.supplier_items.forEach(item => {\n let replacement = _supplier.get_recommended_replacement(_supplier, item);\n let itemPrice = item.selected_for_award ? replacement.quote.price : 0;\n total += itemPrice * item.quantity;\n });\n return total;\n };\n supplier.total_cost = (_supplier, withDelivery = false, withExcess = false) => {\n let total = _supplier.item_total(_supplier);\n if (withDelivery) total += _supplier.delivery_cost(_supplier);\n if (withExcess) total -= _supplier.excess;\n return total;\n };\n\n supplier.average_rank = (_supplier) => {\n let total = 0;\n let count = 0;\n _supplier.supplier_items.forEach(item => {\n let rank = item.supplier_panel.find(s => s.id === _supplier.id).ranking;\n if (rank !== '-') {\n total += rank;\n count++;\n }\n });\n return count > 0 ? total / count : '-';\n }\n }\n\n }\n\n const setSettlementData = () => {\n\n uiClaim.settlements = {...settlements};\n\n // for each supplier\n uiClaim.suppliers.forEach(supplier => {\n // for item of that supplier\n supplier.supplier_items.forEach(item => {\n\n item.has_been_settled = false;\n\n // for each settlement\n settlements.settlements.forEach(settlement => {\n // for each item that has been settled\n settlement.items.forEach(settledItem => {\n\n if (settledItem.id === item.id) {\n item.has_been_settled = true;\n item.selected_for_award = false;\n }\n\n });\n });\n\n });\n });\n\n setTimeout(onUIClaimUpdate, 100);\n\n };\n\n // onClick functions\n\n const distributeExcessAmongSuppliers = () => {\n if (!uiClaim) {\n return;\n }\n\n let excess = awardInfo.excess;\n\n // --- make sure excess does not exceed total invoice\n let total = uiClaim.suppliers.reduce((_total, _supplierToAdd) => _total + _supplierToAdd.total_cost(_supplierToAdd), 0);\n if (excess > total) {\n awardInfo.excess = 0;\n alertError(setAlertOpen, setAlertOptions, {\n type: 'Excess exceeded',\n message: 'The excess can not exceed the total value of all items'\n });\n return;\n }\n\n\n // --- create a list of suppliers - sorted by total cost\n let listOfSuppliers = [];\n uiClaim.suppliers.forEach(supplier => {\n listOfSuppliers.push(supplier);\n supplier.totalCost = supplier.total_cost(supplier, !supplier.do_not_deliver, false);\n });\n // sort the suppliers so that the highest total is first\n listOfSuppliers.sort((a, b) => a.totalCost - b.totalCost);\n listOfSuppliers.reverse();\n\n // --- assign each supplier their excess amount\n let excessRemaining = excess;\n // tell each supplier their excess\n for (let supplier of listOfSuppliers) {\n if (excessRemaining > supplier.totalCost) {\n // this supplier can only pay excess of up to the suppliers total cost\n let rollOverAmount = excessRemaining - supplier.totalCost; // e.g R20 = R100 - R80\n supplier.excess = excessRemaining - rollOverAmount; // e.g R80 = R100 - R20\n excessRemaining = rollOverAmount; // e.g R20 = R100 - R80\n } else {\n // this supplier's total item cost is LESS than the excess\n // so this supplier will pay the remaining excess\n let rollOverAmount = excessRemaining - supplier.totalCost; // e.g R-5 = R20 - R25\n if (rollOverAmount <= 0) {\n supplier.excess = excessRemaining; // e.g R20\n excessRemaining = 0;\n }\n }\n }\n\n onUIClaimUpdate();\n };\n\n const issueAward = (btnHandler) => {\n\n if (!awardInfo.name) {\n btnHandler.reset();\n return props.showAlertModal('info', 'Invalid name', 'Please enter a first name')\n }\n if (!awardInfo.surname) {\n btnHandler.reset();\n return props.showAlertModal('info', 'Invalid surname', 'Please enter a surname')\n }\n if (!awardInfo.email) {\n btnHandler.reset();\n return props.showAlertModal('info', 'Invalid email', 'Please enter a valid email')\n }\n\n if (!awardInfo.country_code) {\n btnHandler.reset();\n return props.showAlertModal('info', 'Invalid country code', 'Please select a country mobile code')\n }\n if (!awardInfo.mobile_number) {\n btnHandler.reset();\n return props.showAlertModal('info', 'Invalid mobile number', 'Please enter a mobile number')\n }\n\n distributeExcessAmongSuppliers();\n\n // create a settlement per supplier\n uiClaim.suppliers.forEach(supplier => {\n if (supplier.has_selected_items(supplier)) {\n // this supplier has selected items.\n\n let items = supplier.get_selected_items(supplier);\n let itemList = [];\n items.forEach(item => itemList.push(item.id));\n createSettlementForSupplier(supplier, itemList, btnHandler);\n\n }\n });\n\n };\n\n function currencyChange(cur = null) {\n if (cur === 0) {\n return '0.00';\n }\n if (cur) {\n return new Intl.NumberFormat('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2}).format(cur);\n } else {\n return ' ';\n }\n }\n\n\n const createSettlementForSupplier = (supplier, itemList, btnHandler) => {\n if (awardInfo.mobile_number || awardInfo.name || awardInfo.email || awardInfo.surname) {\n let excess = supplier.excess;\n if (!(supplier.excess)) {\n excess = 0;\n }\n\n let numberInput = awardInfo.mobile_number;\n if (numberInput[0] === '0') numberInput = numberInput.substring(1); // remove a leading zero\n let wholeNumber = awardInfo.country_code + numberInput;\n\n createSettlement({\n claimId: claimId,\n method: 'AWARD',\n supplierId: supplier.id,\n value: supplier.total_cost(supplier, !supplier.do_not_deliver, true),\n excess: excess,\n itemIds: itemList,\n note: null,\n purchase_order: awardInfo.purchase_order,\n delivery_fee: supplier.delivery_cost_for_selected_items(supplier),\n\n lastName: awardInfo.surname,\n phoneNumber: wholeNumber,\n title: awardInfo.name,\n email: awardInfo.email,\n },\n (data) => {\n props.showNotificationModal('success', 'Awarded', 'Successfully created settlement');\n btnHandler.onSuccess();\n },\n (error) => {\n props.onError(error);\n btnHandler.onError();\n },\n );\n } else {\n document.getElementById('infoCheck').innerText = 'Please fill in the details';\n document.getElementById('infoCheck').css = 'Please fill in the details';\n }\n\n };\n\n const onIssueAwardClicked = (btnHandler) => {\n\n props.showConfirmModal(\n 'success',\n 'Issue Award',\n 'Are you sure you want to issue award?',\n 'Issue',\n () => {\n issueAward(btnHandler);\n },\n () => {\n btnHandler.reset();\n }\n );\n };\n\n const onItemAwardChecked = (event, item) => {\n\n // set all instances of this item as unselected\n for (let _supplier of uiClaim.suppliers) {\n for (let _item of _supplier.supplier_items) {\n if (_item.id === item.id) {\n _item.selected_for_award = false;\n }\n }\n }\n\n // update only the clicked item\n item.selected_for_award = event.target.checked;\n\n // make a copy so the state can be updated\n onUIClaimUpdate();\n\n };\n\n const getTotalAwardValue = (withExcess = true) => {\n\n if (uiClaim === null) {\n return 0;\n }\n\n let total = 0;\n uiClaim.suppliers.forEach(supplier => {\n let supplierTotal = supplier.total_cost(supplier, !supplier.do_not_deliver, withExcess);\n total += supplierTotal;\n });\n\n return total;\n };\n\n const getTotalDeliveryCost = () => {\n\n if (uiClaim === null) {\n return 0;\n }\n\n let total = 0;\n uiClaim.suppliers.forEach(supplier => {\n let supplierTotal = supplier.delivery_cost_for_selected_items(supplier);\n total += supplierTotal;\n });\n return total;\n\n };\n\n const getItemIsSelectedByAnySupplier = (item) => {\n\n // if this row item is selected = return white\n if (item.selected_for_award) {\n return false;\n }\n\n // if this row item is not selected - but another row item is - return grey\n let itemRowIsSelectedByAnySupplier = false;\n for (let _supplier of uiClaim.suppliers) {\n for (let _item of _supplier.supplier_items) {\n if (_item.id === item.id) {\n if (_item.selected_for_award)\n itemRowIsSelectedByAnySupplier = true;\n }\n }\n }\n\n return itemRowIsSelectedByAnySupplier;\n\n };\n\n const promptUpdateQuotePrice = (item, quote) => {\n /** Open the \"Update quote price\" modal */\n\n /** supplierRecommendedReplacement is from the supplier_panel - it is the \"recommended replacement(quote product)\" from the recommendation engine */\n\n setUpdateManualQuoteOptions({\n 'item': item,\n 'quote': quote\n });\n\n setTimeout(() => {\n setUpdateManualQuoteOpen(true);\n }, 50);\n };\n const onUpdateQuotePrice = (options, buttonHandler) => {\n\n let item = options.item;\n let quote = options.quote;\n let price = parseFloat(options.price);\n\n let errorMessage = null;\n\n if (isNaN(price)) {\n errorMessage = 'Please enter a valid number.';\n } else if (price === quote.price) {\n errorMessage = 'The price has not been changed.';\n }\n\n if (errorMessage !== null) {\n let error = {\n 'type': 'Error: Invalid Input',\n 'message': errorMessage\n };\n alertError(setAlertOpen, setAlertOptions, error);\n buttonHandler.onError('Invalid input');\n }\n\n updateQuotePrice(\n item.id,\n quote.id,\n price,\n options.update_catalog_price,\n false,\n (data) => {\n setUpdateManualQuoteOpen(false);\n props.updateGlobalClaim(claimId, setClaim);\n buttonHandler.onSuccess('Quote price updated');\n },\n (error) => {\n alertError(setAlertOpen, setAlertOptions, error);\n buttonHandler.onError('Failed to update quote price');\n }\n );\n };\n\n\n const promptUpdateQuote = (item, supplier, supplierRecommendedReplacement) => {\n /** Open the \"Update quote\" modal */\n\n setEditReplacementModalOptions({\n 'claim': claim,\n 'supplier': supplier,\n 'item': item,\n 'supplierRecommendedReplacement': supplierRecommendedReplacement,\n 'originPage': 'award'\n });\n setEditReplacementModalOpen(true);\n };\n const onSuccessfulEditReplacement = (data) => {\n props.updateGlobalClaim(claimId, setClaim);\n };\n\n\n // HTML render functions\n const renderSuppliersAndItems = () => {\n\n if (!uiClaim) {\n return (\n
\n
\n
\n \n
\n
\n
\n );\n }\n\n\n // TODO why is the below this block empty? confirm it's functionality and remove if not needed\n // let suppliersAndItems = {};\n // for (const item of claim.items) {\n // if (!item.supplier_panel) continue; // manual/filter items can have a null supplier panel\n // for (const supplier of item.supplier_panel) {\n //\n // if (!(supplier.unique_reference_name in suppliersAndItems)) {\n // }\n // }\n // }\n\n\n // Create an array of all suppliers, and an array of all the categories that appear in all the items of this claim\n let suppliers = [ /* {'id': '123', 'name': 'Supplier1'}, {'id': '124', 'name': 'Supplier2'} */];\n claim.suppliers.map(sup => suppliers.push({\n 'id': sup.id,\n 'name': sup.display_name,\n 'supplier': sup\n }));\n\n // Create an array of all the categories that appear in all the items of this claim\n let categories = [/* \"Smartphones, Tablets & Wearables\", \"Photography\" */];\n for (let item of claim.items) {\n let itemCat = item.category.category_a;\n if (!(categories.includes(itemCat)))\n categories.push(itemCat);\n }\n\n return (\n
\n {uiClaim.suppliers.map(supplier => (\n\n <>\n\n
\n\n
\n
\n

\n {supplier.display_name}\n

\n
\n
\n\n\n
\n {uiClaim.categories.map(category => (\n \n\n
\n
\n

{category.display_name}

\n
\n
\n\n\n {/*Table */}\n \n \n \n \n \n \n \n \n \n \n \n \n\n \n\n \n \n \n \n {supplier.supplier_items.map(item => (\n safe(()=> renderSingleItem(item, supplier, category) )\n ))}\n \n
\n #\n \n Item\n \n\n \n Quote Expiry\n \n Average rank: {supplier.average_rank(supplier)}

)}\n position=\"top\">\n Rank\n \n
\n Unit Cost\n \n Qty\n \n Item Total\n \n Time to quote\n \n Award\n
\n
\n\n\n
\n ))}\n
\n\n
\n
\n\n
\n

\n Do not deliver:\n {\n const currentCheckbox = event.target;\n const isChecked = currentCheckbox.checked; // Capture the new intended state of the checkbox\n\n props.showConfirmModal(\n 'info',\n 'Do Not Deliver',\n 'Are you sure you want to set this supplier to not deliver?',\n 'Do not deliver',\n () => {\n // User confirmed, so proceed with the intended change\n supplier.do_not_deliver = isChecked; // Update your model/state as necessary\n onUIClaimUpdate(); // Perform any additional updates or API calls\n },\n () => {\n // User did not confirm, revert the checkbox state\n currentCheckbox.checked = !isChecked; // Revert the checkbox to its original state\n }\n );\n })}\n className={classNames(\n \"mx-4\",\n supplier.is_adhoc(supplier) ? 'hidden' : ''\n )}\n />\n

\n
\n

Delivery Cost:

\n

{claim && claim.organisation.info.currency_symbol} {supplier.do_not_deliver ? 0 : supplier.delivery_cost_for_selected_items(supplier)}

\n
\n
\n\n
\n

Total:

\n

{claim && claim.organisation.info.currency_symbol} {currencyChange(\n supplier.total_cost(supplier, !supplier.do_not_deliver, false))}

\n
\n
\n
\n\n \n \n ))}\n \n );\n\n };\n\n const renderSingleItem = (item, supplier, category) => {\n\n if (item.category.id !== category.id) {\n return (<>);\n }\n\n\n let replacement = supplier.get_recommended_replacement(supplier, item);\n if (!replacement.quote) {\n return (<>);\n }\n\n let qty = item.quantity || 0;\n let sup = supplier;\n let currencySymbol = item.replacement && item.replacement.quote.currency_symbol ? item.replacement.quote.currency_symbol : ' ';\n let price = replacement.quote.price;\n let date_expiry = item.replacement && item.replacement.quote.date_expiry ? item.replacement.quote.date_expiry.split(' ')[0] : 0;\n let item_rank = item.supplier_panel.find(_supplier => _supplier.id === supplier.id)?.ranking || '-';\n // let match_accuracy = item.replacement.quote.match_accuracy || \"N/A\";\n let item_index = sup.supplier_items.indexOf(item) + 1;\n\n let time_to_quote_minutes = item.supplier_panel.find(_supplier => _supplier.id === supplier.id)?.time_to_quote_minutes;\n\n if (time_to_quote_minutes == null) {\n time_to_quote_minutes = '-';\n } else if (time_to_quote_minutes === 0) {\n time_to_quote_minutes = '-';\n } else {\n const duration = moment.duration(time_to_quote_minutes, 'minutes');\n const hours = duration.hours();\n const minutes = duration.minutes();\n time_to_quote_minutes = hours ? `${hours}h ${minutes.toString().padStart(2, '0')}m` : `${minutes}m`;\n }\n\n function getCheckbox() {\n\n // If the item has been settled, do not show the checkbox\n if (item.has_been_settled) {\n return (\n \n \n Issue Voucher\n \n );\n }\n\n // If the supplier is adhoc, do not show the checkbox\n if (supplier.is_adhoc(supplier)) {\n return (\n \n \n \n \n \n );\n }\n\n // If the item is selected by any supplier, do not show the checkbox\n if (getItemIsSelectedByAnySupplier(item)) {\n return (\n \n \n \n \n \n );\n }\n\n\n // Checkbox for awarding\n return (\n onItemAwardChecked(e, item)}\n />\n );\n\n }\n\n return (\n \n\n {/* # */}\n {item_index}\n\n {/* ITEM */}\n \n {/**/}\n
\n
\n\n
\n
\n
\n {replacement.product.common_name}\n
\n
\n {item.category.display_name}\n
\n
\n
\n {replacement.product.type === 'MANUAL' ? replacement.product.description : calculateProperties(replacement.product)}\n
\n
\n
\n
\n \n\n {/* ITEM */}\n \n
\n \n \n \n \n
\n \n\n {/* DATE EXPIRY */}\n {date_expiry}\n\n {/* ITEM RANK */}\n {item_rank}\n\n {/* PRICE */}\n \n
\n

{currencySymbol} {currencyChange(price)}

\n\n \n \n \n
\n \n\n {/* QUANTITY*/}\n {qty}\n\n {/* ITEM TOTAL */}\n {currencySymbol} {currencyChange(qty * price)} \n\n {/* TIME TO QUOTE*/}\n {time_to_quote_minutes}\n\n {/* ACTIONS */}\n \n\n {getCheckbox()}\n\n \n \n );\n };\n\n return (\n <>\n
\n\n \n \n \n\n {/* TODO : change usage to base modal */}\n \n\n {/* TODO : change usage to base modal */}\n \n\n \n props.onError(e)}\n />\n \n\n \n props.onError(e)}\n />\n \n\n
\n\n \n\n {/* TODO : change usage to base modal */}\n {\n }}\n />\n \n\n
\n\n {/* Page header */}\n
\n\n

\n Award\n

\n\n
\n\n {/* RETURN TO CLAIM PROFILE */}\n navigate(`/profile/${claimId}`)}\n className=\"tooltip-container btn py-2\"\n >\n \n \n Claim Profile\n \n Return to the claim quantification review\n
\n\n {/* OPEN AWARD MODAL */}\n {\n /** Open the award modal\n * Confirm that all suppliers have retrieved their delivery fees, before\n * allowing the modal to be opened */\n\n let suppliersHaveDeliveryCosts = false;\n uiClaim?.suppliers.forEach(supplier => {\n if (supplier.delivery_cost_per_category.length > 0) {\n suppliersHaveDeliveryCosts = true;\n }\n });\n\n if(!suppliersHaveDeliveryCosts){\n props.showAlertModal(\n 'info',\n 'Delivery Costs Not Retrieved',\n 'Please wait for the delivery costs of all suppliers to be retrieved before issuing an award'\n );\n } else {\n setClaimAwardOpen(true);\n }\n\n }}\n\n >\n \n \n Award\n \n \n\n
\n\n
\n\n\n
\n
\n {safe(renderSuppliersAndItems)}\n
\n
\n\n
\n\n
\n {\n /** Open the award modal\n * Confirm that all suppliers have retrieved their delivery fees, before\n * allowing the modal to be opened */\n\n let suppliersHaveDeliveryCosts = false;\n uiClaim?.suppliers.forEach(supplier => {\n if (supplier.delivery_cost_per_category.length > 0) {\n suppliersHaveDeliveryCosts = true;\n }\n });\n\n if(!suppliersHaveDeliveryCosts){\n props.showAlertModal(\n 'info',\n 'Delivery Costs Not Retrieved',\n 'Please wait for the delivery costs of all suppliers to be retrieved before issuing an award'\n );\n } else {\n setClaimAwardOpen(true);\n }\n\n }}\n className=\"btn mx-10\"\n >\n \n \n Award\n \n \n
\n\n
\n
\n\n \n
\n\n \n \n );\n}\n\n\n\n\n","// Library imports\n\nimport React, {Fragment, useEffect, useState} from 'react';\nimport {useNavigate, useParams} from 'react-router-dom';\n\nimport {Combobox, Dialog, Transition} from '@headlessui/react';\n\nimport {CheckIcon, ClipboardCopyIcon, XIcon} from '@heroicons/react/outline';\n\nimport {\n ArrowCircleLeftIcon,\n ArrowDownIcon,\n CheckCircleIcon,\n InformationCircleIcon,\n} from '@heroicons/react/solid';\n\n\n// Local imports\nimport {customGraphRequest} from '../../utils/coreApi.js';\nimport {classNames, currencySymbol, escapeDoubleQuotes, isEmpty} from '../../utils/helpers.js';\nimport LoadingSpinner from '../../components/ui/LoadingSpinner';\nimport Safe from \"../../components/Safe\";\nimport {MobileNumberInput} from \"../../components/MobileNumberInput\";\nimport {useDocumentTitle} from \"../../components/PageTitle\";\nimport FilterSelect from \"../../components/base/FilterSelect\";\nimport {BasicImage} from \"../../components/base/BasicImage\";\nimport ApiButton from \"../../components/base/ApiButton\";\n\nexport default function ClaimIssueVoucher(props) {\n\n const setPageTitle = useDocumentTitle(\"Post Tender\");\n\n const navigate = useNavigate();\n const {claimId} = useParams();\n\n const [awardModalOpen, setAwardModalOpen] = useState(false);\n const [voucherItem, setVoucherItem] = useState(false);\n\n const [claim, setClaim] = useState(null);\n // const [currencySymbol, setCurrencySymbol] = useState(null);\n\n const [selectedSupplier, setSelectedSupplier] = useState(null);\n const [suppliers, setSuppliers] = useState([]);\n\n const [awardedValue, setAwardedValue] = useState(0);\n const [excess, setExcess] = useState(0);\n\n // On every page load\n useEffect(() => {\n\n if (claim === null) {\n props.updateGlobalClaim(claimId, setClaim);\n }\n\n if (claim && !props.navbarTopPageContent.claim) props.setNavbarTopPageContent({'claim': claim})\n\n if (claim) setPageTitle(`Voucher : ${claim.insurer_claim_number}`)\n\n }, [claim]);\n\n useEffect(() => {\n fetchSuppliers();\n }, []);\n\n function fetchSuppliers() {\n /* Fetch a list of supplier organisations, for the voucher's supplier selection */\n\n if (!isEmpty(suppliers)) return;\n\n let query = `\n query Voucher_ClaimSuppliers{\n claim_suppliers(\n claim_id:\"${claimId}\"\n excluded_voucher_request_types: [PURCHASE_ORDER]\n ){\n error{type, message}\n organisations{\n id\n unique_reference_name\n info{\n name\n country\n currency_symbol\n logo_image_url\n }\n }\n }\n }\n `\n\n customGraphRequest(\n query,\n (data) => {\n setSuppliers(data.organisations);\n },\n props.onError\n )\n\n }\n\n // onClick functions\n const issueVoucher = () => {\n\n let mutation = `\n mutation Voucher_CreateVoucherItem{\n create_voucher_item(\n claim_id: \"${claimId}\"\n supplier_id: \"${selectedSupplier.id}\"\n description: \"\"\n\n awarded_value: ${awardedValue}\n excess_value: ${excess}\n\n ){\n error{type, message}\n voucher_item{\n id\n awarded_value\n voucher_value\n excess_value\n claim{\n id\n }\n }\n }\n }\n `\n\n customGraphRequest(\n mutation,\n (data) => {\n console.log('voucher item created', data)\n props.showToastNotificationModal(\n 'success',\n 'Voucher Created',\n ''\n )\n\n setVoucherItem(data.voucher_item)\n setAwardModalOpen(true)\n },\n props.onError\n )\n\n };\n\n const onIssueVoucherClicked = (event) => {\n\n // Check that the supplier is selected\n if (isEmpty(selectedSupplier)) {\n props.showAlertModal(\n 'info',\n 'Invalid Supplier',\n 'A supplier must be selected'\n )\n return;\n }\n\n // Check that the total value is positive\n let totalValue = voucherValue();\n\n if (totalValue === '0.00' || parseFloat(totalValue) < 0) {\n props.showAlertModal(\n 'info',\n 'Invalid Total Value',\n 'The total value must be greater than zero'\n )\n return;\n }\n\n issueVoucher();\n\n };\n\n const supplierField = () => {\n\n if (claim === null) {\n return ();\n }\n\n return (\n\n
\n \n
\n \n {currencySymbol(claim)}\n
\n\n setSelectedSupplier(selected)}\n\n // Filter by the organisation name\n filterOptions={(selectableOptions, query) =>\n query === '' ?\n selectableOptions\n :\n selectableOptions.filter((option) =>\n option.info.name\n .toLowerCase()\n .replace(/\\s+/g, '') // remove all whitespace\n .includes(query.toLowerCase().replace(/\\s+/g, ''))\n )}\n renderMainInput={(selected, query, setQuery) => (\n
\n \n
\n {selected?.info?.logo_image_url &&\n {\n if (!e.target.dataset.retry) {\n e.target.src = \"/org-logo-placeholder.jpg\";\n e.target.dataset.retry = \"true\";\n }\n }}\n />\n }\n
\n\n selected ? selected.info?.name : '-'}\n onChange={(event) => setQuery(event.target.value)}\n />\n\n
\n \n
\n
\n
\n\n )}\n renderOption={(option) =>\n \n {({selected, active}) => (\n
\n\n {/* SELECTED CHECK */}\n {selected &&\n
\n \n
\n }\n\n {/* ORG LOGO */}\n \n\n {/* ORG NAME */}\n {option?.info.name}\n\n
\n )}\n \n }\n />\n\n
\n \n\n );\n\n };\n\n const renderInstructions = () => {\n\n return (\n
\n
\n
\n \n
\n
\n
\n

\n Complete the fields below to issue a voucher.\n

\n
\n
\n
\n
\n );\n };\n\n function voucherValue() {\n let totalValue = parseFloat(awardedValue) - parseFloat(excess);\n return totalValue.toFixed(2);\n }\n\n const renderVoucherForm = () => {\n\n if (!claim) {\n return (\n
\n \n
\n );\n }\n\n return (\n
\n
\n
\n
\n\n {supplierField()}\n\n {/* VALUE */}\n
\n \n
\n \n {currencySymbol(claim)}\n
\n {\n // Remove any leading zeros\n let value = e.target.value;\n value = value.replace(/^0+/, ''); // Removes leading zeros\n\n // Handle case where input is just \"0\"\n if (value === '') {\n value = '0';\n }\n\n setAwardedValue(value)\n }}\n />\n
\n
\n\n {/* EXCESS */}\n
\n \n
\n \n {currencySymbol(claim)}\n
\n {\n // Remove any leading zeros\n let value = e.target.value;\n value = value.replace(/^0+/, ''); // Removes leading zeros\n\n // Handle case where input is just \"0\"\n if (value === '') {\n value = '0';\n }\n\n setExcess(value)\n }}\n />\n
\n
\n\n {/* TOTAL */}\n
\n \n
\n \n {currencySymbol(claim)}\n
\n
\n {voucherValue()}\n
\n
\n
\n\n {/* BUTTONS */}\n
\n navigate(`/profile/${claimId || ''}`)}\n className=\"btn w-full mx-0\"\n >\n \n \n Claim profile\n \n \n\n {/* Create voucher */}\n {isEmpty(voucherItem) &&\n \n \n \n Issue Voucher\n \n \n }\n\n {/* Re-open the Award modal if a voucher has been created */}\n {!isEmpty(voucherItem) &&\n setAwardModalOpen(true)}\n className=\"btn w-full mx-0\"\n >\n \n \n Re-open Award Modal\n \n \n }\n\n\n
\n\n
\n\n \n \n \n );\n };\n\n const allProps = {\n ...props,\n navigate,\n claimId,\n claim, setClaim,\n awardModalOpen, setAwardModalOpen,\n selectedSupplier, setSelectedSupplier,\n excess, setExcess,\n awardedValue, setAwardedValue,\n voucherItem, setVoucherItem,\n }\n\n return (\n <>\n
\n\n \n\n
\n
\n\n {/* HEADER */}\n
\n

Issue Voucher

\n navigate(`/profile/${claimId}`)}\n className=\"tooltip-container btn py-2\"\n >\n \n \n Claim Profile\n \n Return to the claim quantification review\n
\n\n
\n\n {renderInstructions()}\n\n {renderVoucherForm()}\n\n \n
\n\n \n \n );\n}\n\nfunction AwardModal(props) {\n\n const [description, setDescription] = useState('');\n const [title, setTitle] = useState('');\n const [lastname, setLastname] = useState('');\n const [mobileCountryCode, setMobileCountryCode] = useState('');\n const [mobileNumber, setMobileNumber] = useState('');\n const [email, setEmail] = useState('');\n\n function onIssueAward(buttonHandler) {\n\n if (!title || !lastname || !mobileCountryCode || !mobileNumber || !email) {\n props.showAlertModal(\n 'info',\n 'Incomplete Details',\n 'Please complete all fields'\n )\n buttonHandler.onError('Incomplete Details')\n return\n }\n if (!email.includes('@') || !email.includes('.')) {\n props.showAlertModal(\n 'info',\n 'Invalid Email Address',\n 'Please enter a valid email address'\n )\n buttonHandler.onError('Invalid Email Address')\n return\n }\n\n const mobile = mobileCountryCode + mobileNumber;\n\n let mutation = `\n mutation Voucher_Settlement{\n create_settlement(\n claim: \"${props.claimId}\"\n method: VOUCHER\n supplier: \"${props.selectedSupplier.id}\"\n note: \"${escapeDoubleQuotes(description)}\"\n settle: true\n \n title: \"${title}\"\n last_name: \"${lastname}\"\n phone_number: \"${mobile}\"\n email: \"${email}\"\n \n value: ${props.voucherItem.voucher_value}\n excess: ${props.voucherItem.excess_value}\n \n voucher_item_ids: [\"${props.voucherItem.id}\"]\n ) {\n error {\n type\n message\n }\n settlement {\n id\n country\n status\n settlement_engine_status\n method\n currency\n value\n excess\n }\n }\n }\n\n `\n\n customGraphRequest(\n mutation,\n (data) => {\n props.showNotificationModal(\n 'success',\n 'Awarded',\n 'The award has successfully been awarded'\n )\n buttonHandler.onSuccess('Successfully issued voucher')\n\n setTimeout(() => {\n props.navigate(`/profile/${props.claimId}`)\n }, 2000);\n\n },\n (error) => {\n props.onError(error)\n buttonHandler.onError('Failed to issue voucher')\n }\n )\n\n }\n\n const renderVoucher = () => {\n\n return (\n \n \n Claim value\n \n 1\n {currencySymbol(props.claim)} {props.voucherItem.awarded_value}\n \n );\n };\n\n if (!props.voucherItem) return (\n <>\n );\n\n if (!props.claim) return (<>);\n\n return (\n \n {\n }}>\n
\n props.setOpen(false)}\n />\n\n
\n \n
\n
\n
\n
\n
\n \n Award Voucher\n \n
\n props.setOpen(false)}\n >\n Close panel\n \n \n
\n
\n
\n

\n Create settlement for the voucher\n

\n
\n
\n\n
\n
\n\n
\n\n {/* ITEMS */}\n
\n\n
\n
\n
\n
\n
\n\n \n \n\n {/* HEADER */}\n \n \n \n Item\n \n \n Qty\n \n \n Total\n \n \n \n\n {/* BODY */}\n \n\n {/* VOUCHER ROW */}\n {renderVoucher()}\n\n {/* EXCESS ROW */}\n \n \n Less excess\n \n \n \n {props.claim && props.claim.organisation.info.currency_symbol}\n {props.voucherItem.excess_value}\n \n\n {/* INVOICE TOTAL ROW */}\n \n \n Voucher value\n \n \n \n {props.claim && props.claim.organisation.info.currency_symbol} {props.voucherItem.awarded_value - props.voucherItem.excess_value}\n \n \n\n \n \n
\n
\n\n\n \n
\n\n
\n\n

\n Additional Information\n

\n\n {/* PURCHASE ORDER */}\n \n \n \n setDescription(e.target.value)}\n />\n
\n
\n\n\n {/* CLAIMANT DETAILS */}\n

\n Claimant Details\n

\n\n {/* FIRST NAME */}\n \n \n \n setTitle(e.target.value)}\n />\n
\n
\n\n {/* LAST NAME */}\n \n \n \n setLastname(e.target.value)}\n />\n
\n
\n\n {/* MOBILE */}\n \n \n\n \n\n \n setMobileCountryCode(e.target.value)}\n />\n \n\n {\n // remove any leading zeros\n let mobile = e.target.value\n if (mobile[0] === '0') {\n mobile = mobile.substring(1);\n props.showToastNotificationModal(\n 'info',\n 'Please do not start mobile numbers with a 0',\n '',\n 5000\n )\n }\n setMobileNumber(mobile)\n }}\n />\n\n
\n
\n\n\n {/* EMAIL */}\n \n \n \n setEmail(e.target.value)}\n />\n
\n \n\n \n\n }\n successContent='Voucher Issued'\n errorContent='Failed to issue voucher'\n >\n \n \n Issue Award\n \n \n\n \n
\n\n
\n \n\n \n \n \n\n \n\n \n \n \n
\n props.setOpen(false)}\n >\n \n Close\n \n\n
\n \n \n \n \n \n
\n
\n );\n}\n\n","// Library imports\nimport {useEffect, useState} from 'react'\nimport {useNavigate, useSearchParams} from \"react-router-dom\";\n\nimport {CheckCircleIcon, InformationCircleIcon,} from '@heroicons/react/solid';\n\n\n// Local imports\nimport NotificationCenter from '../../components/NotificationCenter.jsx';\n\nimport AlertModal from '../modals/AlertModal.jsx';\nimport ConfirmModal from '../modals/ConfirmModal.jsx';\nimport SettleClaimantInfoModal from '../modals/SettleClaimantInfoModal.jsx';\n\nimport {fetchUser, updateSettlementVoucherCode} from '../../utils/coreApi.js';\n\nimport {alertError} from '../../utils/helpers.js';\n\n\nexport default function ClaimVoucherReturn(props) {\n\n // React router\n const navigate = useNavigate();\n const [searchParams] = useSearchParams();\n\n // Used for errors\n const [alertOpen, setAlertOpen] = useState(false);\n const [alertOptions, setAlertOptions] = useState({\n \"heading\": \"\",\n \"message\": \"\"\n });\n\n // Used for success feedback\n const [notificationOpen, setNotificationOpen] = useState(false);\n const [notificationOptions, setNotificationOptions] = useState({\n \"heading\": \"\",\n \"message\": \"\"\n });\n\n const [confirmModalOpen, setConfirmModalOpen] = useState(false);\n const [confirmModalOptions] = useState({\n \"heading\": \"\",\n \"message\": \"\",\n \"type\": \"\",\n \"buttonText\": \"\",\n });\n\n // Data states\n const [user, setUser] = useState(null);\n\n // On every page load\n useEffect(() => {\n\n if (user === null) {\n fetchUser(setUser, navigate);\n }\n\n });\n\n\n // Helper functions\n\n const buildQuery = () => {\n\n let query = {};\n\n for (const [key, value] of searchParams) {\n query[key] = value;\n }\n\n // If query is empty, return null\n if (Object.getOwnPropertyNames(query).length === 0)\n return null;\n\n\n return query;\n\n }\n\n // onClick functions\n\n const updateVoucher = () => {\n\n let vtid = buildQuery()[\"id\"];\n let voucherCode = document.getElementById(\"voucherCode\");\n\n updateSettlementVoucherCode(\n vtid, voucherCode.value,\n (data) => {\n setNotificationOptions({\n 'heading': 'Code submitted',\n 'message': 'The voucher code has been submitted. Redirecting...',\n })\n setNotificationOpen(true);\n setTimeout(() => {\n setNotificationOpen(false);\n window.location = \"/\";\n }, 1000);\n },\n (error) => {\n alertError(setAlertOpen, setAlertOptions, error);\n }\n );\n }\n\n // HTML render functions\n\n const renderInstructions = () => {\n\n return (\n
\n
\n
\n \n
\n
\n
\n

\n Please enter the voucher code below.\n

\n
\n {/*

\n \n Learn more \n \n

*/}\n
\n
\n
\n );\n }\n\n return (\n <>\n
\n\n {/**/}\n\n {/* TODO : change usage to base modal */}\n \n\n {/* TODO : change usage to base modal */}\n \n\n
\n\n {/* TODO : change usage to base modal */}\n {\n }}\n />\n\n
\n {/* Page header */}\n
\n
\n \n
\n
\n {renderInstructions()}\n
\n
\n
\n\n
\n
\n
\n
\n
\n \n
\n {buildQuery() ? buildQuery()[\"id\"] : '-'}\n
\n
\n
\n \n
\n {buildQuery() ? buildQuery()[\"claim_ref_number\"] : '-'}\n
\n
\n
\n \n
\n R {buildQuery() ? buildQuery()[\"requested_voucher_value\"] : '-'}\n
\n
\n
\n \n
\n \n
\n
\n
\n
\n \n \n \n Submit\n \n \n
\n
\n\n
\n
\n
\n
\n
\n\n \n
\n\n \n \n )\n}\n","import React from 'react';\nimport {currencySymbol as currencySymbolFromClaim} from \"../../utils/helpers\";\n\nconst CurrencyInput = ({ currencySymbol, ...props }) => {\n /* Seperate the currencySymbol prop, so that it doesn't get passed to the input element\n * (React will throw a warning)\n * - currencySymbol: Custom currency symbol\n * */\n\n return (\n
\n\n \n {currencySymbol || currencySymbolFromClaim(props.claim)}\n \n\n \n\n
\n );\n};\n\nexport default CurrencyInput;\n","import React from 'react';\nimport {ClipboardCopyIcon} from \"@heroicons/react/outline\";\nimport Tooltip from \"../components/Tooltip\";\n\nconst SLVRCLD_UI_Library = () => {\n\n // ================== HELPER FUNCTIONS ==================\n function listTailwindColorPalette(role, colorName){\n\n const range = [100, 200, 300, 400, 500, 600, 700, 800, 900];\n const palette = 'h-12 w-fit flex items-center p-4';\n\n // Copy to clipboard\n const click = (e) => {\n navigator.clipboard.writeText(`bg-${colorName}-${e.target.getAttribute('colorValue')}`);\n window.alert(`Copied bg-${colorName}-${e.target.getAttribute('colorValue')} to clipboard`);\n };\n\n return (\n
\n

{role}

\n {range.map((value) =>\n
{colorName}-{value}
\n )}\n
\n );\n }\n\n // Square box used for displaying shadow and rounded\n const squareBox = 'bg-white-100 border border-[1px] border-gray-200 flex items-center justify-center rounded-lg w-[8rem] h-[8rem] ';\n\n return (\n
\n\n
\n

SLVRCLD UI Library

\n

A overview and reference of the default UI for PORTAL

\n

CSS in SLVRCLD_UI_Library.css

\n
\n\n\n ...\"\n />\n\n \n \n

This is a base card that all interactive elements should be wrapped around

\n
\n
\n\n \n \n \n \n \n\n\n \n \n\n
\n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n
\n\n \n \n \n\n \n \n \n\n
\n\n
\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n
\n\n
\n\n \n

Tooltip JSX

\n Tooltip JSX\n Tooltip JSX\n
\n Tooltip JSX\n
\n }>\n \n \n\n \n

Tooltip JSX

\n Tooltip JSX\n Tooltip JSX\n
\n Tooltip JSX\n
\n }>\n \n \n\n \n\n \n \n\n \n \n\n \n \n\n \n \n\n \n \n\n\n {/* ============================================================ */}\n\n {/* Gap */}\n
\n
\n
\n\n A showcase of all classes e.g: \"shadow-lg\" and elements e.g: {'

'} tag}\n />\n\n \n \n
\n
\n

Click to copy

\n
\n {listTailwindColorPalette('Primary', 'sky')}\n {listTailwindColorPalette('Secondary', 'purple')}\n {listTailwindColorPalette('Success', 'green')}\n {listTailwindColorPalette('Danger', 'red')}\n {listTailwindColorPalette('Warning', 'yellow')}\n {listTailwindColorPalette('Light', 'stone')}\n {listTailwindColorPalette('Dark', 'slate')}\n
\n
\n
\n\n \n \n\n {/* BASIC */}\n

Basic

\n
\n \n \n \n \n \n \n

\n Buttons against the foreground\n

\n
\n\n
\n \n \n \n \n \n \n

\n Buttons against the background\n

\n
\n\n
\n \n \n \n
\n\n {/* OUTLINE */}\n

Outline

\n
\n \n \n \n \n \n \n

\n Buttons against the foreground\n

\n
\n
\n \n \n \n \n \n \n

\n Buttons against the background\n

\n
\n\n {/* RAISED */}\n

Raised

\n
\n \n \n \n \n \n \n

\n Buttons against the foreground\n

\n
\n\n
\n \n \n \n \n \n \n

\n Buttons against the background\n

\n
\n\n\n {/* ICON */}\n

Icon

\n
\n \n \n \n \n \n \n

\n Buttons against the foreground\n

\n
\n\n
\n \n \n \n \n \n \n

\n Buttons against the background\n

\n
\n\n
\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n
DefaultPrimaryLightSuccessDangerDisabled
\n\n
\n\n\n
\n
\n\n \n \n \n \n \n\n \n \n \n \n \n\n \n \n \n \n \n\n \n \n \n \n\n \n\n \n\n {/* QUANTIFY */}\n \n\n \n );\n }\n\n return (\n <>\n
\n\n
\n\n
\n\n {/* Page header */}\n
\n\n

\n Cart Review\n

\n\n \n \n \n Back to search\n \n \n Go to search page\n \n \n
\n\n\n
\n\n {/* SUMMARY */}\n {safe(claimSummary)}\n\n {/* POSSIBLE ITEMS */}\n {safe(possibleItems)}\n\n {/* ITEMS */}\n {safe(cartItems)}\n\n
\n\n
\n
\n\n
\n \n );\n\n}\n\nfunction SingleItem(props) {\n\n // If the claim was quantified (with this item) and then re-opened, disable this item\n const dateCreated = new Date(props.item.date_created);\n const dateQuantified = new Date(props.claim.date_quantified);\n const itemPreviouslyQuantified = dateCreated < dateQuantified;\n\n // The input element for uploading attachments\n const itemAttachmentUploadInputRef = useRef(null);\n\n function onUploadDocument(file) {\n /* Upload the given attachment */\n\n let sizeInMB = file.size / 1024 / 1024;\n sizeInMB = sizeInMB.toFixed(2);\n\n if (file.size > 7 * 1024 * 1024) { // 7 MB limit\n props.showAlertModal(\n 'info',\n 'File Too Large',\n <>\n

The chosen file is {sizeInMB}MB, which exceeds the 7MB limit

\n

Please compress or upload another smaller file

\n \n );\n return;\n }\n\n uploadFile(\n {\n objectId: props.claim.id,\n objectType: 'claims',\n fileName: file.name,\n file: file,\n },\n (data) => {\n props.showToastNotificationModal('success', 'Attachment uploaded', '');\n\n // Manually add the attachment to the claim\n props.setClaim({...props.claim, attachments: [...props.claim.attachments, data.file]});\n\n // Update claim.attachments\n props.updateGlobalClaim(props.claimId, props.setClaim);\n\n linkAttachmentToItem(data.file, props.item);\n\n },\n props.onError\n );\n }\n\n function linkAttachmentToItem(attachment, item) {\n /* Link an attachment to an item */\n\n customGraphRequest(\n `mutation UpdateItemMetadata{\n update_item_metadata(\n item_id: \"${item.id}\"\n attachment_ids: [\"${attachment.id}\"]\n ){\n error{ message, type }\n item{id}\n }\n }`,\n (data) => {\n props.showToastNotificationModal(\n 'success', 'Attachment linked', ''\n )\n props.updateGlobalClaim(props.claimId, props.setClaim);\n\n },\n props.onError\n )\n }\n\n const customPriceChange = (itemID, price) => {\n console.log('Custom price change', itemID, price);\n if (!price) return props.showAlertModal('info', 'Invalid price', 'The price must be a positive number');\n\n updateItemClaimantQuote(\n itemID,\n price,\n (data) => {\n props.showToastNotificationModal('success', 'Claimant quote update');\n },\n props.onError\n );\n };\n\n function confirmDeleteItem(itemId) {\n /* Remove an item from the claim */\n\n let quantity = 0;\n\n updateItemQuantity(\n itemId,\n quantity,\n (data) => {\n props.updateGlobalClaim(props.claimId, props.setClaim);\n props.showToastNotificationModal('success', 'Item removed', 'The item has been removed from the claim');\n },\n props.onError\n );\n }\n\n function promptDeleteItem(item) {\n /* Prompt the user to confirm the deletion of an item */\n\n props.showConfirmModal(\n 'warning',\n 'Remove item',\n (
\n

Are you sure you want to remove:

\n

{item.product.common_name}

\n
),\n 'Remove item',\n () => {\n confirmDeleteItem(item.id);\n }\n )\n\n }\n\n function updateQuantity(item, quantity) {\n /* Update the item's quantity */\n\n updateItemQuantity(\n item.id,\n quantity,\n (data) => {\n props.showToastNotificationModal('success', 'Quantity updated', '');\n props.updateGlobalClaim(props.claimId, props.setClaim);\n },\n props.onError\n );\n\n };\n\n function FormLabel({children, className}) {\n return (\n

\n {children}\n

\n );\n }\n\n function AttachmentListItem({attachment, item}) {\n\n const [downloadStatus, setDownloadStatus] = useState('IDLE');\n\n function getDownloadURL(onSuccess) {\n // Create download url\n\n if (downloadStatus === 'LOADING') return;\n setDownloadStatus('LOADING');\n\n // If the URL is already present, don't make another request\n if (attachment.previewUrl) return;\n\n let mutation = `\n query GenerateFileDownloadURL{\n generate_file_download_url(\n file_id: \"${attachment.id}\"\n object_id: \"${attachment.object_id}\"\n object_type: ${attachment.object_type}\n ){\n error{type, message}\n url\n }\n }\n `\n\n customGraphRequest(\n mutation,\n (data) => {\n props.showToastNotificationModal('success', 'URL Generated', 'The download will start shortly');\n\n // Set the URL in the attachment object\n attachment.previewUrl = data.url;\n props.setClaim({...props.claim})\n\n onSuccess?.(data.url);\n },\n props.onError\n )\n }\n\n function renderPreview() {\n /** Show either a \"load preview\" or a preview of the file\n * Because the attachment.url is not directly publicly accessible,\n * a public URL must be generated first, which can then display the\n * document */\n\n const isImage = (url) => {\n // Function to check if the URL is an image\n return /\\.(jpg|jpeg|png|gif|bmp|webp)$/i.test(url);\n };\n\n if (attachment.previewUrl) {\n return (\n \n\n );\n }\n\n if (isImage(attachment.url)) {\n\n if (!attachment.previewUrl) {\n return (\n \n
getDownloadURL()}>\n \n
\n
\n );\n }\n\n return (\n
getDownloadURL()}>\n \n
\n );\n }\n\n return (<>);\n\n }\n\n return (\n
\n {/* PREVIEW */}\n {renderPreview()}\n\n {/* NAME */}\n

\n {attachment.file_name}\n

\n\n {/* REMOVE ATTACHMENT */}\n \n {\n props.showConfirmModal(\n 'warning',\n 'Remove attachment',\n 'Are you sure you want to remove this attachment?',\n 'Remove attachment',\n () => {\n customGraphRequest(\n `mutation UpdateItemMetadata{\n update_item_metadata(\n item_id: \"${item.id}\"\n attachment_ids_to_remove: [\"${attachment.id}\"]\n ){\n error{ message, type }\n item{id}\n }\n }`,\n (data) => {\n props.showToastNotificationModal(\n 'success', 'Purchase price updated', ''\n )\n props.updateGlobalClaim(props.claimId, props.setClaim);\n },\n props.onError\n )\n }\n )\n }}\n />\n \n
\n );\n }\n\n function updateMetadata(itemId, metadata) {\n\n function isNullUndefined(value) {\n return value === null || value === undefined;\n }\n\n let mutation = `\n mutation UpdateItemMetadata{\n update_item_metadata(\n item_id: \"${itemId}\"\n ${isNullUndefined(metadata.clients_quote) ? '' : `replacement_quote: ${metadata.clients_quote}`}\n ${isNullUndefined(metadata.incident_location) ? '' : `incident_location: \"${metadata.incident_location}\"`}\n ${isNullUndefined(metadata.comment) ? '' : `comment: \"${metadata.comment}\"`}\n ${isNullUndefined(metadata.claimed_amount) ? '' : `claimed_amount: ${metadata.claimed_amount}`}\n ${isNullUndefined(metadata.date_purchased) ? '' : `date_purchased: \"${metadata.date_purchased}\"`}\n ${isNullUndefined(metadata.purchase_price) ? '' : `purchase_price: ${metadata.purchase_price}`}\n ){\n error{ message, type }\n item{id}\n }\n }\n `\n\n customGraphRequest(\n mutation,\n (data) => {\n props.showToastNotificationModal(\n 'success', 'Updated', ''\n )\n props.updateGlobalClaim(props.claimId, props.setClaim);\n },\n props.onError\n )\n\n }\n\n return (\n
  • \n\n {/* Hidden file input, for uploading attachments */}\n {\n const file = event.target.files[0];\n if (file) {\n onUploadDocument(file);\n }\n }}\n />\n\n
    \n \n
    \n\n
    \n
    \n\n {/* ITEM */}\n
    \n
    \n

    \n {props.item.is_manual ? props.item.product.brand || props.item.product.model_numbers[0] : props.item.product.common_name}\n

    \n\n {/* DELETE ITEM */}\n \n promptDeleteItem(props.item)}\n />\n \n\n
    \n\n {/* QUANTITY */}\n \n updateQuantity(props.item, e.target.value)}\n className=\"select m-0 shadow-none mb-1 py-1 w-fit\"\n >\n \n \n \n \n \n \n \n \n \n \n {props.item.quantity > 10 && }\n \n \n\n
    \n
    \n

    \n {props.item.is_manual ? `${props.item.product.brand} | ${props.item.product.description}` : calculateProperties(props.item.product)}\n

    \n
    \n
    \n {props.item.product.model_number !== null ? (\n

    {props.item.product.model_number}

    \n ) : (\n

    {props.item.product.model_numbers.slice(0, 3).join(' | ')}

    \n )}\n {props.item.is_manual ? `${formatAsTitle(props.item.category.category_a)} > ${formatAsTitle(props.item.product.category)}` : ''}\n\n
    \n {props.item.is_manual ? (\n \n Manual\n
    \n ) :
    }\n
    \n\n\n
    \n\n
    \n\n
    \n\n
    \n\n {/* CLIENTS QUOTE */}\n
    \n Client's Quote\n {\n // Replace the value with 0 if it's an empty input\n let value = e.target.value ? e.target.value : 0;\n updateMetadata(props.item.id, {clients_quote: value});\n\n // TODO the above \"replacement_quote\" is not updating the item's claimant_quote\n // So additionally use the old method for now\n customPriceChange(props.item.id, value);\n }}\n className={classNames(\n 'input pl-8 w-full',\n )}\n />\n
    \n\n {/* CLAIMED AMOUNT */}\n
    \n Claimed amount\n {\n // Replace the value with 0 if it's an empty input\n let value = e.target.value ? e.target.value : 0;\n updateMetadata(props.item.id, {claimed_amount: value});\n }}\n className={classNames(\n 'input pl-8 w-full',\n )}\n />\n
    \n\n
    \n\n
    \n\n {/* PURCHASE DATE */}\n
    \n Purchased date\n {\n if (!e.target.value) return;\n updateMetadata(props.item.id, {date_purchased: e.target.value});\n }}\n />\n
    \n\n {/* PURCHASE PRICE */}\n
    \n Purchased price\n {\n // Replace the value with 0 if it's an empty input\n let value = e.target.value ? e.target.value : 0;\n updateMetadata(props.item.id, {purchase_price: value});\n }}\n className={classNames(\n 'input pl-8 w-full',\n )}\n />\n
    \n\n
    \n\n {/* LOCATION */}\n\n
    \n\n
    \n Space\n
    \n {\n\n if (!selectedString) return;\n\n // Parse the stored locations or use an empty array if not present\n let locations = JSON.parse(localStorage.getItem('itemIncidentLocations')) || [];\n if (!locations.includes(selectedString)) {\n locations.push(selectedString);\n // Store the updated locations array as a string\n localStorage.setItem('itemIncidentLocations', JSON.stringify(locations));\n }\n\n debounceQuery(\n 'updateItemMetadata',\n 500,\n () => updateMetadata(props.item.id, {incident_location: selectedString})\n );\n }}\n\n onBlur={(selectedString) => {\n\n if (!selectedString) return;\n\n // Parse the stored locations or use an empty array if not present\n let locations = JSON.parse(localStorage.getItem('itemIncidentLocations')) || [];\n if (!locations.includes(selectedString)) {\n locations.push(selectedString);\n // Store the updated locations array as a string\n localStorage.setItem('itemIncidentLocations', JSON.stringify(locations));\n }\n\n debounceQuery(\n 'updateItemMetadata',\n 500,\n () => updateMetadata(props.item.id, {incident_location: selectedString})\n );\n }}\n\n // Filter\n filterOptions={(selectableOptions, query) =>\n query === '' ?\n selectableOptions\n :\n [query, ...selectableOptions?.filter((option) =>\n option\n .toLowerCase()\n .replace(/\\s+/g, '') // remove all whitespace\n .includes(query.toLowerCase().replace(/\\s+/g, '')))\n ]\n }\n renderMainInput={(selected, query, setQuery) => (\n
    \n \n selected ? selected : ''}\n onChange={(event) => setQuery(event.target.value)}\n />\n\n
    \n \n
    \n
    \n
    \n\n )}\n renderOption={(option) =>\n \n {({selected, active}) => (\n
    \n\n {/* SELECTED CHECK */}\n {selected &&\n
    \n \n
    \n }\n {option}\n
    \n )}\n \n }\n />\n
    \n
    \n\n
    \n\n \n \n \n
    \n\n
    \n\n {/* COMMENT */}\n
    \n Comment\n
    \n {\n // Replace the value with '-' if it's an empty input\n let value = e.target.value ? e.target.value : '-';\n debounceQuery(\n 'updateItemMetadata',\n 500,\n () => updateMetadata(props.item.id, {comment: value})\n );\n }}\n />\n\n
    \n
    \n\n
    \n\n {/* ATTACHMENTS */}\n
    \n\n \n {\n itemAttachmentUploadInputRef.current.click()\n }}\n >\n Attachments +\n

    \n
    \n\n {props.item.metadata?.attachments?.map((attachment, index) => (\n \n ))}\n\n {isEmpty(props.item.metadata?.attachments) &&\n

    No attachments

    }\n
    \n\n
    \n\n
    \n\n
    \n\n \n
  • \n );\n\n}\n\nfunction SinglePossibleItem(props) {\n\n const [selectedProduct, setSelectedProduct] = useState(null);\n const [quantity, setQuantity] = useState(null);\n const [viewMode, setViewMode] = useState('PROTO'); // PROTO, MANUAL\n\n useEffect(() => {\n // When the selected product has been changed on any of the SinglePossibleItem components\n // Clear the parent component's selected products state, to trigger all SinglePossibleItem components to re-add\n props.setSelectedProtoProductsForPossibleItems([])\n }, [selectedProduct, quantity]);\n\n useEffect(() => {\n // When the parent component's selected products state has been cleared\n // Add the selected product to the parent component's selected products state again\n\n if (!selectedProduct) return;\n\n if (props.selectedProtoProductsForPossibleItems?.length === 0) {\n props.setSelectedProtoProductsForPossibleItems(prev =>\n [...prev, {...selectedProduct, quantity: quantity}]\n )\n }\n }, [props.selectedProtoProductsForPossibleItems]);\n\n /* lensItem:\n brand\n category{\n category_a\n ...\n }\n claimant_quote\n description\n model_number\n proto_products{\n id\n ...\n }\n quantity\n */\n let lensItem = props.possibleProduct;\n\n /** DEVELOPMENT Data */\n // lensItem.proto_products = placeholderLensChromeExtensionClaimPossibleProducts.claims[0].possible_items[0].proto_products\n\n const [manualItem_category, setManualItem_category] = useState(lensItem.category); // category Object. e.g: {id: '...', category_a:'...', category_b:'...', ...}\n const [manualItem_brand, setManualItem_brand] = useState(lensItem.brand);\n const [manualItem_modelNumber, setManualItem_modelNumber] = useState(lensItem.model_number);\n const [manualItem_description, setManualItem_description] = useState(lensItem.description);\n\n useEffect(() => {\n if (viewMode === 'MANUAL')\n setSelectedProduct({\n manual: true,\n brand: manualItem_brand,\n category: manualItem_category,\n model_number: manualItem_modelNumber,\n description: manualItem_description,\n quantity: quantity\n })\n }, [manualItem_brand, manualItem_modelNumber, manualItem_category, manualItem_description, quantity, viewMode]);\n\n function getSelectableMainCategories() {\n /** The main categories are found in the ProductCategory enum type in GraphQL\n enum ProductCategory {\n ACTION_SPORTS_CAMERAS\n AUDIO_AMPLIFIERS\n BLENDERS\n CAMCORDERS\n CAMERA_DRONES\n COFFEE_MAKERS\n COMPUTER_MONITORS\n DECODERS\n DIGITAL_CAMERAS\n DISHWASHERS\n ELECTRIC_KETTLES\n FREEZERS\n FRIDGES\n FRIDGE_FREEZERS\n GAME_CONSOLES\n HANDHELD_VACUUMS\n HEADPHONES\n HOBS\n INKJET_PRINTERS\n IRONS\n LASER_PRINTERS\n MICROWAVES\n NOTEBOOKS\n OVENS\n ROBOT_VACUUMS\n SIDE_BY_SIDE_FRIDGE_FREEZERS\n SMARTPHONES\n SMARTWATCHES\n SOUNDBARS\n TABLETS\n TOASTERS\n TUMBLE_DRYERS\n TVS\n UNKNOWN\n VACUUMS\n WASHER_DRYERS\n WASHING_MACHINES\n }*/\n\n // create a list of each category_a\n let catA = props.selectableCategories.map(category => category.category_a);\n\n // because \"category_a\" is repeated in many of the categories, but we only want 1 choice to appear in the dropdown\n // remove all the repeated category_a. only keep 1 instance of each category_a\n let uniqueCategoryA = [...new Set(catA)]; // list of strings, each element is a category_a. unique due to being a Set datatype\n // sort list of category_a by alphabetical order\n uniqueCategoryA.sort((a, b) => a.localeCompare(b));\n let uniqueCategories = [];\n for (const category_a of uniqueCategoryA) {\n let fullCategoryData = props.selectableCategories.find(cat => cat.category_a === category_a);\n if (fullCategoryData)\n uniqueCategories.push(fullCategoryData);\n }\n return uniqueCategories;\n }\n\n function getSelectableSubCategories() {\n if (!props.selectableCategories) return [];\n if (isEmpty(manualItem_category)) return [];\n\n let selectable = props.selectableCategories.filter(cat => cat.category_a === manualItem_category.category_a);\n\n return selectable;\n }\n\n const manualItem = {\n id: 'manual',\n common_name: 'Create Manual Item',\n brand: 'with captured information',\n category: 'with captured information',\n model_number: 'with captured information',\n model_numbers: [],\n }\n\n function selectedProtoAndDropdown() {\n\n return (\n
    \n\n
    \n 5 ? 'max-h-[40rem] -top-[40rem]' : ''\n )}\n selectedState={null}\n selectableOptions={[manualItem, ...lensItem.proto_products] || []}\n onChange={(product) => {\n if (product.id === 'manual') {\n setViewMode('MANUAL');\n } else {\n setSelectedProduct(product);\n }\n }}\n\n renderOption={(product) =>\n
    \n\n
    \n \n
    \n\n {/* DIVIDER */}\n
    \n\n {/* PROTO DETAILS */}\n
    \n\n {/* COMMON NAME */}\n

    \n {product.common_name}\n

    \n\n {/* PROPERTIES */}\n

    \n {calculateProperties(product)}\n

    \n\n {/* MODEL NUMBER */}\n
    \n {/* model_number OR model_numbers */}\n {!product.model_number ?\n

    {product.model_number}

    \n :\n

    {product.model_numbers.slice(0, 3).join(' | ')}

    \n }\n
    \n\n {/* CATEGORY */}\n

    {formatAsTitle(product.category)}

    \n\n
    \n\n
    \n }\n\n renderSelected={(product) =>\n

    {lensItem.proto_products.length} Possible proto products

    \n }\n />\n\n \n {\n setSelectedProduct(null)\n setViewMode('PROTO')\n }}\n >\n \n
    \n \n
    \n\n\n {/* MANUAL ITEM */}\n {viewMode === 'MANUAL' &&\n
    \n\n
    \n\n \n setManualItem_brand(e.target.value)}\n />\n \n \n setManualItem_description(e.target.value)}\n />\n \n \n setManualItem_modelNumber(e.target.value)}\n />\n \n
    \n\n
    \n \n\n \n
    \n
    \n }\n\n {/* SELECTED PROTO */}\n {selectedProduct && viewMode === \"PROTO\" && (\n
    \n \n\n {/* PROTO DETAILS */}\n
    \n\n {/* COMMON NAME */}\n

    \n {selectedProduct.common_name}\n

    \n\n {/* PROPERTIES */}\n

    \n {calculateProperties(selectedProduct)}\n

    \n\n {/* MODEL NUMBER */}\n
    \n {/* model_number OR model_numbers */}\n {!selectedProduct.model_number ?\n

    {selectedProduct.model_number}

    \n :\n

    {selectedProduct.model_numbers.slice(0, 3).join(' | ')}

    \n }\n {formatAsTitle(selectedProduct.category)}\n
    \n\n
    \n\n
    \n )}\n\n\n \n\n )\n\n }\n\n if (isEmpty(props.possibleProduct)) return <>;\n\n return (\n
  • \n\n
    \n\n {/* ITEM */}\n
    \n\n

    \n {lensItem.description}\n

    \n\n \n

    Brand

    \n

    Description

    \n

    Model

    \n

    Category

    \n
    }\n >\n
    \n

    B: {lensItem.brand}

    \n

    D: {lensItem.description}

    \n

    M: {lensItem.model_number}

    \n

    C: \n {formatAsTitle(lensItem.category.category_d) + '>' + formatAsTitle(lensItem.category.category_a) + '>' + formatAsTitle(lensItem.category.category_b)}\n

    \n
    \n \n\n\n
    \n
    \n\n
    \n\n {/* > */}\n \n\n {/* REPLACEMENT PROTO */}\n
    \n {selectedProtoAndDropdown()}\n
    \n\n\n {/* QUANTITY */}\n \n setQuantity(e.target.value)}\n className=\"select m-0 shadow-none mb-1 py-1 w-fit\"\n >\n \n \n \n \n \n \n \n \n \n \n {lensItem.quantity > 10 && }\n \n \n\n \n\n
  • \n );\n\n}\n","// Library imports\n\nimport React, {useEffect, useState} from 'react'\nimport {Combobox} from '@headlessui/react'\n\nimport {CheckIcon, SelectorIcon} from '@heroicons/react/solid'\n\nimport {classNames} from '../utils/helpers.js';\nimport {BasicImage} from \"./base/BasicImage\";\nimport LoadingSpinner from \"./ui/LoadingSpinner\";\n\nexport default function OrganisationBox(props) {\n\n const [query, setQuery] = useState('');\n\n const [selectableOrgs, setSelectableOrgs] = useState([]);\n\n useEffect(() => {\n\n // when the list of organizations has been updated (due to a selected country change),\n // then, from the new list of organizations(of that country), we must update this components list of selectable organizations\n updateSelectableOrgs();\n\n }, [props.primaryOrganisations, query])\n\n const updateSelectableOrgs = () => {\n if (!props.primaryOrganisations) {\n return;\n }\n\n let filteredOrgs = props.primaryOrganisations;\n\n // if there are no selected organizations, inform the user\n if (!filteredOrgs || !filteredOrgs.length) {\n return;\n }\n\n if (query === '') {\n\n } else {\n filteredOrgs = props.primaryOrganisations.filter((org) => {\n return org.unique_reference_name.toLowerCase().includes(query.toLowerCase());\n });\n }\n\n setSelectableOrgs(filteredOrgs)\n\n // now that we have filtered the organizations that are selectable, we need to set the initial selection\n // due to many stateful updates, we add a small delay before updating this state\n setTimeout(() => props.setSelectedOption(filteredOrgs[0]), 200)\n }\n\n if (!props.organisations) {\n return \n }\n\n return (\n \n
    \n setQuery(event.target.value)}\n displayValue={(org) => org !== null && org.info !== undefined ? org.info.name : \"\"}\n />\n \n \n \n\n {selectableOrgs.length > 0 && (\n \n\n {selectableOrgs.map((organisation) => (\n \n classNames(\n 'relative cursor-default select-none py-2 pl-3 pr-9',\n active ? 'bg-indigo-600 text-white' : 'text-gray-900'\n )\n }\n >\n {({active, selected}) => (\n <>\n
    \n \n {organisation.info.name}\n
    \n\n {selected && (\n \n \n \n )}\n \n )}\n \n ))}\n\n \n )}\n
    \n
    \n );\n\n}\n","import {useEffect, useState} from 'react'\nimport {Combobox} from '@headlessui/react'\nimport {CheckIcon, SelectorIcon} from '@heroicons/react/solid'\nimport {classNames} from '../utils/helpers.js';\n\n\nexport default function UserBox(props) {\n\n const [query, setQuery] = useState('');\n\n const [selectableUsers, setSelectedUsers] = useState([]);\n\n useEffect(() => {\n\n updateSelectableUsers();\n\n }, [props.users, query])\n\n const updateSelectableUsers = () => {\n if (!props.users) {\n return;\n }\n\n let filteredUsers = [];\n\n if (props.users) {\n\n if (query === '') {\n filteredUsers = filteredUsers.concat(props.users);\n } else {\n filteredUsers = props.users.filter((user) => {\n return user.info.full_name.toLowerCase().includes(query.toLowerCase());\n });\n\n }\n }\n\n setSelectedUsers(filteredUsers);\n\n // now that we have filtered the users that are selectable, we need to set the initial selection\n // due to many stateful updates, we add a small delay before updating this state\n setTimeout(() => props.setSelectedOption(filteredUsers[0]), 400)\n }\n\n\n return (\n \n
    \n setQuery(event.target.value)}\n displayValue={(user) => user !== null && user.info !== undefined ? user.info.full_name : \"\"}\n />\n \n \n \n\n {selectableUsers.length > 0 && (\n \n {selectableUsers.map((user) => (\n \n classNames(\n 'relative cursor-default select-none py-2 pl-3 pr-9 h-9',\n active ? 'bg-indigo-600 text-white' : 'text-gray-900'\n )\n }\n >\n {({active, selected}) => (\n <>\n
    \n {\n currentTarget.onError = null;\n currentTarget.src = \"/profile-picture.jpg\";\n }}\n />\n {user.info.full_name}\n
    \n\n {selected && (\n \n \n \n )}\n \n )}\n \n ))}\n \n )}\n
    \n
    \n );\n\n}","import {Combobox,} from '@headlessui/react'\nimport {CheckIcon, SelectorIcon} from '@heroicons/react/solid'\nimport {classNames} from '../utils/helpers.js';\nimport LoadingSpinner from \"./ui/LoadingSpinner\";\nimport React from \"react\";\n\nexport default function SelectClaimCompany(props) {\n\n if (!props.organisations) return <>...\n\n return (\n \n
    \n props.setSelectedOption(event.target.value)}\n\n displayValue={(org) => org !== null && org.info !== undefined ? org.info.name : \"\"}\n />\n \n \n \n\n \n {props.organisations.map((organisation) => (\n \n classNames(\n 'relative cursor-default select-none py-2 pl-3 pr-9 h-9',\n active ? 'bg-indigo-600 text-white' : 'text-gray-900'\n )\n }\n >\n {({active, selected}) => (\n <>\n
    \n {\n currentTarget.onError = null;\n currentTarget.src = \"/org-logo-placeholder.jpg\";\n }}\n />\n {organisation.info.name}\n
    \n\n {selected && (\n \n \n \n )}\n \n )}\n \n ))}\n \n\n
    \n
    \n );\n\n}\n","// Library imports\nimport { Combobox } from '@headlessui/react'\nimport { CheckIcon, SelectorIcon } from '@heroicons/react/solid'\nimport { classNames } from '../utils/helpers.js';\n\nexport default function LocalityBox(props) {\n\n if (props.localities === null) {\n return '...';\n }\n\n let localities = [];\n\n if (props.locality) {\n localities = localities.concat(props.locality.localities || []);\n }\n \n if (localities.length === 0) {\n return (\n Please type in a Postal Code\n )\n }\n\n return (\n \n {/**/}\n
    \n setQuery(event.target.value)}\n // displayValue={(org) => org !== null ? org : \"\"}\n />\n \n \n \n\n {localities.length > 0 && (\n \n {localities.map((locality) => (\n \n classNames(\n 'relative cursor-default select-none py-2 pl-3 pr-9 h-9',\n active ? 'bg-indigo-600 text-white' : 'text-gray-900'\n )\n }\n >\n {({ active, selected }) => (\n
    \n
    \n {locality}\n
    \n {selected && (\n \n \n \n )}\n
    \n )}\n \n ))}\n
    \n )}\n
    \n
    \n );\n\n}\n","// Library imports\nimport React, {Fragment, useEffect, useState} from 'react';\nimport {Dialog, Transition} from '@headlessui/react';\nimport {XIcon} from '@heroicons/react/outline';\n\n// Local imports\nimport OrganisationBox from '../../components/OrganisationBox.jsx';\nimport UserBox from '../../components/UserBox.jsx';\n\nimport {classNames, consoleColors, isEmpty} from '../../utils/helpers.js';\nimport {\n searchLocalities,\n searchRegions,\n} from '../../utils/coreApi';\nimport SelectClaimCompany from '../../components/SelectClaimCompany';\nimport LocalityBox from '../../components/LocalityBox';\nimport CountrySelection from '../../components/CountrySelection';\nimport Safe from '../../components/Safe';\nimport {useQuery} from '../../components/useQuery';\nimport ApiButton from '../../components/base/ApiButton';\nimport LoadingSpinner from '../../components/ui/LoadingSpinner';\nimport Tooltip from '../../components/Tooltip';\n\n\nexport default function CreateClaimModal(props) {\n\n\n const [insurerClaimNumber, setInsurerClaimNumber] = useState('');\n const [insurerPolicyNumber, setInsurerPolicyNumber] = useState('');\n\n const [nationalSuppliersOnly, setNationalSuppliersOnly] = useState(true);\n const [postalCode, setPostalCode] = useState(''); // the user supplied postal code\n const [regionData, setRegionData] = useState(''); // the region data for the postal code\n const [localityData, setLocalityData] = useState(''); // locality data for the postal code\n const [selectedLocality, setSelectedLocality] = useState(''); // the users selected locality\n\n\n // ======= USER ORGANISATION'S CONNECTED ORGS & ACCOUNTS =======\n\n /** All ADMIN and INSURER organisations that are connected to the user's organisation (mainOrganisation) */\n const organisationsHook = useQuery({\n onLoadQueryDelaySeconds: 2,\n queryStringFunction: () => {\n /** The organisation and account data (for logged in user's organisation) needs to be retrieved */\n /** Get all the ['ADMIN', 'INSURER'] organisations that are connected to this organisation */\n\n let queryArgs = '';\n\n const orgTypes = ['INSURER', 'ADMINISTRATOR'];\n queryArgs += ` types:[${orgTypes.join(', ')}]`;\n\n const status = 'ACTIVE';\n queryArgs += ` status: ${status}`;\n\n const minimalOrganisationsQuery = `\n query CreateClaimModal_UserOrgConnectedOrganisations{\n organisations(|placeholder|) {\n error {\n type\n message\n }\n organisations {\n id\n date_created\n date_updated\n status\n unique_reference_name\n type\n info {\n name\n country\n logo_image_url\n }\n users {\n id\n username\n info {\n first_name\n last_name\n full_name\n profile_image_url\n }\n }\n }\n }\n }\n `;\n return minimalOrganisationsQuery.replace('|placeholder|', queryArgs);\n },\n onSuccess: (data) => {\n\n // Sort the organisations alphabetically\n const sortedOrganisations = data['organisations'].sort((a, b) => {\n return a.info.name.localeCompare(b.info.name);\n });\n\n // For each organisation.users, sort the users alphabetically\n sortedOrganisations.forEach(org => {\n org.users = org.users.sort((a, b) => {\n return a.info.full_name.localeCompare(b.info.full_name);\n });\n });\n\n setOrganisations(sortedOrganisations);\n },\n onError: props.onError,\n cacheExpirationMin: 60 * 4, // 4 hours\n cacheResponse: true, useExistingCache: true, skipQueryIfCache: true,\n });\n const {state: organisations, setState: setOrganisations} = organisationsHook;\n\n /** All 'SELF', 'ADMINISTRATOR_INSURER', 'INSURER_INSURER' accounts that are connected to the user's organisation (mainOrganisation) */\n const accountsHook = useQuery({\n onLoadQueryDelaySeconds: 2,\n dependsOn: [props.mainOrganisation],\n /** When the organisation data has been retrieved, retrieve the account data to determine primary and sub organisations */\n queryStringFunction: () => {\n /** Get all the accounts that are connected to the currently logged in organisation */\n\n if (!props.mainOrganisation) return null;\n\n let queryArgs = '';\n\n queryArgs += ' status: ACTIVE';\n\n queryArgs += ` organisation: \"${props.mainOrganisation.id}\"`;\n\n queryArgs += ` types: [${['SELF', 'ADMINISTRATOR_INSURER', 'INSURER_INSURER'].join(', ')}]`;\n\n\n const minimalAccountsQuery = `\n query CreateClaimModal_UserOrgConnectedAccounts{ \n accounts(|placeholder|) {\n error{\n type\n message\n }\n \n accounts\n {\n id\n status\n type\n organisation_1{\n id\n type\n unique_reference_name\n }\n organisation_2{\n info{\n name\n logo_image_url\n }\n id\n type\n unique_reference_name\n }\n \n sub_accounts{\n id\n type\n status\n organisation_1{\n id\n type\n unique_reference_name\n }\n organisation_2{\n info{\n name\n logo_image_url\n }\n id\n type\n unique_reference_name\n }\n \n }\n \n }\n \n }\n }\n `;\n\n return minimalAccountsQuery.replace('|placeholder|', queryArgs);\n\n },\n onSuccess: (data) => {\n setAccounts(data['accounts']);\n },\n onError: props.onError,\n cacheExpirationMin: 60 * 4, // 4 hours\n cacheResponse: true,\n useExistingCache: true,\n skipQueryIfCache: true,\n });\n const {state: accounts, setState: setAccounts} = accountsHook;\n\n useEffect(() => {\n /**\n * If the selected country is modified, the selectable primary orgs needs to be re-calculated\n * When the list of \"organisations\" and \"accounts\" has been retrieved, the primary organisations need to be calculated\n */\n\n updatePrimaryOrganisations();\n }, [props.selectedCountry, organisations, accounts]);\n\n\n const updatePrimaryOrganisations = () => {\n /** This function must result in a list of organisations that are primary organisations to the selected country\n * And, that are linked (have a account) to the user's organisation (mainOrganisation) */\n\n if (!organisations) return;\n if (!accounts) return;\n\n const primarySubResultsLogs = [];\n\n // we only want to display organisations from the selected country\n const organisationsForSelectedCountry = organisations.filter(org => org.info.country === props.selectedCountry.code);\n\n // only INSURER organisations must display in the CreateClaimModal\n const insurerTypeOrganisations = organisationsForSelectedCountry.filter(org => org.type === 'INSURER');\n\n // we only care about INSURER_INSURER accounts in order to determine what organisations are primary and what are sub\n let insurerInsurerAccounts = accounts.filter(account => account.type === 'INSURER_INSURER' && account.status === 'ACTIVE');\n\n // add all the accounts in the 'sub_accounts' fields\n accounts.forEach(account => {\n // Accounts & Primary/Sub organisations : https://silvercloud.atlassian.net/wiki/spaces/POR/pages/1104084993/Accounts+Primary+Sub+organisations\n const accountsForOrg2 = account.sub_accounts; // the sub_accounts field is the 'accounts' query for the organisation_2\n\n // Same filtering logic as above\n const _insurerInsurerAccounts = accountsForOrg2.filter(a => a.type === 'INSURER_INSURER' && account.status === 'ACTIVE');\n\n insurerInsurerAccounts = insurerInsurerAccounts.concat(_insurerInsurerAccounts);\n });\n\n const _primaryOrganisations = [];\n for (const org of insurerTypeOrganisations) {\n\n // if this organisation exists in an account, where it is organisation_2, then this organisation is a sub org, not a primary org\n const thisIsASubOrganisation = insurerInsurerAccounts.find(account => account.organisation_2.id === org.id && account.status === 'ACTIVE');\n\n // If this organisation is type INSURER, and is only organisation_1 in all accounts, then it is a Primary organisation\n if (!thisIsASubOrganisation) _primaryOrganisations.push(org);\n\n const isPrimary = isEmpty(thisIsASubOrganisation);\n primarySubResultsLogs.push(logPrimarySubOrganisation(org, isPrimary, thisIsASubOrganisation));\n\n }\n\n // Log the results\n console.log(`\\n\\n${consoleColors.bold('PRIMARY/SUB ORGANISATION RESULTS')}`);\n primarySubResultsLogs.forEach(log => console.log(log));\n\n if (isEmpty(_primaryOrganisations)) {\n // if there are no primary organisations - then set the mainOrganisation as the single primary organisation\n // this is the case for e.g insurer agents\n // but only set the mainOrganisation, if it is type INSURER. this is the case for admin organisations\n if (props.mainOrganisation.type === 'INSURER') {\n setPrimaryOrganisations([props.mainOrganisation]);\n setSelectedPrimaryOrganisation(props.mainOrganisation);\n }\n else {\n setPrimaryOrganisations(null);\n setSelectedPrimaryOrganisation(null);\n }\n }\n else {\n // else set the list of selectable organisations\n setPrimaryOrganisations(_primaryOrganisations);\n }\n };\n\n function logPrimarySubOrganisation(org, isPrimary, org2Acc) {\n\n const cc = consoleColors;\n\n let logMessage = '';\n\n /*\n test_admin_global: primary organisation\n as there are no active INSURER_INSURER accounts where it is organisation_2\n */\n if (isPrimary) {\n logMessage = [\n `${cc.bold(org.unique_reference_name)}: ${cc.green('primary organisation')} `,\n `\\t ${cc.italic('as there are no active INSURER_INSURER accounts where it is organisation_2')}`,\n '\\n',\n ];\n }\n\n /*\n standard_sub_insurer2: sub organisation\n there is an INSURER_INSURER active account where it is organisation_2\n organisation_1: standard_insurance\n organisation_2: standard_sub_insurer2\n */\n else {\n logMessage = [\n `${cc.bold(org.unique_reference_name)}: ${cc.red('sub organisation')} `,\n `\\t ${cc.italic('there is an INSURER_INSURER active account where it is organisation_2')}`,\n `\\t ${cc.bold('organisation_1:')} ${org2Acc.organisation_1?.unique_reference_name}`,\n `\\t ${cc.bold('organisation_2:')} ${org2Acc.organisation_2?.unique_reference_name}`,\n '\\n',\n ];\n }\n\n return logMessage.join('\\n');\n\n }\n\n\n // ======= SELECTED PRIMARY ORGANISATION'S ACCOUNTS =======\n\n // Selectable states\n const [primaryOrganisations, setPrimaryOrganisations] = useState(null);\n const [subOrganisations, setSubOrganisations] = useState(null);\n\n // Selected states\n const [selectedPrimaryOrganisation, setSelectedPrimaryOrganisation] = useState(null);\n const [selectedSubOrganisation, setSelectedSubOrganisation] = useState(null);\n const [selectedUser, setSelectedUser] = useState(null);\n\n const [emailSets, setEmailSets] = useState([{firstName: '', lastName: '', email: ''}]);\n\n\n /** Get all the accounts that are connected to the selected primary organisation */\n const accountsForOrgHook = useQuery({\n dependsOn: [selectedPrimaryOrganisation],\n queryStringFunction: () => {\n /** Get all the accounts that are connected to the organisation :organisationId: */\n\n if (!selectedPrimaryOrganisation) return null;\n\n let queryArgs = '';\n\n queryArgs += ' status: ACTIVE';\n\n queryArgs += ` organisation: \"${selectedPrimaryOrganisation.id}\"`;\n\n // if(accountType) queryArgs += ` type: ${accountType}`;\n const accountTypes = ['SELF', 'ADMINISTRATOR_INSURER', 'INSURER_INSURER'];\n if (accountTypes) queryArgs += ` types: [${accountTypes.join(', ')}]`;\n\n const minimalAccountsQuery = `\n query CreateClaimModal_SelectedOrgConnectedAccounts{ \n accounts(|placeholder|) {\n error{\n type\n message\n }\n \n accounts\n {\n id\n status\n type\n organisation_1{\n id\n type\n unique_reference_name\n }\n organisation_2{\n info{\n name\n logo_image_url\n }\n id\n type\n unique_reference_name\n }\n \n sub_accounts{\n id\n type\n status\n organisation_1{\n id\n type\n unique_reference_name\n }\n organisation_2{\n info{\n name\n logo_image_url\n }\n id\n type\n unique_reference_name\n }\n \n }\n \n }\n \n }\n }\n `;\n return minimalAccountsQuery.replace('|placeholder|', queryArgs);\n },\n onSuccess: (data) => {\n /** All the accounts for the selected primary organisation, in order to determine the sub accounts */\n accountsForOrgHook.setState(data['accounts']);\n },\n onError: props.onError,\n cacheExpirationMin: 60 * 4, // 4 hours\n cacheResponse: true, useExistingCache: true, skipQueryIfCache: true,\n });\n const {state: orgAccounts} = accountsForOrgHook;\n\n useEffect(() => {\n /** Sub organisations\n * when the selected primary organisation has changed, the sub organisation logic needs to be run */\n\n // Clear the selected sub organisation, to prevent an organisation from a previous primary org being selected,\n // however not displayed to the user, potentially creating a claim under the incorrect organisation\n setSelectedSubOrganisation(null);\n\n }, [selectedPrimaryOrganisation]);\n\n useEffect(() => {\n /** When the accounts for the selected primary organisation have been retrieved, determine the selectable sub accounts */\n if (orgAccounts)\n calculateSubOrganisations();\n }, [orgAccounts]);\n\n // TODO - replace these uses with the consoleColors in the utils/helpers.js\n const red = (_text) => `\\x1b[31m${_text}\\x1b[0m`;\n const blue = (_text) => `\\x1b[36m${_text}\\x1b[0m`;\n const green = (_text) => `\\x1b[32m${_text}\\x1b[0m`;\n const bold = (_text) => `\\x1b[1m${_text}\\x1b[0m`;\n\n function calculateSubOrganisations() {\n /** This function must result in a list of organisations that are the sub organisations to the selected Primary organisation */\n\n console.log(`\\n\\n${bold('CALCULATING SUB ORGANISATIONS')}`);\n console.log(`${bold('FOR PRIMARY ORGANISATION:')} ${selectedPrimaryOrganisation.unique_reference_name}`);\n const accountsForSelectedPrimaryOrganisation = orgAccounts;\n\n // only show organisations where the 'primaryOrganisation' is organisation_1\n const accountsForPrimaryOrganisation = accountsForSelectedPrimaryOrganisation.filter(account => account.organisation_1.id === selectedPrimaryOrganisation.id && account.status === 'ACTIVE');\n let subOrganisations = accountsForPrimaryOrganisation.filter(account => account.organisation_2 && account.status === 'ACTIVE');\n\n // TODO the accounts query now supports users, the account directly for org1 and org2, rather then reverse looking up in the organisations state\n subOrganisations = subOrganisations.map(subOrg => {\n // because accounts query does not include users, find this org in the organisations state and check there\n const thisOrg = organisations.find(org => org.id === subOrg.organisation_2.id);\n\n if (!thisOrg) {\n // this organisation does not exist in the organisations state, do not include it\n console.log(`${red('EXCLUDING:')} ${subOrg} \\n ${blue('REASON:')} org not present in 'all organisations' ${organisations}`);\n\n return false;\n }\n\n if (!thisOrg.users.length && !selectedPrimaryOrganisation.users.length) {\n // this organisation has no users, do not include it\n console.log(`${red('EXCLUDING:')} ${thisOrg.unique_reference_name} \\n ${blue('REASON:')} empty users list in both primary and sub orgs`);\n return false;\n }\n\n console.log(`${green('INCLUDING SUB ORG:')} ${bold(thisOrg.unique_reference_name)}`);\n return subOrg.organisation_2; // this organisation has users, include it\n }).filter(e => !!e); // \"!!e\" is a boolean cast operation. It is used in the filter to detect and remove nulls\n\n // if there are no sub organisations, then set the state to null\n if (isEmpty(subOrganisations)) subOrganisations = null;\n\n // automatically select the first sub organisation\n // and add the primary organisation as an option - because it is an insurer organisation as well\n if (subOrganisations) {\n setSelectedSubOrganisation(subOrganisations[0]); // automatically select the first sub organisation\n // subOrganisations.push(selectedPrimaryOrganisation); // add the primary as an option\n }\n\n setSubOrganisations(subOrganisations);\n }\n\n\n useEffect(() => {\n /** When the user has entered a Postal code, the Postal and Region data needs to be queried */\n // TODO cache regions and localities\n if (postalCode)\n getPostalCodes();\n }, [postalCode]);\n\n const onCreateClaimClicked = (buttonHandler, voucherClaim = false) => {\n /** Create claim mutation */\n\n const org = selectedSubOrganisation ? selectedSubOrganisation : selectedPrimaryOrganisation;\n props.onCreateClaim(\n org.id,\n selectedUser.id,\n insurerClaimNumber,\n insurerPolicyNumber,\n postalCode,\n selectedLocality,\n emailSets,\n voucherClaim,\n buttonHandler,\n );\n\n };\n\n const getPostalCodes = () => {\n /** Get the postal code data and region data for the entered postal code */\n\n // remove any locality selection if a new postal code has been entered\n setSelectedLocality('');\n\n searchRegions(\n postalCode,\n selectedPrimaryOrganisation.info.country,\n (data) => {\n if (!data.regions.length > 0) {\n setRegionData({\n 'regions': [\n {'region_0': 'Invalid postal code'},\n {'region_1': ''},\n {'region_2': ''},\n ],\n });\n }\n else {\n setRegionData(data);\n }\n },\n (error) => {\n console.error('Could not fetch data', error);\n },\n );\n\n searchLocalities(\n postalCode,\n selectedPrimaryOrganisation.info.country,\n (data) => {\n setLocalityData(data);\n\n // auto select the first locality\n if (data['localities'][0]) setSelectedLocality(data['localities'][0]);\n },\n props.onError,\n );\n };\n\n function selectFromEmailFilter(userEmail) {\n let selectedOrg = null; // Variable to hold the matching organization\n\n userEmail = userEmail.trim();\n\n // Iterate through each organization\n organisations.forEach(org => {\n if (selectedOrg) return; // If we've already found the organization, exit early\n\n // Iterate through each user in the current organization\n org.users.forEach(user => {\n if (user.username === userEmail) {\n selectedOrg = org; // Set the matching organization\n }\n });\n });\n\n if (!selectedOrg) return console.log('No user found for email:', userEmail);\n else {\n console.log('Found user for organisation:', selectedOrg);\n\n setSelectedPrimaryOrganisation(selectedOrg); // Set the selected organization\n\n // get the user with the email address\n const selectedUser = selectedOrg.users.find(user => user.username === userEmail);\n setTimeout(() => setSelectedUser(selectedUser), 1400); // Set the selected user\n\n }\n\n }\n\n const handleEmailSetInputChange = (index, field, value) => {\n const newEmailSets = [...emailSets];\n newEmailSets[index][field] = value;\n\n // Check if the current set is now empty (all fields are empty)\n const isCurrentSetEmpty = !newEmailSets[index].firstName && !newEmailSets[index].lastName && !newEmailSets[index].email;\n\n // If the current set is empty and it's not the only set, remove it\n if (isCurrentSetEmpty && newEmailSets.length > 1) {\n newEmailSets.splice(index, 1);\n }\n else if (field === 'email' && index === emailSets.length - 1 && value.trim() !== '') {\n // If updating the email of the last item, and it's not empty, add a new empty set\n newEmailSets.push({firstName: '', lastName: '', email: ''});\n }\n\n setEmailSets(newEmailSets);\n };\n\n const countryText = () => {\n\n if (!props.selectedCountry || !props.selectedCountry.code) return 'Please select a country';\n if (!postalCode) return props.selectedCountry.name;\n\n let regionText = '';\n\n if (regionData?.regions?.[0]) {\n const region = regionData.regions[0];\n\n if (region.region_0) regionText += region.region_0;\n if (region.region_1) regionText += (regionText ? ' - ' : '') + region.region_1;\n if (region.region_2) regionText += (regionText ? ' - ' : '') + region.region_2;\n }\n\n return regionText;\n\n };\n\n return (\n \n {\n }}>\n
    \n props.setOpen(false)}\n />\n\n
    \n \n
    \n
    \n
    \n
    \n
    \n \n Create a new claim\n \n
    \n props.setOpen(false)}\n >\n Close panel\n \n \n
    \n
    \n
    \n

    \n Please insert the information below to complete the claim as quickly\n and accurately as possible.\n

    \n
    \n
    \n\n {/* COUNTRY SELECTION */}\n
    \n \n
    \n\n \n Please select a country\n
    \n\n \n
    \n\n\n
    \n\n {/* PRIMARY ORGANISATION */}\n
    \n \n
    \n \n \n \n
    \n
    \n\n {/* USER */}\n
    \n \n
    \n \n \n \n
    \n
    \n\n {/* SUB ORGANISATION */}\n
    \n \n
    \n \n \n \n
    \n
    \n\n {/* EMAIL FILTER */}\n
    \n \n Filter by email\n \n
    \n \n selectFromEmailFilter(e.target.value)}\n />\n \n
    \n
    \n\n
    \n\n
    \n\n {/* NATIONAL SUPPLIERS */}\n
    \n {\n setNationalSuppliersOnly(e.target.checked);\n\n // if \"national suppliers only\" is checked on, clear postal region data\n if (e.target.checked) {\n setPostalCode('');\n setSelectedLocality('');\n setRegionData('');\n }\n }\n }\n className=\"checkbox\"\n />\n\n \n\n
    \n\n {/* POSTAL CODE */}\n
    \n \n
    \n {\n // Trim the edges of the postal code\n const value = event.target.value.trim();\n setPostalCode(value);\n }}\n value={postalCode}\n name=\"postalCode\"\n id=\"postalCode\"\n onClick={() => {\n setNationalSuppliersOnly(false);\n }\n }\n className=\"input\"\n />\n
    \n
    \n\n {/* COUNTRY */}\n
    \n \n
    \n \n {countryText()}\n
    \n
    \n
    \n\n {/* LOCALITY */}\n
    \n \n
    \n \n \n \n
    \n
    \n\n
    \n\n
    \n\n {/* CLAIM NUMBER */}\n
    \n \n
    \n setInsurerClaimNumber(event.target.value)}\n onBlur={(event) => setInsurerClaimNumber(event.target.value.trim())}\n value={insurerClaimNumber}\n name=\"insurerClaimNumber\"\n id=\"insurerClaimNumber\"\n className=\"input\"\n />\n
    \n
    \n\n {/* POLICY NUMBER */}\n
    \n \n
    \n setInsurerPolicyNumber(event.target.value)}\n onBlur={(event) => setInsurerPolicyNumber(event.target.value.trim())}\n value={insurerPolicyNumber}\n name=\"insurerPolicyNumber\"\n id=\"insurerPolicyNumber\"\n className=\"input\"\n />\n
    \n
    \n\n
    \n A claim and/or policy number is required.\n
    \n\n
    \n\n
    \n\n {/* CC EMAIL */}\n
    \n \n
    \n \n {\n emailSets.map((set, index) => (\n
    \n
    \n handleEmailSetInputChange(index, 'firstName', e.target.value)}\n className=\"input flex-1\"\n />\n handleEmailSetInputChange(index, 'lastName', e.target.value)}\n className=\"input flex-1\"\n />\n
    \n handleEmailSetInputChange(index, 'email', e.target.value)}\n className=\"input w-full\"\n />\n
    \n ))\n }\n\n
    \n
    \n
    \n\n
    \n\n {/* DIVIDER LINE */}\n
    \n\n {/* SPACER TO PREVENT PASSWORD MANAGER BUG */}\n
    \n\n
    \n
    \n
    \n \n\n props.setOpen(false)}\n >\n Cancel\n \n\n \n onCreateClaimClicked(buttonHandler, true)}\n className='btn-light'\n content='Voucher'\n loadingContent={}\n successContent='Claim created'\n errorContent='Failed to create claim'\n defaultStatus={'idle'}\n />\n \n\n }\n successContent='Claim created'\n errorContent='Failed to create claim'\n defaultStatus={'idle'}\n />\n\n
    \n \n\n \n \n \n \n
    \n
    \n );\n\n}\n\n","// Library imports\nimport { Fragment } from 'react'\nimport { Dialog, Transition } from '@headlessui/react'\nimport { UserIcon, ClipboardCheckIcon, PlusCircleIcon, RefreshIcon, PencilAltIcon, XIcon } from '@heroicons/react/solid'\n\n// Local imports\nimport { classNames } from '../../utils/helpers.js';\n\n\n// Constants\nconst timeline = [\n {\n id: 1,\n statusBefore: 'PENDING',\n statusBeforeStyle: 'bg-purple-600 text-white',\n statusAfter: 'CLOSED',\n statusAfterStyle: 'bg-green-500 text-white',\n closedBy: 'Katherine Snyder',\n href: '#',\n date: '5m',\n datetime: '2020-09-30',\n icon: ClipboardCheckIcon,\n iconBackground: 'bg-cyan-500',\n },\n {\n id: 2,\n beforeQuantity: 1,\n afterQuantity: 3,\n item: 'Philips 20HF4003 20.0\"',\n href: '#',\n date: '30m',\n datetime: '2020-09-30',\n icon: RefreshIcon,\n iconBackground: 'bg-cyan-500',\n },\n {\n id: 3,\n statusBefore: 'NEW',\n statusBeforeStyle: 'bg-indigo-600 text-white',\n statusAfter: 'PENDING',\n statusAfterStyle: 'bg-purple-600 text-white',\n href: '#',\n date: '2h',\n datetime: '2020-09-30',\n icon: ClipboardCheckIcon,\n iconBackground: 'bg-cyan-500',\n },\n {\n id: 4,\n content: 'Added item ',\n target: 'Philips 20HF4003 20.0\"',\n href: '#',\n date: '2h',\n datetime: '2020-09-28',\n icon: PlusCircleIcon,\n iconBackground: 'bg-cyan-500',\n },\n {\n id: 5,\n content: 'Assigned to',\n target: 'Katherine Snyder',\n href: '#',\n date: '2 days ago',\n datetime: '2020-10-04',\n icon: UserIcon,\n iconBackground: 'bg-cyan-500',\n },\n]\n\n// ClaimInfoModal container\nconst ClaimInfoModal = (props) => {\n\n return (\n \n \n
    \n \n \n \n\n {/* This element is to trick the browser into centering the modal contents. */}\n \n ​\n \n \n
    \n
    \n props.setOpen(false)}\n >\n Close\n \n \n
    \n
    \n
    \n \"\"\n
    \n
    \n \n TEST-CLAIM-01\n
    Delta\n
    \n
    \n
    \n\n
    \n
    \n\n
    \n
    \n
      \n {timeline.map((event, eventIdx) => (\n
    • \n
      \n {eventIdx !== timeline.length - 1 ? (\n \n ) : null}\n
      \n
      \n \n \n \n
      \n
      \n
      \n

      \n {'statusBefore' in event &&\n

      \n Transitioned from\n \n {event.statusBefore}\n \n to\n \n {event.statusAfter}\n \n
      \n }\n {'content' in event &&\n \n {event.content}{' '}\n \n {event.target}\n \n \n }\n {'closedBy' in event &&\n
      \n Closed by \n \n {event.closedBy}\n \n
      \n }\n {'beforeQuantity' in event &&\n \n Updated item \n {event.item}\n quantity from \n {event.beforeQuantity}\n to \n {event.afterQuantity}\n \n }\n

      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
    • \n ))}\n
    \n
    \n
    \n\n
    \n props.setOpen(false)}\n >\n \n Edit\n \n props.setOpen(false)}\n >\n Cancel\n \n
    \n
    \n \n
    \n
    \n
    \n )\n}\n\nexport default ClaimInfoModal;\n","import { Fragment } from 'react'\nimport { Dialog, Transition } from '@headlessui/react'\nimport { XIcon, InformationCircleIcon } from '@heroicons/react/outline'\n\nexport default function PageInfoModal(props) {\n\n\n return (\n
    \n \n \n \n
    \n \n\n
    \n
    \n \n \n {/* MODAL */}\n
    \n
    \n \n {/* HEADING AND BODY */}\n
    \n
    \n \n \n {props.heading}\n \n
    \n \n \n

    \n {props.body}\n

    \n \n
    \n \n {/* X CLOSE */}\n
    \n props.setOpen(false)}\n >\n Close\n \n \n
    \n \n \n
    \n \n {/* FOOTER */}\n
    \n props.setPageInfoModalOpen(false)}\n >\n OK\n \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n )\n}\n","import React, {useEffect, useRef, useState} from 'react';\nimport {useNavigate, useSearchParams} from 'react-router-dom';\nimport {\n CreditCardIcon,\n ExternalLinkIcon,\n TrashIcon,\n SearchIcon,\n ClipboardCopyIcon\n} from '@heroicons/react/outline';\nimport {\n ChevronDownIcon,\n ChevronUpIcon,\n MinusSmIcon,\n PlusCircleIcon\n} from '@heroicons/react/solid';\n\n\n// Local imports\nimport {\n createClaim,\n customGraphRequest,\n debounceQuery,\n deleteClaim\n} from '../../utils/coreApi.js';\nimport {\n alertError,\n classNames,\n compareDicts,\n isEmpty,\n searchParamsToDict,\n} from '../../utils/helpers.js';\n\nimport CreateClaimModal from '../modals/CreateClaimModal';\nimport AlertModal from '../modals/AlertModal';\nimport ConfirmModal from '../modals/ConfirmModal';\nimport ClaimInfoModal from '../modals/ClaimInfoModal';\nimport NotificationCenter from '../../components/NotificationCenter';\nimport NotificationTopRight from '../../components/NotificationTopRight';\nimport LoadingSpinner from '../../components/ui/LoadingSpinner';\nimport PageInfoModal from '../modals/PageInfoModal';\nimport {safe} from \"../../components/Safe\";\nimport {useDocumentTitle} from \"../../components/PageTitle\";\nimport {BasicImage} from \"../../components/base/BasicImage\";\nimport moment from \"moment-timezone\";\nimport {\n HUMAN_READABLE_DATETIME_TIMEZONE,\n localMomentInstanceFromUTC,\n} from \"../../utils/time\";\nimport {QueryStatus} from \"../../components/useQuery\";\nimport Tooltip from \"../../components/Tooltip\";\n\n\n// Constants\nconst defaultFilterValues = [\n {\n 'id': 'all',\n 'count': 0,\n 'title': 'All',\n 'status': 'ALL',\n 'bgColorClass': 'border border-1 border-purple-800 border-opacity-20',\n 'isSelected': true\n },\n {\n 'id': 'new',\n 'count': 0,\n 'title': 'New',\n 'status': 'NEW',\n 'bgColorClass': 'border border-1 border-indigo-600 border-opacity-20',\n 'isSelected': false\n },\n {\n 'id': 'pending',\n 'count': 0,\n 'title': 'Pending',\n 'status': 'QUANTIFICATION_IN_PROGRESS',\n 'bgColorClass': 'border border-1 border-orange-500 border-opacity-20',\n 'isSelected': false\n },\n {\n 'id': 'quantified',\n 'count': 0,\n 'title': 'Quantified',\n 'status': 'QUANTIFIED',\n 'bgColorClass': 'border border-1 border-green-600 border-opacity-20',\n 'isSelected': false\n },\n {\n 'id': 'deleted',\n 'count': 0,\n 'title': 'Deleted',\n 'status': 'DELETED',\n 'bgColorClass': 'border border-1 border-red-600 border-opacity-20',\n 'isSelected': false\n }\n];\n\nconst statusStyles = {\n 'ALL': 'bg-blue-800 text-white',\n 'DELETED': 'bg-red-600 text-white',\n 'NEW': 'bg-indigo-600 text-white',\n 'QUANTIFICATION_IN_PROGRESS': 'bg-orange-500 text-white',\n 'QUANTIFIED': 'bg-green-600 text-white'\n};\n\nconst claimSuccessMessage = {\n 'heading': 'Claim created',\n 'message': 'Redirecting to claim page...'\n};\n\nexport default function ClaimsHome(props){\n\n useDocumentTitle(\"SLVRCLD\");\n\n // PROPS IMPORT\n let user = props.user; // TODO replace all uses of 'user' with 'props.user'\n let selectedCountry = props.selectedCountry;\n\n // React router\n const navigate = useNavigate();\n const [searchParams, setSearchParams] = useSearchParams();\n\n // UI states\n\n const [tableOrdering_DateCreated, setTableOrdering_DateCreated] = useState('DESC'); // '', ASC, DESC\n const [tableOrdering_DateExpirySLA, setTableOrdering_DateExpirySLA] = useState(''); // '', ASC, DESC\n\n const [createClaimOpen, setCreateClaimOpen] = useState(false);\n const [claimInfoOpen, setClaimInfoOpen] = useState(false);\n const [successMessageOpen, setSuccessMessageOpen] = useState(false);\n\n // Data states\n const [claims, setClaims] = useState(null);\n const [queryStatus, setQueryStatus] = useState(QueryStatus.NOT_QUERIED);\n\n const [pageNumber, setPageNumber] = useState(1);\n const [resultsPerPage] = useState(25);\n\n\n const [notificationRightOpen, setNotificationRightOpen] = useState(false);\n const [notificationRightMessage, setNotificationRightMessage] = useState({\n 'heading': '',\n 'message': ''\n });\n\n\n const [alertOpen, setAlertOpen] = useState(false);\n const [alertOptions, setAlertOptions] = useState({\n 'heading': '',\n 'message': ''\n });\n\n const [confirmModalOpen, setConfirmModalOpen] = useState(false);\n const [confirmModalOptions, setConfirmModalOptions] = useState({\n 'heading': '',\n 'message': '',\n 'type': '',\n 'buttonText': ''\n });\n\n useEffect(() => {\n getClaims();\n }, []);\n\n useEffect(() => {\n\n // prevent the table column state from duplicating the claim load on page load\n if(!claims && tableOrdering_DateCreated === 'DESC') return;\n\n getClaims();\n }, [tableOrdering_DateExpirySLA, tableOrdering_DateCreated]);\n\n const prevCountryCode = useRef({code: '', name: ''});\n\n useEffect(() => {\n\n /** To prevent the claims fetched twice on page load (page load fetch and country selected loaded fetch)\n * Only query if the selected country is changed (SA -> NL), and not initialised (null -> NL) */\n if(prevCountryCode.current.code === '') {\n prevCountryCode.current = selectedCountry;\n return;\n }\n\n // If the selected country has changed, then update the claims data\n // Do not update if the create claim modal is open\n if (props.selectedCountry.code && !createClaimOpen) {\n getClaims();\n }\n }, [props.selectedCountry]);\n\n const clearSearchInput = () => {\n let query = {};\n\n document.getElementById('claimSearch').value = ''\n\n if (query['query'] === '') {\n delete query['query'];\n }\n\n setSearchParams(query);\n onSearchInput();\n }\n\n const onSearchInput = () => {\n let oldQuery = searchParamsToDict(searchParams);\n let claimSearch = document.getElementById('claimSearch');\n let query = {};\n Object.assign(query, oldQuery);\n query['query'] = claimSearch.value;\n\n if (query['query'] === '') {\n delete query['query'];\n }\n\n // If the query still has the same key=value pairs, don't set the state\n if (compareDicts(oldQuery, query)) {\n return;\n }\n\n setSearchParams(query);\n\n // short delay before calling the API to prevent a call on each key press\n debounceQuery(\n 'getClaims_Dashboard',\n 300,\n () => {\n getClaims(query);\n }\n );\n\n return false;\n }\n\n // Helper functions\n const getClaims = (query = null) => {\n\n let queryArgs = '';\n\n // if no query was passed, then create a query based on the previous query params\n if (query === null) {\n query = searchParamsToDict(searchParams);\n }\n\n // Load URL query parameters\n if (query !== null) {\n\n // has a 'status' filter been selected? [NEW, PENDING, QUANTIFIED, DELETED]\n for (let filter of defaultFilterValues) {\n if (filter['id'] === query['status']) {\n queryArgs = `status: ${filter['status']}`; // yes it has, add the status to the query\n break;\n }\n }\n\n if ('page_number' in query) {\n queryArgs += ` page_number: ${query.page_number}`;\n }\n else {\n queryArgs += ` page_number: 1`;\n setPageNumber(1);\n }\n\n // if we did not find the filter in the query, then make sure to remove the 'status' param\n if (queryArgs === '') {\n delete query['status'];\n setSearchParams(query);\n }\n\n // did the user type something in the search input? query.query is a string of the users search input\n if (query.query !== undefined && query.query !== null) {\n let claimNumber = query.query;\n\n queryArgs += ` insurer_claim_number:\"${claimNumber}\"`;\n }\n }\n\n if (selectedCountry.code && selectedCountry.code !== 'WORLD') {\n queryArgs += ` country: ${selectedCountry.code}`;\n }\n\n // if the user has selected a column ordering, then add it to the query\n if(tableOrdering_DateExpirySLA !== '') {\n // order by last modified date\n queryArgs += ` sort_by:[{ field: \"date_sla_expiry\" order: ${tableOrdering_DateExpirySLA === 'ASC' ? 'ASCENDING' : 'DESCENDING'}}]`;\n }\n else if (tableOrdering_DateCreated !== '') {\n // order by date created\n queryArgs += ` sort_by:[{ field: \"date_created\" order: ${tableOrdering_DateCreated === 'ASC' ? 'ASCENDING' : 'DESCENDING'}}]`;\n } else{\n // DEFAULT order by date created - newest first\n queryArgs += ` sort_by:[{ field: \"date_created\" order: DESCENDING}]`;\n }\n\n\n let minimalClaimsQuery =\n `query dashboard_min_claims {\n claims(|placeholder|){\n error {\n type\n message\n }\n \n claims {\n insurer_claim_number\n id\n status\n date_sla_expiry\n date_updated\n date_created\n item_count\n tat_minutes\n organisation {\n info {\n name\n logo_image_url\n }\n }\n owned_by {\n info {\n first_name\n last_name\n profile_image_url\n }\n }\n status_reason\n }\n \n }\n }\n `;\n\n queryArgs += ` result_limit:25`;\n minimalClaimsQuery = minimalClaimsQuery.replace('|placeholder|', queryArgs);\n\n setQueryStatus(QueryStatus.QUERYING);\n\n // get claim data\n customGraphRequest(\n minimalClaimsQuery,\n (data) => {\n\n let filters = defaultFilterValues;\n\n for (let filter of filters) {\n\n filter['count'] = '-';\n\n\n // TODO temporarily disabled PORTAL-733\n // let statuses = data['statuses'];\n // let status = filter['status'];\n // if (status in statuses) {\n // filter['count'] = statuses[status]['count'];\n // }\n }\n\n setClaims({\n 'claims': data['claims'],\n 'filters': filters\n });\n\n setQueryStatus(QueryStatus.QUERIED);\n },\n onError,\n resultsPerPage\n );\n };\n\n const onError = (error, callback = null) => {\n\n setAlertOptions({\n 'iconType': 'error',\n 'heading': error['type'],\n 'message': error['message'],\n 'onClose': callback\n });\n setAlertOpen(true);\n };\n\n\n // onClick functions\n\n const onCreateClaim = (orgId, ownedById, insurerClaimNumber, insurerPolicyNumber, postalCode, locality, ccEmailSets, voucherClaim, buttonHandler) => {\n\n const isValidEmail = email => {\n const regex = /^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,20}$/;\n return regex.test(email);\n };\n\n let clearToCreateClaim = true;\n\n // Validate ccEmailSets\n const validatedEmailSets = ccEmailSets.filter(set => {\n\n // Skip empty sets\n const empty = !set.firstName && !set.lastName && !set.email;\n if(empty) return false;\n\n const emailIsValid = isValidEmail(set.email);\n\n if(!emailIsValid){\n\n // Do not proceed to create the claim\n clearToCreateClaim = false;\n\n props.showAlertModal('info', 'Invalid CC Email',\n
    \n

    One of the CC Emails is invalid. Please ensure a valid email addresses is entered

    \n\n {/* DIVIDER */}\n
    \n\n

    First Name: {set.firstName}

    \n

    Last Name: {set.lastName}

    \n

    Email: {set.email}

    \n
    );\n\n // Email set is invalid\n buttonHandler.onError('Invalid CC Email');\n return false;\n }\n\n // Email set is valid\n return true\n });\n\n if(!clearToCreateClaim)\n return;\n\n createClaim({\n organisationId:orgId,\n ownedById:ownedById,\n insurerClaimNumber:insurerClaimNumber,\n insurerPolicyNumber:insurerPolicyNumber,\n postalCode:postalCode,\n locality:locality,\n ccEmailSets:validatedEmailSets,\n voucherClaim:voucherClaim\n },\n (data) => {\n\n let claimId = data['claim']['id'];\n\n let url = `/search/${claimId}`;\n\n if(voucherClaim) url = `/voucher/${claimId}`;\n\n setCreateClaimOpen(false);\n setSuccessMessageOpen(true);\n // setTimeout(() => { window.location = url }, 1000);\n setTimeout(() => {\n navigate(url);\n }, 500);\n buttonHandler.onSuccess('Claim created');\n },\n (error) => {\n alertError(setAlertOpen, setAlertOptions, error);\n buttonHandler.onError('Failed to create claim');\n }\n );\n };\n\n const onConfirmClicked = (options) => {\n\n let row = document.getElementById(options['claimId']);\n row.classList.add('bg-red-500');\n setTimeout(() => {\n row.classList.add('hidden');\n }, 300);\n\n deleteClaim(\n options['claimId'],\n (data) => {\n\n setNotificationRightMessage({\n 'heading': 'Claim deleted',\n 'message': 'Successfully deleted claim.'\n });\n setNotificationRightOpen(true);\n getClaims();\n\n setTimeout(() => {\n setNotificationRightOpen(false);\n }, 1000);\n },\n (error) => {\n alertError(setAlertOpen, setAlertOptions, error);\n }\n );\n };\n\n const promptDeleteClaim = (claimId, insurerClaimNumber) => {\n\n let message = `Please confirm deletion of the claim \"${insurerClaimNumber}\"`;\n let type = 'warning';\n let buttonText = 'Delete';\n\n setConfirmModalOptions({\n 'heading': 'Delete claim',\n 'message': message,\n 'type': type,\n 'buttonText': buttonText,\n 'claimId': claimId\n });\n\n setConfirmModalOpen(true);\n };\n\n const selectStatusFilter = (event, newStatus, queryClaims) => {\n\n let status = event?.currentTarget.id || newStatus;\n let query = searchParamsToDict(searchParams);\n\n if(!status) return;\n\n if (query === null) {\n query = {};\n }\n\n // To retrieve \"all\" claims, remove the status filter from the query\n if (status === 'all') {\n delete query['status'];\n setSearchParams(query);\n }\n\n // Include the filter in the next query\n else {\n query['status'] = status;\n setSearchParams(query);\n }\n\n if(queryClaims){\n getClaims(query)\n }\n\n };\n\n\n // HTML render functions\n\n const renderFilterButtons = () => {\n\n let query = searchParamsToDict(searchParams);\n\n let filters = defaultFilterValues;\n\n if (claims !== null) {\n filters = claims.filters;\n }\n\n if (query === null) {\n query = {'status': 'all'};\n }\n\n for (let filter of filters) {\n if (filter['id'] === query['status']) {\n filter['isSelected'] = true;\n }\n else {\n filter['isSelected'] = false;\n }\n }\n\n return (\n
      \n\n {filters.map((filter) => (\n\n selectStatusFilter(e, null, true)}\n className={classNames(\n 'min-w-[8rem] flex shadow-sm rounded-md hover:shadow px-2',\n 'text-gray-800 text-sm',\n 'flex items-center justify-center gap-4',\n filter.bgColorClass,\n 'hover:border-opacity-100 transition-all',\n filter.isSelected ? 'shadow-lg border-opacity-100 !bg-white' : ''\n )}>\n\n {/* TODO temporarily disabled PORTAL-733 */}\n {/* COUNT */}\n {/*
      */}\n {/* {filter.count}*/}\n {/*
      */}\n\n {/*

      |

      */}\n\n\n {/* TITLE */}\n
      \n {filter.title}\n
      \n \n\n ))}\n\n
    \n );\n };\n\n const renderClaimsTableHeader = () => {\n\n return (\n \n \n \n Claim Number\n \n \n Owned By\n \n \n Status\n \n \n Status Reason\n \n \n Items\n \n\n {/* SLA */}\n {\n\n // reset the other column ordering\n setTableOrdering_DateCreated('')\n\n if (tableOrdering_DateExpirySLA === '') {\n setTableOrdering_DateExpirySLA('ASC')\n\n // When SLA is ACS, set the status filter to pending\n selectStatusFilter(null, 'pending', false)\n } else if (tableOrdering_DateExpirySLA === 'ASC') {\n setTableOrdering_DateExpirySLA('DESC')\n\n selectStatusFilter(null, 'pending', false)\n\n\n // If no status was selected by the user (still pending from above code), then remove the pending filter\n // if (searchParamsToDict(searchParams)?.status === 'pending')\n // selectStatusFilter(null, 'all', false)\n\n } else if (tableOrdering_DateExpirySLA === 'DESC') {\n setTableOrdering_DateExpirySLA('')\n\n // clear the status filter (presuming it was set to pending with above code)\n selectStatusFilter(null, 'all', false)\n }\n\n }}\n >\n

    Click to order

    All times displayed are in your browser's local time

    )}>\n

    \n SLA\n\n {/* > or > or nothing depending on if this column is ordered */}\n {tableOrdering_DateExpirySLA === 'ASC' ?\n :\n tableOrdering_DateExpirySLA === 'DESC' ?\n :\n \n }\n

    \n
    \n\n \n\n {/* DATE CREATED */}\n {\n\n // reset the other column ordering\n setTableOrdering_DateExpirySLA('')\n\n if (tableOrdering_DateCreated === '') {\n setTableOrdering_DateCreated('ASC')\n } else if (tableOrdering_DateCreated === 'ASC') {\n setTableOrdering_DateCreated('DESC')\n } else if (tableOrdering_DateCreated === 'DESC') {\n setTableOrdering_DateCreated('')\n }\n\n }}\n >\n

    Click to order

    All times displayed are in your browser's local time

    )}\n className=\"font-normal\"\n >\n
    \n Date Created\n  \n {/* > or > or nothing depending on if this column is ordered */}\n {tableOrdering_DateCreated === 'ASC' ?\n :\n tableOrdering_DateCreated === 'DESC' ?\n :\n \n }\n
    \n \n\n \n\n {/* ACTIONS */}\n \n Actions\n \n\n \n \n );\n };\n\n const renderClaimsTableRows = () => {\n\n if (claims === null) {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n }\n\n return (\n \n {claims.claims.map(renderSingleClaim)}\n \n );\n };\n\n const renderSingleClaim = (claim) => {\n\n let claimUrl = '#';\n\n if (claim.status === 'NEW') {\n claimUrl = '/search/' + claim.id;\n } else {\n claimUrl = '/profile/' + claim.id;\n }\n\n // Calculate the remaining time, and return the time string, and the total minutes\n let [_, remainingTimeTotalMinutes] = calculateRemainingSLATime(claim.date_sla_expiry);\n\n function dateCreated_HumanReadable() {\n\n const localDateCreatedMoment = localMomentInstanceFromUTC(claim.date_created);\n const localNowMoment = moment();\n\n if (localDateCreatedMoment.isSame(localNowMoment, 'day')) {\n return `Today, ${localDateCreatedMoment.format('HH:mm z')}`;\n } else if (localDateCreatedMoment.isSame(moment().subtract(1, 'days'), 'day')) {\n return `Yesterday, ${localDateCreatedMoment.format('HH:mm z')}`;\n } else if (localDateCreatedMoment.isSame(moment().add(1, 'days'), 'day')) {\n return `Tomorrow, ${localDateCreatedMoment.format('HH:mm z')}`;\n } else {\n return localDateCreatedMoment.format(HUMAN_READABLE_DATETIME_TIMEZONE);\n }\n }\n\n\n return (\n 0 && remainingTimeTotalMinutes <= 15 ? 'bg-red-200' : '',\n claim.status === 'QUANTIFICATION_IN_PROGRESS' && remainingTimeTotalMinutes > 15 && remainingTimeTotalMinutes <= 30 ? 'bg-orange-100' : '',\n )}\n onClick={(e) => {\n\n // Check if any text is selected\n const selection = window.getSelection().toString();\n if (selection.length > 0) {\n // If text is selected, do not proceed with the click action\n console.log('Text is selected, click action cancelled.');\n e.stopPropagation();\n return;\n }\n\n navigate(claimUrl)\n }}\n >\n\n {/* NAME */}\n \n\n
    \n
    \n \n\n
    \n
    \n \n\n {/* CLAIM NAME */}\n

    {claim.insurer_claim_number}

    \n\n {/* COPY ICON */}\n {\n e.stopPropagation();\n navigator.clipboard.writeText(claim.insurer_claim_number);\n props.showToastNotificationModal(\n 'success',\n 'Claim Copied',\n ''\n );\n }}>\n \n Click to copy the claim name\n
    \n\n
    \n
    \n

    {claim.organisation.info.name}

    \n
    \n \n \n\n \n\n {/* OWNED BY */}\n \n {`${claim.owned_by.info.first_name} ${claim.owned_by.info.last_name}`}\n \n\n {/* STATUS */}\n \n\n
    \n\n {/* STATUS */}\n
    \n {claim.status === 'QUANTIFICATION_IN_PROGRESS' ?\n 'Pending'\n :\n claim.status.replaceAll('_', ' ').toLowerCase()\n }\n
    \n\n
    \n\n\n \n\n {/* STATUS REASON */}\n \n\n {!['tendering', 'post tender inspection', 'verification'].includes(claim.status_reason?.toLowerCase()) ?\n\n

    {claim.status_reason}

    \n\n :\n\n <>\n {\n e.preventDefault(); // Prevent default anchor action\n e.stopPropagation(); // Stop event from bubbling up\n\n // If the claim is quantification in progress, then navigate to the tender page\n if (claim.status_reason.toLowerCase() === 'tendering') {\n window.open(`/tender/${claim.id}`, '_blank');\n } else if (claim.status_reason.toLowerCase() === 'post tender inspection') {\n window.open(`/post/${claim.id}`, '_blank');\n } else if (claim.status_reason.toLowerCase() === 'verification') {\n window.open(`/claim/verification/${claim.id}`, '_blank');\n } else {\n window.open(claimUrl, '_blank');\n }\n }}>\n
    \n\n {/* STATUS_REASON */}\n

    {claim.status_reason}

    \n\n {/* EXTERNAL LINK ICON */}\n \n \n
    \n\n \n\n
    \n Click to view this claim in a new window \n \n }\n\n \n\n {/* ITEMS */}\n \n {claim.item_count}\n \n\n {/* SLA */}\n \n {tableRowSLA(claim, remainingTimeTotalMinutes)}\n \n\n {/* DATE CREATED */}\n \n

    {dateCreated_HumanReadable()}

    \n \n\n {/* ACTIONS */}\n \n
    \n\n {/* EDIT (external window) */}\n e.stopPropagation()}\n >\n \n \n Click to view this claim

    in a new window\n
    \n
    \n\n {/* ISSUE VOUCHER */}\n e.stopPropagation()}\n >\n \n Issue Voucher\n \n {\n e.stopPropagation()\n promptDeleteClaim(claim.id, claim.insurer_claim_number)\n }}\n >\n \n Delete\n \n
    \n \n\n \n\n );\n };\n\n\n function tableRowSLA(claim, remainingTimeTotalMinutes){\n /** SLA\n * If quantification in progress AND not expired, show the remaining time and countdown\n * If quantification in progress AND expired, show nothing\n * If quantified, show the TAT\n * */\n\n function formatDuration(totalMinutes) {\n // duration in minutes, return a human readable string\n\n if (totalMinutes === 0) {\n return \"Auto\";\n }\n\n // Calculate the components\n const minutesPerDay = 60 * 24;\n const days = Math.floor(totalMinutes / minutesPerDay);\n const hours = Math.floor((totalMinutes % minutesPerDay) / 60);\n const minutes = totalMinutes % 60;\n\n // Build the result string\n let result = \"\";\n\n if (days > 0) {\n result += `${days} day${days > 1 ? 's' : ''} `;\n }\n\n if (hours > 0) {\n result += `${hours} hour${hours !== 1 ? 's' : ''} `;\n }\n\n if (minutes > 0 || (minutes === 0 && hours === 0 && days === 0)) {\n result += `${minutes} minute${minutes !== 1 ? 's' : ''}`;\n }\n\n return result.trim();\n }\n\n function SLAHumanReadable(timestamp) {\n\n const target = localMomentInstanceFromUTC(timestamp)\n const now = moment();\n\n if (target.isSame(now, 'day')) {\n return `Today, ${target.format('HH:mm z')}`;\n } else if (target.isSame(moment().subtract(1, 'days'), 'day')) {\n return `Yesterday, ${target.format('HH:mm z')}`;\n } else if (target.isSame(moment().add(1, 'days'), 'day')) {\n return `Tomorrow, ${target.format('HH:mm z')}`;\n } else {\n return target.format(HUMAN_READABLE_DATETIME_TIMEZONE); // Localized format; adjust as needed\n }\n }\n\n if(claim.status === \"QUANTIFIED\"){\n return (\n
    \n

    TAT

    \n

    {formatDuration(claim.tat_minutes)}

    \n
    \n )\n }\n\n const expired = remainingTimeTotalMinutes < 0;\n\n if(claim.status === \"QUANTIFICATION_IN_PROGRESS\" &&\n !expired &&\n claim?.status_reason?.toLowerCase() !== 'verification') {\n\n return (\n <>\n
    \n {claim.status === \"QUANTIFICATION_IN_PROGRESS\" &&\n \n }\n
    \n\n
    \n

    {SLAHumanReadable(claim.date_sla_expiry)}

    \n
    \n \n )\n }\n\n return <>\n\n }\n\n const renderSmallPagination = () => {\n\n if (claims === null) {\n return (\n \n \n \n );\n }\n\n if (isEmpty(claims)) {\n return (\n \n
    No claims found.
    \n \n );\n }\n\n const paginationLower = () => {\n return resultsPerPage * (pageNumber - 1);\n };\n const paginationUpper = () => {\n // on the final/last page, return this\n if (claims.claims.length < resultsPerPage) {\n let upperBound = resultsPerPage * pageNumber; // e.g 25 * 2 = 50\n let difference = resultsPerPage - claims.claims.length; // example: 25 - 15 = 10\n return upperBound - difference; // example: return 50 - 10 = 40 (40 total claims)\n }\n\n return resultsPerPage * (pageNumber);\n };\n\n return (\n \n {/* TEXT */}\n
    \n Showing claims {paginationLower() + 1}-{paginationUpper()}\n
    \n\n {/* PREVIOUS */}\n nextClaimPagination(true)}\n className={classNames('',\n pageNumber < 2 ? 'btn-disabled' : 'btn-light')}\n disabled={pageNumber < 2}\n >\n Previous\n \n\n {/* NEXT */}\n nextClaimPagination(false)}\n className={classNames('',\n claims.claims.length === 0 ? 'btn-disabled' : 'btn-light')}\n disabled={claims.claims.length === 0}\n >\n Next\n \n\n \n );\n };\n\n const nextClaimPagination = (moveToPreviousPage = false) => {\n\n let pageNum = pageNumber;\n\n if (moveToPreviousPage) {\n if (pageNumber > 1) {\n pageNum -= 1;\n }\n } else if (claims.claims.length !== 0) { // do not continue paging if the previous page is not 'full' aka resultsPerPage\n pageNum += 1;\n }\n\n setPageNumber(pageNum);\n\n let query = searchParamsToDict(searchParams);\n if (query === null) {\n query = {};\n }\n query.page_number = pageNum;\n query.result_limit = resultsPerPage;\n getClaims(query);\n\n };\n\n const claimsSearchForm = () => {\n\n return (\n <>\n\n {/* INPUT */}\n \n\n\n {/* LOADING */}\n \n \n \n Loading claims, please wait\n \n \n\n {/* SEARCH */}\n \n
    \n \n
    \n \n

    Search claims

    \n
    \n \n\n {/* CLEAR FILTERS X */}\n \n
    \n \n \n \n
    \n \n Clear search\n \n \n\n \n );\n };\n\n return (\n <>\n\n \n
  • In this page, you can view all the claims for this organisation and all its connected\n organisations.\n
  • \n
  • Filter down by STATUS - All, New, Pending, Quantified, Deleted
  • \n
  • Only 25 claims are displayed at a time, so please page through them via the Previous and Next\n pagination buttons\n
  • \n
  • Claims can be created, edited and deleted in this page
  • \n }\n />\n\n \n\n {/* TODO : change usage to base modal */}\n \n {/* TODO : change usage to base modal */}\n \n {/* TODO : change usage to base modal */}\n \n {/* TODO : change usage to base modal */}\n \n\n\n
    \n\n\n \n\n
    \n\n
    \n

    Claims

    \n\n setCreateClaimOpen(true)}\n type=\"button\"\n className={classNames(\n 'btn m-0 ml-6 p-3',\n props.mainOrganisation?.type === 'SUPPLIER' ? 'hidden' : '' // Hide this button for suppliers\n )}\n\n >\n \n Create claim\n \n\n
    \n\n {/* CLAIMS */}\n
    \n\n \n {claimsSearchForm()}\n
    \n\n {/* HEADER */}\n
    \n {safe(renderFilterButtons)}\n {safe(renderSmallPagination)}\n
    \n\n {/* CLAIMS */}\n \n\n {/* HEADER */}\n {safe(renderClaimsTableHeader)}\n\n {/* BODY */}\n {safe(renderClaimsTableRows)}\n\n
    \n\n
    \n\n
    \n\n \n \n );\n\n}\n\n// Countdown component that takes the expiry date as prop\nexport const Countdown_ClaimSLA = ({ date_sla_expiry }) => {\n\n const [remainingTimeString, setRemainingTimeString] = useState('');\n const [remainingTimeTotalMinutes, setRemainingTimeTotalMinutes] = useState(0);\n\n const intervalFlicker = useRef(false);\n\n useEffect(() => {\n const updateRemainingTime = () => {\n\n const localTimeStamp = localMomentInstanceFromUTC(date_sla_expiry)\n let [newRemainingTimeString, newRemainingTimeTotalMinutes] = calculateRemainingSLATime(localTimeStamp);\n\n // Remove the seconds \":00\" from the tail of the time string\n let removedSeconds = newRemainingTimeString.replace(/:00$/, '');\n\n if(intervalFlicker.current) removedSeconds = removedSeconds.replaceAll(':', ' ');\n\n setRemainingTimeString(removedSeconds);\n setRemainingTimeTotalMinutes(newRemainingTimeTotalMinutes);\n intervalFlicker.current = !intervalFlicker.current // flip the boolean\n };\n\n updateRemainingTime();\n const intervalId = setInterval(updateRemainingTime, 1000);\n\n return () => clearInterval(intervalId);\n }, [date_sla_expiry]);\n\n return (\n

    \n {remainingTimeString}\n

    \n );\n};\n\n\nexport function calculateRemainingSLATime(isoDateString) {\n // utcTime: 2021-05-28T13:30:00Z\n // returns: 00:00:00, or ''(if the time has passed)\n\n if(!isoDateString) return [\"\", null];\n\n const now = moment();\n let expiryDate = moment.utc(isoDateString).tz(moment.tz.guess());\n const difference = expiryDate.diff(now);\n\n // If the difference is negative, the time has already passed\n if (difference <= 0) {\n return [\"\", null];\n }\n\n let seconds = Math.floor(difference / 1000);\n let minutes = Math.floor(seconds / 60);\n let hours = Math.floor(minutes / 60);\n\n // seconds %= 60;\n minutes %= 60;\n\n // Remove seconds - not needed and distracting flicking on the dashboard\n seconds = 0;\n\n // Convert days to hours and add to the total hours\n let days = Math.floor(hours / 24);\n hours = (days * 24) + (hours % 24); // Combine days into hours\n\n let differenceAsMinutes = Math.floor(difference / 1000 / 60); // 1000 -> microseconds to second / 60 -> seconds to minutes\n\n return [`${padZero(hours)}:${padZero(minutes)}:${padZero(seconds)}`, differenceAsMinutes];\n}\n\nfunction padZero(number) {\n return number.toString().padStart(2, '0');\n}\n","// Library imports\n\nimport { useState } from 'react'\nimport { Combobox } from '@headlessui/react'\n\nimport { CheckIcon, SelectorIcon } from '@heroicons/react/solid'\n\nimport { classNames } from '../utils/helpers.js';\n\n\nexport default function CategoryBox(props) {\n\n const [categoryQuery, setCategoryQuery] = useState('');\n\n if (props.categories === null) {\n return '...';\n }\n\n let filteredCategories = [];\n\n if (props.allowEmptySelection !== undefined && props.allowEmptySelection) {\n\n filteredCategories = [{\n 'id': '',\n 'category_d': '',\n 'display_name': ''\n }];\n }\n\n if (categoryQuery === '') {\n filteredCategories = filteredCategories.concat(props.categories);\n }\n else {\n filteredCategories = props.categories.filter((category) => {\n return category.display_name.toLowerCase().includes(categoryQuery.toLowerCase())\n });\n }\n\n let disabled = undefined;\n\n if (props.disabled !== null && props.disabled !== undefined && props.disabled === true) {\n disabled = \"disabled\";\n }\n\n return (\n \n
    \n setCategoryQuery(event.target.value)}\n displayValue={(category) => category !== null && category.display_name !== null ? category.display_name : \"\"}\n />\n \n \n \n\n {filteredCategories.length > 0 && (\n \n {filteredCategories.map((category) => (\n \n classNames(\n 'relative cursor-default select-none py-2 pl-3 pr-9 h-9',\n active ? 'bg-indigo-600 text-white' : 'text-gray-900'\n )\n }\n >\n {({ active, selected }) => (\n <>\n {category.display_name}\n\n {selected && (\n \n \n \n )}\n \n )}\n \n ))}\n \n )}\n
    \n
    \n );\n\n}\n","// Library imports\n\nimport {Fragment, useEffect, useState} from 'react';\nimport {Dialog, Transition} from '@headlessui/react';\n\nimport {PencilAltIcon, QuestionMarkCircleIcon, XIcon} from '@heroicons/react/solid';\n\n// Local imports\nimport CategoryBox from '../../components/CategoryBox.jsx';\n\nimport {updateManualItem} from '../../utils/coreApi.js';\nimport {isEmpty} from '../../utils/helpers.js';\nimport {useQuery} from \"../../components/useQuery\";\nimport {CATEGORIES} from \"../../utils/graphqlTemplates\";\n\n\n// Constants\n\nexport default function UpdateManualItemModal(props){\n\n const [selectedCategory, setSelectedCategory] = useState(null);\n\n const categoriesHook = useQuery({\n onLoadQueryDelaySeconds: 3, // delay in seconds before executing the query on load, allows for convent preloading data without blocking the immediate page load\n queryStringFunction: () => CATEGORIES, // query string function\n onSuccess: (data) => {\n categoriesHook.setState(data[\"categories\"])\n }, // called on query success, can be used to re-set state e.g data['claims'][0]\n cacheResponse: true, // cache new responses\n useExistingCache: true, // instantly use existing cache if available\n skipQueryIfCache: true, // skip query if cache is available\n cacheExpirationMin: 60 * 24 * 7, // cache expiration time in minutes\n });\n const { state: categories } = categoriesHook\n\n\n useEffect(() => {\n\n let item = props.item;\n\n if (!props.open || item === null || selectedCategory !== null) {\n return;\n }\n\n if (item.category === null) {\n\n setSelectedCategory({\n 'id': '',\n 'category_d': '',\n 'display_name': ''\n });\n } else if (selectedCategory === null || item.category.id !== selectedCategory['id']) {\n\n setSelectedCategory({\n 'id': item.category.id,\n 'category_d': item.category.category_d,\n 'display_name': item.category.display_name\n });\n }\n\n }, [props.open, props.item, selectedCategory]);\n\n const setOpen = (open) => {\n\n props.setOpen(open);\n\n if (!open) {\n setSelectedCategory(null);\n }\n };\n\n // onClick functions\n const onUpdateManualItemClicked = (event) => {\n\n let item = props.item;\n\n let brand = document.getElementById('brand').value;\n let description = document.getElementById('description').value;\n let modelNumber = document.getElementById('modelNumber').value;\n let eanCode = document.getElementById('eanCode').value;\n let quantity = document.getElementById('quantity').value;\n\n updateManualItem({\n itemId:item.id,\n categoryId:selectedCategory['id'],\n brand:brand,\n description:description,\n modelNumber:modelNumber,\n eanCode:eanCode,\n quantity:quantity\n },\n props.onSuccess,\n props.onError\n );\n\n event.stopPropagation();\n event.preventDefault();\n return false;\n };\n\n\n return (\n \n {\n }}>\n
    \n \n props.setOpen(false)}/>\n \n\n {/* This element is to trick the browser into centering the modal contents. */}\n \n ​\n \n \n
    \n
    \n setOpen(false)}\n >\n Close\n \n \n
    \n
    \n
    \n \n
    \n
    \n Update Manual Item\n

    \n Update item information below.\n

    \n
    \n
    \n\n
    \n
    \n\n
    \n
    \n
    \n
    \n
    \n {/*
    At least two fields are required.
    */}\n
    \n \n
    \n \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n\n
    \n
    \n
    \n
    \n\n
    \n \n Update\n \n setOpen(false)}\n >\n Cancel\n \n
    \n
    \n \n
    \n
    \n
    \n );\n}\n","// Library imports\nimport {\n BanIcon,\n CheckIcon,\n MenuAlt2Icon,\n NewspaperIcon,\n PencilAltIcon,\n PlusIcon,\n SearchIcon,\n TrashIcon,\n MailIcon,\n RefreshIcon,\n DownloadIcon,\n CashIcon,\n TruckIcon,\n ExternalLinkIcon,\n ClipboardListIcon,\n ClipboardCheckIcon,\n XIcon,\n DocumentSearchIcon,\n ExclamationIcon,\n ClipboardCopyIcon,\n CollectionIcon,\n} from '@heroicons/react/outline';\nimport {\n ChevronDownIcon,\n ChevronRightIcon,\n SparklesIcon,\n} from '@heroicons/react/solid';\nimport moment from 'moment-timezone';\nimport React, {useEffect, useRef, useState} from 'react';\nimport {Link, useNavigate, useParams} from 'react-router-dom';\nimport Safe from '../../components/Safe';\nimport LoadingSpinner from '../../components/ui/LoadingSpinner';\nimport {\n customGraphRequest,\n generateAiProto,\n generateReportDownloadUrl,\n queryClaimComment,\n querySettlements,\n snoozeClaim,\n updateItemClaimantQuote,\n uploadFile,\n verifyAllManualItems,\n verifyManualItem,\n} from '../../utils/coreApi.js';\nimport {\n alertError,\n calculateProperties,\n classNames,\n currencySymbol,\n escapeDoubleQuotes,\n formatAsTitle,\n isEmpty,\n sortClaimItems,\n} from '../../utils/helpers.js';\nimport useInterval from '../../utils/useInterval';\n\n\n// Local imports\nimport AlertModal from '../modals/AlertModal.jsx';\nimport MultiProductModal from '../modals/MultiProductModal';\nimport * as coreApi from '../../utils/coreApi';\nimport {useDocumentTitle} from '../../components/PageTitle';\nimport {BasicImage} from '../../components/base/BasicImage';\nimport {Countdown_ClaimSLA} from './ClaimsHome';\nimport Tooltip from '../../components/Tooltip';\nimport {\n utcMomentInstanceFromLocal,\n localMomentInstanceFromUTC,\n HUMAN_READABLE_DATETIME_TIMEZONE,\n todayTomorrowYesterdayDatetimeFormat,\n} from '../../utils/time';\nimport {Menu} from '@headlessui/react';\nimport {DropdownMenu} from '../../components/base/DropdownMenu';\nimport LimitedOrganisationAccess, {OrganisationType} from '../../components/LimitedOrganisationAccess';\nimport {ClaimAttachmentsButton} from '../modals/ClaimAttachments';\nimport {ImageZoom} from '../../components/base/ImageZoom';\nimport CurrencyInput from '../../components/base/CurrencyInput';\nimport {SimpleSelect} from '../../components/base/SimpleSelect';\nimport ApiButton from '../../components/base/ApiButton';\nimport UpdateManualItemModal from '../modals/UpdateManualItemModal';\nimport {onViewHistoryRecordsClicked} from '../../components/AuditTrail';\n\n// Constants\n\nconst displayStatuses = {\n\n // Transition states\n\n 'CALCULATION_IN_PROGRESS': 'Calculating',\n 'VERIFICATION': 'Verification',\n 'TENDERING': 'Tendering',\n 'POST_TENDER_INSPECTION': 'Post tender inspection',\n\n // End states\n\n 'CANNOT_BE_VERIFIED': 'Cannot be verified',\n 'DELETED': 'Deleted',\n 'EXPIRED': 'Expired',\n 'QUANTIFIED': 'Quantified',\n 'UNABLE_TO_TENDER': 'Unable to tender',\n\n};\n\nconst statusSteps = {\n\n // 0\n 'Calculating': 0,\n\n // 1\n 'Tendering': 1,\n 'Verification': 1,\n\n // 2\n 'Post tender inspection': 2,\n\n // 3\n 'Cannot be verified': 3,\n 'Deleted': 3,\n 'Expired': 3,\n 'Quantified': 3,\n 'Unable to tender': 3,\n\n};\n\n\nexport default function ClaimProfile(props) {\n\n const setTitle = useDocumentTitle('Claim Profile');\n\n // React router\n const navigate = useNavigate();\n\n const {claimId} = useParams();\n\n // Used for errors\n const [alertOpen, setAlertOpen] = useState(false);\n const [alertOptions, setAlertOptions] = useState({\n 'heading': '', 'message': '',\n });\n\n // UI states\n const [refreshInterval, setRefreshInterval] = useState(null);\n\n // Edit manual item modal states\n const [itemInEditManualItemModal, setItemInEditManualItemModal] = useState(null);\n const [showEditManualItem, setShowEditManualItem] = useState(false);\n\n // Data states\n const user = props.user;\n const [claim, setClaim] = useState(null);\n const [settlements, setSettlements] = useState(null);\n\n const [claimNote, setClaimNote] = useState(null);\n\n const [verifiedByUsers, setVerifiedByUsers] = useState([]);\n\n // Compare and Edit proto modal\n const [productInfoModalOpen, setProductInfoModalOpen] = useState(false);\n const [productInfoModalOptions, setProductInfoModalOptions] = useState({\n 'product': null,\n 'onProductAdded': null,\n });\n\n // On every page load\n useEffect(() => {\n\n if (claim === null) {\n // Immediately set the claim to the global claim if it is available\n if (props.globalClaim && props.globalClaim.id === claimId) {\n setClaim(props.globalClaim);\n }\n // Get the latest version of the claim\n getFullClaim();\n }\n\n if (settlements === null) {\n querySettlements(claimId, (data) => {\n setSettlements(data.settlements);\n }, (error) => {\n alertError(setAlertOpen, setAlertOptions, error);\n });\n }\n\n return () => {\n if (refreshInterval !== null) {\n clearInterval(refreshInterval);\n setRefreshInterval(null);\n }\n };\n\n\n }, []);\n\n useEffect(() => {\n\n if (claim && !claimNote) {\n queryClaimComment(claim.id, (data) => {\n if (data.comments[0]) {\n const commentMessage = data.comments[0].message;\n setClaimNote(commentMessage);\n } else {\n setClaimNote('No notes found');\n }\n }, (error) => {\n alertError(setAlertOpen, setAlertOptions, error);\n });\n }\n\n if (claim) setTitle(`Claim : ${claim.insurer_claim_number}`);\n\n }, [claim]);\n\n useEffect(() => {\n /** ATTACHMENT MODAL\n * Set/Update the top navbar content when the claim is fetched/updated */\n\n if (!claim) return;\n\n props.setNavbarTopPageContent({\n 'claim': claim,\n 'content':\n \n
    \n \n
    \n
    ,\n });\n }, [claim, props.claimAttachmentsOptions]);\n useEffect(() => {\n /** ATTACHMENT MODAL\n * Set the Attachments modal options.\n * Due to state issues, the options needs to be set separately from updating the ClaimAttachmentsButton */\n\n if (!claim) return;\n const options = {\n 'claim': claim,\n };\n props.setClaimAttachmentsOptions(options);\n }, [claim]);\n\n const [claimPollDelay, setClaimPollDelay] = useState(3000); // Initial delay set to 3000ms\n\n // null implies that the claim polling has not started yet. False means it has stopped\n const shouldPollForClaim = useRef(null);\n useInterval(() => {\n /** Polling for claim data every 3 seconds */\n\n // check if any items status is CALCULATION_IN_PROGRESS\n const calculationInProgress = claim?.items.some(item => item.status === 'CALCULATION_IN_PROGRESS');\n if (!calculationInProgress) setClaimPollDelay(5000);\n\n // If shouldPollForClaims is null, it means the interval has not started\n if (shouldPollForClaim.current === null) {\n\n shouldPollForClaim.current = true;\n\n // stop polling after 20 minutes\n setTimeout(() => shouldPollForClaim.current = false, (1000 * 60 * 20));\n }\n\n if (shouldPollForClaim) getClaim();\n }, claimPollDelay);\n\n useEffect(() => {\n /** Additional data to retrieve once the claim has been retrieved */\n\n if (!claim) return;\n\n getVerifiedByUsers();\n\n }, [claim]);\n\n // Functions\n function getVerifiedByUsers() {\n /** Fetch the users who have verified this claim */\n\n // Do not query if the verifiedByUsers has already been set\n if (verifiedByUsers.length) return;\n\n const userIdsToRetrieve = [];\n\n // for each item.product.metadata.verified_by, add it to the list of users to retrieve\n claim?.items.forEach(item => {\n if (item.product?.metadata?.verified_by) {\n userIdsToRetrieve.push(item.product.metadata.verified_by);\n }\n });\n\n if (!userIdsToRetrieve.length) return;\n\n // query the users details for each verified_by user\n userIdsToRetrieve.forEach(userId => {\n const query = `\n query VerifiedByUsers {\n users(\n id: \"${userId}\"\n ){\n users {\n id\n organisation {\n id\n }\n info {\n first_name\n last_name\n full_name\n }\n }\n }\n }\n `;\n\n customGraphRequest(\n query,\n (data) => {\n const user = data['users'][0];\n if (user && user.info)\n setVerifiedByUsers(state => {\n // add the user to the list of verified by users\n return [...state, user];\n });\n },\n props.onError,\n );\n });\n }\n\n function getClaim() {\n /** Make a minimal query for the claim object,\n * if certain statuses have changed, the full claim will be queried */\n\n if (!shouldPollForClaim.current) return;\n\n if (claim?.status === 'QUANTIFIED') shouldPollForClaim.current = false;\n\n let minimalClaimsQuery = `\n query minClaims_pollStatus{\n claims(|placeholder|){\n error {\n type\n message\n }\n \n claims {\n status\n items{\n id\n status\n desktop_assessment{\n product_list{\n price\n }\n }\n }\n }\n }\n }\n `;\n const queryArgs = `id:\"${claimId}\"`;\n minimalClaimsQuery = minimalClaimsQuery.replace('|placeholder|', queryArgs);\n\n // get claim data\n customGraphRequest(\n minimalClaimsQuery,\n (data) => {\n\n const _polledClaim = data['claims'][0];\n\n if (claimStatusHasChanged(claim, _polledClaim)) {\n console.log('claim status has changed, retrieving full claim');\n getFullClaim();\n }\n\n },\n props.onError,\n );\n }\n\n function claimStatusHasChanged(oldClaim, newClaim) {\n /** Check if certain statuses have changed, if so, re-query the full claim object */\n\n if (!oldClaim || !newClaim) return false;\n\n let statusHasChanged = false;\n\n // Compare the status of the claim\n if (oldClaim.status !== newClaim.status) statusHasChanged = true;\n\n // Compare the status of the items\n oldClaim.items.forEach(item => {\n\n const newItem = newClaim.items.find(i => i.id === item.id);\n\n // Check status\n if (newItem && newItem.status !== item.status) statusHasChanged = true;\n\n // Check desktop assessment\n if (isEmpty(item.desktop_assessment)) { // item has no desktop assessment\n if (!isEmpty(newItem?.desktop_assessment)) statusHasChanged = true; // polled item has desktop assessment\n }\n\n });\n\n return statusHasChanged;\n }\n\n function getFullClaim() {\n /** Query the full Claim object (not the minimal claim, used in polling) */\n\n const query = `\n query {\n claims(\n id: \"${claimId}\"\n ) {\n error {\n type\n message\n }\n claims {\n cc_recipients{\n id,\n email,\n full_name,\n first_name\n last_name,\n }\n attachments{\n id\n object_type\n content_type\n date_created\n date_updated\n file_name\n object_id\n user{\n id\n username\n }\n url\n }\n total_cost\n tat_minutes\n cost_vat\n claimant_report_s3_key\n comments{\n message\n }\n cost_subtotal\n created_by {\n id\n info {\n first_name\n last_name\n profile_image_url\n }\n status\n status_reason\n username\n }\n delivery_costs {\n supplier_id\n supplier_name\n delivery_cost\n is_winning_tender\n is_adhoc\n }\n date_created\n date_quantified\n date_quantification_requested\n date_sla_expiry\n date_tender_expiry\n location_text\n id\n insurer_claim_number\n insurer_policy_number\n organisation {\n id\n info {\n name\n country\n currency\n currency_symbol\n logo_image_url\n }\n unique_reference_name\n }\n owned_by {\n id\n status\n username\n info {\n first_name\n last_name\n profile_image_url\n }\n }\n quantification_requested_by {\n id\n info {\n first_name\n last_name\n }\n }\n postal_code\n status\n status_reason\n \n \n items {\n id\n is_tender_item\n claimant_quote\n is_manual\n status\n quantity\n status_reason\n type\n metadata{\n claimed_amount\n comment\n date_purchased\n incident_location\n purchase_price\n purchase_source\n replacement_quote\n attachments{\n id\n object_type\n content_type\n date_created\n date_updated\n file_name\n object_id\n user{\n id\n username\n }\n url\n }\n }\n category {\n id\n category_a\n display_name\n }\n \n supplier_panel {\n id\n name\n unique_reference_name\n status\n supplier {\n id\n info {\n name\n country\n currency\n currency_symbol\n logo_image_url\n }\n }\n recommended_replacement {\n product {\n id\n \n brand\n category\n common_name\n description\n \n status\n type\n \n metadata\n model_number\n model_numbers\n \n images {\n main\n thumbnail_web\n thumbnail_print\n }\n \n }\n quote {\n id\n status\n country\n currency\n currency_symbol\n is_manual\n price\n brand\n description\n supplier {\n id\n unique_reference_name\n display_name\n }\n }\n }\n }\n \n desktop_assessment{\n selected_by\n selected_supplier\n \n selected_product{\n delivery_cost_extract\n free_delivery\n price\n rating\n reviews\n source_url\n thumbnail\n supplier_name\n brand\n model_number\n description\n price_class\n }\n \n product_list{\n delivery_cost_extract\n free_delivery\n price\n rating\n reviews\n source_url\n thumbnail\n supplier_name\n brand\n model_number\n description\n price_class\n }\n \n entry{\n delivery_cost_extract\n free_delivery\n price\n source_url\n supplier_name\n url_valid\n }\n mid{\n delivery_cost_extract\n free_delivery\n price\n source_url\n supplier_name\n url_valid\n }\n high{\n delivery_cost_extract\n free_delivery\n price\n source_url\n supplier_name\n url_valid\n }\n \n product_list {\n price\n }\n }\n \n possible_replacements {\n quotes {\n id\n supplier {\n unique_reference_name\n }\n }\n }\n product {\n id\n \n brand\n category\n common_name\n description\n \n status\n type\n \n metadata\n model_number\n model_numbers\n \n ai_generated\n \n images {\n main\n thumbnail_web\n thumbnail_print\n }\n \n }\n replacement {\n product {\n id\n \n brand\n category\n common_name\n description\n \n status\n type\n \n metadata\n model_number\n model_numbers\n \n images {\n main\n thumbnail_web\n thumbnail_print\n }\n \n }\n quote {\n id\n status\n country\n currency\n currency_symbol\n price\n brand\n date_expiry\n is_manual\n description\n match_accuracy\n supplier {\n id\n unique_reference_name\n display_name\n }\n }\n note\n date_selected\n selected_by\n is_system_selected\n }\n }\n }\n }\n }\n `;\n\n customGraphRequest(\n query,\n (data) => {\n let newClaim = data['claims'][0];\n newClaim = sortClaimItems(newClaim);\n\n if (isEmpty(data['claims'])) return props.showAlertModal('error', 'Failed to fetch claim', 'No claim data was returned');\n\n // Copy over any selected_quotes from the old claim\n newClaim.items = newClaim.items.map((item) => {\n const oldItem = claim?.items.find(old => old.id === item.id);\n return {\n ...item,\n selected_quote: oldItem?.selected_quote || item.selected_quote,\n };\n });\n\n setClaim(newClaim);\n\n redirectIfDeleted(newClaim);\n },\n props.onError,\n );\n\n }\n\n function redirectIfDeleted(newClaim) {\n if (newClaim.status === 'DELETED') {\n props.showAlertModal(\n 'error',\n 'Claim deleted',\n 'This claim has been deleted',\n );\n }\n }\n\n function currencyChange(cur = null) {\n if (cur === 0) {\n return 0;\n }\n if (cur) {\n return cur.toFixed(2)\n .replace(/\\d(?=(\\d{3})+\\.)/g, '$&,');\n } else {\n return ' ';\n }\n }\n\n function showProductInfoModal(item) {\n\n\n const product1 = item.product;\n let product2 = item.replacement?.product || null;\n // let product2 = item.product;\n\n if (props.mainOrganisation?.type === 'SUPPLIER') {\n // the replacement is only shown if the item is quantified/post tender\n // if the claim is quantified, the replacement is shown\n // The supplier does not see the item.replacement\n // instead the supplier sees their own quoted replacement in item.supplier_panel[at the supplier].recommended_replacement\n // IF THEY HAVE - SHOW THAT QUOTE AS THE REPLACEMENT\n // IF THEY HAVE NOT - SHOW \"declined to tender\"\n const supplier = item.supplier_panel?.find(supplier => supplier.id === props.mainOrganisation.id) || null;\n const replacement = supplier?.recommended_replacement || null;\n if (replacement && replacement.product) {\n product2 = replacement.product;\n }\n }\n\n setProductInfoModalOptions({\n 'product': product1,\n 'product2': product2,\n // 'productId': product1.id,\n // 'productId2': product2?.id || null,\n 'onProductAdded': null,\n 'mode': 'view',\n });\n\n setProductInfoModalOpen(true);\n }\n\n const allProps = {\n ...props,\n navigate,\n claimId,\n alertOpen, setAlertOpen,\n alertOptions, setAlertOptions,\n refreshInterval, setRefreshInterval,\n user,\n getFullClaim,\n claim, setClaim,\n settlements, setSettlements,\n claimNote, setClaimNote,\n itemInEditManualItemModal, setItemInEditManualItemModal,\n showEditManualItem, setShowEditManualItem,\n verifiedByUsers, setVerifiedByUsers,\n shouldPollForClaim,\n productInfoModalOpen, setProductInfoModalOpen,\n productInfoModalOptions, setProductInfoModalOptions,\n showProductInfoModal,\n currencyChange,\n };\n\n // Page content\n return (
    \n\n {/* TODO : change usage to base modal */}\n \n\n
    \n\n
    \n\n
    \n\n \n\n \n\n \n\n \n {\n getFullClaim();\n setShowEditManualItem(false);\n }}\n onError={props.onError}\n />\n \n\n \n \n \n \n \n\n \n\n \n \n \n\n
    \n\n
    \n\n
    );\n}\n\nfunction Header(props) {\n\n const claim = props.claim;\n\n const generateAndDownloadReport = (event, type) => {\n\n // Prevent the default action of the event\n event.preventDefault();\n\n generateReportDownloadUrl(props.claimId, type, (data) => {\n // Create a new anchor element\n const anchor = document.createElement('a');\n\n // Set the href attribute to the download URL\n anchor.href = data.url;\n\n // Trigger a click event on the anchor element\n anchor.click();\n\n // Cleanup: remove the anchor element from the document\n anchor.remove();\n }, (error) => props.onError(error));\n };\n\n function resendQuantificationReport(recalculate = false) {\n\n const mutation = `\n mutation Regenerate_Resend_QuantificationReport{\n regenerate_quantification_report(\n claim_id: \"${props.claim.id}\"\n recalculate: ${recalculate}\n resend_report: true\n ){\n error {type, message}\n claim{\n id\n }\n }\n }\n `;\n\n customGraphRequest(\n mutation,\n () => {\n props.showNotificationModal(\n 'success',\n 'Successfully requested',\n '');\n },\n props.onError,\n );\n\n\n }\n\n if (!claim) return (\n
    \n
    \n );\n\n return (\n
    \n\n {/* HEADER */}\n

    \n Claim Profile\n

    \n\n
    \n\n {/* VIEW HISTORY RECORDS */}\n onViewHistoryRecordsClicked(props, `object_id: \"${claim.id}\", object_type: claims`)}\n >\n \n Audit Trail\n \n\n {/* DOWNLOAD REPORT */}\n
    \n\n generateAndDownloadReport(e, 'QUANTIFICATION')}\n >\n \n Quantification Report\n ,\n ,\n ],\n\n [\n \n \n ,\n\n \n \n

    Recalculate all reports, and resend

    \n

    This is a resources intensive process

    \n

    only use when recalculation is required

    \n }>\n \n
    \n ,\n ],\n\n ]}\n mainButton={\n \n \n Download report\n \n \n }\n\n renderOption={(option) => option}\n />\n
    \n\n
    \n\n\n
    \n\n );\n}\n\nfunction ClaimInfo(props) {\n\n const [showSnoozeButtons, setShowSnoozeButtons] = useState(false);\n\n const claim = props.claim;\n\n const onSnoozeClaim = (snoozeAmount) => {\n\n let snoozeMinutes = '';\n if (snoozeAmount === '5m')\n snoozeMinutes = 'SNOOZE_5_MINUTES';\n else if (snoozeAmount === '30m')\n snoozeMinutes = 'SNOOZE_30_MINUTES';\n else if (snoozeAmount === '60m')\n snoozeMinutes = 'SNOOZE_60_MINUTES';\n else if (snoozeAmount === '4h')\n snoozeMinutes = 'SNOOZE_240_MINUTES';\n else\n snoozeMinutes = 'SNOOZE_5_MINUTES';\n\n snoozeClaim(\n claim.id,\n snoozeMinutes,\n (data) => {\n alert('Successfully snoozed claim');\n window.location.reload();\n }, (error) => {\n console.error('failed to snooze claim');\n console.error(error);\n },\n );\n };\n\n const allItemsQuantified = (inClaim = null) => {\n\n let claimToCheck = props.claim;\n\n if (inClaim !== null) {\n claimToCheck = inClaim;\n }\n\n if (claimToCheck === null) {\n return false;\n }\n\n for (const item of claimToCheck.items) {\n if (item.status !== 'QUANTIFIED') {\n return false;\n }\n }\n\n return true;\n };\n\n const claimAddress = () => {\n\n const addressParts = props.claim.location_text.split(',');\n\n return (
    \n {addressParts.map((part) => (\n {part}\n ))}\n
    );\n };\n\n function reOpenClaim() {\n\n props.showConfirmModal(\n 'success',\n 'Reopen Claim',\n 'Are you sure you want to reopen this claim? This will allow you to add additional items to the claim.',\n 'Reopen',\n () => {\n\n const mutation = `\n mutation ReOpenClaim {\n reopen_claim(claim_id: \"${props.claim.id}\"){\n error {type, message}\n claim {\n id\n }\n }\n }\n `;\n\n customGraphRequest(\n mutation,\n (data) => {\n props.showNotificationModal('success', 'Claim Reopened', '');\n\n // Redirect to the item search page\n props.navigate(`/search/${props.claimId}`);\n },\n props.onError,\n );\n\n },\n () => {\n },\n );\n\n\n }\n\n function CountdownClaimProfile({date_sla_expiry}) {\n const [time, setTime] = useState({text: '', minutes: 0});\n const [flicker, setFlicker] = useState(false);\n\n // Toggle flicker every second\n useEffect(() => {\n const timer = setInterval(() => {\n setFlicker(prev => !prev);\n }, 1000);\n return () => clearInterval(timer);\n }, []);\n\n // Recalculate time whenever flicker or date_sla_expiry changes\n useEffect(() => {\n const [display, totalMinutes] = calculateRemainingSLATime(date_sla_expiry);\n setTime({\n text: flicker ? display.replaceAll(':', ' ') : display,\n minutes: totalMinutes\n });\n }, [date_sla_expiry, flicker]);\n\n function calculateRemainingSLATime(date_sla_expiry) {\n const now = moment().tz(moment.tz.guess());\n const sla = localMomentInstanceFromUTC(date_sla_expiry);\n if (now.isAfter(sla)) return ['expired', 0];\n\n const diff = moment.duration(sla.diff(now));\n const days = Math.floor(diff.asDays());\n const hours = Math.floor(diff.asHours() % 24);\n const minutes = Math.floor(diff.asMinutes() % 60);\n const totalMinutes = Math.floor(diff.asMinutes());\n\n const display = `${days ? days + 'D ' : ''}${String(hours).padStart(2, '0')}:${String(minutes).padStart(2, '0')}`;\n return [display, totalMinutes];\n }\n\n return (\n

    0 ? 'text-red-600' : ''}>\n {time.text}\n

    \n );\n };\n\n\n const claimInfo = () => {\n\n if (!props.claim) {\n return (\n
    \n \n
    \n );\n }\n\n let requestedBy = null;\n\n if (props.claim.quantification_requested_by !== null) {\n const info = props.claim.quantification_requested_by.info;\n requestedBy = info.first_name + ' ' + info.last_name;\n }\n\n let tatDisplay = '-';\n\n if (props.claim.tat_minutes !== null) {\n const quotient = Math.floor(props.claim.tat_minutes / 60);\n const remainder = props.claim.tat_minutes % 60;\n tatDisplay = quotient.toString()\n .padStart(2, '0') + ':' + remainder.toString()\n .padStart(2, '0');\n }\n\n function ccEmails() {\n /** Render CC emails */\n\n // If there are no cc recipients or the user's org is not an root/admin/insurer, return placeholder '-'\n if (!'ROOT ADMINISTRATOR INSURER'.includes(props.mainOrganisation?.type)) return

    -

    ;\n\n const recipients = props.claim.cc_recipients;\n\n if (!recipients || recipients.length === 0) return

    -

    ;\n\n return recipients.map((recipient) =>\n\n
    \n
    \n

    {recipient.first_name} {recipient.last_name}

    \n

    {recipient.email}

    \n
    \n
    \n
    ,\n );\n }\n\n function showAddCCEmailModal() {\n\n function addCCEmail() {\n\n const ccFirstName = document.getElementById('ccFirstName').value;\n const ccLastName = document.getElementById('ccLastName').value;\n const ccEmail = document.getElementById('ccEmail').value;\n\n const mutation = `\n mutation ClaimProfile_AddCCRecipient {\n add_cc_recipients_to_claim(\n claim_id: \"${props.claim.id}\",\n cc_recipients: [\n {\n email: \"${ccEmail}\",\n first_name: \"${ccFirstName}\",\n last_name: \"${ccLastName}\",\n }\n ]\n ){\n error{type, message}\n claim{\n id\n }\n }\n }\n `;\n\n customGraphRequest(\n mutation,\n (data) => {\n props.showToastNotificationModal('success', 'CC email added', 'Reloading claim data...');\n props.getFullClaim();\n props.setCustomModalOpen(false);\n },\n props.onError,\n );\n\n }\n\n const content = (\n
    \n\n

    Add CC Email Address

    \n\n
    \n\n
    \n
    \n \n \n
    \n \n
    \n\n
    \n\n props.setCustomModalOpen(false)}\n >\n Close\n \n\n\n \n \n Add\n \n\n
    \n\n
    \n );\n\n props.showCustomModal(content);\n\n }\n\n function showAddClaimCommentModal() {\n\n function addClaimComment() {\n\n const claimComment = document.getElementById('claimComment').value;\n\n const mutation = `\n mutation create_comment {\n create_claim_comment (\n claim:\"${props.claim.id}\" \n message:\"${escapeDoubleQuotes(claimComment)}\"\n ) {\n comment {\n message\n }\n }\n }\n `;\n\n customGraphRequest(\n mutation,\n (data) => {\n props.showToastNotificationModal('success', 'Claim Comment Added', 'Successfully added claim comment');\n props.getFullClaim();\n props.setCustomModalOpen(false);\n },\n props.onError,\n );\n\n }\n\n const content = (\n
    \n\n

    Add Claim Comment

    \n\n
    \n\n \n\n
    \n\n props.setCustomModalOpen(false)}\n >\n Close\n \n\n\n \n \n Add claim comment\n \n\n
    \n\n
    \n );\n\n props.showCustomModal(content);\n\n }\n\n\n return (\n
    \n

    Claim Details

    \n
    \n {/* Table 1 */}\n \n \n \n \n \n \n \n \n \n \n \n {/* LOCATION */}\n \n \n \n \n {/* REQUESTED ON DATE AND TIME */}\n \n \n \n\n {claim.status !== 'QUANTIFIED' ?\n // Status\n \n \n \n \n :\n // Closed\n \n \n \n \n }\n\n \n {/* COMMENTS */}\n \n \n \n \n
    Claim\n number\n {props.claim.insurer_claim_number}
    Organisation{props.claim.organisation.info.name}
    Area{claimAddress()}
    Requested{props.claim.date_quantification_requested !== null ? localMomentInstanceFromUTC(props.claim.date_quantification_requested).format(HUMAN_READABLE_DATETIME_TIMEZONE) : '-'}
    \n Status\n \n {formatAsTitle(claim.status_reason)}\n
    Closed{props.claim.date_quantified !== null ? localMomentInstanceFromUTC(props.claim.date_quantified).format(HUMAN_READABLE_DATETIME_TIMEZONE) : '-'}
    \n \n Comments +\n \n \n {claim.comments && claim.comments.length > 0 ? (\n claim.comments.map((comment, index) => (\n
    \n

    {comment.message}

    \n
    \n ))\n ) : (\n -\n )}\n
    \n\n {/* Table 2 */}\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n {/* ITEMS */}\n \n \n \n \n\n {claim.status !== 'QUANTIFIED' ?\n // SLA\n \n \n \n \n :\n\n // TAT\n \n \n \n \n }\n\n \n \n \n \n\n \n
    Policy\n number\n {props.claim.insurer_policy_number !== null ? props.claim.insurer_policy_number : '-'}
    User{props.claim.owned_by?.info?.first_name || '-'} {props.claim.owned_by?.info?.last_name || ''}
    Requested\n by\n {requestedBy !== null ? requestedBy : '-'}
    \n \n

    The number of items in this claim

    \n
    \n

    Click to re-open this claim and add additional items

    \n } className='max-w-[10rem]'>\n Items +\n
    \n
    \n {props.claim?.items?.length}\n
    \n SLA\n \n\n {/* REMAINING TIME */}\n \n
    \n \n
    \n
    \n\n {/* SNOOZE */}\n \n\n {/* SNOOZE AMOUNTS */}\n {showSnoozeButtons &&\n
    \n \n \n \n
    \n }\n\n
    \n Turnaround time (TAT)\n {tatDisplay}
    \n \n CC emails +\n \n \n {ccEmails()}\n
    \n\n {/* Table 3 */}\n \n \n\n \n \n \n \n\n \n \n \n \n\n {props.claim.delivery_costs?.filter(dC => dC.is_winning_tender).map((deliveryCost, i) => (\n \n \n\n \n \n ))}\n\n\n \n \n \n \n\n \n \n \n \n\n \n \n \n\n \n
    Subtotal\n {props.claim !== null && props.claim.cost_subtotal !== 0 ? (props.claim.organisation.info.currency_symbol || ' ') + ' ' + props.currencyChange(props.claim.cost_subtotal) : '-'}\n
    Shipping
    \n {deliveryCost.supplier_name}\n {currencySymbol(props.claim)}{props.currencyChange(deliveryCost.delivery_cost)}\n
    Tax\n {props.claim !== null && props.claim.cost_vat !== 0 ? (props.claim.organisation.info.currency_symbol || ' ') + ' ' + props.currencyChange(props.claim.cost_vat) : '-'}\n
    Total\n {props.claim !== null && props.claim.total_cost !== 0 ?\n (props.claim.organisation.info.currency_symbol || ' ') + ' ' + props.currencyChange(props.claim.total_cost)\n :\n '-'}\n
    \n {props.claim !== null && !allItemsQuantified() && (<>\n * Please note: \n Not all replacements have been calculated yet.\n
    \n )}\n *\n Does not include excess.\n
    \n
    \n
    \n );\n\n\n };\n\n return claimInfo();\n}\n\nfunction ClaimNote(props) {\n const renderClaimNote = () => {\n if (!props.claim || !props.claim.id || !props.claimNote || !props.claimNote.comments) {\n return;\n }\n\n if (props.claimNote.comments[0]) {\n const _cNote = props.claimNote.comments[0].message;\n // let cNote = _cNote.replace(\"
    \", \"\\n\" );\n props.setClaimNote(_cNote);\n } else {\n props.setClaimNote('No notes found');\n }\n\n return (
    \n

    Comments

    \n\n
    \n {(props.claimNote || ' ')}\n
    \n
    );\n\n };\n\n return renderClaimNote();\n}\n\nfunction Settlements(props) {\n\n /** DEVELOPMENT PLACEHOLDER DATA */\n // useEffect(() => {if(props.claim) props.setSettlements(placeholderSettlementData['data']['settlements']['settlements']);}, [props.claim]);\n\n const onVerifySettlement = (settlementId, method) => {\n props.showConfirmModal('success', 'Verify settlement', 'Are you sure you want to verify this settlement?', 'Verify', () => {\n verifySettlement(settlementId, method);\n });\n };\n\n const verifySettlement = (settlementId, method) => {\n\n coreApi.verifySettlementVoucher(\n {\n 'settlement': settlementId,\n 'claim_number': props.claim.insurer_claim_number,\n 'method': method,\n 'beneficiary_id': settlementId,\n },\n (data) => {\n props.showToastNotificationModal('success', 'Settlement verified', 'The settlement has been verified');\n querySettlements(\n props.claim.id,\n (data) => {\n props.setSettlements(data.settlements);\n },\n props.onError,\n );\n },\n props.onError,\n );\n };\n\n const onDeleteSettlement = (settlementId) => {\n props.showConfirmModal(\n 'warning',\n 'Delete settlement',\n 'Are you sure you want to delete this settlement?',\n 'Delete',\n (options) => {\n cancelSettlementVoucher(settlementId, options.inputValue);\n },\n () => {\n },\n {\n 'showInput': true,\n 'inputPlaceholder': 'Reason for canceling settlement',\n },\n );\n };\n\n const cancelSettlementVoucher = (settlementId, reason) => {\n\n coreApi.cancelSettlementVoucher(\n {\n 'settlement': settlementId,\n 'claim_number': props.claim.insurer_claim_number,\n 'reason': reason,\n },\n (data) => {\n props.showToastNotificationModal('success', 'Settlement canceled', 'The settlement has been canceled');\n querySettlements(\n props.claim.id,\n (data) => {\n props.setSettlements(data.settlements);\n },\n props.onError,\n );\n },\n props.onError,\n );\n };\n\n const onViewBeneficiaryDetails = (settlementId) => {\n\n /** DEVELOPMENT PLACEHOLDER DATA */\n // showBeneficiaryDetails(placeholderSettlementBeneficiary['data']['settlement_beneficiary']); return;\n\n const query = `\n query {\n settlement_beneficiary(\n settlement: \"${settlementId}\"\n beneficiary: \"${settlementId}\"\n ){\n error {type, message}\n voucher{\n status\n }\n beneficiary{\n title\n first_name\n last_name\n msisdn\n email\n verification_method\n }\n }\n }\n `;\n\n customGraphRequest(\n query,\n (data) => {\n showBeneficiaryDetails(data);\n },\n props.onError,\n );\n };\n\n const showBeneficiaryDetails = (settlementBeneficiary) => {\n\n const content = (\n
    \n\n

    Settlement Beneficiary Details

    \n\n
    \n\n \n\n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n\n\n
    Email{settlementBeneficiary.beneficiary.email}
    Title{settlementBeneficiary.beneficiary.title}
    Last name{settlementBeneficiary.beneficiary.last_name}
    MSISDN{settlementBeneficiary.beneficiary.msisdn}
    Verification method{settlementBeneficiary.beneficiary.verification_method}
    Voucher status{settlementBeneficiary.voucher.status}
    \n\n
    \n\n props.setCustomModalOpen(false)}\n >\n Close\n \n\n
    \n\n
    \n );\n\n props.showCustomModal(content);\n };\n\n const renderAwards = () => {\n\n if (props.settlements.filter(settlement => settlement.method === 'AWARD').length <= 0) return <>;\n\n const currencySymbol = props.claim && props.claim.organisation ? props.claim.organisation.info.currency_symbol : ' ';\n\n function awardedValue(settlement) {\n\n const excess = settlement.excess || 0;\n const value = settlement.value || 0;\n\n try {\n const val = value - excess;\n return props.currencyChange(val);\n } catch (e) {\n return '-';\n }\n }\n\n function settlementDatetimeHumanReadable(settlement) {\n\n const localDateCreatedMoment = localMomentInstanceFromUTC(settlement.date_created);\n\n return (\n
    \n

    {moment(localDateCreatedMoment).format('YYYY-MM-DD')}

    \n

    {moment(localDateCreatedMoment).format('HH:mm:00 z')}

    \n
    \n );\n }\n\n return (\n
    \n\n

    \n Awards\n

    \n\n \n\n \n \n \n \n \n \n \n \n \n \n\n \n {props.settlements.filter(i => i.method === 'AWARD')\n .map((settlement) => {\n\n if (settlement.items) {\n settlement.items.forEach(_itemID => {\n _itemID.details = props.claim.items.find(item => item.id === _itemID.id);\n });\n }\n\n return (\n \n\n {/* DATE AND TIME */}\n \n\n {/* SUPPLIER */}\n \n\n {/* ITEMS */}\n \n\n {/* VALUE */}\n \n\n {/* STATUS */}\n \n\n {/* ACTIONS */}\n \n\n \n );\n })}\n \n\n
    Date and TimeSupplierItemsValueStatusActions
    \n \n

    Created on:

    \n {utcMomentInstanceFromLocal(settlement.date_created).format(HUMAN_READABLE_DATETIME_TIMEZONE)}\n

    {localMomentInstanceFromUTC(settlement.date_created).format(HUMAN_READABLE_DATETIME_TIMEZONE)}

    \n
    \n

    Updated on:

    \n {utcMomentInstanceFromLocal(settlement.date_updated).format(HUMAN_READABLE_DATETIME_TIMEZONE)}\n

    {localMomentInstanceFromUTC(settlement.date_updated).format(HUMAN_READABLE_DATETIME_TIMEZONE)}

    \n )}\n >\n {todayTomorrowYesterdayDatetimeFormat(settlement.date_created, HUMAN_READABLE_DATETIME_TIMEZONE)}\n \n
    \n {settlement.organisation_supplier.info.name}\n \n {settlement.items?.map((item, index) => (\n item && item.details ?\n \n {index + 1}. {item.details.category.display_name} - {item.details.product.common_name}\n \n :\n ' '\n ),\n )}\n \n
    \n Total value: {currencySymbol} {props.currencyChange(settlement.value)}\n
    \n
    \n Excess: {currencySymbol} {props.currencyChange(settlement.excess)}\n
    \n
    \n Awarded value: {currencySymbol} {awardedValue(settlement)}\n
    \n
    \n \n {settlement.status.replaceAll('_', ' ').toLowerCase()}\n \n \n\n \n
    \n \n \n \n
    \n \n\n \n {/* Suppliers can view settlements that were awarded to them */}\n {settlement.organisation_supplier.id === props.mainOrganisation.id &&\n \n }\n \n\n\n
    \n\n
    \n );\n };\n\n const renderVouchers = () => {\n\n if (props.settlements.filter(settlement => settlement.method === 'VOUCHER').length <= 0) return <>;\n\n\n const renderSettlementTable = (settlement) => {\n return (\n \n\n {/* DATE AND TIME */}\n \n \n

    Created on:

    \n {utcMomentInstanceFromLocal(settlement.date_created).format(HUMAN_READABLE_DATETIME_TIMEZONE)}\n

    {localMomentInstanceFromUTC(settlement.date_created).format(HUMAN_READABLE_DATETIME_TIMEZONE)}

    \n
    \n

    Updated on:

    \n {utcMomentInstanceFromLocal(settlement.date_updated).format(HUMAN_READABLE_DATETIME_TIMEZONE)}\n

    {localMomentInstanceFromUTC(settlement.date_updated).format(HUMAN_READABLE_DATETIME_TIMEZONE)}

    \n )}\n >\n {todayTomorrowYesterdayDatetimeFormat(settlement.date_created, HUMAN_READABLE_DATETIME_TIMEZONE)}\n \n \n\n {/* SUPPLIER */}\n \n {settlement.organisation_supplier.info.name}\n \n\n {/* VALUE */}\n \n {props.claim && props.claim.organisation ? props.claim.organisation.info.currency_symbol : ' '} {props.currencyChange(settlement.value)}\n \n\n {/* EXCESS */}\n \n {props.claim && props.claim.organisation ? props.claim.organisation.info.currency_symbol : ' '} {props.currencyChange(settlement.excess)}\n \n\n {/* TOTAL VALUE */}\n \n {props.claim && props.claim.organisation ? props.claim.organisation.info.currency_symbol : ' '} {(parseFloat(settlement.value) - parseFloat(settlement.excess)).toFixed(2)\n .replace(/\\d(?=(\\d{3})+\\.)/g, '$&,')}\n \n\n {/* STATUS */}\n \n \n {settlement.status.replaceAll('_', ' ').toLowerCase()}\n \n \n\n {/* ACTIONS */}\n \n\n \n
    \n \n \n \n
    \n \n\n \n {/* Suppliers can view settlements that were awarded to them */}\n {settlement.organisation_supplier.id === props.mainOrganisation.id &&\n \n }\n \n\n \n \n );\n };\n\n return (\n
    \n\n

    \n Vouchers\n

    \n\n \n\n \n \n \n \n \n \n \n \n \n \n \n\n \n {props.settlements.filter(i => i.method === 'VOUCHER')\n .map((settlement) => renderSettlementTable(settlement))\n }\n \n\n
    DatesSupplierValueExcessTotal ValueStatusActions
    \n\n
    \n );\n };\n\n const renderSettlements = () => {\n\n if (!props.claim || !props.settlements || !props.mainOrganisation) return <>;\n\n if (isEmpty(props.settlements)) {\n return (\n
    \n\n

    \n Settlements\n

    \n\n
    \n );\n }\n\n\n return (\n
    \n

    Settlements

    \n\n {renderAwards()}\n\n {renderVouchers()}\n\n
    \n );\n };\n\n return renderSettlements();\n\n}\n\nfunction ButtonSection(props) {\n\n if (!props.mainOrganisation) return <>;\n\n return (\n
    \n\n {/* VOUCHER */}\n \n props.navigate(`/voucher/${props.claimId}`)}\n className={classNames(\n 'btn w-1/4 py-4 justify-center font-medium',\n )}\n >\n Voucher\n \n \n\n {/* AWARD */}\n props.navigate(`/award/${props.claimId}`)}\n className=\"btn w-1/4 py-4 justify-center font-medium\"\n >\n Award\n \n\n
    \n );\n}\n\nfunction Items(props) {\n\n // Desktop assessment\n const [selectedSupplier_DA, setSelectedSupplier_DA] = useState(null);\n const [includeDeliveryFee_DA, setIncludeDeliveryFee_DA] = useState(false);\n\n // A state to trigger desktop assessment on all children items\n const [desktopAssessAllItems, setDesktopAssessAllItems] = useState(false);\n const [submitAllDesktopAssessments, setSubmitAllDesktopAssessments] = useState(false);\n\n // The supplier organisations that are associated with this claim\n const [supplierOrganisations, setSupplierOrganisations] = useState(null);\n useEffect(() => {\n fetchSuppliers();\n }, [props.claim]);\n\n function fetchSuppliers() {\n\n if (!props.claim) return;\n\n if (!isEmpty(supplierOrganisations)) return supplierOrganisations;\n\n const query = `\n query Accounts_Suppliers{\n accounts( \n organisation: \"${props.claim.organisation.id}\",\n types: [ADMINISTRATOR_SUPPLIER, INSURER_SUPPLIER]\n ) {\n error {\n type\n message\n }\n \n accounts {\n type\n organisation_2 {\n unique_reference_name\n id\n type\n info {\n name\n logo_image_url\n country\n country_text\n }\n }\n \n }\n }\n }\n `;\n\n customGraphRequest(\n query,\n (data) => {\n const organisations = data.accounts.map(account => account.organisation_2);\n setSupplierOrganisations(organisations);\n },\n props.onError,\n );\n }\n\n const onVerifyAllManualItems = (options) => {\n\n verifyAllManualItems(\n props.claimId,\n (data) => {\n props.showToastNotificationModal(\n 'success',\n 'Verified',\n 'All manual items have been verified',\n 3500,\n );\n\n setTimeout(() => props.getFullClaim(), 300);\n },\n props.onError,\n );\n };\n\n const onVerifyManualItem = (item, verifyOrIgnore) => {\n /** verify or ignore a manual item in VERIFICATION\n * item: ClaimItem object\n * verifyOrIgnore: VERIFIED | CANNOT_BE_VERIFIED */\n\n verifyManualItem(\n item.id,\n verifyOrIgnore,\n (data) => {\n props.showToastNotificationModal(\n 'success',\n 'Verified',\n item?.product?.common_name || '',\n );\n props.getFullClaim();\n\n },\n props.onError,\n );\n };\n\n function onSubmitAllDesktopAssessments() {\n\n props.showConfirmModal(\n 'success',\n 'Submit all desktop assessments',\n 'Are you sure you want to submit all below selected desktop assessments?',\n 'Submit',\n () => {\n setSubmitAllDesktopAssessments(true);\n\n // Reset to avoid multiple triggers\n setTimeout(() => setSubmitAllDesktopAssessments(false), 300);\n\n setTimeout(() => props.getFullClaim(), 2000);\n setTimeout(() => props.getFullClaim(), 4000);\n setTimeout(() => props.getFullClaim(), 10000);\n },\n );\n\n }\n\n const allProps = {\n ...props,\n selectedSupplier_DA, setSelectedSupplier_DA,\n includeDeliveryFee_DA, setIncludeDeliveryFee_DA,\n desktopAssessAllItems, setDesktopAssessAllItems,\n submitAllDesktopAssessments, setSubmitAllDesktopAssessments,\n supplierOrganisations, setSupplierOrganisations,\n onVerifyManualItem,\n };\n\n const itemCount = props.claim?.items?.length || 0;\n\n const renderItemRows = () => {\n\n if (!props.claim) {\n return ;\n }\n\n return (\n
    \n\n {props.claim.items.map((item) => )}\n\n {/* TEST CODE TO FORCE DIFFERENT ITEM STATES */}\n {/* {(() => {*/}\n {/* let clone = structuredClone(item);*/}\n {/* clone.status = 'CALCULATION_IN_PROGRESS';*/}\n {/* clone.status = 'VERIFICATION';*/}\n {/* clone.status = 'CANNOT_BE_VERIFIED';*/}\n {/* clone.status = 'NEW';*/}\n {/* clone.status = 'TENDERING';*/}\n {/* clone.status = 'DELETED';*/}\n {/* clone.status = 'EXPIRED';*/}\n {/* clone.status = 'UNABLE_TO_TENDER';*/}\n {/* clone.status = 'POST_TENDER_INSPECTION';*/}\n {/* clone.status = 'QUANTIFIED';*/}\n {/* return renderItemRows(clone);*/}\n {/* })()}*/}\n\n
    \n );\n };\n\n function renderButtons() {\n\n const showDesktopAssessAll = props.claim?.items?.find(item => isEmpty(item.desktop_assessment)) || false;\n\n const claimHasItemsInVerification = props.claim?.items.find(item => item.status === 'VERIFICATION');\n\n const disabledStyle = !claimHasItemsInVerification ? 'opacity-40 hover:opacity-100 transition' : '';\n\n const marginPadding = 'm-0 p-2';\n\n return (\n
    \n\n {/* FETCH QUOTES ON ALL ITEMS */}\n {showDesktopAssessAll &&\n \n \n \n }\n\n {/* SUBMIT ALL DESKTOP ASSESSMENTS */}\n \n \n \n\n {/* SELECT SUPPLIER */}\n
    \n setSelectedSupplier_DA(supplier)}\n\n renderOption={(org) =>\n
    \n \n {org?.info.name || ''}\n
    \n }\n\n /* TODO REMOVE THIS use {active}*/\n renderSelected={(org) =>\n org ?\n
    \n \n {org.info.name || ''}\n
    : 'Select a supplier'\n }\n />\n
    \n\n {/* INCLUDE DELIVERY */}\n \n

    Desktop assessment price

    \n {includeDeliveryFee_DA ? 'includes delivery' : 'excludes delivery'}\n
    \n Toggle the inclusion of the delivery fee\n
    }>\n setIncludeDeliveryFee_DA(!includeDeliveryFee_DA)}\n >\n {includeDeliveryFee_DA ?\n
    \n \n {/* Delivery included*/}\n
    \n :\n
    \n \n {/* Delivery excluded*/}\n
    \n }\n \n \n\n {/* VERIFY ALL */}\n \n \n \n\n \n );\n }\n\n function renderHeader() {\n\n return (\n
    \n\n {/* HEADING */}\n

    Products

    \n\n {/* BUTTONS */}\n {renderButtons()}\n\n
    \n );\n }\n\n function renderFootRow() {\n\n return (\n /* ROW*/\n
    \n
    \n\n {/* BUTTONS */}\n {renderButtons()}\n\n
    \n
    \n );\n }\n\n return (\n
    \n\n {/* Only show the header AND footer if the claim is large */}\n {itemCount > 4 &&\n renderHeader()\n }\n\n {renderItemRows()}\n\n {renderFootRow()}\n\n
    \n );\n}\n\nfunction ItemRow(props) {\n\n const [showDesktopAssessment, setShowDesktopAssessment] = useState(false);\n\n const allProps = {\n ...props,\n showDesktopAssessment, setShowDesktopAssessment,\n };\n\n return (\n \n\n
    \n\n {/* STATEMENT OF LOSS */}\n \n \n \n\n {/* REQUESTED PRODUCT */}\n
    \n \n \n \n
    \n\n {/* > */}\n
    \n\n \n\n
    \n\n {/* REPLACEMENT PRODUCT/QUOTE*/}\n
    \n \n \n \n
    \n\n
    \n\n {/* PROGRES BAR */}\n \n\n \n );\n}\n\nfunction StatementOfLoss(props) {\n\n const metadata = props.item.metadata || {};\n\n const claimed_amount = metadata.claimed_amount || null;\n const comment = metadata.comment || '-';\n const date_purchased = metadata.date_purchased || null;\n const incident_location = metadata.incident_location || null;\n const purchase_price = metadata.purchase_price || null;\n // const purchase_source = metadata.purchase_source || null\n // const replacement_quote = metadata.replacement_quote || null\n\n // The input element for uploading attachments\n const itemAttachmentUploadInputRef = useRef(null);\n const itemToUploadAttachmentTo = useRef(null);\n\n function onUploadDocument(file) {\n /* Upload the given attachment */\n\n let sizeInMB = file.size / 1024 / 1024;\n sizeInMB = sizeInMB.toFixed(2);\n\n if (file.size > 7 * 1024 * 1024) { // 7 MB limit\n props.showAlertModal(\n 'info',\n 'File Too Large',\n <>\n

    The chosen file is {sizeInMB}MB, which exceeds the 7MB limit

    \n

    Please compress or upload another smaller file

    \n ,\n );\n return;\n }\n\n uploadFile(\n {\n objectId: props.claim.id,\n objectType: 'claims',\n fileName: file.name,\n file: file,\n },\n (data) => {\n props.showToastNotificationModal('success', 'Attachment uploaded', '');\n\n // Manually add the attachment to the claim\n props.setClaim({...props.claim, attachments: [...props.claim.attachments, data.file]});\n\n // Update claim.attachments\n props.updateGlobalClaim(props.claimId, props.setClaim);\n\n linkAttachmentToItem(data.file);\n\n },\n props.onError,\n );\n }\n\n function linkAttachmentToItem(attachment) {\n /* Link an attachment to an item */\n\n if (!itemToUploadAttachmentTo.current) {\n props.showAlertModal('info', 'No item object', 'Failed to link attachment to item');\n return;\n }\n\n customGraphRequest(\n `mutation UpdateItemMetadata{\n update_item_metadata(\n item_id: \"${itemToUploadAttachmentTo.current.id}\"\n attachment_ids: [\"${attachment.id}\"]\n ){\n error{ message, type }\n item{id}\n }\n }`,\n (data) => {\n props.showToastNotificationModal(\n 'success', 'Attachment linked', '',\n );\n props.updateGlobalClaim(props.claimId, props.setClaim);\n },\n (error) => props.onError(error),\n );\n }\n\n function updateMetadata(itemId, metadata) {\n\n function isNullUndefined(value) {\n return value === null || value === undefined;\n }\n\n const mutation = `\n mutation UpdateItemMetadata{\n update_item_metadata(\n item_id: \"${itemId}\"\n ${isNullUndefined(metadata.clients_quote) ? '' : `replacement_quote: ${metadata.clients_quote}`}\n ${isNullUndefined(metadata.incident_location) ? '' : `incident_location: \"${metadata.incident_location}\"`}\n ${isNullUndefined(metadata.comment) ? '' : `comment: \"${metadata.comment}\"`}\n ${isNullUndefined(metadata.claimed_amount) ? '' : `claimed_amount: ${metadata.claimed_amount}`}\n ${isNullUndefined(metadata.date_purchased) ? '' : `date_purchased: \"${metadata.date_purchased}\"`}\n ${isNullUndefined(metadata.purchase_price) ? '' : `purchase_price: ${metadata.purchase_price}`}\n ){\n error{ message, type }\n item{id}\n }\n }\n `;\n\n customGraphRequest(\n mutation,\n (data) => {\n props.showToastNotificationModal(\n 'success', 'Updated', '',\n );\n props.updateGlobalClaim(props.claimId, props.setClaim);\n },\n (error) => props.onError(error),\n );\n\n }\n\n function updateClientQuote(itemID, price) {\n\n if (!price) return props.showAlertModal('info', 'Invalid price', 'The price must be a positive number');\n\n updateItemClaimantQuote(\n itemID,\n price,\n (data) => {\n props.showToastNotificationModal('success', 'Claimant quote update');\n },\n (error) => props.onError(error),\n );\n }\n\n const clearStyle = 'bg-transparent border-none outline-none focus:outline-none shadow-none p-0 m-1';\n // Statement of loss styles\n const rowContainer = 'flex gap-2 w-full pt-2 h-[2rem] ';\n const rowTitle = 'w-full text-gray-400 group-hover:text-gray-800 transition font-light group-hover:font-bold text-xs ';\n const rowValue = `w-full ${clearStyle} text-right self-end `;\n\n return (\n
    \n\n {/* Hidden file input, for uploading attachments */}\n {\n const file = event.target.files[0];\n if (file) {\n onUploadDocument(file);\n }\n }}\n />\n\n \n Statement of loss details\n
    \n

    Click to edit values

    \n
    }\n >\n\n
    \n\n {/* CLIENT */}\n
    \n

    Client

    \n {\n // Replace the value with 0 if it's an empty input\n const value = e.target.value ? e.target.value : 0;\n updateMetadata(props.item.id, {clients_quote: value});\n\n // TODO the above \"replacement_quote\" is not updating the item's claimant_quote\n // So additionally use the old method for now\n updateClientQuote(props.item.id, value);\n }}\n className={rowValue}\n containerClassName={'w-full'}\n />\n
    \n\n {/* CLAIMED */}\n
    \n

    Claimed

    \n {\n // Don't trigger if no change\n if (e.target.value === claimed_amount) return;\n // Replace the value with 0 if it's an empty input\n const value = e.target.value ? e.target.value : 0;\n updateMetadata(props.item.id, {claimed_amount: value});\n }}\n className={rowValue}\n containerClassName={'w-full'}\n />\n
    \n\n {/* PURCHASED FOR */}\n
    \n

    Purchased for

    \n {\n // Replace the value with 0 if it's an empty input\n const value = e.target.value ? e.target.value : 0;\n updateMetadata(props.item.id, {purchase_price: value});\n }}\n className={rowValue}\n containerClassName={'w-full'}\n />\n
    \n\n {/* PURCHASED ON */}\n
    \n

    Purchased on

    \n {\n if (!e.target.value) return;\n updateMetadata(props.item.id, {date_purchased: e.target.value});\n }}\n className={classNames(\n rowValue,\n 'text-gray-400',\n props.item.metadata?.date_purchased ? 'text-gray-800' : 'text-gray-400',\n )}\n />\n
    \n\n {/* SPACE */}\n
    \n

    Space

    \n {\n // Replace the value with 0 if it's an empty input\n const value = e.target.value ? e.target.value : 0;\n updateMetadata(props.item.id, {incident_location: value});\n }}\n className={rowValue + ' pr-4 m-0'}\n />\n
    \n\n {/* COMMENT */}\n
    \n

    Comments

    \n\n
    \n \n Full comment\n
    \n

    {comment}

    \n
    }\n position='right'\n className='max-w-[20rem] m-0 p-0'\n containerClassName='w-full m-0 p-0'\n hidden={comment.length < 20}\n >\n 20 ? comment.substring(0, 10) + '...' : comment}\n onBlur={(e) => {\n // Replace the value with 0 if it's an empty input\n const value = e.target.value ? e.target.value : 0;\n updateMetadata(props.item.id, {comment: value});\n }}\n className={rowValue + 'm-0 pr-4'}\n />\n \n
    \n
    \n\n {/* ATTACHMENTS */}\n
    \n

    Attachments

    \n\n {\n itemToUploadAttachmentTo.current = props.item;\n itemAttachmentUploadInputRef.current.click();\n }}\n >\n {props.item.metadata?.attachments?.length > 0 ?\n (\n <>\n \n {props.item.metadata?.attachments?.length}

    \n \n )\n :\n \n }\n
    \n \n\n \n \n \n );\n\n}\n\nfunction ItemStatusFlow({item}) {\n\n const display_status = displayStatuses[item['status']];\n const status_step = statusSteps[display_status];\n\n let secondStatus = '...';\n let progress = '20%';\n let gridCols = 'grid-cols-3';\n\n if (status_step > 0) {\n\n if (item.is_tender_item) {\n secondStatus = 'Tendering';\n gridCols = 'grid-cols-4';\n\n if (item.status === 'TENDERING') {\n progress = '38%';\n } else if (item.status === 'POST_TENDER_INSPECTION') {\n progress = '63%';\n }\n\n } else if (item.is_manual) {\n secondStatus = 'Desktop assessment';\n progress = '50%';\n } else {\n secondStatus = '';\n }\n }\n\n if (status_step === 3) {\n progress = '100%';\n }\n\n let statusTextColor = 'text-gray-400';\n let statusBarColor = 'bg-sky-600';\n\n if (item.status === 'CANNOT_BE_VERIFIED' || item.status === 'EXPIRED' || item.status === 'DELETED' || item.status === 'UNABLE_TO_TENDER') {\n statusTextColor = 'text-rose-500';\n statusBarColor = 'bg-rose-400';\n }\n\n return (\n
    \n\n {/* PROGRESS BAR */}\n
    \n \n
    \n\n {/* STATUS TEXT */}\n \n\n
    \n );\n}\n\nfunction Item_RequestedProduct(props) {\n\n const navigate = useNavigate();\n\n function getVerifiedBy() {\n\n const userId = props.item.product?.metadata?.verified_by;\n\n if (!userId) return

    ;\n\n const userData = props.verifiedByUsers.find(user => user.id === userId);\n\n if (userData) {\n return

    Verified by: {userData.info.full_name}

    ;\n } else {\n return

    Verified by: {userId}

    ;\n }\n\n }\n\n const item = props.item;\n\n function itemDetails() {\n return (\n
    \n\n
    \n

    \n {item.is_manual ? item.product.brand || item.product.model_numbers[0] : item.product.common_name}\n

    \n
    \n\n
    \n

    \n {item.is_manual ? `${item.product.brand} | ${item.product.description}` : calculateProperties(item.product)}\n

    \n
    \n
    \n {item.product.model_number !== null ? (\n

    {item.product.model_number}

    \n ) : (\n

    \n {item.product.model_numbers?.slice(0, 3).join(' | ') || ''}\n

    \n )}\n {item.is_manual ? `${formatAsTitle(item.category.category_a)} > ${formatAsTitle(item.product.category)}` : ''}\n\n {getVerifiedBy()}\n
    \n\n

    {item.product.type === 'MANUAL' ? item.product.description : calculateProperties(item.product)}

    \n\n {/* MANUAL TAG */}\n {item.is_manual &&\n
    \n Manual item\n
    \n }\n
    \n );\n }\n\n const generateAIProtoStates = {\n IDLE: 'IDLE',\n IN_PROGRESS: 'IN_PROGRESS',\n SUCCESS: 'SUCCESS',\n };\n const [generateAIProtoState, setGenerateAIProtoState] = useState('IDLE');\n\n function generateAIProto() {\n\n setGenerateAIProtoState(generateAIProtoStates.IN_PROGRESS);\n\n props.showToastNotificationModal('success', 'AI Generation In Progress', `${item.product.common_name} is being generated`, 5000);\n\n generateAiProto(\n item.product.category,\n item.product.brand,\n item.product.model_number || item.product.model_numbers[0] || null,\n item.id,\n null,\n (data) => {\n console.log('Generate AI Proto response: ', data);\n\n setGenerateAIProtoState(generateAIProtoStates.SUCCESS);\n\n /** Success */\n if (data['response_success']) {\n props.showToastNotificationModal(\n 'success',\n 'AI Producted Generated',\n `${item.product.common_name} Product has successfully been generated and added to this claim`,\n 5000,\n );\n props.getFullClaim();\n\n // Open the new product in the product modal\n props.setProductInfoModalOptions({\n 'product': data['new_claim_item']['product'],\n 'onProductAdded': null,\n 'item': data['new_claim_item'],\n 'mode': 'edit',\n });\n props.setProductInfoModalOpen(true);\n }\n\n /** Failed */\n else {\n\n setGenerateAIProtoState(generateAIProtoStates.IDLE);\n\n props.showAlertModal(\n 'error',\n 'AI Generation Request Failed',\n (\n
    \n

    Failed to generate a catalogue product from this manual item.

    \n\n
    \n Reason:\n

    \n {data['response_info'] ?\n JSON.stringify(data['response_info']) :\n No reason has been provided\n }\n

    \n
    \n\n
    \n

    \n This product can still be created manually:\n

    \n {\n showProductInfoModal(item);\n }}\n className=\"btn ml-0 mb-6\">\n \n Create proto manually\n \n
    \n\n
    \n ));\n }\n\n },\n (error) => {\n\n setGenerateAIProtoState(generateAIProtoStates.IDLE);\n\n // do not show the standard error modal for the generate_ai_proto mutation\n props.showAlertModal('error', 'AI Request Failed', 'Failed to generate a catalogue product from this manual item');\n\n console.error('Generate AI Proto response: ', error);\n },\n );\n\n }\n\n const showProductInfoModal = (item) => {\n\n props.setProductInfoModalOptions({\n 'product': item.product,\n 'onProductAdded': null,\n 'item': item,\n 'mode': 'edit',\n });\n\n props.setProductInfoModalOpen(true);\n };\n\n\n function itemButtons() {\n\n const claimHasItemsInVerification = props.claim?.items.find(item => item.status === 'VERIFICATION');\n\n const btnStyle = 'text-sky-600 hover:text-sky-500 cursor-pointer btn-icon';\n const ignoreStyle = 'point-events-none text-gray-300 hover:text-gray-300';\n const disabledStyle = !claimHasItemsInVerification ? 'opacity-30 pointer-events-none' : '';\n\n\n return (\n
    \n\n {/* EDIT MANUAL ITEM MODAL */}\n \n {\n props.setItemInEditManualItemModal(item);\n props.setShowEditManualItem(true);\n }}\n >\n \n \n \n\n {/* GENERATE PROTO */}\n \n\n {/* LOADING SPINNER */}\n {generateAIProtoState === 'IN_PROGRESS' &&\n \n }\n\n {/* BUTTON */}\n {(generateAIProtoState === 'SUCCESS' || generateAIProtoState === 'IDLE') &&\n \n \n \n }\n\n \n\n {/* CONVERT */}\n \n navigate(`/claim/item-convert/${props.claimId}/${item.id}`)}\n className={classNames(\n btnStyle,\n disabledStyle,\n )}\n >\n \n \n \n\n {/* IGNORE */}\n \n {\n props.showConfirmModal(\n 'info',\n 'Ignore item',\n (

    Are you sure you want to ignore this item? It will be marked as can not be\n verified

    ),\n 'Ignore',\n () => props.onVerifyManualItem(item, 'CANNOT_BE_VERIFIED'),\n );\n }}\n >\n \n \n
    \n\n {/* DESKTOP ASSESS */}\n \n props.setShowDesktopAssessment(!props.showDesktopAssessment)}\n >\n \n \n \n\n
    \n );\n }\n\n return (\n
    \n\n {/* PRODUCT IMAGE */}\n
    \n \n
    \n\n
    \n {itemDetails()}\n\n {itemButtons()}\n
    \n\n
    \n );\n}\n\nfunction Item_ReplacementCard(props) {\n\n if (!props.claim) return <>;\n\n const hasItemsInVerification = () => {\n\n if (!props.claim) {\n return false;\n }\n\n for (const item of props.claim.items) {\n if (item.status === 'VERIFICATION') {\n return true;\n }\n }\n\n return false;\n };\n\n const item = props.item;\n\n // Use a separate variable so that it can be modified\n let itemStatus = item.status;\n\n let replacement = item.replacement;\n if (props.mainOrganisation?.type === 'SUPPLIER') {\n // the replacement is only shown if the item is quantified/post tender\n // if the claim is quantified, the replacement is shown\n // The supplier does not see the item.replacement\n // instead the supplier sees their own quoted replacement in item.supplier_panel[at the supplier].recommended_replacement\n // IF THEY HAVE - SHOW THAT QUOTE AS THE REPLACEMENT\n // IF THEY HAVE NOT - SHOW \"declined to tender\"\n const supplier = item.supplier_panel?.find(supplier => supplier.id === props.mainOrganisation.id) || null;\n replacement = supplier?.recommended_replacement || null;\n if (supplier?.status === 'DECLINED_TENDER') {\n itemStatus = 'UNABLE_TO_TENDER';\n }\n if (supplier?.status === 'UNABLE_TO_TENDER') {\n itemStatus = 'UNABLE_TO_TENDER';\n }\n if (supplier?.status === 'TENDER_DELETED') {\n itemStatus = 'DELETED';\n }\n\n\n }\n\n const replacementProduct = replacement?.product || null;\n const replacementQuote = replacement?.quote || null;\n\n // Find the winning supplier's full object in the supplier panel\n const winningSupplierInPanel = item.supplier_panel?.find(supplier => supplier.id === replacement?.quote?.supplier.id) || null;\n\n const claimHasItemsInVerification = hasItemsInVerification();\n\n const replacementProductCard_calculationInProgress = () => {\n // calculation in progress\n // - CALCULATION_IN_PROGRESS\n return (\n
    \n \n
    \n );\n };\n\n const replacementProductCard_CannotBeVerified = () => {\n return (\n
    \n\n {/* IMAGE */}\n {/* */}\n \n {/* TEXT */}\n
    \n

    Verification

    \n

    This item could not be verified

    \n\n
    \n\n
    \n );\n };\n\n const replacementProductCard_tender = () => {\n\n // 1. Ready to tender (other items in verification)\n // 2. Tender (no other items in verification)\n // - NEW\n // - TENDERING\n\n // READY TO TENDER - AWAITING VERIFICATION\n // if(claimHasItemsInVerification) {\n if (claimHasItemsInVerification || itemStatus === 'NEW') { // TOOD remove this\n return (\n
    \n\n {/* IMAGE */}\n {/* */}\n \n\n {/* TEXT */}\n
    \n

    Ready to tender

    \n

    Awaiting the verification of all items

    \n\n
    \n\n
    \n );\n }\n\n\n // TENDER\n return (\n
    \n
    \n\n {/* IMAGE */}\n {/* */}\n \n\n {/* TEXT */}\n
    \n

    Tendering

    \n

    This item is in tender

    \n

    Potential replacements: {item.possible_replacements?.length || '-'}

    \n\n \n \n Tender\n \n\n
    \n\n\n
    \n\n {/* If this supplier/organisation user has quoted on this item, show their quote/product */}\n {replacementProduct && replacementProductCard_recommendedReplacement()}\n\n
    \n\n );\n };\n\n const replacementProductCard_unableToTender = () => {\n // unable to tender\n // declined to tender\n // - UNABLE_TO_TENDER\n // - DELETED\n // - EXPIRED\n\n if (itemStatus === 'UNABLE_TO_TENDER') {\n return (\n
    \n\n {/* IMAGE */}\n \n\n {/* TEXT */}\n
    \n

    {item.display_status}

    \n

    This item was marked as \"Unable to tender\"

    \n

    No further action will be taken for this item

    \n

    Reason: {item.status_reason}

    \n
    \n\n
    \n );\n }\n\n\n if (itemStatus === 'EXPIRED') {\n return (\n
    \n\n {/* IMAGE */}\n \n\n {/* TEXT */}\n
    \n

    {item.display_status}

    \n

    This item has expired

    \n

    No further action will be taken for this item

    \n
    \n\n
    \n );\n }\n\n if (itemStatus === 'DELETED') {\n return (\n
    \n\n {/* IMAGE */}\n \n\n {/* TEXT */}\n
    \n

    {item.display_status}

    \n

    This item has been deleted

    \n

    No further action will be taken for this item

    \n
    \n\n
    \n );\n }\n\n };\n\n const replacementProductCard_postTender = () => {\n // - POST_TENDER_INSPECTION\n\n return (\n
    \n {replacementProductCard_recommendedReplacement()}\n\n {/* POST TENDER BUTTON */}\n
    \n
    \n \n \n Post tender inspection\n \n
    \n\n
    \n\n\n
    \n\n );\n };\n\n const replacementProductCard_recommendedReplacement = () => {\n\n if (!replacementProduct) return No catalog pricing available;\n\n let supplierImageUrl = null;\n if (replacementQuote !== null) {\n const name = replacementQuote.supplier.unique_reference_name.replaceAll('.', '-')\n .replaceAll('_', '-');\n supplierImageUrl = `https://slvrcld-images.s3.eu-west-1.amazonaws.com/organisations/${name}.png`;\n }\n\n const assessedBy = item?.desktop_assessment?.selected_by || '';\n const DaQuote = item?.desktop_assessment?.selected_product || {};\n\n return (\n
    \n\n {/* IMAGE */}\n \n\n {/* TEXT */}\n
    \n\n {/* RECOMMENDED REPLACEMENT */}\n

    {replacementProduct.common_name}

    \n\n {/* CATEGORY */}\n

    {item.category.display_name}

    \n\n {/* MODAL NUMBER */}\n {replacementProduct.type === 'CATALOGUE' && replacementProduct.model_number !== null && (\n

    {replacementProduct.model_number}

    )}\n {replacementProduct.type === 'CATALOGUE' && replacementProduct.model_number === null && (\n

    {replacementProduct.model_numbers.slice(0, 3).join(' | ')}

    )}\n\n\n {/* DESCRIPTION */}\n

    \n {replacementProduct.type === 'MANUAL' ? replacementProduct.description : calculateProperties(replacementProduct)}\n

    \n\n {/* ASSESSED BY */}\n {assessedBy &&\n

    \n Assessed by: {assessedBy}\n

    \n }\n\n
    \n\n {/* MANUAL TAG */}\n {replacementProduct.type === 'MANUAL' &&\n (\n Manual item\n )\n }\n\n {/* DESKTOP ASSESSMENT QUOTE */}\n {!isEmpty(DaQuote) &&\n \n

    Original desktop assessment quote

    \n

    Click to open

    \n
    \n

    Brand: {DaQuote.brand}

    \n

    Model number: {DaQuote.model_number}

    \n

    Price: {DaQuote.price}

    \n

    Delivery: {DaQuote.delivery_cost_extract || '-'}

    \n

    Description: {DaQuote.description}

    \n

    Source: {DaQuote.source_url?.substring(0, 30) || ''}...

    \n
    }\n style='max-w-[20rem]'\n position='left'\n >\n \n \n \n \n }\n\n
    \n\n {/* QUOTE PRICE */}\n {replacement.quote !== null &&\n\n
    \n\n {/* PRICE */}\n

    \n {currencySymbol(props.claim) + ' ' + parseFloat(replacement.quote.price)\n .toFixed(2)\n .replace(/\\d(?=(\\d{3})+\\.)/g, '$&,')}\n

    \n\n
    \n\n {/* SUPPLIER IMAGE */}\n \n\n {/* SUPPLIER NAME*/}\n {winningSupplierInPanel?.name || replacementQuote.supplier.display_name}\n
    \n\n
    \n\n }\n\n
    \n\n \n );\n\n };\n\n if (props.showDesktopAssessment) return ;\n\n // Return a different card depending on the status of the item\n if (itemStatus === 'CALCULATION_IN_PROGRESS') return replacementProductCard_calculationInProgress();\n if (itemStatus === 'VERIFICATION') return ;\n if (itemStatus === 'CANNOT_BE_VERIFIED') return replacementProductCard_CannotBeVerified();\n if (itemStatus === 'NEW') return replacementProductCard_tender();\n if (itemStatus === 'TENDERING') return replacementProductCard_tender();\n if (itemStatus === 'UNABLE_TO_TENDER' || itemStatus === 'DELETED' || itemStatus === 'EXPIRED') return replacementProductCard_unableToTender();\n if (itemStatus === 'POST_TENDER_INSPECTION') return replacementProductCard_postTender();\n if (itemStatus === 'QUANTIFIED') return replacementProductCard_recommendedReplacement();\n\n}\n\nfunction ReplacementProductCard_DesktopAssess(props) {\n\n // IDLE, PENDING, COMPLETE, FAILED\n const [submittedDesktopAssessment, setSubmittedDesktopAssessment] = useState('IDLE');\n\n // IDLE, NONE, EXISTS, QUERYING\n const [desktopAssessmentState, setDesktopAssessmentState] = useState('IDLE');\n useEffect(() => {\n if (!isEmpty(props.item.desktop_assessment)) {\n setDesktopAssessmentState('EXISTS');\n } else {\n setDesktopAssessmentState('NONE');\n }\n }, [props.item]);\n\n useEffect(() => {\n // Do not trigger on page load\n if (!props.desktopAssessAllItems) return;\n\n const itemIsUnverified = props.item.status === 'VERIFICATION';\n\n // Fetch desktop assessment if the item is unverified and has no desktop assessment data\n if (itemIsUnverified && isEmpty(props.item.desktop_assessment)) {\n onInitiateDesktopAssessing();\n }\n }, [props.desktopAssessAllItems]);\n\n useEffect(() => {\n // Do not trigger on page load\n if (!props.submitAllDesktopAssessments) return;\n\n // Submit this item's desktop assessment\n onSubmitAssessment();\n }, [props.submitAllDesktopAssessments]);\n\n useEffect(() => {\n // Update certain fields affected by the delivery fee\n addDeliveryFeeToDescription();\n }, [props.includeDeliveryFee_DA]);\n\n function addDeliveryFeeToDescription() {\n /** If includeDeliveryFee is true, the delivery fee is added to the quotes description */\n\n // If no quote is selected, return\n if (isEmpty(props.item.selected_quote)) return;\n\n let description = props.item.selected_quote.description;\n const deliveryFee = props.item.selected_quote.delivery_cost_extract || '';\n\n // Remove a previous delivery fee from the description\n if (description.includes(' (Delivery: ')) description = description.split(' (Delivery: ')[0];\n if (description.includes(' (Free delivery)')) description = description.split(' (Free delivery)')[0];\n\n if (props.includeDeliveryFee_DA) {\n if (deliveryFee) {\n description += ` (Delivery: ${currencySymbol(props.claim)}${deliveryFee || '-'})`;\n }\n if (props.item.selected_quote.free_delivery) {\n description += ' (Free delivery)';\n }\n }\n\n props.item.selected_quote.description = description;\n\n updateSelectedQuote(props.item.selected_quote);\n }\n\n function onInitiateDesktopAssessing(buttonHandler) {\n\n const query = `\n query DesktopAssessmentRequest{\n request_desktop_assessment(\n claim_id:\"${props.claimId}\" \n item_ids:[\"${props.item.id}\"]\n ){\n error{\n message\n type\n }\n items{\n id\n product{\n brand\n model_numbers\n description\n }\n claimant_quote\n desktop_assessment{\n entry{\n delivery_cost_extract\n free_delivery\n price\n source_url\n supplier_name\n url_valid\n }\n mid{\n delivery_cost_extract\n free_delivery\n price\n source_url\n supplier_name\n url_valid\n }\n high{\n delivery_cost_extract\n free_delivery\n price\n source_url\n supplier_name\n url_valid\n }\n product_list {\n delivery_cost_extract\n free_delivery\n price\n source_url\n thumbnail\n supplier_name\n brand\n model_number\n description\n price_class\n }\n }\n }\n }\n }\n `;\n\n setDesktopAssessmentState('QUERYING');\n\n customGraphRequest(\n query,\n (data) => {\n // Select the entry quote by default for each item\n\n // Merge the component's item and the desktop assessment item\n const desktopAssessmentItem = data.items?.[0] || {};\n const mergedItem = {...props.item};\n mergedItem.desktop_assessment = desktopAssessmentItem.desktop_assessment;\n\n // Update the item in the claim\n props.setClaim((prev) => {\n const claimCopy = {...prev};\n const _item = claimCopy.items.find(i => i.id === mergedItem.id);\n _item.desktop_assessment = mergedItem.desktop_assessment;\n return claimCopy;\n });\n\n setDesktopAssessmentState('EXISTS');\n\n // Show the \"Continue Assessment\" text on the desktop assessing button\n buttonHandler?.reset();\n },\n (error) => {\n setDesktopAssessmentState('NONE');\n props.onError(error);\n buttonHandler?.onError();\n },\n );\n\n }\n\n function updateSelectedQuote(quoteAndProduct) {\n // Update the selected quote for the item\n props.setClaim((prev => {\n const claimCopy = {...prev};\n const _item = claimCopy.items.find(i => i.id === props.item.id);\n _item.selected_quote = quoteAndProduct;\n return claimCopy;\n }));\n }\n\n function getBrandRecommendations() {\n /* Return a list of terms for the brand dropdown */\n if (!props.item.selected_quote || !props.item.selected_quote?.description) return [];\n return cumulativeSplit(props.item.selected_quote.description);\n }\n\n function getModelRecommendations() {\n /* Return a list of terms for the model number dropdown */\n if (!props.item.selected_quote || !props.item.selected_quote?.description) return [];\n\n // Remove the brand from the beginning of the description\n let description = props.item.selected_quote.description;\n const brandWords = props.item.selected_quote.brand?.split(' ') || [];\n for (const word of brandWords) {\n // replace the first occurrence of the word\n description = description.replace(word, '').trim();\n }\n\n return cumulativeSplit(description);\n }\n\n function cumulativeSplit(text) {\n /**\n * Returns cumulative phrases from the input string\n *\n * @example\n * text = \"this is a test string\"\n * // Output: [\"this\", \"this is\", \"this is a\", \"this is a test\", \"this is a test string\"]\n */\n\n const words = text.split(' ');\n // Remove the first word if it is not a letter or number\n if (!/[a-zA-Z0-9]/.test(words[0])) words.shift();\n\n const result = [];\n for (let i = 1; i <= words.length; i++) {\n\n // If the last word (next additional word) does not contain a letter or a number\n // then ignore that phrase\n // E.g: \"this is a test -\" should be ignored, since only a \"-\" has been added\n const phraseWords = words.slice(0, i);\n const lastWord = phraseWords[i - 1];\n\n if (/[a-zA-Z0-9]/.test(lastWord)) {\n const phrase = phraseWords.join(' ');\n result.push(phrase);\n }\n }\n return result;\n }\n\n function onSelectQuote(product) {\n // Update the selected quote for the item\n\n // -- Delivery fee in the description\n let description = product.description;\n\n // Remove a previous delivery fee from the description\n if (description.includes(' (Delivery: ')) description = description.split(' (Delivery: ')[0];\n\n if (props.includeDeliveryFee_DA) {\n if (product.delivery_cost_extract) {\n description += ` (Delivery: ${currencySymbol(props.claim)}${product.delivery_cost_extract || '-'})`;\n }\n if (product.free_delivery) {\n description += ' (Free delivery)';\n }\n }\n\n // -- Auto populate brand and model number\n let brand = product.brand;\n let model_number = product.model_number || product.model_numbers?.[0];\n try {\n // replace all none letter or number characters with a space\n const descriptionWords = product?.description?.replaceAll(/[^a-zA-Z0-9]/g, ' ').split(' ') || ['-'];\n brand = descriptionWords[0];\n\n // model number is the second, to 5th word in the description\n model_number = descriptionWords.slice(1, 5).join(' ');\n } catch (e) {\n console.error('Error creating brand and model from description: ', e);\n }\n\n const selected_quote = {\n ...product,\n model_number: model_number,\n brand: brand,\n original_quote: {\n ...product,\n model_number: product.model_number || product.model_numbers?.[0],\n },\n description: description,\n };\n\n updateSelectedQuote(selected_quote);\n }\n\n function getQuotePrice(quote) {\n /* A desktop assessment object as a input\n * Return the quote price, optionally including the delivery fee */\n\n if (!quote || !quote.price) return '-';\n\n const price = parseFloat(quote.price) || 0;\n const deliveryCost = parseFloat(quote.delivery_cost_extract) || 0;\n const freeDelivery = quote.free_delivery || false;\n\n let totalPrice = props.includeDeliveryFee_DA ? price + deliveryCost : price;\n if (freeDelivery) totalPrice = price;\n\n // Round down to two decimal points\n totalPrice = Math.floor(totalPrice * 100) / 100;\n\n return totalPrice;\n }\n\n function onSubmitAssessment(buttonHandler) {\n /* If any selected_quotes are missing required fields,\n warn the user that these will be ignored */\n\n let invalidQuote = false;\n\n const item = props.item;\n\n if (isEmpty(item.selected_quote)) {\n // If no quote is selected, just return\n return;\n }\n\n if (!item.selected_quote ||\n !item.selected_quote.brand ||\n !item.selected_quote.model_number ||\n !item.selected_quote.description ||\n !item.selected_quote.price ||\n !item.selected_quote.source_url\n ) {\n invalidQuote = true;\n }\n\n if (invalidQuote) {\n\n buttonHandler?.reset();\n\n props.showAlertModal(\n 'info',\n 'Missing fields',\n (
    \n

    Item: {item.product.common_name}

    \n
    \n Please ensure all the fields are filled:\n

    Brand, Model number, Price, Description, Source url

    \n
    ),\n );\n } else {\n\n // Prevent multiple submissions at once, by adding a random delay\n const randomDelay = Math.floor(Math.random() * 1000); // Random delay between 0 and 1 second\n\n setTimeout(submitDesktopAssessment, randomDelay);\n }\n\n }\n\n function submitDesktopAssessment(buttonHandler) {\n\n buttonHandler?.onLoading();\n\n const payloads = assessmentPayload();\n\n if (isEmpty(payloads)) {\n props.showAlertModal(\n 'info',\n 'No items/levels selected',\n 'No levels for any items have been selected for desktop assessment',\n );\n buttonHandler?.onError('No items selected for desktop assessment');\n return;\n }\n\n if (isEmpty(props.selectedSupplier_DA)) {\n props.showAlertModal(\n 'info',\n 'Select a supplier',\n 'No supplier has been selected',\n );\n buttonHandler?.onError();\n return;\n }\n\n const quote = props.item.selected_quote;\n\n if (!quote) {\n buttonHandler?.reset();\n props.showAlertModal(\n 'info',\n 'Missing fields',\n 'No quote selected',\n );\n }\n if (!quote.brand ||\n !quote.model_number ||\n !quote.description ||\n !quote.source_url ||\n !quote.thumbnail\n ) {\n props.showAlertModal(\n 'info',\n 'Missing fields',\n
    \n

    Please ensure all the fields are filled:

    \n

    Brand: quote.brand

    \n

    Model number: quote.model_number

    \n

    Description: quote.description

    \n

    Source url: quote.source_url

    \n

    Thumbnail: quote.thumbnail

    \n
    ,\n );\n return;\n }\n\n const mutation = `\n mutation ResolveAssessment {\n resolve_desktop_assessment_for_item(\n item_id: \"${props.item.id}\"\n supplier_id: \"${props.selectedSupplier_DA.id}\"\n brand: \"${escapeDoubleQuotes(quote.brand)}\"\n model_number: \"${escapeDoubleQuotes(quote.model_number)}\"\n description: \"${escapeDoubleQuotes(quote.description)}\"\n price: ${getQuotePrice(quote)}\n source_url: \"${quote.source_url}\"\n thumbnail: \"${quote.thumbnail}\" \n ){\n error{type, message}\n item {\n id\n is_tender_item\n claimant_quote\n is_manual\n status\n quantity\n status_reason\n type\n metadata{\n claimed_amount\n comment\n date_purchased\n incident_location\n purchase_price\n purchase_source\n replacement_quote\n attachments{\n id\n object_type\n content_type\n date_created\n date_updated\n file_name\n object_id\n user{\n id\n username\n }\n url\n }\n }\n category {\n id\n category_a\n display_name\n }\n \n supplier_panel {\n id\n name\n unique_reference_name\n status\n supplier {\n id\n info {\n name\n country\n currency\n currency_symbol\n logo_image_url\n }\n }\n recommended_replacement {\n product {\n id\n \n brand\n category\n common_name\n description\n \n status\n type\n \n metadata\n model_number\n model_numbers\n \n images {\n main\n thumbnail_web\n thumbnail_print\n }\n \n }\n quote {\n id\n status\n country\n currency\n currency_symbol\n is_manual\n price\n brand\n description\n supplier {\n id\n unique_reference_name\n display_name\n }\n }\n }\n }\n \n desktop_assessment{\n selected_by\n selected_supplier\n \n selected_product{\n delivery_cost_extract\n free_delivery\n price\n rating\n reviews\n source_url\n thumbnail\n supplier_name\n brand\n model_number\n description\n price_class\n }\n \n product_list{\n delivery_cost_extract\n free_delivery\n price\n rating\n reviews\n source_url\n thumbnail\n supplier_name\n brand\n model_number\n description\n price_class\n }\n \n entry{\n delivery_cost_extract\n free_delivery\n price\n source_url\n supplier_name\n url_valid\n }\n mid{\n delivery_cost_extract\n free_delivery\n price\n source_url\n supplier_name\n url_valid\n }\n high{\n delivery_cost_extract\n free_delivery\n price\n source_url\n supplier_name\n url_valid\n }\n \n product_list {\n price\n }\n }\n \n possible_replacements {\n quotes {\n id\n supplier {\n unique_reference_name\n }\n }\n }\n product {\n id\n \n brand\n category\n common_name\n description\n \n status\n type\n \n metadata\n model_number\n model_numbers\n \n ai_generated\n \n images {\n main\n thumbnail_web\n thumbnail_print\n }\n \n }\n replacement {\n product {\n id\n \n brand\n category\n common_name\n description\n \n status\n type\n \n metadata\n model_number\n model_numbers\n \n images {\n main\n thumbnail_web\n thumbnail_print\n }\n \n }\n quote {\n id\n status\n country\n currency\n currency_symbol\n price\n brand\n date_expiry\n is_manual\n description\n match_accuracy\n supplier {\n id\n unique_reference_name\n display_name\n }\n }\n note\n date_selected\n selected_by\n is_system_selected\n }\n }\n }\n }\n `;\n\n setSubmittedDesktopAssessment('PENDING');\n\n customGraphRequest(\n mutation,\n (data) => {\n props.showToastNotificationModal(\n 'success',\n 'Resolved Successfully',\n 'The desktop assessment has been submitted successfully',\n );\n buttonHandler?.onSuccess();\n props.setShowDesktopAssessment(false);\n setSubmittedDesktopAssessment('SUCCESS');\n\n // Update the item in the claim\n props.setClaim((prev) => {\n const claimCopy = {...prev};\n let _item = claimCopy.items.find(i => i.id === data.item.id);\n _item = {..._item, ...data.item};\n return claimCopy;\n });\n\n },\n (error) => {\n setSubmittedDesktopAssessment('FAILURE');\n props.onError(error);\n buttonHandler?.onError();\n },\n );\n\n }\n\n // TODO - Remove this function\n function submitDesktopAssessment_old(buttonHandler) {\n\n buttonHandler.onLoading();\n\n const payloads = assessmentPayload();\n\n if (isEmpty(payloads)) {\n props.showAlertModal(\n 'info',\n 'No items/levels selected',\n 'No levels for any items have been selected for desktop assessment',\n );\n buttonHandler.onError('No items selected for desktop assessment');\n return;\n }\n\n if (isEmpty(props.selectedSupplier_DA)) {\n props.showAlertModal(\n 'info',\n 'Select a supplier',\n 'No supplier has been selected',\n );\n buttonHandler.onError();\n return;\n }\n\n const mutation = `\n mutation ResolveAssessment {\n resolve_desktop_assessment(\n claim_id: \"${props.claimId}\"\n supplier_id: \"${props.selectedSupplier_DA.id}\"\n assessment_payloads: [${payloads}]\n ){\n error{type, message}\n items{\n id\n }\n }\n }\n `;\n\n customGraphRequest(\n mutation,\n (data) => {\n props.showToastNotificationModal(\n 'success',\n 'Resolved Successfully',\n 'The desktop assessment has been submitted successfully',\n );\n buttonHandler.onSuccess();\n props.getFullClaim();\n props.setShowDesktopAssessment(false);\n },\n (error) => {\n props.onError(error);\n buttonHandler.onError();\n },\n );\n\n }\n\n function assessmentPayload() {\n /* Create the assessment payload\n assessment_payloads:[\n {\n item_id: \"\"\n\n // original product\n brand: \"\"\n description: \"\"\n model_number: \"\"\n\n // selected quote\n desktop_replacements: [\n {\n brand: \"Chaka\"\n description: \"Bag of charcoal\"\n model_number: \"ch1x\"\n price: 60\n source_url: \"https://www.example.com/source1\"\n }\n ]\n\n }\n ]\n */\n\n const item = props.item;\n\n const payload = ` \n {\n item_id: \"${item.id}\",\n \n brand: \"${escapeDoubleQuotes(item.product.brand)}\",\n description: \"${escapeDoubleQuotes(item.product.description)}\",\n model_number: \"${escapeDoubleQuotes(item.product.model_numbers[0])}\",\n \n desktop_replacements: [\n {\n brand: \"${escapeDoubleQuotes(item.selected_quote.brand)}\"\n description: \"${escapeDoubleQuotes(item.selected_quote.description)}\"\n model_number: \"${escapeDoubleQuotes(item.selected_quote.model_number)}\"\n price: ${getQuotePrice(item.selected_quote)}\n source_url: \"${escapeDoubleQuotes(item.selected_quote.source_url)}\"\n }\n ]\n }\n `;\n\n return payload;\n\n }\n\n // Render\n function renderDesktopAssessmentCard() {\n\n const item = props.item;\n\n return (\n
    \n\n
    \n\n {/* QUOTES */}\n onSelectQuote(selectedProductQuote)}\n\n renderOption={(product) =>\n
    \n\n
    \n \n
    \n\n
    \n\n
    \n

    {currencySymbol(props.claim)}   {getQuotePrice(product)}

    \n\n
    \n \n

    {product?.price || '-'}

    \n
    \n\n
    \n \n

    \n {product?.delivery_cost_extract || '-'}\n   {product?.free_delivery && ' free delivery'}\n

    \n
    \n
    \n\n
    \n\n
    \n

    {product?.brand || '-'}

    \n

    {product?.model_number || '-'}

    \n {product?.price_class || '-'}\n
    \n\n
    \n\n
    \n

    {product?.description || '-'}

    \n\n \n {product?.supplier_name}\n \n \n
    \n\n
    \n }\n\n renderSelected={(org) =>\n

    {item.desktop_assessment?.product_list?.length} Quotes

    \n }\n />\n\n {/* PRODUCT PREVIEW */}\n \n\n {/* BUTTONS */}\n
    \n\n
    \n {/* VERIFY */}\n \n

    Verify manual item

    \n
    \n

    Send to tender

    \n
    }\n className='max-w-[400%]'>\n \n \n\n {/* CLEAR QUOTE */}\n \n \n \n
    \n\n {/* SUBMIT */}\n \n

    Submit product and quote

    \n {item.replacement &&\n <>\n
    \n

    This will overwrite the existing replacement

    \n \n }\n
    }\n className='max-w-[400%]'\n >\n }\n loadingContent={}\n />\n \n\n
    \n\n \n\n
    \n\n
    \n\n {/* BRAND*/}\n
    \n {\n const updateProduct = item.selected_quote;\n updateProduct.brand = e.target.value;\n updateSelectedQuote(updateProduct);\n }}\n />\n
    \n
      \n {getBrandRecommendations().map((phrase, index) =>\n {\n const updateProduct = item.selected_quote;\n updateProduct.brand = phrase;\n updateSelectedQuote(updateProduct);\n }}\n >\n {phrase}\n ,\n )}\n
    \n
    \n
    \n\n {/* MODEL */}\n
    \n {\n const updateProduct = item.selected_quote;\n updateProduct.model_number = e.target.value;\n updateSelectedQuote(updateProduct);\n }}\n />\n\n
    \n
      \n {getModelRecommendations().map((phrase, index) =>\n {\n const updateProduct = item.selected_quote;\n updateProduct.model_number = phrase;\n updateSelectedQuote(updateProduct);\n }}\n >\n {phrase}\n ,\n )}\n
    \n
    \n
    \n\n
    \n\n {/* URL */}\n
    \n {\n const updateProduct = item.selected_quote;\n updateProduct.source_url = e.target.value;\n updateSelectedQuote(updateProduct);\n }}\n />\n \n \n \n \n \n\n
    \n\n
    \n\n {/* PRICE */}\n \n

    \n Quote: {currencySymbol(props.claim)} {item.selected_quote?.original_quote?.price}\n

    \n

    \n Delivery: {currencySymbol(props.claim)} {item.selected_quote?.original_quote?.delivery_cost_extract || 0}\n

    \n

    \n Delivery Free: \n {\n (item.selected_quote?.original_quote?.free_delivery === true && 'Yes') ||\n (item.selected_quote?.original_quote?.free_delivery === false && 'No')\n }\n

    \n {item.claimant_quote &&\n

    \n Claimant\n quote*: {currencySymbol(props.claim)} {item.claimant_quote}\n

    \n }\n
    \n }\n >\n {\n const updateProduct = item.selected_quote;\n updateProduct.price = e.target.value;\n // // If the user is inputting a price, then ignore the delivery cost\n updateProduct.delivery_cost_extract = 0;\n updateSelectedQuote(updateProduct);\n\n }}\n className={classNames(\n 'input pl-8 w-full',\n\n // If there is a claimant quote, then color the prices\n item.claimant_quote && parseInt(item.claimant_quote) === parseInt(item.selected_quote?.price) && 'text-yellow-600',\n item.claimant_quote && item.claimant_quote < item.selected_quote?.price && 'text-red-500',\n item.claimant_quote && item.claimant_quote > item.selected_quote?.price && 'text-green-600',\n )}\n />\n \n\n {/* TODO */}\n {/* ASSESSED BY */}\n {/* */}\n\n
    \n\n\n {/* DESCRIPTION */}\n
    \n {\n const updateProduct = item.selected_quote;\n updateProduct.description = e.target.value;\n updateSelectedQuote(updateProduct);\n }}\n />\n
    \n\n \n\n \n );\n }\n\n // Loading spinner\n if (desktopAssessmentState === 'QUERYING' || submittedDesktopAssessment === 'PENDING') {\n return (\n \n );\n }\n\n // No desktop assessment data\n if (isEmpty(props.item.desktop_assessment)) {\n return (\n
    \n
    \n \n \n Fetch quotes\n }\n />\n
    \n
    \n );\n\n }\n\n return (\n
    \n {renderDesktopAssessmentCard()}\n
    \n );\n}\n","import {useEffect, useRef} from 'react';\n\n\nexport default function useInterval(callback, delay){\n const savedCallback = useRef();\n\n // Remember the latest callback.\n useEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n // Set up the interval.\n useEffect(() => {\n function tick(){\n savedCallback.current();\n }\n\n if (delay !== null) {\n let id = setInterval(tick, delay);\n return () => clearInterval(id);\n }\n }, [delay]);\n}","// Library imports\n\nimport React, {Fragment, useEffect, useState} from 'react';\nimport {Combobox, Dialog, Transition} from '@headlessui/react';\nimport {DocumentReportIcon, XIcon} from '@heroicons/react/outline';\nimport {CheckIcon, SelectorIcon} from '@heroicons/react/solid';\n\n// Local imports\nimport {createManualQuote} from '../../../utils/coreApi.js';\nimport {classNames} from '../../../utils/helpers.js';\nimport {useNavigate} from 'react-router-dom';\nimport ApiButton from \"../../../components/base/ApiButton\";\nimport LoadingSpinner from \"../../../components/ui/LoadingSpinner\";\n\n\nexport default function CreateManualQuoteModal(props){\n\n // Data state\n const [replacementQuery, setReplacementQuery] = useState('');\n const [selectedReplacementProduct, setSelectedReplacementProduct] = useState(null);\n\n const navigate = useNavigate();\n\n // onClick functions\n useEffect(() => {\n\n // first set the default replacement to the defaultSelectedReplacementData, second to the supplierRecommendedReplacement, or NULL\n let recommendedReplacement = props.options?.defaultSelectedReplacementData || props.options?.supplierRecommendedReplacement || null;\n setSelectedReplacementProduct(recommendedReplacement?.product || null);\n\n }, [props.options]);\n\n\n const onClose = () => {\n\n props.setOpen(false);\n setSelectedReplacementProduct(null);\n };\n\n const onCreateManualQuoteClicked = (buttonHandler) => {\n\n if (selectedReplacementProduct === null) {\n props.onError({\n 'type': 'Invalid Input',\n 'message': 'A replacement must be selected.'\n });\n\n buttonHandler.onError('Invalid replacement');\n return;\n }\n\n let options = props.options;\n\n let productId = selectedReplacementProduct.id;\n let supplierId = options.supplier.id;\n\n let reason = document.getElementById('reason').value;\n reason = reason.trim() === 'Best replacement' ? 'Best replacement' : reason; // replace the default \"Best replacement\" with \"none\"\n\n let price = document.getElementById('price').value;\n let validityPeriod = document.getElementById('validityPeriod').value;\n\n createManualQuote(\n productId, supplierId, reason, price, validityPeriod, options.item.id,\n (data) => {\n props.onConfirmClicked(data);\n props.setOpen(false);\n setSelectedReplacementProduct(null);\n },\n (error) => {\n props.onError(error);\n }\n );\n\n return false;\n };\n\n const onReplacementSelected = (newReplacement) => {\n\n setSelectedReplacementProduct(newReplacement);\n };\n\n const replacementField = () => {\n\n if (props.options === undefined || props.options === null) {\n return (
    );\n }\n\n let replacements = [];\n\n for (let possibleReplacement of props.options.item.possible_replacements) {\n replacements.push(possibleReplacement.product);\n }\n\n const filteredReplacements =\n replacementQuery === '' ? replacements : replacements.filter(\n (product) => {\n return product.common_name.toLowerCase().includes(replacementQuery.toLowerCase());\n }\n );\n\n if (selectedReplacementProduct === null && filteredReplacements.length > 0 && props.open) {\n setSelectedReplacementProduct(filteredReplacements[0]);\n }\n\n return (\n \n Replacement\n
    \n setReplacementQuery(event.target.value)}\n displayValue={(product) => product !== null ? product.common_name : ''}\n />\n \n \n \n\n {filteredReplacements.length > 0 && (\n \n {filteredReplacements.map((product) => (\n \n classNames(\n 'relative cursor-default select-none py-2 pl-3 pr-9',\n active ? 'bg-indigo-600 text-white' : 'text-gray-900'\n )\n }\n >\n {({active, selected}) => (\n <>\n
    \n \n {product.common_name}\n
    \n\n {selected && (\n \n \n \n )}\n \n )}\n \n ))}\n
    \n )}\n
    \n
    \n );\n };\n\n\n const renderFields = () => {\n\n let options = props.options;\n\n let currencySymbol = '';\n let brand = '';\n\n currencySymbol = props.options?.claim?.organisation?.info?.currency_symbol ? ` (${props.options?.claim?.organisation?.info?.currency_symbol})` : '';\n\n if (selectedReplacementProduct) brand = selectedReplacementProduct.brand;\n else if (options !== null) {\n\n if (options.claim !== null && options.claim !== undefined) {\n\n let claim = options.claim;\n currencySymbol = ` (${claim.organisation.info.currency_symbol})`;\n }\n\n brand = options.item.product.brand;\n }\n\n return (\n
    \n {replacementField()}\n
    \n {\n navigate(`/claim/item-add-replacement/${options.claim.id}/${options.item.id}/${options.supplier.id}?category=${options.item.product.category.toLowerCase()}`,\n {\n state: {\n supplierId: props.options.supplier.id,\n quoteModal: 'createQuote'\n }\n }\n );\n }}\n className=\"btn m-0\"\n >\n Add replacement\n \n
    \n
    \n \n
    \n
    {brand}
    \n
    \n
    \n\n
    \n \n
    \n \n
    \n
    \n
    \n \n
    \n \n \n \n \n \n \n \n \n \n \n \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n );\n };\n\n // Page content\n\n return (\n \n {\n }}>\n
    \n \n\n
    \n \n
    \n
    \n
    \n
    \n
    \n New\n Quote\n
    \n \n Close panel\n \n \n
    \n
    \n
    \n

    \n Get started by filling in the information below.\n

    \n
    \n
    \n
    \n
    \n {renderFields()}\n
    \n
    \n
    \n
    \n
    \n
    \n \n Cancel\n \n \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n );\n}\n","import { Fragment } from 'react'\nimport { Dialog, Transition } from '@headlessui/react'\nimport { BanIcon, XIcon } from '@heroicons/react/outline'\n\n\nexport default function DismissTenderModal(props) {\n\n let options = props.options;\n\n const onClose = () => {\n\n props.setOpen(false);\n\n if (options.onClose !== undefined && options.onClose !== null) {\n options.onClose();\n }\n }\n\n const dismissTender = (reason) => {\n\n props.setOpen(false);\n props.onDismissTender(props.options, reason);\n }\n\n return (\n \n \n \n
    \n \n\n
    \n
    \n \n
    \n
    \n
    \n \n Close\n \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n \n Dismiss Tender\n \n
    \n

    \n Please select the reason for dismissing tender. This action cannot be reversed.\n

    \n
    \n
    \n
    \n
    \n
    \n { dismissTender(\"DECLINE_TENDER\") }}\n >\n Decline Tender\n \n { dismissTender(\"UNABLE_TO_TENDER\") }}\n >\n Unable to Tender\n \n \n Cancel\n \n
    \n
    \n \n
    \n
    \n
    \n
    \n )\n}\n","/** This file contains hidden components throughout PORTAL, that assist in development */\n\n\n\n/** This component is present in the Tender page.\n* A button next to the Supplier name, when clicked, will generate random quotes\n* for the items in that supplier*/\nimport {customGraphRequest} from \"../../utils/coreApi\";\nimport Tooltip from \"../Tooltip\";\n\nexport function CreateRandomQuotesForSupplier(props) {\n\n\n function createRandomQuotesForSupplier(supplier_and_items) {\n\n let quotesCreated = 0;\n\n let supplier = supplier_and_items.supplier;\n let items = supplier_and_items.items;\n\n items.forEach(item => {\n\n // random price between 50 and 10000\n let price = Math.floor(Math.random() * 10000) + 50;\n\n // Chance to skip this item\n if (Math.random() < 0.5) {\n return;\n }\n\n quotesCreated++;\n\n const mutation = `\n mutation {\n create_manual_quote(\n item_id:\"${item.id}\"\n product:\"${item.product.id}\" \n supplier:\"${supplier.id}\" \n price:${price} \n validity_period:1 \n reason:\"random quote\" \n ) {\n error {\n type\n message\n }\n quote {\n id\n status\n }\n }\n }\n `\n\n console.log('CREATE RANDOM QUOTE: ', price, item.product.common_name);\n\n customGraphRequest(\n mutation,\n (data) => {\n props.fetchItemsTendering();\n },\n (error) => {\n console.log('ERROR: ', error);\n },\n );\n });\n\n setTimeout(() => props.showToastNotificationModal(\n 'success',\n `${quotesCreated} Random Quotes Created`,\n 'Randomly priced quotes have been created for a 50% random selection of items for this supplier',\n ),\n 1000\n )\n\n }\n\n return (\n createRandomQuotesForSupplier(props.supplier_and_items)}\n >\n \n

    This is a local/dev only feature.

    \n
    \n

    Create a quote for each item in this Supplier

    \n

    Each item has a 50% probability to be skipped

    \n

    Settings:

    \n

    Validity_period: 1

    \n

    reason: random quote

    \n }\n >\n Create random quotes\n \n \n\n );\n\n}\n","// Library imports\nimport React, {\n Fragment,\n useEffect,\n useState\n} from 'react';\nimport {\n useLocation,\n useNavigate,\n useParams\n} from 'react-router-dom';\nimport {\n PencilAltIcon,\n PlusCircleIcon,\n PlusIcon,\n SearchCircleIcon,\n TrashIcon,\n TruckIcon,\n} from '@heroicons/react/outline';\nimport {\n ArrowCircleLeftIcon,\n ArrowDownIcon,\n BanIcon,\n CheckCircleIcon,\n CheckIcon,\n InformationCircleIcon,\n SearchIcon,\n} from '@heroicons/react/solid';\n\n\n// Local imports\nimport NotificationTopRight from '../../components/NotificationTopRight.jsx';\nimport AlertModal from '../modals/AlertModal.jsx';\nimport CreateManualQuoteModal from '../modals/quote_modals/CreateManualQuoteModal.jsx';\nimport DismissTenderModal from '../modals/DismissTenderModal.jsx';\nimport {\n customGraphRequest, deleteTender,\n dismissAllPendingTender,\n dismissTender, fetchClaim,\n queryAccounts,\n updateQuotePrice\n} from '../../utils/coreApi.js';\nimport {\n alertError,\n allReplacementDataForItem,\n classNames,\n isEmpty\n} from '../../utils/helpers.js';\nimport UpdateQuotePriceModal from '../modals/quote_modals/UpdateQuotePriceModal';\nimport UpdateQuoteModal from '../modals/quote_modals/UpdateQuoteModal';\nimport Safe, {safe} from \"../../components/Safe\";\nimport {useDocumentTitle} from \"../../components/PageTitle\";\nimport LoadingSpinner from \"../../components/ui/LoadingSpinner\";\nimport {Combobox, Dialog, Transition} from \"@headlessui/react\";\nimport Tooltip from \"../../components/Tooltip\";\nimport ApiButton from \"../../components/base/ApiButton\";\nimport FilterSelect from \"../../components/base/FilterSelect\";\nimport {BasicImage} from \"../../components/base/BasicImage\";\nimport {CreateRandomQuotesForSupplier} from \"../../components/development_components/DevelopmentComponents\";\nimport { currencySymbol as _currencySymbol } from \"../../utils/helpers.js\";\nimport LimitedEnvironmentAccess from \"../../components/LimitedEnvironmentAccess\";\n\n\nexport default function ClaimTender(props) {\n\n const setTitle = useDocumentTitle(\"Tender\");\n\n const location = useLocation();\n\n const displayStatuses = {\n 'DECLINED_TENDER': 'Declined tender',\n 'NOT_INVITED_TO_TENDER': 'Not invited to tender',\n 'TENDER_COMPLETED': 'Tender completed',\n 'TENDER_DELETED': 'Tender deleted',\n 'TENDER_PENDING': 'Tender pending',\n 'UNABLE_TO_TENDER': 'Unable to tender'\n };\n\n const statusStyles = {\n 'DECLINED_TENDER': 'bg-red-600 text-white',\n 'NOT_INVITED_TO_TENDER': 'bg-yellow-600 text-white',\n 'TENDER_COMPLETED': 'bg-green-600 text-white',\n 'TENDER_DELETED': 'bg-red-600 text-white',\n 'TENDER_PENDING': 'bg-blue-800 text-white',\n 'UNABLE_TO_TENDER': 'bg-red-600 text-white'\n };\n\n // React router\n const navigate = useNavigate();\n const {claimId} = useParams();\n\n // UI states\n const [alertOpen, setAlertOpen] = useState(false);\n const [alertOptions, setAlertOptions] = useState({\n 'heading': '',\n 'message': ''\n });\n\n // Used for success feedback\n const [notificationOpen, setNotificationOpen] = useState(false);\n const [notificationMessage, setNotificationMessage] = useState({\n 'heading': '',\n 'message': ''\n });\n\n const [dismissTenderOpen, setDismissTenderOpen] = useState(false);\n const [dismissTenderOptions, setDismissTenderOptions] = useState(null);\n\n const [createManualQuoteOpen, setCreateManualQuoteOpen] = useState(false);\n const [createManualQuoteOptions, setCreateManualQuoteOptions] = useState(null);\n\n const [editReplacementModalOpen, setEditReplacementModalOpen] = useState(false);\n const [editReplacementModalOptions, setEditReplacementModalOptions] = useState(null);\n\n // Data states\n const [claim, setClaim] = useState(null);\n const [currencySymbol, setCurrencySymbol] = useState(null);\n\n const [suppliersAndItems, setSuppliersAndItems] = useState(null);\n\n const [updateManualQuoteOpen, setUpdateManualQuoteOpen] = useState(false);\n const [updateManualQuoteOptions, setUpdateManualQuoteOptions] = useState(null);\n\n const [showAddSupplierModal, setShowAddSupplierModal] = useState(false);\n const [showAddOnceOffSupplierModal, setShowAddOnceOffSupplierModal] = useState(false);\n const [newlyCreatedAdhocOrganisation, setNewlyCreatedAdhocOrganisation] = useState(null);\n\n\n // On every page load\n useEffect(() => {\n\n if (isEmpty(claim) || isEmpty(suppliersAndItems)) {\n\n // Immediately set the claim to the global claim if it is available\n if(props.globalClaim && props.globalClaim.id === claimId){\n setClaim(props.globalClaim);\n }\n\n // Get the latest version of the claim\n fetchItemsTendering();\n }\n\n }, []);\n\n useEffect(() => {\n try {\n if (!isEmpty(claim)) {\n setCurrencySymbol(claim.organisation?.info?.currency_symbol || ' ');\n }\n } catch (error) {\n if (!currencySymbol) {\n setCurrencySymbol(' ');\n }\n }\n\n if (claim && !props.navbarTopPageContent.claim) props.setNavbarTopPageContent({'claim': claim})\n\n if(claim) setTitle(`Tender : ${claim.insurer_claim_number}`)\n\n\n }, [claim, currencySymbol]);\n\n\n useEffect(() => {\n /** Open the quote modal if a replacement was added */\n checkAutoReopenQuoteModal();\n }, [claim, suppliersAndItems])\n\n const checkAutoReopenQuoteModal = () => {\n /** After adding a replacement item (modal -> add replacement -> select item -> return to Tender page), Check what modal was previously open, and reopen */\n\n if (!location.state || !location.state.quoteModal) return\n if (!claim) return\n if (!suppliersAndItems) return\n\n const fromItemSearch = location.state;\n\n /** Since the claim query has been removed from this page, we need to find the item and supplier data\n * (previously from the claim.items object) from the items_tendering.supplier_and_items state object */\n let item = null\n let supplier = null\n suppliersAndItems.forEach(supplier_items_object => {\n if(item) return\n let _item = supplier_items_object.items.find( item => item.id === fromItemSearch.itemId)\n if(_item) {\n item = _item\n supplier = supplier_items_object.supplier\n }\n })\n\n let product_replacementData = item.possible_replacements.find(replacementData => replacementData.product.id === fromItemSearch.newlyAddedReplacement_productId)\n let supplier_items = suppliersAndItems.find(supplier_items => supplier_items.supplier.id === fromItemSearch.supplierId)\n let supplierDataInTheSupplierPanel = supplier\n\n let recommendedReplacement = supplierDataInTheSupplierPanel?.recommended_replacement || null\n\n if (!supplier_items || !item) return console.error(\"Failed to re-open quote modal\")\n\n let previouslyOpenQuoteModal = fromItemSearch.quoteModal\n\n if (previouslyOpenQuoteModal === 'createQuote') {\n setCreateManualQuoteOptions({\n 'claim': claim,\n 'supplier': supplier_items.supplier,\n 'item': item,\n 'defaultSelectedReplacementData': product_replacementData\n });\n setCreateManualQuoteOpen(true);\n }\n if (previouslyOpenQuoteModal === 'updateQuote') {\n setEditReplacementModalOptions({\n 'claim': claim,\n 'supplier': supplier_items.supplier,\n 'item': item,\n 'supplierRecommendedReplacement': recommendedReplacement,\n 'defaultSelectedReplacementData': product_replacementData\n });\n setEditReplacementModalOpen(true);\n }\n\n // clear the state after navigating back, to prevent unintentionally re-opening the modals\n navigate(`${location.pathname}`, {replace: true, state: null})\n\n }\n\n const fetchItemsTendering = () => {\n\n let queryArgs = `claim:\"${claimId}\"`;\n let query = ITEMS_TENDERING.replace('|placeholder|', queryArgs);\n\n customGraphRequest(\n query,\n (data) => {\n\n setClaim(data['claim']);\n setSuppliersAndItems(data['suppliers_and_items']);\n\n },\n (error) => {\n props.onError(error,\n () => setTimeout(() => navigate('/'), 1000)\n );\n }\n );\n\n };\n\n const promptCreateManualQuote = (supplier, item) => {\n\n setCreateManualQuoteOptions({\n 'claim': claim,\n 'supplier': supplier,\n 'item': item\n });\n\n setTimeout(() => {\n setCreateManualQuoteOpen(true);\n }, 50);\n };\n\n const promptDismissTender = (supplier, item) => {\n\n setDismissTenderOptions({\n 'supplier': supplier.id,\n 'item': item.id\n });\n setDismissTenderOpen(true);\n };\n const onDismissTender = (options, reason) => {\n\n dismissTender(\n options['item'], reason, options['supplier'],\n (data) => {\n\n setNotificationMessage({\n 'heading': 'Tender updated',\n 'message': 'Completed tender for item.'\n });\n setNotificationOpen(true);\n\n setTimeout(() => {\n setNotificationOpen(false);\n }, 1000);\n fetchItemsTendering();\n },\n (error) => {\n alertError(setAlertOpen, setAlertOptions, error);\n }\n );\n };\n\n\n const promptUpdateQuote = (item, supplier, supplierRecommendedReplacement) => {\n\n setEditReplacementModalOptions({\n 'claim': claim,\n 'supplier': supplier,\n 'item': item,\n 'supplierRecommendedReplacement': supplierRecommendedReplacement\n });\n\n setEditReplacementModalOpen(true);\n\n };\n\n\n const onCreateManualQuote = (data) => {\n\n setNotificationMessage({\n 'heading': 'Tender updated',\n 'message': 'Completed tender for item.'\n });\n setNotificationOpen(true);\n\n setTimeout(() => {\n setNotificationOpen(false);\n }, 1000);\n fetchItemsTendering();\n };\n const onSuccessfulEditReplacement = (data) => {\n fetchItemsTendering();\n };\n\n\n const promptCompleteTender = () => {\n\n props.showConfirmModal(\n 'success',\n 'Complete tender',\n 'Please confirm dismissing tender for all pending suppliers in this claim. This action cannot be undone.',\n 'Complete tender',\n onCompleteTender\n );\n\n };\n const onCompleteTender = (event) => {\n\n dismissAllPendingTender(\n claimId,\n (data) => {\n\n setNotificationMessage({\n 'heading': 'Tender updated',\n 'message': 'Completed tender for claim.'\n });\n setNotificationOpen(true);\n\n setTimeout(() => {\n setNotificationOpen(false);\n }, 1000);\n fetchItemsTendering();\n },\n (error) => {\n alertError(setAlertOpen, setAlertOptions, error);\n }\n );\n };\n\n\n const promptUpdateQuotePrice = (item, supplier, supplierRecommendedReplacement) => {\n /** supplierRecommendedReplacement is from the supplier_panel - it is the \"recommended replacement(quote product)\" from the recommendation engine */\n setUpdateManualQuoteOptions({\n 'item': item,\n 'quote': supplierRecommendedReplacement.quote\n });\n setUpdateManualQuoteOpen(true);\n };\n const onUpdateQuotePrice = (options, buttonHandler) => {\n\n let item = options.item;\n let quote = options.quote;\n let price = parseFloat(options.price);\n\n let errorMessage = null;\n\n if (isNaN(price)) {\n errorMessage = 'Please enter a valid number.';\n } else if (price === quote.price) {\n errorMessage = 'The price has not been changed.';\n }\n\n if (errorMessage !== null) {\n let error = {\n 'type': 'Error: Invalid Input',\n 'message': errorMessage\n };\n alertError(setAlertOpen, setAlertOptions, error);\n // buttonHandler.onError('Invalid input');\n }\n\n updateQuotePrice(\n item.id,\n quote.id,\n price,\n options.update_catalog_price,\n (data) => {\n setUpdateManualQuoteOpen(false);\n fetchItemsTendering();\n },\n (error) => {\n alertError(setAlertOpen, setAlertOptions, error);\n }\n );\n };\n\n // HTML render functions\n const renderInstructions = () => {\n\n if (!isEmpty(claim) && claim.status_reason !== 'Tendering') {\n return (
    );\n }\n\n return (\n
    \n
    \n
    \n \n
    \n
    \n
    \n

    \n There are three actions that can be taken per supplier on items during tender:\n

    \n
      \n
    • Add a quote for one of the possible replacements for an item
    • \n
    • Add a replacement to the list of possible replacements for an item
    • \n
    • Decline tender or mark as unable to tender for an item
    • \n
    \n
    \n

    \n \n Learn more \n \n

    \n
    \n
    \n
    \n );\n };\n\n const renderPostTenderInstructions = () => {\n\n if (claim === null || (claim.status_reason !== 'Post tender inspection' && claim.status !== 'QUANTIFIED')) {\n return (
    );\n }\n\n let message = 'Tender has been completed for this claim.';\n\n if (claim.status_reason === 'Post tender inspection') {\n message += ' Post tender inspection is in progress at the moment.';\n }\n\n return (\n
    \n
    \n
    \n \n
    \n
    \n

    Tender completed

    \n
    \n

    {message}

    \n
    \n
    \n
    \n
    \n );\n };\n\n const showAdhocDeliveryFeeModal = (supplier) => {\n\n function onSetAdhocDeliveryFee(){\n\n // Get the input via ID\n let deliveryFeeInput = document.getElementById('deliveryFee');\n deliveryFeeInput = deliveryFeeInput.value;\n\n const mutation = `\n mutation UpsertAdhocDeliveryFee {\n supplier_upsert_delivery_cost_adhoc(\n claim_id: \"${claim.id}\"\n supplier_id: \"${supplier.id}\"\n delivery_cost: ${deliveryFeeInput}\n ){\n error {type, message}\n claim{\n id\n delivery_costs{\n supplier_id\n is_adhoc\n delivery_cost\n }\n }\n }\n }\n `\n customGraphRequest(\n mutation,\n (data) => {\n props.showNotificationModal(\n 'success',\n 'Adhoc Delivery Fee Updated',\n 'The adhoc delivery fee has successfully been updated.'\n );\n\n // Update the claim with the new adhoc delivery fee\n setClaim({...claim, delivery_costs: data.claim.delivery_costs})\n\n props.setCustomModalOpen(false)\n },\n props.onError\n )\n\n }\n\n let content = (\n\n
    \n\n

    Adhoc Delivery Fee

    \n\n
    \n\n

    \n Set the adhoc delivery fee for this supplier for this claim\n

    \n\n
    \n\n \n\n
    \n\n\n
    \n\n
    \n\n props.setCustomModalOpen(false)}\n >\n Cancel\n \n \n Submit\n \n
    \n\n
    \n );\n\n props.showCustomModal(content);\n\n\n }\n\n const onDeleteTender = (itemId, quoteId) => {\n\n deleteTender(\n itemId,\n quoteId,\n (data) => {\n\n props.showNotificationModal(\n 'success',\n 'Tender deleted',\n 'The tender on the item has been removed'\n );\n\n // TODO update with props.updateGlobalClaim\n fetchItemsTendering();\n\n },\n (error) => {\n alertError(setAlertOpen, setAlertOptions, error);\n }\n );\n };\n\n const renderAdhocDeliveryFee = (supplier) => {\n\n // Get the adhoc delivery fee for this supplier\n const deliveryObject = claim.delivery_costs?.find(deliveryCost => deliveryCost.supplier_id === supplier.id) || null\n\n return (\n
    \n\n { deliveryObject &&\n \n

    \n {_currencySymbol(claim)} {deliveryObject.delivery_cost}\n

    \n
    \n }\n\n \n \n \n
    \n );\n\n }\n\n const renderSupplier = () => {\n\n if (suppliersAndItems === null) {\n return (\n
    \n \n
    \n );\n }\n\n return (\n
    \n\n {suppliersAndItems.map((supplierItems) => (\n\n \n\n {/* SUPPLIER NAME*/}\n
    \n
    \n

    {supplierItems['supplier']['info']['name']}

    \n
    \n\n \n \n \n\n
    \n\n {/* HEADER */}\n \n \n \n \n \n \n \n \n \n \n \n \n \n\n {/* BODY */}\n \n {supplierItems.items.map((item) => (\n renderItem(supplierItems['supplier'], item)\n ))}\n \n
    \n Original\n \n Replacement\n \n Status\n \n Unit Price\n \n Quantity\n \n Sub-Total\n \n Actions\n
    \n
    \n\n {renderAdhocDeliveryFee(supplierItems['supplier'])}\n\n
    \n ))}\n
    \n );\n };\n\n const renderItem = (supplier, item) => {\n // return a single table row\n\n let replacementData = null; // the recommended replacement for this supplier for this item (of all possible replacements, the lowest quote from this supplier), found in the supplier_panel\n let replacementProduct = null;\n let supplierStatus = '';\n\n let _supplierData;\n\n for (let supplierData of item.supplier_panel) {\n if (supplierData['id'] == supplier['id']) {\n _supplierData = supplierData;\n replacementData = supplierData['recommended_replacement'];\n supplierStatus = supplierData['status'];\n break;\n }\n }\n\n if (replacementData !== null && replacementData['product'] !== null) {\n replacementProduct = replacementData['product'];\n }\n\n let hasPreferredReplacement = (replacementProduct !== null);\n\n let replacementCommonName = 'Not tendered';\n let possibleReplacements = `(${item.possible_replacements.length} possible replacement`;\n\n if (item.possible_replacements.length > 1) {\n possibleReplacements += 's)';\n } else {\n possibleReplacements += ')';\n }\n\n let displayPrice = '-';\n let displaySubTotal = '-';\n\n if (hasPreferredReplacement) {\n\n replacementCommonName = replacementProduct.common_name;\n possibleReplacements = '';\n\n let quote = replacementData.quote;\n displayPrice = currencySymbol + ` ${parseFloat(quote.price).toFixed(2)}`;\n\n let subTotalPrice = quote.price * item.quantity;\n // displaySubTotal = `${quote.currency_symbol} ${subTotalPrice}`;\n displaySubTotal = currencySymbol + ` ${parseFloat(subTotalPrice).toFixed(2)}`;\n }\n\n let isPending = (supplierStatus === 'TENDER_PENDING');\n\n let rowBgColor = '';\n\n if (supplierStatus === 'TENDER_COMPLETED') {\n rowBgColor = 'bg-green-100';\n } else if (supplierStatus === 'NOT_INVITED_TO_TENDER') {\n rowBgColor = 'bg-yellow-100';\n } else if (supplierStatus !== 'TENDER_PENDING') {\n rowBgColor = 'bg-red-100';\n }\n\n\n let showUpdateQuoteModals = false;\n\n // If this supplier, has atleast 1 quote, for any of the \"possible replacement products\", in this item - then show the update quote modal\n let allReplacements_QuoteProduct = allReplacementDataForItem(item);\n let supplierHasQuoteInThisItem = allReplacements_QuoteProduct.find(replacement => replacement.supplier.id === supplier.id);\n if (!isEmpty(supplierHasQuoteInThisItem)) {\n showUpdateQuoteModals = true;\n }\n\n let noRecommendedReplacementData = isEmpty(replacementData?.product) && isEmpty(replacementData?.quote);\n\n return (\n \n\n {/* ORIGINAL PRODUCT */}\n \n
    \n
    \n \n
    \n
    \n
    \n {item.product.common_name}\n
    \n
    \n {item.category.display_name}\n
    \n
    \n
    \n {/*{item.product.type === 'MANUAL' ? item.product.description : calculateProperties(item.product)}*/}\n {item.product.description}\n
    \n
    \n
    \n
    \n \n\n {/* REPLACEMENT */}\n \n
    \n
    \n \n
    \n
    \n\n
    \n

    {replacementCommonName}

    \n\n {/* only display edit button if this supplier has a \"recommended replacement(quote, product)\" for this item(of all possible replacements) */}\n {showUpdateQuoteModals &&\n \n }\n\n
    \n\n {replacementCommonName !== 'Not tendered' && (\n
    \n {item.category.display_name}\n
    )}\n {possibleReplacements !== '' && (\n
    \n {possibleReplacements}\n
    \n )}\n {replacementProduct !== null && (\n
    \n {/*{replacementProduct.type === 'MANUAL' ? replacementProduct.description : calculateProperties(replacementProduct)}*/}\n {replacementProduct.description}\n
    \n )}\n
    \n
    \n \n\n {/* STATUS */}\n \n \n

    \n {displayStatuses[supplierStatus]}\n

    \n \n\n \n\n {/* UNIT PRICE */}\n \n
    \n

    {displayPrice}

    \n\n {/* only display edit button if this supplier has a \"recommended replacement(quote, product)\" for this item */}\n {!noRecommendedReplacementData &&\n }\n
    \n \n\n {/* QUANTITY */}\n \n {item.quantity}\n\n {/* SUB TOTAL */}\n \n {displaySubTotal}\n\n {/* ACTIONS */}\n \n
    \n\n {/* ADD QUOTE */}\n \n {\n promptCreateManualQuote(supplier, item);\n }}\n className={classNames(\n 'btn-icon',\n )}\n >\n \n \n \n\n {/* ADD REPLACEMENT */}\n \n {\n // Navigate to the add replacement page\n navigate(`/claim/item-add-replacement/${claimId}/${item.id}/${supplier.id}?category=${item.product.category.toLowerCase()}`);\n }}\n className={classNames(\n 'btn-icon',\n )}\n >\n \n \n \n\n {/* CANNOT TENDER */}\n \n {\n promptDismissTender(supplier, item);\n }}\n className={classNames(\n 'btn-icon-danger',\n )}\n >\n \n \n \n\n {/* DELETE QUOTE */}\n \n {\n props.showConfirmModal(\n 'warning',\n 'Delete Tender',\n 'Are you sure you want to delete the tender on this item?',\n 'Delete',\n () => onDeleteTender(item.id, replacementData.quote.id)\n );\n }}\n className={classNames(\n 'btn-icon-danger'\n )}\n >\n \n \n \n\n
    \n\n \n \n );\n };\n\n return (\n <>\n
    \n\n {/* ==== MODALS ==== */}\n\n {/* TODO : change usage to base modal */}\n {\n }}\n message={notificationMessage}\n />\n\n {/* TODO : change usage to base modal */}\n \n\n \n \n \n\n \n \n\n \n\n \n {\n alertError(setAlertOpen, setAlertOptions, error);\n }}\n />\n \n\n \n props.onError(e)}\n />\n \n\n \n props.onError(e)}\n />\n \n\n \n \n \n\n {/* ==== BODY ==== */}\n\n
    \n\n
    \n\n {/* HEADER */}\n
    \n\n

    Tender

    \n\n
    \n\n navigate(`/profile/${claimId}`)}\n className=\"tooltip-container btn py-2 mr-4\"\n >\n \n \n Claim Profile\n \n Return to the claim quantification review\n
    \n\n {!isEmpty(claim) && props.mainOrganisation?.type !== 'SUPPLIER' && claim.status_reason === 'Post tender inspection' && (\n navigate(`/post/${claimId}`)}\n className=\"tooltip-container btn py-2\"\n >\n \n \n Post Tender Inspection\n \n Go to post tender inspection\n
    \n )}\n
    \n\n
    \n\n {safe(renderPostTenderInstructions)}\n {safe(renderInstructions)}\n\n
    \n\n {/* ADD SUPPLIER */}\n
    \n\n {/* Only show button if claim is in tender */}\n {/* Only show button to ADMIN and INSURER */}\n {!isEmpty(claim) && claim.status_reason === 'Tendering' &&\n props.mainOrganisation?.type !== 'SUPPLIER' &&\n (\n <>\n\n \n setShowAddSupplierModal(true)}\n className=\"btn\"\n >\n \n Supplier\n \n\n \n\n \n )}\n
    \n\n\n {/* COMPLETE TENDER */}\n
    \n\n {/* Only show button if claim is in tender */}\n {/* Only show button to ADMIN and INSURER */}\n {!isEmpty(claim) && claim.status_reason === 'Tendering' &&\n props.mainOrganisation?.type !== 'SUPPLIER' &&\n (\n \n \n Complete Tender\n \n Complete the tender for the claim\n \n \n )}\n
    \n\n\n\n\n
    \n\n {/* ITEMS BY SUPPLIER */}\n {safe(renderSupplier)}\n\n \n \n\n \n \n );\n}\n\n\nfunction AddSupplierToClaimModal (props) {\n\n const [organisations_supplierPanel, setOrganisations_supplierPanel] = useState(null);\n const [organisations_adhoc, setOrganisations_adhoc] = useState(null);\n\n // AdditionalSupplier components - suppliers to add to the claim\n const [additionalSuppliers, setAdditionalSuppliers] = useState([]);\n\n function addSupplierToClaim(selectedOrg) {\n if(selectedOrg.id === 'create') {\n props.setOpen(false);\n props.setShowAddOnceOffSupplierModal(true);\n return;\n }\n\n // Do not add this supplier if it is already in the list\n if(additionalSuppliers.find(supplier => supplier.id === selectedOrg.id)) return;\n\n // Add the selected supplier to the list of additional suppliers\n setAdditionalSuppliers([...additionalSuppliers, selectedOrg]);\n\n }\n\n useEffect(() => {\n\n // check if the props.open type is an object\n if(props.newlyCreatedAdhocOrganisation){\n // If a supplier was created, it is passed in via the props.open state\n // Pre-select the adhoc supplier that was created\n addSupplierToClaim(props.newlyCreatedAdhocOrganisation);\n props.setNewlyCreatedAdhocOrganisation(null);\n }\n\n }, [organisations_adhoc]);\n\n useEffect(() => {\n if(props.open)\n fetchAccounts();\n }, [props.open]);\n\n function fetchAccounts() {\n /* All supplier pannel organisations are retrieved via the Accounts query\n * This is due to the requirement of an account between the insurer and the supplier in order to invite a supplier\n * to tender on a item */\n\n queryAccounts(\n null,\n 'ADMINISTRATOR_SUPPLIER, INSURER_SUPPLIER',\n (data) => {\n\n // Filter out by the claim's country\n let _accounts = data.accounts.filter(account => account.organisation_2.info.country === props.claim.country);\n\n let organisations = _accounts.map(account => account.organisation_2);\n\n // Remove duplicates\n organisations = organisations.filter((org, index, self) => {\n return index === self.findIndex((t) => (\n t.id === org.id\n ))\n });\n\n setOrganisations_supplierPanel(organisations);\n },\n props.onError\n )\n }\n\n\n useEffect(() => {\n\n if(props.open){\n fetchAdhocOrganisations();\n }\n }, [props.open]);\n function fetchAdhocOrganisations() {\n /* All Adhoc supplier organisations have to be retrieve via the Organisations query\n * This is due to an account not existing between a adhoc supplier org and the claim insurer until the adhoc supplier\n * has been invited to tender on an item atleast 1 time */\n\n let queryArgs = \"\";\n\n let orgTypes = ['SUPPLIER'] // Supplier type must be specified if is_adhoc is true\n queryArgs += ` types:[${orgTypes.join(\", \")}]`;\n\n queryArgs += ` is_adhoc: true`;\n queryArgs += ` country: ${props.claim.country}`;\n\n let minimalOrganisationsQuery = `\n query InviteSupplier_SupplierPanelOrganisations{\n organisations(|placeholder|) {\n error {\n type\n message\n }\n organisations {\n id\n date_created\n date_updated\n status\n unique_reference_name\n type\n account_type\n info {\n name\n country\n country_text\n website\n currency\n logo_image_url\n snappy_info{\n status_text\n thank_you_text\n landing_text\n snappy_logo_url\n }\n }\n }\n }\n }\n `\n minimalOrganisationsQuery = minimalOrganisationsQuery.replace('|placeholder|', queryArgs);\n\n customGraphRequest(\n minimalOrganisationsQuery,\n (data) => {\n const allOrgs = data['organisations'];\n const alphabeticallyOrderedOrganisations = allOrgs.sort((a, b) => {\n let nameA = a.unique_reference_name.toUpperCase(); // to ensure case-insensitive comparison\n let nameB = b.unique_reference_name.toUpperCase(); // to ensure case-insensitive comparison\n\n if (nameA < nameB) {\n return -1;\n }\n if (nameA > nameB) {\n return 1;\n }\n\n // names must be equal\n return 0;\n });\n setOrganisations_adhoc(alphabeticallyOrderedOrganisations)\n },\n props.onError\n );\n\n }\n\n function onRemoveSupplier(supplierOrg) {\n setAdditionalSuppliers(additionalSuppliers.filter(supplier => supplier.id !== supplierOrg.id));\n }\n\n // == RENDER FUNCTIONS ==\n\n function renderAddSupplier() {\n\n function selectableSupplierAccounts() {\n // If the supplier organisation is in the item's supplier_panel, then it is already in the claim\n // Return all suppliers that are not in the claim\n\n if(!organisations_supplierPanel) return [];\n\n // TODO should include ALL supplier organisations\n let organisationsNotInClaim = organisations_supplierPanel.filter(org => {\n\n const orgInClaim = props.suppliersAndItems.find(replacementObject => {\n return replacementObject.supplier.id === org.id\n })\n\n return !orgInClaim;\n\n });\n\n // Filter out duplicates\n organisationsNotInClaim = organisationsNotInClaim.filter((org, index, self) => {\n return index === self.findIndex((t) => (\n t.id === org.id\n ))\n });\n\n return organisationsNotInClaim || [];\n }\n\n // Include the option to create a new supplier as a option in the Adhoc suppliers\n let adhocOrgs_AndCreateOption = organisations_adhoc ? organisations_adhoc.concat({id: 'create', info: {name: 'Create new supplier'}}) : [];\n\n let supplierPanelOrganisationsNotInThisClaim = organisations_supplierPanel || [];\n\n // Loading spinner while fetching accounts\n if(isEmpty(supplierPanelOrganisationsNotInThisClaim)) return \n\n return (\n
    \n\n \n\n \n query === '' ?\n selectableOptions\n :\n selectableOptions.filter((option) =>\n option.info.name\n .toLowerCase()\n .replace(/\\s+/g, '') // remove all whitespace\n .includes(query.toLowerCase().replace(/\\s+/g, ''))\n )}\n renderMainInput={(selected, query, setQuery)=> (\n
    \n \n
    \n {selected?.info?.logo_image_url &&\n {\n if (!e.target.dataset.retry) {\n e.target.src = \"/org-logo-placeholder.jpg\";\n e.target.dataset.retry = \"true\";\n }\n }}\n />\n }\n
    \n\n selected ? selected.info?.name : '-'}\n onChange={(event) => setQuery(event.target.value)}\n />\n\n
    \n \n
    \n
    \n
    \n\n )}\n renderOption={(option) =>\n \n {({selected, active}) => (\n
    \n\n {/* SELECTED CHECK */}\n {selected &&\n
    \n \n
    \n }\n\n {/* ORG LOGO */}\n \n\n {/* ORG NAME */}\n {option.info.name}\n\n
    \n )}\n \n }\n />\n\n
    \n\n \n\n \n query === '' ?\n selectableOptions\n :\n selectableOptions.filter((option) =>\n option.info.name\n .toLowerCase()\n .replace(/\\s+/g, '') // remove all whitespace\n .includes(query.toLowerCase().replace(/\\s+/g, ''))\n )}\n renderMainInput={(selected, query, setQuery)=> (\n
    \n \n
    \n {selected?.info?.logo_image_url &&\n {\n if (!e.target.dataset.retry) {\n e.target.src = \"/org-logo-placeholder.jpg\";\n e.target.dataset.retry = \"true\";\n }\n }}\n />\n }\n
    \n\n selected ? selected.info?.name : '-'}\n onChange={(event) => setQuery(event.target.value)}\n />\n\n
    \n \n
    \n
    \n
    \n\n )}\n renderOption={(option) =>\n \n {({selected, active}) => (\n
    \n\n {/* SELECTED CHECK */}\n {selected &&\n
    \n \n
    \n }\n\n {/* ORG LOGO */}\n \n\n {/* ORG NAME */}\n {option.info.name}\n\n
    \n )}\n \n }\n />\n\n
    \n\n
    \n );\n }\n\n function renderSuppliers() {\n return (\n <>\n {additionalSuppliers.map((supplierOrg, index) => (\n \n ))}\n \n );\n }\n\n return (\n props.setOpen(false)}>\n {\n props.setOpen(false)\n }}>\n \n {/*props.setOpen(false)} />*/}\n
    \n \n\n
    \n\n {/* To prevent Headless UI focusing on the first button (focusable-object) */}\n \n\n \n \n\n
    {\n e.preventDefault(); // prevent closing the modal from clicking inside of the main content\n }}\n >\n\n
    \n\n

    \n Invite a supplier to selected items\n

    \n\n {renderAddSupplier()}\n\n
    \n\n {renderSuppliers()}\n\n
    \n props.setOpen(false)}\n >\n Close\n \n
    \n\n
    \n\n
    \n\n
    \n\n\n \n
    \n
    \n
    \n );\n}\n\n\nfunction AdditionalSupplier (props) {\n\n // The supplier selected to be added to the claim\n const [supplier, setSupplier] = useState(props.supplierOrganisation);\n useEffect(() => {\n setSupplier(props.supplierOrganisation)\n\n // loadItems()\n }, [props.supplierOrganisation]);\n\n // The items that the supplier has been added to\n const [itemsSupplierIsAddedTo, setItemsSupplierIsAddedTo] = useState([]);\n\n function addSupplierToItem(item, buttonHandler) {\n /** The mutation works on a per-item basis */\n\n let mutation = `\n mutation addSuppliersToTender {\n add_supplier_to_claim_item(\n item_id: \"${item.id}\"\n supplier_id: \"${props.supplierOrganisation.id}\"\n ){\n error{type, message}\n item{\n id\n }\n }\n }\n `\n\n customGraphRequest(\n mutation,\n (data) => {\n console.log('Added suppliers to claim', data)\n props.showAlertModal('success', 'Supplier invited',

    The supplier {props.supplierOrganisation.unique_reference_name} has been invited to the selected item {item.product.common_name}

    );\n\n setItemsSupplierIsAddedTo([...itemsSupplierIsAddedTo, item])\n props.fetchItemsTendering();\n buttonHandler.onSuccess('Supplier invited');\n },\n (error) => {\n props.onError(error);\n buttonHandler.onError('Failed to invite supplier');\n }\n );\n\n }\n\n function supplierIsAlreadyInvitedToItem(item) {\n // In this items supplier panel, if this supplier is already invited to this item\n const supplierAndItem = props.supplierAndItems.find(supplierAndItems => supplierAndItems.supplier.id === props.supplierOrganisation.id);\n if(!supplierAndItem) return false;\n const alreadyInvited = supplierAndItem.items.find(_item => _item.id === item.id) ? true : false;\n return alreadyInvited;\n }\n\n if(!props.claim.items) return <>\n\n return (\n
    \n\n
    \n

    {supplier.unique_reference_name}

    \n\n \n \n \n
    \n\n
    \n\n {props.claim.items.map((item) => (\n <>\n\n
    \n\n
    \n
    \n \n
    \n
    \n
    \n {item.product.common_name}\n
    \n
    \n {item.category.display_name}\n
    \n
    \n
    \n {/*{item.product.type === 'MANUAL' ? item.product.description : calculateProperties(item.product)}*/}\n {item.product.description}\n
    \n
    \n
    \n
    \n\n i.id === item.id) ? 'Invited' : 'Invite'}>\n {\n addSupplierToItem(item, buttonHandler);\n }}\n className={classNames(\n 'btn h-min',\n itemsSupplierIsAddedTo.find(i => i.id === item.id) && 'btn-disabled'\n )}\n content='Add supplier to item'\n loadingContent={}\n successContent='Supplier invited'\n errorContent='Failed to invite supplier'\n defaultStatus={itemsSupplierIsAddedTo.find(i => i.id === item.id) ? 'success' : 'idle'}\n />\n \n\n\n
    \n\n
    \n\n \n\n\n ))}\n
    \n\n
    \n );\n\n}\n\n\nfunction AddOnceOffSupplierToClaimModal(props) {\n\n\n const [name, setName] = useState(null);\n const [website, setWebsite] = useState(null);\n const [websiteTLD, setWebsiteTLD] = useState(null);\n const [orgType, setOrgType] = useState('SUPPLIER');\n const [country, setCountry] = useState('NL');\n const [currencyCode, setCurrencyCode] = useState('EUR');\n\n useEffect(() => {\n\n if(!props.claim) return;\n\n setFieldsFromClaim();\n }, [props.open]);\n\n function setFieldsFromClaim() {\n\n setOrgType('SUPPLIER');\n\n setCountry(props.claim.country);\n\n setCurrencyCode(props.claim.organisation.info.currency);\n\n }\n\n function fullWebsite () {\n if(!website || !websiteTLD) return 'Invalid website';\n return website + websiteTLD;\n }\n\n function onCreateSupplier() {\n\n if(!name) return props.showAlertModal('error', 'Name required', 'Please enter a valid name for the supplier');\n if(!website) return props.showAlertModal('error', 'Website name', 'Please enter a valid website domain for the supplier');\n if(!websiteTLD) return props.showAlertModal('error', 'Website TLD required', 'Please enter a valid website TLD (E.G: .com) for the supplier');\n\n // For Adhoc suppliers, the unique reference name is the website domain\n const websiteDomain = fullWebsite();\n\n let mutation = `\n mutation ClaimTender_CreateAdhocSupplierOrganisation {\n create_organisation(\n name: \"${name}\"\n website: \"${websiteDomain}\"\n unique_reference_name: \"${websiteDomain}\"\n type: ${orgType}\n country: ${country}\n currency: ${currencyCode}\n is_adhoc: true\n ){\n error{type, message}\n organisation {\n id\n unique_reference_name\n info{\n name\n }\n }\n }\n }\n `\n\n customGraphRequest(\n mutation,\n (data) => {\n console.log('Created ad-hoc supplier', data)\n props.showAlertModal('success', 'Supplier created',
    \n

    The supplier has been created:

    \n

    Name: {name}

    \n

    Website (SLD + TLD): {websiteDomain}

    \n

    Reference name: {websiteDomain}

    \n

    Type: {orgType}

    \n

    Country: {country}

    \n

    Currency: {currencyCode}

    \n
    );\n\n // Close the create modal, and open the invite supplier modal\n props.setOpen(false);\n props.setNewlyCreatedAdhocOrganisation(data.organisation);\n props.setShowAddSupplierModal(true);\n },\n props.onError\n );\n\n }\n\n\n return (\n props.setOpen(false)}>\n {\n props.setOpen(false)\n }}>\n \n {/*props.setOpen(false)} />*/}\n
    \n \n\n
    \n\n {/* To prevent Headless UI focusing on the first button (focusable-object) */}\n \n\n \n \n\n
    {\n e.preventDefault(); // prevent closing the modal from clicking inside of the main content\n }}\n >\n\n
    \n\n

    \n Create an ad-hoc supplier\n

    \n\n
    \n\n\n
    \n\n {/* NAME */}\n \n \n setName(e.target.value)}/>\n \n\n {/* WEBSITE */}\n \n

    The website address of this supplier

    \n

    Only the domain name(joespiano) and the top level domain(.co.za) are required.\n E.g:

    \n

    \n https://www.instruments.\n  joespianos.co.za \n /index.html\n

    \n }>\n\n \n\n
    \n\n \n

    The name of the website (SLD). E.G:

    \n

    \n www.\n takealot \n .co.za\n

    \n

    \n www.\n mediamarkt \n .nl\n

    \n
    }\n >\n \n {\n // Get the value from the event target\n let inputValue = e.target.value;\n\n // Change to lower case, remove any whitespace and full stops\n let processedValue = inputValue.toLowerCase().replace(/\\s+/g, '').replace(/\\./g, '');\n\n // Set the website state with the cleaned and processed value\n setWebsite(processedValue);\n }}/>\n
    \n \n

    The ending of the website (TLD). E.G:

    \n

    .com

    \n

    .co.za

    \n

    .nl

    \n
    }>\n \n {\n // Get the value from the event target\n let inputValue = e.target.value;\n\n // Change to lower case, remove any whitespace\n let processedValue = inputValue.toLowerCase().replace(/\\s+/g, '');\n\n // Set the website state with the cleaned and processed value\n setWebsiteTLD(processedValue);\n }}/>\n \n\n
    \n\n \n\n {/* TYPE + COUNTRY + CURRENCY */}\n
    \n\n
    \n \n
    \n setOrgType(e.target.value)}\n value={orgType}\n />\n
    \n\n
    \n \n
    \n setCountry(e.target.value)}\n value={country}\n />\n
    \n\n
    \n \n
    \n setCurrencyCode(e.target.value)}\n value={currencyCode}\n />\n
    \n\n
    \n
    \n\n\n\n
    \n\n
    \n\n \n {\n props.showConfirmModal(\n 'success',\n 'Create supplier',\n (
    \n

    Are you sure you want to create this supplier?

    \n

    \n

    Name: {name}

    \n

    Website (SLD + TLD): {fullWebsite()}

    \n

    Reference name: {fullWebsite()}

    \n

    Type: {orgType}

    \n

    Country: {country}

    \n

    Currency: {currencyCode}

    \n
    ),\n 'Create supplier',\n onCreateSupplier,\n )\n }}\n >\n Create supplier\n \n
    \n\n props.setOpen(false)}\n >\n Cancel\n \n
    \n\n
    \n\n
    \n\n \n\n\n \n \n
    \n
    \n );\n}\n\n\nconst ITEMS_TENDERING = `\nquery ClaimTender{\n items_tendering(|placeholder|) {\n error {\n type\n message\n }\n \n claim{\n id\n insurer_claim_number\n location_text\n country\n organisation{\n info{\n name\n currency_symbol\n currency\n logo_image_url\n }\n }\n delivery_costs {\n supplier_id\n delivery_cost\n is_adhoc\n }\n status\n status_reason\n \n items {\n claimant_quote\n id\n date_created\n date_updated\n is_tender_item\n is_manual\n status\n status_reason\n type\n category {\n id\n category_a\n category_b\n category_c\n category_d\n display_name\n }\n product {\n id\n date_created\n date_updated\n\n date_verified\n date_released\n dates_released\n\n brand\n category\n common_name\n description\n\n status\n type\n\n ean_codes\n metadata\n model_number\n model_numbers\n \n ai_generated\n\n images {\n main\n thumbnail_web\n thumbnail_print\n }\n properties {\n name\n display_name\n value\n }\n }\n\n }\n \n \n \n }\n\n suppliers_and_items {\n \n supplier {\n id\n unique_reference_name\n info {\n name\n }\n }\n\n items {\n id\n is_tender_item\n category {\n display_name\n }\n quantity\n supplier_panel {\n id\n name\n unique_reference_name\n status\n recommended_replacement {\n product {\n id\n date_verified\n date_released\n dates_released\n\n brand\n category\n common_name\n description\n\n status\n type\n\n images {\n thumbnail_web\n }\n\n }\n quote {\n id\n status\n is_manual\n currency_symbol\n currency\n price\n }\n }\n }\n \n possible_replacements {\n product {\n id\n dates_released\n common_name\n \n brand\n \n images {\n thumbnail_web\n }\n\n }\n quotes {\n id\n price\n supplier {\n id\n unique_reference_name\n }\n }\n }\n product {\n id\n\n date_verified\n date_released\n dates_released\n \n brand\n category\n common_name\n description\n\n status\n type\n\n images {\n thumbnail_web\n }\n\n }\n replacement {\n product {\n id\n date_verified\n date_released\n dates_released\n \n brand\n category\n common_name\n description\n\n status\n type\n\n images {\n thumbnail_web\n }\n\n }\n quote {\n id\n status\n price\n supplier {\n id\n }\n }\n\n }\n }\n \n }\n \n }\n}\n`\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","// Library imports\nimport React, {useEffect, useState} from 'react';\nimport {useNavigate, useParams} from 'react-router-dom';\nimport {PencilAltIcon, TrashIcon} from '@heroicons/react/outline';\nimport {\n ArrowCircleLeftIcon,\n CheckCircleIcon,\n ChevronRightIcon,\n InformationCircleIcon\n} from '@heroicons/react/solid';\n\n\n// Local imports\nimport NotificationTopRight from '../../components/NotificationTopRight.jsx';\n\nimport AlertModal from '../modals/AlertModal.jsx';\nimport ConfirmModal from '../modals/ConfirmModal.jsx';\nimport UpdateQuotePriceModal from '../modals/quote_modals/UpdateQuotePriceModal.jsx';\n\nimport {\n approvePostTenderItem,\n deleteTender,\n queryCategories,\n updateQuotePrice\n} from '../../utils/coreApi.js';\n\nimport {\n alertError,\n calculateProperties,\n classNames\n} from '../../utils/helpers.js';\nimport Safe, {safe} from \"../../components/Safe\";\nimport {useDocumentTitle} from \"../../components/PageTitle\";\nimport {BasicImage} from \"../../components/base/BasicImage\";\n\n\nexport default function ClaimPostTenderInspection(props) {\n\n const setTitle = useDocumentTitle(\"Post Tender\");\n\n const displayStatuses = {\n 'DECLINED_TENDER': 'Declined tender',\n 'NOT_INVITED_TO_TENDER': 'Not invited to tender',\n 'TENDER_COMPLETED': 'Tender completed',\n 'TENDER_DELETED': 'Tender deleted',\n 'TENDER_PENDING': 'Tender pending',\n 'UNABLE_TO_TENDER': 'Unable to tender'\n };\n\n const statusStyles = {\n 'DECLINED_TENDER': 'bg-red-600 text-white',\n 'NOT_INVITED_TO_TENDER': 'bg-yellow-600 text-white',\n 'TENDER_COMPLETED': 'bg-green-600 text-white',\n 'TENDER_DELETED': 'bg-red-600 text-white',\n 'TENDER_PENDING': 'bg-blue-800 text-white',\n 'UNABLE_TO_TENDER': 'bg-red-600 text-white'\n };\n\n // React router\n const navigate = useNavigate();\n const {claimId} = useParams();\n\n // Used for errors\n const [alertOpen, setAlertOpen] = useState(false);\n const [alertOptions, setAlertOptions] = useState({\n 'heading': '',\n 'message': ''\n });\n\n // Used for success feedback\n const [notificationOpen, setNotificationOpen] = useState(false);\n const [notificationMessage, setNotificationMessage] = useState({\n 'heading': '',\n 'message': ''\n });\n\n const [confirmModalOpen, setConfirmModalOpen] = useState(false);\n const [confirmModalOptions, setConfirmModalOptions] = useState({\n 'heading': '',\n 'message': '',\n 'type': '',\n 'buttonText': ''\n });\n\n const [updateManualQuoteOpen, setUpdateManualQuoteOpen] = useState(false);\n const [updateManualQuoteOptions, setUpdateManualQuoteOptions] = useState(null);\n\n // Data states\n const [claim, setClaim] = useState(null);\n const [currencySymbol, setCurrencySymbol] = useState(null);\n\n const [categories, setCategories] = useState(null);\n\n // On every page load\n useEffect(() => {\n\n if (claim === null) {\n props.updateGlobalClaim(claimId, setClaim);\n }\n if (categories === null) {\n queryCategories(categories, setCategories, (error) => {\n alertError(setAlertOpen, setAlertOptions, error);\n });\n }\n\n }, []\n );\n\n useEffect(() => {\n try {\n if (claim !== null) {\n setCurrencySymbol(claim.organisation?.info?.currency_symbol || ' ');\n }\n } catch (error) {\n if (!currencySymbol) {\n setCurrencySymbol(' ');\n }\n }\n\n if (claim && !props.navbarTopPageContent.claim) props.setNavbarTopPageContent({'claim': claim})\n\n if(claim) setTitle(`Post Tender : ${claim.insurer_claim_number}`)\n\n }, [claim, currencySymbol]);\n\n\n // onClick functions\n\n const onApproveAll = () => {\n props.showConfirmModal(\n 'success',\n 'Approve all items',\n 'Are you sure you want to approve all items?',\n 'Approve all',\n () => approveAllItems(),\n )\n }\n\n const approveAllItems = () => {\n\n // let items = claim.items.filter(item => item.is_tender_item && item.status !== 'UNABLE_TO_TENDER');\n let items = claim.items.filter(item => item.is_tender_item && item.status == 'POST_TENDER_INSPECTION');\n\n let itemIds = items.map(item => item.id);\n\n const delay = 500\n\n props.showToastNotificationModal(\n 'success',\n 'Submitting...',\n ''\n );\n\n itemIds.forEach( (id, i) => {\n\n setTimeout(() => {\n\n approvePostTenderItem(\n id,\n (data) => {\n props.showToastNotificationModal(\n 'success',\n 'Item approved',\n ''\n );\n props.updateGlobalClaim(claimId, setClaim);\n },\n (error) => props.onError(error)\n );\n\n }, i * delay)\n\n });\n\n }\n\n const onApproveItem = (itemId) => {\n\n approvePostTenderItem(\n itemId,\n (data) => {\n setNotificationMessage({\n 'heading': 'Item approved',\n 'message': 'Post tender inspection finished for item!'\n });\n setNotificationOpen(true);\n setTimeout(() => {\n setNotificationOpen(false);\n }, 1000);\n\n // find this item in the claim state, and change its status to 'QUANTIFIED'\n try {\n let claimCopy = {...claim};\n claim.items.find(item => item.id === itemId).status = 'QUANTIFIED';\n setClaim(claimCopy);\n } catch (e){\n console.log('Error updating claim item status: ', e)\n }\n\n props.updateGlobalClaim(claimId, setClaim);\n },\n (error) => {\n alertError(setAlertOpen, setAlertOptions, error);\n }\n );\n };\n\n const onUpdateQuotePrice = (options, buttonHandler) => {\n\n let item = options.item;\n let quote = options.quote;\n let price = parseFloat(options.price);\n\n let errorMessage = null;\n\n if (isNaN(price)) {\n errorMessage = 'Please enter a valid number.';\n } else if (price === quote.price) {\n errorMessage = 'The price has not been changed.';\n }\n\n if (errorMessage !== null) {\n let error = {\n 'type': 'Error: Invalid Input',\n 'message': errorMessage\n };\n alertError(setAlertOpen, setAlertOptions, error);\n buttonHandler.onError('Invalid input');\n }\n\n updateQuotePrice(\n item.id,\n quote.id,\n price,\n options.update_catalog_price,\n false,\n (data) => {\n setUpdateManualQuoteOpen(false);\n props.updateGlobalClaim(claimId, setClaim);\n buttonHandler.onSuccess('Quote price updated');\n },\n (error) => {\n alertError(setAlertOpen, setAlertOptions, error);\n buttonHandler.onError('Failed to update quote price');\n }\n );\n\n };\n\n const promptUpdateManualQuote = (item, quote) => {\n\n setUpdateManualQuoteOptions({\n 'item': item,\n 'quote': quote\n });\n\n setTimeout(() => {\n setUpdateManualQuoteOpen(true);\n }, 50);\n };\n\n const promptDeleteManualQuote = (item, quote) => {\n\n if (quote === null) {\n return;\n }\n\n let message = `Please confirm deletion of the ${quote.supplier.unique_reference_name} quote. This action cannot be undone.`;\n let type = 'warning';\n let buttonText = 'Delete';\n\n setConfirmModalOptions({\n 'heading': 'Delete tender',\n 'message': message,\n 'type': type,\n 'buttonText': buttonText,\n 'itemId': item.id,\n 'quoteId': quote.id,\n 'onConfirmClicked': (options) => {\n onDeleteManualQuote(options);\n }\n });\n\n setConfirmModalOpen(true);\n };\n\n const onDeleteManualQuote = (options) => {\n\n deleteTender(\n options.itemId, options.quoteId,\n (data) => {\n setNotificationMessage({\n 'heading': 'Tender deleted',\n 'message': 'Deleted tender for supplier.'\n });\n setNotificationOpen(true);\n setTimeout(() => {\n setNotificationOpen(false);\n }, 1000);\n\n // TODO review if this fix resolve the issue on DEV/PROD\n // This delay is an attempt to try resolve the doubling of item quotes in the post tender page after deleting a quote\n // Small delay to allow the backend to update the claim\n setTimeout(() => {\n props.updateGlobalClaim(claimId, setClaim);\n }, 300);\n\n\n },\n (error) => {\n alertError(setAlertOpen, setAlertOptions, error);\n }\n );\n };\n\n // HTML render functions\n\n const renderReplacement = (item) => {\n\n if (item.replacement === null || item.replacement.product === null) {\n return
    ;\n }\n\n // Find the winning supplier's full object in the supplier panel\n const winningSupplierInPanel = item.supplier_panel?.find(supplier => supplier.id === item.replacement?.quote?.supplier.id) || null;\n\n let displayPrice = currencySymbol + ` ${parseFloat(item.replacement.quote.price).toFixed(2)}`;\n\n return (\n
    \n \n\n
    \n

    \n {item.replacement.product.common_name}\n

    \n

    {item.replacement.product.type === 'MANUAL' ? item.replacement.product.common_name : calculateProperties(item.replacement.product)}

    \n

    {winningSupplierInPanel?.name || item.replacement.quote.supplier.unique_reference_name}

    \n

    {displayPrice}

    \n {/*TODO:Implement best quote*/}\n \n Lowest quote\n \n
    \n
    \n );\n };\n\n const renderItems = () => {\n\n if (claim === null) {\n return (\n
    \n
    \n
    \n \n \n \n \n Loading...\n
    \n
    \n
    \n );\n }\n\n return (\n
    \n {claim.items.map((item) => safe(()=>renderItem(item)))}\n
    \n );\n };\n\n const renderItem = (item) => {\n\n if (!item.is_tender_item || item.status === 'UNABLE_TO_TENDER') {\n return (
    );\n }\n\n return (\n
    \n
    \n
    \n

    \n {item['product']['common_name']}\n

    \n
    \n {item.status !== 'QUANTIFIED' &&\n (\n
    \n onApproveItem(item.id)}\n className=\"tooltip-container btn-success\"\n >\n \n \n Approve item\n \n \n Approve item\n \n \n
    \n )\n }\n
    \n\n \n
    \n\n\n {/* REQUESTED PRODUCT */}\n
    \n
    \n \n
    \n\n
    \n

    \n {item.product.common_name}\n

    \n

    {item.product.type === 'MANUAL' ? item.product.common_name : calculateProperties(item.product)}

    \n {item.product.model_number !== null ? (\n

    {item.product.model_number}

    \n ) : (\n

    {item.product.model_numbers.slice(0, 3).join(' | ')}

    \n )}\n
    \n
    \n\n {/* > */}\n
    \n \n
    \n\n {/* RECOMMENDED REPLACEMENT PRODUCT */}\n {safe(()=>renderReplacement(item))}\n
    \n
    \n\n {/* QUOTES */}\n {safe(()=>renderSuppliers(item))}\n \n );\n };\n\n const renderSuppliers = (item) => {\n\n if (item.status === 'QUANTIFIED') {\n return (
    );\n }\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n {item.supplier_panel.map((supplierData) => (\n safe(()=>renderSupplierReplacement(supplierData, item))\n ))}\n \n\n
    \n Supplier\n \n Recommended Replacement\n \n Status\n \n Unit Price\n \n Quantity\n \n Sub-Total\n \n Actions\n
    \n \n );\n };\n\n const renderSupplierReplacement = (supplierData, item) => {\n\n let supplier = supplierData['supplier'];\n\n let replacementData = supplierData['recommended_replacement'];\n let replacementProduct = null;\n let supplierStatus = supplierData['status'];\n\n if (replacementData !== null && replacementData['product'] !== null) {\n replacementProduct = replacementData['product'];\n }\n\n let hasPreferredReplacement = (replacementProduct !== null);\n\n let replacementCommonName = 'Not tendered';\n\n let displayPrice = '-';\n let displaySubTotal = '-';\n let quote = null;\n\n if (hasPreferredReplacement) {\n\n replacementCommonName = replacementProduct.common_name;\n\n quote = replacementData.quote;\n // displayPrice = `${quote.currency_symbol} ${quote.price}`;\n displayPrice = currencySymbol + ` ${parseFloat(quote.price).toFixed(2)}`;\n\n let subTotalPrice = quote.price * item.quantity;\n // displaySubTotal = `${quote.currency_symbol} ${subTotalPrice}`;\n displaySubTotal = currencySymbol + ` ${parseFloat(subTotalPrice).toFixed(2)}`;\n }\n\n let isCompleted = (supplierStatus === 'TENDER_COMPLETED');\n\n let rowBgColor = '';\n\n if (supplierStatus === 'TENDER_COMPLETED') {\n rowBgColor = 'bg-green-100';\n } else if (supplierStatus === 'NOT_INVITED_TO_TENDER') {\n rowBgColor = 'bg-yellow-100';\n } else if (supplierStatus !== 'TENDER_PENDING') {\n rowBgColor = 'bg-red-100';\n }\n\n return (\n \n \n
    \n
    \n \n
    \n
    \n {supplier.info.name}
    \n
    \n \n \n \n
    \n \n
    \n
    {replacementCommonName}
    \n
    \n
    \n \n \n
    \n \n {displayStatuses[supplierStatus]}\n \n
    \n \n {displayPrice}\n {item.quantity}\n {displaySubTotal}\n \n
    \n promptUpdateManualQuote(item, quote)}\n className={classNames(\n 'btn-icon',\n !isCompleted ? 'text-gray-400' : 'text-cyan-600 hover:text-cyan-500 tooltip-container',\n )}\n >\n \n Edit quote\n \n promptDeleteManualQuote(item, quote)}\n className={classNames(\n 'btn-icon-danger',\n !isCompleted ? 'text-gray-400' : 'text-red-600 hover:text-red-400 tooltip-container',\n )}\n >\n \n Delete tender\n \n
    \n \n \n );\n };\n\n return (\n <>\n
    \n\n {/* TODO : change usage to base modal */}\n {\n }}\n message={notificationMessage}\n />\n\n {/* TODO : change usage to base modal */}\n \n\n \n {\n alertError(setAlertOpen, setAlertOptions, error);\n }}\n />\n \n\n
    \n\n {/* TODO : change usage to base modal */}\n {\n }}\n />\n\n
    \n {/* Page header */}\n {Header(claim, navigate)}\n\n {/* APPROVE ALL */}\n {ApproveAll(claim, onApproveAll)}\n\n
    \n {safe(renderItems)}\n
    \n\n
    \n
    \n\n
    \n \n );\n}\n\nfunction Header(claim, navigate){\n\n const renderInstructions = () => {\n\n if (claim !== null && claim.status_reason !== 'Post tender inspection') {\n return (
    );\n }\n\n return (\n
    \n
    \n
    \n \n
    \n
    \n
    \n

    \n There are two actions that can be taken per supplier on items during post tender\n inspection:\n

    \n
      \n
    • Edit the quote of a supplier
    • \n
    • Delete tender for a supplier
    • \n
    \n
    \n

    \n \n Learn more \n \n

    \n
    \n
    \n
    \n );\n };\n\n const renderFinishedInstructions = () => {\n\n if (claim === null || claim.status_reason === 'Post tender inspection') {\n return (
    );\n }\n\n let message = 'Post tender inspection has been completed for this claim.';\n\n if (claim.status_reason === 'Post tender inspection') {\n message += ' Post tender inspection is in progress at the moment.';\n }\n\n return (\n
    \n
    \n
    \n \n
    \n
    \n

    Post tender inspection completed

    \n
    \n

    {message}

    \n
    \n
    \n
    \n
    \n );\n };\n\n return (\n
    \n
    \n

    Post Tender Inspection

    \n\n navigate(`/profile/${claim?.id || ''}`)}\n className=\"tooltip-container btn py-2 mr-4\"\n >\n \n \n Claim Profile\n \n Return to the claim quantification review\n
    \n\n\n
    \n\n
    \n {safe(renderFinishedInstructions)}\n {safe(renderInstructions)}\n
    \n \n )\n}\n\nfunction ApproveAll(claim, onApproveAll) {\n\n if (!claim) return (
    )\n if (claim.status_reason !== 'Post tender inspection') return (
    )\n\n return (\n
    \n \n \n \n Approve All\n \n \n
    \n )\n}\n","// Library imports\nimport React, {Fragment, useEffect, useRef, useState} from 'react';\nimport {useLocation, useNavigate, useParams} from 'react-router-dom';\nimport {\n BanIcon,\n CashIcon,\n CheckIcon,\n ExternalLinkIcon,\n PencilIcon,\n PlusIcon,\n RefreshIcon,\n TruckIcon\n} from '@heroicons/react/outline';\nimport {\n ArrowCircleLeftIcon,\n CheckCircleIcon,\n ChevronUpIcon,\n ExclamationIcon,\n PencilAltIcon,\n SparklesIcon\n} from '@heroicons/react/solid';\n\n\n// Local imports\nimport NotificationTopRight from '../../components/NotificationTopRight.jsx';\nimport AlertModal from '../modals/AlertModal.jsx';\nimport ConfirmModal from '../modals/ConfirmModal.jsx';\nimport UpdateManualItemModal from '../modals/UpdateManualItemModal.jsx';\nimport {\n customGraphRequest,\n fetchClaim,\n fetchUser,\n generateAiProto,\n queryCategories,\n verifyAllManualItems,\n verifyManualItem\n} from '../../utils/coreApi.js';\nimport {alertError, classNames, currencySymbol, escapeDoubleQuotes, isEmpty} from '../../utils/helpers.js';\nimport LoadingSpinner from '../../components/ui/LoadingSpinner';\nimport MultiProductModal from '../modals/MultiProductModal';\nimport {useDocumentTitle} from \"../../components/PageTitle\";\nimport Tooltip from \"../../components/Tooltip\";\nimport {Dialog, Transition} from \"@headlessui/react\";\nimport {SimpleSelect} from \"../../components/base/SimpleSelect\";\nimport {BasicImage} from \"../../components/base/BasicImage\";\nimport ApiButton from \"../../components/base/ApiButton\";\nimport {ImageZoom} from \"../../components/base/ImageZoom\";\nimport CurrencyInput from \"../../components/base/CurrencyInput\";\nimport Safe from \"../../components/Safe\";\n\nexport default function ClaimVerification(props) {\n\n const setTitle = useDocumentTitle(\"Verification\");\n\n // React router\n const navigate = useNavigate();\n\n const {claimId} = useParams();\n\n const [editManualItemOpen, setUpdateManualItemOpen] = useState(false);\n\n // TODO replace with base implementation\n const [alertOpen, setAlertOpen] = useState(false);\n const [alertOptions, setAlertOptions] = useState({\n 'heading': '',\n 'message': ''\n });\n\n // TODO replace with base implementation\n const [notificationOpen, setNotificationOpen] = useState(false);\n const [notificationMessage, setNotificationMessage] = useState({\n 'heading': 'Item updated',\n 'message': 'Successfully updated item!'\n });\n\n // TODO replace with base implementation\n const [confirmModalOpen, setConfirmModalOpen] = useState(false);\n const [confirmModalOptions, setConfirmModalOptions] = useState({\n 'heading': '',\n 'message': '',\n 'type': '',\n 'buttonText': ''\n });\n\n const [showDesktopAssessing, setShowDesktopAssessing] = useState(false);\n const [itemsToDesktopAssess, setItemsToDesktopAssess] = useState([]);\n const [desktopAssessment, setDesktopAssessment] = useState([]);\n\n // Data states\n const [claim, setClaim] = useState(null);\n const [user, setUser] = useState(null);\n const [categories, setCategories] = useState(null);\n\n // The item to display inside the edit manual item modal\n const [itemInEditManualItemModal, setItemInEditManualItemModal] = useState(null);\n\n // The Edit and Compare Product modal\n const [productInfoModalOpen, setProductInfoModalOpen] = useState(false);\n const [productInfoModalOptions, setProductInfoModalOptions] = useState({\n 'product': null,\n 'onProductAdded': null,\n 'item': null,\n });\n\n // The list of items that are currently being AI generated\n const [itemsCurrentlyInAIGeneration, setItemsCurrentlyInAIGeneration] = useState([]);\n\n // On every page load\n useEffect(() => {\n\n if (user === null) {\n fetchUser(setUser, navigate);\n } else if (categories === null) {\n queryCategories(categories, setCategories, (error) => {\n alertError(setAlertOpen, setAlertOptions, error);\n });\n } else if (claim === null) {\n fetchClaim(claimId, setClaim, navigate);\n }\n\n if (claim && !props.navbarTopPageContent.claim) props.setNavbarTopPageContent({'claim': claim});\n\n if (claim) setTitle(`Verification : ${claim.insurer_claim_number}`)\n\n }, [user, categories, claim]);\n\n const desktopAssessmentButtonRef = useRef(null);\n\n // onClick functions\n const promptVerifyItem = (item, outcome) => {\n\n let heading = 'Verify item';\n let message = 'Please confirm verification of this item. This action cannot be undone.';\n let type = 'confirm';\n let buttonText = 'Verify';\n\n if (outcome === 'CANNOT_BE_VERIFIED') {\n heading = 'Mark item as \"Cannot be verified\"';\n message = 'Please confirm this manual item cannot be verified. This action cannot be undone.';\n type = 'warning';\n buttonText = 'Confirm';\n }\n\n setConfirmModalOptions({\n 'heading': heading,\n 'message': message,\n 'type': type,\n 'buttonText': buttonText,\n 'itemId': item['id'],\n 'outcome': outcome,\n 'onConfirmClicked': onVerifyManualItem\n });\n\n setConfirmModalOpen(true);\n };\n\n const promptVerifyAllItems = () => {\n\n setConfirmModalOptions({\n 'heading': 'Verify ALL items',\n 'message': 'Please confirm verification of all items on this page. This action cannot be undone.',\n 'type': 'default',\n 'buttonText': 'Verify All',\n 'onConfirmClicked': (options) => {\n onVerifyAllManualItems(options);\n }\n });\n\n setConfirmModalOpen(true);\n };\n\n const promptGenerateAllItems = () => {\n\n setConfirmModalOptions({\n 'heading': 'Generate ALL AI Items',\n 'message': 'Attempt to generate an AI product for all un-verified items?',\n 'type': 'default',\n 'buttonText': 'Generate for all',\n 'onConfirmClicked': (options) => {\n onGenerateForAllItems();\n }\n });\n\n setConfirmModalOpen(true);\n };\n\n const onVerifyAllManualItems = (options) => {\n\n setConfirmModalOpen(false);\n\n verifyAllManualItems(\n claimId,\n (data) => {\n setNotificationMessage({\n 'heading': 'Items updated',\n 'message': 'Successfully verified items!'\n });\n setNotificationOpen(true);\n setTimeout(() => {\n setNotificationOpen(false);\n }, 3000);\n\n setTimeout(() => fetchClaim(claimId, setClaim, navigate), 1000);\n },\n (error) => {\n alertError(setAlertOpen, setAlertOptions, error);\n }\n );\n };\n\n const onVerifyManualItem = (options) => {\n\n setConfirmModalOpen(false);\n\n let itemId = options['itemId'];\n let outcome = options['outcome'];\n\n verifyManualItem(\n itemId, outcome,\n (data) => {\n setNotificationMessage({\n 'heading': 'Item updated',\n 'message': 'Successfully updated item!'\n });\n\n setNotificationOpen(true);\n setTimeout(() => {\n setNotificationOpen(false);\n }, 1000);\n\n setTimeout(() => fetchClaim(claimId, setClaim, navigate), 1000);\n\n },\n (error) => {\n alertError(setAlertOpen, setAlertOptions, error);\n }\n );\n };\n\n const updateManualItem = (item) => {\n\n if (itemInEditManualItemModal === null || itemInEditManualItemModal['id'] !== item['id']) {\n setItemInEditManualItemModal(item);\n }\n\n setUpdateManualItemOpen(true);\n };\n\n const onItemUpdatedSuccess = (data) => {\n\n setUpdateManualItemOpen(false);\n setItemInEditManualItemModal(null);\n\n setNotificationMessage({\n 'heading': 'Item updated',\n 'message': 'Successfully updated item!'\n });\n\n setNotificationOpen(true);\n setTimeout(() => {\n setNotificationOpen(false);\n }, 1000);\n\n setTimeout(() => fetchClaim(claimId, setClaim, navigate), 1000);\n };\n\n const checkAllItemsVerified = () => {\n\n if (claim === null) {\n return false;\n }\n\n for (const item of claim.items) {\n if (item.is_manual && item.status === 'VERIFICATION') {\n return false;\n }\n }\n\n return true;\n };\n\n const onGenerateForAllItems = () => {\n /** Call generate AI proto on each VERIFICATION item */\n\n let unverifiedItems = claim.items.filter(item => item.status === 'VERIFICATION');\n\n const currentlyBeingGenerated = (item) => itemsCurrentlyInAIGeneration.find(i => i.id === item.id);\n\n let itemsNotInGeneration = unverifiedItems.filter(item => !currentlyBeingGenerated(item));\n\n const delay = 500\n // Call onSubmitItem_GenerateAIProto on each VERIFICATION item\n itemsNotInGeneration.forEach((item, index) => {\n setTimeout(() => {\n submitItemForAIGenerate(item)\n }, index * delay)\n })\n\n }\n\n const submitItemForAIGenerate = (item) => {\n\n let alreadyBeingGenerated = itemsCurrentlyInAIGeneration.find(i => i.id === item.id)\n if (alreadyBeingGenerated) {\n return;\n }\n\n // Add the item to the list of generating items. Use previous state to prevent multiple set calls in the same update cycle\n setItemsCurrentlyInAIGeneration(prev => [...prev, item]);\n\n props.showToastNotificationModal('success', 'AI Generation In Progress', `${item.product.common_name} is being generated`, 5000);\n\n generateAiProto(\n item.product.category,\n item.product.brand,\n item.product.model_number || item.product.model_numbers[0] || null,\n item.id,\n null,\n (data) => {\n console.log('Generate AI Proto response: ', data)\n\n /** Success */\n if (data['response_success']) {\n props.showToastNotificationModal(\n 'success',\n 'AI Producted Generated',\n `${item.product.common_name} Product has successfully been generated and added to this claim`,\n 5000\n );\n fetchClaim(claimId, setClaim, navigate);\n\n // Remove the item from the list of generating items. Use previous state to prevent multiple set calls in the same update cycle\n setItemsCurrentlyInAIGeneration(prevState => prevState.filter(i => i.id !== item.id));\n\n // Open the new product in the product modal\n setProductInfoModalOptions({\n 'product': data['new_claim_item']['product'],\n 'onProductAdded': null,\n 'item': data['new_claim_item'],\n 'mode': 'edit'\n });\n setProductInfoModalOpen(true);\n }\n\n /** Failed */\n else {\n\n // Remove the item from the list of generating items. Use previous state to prevent multiple set calls in the same update cycle\n setItemsCurrentlyInAIGeneration(prevState => prevState.filter(i => i.id !== item.id));\n\n props.showAlertModal(\n 'error',\n 'AI Generation Request Failed',\n (\n
    \n

    Failed to generate a catalogue product from this manual item.

    \n\n
    \n Reason:\n

    \n {data['response_info'] ?\n JSON.stringify(data['response_info']) :\n No reason has been provided\n }\n

    \n
    \n\n
    \n

    \n This product can still be created manually:\n

    \n {\n console.log(this)\n showProductInfoModal(item)\n }}\n className=\"btn ml-0 mb-6\">\n \n Create proto manually\n \n
    \n\n
    \n ));\n }\n\n },\n (error) => {\n // Remove the item from the list of generating items. Use previous state to prevent multiple set calls in the same update cycle\n setItemsCurrentlyInAIGeneration(prevState => prevState.filter(i => i.id !== item.id));\n\n // do not show the standard error modal for the generate_ai_proto mutation\n props.showAlertModal('error', 'AI Request Failed', 'Failed to generate a catalogue product from this manual item');\n\n console.error('Generate AI Proto response: ', error);\n }\n );\n };\n\n const showProductInfoModal = (item) => {\n\n setProductInfoModalOptions({\n 'product': item.product,\n // 'productId': item.product.id,\n 'onProductAdded': null,\n 'item': item,\n 'mode': 'edit'\n });\n\n setProductInfoModalOpen(true);\n };\n\n const getItemsToVerify = () => {\n\n if (!claim) return [];\n\n const itemsToVerify = claim.items.filter(item => item.type !== 'CATALOGUE');\n\n return itemsToVerify;\n }\n\n // HTML render functions\n\n const renderStandardItems = () => {\n\n if (claim === null) {\n return (\n \n \n );\n }\n\n return (\n \n {getItemsToVerify().map(renderSingleItem)}\n \n );\n };\n\n const renderSingleItem = (item) => {\n\n const isCompleted = item.status !== 'VERIFICATION';\n\n let rowBgColor = 'bg-white';\n let statusStyle = 'bg-blue-600 text-white';\n let status = 'verification';\n\n if (item.status === 'CANNOT_BE_VERIFIED') {\n rowBgColor = 'bg-red-100';\n statusStyle = 'bg-red-600 text-white';\n status = 'cannot be verified';\n } else if (isCompleted) {\n rowBgColor = 'bg-green-100';\n statusStyle = 'bg-green-600 text-white';\n status = 'verified';\n }\n\n function handleExpand(e) {\n e.currentTarget.classList.remove('max-h-[4.5rem]');\n };\n\n return (\n \n \n
    \n {item.product.common_name}\n
    \n \n \n
    \n {item.product.description}\n
    \n \n \n
    \n {item.category !== null && item.category.display_name}\n
    \n \n \n
    \n {item.product.brand}\n
    \n \n \n \n
    \n {item.product.model_numbers !== null && item.product.model_numbers.join(' | ')}\n
    \n
    \n \n \n \n
    \n {item.product.ean_codes !== null && item.product.ean_codes.join(' | ')}\n
    \n
    \n \n \n \n {status}\n \n \n \n {item.quantity}\n \n \n
    \n\n {/* EDIT AND COMPARE PROTO MODAL */}\n \n showProductInfoModal(item)}\n className={classNames(\n 'btn-icon-danger',\n isCompleted ? 'text-gray-400 ' : 'text-cyan-600 hover:text-cyan-500',\n 'mr-1 inline-flex items-center text-sm font-medium rounded-md cursor-pointer',\n item.status === 'VERIFICATION' ? 'hidden' : ''\n )}\n >\n \n \n \n\n {/* EDIT MANUAL ITEM MODAL */}\n {\n updateManualItem(item);\n }}\n className={classNames(\n 'tooltip-container btn-icon',\n isCompleted ? 'text-gray-400 pointer-events-none' : 'text-cyan-600 hover:text-cyan-500',\n item.status === 'VERIFICATION' ? '' : 'hidden'\n )}\n >\n \n Edit\n \n\n {/* CONVERT */}\n \n \n Convert\n \n\n {/* GENERATE AI PROTO */}\n {\n itemsCurrentlyInAIGeneration.find(i => i.id === item.id) ?\n
    \n \n AI product generation in progress\n
    \n :\n {\n props.showConfirmModal('success',\n 'Generate AI product',\n 'Are you sure you would like to submit this item for AI product generation?',\n 'Generate AI Product',\n () => submitItemForAIGenerate(item),\n null);\n\n }}\n className={classNames(isCompleted ? 'text-gray-400 pointer-events-none' : 'text-cyan-600 hover:text-cyan-500',\n 'tooltip-container btn-icon')}\n >\n \n Generate proto\n \n }\n\n {/* DESKTOP ASSESSING */}\n \n i.id === item.id) !== undefined}\n onChange={(e) => {\n if (e.target.checked) {\n // if this item is not already in the list, add it\n if (!itemsToDesktopAssess.find(i => i.id === item.id)) {\n setItemsToDesktopAssess([...itemsToDesktopAssess, item]);\n }\n } else {\n // find and remove this item from the list\n setItemsToDesktopAssess(itemsToDesktopAssess.filter(i => i.id !== item.id));\n }\n\n // If the item selection for desktop assessment has been modified, then reset the desktop assessment data\n // This is for the \"Desktop Assess\" button, to either show \"Desktop Assess\" or \"Continue Assessment\"\n if (!isEmpty(desktopAssessment)) setDesktopAssessment([])\n }}\n />\n \n\n {/* IGNORE */}\n {\n promptVerifyItem(item, 'CANNOT_BE_VERIFIED');\n }}\n className={classNames(\n 'tooltip-container btn-icon-danger',\n isCompleted ? 'text-gray-400 pointer-events-none' : 'text-red-500 hover:text-red-400',\n )}\n >\n \n Cannot verify\n \n\n {/* VERIFY */}\n {\n promptVerifyItem(item, 'VERIFIED');\n }}\n className={classNames(\n 'tooltip-container btn-icon',\n isCompleted ? 'text-gray-400 pointer-events-none' : 'text-green-600 hover:text-green-500',\n )}\n >\n \n Verify\n \n\n\n
    \n \n\n \n );\n };\n\n const renderStandardPagination = () => {\n if (claim === null) {\n return (\n \n
    \n \n \n \n \n Loading items...\n
    \n \n );\n }\n\n if (isEmpty(claim.items)) {\n return (\n \n
    No items require verification.
    \n \n );\n }\n\n let itemCount = 0;\n\n for (const item of claim.items) {\n if (item.is_manual) {\n itemCount += 1;\n }\n }\n\n return (\n \n
    \n

    \n Showing {itemCount} items for verification\n

    \n
    \n
    \n
    \n \n );\n };\n\n const renderVerifyAllButton = () => {\n\n if (claim === null || checkAllItemsVerified()) {\n return (<>);\n }\n\n return (\n \n \n Verify All\n \n );\n };\n\n function onInitiateDesktopAssessing(buttonHandler) {\n\n // If the desktop assessment has already been done, then re-open the modal\n // If the desktop assessment data has been cleared, then re-run the desktop assessment\n if (!isEmpty(desktopAssessment)) {\n buttonHandler.reset();\n setShowDesktopAssessing(true);\n return\n }\n\n\n if (itemsToDesktopAssess.length === 0) {\n props.showAlertModal('error', 'No items selected', 'Please select items to desktop assess');\n buttonHandler.reset();\n return;\n }\n\n let query = `\n query DesktopAssessmentRequest{\n request_desktop_assessment(\n claim_id:\"${claimId}\" \n item_ids:[${itemsToDesktopAssess.map(i => `\"${i.id}\"`).join(',')}]\n ){\n error{\n message\n type\n }\n items{\n id\n product{\n brand\n model_numbers\n description\n }\n claimant_quote\n desktop_assessment{\n entry{\n delivery_cost_extract\n free_delivery\n price\n source_url\n supplier_name\n url_valid\n }\n mid{\n delivery_cost_extract\n free_delivery\n price\n source_url\n supplier_name\n url_valid\n }\n high{\n delivery_cost_extract\n free_delivery\n price\n source_url\n supplier_name\n url_valid\n }\n product_list {\n delivery_cost_extract\n free_delivery\n price\n source_url\n thumbnail\n supplier_name\n brand\n model_number\n description\n price_class\n }\n }\n }\n }\n }\n `\n\n customGraphRequest(\n query,\n (data) => {\n // Select the entry quote by default for each item\n let assessment_items = data.items.map(item => {\n\n const entry = item.desktop_assessment.entry;\n if (entry.price &&\n entry.source_url &&\n entry.brand &&\n entry.description) {\n item.selected_quote = entry;\n } else {\n item.selected_quote = {};\n }\n\n return item;\n })\n\n setDesktopAssessment(assessment_items)\n setShowDesktopAssessing(true);\n setItemsToDesktopAssess([])\n\n // Show the \"Continue Assessment\" text on the desktop assessing button\n buttonHandler.reset();\n },\n (error) => {\n props.onError(error);\n buttonHandler.onError();\n }\n )\n\n }\n\n const allProps = {\n ...props,\n claimId,\n claim, setClaim,\n user, setUser,\n categories, setCategories,\n alertOpen, setAlertOpen,\n alertOptions, setAlertOptions,\n notificationOpen, setNotificationOpen,\n notificationMessage, setNotificationMessage,\n confirmModalOpen, setConfirmModalOpen,\n confirmModalOptions, setConfirmModalOptions,\n showDesktopAssessing, setShowDesktopAssessing,\n itemsToDesktopAssess, setItemsToDesktopAssess,\n desktopAssessment, setDesktopAssessment,\n editManualItemOpen, setUpdateManualItemOpen,\n itemInEditManualItemModal, setItemInEditManualItemModal,\n productInfoModalOpen, setProductInfoModalOpen,\n productInfoModalOptions, setProductInfoModalOptions,\n itemsCurrentlyInAIGeneration, setItemsCurrentlyInAIGeneration,\n }\n\n const renderGenerateAllAI_Button = () => {\n\n if (claim === null || checkAllItemsVerified()) {\n return (<>);\n }\n\n return (\n \n \n Generate All AI\n \n );\n };\n\n return (\n <>\n
    \n\n {\n }}\n message={notificationMessage}\n />\n\n \n\n \n\n {\n alertError(setAlertOpen, setAlertOptions, error);\n }}\n />\n\n \n\n\n
    \n\n {/* TODO : change usage to base modal */}\n \n\n
    \n\n {/* HEADER */}\n
    \n

    Item Verification

    \n\n
    \n\n {/* CLAIM PROFILE */}\n \n \n \n Claim Profile\n \n Return to the claim quantification review\n \n\n {/* TENDER */}\n {claim !== null && (claim.status_reason === 'Tendering' || checkAllItemsVerified()) && (\n navigate(`/tender/${claimId}`)}\n className=\"tooltip-container btn py-2\"\n >\n \n \n Tender\n \n Go to tender page\n \n )}\n\n
    \n\n
    \n\n\n
    \n\n
    \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {renderStandardItems()}\n
    \n Name\n \n Description\n \n Category\n \n Brand\n \n Model\n \n Bar code (EAN)\n \n Status\n \n Quantity\n \n
    \n \n i.status === 'VERIFICATION')}\n onChange={(e) => {\n if (e.target.checked) {\n // Set all items\n setItemsToDesktopAssess(claim.items.filter(i => i.is_manual && i.status === 'VERIFICATION'));\n } else {\n // clear desktopAssessingItems\n setItemsToDesktopAssess([]);\n }\n\n // If the item selection for desktop assessment has been modified, then reset the desktop assessment data\n // This is for the \"Desktop Assess\" button, to either show \"Desktop Assess\" or \"Continue Assessment\"\n if (!isEmpty(desktopAssessment)) setDesktopAssessment([])\n }}\n />\n \n Actions\n
    \n
    \n\n {/* Pagination */}\n {renderStandardPagination()}\n\n
    \n\n
    \n\n {/* DESKTOP ASSESSING */}\n \n \n Desktop Assess\n \n :\n <>\n \n Continue Assessment\n \n )}\n loadingContent={(<>\n \n )}\n errorContent='Failed to complete desktop assessment'\n />\n {renderGenerateAllAI_Button()}\n {renderVerifyAllButton()}\n\n
    \n\n
    \n
    \n
    \n\n
    \n \n );\n}\n\nfunction DesktopAssessingModal(props) {\n\n const [selectedSupplier, setSelectedSupplier] = useState(null);\n const [supplierOrganisations, setSupplierOrganisations] = useState(null);\n\n const [includeDeliveryFee, setIncludeDeliveryFee] = useState(false);\n\n useEffect(() => {\n if (props.open)\n fetchSuppliers();\n }, [props.open]);\n\n function fetchSuppliers() {\n\n if (!isEmpty(supplierOrganisations)) return supplierOrganisations;\n\n let query = `\n query Accounts_Suppliers{\n accounts( \n organisation: \"${props.claim.organisation.id}\",\n types: [ADMINISTRATOR_SUPPLIER, INSURER_SUPPLIER]\n ) {\n error {\n type\n message\n }\n \n accounts {\n type\n organisation_2 {\n unique_reference_name\n id\n type\n info {\n name\n logo_image_url\n country\n country_text\n }\n }\n \n }\n }\n }\n `\n\n customGraphRequest(\n query,\n (data) => {\n const organisations = data.accounts.map(account => account.organisation_2);\n setSupplierOrganisations(organisations);\n },\n props.onError\n )\n }\n\n function onSubmitAssessment(buttonHandler) {\n /* If any selected_quotes are missing required fields,\n warn the user that these will be ignored */\n\n buttonHandler.reset()\n\n let invalidQuotes = false;\n\n for (let item of props.desktopAssessment) {\n if (!item.selected_quote ||\n !item.selected_quote.brand ||\n !item.selected_quote.model_number ||\n !item.selected_quote.description ||\n !item.selected_quote.price ||\n !item.selected_quote.source_url\n ) {\n invalidQuotes = true;\n }\n }\n\n if (invalidQuotes) {\n props.showConfirmModal(\n 'info',\n 'Invalid quotes',\n (
    \n

    Some selected quotes are missing required fields

    \n

    These quotes will be ignored

    \n
    \n Required fields:\n

    Brand, Model number, Price, Description, Source url

    \n
    ),\n 'Ignore and submit',\n ()=> submitDesktopAssessment(buttonHandler),\n ()=>buttonHandler.reset()\n )\n }\n else {\n submitDesktopAssessment(buttonHandler)\n }\n\n }\n\n function submitDesktopAssessment(buttonHandler) {\n\n buttonHandler.onLoading()\n\n let payloads = assessmentPayloads();\n\n if (isEmpty(payloads)) {\n props.showAlertModal(\n 'info',\n 'No items/levels selected',\n 'No levels for any items have been selected for desktop assessment'\n )\n buttonHandler.onError(\"No items selected for desktop assessment\");\n return;\n }\n\n if (isEmpty(selectedSupplier)) {\n props.showAlertModal(\n 'info',\n 'No supplier selected',\n 'Please select a supplier to submit the desktop assessment to'\n )\n buttonHandler.onError(\"No supplier selected\");\n return;\n }\n\n let mutation = `\n mutation ResolveAssessment {\n resolve_desktop_assessment(\n claim_id: \"${props.claimId}\"\n supplier_id: \"${selectedSupplier.id}\"\n assessment_payloads: [${payloads}]\n ){\n error{type, message}\n items{\n id\n }\n }\n }\n `\n\n customGraphRequest(\n mutation,\n (data) => {\n props.showNotificationModal(\n 'success',\n 'Resolved Successfully',\n 'The desktop assessment has been submitted successfully'\n )\n props.setOpen(false);\n buttonHandler.onSuccess();\n fetchClaim(props.claimId, props.setClaim, props.navigate);\n },\n (error) => {\n props.onError(error)\n buttonHandler.onError();\n }\n )\n\n }\n\n function assessmentPayloads() {\n /* Create the assessment payload\n assessment_payloads:[\n {\n item_id: \"\"\n\n // original product\n brand: \"\"\n description: \"\"\n model_number: \"\"\n\n // selected quote\n desktop_replacements: [\n {\n brand: \"Chaka\"\n description: \"Bag of charcoal\"\n model_number: \"ch1x\"\n price: 60\n source_url: \"https://www.example.com/source1\"\n }\n ]\n\n }\n ]\n */\n\n let payloads = []\n\n props.desktopAssessment.forEach(item => {\n\n let payload = ` \n {\n item_id: \"${item.id}\",\n \n brand: \"${escapeDoubleQuotes(item.product.brand)}\",\n description: \"${escapeDoubleQuotes(item.product.description)}\",\n model_number: \"${escapeDoubleQuotes(item.product.model_numbers[0])}\",\n \n desktop_replacements: [\n {\n brand: \"${escapeDoubleQuotes(item.selected_quote.brand)}\"\n description: \"${escapeDoubleQuotes(item.selected_quote.description)}\"\n model_number: \"${escapeDoubleQuotes(item.selected_quote.model_number)}\"\n price: ${getQuotePrice(item.selected_quote)}\n source_url: \"${escapeDoubleQuotes(item.selected_quote.source_url)}\"\n }\n ]\n }\n `\n\n // Only add the payload if the selected quote has all the required fields\n if (item.selected_quote &&\n item.selected_quote.brand &&\n item.selected_quote.model_number &&\n item.selected_quote.description &&\n item.selected_quote.price &&\n item.selected_quote.source_url\n ) {\n payloads.push(payload)\n }\n\n })\n\n return payloads.join(',\\n');\n\n }\n\n function getQuotePrice(quote) {\n /* A desktop assessment object as a input\n * Return the quote price, optionally including the delivery fee */\n\n if (!quote || !quote.price) return '-';\n\n const price = parseFloat(quote.price) || 0;\n const deliveryCost = parseFloat(quote.delivery_cost_extract) || 0;\n const freeDelivery = quote.free_delivery || false;\n\n let totalPrice = includeDeliveryFee ? price + deliveryCost : price;\n if (freeDelivery) totalPrice = price;\n\n // Round down to two decimal points\n totalPrice = Math.floor(totalPrice * 100) / 100;\n\n return totalPrice;\n }\n\n function renderItem(item) {\n\n function getBrandRecommendations() {\n /* Return a list of terms for the brand dropdown */\n if (!item.selected_quote || !item.selected_quote?.description) return [];\n return cumulativeSplit(item.selected_quote.description);\n }\n\n function getModelRecommendations() {\n /* Return a list of terms for the model number dropdown */\n if (!item.selected_quote || !item.selected_quote?.description) return [];\n\n // Remove the brand from the beginning of the description\n let description = item.selected_quote.description;\n let brandWords = item.selected_quote.brand?.split(' ') || [];\n for (let word of brandWords) {\n // replace the first occurrence of the word\n description = description.replace(word, '').trim();\n }\n\n return cumulativeSplit(description);\n }\n\n function cumulativeSplit(text) {\n /**\n * Returns cumulative phrases from the input string\n *\n * @example\n * text = \"this is a test string\"\n * // Output: [\"this\", \"this is\", \"this is a\", \"this is a test\", \"this is a test string\"]\n */\n\n let words = text.split(' ');\n // Remove the first word if it is not a letter or number\n if (!/[a-zA-Z0-9]/.test(words[0])) words.shift();\n\n let result = [];\n for (let i = 1; i <= words.length; i++) {\n\n // If the last word (next additional word) does not contain a letter or a number\n // then ignore that phrase\n // E.g: \"this is a test -\" should be ignored, since only a \"-\" has been added\n let phraseWords = words.slice(0, i);\n const lastWord = phraseWords[i - 1];\n\n if (/[a-zA-Z0-9]/.test(lastWord)) {\n const phrase = phraseWords.join(' ');\n result.push(phrase);\n }\n }\n return result;\n }\n\n function onSelectQuote(product) {\n\n // Update the selected quote for the item\n let _item = props.desktopAssessment[props.desktopAssessment.indexOf(item)];\n\n // -- Delivery fee in the description\n let description = product.description;\n if(includeDeliveryFee){\n if (product.delivery_cost_extract) {\n description += ` (Delivery: ${currencySymbol(props.claim)}${product.delivery_cost_extract || '-'})`\n }\n if(product.free_delivery){\n description += ` (Free delivery)`\n }\n }\n\n // -- Auto populate brand and model number\n let brand = product.brand;\n let model_number = product.model_number || product.model_numbers?.[0];\n try {\n // replace all none letter or number characters with a space\n const descriptionWords = product?.description?.replaceAll(/[^a-zA-Z0-9]/g, ' ').split(' ') || ['-'];\n brand = descriptionWords[0];\n\n // model number is the second, to 5th word in the description\n model_number = descriptionWords.slice(1, 5).join(' ');\n }\n catch (e) {\n console.error('Error creating brand and model from description: ', e)\n }\n\n _item.selected_quote = {\n ...product,\n model_number: model_number,\n brand: brand,\n original_quote: {\n ...product,\n model_number: product.model_number || product.model_numbers?.[0],\n },\n description: description\n };\n\n props.setDesktopAssessment([...props.desktopAssessment]);\n }\n\n\n return (\n \n\n {/* ITEMS */}\n \n {item.product.brand}\n

    {item.product.model_numbers[0]}

    \n \n\n\n {/* QUOTES */}\n \n onSelectQuote(selectedProductQuote)}\n\n renderOption={(product) =>\n
    \n\n
    \n \n
    \n\n
    \n\n
    \n

    {currencySymbol(props.claim)}   {getQuotePrice(product)}

    \n\n
    \n \n

    {product?.price || '-'}

    \n
    \n\n
    \n \n

    \n {product?.delivery_cost_extract || '-'}\n   {product?.free_delivery && ' free delivery'}\n

    \n
    \n
    \n\n
    \n\n
    \n

    {product?.brand || '-'}

    \n

    {product?.model_number || '-'}

    \n {product?.price_class || '-'}\n
    \n\n
    \n\n
    \n

    {product?.description || '-'}

    \n\n \n {product?.supplier_name}\n \n \n
    \n\n
    \n }\n\n renderSelected={(org) =>\n

    {item.desktop_assessment?.product_list?.length} Quotes

    \n }\n />\n \n\n {/* PRODUCT PREVIEW */}\n \n \n \n\n {/* QUOTE */}\n \n\n
    \n\n
    \n\n
    \n\n {/* BRAND*/}\n
    \n {\n let newProducts = props.desktopAssessment;\n newProducts[props.desktopAssessment.indexOf(item)].selected_quote.brand = e.target.value;\n props.setDesktopAssessment([...newProducts]);\n }}\n />\n
    \n
      \n {getBrandRecommendations().map((phrase, index) =>\n {\n let newProducts = props.desktopAssessment;\n newProducts[props.desktopAssessment.indexOf(item)].selected_quote.brand = phrase;\n props.setDesktopAssessment([...newProducts]);\n }}\n >\n {phrase}\n \n )}\n
    \n
    \n
    \n\n {/* MODEL */}\n
    \n {\n let newProducts = props.desktopAssessment;\n newProducts[props.desktopAssessment.indexOf(item)].selected_quote.model_number = e.target.value;\n props.setDesktopAssessment([...newProducts]);\n }}\n />\n\n
    \n
      \n {getModelRecommendations().map((phrase, index) =>\n {\n let newProducts = props.desktopAssessment;\n newProducts[props.desktopAssessment.indexOf(item)].selected_quote.model_number = phrase;\n props.setDesktopAssessment([...newProducts]);\n }}\n >\n {phrase}\n \n )}\n
    \n
    \n
    \n\n
    \n\n
    \n {/* URL */}\n
    \n \n \n \n \n \n {\n let _item = props.desktopAssessment[props.desktopAssessment.indexOf(item)];\n _item.selected_quote.source_url = e.target.value;\n props.setDesktopAssessment([...props.desktopAssessment]);\n }}\n />\n
    \n\n {/* PRICE */}\n \n

    \n Quote: {currencySymbol(props.claim)} {item.selected_quote?.original_quote?.price}\n

    \n

    \n Delivery: {currencySymbol(props.claim)} {item.selected_quote?.original_quote?.delivery_cost_extract || 0}\n

    \n

    \n Delivery Free: \n {\n (item.selected_quote?.original_quote?.free_delivery === true && 'Yes') ||\n (item.selected_quote?.original_quote?.free_delivery === false && 'No')\n }\n

    \n {item.claimant_quote &&\n

    \n Claimant\n quote*: {currencySymbol(props.claim)} {item.claimant_quote}\n

    \n }\n
    \n }\n >\n {\n let newProducts = props.desktopAssessment;\n let _item = newProducts[props.desktopAssessment.indexOf(item)];\n _item.selected_quote.price = e.target.value;\n // If the user is inputting a price, then ignore the delivery cost\n _item.selected_quote.delivery_cost_extract = 0;\n props.setDesktopAssessment([...newProducts]);\n }}\n className={classNames(\n 'input pl-8 w-[10rem]',\n\n // If there is a claimant quote, then color the prices\n item.claimant_quote && parseInt(item.claimant_quote) === parseInt(item.selected_quote?.price) && 'text-yellow-600',\n item.claimant_quote && item.claimant_quote < item.selected_quote?.price && 'text-red-500',\n item.claimant_quote && item.claimant_quote > item.selected_quote?.price && 'text-green-600',\n )}\n />\n \n\n
    \n\n\n
    \n\n {/* DESCRIPTION */}\n {\n let newProducts = props.desktopAssessment;\n newProducts[props.desktopAssessment.indexOf(item)].selected_quote.description = e.target.value;\n props.setDesktopAssessment([...newProducts]);\n }}\n />\n\n \n\n \n\n {/* ACTIONS */}\n \n
    \n\n {/* CLEAR QUOTE */}\n \n \n \n\n {/* REMOVE ITEM */}\n \n \n \n\n
    \n \n\n \n );\n\n }\n\n function downloadAttachment(attachment) {\n\n if (!attachment || !attachment.id || !attachment.object_id || !attachment.object_type) {\n props.showAlertModal('error', 'Invalid attachment', 'Attachment is missing required fields');\n return;\n }\n\n // Create download url\n let mutation = `\n query GenerateFileDownloadURL{\n generate_file_download_url(\n file_id: \"${attachment.id}\"\n object_id: \"${attachment.object_id}\"\n object_type: ${attachment.object_type}\n ){\n error{type, message}\n url\n }\n }\n `\n\n customGraphRequest(\n mutation,\n (data) => {\n props.showToastNotificationModal('success', 'URL Generated', 'The download will start shortly');\n\n // Create a new anchor element\n const anchor = document.createElement('a');\n\n // Set the href attribute to the download URL\n anchor.href = data.url;\n\n // Trigger a click event on the anchor element\n anchor.click();\n\n // Cleanup: remove the anchor element from the document\n anchor.remove();\n },\n props.onError\n )\n\n }\n\n return (\n props.setOpen(false)}>\n {\n props.setOpen(false)\n }}>\n \n
    \n \n\n
    \n\n {/* To prevent Headless UI focusing on the first button (focusable-object) */}\n \n\n \n \n\n
    {\n e.stopPropagation(); // prevent closing the modal from clicking inside of the main content\n }}\n >\n\n
    \n\n

    Desktop Assessing

    \n\n

    \n Assessment results for the selected items are shown below\n

    \n\n
    \n\n
    \n setSelectedSupplier(supplier)}\n\n renderOption={(org) =>\n
    \n \n {org?.info.name || ''}\n
    \n }\n\n /* TODO REMOVE THIS use {active}*/\n renderSelected={(org) =>\n org ?\n
    \n \n {org.info.name || ''}\n
    : 'Select a supplier'\n }\n />\n\n {/* ATTACHMENTS */}\n {\n props.claim?.attachments?.length <= 0 ?\n \n

    Attachments

    \n
    \n :\n \n {\n if (!attachment || !attachment.id || !attachment.object_id || !attachment.object_type) {\n props.showAlertModal('error', 'Invalid attachment', 'Attachment is missing required fields');\n return;\n }\n\n // Create download url\n let mutation = `\n query GenerateFileDownloadURL{\n generate_file_download_url(\n file_id: \"${attachment.id}\"\n object_id: \"${attachment.object_id}\"\n object_type: ${attachment.object_type}\n ){\n error{type, message}\n url\n }\n }\n `\n props.showConfirmModal(\n 'info',\n 'Disclaimer',\n 'By downloading this file, you acknowledge and agree that the content is provided \\'as is\\' without any guarantees.',\n 'Download',\n () => { // On confirm\n customGraphRequest(\n mutation,\n (data) => {\n props.showToastNotificationModal('success', 'URL Generated', 'The download will start shortly');\n\n // Create a new anchor element\n const anchor = document.createElement('a');\n\n // Set the href attribute to the download URL\n anchor.href = data.url;\n\n // Trigger a click event on the anchor element\n anchor.click();\n\n // Cleanup: remove the anchor element from the document\n anchor.remove();\n },\n props.onError\n )\n }\n )\n\n }}\n\n renderOption={(attachment) =>\n
    \n

    {attachment.file_name}

    \n
    \n }\n\n /* TODO REMOVE THIS use {active}*/\n renderSelected={(attachment) =>\n attachment ?\n
    \n

    {attachment.file_name}

    \n
    : 'Attachments'\n }\n />\n
    \n }\n\n\n
    \n\n {/* DELIVERY FEE CHECKBOX */}\n
    \n \n setIncludeDeliveryFee(!includeDeliveryFee)}\n >\n {includeDeliveryFee ?\n
    \n \n Delivery included\n
    \n :\n
    \n \n Delivery excluded\n
    \n }\n \n
    \n
    \n\n {/* PRICE CLASS */}\n \n
    \n \n \n \n
    \n
    \n\n
    \n\n
    \n\n
    \n\n \n\n \n \n \n \n \n \n \n \n \n\n {props.desktopAssessment.map(item => {renderItem(item)})}\n\n
    \n Item\n \n Quotes\n \n Preview\n \n Assessed\n
    \n\n
    \n\n {/* FOOTER */}\n
    \n\n \n

    Temporarily hide this desktop assessment

    \n

    You may re-open it via the Desktop Assess button

    \n }>\n props.setOpen(false)}\n >\n Minimize\n \n
    \n\n props.showConfirmModal(\n 'success',\n 'Submit Desktop Assessment',\n 'Are you sure you would like to submit the desktop assessment?',\n 'Submit',\n () => onSubmitAssessment(buttonHandler),\n () => buttonHandler.onError('Cancelled')\n )}\n className={'btn'}\n content='Assess'\n loadingContent={}\n successContent='Credentials accepted'\n errorContent='Incorrect username or password'\n />\n\n
    \n\n
    \n
    \n\n
    \n\n\n \n
    \n
    \n
    \n )\n\n}\n\n","/** Any page that is related to Claims, should fall under here, to get the benefit of the NavbarTop */\nimport {Route, Routes, Navigate, useParams, useLocation } from 'react-router-dom';\nimport ClaimItemSearch from './containers/claim/ClaimItemSearch';\nimport ClaimIssueAward from './containers/claim/ClaimIssueAward';\nimport ClaimIssueVoucher from './containers/claim/ClaimIssueVoucher';\nimport ClaimVoucherReturn from './containers/claim/ClaimVoucherReturn';\nimport ClaimCartReview from './containers/claim/ClaimCartReview';\nimport ClaimProfile from './containers/claim/ClaimProfile';\nimport ClaimTender from './containers/claim/ClaimTender';\nimport ClaimPostTenderInspection from './containers/claim/ClaimPostTenderInspection';\nimport ClaimVerification from './containers/claim/ClaimVerification';\nimport ClaimsHome from './containers/claim/ClaimsHome';\nimport Safe from \"./components/Safe\";\n\n\nexport default function ClaimPages(props){\n\n return (\n\n
    \n\n \n\n
    \n\n );\n\n}\n\nconst ClaimPagesRoutes = (props) => {\n\n function RedirectToNewPath({ newPath }) {\n const params = useParams();\n const location = useLocation();\n\n // Extract dynamic segments and reconstruct the new URL\n let newUrl = newPath;\n Object.entries(params).forEach(([key, value]) => {\n newUrl = newUrl.replace(`:${key}`, value);\n });\n\n // Preserve search params if any (e.g., ?query=xyz)\n if (location.search) {\n newUrl += location.search;\n }\n\n return ;\n }\n\n const access = props.access;\n\n return (\n \n\n , 'ADMIN_UP')}/>\n\n , '')} exact/>\n , '')} exact/>\n\n {/* ITEM SEARCH */}\n {/* TODO test this works well */}\n , 'INSURER_UP')}/>\n } /> {/* Old route, redirect */}\n\n {/* ITEM SEARCH - SPECIAL FUNCTIONALITY */}\n , 'ADMIN_UP')}/>\n , 'SUPPLIER_UP')}/>\n , 'SUPPLIER_UP')}/>\n , 'ADMIN_UP')}/>\n\n {/* CLAIM CART REVIEW */}\n , 'INSURER_UP')}/>\n } /> {/* Old route, redirect */}\n\n {/* TENDER */}\n , 'SUPPLIER_UP')}/>\n } /> {/* Old route, redirect */}\n\n {/* POST TENDER */}\n , 'INSURER_UP')}/>\n } /> {/* Old route, redirect */}\n\n {/* AWARD */}\n , 'SUPPLIER_UP')}/>\n } /> {/* Old route, redirect */}\n\n {/* VOUCHER */}\n , 'INSURER_UP')}/>\n } /> {/* Old route, redirect */}\n\n {/* SPECIAL VOUCHER RETURN PAGE */}\n , '')}/>\n\n {/* CLAIM PROFILE */}\n , 'SUPPLIER_UP')} />\n } />\n\n {/* VERIFICATION */}\n {/* TODO remove this page */}\n , 'INSURER_UP')}/>\n\n \n );\n\n};\n\nconst BlankPage = () => {\n return (\n <>\n );\n};","// Library imports\n\nimport React from 'react';\nimport {classNames} from \"../utils/helpers\";\nimport {ExternalLinkIcon} from \"@heroicons/react/solid\";\n\n\n// Footer component\nexport default function Footer(props) {\n return (\n
    \n\n {/* ALL RIGHT RESERVED */}\n

    \n © {new Date().getFullYear()}\n SLVRCLD BV\n | \n All rights reserved\n

    \n\n {/* PRIVACY POLICY AND TERMS & CONDITIONS */}\n
    \n
    \n {/* PRIVACY POLICY */}\n \n \n Privacy Policy\n \n\n {/* TERMS AND CONDITIONS */}\n \n \n Terms & Conditions\n \n
    \n
    \n\n {/* SLVRCLD LOGO */}\n {/* Check if props.portalRepresentative is 'THESL' and conditionally render logo */}\n {props.portalRepresentative === 'THESL' &&\n \n }\n\n
    \n );\n};\n","// Local imports\nimport React, {useState} from \"react\";\n\nexport default function Ratelimited() {\n\n /** Automatically return the user to their previous page after 60 seconds */\n let timeout = null;\n timeout = setTimeout(()=>{\n sessionStorage.setItem('rl_min', '0');\n sessionStorage.setItem('rl_hour', '0');\n window.clearTimeout(timeout)\n\n // Do not return, as a page load state-loop induced ratelimit will immediately trigger the ratelimit again\n // window.history.go(-1);\n }, 1000 * 60)\n\n\n /** Count down from 60 seconds */\n let countdown = 60;\n const [automaticReturn, setAutomaticReturn] = useState(null);\n if(!automaticReturn){\n let interval = setInterval(function() {\n let t = document.getElementById('timerCountdown');\n countdown -= 1\n t.innerText = `${countdown} seconds remaining`\n if(countdown < 3){\n t.innerText = 'Clear to proceed'\n window.clearInterval(interval)\n }\n }, 1000);\n\n setAutomaticReturn(interval)\n }\n\n\n\n const onReturnClicked = () => {\n /** When the user clicks the '<- return now' button */\n\n window.clearTimeout(timeout) // clear the automatic timeout to prevent memory leaks\n\n sessionStorage.setItem('rl_min', '0'); // reset the ratelimit\n sessionStorage.setItem('rl_hour', '0');\n\n window.history.go(-1) // go back 1 in this tabs URL history\n }\n\n return (\n
    \n
    \n {/*