{"version":3,"file":"main.1747b3343c2368f9.js","mappings":"4LAWO,IAAMA,EAAU,MAAjB,MAAOA,EACXC,YAAoBC,EAAwCC,EACxCC,GADAC,KAAAH,iBAAwCG,KAAAF,SACxCE,KAAAD,kBAAqC,CAEzDE,cAEE,OAAOD,KAAKH,eAAeK,aAAaC,QAAKC,KAAK,IAAC,EACjDC,KAAKC,MACCA,IAAQN,KAAKH,eAAeU,aAAaD,MAI7CN,KAAKF,OAAOU,MAAMR,KAAKD,iBAAiBU,UAAU,2BAC3C,IAGb,EAhBWd,SAAU,mBAAAe,iBAAVf,GAAUgB,MAAAC,KAAAD,MAAAE,MAAAF,MAAAG,MAAA,EAAVnB,EAAU,WAAAoB,EAAAC,IAAA,OAAVrB,EAAUsB,QAAVtB,EAAUuB,UAAAC,WAFT,SAEDxB,CAAU,+GCAhB,IAAMyB,EAAS,MAAhB,MAAOA,EAEXxB,YAAoBC,EACAwB,EACAvB,EACAC,GAHAC,KAAAH,iBACAG,KAAAqB,SACArB,KAAAF,SACAE,KAAAD,mBAJbC,KAAAsB,OAAiB,+BAIiC,CAEzDrB,cACE,OAAOD,KAAKH,eAAeK,aAAaC,QAAKC,KAAK,IAAC,EACjDC,KAAKC,IACH,GAAIA,EACF,OAAO,EAET,MAAMiB,EAAevB,KAAKD,iBAAiBU,UAAU,yBAC/Ce,EAAgBxB,KAAKD,iBAAiBU,UAAU,yBACtD,OAAqH,IAAjHT,KAAKF,OAAO2B,OAAOC,OAAOC,GAASA,EAAMC,UAAYJ,GAAiBG,EAAMC,UAAYL,GAAcM,QACxG7B,KAAKF,OAAOU,MAAMe,GAEpBO,aAAaC,QAAQ/B,KAAKsB,OAAQU,OAAOC,SAASC,UAClDlC,KAAKqB,OAAOc,cAAc,WACnB,IAGb,EAvBWf,SAAS,mBAAAV,iBAATU,GAAST,MAAAC,KAAAD,MAAAE,MAAAF,MAAAG,MAAAH,MAAAyB,MAAA,EAAThB,EAAS,WAAAL,EAAAC,IAAA,OAATI,EAASH,QAATG,EAASF,UAAAC,WAFR,SAEDC,CAAS,wECHf,IAAMiB,EAAkB,MAAzB,MAAOA,EAEXzC,YAAoB0C,GAAAtC,KAAAsC,eAA+B,CAEnDrC,YAAYsC,EAA8BC,GACxC,MAAMC,EAAYC,SAASF,EAAMG,IAAIC,MAAM,YAAY,GAAI,IAC3D,OAAIC,MAAMJ,IAAS,EAAUK,OAAG,GACzB9C,KAAKsC,cAAcS,iBAAiBN,EAC7C,EARWJ,SAAkB,mBAAA3B,iBAAlB2B,GAAkB1B,MAAAC,KAAA,EAAlByB,EAAkB,WAAAW,EAAAhC,IAAA,OAAlBqB,EAAkBpB,QAAlBoB,EAAkBnB,UAAAC,WAFjB,SAEDkB,CAAkB,qCCRxB,IAAKY,EAAZ,SAAYA,GACRA,WAAAC,MAAA,WACAD,IAAAE,MAAA,WACAF,IAAAG,KAAA,UAHQH,CAIZ,CAJA,CAAYA,GAAW,qCCAhB,IAAKI,EAAZ,SAAYA,GACRA,WAAAC,MAAA,WACAD,IAAAE,QAAA,aACAF,IAAAG,QAAA,aACAH,IAAAI,KAAA,UACAJ,IAAAK,IAAA,SALQL,CAMZ,CANA,CAAYA,GAAW,qCCAhB,IAAKM,EAAZ,SAAYA,GACRA,WAAAC,MAAA,WACAD,IAAAE,OAAA,YACAF,IAAAG,OAAA,YACAH,IAAAI,UAAA,eACAJ,IAAAK,MAAA,WACAL,IAAAM,SAAA,cACAN,IAAAO,SAAA,cACAP,IAAAQ,YAAA,iBACAR,IAAAS,OAAA,YACAT,IAAAU,UAAA,gBACAV,IAAAW,UAAA,gBACAX,IAAAY,WAAA,iBAZQZ,CAaZ,CAbA,CAAYA,GAAU,sECeVa,EAAZ,SAAYA,GACVA,WAAAC,SAAA,cACAD,IAAAE,QAAA,aACAF,IAAAG,aAAA,kBACAH,IAAAI,iBAAA,sBACAJ,IAAAK,WAAA,gBACAL,IAAAM,YAAA,iBANUN,CAOZ,CAPA,CAAYA,GAAS,IASd,MAAMO,EAAgBC,OAAOC,KAAKT,GACpC9C,OAAOwD,IAAQrC,MAAMsC,OAAOD,KAASxC,SAASwC,EAAK,KAAO,GAC1D7E,IAAI6E,GAAOxC,SAASwC,EAAK,KAEjBE,EAAqB,CAC9B,CACEC,MAAO,SACPC,MAAOjC,IAAYC,MACnBiC,UAAU,GAEZ,CACEF,MAAO,OACPC,MAAOjC,IAAYI,KACnB8B,UAAU,GAEZ,CACEF,MAAO,MACPC,MAAOjC,IAAYK,IACnB6B,UAAU,GAEZ,CACEF,MAAO,UACPC,MAAOjC,IAAYE,QACnBgC,UAAU,qCC/CT,IAAKC,EAAZ,SAAYA,GACRA,WAAAC,GAAA,QACAD,IAAAE,IAAA,SAFQF,CAGZ,CAHA,CAAYA,GAAiB,qCCAtB,IAAKG,EAAZ,SAAYA,GACRA,WAAAC,MAAA,WACAD,IAAAE,YAAA,iBACAF,IAAAG,iBAAA,sBACAH,IAAAI,SAAA,cACAJ,IAAAK,cAAA,mBAKAL,IAAAM,SAAA,cACAN,IAAAO,aAAA,kBAIAP,IAAAQ,QAAA,aACAR,IAAAS,YAAA,iBAIAT,IAAAU,SAAA,cAIAV,IAAAW,WAAA,iBAIAX,IAAAY,SAAA,eAIAZ,IAAAa,SAAA,eAIAb,IAAAc,QAAA,cAIAd,IAAAe,SAAA,eAIAf,IAAAgB,YAAA,kBA5CQhB,CA6CZ,CA7CA,CAAYA,GAAgB,4CCArB,IAAKiB,EAAZ,SAAYA,GAERA,WAAAC,MAAA,UACAD,IAAAE,QAAA,aACAF,IAAAG,WAAA,gBACAH,IAAAI,kBAAA,uBACAJ,IAAAK,UAAA,eACAL,IAAAM,UAAA,eACAN,IAAAO,WAAA,gBACAP,IAAAQ,KAAA,UACAR,IAAAS,eAAA,oBACAT,IAAAU,YAAA,iBACAV,IAAAW,WAAA,gBACAX,IAAAvC,UAAA,gBACAuC,IAAAxC,OAAA,aACAwC,IAAAzC,YAAA,kBACAyC,IAAA1C,SAAA,eACA0C,IAAA3C,SAAA,eACA2C,IAAA5C,MAAA,YACA4C,IAAA7C,UAAA,gBACA6C,IAAAY,QAAA,cACAZ,IAAAa,OAAA,aACAb,IAAAc,UAAA,gBACAd,IAAAe,aAAA,mBACAf,IAAAgB,QAAA,cACAhB,IAAA9B,YAAA,kBACA8B,IAAAiB,SAAA,eACAjB,IAAAkB,KAAA,WACAlB,IAAAmB,SAAA,eA5BQnB,CA6BZ,CA7BA,CAAYA,GAAW,IA+BhB,MAAMoB,EAAYhD,OAAOC,KAAK2B,GAChClF,OAAOwD,IAAQrC,MAAMsC,OAAOD,KAASxC,SAASwC,EAAK,KAAO,GAC1D7E,IAAI6E,GAAOxC,SAASwC,EAAK,KACzB+C,KAAK,CAACC,EAAGC,IAAMD,EAAIC,oCC3BlB,MAAOC,qCCJL,IAAKC,EAAZ,SAAYA,GACTA,WAAAC,OAAA,YACAD,IAAAE,KAAA,UAFSF,CAGX,CAHD,CAAYA,GAAa,qCCGpB,MAAOG,EAAb5I,cACII,KAAAyI,UAA4B,GAC5BzI,KAAA0I,OAA8B,GAC9B1I,KAAA2I,YAA0B,GAC1B3I,KAAA4I,aAA2B,GAC3B5I,KAAA6I,QAAsB,GACtB7I,KAAA8I,OAAqB,GACrB9I,KAAA+I,KAAmB,GACnB/I,KAAAgJ,MAA0B,GAC1BhJ,KAAAiJ,SAA2B,EAa/B,CAXIC,QACIlJ,KAAKyI,UAAY,GACjBzI,KAAK0I,OAAS,GACd1I,KAAK2I,YAAc,GACnB3I,KAAK4I,aAAe,GACpB5I,KAAK6I,QAAU,GACf7I,KAAK8I,OAAS,GACd9I,KAAK+I,KAAO,GACZ/I,KAAKgJ,MAAQ,GACbhJ,KAAKiJ,SAAW,EACpB,sMCTQE,EAAZ,SAAYA,GACVA,SAAAC,MAAA,QACAD,EAAAE,eAAA,kBACAF,EAAAG,SAAA,WACAH,EAAAI,SAAA,WACAJ,EAAAK,kBAAA,qBALUL,CAMZ,CANA,CAAYA,GAAI,IAWT,IAAMM,EAAc,MAArB,MAAOA,EAwBX7J,YAAoB8J,EAAgCrI,EAC1CsI,EAAuCC,IAD7B5J,KAAA0J,aAAgC1J,KAAAqB,SAC1CrB,KAAA2J,aAAuC3J,KAAA4J,gBAvBhC5J,KAAA6J,cAAaC,OAAOC,OACrC/J,KAAAgK,QAAUC,IAAYC,OACtBlK,KAAAmK,QAAU,cAMFnK,KAAAoK,kBAAoB,IAAIC,IAAgC,GACzDrK,KAAAE,aAAeF,KAAKoK,kBAAkBE,eAErCtK,KAAAuK,sBAAwB,IAAIF,IAAuB,GAIpDrK,KAAAwK,iBAAmBxK,KAAKuK,sBAAsBD,eASjDX,EAAWc,UAAUtK,QAAKuB,KAAOgJ,GAAOA,EAAIC,QAAUC,IAAOC,aAAU,EACrExK,KAAIqK,GAAOA,EAAII,UAA0B,EACzCpJ,KAAOqJ,GAAmBA,EAAgBC,WAAahL,KAAKiL,aAAaC,WAAQ,EACjFC,KAAU,IAAMnL,KAAKoL,mBACpBC,UAAU,OACf,CAEF9K,aAAaD,GACX,OAAOA,GAAQA,EAAKgL,MAAMC,SAASpC,EAAKC,MAC1C,CAEAoC,sBAAsBlL,GACpB,OAAOA,GAAQA,EAAKgL,MAAMC,SAASpC,EAAKE,eAC1C,CAEAoC,4BAA4BnL,GAC1B,OAAOA,GAAQA,EAAKgL,MAAMC,SAASpC,EAAKK,kBAC1C,CAEAkC,gBAAgBpL,GACd,OAAOA,GAAQA,EAAKgL,MAAMC,SAASpC,EAAKI,SAC1C,CAEAoC,gBAAgBrL,GACd,OAAOA,GAAQA,EAAKgL,MAAMC,SAASpC,EAAKG,SAC1C,CAEAsC,WACE,OAAO5L,KAAK0J,WAAWmC,IAAc7L,KAAKgK,QAAU,gBACtD,CAEA8B,gBACE,OAAO9L,KAAK0J,WAAWqC,OAAe/L,KAAKgK,QAAU,UAAWgC,IAClE,CAEAC,gBAAgBC,GAAsB,GACpC,OAAOlM,KAAK0J,WAAWmC,IAAY7L,KAAKgK,QAAU,oCAAsCkC,EAAYF,KACjG7L,QACCE,KAAI8L,GAAe,SAARA,IAAc,EACzBC,KAAID,IACFnM,KAAKuK,sBAAsBhI,KAAK4J,EAAG,IACpC,EACDE,KAAW7L,IACTR,KAAKuK,sBAAsBhI,MAAK,IAAK,EAC9B+J,KAAW9L,KAG1B,CAEA+L,gBACE,OAAOvM,KAAK0J,WAAWmC,IAAY7L,KAAKgK,QAAU,sBAAuBgC,KACtE7L,QACCE,KAAI8L,GAAe,SAARA,GAEjB,CAEAK,kBAAkBC,EAAiBC,GACnC,OAAO1M,KAAK0J,WAAWiD,KAAa3M,KAAKgK,QAAU,UAAW,CAACyC,UAASC,SAAQV,KAC7E7L,QAAKE,KAAI8L,GAAe,SAARA,GACnB,CAEAS,MAAMC,GACJ,OAAO7M,KAAK0J,WAAWiD,KAAW3M,KAAKgK,QAAU,gBAAiB6C,GAAO1M,QACvEE,KAAKyM,IACH,MAAMxM,EAAOwM,EACTxM,IACFN,KAAK+M,eAAezM,GACpBN,KAAK2J,WAAWqD,oBAAoB1M,EAAMN,KAAKO,aAAaD,IAAK,IAEpE,EACD2M,MAAmBjN,KAAK6J,YAE5B,CAEAkD,eAAezM,GACb,GAAIA,EAAM,CACRA,EAAKgL,MAAQ,GACb,MAAMA,EAAQtL,KAAKkN,gBAAgB5M,EAAK6M,OAAOC,KAC/CC,MAAMC,QAAQhC,GAAShL,EAAKgL,MAAQA,EAAQhL,EAAKgL,MAAMiC,KAAKjC,GAE5DxJ,aAAaC,QAAQ/B,KAAKmK,QAASqD,KAAKC,UAAUnN,IAClDwB,aAAaC,QAAQ0H,EAAeiE,aAAcpN,EAAK4K,UAErDlL,KAAK4J,aAAa+D,SADhBrN,EAAKsN,aAAetN,EAAKsN,YAAYC,MACZvN,EAAKsN,YAAYC,MAAMC,KAEvB9N,KAAK4J,aAAamE,aAAY,MAG3D/N,KAAK4J,aAAa+D,SAAS3N,KAAK4J,aAAamE,cAG/C/N,KAAKiL,YAAc3K,EACnBN,KAAKoK,kBAAkB7H,KAAKjC,GAE5BN,KAAKgO,wBAEDhO,KAAKiL,cACPjL,KAAK2J,WAAWqD,oBAAoBhN,KAAKiL,YAAajL,KAAKO,aAAaP,KAAKiL,cAC7EjL,KAAKiM,kBAAkBZ,YACvBrL,KAAKiO,yBAET,CAEAC,SACEpM,aAAaqM,WAAWnO,KAAKmK,SAC7BnK,KAAKoK,kBAAkB7H,UAAK6L,GAC5BpO,KAAKiL,iBAAcmD,EACnBpO,KAAKgO,wBACLhO,KAAK2J,WAAW0E,oBAEhBrO,KAAKqB,OAAOc,cAAc,SAC5B,CAQAmM,SAASzB,GACP,OAAO7M,KAAK0J,WAAWiD,KAAW3M,KAAKgK,QAAU,mBAAoB6C,GAAO1M,QAC1EE,KAAKC,GACIA,IACR,EACD2M,MAAmBjN,KAAK6J,YAE5B,CAEA0E,mBACE,OAAOvO,KAAK0J,WAAWmC,IAAa7L,KAAKgK,QAAU,0BACrD,CAEAwE,YAAY3B,GACV,OAAO7M,KAAK0J,WAAWiD,KAAa3M,KAAKgK,QAAU,wBAAyB6C,EAAOb,IACrF,CAEAyC,sBAAsB5B,GACpB,OAAO7M,KAAK0J,WAAWiD,KAAW3M,KAAKgK,QAAU,kCAAmC6C,EACtF,CAEA6B,wBAAwBC,GACtB,OAAO3O,KAAK0J,WAAWiD,KAAa3M,KAAKgK,QAAU,4CAA8C2E,EAAQ,GAAI3C,IAC/G,CAEA4C,WAAW/B,GACT,OAAO7M,KAAK0J,WAAWiD,KAAyB3M,KAAKgK,QAAU,iBAAkB6C,EACnF,CAEAgC,aAAahC,GACX,OAAO7M,KAAK0J,WAAWiD,KAAW3M,KAAKgK,QAAU,wBAAyB6C,EAC5E,CAEAiC,mBAAmBjC,GACjB,OAAO7M,KAAK0J,WAAWiD,KAAW3M,KAAKgK,QAAU,+BAAgC6C,EACnF,CAQAkC,aAAaJ,EAAgBK,GAAuB,GAClD,OAAOhP,KAAK0J,WAAWmC,IAAY7L,KAAKgK,QAAU,6BAA+B2E,EAAS,gBAAkBK,EAAahD,IAC3H,CAEAkB,gBAAgBC,GACd,OAAOK,KAAKyB,MAAMC,KAAK/B,EAAMvK,MAAM,KAAK,IAC1C,CAEAuM,0BAA0BzC,GACxB,OAAO1M,KAAK0J,WAAWiD,KAAa3M,KAAKgK,QAAU,iCAAmCoF,mBAAmB1C,GAAQ,GAAIV,IACvH,CAEAqD,0BAA0BxC,GACxB,OAAO7M,KAAK0J,WAAWiD,KAAa3M,KAAKgK,QAAU,iCAAkC6C,EAAOb,IAC9F,CAEAsD,cAAcpE,EAAkBqE,EAAkBC,GAChD,OAAOxP,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,yBAA0B,CAACkB,WAAUqE,WAAUC,eAAcxD,IAC1G,CAEAyD,OAAO5C,GACL,OAAO7M,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,iBAAkB6C,EAC/D,CAEA6C,YAAYhD,EAAe6C,GACzB,OAAOvP,KAAK0J,WAAWiD,KAA0B3M,KAAKgK,QAAU,uBAAwB,CAAC0C,QAAO6C,YAClG,CAEAI,qBAAqBC,EAAsBC,GACzC,OAAO7P,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,iCAAkC,CAAC4F,YAAWC,mBAC3F,CAMAC,iBACE,OAAO9P,KAAK0J,WAAWmC,IAAiB7L,KAAKgK,QAAU,yBAAyB7J,QAAKE,KAAI0P,IACnF/P,WAAKiL,cACPjL,KAAKiL,YAAY2C,YAAcmC,EAC/B/P,KAAK+M,eAAe/M,KAAKiL,cAEpB8E,KACR,EAAG9C,MAAmBjN,KAAK6J,YAC9B,CAEAmG,kBAAkBC,GAChB,OAAOjQ,KAAK0J,WAAWiD,KAAkB3M,KAAKgK,QAAU,2BAA4BiG,GAAiB9P,QAAKE,KAAI6P,IACxGlQ,WAAKiL,cACPjL,KAAKiL,YAAY2C,YAAcsC,EAC/BlQ,KAAK+M,eAAe/M,KAAKiL,aAGzBnJ,aAAaC,QAAQ0H,EAAe0G,UAAWnQ,KAAKiL,YAAY2C,YAAYwC,SAEvEF,KACR,EAAGjD,MAAmBjN,KAAK6J,YAC9B,CAEAwG,0BAEE,MAAMC,EAAaxO,aAAayO,QAAQvQ,KAAKmK,SAE7C,GAAImG,EACF,OAAO9C,KAAKyB,MAAMqB,EAItB,CAEAE,cACE,OAAOxQ,KAAK0J,WAAWiD,KAAa3M,KAAKgK,QAAU,wBAAyB,GAAIgC,KAAa7L,QAAKE,KAAI6E,IACpG,MAAM5E,EAAON,KAAKqQ,0BAClB,OAAI/P,IACFA,EAAKmQ,OAASvL,EAEdpD,aAAaC,QAAQ/B,KAAKmK,QAASqD,KAAKC,UAAUnN,IAElDN,KAAKoK,kBAAkB7H,KAAKjC,GAC5BN,KAAKiL,YAAc3K,GAEd4E,IAEX,CAEAwL,aACE,OAAO1Q,KAAK0J,WAAWmC,IAAY7L,KAAKgK,QAAU,mBAAoBgC,IACxE,CAGQZ,iBACN,OAAIpL,WAAKiL,aAA6CmD,EAAkBtL,QACjE9C,KAAK0J,WAAWmC,IAAU7L,KAAKgK,QAAU,2BAA2B7J,QAAKE,KAAKC,IAC/EA,IACFN,KAAKiL,YAAc,IAAI3K,IAGzBN,KAAK+M,eAAe/M,KAAKiL,aAClB3K,IAEX,CAGQqQ,eACN,OAAI3Q,WAAKiL,aAA6CmD,EAAkBtL,QACjE9C,KAAK0J,WAAWiD,KAA4C3M,KAAKgK,QAAU,wBACjF,CAACmD,MAAOnN,KAAKiL,YAAYkC,MAAOwD,aAAc3Q,KAAKiL,YAAY0F,eAAexQ,QAAKE,KAAIC,IAClFN,KAAKiL,cACPjL,KAAKiL,YAAYkC,MAAQ7M,EAAK6M,MAC9BnN,KAAKiL,YAAY0F,aAAerQ,EAAKqQ,cAGvC3Q,KAAK+M,eAAe/M,KAAKiL,aAClB3K,IAEX,CAKQ2N,yBACFjO,WAAKiL,aAKTjL,KAAKgO,wBAELhO,KAAK4Q,oBAAsBC,YAAY,IAAM7Q,KAAK2Q,eAAetF,UAAU,QAAY,MANrFrL,KAAKgO,uBAOT,CAEQA,6BAC2BI,IAA7BpO,KAAK4Q,qBACPE,cAAc9Q,KAAK4Q,oBAEvB,EAnUWnH,SAKGiE,aAAe,mBALlBjE,EAMG0G,UAAY,gBANf1G,EAAc,mBAAA/I,iBAAd+I,GAAc9I,MAAAC,MAAAD,MAAAE,MAAAF,MAAAG,KAAAH,MAAAyB,KAAA,EAAdqH,EAAc,WAAAsH,EAAA/P,IAAA,OAAdyI,EAAcxI,QAAdwI,EAAcvI,UAAAC,WAFb,SAEDsI,CAAc,oGCjBfuH,EAAZ,SAAYA,GACVA,WAAAC,SAAA,aAIAD,IAAAE,WAAA,gBAIAF,IAAAG,aAAA,kBAIAH,IAAAI,KAAA,UAIAJ,IAAAK,OAAA,YAIAL,IAAAM,KAAA,UAIAN,IAAAO,KAAA,UAIAP,IAAAQ,gBAAA,qBAIAR,IAAAzH,SAAA,cAIAyH,IAAAS,aAAA,kBAIAT,IAAAU,cAAA,mBAIAV,IAAAW,iBAAA,uBAIAX,IAAAY,gBAAA,sBAIAZ,IAAAa,iBAAA,uBAIAb,IAAAc,WAAA,iBAIAd,IAAAe,KAAA,WAIAf,IAAAgB,oBAAA,0BAIAhB,IAAAiB,yBAAA,+BAIAjB,IAAAkB,OAAA,aAIAlB,IAAAmB,OAAA,aAIAnB,IAAAoB,iBAAA,uBACApB,IAAAqB,aAAA,mBACArB,IAAAsB,gBAAA,sBAnFUtB,CAoFZ,CApFA,CAAYA,GAAM,IA8GX,IAAMuB,EAAoB,MAA3B,MAAOA,EAkBX3S,YAAoBC,EAAwC2S,GAAxCxS,KAAAH,iBAAwCG,KAAAwS,gBAjB5DxS,KAAAyS,eAA6C,GAE7CzS,KAAA0S,cAA2C,GAE3C1S,KAAA2S,cAA2C,GAE3C3S,KAAA4S,eAA6C,GAE7C5S,KAAA6S,qBAAyD,GAEzD7S,KAAA8S,mBAAqD,GAErD9S,KAAA+S,gBAA6C,GAE7C/S,KAAAgT,SAAU,EACVhT,KAAA0L,iBAAkB,EAGhB1L,KAAKH,eAAeK,aAAamL,UAAW/K,IACtCA,GACFN,KAAKgT,QAAUhT,KAAKH,eAAeU,aAAaD,GAChDN,KAAK0L,gBAAkB1L,KAAKH,eAAe6L,gBAAgBpL,GAM7DN,KAAKiT,iBAJHjT,KAAKiT,eAIW,EAEtB,CAEAC,kBAAkBC,GAClB,OAAOnT,KAAKoT,oBAAoBpT,KAAKyS,eAAgBU,EACrD,CAEAE,iBAAiBF,GACjB,OAAOnT,KAAKoT,oBAAoBpT,KAAK0S,cAAeS,EACpD,CAEAG,iBAAiBH,GACjB,OAAOnT,KAAKoT,oBAAoBpT,KAAK2S,cAAeQ,EACpD,CAEAI,kBAAkBJ,GAChB,OAAOnT,KAAKoT,oBAAoBpT,KAAK4S,eAAgBO,EACvD,CAEAK,wBAAwBL,GACxB,OAAOnT,KAAKoT,oBAAoBpT,KAAK6S,qBAAsBM,EAC3D,CAEAM,sBAAsBN,GACpB,OAAOnT,KAAKoT,oBAAoBpT,KAAK8S,mBAAoBK,EAC3D,CAEAO,mBAAmBP,GACjB,OAAOnT,KAAKoT,oBAAoBpT,KAAK+S,gBAAiBI,EACxD,CAEAQ,yBAAyBR,GAMvB,OAAOnT,KAAKoT,oBALI,CACd,CAAC/N,MAAO,qBAAsBuO,OAAQ5C,EAAOqB,aAAcwB,eAAe,EAAOC,SAAU,GAAIX,SAAUnT,KAAK+T,eAC9G,CAAC1O,MAAO,oBAAqBuO,OAAQ5C,EAAOqB,aAAcwB,eAAe,EAAOC,SAAU,GAAIX,SAAUnT,KAAK+T,eAC7G,CAAC1O,MAAO,oBAAqBuO,OAAQ5C,EAAOsB,gBAAiBuB,eAAe,EAAOC,SAAU,GAAIX,SAAUnT,KAAK+T,gBAEzEZ,EAC3C,CAEAY,cAAcH,EAAyBI,GAAY,CAEnDC,mBAAmBC,EAAqCC,GAKtD,OAAOD,CACT,CAEQjB,gBACNjT,KAAKyS,eAAiB,CACpB,CACEmB,OAAQ5C,EAAOI,KACf/L,MAAO,eACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfC,SAAU,IAEZ,CACEF,OAAQ5C,EAAOC,QACf5L,MAAO,SACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfC,SAAU,CACR,CACEF,OAAQ5C,EAAOQ,gBACfnM,MAAO,iBACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfC,SAAU,IAEZ,CACEF,OAAQ5C,EAAOS,aACfpM,MAAO,gBACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfC,SAAU,MAIhB,CACEF,OAAQ5C,EAAOM,KACfjM,MAAO,WACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfC,SAAU,KAId9T,KAAK6S,qBAAuB,CAC1B,CACEe,OAAQ5C,EAAOM,KACfjM,MAAO,OACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfC,SAAU,IAEZ,CACEF,OAAQ5C,EAAOK,OACfhM,MAAO,SACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfO,MAAO,SACPN,SAAU,KAId9T,KAAK0S,cAAgB,CACnB,CACEkB,OAAQ5C,EAAOE,WACf7L,MAAO,eACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfC,SAAU,IAEZ,CACEF,OAAQ5C,EAAOG,aACf9L,MAAO,iBACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfC,SAAU,IAEZ,CACEF,OAAQ5C,EAAOI,KACf/L,MAAO,cACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfC,SAAU,IAEZ,CACEF,OAAQ5C,EAAOC,QACf5L,MAAO,SACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfC,SAAU,CACT,CACGF,OAAQ5C,EAAOgB,oBACf3M,MAAO,sBACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfC,SAAU,IAEZ,CACEF,OAAQ5C,EAAOiB,yBACf5M,MAAO,2BACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfC,SAAU,IAEZ,CACEF,OAAQ5C,EAAOW,iBACftM,MAAO,sBACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfC,SAAU,IAEZ,CACEF,OAAQ5C,EAAOY,gBACfvM,MAAO,oBACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfC,SAAU,MAIhB,CACEF,OAAQ5C,EAAOC,QACf5L,MAAO,UACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfC,SAAU,CACR,CACEF,OAAQ5C,EAAOkB,OACf7M,MAAO,GACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfQ,YAAarU,KAAKwS,cAAc8B,SAASnU,QAAKE,KAAKkU,GAA2BA,EAAQlU,IAAImU,KAChFnP,MAASmP,EAAE1G,KAAMkG,KAAQQ,MAClC,EAAGC,SACJX,SAAU,MAIhB,CACEF,OAAQ5C,EAAOC,QACf5L,MAAO,SACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfC,SAAU,CACR,CACEF,OAAQ5C,EAAOQ,gBACfnM,MAAO,iBACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfC,SAAU,IAEZ,CACEF,OAAQ5C,EAAOS,aACfpM,MAAO,gBACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfC,SAAU,IAEZ,CACEF,OAAQ5C,EAAOK,OACfhM,MAAO,SACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfO,MAAO,SACPN,SAAU,MAIhB,CACEF,OAAQ5C,EAAOzH,SACflE,MAAO,WACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfC,SAAU,IAEZ,CACEF,OAAQ5C,EAAOM,KACfjM,MAAO,OACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfC,SAAU,KAId9T,KAAK2S,cAAgB,CACnB,CACEiB,OAAQ5C,EAAOU,cACfrM,MAAO,iBACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfC,SAAU,IAEZ,CACEF,OAAQ5C,EAAOE,WACf7L,MAAO,eACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfC,SAAU,IAEZ,CACEF,OAAQ5C,EAAOG,aACf9L,MAAO,iBACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfC,SAAU,IAEf,CACCF,OAAQ5C,EAAOC,QACf5L,MAAO,SACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfC,SAAU,CACT,CACCF,OAAQ5C,EAAOW,iBACftM,MAAO,sBACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfC,SAAU,MAIV,CACEF,OAAQ5C,EAAOC,QACf5L,MAAO,UACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfC,SAAU,CACR,CACEF,OAAQ5C,EAAOkB,OACf7M,MAAO,GACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfQ,YAAarU,KAAKwS,cAAc8B,SAASnU,QAAKE,KAAKkU,GAA2BA,EAAQlU,IAAImU,KAChFnP,MAASmP,EAAE1G,KAAMkG,KAAQQ,MAClC,EAAGC,SACJX,SAAU,MAIhB,CACEF,OAAQ5C,EAAOzH,SACflE,MAAO,WACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfC,SAAU,IAEZ,CACEF,OAAQ5C,EAAOM,KACfjM,MAAO,UACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfC,SAAU,KAId9T,KAAK4S,eAAiB,CACpB,CACEgB,OAAQ5C,EAAOU,cACfrM,MAAO,iBACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfC,SAAU,IAEZ,CACEF,OAAQ5C,EAAOE,WACf7L,MAAO,eACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfC,SAAU,IAEZ,CACEF,OAAQ5C,EAAOG,aACf9L,MAAO,iBACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfC,SAAU,IAEf,CACCF,OAAQ5C,EAAOC,QACf5L,MAAO,SACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfC,SAAU,CACT,CACCF,OAAQ5C,EAAOW,iBACftM,MAAO,sBACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfC,SAAU,MAIV,CACEF,OAAQ5C,EAAOC,QACf5L,MAAO,UACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfC,SAAU,CACR,CACEF,OAAQ5C,EAAOkB,OACf7M,MAAO,GACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfQ,YAAarU,KAAKwS,cAAc8B,SAASnU,QAAKE,KAAKkU,GAA2BA,EAAQlU,IAAImU,KAChFnP,MAASmP,EAAE1G,KAAMkG,KAAQQ,MAClC,EAAGC,SACJX,SAAU,MAKhB,CACEF,OAAQ5C,EAAOzH,SACflE,MAAO,WACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfC,SAAU,IAEZ,CACEF,OAAQ5C,EAAOM,KACfjM,MAAO,UACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfC,SAAU,KAId9T,KAAK8S,mBAAqB,CACxB,CACEc,OAAQ5C,EAAOM,KACfjM,MAAO,OACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfC,SAAU,IAEZ,CACEF,OAAQ5C,EAAOK,OACfhM,MAAO,SACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfO,MAAO,SACPN,SAAU,KAId9T,KAAK+S,gBAAkB,CACrB,CACEa,OAAQ5C,EAAOc,WACfzM,MAAO,cACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfC,SAAU,IAEZ,CACEF,OAAQ5C,EAAOa,iBACfxM,MAAO,WACP8N,SAAUnT,KAAK+T,cACfF,eAAe,EACfC,SAAU,IAEZ,CACEF,OAAQ5C,EAAOK,OACfhM,MAAO,QACP8N,SAAUnT,KAAK+T,cACfK,MAAO,SACPP,eAAe,EACfC,SAAU,IAGhB,CAEQY,cAAcd,EAAyBT,GAC7CS,EAAOT,SAAWA,EAEM,OAApBS,EAAOE,UAAiD,IAA5BF,EAAOE,UAAUjS,QAEjD+R,EAAOE,UAAUa,QAASC,IACxB5U,KAAK0U,cAAcE,EAAazB,EAAQ,EAE5C,CAEMC,oBAAoByB,EAA8B1B,GACxD,MAAMe,EAAUW,EAAKxU,IAAK6H,QACbA,KAEbgM,SAAQS,QAASf,GAAW5T,KAAK0U,cAAcd,EAAQT,IAChDe,CACR,CAGQY,UAAUZ,EAAiCN,GAChD,GAAuB,IAAnBM,EAAQrS,OAAc,OAAO,EAEjC,QAASkT,EAAI,EAAGA,EAAIb,EAAQrS,OAAQkT,IAGlC,GADIb,EAAQa,GAAGnB,SAAWA,GACtB5T,KAAK8U,UAAUZ,EAAQa,GAAGjB,SAAUF,GAAS,OAAO,EAG1D,OAAO,CACT,EA3dWrB,SAAoB,mBAAA7R,iBAApB6R,GAAoB5R,MAAAC,KAAAD,MAAAE,KAAA,EAApB0R,EAAoB,WAAAxB,EAAA/P,IAAA,OAApBuR,EAAoBtR,QAApBsR,EAAoBrR,UAAAC,WAFnB,SAEDoR,CAAoB,kNClH3B5R,MAAA,WAAAA,CAA4C,cACHA,MAAA,GAAqBA,QAC5DA,MAAA,YACEA,MAAA,cACAA,MAAA,eAAyEA,MAAA,mBAAAA,MAAAqU,GAAA,MAAAC,EAAAtU,MAAA,OAAAuU,EAAA,OAAAvU,MAAoC,OAApCuU,EAASD,EAAAE,SAAAtJ,IAAa,gBAAc,KAA3BqJ,EAAAE,SAAsC,IAAG,GAAGzU,MAAA,WAAKA,WAAS,mCAHvGA,MAAA,GAAAA,MAAA0U,EAAA,0CAQb1U,MAAA,0CAAgEA,MAAA,QAAA0U,EAAA,sDAD1F1U,MAAA,WAA0KA,MAAA,yBAAA2U,EAAA3U,MAAA4U,GAAAC,UAAAC,EAAA9U,MAAA,UAASA,MAAA8U,EAAAC,gBAAAJ,GAA8B,GAC/M3U,MAAA,GAAwBA,MAAA,EAAAgV,EAAA,YAC1BhV,OAAA,6BADEA,MAAA,GAAAA,MAAA,IAAA2U,EAAAjQ,MAAA,KAA0D1E,MAAA,GAAAA,MAAA,OAAA2U,EAAAM,SAAA,2BAE5DjV,MAAA,WAAmEA,MAAA,GAAgBA,wCAAhBA,MAAA,GAAAA,MAAA0U,EAAA,sCACnE1U,MAAA,UAAAA,CAA4C,WAA5CA,CAA4C,aAEVA,MAAA,GAAgBA,4CAAhBA,MAAA,GAAAA,MAAA0U,EAAA,qDAtB1C1U,MAAA,GAEEA,MAAA,UAAAA,CAA0B,UACuBA,MAAA,GAAcA,QAC7DA,MAAA,cAAuEA,MAAA,mBAAAA,MAAAkV,GAAA,MAAAC,EAAAnV,QAAA,OAASA,MAAAmV,EAAAC,QAAO,GAAEpV,UAE3FA,MAAA,WAAAA,CAAiD,WAE7CA,MAAA,EAAAqV,EAAA,aAOArV,MAAA,UACEA,MAAA,EAAAsV,EAAA,+BAGAtV,MAAA,GAAAuV,EAAA,YACAvV,MAAA,GAAAwV,EAAA,YAKFxV,UAEFA,MAAA,YAAAA,CAA0D,YAA1DA,CAA0D,YAA1DA,CAA0D,YAA1DA,CAA0D,eAIQA,MAAA,IAAyBA,QACnFA,MAAA,kBACFA,QACAA,MAAA,YAAAA,CAAmB,gBAC6BA,MAAA,mBAAAA,MAAAkV,GAAA,MAAAO,EAAAzV,QAAA,OAASA,MAAAyV,EAAAC,SAAQ,GAAE1V,MAAA,IAAeA,kBAS5FA,OAAA,uCAzCmDA,MAAA,GAAAA,MAAA0U,EAAA,UACP1U,MAAA,GAAAA,MAAA,aAAA0U,EAAA,UAEhB1U,MAAA,GAAAA,MAAA,YAAA2V,EAAAnB,UAEHxU,MAAA,GAAAA,MAAA,OAAA2V,EAAAC,MAAA1U,QAAA,GAQ0ElB,MAAA,GAAAA,MAAA,UAAAA,MAAA,MAAA2V,EAAAC,MAAAD,EAAAE,YAAA7V,CAA+B,eAAA2V,EAAAG,wBAG7F9V,MAAA,GAAAA,MAAA,WAAA2V,EAAAC,MAAA1U,SAAAyU,EAAAI,SACA/V,MAAA,GAAAA,MAAA,OAAA2V,EAAAI,SAWiC/V,MAAA,GAAAA,MAAA0U,EAAA,qBAIO1U,MAAA,GAAAA,MAAA0U,EAAA,YCJtE,IAAMsB,EAA4B,MAAnC,MAAOA,EAsBX/W,YAAoBgX,EAA+BC,EACzC/W,EAAwCgX,GAD9B9W,KAAA4W,QAA+B5W,KAAA6W,oBACzC7W,KAAAF,SAAwCE,KAAA8W,QAjBzC9W,KAAA+W,UAA2B,GAKpC/W,KAAAuW,MAA8B,GAC9BvW,KAAA0W,SAAmB,EACnB1W,KAAAmV,SAAsB,IAAI6B,KAAU,IAEpChX,KAAAyW,uBAAyB,CAACQ,EAAeC,KAAwB,GAAGA,GAAK7R,QAEzErF,KAAAD,oBAAmB+J,OAAOqN,MAoD1BnX,KAAAwW,WAAcY,GACLA,EAAS/R,MAAMgS,cAAcC,SAAStX,KAAKmV,SAAS7P,MAAMiS,aAAe,IAAIF,gBAAkB,CA/C1B,CAE9EG,WAEExX,KAAKmV,SAASsC,WAAW,QAAS,IAAIC,KAAY1X,KAAKqF,MAAO,KAC9DrF,KAAKmV,SAASsC,WAAW,cAAe,IAAIC,KAAY,GAAI,KAE5D1X,KAAK0W,SAAU,EACf1W,KAAK8W,MAAMa,eACX3X,KAAK6W,kBAAkBe,UAAUvM,UAAUtC,IACzC/I,KAAKuW,MAAQxN,EACb/I,KAAK0W,SAAU,EACf1W,KAAK8W,MAAMa,cAAY,EAE3B,CAEAE,kBAEM7X,KAAK8X,YACP9X,KAAK8X,UAAUC,cAAcC,SAC7BhY,KAAK8W,MAAMa,eAEf,CAEA5B,QACE/V,KAAK4W,MAAMb,OACb,CAEAM,SACE,MAAM4B,EAAUjY,KAAKmV,SAAS7P,MAAMD,MACpCrF,KAAK6W,kBAAkBqB,cAAc,EAAGlY,KAAK+W,UAAWkB,GAAS5M,UAAU,KACzErL,KAAKF,OAAOqY,QAAQnY,KAAKD,iBAAiBU,UAAU,oCAAqC,CAAC2X,eAAgBH,KAC1GjY,KAAK4W,MAAMb,OAAK,EAEpB,CAEAL,gBAAgB2C,GACgB,IAA1BrY,KAAK+W,UAAUlV,QAEnB7B,KAAK6W,kBAAkBqB,cAAcG,EAAIC,GAAItY,KAAK+W,UAAW,IAAI1L,UAAU,KACzErL,KAAKF,OAAOqY,QAAQnY,KAAKD,iBAAiBU,UAAU,oCAAqC,CAAC2X,eAAgBC,EAAIhT,SAC9GrF,KAAK4W,MAAMb,OAAK,EAGpB,EAnEWY,SAA4B,mBAAAjW,iBAA5BiW,GAA4BhW,MAAAC,MAAAD,MAAAE,KAAAF,MAAAG,MAAAH,aAAA,EAA5BgW,EAA4B,UAAA4B,EAAAC,IAAA,MAA5B7B,EAA4B8B,UAAA,iCAAAC,UAAA,SAAAC,EAAAC,MAAA,EAAAD,m7CD/BzChY,MAAA,EAAAkY,EAAA,6BAAiClY,MAAA,yDCyBrBmY,KAAY1W,UAAE2W,KAAmBC,6BAAEC,IAAYC,KAAgBC,MAAkBC,OAAA,+RAAAC,cAAA,EAAAC,gBAAA,IAMhF3C,CAA4B,mGCMlC,IAAM4C,EAAa,MAApB,MAAOA,EAMX3Z,YAAoB4Z,EAAwCC,EAClDC,EAAsC5Z,EAA+B6Z,EACrEC,GAAwCtX,GAAsCkQ,GAC9EzS,IAHUC,KAAAwZ,iBAAwCxZ,KAAAyZ,gBAClDzZ,KAAA0Z,gBAAsC1Z,KAAAF,SAA+BE,KAAA2Z,eACrE3Z,KAAA4Z,kBAAwC5Z,KAAAsC,iBAAsCtC,KAAAwS,iBAC9ExS,KAAAD,oBAPOC,KAAA6Z,UAAY,IAAIC,IACzB9Z,KAAA+Z,oBAA0C,KAC1C/Z,KAAAga,mBAAyC,IAKD,CAEhDC,cACEja,KAAK6Z,UAAUtX,OACfvC,KAAK6Z,UAAUK,UACjB,CAQMC,YAAYC,EAA2BjH,GAAgC,IAAAkH,EAAAra,KAAA,SAAAsa,KAAA,YACtEF,EAAQG,eAAe,YAAwBnM,IAAfgM,EAAQ9B,IAO7C+B,EAAKb,eAAegB,KAAKJ,EAAQ9B,IAFnB,GAE8BnY,QAAKC,KAAK,IAAIiL,UAAWc,IACnEkO,EAAKva,OAAO2a,KAAKJ,EAAKta,iBAAiBU,UAAU,qBAAsB,CAACqN,KAAMsM,EAAQtM,QAClFqF,GACFA,EAASiH,EAAO,EAEjB,EAbwE,EAc7E,CASMM,gBAAgBN,EAA2BjH,GAAgC,IAAAwH,EAAA3a,KAAA,SAAAsa,KAAA,YAC1EF,EAAQG,eAAe,YAAwBnM,IAAfgM,EAAQ9B,YAIlCqC,EAAKf,eAAegB,WAAQna,MAAU,iCASjDka,EAAKnB,eAAekB,gBAAgBN,GAAS9B,IAFzB,GAE0CnY,QAAKC,KAAK,IAAIiL,UAAWc,IACrFwO,EAAK7a,OAAO2a,KAAKE,EAAK5a,iBAAiBU,UAAU,qBAAsB,CAACqN,KAAMsM,EAAQtM,QAClFqF,GACFA,EAASiH,EAAO,GAXdjH,GACFA,EAASiH,GAYV,EAnB4E,EAoBjF,CAEAS,YAAYT,EAA2BjH,GACrC,MAAM2H,EAAW9a,KAAK2Z,aAAaoB,KAAKC,IAA+B,CAAGC,KAAM,OAC9EH,EAASI,kBAAkBd,QAAUA,EACrCU,EAASK,OAAO9P,UAAW+P,IACrBjI,GAAUA,EAASiH,EAAO,EAEpC,CAQOiB,aAAajB,EAA2BjH,GAAgC,IAAAmI,EAAAtb,KAAA,SAAAsa,KAAA,YAC7E,GAAKF,EAAQG,eAAe,YAAwBnM,IAAfgM,EAAQ9B,GAI7C,YAAWgD,EAAK1B,eAAe2B,SAAM9a,MAAU,+BAI7C,YAHI0S,GACFA,EAASiH,IAKbkB,EAAK9B,eAAegC,QAAQpB,GAAS9B,IAAInY,QAAKC,KAAK,IAAIiL,UAAWc,IAChEmP,EAAKxb,OAAO2a,KAAKa,EAAKvb,iBAAiBU,UAAU,sCAAuC,CAACqN,KAAMsM,EAAQtM,QACnGqF,GACFA,EAASiH,EAAO,EAEnB,CAAE,EAjB0E,EAkB/E,CAOAqB,iBAAiB/S,EAAgByK,GAC/BnT,KAAKyZ,cAAciC,SAAShT,EAAO4P,IAAInY,QAAKC,KAAK,IAAIiL,UAAUc,IAC7DzD,EAAOiT,UAAYjT,EAAOkT,MAC1B5b,KAAKF,OAAOqY,QAAQnY,KAAKD,iBAAiBU,UAAU,qBAAsB,CAACqN,KAAMpF,EAAOoF,QACpFqF,GACFA,EAASzK,EAAM,EAGrB,CAOAmT,mBAAmBnT,EAAgByK,GACjCnT,KAAKyZ,cAAcqC,WAAWpT,EAAO4P,IAAInY,QAAKC,KAAK,IAAIiL,UAAUc,IAC/DzD,EAAOiT,UAAY,EACnB3b,KAAKF,OAAOqY,QAAQnY,KAAKD,iBAAiBU,UAAU,uBAAwB,CAACqN,KAAMpF,EAAOoF,QACtFqF,GACFA,EAASzK,EAAM,EAGrB,CAOMqT,WAAWrT,EAAgByK,GAA+B,IAAA6I,EAAAhc,KAAA,SAAAsa,KAAA,YAC9D0B,EAAKvC,cAAce,KAAK9R,EAAOjG,UAAWiG,EAAO4P,IAAInY,QAAKC,KAAK,IAAIiL,UAAWc,IAC5E6P,EAAKlc,OAAO2a,KAAKuB,EAAKjc,iBAAiBU,UAAU,qBAAsB,CAACqN,KAAMpF,EAAOoF,QACjFqF,GACFA,EAASzK,EAAM,EAEhB,EAN2D,EAOhE,CAOAuT,sBAAsBvT,EAAgByK,GACpCnT,KAAKyZ,cAAc4B,aAAa3S,EAAOjG,UAAWiG,EAAO4P,IAAInY,QAAKC,KAAK,IAAIiL,UAAWc,IACpFnM,KAAKF,OAAO2a,KAAKza,KAAKD,iBAAiBU,UAAU,qBAAsB,CAACqN,KAAMpF,EAAOoF,QACjFqF,GACFA,EAASzK,EAAM,EAGrB,CAOMwT,eAAexT,EAAgByK,GAA+B,IAAAgJ,EAAAnc,KAAA,SAAAsa,KAAA,mBACvD6B,EAAKvC,eAAegB,WAAQna,MAAU,iCAOjD0b,EAAK1C,cAAciB,gBAAgBhS,GAAQvI,QAAKC,KAAK,IAAIiL,UAAWc,IAClEgQ,EAAKrc,OAAO2a,KAAK0B,EAAKpc,iBAAiBU,UAAU,+BAAgC,CAACqN,KAAMpF,EAAOoF,QAC3FqF,GACFA,EAASzK,EAAM,GATbyK,GACFA,EAASzK,EAUV,EAb+D,EAcpE,CAQA0T,iBAAiBC,EAAkBC,EAAgBnJ,GACjDnT,KAAK0Z,cAAc6C,eAAeF,EAAUC,EAAOhE,IAAInY,QAAKC,KAAK,IAAIiL,UAAU,KAC7EiR,EAAOX,UAAYW,EAAOV,MAC1BU,EAAOrT,UAAU0L,QAAQ6H,GAAKA,EAAEb,UAAYa,EAAEZ,OAC9C5b,KAAKF,OAAOqY,QAAQnY,KAAKD,iBAAiBU,UAAU,qBAEhD0S,GACFA,EAASmJ,EAAM,EAGrB,CAQAG,mBAAmBJ,EAAkBC,EAAgBnJ,GACnDnT,KAAK0Z,cAAcgD,iBAAiBL,EAAUC,EAAOhE,IAAIjN,UAAU,KACjEiR,EAAOX,UAAY,EACnBW,EAAOrT,UAAU0L,QAAQ6H,GAAKA,EAAEb,UAAY,GAC5C3b,KAAKF,OAAOqY,QAAQnY,KAAKD,iBAAiBU,UAAU,uBAChD0S,GACFA,EAASmJ,EAAM,EAGrB,CAQAK,kBAAkBla,EAAmB4Z,EAAkBlI,EAAkBhB,GACvEnT,KAAK0Z,cAAckD,aAAana,EAAW4Z,EAAUlI,EAAQ0I,SAAU1I,EAAQmE,GAAInE,EAAQyH,OAAOzb,QAAKC,KAAK,IAAIiL,UAAUyR,IACxH3I,EAAQwH,UAAYxH,EAAQyH,MAC5B5b,KAAKF,OAAOqY,QAAQnY,KAAKD,iBAAiBU,UAAU,qBAChD0S,GACFA,EAASgB,EAAO,EAGtB,CAQA4I,oBAAoBta,EAAmB4Z,EAAkBlI,EAAkBhB,GACzEnT,KAAK0Z,cAAckD,aAAana,EAAW4Z,EAAUlI,EAAQ0I,SAAU1I,EAAQmE,GAAI,GAAGnY,QAAKC,KAAK,IAAIiL,UAAUyR,IAC5G3I,EAAQwH,UAAY,EACpB3b,KAAKF,OAAOqY,QAAQnY,KAAKD,iBAAiBU,UAAU,uBAChD0S,GACFA,EAASgB,EAAO,EAGtB,CASC6I,mBAAmBX,EAAkBY,EAAwBhU,EAA2BkK,GACvFnT,KAAK0Z,cAAcwD,iBAAiBb,EAAUY,EAAQ5c,IAAI8c,GAAKA,EAAE7E,IAAKrP,GAAU5I,IAAImc,GAAKA,EAAElE,KAAKnY,QAAKC,KAAK,IAAIiL,UAAU,KACtH4R,EAAQtI,QAAQ2H,IACdA,EAAOX,UAAYW,EAAOV,MAC1BU,EAAOrT,UAAU0L,QAAQ6H,IAAKA,GAAEb,UAAYa,GAAEZ,MAAK,GAErD3S,GAAU0L,QAAQ6H,GAAKA,EAAEb,UAAYa,EAAEZ,OACvC5b,KAAKF,OAAOqY,QAAQnY,KAAKD,iBAAiBU,UAAU,qBAEhD0S,GACFA,GAAQ,EAGd,CAQCiK,qBAAqBf,EAAkBY,EAAwBhU,EAA2BkK,GACzFnT,KAAK0Z,cAAc2D,mBAAmBhB,EAAUY,EAAQ5c,IAAI8c,GAAKA,EAAE7E,IAAKrP,GAAU5I,IAAImc,GAAKA,EAAElE,KAAKnY,QAAKC,KAAK,IAAIiL,UAAU,KACxH4R,EAAQtI,QAAQ2H,IACdA,EAAOX,UAAY,EACnBW,EAAOrT,UAAU0L,QAAQ6H,IAAKA,GAAEb,UAAY,EAAC,GAE/C1S,GAAU0L,QAAQ6H,GAAKA,EAAEb,UAAY,GACrC3b,KAAKF,OAAOqY,QAAQnY,KAAKD,iBAAiBU,UAAU,uBAEhD0S,GACFA,GAAQ,EAGd,CAOCmK,yBAAyB5U,EAAuByK,GAC/CnT,KAAK0Z,cAAc6D,uBAAuB7U,EAAOrI,IAAI8c,GAAKA,EAAE7E,KAAKnY,QAAKC,KAAK,IAAIiL,UAAU,KACvF3C,EAAOiM,QAAQ6I,IACbA,EAAE7B,UAAY6B,EAAE5B,QAElB5b,KAAKF,OAAOqY,QAAQnY,KAAKD,iBAAiBU,UAAU,qBAEhD0S,GACFA,GAAQ,EAGd,CAOCsK,2BAA2B/U,EAAuByK,GACjDnT,KAAK0Z,cAAcgE,yBAAyBhV,EAAOrI,IAAI8c,GAAKA,EAAE7E,KAAKnY,QAAKC,KAAK,IAAIiL,UAAU,KACzF3C,EAAOiM,QAAQ6I,IACbA,EAAE7B,UAAY6B,EAAE5B,QAElB5b,KAAKF,OAAOqY,QAAQnY,KAAKD,iBAAiBU,UAAU,uBAEhD0S,GACFA,GAAQ,EAGd,CAEAwK,yBAAyBtB,EAAkBY,EAAwBhU,EAA2BkK,GAC5D,MAA5BnT,KAAK+Z,sBACP/Z,KAAK+Z,oBAAsB/Z,KAAK2Z,aAAaoB,KAAK6C,IAAyB,CAAEC,YAAY,EAAM5C,KAAM,OACrGjb,KAAK+Z,oBAAoBmB,kBAAkBmB,SAAWA,EACtDrc,KAAK+Z,oBAAoBmB,kBAAkB4C,UAAYb,EAAQ5c,IAAI8c,GAAKA,EAAE7E,IAC1EtY,KAAK+Z,oBAAoBmB,kBAAkB6C,WAAa9U,GAAU5I,IAAImc,GAAKA,EAAElE,IAC7EtY,KAAK+Z,oBAAoBmB,kBAAkB7V,MAAQ,sBACnDrF,KAAK+Z,oBAAoBmB,kBAAkB8C,KAAOC,IAASC,SAG3Dle,KAAK+Z,oBAAoBoB,OAAOhb,QAAKC,KAAK,IAAIiL,UAAU,KACtDrL,KAAK+Z,oBAAsB,KACvB5G,GACFA,GAAS,EAAI,GAGjBnT,KAAK+Z,oBAAoBoE,UAAUhe,QAAKC,KAAK,IAAIiL,UAAU,KACzDrL,KAAK+Z,oBAAsB,KACvB5G,GACFA,GAAS,EAAK,GAGtB,CAEAiL,kCAAkCrH,EAA0B5D,GAC1DnT,KAAKsC,cAAc+b,sBAAsBtH,GAAW1L,UAAU,KAC5DrL,KAAKF,OAAOqY,QAAQ,qCAChBhF,GACFA,GAAQ,EAGd,CAEAmL,uCAAuCvH,EAA0B5D,GAC/DnT,KAAKsC,cAAcic,yBAAyBxH,GAAW1L,UAAU,KAC/DrL,KAAKF,OAAOqY,QAAQnY,KAAKD,iBAAiBU,UAAU,uCAChD0S,GACFA,GAAQ,EAGd,CAEAqL,+BAA+B9V,EAAuByK,GACpB,MAA5BnT,KAAK+Z,sBACP/Z,KAAK+Z,oBAAsB/Z,KAAK2Z,aAAaoB,KAAK6C,IAAyB,CAAEC,YAAY,EAAM5C,KAAM,OACrGjb,KAAK+Z,oBAAoBmB,kBAAkBnE,UAAYrO,EAAOrI,IAAI8c,GAAKA,EAAE7E,IACzEtY,KAAK+Z,oBAAoBmB,kBAAkB7V,MAAQ,sBACnDrF,KAAK+Z,oBAAoBmB,kBAAkB8C,KAAOC,IAASQ,gBAG3Dze,KAAK+Z,oBAAoBoB,OAAOhb,QAAKC,KAAK,IAAIiL,UAAU,KACtDrL,KAAK+Z,oBAAsB,KACvB5G,GACFA,GAAS,EAAI,GAGjBnT,KAAK+Z,oBAAoBoE,UAAUhe,QAAKC,KAAK,IAAIiL,UAAU,KACzDrL,KAAK+Z,oBAAsB,KACvB5G,GACFA,GAAS,EAAK,GAGtB,CAQAuL,iCAAiChW,EAAuByK,GACvB,MAA3BnT,KAAKga,qBACPha,KAAKga,mBAAqBha,KAAK2Z,aAAaoB,KAAKpE,EAA8B,CAAEkH,YAAY,EAAM5C,KAAM,KAAM0D,YAAa,eAC5H3e,KAAKga,mBAAmBkB,kBAAkBnE,UAAYrO,EAAOrI,IAAI8c,GAAKA,EAAE7E,IACxEtY,KAAKga,mBAAmBkB,kBAAkB7V,MAAQ,iBAElDrF,KAAKga,mBAAmBmB,OAAOhb,QAAKC,KAAK,IAAIiL,UAAU,KACrDrL,KAAKga,mBAAqB,KACtB7G,GACFA,GAAS,EAAI,GAGjBnT,KAAKga,mBAAmBmE,UAAUhe,QAAKC,KAAK,IAAIiL,UAAU,KACxDrL,KAAKga,mBAAqB,KACtB7G,GACFA,GAAS,EAAK,GAGtB,CAEAyL,uBAAuBlW,EAAgByK,GACL,MAA5BnT,KAAK+Z,sBACP/Z,KAAK+Z,oBAAsB/Z,KAAK2Z,aAAaoB,KAAK6C,IAAyB,CAAEC,YAAY,EAAM5C,KAAM,OACrGjb,KAAK+Z,oBAAoBmB,kBAAkBmB,SAAW3T,EAAO4P,GAC7DtY,KAAK+Z,oBAAoBmB,kBAAkB7V,MAAQqD,EAAOoF,KAC1D9N,KAAK+Z,oBAAoBmB,kBAAkB8C,KAAOC,IAASY,OAG3D7e,KAAK+Z,oBAAoBoB,OAAOhb,QAAKC,KAAK,IAAIiL,UAAU,KACtDrL,KAAK+Z,oBAAsB,KACvB5G,GACFA,EAASzK,EAAM,GAGnB1I,KAAK+Z,oBAAoBoE,UAAUhe,QAAKC,KAAK,IAAIiL,UAAU,KACzDrL,KAAK+Z,oBAAsB,KACvB5G,GACFA,EAASzK,EAAM,GAGvB,CAEAoW,uBAAuBxC,EAAgBD,EAAkBlJ,GACvB,MAA5BnT,KAAK+Z,sBACP/Z,KAAK+Z,oBAAsB/Z,KAAK2Z,aAAaoB,KAAK6C,IAAyB,CAAEC,YAAY,EAAM5C,KAAM,OACrGjb,KAAK+Z,oBAAoBmB,kBAAkBmB,SAAWA,EACtDrc,KAAK+Z,oBAAoBmB,kBAAkB2B,SAAWP,EAAOhE,GAC7DtY,KAAK+Z,oBAAoBmB,kBAAkB8C,KAAOC,IAASc,OAG3D/e,KAAK+Z,oBAAoBoB,OAAOhb,QAAKC,KAAK,IAAIiL,UAAU,KACtDrL,KAAK+Z,oBAAsB,KACvB5G,GACFA,EAASmJ,EAAM,GAGnBtc,KAAK+Z,oBAAoBoE,UAAUhe,QAAKC,KAAK,IAAIiL,UAAU,KACzDrL,KAAK+Z,oBAAsB,KACvB5G,GACFA,EAASmJ,EAAM,GAGvB,CAEA0C,wBAAwB7K,EAAkBkI,EAAkBlJ,GAC1B,MAA5BnT,KAAK+Z,sBACP/Z,KAAK+Z,oBAAsB/Z,KAAK2Z,aAAaoB,KAAK6C,IAAyB,CAAEC,YAAY,EAAM5C,KAAM,OACrGjb,KAAK+Z,oBAAoBmB,kBAAkBmB,SAAWA,EACtDrc,KAAK+Z,oBAAoBmB,kBAAkB+D,UAAY9K,EAAQmE,GAC/DtY,KAAK+Z,oBAAoBmB,kBAAkB8C,KAAOC,IAASiB,QAG3Dlf,KAAK+Z,oBAAoBoB,OAAOhb,QAAKC,KAAK,IAAIiL,UAAU,KACtDrL,KAAK+Z,oBAAsB,KACvB5G,GACFA,EAASgB,EAAO,GAGpBnU,KAAK+Z,oBAAoBoE,UAAUhe,QAAKC,KAAK,IAAIiL,UAAU,KACzDrL,KAAK+Z,oBAAsB,KACvB5G,GACFA,EAASgB,EAAO,GAGxB,CAEAgL,gBAAgBC,EAA0BjM,GACxC,MAAM4G,EAAsB/Z,KAAK2Z,aAAaoB,KAAKsE,IAA+B,CAAExB,YAAY,EAAM5C,KAAM,OAC5GlB,EAAoBmB,kBAAkBkE,YAAcA,EACpDrF,EAAoBoB,OAAOhb,QAAKC,KAAK,IAAIiL,UAAWwJ,IAC9C1B,QAAqB/E,IAATyG,GACd1B,EAASiM,EAAW,GAGxBrF,EAAoBoE,UAAUhe,QAAKC,KAAK,IAAIiL,UAAWwJ,IACjD1B,QAAqB/E,IAATyG,GACd1B,EAASiM,EAAW,EAG1B,CASOE,qBAAqBvI,EAA0B5D,GAAgC,IAAAoM,EAAAvf,KAAA,SAAAsa,KAAA,mBACzEiF,EAAK3F,eAAegB,WAAQna,MAAU,wCAAyC,CAAC+e,MAAOzI,EAAUlV,WAM5G0d,EAAK9F,cAAc6F,qBAAqBvI,EAAU1W,IAAImd,GAAKA,EAAElF,KAAKnY,QAAKC,KAAK,IAAIiL,UAAU,KACxFkU,EAAKzf,OAAOqY,QAAQoH,EAAKxf,iBAAiBU,UAAU,0BAEhD0S,GACFA,GAAS,EAAI,GATXA,GACFA,GAAS,EAUV,EAbiF,EActF,CAEMsM,aAAa/W,EAAgByK,GAAgC,IAAAuM,EAAA1f,KAAA,SAAAsa,KAAA,mBACtDoF,EAAK9F,eAAegB,WAAQna,MAAU,kCAOjDif,EAAKjG,cAAc1N,OAAOrD,EAAO4P,IAAIjN,UAAWc,IAC1CgH,IACFuM,EAAK5f,OAAOqY,QAAQuH,EAAK3f,iBAAiBU,UAAU,0BACpD0S,EAAShH,GAAG,GATVgH,GACFA,GAAS,EAUV,EAb8D,EAcnE,CAEAwM,aAAa5B,EAA2B6B,EAAgBzM,GACtDnT,KAAKwS,cAAcqN,OAAO9B,EAAY6B,EAAOtH,IAAIjN,UAAU,KACzDrL,KAAKF,OAAOqY,QAAQnY,KAAKD,iBAAiBU,UAAU,sBAAuB,CAACqN,KAAM8R,EAAO9R,QACrFqF,GACFA,GAAQ,EAGd,CAEA2M,mBAAmBzD,EAAkBuD,EAAgBzM,GACnDnT,KAAKwS,cAAcuN,aAAa1D,EAAUuD,EAAOtH,IAAIjN,UAAU,KAC7DrL,KAAKF,OAAOqY,QAAQnY,KAAKD,iBAAiBU,UAAU,sBAAuB,CAACqN,KAAM8R,EAAO9R,QACrFqF,GACFA,GAAQ,EAGd,EAxiBWoG,SAAa,mBAAA7Y,iBAAb6Y,GAAa5Y,MAAAC,KAAAD,MAAAE,MAAAF,MAAAG,MAAAH,MAAAyB,MAAAzB,MAAAqY,MAAArY,MAAAqf,KAAArf,MAAAsf,KAAAtf,MAAAuf,KAAAvf,MAAAwf,MAAA,EAAb5G,EAAa,WAAAhB,EAAAvX,IAAA,OAAbuY,EAAatY,QAAbsY,EAAarY,UAAAC,WAFZ,SAEDoY,CAAa,sGC1BnB,IAAM6G,EAAoB,MAA3B,MAAOA,EAIXxgB,YAAoB8J,EAAgC2W,GAAhCrgB,KAAA0J,aAAgC1J,KAAAqgB,eAFpDrgB,KAAAgK,QAAUC,IAAYC,MAE4D,CAElF0N,UACE,OAAO5X,KAAK0J,WAAWmC,IAAqB7L,KAAKgK,QAAU,cAC7D,CAEAsW,OAAOC,GACL,OAAOvgB,KAAK0J,WAAWmC,IAAqB7L,KAAKgK,QAAU,iCAAmCoF,mBAAmBmR,IAAQpgB,QAAKE,KAAI0I,IAChIA,EAAK4L,QAAQ6I,GAAKA,EAAEgD,WAAaxgB,KAAKqgB,aAAaI,UAAUzgB,KAAKqgB,aAAaK,wBAAwBlD,EAAElF,MAClGvP,IAEX,CAEA4X,UAAUtI,GACR,OAAOrY,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,oBAAqBqO,EAAKrM,IACvE,CAEA4U,mBAAmBvI,EAAoBwI,GACrC,OAAO7gB,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,2BAA4B,CAACqO,MAAKwI,qBAAoB7U,IACnG,CAEAkM,cAAc4I,EAAe/J,EAA0BgK,EAAmB,IACxE,OAAO/gB,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,+BAAgC,CAACgX,gBAAiBF,EAAOG,mBAAoBF,EAAUhK,aAAY/K,IAChJ,CAEAkV,cAAcpT,GACZ,OAAO9N,KAAK0J,WAAWmC,IAAa7L,KAAKgK,QAAU,+BAAiC8D,EACtF,CAEAqT,UAAUL,GACR,OAAO9gB,KAAK0J,WAAWqC,OAAe/L,KAAKgK,QAAU,oBAAsB8W,EAAO9U,IACpF,EAnCWoU,SAAoB,mBAAA1f,iBAApB0f,GAAoBzf,MAAAC,MAAAD,MAAAE,KAAA,EAApBuf,EAAoB,WAAArP,EAAA/P,IAAA,OAApBof,EAAoBnf,QAApBmf,EAAoBlf,UAAAC,WAFnB,SAEDif,CAAoB,0HCC1B,IAAMgB,EAAa,MAApB,MAAOA,EAQXxhB,YAAoB8J,EAAgC7J,GAAhCG,KAAA0J,aAAgC1J,KAAAH,iBANpDG,KAAAgK,QAAUC,IAAYC,OAEdlK,KAAAqhB,cAAyC,IAAIhX,IAAwB,GACtErK,KAAAsU,SAAWtU,KAAKqhB,cAAc/W,eAAenK,QAAKsU,QAKvDzU,KAAKH,eAAeK,aAAamL,UAAU/K,IACpCA,EAKLN,KAAK0J,WAAWmC,IAAc7L,KAAKgK,QAAU,SAAU,IAAIqB,UAAU2I,IACnEhU,KAAKqhB,cAAc9e,KAAKyR,EAAI,GAL5BhU,KAAKqhB,cAAc9e,KAAK,GAMzB,EAEL,CAEA+e,aAAaxT,EAAcyT,EAA0BC,GACnD,OAAOxhB,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,gBAAiB,CAAC8D,OAAMyT,WAAUC,gBAAexV,IAC9F,CAEAyV,aAAanJ,EAAYxK,EAAcyT,EAA0BC,GAC/D,OAAOxhB,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,gBAAiB,CAACsO,KAAIxK,OAAMyT,WAAUC,gBAAexV,IAClG,CAEA0V,aAAapJ,GACX,OAAOtY,KAAK0J,WAAWqC,OAAO/L,KAAKgK,QAAU,mBAAqBsO,EACpE,CAEAqJ,aACE,OAAO3hB,KAAK0J,WAAWmC,IAAc7L,KAAKgK,QAAU,SAAU,IAAI7J,QAAKiM,KAAI4H,IACzEhU,KAAKqhB,cAAc9e,KAAKyR,EAAI,GAEhC,CAEA6L,OAAO9B,EAA2B6D,GAChC,OAAO5hB,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,iBAAkB,CAAC4X,WAAU7D,cAAa/R,IACvF,CAEA+T,aAAa1D,EAAkBuF,GAC7B,OAAO5hB,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,wBAAyB,CAAC4X,WAAUvF,YAAWrQ,IAC5F,EA9CWoV,SAAa,mBAAA1gB,iBAAb0gB,GAAazgB,MAAAC,MAAAD,MAAAE,KAAA,EAAbugB,EAAa,WAAAS,EAAA7gB,IAAA,OAAbogB,EAAangB,QAAbmgB,EAAalgB,UAAAC,WAFZ,SAEDigB,CAAa,2FCFnB,IAAMU,EAAY,MAAnB,MAAOA,EAUXliB,YAAoBC,EAAwC+J,GAAxC5J,KAAAH,iBAAwCG,KAAA4J,eAT3C5J,KAAA6J,cAAaC,OAAOC,OACrC/J,KAAAgK,QAAUC,IAAYC,OACtBlK,KAAAyQ,OAAiB,GACjBzQ,KAAA+hB,WAAqB,GACd/hB,KAAAgiB,iBAAmB,+CACnBhiB,KAAAiiB,WAAa,gDACbjiB,KAAAkiB,gBAAkB,0CAClBliB,KAAAmiB,kBAAoB,uCAGzBniB,KAAK4J,aAAawY,cAAcjiB,QAAK8M,MAAmBjN,KAAK6J,aAAawB,UAAUwC,IAC9E7N,KAAK4J,aAAayY,eACpBriB,KAAKgiB,iBAAmB,+CACxBhiB,KAAKiiB,WAAa,gDAClBjiB,KAAKmiB,kBAAoB,yCAEzBniB,KAAKgiB,iBAAmB,0CACxBhiB,KAAKiiB,WAAa,2CAClBjiB,KAAKmiB,kBAAoB,0CAI7BniB,KAAKH,eAAeK,aAAaC,QAAK8M,MAAmBjN,KAAK6J,aAAawB,UAAU/K,IAC/EA,IACFN,KAAKyQ,OAASnQ,EAAKmQ,OACnBzQ,KAAK+hB,WAAa3S,mBAAmBpP,KAAKyQ,QAAM,EAGtD,CAEA6R,qBAAqBpL,GACnB,OAAuB,IAAnBA,EAAK+H,UACAjf,KAAKuiB,oBAAoBrL,EAAK2F,UAEhC7c,KAAKwiB,qBAAqBtL,EAAK+H,UACxC,CAOAwD,qBAAqB9f,GACnB,GAAIA,EAAI2U,QAAQ,KAAO,EAAG,OAC1B,MAAMoL,EAAO/f,EAAIC,MAAM,KAAK,GACtB+f,EAAaD,EAAKpL,QAAQ,KAChC,OAAOoL,EAAKE,UAAU,EAAGD,GAAYE,QAAQ,KAAM,GACrD,CAEAC,qBAAqBrgB,GACnB,MAAO,GAAGzC,KAAKgK,wCAAwCvH,YAAoBzC,KAAK+hB,YAClF,CAEAQ,oBAAoB1F,GAClB,MAAO,GAAG7c,KAAKgK,sCAAsC6S,YAAmB7c,KAAK+hB,YAC/E,CAEAgB,oBAAoB1G,GAClB,MAAO,GAAGrc,KAAKgK,sCAAsCqS,YAAmBrc,KAAK+hB,YAC/E,CAEArB,wBAAwBM,GACtB,MAAO,GAAGhhB,KAAKgK,iDAAiDgX,YAA0BhhB,KAAK+hB,YACjG,CAEAiB,yBAAyBC,GACvB,MAAO,GAAGjjB,KAAKgK,gDAAgDiZ,YAAwBjjB,KAAK+hB,YAC9F,CAEAS,qBAAqBvD,GACnB,MAAO,GAAGjf,KAAKgK,wCAAwCiV,YAAoBjf,KAAK+hB,YAClF,CAEAmB,mBAAmBjE,EAAmBkE,GACpC,MAAO,GAAGnjB,KAAKgK,mCAAmCiV,YAAoBjf,KAAK+hB,sBAAsBoB,GACnG,CAEAC,gBAAgBzgB,GACd,MAAO,GAAG3C,KAAKgK,6BAA6BoF,mBAAmBzM,aAAe3C,KAAK+hB,YACrF,CAEAsB,oBAAoBC,GAClB,MAAO,GAAGtjB,KAAKgK,sCAAsCoF,mBAAmBkU,aAAoBtjB,KAAK+hB,YACnG,CAEAwB,mBAAmB5Y,GACjBA,EAAM6Y,OAAOC,IAAMzjB,KAAKgiB,gBAC1B,CAEA0B,0BAA0B/Y,GACxBA,EAAM6Y,OAAOC,IAAMzjB,KAAKmiB,iBAC1B,CAOA1B,UAAU9d,GACR,MAAMghB,EAAIC,KAAKC,MAAsB,IAAhBD,KAAKE,SAAiB,GAC3C,OAAInhB,EAAI2U,QAAQ,YAAc,EACrB3U,EAAM,EAERA,EAAM,WAAaghB,CAC5B,EAzGW7B,SAAY,mBAAAphB,iBAAZohB,GAAYnhB,MAAAC,KAAAD,MAAAE,KAAA,EAAZihB,EAAY,WAAA/gB,EAAAC,IAAA,OAAZ8gB,EAAY7gB,QAAZ6gB,EAAY5gB,UAAAC,WAFX,SAED2gB,CAAY,4FCGlB,IAAMiC,EAAc,MAArB,MAAOA,EAOXnkB,YAAoB8J,GAAA1J,KAAA0J,aALpB1J,KAAAgK,QAAUC,IAAYC,OAEdlK,KAAAgkB,kBAAmD5V,EACnDpO,KAAAikB,kBAAyD7V,CAEpB,CAE7C8V,kBACE,OAAyB9V,MAArBpO,KAAKgkB,cAAgB5V,EAChBtL,MAAG9C,KAAKgkB,cAGVhkB,KAAK0J,WAAWmC,IAAe7L,KAAKgK,QAAU,WAAW7J,QAAKE,KAAIoI,IACvEzI,KAAKgkB,aAAe,GACpBvb,EAAUkM,QAAQwP,SACU/V,IAAtBpO,KAAKgkB,eACPhkB,KAAKgkB,aAAaG,EAAI7L,IAAM6L,EAAIrW,QAG7B9N,KAAKgkB,eAEhB,CAEAI,eAAe3hB,GACb,OAAyB2L,MAArBpO,KAAKgkB,cAA6BhkB,KAAKgkB,aAAazJ,eAAe9X,IAAS,EACvEK,MAAG9C,KAAKgkB,aAAavhB,IAEvBzC,KAAK0J,WAAWmC,IAAe7L,KAAKgK,QAAU,WAAW7J,QAAKE,KAAIgkB,IACvErkB,KAAKgkB,aAAe,GACpBK,EAAE1P,QAAQwP,SACkB/V,IAAtBpO,KAAKgkB,eACPhkB,KAAKgkB,aAAaG,EAAI7L,IAAM6L,EAAIrW,QAG7B9N,KAAKgkB,aAAavhB,KAE7B,CAEA6hB,kBAAkBxW,GAChB,OAAO9N,KAAK0J,WAAWmC,IAAa7L,KAAKgK,QAAU,4BAA8B8D,EACnF,CAEAyW,gBAAgBC,GACd,IAAIjE,EAAQ,GACZ,YAAiBnS,IAAboW,GAA0BA,EAAS3iB,OAAS,IAC9C0e,EAAQ,SAAWnR,mBAAmBoV,IAGjCxkB,KAAK0J,WAAWmC,IAAoB7L,KAAKgK,QAAU,eAAiBuW,EAC7E,CAEAkE,WAAWhiB,GACT,OAAOzC,KAAK0J,WAAWmC,IAAe7L,KAAKgK,QAAU,8BAAgCvH,EACvF,CAEAiiB,eACE,OAAO1kB,KAAK0J,WAAWmC,IAAe7L,KAAKgK,QAAU,UACvD,CAEA2a,yBAAyBzZ,EAAkB0Z,GACzC,OAAO5kB,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,uBAAwB,CAACkB,WAAU0Z,qBAChF,CAEApK,KAAK/X,EAAmBoiB,GAAQ,GAC9B,OAAO7kB,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,0BAA4BvH,EAAY,UAAYoiB,EAAO,GACxG,CAEArJ,QAAQ/Y,GACN,OAAOzC,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,6BAA+BvH,EAAW,GACvF,CAEAiY,gBAAgBjY,EAAmBqiB,GAAc,GAC/C,OAAO9kB,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,sCAAwCvH,EAAY,UAAYqiB,EAAa,GAC1H,CAEAzO,OAAOxJ,GACL,OAAO7M,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,iBAAkB6C,EAC/D,CAEAd,OAAOtJ,GACL,OAAOzC,KAAK0J,WAAWqC,OAAO/L,KAAKgK,QAAU,4BAA8BvH,EAAW,GACxF,CAEAgN,OAAO5C,GACL,OAAO7M,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,iBAAkB6C,EAC/D,CAEAkY,eAAetiB,GACb,OAAyB2L,MAArBpO,KAAKikB,cAA6BjkB,KAAKikB,aAAa1J,eAAe9X,IAAS,EACvEK,MAAG9C,KAAKikB,aAAaxhB,IAEvBzC,KAAK0J,WAAWmC,IAAiB7L,KAAKgK,QAAU,0BAA4BvH,GAAWtC,QAAKE,KAAIgkB,SAC3EjW,IAAtBpO,KAAKikB,eACPjkB,KAAKikB,aAAe,IAGtBjkB,KAAKikB,aAAaxhB,GAAa4hB,EACxBrkB,KAAKikB,aAAaxhB,KAE7B,EArGWshB,SAAc,mBAAArjB,iBAAdqjB,GAAcpjB,MAAAC,MAAA,EAAdmjB,EAAc,WAAAhjB,EAAAC,IAAA,OAAd+iB,EAAc9iB,QAAd8iB,EAAc7iB,UAAAC,WAFb,SAED4iB,CAAc,wECLpB,IAAMiB,EAAa,MAApB,MAAOA,EAIXplB,YAAoB8J,GAAA1J,KAAA0J,aAFpB1J,KAAAgK,QAAUC,IAAYC,MAEwB,CAE9C+a,WAAWC,GAA0B,GACnC,OAAOllB,KAAK0J,WAAWmC,IAAc7L,KAAKgK,QAAU,wBAA0Bkb,EAChF,CAEAC,iBACE,OAAOnlB,KAAK0J,WAAWmC,IAAc7L,KAAKgK,QAAU,cACtD,CAEAob,cACE,OAAOplB,KAAK0J,WAAWmC,IAAa7L,KAAKgK,QAAU,eACrD,CAEAqb,aAAana,GACX,OAAOlL,KAAK0J,WAAWqC,OAAO/L,KAAKgK,QAAU,8BAAgCoF,mBAAmBlE,GAClG,CAEAnI,iBAAiBN,GACf,OAAOzC,KAAK0J,WAAWmC,IAAa7L,KAAKgK,QAAU,sCAAwCvH,EAC7F,CAEA6iB,mBAAmBC,GACjB,OAAOvlB,KAAK0J,WAAWmC,IAAa7L,KAAKgK,QAAU,wCAA0Cub,EAC/F,CAEAlH,sBAAsBtH,GACpB,OAAO/W,KAAK0J,WAAWiD,KAAoB3M,KAAKgK,QAAU,0BAA2B,CAAC+M,aACxF,CAEAwH,yBAAyBxH,GACvB,OAAO/W,KAAK0J,WAAWiD,KAAoB3M,KAAKgK,QAAU,6BAA8B,CAAC+M,aAC3F,CAEAyO,YACE,OAAOxlB,KAAK0J,WAAWmC,IAAY7L,KAAKgK,QAAU,eACpD,EAxCWgb,SAAa,mBAAAtkB,iBAAbskB,GAAarkB,MAAAC,MAAA,EAAbokB,EAAa,WAAAS,EAAAzkB,IAAA,OAAbgkB,EAAa/jB,QAAb+jB,EAAa9jB,UAAAC,WAFZ,SAED6jB,CAAa,oGCEdpa,EAAZ,SAAYA,GACVA,SAAA8a,gBAAA,kBACA9a,EAAA+a,WAAA,aACA/a,EAAAgb,YAAA,cACAhb,EAAAib,cAAA,gBACAjb,EAAAkb,oBAAA,sBACAlb,EAAAmb,YAAA,cACAnb,EAAAob,wBAAA,0BAIApb,EAAAqb,MAAA,QACArb,EAAAsb,uBAAA,yBAIAtb,EAAAub,gBAAA,kBAKAvb,EAAAwb,iBAAA,mBAIAxb,EAAAyb,qBAAA,uBAIAzb,EAAA0b,iBAAA,mBAIA1b,EAAA2b,kBAAA,oBAIA3b,EAAA4b,YAAA,cAIA5b,EAAA6b,oBAAA,sBAIA7b,EAAA8b,gBAAA,kBAIA9b,EAAA+b,mBAAA,qBAIA/b,EAAAC,WAAA,aAIAD,EAAAgc,yBAAA,2BAIAhc,EAAAic,0BAAA,4BAIAjc,EAAA2G,KAAA,OAIA3G,EAAAkc,gBAAA,kBAIAlc,EAAAmc,qBAAA,uBAzEUnc,CA0EZ,CA1EA,CAAYA,GAAM,IAqFX,IAAMoc,EAAiB,MAAxB,MAAOA,EAmBXpnB,cAlBAI,KAAAinB,OAAShd,IAAYgd,OAGbjnB,KAAAknB,eAAiB,IAAI7c,IAA4B,GACjDrK,KAAAmnB,kBAAoB,IAAIC,IAA0B,IAKnDpnB,KAAAyK,UAAYzK,KAAKknB,eAAe5c,eAIhCtK,KAAAqnB,aAAernB,KAAKmnB,kBAAkB7c,eAG7CtK,KAAAgT,SAAmB,CAEJ,CAQRsU,YAAY3c,EAAqB4c,GACtC,OAAI5c,EAAMA,OAASC,EAAOyb,qBACH1b,EAAMG,QACPyc,UAAUlQ,eAAiBkQ,EAAUlQ,cAEpD1M,EAAMA,QAAU4c,CACzB,CAEAva,oBAAoB1M,EAAY0S,GAC9BhT,KAAKgT,QAAUA,EAEfhT,KAAKwnB,eAAgB,IAAIC,KACtBC,QAAQ1nB,KAAKinB,OAAS,WAAY,CACjCU,mBAAoBA,IAAMrnB,EAAK6M,QAEhCya,yBACAC,QAEH7nB,KAAKwnB,cACJM,QACAC,MAAMC,GAAOC,QAAQznB,MAAMwnB,IAE5BhoB,KAAKwnB,cAAcU,GAAGtd,EAAOmb,YAAcoC,IACzCnoB,KAAKmnB,kBAAkB5kB,KAAK4lB,EAAS,GAGvCnoB,KAAKwnB,cAAcU,GAAGtd,EAAO+a,WAAYyC,IACvCpoB,KAAKknB,eAAe3kB,KAAK,CACvBoI,MAAOC,EAAO+a,WACd7a,QAASsd,EAAKC,MACf,GAGHroB,KAAKwnB,cAAcU,GAAGtd,EAAOkb,oBAAqBsC,IAChDpoB,KAAKknB,eAAe3kB,KAAK,CACvBoI,MAAOC,EAAOkb,oBACdhb,QAASsd,EAAKC,MACf,GAGHroB,KAAKwnB,cAAcU,GAAGtd,EAAOgc,yBAA0BwB,IACrDpoB,KAAKknB,eAAe3kB,KAAK,CACvBoI,MAAOC,EAAOgc,yBACd9b,QAASsd,EAAKC,MACf,GAGHroB,KAAKwnB,cAAcU,GAAGtd,EAAOic,0BAA2BuB,IACtDpoB,KAAKknB,eAAe3kB,KAAK,CACvBoI,MAAOC,EAAOic,0BACd/b,QAASsd,EAAKC,MACf,GAGHroB,KAAKwnB,cAAcU,GAAGtd,EAAO8b,gBAAiB0B,IAC5CpoB,KAAKknB,eAAe3kB,KAAK,CACvBoI,MAAOC,EAAO8b,gBACd5b,QAASsd,EAAKC,MACf,GAIHroB,KAAKwnB,cAAcU,GAAGtd,EAAOyb,qBAAuB+B,IAClDpoB,KAAKknB,eAAe3kB,KAAK,CACvBoI,MAAOC,EAAOyb,qBACdvb,QAASsd,GACV,GAGHpoB,KAAKwnB,cAAcU,GAAGtd,EAAO2b,kBAAmB6B,IAC9CpoB,KAAKknB,eAAe3kB,KAAK,CACvBoI,MAAOC,EAAO2b,kBACdzb,QAASsd,EAAKC,MACf,GAGHroB,KAAKwnB,cAAcU,GAAGtd,EAAOob,wBAAyBoC,IACpDpoB,KAAKknB,eAAe3kB,KAAK,CACvBoI,MAAOC,EAAOob,wBACdlb,QAASsd,EAAKC,MACf,GAGHroB,KAAKwnB,cAAcU,GAAGtd,EAAO+b,mBAAoByB,IAC/CpoB,KAAKknB,eAAe3kB,KAAK,CACvBoI,MAAOC,EAAO+b,mBACd7b,QAASsd,EAAKC,MACf,GAGHroB,KAAKwnB,cAAcU,GAAGtd,EAAOC,WAAYud,IACvCpoB,KAAKknB,eAAe3kB,KAAK,CACvBoI,MAAOC,EAAOC,WACdC,QAASsd,EAAKC,MACf,GAGHroB,KAAKwnB,cAAcU,GAAGtd,EAAOqb,MAAOmC,IAClCpoB,KAAKknB,eAAe3kB,KAAK,CACvBoI,MAAOC,EAAOqb,MACdnb,QAASsd,EAAKC,MACf,GAGHroB,KAAKwnB,cAAcU,GAAGtd,EAAO2G,KAAM6W,IACjCpoB,KAAKknB,eAAe3kB,KAAK,CACvBoI,MAAOC,EAAO2G,KACdzG,QAASsd,EAAKC,MACf,GAGHroB,KAAKwnB,cAAcU,GAAGtd,EAAOgb,YAAawC,IACxCpoB,KAAKknB,eAAe3kB,KAAK,CACvBoI,MAAOC,EAAOgb,YACd9a,QAASsd,EAAKC,MACf,GAGHroB,KAAKwnB,cAAcU,GAAGtd,EAAOib,cAAeuC,IAC1CpoB,KAAKknB,eAAe3kB,KAAK,CACvBoI,MAAOC,EAAOib,cACd/a,QAASsd,EAAKC,MACf,GAGHroB,KAAKwnB,cAAcU,GAAGtd,EAAO4b,YAAa4B,IACxCpoB,KAAKknB,eAAe3kB,KAAK,CACvBoI,MAAOC,EAAO4b,YACd1b,QAASsd,EAAKC,MACf,GAGHroB,KAAKwnB,cAAcU,GAAGtd,EAAO8a,gBAAiB0C,IAC5CpoB,KAAKknB,eAAe3kB,KAAK,CACvBoI,MAAOC,EAAO8a,gBACd5a,QAASsd,EAAKC,MACf,GAGHroB,KAAKwnB,cAAcU,GAAGtd,EAAOkc,gBAAiBsB,IAC5CpoB,KAAKknB,eAAe3kB,KAAK,CACvBoI,MAAOC,EAAOkc,gBACdhc,QAASsd,EAAKC,MACf,GAGHroB,KAAKwnB,cAAcU,GAAGtd,EAAOmc,qBAAsBqB,IACjDpoB,KAAKknB,eAAe3kB,KAAK,CACvBoI,MAAOC,EAAOmc,qBACdjc,QAASsd,EAAKC,MACf,EAEL,CAEAha,oBACMrO,KAAKwnB,eACPxnB,KAAKwnB,cAAcc,OAAOP,MAAMC,GAAOC,QAAQznB,MAAMwnB,GAEzD,CAEAO,YAAYC,EAAoBH,GAC9B,OAAOroB,KAAKwnB,cAAciB,OAAOD,EAAYH,EAC/C,EA7LWrB,SAAiB,mBAAAtmB,iBAAjBsmB,EAAiB,EAAjBA,EAAiB,WAAAjW,EAAA/P,IAAA,OAAjBgmB,EAAiB/lB,QAAjB+lB,EAAiB9lB,UAAAC,WAFhB,SAED6lB,CAAiB,4ICvEvB,IAAM0B,EAAe,MAAtB,MAAOA,EAKX9oB,YAAoB8J,EAAgCrI,GAAhCrB,KAAA0J,aAAgC1J,KAAAqB,SAHpDrB,KAAAgK,QAAUC,IAAYC,OACdlK,KAAA2oB,eAAkC,EAE4B,CAEtEC,iBAAiBngB,GACf,IAAIogB,EAAS,uBACb,OAAiBza,MAAb3F,GAA0BA,EAAU5G,OAAS,IAC/CgnB,GAAU,eAAiBpgB,EAAUqgB,KAAK,MAErC9oB,KAAK0J,WAAWmC,IAAyB7L,KAAKgK,QAAU6e,EACjE,CAEAE,wBAAwBtgB,GACtB,IAAIogB,EAAS,8BACb,OAAiBza,MAAb3F,GAA0BA,EAAU5G,OAAS,IAC/CgnB,GAAU,eAAiBpgB,EAAUqgB,KAAK,MAErC9oB,KAAK0J,WAAWmC,IAAiC7L,KAAKgK,QAAU6e,EACzE,CAEAG,WAAWvgB,GACT,IAAIogB,EAAS,gBACb,OAAiBza,MAAb3F,GAA0BA,EAAU5G,OAAS,IAC/CgnB,GAAU,eAAiBpgB,EAAUqgB,KAAK,MAErC9oB,KAAK0J,WAAWmC,IAAgB7L,KAAKgK,QAAU6e,EACxD,CAEAI,aAAaxgB,GACX,IAAIogB,EAAS,kBACb,OAAiBza,MAAb3F,GAA0BA,EAAU5G,OAAS,IAC/CgnB,GAAU,eAAiBpgB,EAAUqgB,KAAK,MAErC9oB,KAAK0J,WAAWmC,IAAkB7L,KAAKgK,QAAU6e,EAC1D,CAEAK,gBAAgBzgB,GACd,IAAIogB,EAAS,qBACb,OAAiBza,MAAb3F,GAA0BA,EAAU5G,OAAS,IAC/CgnB,GAAU,eAAiBpgB,EAAUqgB,KAAK,MAErC9oB,KAAK0J,WAAWmC,IAAqB7L,KAAKgK,QAAU6e,EAC7D,CAMAM,uBACE,OAA2B/a,MAAvBpO,KAAK2oB,gBAA+B3oB,KAAK2oB,eAAe9mB,OAAS,KAC5DiB,MAAG9C,KAAK2oB,gBAEV3oB,KAAK0J,WAAWmC,IAAqB7L,KAAKgK,QAAU,0BACxD7J,QAAKiM,KAAIiY,GAAKrkB,KAAK2oB,eAAiBtE,GACzC,CAEA+E,aAAa3gB,GACX,IAAIogB,EAAS,kBACb,OAAiBza,MAAb3F,GAA0BA,EAAU5G,OAAS,IAC/CgnB,GAAU,eAAiBpgB,EAAUqgB,KAAK,MAErC9oB,KAAK0J,WAAWmC,IAAmB7L,KAAKgK,QAAU6e,EAC3D,CAEAQ,mBAAmBjc,GACjB,OAAOpN,KAAK0J,WAAWmC,IAAmB7L,KAAKgK,QAAU,gCAAkCoD,EAC7F,CAMAkc,yBACE,MAAO,CACLC,WAAY,GACZC,YAAahkB,IAAkBE,IAC/B+jB,QAAS,EACTC,YAAa,CACXC,aAAa,EACbC,UAAWplB,KAAUC,UAG3B,CAEAolB,6BAA6BC,EAAqBljB,IAAYG,WAAYgjB,EAAapkB,IAAiBC,MAAON,EAAQ,IACrH,MAAO,CACLykB,WAAYA,EACZD,MAAOA,EACPxkB,MAAOA,EAEX,CAEA0kB,aAAaC,EAA6BhT,EAAeiT,GACvDD,EAAIhT,GAAO8S,WAAaG,EAAWH,WACnCE,EAAIhT,GAAO6S,MAAQI,EAAWJ,MAC9BG,EAAIhT,GAAO3R,MAAQ4kB,EAAW5kB,MAAQ4kB,EAAW5kB,MAAQ,GAAK,EAChE,EAnGWojB,SAAe,mBAAAhoB,iBAAfgoB,GAAe/nB,MAAAC,MAAAD,MAAAE,MAAA,EAAf6nB,EAAe,WAAAyB,EAAAnpB,IAAA,OAAf0nB,EAAeznB,QAAfynB,EAAexnB,UAAAC,WAFd,SAEDunB,CAAe,kFCjBrB,IAAM0B,EAAU,MAAjB,MAAOA,EAuBXxqB,YAAsCyqB,EAAoBC,GAApBtqB,KAAAqqB,WAtB/BrqB,KAAAuqB,uBAAyB,4BAExBvqB,KAAAwqB,oBAAsB,IAAIngB,IAAuB,GAIzDrK,KAAAyqB,eAAiBzqB,KAAKwqB,oBAAoBlgB,eAElCtK,KAAA0qB,sBAAwB,IAAIrgB,IAAuB,GAI3DrK,KAAA2qB,kBAAoB3qB,KAAK0qB,sBAAsBpgB,eAEvCtK,KAAA4qB,wBAA0B,IAAIvgB,IAAuB,GAI7DrK,KAAA6qB,mBAAqB7qB,KAAK4qB,wBAAwBtgB,eAKhDtK,KAAK8qB,SAAWR,EAAgBS,eAAe,KAAM,MACrD/qB,KAAKgrB,aACL,MAAMC,EAAsE,SAAtDnpB,aAAayO,QAAQvQ,KAAKuqB,0BAAuC,EACvFvqB,KAAK0qB,sBAAsBnoB,KAAK0oB,GAChCjrB,KAAKkrB,aACP,CAKAF,aACEhrB,KAAK8qB,SAASK,SAASnrB,KAAKqqB,SAASe,cAAc,QAAS,aAAc,QAC1EprB,KAAK8qB,SAASK,SAASnrB,KAAKqqB,SAASe,cAAc,QAAS,SAAU,8BACtEprB,KAAK8qB,SAASK,SAASnrB,KAAKqqB,SAASe,cAAc,QAAS,SAAU,8BACtEprB,KAAKwqB,oBAAoBjoB,MAAK,EAChC,CAKA8oB,aACErrB,KAAK8qB,SAASK,SAASnrB,KAAKqqB,SAASe,cAAc,QAAS,aAAc,OAC1EprB,KAAK8qB,SAASQ,YAAYtrB,KAAKqqB,SAASe,cAAc,QAAS,UAC/DprB,KAAK8qB,SAASQ,YAAYtrB,KAAKqqB,SAASe,cAAc,QAAS,UAC/DprB,KAAKwqB,oBAAoBjoB,MAAK,EAChC,CAKA2oB,cACElrB,KAAK4qB,wBAAwBroB,MAAK,EACpC,CAKAgpB,cACEvrB,KAAK4qB,wBAAwBroB,MAAK,EACpC,CAEAipB,gBACExrB,KAAK0qB,sBAAsBvqB,QAAKC,KAAK,IAAIiL,UAAUogB,SACrCrd,IAARqd,IAAmBA,GAAM,GAC7B,MAAMC,GAAWD,EACjBzrB,KAAK0qB,sBAAsBnoB,KAAKmpB,GAChC5pB,aAAaC,QAAQ/B,KAAKuqB,uBAAwBmB,EAAS,GAAE,EAEjE,EAxEWtB,SAAU,mBAAA1pB,iBAAV0pB,GAAUzpB,MAuBDgrB,MAAQhrB,aAAA,EAvBjBypB,EAAU,WAAApnB,EAAAhC,IAAA,OAAVopB,EAAUnpB,QAAVmpB,EAAUlpB,UAAAC,WAFT,SAEDipB,CAAU,mLCehB,MAAMwB,GAA0B,EAC1BC,GAAyB,EAK/B,IAAMC,EAAa,MAApB,MAAOA,EASXlsB,YAAoB8J,EAAgCrI,EAC1CY,EAA4B8pB,EAC5BC,EAAsDnsB,GAF5CG,KAAA0J,aAAgC1J,KAAAqB,SAC1CrB,KAAAiC,WAA4BjC,KAAA+rB,iBAC5B/rB,KAAAgsB,uBAAsDhsB,KAAAH,iBAT/CG,KAAA6J,cAAaC,OAAOC,OACrC/J,KAAAgK,QAAUC,IAAYC,OACtBlK,KAAA+hB,WAAqB,GAQjB/hB,KAAKH,eAAeK,aAAaC,QAAK8M,MAAmBjN,KAAK6J,aAAawB,UAAU/K,KAC/EA,KACFN,KAAK+hB,WAAa3S,mBAAmB9O,GAAKmQ,QAAM,EAGxD,CAGAwb,mBAAmBxpB,EAAmB4Z,EAAkB4C,EAAmBiN,GAGzE,YAFe9d,IAAX8d,IAAsBA,EAAS7oB,IAAYE,SAE3C2oB,IAAW7oB,IAAYI,KAClB,CAAC,UAAWhB,EAAW,SAAU4Z,EAAU,OAAQ4C,GACjDiN,IAAW7oB,IAAYK,IACzB,CAAC,UAAWjB,EAAW,SAAU4Z,EAAU,MAAO4C,GAElD,CAAC,UAAWxc,EAAW,SAAU4Z,EAAU,QAAS4C,EAE/D,CAEAkN,YAAYlN,GACV,MAAO,GAAGjf,KAAKgK,+BAA+BiV,YAAoBjf,KAAK+hB,YACzE,CAEAqK,SAAS/P,EAAkBQ,EAAkBoC,EAAmBoN,GAC9D,OAAOrsB,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,kBAAmB,CAACqS,WAAUQ,WAAUoC,YAAWoN,QAChG,CAEAC,WAAWjQ,EAAkBQ,EAAkBoC,EAAmBoN,GAChE,OAAOrsB,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,oBAAqB,CAACqS,WAAUQ,WAAUoC,YAAWoN,QAClG,CAEAE,gBAAgB7qB,GACd,OAAO1B,KAAK0J,WAAWiD,KAAqB3M,KAAKgK,QAAU,uBAAwBtI,EACrF,CAEA8qB,aAAavN,GACX,OAAOjf,KAAK0J,WAAWmC,IAAoB7L,KAAKgK,QAAU,sCAAwCiV,EACpG,CAEAwN,sBAAsB5P,GACpB,OAAO7c,KAAK0J,WAAWmC,IAAoB7L,KAAKgK,QAAU,oCAAsC6S,EAClG,CAEA6P,sBAAsBrQ,GACpB,OAAOrc,KAAK0J,WAAWmC,IAAoB7L,KAAKgK,QAAU,oCAAsCqS,EAClG,CAEAsQ,eAAetQ,GACb,OAAOrc,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,0BAA2B,CAACqS,YAAWrQ,IACpF,CACA4gB,uBAAuB7V,GACrB,OAAO/W,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,+BAAgC,CAAC+M,aAAY/K,IAC1F,CAMA6gB,gBAAgBxQ,GACd,OAAOrc,KAAK0J,WAAWmC,IAAkB7L,KAAKgK,QAAU,iCAAmCqS,EAC7F,CAEAyQ,YAAY7N,GACV,OAAOjf,KAAK0J,WAAWmC,IAAsB7L,KAAKgK,QAAU,iCAAmCiV,EACjG,CAEA8N,WAAW9N,EAAmBoN,GAC5B,MAAO,GAAGrsB,KAAKgK,iCAAiCiV,YAAoBjf,KAAK+hB,mBAAmBsK,GAC9F,CAEAW,gBAAgB/N,EAAmBoN,GACjC,MAAO,GAAGrsB,KAAKgK,qCAAqCiV,YAAoBjf,KAAK+hB,mBAAmBsK,GAClG,CAEAY,mBAAmB5Q,EAAkB5L,EAAgB4b,GACnD,OAAOrsB,KAAKgK,QAAU,kCAAoCqS,EAAW,SAAWgQ,EAAO,WAAajd,mBAAmBqB,EACzH,CAEAyc,eAAejO,EAAmBkO,GAAoB,GACpD,OAAOntB,KAAK0J,WAAWmC,IAAiB7L,KAAKgK,QAAU,iCAAmCiV,EAAY,sBAAwBkO,EAChI,CAEAC,kBAAkBnO,GAChB,OAAOjf,KAAK0J,WAAWmC,IAA0B7L,KAAKgK,QAAU,oCAAsCiV,EACxG,CAEArC,aAAana,EAAmB4Z,EAAkBQ,EAAkBoC,EAAmBoN,EAAcgB,EAA8B,MACjI,OAAOrtB,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,kBAAmB,CAACvH,YAAW4Z,WAAUQ,WAAUoC,YAAWkE,QAASkJ,EAAMgB,gBAC1H,CAEA9Q,eAAeF,EAAkBQ,GAC/B,OAAO7c,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,0BAA2B,CAACqS,WAAUQ,YACnF,CAEAK,iBAAiBb,EAAkByB,EAA2BC,GAC5D,OAAO/d,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,4BAA6B,CAACqS,WAAUyB,YAAWC,cAChG,CAEAV,mBAAmBhB,EAAkByB,EAA2BC,GAC9D,OAAO/d,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,8BAA+B,CAACqS,WAAUyB,YAAWC,cAClG,CAEAR,uBAAuBxG,GACrB,OAAO/W,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,mCAAoC,CAAC+M,aAClF,CAEA2G,yBAAyB3G,GACvB,OAAO/W,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,qCAAsC,CAAC+M,aACpF,CAEA2F,iBAAiBL,EAAkBQ,GACjC,OAAO7c,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,4BAA6B,CAACqS,WAAUQ,YACrF,CAGAyQ,eAAejR,EAAkBQ,EAAkB0Q,EAA0BtK,GAAwB,GACnG,OACSjjB,KAAK0J,WAAWmC,IADrBoX,EAAgB,EACiBjjB,KAAKgK,QAAU,qCAAuCqS,EAAW,qBAAuBkR,EAAmB,kBAAoBtK,EAEjIjjB,KAAKgK,QAAU,gCAAkCqS,EAAW,aAAeQ,EAAW,qBAAuB0Q,EAClJ,CAEAC,eAAenR,EAAkBQ,EAAkB0Q,EAA0BtK,GAAwB,GACnG,OACSjjB,KAAK0J,WAAWmC,IADrBoX,EAAgB,EACiBjjB,KAAKgK,QAAU,qCAAuCqS,EAAW,qBAAuBkR,EAAmB,kBAAoBtK,EAEjIjjB,KAAKgK,QAAU,gCAAkCqS,EAAW,aAAeQ,EAAW,qBAAuB0Q,EAClJ,CAEAE,kBAAkBpR,GAChB,OAAOrc,KAAK0J,WAAWmC,IAAa7L,KAAKgK,QAAU,gCAAkCqS,EACvF,CAEAqR,kBAAkBrR,GAChB,OAAOrc,KAAK0J,WAAWmC,IAAa7L,KAAKgK,QAAU,kCAAoCqS,EACzF,CAEAsR,YAAYtR,GACV,OAAOrc,KAAK0J,WAAWmC,IAAuB7L,KAAKgK,QAAU,6BAA+BqS,EAC9F,CAKAuR,kBAAkBC,EAA0B,SAC1C,MAAMC,EAAWzD,SAASe,cAAc,QACG,MAAb0C,IAC5B9tB,KAAK+tB,kBAAoBD,EAASE,MAAMC,WACxCH,EAASI,aAAa,QAAS,qBAAuBL,EAAkB,eAE5E,CAEAM,sBACE,MAAML,EAAWzD,SAASe,cAAc,QACG,MAAb0C,QAAgD1f,IAA3BpO,KAAK+tB,oBACtDD,EAASE,MAAMC,WAAajuB,KAAK+tB,kBAErC,CAOAK,kBAAkBC,GAChB,QAAiBjgB,IAAbigB,GAAuC,KAAbA,EAAmB,OAAO,EACxD,MAAMC,EAAS,IAAIC,gBAAgB,IAAIC,IAAIH,GAAU/N,QACrD,OAAO5d,SAAS4rB,EAAOziB,IAAI,SAAW,KAAM,GAC9C,CAEA4iB,oBAAoBJ,GAClB,QAAiBjgB,IAAbigB,GAAuC,KAAbA,EAAmB,OAAO,EACxD,MAAMC,EAAS,IAAIC,gBAAgB,IAAIC,IAAIH,GAAU/N,QACrD,OAAO5d,SAAS4rB,EAAOziB,IAAI,cAAgB,KAAM,GACnD,CAEA6iB,kBAAkB/rB,EAAagsB,EAAuBC,GAAyB,EAAOC,GAA2B,EAAO5L,GAAwB,GAC9I,MAAM6L,EAAiBnsB,EAAIosB,YAAY,KACvC,IAAIC,GAAWrsB,EAAIigB,UAAU,EAAGkM,EAAiB,GAAKH,EAAgB,GACtEK,WAAYhvB,KAAKivB,eAAeL,EAAeC,EAAiB5L,GACzD+L,EACT,CAGAE,qBAAqBN,GAAyB,EAAOC,GAA2B,EAAO5L,GAAwB,GAC7G,IAAIqL,EAA+B,GACnC,OAAIM,IACFN,EAAOM,eAAmB,GAExBC,IACFP,EAAOrL,cAAmBA,GAErBqL,CACT,CAEAW,eAAeL,GAAyB,EAAOC,GAA2B,EAAO5L,GAAwB,GACvG,IAAIqL,EAAS,GACb,OAAIM,IACFN,GAAU,uBAERO,IACEP,EAAOhX,QAAQ,KAAO,EACxBgX,GAAU,kBAAoBrL,EAE9BqL,GAAU,kBAAoBrL,GAG3BqL,CACT,CAEAa,iBAAiBC,EAAajc,GAExBkc,IAAWC,WACbD,IAAWE,QAEf,CAMAC,sBACE,OAAqC,MAA9BnF,SAASoF,iBAClB,CAKAC,YAAYb,GAA2B,EAAO5L,EAAwB,GAChE4L,EACF7uB,KAAKqB,OAAOc,cAAc,SAAW8gB,GAErCjjB,KAAKiC,SAAS0tB,MAElB,CAEAC,kBAAkB3Q,EAAmB4Q,EAAoBxqB,GACvD,OAAOrF,KAAK0J,WAAWqC,OAAO/L,KAAKgK,QAAU,yBAAyBiV,aAAqB4Q,WAAoBzgB,mBAAmB/J,KACpI,CAEAyqB,eAAe7Q,GACb,OAAOjf,KAAK0J,WAAWmC,IAAwB7L,KAAKgK,QAAU,yBAA2BiV,EAC3F,CAEA8Q,kBAAkBttB,EAAmB4Z,EAAkBQ,EAAkBoC,EAAmB4Q,EAAoBxqB,EAAegoB,IAC7H,OAAOrtB,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,qBAAsB,CAACvH,YAAW4Z,WAAUQ,WAAUoC,YAAW4Q,aAAYxqB,QAAOgoB,iBACjI,CAEA2C,oBAAoBC,GAClB,MAAMC,EAAO7F,SAAS8F,SAASF,EAAM5F,SAAU,KAAM+F,YAAYC,wBAAyB,MAAMC,gBAChG,OAAIJ,GAAMK,WAAaC,KAAKC,aACnBP,EAEF,IACT,CAOAQ,WAAWC,EAAcC,GAAY,GACnC,GAAgB,OAAZD,EAAkB,MAAO,GAC7B,IAAKC,EAAW,CACd,GAAmB,KAAfD,EAAQrY,GAAa,MAAO,OAASqY,EAAQrY,GAAK,KACtD,GAAIqY,IAAYtG,SAAShC,KAAQ,OAAOsI,EAAQ1Y,QAIlD,IAAI4Y,EAAK,EACT,MAAMC,EAAWH,EAAQI,YAAYC,YAAc,GACnD,QAASC,KAAWH,EAAU,CAC5B,GAAIG,IAAYN,EACd,OAAO3wB,KAAK0wB,WAAWC,EAAQI,YAAc,IAAMJ,EAAQ1Y,QAAU,KAAO4Y,EAAK,GAAK,IAE/D,IAArBI,EAAQV,UAAkBU,EAAQhZ,UAAY0Y,EAAQ1Y,SACxD4Y,IAIJ,MAAO,EACT,EAtSW/E,SAAa,mBAAAprB,iBAAborB,GAAanrB,MAAAC,MAAAD,MAAAE,MAAAF,MAAAG,MAAAH,MAAAyB,MAAAzB,MAAAqY,KAAArY,MAAAqf,KAAA,EAAb8L,EAAa,WAAA3B,EAAAnpB,IAAA,OAAb8qB,EAAa7qB,QAAb6qB,EAAa5qB,UAAAC,WAFZ,SAED2qB,CAAa,gHCbnB,IAAMoF,EAAkB,MAAzB,MAAOA,EAIXtxB,YAAoB8J,EAAgCqiB,GAAhC/rB,KAAA0J,aAAgC1J,KAAA+rB,iBAFpD/rB,KAAAgK,QAAUC,IAAYC,MAEgE,CAEtFinB,eAAelO,GACb,OAAOjjB,KAAK0J,WAAWmC,IAAiB7L,KAAKgK,QAAU,6BAA+BiZ,EACxF,CAEAmO,gBAAgBC,GAA2B,EAAMC,GAA8B,EAAOnO,EAAkBoO,GACtG,IAAIjD,EAAS,IAAIkD,KACjBlD,SAAStuB,KAAK+rB,eAAe0F,sBAAsBnD,EAAQnL,EAASoO,GAE7DvxB,KAAK0J,WAAWiD,KAAqC3M,KAAKgK,QAAU,qCAAuCqnB,EAChH,uBAAyBC,EAAoB,GAAI,CAACI,QAAS,WAAYpD,WAASnuB,QAChFE,KAAKyM,GACI9M,KAAK+rB,eAAe4F,sBAAsB7kB,EAAU,IAAI1E,MAGrE,CAEAwpB,yBAAyBvV,GACvB,OAAOrc,KAAK0J,WAAWmC,IAAmB7L,KAAKgK,QAAU,yCAA2CqS,EACtG,CAEAwV,aAAa5O,GACX,OAAOjjB,KAAK0J,WAAWmC,IAAuB7L,KAAKgK,QAAU,mCAAqCiZ,EACpG,CAEA6O,WAAWzsB,GACT,OAAOrF,KAAK0J,WAAWiD,KAAkB3M,KAAKgK,QAAU,qBAAsB,CAAC3E,SACjF,CAEAoK,OAAO5C,GACL,OAAO7M,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,qBAAsB6C,EAAOb,IAC1E,CAEA+lB,iBAAiB9O,EAAuB5G,EAAkByB,EAA2BC,GACnF,OAAO/d,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,iCAAkC,CAACiZ,gBAAe5G,WAAUyB,YAAWC,cAAa/R,IACjI,CAEAgmB,uBAAuB/O,EAAuBlM,GAC5C,OAAO/W,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,wCAAyC,CAACiZ,gBAAelM,aAAY/K,IAClH,CAEAimB,eAAehP,EAAuB5G,GACpC,OAAOrc,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,+BAAgC,CAACiZ,gBAAe5G,YAAWrQ,IACxG,CAEAkmB,eAAejP,EAAuB5G,EAAkBQ,GACtD,OAAO7c,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,+BAAgC,CAACiZ,gBAAe5G,WAAUQ,YAAW7Q,IAClH,CAEAmmB,gBAAgBlP,EAAuB5G,EAAkB4C,GACvD,OAAOjf,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,gCAAiC,CAACiZ,gBAAe5G,WAAU4C,aAAYjT,IACpH,CAEAD,OAAOkX,GACL,OAAOjjB,KAAK0J,WAAWqC,OAAO/L,KAAKgK,QAAU,6BAA+BiZ,EAAejX,IAC7F,CAEAomB,eAAenP,EAAuBoP,EAA2BC,EAAsBC,GACrF,OAAOvyB,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,8BAA+B,CAACiZ,gBAAeoP,oBAAmBC,eAAcC,cAAavmB,IAC1I,CAEAwmB,WAAWvP,EAAuBoP,GAChC,OAAOryB,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,0BAA2B,CAACiZ,gBAAeoP,qBAAoBrmB,IAC5G,CAEAymB,WAAWxP,GACT,OAAOjjB,KAAK0J,WAAWiD,KAAa3M,KAAKgK,QAAU,yCAA2CiZ,EAAe,GAAIjX,IACnH,CAEA0mB,iBAAiB9e,EAAiCwL,EAA0BpM,GAC1E,QAAIoM,GAAaxJ,WAAa5C,EAEhC,CAEA2f,WAAW7kB,GACT,OAAO9N,KAAK0J,WAAWmC,IAAa7L,KAAKgK,QAAU,gCAAkC8D,EACvF,CAEA8kB,YAAYC,GACV,OAAO7yB,KAAK0J,WAAWiD,KAAuB3M,KAAKgK,QAAU,eAAgB6oB,EAC/E,CAEAC,UAAUD,GACR,OAAO7yB,KAAK0J,WAAWiD,KAAuB3M,KAAKgK,QAAU,aAAc6oB,EAC7E,CAEAE,cAAc9P,GACZ,OAAOjjB,KAAK0J,WAAWmC,IAAmB7L,KAAKgK,QAAU,wCAA0CiZ,EACrG,EA7FWiO,SAAkB,mBAAAxwB,iBAAlBwwB,GAAkBvwB,MAAAC,MAAAD,MAAAE,MAAA,EAAlBqwB,EAAkB,WAAArP,EAAA7gB,IAAA,OAAlBkwB,EAAkBjwB,QAAlBiwB,EAAkBhwB,UAAAC,WAFjB,SAED+vB,CAAkB,iFCRxB,IAAM8B,EAAa,MAApB,MAAOA,EAQXpzB,YAAYyB,GANJrB,KAAAizB,sBAAyB,IAAI5oB,IAAgD,GAI9ErK,KAAAkzB,iBAAmBlzB,KAAKizB,sBAAsB3oB,eAInDjJ,EAAO8xB,OACJhzB,QAAKuB,KAAOiJ,GAASA,aAAiByoB,OACtC/nB,UAAU,KACTrL,KAAKizB,sBAAsB1wB,KAAK,OAAM,GAE1CvC,KAAKizB,sBAAsB1wB,KAAK,OAClC,CAEI8wB,qBACF,OAAQrxB,OAAOsxB,aACVjJ,SAASkJ,gBAAgBC,WACzBnJ,SAAShC,KAAKmL,WAAa,CAClC,CAKIC,sBACF,OAAQzxB,OAAO0xB,aACVrJ,SAASkJ,gBAAgBI,YACzBtJ,SAAShC,KAAKsL,YAAc,CACnC,CAEAC,SAASC,EAAazE,EAAuBptB,OAAQ8xB,EAA8B,UACjF1E,EAAG2E,OAAO,CACRF,IAAKA,EACLC,SAAUA,GAEd,CAEAE,UAAUC,EAAc7E,EAAuBptB,OAAQ8xB,EAA8B,QACnF1E,EAAG2E,OAAO,CACRE,KAAMA,EACNH,SAAUA,GAEd,CAEAI,mBAAmBC,QACJ/lB,IAAT+lB,GACFn0B,KAAKizB,sBAAsB1wB,KAAK4xB,EAEpC,EAnDWnB,SAAa,mBAAAtyB,iBAAbsyB,GAAaryB,MAAAC,MAAA,EAAboyB,EAAa,WAAAjyB,EAAAC,IAAA,OAAbgyB,EAAa/xB,QAAb+xB,EAAa9xB,UAAAC,WAFZ,SAED6xB,CAAa,4FCGnB,IAAMoB,EAAa,MAApB,MAAOA,EAIXx0B,YAAoB8J,GAAA1J,KAAA0J,aAFpB1J,KAAAgK,QAAUC,IAAYC,MAEwB,CAE9CoW,OAAO+T,GACL,MAAa,KAATA,GAAS,EACJvxB,MAAG,IAAI0F,KAETxI,KAAK0J,WAAWmC,IAAuB7L,KAAKgK,QAAU,6BAA+BoF,mBAAmBilB,GACjH,CAEAC,sBAAsBC,GACpB,OAAOv0B,KAAK0J,WAAWmC,IAAmB7L,KAAKgK,QAAU,2CAA6CuqB,EACxG,CAEAC,oBAAoBvV,GAClB,OAAOjf,KAAK0J,WAAWmC,IAAmB7L,KAAKgK,QAAU,uCAAyCiV,EACpG,EAnBWmV,SAAa,mBAAA1zB,iBAAb0zB,GAAazzB,MAAAC,MAAA,EAAbwzB,EAAa,WAAArzB,EAAAC,IAAA,OAAbozB,EAAanzB,QAAbmzB,EAAalzB,UAAAC,WAFZ,SAEDizB,CAAa,0HCiBnB,IAAMK,EAAa,MAApB,MAAOA,EAMX70B,YAAoB8J,EAAgC2W,EAC1C0L,GADU/rB,KAAA0J,aAAgC1J,KAAAqgB,eAC1CrgB,KAAA+rB,iBALV/rB,KAAAgK,QAAUC,IAAYC,OACtBlK,KAAA00B,iBAA8C,IAAItsB,IAClDpI,KAAA20B,8BAA2D,IAAIvsB,GAGnB,CAE5CwsB,eAAezR,EAAkBoO,EAAuB7vB,GACtD,IAAI4sB,EAAS,IAAIkD,KAIjB,OAHAlD,EAAStuB,KAAK+rB,eAAe0F,sBAAsBnD,EAAQnL,EAASoO,GAG7DvxB,KAAK0J,WAAWiD,KAAgC3M,KAAKgK,QAAU,gBAFzDtI,GAAU,GAEsE,CAACgwB,QAAS,WAAYpD,WAASnuB,QACxHE,KAAKyM,GACI9M,KAAK+rB,eAAe4F,sBAAsB7kB,EAAU9M,KAAK00B,mBAGxE,CAEAG,sBAAsB1R,EAAkBoO,EAAuB7vB,GAC7D,IAAI4sB,EAAS,IAAIkD,KAIjB,OAHAlD,EAAStuB,KAAK+rB,eAAe0F,sBAAsBnD,EAAQnL,EAASoO,GAG7DvxB,KAAK0J,WAAWiD,KAAgC3M,KAAKgK,QAAU,YAFzDtI,GAAU,GAEkE,CAACgwB,QAAS,WAAYpD,WAASnuB,QACtHE,KAAKyM,GACI9M,KAAK+rB,eAAe4F,sBAAsB7kB,EAAU9M,KAAK00B,mBAGtE,CAEAI,kBAAkB/d,GAChB,OAAO/W,KAAK0J,WAAWiD,KAAe3M,KAAKgK,QAAU,uBAAwB,CAAC+M,UAAWA,GAC3F,CAEAge,UAAU1Y,GACR,OAAOrc,KAAK0J,WAAWmC,IAAY7L,KAAKgK,QAAU,UAAYqS,EAChE,CAEA2Y,WAAW3Y,GACT,OAAOrc,KAAK0J,WAAWmC,IAAc7L,KAAKgK,QAAU,2BAA6BqS,EACnF,CAEA4Y,WAAWhW,GACT,OAAOjf,KAAK0J,WAAWmC,IAAa7L,KAAKgK,QAAU,4BAA8BiV,EACnF,CAEAiW,mBAAmBjW,GACjB,OAAOjf,KAAK0J,WAAWmC,IAAqB7L,KAAKgK,QAAU,qCAAuCiV,EACpG,CAEAlT,OAAOsQ,GACL,OAAOrc,KAAK0J,WAAWqC,OAAgB/L,KAAKgK,QAAU,UAAYqS,EACpE,CAEAiD,qBAAqBvI,GACnB,OAAO/W,KAAK0J,WAAWiD,KAAc3M,KAAKgK,QAAU,yBAA0B,CAAC+M,aACjF,CAEAoe,aAAa9Y,EAAkB+Y,GAC7B,OAAOp1B,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,uBAAwB,CAACqS,WAAU+Y,cAChF,CAEAC,aAAaxoB,GACX,OAAO7M,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,gBAAiB6C,EAC9D,CAEA6O,SAASW,GACP,OAAOrc,KAAK0J,WAAWiD,KAAW3M,KAAKgK,QAAU,mBAAoB,CAACqS,YACxE,CAEAP,WAAWO,GACT,OAAOrc,KAAK0J,WAAWiD,KAAW3M,KAAKgK,QAAU,qBAAsB,CAACqS,YAC1E,CAEAiZ,iBAAiBnS,EAAkBoO,EAAuB7vB,GACxD,IAAI4sB,EAAS,IAAIkD,KAIjB,OAHAlD,EAAStuB,KAAK+rB,eAAe0F,sBAAsBnD,EAAQnL,EAASoO,GAG7DvxB,KAAK0J,WAAWiD,KAAe3M,KAAKgK,QAAU,2BADxCtI,GAAU,GACgE,CAACgwB,QAAS,WAAYpD,WAASnuB,QACpHE,KAAIyM,GACK9M,KAAK+rB,eAAe4F,sBAAsB7kB,EAAU,IAAI1E,MAGrE,CAEAmtB,2BACE,OAAOv1B,KAAK0J,WAAWiD,KAAoB3M,KAAKgK,QAAU,iCAAkC,GAC9F,CAEAwrB,cAAcrS,EAAkBoO,EAAuB7vB,GACrD,IAAI4sB,EAAS,IAAIkD,KAIjB,OAHAlD,EAAStuB,KAAK+rB,eAAe0F,sBAAsBnD,EAAQnL,EAASoO,GAG7DvxB,KAAK0J,WAAWiD,KAAe3M,KAAKgK,QAAU,kBAFxCtI,GAAU,GAEuD,CAACgwB,QAAS,WAAYpD,WAASnuB,QAC3GE,KAAIyM,GACK9M,KAAK+rB,eAAe4F,sBAAsB7kB,EAAU,IAAI1E,MAErE,CAEAqtB,aAAapZ,GACX,OAAOrc,KAAK0J,WAAWmC,IAAY7L,KAAKgK,QAAU,yBAA2BqS,EAAUrQ,KACtF7L,QAAKE,KAAIorB,GACO,SAARA,GAEX,CAEAiK,UAAUjzB,EAAoB,EAAG0gB,EAAkBoO,EAAuB7vB,GACxE,IAAI4sB,EAAS,IAAIkD,KAIjB,OAHAlD,EAAStuB,KAAK+rB,eAAe0F,sBAAsBnD,EAAQnL,EAASoO,GAG7DvxB,KAAK0J,WAAWiD,KAAe3M,KAAKgK,QAAU,4BAA8BvH,EAFtEf,GAAU,GAE6E,CAACgwB,QAAS,WAAYpD,WAASnuB,QACjIE,KAAIyM,GACK9M,KAAK+rB,eAAe4F,sBAAsB7kB,EAAU,IAAI1E,MAErE,CAGAsS,gBAAgBhS,GACd,OAAO1I,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,0BAA2B,CAACvH,UAAWiG,EAAOjG,UAAW4Z,SAAU3T,EAAO4P,IACvH,CAEAkC,KAAK/X,EAAmB4Z,EAAkBwI,GAAQ,GAChD,OAAO7kB,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,cAAe,CAACvH,UAAWA,EAAW4Z,SAAUA,EAAUyI,YAAaD,GACpH,CAEAxJ,aAAa5Y,EAAmB4Z,GAC9B,OAAOrc,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,iBAAkB,CAACvH,UAAWA,EAAW4Z,SAAUA,GAChG,CAEAsZ,YAAYtZ,GACV,OAAOrc,KAAK0J,WAAWmC,IAAoB7L,KAAKgK,QAAU,4BAA8BqS,GAAUlc,QAAKE,KAAIu1B,IACzGA,GAAOC,eAAelhB,QAAQ0D,GAAOA,EAAImI,WAAaxgB,KAAKqgB,aAAaK,wBAAwBrI,EAAIC,KAC7Fsd,IAEX,CAEAE,eAAeC,EAAgCF,GAK7C,OAAO71B,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,kBAJ9B,CACX+rB,iBACAF,kBAEkE7pB,IACtE,CAEAgqB,gBAAgBhV,EAAyBmC,EAAkBoO,GACzD,IAAIjD,EAAS,IAAIkD,KAEjBlD,SAAStuB,KAAK+rB,eAAe0F,sBAAsBnD,EAAQnL,EAASoO,GAE7DvxB,KAAK0J,WAAWmC,IAA+B7L,KAAKgK,QAAU,4CAA8CgX,EAAiB,CAAC0Q,QAAS,WAAYpD,WAASnuB,QACjKE,KAAKyM,GACI9M,KAAK+rB,eAAe4F,sBAAsB7kB,EAAU9M,KAAK20B,gCAGtE,CAEAsB,oBAAoB5Z,GAClB,OAAOrc,KAAK0J,WAAWmC,IAAmB7L,KAAKgK,QAAU,+BAAiCqS,EAC5F,CAEA6Z,4BAA4B7Z,GAC1B,OAAOrc,KAAK0J,WAAWmC,IAAoB7L,KAAKgK,QAAU,wCAA0CqS,EACtG,CAEA8Z,oBAAoB9Z,EAAkB+Z,EAA4BC,EAChEC,EAAyBC,EAAuBC,EAChDC,EAAwBC,EAA4BC,EACpDC,EAAoCC,EAAoCC,EAA2BC,IACnG,OAAO/2B,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,kCAAoCqS,EAC/E,CAACA,WAAU+Z,cAAaC,aAAYI,UAASD,WAAUF,WAAUC,SAAQG,cAAaC,WACrFC,sBAAqBC,sBAAqBC,aAAYC,aACzD,CAEAC,gBAAgB3a,GACd,OAAOrc,KAAK0J,WAAWmC,IAAkB7L,KAAKgK,QAAU,iCAAmCqS,EAC7F,CAEA4a,WAAW5a,GACT,OAAOrc,KAAK0J,WAAWmC,IAAuB7L,KAAKgK,QAAU,mBAAqBqS,EACpF,CAEA6a,aAAa7a,EAAkB8a,EAAiB9O,GAC9C,OAAOroB,KAAK0J,WAAWiD,KAAiB3M,KAAKgK,QAAU,SAAU,CAC/DqS,WAAU8a,UAAS9O,QAEvB,CAEA+O,WAAW/a,GACT,OAAOrc,KAAK0J,WAAWmC,IAAmB7L,KAAKgK,QAAU,mBAAqBqS,EAChF,CACAgb,iBAAiBhb,GACf,OAAOrc,KAAK0J,WAAWmC,IAAY7L,KAAKgK,QAAU,2BAA6BqS,EACjF,CAEAib,iBAAiBjb,GACf,OAAOrc,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,uCAAyCqS,EAAU,GAChG,EA1MWoY,SAAa,mBAAA/zB,iBAAb+zB,GAAa9zB,MAAAC,MAAAD,MAAAE,KAAAF,MAAAG,MAAA,EAAb2zB,EAAa,WAAAtK,EAAAnpB,IAAA,OAAbyzB,EAAaxzB,QAAbwzB,EAAavzB,UAAAC,WAFZ,SAEDszB,CAAa,wMCAnB,IAAM8C,EAAY,MAAnB,MAAOA,EAqBX33B,YAAY0qB,EAA6DD,EAA4B3gB,EACrGC,EAAuC6tB,GAAoC5d,EAAwC9Z,GAD1CE,KAAAqqB,WAA4BrqB,KAAA0J,aAC9D1J,KAAAw3B,gBAAoCx3B,KAAA4Z,iBAAwC5Z,KAAAF,SApBlGE,KAAA6J,cAAaC,OAAOC,OAC9B/J,KAAA+N,aAAuB,OACvB/N,KAAAy3B,iBAA2B,OAE1Bz3B,KAAA03B,mBAAqB,IAAIrtB,IAAyB,GACnDrK,KAAAoiB,cAAgBpiB,KAAK03B,mBAAmBptB,eAEvCtK,KAAA23B,aAAe,IAAIttB,IAA2B,GAC/CrK,KAAA43B,QAAU53B,KAAK23B,aAAartB,eAK3BtK,KAAA63B,WAA+B,GAG/B73B,KAAAgK,QAAUC,IAAYC,OAK5BlK,KAAK8qB,SAAWR,EAAgBS,eAAe,KAAM,MAErDphB,EAAWc,UAAUtK,QAAK8M,MAAmBjN,KAAK6J,aAAawB,UAAUzJ,IAEvE,GAAIA,EAAQ+I,QAAUC,IAAOyb,qBAAsB,OACnD,MAAMyR,EAAqBl2B,EAAQkJ,QAC/BgtB,EAAkBhqB,OAASlD,IAAO2b,mBAEF,UAAhCuR,EAAkBvQ,WAChBuQ,EAAkBhqB,OAASlD,IAAO2b,mBAAmBvmB,KAAK+3B,YAAY1sB,UAAU,OAEnF,EAGP,CAEA2sB,iBACE,OAAOC,iBAAiBj4B,KAAKqqB,SAAShC,MAAM6P,iBAAiB,kBAAkBC,MACjF,CAMEC,gBACE,OAAOH,iBAAiBj4B,KAAKqqB,SAAShC,MAAM6P,iBAAiB,iBAAiBC,MAChF,CAMAE,eACE,OAAOJ,iBAAiBj4B,KAAKqqB,SAAShC,MAAM6P,iBAAiB,iBAAiBC,MAChF,CAEFG,eAAeC,GACb,OAAON,iBAAiBj4B,KAAKqqB,SAAShC,MAAM6P,iBAAiBK,GAAUJ,MACzE,CAEA9V,cACE,MAA+C,SAAxCriB,KAAKg4B,iBAAiB3gB,aAC/B,CAEA0gB,YACE,OAAO/3B,KAAK0J,WAAWmC,IAAiB7L,KAAKgK,QAAU,SAAS7J,QAAKE,KAAIm4B,IACvEx4B,KAAK63B,WAAaW,EAClBx4B,KAAK23B,aAAap1B,KAAKi2B,GACvBx4B,KAAKoiB,cAAcjiB,QAAKC,KAAK,IAAIiL,UAAUwC,IACY,IAAjD2qB,EAAO92B,OAAOhB,GAAKA,EAAE4X,KAAOzK,EAAMyK,IAAIzW,SACxC7B,KAAK2N,SAAS3N,KAAK+N,cACnB/N,KAAKF,OAAO2a,QAAKha,MAAU,yBAAuB,GAG/C+3B,IAEX,CAKAC,cACEz4B,KAAK04B,aACP,CAEAC,WAAWC,GACT,OAAO54B,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,uBAAwB,CAAC4uB,QAASA,IAAUz4B,QAAKE,KAAI,KAE9FL,KAAK+3B,YAAY1sB,UAAU,OAAQ,GAEvC,CAEAmP,OACE,OAAOxa,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,aAAc,GAC3D,CAMA6uB,aAAaC,GACX94B,KAAK+4B,kBACL/4B,KAAK8qB,SAASkO,SAASh5B,KAAKqqB,SAASe,cAAc,QAAS0N,EAC9D,CAEAG,iBACEj5B,KAAK+4B,iBACP,CAOCprB,SAASurB,GAAiB,IAAA7e,EAAAra,KACzB,MAAM6N,EAAQ7N,KAAK63B,WAAWsB,KAAKz4B,GAAKA,EAAEoN,KAAKuJ,gBAAkB6hB,EAAU7hB,eACvExJ,GACF7N,KAAK04B,cACL14B,KAAK8qB,SAASkO,SAASh5B,KAAKqqB,SAASe,cAAc,QAASvd,EAAMirB,UAE9DjrB,EAAMurB,WAAa/wB,IAAcE,MAASvI,KAAKq5B,eAAexrB,EAAMC,MAkCtE9N,KAAK03B,mBAAmBn1B,KAAKsL,GAhC7B7N,KAAKs5B,kBAAkBzrB,EAAMyK,IAAIjN,UAAS,eAAAkuB,KAAAjf,KAAC,UAAOkf,IAChD,GAAgB,OAAZA,GAGF,aAFMnf,EAAKT,eAAe2B,SAAM9a,MAAU,gCAC1C4Z,EAAK1M,SAAS,QAGhB,MAAM8rB,EAAYpf,EAAKgQ,SAASqP,cAAc,SAC9CD,EAAUnhB,GAAK,SAAWzK,EAAMC,KAChC2rB,EAAUE,YAAYtf,EAAKgQ,SAASuP,eAAeJ,KAEnDnf,EAAKyQ,SAAS6O,YAAYtf,EAAKgQ,SAASwP,KAAMJ,GAG9C,MAAMK,EAAazf,EAAK+d,gBACpB0B,IACFzf,EAAKgQ,SAASe,cAAc,6BAA6B8C,aAAa,UAAW4L,GACjFzf,EAAKgQ,SAASe,cAAc,uDAAuD8C,aAAa,UAAW4L,IAG3Fzf,EAAKge,gBAErBhe,EAAKgQ,SAASe,cAAc,yCAAyC8C,aAAa,UAAW4L,GAG/F,MAAMC,EAAc1f,EAAK2d,iBACrB+B,GACF1f,EAAKgQ,SAASe,cAAc,SAAS8C,aAAa,QAAS6L,GAG7D1f,EAAKqd,mBAAmBn1B,KAAKsL,EAC/B,GAAC,gBAAAmsB,IAAA,OAAAT,EAAAU,MAAAj6B,KAAAk6B,UAAA,EA9ByC,KAoC5Cl6B,KAAK+3B,YAAY1sB,UAAUmtB,IACzBx4B,KAAK2N,SAASurB,EAAS,EAG7B,CAEQG,eAAeH,GACrB,MAAM5gB,EAAK,SAAW4gB,EAAU7hB,cAChC,OAAOhK,MAAM8sB,KAAKn6B,KAAKqqB,SAASwP,KAAK/lB,UAAUpS,OAAO0tB,GAAqB,UAAfA,EAAGnX,SAAuBmX,EAAG9W,GAAGjB,gBAAkBiB,GAAIzW,OAAS,CAC7H,CAEQy3B,kBAAkBV,GACxB,OAAO54B,KAAK0J,WAAWmC,IAAY7L,KAAKgK,QAAU,kCAAoC4uB,EAAS5sB,KAAa7L,QAAKE,KAAI+5B,GAC5Gp6B,KAAKw3B,aAAa6C,SAASC,MAAgBC,MAAOH,IAE7D,CAEQ1B,cACN14B,KAAK63B,WAAWljB,QAAQ9G,GAAS7N,KAAKqqB,SAAShC,KAAKmS,UAAUC,OAAO5sB,EAAMirB,UAC7E,CAEQC,kBACN1rB,MAAM8sB,KAAKn6B,KAAKqqB,SAAShC,KAAKmS,WAAW94B,OAAOg5B,GAAOA,EAAIC,WAAW,aAAahmB,QAAQ6H,GAAKxc,KAAKqqB,SAAShC,KAAKmS,UAAUC,OAAOje,GACtI,EAxLW+a,SAAY,mBAAA72B,iBAAZ62B,GAAY52B,mBAqBgCgrB,MAAQhrB,MAAAC,MAAAD,MAAAE,KAAAF,MAAAG,MAAAH,MAAAyB,KAAAzB,MAAAqY,MAAA,EArBpDue,EAAY,WAAAxmB,EAAA/P,IAAA,OAAZu2B,EAAYt2B,QAAZs2B,EAAYr2B,UAAAC,WAFX,SAEDo2B,CAAY,kFCnBlB,IAAMqD,EAAa,MAApB,MAAOA,EAIXh7B,YAAoB8J,GAAA1J,KAAA0J,aAFZ1J,KAAAgK,QAAUC,IAAYC,MAEgB,CAG9C2wB,YAAYl4B,GACV,OAAO3C,KAAK0J,WAAWiD,KAAa3M,KAAKgK,QAAU,uBAAwB,CAACrH,OAAMqJ,IACpF,CAQA8uB,uBAAuBze,EAAkB1Z,GACvC,OAAO3C,KAAK0J,WAAWiD,KAAa3M,KAAKgK,QAAU,gBAAiB,CAACsO,GAAI+D,EAAU1Z,IAAK3C,KAAK+6B,gBAAgBp4B,IAC/G,CAEAq4B,2BAA2Bla,EAAene,GACxC,OAAO3C,KAAK0J,WAAWiD,KAAa3M,KAAKgK,QAAU,oBAAqB,CAACsO,GAAIwI,EAAOne,IAAK3C,KAAK+6B,gBAAgBp4B,IAChH,CAEAs4B,4BAA4BhY,EAAuBtgB,GACjD,OAAO3C,KAAK0J,WAAWiD,KAAa3M,KAAKgK,QAAU,sBAAuB,CAACsO,GAAI2K,EAAetgB,IAAK3C,KAAK+6B,gBAAgBp4B,IAC1H,CAEAu4B,wBAAwBjc,EAAmBtc,GACzC,OAAO3C,KAAK0J,WAAWiD,KAAa3M,KAAKgK,QAAU,iBAAkB,CAACsO,GAAI2G,EAAWtc,IAAK3C,KAAK+6B,gBAAgBp4B,IACjH,CAEAw4B,wBAAwB14B,EAAmBE,GACzC,OAAO3C,KAAK0J,WAAWiD,KAAa3M,KAAKgK,QAAU,iBAAkB,CAACsO,GAAI7V,EAAWE,IAAK3C,KAAK+6B,gBAAgBp4B,IACjH,CAEAy4B,sBAAsBnc,GACpB,OAAOjf,KAAK0J,WAAWiD,KAAa3M,KAAKgK,QAAU,4BAA6B,CAACsO,GAAI2G,EAAWtc,IAAK,IACvG,CAEAo4B,gBAAgBp4B,GACd,OAAIA,EAAIg4B,WAAW,UACjBh4B,EAAMA,EAAIC,MAAM,KAAK,IAEhBD,CACT,EA9CWi4B,SAAa,mBAAAl6B,iBAAbk6B,GAAaj6B,MAAAC,MAAA,EAAbg6B,EAAa,WAAA53B,EAAAhC,IAAA,OAAb45B,EAAa35B,QAAb25B,EAAa15B,UAAAC,WAFZ,SAEDy5B,CAAa,uGCDnB,IAAMS,EAAe,MAAtB,MAAOA,EAEXC,UAAUh2B,GACR,OAA2BA,GAAuB,EAEpD,EALW+1B,SAAe,mBAAA36B,iBAAf26B,EAAe,EAAfA,EAAe,WAAA9iB,EAAAgjB,IAAA,yBAAfF,EAAeG,MAAA,EAAAC,YAAA,IAAfJ,CAAe,wCCDpB16B,MAAA,2CASIA,MAAA,GACEA,MAAA,eAAwBA,MAAA,iBAAA+6B,GAAA,MAAAC,EAAAh7B,MAAAi7B,GAAApmB,UAAAqmB,EAAAl7B,MAAA,GAAA6U,UAAAM,EAAAnV,MAAA,UAASA,MAAAmV,EAAAgmB,oBAAAJ,EAAAG,EAAAF,GAAgD,GAAEh7B,MAAA,GAAqBA,QAC1GA,OAAA,6BADqFA,MAAA,GAAAA,MAAAg7B,EAAAt2B,MAAA,2BAFvF1E,MAAA,GACEA,MAAA,EAAAo7B,EAAA,sBAGFp7B,6BAHwCA,MAAA,GAAAA,MAAA,UAAAq7B,EAAA,0CAMtCr7B,MAAA,eAAyDA,MAAA,iBAAA+6B,GAAA/6B,MAAAs7B,GAAA,MAAAJ,EAAAl7B,MAAA,GAAA6U,UAAA0mB,EAAAv7B,MAAA,UAASA,MAAAu7B,EAAAC,cAAAT,EAAAG,GAA6B,EAAtCl7B,CAAuC,uBAAAA,MAAAs7B,GAAA,MAAAG,EAAAz7B,MAAA,UAAcA,MAAAy7B,EAAAC,mBAAkB,GAAE17B,MAAA,GAAmBA,OAAA,yDAAnBA,MAAA,GAAAA,MAAA0U,EAAAwmB,EAAAx2B,OAAA,0BAAlI1E,MAAA,EAAA27B,EAAA,4DAAyB37B,MAAA,OAAA8U,EAAA8mB,iBAAAV,GAAA,2BAT7Bl7B,MAAA,GAEEA,MAAA,EAAA67B,EAAA,8DAMA77B,MAAA,EAAA87B,EAAA,0BAAA97B,OAGFA,mDATiBA,MAAA,GAAAA,MAAA,YAAAyN,IAAAytB,EAAAxnB,aAAA1T,MAAA,IAAAA,MAAA,IAAAk7B,EAAAxnB,cAAA1T,CAAqF,WAAA+7B,EAAA,2BAchG/7B,MAAA,eAAgHA,MAAA,GAAoBA,MAAA,UAAoDA,8DAA/IA,MAAA,gBAAAk7B,EAAAx2B,MAAA,IAAuE1E,MAAA,GAAAA,MAAA,GAAA0U,EAAAwmB,EAAAx2B,OAAA,2BAE9G1E,MAAA,+EAJNA,MAAA,GACEA,MAAA,eAAoEA,MAAA,iBAAA+6B,GAAA/6B,MAAAg8B,GAAA,MAAAC,EAAAj8B,MAAA,GAAAk7B,EAAAl7B,MAAA,GAAA6U,UAAAqnB,EAAAl8B,MAAA,GAASk8B,SAAAC,aAAApB,GAAsB/6B,MAAAk8B,EAAAE,YAAAlB,EAAAx2B,MAAAu3B,GAAuC,EAAtEj8B,CAAuE,qBAAA+6B,GAAA/6B,MAAAg8B,GAAA,MAAAC,EAAAj8B,MAAA,GAAAk7B,EAAAl7B,MAAA,GAAA6U,UAAAwnB,EAAAr8B,MAAA,GAAcq8B,SAAAF,aAAApB,GAAsB/6B,MAAAq8B,EAAAD,YAAAlB,EAAAx2B,MAAAu3B,GAAuC,EAAlJj8B,CAAuE,sBAAA+6B,GAAA/6B,MAAAg8B,GAAA,MAAAM,EAAAt8B,MAAA,UAA2FA,MAAAs8B,EAAAH,aAAApB,GAAoB,GACxP/6B,MAAA,EAAAu8B,EAAA,iBACAv8B,MAAA,WACEA,MAAA,EAAAw8B,EAAA,sBACFx8B,UAEJA,OAAA,yEALaA,MAAA,GAAAA,MAAA,OAAAy8B,EAAAb,iBAAAV,IACYl7B,MAAA,GAAAA,MAAA,6BAAAk7B,EAAAx2B,MAAA,IACJ1E,MAAA,GAAAA,MAAA,mBAAA08B,EAAA18B,CAA2B,0BAAAA,MAAA,EAAA28B,EAAAzB,EAAA/nB,UAAA,2BAJhDnT,MAAA,EAAA48B,EAAA,kFAAe58B,MAAA,OAAA68B,EAAAC,oBAAA5B,EAAAl7B,MAAA,UAAAk7B,EAAA/nB,SAAA,KAAA+nB,EAAA/nB,SAAA,GAAAO,cAAA,2BAhBnB1T,MAAA,GAEEA,MAAA,EAAA+8B,EAAA,sBAYA/8B,MAAA,EAAAg9B,EAAA,0BAAAh9B,OAWFA,6CAvBiBA,MAAA,GAAAA,MAAA,YAAAyN,IAAAytB,EAAA/nB,UAAA,WAAA+nB,GAAA,MAAAA,EAAA/nB,SAAA,KAAA+nB,EAAA/nB,SAAAjS,cAAAuM,IAAAytB,EAAAxnB,YAAA1T,CAA4G,WAAAi9B,EAAA,uBAF7Hj9B,MAAA,EAAAk9B,EAAA,2BAAiCl9B,MAAA,0DATrCA,MAAA,GACEA,MAAA,UAAAA,CAAyD,cAE/CA,MAAA,iBAAA+6B,GAAA/6B,MAAAm9B,GAAA,MAAAC,EAAAp9B,MAAA,UAASA,MAAAo9B,EAAAjB,aAAApB,GAAoB,GAAE/6B,MAAA,SAAmDA,QAC1FA,MAAA,WACEA,MAAA,EAAAq9B,EAAA,sBACFr9B,UAEFA,MAAA,EAAAs9B,EAAA,yBAAAt9B,OA4BFA,OAAA,qCAlCkCA,MAAA,GAAAA,MAAA,OAAAu9B,EAAAC,SAAA,IAAyBx9B,MAAA,gBAAAu9B,EAAAE,QAAA,IAA/Cz9B,MAAA,WAAAu9B,EAAAG,UACkC19B,MAAA,GAAAA,MAAA,MAAAu9B,EAAAI,UAAA,IACrB39B,MAAA,GAAAA,MAAA,6BAAAu9B,EAAAE,QAAA,IACJz9B,MAAA,GAAAA,MAAA,mBAAA08B,EAAA18B,CAA2B,0BAAAA,MAAA,GAAA28B,EAAAY,EAAAhqB,SAAA,2BANlDvT,MAAA,GACEA,MAAA,EAAA49B,EAAA,uBAsCF59B,8BAtCiBA,MAAA,GAAAA,MAAA,OAAA2V,EAAApC,QAAArS,OAAA,ICgBV,IAAM28B,GAAwB,MAA/B,MAAOA,EAcX5+B,YAA6BkX,EAAkCjX,GAAlCG,KAAA8W,QAAkC9W,KAAAH,iBAZtDG,KAAAs+B,UAAY,gBACZt+B,KAAAm+B,SAAW,GACXn+B,KAAAkU,QAA6B,GAC7BlU,KAAAo+B,QAAU,OACVp+B,KAAAq+B,UAAoB,EACnBr+B,KAAAy+B,cAAgB,IAAIC,MAG9B1+B,KAAAgT,SAAmB,EACnBhT,KAAA2+B,aAAuB,EACvB3+B,KAAA4+B,QAAwC,EAEyD,CAEjGpnB,WACExX,KAAKH,eAAeK,aAAaC,QAAKC,KAAK,IAAIiL,UAAW/K,IACnDA,IACLN,KAAKgT,QAAUhT,KAAKH,eAAeU,aAAaD,GAChDN,KAAK2+B,YAAc3+B,KAAKH,eAAe6L,gBAAgBpL,IAGlDN,KAAKgT,SAAiE,IAAtDhT,KAAKkU,QAAQxS,OAAOwG,IAAMA,EAAE2L,eAAehS,SAC9D7B,KAAKkU,QAAU,IAEjBlU,KAAK8W,MAAMa,eAAY,EAE3B,CAEAmlB,aAAanyB,GACXA,EAAMk0B,kBACNl0B,EAAMm0B,gBACR,CAEA3C,cAAcxxB,EAAYiJ,GACxB5T,KAAK88B,aAAanyB,GAEa,mBAApBiJ,EAAOT,UAChBnT,KAAKy+B,cAAcM,KAAKnrB,EAE5B,CAEA2oB,iBAAiB3oB,GACf,OAAQA,EAAOC,eAAiB7T,KAAKgT,SAC7BY,EAAOA,SAAW5C,IAAOzH,WAAavJ,KAAK2+B,aAAe3+B,KAAKgT,WAC9DY,EAAOC,eAAiBD,EAAOA,SAAW5C,IAAOzH,QAC5D,CAEAk0B,oBAAoB7pB,EAAyBS,GAC3C,OAAQT,QAAOE,SAAS,GAAGO,aAA0F,OAAhBA,GAAwBA,EAAYxS,OAAS,CACpJ,CAEAk7B,YAAYiC,EAAqBC,GAE3Bj6B,OAAOC,KAAKjF,KAAK4+B,SAAS/8B,OAAS,GACxBmD,OAAOC,KAAKjF,KAAK4+B,SAASl9B,OAAOw9B,GAAKA,IAAMF,GACpDrqB,QAAQzP,IACXlF,KAAK4+B,QAAQ15B,GAAK6Q,eACX/V,KAAK4+B,QAAQ15B,EAAG,GAG3BlF,KAAK4+B,QAAQI,GAAeC,EAC5BA,EAAQlkB,MACV,CAEAshB,mBACEr3B,OAAOC,KAAKjF,KAAK4+B,SAASjqB,QAAQzP,IAChClF,KAAK4+B,QAAQ15B,GAAK6Q,eACT/V,KAAK4+B,QAAQ15B,EAAG,EAE7B,CAEA42B,oBAAoBnxB,EAAYiJ,EAAyBurB,GACvDvrB,EAAOwrB,OAASD,EAChBn/B,KAAKm8B,cAAcxxB,EAAOiJ,EAC5B,EA5EW4qB,SAAwB,mBAAA99B,iBAAxB89B,GAAwB79B,mBAAAC,KAAA,EAAxB49B,EAAwB,UAAAjmB,EAAAC,IAAA,MAAxBgmB,EAAwB/lB,UAAA,2BAAA4mB,OAAA,CAAAf,UAAA,YAAAH,SAAA,WAAAjqB,QAAA,UAAAkqB,QAAA,UAAAC,SAAA,YAAAiB,QAAA,CAAAb,cAAA,iBAAAhD,YAAA,EAAA8D,SAAA,CAAA5+B,OAAA6+B,MAAA,EAAAC,KAAA,EAAAC,OAAA,gvBAAAC,SAAA,SAAAhnB,EAAAC,GAAA,EAAAD,GDjBrChY,MAAA,EAAAi/B,EAAA,2BAAiCj/B,MAAA,6CCYrBmY,KAAYjY,oBAAEg/B,KAAaC,KAAmBC,KAAiBC,KAAiB3E,EAAiBliB,MAAkBC,OAAA,usBAAAE,gBAAA,IAKlHklB,CAAwB,sCCd9B,MAAMxyB,EAAc,CAACi0B,aAAc,mQCalCt/B,MAAA,0CAAeA,MAAA,kBAAAA,CAAY,OAAAu/B,EAAA,2BAQzBv/B,MAAA,GACEA,MAAA,GACFA,wCADEA,MAAA,GAAAA,MAAA,IAAAw/B,EAAA,8CAGAx/B,MAAA,UAA8BA,MAAA,mBAAAA,MAAAy/B,GAAA,MAAAC,EAAA1/B,QAAAsW,MAAAb,EAAAzV,MAAA,UAASA,MAAAyV,EAAAkqB,WAAAD,GAAiB,GAAE1/B,MAAA,GAASA,OAAA,mCAATA,MAAA,GAAAA,MAAAw/B,EAAA,2BAN9Dx/B,MAAA,QAEEA,MAAA,EAAA4/B,EAAA,uBAGA5/B,MAAA,EAAA6/B,EAAA,0BAAA7/B,OAGFA,iEARIA,MAAA,mBAAAw/B,IAAAM,EAAAC,WAAAC,OAAA,gBAEahgC,MAAA,GAAAA,MAAA,OAAAigC,EAAAjgC,CAAY,WAAAkgC,EAAA,2BAH/BlgC,MAAA,WACEA,MAAA,EAAAmgC,EAAA,aASFngC,+BARwBA,MAAA,GAAAA,MAAA,UAAAogC,EAAAL,WAAA9K,MAAA,4BAUtBj1B,MAAA,YAAwBA,MAAA,GACxBA,wCADwBA,MAAA,GAAAA,MAAA,GAAA0U,EAAA,sGAiB1B1U,MAAA,WAAqDA,MAAA,yBAAAqgC,EAAArgC,MAAAsgC,GAAAzrB,UAAA0rB,EAAAvgC,MAAA,UAASA,MAAAugC,EAAAC,WAAAH,GAAkB,GAC9ErgC,MAAA,QAAIA,MAAA,UAAuDA,QAC3DA,MAAA,WACEA,MAAA,GACFA,SAAK,uCAJoGA,MAAA,UAAAA,MAAA,EAAAygC,EAAAJ,EAAA3C,WAErG19B,MAAA,GAAAA,MAAA,gBAAA0gC,EAAA,IACF1gC,MAAA,GAAAA,MAAA,IAAAqgC,EAAAlzB,KAAA,+BAONnN,MAAA,UAAgHA,MAAA,GAAaA,kDAA1EA,MAAA,OAAA2gC,EAAAC,QAAA5gC,OAA6DA,MAAA,GAAAA,MAAA0U,EAAA,kDA5DpH1U,MAAA,GACEA,MAAA,UAAAA,CAA0B,UACuBA,MAAA,GAAcA,QAC7DA,MAAA,cAAuEA,MAAA,mBAAAA,MAAAi8B,GAAA,MAAAQ,EAAAz8B,QAAA,OAASA,MAAAy8B,EAAArnB,QAAO,GAAEpV,UAE3FA,MAAA,UAAAA,CAAwB,UAAxBA,CAAwB,aAG4BA,MAAA,GAAaA,QAC7DA,MAAA,UAAAA,CAAyB,gBACsCA,MAAA,yBAAA+6B,GAAA/6B,MAAAi8B,GAAA,MAAA4E,EAAA7gC,QAAA,OAAAA,MAAA6gC,EAAAvR,KAAAyL,EAAA,EAAA/6B,CAAkB,iBAAA+6B,GAAA/6B,MAAAi8B,GAAA,MAAA6E,EAAA9gC,QAAA,OAC/DA,MAAA8gC,EAAAC,OAAAn/B,KAAAm5B,EAAAlY,OAAAle,OAAsC,EADO3E,CAAkB,iBAAA+6B,GAAA/6B,MAAAi8B,GAAA,MAAA+E,EAAAhhC,QAAA,OACdA,MAAAghC,EAAAC,OAAAr/B,KAAAm5B,EAAAlY,OAAAle,OAAsC,EAD1C3E,CAAkB,2BAAAA,MAAAi8B,GAAA,MAAAiF,EAAAlhC,QAAA,OAEvDA,MAAAkhC,EAAAC,cAAa,GAFrCnhC,UAKFA,MAAA,GAAAohC,EAAA,0BAAAphC,OAGFA,QAEAA,MAAA,aACEA,MAAA,GAAAqhC,EAAA,aAWArhC,MAAA,GAAAshC,GAAA,0BAAAthC,OAIFA,QAEAA,MAAA,cAAAA,CAA8C,WAA9CA,CAA8C,QAA9CA,CAA8C,YAGLA,MAAA,IAAoBA,QACzDA,MAAA,YAAgBA,MAAA,IAAoBA,YAGtCA,MAAA,WAAAA,CAAO,YACHA,MAAA,mBAAAA,MAAAi8B,GAAA,MAAAC,EAAAl8B,QAAA,OAASA,MAAAk8B,EAAAqF,SAAQ,GACnBvhC,MAAA,SAAIA,MAAA,WAA4DA,QAChEA,MAAA,SAAIA,MAAA,UAAGA,UAETA,MAAA,GAAAwhC,EAAA,aAMAxhC,YAGJA,MAAA,aACEA,MAAA,GAAAyhC,EAAA,YACAzhC,MAAA,gBAAgDA,MAAA,mBAAAA,MAAAi8B,GAAA,MAAAyF,EAAA1hC,QAAA,OAASA,MAAA0hC,EAAAtsB,QAAO,GAAEpV,MAAA,IAAeA,QACjFA,MAAA,gBAA8CA,MAAA,mBAAAA,MAAAi8B,GAAA,MAAA0F,EAAA3hC,QAAA,OAASA,MAAA2hC,EAAAC,QAAO,GAAE5hC,MAAA,IAAcA,UAGlFA,OAAA,+DA/DmDA,MAAA,GAAAA,MAAA0U,EAAA,UACP1U,MAAA,GAAAA,MAAA,aAAA0U,EAAA,UAKU1U,MAAA,GAAAA,MAAA0U,EAAA,SAEe1U,MAAA,GAAAA,MAAA,UAAA2V,EAAA2Z,KAAAtvB,CAAkB,eAAA2V,EAAAgK,OAAlB3f,CAAkB,cAAA0U,EAAA,oBAAlB1U,CAAkB,iBAAA6hC,GAWzD7hC,MAAA,GAAAA,MAAA,YAAAyN,IAAAkI,EAAAoqB,WAAAC,OAAAhgC,CAAuC,WAAA8hC,GAoBxB9hC,MAAA,GAAAA,MAAA0U,EAAA,gBACrB1U,MAAA,GAAAA,MAAA0U,EAAA,gBAQK1U,MAAA,GAAAA,MAAA,UAAA2V,EAAAosB,SAUA/hC,MAAA,GAAAA,MAAA,OAAA2V,EAAAirB,QAAA1/B,OAAA,GACyClB,MAAA,GAAAA,MAAA0U,EAAA,WACF1U,MAAA,GAAAA,MAAA0U,EAAA,WCrC7D,IAAMstB,EAAwB,MAA/B,MAAOA,EA4CX/iC,YAAmBgX,EAA+B4C,GAA/BxZ,KAAA4W,QAA+B5W,KAAAwZ,iBA1CzCxZ,KAAA4iC,eAAyB,GAIzB5iC,KAAAuhC,QAAkB,sFAE3BvhC,KAAA6iC,YAAc,GACd7iC,KAAA0iC,QAA0B,GAC1B1iC,KAAA0gC,WAA4B,IAAIoC,IAGhC9iC,KAAAiwB,KAAe,GAEfjwB,KAAA0hC,OAAS,IAAI5nB,IACb9Z,KAAA4hC,OAAS,IAAI9nB,IACb9Z,KAAA+iC,WAAqB,EACrB/iC,KAAAgjC,cAAwB,EAGxBhjC,KAAAsgB,OAAuD2iB,IACrD,MAAMC,EAAiBD,EAAM9iC,QAAKgjC,KAAa,MAAG,EAAGC,QAC/CC,EAAyBrjC,KAAK4hC,OAAOzhC,QAAKuB,KAAO,KAAO1B,KAAKsjC,SAASC,gBAG5E,SAAOC,KAAMN,EAFOljC,KAAK0hC,OAEiB2B,EAAwBJ,GAAO9iC,QACvEgjC,KAAa,MAAG,EAChBC,QAAoB,EACpBh3B,KAAI,IAAMpM,KAAK+iC,WAAY,IAAI,EAC/B53B,KAAUkpB,IACRr0B,KAAKwZ,eAAe+K,gBAAgBvkB,KAAKiwB,MAAM9vB,QAC7CiM,KAAI,IAAMpM,KAAKgjC,cAAe,IAAK,EACnC52B,KAAKs2B,IAAY1iC,KAAK0iC,QAAUA,KAAO,EACvCriC,KAAIqiC,IAAWA,GAAQriC,IAAIojC,IAAKA,GAAEC,YAAS,EAC3Cr3B,KAAW,KACTrM,KAAKgjC,cAAe,KACblgC,MAAG,SACT,EAEPsJ,KAAI,IAAMpM,KAAK+iC,WAAY,GAAM,CAMrC,CAEAvrB,WACE,GAAIxX,KAAK4iC,gBAAkB5iC,KAAK4iC,eAAe/gC,OAAS,EAAG,CACzD,IAAI6gC,EAAU1iC,KAAK4iC,eAAehgC,MAAM,KACpC+gC,EAAW3jC,KAAK4iC,eAAehgC,MAAM,MAClB,IAAnB8/B,EAAQ7gC,QAAgB8hC,EAAS9hC,OAAS,IAC5C6gC,EAAUiB,GAEPjB,EAAQ,GAAGkB,SAAS,OACvBlB,EAAQ,GAAKA,EAAQ,GAAK,KAE5BA,EAAQ/tB,QAAQkvB,GAAU7jC,KAAK0gC,WAAWnzB,KAAKs2B,IAE/C,MAAMH,EAAW1jC,KAAK0gC,WAAW9K,MAAM9M,KAAK,KAC5C9oB,KAAK8jC,aAAaJ,EAAQ,MAE1B1jC,KAAK8jC,aAAa9jC,KAAK6iC,YAE3B,CAEAf,cACE9hC,KAAK8jC,aAAa9jC,KAAKiwB,KACzB,CAGAkR,WAAW0C,GACLA,EAAOxF,WACXr+B,KAAK6iC,YAAcgB,EAAO/1B,KAC1B9N,KAAK0gC,WAAWnzB,KAAKs2B,EAAO/1B,MAC5B9N,KAAKiwB,KAAO4T,EAAOH,SACnB1jC,KAAK8jC,aAAa9jC,KAAKiwB,MACzB,CAEAiS,SACEliC,KAAK0gC,WAAWqD,MAChB,MAAMC,EAAYhkC,KAAK0gC,WAAWC,OAClC,QAAkBvyB,IAAd41B,EAAyB,CAC3BhkC,KAAK6iC,YAAcmB,EACnB,MAAMN,EAAW1jC,KAAK0gC,WAAW9K,MAAM9M,KAAK,KAC5C9oB,KAAK8jC,aAAaJ,EAAQ,MAE1B1jC,KAAK6iC,YAAc,GACnB7iC,KAAK8jC,aAAa9jC,KAAK6iC,YAE3B,CAEAiB,aAAa7T,GACXjwB,KAAKwZ,eAAe+K,gBAAgB0L,GAAM5kB,UAAUq3B,IAClD1iC,KAAK0iC,QAAUA,GACd1a,IAEDhoB,KAAK0gC,WAAWqD,MAChB,MAAM7sB,EAAOlX,KAAK0iC,QAAQvJ,KAAKsK,GAAKA,EAAEC,WAAazT,GAC/C/Y,IACFA,EAAKmnB,UAAW,IAGtB,CAEA4F,YAAYP,EAAkB/4B,GAC5BA,EAAMm0B,iBACNn0B,EAAMk0B,kBAEN7+B,KAAK4W,MAAMb,MAAM,CAACoC,SAAS,EAAM+rB,WAAYR,GAC/C,CAEAnB,QACEviC,KAAK4W,MAAMb,MAAM,CAACoC,SAAS,EAAM+rB,WAAYlkC,KAAKiwB,MACpD,CAEAla,QACE/V,KAAK4W,MAAMb,MAAM,CAACoC,SAAS,EAAO+rB,gBAAY91B,GAChD,CAEA+1B,QAAQlU,GAEN,MAAMmU,EAAWpkC,KAAK0gC,WAAWC,OACjC,GAAIyD,GAAYA,GAAYnU,EAAM,CAChC,IAAIoU,EAAWpU,EAAKpN,QAAQuhB,EAAU,IACtC,OAAIC,EAAS1J,WAAW,MAAQ0J,EAAS1J,WAAW,SAClD0J,EAAWA,EAASzhB,UAAU,EAAGyhB,EAASxiC,SAErCwiC,EAGT,OAAOpU,CACT,CAEAqQ,WAAWrpB,GACT,KAAMjX,KAAK0gC,WAAW9K,MAAM/zB,OAAS,EAAIoV,GACvCjX,KAAK0gC,WAAWqD,MAGlB,MAAML,EAAW1jC,KAAK0gC,WAAW9K,MAAM9M,KAAK,KAC5C9oB,KAAKiwB,KAAOyT,EACZ1jC,KAAK8jC,aAAaJ,EACpB,EA/IWf,SAAwB,mBAAAjiC,iBAAxBiiC,GAAwBhiC,MAAAC,MAAAD,MAAAE,KAAA,EAAxB8hC,EAAwB,UAAAld,EAAAjN,IAAA,MAAxBmqB,EAAwBlqB,UAAA,2BAAAC,UAAA,SAAAC,EAAAC,MAAA,EAAAD,s8CDzBrChY,MAAA,EAAA2jC,EAAA,6BAAiC3jC,MAAA,mDCuBrBoY,KAAmBjY,UAAEyjC,KAAcC,KAAW1jC,KAAE2jC,KAAcC,KAAMC,KAAOC,KAASzrB,MAAkBC,OAAA,gZAErGupB,CAAwB,4FCP9B,IAAMkC,EAAe,MAAtB,MAAOA,EAIXjlC,YAAoBklC,GAAA9kC,KAAA8kC,OAFpB9kC,KAAAgK,QAAUC,IAAYC,MAEkB,CAExC66B,oBACE,OAAO/kC,KAAK8kC,KAAKj5B,IAAoB7L,KAAKgK,QAAU,WACtD,CAEAg7B,aACE,OAAOhlC,KAAK8kC,KAAKj5B,IAAY7L,KAAKgK,QAAU,oBAAqBgC,IACnE,CAEAi5B,qBAAqBp4B,GACnB,OAAO7M,KAAK8kC,KAAKn4B,KAAqB3M,KAAKgK,QAAU,WAAY6C,EACnE,CAEAq4B,sBACE,OAAOllC,KAAK8kC,KAAKn4B,KAAqB3M,KAAKgK,QAAU,iBAAkB,GACzE,CAEAm7B,2BACE,OAAOnlC,KAAK8kC,KAAKn4B,KAAqB3M,KAAKgK,QAAU,8BAA+B,GACtF,CAEAo7B,eACE,OAAOplC,KAAK8kC,KAAKn4B,KAAqB3M,KAAKgK,QAAU,0BAA2B,GAClF,CAEAq7B,2BACE,OAAOrlC,KAAK8kC,KAAKn4B,KAAqB3M,KAAKgK,QAAU,2BAA4B,GACnF,CAEAs7B,wBAAwBC,GACtB,OAAOvlC,KAAK8kC,KAAKn4B,KAAsB3M,KAAKgK,QAAU,0BAA2B,CAACrH,IAAK4iC,GACzF,CAEAC,qBACE,OAAOxlC,KAAK8kC,KAAKj5B,IAAc7L,KAAKgK,QAAU,4BAChD,CAEAy7B,mBACE,OAAOzlC,KAAK8kC,KAAKj5B,IAAc7L,KAAKgK,QAAU,sBAChD,CAEA07B,kBACE,OAAO1lC,KAAK8kC,KAAKj5B,IAAc7L,KAAKgK,QAAU,yBAChD,CAEA27B,iBACE,OAAO3lC,KAAK8kC,KAAKj5B,IAAY7L,KAAKgK,QAAU,wBAAyBgC,KAAa7L,QAAKE,KAAImU,GAAW,SAANA,GAClG,EApDWqwB,SAAe,mBAAAnkC,iBAAfmkC,GAAelkC,MAAAC,MAAA,EAAfikC,EAAe,WAAA9jC,EAAAC,IAAA,OAAf6jC,EAAe5jC,QAAf4jC,EAAe3jC,UAAAC,WAFd,SAED0jC,CAAe,oNCXlBlkC,MAAA,WAAAA,CAAsD,WAAtDA,CAAsD,YAGhDA,MAAA,UACFA,QAEAA,MAAA,WAAAA,CAA2C,WAA3CA,CAA2C,UAEgBA,MAAA,mBAAAA,MAAAi9B,GAAA,MAAA0D,EAAA3gC,MAAA,UAASA,MAAA2gC,EAAAsE,WAAW,OAAM,GAAEjlC,MAAA,aAA2BA,MAAA,cAAQA,QAAOA,MAAA,SAAGA,QAChIA,MAAA,cAAwBA,MAAA,aAACA,QACzBA,MAAA,cAA0DA,MAAA,IAAoBA,QAC9EA,MAAA,cAAkDA,MAAA,aAACA,QACnDA,MAAA,WAAuDA,MAAA,mBAAAA,MAAAi9B,GAAA,MAAAiI,EAAAllC,QAAAmlC,iBAAA,OAASnlC,MAAAklC,IAAkB,GAAEllC,MAAA,IAAeA,MAAA,cAA4BA,MAAA,IAAyBA,iBAAO,oCAFrGA,MAAA,IAAAA,MAAA0U,EAAA,gBAE0B1U,MAAA,GAAAA,MAAA0U,EAAA,WAA2C1U,MAAA,GAAAA,MAAA,IAAA0U,EAAA,iEAOvI1U,MAAA,GACEA,MAAA,WAAAA,CAA+C,WAA/CA,CAA+C,cAEMA,MAAA,GAAkBA,QACnEA,MAAA,cACAA,MAAA,eAA8EA,MAAA,mBAAAA,MAAA4U,GAAA,MAAAE,EAAA9U,MAAA,GAAS8U,SAAAswB,YAAWplC,MAAA8U,EAAAuwB,KAAO,MAAK,GAC5GrlC,MAAA,GACFA,UAEFA,MAAA,eAAqEA,MAAA,mBAAAA,MAAA4U,GAAA,MAAA0wB,EAAAtlC,MAAA,UAAAA,MAAAslC,EAAAD,KAAgB,MAAK,GACxFrlC,MAAA,UAAkFA,MAAA,YAClFA,MAAA,cAA2BA,MAAA,IAAaA,YAI9CA,OAAA,oDAZuDA,MAAA,GAAAA,MAAA0U,EAAA,cAEgE1U,MAAA,GAAAA,MAAA,uBAAAulC,EAAAC,EAAAtT,KAAAhnB,IAAA,uBAAAq6B,EAAA5gC,MAAAzD,SAC/GlB,MAAA,GAAAA,MAAA,IAAA0U,EAAA,aAKyB1U,MAAA,GAAAA,MAAA0U,EAAA,mCA9BjC1U,MAAA,EAAAylC,EAAA,cAmBAzlC,MAAA,EAAA0lC,EAAA,8CAnBgC1lC,MAAA,eAAAu9B,EAAA8H,MAmBjBrlC,MAAA,GAAAA,MAAA,eAAAu9B,EAAA8H,KAAA,2DA8BjBrlC,MAAA,GACEA,MAAA,QACAA,MAAA,eAAuDA,MAAA,mBAAAA,MAAAi7B,GAAA,MAAA0K,EAAA3lC,MAAA,UAASA,MAAA2lC,EAAAC,aAAY,GAAE5lC,MAAA,GAAcA,QAC9FA,OAAA,oCADgFA,MAAA,GAAAA,MAAA0U,EAAA,2FANlF1U,MAAA,YACoCA,MAAA,mBAAAA,MAAA6lC,GAAA,MAAAtK,EAAAv7B,MAAA,UAASA,MAAAu7B,EAAAhzB,QAAO,GAElDvI,MAAA,kBACAA,MAAA,EAAA8lC,EAAA,sBAKF9lC,OAAA,6CAPKA,MAAA,UAAAA,MAAA,EAAA28B,GAAAoJ,EAAAC,kBAAA,IAAAD,EAAAE,gBAC6BjmC,MAAA,GAAAA,MAAA,QAAA0U,EAAA,uBAAA1U,CAAkC,WAAA+lC,EAAArmB,aAAA6B,iBACnDvhB,MAAA,GAAAA,MAAA,OAAA+lC,EAAAC,gBAAA,0CAUfhmC,MAAA,GACEA,MAAA,QACAA,MAAA,eACQA,MAAA,mBAAAA,MAAAkmC,GAAA,MAAAxF,EAAA1gC,QAAAsW,MAAA6vB,EAAAnmC,MAAA,UAASA,MAAAmmC,EAAAC,WAAA1F,GAAe,GAC9B1gC,MAAA,GACFA,QACFA,OAAA,6DAFIA,MAAA,GAAAA,MAAA,IAAA0U,EAAA6rB,EAAA8F,eAAA3F,EAAA,oGARN1gC,MAAA,YACqHA,MAAA,yBAAA0gC,EAAA1gC,MAAAsmC,GAAAhwB,MAAAwqB,EAAA9gC,MAAA,UAASA,MAAA8gC,EAAAyF,YAAA7F,GAAgB,GAE5I1gC,MAAA,kBACAA,MAAA,EAAAwmC,EAAA,sBAOFxmC,OAAA,qEATKA,MAAA,UAAAA,MAAA,EAAA28B,GAAAyD,EAAA4F,iBAAA5F,EAAA6F,gBAAAvF,IAD6D1gC,MAAA,aAAA0U,EAAA,YAAA1U,MAAA,EAAAygC,EAAAC,EAAA,KAEH1gC,MAAA,GAAAA,MAAA,WAAAymC,EAAAzmC,CAAgB,gBAAA0gC,EAAA,GAC9D1gC,MAAA,GAAAA,MAAA,OAAAogC,EAAA4F,gBAAA,2CAlEvBhmC,MAAA,GACEA,MAAA,UAAAA,CAA2E,WAA3EA,CAA2E,qBAExDA,MAAA,sBAAA+6B,GAAA/6B,MAAAg8B,GAAA,MAAAE,EAAAl8B,QAAA,OAAcA,MAAAk8B,EAAAwK,QAAA3L,GAAe,EAA7B/6B,CAA8B,sBAAA+6B,GAAA/6B,MAAAg8B,GAAA,MAAA2F,EAAA3hC,QAAA,OAChBA,MAAA2hC,EAAAgF,SAAA5L,GAAgB,EAD9B/6B,CAA8B,uBAAA+6B,GAAA/6B,MAAAg8B,GAAA,MAAAK,EAAAr8B,QAAA,OACiBA,MAAAq8B,EAAAuK,UAAA7L,GAAiB,GAE7E/6B,MAAA,EAAA6mC,EAAA,qBAsCF7mC,QAEAA,MAAA,EAAA8mC,EAAA,mBAGF9mC,QAEAA,MAAA,WACEA,MAAA,EAAA+mC,EAAA,aAUA/mC,MAAA,EAAAgnC,EAAA,aAYFhnC,UAKJA,OAAA,yBA7EUA,MAAA,GAAAA,MAAA,YAAA2V,EAAAuc,MAE6ElyB,MAAA,GAAAA,MAAA,SAAA2V,EAAAsxB,qBAAAjnC,CAA+B,gBAiD1GA,MAAA,GAAAA,MAAA,OAAA2V,EAAAuxB,WAUelnC,MAAA,GAAAA,MAAA,UAAA2V,EAAAwxB,UAAA,ECpCpB,IAAMC,EAA0B,MAAjC,MAAOA,EA+CXnoC,YAAmBygB,EAAoC2nB,EAAyBloC,EAA+BmoC,EACnF5d,EAAqCvT,GAD9C9W,KAAAqgB,eAAoCrgB,KAAAgoC,KAAyBhoC,KAAAF,SAA+BE,KAAAioC,gBACnFjoC,KAAAqqB,WAAqCrqB,KAAA8W,QA3CxD9W,KAAA2mC,iBAA2B,EAI1B3mC,KAAAkoC,WAAmC,IAAIxJ,MAIvC1+B,KAAAmoC,WAAiC,IAAIzJ,MAEtC1+B,KAAA8nC,UAA2B,GAC1B9nC,KAAAooC,gBAA+C,IAAI1J,MAKpD1+B,KAAA6nC,WAAqB,EACpB7nC,KAAAqoC,aAAmC,IAAI3J,MAKvC1+B,KAAAsoC,cAAsC,IAAI5J,MAI1C1+B,KAAAuoC,kBAA0C,IAAI7J,MAIxD1+B,KAAA4mC,cAAwB,EAIxB5mC,KAAAgnC,aAAuB,EAEvBhnC,KAAAgJ,MAA4B,GAC5BhJ,KAAA4nC,qBAAuB,CAAC,OAAQ,OAAQ,QAAS,OAAQ,SAAS9e,KAAK,KAEvE9oB,KAAAgmC,KAA+B,MACdhmC,KAAA6Z,UAAY,IAAIC,GAG4D,CAE7FtC,WACExX,KAAK6yB,KAAO7yB,KAAKgoC,GAAGQ,MAAM,CACxBC,cAAe,IAAI/wB,KAAY,GAAI,MAGrC1X,KAAK8W,MAAMa,cACb,CAEAsC,cACEja,KAAK6Z,UAAUtX,OACfvC,KAAK6Z,UAAUK,UACjB,CAOAwuB,eAAeC,GACb,MAAMC,EAASve,SAASqP,cAAc,UACtCkP,EAAOC,MAAQF,EAAIE,MACnBD,EAAOE,OAASH,EAAIG,OACpB,MAAMlwB,EAAMgwB,EAAOG,WAAW,KAAM,CAACC,OAAO,IAC5C,OAAKpwB,GAILA,EAAIqwB,UAAUN,EAAK,EAAG,GACNC,EAAOM,UAAU,cAJxB,EAMX,CAEAhC,YAAYjwB,GACV,GAAIjX,KAAK4mC,gBAAkB3vB,EAG3B,KAAKjX,KAAK8nC,UAAU7wB,GAAO0jB,WAAW,eAAgB,CACpD,MAAMwO,EAASnpC,KAAK8nC,UAAU7wB,GACxB0xB,EAAM,IAAIS,MAYhB,OAXAT,EAAIU,YAAc,YAClBV,EAAIllB,IAAM0lB,EACVR,EAAIW,OAAUC,GAAMvpC,KAAKwpC,kBAAkBb,EAAK1xB,GAChD0xB,EAAIc,QAAWF,IACbvpC,KAAKF,OAAOU,SAAMC,MAAU,iCAC5BT,KAAK6yB,KAAKhnB,IAAI,kBAAkBuJ,SAAS,IACzCpV,KAAK8W,MAAMa,cAAY,EAEzB3X,KAAK6yB,KAAKhnB,IAAI,kBAAkBuJ,SAAS,IACzCpV,KAAK8W,MAAMa,oBACX3X,KAAKuoC,kBAAkBxJ,KAAK/+B,KAAK8nC,UAAU9nC,KAAK4mC,eAChD,CAGF5mC,KAAK4mC,cAAgB3vB,EACrBjX,KAAK8W,MAAMa,eACX3X,KAAKsoC,cAAcvJ,KAAK/+B,KAAK4mC,eAC7B5mC,KAAKuoC,kBAAkBxJ,KAAK/+B,KAAK8nC,UAAU9nC,KAAK4mC,eAAc,CAChE,CAEAG,WAAW9vB,GACLjX,KAAK2mC,kBACP3mC,KAAKkoC,WAAWnJ,KAAK/+B,KAAK8nC,UAAU7wB,IACpCjX,KAAKgnC,aAAe/vB,EACpBjX,KAAK8W,MAAMa,eAEf,CAEA4uB,aACMvmC,KAAK2mC,iBACP3mC,KAAKmoC,WAAWpJ,MAEpB,CAEAgH,UAAUpjC,IACRA,EAAMA,GAAO3C,KAAK6yB,KAAKhnB,IAAI,kBAAkBvG,MAAM6yB,SAC/B,KAARx1B,GAEZ3C,KAAKioC,cAAcpN,YAAYl4B,GAAK0I,UAAUiY,IAC5C,MAAMqlB,EAAM,IAAIS,MAChBT,EAAIU,YAAc,YAClBV,EAAIllB,IAAMzjB,KAAKqgB,aAAagD,oBAAoBC,GAChDqlB,EAAIW,OAAUC,GAAMvpC,KAAKwpC,kBAAkBb,GAC3CA,EAAIc,QAAWF,IACbvpC,KAAKF,OAAOU,SAAMC,MAAU,iCAC5BT,KAAK6yB,KAAKhnB,IAAI,kBAAkBuJ,SAAS,IACzCpV,KAAK8W,MAAMa,cAAY,EAEzB3X,KAAK6yB,KAAKhnB,IAAI,kBAAkBuJ,SAAS,IACzCpV,KAAK8W,MAAMa,cAAY,EAE3B,CAIAiuB,WAAWI,GACThmC,KAAKgmC,KAAOA,EACZhmC,KAAK0pC,oBACL1pC,KAAK8W,MAAMa,eAEXgyB,WAAW,IAAO3pC,KAAKqqB,SAASe,cAAc,gBAAqCwe,QAAS,GAC9F,CAEOvC,QAAQr+B,GACbhJ,KAAKgJ,MAAQA,EACb,UAAW6gC,KAAe7gC,EAGpB6gC,EAAYC,UAAUC,QACNF,EAAYC,UACpBE,KAAMA,IACd,MAAMC,EAAU,IAAIC,WACpBD,EAAOX,OAAUC,GAAMvpC,KAAKmqC,mBAAmBZ,GAC/CU,EAAOG,cAAcJ,EAAI,EAIjC,CAEAG,mBAAmBZ,GACD,MAAZA,EAAE/lB,SAENxjB,KAAK8nC,UAAUv6B,KAAKg8B,EAAE/lB,OAAO6mB,QAC7BrqC,KAAKooC,gBAAgBrJ,KAAK/+B,KAAK8nC,WAC/B9nC,KAAK4mC,cAAgB5mC,KAAK8nC,UAAUjmC,OAAS,EAC7C7B,KAAKsoC,cAAcvJ,KAAK/+B,KAAK4mC,eAC7B5mC,KAAKuoC,kBAAkBxJ,KAAKwK,EAAE/lB,OAAO6mB,QACrCV,WAAW,KACR3pC,KAAKqqB,SAASe,cAAc,oCAAsCprB,KAAK4mC,cAAgB,MAAsBgD,OAAK,GAErH5pC,KAAK8W,MAAMa,eACb,CAEA6xB,kBAAkBb,EAAuB1xB,GAAgB,GACvD,MAAMtU,EAAM3C,KAAK0oC,eAAeC,GAC5B1xB,GAAS,EACXjX,KAAK8nC,UAAU7wB,GAAStU,EAExB3C,KAAK8nC,UAAUv6B,KAAK5K,GAGtB3C,KAAKooC,gBAAgBrJ,KAAK/+B,KAAK8nC,WAC/B9nC,KAAK8W,MAAMa,eAEXgyB,WAAW,KAET3pC,KAAKknC,YAAYjwB,GAAS,EAAIA,EAAQjX,KAAK8nC,UAAUjmC,OAAS,EAAC,EAEnE,CAEOylC,SAAS38B,GAChB,CAEO48B,UAAU58B,GACjB,CAEAzB,QACElJ,KAAKqoC,aAAatJ,OAClB/+B,KAAK4mC,eAAgB,CACvB,CAEA8C,oBACEC,WAAW,KACT,MAAMxV,EAAO9J,SAASe,cAAc,0BACxB,MAAR+I,IAAQ,EACZmW,KAAUnW,EAAM,WACbh0B,QAAKoqC,KAAU,IAAoB,QAAdvqC,KAAKgmC,OAAiB36B,UAAWV,IAErD,OAD2BA,EAChBzF,KACT,KAAKslC,KAAUC,MAEbzqC,KAAK+lC,YACL,MAGF,KAAKyE,KAAUE,QACb1qC,KAAKgmC,KAAO,MACZr7B,EAAMk0B,oBAKX,EAEP,EAzOWkJ,SAA0B,mBAAArnC,iBAA1BqnC,GAA0BpnC,MAAAC,KAAAD,MAAAE,MAAAF,MAAAG,MAAAH,MAAAyB,KAAAzB,MAgD3BgrB,MAAQhrB,aAAA,EAhDPonC,EAA0B,UAAAh3B,EAAAyH,IAAA,MAA1BuvB,EAA0BtvB,UAAA,8BAAA4mB,OAAA,CAAAsH,gBAAA,kBAAAmB,UAAA,YAAAD,UAAA,aAAAvI,QAAA,CAAA4I,WAAA,aAAAC,WAAA,aAAAC,gBAAA,kBAAAC,aAAA,eAAAC,cAAA,gBAAAC,kBAAA,qBAAA9M,YAAA,EAAA8D,SAAA,CAAA5+B,OAAA6+B,MAAA,EAAAC,KAAA,EAAAC,OAAA,gzDAAAC,SAAA,SAAAhnB,EAAAC,GAAA,EAAAD,GD3BvChY,MAAA,EAAAgqC,GAAA,2BAAiChqC,MAAA,sDCiB7BoY,KAAmBlY,6BACnB+pC,KAAiB5xB,UACjBF,KAAYkH,eACZ6qB,IACAC,KAAe7qB,MAAA7G,OAAA,gkBAAAE,gBAAA,IAMNyuB,CAA0B,oDCrBhC,IAAMgD,EAAS,MAAhB,MAAOA,EAcXzP,UAAU0P,EAAeC,GAAG,EAAMC,EAAG,GACnC,MAAMC,EAASF,EAAK,IAAO,KAE3B,GAAIrnB,KAAKwnB,IAAIJ,GAASG,EACpB,OAAOH,EAAQ,KAGjB,MAAMK,EAAQJ,EACV,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAC3C,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OACtD,IAAIK,GAAI,EACR,MAAM3nB,EAAI,IAAIunB,EAEd,GACEF,GAASG,IACPG,QACK1nB,KAAKC,MAAMD,KAAKwnB,IAAIJ,GAASrnB,GAAKA,GAAKwnB,GAAUG,EAAID,EAAMxpC,OAAS,GAE7E,MAAM0pC,EAAQP,EAAMQ,QAAQN,GAC5B,OAAKK,EAAQ,IAAI3H,SAAS,MACjBoH,EAAMQ,QAAQ,GAAK,IAAMH,EAAMC,GAGjCC,EAAQ,IAAMF,EAAMC,EAC7B,EAtCWP,SAAS,mBAAArqC,iBAATqqC,EAAS,EAATA,EAAS,WAAAU,EAAAlQ,IAAA,mBAATwP,EAASvP,MAAA,EAAAC,YAAA,IAATsP,CAAS,6DCEf,IAAMW,EAAe,MAAtB,MAAOA,EAGX9rC,YAAoBG,GAAAC,KAAAD,kBACpB,CACAu7B,UAAUh2B,EAAYqmC,EAAoB,2BACxC,OAAc,MAAVrmC,GAAmD,KAAVA,GAAgBA,IAAUsmC,KAAYzmC,OAAOtC,MAAMyC,IAAoB,WAAVA,EACjGtF,KAAKD,iBAAiBU,UAAUkrC,GAElCrmC,CACT,EAVWomC,SAAe,mBAAAhrC,iBAAfgrC,GAAe/qC,MAAAC,KAAA,MAAf8qC,EAAe,WAAAD,EAAAlQ,IAAA,yBAAfmQ,EAAelQ,MAAA,EAAAC,YAAA,IAAfiQ,CAAe,oDCDrB,IAAMzyB,EAAU,MAAjB,MAAOA,EAEXqiB,UAAU1F,EAAcziB,GACtB,OAAKyiB,GAAUziB,EAGRyiB,EAAMl0B,OAAOwV,GAAQ/D,EAAS+D,IAF1B0e,CAGf,EAPa3c,SAAU,mBAAAvY,iBAAVuY,EAAU,EAAVA,EAAU,WAAAwyB,EAAAlQ,IAAA,oBAAVtiB,EAAUuiB,MAAA,EAAAC,YAAA,IAAVxiB,CAAU,8DCGhB,IAAM4yB,EAAmB,MAA1B,MAAOA,EAEXvQ,UAAUpP,GACR,OAAQA,GACN,KAAK7oB,IAAYI,KACf,MAAO,UACT,KAAKJ,IAAYE,QACf,MAAO,kBACT,KAAKF,IAAYC,MACf,MAAO,WACT,KAAKD,IAAYK,IACf,MAAO,cACT,KAAKL,IAAYG,QACf,MAAO,cAEb,EAfWqoC,SAAmB,mBAAAnrC,iBAAnBmrC,EAAmB,EAAnBA,EAAmB,WAAApmB,EAAA8V,IAAA,6BAAnBsQ,EAAmBrQ,MAAA,EAAAC,YAAA,IAAnBoQ,CAAmB,uECCzB,IAAMC,EAAe,MAAtB,MAAOA,EAEXlsC,YAAoBG,GAAAC,KAAAD,kBAAqC,CAEzDu7B,UAAUpP,GACR,OAAQA,GACN,KAAK7oB,IAAYI,KACf,OAAOzD,KAAKD,iBAAiBU,UAAU,0BACzC,KAAK4C,IAAYE,QACf,OAAOvD,KAAKD,iBAAiBU,UAAU,6BACzC,KAAK4C,IAAYC,MACf,OAAOtD,KAAKD,iBAAiBU,UAAU,2BACzC,KAAK4C,IAAYK,IACf,OAAO1D,KAAKD,iBAAiBU,UAAU,yBACzC,KAAK4C,IAAYG,QACf,OAAOxD,KAAKD,iBAAiBU,UAAU,6BACzC,QACE,MAAO,GAEb,EAnBWqrC,SAAe,mBAAAprC,iBAAforC,GAAenrC,MAAAC,KAAA,MAAfkrC,EAAe,WAAArmB,EAAA8V,IAAA,yBAAfuQ,EAAetQ,MAAA,EAAAC,YAAA,IAAfqQ,CAAe,6DCFrB,IAAMC,EAAY,MAAnB,MAAOA,EAEXnsC,cADiBI,KAAAgsC,OAAoBliC,OAAOmiC,KAC7B,CAEf3Q,UAAUh2B,GACR,OAAOtF,KAAKgsC,IAAI3R,SAASC,MAAgB4R,KAAM5mC,EACjD,EANWymC,SAAY,mBAAArrC,iBAAZqrC,EAAY,EAAZA,EAAY,WAAAN,EAAAlQ,IAAA,sBAAZwQ,EAAYvQ,MAAA,EAAAC,YAAA,IAAZsQ,CAAY,oDCHlB,IAAMI,EAAgB,MAAvB,MAAOA,EAEX7Q,UAAUh2B,GACR,OAAc,MAAVA,EAA8C,GAE3CA,EAAM8mC,OAAO,GAAGC,cAAgB/mC,EAAMsd,UAAU,EACzD,EANWupB,SAAgB,mBAAAzrC,iBAAhByrC,EAAgB,EAAhBA,EAAgB,WAAAV,EAAAlQ,IAAA,0BAAhB4Q,EAAgB3Q,MAAA,EAAAC,YAAA,IAAhB0Q,CAAgB,4LCIvBxrC,MAAA,WAAAA,CAA4C,cACHA,MAAA,GAAqBA,QAC5DA,MAAA,YACEA,MAAA,cACAA,MAAA,eAAyEA,MAAA,mBAAAA,MAAAqU,GAAA,MAAAC,EAAAtU,MAAA,OAAAuU,EAAA,OAAAvU,MAAoC,OAApCuU,EAASD,EAAAE,SAAAtJ,IAAa,gBAAc,KAA3BqJ,EAAAE,SAAsC,IAAG,GAAGzU,MAAA,WAAKA,WAAS,mCAHvGA,MAAA,GAAAA,MAAA0U,EAAA,0CAQf1U,MAAA,0CAA8DA,MAAA,QAAA0U,EAAA,0DADtF1U,MAAA,WAAuIA,MAAA,yBAAA2rC,EAAA3rC,MAAA4U,GAAAC,UAAAC,GAAA9U,MAAA,UAASA,MAAA8U,GAAA82B,UAAAD,GAAsB,GACpK3rC,MAAA,GAAsBA,MAAA,EAAA6rC,EAAA,YACxB7rC,OAAA,6BADEA,MAAA,GAAAA,MAAA,IAAA2rC,EAAAjnC,MAAA,KAAwD1E,MAAA,GAAAA,MAAA,OAAA2rC,EAAA12B,SAAA,2BAE1DjV,MAAA,WAAmEA,MAAA,GAAgBA,wCAAhBA,MAAA,GAAAA,MAAA0U,EAAA,sCACnE1U,MAAA,UAAAA,CAA4C,WAA5CA,CAA4C,aAEVA,MAAA,GAAgBA,4CAAhBA,MAAA,GAAAA,MAAA0U,EAAA,qDAxB1C1U,MAAA,GAEEA,MAAA,UAAAA,CAA0B,UACuBA,MAAA,GAAcA,QAC7DA,MAAA,cAAuEA,MAAA,mBAAAA,MAAAkV,GAAA,MAAAC,EAAAnV,QAAA,OAASA,MAAAmV,EAAAC,QAAO,GAEvFpV,UAEFA,MAAA,WAAAA,CAAiD,WAE7CA,MAAA,EAAA8rC,EAAA,aAOA9rC,MAAA,UACEA,MAAA,EAAA+rC,EAAA,+BAGA/rC,MAAA,GAAAgsC,EAAA,YACAhsC,MAAA,GAAAisC,EAAA,YAKFjsC,UAEFA,MAAA,YAAAA,CAA0D,YAA1DA,CAA0D,YAA1DA,CAA0D,YAA1DA,CAA0D,eAIQA,MAAA,IAA2BA,QACrFA,MAAA,kBACFA,QACAA,MAAA,YAAAA,CAAwB,gBACwBA,MAAA,mBAAAA,MAAAkV,GAAA,MAAAO,EAAAzV,QAAA,OAASA,MAAAyV,EAAAC,SAAQ,GAAE1V,MAAA,IAAeA,kBAO5FA,OAAA,uCAzCmDA,MAAA,GAAAA,MAAA0U,EAAA,UACP1U,MAAA,GAAAA,MAAA,aAAA0U,EAAA,UAIhB1U,MAAA,GAAAA,MAAA,YAAA2V,EAAAnB,UAEHxU,MAAA,GAAAA,MAAA,OAAA2V,EAAAC,MAAA1U,QAAA,GAQwElB,MAAA,GAAAA,MAAA,UAAAA,MAAA,KAAA2V,EAAAC,MAAAD,EAAAE,aAG5D7V,MAAA,GAAAA,MAAA,WAAA2V,EAAAC,MAAA1U,SAAAyU,EAAAI,SACA/V,MAAA,GAAAA,MAAA,OAAA2V,EAAAI,SAWiC/V,MAAA,GAAAA,MAAA0U,EAAA,uBAIO1U,MAAA,GAAAA,MAAA0U,EAAA,YC3BtE,IAAK4I,EAAZ,SAAYA,GACVA,WAAAY,OAAA,YACAZ,IAAAc,OAAA,YACAd,IAAAiB,QAAA,aACAjB,IAAAC,SAAA,cACAD,IAAAQ,gBAAA,qBALUR,CAMZ,CANA,CAAYA,GAAQ,IAeb,IAAML,EAAuB,MAA9B,MAAOA,EAiDXhe,YAAoBgX,EAA+Bi2B,EAAgD/sC,GAA/EE,KAAA4W,QAA+B5W,KAAA6sC,qBAAgD7sC,KAAAF,SAbnGE,KAAAuW,MAAoB,GACpBvW,KAAA0W,SAAmB,EACnB1W,KAAAmV,SAAsB,IAAI6B,KAAU,IAIpChX,KAAAwW,WAAcY,GACLA,EAAS/R,MAAMgS,cAAcC,SAAStX,KAAKmV,SAAS7P,MAAMiS,aAAe,IAAIF,gBAAkB,EAGxGrX,KAAAD,oBAAmB+J,OAAOqN,KAGkG,CAE5HK,WAEExX,KAAKmV,SAASsC,WAAW,QAAS,IAAIC,KAAY1X,KAAKqF,MAAO,KAC9DrF,KAAKmV,SAASsC,WAAW,cAAe,IAAIC,KAAY,GAAI,KAE5D1X,KAAK0W,SAAU,EACf1W,KAAK6sC,mBAAmBzb,iBAAgB,GAAO,GAAM/lB,UAAUkL,IAC7DvW,KAAKuW,MAAQA,EAAM8zB,OACnBrqC,KAAK0W,SAAU,GAInB,CAEAmB,kBAEM7X,KAAK8X,WACP9X,KAAK8X,UAAUC,cAAcC,QAEjC,CAEAjC,QACE/V,KAAK4W,MAAMb,OACb,CAEAM,SACErW,KAAK6sC,mBAAmB/a,WAAW9xB,KAAKmV,SAAS7P,MAAMD,OAAOgG,UAAUwJ,IACtE7U,KAAKusC,UAAU13B,EAAI,EAEvB,CAEA03B,UAAUntB,GAEJpf,KAAKge,OAASC,EAASQ,sBAAsCrQ,IAAnBpO,KAAK+W,WACjD/W,KAAK6sC,mBAAmB7a,uBAAuB5S,EAAY9G,GAAItY,KAAK+W,WAAW1L,UAAU,KACvFrL,KAAKF,OAAOqY,QAAQnY,KAAKD,iBAAiBU,UAAU,wCACpDT,KAAK4W,MAAMb,OAAK,QAIE3H,IAAlBpO,KAAKqc,WAELrc,KAAKge,OAASC,EAASY,aAA4BzQ,IAAlBpO,KAAKqc,SACxCrc,KAAK6sC,mBAAmB5a,eAAe7S,EAAY9G,GAAItY,KAAKqc,UAAUhR,UAAU,KAC9ErL,KAAKF,OAAOqY,QAAQnY,KAAKD,iBAAiBU,UAAU,wCACpDT,KAAK4W,MAAMb,OAAK,GAET/V,KAAKge,OAASC,EAASc,aAA4B3Q,IAAlBpO,KAAK6c,SAC/C7c,KAAK6sC,mBAAmB3a,eAAe9S,EAAY9G,GAAItY,KAAKqc,SAAUrc,KAAK6c,UAAUxR,UAAU,KAC7FrL,KAAKF,OAAOqY,QAAQnY,KAAKD,iBAAiBU,UAAU,yCACpDT,KAAK4W,MAAMb,OAAK,GAET/V,KAAKge,OAASC,EAASiB,cAA8B9Q,IAAnBpO,KAAKif,UAChDjf,KAAK6sC,mBAAmB1a,gBAAgB/S,EAAY9G,GAAItY,KAAKqc,SAAUrc,KAAKif,WAAW5T,UAAU,KAC/FrL,KAAKF,OAAOqY,QAAQnY,KAAKD,iBAAiBU,UAAU,yCACpDT,KAAK4W,MAAMb,OAAK,GAET/V,KAAKge,OAASC,EAASC,eAA+B9P,IAAnBpO,KAAK8d,gBAA+C1P,IAApBpO,KAAK+d,YACjF/d,KAAK6sC,mBAAmB9a,iBAAiB3S,EAAY9G,GAAItY,KAAKqc,SAAUrc,KAAK8d,UAAW9d,KAAK+d,YAAY1S,UAAU,KACjHrL,KAAKF,OAAOqY,QAAQnY,KAAKD,iBAAiBU,UAAU,0CACpDT,KAAK4W,MAAMb,OAAK,GAItB,EAnHW6H,SAAuB,mBAAAld,iBAAvBkd,GAAuBjd,MAAAC,MAAAD,MAAAE,KAAAF,MAAAG,MAAA,EAAvB8c,EAAuB,UAAA6H,EAAAjN,IAAA,MAAvBoF,EAAuBnF,UAAA,4BAAAC,UAAA,SAAAC,EAAAC,MAAA,EAAAD,sjDDzBpChY,MAAA,EAAAmsC,EAAA,6BAAiCnsC,MAAA,oDCuBrBoY,KAAmB3W,6BAAEsiC,KAAMC,KAAO1rB,IAAYE,MAAkBC,OAAA,kNAE/DwE,CAAuB,uPCPlBjd,MAAA,SACEA,MAAA,GACFA,yCADEA,MAAA,GAAAA,MAAA,IAAA0U,EAAA,kDAEF1U,MAAA,SACEA,MAAA,GACFA,yCADEA,MAAA,GAAAA,MAAA,IAAA0U,EAAA,0DALJ1U,MAAA,YACEA,MAAA,EAAAosC,EAAA,cAGApsC,MAAA,EAAAqsC,EAAA,cAGFrsC,uCANQA,MAAA,GAAAA,MAAA,cAAAssC,EAAAlM,EAAAmM,YAAArhC,IAAA,iBAAAohC,EAAAE,OAAA,KAAAF,EAAAE,OAAAC,UAGAzsC,MAAA,GAAAA,MAAA,cAAAulC,EAAAnF,EAAAmM,YAAArhC,IAAA,iBAAAq6B,EAAAiH,OAAA,KAAAjH,EAAAiH,OAAAE,cAAA,2BAY0B1sC,MAAA,mCAAAA,MAAA0U,EAAA,+CANlC1U,MAAA,WAAAA,CAA+E,YAE3EA,MAAA,cAEAA,MAAA,cAAwDA,MAAA,GAAsBA,QAC9EA,MAAA,UACAA,MAAA,EAAA2sC,EAAA,0BAAA3sC,OACAA,MAAA,aAAqDA,MAAA,MAAkEA,wDAH/DA,MAAA,GAAAA,MAAA0U,EAAA,kBACS1U,MAAA,GAAAA,MAAA,aAAAkgC,GAEElgC,MAAA,GAAAA,MAAA,mBAAAkgC,EAAA,6BARzElgC,MAAA,GACEA,MAAA,EAAA4sC,EAAA,eAUF5sC,yCAVwCA,MAAA,GAAAA,MAAA,OAAA6sC,EAAA3tC,eAAAU,aAAAktC,GAAA,4BAsBlC9sC,MAAA,SACEA,MAAA,GACFA,yCADEA,MAAA,GAAAA,MAAA,IAAA0U,EAAA,oDAFJ1U,MAAA,YACEA,MAAA,EAAA+sC,EAAA,cAGF/sC,mCAHQA,MAAA,GAAAA,MAAA,cAAAgtC,EAAAR,OAAA,KAAAQ,EAAAR,OAAAS,OAAA,MAAAD,EAAAR,OAAA,KAAAQ,EAAAR,OAAAU,KAAA,4BANVltC,MAAA,WAAAA,CAA2G,cAC7DA,MAAA,GAAoBA,QAChEA,MAAA,cAGAA,MAAA,EAAAmtC,EAAA,cAKFntC,6DAT8CA,MAAA,GAAAA,MAAA0U,EAAA,gBAEH1U,MAAA,GAAAA,MAAA,oBAAAgtC,EAAA,KAAAA,EAAAI,WAAA,MAAAJ,EAAA,KAAAA,EAAAK,UAEVrtC,MAAA,GAAAA,MAAA,OAAAsU,EAAAi4B,YAAAe,OAAAh5B,EAAAi4B,YAAAc,QAAA,4BAY7BrtC,MAAA,SACEA,MAAA,GACFA,yCADEA,MAAA,GAAAA,MAAA,IAAA0U,EAAA,mDAFJ1U,MAAA,YACEA,MAAA,EAAAutC,EAAA,cAGFvtC,mCAHQA,MAAA,GAAAA,MAAA,cAAAwtC,EAAAhB,OAAA,KAAAgB,EAAAhB,OAAAS,OAAA,MAAAO,EAAAhB,OAAA,KAAAgB,EAAAhB,OAAAU,KAAA,4BANVltC,MAAA,WAAAA,CAA0G,cAC7DA,MAAA,GAAmBA,QAC9DA,MAAA,cAGAA,MAAA,EAAAytC,EAAA,cAKFztC,6DAT6CA,MAAA,GAAAA,MAAA0U,EAAA,eAEpC1U,MAAA,GAAAA,MAAA,aAAAwtC,EAAAJ,SAAAI,EAAAH,SAEwBrtC,MAAA,GAAAA,MAAA,OAAAwlC,EAAA+G,YAAAe,OAAA9H,EAAA+G,YAAAc,QAAA,4BAgB7BrtC,MAAA,SACEA,MAAA,GACFA,yCADEA,MAAA,GAAAA,MAAA,IAAA0U,EAAA,oDAFJ1U,MAAA,YACEA,MAAA,EAAA0tC,EAAA,cAGF1tC,mCAHQA,MAAA,GAAAA,MAAA,cAAA2tC,EAAAnB,OAAA,KAAAmB,EAAAnB,OAAAS,OAAA,MAAAU,EAAAnB,OAAA,KAAAmB,EAAAnB,OAAAU,KAAA,4BANVltC,MAAA,WAAAA,CAAyG,cAC1DA,MAAA,GAAoBA,QACjEA,MAAA,cAGAA,MAAA,EAAA4tC,EAAA,cAKF5tC,6DAT+CA,MAAA,GAAAA,MAAA0U,EAAA,gBAEtC1U,MAAA,GAAAA,MAAA,oBAAA2tC,EAAA,KAAAA,EAAAP,WAAA,MAAAO,EAAA,KAAAA,EAAAN,UAEwBrtC,MAAA,GAAAA,MAAA,OAAA2gC,EAAA4L,YAAAe,OAAA3M,EAAA4L,YAAAc,QAAA,4BAY7BrtC,MAAA,SACEA,MAAA,GACFA,yCADEA,MAAA,GAAAA,MAAA,IAAA0U,EAAA,mDAFJ1U,MAAA,YACEA,MAAA,EAAA6tC,EAAA,cAGF7tC,mCAHQA,MAAA,GAAAA,MAAA,cAAA8tC,EAAAtB,OAAA,KAAAsB,EAAAtB,OAAAS,OAAA,MAAAa,EAAAtB,OAAA,KAAAsB,EAAAtB,OAAAU,KAAA,4BANVltC,MAAA,WAAAA,CAAwG,cAC1DA,MAAA,GAAmBA,QAC/DA,MAAA,cAGAA,MAAA,EAAA+tC,EAAA,cAKF/tC,6DAT8CA,MAAA,GAAAA,MAAA0U,EAAA,eAErC1U,MAAA,GAAAA,MAAA,oBAAA8tC,EAAA,KAAAA,EAAAV,WAAA,MAAAU,EAAA,KAAAA,EAAAT,UAEwBrtC,MAAA,GAAAA,MAAA,OAAAguC,EAAAzB,YAAAe,OAAAU,EAAAzB,YAAAc,QAAA,6BAzEvCrtC,MAAA,YAAAA,CAAgC,WAAhCA,CAAgC,WAAhCA,CAAgC,cAGmBA,MAAA,UAAIA,QACjDA,MAAA,cACAA,MAAA,EAAAiuC,EAAA,cAQFjuC,QACAA,MAAA,EAAAkuC,GAAA,wCAYFluC,QAEAA,MAAA,WAAAA,CAA0B,YAA1BA,CAA0B,YAEQA,MAAA,IAAuBA,QACrDA,MAAA,GAAAmuC,EAAA,cAWAnuC,MAAA,GAAAouC,EAAA,cAWFpuC,QAEAA,MAAA,YAAAA,CAAgC,YACDA,MAAA,IAAqBA,QAClDA,MAAA,GAAAquC,EAAA,cAWAruC,MAAA,GAAAsuC,EAAA,cAWFtuC,UAGFA,MAAA,YAAAA,CAA0B,eACgBA,MAAA,IAAsBA,QAC9DA,MAAA,kBACFA,0DArFIA,MAAA,YAAAuuC,EAAAhC,aAIkFvsC,MAAA,GAAAA,MAAA,qBAAAulC,EAAAgJ,EAAAhC,YAAArhC,IAAA,eAAAq6B,EAAA6H,WAAA,OAAA7H,EAAAgJ,EAAAhC,YAAArhC,IAAA,eAAAq6B,EAAA8H,UACvBrtC,MAAA,GAAAA,MAAA,OAAAuuC,EAAAhC,YAAAe,OAAAiB,EAAAhC,YAAAc,SAS9CrtC,MAAA,GAAAA,MAAA,OAAAA,MAAA,KAAAuuC,EAAArvC,eAAAK,eAgBiBS,MAAA,GAAAA,MAAA0U,EAAA,mBACG1U,MAAA,GAAAA,MAAA,OAAAuuC,EAAAhC,YAAArhC,IAAA,kBAWAlL,MAAA,GAAAA,MAAA,OAAAuuC,EAAAhC,YAAArhC,IAAA,iBAcJlL,MAAA,GAAAA,MAAA0U,EAAA,iBACI1U,MAAA,GAAAA,MAAA,OAAAuuC,EAAAhC,YAAArhC,IAAA,gBAWAlL,MAAA,GAAAA,MAAA,OAAAuuC,EAAAhC,YAAArhC,IAAA,eAeKlL,MAAA,GAAAA,MAAA0U,EAAA,6DAS5C1U,MAAA,gCAAyBA,MAAA,2BAAA+6B,GAAA/6B,MAAAwuC,GAAA,MAAAC,EAAAzuC,MAAA,UAAAA,MAAAyuC,EAAAtH,UAAApM,EAAA,EAAA/6B,CAAyB,yBAAA+6B,GAAA/6B,MAAAwuC,GAAA,MAAAE,EAAA1uC,MAAA,UAAkBA,MAAA0uC,EAAAC,oBAAA5T,GAA2B,EAAtE/6B,CAAyB,6BAAA+6B,GAAA/6B,MAAAwuC,GAAA,MAAAI,EAAA5uC,MAAA,UAAoEA,MAAA4uC,EAAAC,oBAAA9T,GAA2B,EAAxH/6B,CAAyB,0BAAAA,MAAAwuC,GAAA,MAAAM,EAAA9uC,MAAA,UAA4JA,MAAA8uC,EAAAC,cAAa,GAAE/uC,OAAA,0BAApMA,MAAA,YAAA+lC,EAAAoB,UAAAnnC,CAAyB,YAAA+lC,EAAAtnB,YAAAuwB,iBAAA,iFAxG5DhvC,MAAA,GAEEA,MAAA,UAAAA,CAA0B,UACuBA,MAAA,GAAyCA,QACxFA,MAAA,cAAuEA,MAAA,mBAAAA,MAAAivC,GAAA,MAAAC,EAAAlvC,QAAA,OAASA,MAAAkvC,EAAA95B,QAAO,GAAEpV,UAE3FA,MAAA,QAAAA,CAAwH,YAC7FA,MAAA,0BAAA+6B,GAAA/6B,MAAAivC,GAAA,MAAAE,EAAAnvC,QAAA,OAAAA,MAAAmvC,EAAAC,OAAArU,EAAA,GAEvB/6B,MAAA,SAAAA,CAAiC,SACjBA,MAAA,IAAoBA,QAClCA,MAAA,GAAAqvC,GAAA,uBAyFFrvC,QACAA,MAAA,UAAAA,CAAoC,UACpBA,MAAA,IAAuBA,QACrCA,MAAA,GAAAsvC,GAAA,qBAGFtvC,UAEFA,MAAA,YACFA,QACAA,MAAA,YAAAA,CAA0B,gBACwBA,MAAA,mBAAAA,MAAAivC,GAAA,MAAAM,EAAAvvC,QAAA,OAASA,MAAAuvC,EAAAn6B,QAAO,GAAEpV,MAAA,IAAcA,QAChFA,MAAA,gBAA8CA,MAAA,mBAAAA,MAAAivC,GAAA,MAAAO,EAAAxvC,QAAA,OAASA,MAAAwvC,EAAAC,OAAM,GAAEzvC,MAAA,IAAaA,UAKhFA,OAAA,mDAlHmDA,MAAA,GAAAA,MAAA0U,EAAA,QAAA1U,MAAA,GAAA28B,GAAAhnB,EAAA8I,YAAA/Z,SACP1E,MAAA,GAAAA,MAAA,aAAA0U,EAAA,UAErC1U,MAAA,GAAAA,MAAA,+BAAA2V,EAAAyV,eAAAskB,wBAAA/5B,EAAAg6B,WAAAC,OAAA,gBAEC5vC,MAAA,GAAAA,MAAA,cAAA2V,EAAAyV,eAAAskB,wBAAA/5B,EAAAg6B,WAAAC,OAAA,yBADqB5vC,MAAA,WAAA2V,EAAAy5B,QAEnBpvC,MAAA,GAAAA,MAAA,aAAA2V,EAAAk6B,MAAAC,SACY9vC,MAAA,GAAAA,MAAA0U,EAAAiB,EAAAk6B,MAAAC,UA2FZ9vC,MAAA,GAAAA,MAAA,aAAA2V,EAAAk6B,MAAAE,YACY/vC,MAAA,GAAAA,MAAA0U,EAAAiB,EAAAk6B,MAAAE,aAMQ/vC,MAAA,GAAAA,MAAA,eAAA2V,EAAAyV,eAAAskB,wBAAA/5B,EAAAg6B,WAAAC,OAAA,4BAArB5vC,MAAA,eAAAgwC,GAG6DhwC,MAAA,GAAAA,MAAA0U,EAAA,UACH1U,MAAA,GAAAA,MAAA0U,EAAA,UCxFnE,IAAKm7B,GAAL,SAAKA,GACHA,SAAAC,QAAA,cACAD,EAAAE,WAAA,kBAFGF,CAGL,CAHA,CAAKA,IAAK,IAaH,IAAMnxB,GAA6B,MAApC,MAAOA,EAePixB,iBAAe,OAAOA,IAAY,CAClCE,YAAU,OAAOA,EAAO,CAE5B5wC,YAAoBgxC,EAAiC/D,EAC5C9gB,EAAwCkc,EAAsCnoC,GAC7EugB,GAA6CvJ,EAAiCjX,IAFpEG,KAAA4wC,UAAiC5wC,KAAA6sC,qBAC5C7sC,KAAA+rB,iBAAwC/rB,KAAAioC,gBAAsCjoC,KAAAF,UAC7EE,KAAAqgB,gBAA6CrgB,KAAA8W,QAAiC9W,KAAAH,kBAjBvEG,KAAA6J,cAAaC,OAAOC,OAGrC/J,KAAA6wC,gBAA0B,EAI1B7wC,KAAA8wC,cAAwB,GACxB9wC,KAAA2vC,kBAA4B,EAC5B3vC,KAAA8nC,UAA2B,GAC3B9nC,KAAA+vC,OAASS,GAAMC,OAO2G,CAE1Hj5B,WACExX,KAAKktC,YAAc,IAAIl2B,KAAU,CAC/B3R,MAAO,IAAIqS,KAAY1X,KAAKof,YAAY/Z,MAAO,CAAE0rC,aAAa,EAAMC,WAAY,CAACC,KAAW7D,YAC5F8D,QAAS,IAAIx5B,KAAY1X,KAAKof,YAAY8xB,QAAS,CAAEH,aAAa,EAAMC,WAAY,KACpFp7B,SAAU,IAAI8B,KAAY1X,KAAKof,YAAYxJ,SAAU,CAAEm7B,aAAa,EAAMC,WAAY,KACtFG,cAAe,IAAIz5B,KAAY1X,KAAKof,YAAY+xB,cAAe,CAAEJ,aAAa,EAAMC,WAAY,CAACC,KAAWrD,IAAI,GAAIqD,KAAWpD,IAAI,OACnIuD,aAAc,IAAI15B,KAAY1X,KAAKof,YAAYgyB,aAAc,CAAEL,aAAa,EAAMC,WAAY,CAACC,KAAWrD,IAAI,QAC9GyD,YAAa,IAAI35B,KAAY1X,KAAKof,YAAYiyB,YAAa,CAAEN,aAAa,EAAMC,WAAY,CAACC,KAAWrD,IAAI,GAAIqD,KAAWpD,IAAI,OAC/HyD,WAAY,IAAI55B,KAAY1X,KAAKof,YAAYkyB,WAAY,CAAEP,aAAa,EAAMC,WAAY,CAACC,KAAWrD,IAAI,UAG5G5tC,KAAK2vC,iBAAmB3vC,KAAKof,YAAYuwB,iBAEzC3vC,KAAKktC,YAAYrhC,IAAI,UAAU0lC,aAAapxC,QAC1CgjC,KAAa,MAAG,EAChBC,QAAoB,EACpBj4B,KAAU2C,GAAQ9N,KAAK6sC,mBAAmBla,WAAW7kB,KAAK,EAC1D1B,KAAIolC,IACF,MAAMC,EAAiBzxC,KAAKktC,YAAYrhC,IAAI,UAAUvG,QAAUtF,KAAKof,YAAY/Z,OAC5EmsC,GAAUC,EACbzxC,KAAKktC,YAAYrhC,IAAI,UAAU6lC,UAAU,MAEzC1xC,KAAKktC,YAAYrhC,IAAI,UAAU6lC,UAAU,CAACrE,eAAe,IAE3DrtC,KAAK8W,MAAMa,cAAY,IACxB,EACD1K,MAAmBjN,KAAK6J,aACtBwB,YAEJrL,KAAK8nC,UAAUv6B,KAAKvN,KAAKqgB,aAAaI,UAAUzgB,KAAKqgB,aAAa2C,yBAAyBhjB,KAAKof,YAAY9G,MACvGtY,KAAKof,YAAYwW,OAA2C,IAAlC51B,KAAKof,YAAYwW,MAAM/zB,OAKpD7B,KAAK8nC,UAAUv6B,QAASvN,KAAKof,YAAYwW,MAAOv1B,IAAIsxC,GAAO3xC,KAAKqgB,aAAamC,qBAAqBmvB,EAAI1yB,aAJtGjf,KAAK6sC,mBAAmBhb,aAAa7xB,KAAKof,YAAY9G,IAAIjN,UAAUuqB,IAClE51B,KAAK8nC,UAAUv6B,QAASqoB,EAAOv1B,IAAIsxC,GAAO3xC,KAAKqgB,aAAamC,qBAAqBmvB,EAAI1yB,YAAW,EAKtG,CAEAlJ,QACE/V,KAAK4wC,QAAQgB,aAAQxjC,EACvB,CAEAgiC,OACE,GAA4C,KAAxCpwC,KAAKktC,YAAY5nC,MAAMD,MAAM8yB,OAAe,OAEhD,MAAMtrB,EAAQ,IAAI7M,KAAKktC,YAAY5nC,MAAO2d,cAAejjB,KAAKof,YAAY9G,GAAIq3B,iBAAkB3vC,KAAK2vC,kBACrG9iC,EAAMskC,cAAgBtkC,EAAMskC,eAAiB,EAC7CtkC,EAAMukC,aAAevkC,EAAMukC,cAAgB,EAC3CvkC,EAAMwkC,YAAcxkC,EAAMwkC,aAAe,EACzCxkC,EAAMykC,WAAazkC,EAAMykC,YAAc,EACvC,MAAMO,EAAO,CAAC7xC,KAAK6sC,mBAAmBp9B,OAAO5C,IAElB,KAAvB7M,KAAK8wC,eACPe,EAAKtkC,KAAKvN,KAAKioC,cAAchN,4BAA4Bj7B,KAAKof,YAAY9G,GAAItY,KAAK8wC,iBAAc,EAGnGgB,KAASD,GAAMxmC,UAAUyR,IACvB9c,KAAKof,YAAY/Z,MAAQwH,EAAMxH,MAC/BrF,KAAKof,YAAY8xB,QAAUrkC,EAAMqkC,QACjClxC,KAAKof,YAAYuwB,iBAAmB3vC,KAAK2vC,iBACzC3vC,KAAKof,YAAYxJ,SAAW/I,EAAM+I,SAClC5V,KAAK4wC,QAAQ76B,MAAM/V,KAAKof,aACxBpf,KAAKF,OAAOqY,WAAQ1X,MAAU,+BAA8B,EAEhE,CAEA6uC,oBAAoBr4B,GAClBjX,KAAK6wC,gBAAkB55B,EACvBjX,KAAK8W,MAAMi7B,eACb,CAEAvC,oBAAoB7sC,GAClB3C,KAAK8wC,cAAgBnuC,CACvB,CAEA+sC,cACE1vC,KAAK2vC,kBAAmB,CAC1B,EApGWtwB,SAA6B,mBAAA3e,iBAA7B2e,GAA6B1e,MAAAC,MAAAD,MAAAE,KAAAF,MAAAG,MAAAH,MAAAyB,KAAAzB,MAAAqY,MAAArY,MAAAqf,KAAArf,mBAAAsf,KAAA,EAA7BZ,EAA6B,UAAAwC,EAAArJ,IAAA,MAA7B6G,EAA6B5G,UAAA,kCAAA4mB,OAAA,CAAAjgB,YAAA,eAAAqc,YAAA,EAAA8D,SAAA,CAAA5+B,OAAA6+B,MAAA,EAAAC,KAAA,EAAAC,OAAA,48EAAAC,SAAA,SAAAhnB,EAAAC,GAAA,EAAAD,GDrC1ChY,MAAA,EAAAqxC,GAAA,6BAAiCrxC,MAAA,0DCmCrBsxC,KAAQC,KAAYC,KAAgBC,KAAYC,KAAet5B,KAAmBmH,uCAAEwkB,KAAM4N,KAAYC,KAAkBxK,IAA4ByK,KAAcC,KAAWt5B,MAAkBC,OAAA,uDAAAE,gBAAA,IAE9L+F,CAA6B,uGCrC9BqzB,EAAZ,SAAYA,GACRA,WAAAC,KAAA,UACAD,IAAAE,QAAA,aACAF,IAAAG,QAAA,aAHQH,CAIZ,CAJA,CAAYA,GAAe,8ECGnB/xC,MAAA,GACIA,MAAA,SAAAA,CAAoE,SAC3DA,MAAA,OAA6BA,QAClCA,MAAA,GACJA,QACJA,6CAJqBA,MAAA,GAAAA,MAAA,UAAAA,MAAA,EAAA28B,EAAAwV,EAAA77B,QAAAX,EAAAy8B,cACLpyC,MAAA,GAAAA,MAAAmyC,EAAAE,MACRryC,MAAA,GAAAA,MAAA,IAAAmyC,EAAAztC,MAAA,MCcT,IAAM4tC,EAAoB,MAA3B,MAAOA,EAKXrzC,YAA6BkX,GAAA9W,KAAA8W,QAJpB9W,KAAAkzC,MAA6B,GAC7BlzC,KAAA+yC,YAAsB,CAGyB,EAL7CE,SAAoB,mBAAAvyC,iBAApBuyC,GAAoBtyC,aAAA,EAApBsyC,EAAoB,UAAA16B,EAAAC,IAAA,MAApBy6B,EAAoBx6B,UAAA,uBAAA4mB,OAAA,CAAA6T,MAAA,QAAAH,YAAA,eAAAtX,YAAA,EAAA8D,SAAA,CAAA5+B,OAAA6+B,MAAA,EAAAC,KAAA,EAAAC,OAAA,+HAAAC,SAAA,SAAAhnB,EAAAC,GAAA,EAAAD,IDnBjChY,MAAA,UAAAA,CAAsD,UAE9CA,MAAA,EAAAwyC,EAAA,sBAMJxyC,iBANmCA,MAAA,GAAAA,MAAA,UAAAiY,EAAAs6B,uBCY3Bp6B,KAAYlY,WAAAwY,OAAA,glDAAAE,gBAAA,IAKX25B,CAAoB,kBCpBrBG,EAAZ,SAAYA,GACRA,WAAAC,eAAA,oBACAD,IAAAE,cAAA,mBACAF,IAAAG,cAAA,mBACAH,IAAAI,aAAA,kBACAJ,IAAAK,iBAAA,sBACAL,IAAAM,UAAA,eACAN,IAAAO,gBAAA,qBACAP,IAAAQ,kBAAA,uBACAR,IAAAP,QAAA,aACAO,IAAAS,YAAA,iBAVQT,CAWZ,CAXA,CAAYA,GAAe,cCK3B,MAAMU,EAAW,2FAOV,IAAMC,EAAqB,MAA5B,MAAOA,EAJbn0C,cAMEI,KAAAD,oBAAmB+J,OAAOqN,MAE1BmkB,UAAU+O,GACR,OAAQA,EAAO2J,QACb,KAAKZ,EAAgBK,iBACnB,OAAOK,EAAW9zC,KAAKD,iBAAiBU,UAAU,+CACpD,KAAK2yC,EAAgBC,eACnB,OAAOS,EAAW9zC,KAAKD,iBAAiBU,UAAU,2CAA4C,CAACiI,OAAQ2hC,EAAO3hC,OAAQyL,QAASk2B,EAAO4J,SACxI,KAAKb,EAAgBM,UACnB,OAAOI,EAAW9zC,KAAKD,iBAAiBU,UAAU,uCACpD,KAAK2yC,EAAgBI,aACnB,OAAOM,EAAW9zC,KAAKD,iBAAiBU,UAAU,2CAA4C,CAACyzC,gBAAiB7J,EAAO6J,kBACzH,KAAKd,EAAgBO,gBACnB,OAAOG,EAAW9zC,KAAKD,iBAAiBU,UAAU,4CAA6C,CAAC0zC,WAAY,qBAAqB9J,EAAO5nC,oBAAoB4nC,EAAOhuB,6BAA6BguB,EAAO3hC,eACzM,KAAK0qC,EAAgBG,cACnB,OAAOO,EAAW9zC,KAAKD,iBAAiBU,UAAU,0CAA2C,CAACiI,OAAQ2hC,EAAO3hC,SAC/G,KAAK0qC,EAAgBE,cACnB,OAAOQ,EAAW9zC,KAAKD,iBAAiBU,UAAU,0CAA2C,CAACiI,OAAQ2hC,EAAO3hC,OAAQ4T,OAAQ+tB,EAAO/tB,SACtI,KAAK82B,EAAgBQ,kBACnB,OAAOE,EAAW9zC,KAAKD,iBAAiBU,UAAU,gDACpD,KAAK2yC,EAAgBP,QACnB,MA7BY,8FA6BS7yC,KAAKD,iBAAiBU,UAAU,0CAA2C,CAACiI,OAAQ2hC,EAAO3hC,OAAQ4T,OAAQ+tB,EAAO/tB,OAAQnI,QAASk2B,EAAO4J,SACjK,KAAKb,EAAgBS,YACnB,OAAOC,EAAW9zC,KAAKD,iBAAiBU,UAAU,yCAExD,EA3BWszC,SAAqB,mBAAArzC,iBAArBqzC,EAAqB,EAArBA,EAAqB,WAAAx7B,EAAAgjB,IAAA,+BAArBwY,EAAqBvY,MAAA,EAAAC,YAAA,IAArBsY,CAAqB,KCJrBK,EAAmB,MAA1B,MAAOA,EAJbx0C,cAMEI,KAAAD,oBAAmB+J,OAAOqN,MAE1BmkB,UAAU+O,GACR,OAAQA,GACN,KAAKqI,EAAgBG,QACnB,OAAO7yC,KAAKD,iBAAiBU,UAAU,kCACzC,KAAKiyC,EAAgBE,QACnB,OAAO5yC,KAAKD,iBAAiBU,UAAU,kCACzC,KAAKiyC,EAAgBC,KACnB,OAAO3yC,KAAKD,iBAAiBU,UAAU,kCAE7C,EAbW2zC,SAAmB,mBAAA1zC,iBAAnB0zC,EAAmB,EAAnBA,EAAmB,WAAA77B,EAAAgjB,IAAA,6BAAnB6Y,EAAmB5Y,MAAA,EAAAC,YAAA,IAAnB2Y,CAAmB,8ECK1BzzC,MAAA,WAAAA,CAA8D,OACzDA,MAAA,GAA2BA,QAC9BA,MAAA,aACEA,MAAA,oBACFA,oDAHGA,MAAA,GAAAA,MAAA0U,EAAA,uBACG1U,MAAA,GAAAA,MAAA,YAAAu9B,EAAAmW,WAAA,kFAaI1zC,MAAA,gFAAcA,MAAA,mBAAAqU,GAAArU,CAA4B,0BAAAA,MAAA,EAAAygC,EAAAkT,EAAAC,EAAAC,UAAA,yBAOtC7zC,MAAA,kEACIA,MAAA,YAAAA,MAAA,IAAAA,MAAA,mBAAAA,iCAJRA,MAAA,GACEA,MAAA,QAAIA,MAAA,GAAyBA,QAC7BA,MAAA,WACEA,MAAA,EAAA8zC,EAAA,aAGF9zC,QACFA,yDANMA,MAAA,GAAAA,MAAA0U,EAAA,qBAEsD1U,MAAA,GAAAA,MAAA,UAAA2zC,EAAAx3B,QAAA,4BAM1Dnc,MAAA,WAAAA,CAAwC,WAAxCA,CAAwC,YAGlCA,MAAA,UACFA,QACAA,MAAA,YACEA,MAAA,GACFA,UAEFA,MAAA,GACFA,yCAJMA,MAAA,GAAAA,MAAA,IAAA0U,EAAA,0BAGJ1U,MAAA,GAAAA,MAAA,IAAA0U,EAAA,iEAlBJ1U,MAAA,EAAA+zC,EAAA,uBAQA/zC,MAAA,EAAAg0C,EAAA,0BAAAh0C,6CAReA,MAAA,OAAA2zC,EAAAx3B,QAAAjb,OAAA,EAAAlB,CAAkC,WAAAi0C,EAAA,yBANrDj0C,MAAA,GACEA,MAAA,EAAAk0C,GAAA,sBAIAl0C,MAAA,EAAAm0C,EAAA,sBAuBFn0C,mCA7BFA,MAAA,eACEA,MAAA,EAAAo0C,EAAA,sBA6BFp0C,mCA7BiBA,MAAA,GAAAA,MAAA,OAAA4zC,EAAAS,gBAAA,4BANvBr0C,MAAA,GACEA,MAAA,OAAGA,MAAA,GAA6BA,QAChCA,MAAA,WAAAA,CAAqB,2BAGjBA,MAAA,EAAAs0C,EAAA,oBA+BFt0C,UAEJA,kDArCKA,MAAA,GAAAA,MAAA0U,EAAA,yBAIsC1U,MAAA,GAAAA,MAAA,UAAAuuC,EAAAgG,eAAA,2BA2C/Bv0C,MAAA,gFAAcA,MAAA,mBAAAqU,GAAArU,CAA4B,0BAAAA,MAAA,EAAAygC,EAAA+T,EAAAC,EAAAZ,UAAA,kEAI1C7zC,MAAA,2DAAcA,MAAA,mBAAA8hC,EAAA9hC,CAAgC,0BAAAA,MAAA,EAAA00C,EAAAF,GAAA,yBANlDx0C,MAAA,GACEA,MAAA,EAAA20C,EAAA,sBAIA30C,MAAA,EAAA40C,EAAA,sBAGF50C,mCATFA,MAAA,eACEA,MAAA,EAAA60C,EAAA,sBASF70C,mCATiBA,MAAA,GAAAA,MAAA,OAAAy0C,EAAAK,cAAA,6BANvB90C,MAAA,GACEA,MAAA,WAAAA,CAAqB,OAChBA,MAAA,GAA4BA,QAE/BA,MAAA,2BACEA,MAAA,EAAA+0C,EAAA,oBAWF/0C,UAEJA,kDAhBOA,MAAA,GAAAA,MAAA0U,EAAA,wBAGoC1U,MAAA,GAAAA,MAAA,UAAA+lC,EAAAwO,eAAA,4BAqB/Bv0C,MAAA,gFAAcA,MAAA,mBAAAqU,GAAArU,CAA4B,0BAAAA,MAAA,EAAAygC,EAAAuU,EAAAC,EAAApB,UAAA,4BAI1C7zC,MAAA,2DAAcA,MAAA,mBAAA8hC,EAAA9hC,CAAgC,0BAAAA,MAAA,EAAA00C,EAAAM,GAAA,0BANlDh1C,MAAA,GACEA,MAAA,EAAAk1C,GAAA,sBAIAl1C,MAAA,EAAAm1C,GAAA,sBAGFn1C,oCATFA,MAAA,eACEA,MAAA,EAAAo1C,GAAA,sBASFp1C,mCATiBA,MAAA,GAAAA,MAAA,OAAAi1C,EAAAI,gBAAA,6BAJvBr1C,MAAA,GACEA,MAAA,WAAAA,CAAqB,2BAEjBA,MAAA,EAAAs1C,GAAA,oBAWFt1C,UAEJA,+BAb2CA,MAAA,GAAAA,MAAA,UAAAogC,EAAAmU,eAAA,4BAkBzCv0C,MAAA,uFACIA,MAAA,eAAAu1C,EAAAC,MAAA,OAAAx1C,MAAA,IAAAA,MAAA,IAAAu1C,IAAA,GAAAv1C,MAAA,6BAFNA,MAAA,WACEA,MAAA,EAAAy1C,EAAA,aAEFz1C,iCAF0DA,MAAA,GAAAA,MAAA,UAAA01C,EAAAv5B,QAAA,4BAQtDnc,MAAA,aAA4EA,MAAA,GAAWA,mCAAXA,MAAA,GAAAA,MAAA21C,EAAA,4BAC5E31C,MAAA,aAAwEA,MAAA,GAAWA,mCAAXA,MAAA,GAAAA,MAAA21C,EAAA,4BACxE31C,MAAA,aAA4EA,MAAA,GAAWA,mCAAXA,MAAA,GAAAA,MAAA21C,EAAA,4BAJhF31C,MAAA,EAAAA,CAAmE,MAE/DA,MAAA,EAAA41C,EAAA,eACA51C,MAAA,EAAA61C,EAAA,eACA71C,MAAA,EAAA81C,EAAA,eACF91C,mDAJcA,MAAA,GAAAA,MAAA,WAAA+1C,EAAAv+B,SACLxX,MAAA,GAAAA,MAAA,eAAAg2C,EAAAjE,gBAAAG,SACAlyC,MAAA,GAAAA,MAAA,eAAAg2C,EAAAjE,gBAAAC,MACAhyC,MAAA,GAAAA,MAAA,eAAAg2C,EAAAjE,gBAAAE,QAAA,6BAGOjyC,MAAA,UAA8BA,MAAA,GAAuBA,sCAAvBA,MAAA,GAAAA,MAAA,MAAA+1C,EAAAE,QAAA,iCAPhDj2C,MAAA,EAAAk2C,EAAA,iDAOAl2C,MAAA,UAAMA,MAAA,GAAYA,MAAA,EAAAm2C,GAAA,cAA4Dn2C,+CAP/DA,MAAA,OAAAA,MAAA,IAAA+1C,EAAAv+B,UAOTxX,MAAA,GAAAA,MAAAo2C,GAAmBp2C,MAAA,GAAAA,MAAA,OAAA+1C,EAAAE,QAAA,2CAlH/Bj2C,MAAA,GAEEA,MAAA,UAAAA,CAA0B,UACuBA,MAAA,gBAAUA,QACzDA,MAAA,cAA2DA,MAAA,mBAAAA,MAAAq2C,GAAA,MAAAC,GAAAt2C,QAAA,OAASA,MAAAs2C,GAAAlhC,QAAO,GAAEpV,UAE/EA,MAAA,UAAAA,CAAyC,WAErCA,MAAA,wBACFA,QAGAA,MAAA,SACEA,MAAA,EAAAu2C,EAAA,aAOAv2C,MAAA,GAAAw2C,EAAA,sBAwCAx2C,MAAA,GAAAy2C,GAAA,sBAoBAz2C,MAAA,GAAA02C,GAAA,sBAiBF12C,QAEAA,MAAA,GAAA22C,GAAA,yBAAA32C,OAOAA,MAAA,GAAA42C,GAAA,0BAAA52C,OAYFA,QACAA,MAAA,YAAAA,CAA0B,WACsKA,MAAA,WAAIA,QAClMA,MAAA,gBAAgDA,MAAA,mBAAAA,MAAAq2C,GAAA,MAAAQ,GAAA72C,QAAA,OAASA,MAAA62C,GAAAzhC,QAAO,GAAEpV,MAAA,IAAcA,QAChFA,MAAA,gBAA8CA,MAAA,mBAAAA,MAAAq2C,GAAA,MAAAS,GAAA92C,QAAA,OAASA,MAAA82C,GAAAC,WAAU,GAAoC/2C,MAAA,IAAaA,QAClHA,MAAA,gBAA8CA,MAAA,mBAAAA,MAAAq2C,GAAA,MAAAW,GAAAh3C,QAAA,OAASA,MAAAg3C,GAAAC,WAAU,GAAoCj3C,MAAA,IAAsBA,UAK/HA,OAAA,wCAxHwBA,MAAA,GAAAA,MAAA,QAAA2V,EAAA48B,MAAAvyC,CAAe,cAAA2V,EAAAuhC,kBAKXl3C,MAAA,GAAAA,MAAA,OAAA2V,EAAAuhC,mBAAAvhC,EAAAwhC,KAAA3lC,QAOPxR,MAAA,GAAAA,MAAA,OAAA2V,EAAAuhC,mBAAAvhC,EAAAwhC,KAAAC,UAwCAp3C,MAAA,GAAAA,MAAA,OAAA2V,EAAAuhC,mBAAAvhC,EAAAwhC,KAAAE,QAoBAr3C,MAAA,GAAAA,MAAA,OAAA2V,EAAAuhC,mBAAAvhC,EAAAwhC,KAAAG,UAyCiDt3C,MAAA,GAAAA,MAAA0U,EAAA,UACC1U,MAAA,GAAAA,MAAA,YAAA2V,EAAA4hC,qBAAkCv3C,MAAA,GAAAA,MAAA0U,EAAA,SAClC1U,MAAA,GAAAA,MAAA,YAAA2V,EAAA6hC,qBAAkCx3C,MAAA,GAAAA,MAAA0U,EAAAiB,EAAA8hC,iBAAA,EChGzG,IAAKN,GAAL,SAAKA,GACHA,WAAA3lC,OAAA,YACA2lC,IAAAC,SAAA,cACAD,IAAAE,OAAA,YACAF,IAAAG,SAAA,cAJGH,CAKL,CALA,CAAKA,IAAI,IAmBF,IAAMO,GAAuB,MAA9B,MAAOA,EA4BP/H,iBAAe,OAAOA,IAAY,CAClCwH,WAAS,OAAOA,EAAM,CACtBpF,sBAAoB,OAAOA,CAAiB,CAE5C0F,sBACF,OAAOp4C,KAAK63C,kBACV,KAAKC,GAAKE,OACR,MAAO,SACT,KAAKF,GAAKG,SACR,MAAO,UACT,QACE,MAAO,OAEb,CAEAr4C,YAAoBgxC,EAAiC/D,EAC5C9gB,GAAiDjV,GAChDhX,IAFUE,KAAA4wC,UAAiC5wC,KAAA6sC,qBAC5C7sC,KAAA+rB,kBAAiD/rB,KAAA8W,SAChD9W,KAAAF,UAzCVE,KAAAD,oBAAmB+J,OAAOqN,MAE1BnX,KAAAs4C,kBAAoB,IAAI5gC,UAAqCtJ,EAAW,CACtEmqC,KAAqBC,OAAO,CAAC,WAG/Bx4C,KAAAq0C,WAAa,IAAIr9B,KAAU,CACzBhO,MAAOhJ,KAAKs4C,oBAGdt4C,KAAAy4C,WAAqB,EAErBz4C,KAAAkzC,MAA6B,CAC3B,CAAC7tC,MAAOrF,KAAKD,iBAAiBU,UAAU,gCAAiCwW,MAAO6gC,GAAK3lC,OAAQ49B,QAAQ,EAAMiD,KAAM,6BACjH,CAAC3tC,MAAOrF,KAAKD,iBAAiBU,UAAU,sCAAuCwW,MAAO6gC,GAAKC,SAAUhI,QAAQ,EAAOiD,KAAM,2BAC1H,CAAC3tC,MAAOrF,KAAKD,iBAAiBU,UAAU,iCAAkCwW,MAAO6gC,GAAKE,OAAQjI,QAAQ,EAAOiD,KAAM,qBACnH,CAAC3tC,MAAOrF,KAAKD,iBAAiBU,UAAU,uCAAwCwW,MAAO6gC,GAAKG,SAAUlI,QAAQ,EAAOiD,KAAM,4BAE7HhzC,KAAA63C,iBAAmB73C,KAAKkzC,MAAM,GAAGj8B,MAEjCjX,KAAAk1C,eAAkC,GAClCl1C,KAAA04C,YAA+B,EAoBG,CAElC3iC,QACE/V,KAAK4wC,QAAQ76B,OACf,CAEA6hC,WACE,GAAI53C,KAAK63C,mBAAqBC,GAAK3lC,QAAWnS,KAAK24C,iBAGnD,OADA34C,KAAKy4C,WAAY,EACTz4C,KAAK63C,kBACX,KAAKC,GAAK3lC,OACR,MAAMnJ,EAAQhJ,KAAKq0C,WAAWxoC,IAAI,UAAUvG,MAC5C,IAAK0D,EAEH,YADAhJ,KAAKF,OAAOU,MAAMR,KAAKD,iBAAiBU,UAAU,gCAIpD,IAAImb,EAAQ,GACZ,QAAS7G,GAAI,EAAGA,GAAI/L,EAAMnH,OAAQkT,KAAK,CACrC,MAAM6jC,GAAW,IAAIC,SACnBD,GAASE,OAAO,MAAO9vC,EAAM+L,KAC7B6jC,GAASE,OAAO,UAAU,EAAO,IACjCl9B,EAAMrO,KAAKvN,KAAK6sC,mBAAmBja,YAAYgmB,IAAS,EAE5D9G,OAASl2B,GAAOvQ,UAAUyR,KACxB9c,KAAKk1C,eAAiB,GACtBp4B,GAAQnI,QAAQokC,KACd/4C,KAAKk1C,eAAe3nC,KAAK,CACvBinC,SAAUuE,GAAUvE,SACpBQ,gBAAiB+D,GACjBtD,mBAAernC,EACf4nC,qBAAiB5nC,GAClB,GAGHpO,KAAKk1C,eAAiBl1C,KAAKk1C,eAAejtC,KAAK,CAACC,GAAGC,KAAMA,GAAE6sC,gBAAiB78B,QAAUjQ,GAAE8sC,gBAAiB78B,SACzGnY,KAAK8W,MAAMa,eAEX3X,KAAK63C,mBACL73C,KAAKy4C,WAAY,EACjBz4C,KAAK8W,MAAMa,cAAY,GAEzB,MACF,KAAKmgC,GAAKC,SACR/3C,KAAK04C,YAAc14C,KAAKk1C,eAAexzC,OAAOwV,IAAQA,GAAK89B,iBAAiB78B,UAAYu6B,EAAgBC,MACxG3yC,KAAKk1C,eAAiBl1C,KAAKk1C,eAAexzC,OAAOwV,IAAQA,GAAK89B,iBAAiB78B,SAAWu6B,EAAgBC,MAC1G3yC,KAAKg5C,SACL,MACF,KAAKlB,GAAKE,OACRh4C,KAAK04C,YAAYnrC,QAAQvN,KAAKk1C,eAAexzC,OAAOwV,IAAQA,GAAKu+B,eAAet9B,UAAYu6B,EAAgBC,OAC5G3yC,KAAKk1C,eAAiBl1C,KAAKk1C,eAAexzC,OAAOwV,IAAQA,GAAKu+B,eAAet9B,SAAWu6B,EAAgBC,MACxG3yC,KAAKi5C,SACL,MACF,KAAKnB,GAAKG,SAERj4C,KAAKq0C,WAAWxoC,IAAI,UAAUuJ,cAAShH,GACvCpO,KAAK63C,iBAAmBC,GAAK3lC,OAC7BnS,KAAKy4C,WAAY,EACjBz4C,KAAKk1C,eAAiB,GACtBl1C,KAAK04C,YAAc,GACnB14C,KAAK8W,MAAMa,eAGjB,CAEA+/B,WACM13C,KAAK63C,mBAAqBC,GAAK3lC,QACnCnS,KAAK63C,kBACP,CAEAM,oBACE,OAAQn4C,KAAK63C,kBACX,KAAKC,GAAK3lC,OACR,OAAOnS,KAAK24C,iBACd,KAAKb,GAAKC,SACR,OAAO/3C,KAAKk1C,eAAexzC,OAAOwV,GAAQA,EAAK89B,iBAAiB78B,SAAWu6B,EAAgBC,MAAM9wC,OAAS,EAC5G,KAAKi2C,GAAKE,OACR,OAAOh4C,KAAKk1C,eAAexzC,OAAOwV,GAAQA,EAAKu+B,eAAet9B,SAAWu6B,EAAgBC,MAAM9wC,OAAS,EAC1G,KAAKi2C,GAAKG,SACR,OAAO,EACT,QACE,OAAO,EAEb,CAEAC,oBACE,OAAQl4C,KAAK63C,kBACX,KAAKC,GAAK3lC,OACV,KAAK2lC,GAAKG,SACR,OAAO,EACT,QACE,OAAO,EAEb,CAGAU,iBACE,MAAM3vC,EAAQhJ,KAAKq0C,WAAWxoC,IAAI,UAAUvG,MAC5C,QAAI0D,GAAcA,EAAMnH,OAAS,CAEnC,CAGAm3C,SACE,MAAME,EAA4Bl5C,KAAKk1C,eAAe70C,IAAI84C,IAAKA,GAAE3E,UAC3DxrC,GAAShJ,KAAKq0C,WAAWxoC,IAAI,UAAUvG,OAAS,IAAI5D,OAAO+hC,IAAKyV,EAA0B3tC,SAASk4B,GAAE31B,OAE3G,IAAI8N,GAAQ,GACZ,QAAS7G,GAAI,EAAGA,GAAI/L,EAAMnH,OAAQkT,KAAK,CACrC,MAAM6jC,GAAW,IAAIC,SACnBD,GAASE,OAAO,MAAO9vC,EAAM+L,KAC7B6jC,GAASE,OAAO,SAAU,QAC1Bl9B,GAAMrO,KAAKvN,KAAK6sC,mBAAmB/Z,UAAU8lB,IAAS,EAE1D9G,OAASl2B,IAAOvQ,UAAUyR,KACtBA,GAAQnI,QAAQokC,KAChB,MAAM9hC,GAAQjX,KAAKk1C,eAAekE,UAAUD,IAAKA,GAAE3E,WAAauE,GAAUvE,UAC1Ex0C,KAAKk1C,eAAej+B,IAAOw+B,cAAgBsD,KAE7C/4C,KAAKk1C,eAAiBl1C,KAAKk1C,eAAejtC,KAAK,CAACC,GAAGC,KAAMA,GAAEstC,cAAet9B,QAAUjQ,GAAEutC,cAAet9B,SAErGnY,KAAKy4C,WAAY,EACjBz4C,KAAK63C,mBACL73C,KAAK8W,MAAMa,cAAY,EAE3B,CAEAshC,SACE,MAAMC,EAA4Bl5C,KAAKk1C,eAAe70C,IAAI84C,IAAKA,GAAE3E,UAC3DxrC,GAAShJ,KAAKq0C,WAAWxoC,IAAI,UAAUvG,OAAS,IAAI5D,OAAO+hC,IAAKyV,EAA0B3tC,SAASk4B,GAAE31B,OAE3G,IAAI8N,GAAQ,GACZ,QAAS7G,GAAI,EAAGA,GAAI/L,EAAMnH,OAAQkT,KAAK,CACrC,MAAM6jC,GAAW,IAAIC,SACrBD,GAASE,OAAO,MAAO9vC,EAAM+L,KAC7B6jC,GAASE,OAAO,SAAU,SAC1Bl9B,GAAMrO,KAAKvN,KAAK6sC,mBAAmB/Z,UAAU8lB,IAAS,EAExD9G,OAASl2B,IAAOvQ,UAAUyR,KACxBA,GAAQnI,QAAQokC,KACd,MAAM9hC,GAAQjX,KAAKk1C,eAAekE,UAAUD,IAAKA,GAAE3E,WAAauE,GAAUvE,UAC1Ex0C,KAAKk1C,eAAej+B,IAAO++B,gBAAkB+C,KAG/C/4C,KAAKy4C,WAAY,EACjBz4C,KAAK63C,mBACL73C,KAAKF,OAAOqY,QAAQnY,KAAKD,iBAAiBU,UAAU,iCACpDT,KAAK8W,MAAMa,cAAY,EAE3B,EAnMW0gC,SAAuB,mBAAA33C,iBAAvB23C,GAAuB13C,MAAAC,MAAAD,MAAAE,KAAAF,MAAAG,MAAAH,mBAAAyB,MAAA,EAAvBi2C,EAAuB,UAAA9/B,EAAAC,IAAA,MAAvB6/B,EAAuB5/B,UAAA,2BAAAC,UAAA,SAAAC,EAAAC,MAAA,EAAAD,ktDD9CpChY,MAAA,EAAA04C,EAAA,6BAAiC14C,MAAA,mDCqCrBmY,KAAYE,yBACpBsgC,KAAgBt5B,KAChBu5B,KAAkB34C,oBAClBmrC,IACAgI,EAAuBh7B,KAAmBkH,wBAAEgzB,EAAsBmB,EAAyCj7B,MAAkBC,OAAA,0gBAAAE,gBAAA,IAKpH++B,CAAuB,sECzC7B,MAAMmB,EAAQ,IAAIC,MAAsB,SAEzC,SAAUC,IACd,OAAOC,QACT,+JC0BM,SAAUC,EAASC,GACrB,OAAQC,GACNA,EAAO35C,QACLqa,KAAK,CAACu/B,EAAoBpvC,IAxBhC,SAASqvC,EACPrvC,GAEA,OACEA,EAAMqT,OAASi8B,KAAc7zB,kBAC7Bzb,EAAMqT,OAASi8B,KAAcC,cAEjC,CAkBcF,CAAoBrvC,GACf,CACLwvC,SAAUxvC,EAAMyvC,MACZx2B,KAAKC,MAAO,IAAMlZ,EAAM0vC,OAAU1vC,EAAMyvC,OACxCL,EAASI,SACb33C,MAAO,cACPg3B,QAAS,KACT6gB,OAAQ1vC,EAAM0vC,OACdD,MAAOzvC,EAAMyvC,OArC3B,SAASE,EAAkB3vC,GACzB,OAAOA,EAAMqT,OAASi8B,KAAcM,QACtC,CAsCcD,CAAe3vC,IACbkvC,GAASlvC,EAAM0d,MACjBwxB,EAAMlvC,EAAM0d,KAAMmyB,EAAY7vC,EAAM8vC,QAAS,KAExC,CACLN,SAAU,IACV33C,MAAO,OACPg3B,QAAS7uB,EAAM0d,KACf/E,SAAUk3B,EAAY7vC,EAAM8vC,QAAS,MAGlCV,EAET,CAACv3C,MAAO,UAAW23C,SAAU,EAAG3gB,QAAS,OAGjD,CAGF,SAASghB,EAAYC,EAAsBC,GAEvC,IAAIp3B,GADYm3B,EAAQ5uC,IAAI,wBAA0B,IAAIjJ,MAAM,KAC1C,GAAGigB,QAAQ,YAAa,IAAIA,QAAQ,MAAO,IAAIsV,OACrE,GAAI7U,EAASqX,WAAW,cAAgBrX,EAASqX,WAAW,oBAAqB,CAC/E,MAAMggB,EAAMr3B,EAASV,UAAUU,EAASyL,YAAY,KAAMzL,EAASzhB,QACnE,MAAoB,KAAhB64C,EACKA,EAAcC,EAEhBr3B,EAAST,QAAQ,UAAW,IAAIA,QAAQ,YAAa,GAAE,CAGhE,OAAOS,CACT,8FCxDK,MAAMs3B,EAAgB,IAEvBC,EAAY,IAAI9P,IA8Bf,IAAM+P,EAAe,MAAtB,MAAOA,EAaXl7C,YAAoB8J,EAAgCkQ,EAC3Bw2B,EAAqBvwC,GAD1BG,KAAA0J,aAAgC1J,KAAA4Z,iBAC3B5Z,KAAAowC,OAAqBpwC,KAAAH,iBAZtCG,KAAAgK,QAAUC,IAAYC,OAIvBlK,KAAA+6C,aAAe,UAEd/6C,KAAAg7C,gBAAoD,IAAI5zB,IAAiC,IAC1FpnB,KAAAi7C,iBAAmBj7C,KAAKg7C,gBAAgB1wC,eAE9BtK,KAAA6J,cAAaC,OAAOC,MAG2C,CAS/EmxC,iBAAiBC,EAAwCC,GACxD,OAAQD,GACN,IAAK,SACH,OAAQC,EAA0BttC,KACpC,IAAK,SACH,OAAQstC,EAA0BnH,OAAS,GAC7C,IAAK,UACH,OAAQmH,EAA2BnH,OACrC,IAAK,WAEL,IAAK,OACH,MAAO,GAEb,CASA2F,SAASyB,EAAgCC,EAAwBnoC,GAA4C,IAAAkH,EAAAra,KAC3G,IAAIu7C,EACAC,EACJ,OAAQH,GACN,IAAK,SACHE,EAAgBv7C,KAAKy7C,mBAAoBH,EAAkBhjC,IAC3DkjC,EAAex7C,KAAK07C,eAAeJ,GACnC,MACF,IAAK,SACHC,EAAgBv7C,KAAK27C,mBAAoBL,EAAkBhjC,IAC3DkjC,EAAex7C,KAAK47C,eAAeN,GACnC,MACF,IAAK,UACHC,EAAgBv7C,KAAK67C,oBAAqBP,EAAmBhjC,IAC7DkjC,EAAex7C,KAAK87C,gBAAgBR,GACpC,MACF,IAAK,WACHC,KAAgBz4C,MAAG,GACnB04C,EAAex7C,KAAK+7C,kBAAkBT,GACtC,MACF,IAAK,OACHC,KAAgBz4C,MAAG,GACnB04C,EAAex7C,KAAKg8C,eACpB,MACF,QACE,OAIJh8C,KAAKH,eAAeK,aAAaC,QAAKC,KAAK,IAAC,EAAG+K,KAAU7K,IACnDA,IAAQA,GAAKsN,YAAYquC,sBACpBV,KAEFz4C,MAAG,KACX,EAAGqI,KAAS,eAAAouB,MAAAjf,KAAC,UAAOW,IACnB,aAAaZ,EAAK6hC,YAAYjhC,GAAMogC,EACtC,GAAC,gBAAArhB,IAAA,OAAAT,GAAAU,MAAAj6B,KAAAk6B,UAAA,EAFY,KAGX/5B,QAAKuB,KAAOy6C,IACLA,KACR,EAAGhxC,KAAU,IACLqwC,EAAar7C,QAClBiM,KAAKoI,KACCrB,GAAUA,EAASqB,GAAC,IACzB,EACD+1B,KAAW9e,IACW,QAAbA,GAAIjpB,QACZ,EACD45C,KAAS,KACHjpC,GAAUA,OAAS/E,EAAS,MAErC,EAAGnB,MAAmBjN,KAAK6J,aAC1BwB,UAAU,OACd,CAEQowC,mBAAmBp/B,GACzB,OAAOrc,KAAK0J,WAAWmC,IAAY7L,KAAKgK,QAAU,iCAAmCqS,EACvF,CAEQs/B,mBAAmB9+B,GACzB,OAAO7c,KAAK0J,WAAWmC,IAAY7L,KAAKgK,QAAU,iCAAmC6S,EACvF,CAEQg/B,oBAAoB58B,GAC1B,OAAOjf,KAAK0J,WAAWmC,IAAY7L,KAAKgK,QAAU,mCAAqCiV,EACzF,CAEQ+8B,eACN,MAAMK,EAAe,OACfC,EAAWt8C,KAAKk7C,iBAAiBmB,OAAcjuC,GACrD,OAAOpO,KAAK0J,WAAWmC,IAAI7L,KAAKgK,QAAU,cACxC,CAAC0nB,QAAS,SAAUuO,aAAc,OAAQsc,gBAAgB,IAC1Dp8C,QACAq8C,KAAa5B,EAAe6B,IAAgB,CAAEC,SAAS,EAAMC,UAAU,IACvE/C,EAAS,CAACgD,EAAMt5B,KACdtjB,KAAKowC,KAAKwM,EAAMC,mBAAmBv5B,GAAS,IAC7C,EACDlX,KAAKoI,GAAMxU,KAAK88C,oBAAoBtoC,EAAG6nC,EAAcC,KAAS,EAC9DF,KAAS,IAAMp8C,KAAK+8C,sBAAsBV,EAAcC,IAE5D,CAEQZ,eAAehzC,GACrB,MAAM2zC,EAAe,SACfC,EAAWt8C,KAAKk7C,iBAAiBmB,EAAc3zC,GACrD,OAAO1I,KAAK0J,WAAWmC,IAAI7L,KAAKgK,QAAU,4BAA8BtB,EAAO4P,GAC7D,CAACoZ,QAAS,SAAUuO,aAAc,OAAQsc,gBAAgB,IAClEp8C,QACAq8C,KAAa5B,EAAe6B,IAAgB,CAAEC,SAAS,EAAMC,UAAU,IACvE/C,EAAS,CAACgD,EAAMt5B,KACdtjB,KAAKowC,KAAKwM,EAAMC,mBAAmBv5B,GAAS,IAC7C,EACDlX,KAAKoI,GAAMxU,KAAK88C,oBAAoBtoC,EAAG6nC,EAAcC,KAAS,EAC9DF,KAAS,IAAMp8C,KAAK+8C,sBAAsBV,EAAcC,IAEpE,CAEQS,sBAAsB1B,EAAgC2B,GAC5D,IAAIC,EAASj9C,KAAKg7C,gBAAgBkC,WAClCD,EAASA,EAAOv7C,OAAOyb,KAAOA,EAAEk+B,aAAeA,GAAcl+B,EAAEggC,WAAaH,IAC5Eh9C,KAAKg7C,gBAAgBz4C,KAAK06C,EAC5B,CAEQH,oBAAoBtoC,EAAa6mC,EAAgC2B,GACvE,IAAIC,EAASj9C,KAAKg7C,gBAAgBkC,WAClC,GAAgB,YAAZ1oC,EAAEhS,MAAqB,CAEzB,GADcy6C,EAAO7D,UAAUj8B,GAAKA,EAAEk+B,aAAeA,GAAcl+B,EAAEggC,WAAaH,IACrE,EAAG,OAChBC,EAAO1vC,KAAK,CAAC8tC,WAAYA,EAAY8B,SAAUH,EAAgB7C,SAAU,GAAE,SACtD,gBAAZ3lC,EAAEhS,MAAyB,CACpC,MAAMyU,EAAQgmC,EAAO7D,UAAUj8B,GAAKA,EAAEk+B,aAAeA,GAAcl+B,EAAEggC,WAAaH,GAC9E/lC,GAAS,IACXgmC,EAAOhmC,GAAOkjC,SAAW3lC,EAAE2lC,cAER,SAAZ3lC,EAAEhS,QACXy6C,EAASA,EAAOv7C,OAAOyb,KAAOA,EAAEk+B,aAAeA,GAAcl+B,EAAEggC,WAAaH,KAE9Eh9C,KAAKg7C,gBAAgBz4C,KAAK06C,EAE5B,CAEQnB,gBAAgB3nC,GACtB,MAAMkoC,EAAe,UACfC,EAAWt8C,KAAKk7C,iBAAiBmB,EAAcloC,GACrD,OAAOnU,KAAK0J,WAAWmC,IAAI7L,KAAKgK,QAAU,8BAAgCmK,EAAQmE,GACtE,CAACoZ,QAAS,SAAUuO,aAAc,OAAQsc,gBAAgB,IAChEp8C,QACAq8C,KAAa5B,EAAe6B,IAAgB,CAAEC,SAAS,EAAMC,UAAU,IACvE/C,EAAS,CAACgD,EAAMt5B,KACdtjB,KAAKowC,KAAKwM,EAAMC,mBAAmBv5B,GAAS,IAC7C,EACDlX,KAAKoI,GAAMxU,KAAK88C,oBAAoBtoC,EAAG6nC,EAAcC,KAAS,EAC9DF,KAAS,IAAMp8C,KAAK+8C,sBAAsBV,EAAcC,IAEhE,CAEQV,eAAet/B,GACrB,MAAM+/B,EAAe,SACfC,EAAWt8C,KAAKk7C,iBAAiBmB,EAAc//B,GACrD,OAAOtc,KAAK0J,WAAWmC,IAAI7L,KAAKgK,QAAU,4BAA8BsS,EAAOhE,GAC7D,CAACoZ,QAAS,SAAUuO,aAAc,OAAQsc,gBAAgB,IAClEp8C,QACAq8C,KAAa5B,EAAe6B,IAAgB,CAAEC,SAAS,EAAMC,UAAU,IACvE/C,EAAS,CAACgD,EAAMt5B,KACdtjB,KAAKowC,KAAKwM,EAAMC,mBAAmBv5B,GAAS,IAC7C,EACDlX,KAAKoI,GAAMxU,KAAK88C,oBAAoBtoC,EAAG6nC,EAAcC,KAAS,EAC9DF,KAAS,IAAMp8C,KAAK+8C,sBAAsBV,EAAcC,IAEpE,CAEcJ,YAAYjhC,EAAcogC,GAA8B,IAAA1gC,EAAA3a,KAAA,SAAAsa,KAAA,YACpE,OAAQW,EAAON,EAAKogC,qBACZpgC,EAAKf,eAAegB,WAAQna,MAAU,+BAAgC,CAAC46C,WAAY,eAAiBA,EAAYpgC,KAAM4/B,EAAUvf,UAAUrgB,MAAU,EAFxF,EAGtE,CAEQ8gC,kBAAkBqB,GACxB,MAAMf,EAAe,WACfC,EAAWt8C,KAAKk7C,iBAAiBmB,EAAce,GAErD,OAAOp9C,KAAK0J,WAAWiD,KAAK3M,KAAKgK,QAAU,qBAAsB,CAACozC,aAChD,CAAC1rB,QAAS,SAAUuO,aAAc,OAAQsc,gBAAgB,IAClEp8C,QACAq8C,KAAa5B,EAAe6B,IAAgB,CAAEC,SAAS,EAAMC,UAAU,IACvE/C,EAAS,CAACgD,EAAMt5B,KACdtjB,KAAKowC,KAAKwM,EAAMC,mBAAmBv5B,GAAS,IAC7C,EACDlX,KAAKoI,GAAMxU,KAAK88C,oBAAoBtoC,EAAG6nC,EAAcC,KAAS,EAC9DF,KAAS,IAAMp8C,KAAK+8C,sBAAsBV,EAAcC,IAEpE,EAtNWxB,SAAe,mBAAAp6C,iBAAfo6C,GAAen6C,MAAAC,MAAAD,MAAAE,MAAAF,MAchB64C,KAAK74C,MAAAG,KAAA,EAdJg6C,EAAe,WAAAviC,EAAAvX,IAAA,OAAf85C,EAAe75C,QAAf65C,EAAe55C,UAAAC,WAFd,SAED25C,CAAe,8GC9C5B,MAAMuC,EAAiB,eACjBC,EAAgB,SAChBC,EAAa,WAMZ,IAAMC,EAAsB,MAA7B,MAAOA,EAET59C,YAAoB69C,EAA0Cp8C,GAA1CrB,KAAAy9C,kBAA0Cz9C,KAAAqB,QAAiB,CAE/Eq8C,YAAYrxB,EAAkB3qB,EAAqBqoB,EAA8BzkB,GAC7E,MAAMq4C,EAAsB,CACxBp0B,WAAa,CAACvpB,KAAKy9C,gBAAgB5zB,6BAA6BnoB,EAAQqoB,EAAYzkB,EAAQ,KAC5FkkB,YAAahkB,IAAkBC,GAC/BgkB,QAAS,GAGP9mB,EAAM3C,KAAK49C,gBAAgBvxB,EAAKvD,KAAK,KAAO,IAAK60B,GACvD,OAAO39C,KAAKqB,OAAOc,cAAcQ,EACrC,CAEAk7C,sBAAsBxxB,EAAkB3qB,EAAwBo8C,GAC5D,IAAIn7C,EAAM3C,KAAK49C,gBAAgBvxB,EAAKvD,KAAK,KAAO,IAAKpnB,GACrDiB,UAAOqC,OAAOC,KAAK64C,GAAaz9C,IAAI6+B,GAAK,IAAIA,KAAK4e,EAAY5e,MAAMpW,KAAK,IAClE9oB,KAAKqB,OAAOc,cAAcQ,EAAKm7C,EAC1C,CAOAC,sBAAsBC,EAAwBt8C,GAC1C,MAAM4sB,EAAS,SAAW0vB,EAAWC,YAAc,IAE7Ct7C,EAAM3C,KAAK49C,gBAAgB57C,OAAOC,SAASi8C,KAAKt7C,MAAM,KAAK,GAAK0rB,EAAQ5sB,GAC9EM,OAAOm8C,QAAQC,aAAap8C,OAAOC,SAASi8C,KAAM,GAAIl+C,KAAKq+C,uBAAuB17C,EAAKq7C,GAC3F,CAGQK,uBAAuB17C,EAAaq7C,GACxC,OAAOr7C,EAAIkgB,QAAQ,YAAa,QAAUm7B,EAAWC,YACzD,CAQAD,WAAWM,EAAkC/sB,EAAuB,GAChE,MAAO,CAAC0sB,YAAav7C,SAAS47C,EAASC,cAAc1yC,IAAI,SAAW,IAAK,IAAK0lB,eAAcitB,WAAY,EAAGC,WAAY,EAC3H,CASAb,gBAAgBc,EAAoBh9C,GAChC,YAAe0M,IAAX1M,EAA6Bg9C,EAE1BA,EAAa1+C,KAAK2+C,mBAAmBj9C,EAChD,CAEAi9C,mBAAmBj9C,GACf,MAAMk9C,EAAoB5+C,KAAK6+C,uBAAuBn9C,EAAO6nB,YACvDu1B,EAAqBp9C,EAAOgoB,YAAc,GAAG2zB,IAAiBr9C,KAAK++C,kBAAkBr9C,EAAOgoB,eAAiB,GAC7Gs1B,EAAiB,GAAGzB,IAAa77C,EAAO+nB,UAE9C,MAAO,GAAGzpB,KAAKi/C,WAAWv9C,EAAOoM,QAAQ8wC,KAAqBE,KAAsBE,iBAAmCt9C,EAAO8nB,aAClI,CAEAy1B,WAAWnxC,GACP,YAAaM,IAATN,GAA+B,KAATA,EAAoB,GACvC,QAAQsB,mBAAmBtB,KACtC,CAGAixC,kBAAkBr1B,GACd,MAAO,aAAaA,EAAYE,yBAAyBF,EAAYC,aACzE,CAEAk1B,uBAAuBt1B,GACnB,OAA0B,IAAtBA,EAAW1nB,OAAqB,GAC7By7C,EAAgBluC,mBAAmBma,EAAWlpB,IAAI6+C,GAK9C,cAJiCA,EAAUn1B,oBACpBm1B,EAAUp1B,eACV1a,mBAAmB8vC,EAAU55C,UAG5DwjB,KAAK,KACZ,CAEAq2B,uBAAuBb,GACnB,MAAM58C,EAAS1B,KAAKy9C,gBAAgBn0B,yBACpC,IAAKtnB,OAAOC,SAASi8C,KAAK3yC,SAAS,KAAM,OAAO7J,EAEhD,MAAM09C,EAAcd,EAASc,YAEzBA,EAAYtxC,OACZpM,EAAOoM,KAAOsxC,EAAYtxC,MAG9B,MAAMuxC,EAAUr9C,OAAOC,SAASi8C,KAAKt7C,MAAM,KAAK,GAC1C08C,EAAkBD,EAAQ/nC,QAAQgmC,GACxC,IAAIiC,EAAWF,EAAQ/nC,QAAQ,IAAM+lC,GAKrC,GAJIkC,EAAW,IACXA,EAAWF,EAAQ/nC,QAAQ,IAAMimC,KAGb,IAApB+B,IAAuC,IAAbC,EAAiB,CAE3C,MAAMC,EAAeH,EAAQz8B,UAAU08B,EAAkBhC,EAAsBiC,GAC/E79C,EAAO6nB,WAAavpB,KAAKy/C,uBAAuBD,EAAY,CAGhE,GAAIJ,EAAY11B,YAAa,CACzB,MAAMg2B,EAAoBL,EAAQ/nC,QAAQ,IAAM+lC,GAC1CkC,EAAWF,EAAQ/nC,QAAQ,IAAMimC,GACjCoC,EAAqBN,EAAQz8B,UAAU88B,EAAoBrC,GAAwB,EAAGkC,GACtF71B,GAAc1pB,KAAK4/C,kBAAkBD,GACvCj2B,KACAhoB,EAAOgoB,YAAcA,IAI7B,OAAI01B,EAAY31B,UACZ/nB,EAAO+nB,QAAU/mB,SAAS08C,EAAY31B,QAAS,KAG/C21B,EAAY51B,cACZ9nB,EAAO8nB,YAAc9mB,SAAS08C,EAAY51B,YAAa,KAGpD9nB,CACX,CAEAk+C,kBAAkBd,GACd,MAAMe,EAAQhD,mBAAmBiC,GAAoBl8C,MAAM,KACrDk9C,EAAgBD,EAAM1mB,KAAKzW,GAAQA,EAAKiY,WAAW,eACnDolB,EAAkBF,EAAM1mB,KAAKzW,GAAQA,EAAKiY,WAAW,iBAE3D,OAAImlB,GAAiBC,EAGV,CAACn2B,UAFUlnB,SAASo9C,EAAcl9C,MAAM,KAAK,GAAI,IAErC+mB,YADmC,SAAlCo2B,EAAgBn9C,MAAM,KAAK,IAI5C,IACX,CAEA68C,uBAAuBb,GAEnB,OADyB/B,mBAAmB+B,GAAmBh8C,MAAM,KAC7CvC,IAAI2/C,IACxB,MAAMH,EAAQG,EAAgBp9C,MAAM,KACpC,GAAc,OAAVi9C,GAAkBA,EAAMh+C,OAAS,EAAG,OAAO,KAE/C,MAAMo+C,EAAuBJ,EAAM1mB,KAAKzW,GAAQA,EAAKiY,WAAW,gBAChE,IAAKslB,EAAsB,OAAO,KAClC,MAAMl2B,EAAarnB,SAASu9C,EAAqBr9C,MAAM,KAAK,GAAI,IAE1Ds9C,EAAkBL,EAAM1mB,KAAKzW,GAAQA,EAAKiY,WAAW,WAC3D,IAAKulB,EAAiB,OAAO,KAC7B,MAAMp2B,EAAQpnB,SAASw9C,EAAgBt9C,MAAM,KAAK,GAAI,IAEhDu9C,EAAkBN,EAAM1mB,KAAKzW,GAAQA,EAAKiY,WAAW,WAC3D,OAAKwlB,EAEE,CAACp2B,aAAYD,QAAOxkB,MADbu3C,mBAAmBsD,EAAgBv9C,MAAM,KAAK,KAD/B,IAEG,GACjClB,OAAO0+C,GAAU,MAALA,EACnB,CAEAC,uBACI,MAAO,CACH72B,YAAahkB,IAAkBE,IAC/B6jB,WAAY,GACZE,QAAS,EACTC,YAAa,CACTC,aAAa,EACbC,UAAWplB,KAAUC,UAGjC,CAEA67C,iCACI,MAAO,CACHv2B,WAAYpkB,IAAiBC,MAC7BN,MAAO,GACPwkB,MAAOljB,IAAYG,WAE3B,EA3LSy2C,SAAsB,mBAAA98C,iBAAtB88C,GAAsB78C,MAAAC,KAAAD,MAAAE,MAAA,EAAtB28C,EAAsB,WAAA+C,EAAAv/C,IAAA,OAAtBw8C,EAAsBv8C,QAAtBu8C,EAAsBt8C,UAAAC,WAFnB,SAEHq8C,CAAsB,8GCTvBhT,EAAZ,SAAYA,GACVA,SAAAgW,YAAA,aACAhW,EAAAiW,WAAA,YACAjW,EAAAkW,WAAA,YACAlW,EAAAmW,SAAA,UACAnW,EAAAE,QAAA,SACAF,EAAAoW,MAAA,IACApW,EAAAC,MAAA,QACAD,EAAAqW,EAAA,IACArW,EAAAsW,EAAA,IACAtW,EAAAuW,EAAA,IACAvW,EAAAwW,EAAA,IACAxW,EAAAyW,UAAA,YACAzW,EAAA0W,OAAA,SACA1W,EAAA2W,MAAA,QAdU3W,CAeZ,CAfA,CAAYA,GAAS,IAiBT8F,EAAZ,SAAYA,GACVA,WAAAC,OAAA,cACAD,IAAA8Q,OAAA,eACA9Q,IAAA+Q,QAAA,gBAHU/Q,CAIZ,CAJA,CAAYA,GAAU,IAUf,IAAMgR,EAAc,MAArB,MAAOA,EAIX1hD,YAAoBG,GAAAC,KAAAD,mBAFpBC,KAAAuhD,gBAA4B,GAK5BvhD,KAAAwhD,aAAe,CAACt5C,EAAYC,IACnBs5C,WAAWv5C,EAAE+rC,QAAUwN,WAAWt5C,EAAE8rC,OAJa,CAO1DyN,kBAAkBx1B,GAChB,YAA6B9d,IAAzBpO,KAAKuhD,iBAAiE,IAAhCvhD,KAAKuhD,gBAAgB1/C,UAC7D7B,KAAKuhD,gBAAkBv8C,OAAOC,KAAK5B,MAG9BrD,KAAKuhD,gBAAgB7/C,OAAOwV,GAAQ7T,IAAY6oB,KAAYhV,GAAM,EAC3E,CASCyqC,kBAAkBC,EAA0BC,GAAuB,EAAOC,GAAwB,GACjG,OAAOF,GACL,KAAK3+C,IAAYG,KACf,OAAOpD,KAAKD,iBAAiBU,UAAU,oBAAsBqhD,EAAe,IAAM,IACpF,KAAK7+C,IAAYE,MACf,OAAI0+C,EACK7hD,KAAKD,iBAAiBU,UAAU,yBAElCT,KAAKD,iBAAiBU,UAAU,qBAAuBqhD,EAAe,IAAM,IACrF,KAAK7+C,IAAYC,MACf,OAAOlD,KAAKD,iBAAiBU,UAAU,uBAAyBqhD,EAAe,IAAM,IAE3F,CAGApgD,OAAOqgD,EAAergD,GACpB,GAAc,OAAVqgD,GAA6B,OAAXrgD,QAA6B0M,IAAV2zC,QAAkC3zC,IAAX1M,EAAsB,OAAO,EAC7F,MAAMsgD,EAAM,YACZ,OAAOD,EAAM1V,cAAcxpB,QAAQm/B,EAAK,IAAIz2C,SAAS7J,EAAO2qC,cAAcxpB,QAAQm/B,EAAK,IACzF,CAEAC,cAAcF,EAAergD,GAC3B,GAAc,OAAVqgD,GAA6B,OAAXrgD,QAA6B0M,IAAV2zC,QAAkC3zC,IAAX1M,EAAsB,OAAO,EAC7F,MAAMsgD,EAAM,YACZ,OAAOD,EAAM1V,cAAcxpB,QAAQm/B,EAAK,MAAQtgD,EAAO2qC,cAAcxpB,QAAQm/B,EAAK,GACpF,CAEAE,SAAS1tC,GACP,OAAY,MAALA,GAAaA,EAAE+F,eAAe,WACvC,CAEA4nC,UAAU3tC,GACR,OAAY,MAALA,GAAaA,EAAE+F,eAAe,WACvC,CAEA6nC,SAAS5tC,GACP,OAAY,MAALA,GAAaA,EAAE+F,eAAe,eACvC,CAEA8nC,SAAS7tC,GACP,OAAeA,CACjB,CAEA8tC,UAAU9tC,GACR,OAAgBA,CAClB,CAEA+tC,SAAS/tC,GACP,OAAeA,CACjB,CAEA67B,sBACE,OAAIruC,OAAOwgD,YAAclS,EAAWC,OAAeD,EAAWC,OACrDvuC,OAAOwgD,WAAalS,EAAWC,QAAUvuC,OAAOwgD,YAAclS,EAAW8Q,OAAe9Q,EAAW8Q,QACnGp/C,OAA8CsuC,EAAW+Q,QAGpE,CAEAoB,aAAa9xB,EAAkB+xB,EAA8B,GAC3D,MAAMC,EAAOhyB,EAAQiyB,wBACrB,OACID,EAAK9uB,KAAO6uB,GACZC,EAAK1uB,MAAQ,GACb0uB,EAAKE,SAAW7gD,OAAO8gD,aAAez4B,SAASkJ,gBAAgBwvB,eAC/DJ,EAAKK,QAAUhhD,OAAOwgD,YAAcn4B,SAASkJ,gBAAgB0vB,YAEnE,CAEAC,UAAUC,EAAcC,GAEtB,GADiB,MAAZD,IAA2D,OAAZC,QAAgCh1C,IAAZg1C,IACvD,MAAZA,IAA2D,OAAZD,QAAgC/0C,IAAZ+0C,GAAwB,OAAO,EAEvG,GADgB,OAAZA,GAAgC,OAAZC,QACRh1C,IAAZ+0C,QAAqC/0C,IAAZg1C,EAAuB,OAAO,EAG3D,MAAMC,EAAQr+C,OAAOC,KAAKk+C,GACpBG,EAAQt+C,OAAOC,KAAKm+C,GAC1B,GAAIC,EAAMxhD,SAAWyhD,EAAMzhD,OACzB,OAAO,EAET,UAAWqD,KAAOm+C,EAAO,CACvB,MAAME,EAAOJ,EAAQj+C,GACfs+C,EAAOJ,EAAQl+C,GACfu+C,EAAazjD,KAAK0jD,SAASH,IAASvjD,KAAK0jD,SAASF,GACxD,GACEC,IAAezjD,KAAKkjD,UAAUK,EAAMC,KACnCC,GAAcF,IAASC,EAExB,OAAO,EAGX,OAAO,CACT,CAEQE,SAASC,GACf,OAAiB,MAAVA,GAAoC,iBAAXA,CAClC,CAEAlyB,sBAAsBnD,EAAoBnL,EAAkBoO,GAC1D,OAAgB,MAAZpO,SAA6CoO,IAE/CjD,GADAA,EAASA,EAAOwqB,OAAO,aAAc31B,EAAU,KAC/B21B,OAAO,WAAYvnB,EAAe,KAE7CjD,CACT,CAEAqD,sBAAsB7kB,EAAe82C,OAAwDx1C,QACjEA,IAAtBw1C,IACFA,EAAoB,IAAIx7C,KAGxBw7C,EAAkBvZ,OADE,OAAlBv9B,EAASub,KACgB,GAEAvb,EAASub,KAGtC,MAAMw7B,EAAa/2C,EAAS2tC,SAAS5uC,IAAI,cACzC,OAAmB,OAAfg4C,IACFD,EAAkB5F,WAAaxwC,KAAKyB,MAAM40C,IAGrCD,CACT,CAEAE,sBAOE,MAAO,CANa9hD,OAAOwgD,YACVn4B,SAASkJ,gBAAgB0vB,aACzB54B,SAAShC,KAAK46B,YACVjhD,OAAO8gD,aACXz4B,SAASkJ,gBAAgBwvB,cACzB14B,SAAShC,KAAK06B,aAEjC,EA/JWzB,SAAc,mBAAA5gD,iBAAd4gD,GAAc3gD,MAAAC,MAAA,EAAd0gD,EAAc,WAAAvgD,EAAAC,IAAA,OAAdsgD,EAAcrgD,QAAdqgD,EAAcpgD,UAAAC,WAFb,SAEDmgD,CAAc,4KCpCxB3gD,MAAA,WACGA,MAAA,SACHA,+BAFKA,MAAA,UAAAA,MAAA,EAAA28B,EAAAymB,EAAAC,SACiCrjD,MAAA,GAAAA,MAAA,UAAAA,MAAA,EAAAygC,EAAA2iB,EAAAE,UAAA,2EAFzCtjD,MAAA,GACGA,MAAA,EAAAujD,EAAA,aAGAvjD,MAAA,WACGA,MAAA,uBAoBHA,QACHA,8BAzB0DA,MAAA,GAAAA,MAAA,OAAA2V,EAAA6tC,UAGlDxjD,MAAA,GAAAA,MAAA,UAAAA,MAAA,GAAA00C,EAAA/+B,EAAAuyB,MAAAvyB,EAAAwyB,SAECnoC,MAAA,GAAAA,MAAA,UAAA2V,EAAA8tC,aAAAzjD,CAAwB,aAAxBA,CAAwB,sBAAxBA,CAAwB,qBAAxBA,CAAwB,UAAxBA,CAAwB,sBAAxBA,CAAwB,mBAAA2V,EAAA+tC,iBAAxB1jD,CAAwB,mBAAA2V,EAAAguC,iBAAxB3jD,CAAwB,kBAAxBA,CAAwB,YAAA2V,EAAAiuC,UAAxB5jD,CAAwB,wBAAxBA,CAAwB,mBAAxBA,CAAwB,gBAAxBA,CAAwB,uBAAxBA,CAAwB,kBAAA2V,EAAAuX,gBAAA,ECS1B,IAAM22B,EAAuB,MAA9B,MAAOA,EAXb5kD,cAaWI,KAAAokD,aAAuB,EAIvBpkD,KAAAukD,WAAqB,EAIrBvkD,KAAAskD,iBAA2B,cAI3BtkD,KAAAqkD,iBAA2B,UAC3BrkD,KAAA6tB,gBAA0B,OAC1B7tB,KAAAikD,SAAmB,OAInBjkD,KAAAmkD,UAAoB,EAIpBnkD,KAAA6oC,MAAgB,QAIhB7oC,KAAA8oC,OAAiB,QAIjB9oC,KAAAgkD,QAAkB,GAhChBQ,SAAuB,mBAAA9jD,iBAAvB8jD,EAAuB,EAAvBA,EAAuB,UAAA/Y,EAAAjzB,IAAA,MAAvBgsC,EAAuB/rC,UAAA,0BAAA4mB,OAAA,CAAA+kB,aAAA,eAAAG,UAAA,YAAAD,iBAAA,mBAAAD,iBAAA,mBAAAx2B,gBAAA,kBAAAo2B,SAAA,WAAAE,SAAA,WAAAtb,MAAA,QAAAC,OAAA,SAAAkb,OAAA,UAAAvoB,YAAA,EAAA8D,SAAA,CAAA5+B,OAAA6+B,MAAA,EAAAC,KAAA,EAAAC,OAAA,0dAAAC,SAAA,SAAAhnB,EAAAC,GAAA,EAAAD,GDfpChY,MAAA,EAAA8jD,EAAA,4BAAe9jD,MAAA,OAAAiY,EAAAwrC,aAAA,kBCOHtrC,KAAYlY,eAAE8jD,KAAsB7jD,MAAAuY,OAAA,8NAAAE,gBAAA,IAQnCkrC,CAAuB,sCCb9B,MAAOG,EAAb/kD,cACII,KAAA4kD,MAAgB,UAChB5kD,KAAA6kD,OAAiB,UACjB7kD,KAAAw5B,QAAkB,GAClBx5B,KAAA8kD,QAAgC,GAIhC9kD,KAAA+kD,eAAyB,CAC7B,oJCRIpkD,MAAA,cAA8EA,MAAA,mBAAAA,MAAAqkD,GAAA,MAAAte,EAAA/lC,MAAA,UAASA,MAAA+lC,EAAA3wB,QAAO,GAAgCpV,OAAA,mCAAtFA,MAAA,aAAA0U,EAAA,0DAKxC1U,MAAA,QAAAA,CAAwC,cACaA,MAAA,yBAAAskD,EAAAtkD,MAAAukD,GAAA1vC,UAAA2wB,EAAAxlC,MAAA,UAASA,MAAAwlC,EAAAgf,YAAAF,GAAgB,GAAEtkD,MAAA,GAAYA,SAAS,6BAA7EA,MAAA,GAAAA,MAAA,WAAAskD,EAAAjnC,KAAA,IAAwDrd,MAAA,GAAAA,MAAAskD,EAAAG,KAAA,2BATpFzkD,MAAA,GACEA,MAAA,UAAAA,CAA0B,UACuBA,MAAA,GAAiBA,QAChEA,MAAA,EAAA0kD,EAAA,gBACF1kD,QACAA,MAAA,+BAEAA,MAAA,WACEA,MAAA,EAAA2kD,EAAA,aAGF3kD,QAEFA,8BAXmDA,MAAA,GAAAA,MAAA2V,EAAAivC,OAAAV,QACkDlkD,MAAA,GAAAA,MAAA,QAAA2V,EAAAivC,OAAAR,eAElDpkD,MAAA,GAAAA,MAAA,YAAAA,MAAA,IAAA2V,EAAAivC,OAAA/rB,SAAA74B,OAG1BA,MAAA,GAAAA,MAAA,UAAA2V,EAAAivC,OAAAT,QAAA,ECOlB,IAAMU,EAAsB,MAA7B,MAAOA,EAIX5lD,YAAmBgX,GAAA5W,KAAA4W,OAAwB,CAE3CY,WACMxX,KAAKulD,QACPvlD,KAAKulD,OAAOT,QAAQ78C,KAAKjI,KAAKylD,aAElC,CAEQA,aAAaC,EAAkBC,GACrC,MAAMC,EAA0B,cAAXF,EAAE1nC,KACjB6nC,EAA0B,cAAXF,EAAE3nC,KACvB,OAAI4nC,IAAiBC,GACZ,GACGD,GAAgBC,EACnB,EAEF,CACT,CAEAV,YAAYW,GACV9lD,KAAK4W,MAAMb,MAAsB,YAAhB+vC,EAAO9nC,KAC1B,CAEAjI,QACE/V,KAAK4W,MAAMb,OAAM,EACnB,EA7BWyvC,SAAsB,mBAAA9kD,iBAAtB8kD,GAAsB7kD,MAAAC,MAAA,EAAtB4kD,EAAsB,UAAAjtC,EAAAC,IAAA,MAAtBgtC,EAAsB/sC,UAAA,yBAAAgjB,YAAA,EAAA8D,SAAA,CAAA5+B,OAAA6+B,MAAA,EAAAC,KAAA,EAAAC,OAAA,6SAAAC,SAAA,SAAAhnB,EAAAC,GAAA,EAAAD,GDfnChY,MAAA,EAAAolD,EAAA,qCCWYjtC,KAAYjY,UAAEkrC,IAAc5yB,QAI3BqsC,CAAsB,mBCN5B,IAAMQ,EAAc,MAArB,MAAOA,EAKXpmD,YAAoB+Z,GAAA3Z,KAAA2Z,eAHpB3Z,KAAAimD,eAAiB,IAAItB,IACrB3kD,KAAAkmD,aAAe,IAAIvB,IAGjB3kD,KAAKimD,eAAenB,QAAQv3C,KAAK,CAAC63C,KAAM,SAAUpnC,KAAM,cACxDhe,KAAKimD,eAAenB,QAAQv3C,KAAK,CAAC63C,KAAM,UAAWpnC,KAAM,YAEzDhe,KAAKkmD,aAAatB,MAAQ,QAC1B5kD,KAAKkmD,aAAarB,OAAS,QAC3B7kD,KAAKkmD,aAAapB,QAAQv3C,KAAK,CAAC63C,KAAM,KAAMpnC,KAAM,WAEpD,CAEapD,QAAQ4e,EAAkB+rB,GAAsB,IAAAlrC,EAAAra,KAAA,SAAAsa,KAAA,YAE3D,OAAO,IAAI6rC,QAAQ,CAACC,EAASC,KAC3B,QAAgBj4C,IAAZorB,QAAoCprB,IAAXm3C,EAC3Bt9B,eAAQznB,MAAM,2DACP6lD,GAAO,QAGAj4C,IAAZorB,QAAoCprB,IAAXm3C,KAC3BA,EAASlrC,EAAK4rC,gBACPzsB,QAAUA,QAEHprB,IAAZorB,GAAqC,KAAZA,GAAsC,KAApB+rB,EAAQ/rB,UACrD+rB,EAAQ/rB,QAAUA,GAGpB,MAAM1e,EAAWT,EAAKV,aAAaoB,KAAKyqC,GACxC1qC,EAASI,kBAAkBqqC,OAASA,EACpCzqC,EAASK,OAAOhb,QAAKC,KAAK,IAAIiL,UAAUg/B,GAC/B+b,EAAQ/b,IAEjBvvB,EAASqD,UAAUhe,QAAKC,KAAK,IAAIiL,UAAU,IAClC+6C,GAAQ,GAChB,EACA,EAxBwD,EA0B7D,CAEa7qC,MAAMie,EAAkB+rB,GAAsB,IAAA5qC,EAAA3a,KAAA,SAAAsa,KAAA,YACzD,OAAO,IAAI6rC,QAAQ,CAACC,EAASC,KAC3B,QAAgBj4C,IAAZorB,QAAoCprB,IAAXm3C,EAC3Bt9B,eAAQznB,MAAM,yDACP6lD,GAAO,QAGAj4C,IAAZorB,QAAoCprB,IAAXm3C,KAC3BA,EAAS5qC,EAAKsrC,gBACPzsB,QAAUA,GAGnB,MAAM1e,EAAWH,EAAKhB,aAAaoB,KAAKyqC,GACxC1qC,EAASI,kBAAkBqqC,OAASA,EACpCzqC,EAASK,OAAOhb,QAAKC,KAAK,IAAIiL,UAAUg/B,GAC/B+b,EAAQ/b,IAEjBvvB,EAASqD,UAAUhe,QAAKC,KAAK,IAAIiL,UAAU,IAClC+6C,GAAQ,GAChB,EACD,EApBuD,EAqB3D,EAhEWJ,SAAc,mBAAAtlD,iBAAdslD,GAAcrlD,MAAAC,MAAA,EAAdolD,EAAc,WAAAztC,EAAAvX,IAAA,OAAdglD,EAAc/kD,QAAd+kD,EAAc9kD,UAAAC,WAFb,SAED6kD,CAAc,sCCTrB,MAAOljB,EAGTljC,cACEI,KAAK41B,MAAQ,EACf,CAEA0wB,UACE,OAA6B,IAAtBtmD,KAAK41B,MAAM/zB,MACpB,CAEA8+B,OACE,IAAK3gC,KAAKsmD,UACR,OAAOtmD,KAAK41B,MAAM51B,KAAK41B,MAAM/zB,OAAS,EAG1C,CAEAkiC,MACE,IAAI/jC,KAAKsmD,UAGT,OAAOtmD,KAAK41B,MAAMmO,KACpB,CAEAx2B,KAAK2J,GACHlX,KAAK41B,MAAMroB,KAAK2J,EAClB,yGCCG,IAAM2zB,EAAc,MAArB,MAAOA,EA0CXjrC,YAAmBygB,EAAoCyK,EAA6By7B,EAAuCC,GAAxGxmD,KAAAqgB,eAAoCrgB,KAAA8qB,WAA6B9qB,KAAAumD,aAAuCvmD,KAAAwmD,qBAjClHxmD,KAAA6oC,MAAgB,GAIhB7oC,KAAA8oC,OAAiB,GAIjB9oC,KAAAymD,SAAmB,GAIlBzmD,KAAA0mD,UAAoB,GAIpB1mD,KAAA2mD,aAAuB,GAIvB3mD,KAAA4mD,UAAoB,GAIpB5mD,KAAAiuB,WAAqB,GAIrBjuB,KAAA6mD,eAAyB,EAGlB7mD,KAAA6J,cAAaC,OAAOC,OAGnC/J,KAAKumD,WAAW97C,UAAUtK,QAAK8M,MAAmBjN,KAAK6J,aAAawB,UAAUc,IAC5E,GAAKnM,KAAK6mD,eACN16C,EAAIxB,QAAUC,IAAO4b,YAAa,CACpC,MAAMsgC,EAAc36C,EAAIrB,QACxB,GAAI9K,WAAK+mD,UAAsE,KAAlB/mD,KAAK+mD,SAAiB,OACnF,MAAM1L,EAAar7C,KAAKqgB,aAAaoC,qBAAqBziB,KAAK+mD,UAC/D,GAAI1L,IAAeyL,EAAYzL,WAAY,CAIzC,IAAI/iC,EAHWtY,KAAK+mD,SAASnkD,MAAM,KAAK,GAAGA,MAAM,KAGjC,GAAGigB,QAAQw4B,EAAa,MAAO,IAC3C/iC,EAAG/M,SAAS,OACd+M,EAAKA,EAAG1V,MAAM,KAAK,IAEjB0V,IAAQwuC,EAAYxuC,GAAK,KAC3BtY,KAAK+mD,SAAW/mD,KAAKqgB,aAAaI,UAAUzgB,KAAK+mD,UACjD/mD,KAAKwmD,mBAAmB7uC,eAAY,IAK9C,CAEAqvC,cACoB,IAAdhnD,KAAK6oC,OACP7oC,KAAK8qB,SAASK,SAASnrB,KAAKinD,QAAQlvC,cAAe,QAAS/X,KAAK6oC,OAGhD,IAAf7oC,KAAK8oC,QACP9oC,KAAK8qB,SAASK,SAASnrB,KAAKinD,QAAQlvC,cAAe,SAAU/X,KAAK8oC,QAG/C,IAAjB9oC,KAAKymD,UACPzmD,KAAK8qB,SAASK,SAASnrB,KAAKinD,QAAQlvC,cAAe,YAAa/X,KAAKymD,UAGjD,IAAlBzmD,KAAK0mD,WACP1mD,KAAK8qB,SAASK,SAASnrB,KAAKinD,QAAQlvC,cAAe,aAAc/X,KAAK0mD,WAG/C,IAArB1mD,KAAK2mD,cACP3mD,KAAK8qB,SAASK,SAASnrB,KAAKinD,QAAQlvC,cAAe,gBAAiB/X,KAAK2mD,cAGrD,IAAlB3mD,KAAK4mD,WACP5mD,KAAK8qB,SAASK,SAASnrB,KAAKinD,QAAQlvC,cAAe,aAAc/X,KAAK4mD,WAGjD,IAAnB5mD,KAAKiuB,YACPjuB,KAAK8qB,SAASK,SAASnrB,KAAKinD,QAAQlvC,cAAe,aAAc/X,KAAKiuB,WAE1E,EA9FW4c,SAAc,mBAAAnqC,iBAAdmqC,GAAclqC,MAAAC,KAAAD,mBAAAE,KAAAF,aAAA,EAAdkqC,EAAc,UAAA7nC,EAAAwV,IAAA,MAAdqyB,EAAcpyB,UAAA,gBAAAC,UAAA,SAAAC,EAAAC,MAAA,EAAAD,shBC5B3BhY,MAAA,aAEKA,MAAA,iBAAA+6B,GAAA,OAAS9iB,EAAAyH,aAAAkD,mBAAAmY,EAAuC,GAFrD/6B,cACKA,MAAA,WAAAiY,EAAAmuC,yBDsBOjuC,MAAYM,OAAA,2LAAAE,gBAAA,IAKXuxB,CAAc,mIEfvBlqC,MAAA,UAAkIA,MAAA,mBAAAA,MAAA08B,GAAA,MAAA6R,EAAAvuC,MAAA,UAASA,MAAAuuC,EAAAn5B,QAAO,GAAEpV,MAAA,GAAiBA,OAAA,6CAArIA,MAAA,OAAAu9B,EAAAgpB,WAAAC,UAAAxmD,OAAoHA,MAAA,GAAAA,MAAA0U,EAAA,sDAbxJ1U,MAAA,GACEA,MAAA,UAAAA,CAA0B,UACAA,MAAA,GAAcA,QACtCA,MAAA,cAAuEA,MAAA,mBAAAA,MAAAymD,GAAA,MAAA5Z,EAAA7sC,QAAA,OAASA,MAAA6sC,EAAAz3B,QAAO,GAAEpV,UAE3FA,MAAA,UAAAA,CAAwB,QAClBA,MAAA,GAA0BA,QAC9BA,MAAA,+BACFA,QAEAA,MAAA,WAAAA,CAA0B,UAC6DA,MAAA,IAAaA,QAClGA,MAAA,eAA4FA,MAAA,mBAAAA,MAAAymD,GAAA,MAAAjhB,EAAAxlC,QAAA,OAASA,MAAAwlC,EAAApwB,QAAO,GAAEpV,MAAA,IAAcA,QAC5HA,MAAA,GAAA0mD,EAAA,WACF1mD,QACFA,OAAA,uCAb4BA,MAAA,GAAAA,MAAA0U,EAAA,UACgB1U,MAAA,GAAAA,MAAA,aAAA0U,EAAA,UAGpC1U,MAAA,GAAAA,MAAA2V,EAAA4wC,WAAAI,aACqB3mD,MAAA,GAAAA,MAAA,YAAAA,MAAA,KAAA2V,EAAA4wC,WAAAK,YAAA5mD,OAIDA,MAAA,GAAAA,MAAA,OAAA2V,EAAA6wC,UAAAxmD,OAA6DA,MAAA,GAAAA,MAAA0U,EAAA,SAC/D1U,MAAA,GAAAA,MAAA,OAAA2V,EAAA4wC,WAAAM,SAAA,kCAAwF7mD,MAAA,GAAAA,MAAA0U,EAAA,UAC1G1U,MAAA,GAAAA,MAAA,QAAA2V,EAAA4wC,WAAAM,SAAA,ECGD,IAAMC,EAAgC,MAAvC,MAAOA,EAKX7nD,YAAmBgX,GAAA5W,KAAA4W,QAFnB5W,KAAAmnD,UAAoB,0EAEwB,CAE5C3vC,WAEIxX,KAAKmnD,UADHnnD,KAAKknD,WAAWM,SACD,0EAEA,0EAErB,CAEAzxC,QACE/V,KAAK4W,MAAMb,MAAM,CAACoC,SAAS,EAAOzP,YAAQ0F,GAC5C,EAjBWq5C,SAAgC,mBAAA/mD,iBAAhC+mD,GAAgC9mD,MAAAC,MAAA,EAAhC6mD,EAAgC,UAAAhc,EAAAjzB,IAAA,MAAhCivC,EAAgChvC,UAAA,oCAAA4mB,OAAA,CAAA6nB,WAAA,cAAAzrB,YAAA,EAAA8D,SAAA,CAAA5+B,OAAA6+B,MAAA,EAAAC,KAAA,EAAAC,OAAA,wdAAAC,SAAA,SAAAhnB,EAAAC,GAAA,EAAAD,GDhB7ChY,MAAA,EAAA+mD,EAAA,6BAAiC/mD,MAAA,4DCWrBmY,KAAYjY,KAAEqY,KAAgB6yB,IAAc5yB,MAAkBC,OAAA,0FAAAE,gBAAA,IAK7DmuC,CAAgC,0UCbvC9mD,MAAA,GACEA,MAAA,2BACFA,kDADEA,MAAA,GAAAA,MAAA,IAAA0U,EAAA,aAAA1U,MAAA,EAAA28B,GAAA38B,MAAA,IAAAu9B,EAAA9jB,QAAAtM,QAAA,8BAGAnN,MAAA,kCAAAA,MAAA,IAAA0U,EAAA,4CAiBQ1U,MAAA,SACEA,MAAA,GACFA,yCADEA,MAAA,GAAAA,MAAA,IAAA0U,EAAA,iDAEF1U,MAAA,SACEA,MAAA,GACFA,yCADEA,MAAA,GAAAA,MAAA,IAAA0U,EAAA,sDALJ1U,MAAA,YACEA,MAAA,EAAAgnD,EAAA,cAGAhnD,MAAA,EAAAinD,EAAA,cAGFjnD,wCANQA,MAAA,GAAAA,MAAA,cAAAssC,EAAA4a,EAAAC,YAAAj8C,IAAA,gBAAAohC,EAAAE,OAAA,KAAAF,EAAAE,OAAAC,UAGAzsC,MAAA,GAAAA,MAAA,cAAAulC,GAAA2hB,EAAAC,YAAAj8C,IAAA,gBAAAq6B,GAAAiH,OAAA,KAAAjH,GAAAiH,OAAAE,cAAA,0BAQkB1sC,MAAA,mCAAAA,MAAA0U,EAAA,2CAKxB1U,MAAA,eAAoEA,MAAA,GAAOA,kCAAnEA,MAAA,iBAA4DA,MAAA,GAAAA,MAAAonD,EAAA,2BAGxEpnD,MAAA,SACEA,MAAA,GACAA,MAAA,UAAMA,MAAA,0CAAqDA,qDAD3DA,MAAA,GAAAA,MAAA,IAAA0U,EAAA,2BACM1U,MAAA,GAAAA,YAAA,IAAAA,MAAA,IAAA2lC,EAAAlsB,QAAA4tC,YAAA,qCAzBRrnD,MAAA,WAAAA,CAAkB,cAC6BA,MAAA,GAAmBA,QAChEA,MAAA,cACAA,MAAA,EAAAsnD,EAAA,cAQFtnD,QAEAA,MAAA,WAAAA,CAAkB,cAC6BA,MAAA,GAAmBA,QAAQA,MAAA,UACxEA,MAAA,EAAAunD,EAAA,0BAAAvnD,OACAA,MAAA,cACEA,MAAA,OACFA,QACAA,MAAA,gBACEA,MAAA,GAAAwnD,EAAA,iBACFxnD,UAEFA,MAAA,GAAAynD,EAAA,4EAtB+CznD,MAAA,GAAAA,MAAA0U,EAAA,eACoC1U,MAAA,GAAAA,MAAA,qBAAAulC,GAAAsH,GAAAsa,YAAAj8C,IAAA,cAAAq6B,GAAA6H,WAAA,OAAA7H,GAAAsH,GAAAsa,YAAAj8C,IAAA,cAAAq6B,GAAA8H,UACtBrtC,MAAA,GAAAA,MAAA,OAAA6sC,GAAAsa,YAAA7Z,OAAAT,GAAAsa,YAAA9Z,SAWdrtC,MAAA,GAAAA,MAAA0U,EAAA,eAA+E1U,MAAA,GAAAA,MAAA,aAAA0nD,GAG5G1nD,MAAA,GAAAA,MAAA,mBAAA0nD,GAGsB1nD,MAAA,GAAAA,MAAA,UAAA6sC,GAAAvpB,cAGlCtjB,MAAA,GAAAA,MAAA,QAAA6sC,GAAA8a,aAAA,0CAaJ3nD,MAAA,WACEA,MAAA,GACAA,MAAA,eAAqCA,MAAA,yBAAA4nD,GAAA5nD,MAAA6nD,GAAAhzC,UAAAgsB,EAAA7gC,MAAA,UAASA,MAAA6gC,EAAAinB,aAAAF,IAAoB,GAAE5nD,MAAA,UAAqDA,SAAS,6BADlIA,MAAA,GAAAA,MAAA,IAAA4nD,EAAA,8CAHJ5nD,MAAA,OAAGA,MAAA,GAA2BA,QAC9BA,MAAA,WACEA,MAAA,EAAA+nD,EAAA,aAIF/nD,QACAA,MAAA,WAAAA,CAAsB,eAC+BA,MAAA,mBAAAA,MAAAgoD,GAAA,MAAAhnB,GAAAhhC,MAAA,UAASA,MAAAghC,GAAAinB,sBAAqB,GAC/EjoD,MAAA,UACAA,MAAA,GACFA,UAEFA,MAAA,WAAAA,CAAsB,OACjBA,MAAA,IAAuBA,MAAA,WAA0IA,MAAA,IAAuBA,QAAKA,MAAA,IAAuBA,UAEzNA,MAAA,YAAAA,CAAsB,QACjBA,MAAA,IAAkCA,MAAA,WAA+JA,MAAA,IAAkCA,QAAKA,MAAA,IAAkCA,SAAI,6CAjBhRA,MAAA,GAAAA,MAAA0U,EAAA,uBAE8C1U,MAAA,GAAAA,MAAA,UAAAsU,EAAA4zC,iBAQ7CloD,MAAA,GAAAA,MAAA,IAAA0U,EAAA,eAIC1U,MAAA,GAAAA,MAAA0U,EAAA,mBAAiK1U,MAAA,GAAAA,MAAA0U,EAAA,mBAA4B1U,MAAA,GAAAA,MAAA,IAAA0U,EAAA,sBAG7L1U,MAAA,GAAAA,MAAA0U,EAAA,8BAAiM1U,MAAA,GAAAA,MAAA0U,EAAA,8BAAuC1U,MAAA,GAAAA,MAAA,IAAA0U,EAAA,2DAQ7O1U,MAAA,UAAmEA,MAAA,GAA0BA,yCAA1BA,MAAA,GAAAA,MAAA0U,EAAA,gEAAnE1U,MAAA,EAAAmoD,EAAA,YACAnoD,MAAA,OAAGA,MAAA,GAAgCA,QACnCA,MAAA,gCAAyBA,MAAA,2BAAA+6B,IAAA/6B,MAAAooD,GAAA,MAAA/rB,GAAAr8B,MAAA,UAAAA,MAAAq8B,GAAA8K,UAAApM,GAAA,EAAA/6B,CAAyB,sBAAA+6B,IAAA/6B,MAAAooD,GAAA,MAAA9rB,GAAAt8B,MAAA,UAGXA,MAAAs8B,GAAA+rB,gBAAAttB,IAAuB,EAHrC/6B,CAAyB,wBAAAA,MAAAooD,GAAA,MAAAE,GAAAtoD,MAAA,UAIXA,MAAAsoD,GAAA/mC,kBAAiB,GAExDvhB,OAAA,6CARIA,MAAA,OAAAwlC,EAAAmiB,cACD3nD,MAAA,GAAAA,MAAA0U,EAAA,4BACsB1U,MAAA,GAAAA,MAAA,YAAAwlC,EAAA2B,UAAAnnC,CAAyB,eAAzBA,CAAyB,iDAalDA,MAAA,WAAAA,CAAiB,WAAjBA,CAAiB,WAAjBA,CAAiB,YAITA,MAAA,cACAA,MAAA,cAAyDA,MAAA,GAAgCA,YAG7FA,MAAA,UACEA,MAAA,GACFA,YAIJA,MAAA,WAAAA,CAAiB,YAAjBA,CAAiB,YAAjBA,CAAiB,aAITA,MAAA,eACAA,MAAA,eAA0DA,MAAA,IAAkCA,YAGhGA,MAAA,WACEA,MAAA,IACFA,YAIJA,MAAA,YAAAA,CAAiB,YAAjBA,CAAiB,YAAjBA,CAAiB,aAITA,MAAA,eACAA,MAAA,eAAiDA,MAAA,IAA+BA,YAGpFA,MAAA,WACEA,MAAA,IACFA,YAIJA,MAAA,YAAAA,CAAiB,YAAjBA,CAAiB,YAAjBA,CAAiB,aAITA,MAAA,eACAA,MAAA,eAA0DA,MAAA,IAA8BA,YAG5FA,MAAA,WACEA,MAAA,IACFA,YAGJA,MAAA,YAAAA,CAAiB,YAAjBA,CAAiB,YAAjBA,CAAiB,aAITA,MAAA,eACAA,MAAA,eAAwDA,MAAA,IAAmCA,YAG/FA,MAAA,WACEA,MAAA,IACFA,YAGJA,MAAA,YAAAA,CAAiB,YAAjBA,CAAiB,YAAjBA,CAAiB,aAITA,MAAA,eACAA,MAAA,eAA0DA,MAAA,IAAwCA,YAGtGA,MAAA,WACEA,MAAA,IACFA,YAGJA,MAAA,YAAAA,CAAiB,YAAjBA,CAAiB,YAAjBA,CAAiB,aAITA,MAAA,eACAA,MAAA,eAAqDA,MAAA,IAAgCA,YAGzFA,MAAA,WACEA,MAAA,IACFA,4CAtF6DA,MAAA,GAAAA,MAAA0U,EAAA,4BAI3D1U,MAAA,GAAAA,MAAA,IAAA0U,EAAA,kCAU4D1U,MAAA,GAAAA,MAAA0U,EAAA,8BAI5D1U,MAAA,GAAAA,MAAA,IAAA0U,EAAA,oCAUmD1U,MAAA,GAAAA,MAAA0U,EAAA,2BAInD1U,MAAA,GAAAA,MAAA,IAAA0U,EAAA,iCAU4D1U,MAAA,GAAAA,MAAA0U,EAAA,0BAI5D1U,MAAA,GAAAA,MAAA,IAAA0U,EAAA,gCAS0D1U,MAAA,GAAAA,MAAA0U,EAAA,+BAI1D1U,MAAA,GAAAA,MAAA,IAAA0U,EAAA,qCAS4D1U,MAAA,GAAAA,MAAA0U,EAAA,oCAI5D1U,MAAA,GAAAA,MAAA,IAAA0U,EAAA,0CASuD1U,MAAA,GAAAA,MAAA0U,EAAA,4BAIvD1U,MAAA,GAAAA,MAAA,IAAA0U,EAAA,4EAiBd1U,MAAA,GACEA,MAAA,eAA8CA,MAAA,mBAAAA,MAAAuoD,GAAA,MAAAC,GAAAxoD,MAAA,UAASA,MAAAwoD,GAAAvR,WAAU,GAAuDj3C,MAAA,GAAaA,QACvIA,OAAA,6CADqEA,MAAA,GAAAA,MAAA,WAAAguC,EAAAya,kBAAAza,EAAAmZ,YAAA/Z,SAAqDptC,MAAA,GAAAA,MAAA0U,EAAA,mDAGxH1U,MAAA,eAAwEA,MAAA,mBAAAA,MAAA0oD,GAAA,MAAAha,GAAA1uC,MAAA,UAASA,MAAA0uC,GAAAe,OAAM,GAAEzvC,MAAA,GAAaA,OAAA,6CAAxDA,MAAA,WAAA8/B,EAAA6oB,cAA2C3oD,MAAA,GAAAA,MAAA0U,EAAA,mDA7M/F1U,MAAA,GACEA,MAAA,UAAAA,CAA0B,UAEtBA,MAAA,EAAA4oD,EAAA,sBAGA5oD,MAAA,EAAA6oD,EAAA,yBAAA7oD,OAGFA,QACAA,MAAA,cAAuEA,MAAA,mBAAAA,MAAAivC,GAAA,MAAAC,GAAAlvC,QAAA,OAASA,MAAAkvC,GAAA95B,QAAO,GAAEpV,UAE3FA,MAAA,WAAAA,CAAgC,QAAhCA,CAAgC,YAEHA,MAAA,0BAAA+6B,IAAA/6B,MAAAivC,GAAA,MAAAE,GAAAnvC,QAAA,OAAAA,MAAAmvC,GAAAC,OAAArU,GAAA,GAGvB/6B,MAAA,UAAAA,CAAiC,WACjBA,MAAA,IAAoBA,QAClCA,MAAA,GAAA8oD,EAAA,uBA6BF9oD,QAGAA,MAAA,WAAAA,CAA2E,WAC3DA,MAAA,IAAmBA,QACjCA,MAAA,GAAA+oD,EAAA,uBAqBF/oD,QAEAA,MAAA,WAAAA,CAA0E,WAC1DA,MAAA,IAAkBA,QAChCA,MAAA,GAAAgpD,GAAA,sBAWFhpD,QAEAA,MAAA,WAAAA,CAA6E,WAC7DA,MAAA,IAAqBA,QACnCA,MAAA,GAAAipD,GAAA,wBAgGFjpD,UAGFA,MAAA,aACFA,UAEFA,MAAA,YAAAA,CAA0B,gBACoBA,MAAA,mBAAAA,MAAAivC,GAAA,MAAAM,GAAAvvC,QAAA,OAASA,MAAAuvC,GAAA2Z,YAAW,GACjBlpD,MAAA,IAAmBA,QAClEA,MAAA,gBAA4CA,MAAA,mBAAAA,MAAAivC,GAAA,MAAAO,GAAAxvC,QAAA,OAASA,MAAAwvC,GAAAjnC,QAAO,GAAEvI,MAAA,IAAcA,QAC5EA,MAAA,gBAAgDA,MAAA,mBAAAA,MAAAivC,GAAA,MAAA+G,GAAAh2C,QAAA,OAASA,MAAAg2C,GAAA5gC,QAAO,GAAEpV,MAAA,IAAeA,QAEjFA,MAAA,GAAAmpD,GAAA,sBAGAnpD,MAAA,GAAAopD,GAAA,0BAAAppD,OAGFA,QAEFA,OAAA,4EA9MqBA,MAAA,GAAAA,MAAA,QAAA2V,EAAAgyC,aAAA3nD,CAAqB,WAAA6hC,GAOE7hC,MAAA,GAAAA,MAAA,aAAA0U,EAAA,UAEpC1U,MAAA,GAAAA,MAAA,YAAA2V,EAAAwxC,aACCnnD,MAAA,GAAAA,MAAA,+BAAA2V,EAAAyV,eAAAskB,wBAAA/5B,EAAAg6B,WAAAC,OAAA,gBAEC5vC,MAAA,GAAAA,MAAA,cAAA2V,EAAAyV,eAAAskB,wBAAA/5B,EAAAg6B,WAAAC,OAAA,yBADqB5vC,MAAA,WAAA2V,EAAAy5B,QAGnBpvC,MAAA,GAAAA,MAAA,aAAA2V,EAAAk6B,MAAAC,SACY9vC,MAAA,GAAAA,MAAA0U,EAAAiB,EAAAk6B,MAAAC,UAiCZ9vC,MAAA,GAAAA,MAAA,aAAA2V,EAAAk6B,MAAAwZ,OAAArpD,CAA2B,WAAA2V,EAAAgyC,cAAAhyC,EAAA2zC,UAAA,GACftpD,MAAA,GAAAA,MAAA0U,EAAAiB,EAAAk6B,MAAAwZ,SAwBZrpD,MAAA,GAAAA,MAAA,aAAA2V,EAAAk6B,MAAA0Z,MAAAvpD,CAA0B,WAAA2V,EAAAgyC,cAAAhyC,EAAA2zC,UAAA,GACdtpD,MAAA,GAAAA,MAAA0U,EAAAiB,EAAAk6B,MAAA0Z,QAcZvpD,MAAA,GAAAA,MAAA,aAAA2V,EAAAk6B,MAAA2Z,SAAAxpD,CAA6B,WAAA2V,EAAAgyC,cAAAhyC,EAAA2zC,UAAA,GACjBtpD,MAAA,GAAAA,MAAA0U,EAAAiB,EAAAk6B,MAAA2Z,WAoGQxpD,MAAA,GAAAA,MAAA,eAAA2V,EAAAyV,eAAAskB,wBAAA/5B,EAAAg6B,WAAAC,OAAA,4BAArB5vC,MAAA,eAAAqkD,IAKCrkD,MAAA,GAAAA,MAAA,aAAA0U,EAAA,uBAAuC1U,MAAA,GAAAA,MAAA0U,EAAA,eACe1U,MAAA,GAAAA,MAAA0U,EAAA,UACI1U,MAAA,GAAAA,MAAA0U,EAAA,WAEnD1U,MAAA,GAAAA,MAAA,OAAA2V,EAAAgyC,cAAA,IAAAhyC,EAAA2zC,UAAAtpD,CAAuC,WAAAypD,GAAA,ECxK1D,IAAK5Z,GAAL,SAAKA,GACHA,SAAAC,QAAA,cACAD,EAAAwZ,OAAA,aACAxZ,EAAA0Z,MAAA,YACA1Z,EAAA2Z,SAAA,eAJG3Z,CAKL,CALA,CAAKA,IAAK,IAOL6Z,EAAL,SAAKA,GACHA,WAAA5Z,QAAA,aACA4Z,IAAAL,OAAA,YACAK,IAAAH,MAAA,WACAG,IAAAF,SAAA,cAJGE,CAKL,CALA,CAAKA,GAAM,IAeJ,IAAMrvC,GAA6B,MAApC,MAAOA,EA4BPs1B,iBAAe,OAAOA,IAAY,CAClCE,YAAU,OAAOA,EAAO,CAE5B5wC,YAAmBmsB,EAAwCkc,EAAsCtuB,GACvF2wC,GAAwC1zC,EAA+BgD,GACvEJ,GAAwC1Z,EAAwCgX,GAChFuJ,GAHSrgB,KAAA+rB,iBAAwC/rB,KAAAioC,gBAAsCjoC,KAAA2Z,gBACvF3Z,KAAAsqD,kBAAwCtqD,KAAA4W,QAA+B5W,KAAA4Z,kBACvE5Z,KAAAwZ,kBAAwCxZ,KAAAF,SAAwCE,KAAA8W,SAChF9W,KAAAqgB,eA/BOrgB,KAAA6J,cAAaC,OAAOC,OAErC/J,KAAA+vC,OAASS,GAAMC,QACfzwC,KAAA8nC,UAA2B,GAE3B9nC,KAAA8nD,YAAyB,IAAI9wC,KAAU,CACrClJ,KAAM,IAAI4J,KAAoB,GAAI,CAAEq5B,aAAa,EAAMC,WAAY,CAACC,KAAW7D,YAC/EpvB,KAAM,IAAItG,KAAyBzU,IAAYC,MAAO,CAAE6tC,aAAa,EAAMC,WAAY,CAACC,KAAW7D,YACnGmd,eAAgB,IAAI7yC,MAAqB,EAAM,CAAEq5B,aAAa,EAAMC,WAAY,CAACC,KAAW7D,YAC5Fod,mBAAoB,IAAI9yC,MAAqB,EAAM,CAAEq5B,aAAa,EAAMC,WAAY,CAACC,KAAW7D,YAChGqd,qBAAsB,IAAI/yC,MAAqB,EAAM,CAAEq5B,aAAa,EAAMC,WAAY,CAACC,KAAW7D,YAClGsd,gBAAiB,IAAIhzC,MAAqB,EAAM,CAAEq5B,aAAa,EAAMC,WAAY,CAACC,KAAW7D,YAC7Fud,kBAAmB,IAAIjzC,MAAqB,EAAM,CAAEq5B,aAAa,EAAMC,WAAY,CAACC,KAAW7D,YAC/Fwd,mBAAoB,IAAIlzC,MAAqB,EAAM,CAAEq5B,aAAa,EAAMC,WAAY,CAACC,KAAW7D,YAChGyd,gBAAiB,IAAInzC,MAAqB,EAAM,CAAEq5B,aAAa,EAAMC,WAAY,CAACC,KAAW7D,YAC7F0d,4BAA6B,IAAIpzC,MAAqB,EAAO,CAAEq5B,aAAa,EAAMC,WAAY,CAACC,KAAW7D,cAG5GptC,KAAA6oD,gBAA4B,GAC5B7oD,KAAA+qD,aAAc,EACd/qD,KAAAikB,aAAyB,GAEzBjkB,KAAAsoD,cAAe,EACftoD,KAAAiqD,UAAYI,EAAO5Z,OAQqB,CAExCj5B,WAEExX,KAAKsqD,eAAe5kB,kBAAkBr6B,UAAW2/C,IAC/ChrD,KAAKikB,aAAe+mC,EACpBhrD,KAAK8W,MAAMa,cAAY,QAIJvJ,IAAjBpO,KAAKoa,UACPpa,KAAKsoD,cAAe,EACpBtoD,KAAK8W,MAAMa,gBAGmB,MAA5B3X,KAAKoa,SAASoG,YAAmD,KAA7BxgB,KAAKoa,SAASoG,aACpDxgB,KAAK8nC,UAAUv6B,KAAKvN,KAAKqgB,aAAayC,qBAAqB9iB,KAAKoa,QAAQ9B,KACxEtY,KAAK8W,MAAMa,gBAGT3X,KAAKoa,SAAWpa,KAAKoa,QAAQ4D,OAAS/a,IAAYE,QACpDnD,KAAK8nD,YAAYj8C,IAAI,oBAAoBuJ,UAAS,GAClDpV,KAAK8nD,YAAYj8C,IAAI,oBAAoBo/C,WAI3CjrD,KAAK8nD,YAAYj8C,IAAI,SAAS0lC,aAAapxC,QACzCgjC,KAAa,MAAG,EAChBC,QAAoB,EACpBj4B,KAAU2C,GAAQ9N,KAAKwZ,eAAe8K,kBAAkBxW,KAAK,EAC7D1B,KAAIolC,IACF,MAAMC,EAAiBzxC,KAAK8nD,YAAYj8C,IAAI,SAASvG,QAAUtF,KAAKoa,SAAStM,MACxE0jC,GAAUC,EACbzxC,KAAK8nD,YAAYj8C,IAAI,SAAS6lC,UAAU,MAExC1xC,KAAK8nD,YAAYj8C,IAAI,SAAS6lC,UAAU,CAACrE,eAAe,IAE1DrtC,KAAK8W,MAAMa,cAAY,IACxB,EACD1K,MAAmBjN,KAAK6J,aACtBwB,YAGJrL,KAAKkrD,WACP,CAEAA,iBACuB98C,IAAjBpO,KAAKoa,UACPpa,KAAK8nD,YAAYj8C,IAAI,SAASuJ,SAASpV,KAAKoa,QAAQtM,MACpD9N,KAAK8nD,YAAYj8C,IAAI,SAASuJ,SAASpV,KAAKoa,QAAQ4D,MACpDhe,KAAK8nD,YAAYj8C,IAAI,mBAAmBuJ,SAASpV,KAAKoa,QAAQmwC,gBAC9DvqD,KAAK8nD,YAAYj8C,IAAI,uBAAuBuJ,SAASpV,KAAKoa,QAAQowC,oBAClExqD,KAAK8nD,YAAYj8C,IAAI,yBAAyBuJ,SAASpV,KAAKoa,QAAQqwC,sBACpEzqD,KAAK8nD,YAAYj8C,IAAI,oBAAoBuJ,SAASpV,KAAKoa,QAAQswC,iBAC/D1qD,KAAK8nD,YAAYj8C,IAAI,sBAAsBuJ,SAASpV,KAAKoa,QAAQuwC,mBACjE3qD,KAAK8nD,YAAYj8C,IAAI,uBAAuBuJ,SAASpV,KAAKoa,QAAQwwC,oBAClE5qD,KAAK8nD,YAAYj8C,IAAI,gCAAgCuJ,SAASpV,KAAKoa,QAAQ0wC,6BAC3E9qD,KAAK8nD,YAAYj8C,IAAI,oBAAoBuJ,SAASpV,KAAKoa,QAAQywC,iBAC/D7qD,KAAK6oD,gBAAkB7oD,KAAKoa,QAAQsoB,QACpC1iC,KAAK+qD,aAAc,EACnB/qD,KAAK8W,MAAMa,eAEf,CAEA2xC,aACE,QAAStpD,KAAK8nD,YAAYqD,OAASnrD,KAAK6oD,gBAAgBhnD,OAAS,EACnE,CAEAqH,QACElJ,KAAKkrD,WACP,CAEAn1C,MAAMq1C,GAAW,GACfprD,KAAK4W,MAAMb,MAAMq1C,EACnB,CAEAvB,YACE7pD,KAAKwZ,eAAegB,KAAKxa,KAAKoa,QAAQ9B,IAAI,GACvCjN,UAAU,IAAMrL,KAAKF,OAAO2a,QAAKha,MAAU,4BAA6B,CAACqN,KAAM9N,KAAKoa,QAAQtM,QACjG,CAEMsiC,OAAI,IAAA/1B,EAAAra,KAAA,SAAAsa,KAAA,YACR,MAAMzN,EAAQwN,EAAKytC,YAAYxiD,MAG/B,GAFAuH,EAAM61B,QAAUroB,EAAKwuC,iBAEjBxuC,EAAKytC,YAAY3a,OAIrB,QAAqB/+B,IAAjBiM,EAAKD,QAAuB,CAK9B,GAJAvN,EAAMyL,GAAK+B,EAAKD,QAAQ9B,GACxBzL,EAAM61B,QAAU71B,EAAM61B,QAAQriC,IAAK6W,IAAiBA,GAAKyjB,WAAW,MAAQzjB,GAAKm0C,OAAO,EAAGn0C,GAAKrV,QAAUqV,IAC1GrK,EAAMmR,KAAOtb,SAASmK,EAAMmR,KAAM,IAE9BnR,EAAMmR,OAAS3D,EAAKD,QAAQ4D,cACnB3D,EAAKT,eAAegB,WAAQna,MAAU,wCAAwC,OAG3F4Z,EAAKb,eAAe/J,OAAO5C,GAAOxB,UAAU,KAC1CgP,EAAKtE,OAAM,EAAI,EAChB,MAEDlJ,EAAM61B,QAAU71B,EAAM61B,QAAQriC,IAAK6W,IAAiBA,GAAKyjB,WAAW,MAAQzjB,GAAKm0C,OAAO,EAAGn0C,GAAKrV,QAAUqV,IAC1GrK,EAAMmR,KAAOtb,SAASmK,EAAMmR,KAAM,IAClC3D,EAAKb,eAAenD,OAAOxJ,GAAOxB,UAAU,KAC1CgP,EAAKva,OAAOqY,WAAQ1X,MAAU,2BAC9B4Z,EAAKtE,OAAM,EAAI,EAElB,EA3BO,EA4BV,CAEA6hC,WAEE,OADA53C,KAAKiqD,YACEjqD,KAAKiqD,WACV,KAAKI,EAAOL,OACVhqD,KAAK+vC,OAASS,GAAMwZ,OACpB,MACF,KAAKK,EAAOH,MACVlqD,KAAK+vC,OAASS,GAAM0Z,MACpB,MACF,KAAKG,EAAOF,SACVnqD,KAAK+vC,OAASS,GAAM2Z,SAGxBnqD,KAAK8W,MAAMa,cACb,CAEAqxC,gBAAgBsC,GACdtrD,KAAKioC,cAAc9M,wBAAwBn7B,KAAKoa,QAAQ9B,GAAIgzC,GAAUjgD,UAAU,OAClF,CAEA6W,kBACEliB,KAAKioC,cAAc9M,wBAAwBn7B,KAAKoa,QAAQ9B,GAAI,IAAIjN,UAAU,OAC5E,CAEAu9C,sBACmB5oD,KAAK2Z,aAAaoB,KAAK4nB,IAA0B,CAAE9kB,YAAY,EAAM5C,KAAM,OACnFE,OAAO9P,UAAW+P,IACrBA,EAAYjD,UACTnY,KAAK6oD,gBAAgBt9C,SAAS6P,EAAY8oB,cAC7ClkC,KAAK6oD,gBAAgBt7C,KAAK6N,EAAY8oB,YACtClkC,KAAK+qD,aAAc,EACnB/qD,KAAK8W,MAAMa,gBAAY,EAI/B,CAEA8wC,aAAa5kB,GACX7jC,KAAK6oD,gBAAkB7oD,KAAK6oD,gBAAgBnnD,OAAOwV,GAAQA,IAAS2sB,GACpE7jC,KAAK+qD,aAAc,EACnB/qD,KAAK8W,MAAMa,cACb,CAEAyxC,iBACE,OAAQppD,KAAKiqD,WACX,KAAKI,EAAO5Z,QACV,OAAOzwC,KAAK8nD,YAAYj8C,IAAI,SAASkiC,SAAW/tC,KAAK8nD,YAAYj8C,IAAI,SAASkiC,QAChF,KAAKsc,EAAOL,OACV,OAAuC,IAAhChqD,KAAK6oD,gBAAgBhnD,OAC9B,KAAKwoD,EAAOH,MAEZ,KAAKG,EAAOF,SACV,OAAO,EAEb,EAvMWnvC,SAA6B,mBAAAta,iBAA7Bsa,GAA6Bra,MAAAC,MAAAD,MAAAE,KAAAF,MAAAG,MAAAH,MAAAyB,KAAAzB,MAAAG,MAAAH,MAAAqY,KAAArY,MAAAqf,KAAArf,MAAAsf,MAAAtf,mBAAAuf,KAAA,EAA7BlF,EAA6B,UAAAuwC,EAAA/yC,IAAA,MAA7BwC,EAA6BvC,UAAA,iCAAA4mB,OAAA,CAAAjlB,QAAA,WAAAqhB,YAAA,EAAA8D,SAAA,CAAA5+B,OAAA6+B,MAAA,EAAAC,KAAA,EAAAC,OAAA,y/GAAAC,SAAA,SAAAhnB,EAAAC,GAAA,EAAAD,GDvD1ChY,MAAA,EAAA6qD,GAAA,6BAAiC7qD,MAAA,yDCkDrBmY,KAAYqH,oBAAEjH,KAAgBk5B,KAAYF,KAAYG,KAAet5B,KAAmB0yC,iDAAEnZ,KAAYnG,IAAkB8F,KAAQO,KAAczK,IAA4B+C,KAAe4gB,KAAEhgB,KAAepyB,gBAAA,IAKzM0B,CAA6B,sCCtD1C,MAAM2wC,ECDA,SAAU3mB,IACd,OAAO3a,SAASuhC,qBAAqB,QAAQ,IAAIC,aAAa,SAAW,GAC3E,CDDiB7mB,GAEJ/6B,EAAc,CACzB6hD,YAAY,EACZ5hD,OAAQ,GAAGyhD,QACX1kC,OAAO,GAAG0kC,SACVI,QAAS,2EACTC,WAAY,oTERdrrD,MAAA,GACIA,MAAA,4BACIA,MAAA,KACJA,QACJA,yCAH+BA,MAAA,GAAAA,MAAA,UAAAA,MAAA,EAAA28B,EAAA38B,MAAA,IAAA2V,EAAA21C,WAAAthC,mBAAArU,EAAA41C,cACTvrD,MAAA,GAAAA,MAAA,mBAAA6hC,EAAA,2BAKlB7hC,MAAA,GACIA,MAAA,0BACIA,MAAA,KACJA,QACJA,0CAH6BA,MAAA,GAAAA,MAAA,OAAAogC,EAAAorB,KAAAxrD,OAAa,UAAAA,MAAA,EAAA28B,EAAA38B,MAAA,IAAAogC,EAAAkrB,WAAAthC,mBAAAoW,EAAAmrB,cACpBvrD,MAAA,GAAAA,MAAA,mBAAA6hC,EAAA,2BAIlB7hC,MAAA,0BACIA,MAAA,KACJA,0CAFoDA,MAAA,UAAAA,MAAA,EAAA28B,EAAA38B,MAAA,IAAAsU,EAAAg3C,WAAAthC,mBAAA1V,EAAAi3C,aAAAvrD,CAAqF,aAAAsU,EAAAk3C,MACvHxrD,MAAA,GAAAA,MAAA,mBAAA6hC,EAAA,2BAPtB7hC,MAAA,EAAAyrD,EAAA,sBAKAzrD,MAAA,EAAA0rD,EAAA,yBAAA1rD,wCALeA,MAAA,OAAAu9B,EAAAouB,SAAA3rD,CAAgB,WAAA8hC,EAAA,2BAkBvB9hC,MAAA,GACIA,MAAA,YACJA,+BAD0CA,MAAA,GAAAA,MAAA,QAAAwlC,EAAA4gB,SAAA,0BAEpBpmD,MAAA,gCAAGA,MAAA,MAAAguC,EAAAqE,KAAA,+BANjCryC,MAAA,WACAA,MAAA,WAAAA,CAA6C,SAErCA,MAAA,EAAA4rD,EAAA,sBAGA5rD,MAAA,EAAA6rD,EAAA,0BAAA7rD,OACJA,UAEJA,MAAA,YAAAA,CAA4B,SAEpBA,MAAA,GACJA,UAEJA,MAAA,aACIA,MAAA,IACJA,yCAf2BA,MAAA,GAAAA,MAAA,QAAA+lC,EAAArhC,OAEJ1E,MAAA,GAAAA,MAAA,cAAA+lC,EAAAqgB,UAAA,KAAArgB,EAAAqgB,SAAApmD,CAA4C,WAAAukD,GAQ3DvkD,MAAA,GAAAA,MAAA,IAAA+lC,EAAArhC,MAAA,oDCTL,IAAMonD,EAAoB,MAA3B,MAAOA,EA0BX7sD,YAAmBqsD,EAAgC5qD,EAAiCyV,GAAjE9W,KAAAisD,aAAgCjsD,KAAAqB,SAAiCrB,KAAA8W,QAtB3E9W,KAAAgzC,KAAe,GACfhzC,KAAA+mD,SAA0B,GAI1B/mD,KAAAqF,MAAgB,GAShBrF,KAAAssD,UAAoB,EAEpBtsD,KAAA0sD,iBAA4C,SACpC1sD,KAAA6J,cAAaC,OAAOC,OAGrC/J,KAAAksD,aAAc,EAGZ7qD,EAAO8xB,OACJhzB,QAAKuB,KAAOiJ,GAASA,aAAiByoB,OAAa,EAC9CnmB,MAAmBjN,KAAK6J,aAAU,EAClCxJ,KAAIqK,GAAOA,IAChBW,UAAWX,IACV1K,KAAK2sD,gBAAgBjiD,EAAI/H,IAAIC,MAAM,KAAK,GAAE,EAGhD,CAEA4U,WACEmyB,WAAW,KACT3pC,KAAK2sD,gBAAgB3sD,KAAKqB,OAAOsB,IAAIC,MAAM,KAAK,GAAE,EACjD,IAEL,CAEA+pD,gBAAgBtgC,GACd,YAAkBje,IAAdpO,KAAKmsD,MACPnsD,KAAKksD,aAAc,OACnBlsD,KAAK8W,MAAMa,iBAIR0U,EAAKuX,SAAS,OACjBvX,GAAc,KAGc,WAA1BrsB,KAAK0sD,kBAAiCrgC,IAASrsB,KAAKmsD,MAK1B,eAA1BnsD,KAAK0sD,kBAAqCrgC,EAAKsO,WAAW36B,KAAKmsD,OAJjEnsD,KAAKksD,aAAc,OACnBlsD,KAAK8W,MAAMa,iBASb3X,KAAKksD,aAAc,OACnBlsD,KAAK8W,MAAMa,gBACb,EApEW80C,SAAoB,mBAAA/rD,iBAApB+rD,GAAoB9rD,MAAAC,KAAAD,MAAAE,MAAAF,aAAA,EAApB8rD,EAAoB,UAAAl0C,EAAAC,IAAA,MAApBi0C,EAAoBh0C,UAAA,wBAAA4mB,OAAA,CAAA2T,KAAA,OAAA+T,SAAA,WAAA1hD,MAAA,QAAA8mD,KAAA,OAAAG,SAAA,WAAAI,iBAAA,oBAAAjxB,YAAA,EAAA8D,SAAA,CAAA5+B,OAAAisD,mBAAAvX,EAAA7V,MAAA,EAAAC,KAAA,EAAAC,OAAA,8eAAAC,SAAA,SAAAhnB,EAAAC,MAAA,EAAAD,aDxBjChY,MAAA,EAAAksD,EAAA,sBAMAlsD,MAAA,EAAAmsD,EAAA,yBAAAnsD,OAeAA,MAAA,EAAAosD,GAAA,0BAAApsD,8BArBeA,MAAA,YAAAyN,IAAAwK,EAAAuzC,MAAA,WAAAvzC,EAAAuzC,KAAA,KAAAvzC,EAAAuzC,KAAAtqD,QAAAlB,CAAgD,WAAAqsD,EAAA,iBCmBnDl0C,KAAYhY,oBAAEmsD,KAAYC,MAAgB9zC,OAAA,2kFAAAE,gBAAA,IAKzCmzC,CAAoB,4HCNzB9rD,MAAA,0DAAuDA,MAAA,QAAA0U,EAAA,yDACvD1U,MAAA,WAAAA,CAAoH,cACzDA,MAAA,GAAqBA,QAC5EA,MAAA,WAAAA,CAAwB,cACuCA,MAAA,yBAAA+6B,GAAA/6B,MAAAi9B,GAAA,MAAA0D,EAAA3gC,MAAA,UAAAA,MAAA2gC,EAAA/pB,YAAAmkB,EAAA,GAA3D/6B,QACAA,MAAA,eAAwFA,MAAA,mBAAAA,MAAAi9B,GAAA,MAAAJ,EAAA78B,MAAA,UAAAA,MAAA68B,EAAAjmB,YAAuB,GAAE,GAAG5W,WAAS,8CAH1EA,MAAA,GAAAA,MAAA0U,EAAA,iBAEQ1U,MAAA,GAAAA,MAAA,UAAA6sC,EAAAj2B,aACrC5W,MAAA,GAAAA,MAAA,aAAA0U,EAAA,oDAG9B1U,MAAA,0BAEIA,MAAA,MACIA,MAAA,6BAA6FA,MAAA,yBAAA+6B,GAAA,MAAAyxB,EAAAxsD,MAAA4U,GAAAC,UAAAC,GAAA9U,MAAA,UAAiBA,MAAA8U,GAAA0mB,cAAAT,EAAAyxB,GAA8B,GAAExsD,QAClJA,QACJA,OAAA,wCAL6EA,MAAA,mBAAAwsD,EAAA70C,GAAA,IAAA3X,CAAuC,OAAAsU,EAAAm4C,mBAAAD,EAAAnvC,MAAvCrd,CAAuC,WAAAsU,EAAAo4C,gBAAAF,GAAvCxsD,CAAuC,QAAAwsD,EAAAr/C,KAAvCnN,CAAuC,iCAGtFA,MAAA,GAAAA,MAAA,UAAAsU,EAAAf,QAAAvT,CAAmB,UAAAwsD,EAAAr/C,KAAA,6GA5BrDnN,MAAA,8DAQIA,MAAA,wBAAAA,CAA6F,wBAA7FA,CAA6F,yBAG7FA,MAAA,yBACIA,MAAA,MACIA,MAAA,6BAA4GA,MAAA,2BAAAA,MAAAkgC,GAAA,MAAAoF,EAAAtlC,MAAA,UAAiBA,MAAAslC,EAAAnT,YAAW,GAAEnyB,QAC9IA,QACJA,QACAA,MAAA,2BACAA,MAAA,GAAA2sD,GAAA,4BACA3sD,MAAA,GAAA4sD,GAAA,gCAOA5sD,MAAA,GAAA6sD,GAAA,+CAMJ7sD,OAAA,6CA/BsBA,MAAA,UAAAA,MAAA,GAAA28B,GAAA38B,MAAA,KAAAu9B,EAAA+tB,WAAAthC,oBAAA,IAAAhqB,MAAA,KAAAu9B,EAAA+tB,WAAAphC,qBAAA,IAAAlqB,MAAA,KAAAu9B,EAAAr+B,eAAA2K,oBAQgB7J,MAAA,GAAAA,MAAA,QAAA0U,EAAA,SACA1U,MAAA,GAAAA,MAAA,QAAA0U,EAAA,iBACA1U,MAAA,GAAAA,MAAA,QAAA0U,EAAA,gBACG1U,MAAA,GAAAA,MAAA,QAAA0U,EAAA,kBAEP1U,MAAA,GAAAA,MAAA,UAAAu9B,EAAAprB,oBAGQnS,MAAA,GAAAA,MAAA,QAAA0U,EAAA,cACgE1U,MAAA,GAAAA,MAAA,OAAAu9B,EAAAz1B,UAAA5G,OAAA,GACpElB,MAAA,GAAAA,MAAA,OAAAu9B,EAAAz1B,UAAA5G,OAAA,SAAAlB,MAAA,YAAAu9B,EAAA+tB,WAAA,KAAA/tB,EAAA+tB,WAAAthC,oBAOKhqB,MAAA,GAAAA,MAAA,UAAAA,MAAA,MAAAu9B,EAAAz1B,UAAAy1B,EAAAuvB,eAAA,2BAUzC9sD,MAAA,yDAA+EA,MAAA,mBAAAA,CAAoB,QAAA0U,EAAA,UAApB1U,CAAoB,0IApCzGA,MAAA,GACIA,MAAA,EAAA+sD,GAAA,gCAgCA/sD,MAAA,WAA8BA,MAAA,mBAAAA,MAAAi0C,GAAA,MAAAx+B,EAAAzV,QAAA,OAASA,MAAAyV,EAAAu3C,eAAc,oBAAkEhtD,QACvHA,MAAA,8DAEEA,MAAA,EAAAitD,GAAA,6CACFjtD,QACJA,OAAA,yBArC0NA,MAAA,GAAAA,MAAA,OAAAA,MAAA,IAAA2V,EAAAzW,eAAAK,eAgC/JS,MAAA,GAAAA,MAAA,UAAAA,MAAA,GAAAygC,EAAAzgC,MAAA,IAAA2V,EAAA21C,WAAAthC,qBACnChqB,MAAA,GAAAA,MAAA,UAAAA,MAAA,GAAA00C,GAAA10C,MAAA,IAAA2V,EAAA21C,WAAAthC,oBAAA,IAAAhqB,MAAA,KAAA2V,EAAA21C,WAAAphC,sBAAA,IAAAlqB,MAAA,KAAA2V,EAAAzW,eAAA2K,oBAEE7J,MAAA,GAAAA,MAAA,YAAAA,MAAA,MAAA2V,EAAAzW,eAAA2K,kBAAA,ECEnB,IAAMqjD,EAAgB,MAAvB,MAAOA,EAYXjuD,YAAoB4Z,EACXuS,EAAwCpiB,EACvCmkD,EAAoDC,EACrD9B,GAAgC5qD,GAAiCyV,GAChEk3C,GAA4B3tC,GAA4CxgB,IAJ9DG,KAAAwZ,iBACXxZ,KAAA+rB,iBAAwC/rB,KAAA2J,aACvC3J,KAAA8tD,uBAAoD9tD,KAAA+tD,gBACrD/tD,KAAAisD,cAAgCjsD,KAAAqB,UAAiCrB,KAAA8W,SAChE9W,KAAAguD,YAA4BhuD,KAAAqgB,gBAA4CrgB,KAAAH,kBAdjEG,KAAA6J,cAAaC,OAAOC,OAErC/J,KAAAyI,UAAuB,GACvBzI,KAAAkU,QAAiC,GACjClU,KAAA8S,mBAAqB,CAAC,CAACc,OAAQ5C,IAAOmB,OAAQ9M,MAAO,aAAcyO,SAAU,GAAID,eAAe,EAAMV,SAAUnT,KAAK8yB,UAAUm7B,KAAKjuD,QACpIA,KAAAuX,YAAsB,GACtBvX,KAAAytD,cAAiBrzC,IACRA,GAAQtM,KAAKuJ,cAAcC,SAAStX,KAAKuX,aAAe,IAAIF,gBAAkB,EASnFrX,KAAKqB,OAAO8xB,OAAOhzB,QACjBuB,KAAOiJ,IAASA,cAAiByoB,OAAa,EAC9CnmB,MAAmBjN,KAAK6J,aAAU,EAClCxJ,KAAIqK,IAAOA,KAAoB,EAC/BhJ,KAAO,IAAM1B,KAAK+rB,eAAeskB,sBAAwBC,KAAW8Q,SAAM,EAC1Ej2C,KAAU,IAAMnL,KAAKisD,WAAWthC,oBAAiB,EACjDvqB,KAAK,IAAC,EACNsB,KAAOwsD,KAAcA,KACrB7iD,UAAU,KACVrL,KAAKisD,WAAWzgC,gBAChBxrB,KAAK8W,MAAMa,cAAY,EAE7B,CAEAH,WACExX,KAAKH,eAAeK,aAAaC,QAAKC,KAAK,IAAIiL,UAAU/K,IAClDA,IACLN,KAAKwZ,eAAekL,eAAevkB,QAAKC,KAAK,IAAC,EAAGqU,QAAepJ,UAAW5C,IACzEzI,KAAKyI,UAAYA,EACjBzI,KAAK8W,MAAMa,cAAY,GAEzB3X,KAAKkU,QAAUlU,KAAK8tD,qBAAqB56C,kBAAkBlT,KAAKmuD,aAAaF,KAAKjuD,OAClFA,KAAK8W,MAAMa,eAAY,GAIzB3X,KAAK2J,WAAWc,UAAUtK,QAAK8M,MAAmBjN,KAAK6J,aAAU,EAAGnI,KAAOiJ,GAASA,EAAMA,QAAUC,IAAO8b,kBAAkBrb,UAAUV,IACrI3K,KAAKwZ,eAAekL,eAAevkB,QAAKC,KAAK,IAAC,EAAGqU,QAAepJ,UAAW5C,IACzEzI,KAAKyI,UAAY,IAAIA,GACrBzI,KAAK8W,MAAMa,cAAY,EACxB,EAEL,CAEMw2C,aAAav6C,EAA6BwG,GAAgB,IAAAC,EAAAra,KAAA,SAAAsa,KAAA,YAC9D,OAAQ1G,EAAOA,QACb,KAAK5C,IAAOI,WACJiJ,EAAK0zC,cAAc5zC,YAAYC,GACrC,MACF,KAAKpJ,IAAOQ,sBACJ6I,EAAK0zC,cAAcrzC,gBAAgBN,GACzC,MACF,KAAMpJ,IAAOS,mBACL4I,EAAK0zC,cAAc1yC,aAAajB,GACtC,MACF,KAAMpJ,IAAOM,KACX+I,EAAK0zC,cAAclzC,YAAYT,EAAS,IAAMpY,OAAO4xB,SAAS,EAAG,IAIpE,EAhB6D,EAiBhE,CAEAd,YACE9yB,KAAKguD,SAASjzC,KAAKs9B,IAAyB,CAACp9B,KAAM,MACrD,CAEAkhB,cAAcvoB,EAA6BwG,GACV,mBAApBxG,EAAOT,UAChBS,EAAOT,SAASS,EAAQwG,EAE5B,CAEAgzC,mBAAmBlhC,GACjB,OAAQA,GACN,KAAKjpB,IAAYG,KACf,MAAO,UACT,KAAKH,IAAYE,MACjB,KAAKF,IAAYC,MACf,MAAO,eAEb,CAEAmqD,gBAAgBjzC,GACd,OAAIA,EAAQoG,WAAmBxgB,KAAKqgB,aAAayC,qBAAqB1I,EAAQ9B,IACvE,IACT,CAEAq1C,eACE3tD,KAAKisD,WAAWzgC,eAClB,EAlGWqiC,SAAgB,mBAAAntD,iBAAhBmtD,GAAgBltD,MAAAC,KAAAD,MAAAE,MAAAF,MAAAG,KAAAH,MAAAyB,KAAAzB,MAAAqY,KAAArY,MAAAqf,KAAArf,MAAAsf,MAAAtf,mBAAAuf,MAAAvf,MAAAwf,KAAAxf,MAAA8qD,KAAA,EAAhBoC,EAAgB,UAAAt1C,EAAAC,IAAA,MAAhBq1C,EAAgBp1C,UAAA,mBAAAgjB,YAAA,EAAA8D,SAAA,CAAA5+B,OAAA6+B,MAAA,EAAAC,KAAA,EAAAC,OAAA,q4CAAAC,SAAA,SAAAhnB,EAAAC,GAAA,EAAAD,GDtC7BhY,MAAA,EAAAytD,EAAA,6BAAiCztD,MAAA,2CCiCrBmY,KAAY4yC,oBAAEe,EAAsBjuB,IAA0BvlB,IAAYurB,KAAW6pB,eAAEl1C,MAAkBC,OAAA,+9FAAAE,gBAAA,IAKxGu0C,CAAgB,kFC9BtB,IAAMS,EAAc,MAArB,MAAOA,EAJb1uD,cAMEI,KAAAD,oBAAmB+J,OAAOqN,MAC1BmkB,UAAUh2B,GACR,OAAQA,GACN,KAAK3B,IAAWE,OACd,OAAO7D,KAAKD,iBAAiBU,UAAU,2BACzC,KAAKkD,IAAWW,UACd,OAAOtE,KAAKD,iBAAiBU,UAAU,8BACzC,KAAKkD,IAAWM,SACd,OAAOjE,KAAKD,iBAAiBU,UAAU,6BACzC,KAAKkD,IAAWQ,YACd,OAAOnE,KAAKD,iBAAiBU,UAAU,iCACzC,KAAKkD,IAAWS,OACd,OAAOpE,KAAKD,iBAAiBU,UAAU,2BACzC,KAAKkD,IAAWK,MACd,OAAOhE,KAAKD,iBAAiBU,UAAU,0BACzC,KAAKkD,IAAWO,SACd,OAAOlE,KAAKD,iBAAiBU,UAAU,6BACzC,KAAKkD,IAAWI,UACd,OAAO/D,KAAKD,iBAAiBU,UAAU,8BACzC,KAAKkD,IAAWU,UACd,OAAOrE,KAAKD,iBAAiBU,UAAU,8BACzC,KAAKkD,IAAWG,OACd,OAAO9D,KAAKD,iBAAiBU,UAAU,2BACzC,KAAKkD,IAAWC,MACd,OAAO5D,KAAKD,iBAAiBU,UAAU,0BACzC,QACE,MAAO,GAEb,EA9BW6tD,SAAc,mBAAA5tD,iBAAd4tD,EAAc,EAAdA,EAAc,WAAA/1C,EAAAgjB,IAAA,wBAAd+yB,EAAc9yB,MAAA,EAAAC,YAAA,IAAd6yB,CAAc,4LCJnB3tD,MAAA,GACEA,MAAA,cAGEA,MAAA,SACFA,QACFA,mHAL6CA,MAAA,GAAAA,MAAA,UAAAA,MAAA,EAAA28B,GAAAgE,GAAAitB,aAAA,GAAAC,EAAA3sD,OAAA,EAAA4sD,EAAA5sD,OAAA,EAAA6sD,EAAA7sD,OAAA,OAAA4sD,EAAA5sD,QAAAlB,CACwB,aAAA08B,EADxB18B,CACwB,QAAA0U,EAAA,aADxB1U,CACwB,4BADxBA,CACwB,kDAHvEA,MAAA,GACEA,MAAA,EAAAguD,GAAA,uCAOFhuD,+BAPiBA,MAAA,GAAAA,MAAA,OAAAA,MAAA,IAAAsU,EAAA25C,QAAA,4BAFnBjuD,MAAA,GACEA,MAAA,EAAAkuD,GAAA,uCASFluD,+BATiBA,MAAA,GAAAA,MAAA,OAAAA,MAAA,IAAAuuC,EAAA4f,SAAA,2CAiBTnuD,MAAA,UAAmGA,MAAA,mBAAAA,MAAAsgC,GAAA,MAAAC,EAAAvgC,MAAA,UAASA,MAAAugC,EAAA6tB,uBAAsB,GAChIpuD,MAAA,GACFA,OAAA,oCADEA,MAAA,GAAAA,MAAA,IAAA0U,EAAA,+CAFJ1U,MAAA,GACEA,MAAA,EAAAquD,GAAA,YAGFruD,4CAHwDA,MAAA,GAAAA,MAAA,OAAAsuD,EAAAptD,OAAA,GAAAqtD,EAAArtD,OAAA,8BAF1DlB,MAAA,GACEA,MAAA,EAAAwuD,GAAA,uCAKFxuD,+BALiBA,MAAA,GAAAA,MAAA,OAAAA,MAAA,IAAA8U,EAAAm5C,QAAA,kEAMjBjuD,MAAA,GACEA,MAAA,SAAAA,CAA2C,WACpBA,MAAA,qBAAeA,QACpCA,MAAA,YAA8BA,MAAA,wBAAkBA,QAChDA,MAAA,WAAAA,CAA2D,YAEvDA,MAAA,YACFA,YAGJA,MAAA,SAAAA,CAA2C,YACpBA,MAAA,sBAAeA,QACpCA,MAAA,aAA8BA,MAAA,yBAAkBA,UAElDA,MAAA,UAAAA,CAA2C,SAA3CA,CAA2C,YAElBA,MAAA,qBAAcA,QACnCA,MAAA,aAA8BA,MAAA,+EAAkEA,QAChGA,MAAA,YAAAA,CAA2D,aACtCA,MAAA,IAA6BA,QAChDA,MAAA,aACEA,MAAA,aACFA,cAKNA,MAAA,WAAAA,CAAiD,SAAjDA,CAAiD,YAExBA,MAAA,WAAqDA,MAAA,wCAAiCA,QAC3GA,MAAA,aAA8BA,MAAA,iCAA0BA,UAE1DA,MAAA,gBACFA,QACAA,MAAA,WAAAA,CAAgD,SAAhDA,CAAgD,YAEvBA,MAAA,WAA4CA,MAAA,6CAAsCA,QACvGA,MAAA,aAA8BA,MAAA,iCAA0BA,UAE1DA,MAAA,gBACFA,QACAA,MAAA,UAAAA,CAA2C,YAA3CA,CAA2C,cAGzBA,MAAA,6BACAA,MAAA,cACEA,MAAA,uBACFA,UAEdA,MAAA,aAAsBA,MAAA,6BAAuCA,UAE/DA,MAAA,aAAyBA,MAAA,WAAIA,UAEjCA,+BA/CoHA,MAAA,GAAAA,MAAA,qBAazFA,MAAA,IAAAA,MAAA,GAAAknD,EAAAuH,oBAAA,SAE4BzuD,MAAA,GAAAA,MAAA,UAAAA,MAAA,GAAAygC,GAAA,QAAuCzgC,MAAA,oBAuBrDA,MAAA,IAAAA,MAAA,kBAAAA,CAAmB,cAAnBA,CAAmB,aAKhCA,MAAA,GAAAA,MAAA,eAAAA,MAAA,8CAWtBA,MAAA,YAAyFA,MAAA,GAAoBA,yCAA/CA,MAAA,QAAA0uD,EAAAlS,UAA2Bx8C,MAAA,GAAAA,MAAA0uD,EAAAlS,SAAA,yBAEvFx8C,MAAA,YACEA,MAAA,YACFA,eAD8GA,MAAA,GAAAA,MAAA,gDALlHA,MAAA,SAAAA,CAA2I,WACpHA,MAAA,GAAiBA,QACtCA,MAAA,EAAA2uD,GAAA,cACA3uD,MAAA,YACEA,MAAA,EAAA4uD,GAAA,cAGF5uD,0CANqBA,MAAA,GAAAA,MAAA0uD,EAAAhqD,OACU1E,MAAA,GAAAA,MAAA,YAAA0uD,EAAAlS,UAEex8C,MAAA,GAAAA,MAAA,yBAAA0uD,EAAAlV,SAAA,4BAQ5Cx5C,MAAA,YAAyFA,MAAA,GAAoBA,yCAA/CA,MAAA,QAAA0uD,EAAAlS,UAA2Bx8C,MAAA,GAAAA,MAAA0uD,EAAAlS,SAAA,4BAF3Fx8C,MAAA,SAAAA,CAA2C,WACpBA,MAAA,GAAiBA,QACtCA,MAAA,EAAA6uD,GAAA,cACA7uD,MAAA,WAAAA,CAA2D,YACtCA,MAAA,GAAoDA,QACvEA,MAAA,YACEA,MAAA,YACFA,uDANmBA,MAAA,GAAAA,MAAA0uD,EAAAhqD,OACU1E,MAAA,GAAAA,MAAA,YAAA0uD,EAAAlS,UAEVx8C,MAAA,GAAAA,MAAAk8B,EAAAuyB,oBAAAC,EAAAhnC,KAAA8xB,UAAA,KAE4Bx5C,MAAA,GAAAA,MAAA,UAAAA,MAAA,EAAAygC,GAAA,IAAAiuB,EAAAhnC,KAAA8xB,SAAA,MAAyDx5C,MAAA,oBAAA0uD,EAAAhnC,KAAA8xB,SAAA,4BAjBhHx5C,MAAA,GACEA,MAAA,EAAA8uD,GAAA,aASA9uD,MAAA,EAAA+uD,GAAA,0BAAA/uD,OAYFA,6CArB8CA,MAAA,GAAAA,MAAA,yBAAA0uD,EAAAlV,UAAA,SAAAkV,EAAAlV,SAAAx5C,CAA2E,WAAAgoD,EAAA,4BAF3HhoD,MAAA,GACEA,MAAA,EAAAgvD,GAAA,uBAuBFhvD,6BAvBoCA,MAAA,GAAAA,MAAA,UAAAivD,EAAA,2CA4BhCjvD,MAAA,WAAiHA,MAAA,mBAAAA,MAAAkvD,GAAA,MAAAC,EAAAnvD,QAAA6U,UAAA+5B,EAAA5uC,MAAA,UAASA,MAAA4uC,EAAAwgB,2BAAAD,GAAwC,GAChKnvD,MAAA,UAA+DA,MAAA,GACjEA,OAAA,oCADiEA,MAAA,GAAAA,MAAA,GAAA0U,EAAA,oDAI/D1U,MAAA,YAA8DA,MAAA,GAAyBA,yCAAzBA,MAAA,GAAAA,MAAAmvD,EAAA3S,SAAA,4BAFhEx8C,MAAA,UAAAA,CAAiH,SAC1GA,MAAA,GAAsBA,QAC3BA,MAAA,EAAAqvD,GAAA,cACFrvD,wCAFOA,MAAA,GAAAA,MAAAmvD,EAAAzqD,OACqB1E,MAAA,GAAAA,MAAA,YAAAmvD,EAAA3S,SAAA,4BAN9Bx8C,MAAA,GACEA,MAAA,EAAAsvD,GAAA,aAGAtvD,MAAA,EAAAuvD,GAAA,aAIFvvD,6CAP+DA,MAAA,GAAAA,MAAA,OAAAmvD,EAAAhiD,OAAAq7C,EAAAv+C,OAAA8a,iBAGA/kB,MAAA,GAAAA,MAAA,OAAAmvD,EAAAhiD,OAAAq7C,EAAAv+C,OAAA8a,gBAAA,4BALjE/kB,MAAA,GACEA,MAAA,EAAAwvD,GAAA,uBASFxvD,6BATyCA,MAAA,GAAAA,MAAA,UAAAyvD,EAAA,4BAgBnCzvD,MAAA,YAA2FA,MAAA,GAAqBA,wCAAjDA,MAAA,QAAA0vD,EAAAlT,UAA4Bx8C,MAAA,GAAAA,MAAA0vD,EAAAlT,SAAA,iEAH/Fx8C,MAAA,GACEA,MAAA,SAAAA,CAA2C,WACpBA,MAAA,2BAAqEA,QAC1FA,MAAA,EAAA2vD,GAAA,cACA3vD,MAAA,WAAAA,CAA2D,YACtCA,MAAA,GAAsBA,QACzCA,MAAA,YACEA,MAAA,aACFA,YAGNA,uDATyBA,MAAA,GAAAA,MAAA0U,EAAA,mBAAA1U,MAAA,EAAA00C,GAAA10C,MAAA,IAAA0vD,EAAAhV,eACU16C,MAAA,GAAAA,MAAA,YAAA0vD,EAAAlT,UAEVx8C,MAAA,GAAAA,MAAA,GAAA0vD,EAAAlW,SAAA,KAE4Bx5C,MAAA,GAAAA,MAAA,UAAAA,MAAA,EAAAygC,GAAAivB,EAAAlW,SAAA,MAA+Cx5C,MAAA,gBAAA0vD,EAAAlW,SAAA,4BARtGx5C,MAAA,GACEA,MAAA,EAAA4vD,GAAA,yBAYF5vD,6BAZqCA,MAAA,GAAAA,MAAA,UAAA6vD,EAAA,2CAiBnC7vD,MAAA,GACEA,MAAA,WAA8DA,MAAA,yBAAA8vD,EAAA9vD,MAAA+vD,GAAAl7C,UAAAm7C,EAAAhwD,MAAA,UAASA,MAAAgwD,EAAAC,QAAAH,GAAc,GACnF9vD,MAAA,QAAAA,CAAK,WACkBA,MAAA,UAAqDA,MAAA,GAAeA,QACzFA,MAAA,YAA8BA,MAAA,GAAkBA,UAElDA,MAAA,eAAiFA,MAAA,iBAAA+6B,GAAA,MAAA+0B,EAAA9vD,MAAA+vD,GAAAl7C,UAAAyhC,GAAAt2C,MAAA,UAASA,MAAAs2C,GAAA4Z,kBAAAJ,EAAA/0B,GAAgC,GAAE/6B,UAEhIA,OAAA,kDALgFA,MAAA,GAAAA,MAAA8vD,EAAAprD,OAC5C1E,MAAA,GAAAA,MAAA0U,EAAA,cAEkB1U,MAAA,GAAAA,MAAA,aAAA0U,EAAA,qCAPxD1U,MAAA,GACEA,MAAA,EAAAmwD,GAAA,uBASFnwD,6BATkCA,MAAA,GAAAA,MAAA,UAAAowD,EAAA,2CAahCpwD,MAAA,GACEA,MAAA,WAA6DA,MAAA,yBAAAqwD,EAAArwD,MAAAswD,GAAAz7C,UAAA07C,EAAAvwD,MAAA,UAASA,MAAAuwD,EAAAN,QAAAI,GAAa,GACjFrwD,MAAA,QAAAA,CAAK,WACkBA,MAAA,UAA4CA,MAAA,GAAcA,QAC/EA,MAAA,YAA8BA,MAAA,GAAkBA,UAElDA,MAAA,eAAiFA,MAAA,iBAAA+6B,GAAA,MAAAs1B,EAAArwD,MAAAswD,GAAAz7C,UAAA27C,GAAAxwD,MAAA,UAASA,MAAAwwD,GAAAN,kBAAAG,EAAAt1B,GAA+B,GAAE/6B,UAE/HA,OAAA,kDALuEA,MAAA,GAAAA,MAAAqwD,EAAA3rD,OACnC1E,MAAA,GAAAA,MAAA0U,EAAA,cAEkB1U,MAAA,GAAAA,MAAA,aAAA0U,EAAA,qCAPxD1U,MAAA,GACEA,MAAA,EAAAywD,GAAA,uBASFzwD,6BATiCA,MAAA,GAAAA,MAAA,UAAA0wD,EAAA,gEAa/B1wD,MAAA,SAAAA,CAA0E,SACnEA,MAAA,GAAsDA,0DAAtDA,MAAA,GAAAA,MAAA0U,EAAA,qBAAA1U,MAAA,EAAA2wD,GAAAC,EAAA1vD,SAAA,4BAEPlB,MAAA,UAA6DA,MAAA,GAA6CA,mDAA7CA,MAAA,GAAAA,MAAA,GAAA0U,EAAA,2BAAAm8C,EAAAjD,aAAA,+BAJ/D5tD,MAAA,GACEA,MAAA,EAAA8wD,GAAA,aAGA9wD,MAAA,EAAA+wD,GAAA,aACF/wD,wCAJ8CA,MAAA,GAAAA,MAAA,OAAA4wD,EAAA1vD,OAAA,GAGAlB,MAAA,GAAAA,MAAA,OAAAgxD,EAAAC,UAAA,4BAI5CjxD,MAAA,UAAsGA,MAAA,GAAgBA,yCAAhBA,MAAA,GAAAA,MAAA0U,EAAA,uCADxG1U,MAAA,GACEA,MAAA,EAAAkxD,GAAA,aACFlxD,wCAD8CA,MAAA,GAAAA,MAAA,WAAAu7B,EAAAqyB,cAAA,IAAAuD,EAAAjwD,OAAA,4BA3JhDlB,MAAA,UACEA,MAAA,EAAAoxD,GAAA,uCAOApxD,MAAA,EAAAqxD,GAAA,wBAwDArxD,MAAA,EAAAsxD,GAAA,uCA2BAtxD,MAAA,EAAAuxD,GAAA,uCAaAvxD,MAAA,EAAAwxD,GAAA,uCAiBAxxD,MAAA,GAAAyxD,GAAA,wCAaAzxD,MAAA,GAAA0xD,GAAA,wCAaA1xD,MAAA,GAAA2xD,GAAA,wCAOA3xD,MAAA,GAAA4xD,GAAA,wCAIF5xD,+BA7JiBA,MAAA,GAAAA,MAAA,OAAAA,MAAA,IAAAogC,EAAA+tB,UAOAnuD,MAAA,GAAAA,MAAA,OAAAogC,EAAA6wB,WAwDAjxD,MAAA,GAAAA,MAAA,OAAAA,MAAA,KAAAogC,EAAAyxB,kBA2BA7xD,MAAA,GAAAA,MAAA,OAAAA,MAAA,KAAAogC,EAAA0xB,iBAaA9xD,MAAA,GAAAA,MAAA,OAAAA,MAAA,KAAAogC,EAAA2xB,gBAAAzX,mBAiBAt6C,MAAA,GAAAA,MAAA,OAAAA,MAAA,MAAAogC,EAAA+tB,UAaAnuD,MAAA,GAAAA,MAAA,OAAAA,MAAA,MAAAogC,EAAA6tB,SAaAjuD,MAAA,GAAAA,MAAA,OAAAA,MAAA,MAAAogC,EAAAp3B,WAAA0d,eAOA1mB,MAAA,GAAAA,MAAA,OAAAA,MAAA,MAAAogC,EAAA2xB,gBAAAzX,kBAAA,4BA1KrBt6C,MAAA,GACEA,MAAA,EAAAgyD,GAAA,uCAaAhyD,MAAA,EAAAiyD,GAAA,2BAAAjyD,OAkKFA,+BA/KiBA,MAAA,GAAAA,MAAA,OAAAA,MAAA,IAAAu9B,EAAAw0B,gBAAAzX,kBAAA,4BAFnBt6C,MAAA,GACEA,MAAA,EAAAkyD,GAAA,uCAiLFlyD,8BAjLiBA,MAAA,GAAAA,MAAA,OAAAA,MAAA,IAAA2V,EAAAw8C,UAAA,ECqCV,IAAMC,GAAqB,MAA5B,MAAOA,EA4BPnoD,aACF,OAAOA,GACT,CAEAhL,YAAmB+J,EAAuCgQ,EAChD9Z,EAAwC+Z,EAC/B9C,EAAiC47C,IAFjC1yD,KAAA2J,aAAuC3J,KAAA2Z,eAChD3Z,KAAAH,iBAAwCG,KAAA4Z,iBAC/B5Z,KAAA8W,QAAiC9W,KAAA0yD,mBAhCnC1yD,KAAA6J,cAAaC,OAAOC,OAErC/J,KAAA8yD,YAAgChwD,QAAG,GAKnC9C,KAAAgzD,qBAAuB,IAAI5rC,IAA6C,IACxEpnB,KAAAwyD,gBAAkBxyD,KAAKgzD,qBAAqB1oD,eAE5CtK,KAAAizD,mBAAqB,IAAI7rC,IAA6C,IACtEpnB,KAAAyyD,eAAiBzyD,KAAKizD,mBAAmB3oD,eAEzCtK,KAAAkzD,YAAc,IAAI9rC,IAA8B,IAChDpnB,KAAA8uD,QAAU9uD,KAAKkzD,YAAY5oD,eAE3BtK,KAAAmzD,WAAa,IAAI/rC,IAA6B,IAC9CpnB,KAAA4uD,OAAS5uD,KAAKmzD,WAAW7oD,eAEjBtK,KAAAozD,2BAAiD,KAEzDpzD,KAAAuuD,aAAuB,EAEvBvuD,KAAA4xD,WAAqB,CAUnB,CAEF33C,cACEja,KAAKgzD,qBAAqB94C,WAC1Bla,KAAKizD,mBAAmB/4C,WACxBla,KAAKkzD,YAAYh5C,UACnB,CAEA1C,WACExX,KAAK2J,WAAWc,UAAUtK,QAAK8M,MAAmBjN,KAAK6J,aAAawB,UAAWV,IAC7E,GAAIA,EAAMA,QAAUC,IAAOyb,qBACzBrmB,KAAKqzD,iCAAiC1oD,QAAK,GAClCA,EAAMA,QAAUC,IAAOqb,MAAO,CACvC,MAAMg3B,EAASj9C,KAAKkzD,YAAYhW,WAChCD,EAAO1vC,KAAK5C,EAAMG,SAClB9K,KAAKkzD,YAAY3wD,KAAK06C,GACtBj9C,KAAKuuD,cAAgB,EACrBvuD,KAAK8W,MAAMa,cAAY,SACdhN,EAAMA,QAAUC,IAAO2G,KAAM,CACtC,MAAM0rC,EAASj9C,KAAKmzD,WAAWjW,WAC/BD,EAAO1vC,KAAK5C,EAAMG,SAClB9K,KAAKmzD,WAAW5wD,KAAK06C,GACrBj9C,KAAKuuD,cAAgB,EACrBvuD,KAAK8W,MAAMa,cAAY,MACdhN,EAAMA,QAAUC,IAAO8a,iBAChC1lB,KAAK+vD,2BAA2BplD,EAAMG,QAAO,GAIjD9K,KAAK8yD,SAAW9yD,KAAKH,eAAeK,aAAaC,QAC/C8M,MAAmBjN,KAAK6J,aAAU,EAClCxJ,KAAIC,GAASA,GAAQN,KAAKH,eAAeU,aAAaD,KAAU,IAAK,EACrEmU,OAEJ,CAEA4+C,iCAAiC1oD,GAC/B,MAAM/I,EAAU+I,EAAMG,QACtB,IAAIkJ,EACJ,OAAQrJ,EAAMG,QAAQyc,WACpB,IAAK,SACH,MAAM01B,EAASj9C,KAAKizD,mBAAmB/V,WACvCD,EAAO1vC,KAAK3L,GACZ5B,KAAKizD,mBAAmB1wD,KAAK06C,GAC7Bj9C,KAAKuuD,cAAgB,EACrBvuD,KAAK8W,MAAMa,eACX,MACF,IAAK,UAKL,IAAK,UACH3D,EAAOhU,KAAKszD,cAActzD,KAAKgzD,qBAAqB9V,WAAYt7C,GAChE5B,KAAKgzD,qBAAqBzwD,KAAKyR,GAC/B,MACF,IAAK,QACHA,EAAOhU,KAAKgzD,qBAAqB9V,WACjClpC,EAAOA,EAAKtS,OAAO6xD,GAAKA,EAAEzlD,OAASlM,EAAQkM,MAC3C9N,KAAKgzD,qBAAqBzwD,KAAKyR,GAC/BhU,KAAKuuD,aAAe3qC,KAAKiqB,IAAI7tC,KAAKuuD,aAAe,EAAG,GACpDvuD,KAAK8W,MAAMa,eAKjB,CAEQ27C,cAAct/C,EAAmCpS,GACvD,MAAMqV,EAAQjD,EAAKolC,UAAUma,GAAKA,EAAEzlD,OAASlM,EAAQkM,MAErD,OAAImJ,EAAQ,GACVjD,EAAKzG,KAAK3L,GACV5B,KAAKuuD,cAAgB,EACrBvuD,KAAK8W,MAAMa,gBAEX3D,EAAKiD,GAASrV,EAEToS,CACT,CAGA+7C,2BAA2BnuD,GACc,MAAnC5B,KAAKozD,6BACTpzD,KAAKozD,2BAA6BpzD,KAAK2Z,aAAaoB,KAAK0sC,KAAkC,CAAE5pC,YAAY,EAAM5C,KAAM,OAEnHjb,KAAKozD,2BAA2Bl4C,kBAAkBgsC,WADhDtlD,EAAQ2Y,eAAe,QACuC3Y,EAAsCymB,KAEvCzmB,EAGjE5B,KAAKozD,2BAA2Bj4C,OAAO9P,UAAU,KAC/CrL,KAAKozD,2BAA6B,OAEpCpzD,KAAKozD,2BAA2Bj1C,UAAU9S,UAAU,KAClDrL,KAAKozD,2BAA6B,OAEtC,CAEMxC,QAAQjmD,GAA6B,IAAA0P,EAAAra,KAAA,SAAAsa,KAAA,YACzC,MAAMirC,EAAS,IAAIZ,IAEjBY,EAAOT,QADLn6C,EAAMmD,OAASlD,IAAOqb,MACP,CACf,CAACm/B,KAAM,KAAMpnC,KAAM,aACnB,CAAConC,KAAM,UAAWpnC,KAAM,YAGT,CACf,CAAConC,KAAM,KAAMpnC,KAAM,YAGvBunC,EAAOV,OAASl6C,EAAMtF,MACtBkgD,EAAO/rB,QAAU7uB,EAAMwyC,gBACF9iC,EAAKT,eAAe2B,MAAM5Q,EAAMwyC,UAAYxyC,EAAMtF,MAAOkgD,KAE5ElrC,EAAKw2C,kBAAkBlmD,EACxB,EAjBwC,EAkB3C,CAEAokD,uBACE,MAAMyE,EAAYxzD,KAAKmzD,WAAWjW,WAAWr7C,OACvC4xD,EAAazzD,KAAKkzD,YAAYhW,WAAWr7C,OAC/C7B,KAAKmzD,WAAW5wD,KAAK,IACrBvC,KAAKkzD,YAAY3wD,KAAK,IACtBvC,KAAKuuD,cAAgB3qC,KAAKiqB,IAAI2lB,EAAYC,EAAY,GACtDzzD,KAAK8W,MAAMa,cACb,CAEAk5C,kBAAkB6C,EAAsC/oD,GAClDA,IACFA,EAAMk0B,kBACNl0B,EAAMm0B,kBAER,IAAI9qB,EAAO,GACP0/C,EAAa5lD,OAASlD,IAAO2G,MAC/ByC,EAAOhU,KAAKmzD,WAAWjW,WACvBlpC,EAAOA,EAAKtS,OAAO6xD,GAAKA,IAAMG,GAC9B1zD,KAAKmzD,WAAW5wD,KAAKyR,KAErBA,EAAOhU,KAAKkzD,YAAYhW,WACxBlpC,EAAOA,EAAKtS,OAAO6xD,GAAKA,IAAMG,GAC9B1zD,KAAKkzD,YAAY3wD,KAAKyR,IAExBhU,KAAKuuD,aAAe3qC,KAAKiqB,IAAI7tC,KAAKuuD,aAAe,EAAG,GACpDvuD,KAAK8W,MAAMa,cACb,CAEAy3C,oBAAoBjV,GAClB,OAAOv2B,KAAK+vC,MAAiB,IAAXxZ,EACpB,EAxLW4Y,SAAqB,mBAAAryD,iBAArBqyD,GAAqBpyD,MAAAC,KAAAD,MAAAE,MAAAF,MAAAG,KAAAH,MAAAyB,MAAAzB,mBAAAqY,MAAA,EAArB+5C,EAAqB,UAAAx6C,EAAAC,IAAA,MAArBu6C,EAAqBt6C,UAAA,4BAAA4mB,OAAA,CAAA/+B,KAAA,QAAAm7B,YAAA,EAAA8D,SAAA,CAAA5+B,OAAA6+B,MAAA,EAAAC,KAAA,EAAAC,OAAA,inEAAAC,SAAA,SAAAhnB,EAAAC,GAAA,EAAAD,GDtClChY,MAAA,EAAAizD,GAAA,2BAAiCjzD,MAAA,gDCoCrB+jC,KAAME,KAASivB,KAAYC,KAAStP,KAAyB7f,KAAO8N,KAAWtG,KAAkBhzB,MAAkBC,OAAA,ypEAAAE,gBAAA,IAElHy5C,CAAqB,mECtClCpyD,MAAA,GACIA,MAAA,2DAAmGA,MAAA,WACnGA,MAAA,GACJA,8BAFOA,MAAA,GAAAA,MAAA,MAAAA,MAAA,IAAA2V,EAAA4V,QAAA,IAA2DvrB,MAAA,QAAAA,MAAA,IAAA2V,EAAA4V,QAAA,iBCiB3D,IAAM6nC,GAAqB,MAA5B,MAAOA,EAZbn0D,cAcWI,KAAAksB,OAAsB7oB,KAAYG,QAEvCH,kBACF,OAAOA,IACT,EANW0wD,SAAqB,mBAAArzD,iBAArBqzD,EAAqB,EAArBA,EAAqB,UAAAx7C,EAAAC,IAAA,MAArBu7C,EAAqBt7C,UAAA,wBAAA4mB,OAAA,CAAAnT,OAAA,UAAAuP,YAAA,EAAA8D,SAAA,CAAA5+B,OAAAisD,mBAAAtvB,GAAAkC,MAAA,EAAAC,KAAA,EAAAC,OAAA,8CAAAC,SAAA,SAAAhnB,EAAAC,GAAA,EAAAD,YDlBlChY,MAAA,EAAAqzD,GAAA,4BAAerzD,MAAA,OAAAiY,EAAAsT,SAAAtT,EAAAvV,YAAAG,wBCUXsV,KAAYlY,KACZirC,KACAC,MAAexyB,gBAAA,IAMNy6C,CAAqB,yTCT1BpzD,MAAA,UAAAA,CAA8E,aAC9CA,MAAA,GAAgBA,0CAAhBA,MAAA,GAAAA,MAAA0U,EAAA,sDAEhC1U,MAAA,eAAuEA,MAAA,mBAAAA,MAAAqU,GAAA,MAAAC,EAAAtU,MAAA,UAASA,MAAAsU,EAAAg/C,aAAY,GAA2DtzD,OAAA,mCAA/GA,MAAA,aAAA0U,EAAA,sGAQpC1U,MAAA,WAAkEA,MAAA,yBAAAuzD,EAAAvzD,MAAAs7B,GAAAzmB,UAAA2+C,EAAAxzD,MAAA,UAASA,MAAAwzD,EAAAC,iBAAAF,GAAwB,GAEjGvzD,MAAA,MACFA,OAAA,kDADgBA,MAAA,GAAAA,MAAA,mBAAAyV,EAAAi+C,eAAA1zD,CAAmC,0BAAAA,MAAA,EAAA2zD,GAAAJ,EAAAK,GAAA,4BALvD5zD,MAAA,GACEA,MAAA,UAAAA,CAA2C,WAAsBA,MAAA,YAAMA,UACvEA,MAAA,WACEA,MAAA,EAAA6zD,GAAA,aAIF7zD,QACFA,+BAL2BA,MAAA,GAAAA,MAAA,UAAAguC,EAAA8lB,YAAA/rD,OAAA,2CAUvB/H,MAAA,WAAuEA,MAAA,yBAAA+zD,EAAA/zD,MAAAg0D,GAAAn/C,UAAAsxB,EAAAnmC,MAAA,UAASA,MAAAmmC,EAAAstB,iBAAAM,GAAwB,GAEtG/zD,MAAA,MACFA,OAAA,kDADgBA,MAAA,GAAAA,MAAA,mBAAAy7B,EAAAw4B,mBAAAj0D,CAAuC,0BAAAA,MAAA,EAAA2zD,GAAAI,EAAAG,GAAA,4BAL3Dl0D,MAAA,GACEA,MAAA,UAAAA,CAA2C,QAAIA,MAAA,GAAoBA,UACnEA,MAAA,WACEA,MAAA,EAAAm0D,GAAA,aAIFn0D,QACFA,mDAPiDA,MAAA,GAAAA,MAAA0U,EAAA,gBAEtB1U,MAAA,GAAAA,MAAA,UAAA68B,EAAAi3B,YAAA9rD,YAAA,2CAUvBhI,MAAA,WAAwEA,MAAA,yBAAAo0D,EAAAp0D,MAAAgoD,GAAAnzC,UAAAmsB,EAAAhhC,MAAA,UAASA,MAAAghC,EAAAyyB,iBAAAW,GAAwB,GAEvGp0D,MAAA,MACFA,OAAA,kDADgBA,MAAA,GAAAA,MAAA,mBAAAq0D,EAAAC,oBAAAt0D,CAAwC,0BAAAA,MAAA,EAAA2zD,GAAAS,EAAAG,GAAA,4BAL5Dv0D,MAAA,GACEA,MAAA,UAAAA,CAA2C,QAAIA,MAAA,GAAsBA,UACrEA,MAAA,WACEA,MAAA,EAAAw0D,GAAA,aAIFx0D,QACFA,mDAPiDA,MAAA,GAAAA,MAAA0U,EAAA,kBAEtB1U,MAAA,GAAAA,MAAA,UAAA8/B,EAAAg0B,YAAA7rD,aAAA,2CAUvBjI,MAAA,WAAqEA,MAAA,yBAAAy0D,EAAAz0D,MAAA00D,GAAA7/C,UAAA8/C,EAAA30D,MAAA,UAASA,MAAA20D,EAAAlB,iBAAAgB,GAAwB,GAEpGz0D,MAAA,MACFA,OAAA,kDADgBA,MAAA,GAAAA,MAAA,mBAAA0hC,EAAAkzB,gBAAA50D,CAAoC,0BAAAA,MAAA,EAAA2zD,GAAAc,EAAAI,GAAA,4BALxD70D,MAAA,GACEA,MAAA,UAAAA,CAA2C,WAAyBA,MAAA,GAAkBA,UACtFA,MAAA,WACEA,MAAA,EAAA80D,GAAA,aAIF90D,QACFA,mDAPsEA,MAAA,GAAAA,MAAA0U,EAAA,cAE3C1U,MAAA,GAAAA,MAAA,UAAA+0D,EAAAjB,YAAAhsD,UAAA,2CAUvB9H,MAAA,WAAkEA,MAAA,yBAAAg1D,EAAAh1D,MAAAwuC,GAAA35B,UAAA45B,EAAAzuC,MAAA,UAASA,MAAAyuC,EAAAglB,iBAAAuB,GAAwB,GAEjGh1D,MAAA,MACFA,OAAA,kDADgBA,MAAA,GAAAA,MAAA,mBAAAi1D,EAAAC,cAAAl1D,CAAkC,0BAAAA,MAAA,EAAA2zD,GAAAqB,EAAAG,GAAA,4BALtDn1D,MAAA,GACEA,MAAA,UAAAA,CAA2C,QAAIA,MAAA,GAAeA,UAC9DA,MAAA,WACEA,MAAA,EAAAo1D,GAAA,aAIFp1D,QACFA,mDAPiDA,MAAA,GAAAA,MAAA0U,EAAA,WAEtB1U,MAAA,GAAAA,MAAA,UAAA8U,EAAAg/C,YAAA3rD,OAAA,2CAUvBnI,MAAA,WAAgEA,MAAA,yBAAAq1D,EAAAr1D,MAAAs1D,GAAAzgD,UAAA0gD,EAAAv1D,MAAA,UAASA,MAAAu1D,EAAA9B,iBAAA4B,GAAwB,GAE/Fr1D,MAAA,MACFA,OAAA,kDADgBA,MAAA,GAAAA,MAAA,mBAAA4uC,EAAA4mB,YAAAx1D,CAAgC,0BAAAA,MAAA,EAAA2zD,GAAA0B,EAAAI,GAAA,4BALpDz1D,MAAA,GACEA,MAAA,UAAAA,CAA2C,QAAIA,MAAA,GAAaA,UAC5DA,MAAA,WACEA,MAAA,EAAA01D,GAAA,aAIF11D,QACFA,mDAPiDA,MAAA,GAAAA,MAAA0U,EAAA,SAEtB1U,MAAA,GAAAA,MAAA,UAAAknD,EAAA4M,YAAA1rD,KAAA,2CAUvBpI,MAAA,WAAmEA,MAAA,yBAAA21D,EAAA31D,MAAA41D,GAAA/gD,UAAAghD,EAAA71D,MAAA,UAASA,MAAA61D,EAAApC,iBAAAkC,GAAwB,GAElG31D,MAAA,MACFA,OAAA,kDADgBA,MAAA,GAAAA,MAAA,mBAAAwvC,EAAAsmB,eAAA91D,CAAmC,0BAAAA,MAAA,EAAA2zD,GAAAgC,EAAAI,GAAA,4BALvD/1D,MAAA,GACEA,MAAA,UAAAA,CAA2C,QAAIA,MAAA,GAAeA,UAC9DA,MAAA,WACEA,MAAA,EAAAg2D,GAAA,aAIFh2D,QACFA,mDAPiDA,MAAA,GAAAA,MAAA0U,EAAA,WAEtB1U,MAAA,GAAAA,MAAA,UAAAslC,EAAAwuB,YAAA5rD,QAAA,2CAUvBlI,MAAA,WAAoEA,MAAA,yBAAAi2D,EAAAj2D,MAAAk2D,GAAArhD,UAAAshD,EAAAn2D,MAAA,UAASA,MAAAm2D,EAAA1C,iBAAAwC,GAAwB,GAEnGj2D,MAAA,MACFA,OAAA,kDADgBA,MAAA,GAAAA,MAAA,mBAAAo2D,EAAAC,gBAAAr2D,CAAoC,0BAAAA,MAAA,EAAA2zD,GAAAsC,EAAAK,GAAA,4BALxDt2D,MAAA,GACEA,MAAA,UAAAA,CAA2C,QAAIA,MAAA,GAAiBA,UAChEA,MAAA,WACEA,MAAA,EAAAu2D,GAAA,aAIFv2D,QACFA,mDAPiDA,MAAA,GAAAA,MAAA0U,EAAA,aAEtB1U,MAAA,GAAAA,MAAA,UAAAw2D,EAAA1C,YAAAxrD,SAAA,2CAUvBtI,MAAA,WAAiEA,MAAA,yBAAAy2D,EAAAz2D,MAAA02D,GAAA7hD,UAAAiiC,EAAA92C,MAAA,UAASA,MAAA82C,EAAA2c,iBAAAgD,GAAwB,GAEhGz2D,MAAA,MACFA,OAAA,kDADgBA,MAAA,GAAAA,MAAA,mBAAAs2C,EAAAqgB,aAAA32D,CAAiC,0BAAAA,MAAA,EAAA2zD,GAAA8C,EAAAG,GAAA,4BALrD52D,MAAA,GACEA,MAAA,UAAAA,CAA2C,QAAIA,MAAA,GAAcA,UAC7DA,MAAA,WACEA,MAAA,EAAA62D,GAAA,aAIF72D,QACFA,mDAPiDA,MAAA,GAAAA,MAAA0U,EAAA,UAEtB1U,MAAA,GAAAA,MAAA,UAAAmV,EAAA2+C,YAAAzrD,MAAA,4BAO3BrI,MAAA,GACEA,MAAA,UAAAA,CAA+B,WAE3BA,MAAA,MACFA,UAGJA,+BAJoBA,MAAA,GAAAA,MAAA,mBAAA2lC,EAAAmxB,kBAAA,4BA/FxB92D,MAAA,WAAAA,CAAuC,WAEnCA,MAAA,EAAA+2D,GAAA,uBAUA/2D,MAAA,EAAAg3D,GAAA,uBAUAh3D,MAAA,EAAAi3D,GAAA,uBAUAj3D,MAAA,EAAAk3D,GAAA,uBAUAl3D,MAAA,EAAAm3D,GAAA,uBAUAn3D,MAAA,EAAAo3D,GAAA,uBAUAp3D,MAAA,EAAAq3D,GAAA,uBAUAr3D,MAAA,EAAAs3D,GAAA,uBAUAt3D,MAAA,GAAAu3D,GAAA,uBAUAv3D,MAAA,GAAAw3D,GAAA,uBAQFx3D,iCAlGiBA,MAAA,GAAAA,MAAA,YAAAyN,IAAA2yB,EAAAszB,gBAAAtzB,EAAA0zB,YAAA/rD,OAAA7G,OAAA,GAUAlB,MAAA,GAAAA,MAAA,YAAAyN,IAAA2yB,EAAA6zB,oBAAA7zB,EAAA0zB,YAAA9rD,YAAA9G,OAAA,GAUAlB,MAAA,GAAAA,MAAA,YAAAyN,IAAA2yB,EAAAk0B,qBAAAl0B,EAAA0zB,YAAA7rD,aAAA/G,OAAA,GAUAlB,MAAA,GAAAA,MAAA,YAAAyN,IAAA2yB,EAAAw0B,iBAAAx0B,EAAA0zB,YAAAhsD,UAAA5G,OAAA,GAUAlB,MAAA,GAAAA,MAAA,YAAAyN,IAAA2yB,EAAA80B,eAAA90B,EAAA0zB,YAAA3rD,OAAAjH,OAAA,GAUAlB,MAAA,GAAAA,MAAA,YAAAyN,IAAA2yB,EAAAo1B,aAAAp1B,EAAA0zB,YAAA1rD,KAAAlH,OAAA,GAUAlB,MAAA,GAAAA,MAAA,YAAAyN,IAAA2yB,EAAA01B,gBAAA11B,EAAA0zB,YAAA5rD,QAAAhH,OAAA,GAUAlB,MAAA,GAAAA,MAAA,YAAAyN,IAAA2yB,EAAAi2B,iBAAAj2B,EAAA0zB,YAAAxrD,SAAApH,OAAA,GAUAlB,MAAA,GAAAA,MAAA,YAAAyN,IAAA2yB,EAAAu2B,cAAAv2B,EAAA0zB,YAAAzrD,MAAAnH,OAAA,GAUAlB,MAAA,GAAAA,MAAA,QAAAogC,EAAAq3B,SAAAr3B,EAAAs3B,WAAAx2D,OAAA,qFA3GvBlB,MAAA,GACEA,MAAA,WAAAA,CAA4D,WACKA,MAAA,iBAAA+6B,GAAA/6B,MAAA23D,GAAA,MAAAC,EAAA53D,QAAA,OAASA,MAAA43D,EAAAC,aAAA98B,GAAoB,GAC1F/6B,MAAA,UAAAA,CAAoB,eAIcA,MAAA,oBAAA+6B,GAAA/6B,MAAA23D,GAAA,MAAAG,EAAA93D,QAAA,OAAYA,MAAA83D,EAAA1iD,MAAA2lB,GAAa,EAAzB/6B,CAA0B,iBAAA+6B,GAAA/6B,MAAA23D,GAAA,MAAAI,EAAA/3D,QAAA,OAAUA,MAAA+3D,EAAA39C,KAAA2gB,GAAY,GAHhF/6B,QAKAA,MAAA,EAAAg4D,GAAA,aAGAh4D,MAAA,EAAAi4D,GAAA,gBACFj4D,UAEFA,MAAA,EAAAk4D,GAAA,eAuGFl4D,QAEFA,OAAA,+BAvHQA,MAAA,GAAAA,MAAA,YAAA2V,EAAAwiD,eACyBn4D,MAAA,GAAAA,MAAA,UAAAA,MAAA,EAAAo4D,GAAAziD,EAAA0iD,WAEXr4D,MAAA,GAAAA,MAAA,KAAA2V,EAAAgC,GAAA3X,CAAS,cAAA2V,EAAA2iD,aAEhBt4D,MAAA,gBAAA2V,EAAA0iD,UAAA1iD,EAAA8hD,SAGsDz3D,MAAA,GAAAA,MAAA,OAAA2V,EAAAmiC,WAGkC93C,MAAA,GAAAA,MAAA,eAAAu4D,EAAA5iD,EAAAwiD,cAAAjtD,IAAA,mBAAAqtD,EAAA5zD,MAAAzD,QAAA,GAG5ElB,MAAA,GAAAA,MAAA,OAAA2V,EAAA0iD,SAAA,ECgBpB,IAAMG,GAAyB,MAAhC,MAAOA,EA4DPd,iBACF,OAAOr4D,KAAK84D,cAAcjtD,IAAI,cAAcvG,OAAS,EACvD,CAEI8yD,cACF,SAAmChqD,MAA1BpO,KAAKy3D,mBAAmCz3D,KAAKy0D,YAAY5rD,QAAQhH,QAAW7B,KAAKy0D,YAAY9rD,YAAY9G,QAC5G7B,KAAKy0D,YAAY/rD,OAAO7G,QAAW7B,KAAKy0D,YAAY5rD,QAAQhH,QAAW7B,KAAKy0D,YAAY1rD,KAAKlH,QAAW7B,KAAKy0D,YAAY3rD,OAAOjH,QAAW7B,KAAKy0D,YAAYhsD,UAAU5G,QACtK7B,KAAKy0D,YAAYzrD,MAAMnH,QAAW7B,KAAKy0D,YAAYxrD,SAASpH,OACpE,CAGAjC,YAA6BkX,GAAA9W,KAAA8W,QAnEpB9W,KAAAsY,GAAa,oBAIbtY,KAAAo5D,eAAyB,EAIzBp5D,KAAAq5D,aAAuB,GACvBr5D,KAAAy0D,YAAiC,IAAIjsD,KAIrCxI,KAAAi5D,YAAsB,GAItBj5D,KAAAmjC,aAAuB,IAItBnjC,KAAAs5D,aAAqC,IAAI56B,MAIzC1+B,KAAAuF,SAA8B,IAAIm5B,MAIlC1+B,KAAAu5D,WAAiC,IAAI76B,MAIrC1+B,KAAAw5D,aAAsC,IAAI96B,MAcnC1+B,KAAA6J,cAAaC,OAAOC,OAGrC/J,KAAAg5D,UAAoB,EACpBh5D,KAAAy4C,WAAqB,EACrBz4C,KAAA84D,cAA2B,IAAI9hD,KAAU,IAEzChX,KAAAy5D,eAAyB,EAagC,CAGzDC,oBAAoB/uD,GAClB3K,KAAK+V,OAEP,CAGA4jD,eAAehvD,GACR3K,KAAKg5D,UAEHruD,EAAMzF,MACNslC,KAAUE,UACb1qC,KAAK+V,QACLpL,EAAMk0B,kBAKZ,CAEArnB,WACExX,KAAK84D,cAAcrhD,WAAW,YAAa,IAAIC,KAAY1X,KAAKq5D,aAAc,KAC9Er5D,KAAK8W,MAAMa,eAEX3X,KAAK84D,cAAcvnB,aAAapxC,QAAKgjC,MAAanjC,KAAKmjC,eAAY,EAAGl2B,MAAmBjN,KAAK6J,aAAawB,UAAUuuD,IACnH,MAAMt0D,EAAQtF,KAAK84D,cAAcjtD,IAAI,cAAcvG,MAOnD,GALa8I,MAAT9I,GAA+B,IAATA,IAAgBtF,KAAKg5D,WAC7Ch5D,KAAKg5D,UAAW,EAChBh5D,KAAK8W,MAAMa,gBAGAvJ,MAAT9I,GAAsBA,EAAMzD,QAAU7B,KAAKo5D,eAAgB,CAE7D,GAAIp5D,KAAKy5D,iBAAmBn0D,EAAO,OACnCtF,KAAKs5D,aAAav6B,KAAKz5B,GACvBtF,KAAKy5D,eAAiBn0D,EACtBtF,KAAK8W,MAAMa,cAAY,GAG7B,CAEA6gD,aAAa7tD,GACX,OAAIA,IACFA,EAAMk0B,kBACNl0B,EAAMm0B,kBAGR9+B,KAAK65D,eACE75D,KAAKg5D,QACd,CAEAa,eACElwB,WAAW,KACT,MAAM98B,EAAQ7M,KAAK84D,cAAcjtD,IAAI,aACjCgB,GACFA,EAAMuI,SAASvI,EAAMvH,MAAK,EAGhC,CAEA8uD,iBAAiBl9C,GACflX,KAAKuF,SAASw5B,KAAK7nB,EACrB,CAEA+8C,aACEj0D,KAAKy5D,eAAiB,GACtBz5D,KAAK84D,cAAcjtD,IAAI,cAAcuJ,SAASpV,KAAKq5D,cACnDr5D,KAAKu5D,WAAWx6B,OAChB/+B,KAAK8W,MAAMa,cACb,CAGA5B,MAAMpL,GACAA,GAEE3K,KAAKo4D,UAIa,KAApBp4D,KAAKq4D,YACPr4D,KAAKi0D,aAEPj0D,KAAKg5D,UAAW,EAChBh5D,KAAK8W,MAAMa,eACX3X,KAAKw5D,aAAaz6B,KAAK/+B,KAAKg5D,UAC9B,CAEAj+C,KAAKpQ,GACH3K,KAAKg5D,UAAW,EAChBh5D,KAAKw5D,aAAaz6B,KAAK/+B,KAAKg5D,UAC5Bh5D,KAAK8W,MAAMa,cACb,CAEOmiD,QACL95D,KAAKy5D,eAAiB,GACtBz5D,KAAK84D,cAAcjtD,IAAI,cAAcuJ,SAASpV,KAAKq5D,cACnDr5D,KAAK8W,MAAMa,cACb,EA3KWwhD,SAAyB,mBAAAz4D,iBAAzBy4D,GAAyBx4D,aAAA,EAAzBw4D,EAAyB,UAAA5gD,EAAAC,IAAA,MAAzB2gD,EAAyB1gD,UAAA,4BAAAshD,eAAA,SAAAphD,EAAAC,EAAAohD,MAAA,EAAArhD,k0BAAzBC,EAAA8gD,oBAAAh+B,EAA2B,KAAA/6B,OAAA,mBAAA+6B,GAAA,OAA3B9iB,EAAA+gD,eAAAj+B,EAAsB,KAAA/6B,0+DD/BnCA,MAAA,EAAAs5D,GAAA,4BAAiCt5D,MAAA,oDC6BrBoY,KAAmBnY,6BAAEgkC,KAASF,KAAMC,KAAO4N,KAAkBp5B,MAAkBC,OAAA,++EAAAE,gBAAA,IAE9E6/C,CAAyB,4HC3BhCx4D,MAAA,UAA0EA,MAAA,mBAAAA,MAAAymD,GAAA,MAAA5Z,EAAA7sC,MAAA,UAASA,MAAA6sC,EAAAjiB,cAAa,GAAE5qB,MAAA,UAA2BA,OAAA,2CAuBnHA,MAAA,YAAyCA,MAAA,yBAAAu5D,EAAAv5D,MAAAw5D,GAAA3kD,UAAAw/C,EAAAr0D,MAAA,UAASA,MAAAq0D,EAAAoF,mBAAAF,GAAwB,GACxEv5D,MAAA,WAAAA,CAAkB,UACVA,MAAA,GAAaA,WAAO,6BAApBA,MAAA,GAAAA,MAAAu5D,EAAApsD,KAAA,4BAaJnN,MAAA,UAAkFA,MAAA,GAAaA,yCAAbA,MAAA,GAAAA,MAAA05D,EAAAvsD,KAAA,2BAEhFnN,MAAA,6CAAMA,MAAA,YAAA05D,EAAAC,cAAA35D,MAAA,4BAHVA,MAAA,GACEA,MAAA,EAAA45D,GAAA,eACA55D,MAAA,EAAA65D,GAAA,0BAAA75D,OAGFA,4DAJSA,MAAA,GAAAA,MAAA,OAAA05D,EAAAvsD,KAAAuJ,cAAA8gB,OAAA7gB,QAAAmjD,IAAA,EAAA95D,CAAuD,WAAAg8B,EAAA,2CAPpEh8B,MAAA,YAAyCA,MAAA,yBAAA05D,EAAA15D,MAAA+5D,GAAAllD,UAAAyzC,EAAAtoD,MAAA,UAASA,MAAAsoD,EAAA0R,wBAAAN,GAA6B,GAC7E15D,MAAA,YACEA,MAAA,kBACFA,QACAA,MAAA,YACEA,MAAA,0BACAA,MAAA,EAAAi6D,GAAA,uBAOAj6D,MAAA,YAA8DA,MAAA,GAAuBA,WAAM,wCAXxCA,MAAA,GAAAA,MAAA,WAAA+0D,EAAAr1C,aAAA0C,oBAAAs3C,EAAAh+C,WAGhC1b,MAAA,GAAAA,MAAA,SAAA05D,EAAAnuC,QACJvrB,MAAA,GAAAA,MAAA,OAAA+0D,EAAA2C,WAAAhhD,cAAA8gB,QAO+Cx3B,MAAA,GAAAA,MAAA,MAAA05D,EAAAQ,YAAA,+BAY9Dl6D,MAAA,UACAA,MAAA,WAAMA,MAAA,UACNA,MAAA,aAA8BA,MAAA,GAAiBA,2CAAjBA,MAAA,GAAAA,MAAA0U,EAAA,uDARlC1U,MAAA,YAAyCA,MAAA,yBAAAm6D,EAAAn6D,MAAAo6D,GAAAvlD,UAAAwlD,EAAAr6D,MAAA,UAASA,MAAAq6D,EAAAC,4BAAAH,GAAiC,GACjFn6D,MAAA,YACEA,MAAA,kBACFA,QACAA,MAAA,WAAAA,CAAkB,UACVA,MAAA,GAAcA,QACpBA,MAAA,EAAAu6D,GAAA,eAIFv6D,SAAM,wCAR+CA,MAAA,GAAAA,MAAA,WAAAknD,EAAAxnC,aAAAK,wBAAAo6C,EAAAxiD,KAG7C3X,MAAA,GAAAA,MAAAm6D,EAAAz1D,OACC1E,MAAA,GAAAA,MAAA,OAAAm6D,EAAAllD,SAAA,4BAYPjV,MAAA,UACAA,MAAA,WAAMA,MAAA,UACNA,MAAA,aAA8BA,MAAA,GAAiBA,2CAAjBA,MAAA,GAAAA,MAAA0U,EAAA,uDALlC1U,MAAA,YAAyCA,MAAA,yBAAAw6D,EAAAx6D,MAAAs1D,GAAAzgD,UAAA0gD,EAAAv1D,MAAA,UAASA,MAAAu1D,EAAAkF,6BAAAD,GAAkC,GAClFx6D,MAAA,WAAAA,CAAkB,UACVA,MAAA,GAAcA,QACpBA,MAAA,EAAA06D,GAAA,eAIF16D,SAAM,6BALEA,MAAA,GAAAA,MAAAw6D,EAAA91D,OACC1E,MAAA,GAAAA,MAAA,OAAAw6D,EAAAvlD,SAAA,2CASXjV,MAAA,YAAyCA,MAAA,yBAAA26D,EAAA36D,MAAA46D,GAAA/lD,UAAA26B,EAAAxvC,MAAA,UAASA,MAAAwvC,EAAAqrB,UAAArrB,EAAAvpC,YAAAQ,KAAAk0D,EAAAhjD,IAAoC,GACpF3X,MAAA,WAAAA,CAAkB,UACVA,MAAA,GAAcA,WAAO,6BAArBA,MAAA,GAAAA,MAAA26D,EAAAj2D,MAAA,2CAMV1E,MAAA,YAA2DA,MAAA,yBAAA86D,EAAA96D,MAAA41D,GAAA/gD,UAAAghD,EAAA71D,MAAA,UAASA,MAAA61D,EAAAkF,WAAAD,EAAAruD,KAAAquD,EAAAnjD,IAA8B,GAChG3X,MAAA,YAEEA,MAAA,YACAA,MAAA,YAAmCA,MAAA,yBAA0BA,WAAM,6BAD9DA,MAAA,GAAAA,MAAA,YAAA86D,EAAA3tD,KAAAnN,OAC8BA,MAAA,GAAAA,YAAA,IAAA86D,EAAAruD,MAAA,2CAMvCzM,MAAA,YAA2DA,MAAA,yBAAAg7D,EAAAh7D,MAAAi7D,GAAApmD,UAAAuhD,EAAAp2D,MAAA,UAASA,MAAAo2D,EAAAyE,UAAAzE,EAAAnwD,YAAAa,OAAAk0D,EAAArjD,IAAsC,GACxG3X,MAAA,YACEA,MAAA,YACFA,SAAM,6BADCA,MAAA,GAAAA,MAAA,YAAAg7D,EAAAt2D,MAAA1E,MAAA,4BAULA,MAAA,GACEA,MAAA,0BACFA,wCADqBA,MAAA,GAAAA,MAAA,eAAAk7D,EAAA7yD,MAAA,KAAA6yD,EAAA7yD,MAAA,GAAAkjB,OAAA,2CAHzBvrB,MAAA,YAA2DA,MAAA,yBAAAk7D,EAAAl7D,MAAAm7D,GAAAtmD,UAAAumD,EAAAp7D,MAAA,UAASA,MAAAo7D,EAAAC,yBAAAH,GAA8B,GAChGl7D,MAAA,YACEA,MAAA,EAAAs7D,GAAA,uBAGAt7D,MAAA,UAAMA,MAAA,GAAkBA,WAAO,6BAHhBA,MAAA,GAAAA,MAAA,OAAAk7D,EAAA7yD,MAAAnH,OAAA,GAGTlB,MAAA,GAAAA,MAAAk7D,EAAAK,UAAA,2CAMVv7D,MAAA,YAAyCA,MAAA,yBAAAw7D,EAAAx7D,MAAAy7D,GAAA5mD,UAAAgiC,EAAA72C,MAAA,UAASA,MAAA62C,EAAA6kB,sBAAAF,GAA2B,GAC3Ex7D,MAAA,YACEA,MAAA,0BACAA,MAAA,UAAMA,MAAA,GAAiBA,WAAO,6BADXA,MAAA,GAAAA,MAAA,SAAAw7D,EAAAjwC,QACbvrB,MAAA,GAAAA,MAAAw7D,EAAAG,SAAA,2BAMV37D,MAAA,mCAAAA,MAAA,IAAA0U,EAAA,0DAtHR1U,MAAA,WAAAA,CAA4E,cACfA,MAAA,GAA0BA,QACrFA,MAAA,WAAAA,CAA6B,iCAQzBA,MAAA,wBAAA+6B,GAAA/6B,MAAA23D,GAAA,MAAAC,EAAA53D,MAAA,UAAgBA,MAAA43D,EAAAgE,eAAA7gC,GAAsB,EAAtC/6B,CAAuC,wBAAAA,MAAA23D,GAAA,MAAAG,EAAA93D,MAAA,UACzBA,MAAA83D,EAAA+D,cAAa,EAD3B77D,CAAuC,wBAAA+6B,GAAA/6B,MAAA23D,GAAA,MAAAI,EAAA/3D,MAAA,UAEvBA,MAAA+3D,EAAA+D,YAAA/gC,GAAmB,GAGnC/6B,MAAA,EAAA+7D,GAAA,0BAAA/7D,OAQAA,MAAA,EAAAg8D,GAAA,0BAAAh8D,OAmBAA,MAAA,GAAAi8D,GAAA,0BAAAj8D,OAeAA,MAAA,GAAAk8D,GAAA,0BAAAl8D,OAYAA,MAAA,GAAAm8D,GAAA,0BAAAn8D,OAQAA,MAAA,GAAAo8D,GAAA,0BAAAp8D,OAUAA,MAAA,GAAAq8D,GAAA,0BAAAr8D,OAUAA,MAAA,GAAAs8D,GAAA,0BAAAt8D,OAWAA,MAAA,GAAAu8D,GAAA,0BAAAv8D,OASAA,MAAA,GAAAw8D,GAAA,0BAAAx8D,OAIFA,WAAwB,8CAxHiCA,MAAA,GAAAA,MAAA0U,EAAA,sBAKvD1U,MAAA,GAAAA,MAAA,mBAAAA,CAAoB,cAAA0U,EAAA,cAApB1U,CAAoB,cAAA+lC,EAAA02B,cAAA,2CAyH1Bz8D,MAAA,WAAAA,CAAiD,eACJA,MAAA,mBAAAA,MAAA08D,GAAA,MAAAC,EAAA38D,MAAA,UAASA,MAAA28D,EAAAC,cAAa,GAC/D58D,MAAA,UACAA,MAAA,aAA8BA,MAAA,GAA0BA,WAAO,oCAAjCA,MAAA,GAAAA,MAAA0U,EAAA,iDAS9B1U,MAAA,UACEA,MAAA,UACAA,MAAA,aAA8BA,MAAA,GAAwBA,2CAAxBA,MAAA,GAAAA,MAAA0U,EAAA,+CAW9B1U,MAAA,UAAsGA,MAAA,GAAwBA,yCAAxBA,MAAA,GAAAA,MAAA0U,EAAA,+CAGtG1U,MAAA,UAA0FA,MAAA,GAAsBA,yCAAtBA,MAAA,GAAAA,MAAA0U,EAAA,4DAT9F1U,MAAA,WAAAA,CAAqJ,eAEjJA,MAAA,UACAA,MAAA,aAA2DA,MAAA,2BAAgCA,UAE7FA,MAAA,YACEA,MAAA,EAAA68D,GAAA,YACA78D,MAAA,UAA8CA,MAAA,GAAiBA,QAC/DA,MAAA,WAAkGA,MAAA,IAAaA,QAC/GA,MAAA,GAAA88D,GAAA,YACA98D,MAAA,WAAmBA,MAAA,mBAAAA,MAAA+8D,GAAA,MAAAC,EAAAh9D,MAAA,UAASA,MAAAg9D,EAAAzvD,SAAQ,GAAEvN,MAAA,IAAeA,WAAI,uDAPEA,MAAA,GAAAA,YAAA,IAAAi9D,EAAA1yD,WAGOvK,MAAA,GAAAA,MAAA,OAAAi9D,EAAAtyD,MAAAC,SAAA,UACpB5K,MAAA,GAAAA,MAAA0U,EAAA,aACoD1U,MAAA,GAAAA,MAAA0U,EAAA,SACjD1U,MAAA,GAAAA,MAAA,OAAAk9D,EAAAh+D,eAAAU,aAAAq9D,IACXj9D,MAAA,GAAAA,MAAA0U,EAAA,sCAtB5C1U,MAAA,GACEA,MAAA,YACEA,MAAA,8BACFA,QACAA,MAAA,YACEA,MAAA,EAAAm9D,GAAA,YAIFn9D,QAGAA,MAAA,EAAAo9D,GAAA,gCAaFp9D,wCAvB2BA,MAAA,GAAAA,MAAA,OAAAq9D,GAGWr9D,MAAA,GAAAA,MAAA,OAAAq9D,EAAA1yD,MAAAC,SAAA,UAOmD5K,MAAA,GAAAA,MAAA,OAAAA,MAAA,IAAAs9D,EAAAp+D,eAAAK,cAAA,4BApB3FS,MAAA,GACEA,MAAA,EAAAu9D,GAAA,cAOAv9D,MAAA,EAAAw9D,GAAA,wCA0BFx9D,+BAjC4BA,MAAA,GAAAA,MAAA,OAAAogC,EAAAq9B,iBAOXz9D,MAAA,GAAAA,MAAA,OAAAA,MAAA,IAAAogC,EAAAlhC,eAAAK,cAAA,2CAhJrBS,MAAA,UAAAA,CAAsG,UAAtGA,CAAsG,SAEpBA,MAAA,mBAAAA,MAAA09D,GAAA,MAAAC,EAAA39D,MAAA,UAASA,MAAA29D,EAAAC,YAAW,GAAE59D,MAAA,GAAiBA,QACrHA,MAAA,EAAA69D,GAAA,4BACA79D,MAAA,SACEA,MAAA,WACAA,MAAA,YAAuCA,MAAA,aAAMA,UAE/CA,MAAA,WAEEA,MAAA,GAAA89D,GAAA,iCA4HF99D,QAEAA,MAAA,GAAA+9D,GAAA,uBAmCF/9D,SAAM,6CAzKgGA,MAAA,GAAAA,MAAA0U,EAAA,aACxE1U,MAAA,GAAAA,MAAA,OAAAA,MAAA,UAAAu9B,EAAA+tB,WAAA,KAAA/tB,EAAA+tB,WAAAphC,qBAOHlqB,MAAA,GAAAA,MAAA,OAAAA,MAAA,KAAAu9B,EAAAr+B,eAAAK,eA8HVS,MAAA,GAAAA,MAAA,QAAAu9B,EAAAygC,cAAA,4BAzIrBh+D,MAAA,GACEA,MAAA,EAAAi+D,GAAA,+BA8KFj+D,8BA9K8DA,MAAA,GAAAA,MAAA,OAAAA,MAAA,UAAA2V,EAAA21C,WAAA,KAAA31C,EAAA21C,WAAAxhC,gBAAA,ECiDvD,IAAMo0C,GAAkB,MAAzB,MAAOA,EAgBXj/D,YAAmBC,EAAwCwB,EAAuB4qD,EACzE5rC,EAAsDgK,EACrDy0C,GAAsCC,GAA+CjoD,GACrFkV,IAHShsB,KAAAH,iBAAwCG,KAAAqB,SAAuBrB,KAAAisD,aACzEjsD,KAAAqgB,eAAsDrgB,KAAAqqB,WACrDrqB,KAAA8+D,iBAAsC9+D,KAAA++D,iBAA+C/+D,KAAA8W,SACrF9W,KAAAgsB,wBAhBOhsB,KAAA6J,cAAaC,OAAOC,OAErC/J,KAAAy4C,WAAY,EACZz4C,KAAAmjC,aAAe,IACfnjC,KAAAo9D,cAAmC,IAAI50D,KACvCxI,KAAAq4D,WAAa,GAGbr4D,KAAAo+D,iBAAkB,EAClBp+D,KAAA2+D,eAAyB,EAEN3+D,KAAA4G,YAAcA,KAM7B5G,KAAKg/D,WAAah/D,KAAKqqB,SAAShC,IACpC,CAEA7Q,WACExX,KAAK8+D,cAAc5rC,iBAAiB/yB,QAAKijC,QAAoB,EAAIn2B,MAAmBjN,KAAK6J,aAAU,EAAGuC,MAAK6yD,IAEvGj/D,KAAKg/D,WADiB,SAApBC,QAAkD7wD,IAApB6wD,EACdj/D,KAAKqqB,SAAShC,KAEnB42C,EACUlnD,eAEzBuyB,OAAUtqC,KAAKg/D,WAAY,UAAU7+D,QAAKgjC,MAAa,KAAK93B,UAAU,IAAMrL,KAAKk/D,qBAAqBl/D,KAAKg/D,YAAW,IACpH3zD,YAGJrL,KAAKqB,OAAO8xB,OACXhzB,QAAKuB,KAAOiJ,GAASA,aAAiByoB,OACtC/nB,UAAU,KACTrL,KAAKk/D,qBAAqBl/D,KAAKg/D,WAAU,EAE7C,CAEAE,qBAAqB/qC,GACnB,MAAMgrC,EAAShrC,EAAKX,WAAa,EAC7B2rC,EAAS,IACXn/D,KAAKo+D,iBAAkB,EACde,EAAS,KAChBn/D,KAAKo+D,iBAAkB,GAE3Bp+D,KAAK8W,MAAMa,cACb,CAEAzJ,SACElO,KAAKH,eAAeqO,SACpBlO,KAAKisD,WAAW5gC,aAChBrrB,KAAKisD,WAAW1gC,cAChBvrB,KAAKqB,OAAOc,cAAc,SAC5B,CAEAo8D,YACEv+D,KAAKqqB,SAAS+0C,eAAe,YAAYx1B,OAC3C,CAIA2yB,eAAe9wC,GACXzrB,KAAKy4C,WAAY,EACjBz4C,KAAKq4D,WAAa5sC,EAAI0M,OACtBn4B,KAAK8W,MAAMa,eAEX3X,KAAK++D,cAAcz+C,OAAOmL,EAAI0M,QAAQh4B,QAAK8M,MAAmBjN,KAAK6J,aAAawB,UAAUyR,IACxF9c,KAAKo9D,cAAgBtgD,EACrB9c,KAAKy4C,WAAY,EACjBz4C,KAAK8W,MAAMa,cAAY,EACtB,KACD3X,KAAKo9D,cAAcl0D,QACnBlJ,KAAKy4C,WAAY,EACjBz4C,KAAKq4D,WAAa,GAClBr4D,KAAK8W,MAAMa,cAAY,EAE7B,CAEA0nD,KAAKngB,GACH,IAAI5wB,EAAc,GAClB,MAAM5sB,EAAS1B,KAAKgsB,qBAAqBq0B,uBACzC3+C,EAAO6nB,WAAa,CAAC21B,GACrB5wB,EAAOjC,KAAU,EACjBrsB,KAAKw8D,cACLx8D,KAAKgsB,qBAAqB6xB,sBAAsB,CAAC,cAAen8C,EAAQ4sB,EAC1E,CAEAktC,UAAU1xC,EAAoBxkB,GAC5BtF,KAAKq/D,KAAK,CAACv1C,QAAOC,WAAYpkB,KAAiBC,MAAON,SACxD,CAEAo2D,WAAWtuD,EAAkB1L,GAE3B,OADA1B,KAAKw8D,cACEpvD,GACL,KAAKzJ,IAAWG,OACd9D,KAAKq/D,KAAK,CAACv1C,MAAOljB,KAAYY,QAASuiB,WAAYpkB,KAAiBC,MAAON,MAAO5D,IAClF,MACF,KAAKiC,IAAWE,OACd7D,KAAKq/D,KAAK,CAACv1C,MAAOljB,KAAYzC,YAAa4lB,WAAYpkB,KAAiBC,MAAON,MAAO5D,IACtF,MACF,KAAKiC,IAAWW,UACdtE,KAAKq/D,KAAK,CAACv1C,MAAOljB,KAAYW,WAAYwiB,WAAYpkB,KAAiBC,MAAON,MAAO5D,IACrF,MACF,KAAKiC,IAAWM,SACdjE,KAAKq/D,KAAK,CAACv1C,MAAOljB,KAAY3C,SAAU8lB,WAAYpkB,KAAiBC,MAAON,MAAO5D,IACnF,MACF,KAAKiC,IAAWS,OACdpE,KAAKq/D,KAAK,CAACv1C,MAAOljB,KAAYxC,OAAQ2lB,WAAYpkB,KAAiBC,MAAON,MAAO5D,IACjF,MACF,KAAKiC,IAAWK,MACdhE,KAAKq/D,KAAK,CAACv1C,MAAOljB,KAAY5C,MAAO+lB,WAAYpkB,KAAiBC,MAAON,MAAO5D,IAChF,MACF,KAAKiC,IAAWQ,YACdnE,KAAKq/D,KAAK,CAACv1C,MAAOljB,KAAYzC,YAAa4lB,WAAYpkB,KAAiBC,MAAON,MAAO5D,IACtF,MACF,KAAKiC,IAAWO,SACdlE,KAAKq/D,KAAK,CAACv1C,MAAOljB,KAAY1C,SAAU6lB,WAAYpkB,KAAiBC,MAAON,MAAO5D,IACnF,MACF,KAAKiC,IAAWI,UACd/D,KAAKq/D,KAAK,CAACv1C,MAAOljB,KAAY7C,UAAWgmB,WAAYpkB,KAAiBC,MAAON,MAAO5D,IACpF,MACF,KAAKiC,IAAWU,UACdrE,KAAKq/D,KAAK,CAACv1C,MAAOljB,KAAYvC,UAAW0lB,WAAYpkB,KAAiBC,MAAON,MAAO5D,IACpF,MACF,KAAKiC,IAAWY,WACdvE,KAAKq/D,KAAK,CAACv1C,MAAOljB,KAAYU,YAAayiB,WAAYpkB,KAAiBC,MAAON,MAAO5D,IAG5F,CAEA86D,cACEx8D,KAAKs/D,cAAcxF,QACnB95D,KAAKq4D,WAAa,GAClBr4D,KAAKo9D,cAAgB,IAAI50D,KACzBxI,KAAK8W,MAAMa,cACb,CAEAgjD,wBAAwBzjD,GACtBlX,KAAKw8D,cAGLx8D,KAAKqB,OAAOk+D,SAAS,CAAC,UAFJroD,EAAKzU,UAEqB,SAD3ByU,EAAKmF,UAExB,CAEAggD,sBAAsBnlD,GACpBlX,KAAKw8D,cACLx8D,KAAK++D,cAAczqC,sBAAsBpd,EAAKoB,IAAIjN,UAAU3C,IACnB,MAAXA,GAC1B1I,KAAKqB,OAAOk+D,SAAS,CAAC,UAAW72D,EAAOjG,UAAW,SAAUiG,EAAO4P,IAAG,EAG7E,CAEA0jD,yBAAyB9kD,GACvBlX,KAAKw8D,cACLx8D,KAAK++D,cAAcvqC,oBAAoBtd,EAAKoB,IAAIjN,UAAU3C,IACjB,MAAXA,GAC1B1I,KAAKqB,OAAOk+D,SAAS,CAAC,UAAW72D,EAAOjG,UAAW,SAAUiG,EAAO4P,IAAG,EAG7E,CAEA8hD,mBAAmBljD,GACjBlX,KAAKw8D,cACLx8D,KAAKqB,OAAOk+D,SAAS,CAAC,UAAWroD,EAAKoB,IACxC,CAEA2iD,4BAA4B/jD,GAC1BlX,KAAKw8D,cACLx8D,KAAKqB,OAAOk+D,SAAS,CAAC,cAAeroD,EAAKoB,IAC5C,CAEA8iD,6BAA6BlkD,GAC3BlX,KAAKw8D,cACLx8D,KAAKqB,OAAOk+D,SAAS,CAAC,QAASroD,EAAKoB,IACtC,CAGAilD,cACEv9D,KAAK8+D,cAAclrC,SAAS,EAAG5zB,KAAKg/D,WACtC,CAEAvC,YAAYkC,GACV3+D,KAAK2+D,cAAgBA,EACrB3+D,KAAK8W,MAAMa,cACb,CAEA4T,cACEvrB,KAAKisD,WAAWzgC,eAClB,EAjMWqzC,SAAkB,mBAAAn+D,iBAAlBm+D,GAAkBl+D,MAAAC,KAAAD,MAAAE,MAAAF,MAAAG,KAAAH,MAAAyB,KAAAzB,MAiBgBgrB,MAAQhrB,MAAAqY,MAAArY,MAAAqf,MAAArf,mBAAAsf,MAAA,EAjB1C4+C,EAAkB,UAAAtmD,EAAAC,IAAA,MAAlBqmD,EAAkBpmD,UAAA,qBAAAC,UAAA,SAAAC,EAAAC,MAAA,EAAAD,wjGDlD/BhY,MAAA,EAAA6+D,GAAA,2BAAiC7+D,MAAA,6CCgDrB+jC,KAAMuoB,KAAYwS,KAAkBvS,KAAkBiM,GAA2BtuB,KAAgBkpB,GAAuBhB,GAAuBlzB,KAAaC,KAAmBC,KAAiBC,KAAiByS,KAAW6b,EAAgBniB,KAAkBhzB,MAAkBC,OAAA,kjDAAAE,gBAAA,IAE/QulD,CAAkB,0CC9CvBl+D,MAAA,oGAGIA,MAAA,UAAAA,CAA6F,4BAErFA,MAAA,mBACJA,gCAF2BA,MAAA,GAAAA,MAAA,UAAAA,MAAA,EAAA28B,IAAA,IAAA38B,MAAA,IAAAojD,EAAAkI,WAAAthC,oBAAA,wBAK3BhqB,MAAA,2JCUT,IAAM++D,GAAY,MAAnB,MAAOA,EAOX9/D,YAAoBC,EAAuCosD,EACjDzyC,EACAnY,EAAwB2sD,EAAoB2R,GAC1Bt1C,GAA4BzgB,IAHpC5J,KAAAH,iBAAuCG,KAAAisD,aACjDjsD,KAAAwZ,iBACAxZ,KAAAqB,SAAwBrB,KAAAguD,WACNhuD,KAAAqqB,YAA4BrqB,KAAA4J,gBANxD5J,KAAA6J,cAAaC,OAAOC,OACpB/J,KAAAD,oBAAmB+J,OAAOqN,MAQxBwoD,GAAa9xB,IAAM,EACnB8xB,GAAaC,YAAa,EAG1Bv+D,EAAO8xB,OACJhzB,QAAKuB,KAAOiJ,IAASA,cAAiBk1D,OAAe,EAAG5yD,MAAmBjN,KAAK6J,aAChFwB,UAAWV,KACN3K,KAAKguD,SAAS8R,iBAChB9/D,KAAKguD,SAAS+R,YAAU,GAI9B//D,KAAKggE,iBAAmBhgE,KAAKH,eAAeK,aAAaC,QAAKE,KAAKC,MAC5DA,IACEA,GAAKsN,YAAYqyD,gBACzB,EAAGhzD,MAAmBjN,KAAK6J,YAC9B,CAIAq2D,eAEE,MAAMC,EAA0B,IAArBn+D,OAAO8gD,YAClB9iD,KAAKqqB,SAASkJ,gBAAgBvF,MAAMoyC,YAAY,OAAQ,GAAGD,MAC7D,CAEA3oD,WACExX,KAAKkgE,eACLlgE,KAAK+M,gBACP,CAEAA,iBACE,MAAMzM,EAAON,KAAKH,eAAewQ,0BACjCrQ,KAAKH,eAAekN,eAAezM,GAE/BA,IAEFN,KAAK4J,aAAamuB,YAAY1sB,YAC9BrL,KAAKwZ,eAAe0K,kBAAkB/jB,QAAKC,KAAK,IAAC,EAAGqU,QAAepJ,YAEvE,EArDWq0D,SAAY,mBAAAh/D,iBAAZg/D,GAAY/+D,MAAAC,KAAAD,MAAAE,KAAAF,MAAAG,KAAAH,MAAAyB,MAAAzB,MAAAqY,MAAArY,MAAAqY,MAAArY,MAUbgrB,MAAQhrB,MAAAqf,MAAA,EAVP0/C,EAAY,UAAAnnD,EAAAC,IAAA,MAAZknD,EAAYjnD,UAAA,eAAA4nD,aAAA,SAAA1nD,EAAAC,GAAA,EAAAD,qCAAZC,EAAAsnD,aAAAxkC,EAAoB,KAAA/6B,OAAA,6BAAA+6B,GAAA,OAApB9iB,EAAAsnD,aAAAxkC,EAAoB,KAAA/6B,0SDvBjCA,MAAA,4BACIA,MAAA,oBACAA,MAAA,6CACIA,MAAA,SACAA,MAAA,EAAA2/D,GAAA,uCAEA3/D,MAAA,6BACIA,MAAA,GAAA4/D,GAAA,+BAKA5/D,MAAA,GAAA6/D,GAAA,yBAAA7/D,OAGJA,oCAfHA,MAAA,UAAAA,MAAA,GAAAygC,GAAAzgC,MAAA,IAAAiY,EAAAonD,oBAEIr/D,MAAA,GAAAA,MAAA,UAAAA,MAAA,GAAA00C,GAAA10C,MAAA,IAAAiY,EAAAqzC,WAAAthC,mBAAAhqB,MAAA,KAAAiY,EAAAqzC,WAAAphC,sBAEclqB,MAAA,GAAAA,MAAA,OAAAA,MAAA,KAAAiY,EAAAqzC,WAAAphC,qBAEclqB,MAAA,GAAAA,MAAA,UAAAA,MAAA,GAAA2wD,IAAA,IAAA3wD,MAAA,MAAAiY,EAAAqzC,WAAAphC,sBACQlqB,MAAA,GAAAA,MAAA,OAAAA,MAAA,MAAAiY,EAAAqzC,WAAAphC,oBAAAlqB,CAA4C,WAAAgwC,EAAA,iBCc7E/L,KAASF,KAAMmpB,EAAkB4S,KAAchuB,KAAWosB,IAAkBzlD,OAAA,ylBAE3EsmD,CAAY,gECjBzB,MAAMgB,GAAiB,CACrB,CACEzwC,KAAM,QACNhwB,YAAa,SAACN,GACdmkC,aAAcA,IAAMqiB,QAAAwa,IAAA,CAAAC,EAAAr3B,EAAA,IAAAq3B,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,MAAAs3B,KAAAD,EAAA3S,KAAA2S,EAAA,OAA+BC,KAAKtN,GAAKA,EAAEuN,cAEjE,CACE7wC,KAAM,cACNhwB,YAAa,CAACmB,MACd0iC,aAAcA,IAAMqiB,QAAAwa,IAAA,CAAAC,EAAAr3B,EAAA,IAAAq3B,EAAAr3B,EAAA,IAAAq3B,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,OAAAs3B,KAAAD,EAAA3S,KAAA2S,EAAA,OAA2CC,KAAKtN,GAAKA,EAAEwN,oBAE7E,CACE9wC,KAAM,cACNhwB,YAAa,CAACmB,MACd0iC,aAAcA,IAAMqiB,QAAAwa,IAAA,CAAAC,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,OAAAs3B,KAAAD,EAAA3S,KAAA2S,EAAA,OAA+CC,KAAKtN,GAAKA,EAAEyN,qBAEjF,CACE/wC,KAAM,QACNhwB,YAAa,CAACmB,MACd0iC,aAAcA,IAAMqiB,QAAAwa,IAAA,CAAAC,EAAAr3B,EAAA,IAAAq3B,EAAAr3B,EAAA,IAAAq3B,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,OAAAs3B,KAAAD,EAAA3S,KAAA2S,EAAA,OAA6CC,KAAKtN,GAAKA,EAAE0N,oBAE/E,CACEhxC,KAAM,eACN6T,aAAcA,IAAM88B,EAAAr3B,EAAA,KAAAs3B,KAAAD,EAAA3S,KAAA2S,EAAA,OAAkDC,KAAKtN,GAAKA,EAAE2N,qBAEpF,CACEjxC,KAAM,gBACN6T,aAAcA,IAAMqiB,QAAAwa,IAAA,CAAAC,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,OAAAs3B,KAAAD,EAAA3S,KAAA2S,EAAA,OAAoDC,KAAKtN,GAAKA,EAAE4N,sBAEtF,CACElxC,KAAM,YACN6T,aAAcA,IAAMqiB,QAAAwa,IAAA,CAAAC,EAAAr3B,EAAA,IAAAq3B,EAAAr3B,EAAA,IAAAq3B,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,OAAAs3B,KAAAD,EAAA3S,KAAA2S,EAAA,OAA0CC,KAAKtN,GAAKA,EAAE6N,iBAE5E,CACEnxC,KAAM,aACN6T,aAAcA,IAAMqiB,QAAAwa,IAAA,CAAAC,EAAAr3B,EAAA,IAAAq3B,EAAAr3B,EAAA,IAAAq3B,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,OAAAs3B,KAAAD,EAAA3S,KAAA2S,EAAA,OAA8CC,KAAKtN,GAAKA,EAAE8N,kBAEhF,CACEpxC,KAAM,YACN6T,aAAcA,IAAMqiB,QAAAwa,IAAA,CAAAC,EAAAr3B,EAAA,IAAAq3B,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,OAAAs3B,KAAAD,EAAA3S,KAAA2S,EAAA,OAAuCC,KAAKtN,GAAKA,EAAE+N,kBAEzE,CACErxC,KAAM,YACN6T,aAAcA,IAAMqiB,QAAAwa,IAAA,CAAAC,EAAAr3B,EAAA,IAAAq3B,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,OAAAs3B,KAAAD,EAAA3S,KAAA2S,EAAA,OAAuCC,KAAKtN,GAAKA,EAAE+N,kBAEzE,CACErxC,KAAM,eACN6T,aAAcA,IAAMqiB,QAAAwa,IAAA,CAAAC,EAAAr3B,EAAA,IAAAq3B,EAAAr3B,EAAA,IAAAq3B,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,OAAAs3B,KAAAD,EAAA3S,KAAA2S,EAAA,OAAkDC,KAAKtN,GAAKA,EAAEgO,mBAEpF,CACEtxC,KAAM,UACNuxC,sBAAuB,SACvBvhE,YAAa,CAACmB,KAAWiB,MACzByR,SAAU,CACR,CACEmc,KAAM,aACNwxC,UAAW,OACX39B,aAAcA,IAAMqiB,QAAAwa,IAAA,CAAAC,EAAAr3B,EAAA,IAAAq3B,EAAAr3B,EAAA,IAAAq3B,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,OAAAs3B,KAAAD,EAAA3S,KAAA2S,EAAA,OAAsDC,KAAKtN,GAAKA,EAAEmO,sBAExF,CACEzxC,KAAM,8BACNwxC,UAAW,OACX39B,aAAcA,IAAMqiB,QAAAwa,IAAA,CAAAC,EAAAr3B,EAAA,IAAAq3B,EAAAr3B,EAAA,IAAAq3B,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,MAAAs3B,KAAAD,EAAA3S,KAAA2S,EAAA,KAAoDC,KAAKtN,GAAKA,EAAEoO,qBAEtF,CACE1xC,KAAM,oCACN6T,aAAcA,IAAMqiB,QAAAwa,IAAA,CAAAC,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,OAAAs3B,KAAAD,EAAA3S,KAAA2S,EAAA,OAAkDC,KAAKtN,GAAKA,EAAEqO,oBAEpF,CACE3xC,KAAM,mCACN6T,aAAcA,IAAMqiB,QAAAwa,IAAA,CAAAC,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,KAAAq3B,EAAAr3B,EAAA,OAAAs3B,KAAAD,EAAA3S,KAAA2S,EAAA,OAAgDC,KAAKtN,GAAKA,EAAEsO,mBAElF,CACE5xC,KAAM,kCACN6T,aAAcA,IAAM88B,EAAAr3B,EAAA,KAAAs3B,KAAAD,EAAA3S,KAAA2S,EAAA,MAA8CC,KAAKtN,GAAKA,EAAEuO,oBAIpF,CAAC7xC,KAAM,QAAS6T,aAAcA,IAAM88B,EAAAr3B,EAAA,KAAAs3B,KAAAD,EAAA3S,KAAA2S,EAAA,OAAkDC,KAAKtN,GAAKA,EAAE2N,qBAClG,CAACjxC,KAAM,KAAMwxC,UAAW,OAAQM,WAAY,aAC5C,CAAC9xC,KAAM,KAAMwxC,UAAW,SAAUM,WAAY,cAOzC,IAAMC,GAAgB,MAAvB,MAAOA,YAAgB,mBAAAthE,iBAAhBshE,EAAgB,EAAhBA,EAAgB,UAAAzpD,EAAA0pD,IAAA,MAAhBD,MAAgB,UAAAzpD,EAAA2pD,IAAA,UAHjBC,KAAaC,QAAQ1B,GAAQ,CAAC2B,0BAA2B,UAAWC,mBAAoBC,OACxFJ,QAECH,CAAgB,+BCjFtB,IAAMQ,GAAc,MAArB,MAAOA,EAEX5iE,YAAoBC,GAAAG,KAAAH,gBAAiC,CAErD4iE,UAAUC,EAA+BngE,GACvC,OAAOvC,KAAKH,eAAeK,aAAaC,QACtCC,KAAK,IAAC,EACN+K,KAAU7K,IACJA,IACFoiE,EAAUA,EAAQC,MAAM,CACtBC,WAAY,CACVC,cAAe,UAAUviE,EAAK6M,YAI7B5K,EAAKugE,OAAOJ,KAEzB,EAjBWF,SAAc,mBAAA9hE,iBAAd8hE,GAAc7hE,MAAAC,KAAA,EAAd4hE,EAAc,WAAAjqD,EAAAvX,IAAA,OAAdwhE,EAAcvhE,QAAduhE,EAActhE,YAAdshE,CAAc,+BCGpB,IAAMO,GAAgB,MAAvB,MAAOA,EACXnjE,YAAoByB,EAAwBvB,EACxBD,EACAE,GAFAC,KAAAqB,SAAwBrB,KAAAF,SACxBE,KAAAH,iBACAG,KAAAD,kBAAqC,CAGzD0iE,UAAUC,EAA+BngE,GACvC,OAAOA,EAAKugE,OAAOJ,GAASviE,QAC1BkM,MAAW7L,IACT,GAAqC,MAAVA,EACzB,SAAO8L,MAAW9L,GAGpB,OAAQA,EAAMwiE,QACZ,KAAK,IACHhjE,KAAKijE,sBAAsBziE,GAC3B,MACF,KAAK,IACHR,KAAKkjE,gBAAgB1iE,GACrB,MACF,KAAK,IACHR,KAAKmjE,eAAe3iE,GACpB,MACF,KAAK,IACHR,KAAKojE,sBAAsB5iE,GAC3B,MACF,QAEE,IAAI6iE,KAAe5iE,MAAU,kBACY,qCAArCT,KAAKF,OAAOwjE,sBAA+DtjE,KAAKF,OAAOwjE,uBAAyBD,GAClHrjE,KAAK2B,MAAM0hE,GAIjB,SAAO/2D,MAAW9L,EAAK,GAG7B,CAEQyiE,sBAAsBziE,GAE5B,GAAI6M,MAAMC,QAAQ9M,EAAMA,OAAQ,CAC9B,MAAM+iE,EAA0B,GAChC,MAAI/iE,EAAMA,MAAMqB,OAAS,GAAKrB,EAAMA,MAAM,GAAG+Z,eAAe,WAExD/Z,EAAMA,MAAMmU,QADiB,OAA3BnU,EAAMA,MAAM,GAAGgjE,QACIC,IACnBF,EAAiBh2D,KAAKk2D,EAAM7hE,QAAO,EAGhB6hE,IACnBF,EAAiBh2D,KAAKk2D,EAAMD,QAAO,GAIvChjE,EAAMA,MAAMmU,QAAS8uD,IACnBF,EAAiBh2D,KAAKk2D,EAAMC,YAAW,GAGrCH,EAAiBI,MAAI,IAClBnjE,EAAMA,MAAM2sC,OAAQ,CAE7B,MAAMo2B,EAAmB,GACzB,UAAWr+D,KAAO1E,EAAMA,MAAM2sC,OACxB3sC,EAAMA,MAAM2sC,OAAOjoC,IACrBq+D,EAAiBh2D,KAAK/M,EAAMA,MAAM2sC,OAAOjoC,IAG7C,MAAMq+D,EAAiBI,MAAI,IAE3B17C,QAAQznB,MAAM,SAAUA,GACC,gBAArBA,EAAMojE,WAA8B,CACtC,GAAIpjE,EAAMA,iBAAiBqjE,KAEzB,YADA7jE,KAAK2B,MAAM,kBAAmBnB,EAAMwiE,QAGtChjE,KAAK2B,MAAMnB,EAAMA,MAAOR,KAAKD,iBAAiBU,UAAU,oBAAqB,CAACqjE,IAAKtjE,EAAMwiE,SAAQ,MAEjGhjE,KAAK2B,MAA2B,OAArBnB,EAAMojE,WAAsBpjE,EAAMA,MAAQA,EAAMojE,WAAY5jE,KAAKD,iBAAiBU,UAAU,oBAAqB,CAACqjE,IAAKtjE,EAAMwiE,SAG9I,CAEQG,eAAe3iE,GACrBR,KAAK2B,MAAM,mBACb,CAEQyhE,sBAAsB5iE,GAC5B,MAAMwnB,EAAMxnB,EAAMA,MACdwnB,EAAIzN,eAAe,YAAqC,KAAvByN,EAAIpmB,QAAQu2B,QAC5B,6BAAfnQ,EAAIpmB,SAA4D,yBAAlBpB,EAAMoB,SACtDqmB,QAAQznB,MAAM,cAAeA,GAE/BR,KAAK2B,MAAMqmB,EAAIpmB,UACNpB,EAAM+Z,eAAe,YAAuC,KAAzB/Z,EAAMoB,QAAQu2B,OACpC,8BAAlB33B,EAAMoB,SAA6D,yBAAlBpB,EAAMoB,SACzDqmB,QAAQznB,MAAM,cAAeA,IAM/BR,KAAK2B,MAAM,uBACXsmB,QAAQznB,MAAM,aAAcA,GAEhC,CAEQ0iE,gBAAgB1iE,GAGlByB,SAASi8C,KAAK3yC,SAAS,uCAK3BvL,KAAKH,eAAeqO,QACtB,CAGQvM,MAAMC,EAAiByD,GACzBzD,EAAQ+4B,WAAW,WACrB36B,KAAKF,OAAOU,MAAMR,KAAKD,iBAAiBU,UAAUmB,GAAUyD,GAE5DrF,KAAKF,OAAOU,MAAMoB,EAASyD,EAE/B,EA5HW09D,SAAgB,mBAAAriE,iBAAhBqiE,GAAgBpiE,MAAAC,MAAAD,MAAAE,OAAAF,MAAAG,KAAAH,MAAAyB,MAAA,EAAhB2gE,EAAgB,WAAAxqD,EAAAvX,IAAA,OAAhB+hE,EAAgB9hE,QAAhB8hE,EAAgB7hE,YAAhB6hE,CAAgB,+BCTtB,IAAMgB,GAAU,MAAjB,MAAOA,EACXnkE,YAAoBklC,GAAA9kC,KAAA8kC,MAAmB,CAEvCk/B,eAAeC,GACb,MAAMC,EAASD,EAASrhE,MAAM,KAC9B,OAAO5C,KAAK8kC,KAAKj5B,IAAiB,gBAAgBq4D,EAAOA,EAAOriE,OAAS,UAC3E,EANWkiE,SAAU,mBAAArjE,iBAAVqjE,GAAUpjE,MAAAC,OAAA,EAAVmjE,EAAU,WAAAxrD,EAAAvX,IAAA,OAAV+iE,EAAU9iE,QAAV8iE,EAAU7iE,UAAAC,WADG,SACb4iE,CAAU,0CCwBvB,MAAMI,KAAsB,YAAa95C,SAASkJ,iBAmBrC6wC,GAAU,CACrBC,QAASC,MACTC,OAAO,EACPC,WApBI,SAAUC,GAAYC,EAA6BC,GACvD,OAAO,WACL,OAAOD,EAAYxkE,aAAaC,QAAKgL,KAAW7K,IAC9C,GAAIA,GAAQA,EAAKsN,YAAYwC,OAC3Bu0D,SAAUC,cAActkE,EAAKsN,YAAYwC,QAClCu0D,EAAUE,KAAKvkE,EAAKsN,YAAYwC,QAIzC,MAAM00D,EAAqBhjE,aAAayO,QAAQ9G,IAAe0G,YAAc,KAC7Ew0D,SAAUC,cAAcE,GACjBH,EAAUE,KAAKC,EAAkB,IACtCz5D,WACN,CACF,EAOE05D,KAAM,CAACt7D,IAAgB0N,OAgDnB6tD,GAAmB,CACvBzf,OAAQ,CACN0f,sBAAsB,EACtBC,eAhDJ,SAASC,GAAuBl7C,GAC5B,MAAMm7C,EAAkC,GAExCn7C,SAAItV,QAAQ0wD,IAKR,GAHAD,EAAiB73D,KAAK83D,GAGlBA,EAAK95D,SAAS,KAAM,CAEpB,MAAM+5D,EAAkBD,EAAKxiD,QAAQ,IAAK,KAC1CuiD,EAAiB73D,KAAK+3D,EAAe,IAItCF,CACX,CAgCoBD,CA7BE,CACpB,KAAM,QAAS,KAAM,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAC3E,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QACxE,KAAM,QAAS,QAAS,KAAM,QAAS,KAAM,QAAS,QAAS,KAAM,QAAS,KAC9E,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,QAAS,QAAS,QAAS,QACjF,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,QAAS,QAAS,QAAS,QAAS,QACjF,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,KAAM,KAAM,QAAS,QACpF,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QACjF,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,KAAM,QAC9E,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,QAC3E,QAAS,QAAS,QAAS,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KACjF,QAAS,KAAM,QAAS,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAC9E,QAAS,KAAM,QAAS,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAC9E,QAAS,KAAM,QAAS,MAAO,SAAU,KAAM,QAAS,KAAM,QAAS,KAAM,QAC7E,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,QAC3E,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,QAAS,QAAS,KAAM,QAAS,KAC9E,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,QAAS,KAAM,QAAS,QAC9E,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,QAAS,QAC9E,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,KAAM,QAAS,KAAM,QAC3E,KAAM,QAAS,QAAS,QAAS,QAAS,QAAS,KAAM,QAAS,QAAS,KAAM,QACjF,MAAO,SAAU,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAC7E,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,KAAM,QAAS,KAAM,QAAS,KAC3E,QAAS,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,QAAS,QACxE,QAAS,QAAS,KAAM,QAAS,YAO/BI,SAAUt7D,KAAY6hD,WACtB0Z,YAAa,KACbC,aAAc,KACdC,eAAgB,CACdC,wBAAwB,EACxBC,YAAY,MAKlBC,SAAqBnG,GAAc,CAC/BoG,UAAW,IACPC,OAAoBC,MAClBhE,GACAiE,MAAwBC,WAAW,CAAE/B,uBACrCgC,MAAa/D,QAAQ,CACnBgE,cAAe,qBACfC,mBAAmB,EACnBC,QAAS,IACTC,iBAAiB,EACjBC,aAAa,IAEf9hB,MAAuB0d,YAAS,EAElCqE,MAAiBzB,KAAgB,EACjC0B,OAAuB,CACrBC,cAAe,QAChB,EACDC,OAAoC,CAClCC,OAAQ9C,GACR+C,QAAS,CAAEC,SAAUjlE,iBACtB,EACDklE,OAA4B,CAC1BF,QAAS,CACPC,SAAUjlE,gBAGd,CAAEuiE,QAAS4C,MAAmBC,SAAUnE,GAAkBwB,OAAO,GACjE,CAAEF,QAAS4C,MAAmBC,SAAU1E,GAAgB+B,OAAO,GAC/DH,GACA+C,MACA,CAAE9C,QAAS7qB,KAAOgrB,WAAY9qB,OAAQ,EACtC0tB,UAAkBC,aAGzBt/C,MAAMC,GAAOC,QAAQznB,MAAMwnB","names":["AdminGuard","constructor","accountService","toastr","translocoService","this","canActivate","currentUser$","pipe","take","map","user","hasAdminRole","error","translate","t","i0","i1","i2","i3","_angular_core__WEBPACK_IMPORTED_MODULE_3__","Yz7","factory","ɵfac","providedIn","AuthGuard","router","urlKey","errorMessage","errorMessage2","toasts","filter","toast","message","length","localStorage","setItem","window","location","pathname","navigateByUrl","i4","LibraryAccessGuard","memberService","next","state","libraryId","parseInt","url","split","isNaN","of","hasLibraryAccess","_angular_core__WEBPACK_IMPORTED_MODULE_2__","LibraryType","Manga","Comic","Book","MangaFormat","IMAGE","ARCHIVE","UNKNOWN","EPUB","PDF","PersonRole","Other","Artist","Writer","Penciller","Inker","Colorist","Letterer","CoverArtist","Editor","Publisher","Character","Translator","SortField","SortName","Created","LastModified","LastChapterAdded","TimeToRead","ReleaseYear","allSortFields","Object","keys","key","Number","mangaFormatFilters","title","value","selected","FilterCombination","Or","And","FilterComparison","Equal","GreaterThan","GreaterThanEqual","LessThan","LessThanEqual","Contains","MustContains","Matches","NotContains","NotEqual","BeginsWith","EndsWith","IsBefore","IsAfter","IsInLast","IsNotInLast","FilterField","None","Summary","SeriesName","PublicationStatus","Languages","AgeRating","UserRating","Tags","CollectionTags","Translators","Characters","Writers","Genres","Libraries","ReadProgress","Formats","ReadTime","Path","FilePath","allFields","sort","a","b","PaginatedResult","ThemeProvider","System","User","SearchResultGroup","libraries","series","collections","readingLists","persons","genres","tags","files","chapters","reset","Role","Admin","ChangePassword","Bookmark","Download","ChangeRestriction","AccountService","httpClient","messageHub","themeService","destroyRef","inject","DestroyRef","baseUrl","environment","apiUrl","userKey","currentUserSource","ReplaySubject","asObservable","hasValidLicenseSource","hasValidLicense$","messages$","evt","event","EVENTS","UserUpdate","payload","userUpdateEvent","userName","currentUser","username","switchMap","refreshAccount","subscribe","roles","includes","hasChangePasswordRole","hasChangeAgeRestrictionRole","hasDownloadRole","hasBookmarkRole","getRoles","get","deleteLicense","delete","TextResonse","hasValidLicense","forceCheck","res","tap","catchError","throwError","hasAnyLicense","updateUserLicense","license","email","post","login","model","response","setCurrentUser","createHubConnection","takeUntilDestroyed","getDecodedToken","token","role","Array","isArray","push","JSON","stringify","lastLoginKey","setTheme","preferences","theme","name","defaultTheme","stopRefreshTokenTimer","startRefreshTokenTimer","logout","removeItem","undefined","stopHubConnection","register","isEmailConfirmed","migrateUser","confirmMigrationEmail","resendConfirmationEmail","userId","inviteUser","confirmEmail","confirmEmailUpdate","getInviteUrl","withBaseUrl","parse","atob","requestResetPasswordEmail","encodeURIComponent","confirmResetPasswordEmail","resetPassword","password","oldPassword","update","updateEmail","updateAgeRestriction","ageRating","includeUnknowns","getPreferences","pref","updatePreferences","userPreferences","settings","localeKey","locale","getUserFromLocalStorage","userString","getItem","resetApiKey","apiKey","getOpdsUrl","refreshToken","refreshTokenTimeout","setInterval","clearInterval","_angular_core__WEBPACK_IMPORTED_MODULE_4__","Action","Submenu","MarkAsRead","MarkAsUnread","Scan","Delete","Edit","Info","RefreshMetadata","AnalyzeFiles","IncognitoRead","AddToReadingList","AddToCollection","DownloadBookmark","ViewSeries","Read","AddToWantToReadList","RemoveFromWantToReadList","SendTo","Import","RemoveFromOnDeck","AddRuleGroup","RemoveRuleGroup","ActionFactoryService","deviceService","libraryActions","seriesActions","volumeActions","chapterActions","collectionTagActions","readingListActions","bookmarkActions","isAdmin","_resetActions","getLibraryActions","callback","applyCallbackToList","getSeriesActions","getVolumeActions","getChapterActions","getCollectionTagActions","getReadingListActions","getBookmarkActions","getMetadataFilterActions","action","requiresAdmin","children","dummyCallback","data","filterSendToAction","actions","chapter","class","dynamicList","devices$","devices","d","shareReplay","applyCallback","forEach","childAction","list","hasAction","i","_r8","ctx_r7","tmp_b_0","listForm","setValue","t_r1","collectionTag_r10","_r15","$implicit","ctx_r14","addToCollection","BulkAddToCollectionComponent_ng_container_0_li_9_i_2_Template","promoted","_r19","ctx_r18","close","BulkAddToCollectionComponent_ng_container_0_div_7_Template","BulkAddToCollectionComponent_ng_container_0_li_9_Template","BulkAddToCollectionComponent_ng_container_0_li_11_Template","BulkAddToCollectionComponent_ng_container_0_li_12_Template","ctx_r20","create","ctx_r0","lists","filterList","collectionTitleTrackby","loading","BulkAddToCollectionComponent","modal","collectionService","cdRef","seriesIds","FormGroup","index","item","TranslocoService","listItem","toLowerCase","indexOf","filterQuery","ngOnInit","addControl","FormControl","markForCheck","allTags","ngAfterViewInit","inputElem","nativeElement","select","tagName","addByMultiple","success","collectionName","tag","id","core","Xpm","selectors","viewQuery","rf","ctx","BulkAddToCollectionComponent_ng_container_0_Template","CommonModule","ReactiveFormsModule","i5","FilterPipe","NgbModalModule","TranslocoDirective","styles","encapsulation","changeDetection","ActionService","libraryService","seriesService","readerService","modalService","confirmService","onDestroy","Subject","readingListModalRef","collectionModalRef","ngOnDestroy","complete","scanLibrary","library","_this","_asyncToGenerator","hasOwnProperty","scan","info","refreshMetadata","_this2","confirm","editLibrary","modalRef","open","LibrarySettingsModalComponent","size","componentInstance","closed","closeResult","analyzeFiles","_this3","alert","analyze","markSeriesAsRead","markRead","pagesRead","pages","markSeriesAsUnread","markUnread","scanSeries","_this4","analyzeFilesForSeries","refreshMetdata","_this5","markVolumeAsRead","seriesId","volume","markVolumeRead","c","markVolumeAsUnread","markVolumeUnread","markChapterAsRead","saveProgress","volumeId","results","markChapterAsUnread","markMultipleAsRead","volumes","markMultipleRead","v","markMultipleAsUnread","markMultipleUnread","markMultipleSeriesAsRead","markMultipleSeriesRead","s","markMultipleSeriesAsUnread","markMultipleSeriesUnread","addMultipleToReadingList","AddToListModalComponent","scrollable","volumeIds","chapterIds","type","ADD_FLOW","Multiple","dismissed","addMultipleSeriesToWantToReadList","addSeriesToWantToRead","removeMultipleSeriesFromWantToReadList","removeSeriesToWantToRead","addMultipleSeriesToReadingList","Multiple_Series","addMultipleSeriesToCollectionTag","windowClass","addSeriesToReadingList","Series","addVolumeToReadingList","Volume","addChapterToReadingList","chapterId","Chapter","editReadingList","readingList","EditReadingListModalComponent","deleteMultipleSeries","_this6","count","deleteSeries","_this7","sendToDevice","device","sendTo","sendSeriesToDevice","sendSeriesTo","i6","i7","i8","i9","CollectionTagService","imageService","search","query","coverImage","randomize","getCollectionCoverImage","updateTag","updateSeriesForTag","seriesIdsToRemove","tagId","tagTitle","collectionTagId","collectionTagTitle","tagNameExists","deleteTag","DeviceService","devicesSource","createDevice","platform","emailAddress","updateDevice","deleteDevice","getDevices","deviceId","_angular_core__WEBPACK_IMPORTED_MODULE_6__","ImageService","encodedKey","placeholderImage","errorImage","resetCoverImage","errorWebLinkImage","currentTheme$","isDarkTheme","getRecentlyAddedItem","getVolumeCoverImage","getChapterCoverImage","getEntityTypeFromUrl","part","equalIndex","substring","replace","getLibraryCoverImage","getSeriesCoverImage","getReadingListCoverImage","readingListId","getBookmarkedImage","pageNum","getWebLinkImage","getCoverUploadImage","filename","updateErroredImage","target","src","updateErroredWebLinkImage","r","Math","round","random","LibraryService","libraryNames","libraryTypes","getLibraryNames","lib","getLibraryName","l","libraryNameExists","listDirectories","rootPath","getJumpBar","getLibraries","updateLibrariesForMember","selectedLibraries","force","forceUpdate","getLibraryType","MemberService","getMembers","includePending","getMemberNames","adminExists","deleteMember","hasReadingProgress","librayId","getMember","_angular_core__WEBPACK_IMPORTED_MODULE_1__","UpdateAvailable","ScanSeries","SeriesAdded","SeriesRemoved","ScanLibraryProgress","OnlineUsers","SeriesAddedToCollection","Error","BackupDatabaseProgress","CleanupProgress","DownloadProgress","NotificationProgress","FileScanProgress","SiteThemeProgress","CoverUpdate","CoverUpdateProgress","LibraryModified","UserProgressUpdate","ConvertBookmarksProgress","WordCountAnalyzerProgress","SendingToDevice","ScrobblingKeyExpired","MessageHubService","hubUrl","messagesSource","onlineUsersSource","BehaviorSubject","onlineUsers$","isEventType","eventType","hubConnection","HubConnectionBuilder","withUrl","accessTokenFactory","withAutomaticReconnect","build","start","catch","err","console","on","usernames","resp","body","stop","sendMessage","methodName","invoke","MetadataService","validLanguages","getAllAgeRatings","method","join","getAllPublicationStatus","getAllTags","getAllGenres","getAllLanguages","getAllValidLanguages","getAllPeople","getAllPeopleByRole","createDefaultFilterDto","statements","combination","limitTo","sortOptions","isAscending","sortField","createDefaultFilterStatement","field","comparison","updateFilter","arr","filterStmt","_angular_core__WEBPACK_IMPORTED_MODULE_7__","NavService","document","rendererFactory","localStorageSideNavKey","navbarVisibleSource","navbarVisible$","sideNavCollapseSource","sideNavCollapsed$","sideNavVisibilitySource","sideNavVisibility$","renderer","createRenderer","showNavBar","sideNavState","showSideNav","setStyle","querySelector","hideNavBar","removeStyle","hideSideNav","toggleSideNav","val","newVal","DOCUMENT","CHAPTER_ID_DOESNT_EXIST","CHAPTER_ID_NOT_FETCHED","ReaderService","utilityService","filterUtilityService","getNavigationArray","format","downloadPdf","bookmark","page","unbookmark","getAllBookmarks","getBookmarks","getBookmarksForVolume","getBookmarksForSeries","clearBookmarks","clearMultipleBookmarks","getBookmarkInfo","getProgress","getPageUrl","getThumbnailUrl","getBookmarkPageUrl","getChapterInfo","includeDimensions","getFileDimensions","bookScrollId","getNextChapter","currentChapterId","getPrevChapter","hasSeriesProgress","getCurrentChapter","getTimeLeft","setOverrideStyles","backgroundColor","bodyNode","originalBodyColor","style","background","setAttribute","resetOverrideStyles","imageUrlToPageNum","imageSrc","params","URLSearchParams","URL","imageUrlToChapterId","getNextChapterUrl","nextChapterId","incognitoMode","readingListMode","lastSlashIndex","lastIndexOf","newRoute","getQueryParams","getQueryParamsObject","toggleFullscreen","el","screenfull","isEnabled","toggle","checkFullscreenMode","fullscreenElement","closeReader","back","removePersonalToc","pageNumber","getPersonalToC","createPersonalToC","getElementFromXPath","path","node","evaluate","XPathResult","FIRST_ORDERED_NODE_TYPE","singleNodeValue","nodeType","Node","ELEMENT_NODE","getXPathTo","element","pureXPath","ix","siblings","parentNode","childNodes","sibling","ReadingListService","getReadingList","getReadingLists","includePromoted","sortByLastModified","itemsPerPage","HttpParams","addPaginationIfExists","observe","createPaginatedResult","getReadingListsForSeries","getListItems","createList","updateByMultiple","updateByMultipleSeries","updateBySeries","updateByVolume","updateByChapter","updatePosition","readingListItemId","fromPosition","toPosition","deleteItem","removeRead","actionListFilter","nameExists","validateCbl","form","importCbl","getCharacters","ScrollService","scrollContainerSource","scrollContainer$","events","NavigationEnd","scrollPosition","pageYOffset","documentElement","scrollTop","scrollPositionX","pageXOffset","scrollLeft","scrollTo","top","behavior","scroll","scrollToX","left","setScrollContainer","elem","SearchService","term","getSeriesForMangaFile","mangaFileId","getSeriesForChapter","SeriesService","paginatedResults","paginatedSeriesForTagsResults","getAllSeriesV2","getSeriesForLibraryV2","getAllSeriesByIds","getSeries","getVolumes","getChapter","getChapterMetadata","updateRating","userRating","updateSeries","getRecentlyAdded","getRecentlyUpdatedSeries","getWantToRead","isWantToRead","getOnDeck","getMetadata","items","collectionTags","updateMetadata","seriesMetadata","getSeriesForTag","getRelatedForSeries","getRecommendationsForSeries","updateRelationships","adaptations","characters","contains","others","prequels","sequels","sideStories","spinOffs","alternativeSettings","alternativeVersions","doujinshis","editions","getSeriesDetail","getReviews","updateReview","tagline","getRatings","getOverallRating","removeFromOnDeck","ThemeService","domSanitizer","defaultBookTheme","currentThemeSource","themesSource","themes$","themeCache","notificationEvent","getThemes","getColorScheme","getComputedStyle","getPropertyValue","trim","getThemeColor","getTileColor","getCssVariable","variable","themes","clearThemes","unsetThemes","setDefault","themeId","setBookTheme","selector","unsetBookThemes","addClass","clearBookTheme","themeName","find","provider","hasThemeInHead","fetchThemeContent","_ref","content","styleElem","createElement","appendChild","createTextNode","head","themeColor","colorScheme","_x","apply","arguments","from","encodedCss","sanitize","SecurityContext","STYLE","classList","remove","cls","startsWith","UploadService","uploadByUrl","updateSeriesCoverImage","_cleanBase64Url","updateCollectionCoverImage","updateReadingListCoverImage","updateChapterCoverImage","updateLibraryCoverImage","resetChapterCoverLock","DynamicListPipe","transform","Yjl","pure","standalone","$event","dynamicItem_r17","_r20","action_r8","performDynamicClick","CardActionablesComponent_ng_container_0_ng_container_1_ng_template_6_ng_container_0_ng_container_1_ng_container_1_ng_container_1_Template","dList_r15","_r24","ctx_r22","performAction","ctx_r25","closeAllSubmenus","CardActionablesComponent_ng_container_0_ng_container_1_ng_template_6_ng_container_0_ng_container_1_ng_template_4_button_0_Template","willRenderAction","CardActionablesComponent_ng_container_0_ng_container_1_ng_template_6_ng_container_0_ng_container_1_ng_container_1_Template","CardActionablesComponent_ng_container_0_ng_container_1_ng_template_6_ng_container_0_ng_container_1_ng_template_4_Template","_r13","_r37","_r31","ctx_r36","preventEvent","openSubmenu","ctx_r39","ctx_r41","CardActionablesComponent_ng_container_0_ng_container_1_ng_template_6_ng_container_0_ng_template_2_ng_container_0_button_3_Template","CardActionablesComponent_ng_container_0_ng_container_1_ng_template_6_ng_container_0_ng_template_2_ng_container_0_ng_container_5_Template","ctx_r30","_r4","_c0","CardActionablesComponent_ng_container_0_ng_container_1_ng_template_6_ng_container_0_ng_template_2_ng_container_0_Template","ctx_r11","shouldRenderSubMenu","CardActionablesComponent_ng_container_0_ng_container_1_ng_template_6_ng_container_0_ng_container_1_Template","CardActionablesComponent_ng_container_0_ng_container_1_ng_template_6_ng_container_0_ng_template_2_Template","_r10","CardActionablesComponent_ng_container_0_ng_container_1_ng_template_6_ng_container_0_Template","_r45","ctx_r44","CardActionablesComponent_ng_container_0_ng_container_1_ng_container_5_Template","CardActionablesComponent_ng_container_0_ng_container_1_ng_template_6_Template","ctx_r2","btnClass","labelBy","disabled","iconClass","CardActionablesComponent_ng_container_0_ng_container_1_Template","CardActionablesComponent","actionHandler","EventEmitter","canDownload","submenu","stopPropagation","preventDefault","emit","actionTitle","subMenu","k","dynamicItem","_extra","inputs","outputs","features","decls","vars","consts","template","CardActionablesComponent_ng_container_0_Template","NgbDropdown","NgbDropdownToggle","NgbDropdownMenu","NgbDropdownItem","responseType","t_r11","route_r13","_r22","index_r14","navigateTo","DirectoryPickerComponent_ng_container_0_ol_15_li_1_ng_container_1_Template","DirectoryPickerComponent_ng_container_0_ol_15_li_1_ng_template_2_Template","ctx_r12","routeStack","peek","last_r15","_r17","DirectoryPickerComponent_ng_container_0_ol_15_li_1_Template","ctx_r5","folder_r25","_r28","ctx_r27","selectNode","_c1","idx_r26","ctx_r9","helpUrl","ctx_r32","ctx_r33","focus$","ctx_r34","click$","ctx_r35","updateTable","DirectoryPickerComponent_ng_container_0_ng_template_12_Template","DirectoryPickerComponent_ng_container_0_ol_15_Template","DirectoryPickerComponent_ng_container_0_ng_template_16_Template","goBack","DirectoryPickerComponent_ng_container_0_tr_31_Template","DirectoryPickerComponent_ng_container_0_a_33_Template","ctx_r37","ctx_r38","share","_r3","_r6","folders","DirectoryPickerComponent","startingFolder","currentRoot","Stack","searching","searchFailed","text$","debouncedText$","debounceTime","distinctUntilChanged","clicksWithClosedPopup$","instance","isPopupOpen","merge","f","fullPath","folders2","endsWith","folder","loadChildren","pop","stackPeek","shareFolder","folderPath","getStem","lastPath","replaced","DirectoryPickerComponent_ng_container_0_Template","NgbTypeahead","FormsModule","NgbHighlight","NgIf","NgFor","NgClass","SettingsService","http","getServerSettings","getBaseUrl","updateServerSettings","resetServerSettings","resetIPAddressesSettings","resetBaseUrl","resetEmailServerSettings","testEmailServerSettings","emailUrl","getTaskFrequencies","getLoggingLevels","getLibraryTypes","getOpdsEnabled","changeMode","openFileSelector_r6","openFileSelector","loadImage","mode","ctx_r16","tmp_1_0","ctx_r8","CoverImageChooserComponent_ng_container_0_ng_template_4_div_0_Template","CoverImageChooserComponent_ng_container_0_ng_template_4_ng_container_1_Template","ctx_r19","resetImage","_r23","CoverImageChooserComponent_ng_container_0_div_7_ng_container_2_Template","ctx_r4","showApplyButton","selectedIndex","_r30","ctx_r28","applyImage","appliedIndex","_r34","selectImage","CoverImageChooserComponent_ng_container_0_div_8_ng_container_2_Template","url_r25","dropped","fileOver","fileLeave","CoverImageChooserComponent_ng_container_0_ng_template_4_Template","CoverImageChooserComponent_ng_container_0_ng_template_5_Template","CoverImageChooserComponent_ng_container_0_div_7_Template","CoverImageChooserComponent_ng_container_0_div_8_Template","acceptableExtensions","showReset","imageUrls","CoverImageChooserComponent","fb","uploadService","applyCover","resetCover","imageUrlsChange","resetClicked","imageSelected","selectedBase64Url","group","coverImageUrl","getBase64Image","img","canvas","width","height","getContext","alpha","drawImage","toDataURL","imgUrl","Image","crossOrigin","onload","e","handleUrlImageAdd","onerror","setupEnterHandler","setTimeout","focus","droppedFile","fileEntry","isFile","file","reader","FileReader","handleFileImageAdd","readAsDataURL","result","fromEvent","takeWhile","KEY_CODES","ENTER","ESC_KEY","CoverImageChooserComponent_ng_container_0_Template","NgxFileDropModule","ImageComponent","TranslocoModule","BytesPipe","bytes","si","dp","thresh","abs","units","u","fixed","toFixed","_angular_core__WEBPACK_IMPORTED_MODULE_0__","DefaultDatePipe","replacementString","Infinity","MangaFormatIconPipe","MangaFormatPipe","SafeHtmlPipe","dom","DomSanitizer","HTML","SentenceCasePipe","charAt","toUpperCase","readingList_r10","addToList","AddToListModalComponent_ng_container_0_li_9_i_2_Template","AddToListModalComponent_ng_container_0_div_7_Template","AddToListModalComponent_ng_container_0_li_9_Template","AddToListModalComponent_ng_container_0_li_11_Template","AddToListModalComponent_ng_container_0_li_12_Template","readingListService","AddToListModalComponent_ng_container_0_Template","EditReadingListModalComponent_ng_container_0_ng_template_11_div_6_div_1_Template","EditReadingListModalComponent_ng_container_0_ng_template_11_div_6_div_2_Template","tmp_0_0","reviewGroup","errors","required","duplicateName","EditReadingListModalComponent_ng_container_0_ng_template_11_ng_container_7_div_1_ng_template_6_Template","EditReadingListModalComponent_ng_container_0_ng_template_11_ng_container_7_div_1_Template","ctx_r6","user_r15","EditReadingListModalComponent_ng_container_0_ng_template_11_div_13_div_4_div_1_Template","formControl_r21","min","max","EditReadingListModalComponent_ng_container_0_ng_template_11_div_13_div_4_Template","invalid","touched","dirty","EditReadingListModalComponent_ng_container_0_ng_template_11_div_14_div_4_div_1_Template","formControl_r27","EditReadingListModalComponent_ng_container_0_ng_template_11_div_14_div_4_Template","EditReadingListModalComponent_ng_container_0_ng_template_11_div_18_div_4_div_1_Template","formControl_r33","EditReadingListModalComponent_ng_container_0_ng_template_11_div_18_div_4_Template","EditReadingListModalComponent_ng_container_0_ng_template_11_div_19_div_4_div_1_Template","formControl_r39","EditReadingListModalComponent_ng_container_0_ng_template_11_div_19_div_4_Template","ctx_r10","EditReadingListModalComponent_ng_container_0_ng_template_11_div_6_Template","EditReadingListModalComponent_ng_container_0_ng_template_11_ng_container_7_Template","EditReadingListModalComponent_ng_container_0_ng_template_11_div_13_Template","EditReadingListModalComponent_ng_container_0_ng_template_11_div_14_Template","EditReadingListModalComponent_ng_container_0_ng_template_11_div_18_Template","EditReadingListModalComponent_ng_container_0_ng_template_11_div_19_Template","ctx_r3","_r47","ctx_r46","ctx_r48","updateSelectedIndex","ctx_r49","updateSelectedImage","ctx_r50","handleReset","coverImageLocked","_r52","ctx_r51","ctx_r53","active","EditReadingListModalComponent_ng_container_0_ng_template_11_Template","EditReadingListModalComponent_ng_container_0_ng_template_15_Template","ctx_r54","ctx_r55","save","getActiveBreakpoint","Breakpoint","Mobile","TabID","General","CoverImage","_r2","ngModal","coverImageIndex","selectedCover","nonNullable","validators","Validators","summary","startingMonth","startingYear","endingMonth","endingYear","valueChanges","exists","isExistingName","setErrors","rli","dismiss","apis","forkJoin","detectChanges","EditReadingListModalComponent_ng_container_0_Template","NgbNav","NgbNavItem","NgbNavItemRole","NgbNavLink","NgbNavContent","NgbTooltip","NgTemplateOutlet","NgbNavOutlet","AsyncPipe","CblImportResult","Fail","Partial","Success","step_r1","currentStep","icon","StepTrackerComponent","steps","StepTrackerComponent_ng_container_2_Template","CblImportReason","ChapterMissing","VolumeMissing","SeriesMissing","NameConflict","AllSeriesMissing","EmptyFile","SeriesCollision","AllChapterMissing","InvalidFile","failIcon","CblConflictReasonPipe","reason","number","readingListName","seriesLink","CblImportResultPipe","uploadForm","summary_r15","fileToProcess_r13","fileName","ImportCblModalComponent_ng_container_0_ng_container_10_ngb_panel_6_ng_container_1_ng_template_2_ng_container_0_li_4_Template","ImportCblModalComponent_ng_container_0_ng_container_10_ngb_panel_6_ng_container_1_ng_template_2_ng_container_0_Template","ImportCblModalComponent_ng_container_0_ng_container_10_ngb_panel_6_ng_container_1_ng_template_2_ng_template_1_Template","_r21","ImportCblModalComponent_ng_container_0_ng_container_10_ngb_panel_6_ng_container_1_ng_template_1_Template","ImportCblModalComponent_ng_container_0_ng_container_10_ngb_panel_6_ng_container_1_ng_template_2_Template","ImportCblModalComponent_ng_container_0_ng_container_10_ngb_panel_6_ng_container_1_Template","validateSummary","ImportCblModalComponent_ng_container_0_ng_container_10_ngb_panel_6_Template","filesToProcess","summary_r34","fileToProcess_r32","_c2","ImportCblModalComponent_ng_container_0_ng_container_11_ngb_panel_6_ng_container_1_ng_template_1_Template","ImportCblModalComponent_ng_container_0_ng_container_11_ngb_panel_6_ng_container_1_ng_template_2_Template","ImportCblModalComponent_ng_container_0_ng_container_11_ngb_panel_6_ng_container_1_Template","dryRunSummary","ImportCblModalComponent_ng_container_0_ng_container_11_ngb_panel_6_Template","summary_r45","fileToProcess_r43","ImportCblModalComponent_ng_container_0_ng_container_12_ngb_panel_4_ng_container_1_ng_template_1_Template","ImportCblModalComponent_ng_container_0_ng_container_12_ngb_panel_4_ng_container_1_ng_template_2_Template","ImportCblModalComponent_ng_container_0_ng_container_12_ngb_panel_4_ng_container_1_Template","finalizeSummary","ImportCblModalComponent_ng_container_0_ng_container_12_ngb_panel_4_Template","result_r53","order","ImportCblModalComponent_ng_container_0_ng_template_13_li_1_Template","summary_r51","success_r58","ImportCblModalComponent_ng_container_0_ng_template_15_ng_container_0_span_2_Template","ImportCblModalComponent_ng_container_0_ng_template_15_ng_container_0_span_3_Template","ImportCblModalComponent_ng_container_0_ng_template_15_ng_container_0_span_4_Template","summary_r55","ctx_r56","cblName","ImportCblModalComponent_ng_container_0_ng_template_15_ng_container_0_Template","ImportCblModalComponent_ng_container_0_ng_template_15_span_4_Template","filename_r54","_r68","ctx_r67","ImportCblModalComponent_ng_container_0_div_9_Template","ImportCblModalComponent_ng_container_0_ng_container_10_Template","ImportCblModalComponent_ng_container_0_ng_container_11_Template","ImportCblModalComponent_ng_container_0_ng_container_12_Template","ImportCblModalComponent_ng_container_0_ng_template_13_Template","ImportCblModalComponent_ng_container_0_ng_template_15_Template","ctx_r69","ctx_r70","prevStep","ctx_r71","nextStep","currentStepIndex","Step","Validate","DryRun","Finalize","canMoveToPrevStep","canMoveToNextStep","NextButtonLabel","ImportCblModalComponent","fileUploadControl","FileUploadValidators","accept","isLoading","failedFiles","isFileSelected","formData","FormData","append","cblImport","dryRun","import","filenamesAllowedToProcess","p","findIndex","ImportCblModalComponent_ng_container_0_Template","FileUploadModule","NgbAccordionModule","SAVER","InjectionToken","getSaver","saveAs","download","saver","source","previous","isHttpProgressEvent","HttpEventType","UploadProgress","progress","total","loaded","isHttpResponse","Response","getFilename","headers","defaultName","ext","DEBOUNCE_TIME","bytesPipe","DownloadService","SIZE_WARNING","downloadsSource","activeDownloads$","downloadSubtitle","downloadEntityType","downloadEntity","entityType","entity","sizeCheckCall","downloadCall","downloadSeriesSize","downloadSeries","downloadVolumeSize","downloadVolume","downloadChapterSize","downloadChapter","downloadBookmarks","downloadLogs","promptForDownloadSize","confirmSize","wantsToDownload","finalize","downloadType","subtitle","reportProgress","throttleTime","asyncScheduler","leading","trailing","blob","decodeURIComponent","updateDownloadState","finalizeDownloadState","entitySubtitle","values","getValue","subTitle","bookmarks","sortOptionsKey","statementsKey","limitToKey","FilterUtilitiesService","metadataService","applyFilter","dto","urlFromFilterV2","applyFilterWithParams","extraParams","updateUrlFromFilterV2","pagination","currentPage","href","history","replaceState","replacePaginationOnUrl","snapshot","queryParamMap","totalItems","totalPages","currentUrl","encodeSeriesFilter","encodedStatements","encodeFilterStatements","encodedSortOptions","encodeSortOptions","encodedLimitTo","encodeName","statement","filterPresetsFromUrlV2","queryParams","fullUrl","stmtsStartIndex","endIndex","stmtsEncoded","decodeFilterStatements","optionsStartIndex","sortOptionsEncoded","decodeSortOptions","parts","sortFieldPart","isAscendingPart","statementString","comparisonStartToken","fieldStartToken","valueStartToken","o","createSeriesV2Filter","createSeriesV2DefaultStatement","_angular_core__WEBPACK_IMPORTED_MODULE_5__","RIGHT_ARROW","LEFT_ARROW","DOWN_ARROW","UP_ARROW","SPACE","G","B","F","H","BACKSPACE","DELETE","SHIFT","Tablet","Desktop","UtilityService","mangaFormatKeys","sortChapters","parseFloat","mangaFormatToText","formatChapterName","libraryType","includeHash","includeSpace","input","reg","filterMatches","isVolume","isChapter","isSeries","asVolume","asChapter","asSeries","innerWidth","isInViewport","additionalTopOffset","rect","getBoundingClientRect","bottom","innerHeight","clientHeight","right","clientWidth","deepEqual","object1","object2","keys1","keys2","val1","val2","areObjects","isObject","object","paginatedVariable","pageHeader","getWindowDimensions","ctx_r1","center","fontSize","CircularLoaderComponent_ng_container_0_div_1_Template","showIcon","currentValue","outerStrokeColor","innerStrokeColor","animation","CircularLoaderComponent","CircularLoaderComponent_ng_container_0_Template","NgCircleProgressModule","ConfirmConfig","_type","header","buttons","disableEscape","_r5","btn_r7","_r9","clickButton","text","ConfirmDialogComponent_ng_container_0_button_4_Template","ConfirmDialogComponent_ng_container_0_div_8_Template","config","ConfirmDialogComponent","_button_sort","x","y","xIsSecondary","yIsSecondary","button","ConfirmDialogComponent_ng_container_0_Template","ConfirmService","defaultConfirm","defaultAlert","Promise","resolve","reject","isEmpty","hubService","changeDetectionRef","maxWidth","maxHeight","borderRadius","objectFit","processEvents","updateEvent","imageUrl","ngOnChanges","imgElem","updateData","updateUrl","_r7","UpdateNotificationModalComponent_ng_container_0_a_15_Template","updateTitle","updateBody","isDocker","UpdateNotificationModalComponent","UpdateNotificationModalComponent_ng_container_0_Template","LibrarySettingsModalComponent_ng_container_0_ng_template_14_div_4_div_1_Template","LibrarySettingsModalComponent_ng_container_0_ng_template_14_div_4_div_2_Template","ctx_r15","libraryForm","opt_r25","lastScanned","LibrarySettingsModalComponent_ng_container_0_ng_template_14_div_4_Template","LibrarySettingsModalComponent_ng_container_0_ng_template_14_ng_template_9_Template","LibrarySettingsModalComponent_ng_container_0_ng_template_14_option_14_Template","LibrarySettingsModalComponent_ng_container_0_ng_template_14_div_15_Template","_r16","isAddLibrary","folder_r30","_r33","removeFolder","LibrarySettingsModalComponent_ng_container_0_ng_template_18_li_3_Template","_r35","openDirectoryPicker","selectedFolders","LibrarySettingsModalComponent_ng_container_0_ng_template_22_p_0_Template","_r40","applyCoverImage","ctx_r42","_r46","ctx_r45","isNextDisabled","_r49","isDisabled","LibrarySettingsModalComponent_ng_container_0_ng_container_3_Template","LibrarySettingsModalComponent_ng_container_0_ng_template_4_Template","LibrarySettingsModalComponent_ng_container_0_ng_template_14_Template","LibrarySettingsModalComponent_ng_container_0_ng_template_18_Template","LibrarySettingsModalComponent_ng_container_0_ng_template_22_Template","LibrarySettingsModalComponent_ng_container_0_ng_template_26_Template","forceScan","LibrarySettingsModalComponent_ng_container_0_ng_container_35_Template","LibrarySettingsModalComponent_ng_container_0_ng_template_36_Template","Folder","setupStep","Cover","Advanced","_r11","StepID","settingService","folderWatching","includeInDashboard","includeInRecommended","includeInSearch","manageCollections","manageReadingLists","allowScrobbling","collapseSeriesRelationships","madeChanges","types","disable","setValues","valid","returnVal","substr","coverUrl","_angular_core__WEBPACK_IMPORTED_MODULE_8__","LibrarySettingsModalComponent_ng_container_0_Template","i10","i11","BASE_URL","getElementsByTagName","getAttribute","production","buyLink","manageLink","navService","highlighted","link","SideNavItemComponent_ng_template_1_ng_container_0_Template","SideNavItemComponent_ng_template_1_ng_template_1_Template","external","SideNavItemComponent_ng_template_3_ng_container_3_Template","SideNavItemComponent_ng_template_3_ng_template_4_Template","SideNavItemComponent","comparisonMethod","updateHighlight","ngContentSelectors","SideNavItemComponent_ng_container_0_Template","SideNavItemComponent_ng_template_1_Template","SideNavItemComponent_ng_template_3_Template","_r1","RouterLink","NgOptimizedImage","library_r13","getLibraryTypeIcon","getLibraryImage","SideNavComponent_ng_container_0_div_1_app_side_nav_item_11_Template","SideNavComponent_ng_container_0_div_1_div_12_Template","SideNavComponent_ng_container_0_div_1_app_side_nav_item_14_Template","filterLibrary","SideNavComponent_ng_container_0_div_1_Template","toggleNavBar","SideNavComponent_ng_container_0_app_side_nav_item_9_Template","SideNavComponent","actionFactoryService","actionService","ngbModal","bind","collapsed","handleAction","SideNavComponent_ng_container_0_Template","i12","PersonRolePipe","activeEvents","activeDownloads_r6","errors_r8","infos_r10","EventsWidgetComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_1_ng_container_1_Template","infos$","EventsWidgetComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_1_Template","errors$","clearAllErrorOrInfos","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_1_ng_container_1_li_1_Template","errors_r23","infos_r25","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_1_ng_container_1_Template","prettyPrintProgress","message_r33","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_4_ng_container_1_li_1_div_3_Template","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_4_ng_container_1_li_1_div_5_Template","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_4_ng_container_1_ng_template_2_div_3_Template","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_4_ng_container_1_li_1_Template","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_4_ng_container_1_ng_template_2_Template","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_4_ng_container_1_Template","progressUpdates_r31","_r51","singleUpdate_r46","handleUpdateAvailableClick","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_6_ng_container_1_li_2_div_3_Template","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_6_ng_container_1_li_1_Template","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_6_ng_container_1_li_2_Template","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_6_ng_container_1_Template","singleUpdates_r44","download_r58","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_8_ng_container_1_div_5_Template","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_8_ng_container_1_Template","activeDownloads_r56","error_r64","_r66","ctx_r65","seeMore","removeErrorOrInfo","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_10_ng_container_1_Template","errors_r62","info_r71","_r73","ctx_r72","ctx_r74","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_12_ng_container_1_Template","infos_r69","_c3","onlineUsers_r76","ctx_r78","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_14_li_1_Template","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_14_li_2_Template","ctx_r21","debugMode","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_16_li_1_Template","activeDownloads_r82","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_1_Template","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_3_Template","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_4_Template","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_6_Template","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_8_Template","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_10_Template","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_12_Template","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_14_Template","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_16_Template","progressEvents$","singleUpdates$","downloadService","EventsWidgetComponent_ng_container_0_ng_container_1_ng_container_1_Template","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_Template","EventsWidgetComponent_ng_container_0_ng_container_1_Template","isAdmin$","EventsWidgetComponent","progressEventsSource","singleUpdateSource","errorSource","infoSource","updateNotificationModalRef","processNotificationProgressEvent","mergeOrUpdate","m","infoCount","errorCount","messageEvent","trunc","EventsWidgetComponent_ng_container_0_Template","NgbPopover","NgStyle","SeriesFormatComponent","SeriesFormatComponent_ng_container_0_Template","resetField","option_r21","ctx_r23","handleResultlick","seriesTemplate","_c12","index_r22","GroupedTypeaheadComponent_ng_container_0_div_8_ng_container_2_li_5_Template","groupedData","option_r26","_r29","collectionTemplate","index_r27","GroupedTypeaheadComponent_ng_container_0_div_8_ng_container_3_li_5_Template","option_r32","ctx_r31","readingListTemplate","index_r33","GroupedTypeaheadComponent_ng_container_0_div_8_ng_container_4_li_5_Template","option_r38","_r41","ctx_r40","libraryTemplate","index_r39","GroupedTypeaheadComponent_ng_container_0_div_8_ng_container_5_li_5_Template","ctx_r13","option_r44","ctx_r43","genreTemplate","index_r45","GroupedTypeaheadComponent_ng_container_0_div_8_ng_container_6_li_5_Template","option_r50","_r53","ctx_r52","tagTemplate","index_r51","GroupedTypeaheadComponent_ng_container_0_div_8_ng_container_7_li_5_Template","option_r56","_r59","ctx_r58","personTemplate","index_r57","GroupedTypeaheadComponent_ng_container_0_div_8_ng_container_8_li_5_Template","option_r62","_r65","ctx_r64","ctx_r61","chapterTemplate","index_r63","GroupedTypeaheadComponent_ng_container_0_div_8_ng_container_9_li_5_Template","ctx_r17","option_r68","_r71","fileTemplate","index_r69","GroupedTypeaheadComponent_ng_container_0_div_8_ng_container_10_li_5_Template","noResultsTemplate","GroupedTypeaheadComponent_ng_container_0_div_8_ng_container_2_Template","GroupedTypeaheadComponent_ng_container_0_div_8_ng_container_3_Template","GroupedTypeaheadComponent_ng_container_0_div_8_ng_container_4_Template","GroupedTypeaheadComponent_ng_container_0_div_8_ng_container_5_Template","GroupedTypeaheadComponent_ng_container_0_div_8_ng_container_6_Template","GroupedTypeaheadComponent_ng_container_0_div_8_ng_container_7_Template","GroupedTypeaheadComponent_ng_container_0_div_8_ng_container_8_Template","GroupedTypeaheadComponent_ng_container_0_div_8_ng_container_9_Template","GroupedTypeaheadComponent_ng_container_0_div_8_ng_container_10_Template","GroupedTypeaheadComponent_ng_container_0_div_8_ng_container_11_Template","hasData","searchTerm","_r74","ctx_r73","onInputFocus","ctx_r75","ctx_r76","GroupedTypeaheadComponent_ng_container_0_div_6_Template","GroupedTypeaheadComponent_ng_container_0_button_7_Template","GroupedTypeaheadComponent_ng_container_0_div_8_Template","typeaheadForm","_c13","hasFocus","placeholder","tmp_6_0","GroupedTypeaheadComponent","minQueryLength","initialValue","inputChanged","clearField","focusChanged","prevSearchTerm","handleDocumentClick","handleKeyPress","change","openDropdown","clear","contentQueries","dirIndex","GroupedTypeaheadComponent_ng_container_0_Template","item_r30","_r32","clickLibraryResult","item_r33","localizedName","NavHeaderComponent_ng_container_0_nav_1_div_11_ng_template_8_ng_container_5_span_1_Template","NavHeaderComponent_ng_container_0_nav_1_div_11_ng_template_8_ng_container_5_ng_template_2_Template","st_r35","_r43","clickSeriesSearchResult","NavHeaderComponent_ng_container_0_nav_1_div_11_ng_template_8_ng_container_5_Template","libraryName","item_r44","_r48","ctx_r47","clickCollectionSearchResult","NavHeaderComponent_ng_container_0_nav_1_div_11_ng_template_10_span_6_Template","item_r49","clickReadingListSearchResult","NavHeaderComponent_ng_container_0_nav_1_div_11_ng_template_12_span_4_Template","item_r54","_r56","goToOther","item_r57","goToPerson","item_r60","_r62","item_r63","_r67","ctx_r66","clickChapterSearchResult","NavHeaderComponent_ng_container_0_nav_1_div_11_ng_template_20_ng_container_2_Template","titleName","item_r68","_r70","clickFileSearchResult","filePath","onChangeSearch","clearSearch","focusUpdate","NavHeaderComponent_ng_container_0_nav_1_div_11_ng_template_6_Template","NavHeaderComponent_ng_container_0_nav_1_div_11_ng_template_8_Template","NavHeaderComponent_ng_container_0_nav_1_div_11_ng_template_10_Template","NavHeaderComponent_ng_container_0_nav_1_div_11_ng_template_12_Template","NavHeaderComponent_ng_container_0_nav_1_div_11_ng_template_14_Template","NavHeaderComponent_ng_container_0_nav_1_div_11_ng_template_16_Template","NavHeaderComponent_ng_container_0_nav_1_div_11_ng_template_18_Template","NavHeaderComponent_ng_container_0_nav_1_div_11_ng_template_20_Template","NavHeaderComponent_ng_container_0_nav_1_div_11_ng_template_22_Template","NavHeaderComponent_ng_container_0_nav_1_div_11_ng_template_24_Template","searchResults","_r81","ctx_r80","scrollToTop","NavHeaderComponent_ng_container_0_nav_1_ng_container_13_ng_container_2_div_5_a_7_Template","NavHeaderComponent_ng_container_0_nav_1_ng_container_13_ng_container_2_div_5_a_12_Template","_r93","ctx_r92","user_r87","ctx_r85","NavHeaderComponent_ng_container_0_nav_1_ng_container_13_ng_container_2_a_4_Template","NavHeaderComponent_ng_container_0_nav_1_ng_container_13_ng_container_2_div_5_Template","user_r83","ctx_r79","NavHeaderComponent_ng_container_0_nav_1_ng_container_13_div_1_Template","NavHeaderComponent_ng_container_0_nav_1_ng_container_13_ng_container_2_Template","backToTopNeeded","_r96","ctx_r95","moveFocus","NavHeaderComponent_ng_container_0_nav_1_a_4_Template","NavHeaderComponent_ng_container_0_nav_1_div_11_Template","NavHeaderComponent_ng_container_0_nav_1_ng_container_13_Template","searchFocused","NavHeaderComponent_ng_container_0_nav_1_Template","NavHeaderComponent","scrollService","searchService","scrollElem","scrollContainer","checkBackToTopNeeded","offset","getElementById","goTo","searchViewRef","navigate","NavHeaderComponent_ng_container_0_Template","RouterLinkActive","AppComponent","ratingConfig","resettable","NavigationStart","hasOpenModals","dismissAll","transitionState$","noTransitions","setDocHeight","vh","setProperty","hostBindings","AppComponent_app_side_nav_7_Template","AppComponent_div_11_Template","AppComponent_ng_template_13_Template","RouterOutlet","routes","all","__webpack_require__","then","AdminModule","CollectionsModule","UserSettingsModule","ReadingListModule","RegistrationModule","AnnouncementsModule","BookmarkModule","AllSeriesModule","DashboardModule","WantToReadModule","runGuardsAndResolvers","pathMatch","LibraryDetailModule","SeriesDetailModule","MangaReaderModule","BookReaderModule","PdfReaderModule","redirectTo","AppRoutingModule","oAB","cJS","RouterModule","forRoot","scrollPositionRestoration","preloadingStrategy","PreloadAllModules","JwtInterceptor","intercept","request","clone","setHeaders","Authorization","handle","ErrorInterceptor","status","handleValidationError","handleAuthError","handleNotFound","handleServerException","genericError","previousToastMessage","modalStateErrors","details","issue","description","flat","statusText","Blob","num","HttpLoader","getTranslation","langPath","tokens","disableAnimations","preLoad","provide","APP_INITIALIZER","multi","useFactory","preloadUser","userService","transloco","setActiveLang","load","localStorageLocale","deps","translocoOptions","reRenderOnLangChange","availableLangs","transformLanguageCodes","transformedArray","code","transformedCode","prodMode","defaultLang","fallbackLang","missingHandler","useFallbackTranslation","allowEmpty","bootstrapApplication","providers","importProvidersFrom","BrowserModule","BrowserAnimationsModule","withConfig","ToastrModule","positionClass","preventDuplicates","timeOut","countDuplicates","autoDismiss","provideTransloco","provideTranslocoLocale","defaultLocale","provideTranslocoPersistTranslations","loader","storage","useValue","provideTranslocoPersistLang","HTTP_INTERCEPTORS","useClass","Title","provideHttpClient","withInterceptorsFromDi"],"sourceRoot":"webpack:///","sources":["./src/app/_guards/admin.guard.ts","./src/app/_guards/auth.guard.ts","./src/app/_guards/library-access.guard.ts","./src/app/_models/library.ts","./src/app/_models/manga-format.ts","./src/app/_models/metadata/person.ts","./src/app/_models/metadata/series-filter.ts","./src/app/_models/metadata/v2/filter-combination.ts","./src/app/_models/metadata/v2/filter-comparison.ts","./src/app/_models/metadata/v2/filter-field.ts","./src/app/_models/pagination.ts","./src/app/_models/preferences/site-theme.ts","./src/app/_models/search/search-result-group.ts","./src/app/_services/account.service.ts","./src/app/_services/action-factory.service.ts","./src/app/cards/_modals/bulk-add-to-collection/bulk-add-to-collection.component.html","./src/app/cards/_modals/bulk-add-to-collection/bulk-add-to-collection.component.ts","./src/app/_services/action.service.ts","./src/app/_services/collection-tag.service.ts","./src/app/_services/device.service.ts","./src/app/_services/image.service.ts","./src/app/_services/library.service.ts","./src/app/_services/member.service.ts","./src/app/_services/message-hub.service.ts","./src/app/_services/metadata.service.ts","./src/app/_services/nav.service.ts","./src/app/_services/reader.service.ts","./src/app/_services/reading-list.service.ts","./src/app/_services/scroll.service.ts","./src/app/_services/search.service.ts","./src/app/_services/series.service.ts","./src/app/_services/theme.service.ts","./src/app/_services/upload.service.ts","./src/app/_single-module/card-actionables/_pipes/dynamic-list.pipe.ts","./src/app/_single-module/card-actionables/card-actionables.component.html","./src/app/_single-module/card-actionables/card-actionables.component.ts","./src/app/_types/text-response.ts","./src/app/admin/_modals/directory-picker/directory-picker.component.html","./src/app/admin/_modals/directory-picker/directory-picker.component.ts","./src/app/admin/settings.service.ts","./src/app/cards/cover-image-chooser/cover-image-chooser.component.html","./src/app/cards/cover-image-chooser/cover-image-chooser.component.ts","./src/app/pipe/bytes.pipe.ts","./src/app/pipe/default-date.pipe.ts","./src/app/pipe/filter.pipe.ts","./src/app/pipe/manga-format-icon.pipe.ts","./src/app/pipe/manga-format.pipe.ts","./src/app/pipe/safe-html.pipe.ts","./src/app/pipe/sentence-case.pipe.ts","./src/app/reading-list/_modals/add-to-list-modal/add-to-list-modal.component.html","./src/app/reading-list/_modals/add-to-list-modal/add-to-list-modal.component.ts","./src/app/reading-list/_modals/edit-reading-list-modal/edit-reading-list-modal.component.html","./src/app/reading-list/_modals/edit-reading-list-modal/edit-reading-list-modal.component.ts","./src/app/_models/reading-list/cbl/cbl-import-result.enum.ts","./src/app/reading-list/_components/step-tracker/step-tracker.component.html","./src/app/reading-list/_components/step-tracker/step-tracker.component.ts","./src/app/_models/reading-list/cbl/cbl-import-reason.enum.ts","./src/app/reading-list/_pipes/cbl-conflict-reason.pipe.ts","./src/app/reading-list/_pipes/cbl-import-result.pipe.ts","./src/app/reading-list/_modals/import-cbl-modal/import-cbl-modal.component.html","./src/app/reading-list/_modals/import-cbl-modal/import-cbl-modal.component.ts","./src/app/shared/_providers/saver.provider.ts","./src/app/shared/_models/download.ts","./src/app/shared/_services/download.service.ts","./src/app/shared/_services/filter-utilities.service.ts","./src/app/shared/_services/utility.service.ts","./src/app/shared/circular-loader/circular-loader.component.html","./src/app/shared/circular-loader/circular-loader.component.ts","./src/app/shared/confirm-dialog/_models/confirm-config.ts","./src/app/shared/confirm-dialog/confirm-dialog.component.html","./src/app/shared/confirm-dialog/confirm-dialog.component.ts","./src/app/shared/confirm.service.ts","./src/app/shared/data-structures/stack.ts","./src/app/shared/image/image.component.ts","./src/app/shared/image/image.component.html","./src/app/shared/update-notification/update-notification-modal.component.html","./src/app/shared/update-notification/update-notification-modal.component.ts","./src/app/sidenav/_modals/library-settings-modal/library-settings-modal.component.html","./src/app/sidenav/_modals/library-settings-modal/library-settings-modal.component.ts","./src/environments/environment.prod.ts","./src/app/base-url.provider.ts","./src/app/sidenav/_components/side-nav-item/side-nav-item.component.html","./src/app/sidenav/_components/side-nav-item/side-nav-item.component.ts","./src/app/sidenav/_components/side-nav/side-nav.component.html","./src/app/sidenav/_components/side-nav/side-nav.component.ts","./src/app/pipe/person-role.pipe.ts","./src/app/nav/_components/events-widget/events-widget.component.html","./src/app/nav/_components/events-widget/events-widget.component.ts","./src/app/shared/series-format/series-format.component.html","./src/app/shared/series-format/series-format.component.ts","./src/app/nav/_components/grouped-typeahead/grouped-typeahead.component.html","./src/app/nav/_components/grouped-typeahead/grouped-typeahead.component.ts","./src/app/nav/_components/nav-header/nav-header.component.html","./src/app/nav/_components/nav-header/nav-header.component.ts","./src/app/app.component.html","./src/app/app.component.ts","./src/app/app-routing.module.ts","./src/app/_interceptors/jwt.interceptor.ts","./src/app/_interceptors/error.interceptor.ts","./src/httpLoader.ts","./src/main.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { CanActivate } from '@angular/router';\nimport { ToastrService } from 'ngx-toastr';\nimport { Observable } from 'rxjs';\nimport { map, take } from 'rxjs/operators';\nimport { AccountService } from '../_services/account.service';\nimport {TranslocoService} from \"@ngneat/transloco\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AdminGuard implements CanActivate {\n constructor(private accountService: AccountService, private toastr: ToastrService,\n private translocoService: TranslocoService) {}\n\n canActivate(): Observable {\n // this automatically subs due to being router guard\n return this.accountService.currentUser$.pipe(take(1),\n map((user) => {\n if (user && this.accountService.hasAdminRole(user)) {\n return true;\n }\n\n this.toastr.error(this.translocoService.translate('toasts.unauthorized-1'));\n return false;\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { CanActivate, Router } from '@angular/router';\nimport { ToastrService } from 'ngx-toastr';\nimport { Observable } from 'rxjs';\nimport { map, take } from 'rxjs/operators';\nimport { AccountService } from '../_services/account.service';\nimport {TranslocoService} from \"@ngneat/transloco\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AuthGuard implements CanActivate {\n public urlKey: string = 'kavita--auth-intersection-url';\n constructor(private accountService: AccountService,\n private router: Router,\n private toastr: ToastrService,\n private translocoService: TranslocoService) {}\n\n canActivate(): Observable {\n return this.accountService.currentUser$.pipe(take(1),\n map((user) => {\n if (user) {\n return true;\n }\n const errorMessage = this.translocoService.translate('toasts.unauthorized-1');\n const errorMessage2 = this.translocoService.translate('toasts.unauthorized-2');\n if (this.toastr.toasts.filter(toast => toast.message === errorMessage2 || toast.message === errorMessage).length === 0) {\n this.toastr.error(errorMessage);\n }\n localStorage.setItem(this.urlKey, window.location.pathname);\n this.router.navigateByUrl('/login');\n return false;\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\nimport { Observable, of } from 'rxjs';\nimport { MemberService } from '../_services/member.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LibraryAccessGuard implements CanActivate {\n\n constructor(private memberService: MemberService) {}\n\n canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable {\n const libraryId = parseInt(state.url.split('library/')[1], 10);\n if (isNaN(libraryId)) return of(false);\n return this.memberService.hasLibraryAccess(libraryId);\n }\n}\n","export enum LibraryType {\n Manga = 0,\n Comic = 1,\n Book = 2,\n}\n\nexport interface Library {\n id: number;\n name: string;\n lastScanned: string;\n type: LibraryType;\n folders: string[];\n coverImage?: string;\n folderWatching: boolean;\n includeInDashboard: boolean;\n includeInRecommended: boolean;\n includeInSearch: boolean;\n manageCollections: boolean;\n manageReadingLists: boolean;\n allowScrobbling: boolean;\n collapseSeriesRelationships: boolean;\n}\n","export enum MangaFormat {\n IMAGE = 0,\n ARCHIVE = 1,\n UNKNOWN = 2,\n EPUB = 3,\n PDF = 4\n}","export enum PersonRole {\n Other = 1,\n Artist = 2,\n Writer = 3,\n Penciller = 4,\n Inker = 5,\n Colorist = 6,\n Letterer = 7,\n CoverArtist = 8,\n Editor = 9,\n Publisher = 10,\n Character = 11,\n Translator = 12\n}\n\nexport interface Person {\n id: number;\n name: string;\n role: PersonRole;\n}","import { MangaFormat } from \"../manga-format\";\nimport { SeriesFilterV2 } from \"./v2/series-filter-v2\";\nimport {FilterField} from \"./v2/filter-field\";\n\nexport interface FilterItem {\n title: string;\n value: T;\n selected: boolean;\n}\n\nexport interface SortOptions {\n sortField: SortField;\n isAscending: boolean;\n}\n\nexport enum SortField {\n SortName = 1,\n Created = 2,\n LastModified = 3,\n LastChapterAdded = 4,\n TimeToRead = 5,\n ReleaseYear = 6,\n}\n\nexport const allSortFields = Object.keys(SortField)\n .filter(key => !isNaN(Number(key)) && parseInt(key, 10) >= 0)\n .map(key => parseInt(key, 10)) as SortField[];\n\nexport const mangaFormatFilters = [\n {\n title: 'Images',\n value: MangaFormat.IMAGE,\n selected: false\n },\n {\n title: 'EPUB',\n value: MangaFormat.EPUB,\n selected: false\n },\n {\n title: 'PDF',\n value: MangaFormat.PDF,\n selected: false\n },\n {\n title: 'ARCHIVE',\n value: MangaFormat.ARCHIVE,\n selected: false\n }\n];\n\nexport interface FilterEvent {\n filterV2: SeriesFilterV2;\n isFirst: boolean;\n}\n\n","export enum FilterCombination {\n Or = 0,\n And = 1\n}\n","export enum FilterComparison {\n Equal = 0,\n GreaterThan =1,\n GreaterThanEqual = 2,\n LessThan = 3,\n LessThanEqual = 4,\n /// \n ///\n /// \n /// Only works with IList\n Contains = 5,\n MustContains = 6,\n /// \n /// Performs a LIKE %value%\n /// \n Matches = 7,\n NotContains = 8,\n /// \n /// Not Equal to\n /// \n NotEqual = 9,\n /// \n /// String starts with\n /// \n BeginsWith = 10,\n /// \n /// String ends with\n /// \n EndsWith = 11,\n /// \n /// Is Date before X\n /// \n IsBefore = 12,\n /// \n /// Is Date after X\n /// \n IsAfter = 13,\n /// \n /// Is Date between now and X seconds ago\n /// \n IsInLast = 14,\n /// \n /// Is Date not between now and X seconds ago\n /// \n IsNotInLast = 15,\n}\n","export enum FilterField\n{\n None = -1,\n Summary = 0,\n SeriesName = 1,\n PublicationStatus = 2,\n Languages = 3,\n AgeRating = 4,\n UserRating = 5,\n Tags = 6,\n CollectionTags = 7,\n Translators = 8,\n Characters = 9,\n Publisher = 10,\n Editor = 11,\n CoverArtist = 12,\n Letterer = 13,\n Colorist = 14,\n Inker = 15,\n Penciller = 16,\n Writers = 17,\n Genres = 18,\n Libraries = 19,\n ReadProgress = 20,\n Formats = 21,\n ReleaseYear = 22,\n ReadTime = 23,\n Path = 24,\n FilePath = 25\n}\n\nexport const allFields = Object.keys(FilterField)\n .filter(key => !isNaN(Number(key)) && parseInt(key, 10) >= 0)\n .map(key => parseInt(key, 10))\n .sort((a, b) => a - b) as FilterField[];\n","export interface Pagination {\n currentPage: number;\n itemsPerPage: number;\n totalItems: number;\n totalPages: number;\n}\n\nexport class PaginatedResult {\n result!: T;\n pagination!: Pagination;\n}\n","/**\n * Where does the theme come from\n */\n export enum ThemeProvider {\n System = 1,\n User = 2\n }\n \n /**\n * Theme for the whole instance\n */\n export interface SiteTheme {\n id: number;\n name: string;\n normalizedName: string;\n filePath: string;\n isDefault: boolean;\n provider: ThemeProvider;\n /**\n * The actual class the root is defined against. It is generated at the backend.\n */\n selector: string;\n }","import { Chapter } from \"../chapter\";\nimport { Library } from \"../library\";\nimport { MangaFile } from \"../manga-file\";\nimport { SearchResult } from \"./search-result\";\nimport { Tag } from \"../tag\";\n\nexport class SearchResultGroup {\n libraries: Array = [];\n series: Array = [];\n collections: Array = [];\n readingLists: Array = [];\n persons: Array = [];\n genres: Array = [];\n tags: Array = [];\n files: Array = [];\n chapters: Array = [];\n\n reset() {\n this.libraries = [];\n this.series = [];\n this.collections = [];\n this.readingLists = [];\n this.persons = [];\n this.genres = [];\n this.tags = [];\n this.files = [];\n this.chapters = []; \n }\n}","import { HttpClient } from '@angular/common/http';\nimport {DestroyRef, inject, Injectable } from '@angular/core';\nimport {catchError, of, ReplaySubject, throwError} from 'rxjs';\nimport {filter, map, switchMap, tap} from 'rxjs/operators';\nimport { environment } from 'src/environments/environment';\nimport { Preferences } from '../_models/preferences/preferences';\nimport { User } from '../_models/user';\nimport { Router } from '@angular/router';\nimport { EVENTS, MessageHubService } from './message-hub.service';\nimport { ThemeService } from './theme.service';\nimport { InviteUserResponse } from '../_models/auth/invite-user-response';\nimport { UserUpdateEvent } from '../_models/events/user-update-event';\nimport { UpdateEmailResponse } from '../_models/auth/update-email-response';\nimport { AgeRating } from '../_models/metadata/age-rating';\nimport { AgeRestriction } from '../_models/metadata/age-restriction';\nimport { TextResonse } from '../_types/text-response';\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\n\nexport enum Role {\n Admin = 'Admin',\n ChangePassword = 'Change Password',\n Bookmark = 'Bookmark',\n Download = 'Download',\n ChangeRestriction = 'Change Restriction'\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AccountService {\n\n private readonly destroyRef = inject(DestroyRef);\n baseUrl = environment.apiUrl;\n userKey = 'kavita-user';\n public static lastLoginKey = 'kavita-lastlogin';\n public static localeKey = 'kavita-locale';\n private currentUser: User | undefined;\n\n // Stores values, when someone subscribes gives (1) of last values seen.\n private currentUserSource = new ReplaySubject(1);\n public currentUser$ = this.currentUserSource.asObservable();\n\n private hasValidLicenseSource = new ReplaySubject(1);\n /**\n * Does the user have an active license\n */\n public hasValidLicense$ = this.hasValidLicenseSource.asObservable();\n\n /**\n * SetTimeout handler for keeping track of refresh token call\n */\n private refreshTokenTimeout: ReturnType | undefined;\n\n constructor(private httpClient: HttpClient, private router: Router,\n private messageHub: MessageHubService, private themeService: ThemeService) {\n messageHub.messages$.pipe(filter(evt => evt.event === EVENTS.UserUpdate),\n map(evt => evt.payload as UserUpdateEvent),\n filter(userUpdateEvent => userUpdateEvent.userName === this.currentUser?.username),\n switchMap(() => this.refreshAccount()))\n .subscribe(() => {});\n }\n\n hasAdminRole(user: User) {\n return user && user.roles.includes(Role.Admin);\n }\n\n hasChangePasswordRole(user: User) {\n return user && user.roles.includes(Role.ChangePassword);\n }\n\n hasChangeAgeRestrictionRole(user: User) {\n return user && user.roles.includes(Role.ChangeRestriction);\n }\n\n hasDownloadRole(user: User) {\n return user && user.roles.includes(Role.Download);\n }\n\n hasBookmarkRole(user: User) {\n return user && user.roles.includes(Role.Bookmark);\n }\n\n getRoles() {\n return this.httpClient.get(this.baseUrl + 'account/roles');\n }\n\n deleteLicense() {\n return this.httpClient.delete(this.baseUrl + 'license', TextResonse);\n }\n\n hasValidLicense(forceCheck: boolean = false) {\n return this.httpClient.get(this.baseUrl + 'license/valid-license?forceCheck=' + forceCheck, TextResonse)\n .pipe(\n map(res => res === \"true\"),\n tap(res => {\n this.hasValidLicenseSource.next(res)\n }),\n catchError(error => {\n this.hasValidLicenseSource.next(false);\n return throwError(error); // Rethrow the error to propagate it further\n })\n );\n }\n\n hasAnyLicense() {\n return this.httpClient.get(this.baseUrl + 'license/has-license', TextResonse)\n .pipe(\n map(res => res === \"true\"),\n );\n }\n\n updateUserLicense(license: string, email: string) {\n return this.httpClient.post(this.baseUrl + 'license', {license, email}, TextResonse)\n .pipe(map(res => res === \"true\"));\n }\n\n login(model: {username: string, password: string}) {\n return this.httpClient.post(this.baseUrl + 'account/login', model).pipe(\n map((response: User) => {\n const user = response;\n if (user) {\n this.setCurrentUser(user);\n this.messageHub.createHubConnection(user, this.hasAdminRole(user));\n }\n }),\n takeUntilDestroyed(this.destroyRef)\n );\n }\n\n setCurrentUser(user?: User) {\n if (user) {\n user.roles = [];\n const roles = this.getDecodedToken(user.token).role;\n Array.isArray(roles) ? user.roles = roles : user.roles.push(roles);\n\n localStorage.setItem(this.userKey, JSON.stringify(user));\n localStorage.setItem(AccountService.lastLoginKey, user.username);\n if (user.preferences && user.preferences.theme) {\n this.themeService.setTheme(user.preferences.theme.name);\n } else {\n this.themeService.setTheme(this.themeService.defaultTheme);\n }\n } else {\n this.themeService.setTheme(this.themeService.defaultTheme);\n }\n\n this.currentUser = user;\n this.currentUserSource.next(user);\n\n this.stopRefreshTokenTimer();\n\n if (this.currentUser) {\n this.messageHub.createHubConnection(this.currentUser, this.hasAdminRole(this.currentUser));\n this.hasValidLicense().subscribe();\n this.startRefreshTokenTimer();\n }\n }\n\n logout() {\n localStorage.removeItem(this.userKey);\n this.currentUserSource.next(undefined);\n this.currentUser = undefined;\n this.stopRefreshTokenTimer();\n this.messageHub.stopHubConnection();\n // Upon logout, perform redirection\n this.router.navigateByUrl('/login');\n }\n\n\n /**\n * Registers the first admin on the account. Only used for that. All other registrations must occur through invite\n * @param model\n * @returns\n */\n register(model: {username: string, password: string, email: string}) {\n return this.httpClient.post(this.baseUrl + 'account/register', model).pipe(\n map((user: User) => {\n return user;\n }),\n takeUntilDestroyed(this.destroyRef)\n );\n }\n\n isEmailConfirmed() {\n return this.httpClient.get(this.baseUrl + 'account/email-confirmed');\n }\n\n migrateUser(model: {email: string, username: string, password: string, sendEmail: boolean}) {\n return this.httpClient.post(this.baseUrl + 'account/migrate-email', model, TextResonse);\n }\n\n confirmMigrationEmail(model: {email: string, token: string}) {\n return this.httpClient.post(this.baseUrl + 'account/confirm-migration-email', model);\n }\n\n resendConfirmationEmail(userId: number) {\n return this.httpClient.post(this.baseUrl + 'account/resend-confirmation-email?userId=' + userId, {}, TextResonse);\n }\n\n inviteUser(model: {email: string, roles: Array, libraries: Array, ageRestriction: AgeRestriction}) {\n return this.httpClient.post(this.baseUrl + 'account/invite', model);\n }\n\n confirmEmail(model: {email: string, username: string, password: string, token: string}) {\n return this.httpClient.post(this.baseUrl + 'account/confirm-email', model);\n }\n\n confirmEmailUpdate(model: {email: string, token: string}) {\n return this.httpClient.post(this.baseUrl + 'account/confirm-email-update', model);\n }\n\n /**\n * Given a user id, returns a full url for setting up the user account\n * @param userId\n * @param withBaseUrl Should base url be included in invite url\n * @returns\n */\n getInviteUrl(userId: number, withBaseUrl: boolean = true) {\n return this.httpClient.get(this.baseUrl + 'account/invite-url?userId=' + userId + '&withBaseUrl=' + withBaseUrl, TextResonse);\n }\n\n getDecodedToken(token: string) {\n return JSON.parse(atob(token.split('.')[1]));\n }\n\n requestResetPasswordEmail(email: string) {\n return this.httpClient.post(this.baseUrl + 'account/forgot-password?email=' + encodeURIComponent(email), {}, TextResonse);\n }\n\n confirmResetPasswordEmail(model: {email: string, token: string, password: string}) {\n return this.httpClient.post(this.baseUrl + 'account/confirm-password-reset', model, TextResonse);\n }\n\n resetPassword(username: string, password: string, oldPassword: string) {\n return this.httpClient.post(this.baseUrl + 'account/reset-password', {username, password, oldPassword}, TextResonse);\n }\n\n update(model: {email: string, roles: Array, libraries: Array, userId: number, ageRestriction: AgeRestriction}) {\n return this.httpClient.post(this.baseUrl + 'account/update', model);\n }\n\n updateEmail(email: string, password: string) {\n return this.httpClient.post(this.baseUrl + 'account/update/email', {email, password});\n }\n\n updateAgeRestriction(ageRating: AgeRating, includeUnknowns: boolean) {\n return this.httpClient.post(this.baseUrl + 'account/update/age-restriction', {ageRating, includeUnknowns});\n }\n\n /**\n * This will get latest preferences for a user and cache them into user store\n * @returns\n */\n getPreferences() {\n return this.httpClient.get(this.baseUrl + 'users/get-preferences').pipe(map(pref => {\n if (this.currentUser !== undefined && this.currentUser !== null) {\n this.currentUser.preferences = pref;\n this.setCurrentUser(this.currentUser);\n }\n return pref;\n }), takeUntilDestroyed(this.destroyRef));\n }\n\n updatePreferences(userPreferences: Preferences) {\n return this.httpClient.post(this.baseUrl + 'users/update-preferences', userPreferences).pipe(map(settings => {\n if (this.currentUser !== undefined && this.currentUser !== null) {\n this.currentUser.preferences = settings;\n this.setCurrentUser(this.currentUser);\n\n // Update the locale on disk (for logout and compact-number pipe)\n localStorage.setItem(AccountService.localeKey, this.currentUser.preferences.locale);\n }\n return settings;\n }), takeUntilDestroyed(this.destroyRef));\n }\n\n getUserFromLocalStorage(): User | undefined {\n\n const userString = localStorage.getItem(this.userKey);\n\n if (userString) {\n return JSON.parse(userString)\n }\n\n return undefined;\n }\n\n resetApiKey() {\n return this.httpClient.post(this.baseUrl + 'account/reset-api-key', {}, TextResonse).pipe(map(key => {\n const user = this.getUserFromLocalStorage();\n if (user) {\n user.apiKey = key;\n\n localStorage.setItem(this.userKey, JSON.stringify(user));\n\n this.currentUserSource.next(user);\n this.currentUser = user;\n }\n return key;\n }));\n }\n\n getOpdsUrl() {\n return this.httpClient.get(this.baseUrl + 'account/opds-url', TextResonse);\n }\n\n\n private refreshAccount() {\n if (this.currentUser === null || this.currentUser === undefined) return of();\n return this.httpClient.get(this.baseUrl + 'account/refresh-account').pipe(map((user: User) => {\n if (user) {\n this.currentUser = {...user};\n }\n\n this.setCurrentUser(this.currentUser);\n return user;\n }));\n }\n\n\n private refreshToken() {\n if (this.currentUser === null || this.currentUser === undefined) return of();\n return this.httpClient.post<{token: string, refreshToken: string}>(this.baseUrl + 'account/refresh-token',\n {token: this.currentUser.token, refreshToken: this.currentUser.refreshToken}).pipe(map(user => {\n if (this.currentUser) {\n this.currentUser.token = user.token;\n this.currentUser.refreshToken = user.refreshToken;\n }\n\n this.setCurrentUser(this.currentUser);\n return user;\n }));\n }\n\n /**\n * Every 10 mins refresh the token\n */\n private startRefreshTokenTimer() {\n if (this.currentUser === null || this.currentUser === undefined) {\n this.stopRefreshTokenTimer();\n return;\n }\n\n this.stopRefreshTokenTimer();\n\n this.refreshTokenTimeout = setInterval(() => this.refreshToken().subscribe(() => {}), (60 * 10_000));\n }\n\n private stopRefreshTokenTimer() {\n if (this.refreshTokenTimeout !== undefined) {\n clearInterval(this.refreshTokenTimeout);\n }\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { map, Observable, shareReplay } from 'rxjs';\nimport { Chapter } from '../_models/chapter';\nimport { CollectionTag } from '../_models/collection-tag';\nimport { Device } from '../_models/device/device';\nimport { Library } from '../_models/library';\nimport { ReadingList } from '../_models/reading-list';\nimport { Series } from '../_models/series';\nimport { Volume } from '../_models/volume';\nimport { AccountService } from './account.service';\nimport { DeviceService } from './device.service';\n\nexport enum Action {\n Submenu = -1,\n /**\n * Mark entity as read\n */\n MarkAsRead = 0,\n /**\n * Mark entity as unread\n */\n MarkAsUnread = 1,\n /**\n * Invoke a Scan on Series/Library\n */\n Scan = 2,\n /**\n * Delete the entity\n */\n Delete = 3,\n /**\n * Open edit modal\n */\n Edit = 4,\n /**\n * Open details modal\n */\n Info = 5,\n /**\n * Invoke a refresh covers\n */\n RefreshMetadata = 6,\n /**\n * Download the entity\n */\n Download = 7,\n /**\n * Invoke an Analyze Files which calculates word count\n */\n AnalyzeFiles = 8,\n /**\n * Read in incognito mode aka no progress tracking\n */\n IncognitoRead = 9,\n /**\n * Add to reading list\n */\n AddToReadingList = 10,\n /**\n * Add to collection\n */\n AddToCollection = 11,\n /**\n * Essentially a download, but handled differently. Needed so card bubbles it up for handling\n */\n DownloadBookmark = 12,\n /**\n * Open Series detail page for said series\n */\n ViewSeries = 13,\n /**\n * Open the reader for entity\n */\n Read = 14,\n /**\n * Add to user's Want to Read List\n */\n AddToWantToReadList = 15,\n /**\n * Remove from user's Want to Read List\n */\n RemoveFromWantToReadList = 16,\n /**\n * Send to a device\n */\n SendTo = 17,\n /**\n * Import some data into Kavita\n */\n Import = 18,\n /**\n * Removes the Series from On Deck inclusion\n */\n RemoveFromOnDeck = 19,\n AddRuleGroup = 20,\n RemoveRuleGroup = 21\n}\n\nexport interface ActionItem {\n title: string;\n action: Action;\n callback: (action: ActionItem, data: T) => void;\n requiresAdmin: boolean;\n children: Array>;\n /**\n * An optional class which applies to an item. ie) danger on a delete action\n */\n class?: string;\n /**\n * Indicates that there exists a separate list will be loaded from an API.\n * Rule: If using this, only one child should exist in children with the Action for dynamicList.\n */\n dynamicList?: Observable<{title: string, data: any}[]> | undefined;\n /**\n * Extra data that needs to be sent back from the card item. Used mainly for dynamicList. This will be the item from dyanamicList return\n */\n _extra?: {title: string, data: any};\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ActionFactoryService {\n libraryActions: Array> = [];\n\n seriesActions: Array> = [];\n\n volumeActions: Array> = [];\n\n chapterActions: Array> = [];\n\n collectionTagActions: Array> = [];\n\n readingListActions: Array> = [];\n\n bookmarkActions: Array> = [];\n\n isAdmin = false;\n hasDownloadRole = false;\n\n constructor(private accountService: AccountService, private deviceService: DeviceService) {\n this.accountService.currentUser$.subscribe((user) => {\n if (user) {\n this.isAdmin = this.accountService.hasAdminRole(user);\n this.hasDownloadRole = this.accountService.hasDownloadRole(user);\n } else {\n this._resetActions();\n return; // If user is logged out, we don't need to do anything\n }\n\n this._resetActions();\n });\n }\n\n getLibraryActions(callback: (action: ActionItem, library: Library) => void) {\n\t\treturn this.applyCallbackToList(this.libraryActions, callback);\n }\n\n getSeriesActions(callback: (action: ActionItem, series: Series) => void) {\n\t\treturn this.applyCallbackToList(this.seriesActions, callback);\n }\n\n getVolumeActions(callback: (action: ActionItem, volume: Volume) => void) {\n\t\treturn this.applyCallbackToList(this.volumeActions, callback);\n }\n\n getChapterActions(callback: (action: ActionItem, chapter: Chapter) => void) {\n return this.applyCallbackToList(this.chapterActions, callback);\n }\n\n getCollectionTagActions(callback: (action: ActionItem, collectionTag: CollectionTag) => void) {\n\t\treturn this.applyCallbackToList(this.collectionTagActions, callback);\n }\n\n getReadingListActions(callback: (action: ActionItem, readingList: ReadingList) => void) {\n return this.applyCallbackToList(this.readingListActions, callback);\n }\n\n getBookmarkActions(callback: (action: ActionItem, series: Series) => void) {\n return this.applyCallbackToList(this.bookmarkActions, callback);\n }\n\n getMetadataFilterActions(callback: (action: ActionItem, data: any) => void) {\n const actions = [\n {title: 'add-rule-group-and', action: Action.AddRuleGroup, requiresAdmin: false, children: [], callback: this.dummyCallback},\n {title: 'add-rule-group-or', action: Action.AddRuleGroup, requiresAdmin: false, children: [], callback: this.dummyCallback},\n {title: 'remove-rule-group', action: Action.RemoveRuleGroup, requiresAdmin: false, children: [], callback: this.dummyCallback},\n ];\n return this.applyCallbackToList(actions, callback);\n }\n\n dummyCallback(action: ActionItem, data: any) {}\n\n filterSendToAction(actions: Array>, chapter: Chapter) {\n // if (chapter.files.filter(f => f.format === MangaFormat.EPUB || f.format === MangaFormat.PDF).length !== chapter.files.length) {\n // // Remove Send To as it doesn't apply\n // return actions.filter(item => item.title !== 'Send To');\n // }\n return actions;\n }\n\n private _resetActions() {\n this.libraryActions = [\n {\n action: Action.Scan,\n title: 'scan-library',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n {\n action: Action.Submenu,\n title: 'others',\n callback: this.dummyCallback,\n requiresAdmin: true,\n children: [\n {\n action: Action.RefreshMetadata,\n title: 'refresh-covers',\n callback: this.dummyCallback,\n requiresAdmin: true,\n children: [],\n },\n {\n action: Action.AnalyzeFiles,\n title: 'analyze-files',\n callback: this.dummyCallback,\n requiresAdmin: true,\n children: [],\n },\n ],\n },\n {\n action: Action.Edit,\n title: 'settings',\n callback: this.dummyCallback,\n requiresAdmin: true,\n children: [],\n },\n ];\n\n this.collectionTagActions = [\n {\n action: Action.Edit,\n title: 'edit',\n callback: this.dummyCallback,\n requiresAdmin: true,\n children: [],\n },\n {\n action: Action.Delete,\n title: 'delete',\n callback: this.dummyCallback,\n requiresAdmin: false,\n class: 'danger',\n children: [],\n },\n ];\n\n this.seriesActions = [\n {\n action: Action.MarkAsRead,\n title: 'mark-as-read',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n {\n action: Action.MarkAsUnread,\n title: 'mark-as-unread',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n {\n action: Action.Scan,\n title: 'scan-series',\n callback: this.dummyCallback,\n requiresAdmin: true,\n children: [],\n },\n {\n action: Action.Submenu,\n title: 'add-to',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [\n \t{\n action: Action.AddToWantToReadList,\n title: 'add-to-want-to-read',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n {\n action: Action.RemoveFromWantToReadList,\n title: 'remove-from-want-to-read',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n {\n action: Action.AddToReadingList,\n title: 'add-to-reading-list',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n {\n action: Action.AddToCollection,\n title: 'add-to-collection',\n callback: this.dummyCallback,\n requiresAdmin: true,\n children: [],\n },\n ],\n },\n {\n action: Action.Submenu,\n title: 'send-to',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [\n {\n action: Action.SendTo,\n title: '',\n callback: this.dummyCallback,\n requiresAdmin: false,\n dynamicList: this.deviceService.devices$.pipe(map((devices: Array) => devices.map(d => {\n return {'title': d.name, 'data': d};\n }), shareReplay())),\n children: []\n }\n ],\n },\n {\n action: Action.Submenu,\n title: 'others',\n callback: this.dummyCallback,\n requiresAdmin: true,\n children: [\n {\n action: Action.RefreshMetadata,\n title: 'refresh-covers',\n callback: this.dummyCallback,\n requiresAdmin: true,\n children: [],\n },\n {\n action: Action.AnalyzeFiles,\n title: 'analyze-files',\n callback: this.dummyCallback,\n requiresAdmin: true,\n children: [],\n },\n {\n action: Action.Delete,\n title: 'delete',\n callback: this.dummyCallback,\n requiresAdmin: true,\n class: 'danger',\n children: [],\n },\n ],\n },\n {\n action: Action.Download,\n title: 'download',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n {\n action: Action.Edit,\n title: 'edit',\n callback: this.dummyCallback,\n requiresAdmin: true,\n children: [],\n },\n ];\n\n this.volumeActions = [\n {\n action: Action.IncognitoRead,\n title: 'read-incognito',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n {\n action: Action.MarkAsRead,\n title: 'mark-as-read',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n {\n action: Action.MarkAsUnread,\n title: 'mark-as-unread',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n\t\t\t{\n\t\t\t\taction: Action.Submenu,\n\t\t\t\ttitle: 'add-to',\n\t\t\t\tcallback: this.dummyCallback,\n\t\t\t\trequiresAdmin: false,\n\t\t\t\tchildren: [\n\t\t\t\t\t{\n\t\t\t\t\t\taction: Action.AddToReadingList,\n\t\t\t\t\t\ttitle: 'add-to-reading-list',\n\t\t\t\t\t\tcallback: this.dummyCallback,\n\t\t\t\t\t\trequiresAdmin: false,\n\t\t\t\t\t\tchildren: [],\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n {\n action: Action.Submenu,\n title: 'send-to',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [\n {\n action: Action.SendTo,\n title: '',\n callback: this.dummyCallback,\n requiresAdmin: false,\n dynamicList: this.deviceService.devices$.pipe(map((devices: Array) => devices.map(d => {\n return {'title': d.name, 'data': d};\n }), shareReplay())),\n children: []\n }\n ],\n },\n {\n action: Action.Download,\n title: 'download',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n {\n action: Action.Edit,\n title: 'details',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n ];\n\n this.chapterActions = [\n {\n action: Action.IncognitoRead,\n title: 'read-incognito',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n {\n action: Action.MarkAsRead,\n title: 'mark-as-read',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n {\n action: Action.MarkAsUnread,\n title: 'mark-as-unread',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n\t\t\t{\n\t\t\t\taction: Action.Submenu,\n\t\t\t\ttitle: 'add-to',\n\t\t\t\tcallback: this.dummyCallback,\n\t\t\t\trequiresAdmin: false,\n\t\t\t\tchildren: [\n\t\t\t\t\t{\n\t\t\t\t\t\taction: Action.AddToReadingList,\n\t\t\t\t\t\ttitle: 'add-to-reading-list',\n\t\t\t\t\t\tcallback: this.dummyCallback,\n\t\t\t\t\t\trequiresAdmin: false,\n\t\t\t\t\t\tchildren: [],\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n {\n action: Action.Submenu,\n title: 'send-to',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [\n {\n action: Action.SendTo,\n title: '',\n callback: this.dummyCallback,\n requiresAdmin: false,\n dynamicList: this.deviceService.devices$.pipe(map((devices: Array) => devices.map(d => {\n return {'title': d.name, 'data': d};\n }), shareReplay())),\n children: []\n }\n ],\n },\n // RBS will handle rendering this, so non-admins with download are appicable\n {\n action: Action.Download,\n title: 'download',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n {\n action: Action.Edit,\n title: 'details',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n ];\n\n this.readingListActions = [\n {\n action: Action.Edit,\n title: 'edit',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n {\n action: Action.Delete,\n title: 'delete',\n callback: this.dummyCallback,\n requiresAdmin: false,\n class: 'danger',\n children: [],\n },\n ];\n\n this.bookmarkActions = [\n {\n action: Action.ViewSeries,\n title: 'view-series',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n {\n action: Action.DownloadBookmark,\n title: 'download',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n {\n action: Action.Delete,\n title: 'clear',\n callback: this.dummyCallback,\n class: 'danger',\n requiresAdmin: false,\n children: [],\n },\n ];\n }\n\n private applyCallback(action: ActionItem, callback: (action: ActionItem, data: any) => void) {\n action.callback = callback;\n\n if (action.children === null || action.children?.length === 0) return;\n\n action.children?.forEach((childAction) => {\n this.applyCallback(childAction, callback);\n });\n }\n\n\tpublic applyCallbackToList(list: Array>, callback: (action: ActionItem, data: any) => void): Array> {\n\t\tconst actions = list.map((a) => {\n\t\t\treturn { ...a };\n\t\t});\n\t\tactions.forEach((action) => this.applyCallback(action, callback));\n\t\treturn actions;\n\t}\n\n // Checks the whole tree for the action and returns true if it exists\n public hasAction(actions: Array>, action: Action) {\n if (actions.length === 0) return false;\n\n for (let i = 0; i < actions.length; i++)\n {\n if (actions[i].action === action) return true;\n if (this.hasAction(actions[i].children, action)) return true;\n }\n\n return false;\n }\n\n}\n","\n\n
\n

{{t('title')}}

\n \n
\n
\n
\n
= 5\">\n \n
\n \n \n
\n
\n
    \n
  • \n {{collectionTag.title}} \n
  • \n
  • {{t('no-data')}}
  • \n
  • \n
    \n {{t('loading')}}\n
    \n
  • \n
\n
\n
\n
\n
\n
\n \n \n
\n
\n \n
\n
\n
\n
\n
\n\n\n\n
\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n inject,\n Input,\n OnInit,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport {FormGroup, FormControl, ReactiveFormsModule} from '@angular/forms';\nimport {NgbActiveModal, NgbModalModule} from '@ng-bootstrap/ng-bootstrap';\nimport { ToastrService } from 'ngx-toastr';\nimport { CollectionTag } from 'src/app/_models/collection-tag';\nimport { ReadingList } from 'src/app/_models/reading-list';\nimport { CollectionTagService } from 'src/app/_services/collection-tag.service';\nimport {CommonModule} from \"@angular/common\";\nimport {FilterPipe} from \"../../../pipe/filter.pipe\";\nimport {TranslocoDirective, TranslocoService} from \"@ngneat/transloco\";\n\n@Component({\n selector: 'app-bulk-add-to-collection',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, FilterPipe, NgbModalModule, TranslocoDirective],\n templateUrl: './bulk-add-to-collection.component.html',\n styleUrls: ['./bulk-add-to-collection.component.scss'],\n encapsulation: ViewEncapsulation.None, // This is needed as per the bootstrap modal documentation to get styles to work.\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class BulkAddToCollectionComponent implements OnInit, AfterViewInit {\n\n @Input({required: true}) title!: string;\n /**\n * Series Ids to add to Collection Tag\n */\n @Input() seriesIds: Array = [];\n\n /**\n * All existing collections sorted by recent use date\n */\n lists: Array = [];\n loading: boolean = false;\n listForm: FormGroup = new FormGroup({});\n\n collectionTitleTrackby = (index: number, item: CollectionTag) => `${item.title}`;\n\n translocoService = inject(TranslocoService);\n\n @ViewChild('title') inputElem!: ElementRef;\n\n\n constructor(private modal: NgbActiveModal, private collectionService: CollectionTagService,\n private toastr: ToastrService, private readonly cdRef: ChangeDetectorRef) { }\n\n ngOnInit(): void {\n\n this.listForm.addControl('title', new FormControl(this.title, []));\n this.listForm.addControl('filterQuery', new FormControl('', []));\n\n this.loading = true;\n this.cdRef.markForCheck();\n this.collectionService.allTags().subscribe(tags => {\n this.lists = tags;\n this.loading = false;\n this.cdRef.markForCheck();\n });\n }\n\n ngAfterViewInit() {\n // Shift focus to input\n if (this.inputElem) {\n this.inputElem.nativeElement.select();\n this.cdRef.markForCheck();\n }\n }\n\n close() {\n this.modal.close();\n }\n\n create() {\n const tagName = this.listForm.value.title;\n this.collectionService.addByMultiple(0, this.seriesIds, tagName).subscribe(() => {\n this.toastr.success(this.translocoService.translate('toasts.series-added-to-collection', {collectionName: tagName}));\n this.modal.close();\n });\n }\n\n addToCollection(tag: CollectionTag) {\n if (this.seriesIds.length === 0) return;\n\n this.collectionService.addByMultiple(tag.id, this.seriesIds, '').subscribe(() => {\n this.toastr.success(this.translocoService.translate('toasts.series-added-to-collection', {collectionName: tag.title}));\n this.modal.close();\n });\n\n }\n\n filterList = (listItem: ReadingList) => {\n return listItem.title.toLowerCase().indexOf((this.listForm.value.filterQuery || '').toLowerCase()) >= 0;\n }\n\n}\n","import { Injectable, OnDestroy } from '@angular/core';\nimport { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap';\nimport { ToastrService } from 'ngx-toastr';\nimport { Subject } from 'rxjs';\nimport { take } from 'rxjs/operators';\nimport { BulkAddToCollectionComponent } from '../cards/_modals/bulk-add-to-collection/bulk-add-to-collection.component';\nimport { AddToListModalComponent, ADD_FLOW } from '../reading-list/_modals/add-to-list-modal/add-to-list-modal.component';\nimport { EditReadingListModalComponent } from '../reading-list/_modals/edit-reading-list-modal/edit-reading-list-modal.component';\nimport { ConfirmService } from '../shared/confirm.service';\nimport { LibrarySettingsModalComponent } from '../sidenav/_modals/library-settings-modal/library-settings-modal.component';\nimport { Chapter } from '../_models/chapter';\nimport { Device } from '../_models/device/device';\nimport { Library } from '../_models/library';\nimport { ReadingList } from '../_models/reading-list';\nimport { Series } from '../_models/series';\nimport { Volume } from '../_models/volume';\nimport { DeviceService } from './device.service';\nimport { LibraryService } from './library.service';\nimport { MemberService } from './member.service';\nimport { ReaderService } from './reader.service';\nimport { SeriesService } from './series.service';\nimport {translate, TranslocoService} from \"@ngneat/transloco\";\n\nexport type LibraryActionCallback = (library: Partial) => void;\nexport type SeriesActionCallback = (series: Series) => void;\nexport type VolumeActionCallback = (volume: Volume) => void;\nexport type ChapterActionCallback = (chapter: Chapter) => void;\nexport type ReadingListActionCallback = (readingList: ReadingList) => void;\nexport type VoidActionCallback = () => void;\nexport type BooleanActionCallback = (result: boolean) => void;\n\n/**\n * Responsible for executing actions\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ActionService implements OnDestroy {\n\n private readonly onDestroy = new Subject();\n private readingListModalRef: NgbModalRef | null = null;\n private collectionModalRef: NgbModalRef | null = null;\n\n constructor(private libraryService: LibraryService, private seriesService: SeriesService,\n private readerService: ReaderService, private toastr: ToastrService, private modalService: NgbModal,\n private confirmService: ConfirmService, private memberService: MemberService, private deviceService: DeviceService,\n private translocoService: TranslocoService) { }\n\n ngOnDestroy() {\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n\n /**\n * Request a file scan for a given Library\n * @param library Partial Library, must have id and name populated\n * @param callback Optional callback to perform actions after API completes\n * @returns\n */\n async scanLibrary(library: Partial, callback?: LibraryActionCallback) {\n if (!library.hasOwnProperty('id') || library.id === undefined) {\n return;\n }\n\n // Prompt user if we should do a force or not\n const force = false; // await this.promptIfForce();\n\n this.libraryService.scan(library.id, force).pipe(take(1)).subscribe((res: any) => {\n this.toastr.info(this.translocoService.translate('toasts.scan-queued', {name: library.name}));\n if (callback) {\n callback(library);\n }\n });\n }\n\n\n /**\n * Request a refresh of Metadata for a given Library\n * @param library Partial Library, must have id and name populated\n * @param callback Optional callback to perform actions after API completes\n * @returns\n */\n async refreshMetadata(library: Partial, callback?: LibraryActionCallback) {\n if (!library.hasOwnProperty('id') || library.id === undefined) {\n return;\n }\n\n if (!await this.confirmService.confirm(translate('toasts.confirm-regen-covers'))) {\n if (callback) {\n callback(library);\n }\n return;\n }\n\n const forceUpdate = true; //await this.promptIfForce();\n\n this.libraryService.refreshMetadata(library?.id, forceUpdate).pipe(take(1)).subscribe((res: any) => {\n this.toastr.info(this.translocoService.translate('toasts.scan-queued', {name: library.name}));\n if (callback) {\n callback(library);\n }\n });\n }\n\n editLibrary(library: Partial, callback?: LibraryActionCallback) {\n const modalRef = this.modalService.open(LibrarySettingsModalComponent, { size: 'xl' });\n modalRef.componentInstance.library = library;\n modalRef.closed.subscribe((closeResult: {success: boolean, library: Library, coverImageUpdate: boolean}) => {\n if (callback) callback(library)\n });\n }\n\n /**\n * Request an analysis of files for a given Library (currently just word count)\n * @param library Partial Library, must have id and name populated\n * @param callback Optional callback to perform actions after API completes\n * @returns\n */\n async analyzeFiles(library: Partial, callback?: LibraryActionCallback) {\n if (!library.hasOwnProperty('id') || library.id === undefined) {\n return;\n }\n\n if (!await this.confirmService.alert(translate('toasts.alert-long-running'))) {\n if (callback) {\n callback(library);\n }\n return;\n }\n\n this.libraryService.analyze(library?.id).pipe(take(1)).subscribe((res: any) => {\n this.toastr.info(this.translocoService.translate('toasts.library-file-analysis-queued', {name: library.name}));\n if (callback) {\n callback(library);\n }\n });\n }\n\n /**\n * Mark a series as read; updates the series pagesRead\n * @param series Series, must have id and name populated\n * @param callback Optional callback to perform actions after API completes\n */\n markSeriesAsRead(series: Series, callback?: SeriesActionCallback) {\n this.seriesService.markRead(series.id).pipe(take(1)).subscribe(res => {\n series.pagesRead = series.pages;\n this.toastr.success(this.translocoService.translate('toasts.entity-read', {name: series.name}));\n if (callback) {\n callback(series);\n }\n });\n }\n\n /**\n * Mark a series as unread; updates the series pagesRead\n * @param series Series, must have id and name populated\n * @param callback Optional callback to perform actions after API completes\n */\n markSeriesAsUnread(series: Series, callback?: SeriesActionCallback) {\n this.seriesService.markUnread(series.id).pipe(take(1)).subscribe(res => {\n series.pagesRead = 0;\n this.toastr.success(this.translocoService.translate('toasts.entity-unread', {name: series.name}));\n if (callback) {\n callback(series);\n }\n });\n }\n\n /**\n * Start a file scan for a Series\n * @param series Series, must have libraryId and name populated\n * @param callback Optional callback to perform actions after API completes\n */\n async scanSeries(series: Series, callback?: SeriesActionCallback) {\n this.seriesService.scan(series.libraryId, series.id).pipe(take(1)).subscribe((res: any) => {\n this.toastr.info(this.translocoService.translate('toasts.scan-queued', {name: series.name}));\n if (callback) {\n callback(series);\n }\n });\n }\n\n /**\n * Start a file scan for analyze files for a Series\n * @param series Series, must have libraryId and name populated\n * @param callback Optional callback to perform actions after API completes\n */\n analyzeFilesForSeries(series: Series, callback?: SeriesActionCallback) {\n this.seriesService.analyzeFiles(series.libraryId, series.id).pipe(take(1)).subscribe((res: any) => {\n this.toastr.info(this.translocoService.translate('toasts.scan-queued', {name: series.name}));\n if (callback) {\n callback(series);\n }\n });\n }\n\n /**\n * Start a metadata refresh for a Series\n * @param series Series, must have libraryId, id and name populated\n * @param callback Optional callback to perform actions after API completes\n */\n async refreshMetdata(series: Series, callback?: SeriesActionCallback) {\n if (!await this.confirmService.confirm(translate('toasts.confirm-regen-covers'))) {\n if (callback) {\n callback(series);\n }\n return;\n }\n\n this.seriesService.refreshMetadata(series).pipe(take(1)).subscribe((res: any) => {\n this.toastr.info(this.translocoService.translate('toasts.refresh-covers-queued', {name: series.name}));\n if (callback) {\n callback(series);\n }\n });\n }\n\n /**\n * Mark all chapters and the volume as Read\n * @param seriesId Series Id\n * @param volume Volume, should have id, chapters and pagesRead populated\n * @param callback Optional callback to perform actions after API completes\n */\n markVolumeAsRead(seriesId: number, volume: Volume, callback?: VolumeActionCallback) {\n this.readerService.markVolumeRead(seriesId, volume.id).pipe(take(1)).subscribe(() => {\n volume.pagesRead = volume.pages;\n volume.chapters?.forEach(c => c.pagesRead = c.pages);\n this.toastr.success(this.translocoService.translate('toasts.mark-read'));\n\n if (callback) {\n callback(volume);\n }\n });\n }\n\n /**\n * Mark all chapters and the volume as unread\n * @param seriesId Series Id\n * @param volume Volume, should have id, chapters and pagesRead populated\n * @param callback Optional callback to perform actions after API completes\n */\n markVolumeAsUnread(seriesId: number, volume: Volume, callback?: VolumeActionCallback) {\n this.readerService.markVolumeUnread(seriesId, volume.id).subscribe(() => {\n volume.pagesRead = 0;\n volume.chapters?.forEach(c => c.pagesRead = 0);\n this.toastr.success(this.translocoService.translate('toasts.mark-unread'));\n if (callback) {\n callback(volume);\n }\n });\n }\n\n /**\n * Mark a chapter as read\n * @param seriesId Series Id\n * @param chapter Chapter, should have id, pages, volumeId populated\n * @param callback Optional callback to perform actions after API completes\n */\n markChapterAsRead(libraryId: number, seriesId: number, chapter: Chapter, callback?: ChapterActionCallback) {\n this.readerService.saveProgress(libraryId, seriesId, chapter.volumeId, chapter.id, chapter.pages).pipe(take(1)).subscribe(results => {\n chapter.pagesRead = chapter.pages;\n this.toastr.success(this.translocoService.translate('toasts.mark-read'));\n if (callback) {\n callback(chapter);\n }\n });\n }\n\n /**\n * Mark a chapter as unread\n * @param seriesId Series Id\n * @param chapter Chapter, should have id, pages, volumeId populated\n * @param callback Optional callback to perform actions after API completes\n */\n markChapterAsUnread(libraryId: number, seriesId: number, chapter: Chapter, callback?: ChapterActionCallback) {\n this.readerService.saveProgress(libraryId, seriesId, chapter.volumeId, chapter.id, 0).pipe(take(1)).subscribe(results => {\n chapter.pagesRead = 0;\n this.toastr.success(this.translocoService.translate('toasts.mark-unread'));\n if (callback) {\n callback(chapter);\n }\n });\n }\n\n /**\n * Mark all chapters and the volumes as Read. All volumes and chapters must belong to a series\n * @param seriesId Series Id\n * @param volumes Volumes, should have id, chapters and pagesRead populated\n * @param chapters? Chapters, should have id\n * @param callback Optional callback to perform actions after API completes\n */\n markMultipleAsRead(seriesId: number, volumes: Array, chapters?: Array, callback?: VoidActionCallback) {\n this.readerService.markMultipleRead(seriesId, volumes.map(v => v.id), chapters?.map(c => c.id)).pipe(take(1)).subscribe(() => {\n volumes.forEach(volume => {\n volume.pagesRead = volume.pages;\n volume.chapters?.forEach(c => c.pagesRead = c.pages);\n });\n chapters?.forEach(c => c.pagesRead = c.pages);\n this.toastr.success(this.translocoService.translate('toasts.mark-read'));\n\n if (callback) {\n callback();\n }\n });\n }\n\n /**\n * Mark all chapters and the volumes as Unread. All volumes must belong to a series\n * @param seriesId Series Id\n * @param volumes Volumes, should have id, chapters and pagesRead populated\n * @param callback Optional callback to perform actions after API completes\n */\n markMultipleAsUnread(seriesId: number, volumes: Array, chapters?: Array, callback?: VoidActionCallback) {\n this.readerService.markMultipleUnread(seriesId, volumes.map(v => v.id), chapters?.map(c => c.id)).pipe(take(1)).subscribe(() => {\n volumes.forEach(volume => {\n volume.pagesRead = 0;\n volume.chapters?.forEach(c => c.pagesRead = 0);\n });\n chapters?.forEach(c => c.pagesRead = 0);\n this.toastr.success(this.translocoService.translate('toasts.mark-unread'));\n\n if (callback) {\n callback();\n }\n });\n }\n\n /**\n * Mark all series as Read.\n * @param series Series, should have id, pagesRead populated\n * @param callback Optional callback to perform actions after API completes\n */\n markMultipleSeriesAsRead(series: Array, callback?: VoidActionCallback) {\n this.readerService.markMultipleSeriesRead(series.map(v => v.id)).pipe(take(1)).subscribe(() => {\n series.forEach(s => {\n s.pagesRead = s.pages;\n });\n this.toastr.success(this.translocoService.translate('toasts.mark-read'));\n\n if (callback) {\n callback();\n }\n });\n }\n\n /**\n * Mark all series as Unread.\n * @param series Series, should have id, pagesRead populated\n * @param callback Optional callback to perform actions after API completes\n */\n markMultipleSeriesAsUnread(series: Array, callback?: VoidActionCallback) {\n this.readerService.markMultipleSeriesUnread(series.map(v => v.id)).pipe(take(1)).subscribe(() => {\n series.forEach(s => {\n s.pagesRead = s.pages;\n });\n this.toastr.success(this.translocoService.translate('toasts.mark-unread'));\n\n if (callback) {\n callback();\n }\n });\n }\n\n addMultipleToReadingList(seriesId: number, volumes: Array, chapters?: Array, callback?: BooleanActionCallback) {\n if (this.readingListModalRef != null) { return; }\n this.readingListModalRef = this.modalService.open(AddToListModalComponent, { scrollable: true, size: 'md' });\n this.readingListModalRef.componentInstance.seriesId = seriesId;\n this.readingListModalRef.componentInstance.volumeIds = volumes.map(v => v.id);\n this.readingListModalRef.componentInstance.chapterIds = chapters?.map(c => c.id);\n this.readingListModalRef.componentInstance.title = 'Multiple Selections';\n this.readingListModalRef.componentInstance.type = ADD_FLOW.Multiple;\n\n\n this.readingListModalRef.closed.pipe(take(1)).subscribe(() => {\n this.readingListModalRef = null;\n if (callback) {\n callback(true);\n }\n });\n this.readingListModalRef.dismissed.pipe(take(1)).subscribe(() => {\n this.readingListModalRef = null;\n if (callback) {\n callback(false);\n }\n });\n }\n\n addMultipleSeriesToWantToReadList(seriesIds: Array, callback?: VoidActionCallback) {\n this.memberService.addSeriesToWantToRead(seriesIds).subscribe(() => {\n this.toastr.success('Series added to Want to Read list');\n if (callback) {\n callback();\n }\n });\n }\n\n removeMultipleSeriesFromWantToReadList(seriesIds: Array, callback?: VoidActionCallback) {\n this.memberService.removeSeriesToWantToRead(seriesIds).subscribe(() => {\n this.toastr.success(this.translocoService.translate('toasts.series-removed-want-to-read'));\n if (callback) {\n callback();\n }\n });\n }\n\n addMultipleSeriesToReadingList(series: Array, callback?: BooleanActionCallback) {\n if (this.readingListModalRef != null) { return; }\n this.readingListModalRef = this.modalService.open(AddToListModalComponent, { scrollable: true, size: 'md' });\n this.readingListModalRef.componentInstance.seriesIds = series.map(v => v.id);\n this.readingListModalRef.componentInstance.title = 'Multiple Selections';\n this.readingListModalRef.componentInstance.type = ADD_FLOW.Multiple_Series;\n\n\n this.readingListModalRef.closed.pipe(take(1)).subscribe(() => {\n this.readingListModalRef = null;\n if (callback) {\n callback(true);\n }\n });\n this.readingListModalRef.dismissed.pipe(take(1)).subscribe(() => {\n this.readingListModalRef = null;\n if (callback) {\n callback(false);\n }\n });\n }\n\n /**\n * Adds a set of series to a collection tag\n * @param series\n * @param callback\n * @returns\n */\n addMultipleSeriesToCollectionTag(series: Array, callback?: BooleanActionCallback) {\n if (this.collectionModalRef != null) { return; }\n this.collectionModalRef = this.modalService.open(BulkAddToCollectionComponent, { scrollable: true, size: 'md', windowClass: 'collection' });\n this.collectionModalRef.componentInstance.seriesIds = series.map(v => v.id);\n this.collectionModalRef.componentInstance.title = 'New Collection';\n\n this.collectionModalRef.closed.pipe(take(1)).subscribe(() => {\n this.collectionModalRef = null;\n if (callback) {\n callback(true);\n }\n });\n this.collectionModalRef.dismissed.pipe(take(1)).subscribe(() => {\n this.collectionModalRef = null;\n if (callback) {\n callback(false);\n }\n });\n }\n\n addSeriesToReadingList(series: Series, callback?: SeriesActionCallback) {\n if (this.readingListModalRef != null) { return; }\n this.readingListModalRef = this.modalService.open(AddToListModalComponent, { scrollable: true, size: 'md' });\n this.readingListModalRef.componentInstance.seriesId = series.id;\n this.readingListModalRef.componentInstance.title = series.name;\n this.readingListModalRef.componentInstance.type = ADD_FLOW.Series;\n\n\n this.readingListModalRef.closed.pipe(take(1)).subscribe(() => {\n this.readingListModalRef = null;\n if (callback) {\n callback(series);\n }\n });\n this.readingListModalRef.dismissed.pipe(take(1)).subscribe(() => {\n this.readingListModalRef = null;\n if (callback) {\n callback(series);\n }\n });\n }\n\n addVolumeToReadingList(volume: Volume, seriesId: number, callback?: VolumeActionCallback) {\n if (this.readingListModalRef != null) { return; }\n this.readingListModalRef = this.modalService.open(AddToListModalComponent, { scrollable: true, size: 'md' });\n this.readingListModalRef.componentInstance.seriesId = seriesId;\n this.readingListModalRef.componentInstance.volumeId = volume.id;\n this.readingListModalRef.componentInstance.type = ADD_FLOW.Volume;\n\n\n this.readingListModalRef.closed.pipe(take(1)).subscribe(() => {\n this.readingListModalRef = null;\n if (callback) {\n callback(volume);\n }\n });\n this.readingListModalRef.dismissed.pipe(take(1)).subscribe(() => {\n this.readingListModalRef = null;\n if (callback) {\n callback(volume);\n }\n });\n }\n\n addChapterToReadingList(chapter: Chapter, seriesId: number, callback?: ChapterActionCallback) {\n if (this.readingListModalRef != null) { return; }\n this.readingListModalRef = this.modalService.open(AddToListModalComponent, { scrollable: true, size: 'md' });\n this.readingListModalRef.componentInstance.seriesId = seriesId;\n this.readingListModalRef.componentInstance.chapterId = chapter.id;\n this.readingListModalRef.componentInstance.type = ADD_FLOW.Chapter;\n\n\n this.readingListModalRef.closed.pipe(take(1)).subscribe(() => {\n this.readingListModalRef = null;\n if (callback) {\n callback(chapter);\n }\n });\n this.readingListModalRef.dismissed.pipe(take(1)).subscribe(() => {\n this.readingListModalRef = null;\n if (callback) {\n callback(chapter);\n }\n });\n }\n\n editReadingList(readingList: ReadingList, callback?: ReadingListActionCallback) {\n const readingListModalRef = this.modalService.open(EditReadingListModalComponent, { scrollable: true, size: 'lg' });\n readingListModalRef.componentInstance.readingList = readingList;\n readingListModalRef.closed.pipe(take(1)).subscribe((list) => {\n if (callback && list !== undefined) {\n callback(readingList);\n }\n });\n readingListModalRef.dismissed.pipe(take(1)).subscribe((list) => {\n if (callback && list !== undefined) {\n callback(readingList);\n }\n });\n }\n\n /**\n * Mark all chapters and the volumes as Read. All volumes and chapters must belong to a series\n * @param seriesId Series Id\n * @param volumes Volumes, should have id, chapters and pagesRead populated\n * @param chapters? Chapters, should have id\n * @param callback Optional callback to perform actions after API completes\n */\n async deleteMultipleSeries(seriesIds: Array, callback?: BooleanActionCallback) {\n if (!await this.confirmService.confirm(translate('toasts.confirm-delete-multiple-series', {count: seriesIds.length}))) {\n if (callback) {\n callback(false);\n }\n return;\n }\n this.seriesService.deleteMultipleSeries(seriesIds.map(s => s.id)).pipe(take(1)).subscribe(() => {\n this.toastr.success(this.translocoService.translate('toasts.series-deleted'));\n\n if (callback) {\n callback(true);\n }\n });\n }\n\n async deleteSeries(series: Series, callback?: BooleanActionCallback) {\n if (!await this.confirmService.confirm(translate('toasts.confirm-delete-series'))) {\n if (callback) {\n callback(false);\n }\n return;\n }\n\n this.seriesService.delete(series.id).subscribe((res: boolean) => {\n if (callback) {\n this.toastr.success(this.translocoService.translate('toasts.series-deleted'));\n callback(res);\n }\n });\n }\n\n sendToDevice(chapterIds: Array, device: Device, callback?: VoidActionCallback) {\n this.deviceService.sendTo(chapterIds, device.id).subscribe(() => {\n this.toastr.success(this.translocoService.translate('toasts.file-send-to', {name: device.name}));\n if (callback) {\n callback();\n }\n });\n }\n\n sendSeriesToDevice(seriesId: number, device: Device, callback?: VoidActionCallback) {\n this.deviceService.sendSeriesTo(seriesId, device.id).subscribe(() => {\n this.toastr.success(this.translocoService.translate('toasts.file-send-to', {name: device.name}));\n if (callback) {\n callback();\n }\n });\n }\n\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { map } from 'rxjs/operators';\nimport { environment } from 'src/environments/environment';\nimport { CollectionTag } from '../_models/collection-tag';\nimport { TextResonse } from '../_types/text-response';\nimport { ImageService } from './image.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CollectionTagService {\n\n baseUrl = environment.apiUrl;\n\n constructor(private httpClient: HttpClient, private imageService: ImageService) { }\n\n allTags() {\n return this.httpClient.get(this.baseUrl + 'collection/');\n }\n\n search(query: string) {\n return this.httpClient.get(this.baseUrl + 'collection/search?queryString=' + encodeURIComponent(query)).pipe(map(tags => {\n tags.forEach(s => s.coverImage = this.imageService.randomize(this.imageService.getCollectionCoverImage(s.id)));\n return tags;\n }));\n }\n\n updateTag(tag: CollectionTag) {\n return this.httpClient.post(this.baseUrl + 'collection/update', tag, TextResonse);\n }\n\n updateSeriesForTag(tag: CollectionTag, seriesIdsToRemove: Array) {\n return this.httpClient.post(this.baseUrl + 'collection/update-series', {tag, seriesIdsToRemove}, TextResonse);\n }\n\n addByMultiple(tagId: number, seriesIds: Array, tagTitle: string = '') {\n return this.httpClient.post(this.baseUrl + 'collection/update-for-series', {collectionTagId: tagId, collectionTagTitle: tagTitle, seriesIds}, TextResonse);\n }\n\n tagNameExists(name: string) {\n return this.httpClient.get(this.baseUrl + 'collection/name-exists?name=' + name);\n }\n\n deleteTag(tagId: number) {\n return this.httpClient.delete(this.baseUrl + 'collection?tagId=' + tagId, TextResonse);\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { ReplaySubject, shareReplay, tap } from 'rxjs';\nimport { environment } from 'src/environments/environment';\nimport { Device } from '../_models/device/device';\nimport { DevicePlatform } from '../_models/device/device-platform';\nimport { TextResonse } from '../_types/text-response';\nimport { AccountService } from './account.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DeviceService {\n\n baseUrl = environment.apiUrl;\n\n private devicesSource: ReplaySubject = new ReplaySubject(1);\n public devices$ = this.devicesSource.asObservable().pipe(shareReplay());\n\n\n constructor(private httpClient: HttpClient, private accountService: AccountService) {\n // Ensure we are authenticated before we make an authenticated api call.\n this.accountService.currentUser$.subscribe(user => {\n if (!user) {\n this.devicesSource.next([]);\n return;\n }\n\n this.httpClient.get(this.baseUrl + 'device', {}).subscribe(data => {\n this.devicesSource.next(data);\n });\n });\n }\n\n createDevice(name: string, platform: DevicePlatform, emailAddress: string) {\n return this.httpClient.post(this.baseUrl + 'device/create', {name, platform, emailAddress}, TextResonse);\n }\n\n updateDevice(id: number, name: string, platform: DevicePlatform, emailAddress: string) {\n return this.httpClient.post(this.baseUrl + 'device/update', {id, name, platform, emailAddress}, TextResonse);\n }\n\n deleteDevice(id: number) {\n return this.httpClient.delete(this.baseUrl + 'device?deviceId=' + id);\n }\n\n getDevices() {\n return this.httpClient.get(this.baseUrl + 'device', {}).pipe(tap(data => {\n this.devicesSource.next(data);\n }));\n }\n\n sendTo(chapterIds: Array, deviceId: number) {\n return this.httpClient.post(this.baseUrl + 'device/send-to', {deviceId, chapterIds}, TextResonse);\n }\n\n sendSeriesTo(seriesId: number, deviceId: number) {\n return this.httpClient.post(this.baseUrl + 'device/send-series-to', {deviceId, seriesId}, TextResonse);\n }\n\n\n}\n","import {DestroyRef, inject, Injectable} from '@angular/core';\nimport { environment } from 'src/environments/environment';\nimport { ThemeService } from './theme.service';\nimport { RecentlyAddedItem } from '../_models/recently-added-item';\nimport { AccountService } from './account.service';\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ImageService {\n private readonly destroyRef = inject(DestroyRef);\n baseUrl = environment.apiUrl;\n apiKey: string = '';\n encodedKey: string = '';\n public placeholderImage = 'assets/images/image-placeholder.dark-min.png';\n public errorImage = 'assets/images/error-placeholder2.dark-min.png';\n public resetCoverImage = 'assets/images/image-reset-cover-min.png';\n public errorWebLinkImage = 'assets/images/broken-white-32x32.png';\n\n constructor(private accountService: AccountService, private themeService: ThemeService) {\n this.themeService.currentTheme$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(theme => {\n if (this.themeService.isDarkTheme()) {\n this.placeholderImage = 'assets/images/image-placeholder.dark-min.png';\n this.errorImage = 'assets/images/error-placeholder2.dark-min.png';\n this.errorWebLinkImage = 'assets/images/broken-white-32x32.png';\n } else {\n this.placeholderImage = 'assets/images/image-placeholder-min.png';\n this.errorImage = 'assets/images/error-placeholder2-min.png';\n this.errorWebLinkImage = 'assets/images/broken-black-32x32.png';\n }\n });\n\n this.accountService.currentUser$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(user => {\n if (user) {\n this.apiKey = user.apiKey;\n this.encodedKey = encodeURIComponent(this.apiKey);\n }\n });\n }\n\n getRecentlyAddedItem(item: RecentlyAddedItem) {\n if (item.chapterId === 0) {\n return this.getVolumeCoverImage(item.volumeId);\n }\n return this.getChapterCoverImage(item.chapterId);\n }\n\n /**\n * Returns the entity type from a cover image url. Undefied if not applicable\n * @param url\n * @returns\n */\n getEntityTypeFromUrl(url: string) {\n if (url.indexOf('?') < 0) return undefined;\n const part = url.split('?')[1];\n const equalIndex = part.indexOf('=');\n return part.substring(0, equalIndex).replace('Id', '');\n }\n\n getLibraryCoverImage(libraryId: number) {\n return `${this.baseUrl}image/library-cover?libraryId=${libraryId}&apiKey=${this.encodedKey}`;\n }\n\n getVolumeCoverImage(volumeId: number) {\n return `${this.baseUrl}image/volume-cover?volumeId=${volumeId}&apiKey=${this.encodedKey}`;\n }\n\n getSeriesCoverImage(seriesId: number) {\n return `${this.baseUrl}image/series-cover?seriesId=${seriesId}&apiKey=${this.encodedKey}`;\n }\n\n getCollectionCoverImage(collectionTagId: number) {\n return `${this.baseUrl}image/collection-cover?collectionTagId=${collectionTagId}&apiKey=${this.encodedKey}`;\n }\n\n getReadingListCoverImage(readingListId: number) {\n return `${this.baseUrl}image/readinglist-cover?readingListId=${readingListId}&apiKey=${this.encodedKey}`;\n }\n\n getChapterCoverImage(chapterId: number) {\n return `${this.baseUrl}image/chapter-cover?chapterId=${chapterId}&apiKey=${this.encodedKey}`;\n }\n\n getBookmarkedImage(chapterId: number, pageNum: number) {\n return `${this.baseUrl}image/bookmark?chapterId=${chapterId}&apiKey=${this.encodedKey}&pageNum=${pageNum}`;\n }\n\n getWebLinkImage(url: string) {\n return `${this.baseUrl}image/web-link?url=${encodeURIComponent(url)}&apiKey=${this.encodedKey}`;\n }\n\n getCoverUploadImage(filename: string) {\n return `${this.baseUrl}image/cover-upload?filename=${encodeURIComponent(filename)}&apiKey=${this.encodedKey}`;\n }\n\n updateErroredImage(event: any) {\n event.target.src = this.placeholderImage;\n }\n\n updateErroredWebLinkImage(event: any) {\n event.target.src = this.errorWebLinkImage;\n }\n\n /**\n * Used to refresh an existing loaded image (lazysizes). If random already attached, will append another number onto it.\n * @param url Existing request url from ImageService only\n * @returns Url with a random parameter attached\n */\n randomize(url: string) {\n const r = Math.round(Math.random() * 100 + 1);\n if (url.indexOf('&random') >= 0) {\n return url + 1;\n }\n return url + '&random=' + r;\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { environment } from 'src/environments/environment';\nimport { JumpKey } from '../_models/jumpbar/jump-key';\nimport { Library, LibraryType } from '../_models/library';\nimport { DirectoryDto } from '../_models/system/directory-dto';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LibraryService {\n\n baseUrl = environment.apiUrl;\n\n private libraryNames: {[key:number]: string} | undefined = undefined;\n private libraryTypes: {[key: number]: LibraryType} | undefined = undefined;\n\n constructor(private httpClient: HttpClient) {}\n\n getLibraryNames() {\n if (this.libraryNames != undefined) {\n return of(this.libraryNames);\n }\n\n return this.httpClient.get(this.baseUrl + 'library').pipe(map(libraries => {\n this.libraryNames = {};\n libraries.forEach(lib => {\n if (this.libraryNames !== undefined) {\n this.libraryNames[lib.id] = lib.name;\n }\n });\n return this.libraryNames;\n }));\n }\n\n getLibraryName(libraryId: number) {\n if (this.libraryNames != undefined && this.libraryNames.hasOwnProperty(libraryId)) {\n return of(this.libraryNames[libraryId]);\n }\n return this.httpClient.get(this.baseUrl + 'library').pipe(map(l => {\n this.libraryNames = {};\n l.forEach(lib => {\n if (this.libraryNames !== undefined) {\n this.libraryNames[lib.id] = lib.name;\n }\n });\n return this.libraryNames[libraryId];\n }));\n }\n\n libraryNameExists(name: string) {\n return this.httpClient.get(this.baseUrl + 'library/name-exists?name=' + name);\n }\n\n listDirectories(rootPath: string) {\n let query = '';\n if (rootPath !== undefined && rootPath.length > 0) {\n query = '?path=' + encodeURIComponent(rootPath);\n }\n\n return this.httpClient.get(this.baseUrl + 'library/list' + query);\n }\n\n getJumpBar(libraryId: number) {\n return this.httpClient.get(this.baseUrl + 'library/jump-bar?libraryId=' + libraryId);\n }\n\n getLibraries() {\n return this.httpClient.get(this.baseUrl + 'library');\n }\n\n updateLibrariesForMember(username: string, selectedLibraries: Library[]) {\n return this.httpClient.post(this.baseUrl + 'library/grant-access', {username, selectedLibraries});\n }\n\n scan(libraryId: number, force = false) {\n return this.httpClient.post(this.baseUrl + 'library/scan?libraryId=' + libraryId + '&force=' + force, {});\n }\n\n analyze(libraryId: number) {\n return this.httpClient.post(this.baseUrl + 'library/analyze?libraryId=' + libraryId, {});\n }\n\n refreshMetadata(libraryId: number, forceUpdate = false) {\n return this.httpClient.post(this.baseUrl + 'library/refresh-metadata?libraryId=' + libraryId + '&force=' + forceUpdate, {});\n }\n\n create(model: {name: string, type: number, folders: string[]}) {\n return this.httpClient.post(this.baseUrl + 'library/create', model);\n }\n\n delete(libraryId: number) {\n return this.httpClient.delete(this.baseUrl + 'library/delete?libraryId=' + libraryId, {});\n }\n\n update(model: {name: string, folders: string[], id: number}) {\n return this.httpClient.post(this.baseUrl + 'library/update', model);\n }\n\n getLibraryType(libraryId: number) {\n if (this.libraryTypes != undefined && this.libraryTypes.hasOwnProperty(libraryId)) {\n return of(this.libraryTypes[libraryId]);\n }\n return this.httpClient.get(this.baseUrl + 'library/type?libraryId=' + libraryId).pipe(map(l => {\n if (this.libraryTypes === undefined) {\n this.libraryTypes = {};\n }\n\n this.libraryTypes[libraryId] = l;\n return this.libraryTypes[libraryId];\n }));\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { environment } from 'src/environments/environment';\nimport { Member } from '../_models/auth/member';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MemberService {\n\n baseUrl = environment.apiUrl;\n\n constructor(private httpClient: HttpClient) { }\n\n getMembers(includePending: boolean = false) {\n return this.httpClient.get(this.baseUrl + 'users?includePending=' + includePending);\n }\n\n getMemberNames() {\n return this.httpClient.get(this.baseUrl + 'users/names');\n }\n\n adminExists() {\n return this.httpClient.get(this.baseUrl + 'admin/exists');\n }\n\n deleteMember(username: string) {\n return this.httpClient.delete(this.baseUrl + 'users/delete-user?username=' + encodeURIComponent(username));\n }\n\n hasLibraryAccess(libraryId: number) {\n return this.httpClient.get(this.baseUrl + 'users/has-library-access?libraryId=' + libraryId);\n }\n\n hasReadingProgress(librayId: number) {\n return this.httpClient.get(this.baseUrl + 'users/has-reading-progress?libraryId=' + librayId);\n }\n\n addSeriesToWantToRead(seriesIds: Array) {\n return this.httpClient.post>(this.baseUrl + 'want-to-read/add-series', {seriesIds});\n }\n\n removeSeriesToWantToRead(seriesIds: Array) {\n return this.httpClient.post>(this.baseUrl + 'want-to-read/remove-series', {seriesIds});\n }\n\n getMember() {\n return this.httpClient.get(this.baseUrl + 'users/myself');\n }\n \n}\n","import { Injectable } from '@angular/core';\nimport { HubConnection, HubConnectionBuilder } from '@microsoft/signalr';\nimport { BehaviorSubject, ReplaySubject } from 'rxjs';\nimport { environment } from 'src/environments/environment';\nimport { LibraryModifiedEvent } from '../_models/events/library-modified-event';\nimport { NotificationProgressEvent } from '../_models/events/notification-progress-event';\nimport { ThemeProgressEvent } from '../_models/events/theme-progress-event';\nimport { UserUpdateEvent } from '../_models/events/user-update-event';\nimport { User } from '../_models/user';\n\nexport enum EVENTS {\n UpdateAvailable = 'UpdateAvailable',\n ScanSeries = 'ScanSeries',\n SeriesAdded = 'SeriesAdded',\n SeriesRemoved = 'SeriesRemoved',\n ScanLibraryProgress = 'ScanLibraryProgress',\n OnlineUsers = 'OnlineUsers',\n SeriesAddedToCollection = 'SeriesAddedToCollection',\n /**\n * A generic error that occurs during operations on the server\n */\n Error = 'Error',\n BackupDatabaseProgress = 'BackupDatabaseProgress',\n /**\n * A subtype of NotificationProgress that represents maintenance cleanup on server-owned resources\n */\n CleanupProgress = 'CleanupProgress',\n /**\n * A subtype of NotificationProgress that represnts a user downloading a file or group of files.\n * Note: In v0.5.5, this is being replaced by an inbrowser experience. The message is changed and this will be moved to dashboard view once built\n */\n DownloadProgress = 'DownloadProgress',\n /**\n * A generic progress event\n */\n NotificationProgress = 'NotificationProgress',\n /**\n * A subtype of NotificationProgress that represents the underlying file being processed during a scan\n */\n FileScanProgress = 'FileScanProgress',\n /**\n * A custom user site theme is added or removed during a scan\n */\n SiteThemeProgress = 'SiteThemeProgress',\n /**\n * A cover is updated\n */\n CoverUpdate = 'CoverUpdate',\n /**\n * A subtype of NotificationProgress that represents a file being processed for cover image extraction\n */\n CoverUpdateProgress = 'CoverUpdateProgress',\n /**\n * A library is created or removed from the instance\n */\n LibraryModified = 'LibraryModified',\n /**\n * A user updates an entities read progress\n */\n UserProgressUpdate = 'UserProgressUpdate',\n /**\n * A user updates account or preferences\n */\n UserUpdate = 'UserUpdate',\n /**\n * When bulk bookmarks are being converted\n */\n ConvertBookmarksProgress = 'ConvertBookmarksProgress',\n /**\n * When files are being scanned to calculate word count\n */\n WordCountAnalyzerProgress = 'WordCountAnalyzerProgress',\n /**\n * When the user needs to be informed, but it's not a big deal\n */\n Info = 'Info',\n /**\n * A user is sending files to their device\n */\n SendingToDevice = 'SendingToDevice',\n /**\n * A scrobbling token has expired\n */\n ScrobblingKeyExpired = 'ScrobblingKeyExpired',\n}\n\nexport interface Message {\n event: EVENTS;\n payload: T;\n}\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MessageHubService {\n hubUrl = environment.hubUrl;\n private hubConnection!: HubConnection;\n\n private messagesSource = new ReplaySubject>(1);\n private onlineUsersSource = new BehaviorSubject([]); // UserNames\n\n /**\n * Any events that come from the backend\n */\n public messages$ = this.messagesSource.asObservable();\n /**\n * Users that are online\n */\n public onlineUsers$ = this.onlineUsersSource.asObservable();\n\n\n isAdmin: boolean = false;\n\n constructor() {}\n\n /**\n * Tests that an event is of the type passed\n * @param event\n * @param eventType\n * @returns\n */\n public isEventType(event: Message, eventType: EVENTS) {\n if (event.event == EVENTS.NotificationProgress) {\n const notification = event.payload as NotificationProgressEvent;\n return notification.eventType.toLowerCase() == eventType.toLowerCase();\n }\n return event.event === eventType;\n }\n\n createHubConnection(user: User, isAdmin: boolean) {\n this.isAdmin = isAdmin;\n\n this.hubConnection = new HubConnectionBuilder()\n .withUrl(this.hubUrl + 'messages', {\n accessTokenFactory: () => user.token\n })\n .withAutomaticReconnect()\n .build();\n\n this.hubConnection\n .start()\n .catch(err => console.error(err));\n\n this.hubConnection.on(EVENTS.OnlineUsers, (usernames: string[]) => {\n this.onlineUsersSource.next(usernames);\n });\n\n this.hubConnection.on(EVENTS.ScanSeries, resp => {\n this.messagesSource.next({\n event: EVENTS.ScanSeries,\n payload: resp.body\n });\n });\n\n this.hubConnection.on(EVENTS.ScanLibraryProgress, resp => {\n this.messagesSource.next({\n event: EVENTS.ScanLibraryProgress,\n payload: resp.body\n });\n });\n\n this.hubConnection.on(EVENTS.ConvertBookmarksProgress, resp => {\n this.messagesSource.next({\n event: EVENTS.ConvertBookmarksProgress,\n payload: resp.body\n });\n });\n\n this.hubConnection.on(EVENTS.WordCountAnalyzerProgress, resp => {\n this.messagesSource.next({\n event: EVENTS.WordCountAnalyzerProgress,\n payload: resp.body\n });\n });\n\n this.hubConnection.on(EVENTS.LibraryModified, resp => {\n this.messagesSource.next({\n event: EVENTS.LibraryModified,\n payload: resp.body as LibraryModifiedEvent\n });\n });\n\n\n this.hubConnection.on(EVENTS.NotificationProgress, (resp: NotificationProgressEvent) => {\n this.messagesSource.next({\n event: EVENTS.NotificationProgress,\n payload: resp\n });\n });\n\n this.hubConnection.on(EVENTS.SiteThemeProgress, resp => {\n this.messagesSource.next({\n event: EVENTS.SiteThemeProgress,\n payload: resp.body as ThemeProgressEvent\n });\n });\n\n this.hubConnection.on(EVENTS.SeriesAddedToCollection, resp => {\n this.messagesSource.next({\n event: EVENTS.SeriesAddedToCollection,\n payload: resp.body\n });\n });\n\n this.hubConnection.on(EVENTS.UserProgressUpdate, resp => {\n this.messagesSource.next({\n event: EVENTS.UserProgressUpdate,\n payload: resp.body\n });\n });\n\n this.hubConnection.on(EVENTS.UserUpdate, resp => {\n this.messagesSource.next({\n event: EVENTS.UserUpdate,\n payload: resp.body as UserUpdateEvent\n });\n });\n\n this.hubConnection.on(EVENTS.Error, resp => {\n this.messagesSource.next({\n event: EVENTS.Error,\n payload: resp.body\n });\n });\n\n this.hubConnection.on(EVENTS.Info, resp => {\n this.messagesSource.next({\n event: EVENTS.Info,\n payload: resp.body\n });\n });\n\n this.hubConnection.on(EVENTS.SeriesAdded, resp => {\n this.messagesSource.next({\n event: EVENTS.SeriesAdded,\n payload: resp.body\n });\n });\n\n this.hubConnection.on(EVENTS.SeriesRemoved, resp => {\n this.messagesSource.next({\n event: EVENTS.SeriesRemoved,\n payload: resp.body\n });\n });\n\n this.hubConnection.on(EVENTS.CoverUpdate, resp => {\n this.messagesSource.next({\n event: EVENTS.CoverUpdate,\n payload: resp.body\n });\n });\n\n this.hubConnection.on(EVENTS.UpdateAvailable, resp => {\n this.messagesSource.next({\n event: EVENTS.UpdateAvailable,\n payload: resp.body\n });\n });\n\n this.hubConnection.on(EVENTS.SendingToDevice, resp => {\n this.messagesSource.next({\n event: EVENTS.SendingToDevice,\n payload: resp.body\n });\n });\n\n this.hubConnection.on(EVENTS.ScrobblingKeyExpired, resp => {\n this.messagesSource.next({\n event: EVENTS.ScrobblingKeyExpired,\n payload: resp.body\n });\n });\n }\n\n stopHubConnection() {\n if (this.hubConnection) {\n this.hubConnection.stop().catch(err => console.error(err));\n }\n }\n\n sendMessage(methodName: string, body?: any) {\n return this.hubConnection.invoke(methodName, body);\n }\n\n}\n","import {HttpClient} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {map, tap} from 'rxjs/operators';\nimport {of, ReplaySubject, switchMap} from 'rxjs';\nimport {environment} from 'src/environments/environment';\nimport {Genre} from '../_models/metadata/genre';\nimport {AgeRating} from '../_models/metadata/age-rating';\nimport {AgeRatingDto} from '../_models/metadata/age-rating-dto';\nimport {Language} from '../_models/metadata/language';\nimport {PublicationStatusDto} from '../_models/metadata/publication-status-dto';\nimport {Person, PersonRole} from '../_models/metadata/person';\nimport {Tag} from '../_models/tag';\nimport {TextResonse} from '../_types/text-response';\nimport {FilterComparison} from '../_models/metadata/v2/filter-comparison';\nimport {FilterField} from '../_models/metadata/v2/filter-field';\nimport {Router} from \"@angular/router\";\nimport {SortField} from \"../_models/metadata/series-filter\";\nimport {FilterCombination} from \"../_models/metadata/v2/filter-combination\";\nimport {SeriesFilterV2} from \"../_models/metadata/v2/series-filter-v2\";\nimport {FilterStatement} from \"../_models/metadata/v2/filter-statement\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MetadataService {\n\n baseUrl = environment.apiUrl;\n private validLanguages: Array = [];\n\n constructor(private httpClient: HttpClient, private router: Router) { }\n\n getAllAgeRatings(libraries?: Array) {\n let method = 'metadata/age-ratings'\n if (libraries != undefined && libraries.length > 0) {\n method += '?libraryIds=' + libraries.join(',');\n }\n return this.httpClient.get>(this.baseUrl + method);\n }\n\n getAllPublicationStatus(libraries?: Array) {\n let method = 'metadata/publication-status'\n if (libraries != undefined && libraries.length > 0) {\n method += '?libraryIds=' + libraries.join(',');\n }\n return this.httpClient.get>(this.baseUrl + method);\n }\n\n getAllTags(libraries?: Array) {\n let method = 'metadata/tags'\n if (libraries != undefined && libraries.length > 0) {\n method += '?libraryIds=' + libraries.join(',');\n }\n return this.httpClient.get>(this.baseUrl + method);\n }\n\n getAllGenres(libraries?: Array) {\n let method = 'metadata/genres'\n if (libraries != undefined && libraries.length > 0) {\n method += '?libraryIds=' + libraries.join(',');\n }\n return this.httpClient.get>(this.baseUrl + method);\n }\n\n getAllLanguages(libraries?: Array) {\n let method = 'metadata/languages'\n if (libraries != undefined && libraries.length > 0) {\n method += '?libraryIds=' + libraries.join(',');\n }\n return this.httpClient.get>(this.baseUrl + method);\n }\n\n\n /**\n * All the potential language tags there can be\n */\n getAllValidLanguages() {\n if (this.validLanguages != undefined && this.validLanguages.length > 0) {\n return of(this.validLanguages);\n }\n return this.httpClient.get>(this.baseUrl + 'metadata/all-languages')\n .pipe(tap(l => this.validLanguages = l));\n }\n\n getAllPeople(libraries?: Array) {\n let method = 'metadata/people'\n if (libraries != undefined && libraries.length > 0) {\n method += '?libraryIds=' + libraries.join(',');\n }\n return this.httpClient.get>(this.baseUrl + method);\n }\n\n getAllPeopleByRole(role: PersonRole) {\n return this.httpClient.get>(this.baseUrl + 'metadata/people-by-role?role=' + role);\n }\n\n // getChapterSummary(chapterId: number) {\n // return this.httpClient.get(this.baseUrl + 'metadata/chapter-summary?chapterId=' + chapterId, TextResonse);\n // }\n\n createDefaultFilterDto(): SeriesFilterV2 {\n return {\n statements: [] as FilterStatement[],\n combination: FilterCombination.And,\n limitTo: 0,\n sortOptions: {\n isAscending: true,\n sortField: SortField.SortName\n }\n };\n }\n\n createDefaultFilterStatement(field: FilterField = FilterField.SeriesName, comparison = FilterComparison.Equal, value = '') {\n return {\n comparison: comparison,\n field: field,\n value: value\n };\n }\n\n updateFilter(arr: Array, index: number, filterStmt: FilterStatement) {\n arr[index].comparison = filterStmt.comparison;\n arr[index].field = filterStmt.field;\n arr[index].value = filterStmt.value ? filterStmt.value + '' : '';\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable, Renderer2, RendererFactory2 } from '@angular/core';\nimport { ReplaySubject, take } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NavService {\n public localStorageSideNavKey = 'kavita--sidenav--expanded';\n\n private navbarVisibleSource = new ReplaySubject(1);\n /**\n * If the top Nav bar is rendered or not\n */\n navbarVisible$ = this.navbarVisibleSource.asObservable();\n\n private sideNavCollapseSource = new ReplaySubject(1);\n /**\n * If the Side Nav is in a collapsed state or not.\n */\n sideNavCollapsed$ = this.sideNavCollapseSource.asObservable();\n\n private sideNavVisibilitySource = new ReplaySubject(1);\n /**\n * If the side nav is rendered or not into the DOM.\n */\n sideNavVisibility$ = this.sideNavVisibilitySource.asObservable();\n\n private renderer: Renderer2;\n\n constructor(@Inject(DOCUMENT) private document: Document, rendererFactory: RendererFactory2) {\n this.renderer = rendererFactory.createRenderer(null, null);\n this.showNavBar();\n const sideNavState = (localStorage.getItem(this.localStorageSideNavKey) === 'true') || false;\n this.sideNavCollapseSource.next(sideNavState);\n this.showSideNav();\n }\n \n /**\n * Shows the top nav bar. This should be visible on all pages except the reader.\n */\n showNavBar() {\n this.renderer.setStyle(this.document.querySelector('body'), 'margin-top', '56px');\n this.renderer.setStyle(this.document.querySelector('body'), 'height', 'calc(var(--vh)*100 - 56px)');\n this.renderer.setStyle(this.document.querySelector('html'), 'height', 'calc(var(--vh)*100 - 56px)');\n this.navbarVisibleSource.next(true);\n }\n\n /**\n * Hides the top nav bar. \n */\n hideNavBar() {\n this.renderer.setStyle(this.document.querySelector('body'), 'margin-top', '0px');\n this.renderer.removeStyle(this.document.querySelector('body'), 'height');\n this.renderer.removeStyle(this.document.querySelector('html'), 'height');\n this.navbarVisibleSource.next(false);\n }\n\n /**\n * Shows the side nav. When being visible, the side nav will automatically return to previous collapsed state.\n */\n showSideNav() {\n this.sideNavVisibilitySource.next(true);\n }\n\n /**\n * Hides the side nav. This is useful for the readers and login page.\n */\n hideSideNav() {\n this.sideNavVisibilitySource.next(false);\n }\n\n toggleSideNav() {\n this.sideNavCollapseSource.pipe(take(1)).subscribe(val => {\n if (val === undefined) val = false;\n const newVal = !(val || false);\n this.sideNavCollapseSource.next(newVal);\n localStorage.setItem(this.localStorageSideNavKey, newVal + '');\n });\n }\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport {DestroyRef, inject, Injectable} from '@angular/core';\nimport {Location} from '@angular/common';\nimport { Router } from '@angular/router';\nimport { environment } from 'src/environments/environment';\nimport { ChapterInfo } from '../manga-reader/_models/chapter-info';\nimport { Chapter } from '../_models/chapter';\nimport { HourEstimateRange } from '../_models/series-detail/hour-estimate-range';\nimport { MangaFormat } from '../_models/manga-format';\nimport { BookmarkInfo } from '../_models/manga-reader/bookmark-info';\nimport { PageBookmark } from '../_models/readers/page-bookmark';\nimport { ProgressBookmark } from '../_models/readers/progress-bookmark';\nimport { UtilityService } from '../shared/_services/utility.service';\nimport { FilterUtilitiesService } from '../shared/_services/filter-utilities.service';\nimport { FileDimension } from '../manga-reader/_models/file-dimension';\nimport screenfull from 'screenfull';\nimport { TextResonse } from '../_types/text-response';\nimport { AccountService } from './account.service';\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\nimport {PersonalToC} from \"../_models/readers/personal-toc\";\nimport {SeriesFilterV2} from \"../_models/metadata/v2/series-filter-v2\";\n\nexport const CHAPTER_ID_DOESNT_EXIST = -1;\nexport const CHAPTER_ID_NOT_FETCHED = -2;\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ReaderService {\n\n private readonly destroyRef = inject(DestroyRef);\n baseUrl = environment.apiUrl;\n encodedKey: string = '';\n\n // Override background color for reader and restore it onDestroy\n private originalBodyColor!: string;\n\n constructor(private httpClient: HttpClient, private router: Router,\n private location: Location, private utilityService: UtilityService,\n private filterUtilityService: FilterUtilitiesService, private accountService: AccountService) {\n this.accountService.currentUser$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(user => {\n if (user) {\n this.encodedKey = encodeURIComponent(user.apiKey);\n }\n });\n }\n\n\n getNavigationArray(libraryId: number, seriesId: number, chapterId: number, format: MangaFormat) {\n if (format === undefined) format = MangaFormat.ARCHIVE;\n\n if (format === MangaFormat.EPUB) {\n return ['library', libraryId, 'series', seriesId, 'book', chapterId];\n } else if (format === MangaFormat.PDF) {\n return ['library', libraryId, 'series', seriesId, 'pdf', chapterId];\n } else {\n return ['library', libraryId, 'series', seriesId, 'manga', chapterId];\n }\n }\n\n downloadPdf(chapterId: number) {\n return `${this.baseUrl}reader/pdf?chapterId=${chapterId}&apiKey=${this.encodedKey}`;\n }\n\n bookmark(seriesId: number, volumeId: number, chapterId: number, page: number) {\n return this.httpClient.post(this.baseUrl + 'reader/bookmark', {seriesId, volumeId, chapterId, page});\n }\n\n unbookmark(seriesId: number, volumeId: number, chapterId: number, page: number) {\n return this.httpClient.post(this.baseUrl + 'reader/unbookmark', {seriesId, volumeId, chapterId, page});\n }\n\n getAllBookmarks(filter: SeriesFilterV2 | undefined) {\n return this.httpClient.post(this.baseUrl + 'reader/all-bookmarks', filter);\n }\n\n getBookmarks(chapterId: number) {\n return this.httpClient.get(this.baseUrl + 'reader/chapter-bookmarks?chapterId=' + chapterId);\n }\n\n getBookmarksForVolume(volumeId: number) {\n return this.httpClient.get(this.baseUrl + 'reader/volume-bookmarks?volumeId=' + volumeId);\n }\n\n getBookmarksForSeries(seriesId: number) {\n return this.httpClient.get(this.baseUrl + 'reader/series-bookmarks?seriesId=' + seriesId);\n }\n\n clearBookmarks(seriesId: number) {\n return this.httpClient.post(this.baseUrl + 'reader/remove-bookmarks', {seriesId}, TextResonse);\n }\n clearMultipleBookmarks(seriesIds: Array) {\n return this.httpClient.post(this.baseUrl + 'reader/bulk-remove-bookmarks', {seriesIds}, TextResonse);\n }\n\n /**\n * Used exclusively for reading multiple bookmarks from a series\n * @param seriesId\n */\n getBookmarkInfo(seriesId: number) {\n return this.httpClient.get(this.baseUrl + 'reader/bookmark-info?seriesId=' + seriesId);\n }\n\n getProgress(chapterId: number) {\n return this.httpClient.get(this.baseUrl + 'reader/get-progress?chapterId=' + chapterId);\n }\n\n getPageUrl(chapterId: number, page: number) {\n return `${this.baseUrl}reader/image?chapterId=${chapterId}&apiKey=${this.encodedKey}&page=${page}`;\n }\n\n getThumbnailUrl(chapterId: number, page: number) {\n return `${this.baseUrl}reader/thumbnail?chapterId=${chapterId}&apiKey=${this.encodedKey}&page=${page}`;\n }\n\n getBookmarkPageUrl(seriesId: number, apiKey: string, page: number) {\n return this.baseUrl + 'reader/bookmark-image?seriesId=' + seriesId + '&page=' + page + '&apiKey=' + encodeURIComponent(apiKey);\n }\n\n getChapterInfo(chapterId: number, includeDimensions = false) {\n return this.httpClient.get(this.baseUrl + 'reader/chapter-info?chapterId=' + chapterId + '&includeDimensions=' + includeDimensions);\n }\n\n getFileDimensions(chapterId: number) {\n return this.httpClient.get>(this.baseUrl + 'reader/file-dimensions?chapterId=' + chapterId);\n }\n\n saveProgress(libraryId: number, seriesId: number, volumeId: number, chapterId: number, page: number, bookScrollId: string | null = null) {\n return this.httpClient.post(this.baseUrl + 'reader/progress', {libraryId, seriesId, volumeId, chapterId, pageNum: page, bookScrollId});\n }\n\n markVolumeRead(seriesId: number, volumeId: number) {\n return this.httpClient.post(this.baseUrl + 'reader/mark-volume-read', {seriesId, volumeId});\n }\n\n markMultipleRead(seriesId: number, volumeIds: Array, chapterIds?: Array) {\n return this.httpClient.post(this.baseUrl + 'reader/mark-multiple-read', {seriesId, volumeIds, chapterIds});\n }\n\n markMultipleUnread(seriesId: number, volumeIds: Array, chapterIds?: Array) {\n return this.httpClient.post(this.baseUrl + 'reader/mark-multiple-unread', {seriesId, volumeIds, chapterIds});\n }\n\n markMultipleSeriesRead(seriesIds: Array) {\n return this.httpClient.post(this.baseUrl + 'reader/mark-multiple-series-read', {seriesIds});\n }\n\n markMultipleSeriesUnread(seriesIds: Array) {\n return this.httpClient.post(this.baseUrl + 'reader/mark-multiple-series-unread', {seriesIds});\n }\n\n markVolumeUnread(seriesId: number, volumeId: number) {\n return this.httpClient.post(this.baseUrl + 'reader/mark-volume-unread', {seriesId, volumeId});\n }\n\n\n getNextChapter(seriesId: number, volumeId: number, currentChapterId: number, readingListId: number = -1) {\n if (readingListId > 0) {\n return this.httpClient.get(this.baseUrl + 'readinglist/next-chapter?seriesId=' + seriesId + '¤tChapterId=' + currentChapterId + '&readingListId=' + readingListId);\n }\n return this.httpClient.get(this.baseUrl + 'reader/next-chapter?seriesId=' + seriesId + '&volumeId=' + volumeId + '¤tChapterId=' + currentChapterId);\n }\n\n getPrevChapter(seriesId: number, volumeId: number, currentChapterId: number, readingListId: number = -1) {\n if (readingListId > 0) {\n return this.httpClient.get(this.baseUrl + 'readinglist/prev-chapter?seriesId=' + seriesId + '¤tChapterId=' + currentChapterId + '&readingListId=' + readingListId);\n }\n return this.httpClient.get(this.baseUrl + 'reader/prev-chapter?seriesId=' + seriesId + '&volumeId=' + volumeId + '¤tChapterId=' + currentChapterId);\n }\n\n hasSeriesProgress(seriesId: number) {\n return this.httpClient.get(this.baseUrl + 'reader/has-progress?seriesId=' + seriesId);\n }\n\n getCurrentChapter(seriesId: number) {\n return this.httpClient.get(this.baseUrl + 'reader/continue-point?seriesId=' + seriesId);\n }\n\n getTimeLeft(seriesId: number) {\n return this.httpClient.get(this.baseUrl + 'reader/time-left?seriesId=' + seriesId);\n }\n\n /**\n * Captures current body color and forces background color to be black. Call @see resetOverrideStyles() on destroy of component to revert changes\n */\n setOverrideStyles(backgroundColor: string = 'black') {\n const bodyNode = document.querySelector('body');\n if (bodyNode !== undefined && bodyNode !== null) {\n this.originalBodyColor = bodyNode.style.background;\n bodyNode.setAttribute('style', 'background-color: ' + backgroundColor + ' !important');\n }\n }\n\n resetOverrideStyles() {\n const bodyNode = document.querySelector('body');\n if (bodyNode !== undefined && bodyNode !== null && this.originalBodyColor !== undefined) {\n bodyNode.style.background = this.originalBodyColor;\n }\n }\n\n /**\n * Parses out the page number from a Image src url\n * @param imageSrc Src attribute of Image\n * @returns\n */\n imageUrlToPageNum(imageSrc: string) {\n if (imageSrc === undefined || imageSrc === '') { return -1; }\n const params = new URLSearchParams(new URL(imageSrc).search);\n return parseInt(params.get('page') || '-1', 10);\n }\n\n imageUrlToChapterId(imageSrc: string) {\n if (imageSrc === undefined || imageSrc === '') { return -1; }\n const params = new URLSearchParams(new URL(imageSrc).search);\n return parseInt(params.get('chapterId') || '-1', 10);\n }\n\n getNextChapterUrl(url: string, nextChapterId: number, incognitoMode: boolean = false, readingListMode: boolean = false, readingListId: number = -1) {\n const lastSlashIndex = url.lastIndexOf('/');\n let newRoute = url.substring(0, lastSlashIndex + 1) + nextChapterId + '';\n newRoute += this.getQueryParams(incognitoMode, readingListMode, readingListId);\n return newRoute;\n }\n\n\n getQueryParamsObject(incognitoMode: boolean = false, readingListMode: boolean = false, readingListId: number = -1) {\n let params: {[key: string]: any} = {};\n if (incognitoMode) {\n params['incognitoMode'] = true;\n }\n if (readingListMode) {\n params['readingListId'] = readingListId;\n }\n return params;\n }\n\n getQueryParams(incognitoMode: boolean = false, readingListMode: boolean = false, readingListId: number = -1) {\n let params = '';\n if (incognitoMode) {\n params += '?incognitoMode=true';\n }\n if (readingListMode) {\n if (params.indexOf('?') > 0) {\n params += '&readingListId=' + readingListId;\n } else {\n params += '?readingListId=' + readingListId;\n }\n }\n return params;\n }\n\n toggleFullscreen(el: Element, callback?: VoidFunction) {\n\n if (screenfull.isEnabled) {\n screenfull.toggle();\n }\n }\n\n /**\n *\n * @returns If document is in fullscreen mode\n */\n checkFullscreenMode() {\n return document.fullscreenElement != null;\n }\n\n /**\n * Closes the reader and causes a redirection\n */\n closeReader(readingListMode: boolean = false, readingListId: number = 0) {\n if (readingListMode) {\n this.router.navigateByUrl('lists/' + readingListId);\n } else {\n this.location.back();\n }\n }\n\n removePersonalToc(chapterId: number, pageNumber: number, title: string) {\n return this.httpClient.delete(this.baseUrl + `reader/ptoc?chapterId=${chapterId}&pageNum=${pageNumber}&title=${encodeURIComponent(title)}`);\n }\n\n getPersonalToC(chapterId: number) {\n return this.httpClient.get>(this.baseUrl + 'reader/ptoc?chapterId=' + chapterId);\n }\n\n createPersonalToC(libraryId: number, seriesId: number, volumeId: number, chapterId: number, pageNumber: number, title: string, bookScrollId: string | null) {\n return this.httpClient.post(this.baseUrl + 'reader/create-ptoc', {libraryId, seriesId, volumeId, chapterId, pageNumber, title, bookScrollId});\n }\n\n getElementFromXPath(path: string) {\n const node = document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;\n if (node?.nodeType === Node.ELEMENT_NODE) {\n return node as Element;\n }\n return null;\n }\n\n /**\n *\n * @param element\n * @param pureXPath Will ignore shortcuts like id('')\n */\n getXPathTo(element: any, pureXPath = false): string {\n if (element === null) return '';\n if (!pureXPath) {\n if (element.id !== '') { return 'id(\"' + element.id + '\")'; }\n if (element === document.body) { return element.tagName; }\n }\n\n\n let ix = 0;\n const siblings = element.parentNode?.childNodes || [];\n for (let sibling of siblings) {\n if (sibling === element) {\n return this.getXPathTo(element.parentNode) + '/' + element.tagName + '[' + (ix + 1) + ']';\n }\n if (sibling.nodeType === 1 && sibling.tagName === element.tagName) {\n ix++;\n }\n\n }\n return '';\n }\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { map } from 'rxjs/operators';\nimport { environment } from 'src/environments/environment';\nimport { UtilityService } from '../shared/_services/utility.service';\nimport { Person } from '../_models/metadata/person';\nimport { PaginatedResult } from '../_models/pagination';\nimport { ReadingList, ReadingListItem } from '../_models/reading-list';\nimport { CblImportSummary } from '../_models/reading-list/cbl/cbl-import-summary';\nimport { TextResonse } from '../_types/text-response';\nimport { ActionItem } from './action-factory.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ReadingListService {\n\n baseUrl = environment.apiUrl;\n\n constructor(private httpClient: HttpClient, private utilityService: UtilityService) { }\n\n getReadingList(readingListId: number) {\n return this.httpClient.get(this.baseUrl + 'readinglist?readingListId=' + readingListId);\n }\n\n getReadingLists(includePromoted: boolean = true, sortByLastModified: boolean = false, pageNum?: number, itemsPerPage?: number) {\n let params = new HttpParams();\n params = this.utilityService.addPaginationIfExists(params, pageNum, itemsPerPage);\n\n return this.httpClient.post>(this.baseUrl + 'readinglist/lists?includePromoted=' + includePromoted\n + '&sortByLastModified=' + sortByLastModified, {}, {observe: 'response', params}).pipe(\n map((response: any) => {\n return this.utilityService.createPaginatedResult(response, new PaginatedResult());\n })\n );\n }\n\n getReadingListsForSeries(seriesId: number) {\n return this.httpClient.get(this.baseUrl + 'readinglist/lists-for-series?seriesId=' + seriesId);\n }\n\n getListItems(readingListId: number) {\n return this.httpClient.get(this.baseUrl + 'readinglist/items?readingListId=' + readingListId);\n }\n\n createList(title: string) {\n return this.httpClient.post(this.baseUrl + 'readinglist/create', {title});\n }\n\n update(model: {readingListId: number, title?: string, summary?: string, promoted: boolean}) {\n return this.httpClient.post(this.baseUrl + 'readinglist/update', model, TextResonse);\n }\n\n updateByMultiple(readingListId: number, seriesId: number, volumeIds: Array, chapterIds?: Array) {\n return this.httpClient.post(this.baseUrl + 'readinglist/update-by-multiple', {readingListId, seriesId, volumeIds, chapterIds}, TextResonse);\n }\n\n updateByMultipleSeries(readingListId: number, seriesIds: Array) {\n return this.httpClient.post(this.baseUrl + 'readinglist/update-by-multiple-series', {readingListId, seriesIds}, TextResonse);\n }\n\n updateBySeries(readingListId: number, seriesId: number) {\n return this.httpClient.post(this.baseUrl + 'readinglist/update-by-series', {readingListId, seriesId}, TextResonse);\n }\n\n updateByVolume(readingListId: number, seriesId: number, volumeId: number) {\n return this.httpClient.post(this.baseUrl + 'readinglist/update-by-volume', {readingListId, seriesId, volumeId}, TextResonse);\n }\n\n updateByChapter(readingListId: number, seriesId: number, chapterId: number) {\n return this.httpClient.post(this.baseUrl + 'readinglist/update-by-chapter', {readingListId, seriesId, chapterId}, TextResonse);\n }\n\n delete(readingListId: number) {\n return this.httpClient.delete(this.baseUrl + 'readinglist?readingListId=' + readingListId, TextResonse);\n }\n\n updatePosition(readingListId: number, readingListItemId: number, fromPosition: number, toPosition: number) {\n return this.httpClient.post(this.baseUrl + 'readinglist/update-position', {readingListId, readingListItemId, fromPosition, toPosition}, TextResonse);\n }\n\n deleteItem(readingListId: number, readingListItemId: number) {\n return this.httpClient.post(this.baseUrl + 'readinglist/delete-item', {readingListId, readingListItemId}, TextResonse);\n }\n\n removeRead(readingListId: number) {\n return this.httpClient.post(this.baseUrl + 'readinglist/remove-read?readingListId=' + readingListId, {}, TextResonse);\n }\n\n actionListFilter(action: ActionItem, readingList: ReadingList, isAdmin: boolean) {\n if (readingList?.promoted && !isAdmin) return false;\n return true;\n }\n\n nameExists(name: string) {\n return this.httpClient.get(this.baseUrl + 'readinglist/name-exists?name=' + name);\n }\n\n validateCbl(form: FormData) {\n return this.httpClient.post(this.baseUrl + 'cbl/validate', form);\n }\n\n importCbl(form: FormData) {\n return this.httpClient.post(this.baseUrl + 'cbl/import', form);\n }\n\n getCharacters(readingListId: number) {\n return this.httpClient.get>(this.baseUrl + 'readinglist/characters?readingListId=' + readingListId);\n }\n}\n","import { ElementRef, Injectable } from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { filter, ReplaySubject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ScrollService {\n\n private scrollContainerSource = new ReplaySubject>(1);\n /**\n * Exposes the current container on the active screen that is our primary overlay area. Defaults to 'body' and changes to 'body' on page loads\n */\n public scrollContainer$ = this.scrollContainerSource.asObservable();\n\n constructor(router: Router) {\n\n router.events\n .pipe(filter(event => event instanceof NavigationEnd))\n .subscribe(() => {\n this.scrollContainerSource.next('body');\n });\n this.scrollContainerSource.next('body');\n }\n\n get scrollPosition() {\n return (window.pageYOffset\n || document.documentElement.scrollTop\n || document.body.scrollTop || 0);\n }\n\n /*\n * When in the scroll vertical position the scroll in the horizontal position is needed\n */\n get scrollPositionX() {\n return (window.pageXOffset\n || document.documentElement.scrollLeft\n || document.body.scrollLeft || 0);\n }\n\n scrollTo(top: number, el: Element | Window = window, behavior: 'auto' | 'smooth' = 'smooth') {\n el.scroll({\n top: top,\n behavior: behavior\n });\n }\n\n scrollToX(left: number, el: Element | Window = window, behavior: 'auto' | 'smooth' = 'auto') {\n el.scroll({\n left: left,\n behavior: behavior\n });\n }\n\n setScrollContainer(elem: ElementRef | undefined) {\n if (elem !== undefined) {\n this.scrollContainerSource.next(elem);\n }\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { of } from 'rxjs';\nimport { environment } from 'src/environments/environment';\nimport { SearchResultGroup } from '../_models/search/search-result-group';\nimport { Series } from '../_models/series';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SearchService {\n\n baseUrl = environment.apiUrl;\n\n constructor(private httpClient: HttpClient) { }\n\n search(term: string) {\n if (term === '') {\n return of(new SearchResultGroup());\n }\n return this.httpClient.get(this.baseUrl + 'search/search?queryString=' + encodeURIComponent(term));\n }\n\n getSeriesForMangaFile(mangaFileId: number) {\n return this.httpClient.get(this.baseUrl + 'search/series-for-mangafile?mangaFileId=' + mangaFileId);\n }\n\n getSeriesForChapter(chapterId: number) {\n return this.httpClient.get(this.baseUrl + 'search/series-for-chapter?chapterId=' + chapterId);\n }\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { environment } from 'src/environments/environment';\nimport { FilterUtilitiesService } from '../shared/_services/filter-utilities.service';\nimport { UtilityService } from '../shared/_services/utility.service';\nimport { Chapter } from '../_models/chapter';\nimport { ChapterMetadata } from '../_models/metadata/chapter-metadata';\nimport { CollectionTag } from '../_models/collection-tag';\nimport { PaginatedResult } from '../_models/pagination';\nimport { Series } from '../_models/series';\nimport { RelatedSeries } from '../_models/series-detail/related-series';\nimport { SeriesDetail } from '../_models/series-detail/series-detail';\nimport { SeriesGroup } from '../_models/series-group';\nimport { SeriesMetadata } from '../_models/metadata/series-metadata';\nimport { Volume } from '../_models/volume';\nimport { ImageService } from './image.service';\nimport { TextResonse } from '../_types/text-response';\nimport { SeriesFilterV2 } from '../_models/metadata/v2/series-filter-v2';\nimport {UserReview} from \"../_single-module/review-card/user-review\";\nimport {Rating} from \"../_models/rating\";\nimport {Recommendation} from \"../_models/series-detail/recommendation\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SeriesService {\n\n baseUrl = environment.apiUrl;\n paginatedResults: PaginatedResult = new PaginatedResult();\n paginatedSeriesForTagsResults: PaginatedResult = new PaginatedResult();\n\n constructor(private httpClient: HttpClient, private imageService: ImageService,\n private utilityService: UtilityService) { }\n\n getAllSeriesV2(pageNum?: number, itemsPerPage?: number, filter?: SeriesFilterV2) {\n let params = new HttpParams();\n params = this.utilityService.addPaginationIfExists(params, pageNum, itemsPerPage);\n const data = filter || {};\n\n return this.httpClient.post>(this.baseUrl + 'series/all-v2', data, {observe: 'response', params}).pipe(\n map((response: any) => {\n return this.utilityService.createPaginatedResult(response, this.paginatedResults);\n })\n );\n }\n\n getSeriesForLibraryV2(pageNum?: number, itemsPerPage?: number, filter?: SeriesFilterV2) {\n let params = new HttpParams();\n params = this.utilityService.addPaginationIfExists(params, pageNum, itemsPerPage);\n const data = filter || {};\n\n return this.httpClient.post>(this.baseUrl + 'series/v2', data, {observe: 'response', params}).pipe(\n map((response: any) => {\n return this.utilityService.createPaginatedResult(response, this.paginatedResults);\n })\n );\n }\n\n getAllSeriesByIds(seriesIds: Array) {\n return this.httpClient.post(this.baseUrl + 'series/series-by-ids', {seriesIds: seriesIds});\n }\n\n getSeries(seriesId: number) {\n return this.httpClient.get(this.baseUrl + 'series/' + seriesId);\n }\n\n getVolumes(seriesId: number) {\n return this.httpClient.get(this.baseUrl + 'series/volumes?seriesId=' + seriesId);\n }\n\n getChapter(chapterId: number) {\n return this.httpClient.get(this.baseUrl + 'series/chapter?chapterId=' + chapterId);\n }\n\n getChapterMetadata(chapterId: number) {\n return this.httpClient.get(this.baseUrl + 'series/chapter-metadata?chapterId=' + chapterId);\n }\n\n delete(seriesId: number) {\n return this.httpClient.delete(this.baseUrl + 'series/' + seriesId);\n }\n\n deleteMultipleSeries(seriesIds: Array) {\n return this.httpClient.post(this.baseUrl + 'series/delete-multiple', {seriesIds});\n }\n\n updateRating(seriesId: number, userRating: number) {\n return this.httpClient.post(this.baseUrl + 'series/update-rating', {seriesId, userRating});\n }\n\n updateSeries(model: any) {\n return this.httpClient.post(this.baseUrl + 'series/update', model);\n }\n\n markRead(seriesId: number) {\n return this.httpClient.post(this.baseUrl + 'reader/mark-read', {seriesId});\n }\n\n markUnread(seriesId: number) {\n return this.httpClient.post(this.baseUrl + 'reader/mark-unread', {seriesId});\n }\n\n getRecentlyAdded(pageNum?: number, itemsPerPage?: number, filter?: SeriesFilterV2) {\n let params = new HttpParams();\n params = this.utilityService.addPaginationIfExists(params, pageNum, itemsPerPage);\n\n const data = filter || {};\n return this.httpClient.post(this.baseUrl + 'series/recently-added-v2', data, {observe: 'response', params}).pipe(\n map(response => {\n return this.utilityService.createPaginatedResult(response, new PaginatedResult());\n })\n );\n }\n\n getRecentlyUpdatedSeries() {\n return this.httpClient.post(this.baseUrl + 'series/recently-updated-series', {});\n }\n\n getWantToRead(pageNum?: number, itemsPerPage?: number, filter?: SeriesFilterV2): Observable> {\n let params = new HttpParams();\n params = this.utilityService.addPaginationIfExists(params, pageNum, itemsPerPage);\n const data = filter || {};\n\n return this.httpClient.post(this.baseUrl + 'want-to-read/v2', data, {observe: 'response', params}).pipe(\n map(response => {\n return this.utilityService.createPaginatedResult(response, new PaginatedResult());\n }));\n }\n\n isWantToRead(seriesId: number) {\n return this.httpClient.get(this.baseUrl + 'want-to-read?seriesId=' + seriesId, TextResonse)\n .pipe(map(val => {\n return val === 'true';\n }));\n }\n\n getOnDeck(libraryId: number = 0, pageNum?: number, itemsPerPage?: number, filter?: SeriesFilterV2) {\n let params = new HttpParams();\n params = this.utilityService.addPaginationIfExists(params, pageNum, itemsPerPage);\n const data = filter || {};\n\n return this.httpClient.post(this.baseUrl + 'series/on-deck?libraryId=' + libraryId, data, {observe: 'response', params}).pipe(\n map(response => {\n return this.utilityService.createPaginatedResult(response, new PaginatedResult());\n }));\n }\n\n\n refreshMetadata(series: Series) {\n return this.httpClient.post(this.baseUrl + 'series/refresh-metadata', {libraryId: series.libraryId, seriesId: series.id});\n }\n\n scan(libraryId: number, seriesId: number, force = false) {\n return this.httpClient.post(this.baseUrl + 'series/scan', {libraryId: libraryId, seriesId: seriesId, forceUpdate: force});\n }\n\n analyzeFiles(libraryId: number, seriesId: number) {\n return this.httpClient.post(this.baseUrl + 'series/analyze', {libraryId: libraryId, seriesId: seriesId});\n }\n\n getMetadata(seriesId: number) {\n return this.httpClient.get(this.baseUrl + 'series/metadata?seriesId=' + seriesId).pipe(map(items => {\n items?.collectionTags.forEach(tag => tag.coverImage = this.imageService.getCollectionCoverImage(tag.id));\n return items;\n }));\n }\n\n updateMetadata(seriesMetadata: SeriesMetadata, collectionTags: CollectionTag[]) {\n const data = {\n seriesMetadata,\n collectionTags,\n };\n return this.httpClient.post(this.baseUrl + 'series/metadata', data, TextResonse);\n }\n\n getSeriesForTag(collectionTagId: number, pageNum?: number, itemsPerPage?: number) {\n let params = new HttpParams();\n\n params = this.utilityService.addPaginationIfExists(params, pageNum, itemsPerPage);\n\n return this.httpClient.get>(this.baseUrl + 'series/series-by-collection?collectionId=' + collectionTagId, {observe: 'response', params}).pipe(\n map((response: any) => {\n return this.utilityService.createPaginatedResult(response, this.paginatedSeriesForTagsResults);\n })\n );\n }\n\n getRelatedForSeries(seriesId: number) {\n return this.httpClient.get(this.baseUrl + 'series/all-related?seriesId=' + seriesId);\n }\n\n getRecommendationsForSeries(seriesId: number) {\n return this.httpClient.get(this.baseUrl + 'recommended/recommendations?seriesId=' + seriesId);\n }\n\n updateRelationships(seriesId: number, adaptations: Array, characters: Array,\n contains: Array, others: Array, prequels: Array,\n sequels: Array, sideStories: Array, spinOffs: Array,\n alternativeSettings: Array, alternativeVersions: Array, doujinshis: Array, editions: Array) {\n return this.httpClient.post(this.baseUrl + 'series/update-related?seriesId=' + seriesId,\n {seriesId, adaptations, characters, sequels, prequels, contains, others, sideStories, spinOffs,\n alternativeSettings, alternativeVersions, doujinshis, editions});\n }\n\n getSeriesDetail(seriesId: number) {\n return this.httpClient.get(this.baseUrl + 'series/series-detail?seriesId=' + seriesId);\n }\n\n getReviews(seriesId: number) {\n return this.httpClient.get>(this.baseUrl + 'review?seriesId=' + seriesId);\n }\n\n updateReview(seriesId: number, tagline: string, body: string) {\n return this.httpClient.post(this.baseUrl + 'review', {\n seriesId, tagline, body\n });\n }\n\n getRatings(seriesId: number) {\n return this.httpClient.get>(this.baseUrl + 'rating?seriesId=' + seriesId);\n }\n getOverallRating(seriesId: number) {\n return this.httpClient.get(this.baseUrl + 'rating/overall?seriesId=' + seriesId);\n }\n\n removeFromOnDeck(seriesId: number) {\n return this.httpClient.post(this.baseUrl + 'series/remove-from-on-deck?seriesId=' + seriesId, {});\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport {\n DestroyRef,\n inject,\n Inject,\n Injectable,\n Renderer2,\n RendererFactory2,\n SecurityContext\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { ToastrService } from 'ngx-toastr';\nimport { map, ReplaySubject, take } from 'rxjs';\nimport { environment } from 'src/environments/environment';\nimport { ConfirmService } from '../shared/confirm.service';\nimport { NotificationProgressEvent } from '../_models/events/notification-progress-event';\nimport { SiteTheme, ThemeProvider } from '../_models/preferences/site-theme';\nimport { TextResonse } from '../_types/text-response';\nimport { EVENTS, MessageHubService } from './message-hub.service';\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\nimport {translate} from \"@ngneat/transloco\";\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ThemeService {\n\n private readonly destroyRef = inject(DestroyRef);\n public defaultTheme: string = 'dark';\n public defaultBookTheme: string = 'Dark';\n\n private currentThemeSource = new ReplaySubject(1);\n public currentTheme$ = this.currentThemeSource.asObservable();\n\n private themesSource = new ReplaySubject(1);\n public themes$ = this.themesSource.asObservable();\n\n /**\n * Maintain a cache of themes. SignalR will inform us if we need to refresh cache\n */\n private themeCache: Array = [];\n\n private renderer: Renderer2;\n private baseUrl = environment.apiUrl;\n\n\n constructor(rendererFactory: RendererFactory2, @Inject(DOCUMENT) private document: Document, private httpClient: HttpClient,\n messageHub: MessageHubService, private domSanitizer: DomSanitizer, private confirmService: ConfirmService, private toastr: ToastrService) {\n this.renderer = rendererFactory.createRenderer(null, null);\n\n messageHub.messages$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(message => {\n\n if (message.event !== EVENTS.NotificationProgress) return;\n const notificationEvent = (message.payload as NotificationProgressEvent);\n if (notificationEvent.name !== EVENTS.SiteThemeProgress) return;\n\n if (notificationEvent.eventType === 'ended') {\n if (notificationEvent.name === EVENTS.SiteThemeProgress) this.getThemes().subscribe(() => {\n\n });\n }\n });\n }\n\n getColorScheme() {\n return getComputedStyle(this.document.body).getPropertyValue('--color-scheme').trim();\n }\n\n /**\n * --theme-color from theme. Updates the meta tag\n * @returns\n */\n getThemeColor() {\n return getComputedStyle(this.document.body).getPropertyValue('--theme-color').trim();\n }\n\n /**\n * --msapplication-TileColor from theme. Updates the meta tag\n * @returns\n */\n getTileColor() {\n return getComputedStyle(this.document.body).getPropertyValue('--title-color').trim();\n }\n\n getCssVariable(variable: string) {\n return getComputedStyle(this.document.body).getPropertyValue(variable).trim();\n }\n\n isDarkTheme() {\n return this.getColorScheme().toLowerCase() === 'dark';\n }\n\n getThemes() {\n return this.httpClient.get(this.baseUrl + 'theme').pipe(map(themes => {\n this.themeCache = themes;\n this.themesSource.next(themes);\n this.currentTheme$.pipe(take(1)).subscribe(theme => {\n if (themes.filter(t => t.id === theme.id).length === 0) {\n this.setTheme(this.defaultTheme);\n this.toastr.info(translate('toasts.theme-missing'));\n }\n });\n return themes;\n }));\n }\n\n /**\n * Used in book reader to remove all themes so book reader can provide custom theming options\n */\n clearThemes() {\n this.unsetThemes();\n }\n\n setDefault(themeId: number) {\n return this.httpClient.post(this.baseUrl + 'theme/update-default', {themeId: themeId}).pipe(map(() => {\n // Refresh the cache when a default state is changed\n this.getThemes().subscribe(() => {});\n }));\n }\n\n scan() {\n return this.httpClient.post(this.baseUrl + 'theme/scan', {});\n }\n\n /**\n * Sets the book theme on the body tag so css variable overrides can take place\n * @param selector brtheme- prefixed string\n */\n setBookTheme(selector: string) {\n this.unsetBookThemes();\n this.renderer.addClass(this.document.querySelector('body'), selector);\n }\n\n clearBookTheme() {\n this.unsetBookThemes();\n }\n\n\n /**\n * Sets the theme as active. Will inject a style tag into document to load a custom theme and apply the selector to the body\n * @param themeName\n */\n setTheme(themeName: string) {\n const theme = this.themeCache.find(t => t.name.toLowerCase() === themeName.toLowerCase());\n if (theme) {\n this.unsetThemes();\n this.renderer.addClass(this.document.querySelector('body'), theme.selector);\n\n if (theme.provider === ThemeProvider.User && !this.hasThemeInHead(theme.name)) {\n // We need to load the styles into the browser\n this.fetchThemeContent(theme.id).subscribe(async (content) => {\n if (content === null) {\n await this.confirmService.alert(translate('toasts.alert-bad-theme'));\n this.setTheme('dark');\n return;\n }\n const styleElem = this.document.createElement('style');\n styleElem.id = 'theme-' + theme.name;\n styleElem.appendChild(this.document.createTextNode(content));\n\n this.renderer.appendChild(this.document.head, styleElem);\n\n // Check if the theme has --theme-color and apply it to meta tag\n const themeColor = this.getThemeColor();\n if (themeColor) {\n this.document.querySelector('meta[name=\"theme-color\"]')?.setAttribute('content', themeColor);\n this.document.querySelector('meta[name=\"apple-mobile-web-app-status-bar-style\"]')?.setAttribute('content', themeColor);\n }\n\n const tileColor = this.getTileColor();\n if (tileColor) {\n this.document.querySelector('meta[name=\"msapplication-TileColor\"]')?.setAttribute('content', themeColor);\n }\n\n const colorScheme = this.getColorScheme();\n if (colorScheme) {\n this.document.querySelector('body')?.setAttribute('theme', colorScheme);\n }\n\n this.currentThemeSource.next(theme);\n });\n } else {\n this.currentThemeSource.next(theme);\n }\n } else {\n // Only time themes isn't already loaded is on first load\n this.getThemes().subscribe(themes => {\n this.setTheme(themeName);\n });\n }\n }\n\n private hasThemeInHead(themeName: string) {\n const id = 'theme-' + themeName.toLowerCase();\n return Array.from(this.document.head.children).filter(el => el.tagName === 'STYLE' && el.id.toLowerCase() === id).length > 0;\n }\n\n private fetchThemeContent(themeId: number) {\n return this.httpClient.get(this.baseUrl + 'theme/download-content?themeId=' + themeId, TextResonse).pipe(map(encodedCss => {\n return this.domSanitizer.sanitize(SecurityContext.STYLE, encodedCss);\n }));\n }\n\n private unsetThemes() {\n this.themeCache.forEach(theme => this.document.body.classList.remove(theme.selector));\n }\n\n private unsetBookThemes() {\n Array.from(this.document.body.classList).filter(cls => cls.startsWith('brtheme-')).forEach(c => this.document.body.classList.remove(c));\n }\n\n\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { environment } from 'src/environments/environment';\nimport { TextResonse } from '../_types/text-response';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UploadService {\n\n private baseUrl = environment.apiUrl;\n\n constructor(private httpClient: HttpClient) { }\n\n\n uploadByUrl(url: string) {\n return this.httpClient.post(this.baseUrl + 'upload/upload-by-url', {url}, TextResonse);\n }\n\n /**\n * \n * @param seriesId Series to overwrite cover image for\n * @param url A base64 encoded url\n * @returns \n */\n updateSeriesCoverImage(seriesId: number, url: string) {\n return this.httpClient.post(this.baseUrl + 'upload/series', {id: seriesId, url: this._cleanBase64Url(url)});\n }\n\n updateCollectionCoverImage(tagId: number, url: string) {\n return this.httpClient.post(this.baseUrl + 'upload/collection', {id: tagId, url: this._cleanBase64Url(url)});\n }\n\n updateReadingListCoverImage(readingListId: number, url: string) {\n return this.httpClient.post(this.baseUrl + 'upload/reading-list', {id: readingListId, url: this._cleanBase64Url(url)});\n }\n\n updateChapterCoverImage(chapterId: number, url: string) {\n return this.httpClient.post(this.baseUrl + 'upload/chapter', {id: chapterId, url: this._cleanBase64Url(url)});\n }\n\n updateLibraryCoverImage(libraryId: number, url: string) {\n return this.httpClient.post(this.baseUrl + 'upload/library', {id: libraryId, url: this._cleanBase64Url(url)});\n }\n\n resetChapterCoverLock(chapterId: number, ) {\n return this.httpClient.post(this.baseUrl + 'upload/reset-chapter-lock', {id: chapterId, url: ''});\n }\n\n _cleanBase64Url(url: string) {\n if (url.startsWith('data')) {\n url = url.split(',')[1];\n }\n return url;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'dynamicList',\n pure: true,\n standalone: true\n})\nexport class DynamicListPipe implements PipeTransform {\n\n transform(value: any): Array<{title: string, data: any}> {\n if (value === undefined || value === null) return [];\n return value as {title: string, data: any}[];\n }\n\n}\n","\n 0\">\n
\n \n
\n \n
\n
\n \n \n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n
\n \n
\n \n
\n
\n
\n
\n
\n
\n
\n\n
\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport {NgbDropdown, NgbDropdownItem, NgbDropdownMenu, NgbDropdownToggle} from '@ng-bootstrap/ng-bootstrap';\nimport { take } from 'rxjs';\nimport { AccountService } from 'src/app/_services/account.service';\nimport { Action, ActionItem } from 'src/app/_services/action-factory.service';\nimport {CommonModule} from \"@angular/common\";\nimport {TranslocoDirective} from \"@ngneat/transloco\";\nimport {DynamicListPipe} from \"./_pipes/dynamic-list.pipe\";\n\n@Component({\n selector: 'app-card-actionables',\n standalone: true,\n imports: [CommonModule, NgbDropdown, NgbDropdownToggle, NgbDropdownMenu, NgbDropdownItem, DynamicListPipe, TranslocoDirective],\n templateUrl: './card-actionables.component.html',\n styleUrls: ['./card-actionables.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CardActionablesComponent implements OnInit {\n\n @Input() iconClass = 'fa-ellipsis-v';\n @Input() btnClass = '';\n @Input() actions: ActionItem[] = [];\n @Input() labelBy = 'card';\n @Input() disabled: boolean = false;\n @Output() actionHandler = new EventEmitter>();\n\n\n isAdmin: boolean = false;\n canDownload: boolean = false;\n submenu: {[key: string]: NgbDropdown} = {};\n\n constructor(private readonly cdRef: ChangeDetectorRef, private accountService: AccountService) { }\n\n ngOnInit(): void {\n this.accountService.currentUser$.pipe(take(1)).subscribe((user) => {\n if (!user) return;\n this.isAdmin = this.accountService.hasAdminRole(user);\n this.canDownload = this.accountService.hasDownloadRole(user);\n\n // We want to avoid an empty menu when user doesn't have access to anything\n if (!this.isAdmin && this.actions.filter(a => !a.requiresAdmin).length === 0) {\n this.actions = [];\n }\n this.cdRef.markForCheck();\n });\n }\n\n preventEvent(event: any) {\n event.stopPropagation();\n event.preventDefault();\n }\n\n performAction(event: any, action: ActionItem) {\n this.preventEvent(event);\n\n if (typeof action.callback === 'function') {\n this.actionHandler.emit(action);\n }\n }\n\n willRenderAction(action: ActionItem) {\n return (action.requiresAdmin && this.isAdmin)\n || (action.action === Action.Download && (this.canDownload || this.isAdmin))\n || (!action.requiresAdmin && action.action !== Action.Download);\n }\n\n shouldRenderSubMenu(action: ActionItem, dynamicList: null | Array) {\n return (action.children[0].dynamicList === undefined || action.children[0].dynamicList === null) || (dynamicList !== null && dynamicList.length > 0);\n }\n\n openSubmenu(actionTitle: string, subMenu: NgbDropdown) {\n // We keep track when we open and when we get a request to open, if we have other keys, we close them and clear their keys\n if (Object.keys(this.submenu).length > 0) {\n const keys = Object.keys(this.submenu).filter(k => k !== actionTitle);\n keys.forEach(key => {\n this.submenu[key].close();\n delete this.submenu[key];\n });\n }\n this.submenu[actionTitle] = subMenu;\n subMenu.open();\n }\n\n closeAllSubmenus() {\n Object.keys(this.submenu).forEach(key => {\n this.submenu[key].close();\n delete this.submenu[key];\n });\n }\n\n performDynamicClick(event: any, action: ActionItem, dynamicItem: any) {\n action._extra = dynamicItem;\n this.performAction(event, action);\n }\n}\n","/**\n * Use when httpClient is expected to return just a string/variable and not json\n */\nexport const TextResonse = {responseType: 'text' as 'json'};","\n
\n

{{t('title')}}

\n \n
\n
\n\n
\n \n
\n \n
\n \n \n \n
\n\n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
{{t('type-header')}}{{t('name-header')}}
...
\n {{folder.name}}\n
\n
\n \n\n
\n","import { Component, Input, OnInit, ViewChild } from '@angular/core';\nimport { NgbActiveModal, NgbTypeahead, NgbHighlight } from '@ng-bootstrap/ng-bootstrap';\nimport { catchError, debounceTime, distinctUntilChanged, filter, map, merge, Observable, of, OperatorFunction, Subject, switchMap, tap } from 'rxjs';\nimport { Stack } from 'src/app/shared/data-structures/stack';\nimport { DirectoryDto } from 'src/app/_models/system/directory-dto';\nimport { LibraryService } from '../../../_services/library.service';\nimport { NgIf, NgFor, NgClass } from '@angular/common';\nimport { ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport {TranslocoDirective} from \"@ngneat/transloco\";\n\n\nexport interface DirectoryPickerResult {\n success: boolean;\n folderPath: string;\n}\n\n\n\n@Component({\n selector: 'app-directory-picker',\n templateUrl: './directory-picker.component.html',\n styleUrls: ['./directory-picker.component.scss'],\n standalone: true,\n imports: [ReactiveFormsModule, NgbTypeahead, FormsModule, NgbHighlight, NgIf, NgFor, NgClass, TranslocoDirective]\n})\nexport class DirectoryPickerComponent implements OnInit {\n\n @Input() startingFolder: string = '';\n /**\n * Url to give more information about selecting directories. Passing nothing will suppress.\n */\n @Input() helpUrl: string = 'https://wiki.kavitareader.com/en/guides/first-time-setup#adding-a-library-to-kavita';\n\n currentRoot = '';\n folders: DirectoryDto[] = [];\n routeStack: Stack = new Stack();\n\n\n path: string = '';\n @ViewChild('instance', {static: true}) instance!: NgbTypeahead;\n focus$ = new Subject();\n click$ = new Subject();\n searching: boolean = false;\n searchFailed: boolean = false;\n\n\n search: OperatorFunction = (text$: Observable) => {\n const debouncedText$ = text$.pipe(debounceTime(200), distinctUntilChanged());\n const clicksWithClosedPopup$ = this.click$.pipe(filter(() => !this.instance.isPopupOpen()));\n const inputFocus$ = this.focus$;\n\n return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$, text$).pipe(\n debounceTime(300),\n distinctUntilChanged(),\n tap(() => this.searching = true),\n switchMap(term =>\n this.libraryService.listDirectories(this.path).pipe(\n tap(() => this.searchFailed = false),\n tap((folders) => this.folders = folders),\n map(folders => folders.map(f => f.fullPath)),\n catchError(() => {\n this.searchFailed = true;\n return of([]);\n }))\n ),\n tap(() => this.searching = false)\n )\n }\n\n constructor(public modal: NgbActiveModal, private libraryService: LibraryService) {\n\n }\n\n ngOnInit(): void {\n if (this.startingFolder && this.startingFolder.length > 0) {\n let folders = this.startingFolder.split('/');\n let folders2 = this.startingFolder.split('\\\\');\n if (folders.length === 1 && folders2.length > 1) {\n folders = folders2;\n }\n if (!folders[0].endsWith('/')) {\n folders[0] = folders[0] + '/';\n }\n folders.forEach(folder => this.routeStack.push(folder));\n\n const fullPath = this.routeStack.items.join('/');\n this.loadChildren(fullPath);\n } else {\n this.loadChildren(this.currentRoot);\n }\n }\n\n updateTable() {\n this.loadChildren(this.path);\n }\n\n\n selectNode(folder: DirectoryDto) {\n if (folder.disabled) return;\n this.currentRoot = folder.name;\n this.routeStack.push(folder.name);\n this.path = folder.fullPath;\n this.loadChildren(this.path);\n }\n\n goBack() {\n this.routeStack.pop();\n const stackPeek = this.routeStack.peek();\n if (stackPeek !== undefined) {\n this.currentRoot = stackPeek;\n const fullPath = this.routeStack.items.join('/');\n this.loadChildren(fullPath);\n } else {\n this.currentRoot = '';\n this.loadChildren(this.currentRoot);\n }\n }\n\n loadChildren(path: string) {\n this.libraryService.listDirectories(path).subscribe(folders => {\n this.folders = folders;\n }, err => {\n // If there was an error, pop off last directory added to stack\n this.routeStack.pop();\n const item = this.folders.find(f => f.fullPath === path);\n if (item) {\n item.disabled = true;\n }\n });\n }\n\n shareFolder(fullPath: string, event: any) {\n event.preventDefault();\n event.stopPropagation();\n\n this.modal.close({success: true, folderPath: fullPath});\n }\n\n share() {\n this.modal.close({success: true, folderPath: this.path});\n }\n\n close() {\n this.modal.close({success: false, folderPath: undefined});\n }\n\n getStem(path: string): string {\n\n const lastPath = this.routeStack.peek();\n if (lastPath && lastPath != path) {\n let replaced = path.replace(lastPath, '');\n if (replaced.startsWith('/') || replaced.startsWith('\\\\')) {\n replaced = replaced.substring(1, replaced.length);\n }\n return replaced;\n }\n\n return path;\n }\n\n navigateTo(index: number) {\n while(this.routeStack.items.length - 1 > index) {\n this.routeStack.pop();\n }\n\n const fullPath = this.routeStack.items.join('/');\n this.path = fullPath;\n this.loadChildren(fullPath);\n }\n}\n\n\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { map } from 'rxjs';\nimport { environment } from 'src/environments/environment';\nimport { TextResonse } from '../_types/text-response';\nimport { ServerSettings } from './_models/server-settings';\n\n/**\n * Used only for the Test Email Service call\n */\nexport interface EmailTestResult {\n successful: boolean;\n errorMessage: string;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SettingsService {\n\n baseUrl = environment.apiUrl;\n\n constructor(private http: HttpClient) { }\n\n getServerSettings() {\n return this.http.get(this.baseUrl + 'settings');\n }\n\n getBaseUrl() {\n return this.http.get(this.baseUrl + 'settings/base-url', TextResonse);\n }\n\n updateServerSettings(model: ServerSettings) {\n return this.http.post(this.baseUrl + 'settings', model);\n }\n\n resetServerSettings() {\n return this.http.post(this.baseUrl + 'settings/reset', {});\n }\n\n resetIPAddressesSettings() {\n return this.http.post(this.baseUrl + 'settings/reset-ip-addresses', {});\n }\n\n resetBaseUrl() {\n return this.http.post(this.baseUrl + 'settings/reset-base-url', {});\n }\n\n resetEmailServerSettings() {\n return this.http.post(this.baseUrl + 'settings/reset-email-url', {});\n }\n\n testEmailServerSettings(emailUrl: string) {\n return this.http.post(this.baseUrl + 'settings/test-email-url', {url: emailUrl});\n }\n\n getTaskFrequencies() {\n return this.http.get(this.baseUrl + 'settings/task-frequencies');\n }\n\n getLoggingLevels() {\n return this.http.get(this.baseUrl + 'settings/log-levels');\n }\n\n getLibraryTypes() {\n return this.http.get(this.baseUrl + 'settings/library-types');\n }\n\n getOpdsEnabled() {\n return this.http.get(this.baseUrl + 'settings/opds-enabled', TextResonse).pipe(map(d => d === 'true'));\n }\n}\n","\n
\n
\n \n \n
\n
\n
\n \n
\n\n
\n
\n Enter a Url\n •\n {{t('drag-n-drop')}}\n •\n {{t('upload')}} {{t('upload-continued')}}\n
\n
\n
\n
\n\n\n \n
\n
\n \n \n \n
\n \n
\n\n
\n\n
\n
\n\n \n\n \n
\n\n
\n
\n \n \n
\n \n
\n\n
\n
\n 0\">\n \n
\n \n
\n
\n
\n\n
\n\n\n
\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Inject, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport {FormBuilder, FormControl, FormGroup, ReactiveFormsModule} from '@angular/forms';\nimport {NgxFileDropEntry, FileSystemFileEntry, NgxFileDropModule} from 'ngx-file-drop';\nimport { fromEvent, Subject } from 'rxjs';\nimport { takeWhile } from 'rxjs/operators';\nimport { ToastrService } from 'ngx-toastr';\nimport { ImageService } from 'src/app/_services/image.service';\nimport { KEY_CODES } from 'src/app/shared/_services/utility.service';\nimport { UploadService } from 'src/app/_services/upload.service';\nimport {CommonModule, DOCUMENT} from '@angular/common';\nimport {ImageComponent} from \"../../shared/image/image.component\";\nimport {translate, TranslocoModule} from \"@ngneat/transloco\";\n\n@Component({\n selector: 'app-cover-image-chooser',\n standalone: true,\n imports: [\n ReactiveFormsModule,\n NgxFileDropModule,\n CommonModule,\n ImageComponent,\n TranslocoModule\n ],\n templateUrl: './cover-image-chooser.component.html',\n styleUrls: ['./cover-image-chooser.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CoverImageChooserComponent implements OnInit, OnDestroy {\n\n /**\n * If buttons show under images to allow immediate selection of cover images.\n */\n @Input() showApplyButton: boolean = false;\n /**\n * When a cover image is selected, this will be called with a base url representation of the file.\n */\n @Output() applyCover: EventEmitter = new EventEmitter();\n /**\n * When a cover image is reset, this will be called.\n */\n @Output() resetCover: EventEmitter = new EventEmitter();\n\n @Input() imageUrls: Array = [];\n @Output() imageUrlsChange: EventEmitter> = new EventEmitter>();\n\n /**\n * Should the control give the ability to select an image that emits the reset status for cover image\n */\n @Input() showReset: boolean = false;\n @Output() resetClicked: EventEmitter = new EventEmitter();\n\n /**\n * Emits the selected index. Used usually to check if something other than the default image was selected.\n */\n @Output() imageSelected: EventEmitter = new EventEmitter();\n /**\n * Emits a base64 encoded image\n */\n @Output() selectedBase64Url: EventEmitter = new EventEmitter();\n\n\n\n selectedIndex: number = 0;\n /**\n * Only applies for showApplyButton. Used to track which image is applied.\n */\n appliedIndex: number = 0;\n form!: FormGroup;\n files: NgxFileDropEntry[] = [];\n acceptableExtensions = ['.png', '.jpg', '.jpeg', '.gif', '.webp'].join(',');\n\n mode: 'file' | 'url' | 'all' = 'all';\n private readonly onDestroy = new Subject();\n\n constructor(public imageService: ImageService, private fb: FormBuilder, private toastr: ToastrService, private uploadService: UploadService,\n @Inject(DOCUMENT) private document: Document, private readonly cdRef: ChangeDetectorRef) { }\n\n ngOnInit(): void {\n this.form = this.fb.group({\n coverImageUrl: new FormControl('', [])\n });\n\n this.cdRef.markForCheck();\n }\n\n ngOnDestroy() {\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n\n /**\n * Generates a base64 encoding for an Image. Used in manual file upload flow.\n * @param img\n * @returns\n */\n getBase64Image(img: HTMLImageElement) {\n const canvas = document.createElement(\"canvas\");\n canvas.width = img.width;\n canvas.height = img.height;\n const ctx = canvas.getContext(\"2d\", {alpha: false});\n if (!ctx) {\n return '';\n }\n\n ctx.drawImage(img, 0, 0);\n const dataURL = canvas.toDataURL(\"image/png\");\n return dataURL;\n }\n\n selectImage(index: number) {\n if (this.selectedIndex === index) { return; }\n\n // If we load custom images of series/chapters/covers, then those urls are not properly encoded, so on select we have to clean them up\n if (!this.imageUrls[index].startsWith('data:image/')) {\n const imgUrl = this.imageUrls[index];\n const img = new Image();\n img.crossOrigin = 'Anonymous';\n img.src = imgUrl;\n img.onload = (e) => this.handleUrlImageAdd(img, index);\n img.onerror = (e) => {\n this.toastr.error(translate('errors.rejected-cover-upload'));\n this.form.get('coverImageUrl')?.setValue('');\n this.cdRef.markForCheck();\n };\n this.form.get('coverImageUrl')?.setValue('');\n this.cdRef.markForCheck();\n this.selectedBase64Url.emit(this.imageUrls[this.selectedIndex]);\n return;\n }\n\n this.selectedIndex = index;\n this.cdRef.markForCheck();\n this.imageSelected.emit(this.selectedIndex);\n this.selectedBase64Url.emit(this.imageUrls[this.selectedIndex]);\n }\n\n applyImage(index: number) {\n if (this.showApplyButton) {\n this.applyCover.emit(this.imageUrls[index]);\n this.appliedIndex = index;\n this.cdRef.markForCheck();\n }\n }\n\n resetImage() {\n if (this.showApplyButton) {\n this.resetCover.emit();\n }\n }\n\n loadImage(url?: string) {\n url = url || this.form.get('coverImageUrl')?.value.trim();\n if (!url || url === '') return;\n\n this.uploadService.uploadByUrl(url).subscribe(filename => {\n const img = new Image();\n img.crossOrigin = 'Anonymous';\n img.src = this.imageService.getCoverUploadImage(filename);\n img.onload = (e) => this.handleUrlImageAdd(img);\n img.onerror = (e) => {\n this.toastr.error(translate('errors.rejected-cover-upload'));\n this.form.get('coverImageUrl')?.setValue('');\n this.cdRef.markForCheck();\n };\n this.form.get('coverImageUrl')?.setValue('');\n this.cdRef.markForCheck();\n });\n }\n\n\n\n changeMode(mode: 'url') {\n this.mode = mode;\n this.setupEnterHandler();\n this.cdRef.markForCheck();\n\n setTimeout(() => (this.document.querySelector('#load-image') as HTMLInputElement)?.focus(), 10);\n }\n\n public dropped(files: NgxFileDropEntry[]) {\n this.files = files;\n for (const droppedFile of files) {\n\n // Is it a file?\n if (droppedFile.fileEntry.isFile) {\n const fileEntry = droppedFile.fileEntry as FileSystemFileEntry;\n fileEntry.file((file: File) => {\n const reader = new FileReader();\n reader.onload = (e) => this.handleFileImageAdd(e);\n reader.readAsDataURL(file);\n });\n }\n }\n }\n\n handleFileImageAdd(e: any) {\n if (e.target == null) return;\n\n this.imageUrls.push(e.target.result); // This is base64 already\n this.imageUrlsChange.emit(this.imageUrls);\n this.selectedIndex = this.imageUrls.length - 1;\n this.imageSelected.emit(this.selectedIndex); // Auto select newly uploaded image\n this.selectedBase64Url.emit(e.target.result);\n setTimeout(() => {\n (this.document.querySelector('div.image-card[aria-label=\"Image ' + this.selectedIndex + '\"]') as HTMLElement).focus();\n })\n this.cdRef.markForCheck();\n }\n\n handleUrlImageAdd(img: HTMLImageElement, index: number = -1) {\n const url = this.getBase64Image(img);\n if (index >= 0) {\n this.imageUrls[index] = url;\n } else {\n this.imageUrls.push(url);\n }\n\n this.imageUrlsChange.emit(this.imageUrls);\n this.cdRef.markForCheck();\n\n setTimeout(() => {\n // Auto select newly uploaded image and tell parent of new base64 url\n this.selectImage(index >= 0 ? index : this.imageUrls.length - 1);\n });\n }\n\n public fileOver(event: any){\n }\n\n public fileLeave(event: any){\n }\n\n reset() {\n this.resetClicked.emit();\n this.selectedIndex = -1;\n }\n\n setupEnterHandler() {\n setTimeout(() => {\n const elem = document.querySelector('input[id=\"load-image\"]');\n if (elem == null) return;\n fromEvent(elem, 'keydown')\n .pipe(takeWhile(() => this.mode === 'url')).subscribe((event) => {\n const evt = event;\n switch(evt.key) {\n case KEY_CODES.ENTER:\n {\n this.loadImage();\n break;\n }\n\n case KEY_CODES.ESC_KEY:\n this.mode = 'all';\n event.stopPropagation();\n break;\n default:\n break;\n }\n });\n });\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'bytes',\n standalone: true\n})\nexport class BytesPipe implements PipeTransform {\n\n /**\n * Format bytes as human-readable text.\n *\n * @param bytes Number of bytes.\n * @param si True to use metric (SI) units, aka powers of 1000. False to use\n * binary (IEC), aka powers of 1024.\n * @param dp Number of decimal places to display.\n *\n * @return Formatted string.\n *\n * Credit: https://stackoverflow.com/questions/10420352/converting-file-size-in-bytes-to-human-readable-string\n */\n transform(bytes: number, si=true, dp=1): string {\n const thresh = si ? 1000 : 1024;\n\n if (Math.abs(bytes) < thresh) {\n return bytes + ' B';\n }\n\n const units = si\n ? ['kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']\n : ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'];\n let u = -1;\n const r = 10**dp;\n\n do {\n bytes /= thresh;\n ++u;\n } while (Math.round(Math.abs(bytes) * r) / r >= thresh && u < units.length - 1);\n\n const fixed = bytes.toFixed(dp);\n if ((fixed + '').endsWith('.0')) {\n return bytes.toFixed(0) + ' ' + units[u];\n }\n\n return fixed + ' ' + units[u];\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport {TranslocoService} from \"@ngneat/transloco\";\n\n@Pipe({\n name: 'defaultDate',\n pure: true,\n standalone: true\n})\nexport class DefaultDatePipe implements PipeTransform {\n\n // TODO: Figure out how to translate Never\n constructor(private translocoService: TranslocoService) {\n }\n transform(value: any, replacementString = 'default-date-pipe.never'): string {\n if (value === null || value === undefined || value === '' || value === Infinity || Number.isNaN(value) || value === '1/1/01') {\n return this.translocoService.translate(replacementString);\n };\n return value;\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'filter',\n pure: false,\n standalone: true\n})\nexport class FilterPipe implements PipeTransform {\n\n transform(items: any[], callback: (item: any) => boolean): any {\n if (!items || !callback) {\n return items;\n }\n return items.filter(item => callback(item));\n}\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { MangaFormat } from '../_models/manga-format';\n\n/**\n * Returns the icon class representing the format\n */\n@Pipe({\n name: 'mangaFormatIcon',\n standalone: true\n})\nexport class MangaFormatIconPipe implements PipeTransform {\n\n transform(format: MangaFormat): string {\n switch (format) {\n case MangaFormat.EPUB:\n return 'fa-book';\n case MangaFormat.ARCHIVE:\n return 'fa-file-archive';\n case MangaFormat.IMAGE:\n return 'fa-image';\n case MangaFormat.PDF:\n return 'fa-file-pdf';\n case MangaFormat.UNKNOWN:\n return 'fa-question';\n }\n }\n\n}\n","import {Pipe, PipeTransform} from '@angular/core';\nimport { MangaFormat } from '../_models/manga-format';\nimport {TranslocoService} from \"@ngneat/transloco\";\n\n/**\n * Returns the string name for the format\n */\n@Pipe({\n name: 'mangaFormat',\n standalone: true\n})\nexport class MangaFormatPipe implements PipeTransform {\n\n constructor(private translocoService: TranslocoService) {}\n\n transform(format: MangaFormat): string {\n switch (format) {\n case MangaFormat.EPUB:\n return this.translocoService.translate('manga-format-pipe.epub');\n case MangaFormat.ARCHIVE:\n return this.translocoService.translate('manga-format-pipe.archive');\n case MangaFormat.IMAGE:\n return this.translocoService.translate('manga-format-pipe.image');\n case MangaFormat.PDF:\n return this.translocoService.translate('manga-format-pipe.pdf');\n case MangaFormat.UNKNOWN:\n return this.translocoService.translate('manga-format-pipe.unknown');\n default:\n return '';\n }\n }\n\n}\n","import { inject } from '@angular/core';\nimport { Pipe, PipeTransform, SecurityContext } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Pipe({\n name: 'safeHtml',\n pure: true,\n standalone: true\n})\nexport class SafeHtmlPipe implements PipeTransform {\n private readonly dom: DomSanitizer = inject(DomSanitizer);\n constructor() {}\n\n transform(value: string): unknown {\n return this.dom.sanitize(SecurityContext.HTML, value);\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'sentenceCase',\n standalone: true\n})\nexport class SentenceCasePipe implements PipeTransform {\n\n transform(value: string | null): string {\n if (value === null || value === undefined) return '';\n\n return value.charAt(0).toUpperCase() + value.substring(1);\n }\n\n}\n","\n\n
\n

{{t('title')}}

\n \n
\n
\n
\n
= 5\">\n \n
\n \n \n
\n
\n
    \n
  • \n {{readingList.title}} \n
  • \n
  • {{t('no-data')}}
  • \n
  • \n
    \n {{t('loading')}}\n
    \n
  • \n
\n
\n
\n
\n
\n
\n \n \n
\n
\n \n
\n
\n
\n
\n
\n\n
\n","import {AfterViewInit, Component, ElementRef, inject, Input, OnInit, ViewChild} from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';\nimport { ToastrService } from 'ngx-toastr';\nimport { ReadingList } from 'src/app/_models/reading-list';\nimport { ReadingListService } from 'src/app/_services/reading-list.service';\nimport { FilterPipe } from '../../../pipe/filter.pipe';\nimport { NgIf, NgFor } from '@angular/common';\nimport {TranslocoDirective, TranslocoService} from \"@ngneat/transloco\";\n\nexport enum ADD_FLOW {\n Series = 0,\n Volume = 1,\n Chapter = 2,\n Multiple = 3,\n Multiple_Series\n}\n\n@Component({\n selector: 'app-add-to-list-modal',\n templateUrl: './add-to-list-modal.component.html',\n styleUrls: ['./add-to-list-modal.component.scss'],\n standalone: true,\n imports: [ReactiveFormsModule, NgIf, NgFor, FilterPipe, TranslocoDirective]\n})\nexport class AddToListModalComponent implements OnInit, AfterViewInit {\n\n @Input({required: true}) title!: string;\n /**\n * Only used in Series flow\n */\n @Input() seriesId?: number;\n /**\n * Only used in Volume flow\n */\n @Input() volumeId?: number;\n /**\n * Only used in Chapter flow\n */\n @Input() chapterId?: number;\n /**\n * Only used in Multiple flow\n */\n @Input() volumeIds?: Array;\n /**\n * Only used in Multiple flow\n */\n @Input() chapterIds?: Array;\n /**\n * Only used in Multiple_Series flow\n */\n @Input() seriesIds?: Array;\n\n /**\n * Determines which Input is required and which API is used to associate to the Reading List\n */\n @Input({required: true}) type!: ADD_FLOW;\n\n /**\n * All existing reading lists sorted by recent use date\n */\n lists: Array = [];\n loading: boolean = false;\n listForm: FormGroup = new FormGroup({});\n\n @ViewChild('title') inputElem!: ElementRef;\n\n filterList = (listItem: ReadingList) => {\n return listItem.title.toLowerCase().indexOf((this.listForm.value.filterQuery || '').toLowerCase()) >= 0;\n }\n\n translocoService = inject(TranslocoService);\n\n\n constructor(private modal: NgbActiveModal, private readingListService: ReadingListService, private toastr: ToastrService) { }\n\n ngOnInit(): void {\n\n this.listForm.addControl('title', new FormControl(this.title, []));\n this.listForm.addControl('filterQuery', new FormControl('', []));\n\n this.loading = true;\n this.readingListService.getReadingLists(false, true).subscribe(lists => {\n this.lists = lists.result;\n this.loading = false;\n });\n\n\n }\n\n ngAfterViewInit() {\n // Shift focus to input\n if (this.inputElem) {\n this.inputElem.nativeElement.select();\n }\n }\n\n close() {\n this.modal.close();\n }\n\n create() {\n this.readingListService.createList(this.listForm.value.title).subscribe(list => {\n this.addToList(list);\n });\n }\n\n addToList(readingList: ReadingList) {\n\n if (this.type === ADD_FLOW.Multiple_Series && this.seriesIds !== undefined) {\n this.readingListService.updateByMultipleSeries(readingList.id, this.seriesIds).subscribe(() => {\n this.toastr.success(this.translocoService.translate('toasts.series-added-to-reading-list'));\n this.modal.close();\n });\n }\n\n if (this.seriesId === undefined) return;\n\n if (this.type === ADD_FLOW.Series && this.seriesId !== undefined) {\n this.readingListService.updateBySeries(readingList.id, this.seriesId).subscribe(() => {\n this.toastr.success(this.translocoService.translate('toasts.series-added-to-reading-list'));\n this.modal.close();\n });\n } else if (this.type === ADD_FLOW.Volume && this.volumeId !== undefined) {\n this.readingListService.updateByVolume(readingList.id, this.seriesId, this.volumeId).subscribe(() => {\n this.toastr.success(this.translocoService.translate('toasts.volumes-added-to-reading-list'));\n this.modal.close();\n });\n } else if (this.type === ADD_FLOW.Chapter && this.chapterId !== undefined) {\n this.readingListService.updateByChapter(readingList.id, this.seriesId, this.chapterId).subscribe(() => {\n this.toastr.success(this.translocoService.translate('toasts.chapter-added-to-reading-list'));\n this.modal.close();\n });\n } else if (this.type === ADD_FLOW.Multiple && this.volumeIds !== undefined && this.chapterIds !== undefined) {\n this.readingListService.updateByMultiple(readingList.id, this.seriesId, this.volumeIds, this.chapterIds).subscribe(() => {\n this.toastr.success(this.translocoService.translate('toasts.multiple-added-to-reading-list'));\n this.modal.close();\n });\n }\n\n }\n}\n","\n\n
\n

{{t('title', {name: readingList.title})}}

\n \n
\n
\n
    \n
  • \n {{t(TabID.General)}}\n \n
    \n
    \n
    \n \n \n
    \n
    \n {{t('required-field')}}\n
    \n
    \n {{t('name-unique-validation')}}\n
    \n
    \n
    \n \n
    \n
    \n \n \n \n {{t('promote-tooltip')}}\n \n
    \n
    \n
    \n
    \n\n
    \n
    \n
    {{t('starting-title')}}
    \n
    \n \n \n
    \n
    \n {{t('month-validation')}}\n
    \n
    \n
    \n
    \n \n \n
    \n
    \n {{t('year-validation')}}\n
    \n
    \n
    \n
    \n\n
    \n
    {{t('ending-title')}}
    \n
    \n \n \n
    \n
    \n {{t('month-validation')}}\n
    \n
    \n
    \n
    \n \n \n
    \n
    \n {{t('year-validation')}}\n
    \n
    \n
    \n
    \n
    \n\n
    \n \n \n
    \n
    \n
    \n
  • \n
  • \n {{t(TabID.CoverImage)}}\n \n \n \n
  • \n
\n
\n
\n
\n \n \n
\n\n\n\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n inject,\n Input,\n OnInit\n} from '@angular/core';\nimport { FormGroup, FormControl, Validators, ReactiveFormsModule } from '@angular/forms';\nimport { NgbActiveModal, NgbNav, NgbNavItem, NgbNavItemRole, NgbNavLink, NgbNavContent, NgbTooltip, NgbNavOutlet } from '@ng-bootstrap/ng-bootstrap';\nimport { ToastrService } from 'ngx-toastr';\nimport { debounceTime, distinctUntilChanged, forkJoin, switchMap, tap } from 'rxjs';\nimport { Breakpoint, UtilityService } from 'src/app/shared/_services/utility.service';\nimport { ReadingList } from 'src/app/_models/reading-list';\nimport { AccountService } from 'src/app/_services/account.service';\nimport { ImageService } from 'src/app/_services/image.service';\nimport { ReadingListService } from 'src/app/_services/reading-list.service';\nimport { UploadService } from 'src/app/_services/upload.service';\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\nimport { CoverImageChooserComponent } from '../../../cards/cover-image-chooser/cover-image-chooser.component';\nimport { NgIf, NgTemplateOutlet, AsyncPipe } from '@angular/common';\nimport {translate, TranslocoDirective} from \"@ngneat/transloco\";\n\nenum TabID {\n General = 'general-tab',\n CoverImage = 'cover-image-tab'\n}\n\n@Component({\n selector: 'app-edit-reading-list-modal',\n templateUrl: './edit-reading-list-modal.component.html',\n styleUrls: ['./edit-reading-list-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [NgbNav, NgbNavItem, NgbNavItemRole, NgbNavLink, NgbNavContent, ReactiveFormsModule, NgIf, NgbTooltip, NgTemplateOutlet, CoverImageChooserComponent, NgbNavOutlet, AsyncPipe, TranslocoDirective]\n})\nexport class EditReadingListModalComponent implements OnInit {\n\n @Input({required: true}) readingList!: ReadingList;\n private readonly destroyRef = inject(DestroyRef);\n reviewGroup!: FormGroup;\n\n coverImageIndex: number = 0;\n /**\n * Url of the selected cover\n */\n selectedCover: string = '';\n coverImageLocked: boolean = false;\n imageUrls: Array = [];\n active = TabID.General;\n\n get Breakpoint() { return Breakpoint; }\n get TabID() { return TabID; }\n\n constructor(private ngModal: NgbActiveModal, private readingListService: ReadingListService,\n public utilityService: UtilityService, private uploadService: UploadService, private toastr: ToastrService,\n private imageService: ImageService, private readonly cdRef: ChangeDetectorRef, public accountService: AccountService) { }\n\n ngOnInit(): void {\n this.reviewGroup = new FormGroup({\n title: new FormControl(this.readingList.title, { nonNullable: true, validators: [Validators.required] }),\n summary: new FormControl(this.readingList.summary, { nonNullable: true, validators: [] }),\n promoted: new FormControl(this.readingList.promoted, { nonNullable: true, validators: [] }),\n startingMonth: new FormControl(this.readingList.startingMonth, { nonNullable: true, validators: [Validators.min(1), Validators.max(12)] }),\n startingYear: new FormControl(this.readingList.startingYear, { nonNullable: true, validators: [Validators.min(1000)] }),\n endingMonth: new FormControl(this.readingList.endingMonth, { nonNullable: true, validators: [Validators.min(1), Validators.max(12)] }),\n endingYear: new FormControl(this.readingList.endingYear, { nonNullable: true, validators: [Validators.min(1000)] }),\n });\n\n this.coverImageLocked = this.readingList.coverImageLocked;\n\n this.reviewGroup.get('title')?.valueChanges.pipe(\n debounceTime(100),\n distinctUntilChanged(),\n switchMap(name => this.readingListService.nameExists(name)),\n tap(exists => {\n const isExistingName = this.reviewGroup.get('title')?.value === this.readingList.title;\n if (!exists || isExistingName) {\n this.reviewGroup.get('title')?.setErrors(null);\n } else {\n this.reviewGroup.get('title')?.setErrors({duplicateName: true})\n }\n this.cdRef.markForCheck();\n }),\n takeUntilDestroyed(this.destroyRef)\n ).subscribe();\n\n this.imageUrls.push(this.imageService.randomize(this.imageService.getReadingListCoverImage(this.readingList.id)));\n if (!this.readingList.items || this.readingList.items.length === 0) {\n this.readingListService.getListItems(this.readingList.id).subscribe(items => {\n this.imageUrls.push(...(items).map(rli => this.imageService.getChapterCoverImage(rli.chapterId)));\n });\n } else {\n this.imageUrls.push(...(this.readingList.items).map(rli => this.imageService.getChapterCoverImage(rli.chapterId)));\n }\n }\n\n close() {\n this.ngModal.dismiss(undefined);\n }\n\n save() {\n if (this.reviewGroup.value.title.trim() === '') return;\n\n const model = {...this.reviewGroup.value, readingListId: this.readingList.id, coverImageLocked: this.coverImageLocked};\n model.startingMonth = model.startingMonth || 0;\n model.startingYear = model.startingYear || 0;\n model.endingMonth = model.endingMonth || 0;\n model.endingYear = model.endingYear || 0;\n const apis = [this.readingListService.update(model)];\n\n if (this.selectedCover !== '') {\n apis.push(this.uploadService.updateReadingListCoverImage(this.readingList.id, this.selectedCover))\n }\n\n forkJoin(apis).subscribe(results => {\n this.readingList.title = model.title;\n this.readingList.summary = model.summary;\n this.readingList.coverImageLocked = this.coverImageLocked;\n this.readingList.promoted = model.promoted;\n this.ngModal.close(this.readingList);\n this.toastr.success(translate('toasts.reading-list-updated'));\n });\n }\n\n updateSelectedIndex(index: number) {\n this.coverImageIndex = index;\n this.cdRef.detectChanges();\n }\n\n updateSelectedImage(url: string) {\n this.selectedCover = url;\n }\n\n handleReset() {\n this.coverImageLocked = false;\n }\n\n}\n","export enum CblImportResult {\n Fail = 0,\n Partial = 1,\n Success = 2\n}","\n
\n
    \n \n
  • \n
    \n {{step.title}}\n
  • \n
    \n
\n
","import { Component, Input, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';\nimport {CommonModule} from \"@angular/common\";\n\n\nexport interface TimelineStep {\n title: string;\n active: boolean;\n icon: string;\n index: number;\n}\n\n\n@Component({\n selector: 'app-step-tracker',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './step-tracker.component.html',\n styleUrls: ['./step-tracker.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class StepTrackerComponent {\n @Input() steps: Array = [];\n @Input() currentStep: number = 0;\n\n\n constructor(private readonly cdRef: ChangeDetectorRef) {}\n\n}\n","export enum CblImportReason {\n ChapterMissing = 0,\n VolumeMissing = 1,\n SeriesMissing = 2,\n NameConflict = 3,\n AllSeriesMissing = 4,\n EmptyFile = 5,\n SeriesCollision = 6,\n AllChapterMissing = 7,\n Success = 8,\n InvalidFile = 9\n}","import {inject, Pipe, PipeTransform} from '@angular/core';\nimport { CblBookResult } from 'src/app/_models/reading-list/cbl/cbl-book-result';\nimport { CblImportReason } from 'src/app/_models/reading-list/cbl/cbl-import-reason.enum';\nimport {TranslocoService} from \"@ngneat/transloco\";\n\nconst failIcon = '';\nconst successIcon = '';\n\n@Pipe({\n name: 'cblConflictReason',\n standalone: true\n})\nexport class CblConflictReasonPipe implements PipeTransform {\n\n translocoService = inject(TranslocoService);\n\n transform(result: CblBookResult): string {\n switch (result.reason) {\n case CblImportReason.AllSeriesMissing:\n return failIcon + this.translocoService.translate('cbl-conflict-reason-pipe.all-series-missing');\n case CblImportReason.ChapterMissing:\n return failIcon + this.translocoService.translate('cbl-conflict-reason-pipe.chapter-missing', {series: result.series, chapter: result.number});\n case CblImportReason.EmptyFile:\n return failIcon + this.translocoService.translate('cbl-conflict-reason-pipe.empty-file');\n case CblImportReason.NameConflict:\n return failIcon + this.translocoService.translate('cbl-conflict-reason-pipe.chapter-missing', {readingListName: result.readingListName});\n case CblImportReason.SeriesCollision:\n return failIcon + this.translocoService.translate('cbl-conflict-reason-pipe.series-collision', {seriesLink: `${result.series}`});\n case CblImportReason.SeriesMissing:\n return failIcon + this.translocoService.translate('cbl-conflict-reason-pipe.series-missing', {series: result.series});\n case CblImportReason.VolumeMissing:\n return failIcon + this.translocoService.translate('cbl-conflict-reason-pipe.volume-missing', {series: result.series, volume: result.volume});\n case CblImportReason.AllChapterMissing:\n return failIcon + this.translocoService.translate('cbl-conflict-reason-pipe.all-chapter-missing');\n case CblImportReason.Success:\n return successIcon + this.translocoService.translate('cbl-conflict-reason-pipe.volume-missing', {series: result.series, volume: result.volume, chapter: result.number});\n case CblImportReason.InvalidFile:\n return failIcon + this.translocoService.translate('cbl-conflict-reason-pipe.invalid-file');\n }\n }\n\n}\n","import {inject, Pipe, PipeTransform} from '@angular/core';\nimport { CblImportResult } from 'src/app/_models/reading-list/cbl/cbl-import-result.enum';\nimport {TranslocoService} from \"@ngneat/transloco\";\n\n@Pipe({\n name: 'cblImportResult',\n standalone: true\n})\nexport class CblImportResultPipe implements PipeTransform {\n\n translocoService = inject(TranslocoService);\n\n transform(result: CblImportResult): string {\n switch (result) {\n case CblImportResult.Success:\n return this.translocoService.translate('cbl-import-result-pipe.success');\n case CblImportResult.Partial:\n return this.translocoService.translate('cbl-import-result-pipe.partial');\n case CblImportResult.Fail:\n return this.translocoService.translate('cbl-import-result-pipe.failure');\n }\n }\n}\n","\n\n
\n

CBL Import

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

{{t('import-description')}}

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

{{t('validate-description')}}

\n
\n\n \n \n \n \n \n \n\n \n 0; else noValidateIssues\">\n
{{t('validate-warning')}}
\n
    \n
  1. \n
  2. \n
\n
\n \n
\n
\n
\n \n
\n
\n {{t('validate-no-issue')}}\n
\n
\n {{t('validate-no-issue-description')}}\n
\n
\n
\n
\n
\n
\n
\n
\n\n \n
\n

{{t('dry-run-description')}}

\n\n \n \n \n \n \n \n\n \n \n \n \n \n \n
\n
\n\n \n
\n \n \n \n \n \n \n\n \n \n \n \n \n \n
\n
\n
\n\n \n
    \n
  • \n
\n
\n\n \n \n \n {{success}}\n {{success}}\n {{success}}\n \n \n {{filename}}: ({{summary.cblName}})\n \n\n\n
\n
\n Help\n \n \n \n
\n\n\n\n
\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, inject, ViewChild} from '@angular/core';\nimport {FormControl, FormGroup, ReactiveFormsModule} from '@angular/forms';\nimport {FileUploadModule, FileUploadValidators} from '@iplab/ngx-file-upload';\nimport {\n NgbAccordionModule, NgbAccordionToggle,\n NgbActiveModal\n} from '@ng-bootstrap/ng-bootstrap';\nimport { ToastrService } from 'ngx-toastr';\nimport { forkJoin } from 'rxjs';\nimport { Breakpoint, UtilityService } from 'src/app/shared/_services/utility.service';\nimport { CblImportResult } from 'src/app/_models/reading-list/cbl/cbl-import-result.enum';\nimport { CblImportSummary } from 'src/app/_models/reading-list/cbl/cbl-import-summary';\nimport { ReadingListService } from 'src/app/_services/reading-list.service';\nimport {StepTrackerComponent, TimelineStep} from '../../_components/step-tracker/step-tracker.component';\nimport {CommonModule} from \"@angular/common\";\nimport {SafeHtmlPipe} from \"../../../pipe/safe-html.pipe\";\nimport {CblConflictReasonPipe} from \"../../_pipes/cbl-conflict-reason.pipe\";\nimport {CblImportResultPipe} from \"../../_pipes/cbl-import-result.pipe\";\nimport {TranslocoDirective, TranslocoService} from \"@ngneat/transloco\";\n\ninterface FileStep {\n fileName: string;\n validateSummary: CblImportSummary | undefined;\n dryRunSummary: CblImportSummary | undefined;\n finalizeSummary: CblImportSummary | undefined;\n}\n\nenum Step {\n Import = 0,\n Validate = 1,\n DryRun = 2,\n Finalize = 3\n}\n\n@Component({\n selector: 'app-import-cbl-modal',\n standalone: true,\n imports: [CommonModule,\n FileUploadModule,\n NgbAccordionModule,\n SafeHtmlPipe,\n CblConflictReasonPipe, ReactiveFormsModule, StepTrackerComponent, CblImportResultPipe, NgbAccordionToggle, TranslocoDirective],\n templateUrl: './import-cbl-modal.component.html',\n styleUrls: ['./import-cbl-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ImportCblModalComponent {\n\n @ViewChild('fileUpload') fileUpload!: ElementRef;\n\n translocoService = inject(TranslocoService);\n\n fileUploadControl = new FormControl>(undefined, [\n FileUploadValidators.accept(['.cbl']),\n ]);\n\n uploadForm = new FormGroup({\n files: this.fileUploadControl\n });\n\n isLoading: boolean = false;\n\n steps: Array = [\n {title: this.translocoService.translate('import-cbl-modal.import-step'), index: Step.Import, active: true, icon: 'fa-solid fa-file-arrow-up'},\n {title: this.translocoService.translate('import-cbl-modal.validate-cbl-step'), index: Step.Validate, active: false, icon: 'fa-solid fa-spell-check'},\n {title: this.translocoService.translate('import-cbl-modal.dry-run-step'), index: Step.DryRun, active: false, icon: 'fa-solid fa-gears'},\n {title: this.translocoService.translate('import-cbl-final-import.import-step'), index: Step.Finalize, active: false, icon: 'fa-solid fa-floppy-disk'},\n ];\n currentStepIndex = this.steps[0].index;\n\n filesToProcess: Array = [];\n failedFiles: Array = [];\n\n\n get Breakpoint() { return Breakpoint; }\n get Step() { return Step; }\n get CblImportResult() { return CblImportResult; }\n\n get NextButtonLabel() {\n switch(this.currentStepIndex) {\n case Step.DryRun:\n return 'import';\n case Step.Finalize:\n return 'restart'\n default:\n return 'next';\n }\n }\n\n constructor(private ngModal: NgbActiveModal, private readingListService: ReadingListService,\n public utilityService: UtilityService, private readonly cdRef: ChangeDetectorRef,\n private toastr: ToastrService) {}\n\n close() {\n this.ngModal.close();\n }\n\n nextStep() {\n if (this.currentStepIndex === Step.Import && !this.isFileSelected()) return;\n\n this.isLoading = true;\n switch (this.currentStepIndex) {\n case Step.Import:\n const files = this.uploadForm.get('files')?.value;\n if (!files) {\n this.toastr.error(this.translocoService.translate('toasts.select-files-warning'));\n return;\n }\n // Load each file into filesToProcess and group their data\n let pages = [];\n for (let i = 0; i < files.length; i++) {\n const formData = new FormData();\n formData.append('cbl', files[i]);\n formData.append('dryRun', true + '');\n pages.push(this.readingListService.validateCbl(formData));\n }\n forkJoin(pages).subscribe(results => {\n this.filesToProcess = [];\n results.forEach(cblImport => {\n this.filesToProcess.push({\n fileName: cblImport.fileName,\n validateSummary: cblImport,\n dryRunSummary: undefined,\n finalizeSummary: undefined\n });\n });\n\n this.filesToProcess = this.filesToProcess.sort((a, b) => b.validateSummary!.success - a.validateSummary!.success);\n this.cdRef.markForCheck();\n\n this.currentStepIndex++;\n this.isLoading = false;\n this.cdRef.markForCheck();\n });\n break;\n case Step.Validate:\n this.failedFiles = this.filesToProcess.filter(item => item.validateSummary?.success === CblImportResult.Fail);\n this.filesToProcess = this.filesToProcess.filter(item => item.validateSummary?.success != CblImportResult.Fail);\n this.dryRun();\n break;\n case Step.DryRun:\n this.failedFiles.push(...this.filesToProcess.filter(item => item.dryRunSummary?.success === CblImportResult.Fail));\n this.filesToProcess = this.filesToProcess.filter(item => item.dryRunSummary?.success != CblImportResult.Fail);\n this.import();\n break;\n case Step.Finalize:\n // Clear the models and allow user to do another import\n this.uploadForm.get('files')?.setValue(undefined);\n this.currentStepIndex = Step.Import;\n this.isLoading = false;\n this.filesToProcess = [];\n this.failedFiles = [];\n this.cdRef.markForCheck();\n break;\n }\n }\n\n prevStep() {\n if (this.currentStepIndex === Step.Import) return;\n this.currentStepIndex--;\n }\n\n canMoveToNextStep() {\n switch (this.currentStepIndex) {\n case Step.Import:\n return this.isFileSelected();\n case Step.Validate:\n return this.filesToProcess.filter(item => item.validateSummary?.success != CblImportResult.Fail).length > 0;\n case Step.DryRun:\n return this.filesToProcess.filter(item => item.dryRunSummary?.success != CblImportResult.Fail).length > 0;\n case Step.Finalize:\n return true;\n default:\n return false;\n }\n }\n\n canMoveToPrevStep() {\n switch (this.currentStepIndex) {\n case Step.Import:\n case Step.Finalize:\n return false;\n default:\n return true;\n }\n }\n\n\n isFileSelected() {\n const files = this.uploadForm.get('files')?.value;\n if (files) return files.length > 0;\n return false;\n }\n\n\n dryRun() {\n const filenamesAllowedToProcess = this.filesToProcess.map(p => p.fileName);\n const files = (this.uploadForm.get('files')?.value || []).filter(f => filenamesAllowedToProcess.includes(f.name));\n\n let pages = [];\n for (let i = 0; i < files.length; i++) {\n const formData = new FormData();\n formData.append('cbl', files[i]);\n formData.append('dryRun', 'true');\n pages.push(this.readingListService.importCbl(formData));\n }\n forkJoin(pages).subscribe(results => {\n results.forEach(cblImport => {\n const index = this.filesToProcess.findIndex(p => p.fileName === cblImport.fileName);\n this.filesToProcess[index].dryRunSummary = cblImport;\n });\n this.filesToProcess = this.filesToProcess.sort((a, b) => b.dryRunSummary!.success - a.dryRunSummary!.success);\n\n this.isLoading = false;\n this.currentStepIndex++;\n this.cdRef.markForCheck();\n });\n }\n\n import() {\n const filenamesAllowedToProcess = this.filesToProcess.map(p => p.fileName);\n const files = (this.uploadForm.get('files')?.value || []).filter(f => filenamesAllowedToProcess.includes(f.name));\n\n let pages = [];\n for (let i = 0; i < files.length; i++) {\n const formData = new FormData();\n formData.append('cbl', files[i]);\n formData.append('dryRun', 'false');\n pages.push(this.readingListService.importCbl(formData));\n }\n forkJoin(pages).subscribe(results => {\n results.forEach(cblImport => {\n const index = this.filesToProcess.findIndex(p => p.fileName === cblImport.fileName);\n this.filesToProcess[index].finalizeSummary = cblImport;\n });\n\n this.isLoading = false;\n this.currentStepIndex++;\n this.toastr.success(this.translocoService.translate('toasts.reading-list-imported'));\n this.cdRef.markForCheck();\n });\n }\n}\n","import {InjectionToken} from '@angular/core'\nimport { saveAs } from 'file-saver';\n\nexport type Saver = (blob: Blob, filename?: string) => void\n\nexport const SAVER = new InjectionToken('saver')\n\nexport function getSaver(): Saver {\n return saveAs;\n}","import {\n HttpEvent,\n HttpEventType,\n HttpHeaders,\n HttpProgressEvent,\n HttpResponse\n } from \"@angular/common/http\";\n import { Observable } from \"rxjs\";\n import { scan } from \"rxjs/operators\";\n \n function isHttpResponse(event: HttpEvent): event is HttpResponse {\n return event.type === HttpEventType.Response;\n }\n \n function isHttpProgressEvent(\n event: HttpEvent\n ): event is HttpProgressEvent {\n return (\n event.type === HttpEventType.DownloadProgress ||\n event.type === HttpEventType.UploadProgress\n );\n }\n\n/**\n * Encapsulates an inprogress download of a Blob with progress reporting activated\n */ \nexport interface Download {\n content: Blob | null;\n progress: number;\n state: \"PENDING\" | \"IN_PROGRESS\" | \"DONE\";\n filename?: string;\n loaded?: number;\n total?: number\n}\n \nexport function download(saver?: (b: Blob, filename: string) => void): (source: Observable>) => Observable {\n return (source: Observable>) =>\n source.pipe(\n scan((previous: Download, event: HttpEvent): Download => {\n if (isHttpProgressEvent(event)) {\n return {\n progress: event.total\n ? Math.round((100 * event.loaded) / event.total)\n : previous.progress,\n state: 'IN_PROGRESS',\n content: null,\n loaded: event.loaded,\n total: event.total\n }\n }\n if (isHttpResponse(event)) {\n if (saver && event.body) {\n saver(event.body, getFilename(event.headers, ''))\n }\n return {\n progress: 100,\n state: 'DONE',\n content: event.body,\n filename: getFilename(event.headers, ''),\n }\n }\n return previous;\n },\n {state: 'PENDING', progress: 0, content: null}\n )\n )\n }\n\n\nfunction getFilename(headers: HttpHeaders, defaultName: string) {\n const tokens = (headers.get('content-disposition') || '').split(';');\n let filename = tokens[1].replace('filename=', '').replace(/\"/ig, '').trim(); \n if (filename.startsWith('download_') || filename.startsWith('kavita_download_')) {\n const ext = filename.substring(filename.lastIndexOf('.'), filename.length);\n if (defaultName !== '') {\n return defaultName + ext;\n }\n return filename.replace('kavita_', '').replace('download_', '');\n //return defaultName + ext;\n }\n return filename;\n }","import { HttpClient } from '@angular/common/http';\nimport {DestroyRef, inject, Inject, Injectable} from '@angular/core';\nimport { Series } from 'src/app/_models/series';\nimport { environment } from 'src/environments/environment';\nimport { ConfirmService } from '../confirm.service';\nimport { Chapter } from 'src/app/_models/chapter';\nimport { Volume } from 'src/app/_models/volume';\nimport {\n asyncScheduler,\n BehaviorSubject,\n Observable,\n tap,\n finalize,\n of,\n filter,\n} from 'rxjs';\nimport { SAVER, Saver } from '../_providers/saver.provider';\nimport { download, Download } from '../_models/download';\nimport { PageBookmark } from 'src/app/_models/readers/page-bookmark';\nimport {switchMap, take, takeWhile, throttleTime} from 'rxjs/operators';\nimport { AccountService } from 'src/app/_services/account.service';\nimport { BytesPipe } from 'src/app/pipe/bytes.pipe';\nimport {translate} from \"@ngneat/transloco\";\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\n\nexport const DEBOUNCE_TIME = 100;\n\nconst bytesPipe = new BytesPipe();\n\nexport interface DownloadEvent {\n /**\n * Type of entity being downloaded\n */\n entityType: DownloadEntityType;\n /**\n * What to show user. For example, for Series, we might show series name.\n */\n subTitle: string;\n /**\n * Progress of the download itself\n */\n progress: number;\n}\n\n/**\n * Valid entity types for downloading\n */\nexport type DownloadEntityType = 'volume' | 'chapter' | 'series' | 'bookmark' | 'logs';\n/**\n * Valid entities for downloading. Undefined exclusively for logs.\n */\nexport type DownloadEntity = Series | Volume | Chapter | PageBookmark[] | undefined;\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DownloadService {\n\n private baseUrl = environment.apiUrl;\n /**\n * Size in bytes in which to inform the user for confirmation before download starts. Defaults to 100 MB.\n */\n public SIZE_WARNING = 104_857_600;\n\n private downloadsSource: BehaviorSubject = new BehaviorSubject([]);\n public activeDownloads$ = this.downloadsSource.asObservable();\n\n private readonly destroyRef = inject(DestroyRef);\n\n constructor(private httpClient: HttpClient, private confirmService: ConfirmService,\n @Inject(SAVER) private save: Saver, private accountService: AccountService) { }\n\n\n /**\n * Returns the entity subtitle (for the event widget) for a given entity\n * @param downloadEntityType\n * @param downloadEntity\n * @returns\n */\n downloadSubtitle(downloadEntityType: DownloadEntityType, downloadEntity: DownloadEntity | undefined) {\n switch (downloadEntityType) {\n case 'series':\n return (downloadEntity as Series).name;\n case 'volume':\n return (downloadEntity as Volume).number + '';\n case 'chapter':\n return (downloadEntity as Chapter).number;\n case 'bookmark':\n return '';\n case 'logs':\n return '';\n }\n }\n\n /**\n * Downloads the entity to the user's system. This handles everything around downloads. This will prompt the user based on size checks and UserPreferences.PromptForDownload.\n * This will perform the download at a global level, if you need a handle to the download in question, use downloadService.activeDownloads$ and perform a filter on it.\n * @param entityType\n * @param entity\n * @param callback Optional callback. Returns the download or undefined (if the download is complete).\n */\n download(entityType: DownloadEntityType, entity: DownloadEntity, callback?: (d: Download | undefined) => void) {\n let sizeCheckCall: Observable;\n let downloadCall: Observable;\n switch (entityType) {\n case 'series':\n sizeCheckCall = this.downloadSeriesSize((entity as Series).id);\n downloadCall = this.downloadSeries(entity as Series);\n break;\n case 'volume':\n sizeCheckCall = this.downloadVolumeSize((entity as Volume).id);\n downloadCall = this.downloadVolume(entity as Volume);\n break;\n case 'chapter':\n sizeCheckCall = this.downloadChapterSize((entity as Chapter).id);\n downloadCall = this.downloadChapter(entity as Chapter);\n break;\n case 'bookmark':\n sizeCheckCall = of(0);\n downloadCall = this.downloadBookmarks(entity as PageBookmark[]);\n break;\n case 'logs':\n sizeCheckCall = of(0);\n downloadCall = this.downloadLogs();\n break;\n default:\n return;\n }\n\n\n this.accountService.currentUser$.pipe(take(1), switchMap(user => {\n if (user && user.preferences.promptForDownloadSize) {\n return sizeCheckCall;\n }\n return of(0);\n }), switchMap(async (size) => {\n return await this.confirmSize(size, entityType);\n })\n ).pipe(filter(wantsToDownload => {\n return wantsToDownload;\n }), switchMap(() => {\n return downloadCall.pipe(\n tap((d) => {\n if (callback) callback(d);\n }),\n takeWhile((val: Download) => {\n return val.state != 'DONE';\n }),\n finalize(() => {\n if (callback) callback(undefined);\n }))\n }), takeUntilDestroyed(this.destroyRef)\n ).subscribe(() => {});\n }\n\n private downloadSeriesSize(seriesId: number) {\n return this.httpClient.get(this.baseUrl + 'download/series-size?seriesId=' + seriesId);\n }\n\n private downloadVolumeSize(volumeId: number) {\n return this.httpClient.get(this.baseUrl + 'download/volume-size?volumeId=' + volumeId);\n }\n\n private downloadChapterSize(chapterId: number) {\n return this.httpClient.get(this.baseUrl + 'download/chapter-size?chapterId=' + chapterId);\n }\n\n private downloadLogs() {\n const downloadType = 'logs';\n const subtitle = this.downloadSubtitle(downloadType, undefined);\n return this.httpClient.get(this.baseUrl + 'server/logs',\n {observe: 'events', responseType: 'blob', reportProgress: true}\n ).pipe(\n throttleTime(DEBOUNCE_TIME, asyncScheduler, { leading: true, trailing: true }),\n download((blob, filename) => {\n this.save(blob, decodeURIComponent(filename));\n }),\n tap((d) => this.updateDownloadState(d, downloadType, subtitle)),\n finalize(() => this.finalizeDownloadState(downloadType, subtitle))\n );\n }\n\n private downloadSeries(series: Series) {\n const downloadType = 'series';\n const subtitle = this.downloadSubtitle(downloadType, series);\n return this.httpClient.get(this.baseUrl + 'download/series?seriesId=' + series.id,\n {observe: 'events', responseType: 'blob', reportProgress: true}\n ).pipe(\n throttleTime(DEBOUNCE_TIME, asyncScheduler, { leading: true, trailing: true }),\n download((blob, filename) => {\n this.save(blob, decodeURIComponent(filename));\n }),\n tap((d) => this.updateDownloadState(d, downloadType, subtitle)),\n finalize(() => this.finalizeDownloadState(downloadType, subtitle))\n );\n }\n\n private finalizeDownloadState(entityType: DownloadEntityType, entitySubtitle: string) {\n let values = this.downloadsSource.getValue();\n values = values.filter(v => !(v.entityType === entityType && v.subTitle === entitySubtitle));\n this.downloadsSource.next(values);\n }\n\n private updateDownloadState(d: Download, entityType: DownloadEntityType, entitySubtitle: string) {\n let values = this.downloadsSource.getValue();\n if (d.state === 'PENDING') {\n const index = values.findIndex(v => v.entityType === entityType && v.subTitle === entitySubtitle);\n if (index >= 0) return; // Don't let us duplicate add\n values.push({entityType: entityType, subTitle: entitySubtitle, progress: 0});\n } else if (d.state === 'IN_PROGRESS') {\n const index = values.findIndex(v => v.entityType === entityType && v.subTitle === entitySubtitle);\n if (index >= 0) {\n values[index].progress = d.progress;\n }\n } else if (d.state === 'DONE') {\n values = values.filter(v => !(v.entityType === entityType && v.subTitle === entitySubtitle));\n }\n this.downloadsSource.next(values);\n\n }\n\n private downloadChapter(chapter: Chapter) {\n const downloadType = 'chapter';\n const subtitle = this.downloadSubtitle(downloadType, chapter);\n return this.httpClient.get(this.baseUrl + 'download/chapter?chapterId=' + chapter.id,\n {observe: 'events', responseType: 'blob', reportProgress: true}\n ).pipe(\n throttleTime(DEBOUNCE_TIME, asyncScheduler, { leading: true, trailing: true }),\n download((blob, filename) => {\n this.save(blob, decodeURIComponent(filename));\n }),\n tap((d) => this.updateDownloadState(d, downloadType, subtitle)),\n finalize(() => this.finalizeDownloadState(downloadType, subtitle))\n );\n }\n\n private downloadVolume(volume: Volume): Observable {\n const downloadType = 'volume';\n const subtitle = this.downloadSubtitle(downloadType, volume);\n return this.httpClient.get(this.baseUrl + 'download/volume?volumeId=' + volume.id,\n {observe: 'events', responseType: 'blob', reportProgress: true}\n ).pipe(\n throttleTime(DEBOUNCE_TIME, asyncScheduler, { leading: true, trailing: true }),\n download((blob, filename) => {\n this.save(blob, decodeURIComponent(filename));\n }),\n tap((d) => this.updateDownloadState(d, downloadType, subtitle)),\n finalize(() => this.finalizeDownloadState(downloadType, subtitle))\n );\n }\n\n private async confirmSize(size: number, entityType: DownloadEntityType) {\n return (size < this.SIZE_WARNING ||\n await this.confirmService.confirm(translate('toasts.confirm-download-size', {entityType: 'entity-type.' + entityType, size: bytesPipe.transform(size)})));\n }\n\n private downloadBookmarks(bookmarks: PageBookmark[]) {\n const downloadType = 'bookmark';\n const subtitle = this.downloadSubtitle(downloadType, bookmarks);\n\n return this.httpClient.post(this.baseUrl + 'download/bookmarks', {bookmarks},\n {observe: 'events', responseType: 'blob', reportProgress: true}\n ).pipe(\n throttleTime(DEBOUNCE_TIME, asyncScheduler, { leading: true, trailing: true }),\n download((blob, filename) => {\n this.save(blob, decodeURIComponent(filename));\n }),\n tap((d) => this.updateDownloadState(d, downloadType, subtitle)),\n finalize(() => this.finalizeDownloadState(downloadType, subtitle))\n );\n }\n}\n","import {Injectable} from '@angular/core';\nimport {ActivatedRouteSnapshot, Params, Router} from '@angular/router';\nimport {Pagination} from 'src/app/_models/pagination';\nimport {SortField, SortOptions} from 'src/app/_models/metadata/series-filter';\nimport {MetadataService} from \"../../_services/metadata.service\";\nimport {SeriesFilterV2} from \"../../_models/metadata/v2/series-filter-v2\";\nimport {FilterStatement} from \"../../_models/metadata/v2/filter-statement\";\nimport {FilterCombination} from \"../../_models/metadata/v2/filter-combination\";\nimport {FilterField} from \"../../_models/metadata/v2/filter-field\";\nimport {FilterComparison} from \"../../_models/metadata/v2/filter-comparison\";\n\nconst sortOptionsKey = 'sortOptions=';\nconst statementsKey = 'stmts=';\nconst limitToKey = 'limitTo=';\nconst combinationKey = 'combination=';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FilterUtilitiesService {\n\n constructor(private metadataService: MetadataService, private router: Router) {}\n\n applyFilter(page: Array, filter: FilterField, comparison: FilterComparison, value: string) {\n const dto: SeriesFilterV2 = {\n statements: [this.metadataService.createDefaultFilterStatement(filter, comparison, value + '')],\n combination: FilterCombination.Or,\n limitTo: 0\n };\n\n const url = this.urlFromFilterV2(page.join('/') + '?', dto);\n return this.router.navigateByUrl(url);\n }\n\n applyFilterWithParams(page: Array, filter: SeriesFilterV2, extraParams: Params) {\n let url = this.urlFromFilterV2(page.join('/') + '?', filter);\n url += Object.keys(extraParams).map(k => `&${k}=${extraParams[k]}`).join('');\n return this.router.navigateByUrl(url, extraParams);\n }\n\n /**\n * Updates the window location with a custom url based on filter and pagination objects\n * @param pagination\n * @param filter\n */\n updateUrlFromFilterV2(pagination: Pagination, filter: SeriesFilterV2 | undefined) {\n const params = '?page=' + pagination.currentPage + '&';\n\n const url = this.urlFromFilterV2(window.location.href.split('?')[0] + params, filter);\n window.history.replaceState(window.location.href, '', this.replacePaginationOnUrl(url, pagination));\n }\n\n\n private replacePaginationOnUrl(url: string, pagination: Pagination) {\n return url.replace(/page=\\d+/i, 'page=' + pagination.currentPage);\n }\n\n /**\n * Will fetch current page from route if present\n * @param snapshot to fetch page from. Must be from component else may get stale data\n * @param itemsPerPage If you want pagination, pass non-zero number\n * @returns A default pagination object\n */\n pagination(snapshot: ActivatedRouteSnapshot, itemsPerPage: number = 0): Pagination {\n return {currentPage: parseInt(snapshot.queryParamMap.get('page') || '1', 10), itemsPerPage, totalItems: 0, totalPages: 1};\n }\n\n\n /**\n * Returns the current url with query params for the filter\n * @param currentUrl Full url, with ?page=1 as a minimum\n * @param filter Filter to build url off\n * @returns current url with query params added\n */\n urlFromFilterV2(currentUrl: string, filter: SeriesFilterV2 | undefined) {\n if (filter === undefined) return currentUrl;\n\n return currentUrl + this.encodeSeriesFilter(filter);\n }\n\n encodeSeriesFilter(filter: SeriesFilterV2) {\n const encodedStatements = this.encodeFilterStatements(filter.statements);\n const encodedSortOptions = filter.sortOptions ? `${sortOptionsKey}${this.encodeSortOptions(filter.sortOptions)}` : '';\n const encodedLimitTo = `${limitToKey}${filter.limitTo}`;\n\n return `${this.encodeName(filter.name)}${encodedStatements}&${encodedSortOptions}&${encodedLimitTo}&${combinationKey}${filter.combination}`;\n }\n\n encodeName(name: string | undefined) {\n if (name === undefined || name === '') return '';\n return `name=${encodeURIComponent(name)}&`\n }\n\n\n encodeSortOptions(sortOptions: SortOptions) {\n return `sortField=${sortOptions.sortField}&isAscending=${sortOptions.isAscending}`;\n }\n\n encodeFilterStatements(statements: Array) {\n if (statements.length === 0) return '';\n return statementsKey + encodeURIComponent(statements.map(statement => {\n const encodedComparison = `comparison=${statement.comparison}`;\n const encodedField = `field=${statement.field}`;\n const encodedValue = `value=${encodeURIComponent(statement.value)}`;\n\n return `${encodedComparison}&${encodedField}&${encodedValue}`;\n }).join(','));\n }\n\n filterPresetsFromUrlV2(snapshot: ActivatedRouteSnapshot): SeriesFilterV2 {\n const filter = this.metadataService.createDefaultFilterDto();\n if (!window.location.href.includes('?')) return filter;\n\n const queryParams = snapshot.queryParams;\n\n if (queryParams.name) {\n filter.name = queryParams.name;\n }\n\n const fullUrl = window.location.href.split('?')[1];\n const stmtsStartIndex = fullUrl.indexOf(statementsKey);\n let endIndex = fullUrl.indexOf('&' + sortOptionsKey);\n if (endIndex < 0) {\n endIndex = fullUrl.indexOf('&' + limitToKey);\n }\n\n if (stmtsStartIndex !== -1 || endIndex !== -1) {\n // +1 is for the =\n const stmtsEncoded = fullUrl.substring(stmtsStartIndex + statementsKey.length, endIndex);\n filter.statements = this.decodeFilterStatements(stmtsEncoded);\n }\n\n if (queryParams.sortOptions) {\n const optionsStartIndex = fullUrl.indexOf('&' + sortOptionsKey);\n const endIndex = fullUrl.indexOf('&' + limitToKey);\n const sortOptionsEncoded = fullUrl.substring(optionsStartIndex + sortOptionsKey.length + 1, endIndex);\n const sortOptions = this.decodeSortOptions(sortOptionsEncoded);\n if (sortOptions) {\n filter.sortOptions = sortOptions;\n }\n }\n\n if (queryParams.limitTo) {\n filter.limitTo = parseInt(queryParams.limitTo, 10);\n }\n\n if (queryParams.combination) {\n filter.combination = parseInt(queryParams.combination, 10) as FilterCombination;\n }\n\n return filter;\n }\n\n decodeSortOptions(encodedSortOptions: string): SortOptions | null {\n const parts = decodeURIComponent(encodedSortOptions).split('&');\n const sortFieldPart = parts.find(part => part.startsWith('sortField='));\n const isAscendingPart = parts.find(part => part.startsWith('isAscending='));\n\n if (sortFieldPart && isAscendingPart) {\n const sortField = parseInt(sortFieldPart.split('=')[1], 10) as SortField;\n const isAscending = isAscendingPart.split('=')[1] === 'true';\n return {sortField, isAscending};\n }\n\n return null;\n }\n\n decodeFilterStatements(encodedStatements: string): FilterStatement[] {\n const statementStrings = decodeURIComponent(encodedStatements).split(',');\n return statementStrings.map(statementString => {\n const parts = statementString.split('&');\n if (parts === null || parts.length < 3) return null;\n\n const comparisonStartToken = parts.find(part => part.startsWith('comparison='));\n if (!comparisonStartToken) return null;\n const comparison = parseInt(comparisonStartToken.split('=')[1], 10) as FilterComparison;\n\n const fieldStartToken = parts.find(part => part.startsWith('field='));\n if (!fieldStartToken) return null;\n const field = parseInt(fieldStartToken.split('=')[1], 10) as FilterField;\n\n const valueStartToken = parts.find(part => part.startsWith('value='));\n if (!valueStartToken) return null;\n const value = decodeURIComponent(valueStartToken.split('=')[1]);\n return {comparison, field, value};\n }).filter(o => o != null) as FilterStatement[];\n }\n\n createSeriesV2Filter(): SeriesFilterV2 {\n return {\n combination: FilterCombination.And,\n statements: [],\n limitTo: 0,\n sortOptions: {\n isAscending: true,\n sortField: SortField.SortName\n },\n };\n }\n\n createSeriesV2DefaultStatement(): FilterStatement {\n return {\n comparison: FilterComparison.Equal,\n value: '',\n field: FilterField.SeriesName\n }\n }\n\n}\n","import { HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Chapter } from 'src/app/_models/chapter';\nimport { LibraryType } from 'src/app/_models/library';\nimport { MangaFormat } from 'src/app/_models/manga-format';\nimport { PaginatedResult } from 'src/app/_models/pagination';\nimport { Series } from 'src/app/_models/series';\nimport { Volume } from 'src/app/_models/volume';\nimport {TranslocoService} from \"@ngneat/transloco\";\n\nexport enum KEY_CODES {\n RIGHT_ARROW = 'ArrowRight',\n LEFT_ARROW = 'ArrowLeft',\n DOWN_ARROW = 'ArrowDown',\n UP_ARROW = 'ArrowUp',\n ESC_KEY = 'Escape',\n SPACE = ' ',\n ENTER = 'Enter',\n G = 'g',\n B = 'b',\n F = 'f',\n H = 'h',\n BACKSPACE = 'Backspace',\n DELETE = 'Delete',\n SHIFT = 'Shift'\n}\n\nexport enum Breakpoint {\n Mobile = 768,\n Tablet = 1280,\n Desktop = 1440\n}\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UtilityService {\n\n mangaFormatKeys: string[] = [];\n\n constructor(private translocoService: TranslocoService) { }\n\n\n sortChapters = (a: Chapter, b: Chapter) => {\n return parseFloat(a.number) - parseFloat(b.number);\n }\n\n mangaFormatToText(format: MangaFormat): string {\n if (this.mangaFormatKeys === undefined || this.mangaFormatKeys.length === 0) {\n this.mangaFormatKeys = Object.keys(MangaFormat);\n }\n\n return this.mangaFormatKeys.filter(item => MangaFormat[format] === item)[0];\n }\n\n /**\n * Formats a Chapter name based on the library it's in\n * @param libraryType\n * @param includeHash For comics only, includes a # which is used for numbering on cards\n * @param includeSpace Add a space at the end of the string. if includeHash and includeSpace are true, only hash will be at the end.\n * @returns\n */\n formatChapterName(libraryType: LibraryType, includeHash: boolean = false, includeSpace: boolean = false) {\n switch(libraryType) {\n case LibraryType.Book:\n return this.translocoService.translate('common.book-num') + (includeSpace ? ' ' : '');\n case LibraryType.Comic:\n if (includeHash) {\n return this.translocoService.translate('common.issue-hash-num');\n }\n return this.translocoService.translate('common.issue-num') + (includeSpace ? ' ' : '');\n case LibraryType.Manga:\n return this.translocoService.translate('common.chapter-num') + (includeSpace ? ' ' : '');\n }\n }\n\n\n filter(input: string, filter: string): boolean {\n if (input === null || filter === null || input === undefined || filter === undefined) return false;\n const reg = /[_\\.\\-]/gi;\n return input.toUpperCase().replace(reg, '').includes(filter.toUpperCase().replace(reg, ''));\n }\n\n filterMatches(input: string, filter: string): boolean {\n if (input === null || filter === null || input === undefined || filter === undefined) return false;\n const reg = /[_\\.\\-]/gi;\n return input.toUpperCase().replace(reg, '') === filter.toUpperCase().replace(reg, '');\n }\n\n isVolume(d: any) {\n return d != null && d.hasOwnProperty('chapters');\n }\n\n isChapter(d: any) {\n return d != null && d.hasOwnProperty('volumeId');\n }\n\n isSeries(d: any) {\n return d != null && d.hasOwnProperty('originalName');\n }\n\n asVolume(d: any) {\n return d;\n }\n\n asChapter(d: any) {\n return d;\n }\n\n asSeries(d: any) {\n return d;\n }\n\n getActiveBreakpoint(): Breakpoint {\n if (window.innerWidth <= Breakpoint.Mobile) return Breakpoint.Mobile;\n else if (window.innerWidth > Breakpoint.Mobile && window.innerWidth <= Breakpoint.Tablet) return Breakpoint.Tablet;\n else if (window.innerWidth > Breakpoint.Tablet) return Breakpoint.Desktop\n\n return Breakpoint.Desktop;\n }\n\n isInViewport(element: Element, additionalTopOffset: number = 0) {\n const rect = element.getBoundingClientRect();\n return (\n rect.top >= additionalTopOffset &&\n rect.left >= 0 &&\n rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth)\n );\n }\n\n deepEqual(object1: any, object2: any) {\n if ((object1 === null || object1 === undefined) && (object2 !== null || object2 !== undefined)) return false;\n if ((object2 === null || object2 === undefined) && (object1 !== null || object1 !== undefined)) return false;\n if (object1 === null && object2 === null) return true;\n if (object1 === undefined && object2 === undefined) return true;\n\n\n const keys1 = Object.keys(object1);\n const keys2 = Object.keys(object2);\n if (keys1.length !== keys2.length) {\n return false;\n }\n for (const key of keys1) {\n const val1 = object1[key];\n const val2 = object2[key];\n const areObjects = this.isObject(val1) && this.isObject(val2);\n if (\n areObjects && !this.deepEqual(val1, val2) ||\n !areObjects && val1 !== val2\n ) {\n return false;\n }\n }\n return true;\n }\n\n private isObject(object: any) {\n return object != null && typeof object === 'object';\n }\n\n addPaginationIfExists(params: HttpParams, pageNum?: number, itemsPerPage?: number) {\n if (pageNum !== null && pageNum !== undefined && itemsPerPage !== null && itemsPerPage !== undefined) {\n params = params.append('pageNumber', pageNum + '');\n params = params.append('pageSize', itemsPerPage + '');\n }\n return params;\n }\n\n createPaginatedResult(response: any, paginatedVariable: PaginatedResult | undefined = undefined) {\n if (paginatedVariable === undefined) {\n paginatedVariable = new PaginatedResult();\n }\n if (response.body === null) {\n paginatedVariable.result = [];\n } else {\n paginatedVariable.result = response.body;\n }\n\n const pageHeader = response.headers?.get('Pagination');\n if (pageHeader !== null) {\n paginatedVariable.pagination = JSON.parse(pageHeader);\n }\n\n return paginatedVariable;\n }\n\n getWindowDimensions() {\n const windowWidth = window.innerWidth\n || document.documentElement.clientWidth\n || document.body.clientWidth;\n const windowHeight = window.innerHeight\n || document.documentElement.clientHeight\n || document.body.clientHeight;\n return [windowWidth, windowHeight];\n }\n}\n"," 0\">\n
\n \n
\n
\n \n
\n
\n","import {ChangeDetectionStrategy, Component, Input} from '@angular/core';\nimport {CommonModule} from \"@angular/common\";\nimport {NgCircleProgressModule } from \"ng-circle-progress\";\n\n@Component({\n selector: 'app-circular-loader',\n standalone: true,\n imports: [CommonModule, NgCircleProgressModule],\n // providers: [\n // importProvidersFrom(NgCircleProgressModule),\n // ],\n templateUrl: './circular-loader.component.html',\n styleUrls: ['./circular-loader.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CircularLoaderComponent {\n\n @Input() currentValue: number = 0;\n /**\n * If an animation should be used\n */\n @Input() animation: boolean = true;\n /**\n * Color of an inner bar\n */\n @Input() innerStrokeColor: string = 'transparent';\n /**\n * Color of the Downloader bar\n */\n @Input() outerStrokeColor: string = '#4ac694';\n @Input() backgroundColor: string = '#000';\n @Input() fontSize: string = '36px';\n /**\n * Show the icon inside the downloader\n */\n @Input() showIcon: boolean = true;\n /**\n * The width in pixels of the loader\n */\n @Input() width: string = '100px';\n /**\n * The height in pixels of the loader\n */\n @Input() height: string = '100px';\n /**\n * Centers the icon in the middle of the loader. Best for card use.\n */\n @Input() center: boolean = true;\n}\n","import { ConfirmButton } from './confirm-button';\n\nexport class ConfirmConfig {\n _type: string = 'confirm'; // internal only: confirm or alert (todo: use enum)\n header: string = 'Confirm';\n content: string = '';\n buttons: Array = [];\n /**\n * If the close button shouldn't be rendered\n */\n disableEscape: boolean = false;\n}\n","\n
\n

{{config.header}}

\n \n
\n
\n
\n
\n
\n \n
\n
\n\n
\n","import { Component, OnInit } from '@angular/core';\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';\nimport { ConfirmButton } from './_models/confirm-button';\nimport { ConfirmConfig } from './_models/confirm-config';\nimport {CommonModule} from \"@angular/common\";\nimport {SafeHtmlPipe} from \"../../pipe/safe-html.pipe\";\nimport {TranslocoDirective} from \"@ngneat/transloco\";\n\n@Component({\n selector: 'app-confirm-dialog',\n standalone: true,\n imports: [CommonModule, SafeHtmlPipe, TranslocoDirective],\n templateUrl: './confirm-dialog.component.html',\n styleUrls: ['./confirm-dialog.component.scss']\n})\nexport class ConfirmDialogComponent implements OnInit {\n\n config!: ConfirmConfig;\n\n constructor(public modal: NgbActiveModal) {}\n\n ngOnInit(): void {\n if (this.config) {\n this.config.buttons.sort(this._button_sort);\n }\n }\n\n private _button_sort(x: ConfirmButton, y: ConfirmButton) {\n const xIsSecondary = x.type === 'secondary';\n const yIsSecondary = y.type === 'secondary';\n if (xIsSecondary && !yIsSecondary) {\n return -1;\n } else if (!xIsSecondary && yIsSecondary) {\n return 1;\n }\n return 0;\n }\n\n clickButton(button: ConfirmButton) {\n this.modal.close(button.type === 'primary');\n }\n\n close() {\n this.modal.close(false);\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\nimport { take } from 'rxjs/operators';\nimport { ConfirmDialogComponent } from './confirm-dialog/confirm-dialog.component';\nimport { ConfirmConfig } from './confirm-dialog/_models/confirm-config';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ConfirmService {\n\n defaultConfirm = new ConfirmConfig();\n defaultAlert = new ConfirmConfig();\n\n constructor(private modalService: NgbModal) {\n this.defaultConfirm.buttons.push({text: 'Cancel', type: 'secondary'});\n this.defaultConfirm.buttons.push({text: 'Confirm', type: 'primary'});\n\n this.defaultAlert._type = 'alert';\n this.defaultAlert.header = 'Alert';\n this.defaultAlert.buttons.push({text: 'Ok', type: 'primary'});\n\n }\n\n public async confirm(content?: string, config?: ConfirmConfig): Promise {\n\n return new Promise((resolve, reject) => {\n if (content === undefined && config === undefined) {\n console.error('Confirm must have either text or a config object passed');\n return reject(false);\n }\n\n if (content !== undefined && config === undefined) {\n config = this.defaultConfirm;\n config.content = content;\n }\n if (content !== undefined && content !== '' && config!.content === '') {\n config!.content = content;\n }\n\n const modalRef = this.modalService.open(ConfirmDialogComponent);\n modalRef.componentInstance.config = config;\n modalRef.closed.pipe(take(1)).subscribe(result => {\n return resolve(result);\n });\n modalRef.dismissed.pipe(take(1)).subscribe(() => {\n return resolve(false);\n });\n });\n\n }\n\n public async alert(content?: string, config?: ConfirmConfig): Promise {\n return new Promise((resolve, reject) => {\n if (content === undefined && config === undefined) {\n console.error('Alert must have either text or a config object passed');\n return reject(false);\n }\n\n if (content !== undefined && config === undefined) {\n config = this.defaultConfirm;\n config.content = content;\n }\n\n const modalRef = this.modalService.open(ConfirmDialogComponent);\n modalRef.componentInstance.config = config;\n modalRef.closed.pipe(take(1)).subscribe(result => {\n return resolve(result);\n });\n modalRef.dismissed.pipe(take(1)).subscribe(() => {\n return resolve(false);\n });\n })\n }\n}\n","export class Stack {\n items: T[];\n \n constructor() {\n this.items = [];\n }\n \n isEmpty() {\n return this.items.length === 0;\n }\n \n peek() {\n if (!this.isEmpty()) {\n return this.items[this.items.length - 1];\n }\n return undefined;\n }\n \n pop() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items.pop();\n }\n \n push(item: T) {\n this.items.push(item);\n }\n }","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component, DestroyRef,\n ElementRef,\n inject,\n Input,\n OnChanges,\n Renderer2,\n ViewChild\n} from '@angular/core';\nimport { CoverUpdateEvent } from 'src/app/_models/events/cover-update-event';\nimport { ImageService } from 'src/app/_services/image.service';\nimport { EVENTS, MessageHubService } from 'src/app/_services/message-hub.service';\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\nimport {CommonModule} from \"@angular/common\";\n\n/**\n * This is used for images with placeholder fallback.\n */\n@Component({\n selector: 'app-image',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './image.component.html',\n styleUrls: ['./image.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ImageComponent implements OnChanges {\n\n /**\n * Source url to load image\n */\n @Input({required: true}) imageUrl!: string;\n /**\n * Width of the image. If not defined, will not be applied\n */\n @Input() width: string = '';\n /**\n * Height of the image. If not defined, will not be applied\n */\n @Input() height: string = '';\n /**\n * Max Width of the image. If not defined, will not be applied\n */\n @Input() maxWidth: string = '';\n /**\n * Max Height of the image. If not defined, will not be applied\n */\n @Input() maxHeight: string = '';\n /**\n * Border Radius of the image. If not defined, will not be applied\n */\n @Input() borderRadius: string = '';\n /**\n * Object fit of the image. If not defined, will not be applied\n */\n @Input() objectFit: string = '';\n /**\n * Background of the image. If not defined, will not be applied\n */\n @Input() background: string = '';\n /**\n * If the image component should respond to cover updates\n */\n @Input() processEvents: boolean = true;\n\n @ViewChild('img', {static: true}) imgElem!: ElementRef;\n private readonly destroyRef = inject(DestroyRef);\n\n constructor(public imageService: ImageService, private renderer: Renderer2, private hubService: MessageHubService, private changeDetectionRef: ChangeDetectorRef) {\n this.hubService.messages$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(res => {\n if (!this.processEvents) return;\n if (res.event === EVENTS.CoverUpdate) {\n const updateEvent = res.payload as CoverUpdateEvent;\n if (this.imageUrl === undefined || this.imageUrl === null || this.imageUrl === '') return;\n const entityType = this.imageService.getEntityTypeFromUrl(this.imageUrl);\n if (entityType === updateEvent.entityType) {\n const tokens = this.imageUrl.split('?')[1].split('&');\n\n //...seriesId=123&random=\n let id = tokens[0].replace(entityType + 'Id=', '');\n if (id.includes('&')) {\n id = id.split('&')[0];\n }\n if (id === (updateEvent.id + '')) {\n this.imageUrl = this.imageService.randomize(this.imageUrl);\n this.changeDetectionRef.markForCheck();\n }\n }\n }\n });\n }\n\n ngOnChanges(): void {\n if (this.width != '') {\n this.renderer.setStyle(this.imgElem.nativeElement, 'width', this.width);\n }\n\n if (this.height != '') {\n this.renderer.setStyle(this.imgElem.nativeElement, 'height', this.height);\n }\n\n if (this.maxWidth != '') {\n this.renderer.setStyle(this.imgElem.nativeElement, 'max-width', this.maxWidth);\n }\n\n if (this.maxHeight != '') {\n this.renderer.setStyle(this.imgElem.nativeElement, 'max-height', this.maxHeight);\n }\n\n if (this.borderRadius != '') {\n this.renderer.setStyle(this.imgElem.nativeElement, 'border-radius', this.borderRadius);\n }\n\n if (this.objectFit != '') {\n this.renderer.setStyle(this.imgElem.nativeElement, 'object-fit', this.objectFit);\n }\n\n if (this.background != '') {\n this.renderer.setStyle(this.imgElem.nativeElement, 'background', this.background);\n }\n }\n\n}\n","\"\"\n\n","\n
\n

{{t('title')}}

\n \n
\n
\n
{{updateData.updateTitle}}
\n
\n  
\n\n
\n {{t('help')}}\n \n {{t('download')}}\n
\n
\n","import {ChangeDetectionStrategy, Component, Input, OnInit} from '@angular/core';\nimport {NgbActiveModal, NgbModalModule} from '@ng-bootstrap/ng-bootstrap';\nimport { UpdateVersionEvent } from 'src/app/_models/events/update-version-event';\nimport {CommonModule} from \"@angular/common\";\nimport {SafeHtmlPipe} from \"../../pipe/safe-html.pipe\";\nimport {TranslocoDirective} from \"@ngneat/transloco\";\n\n\n@Component({\n selector: 'app-update-notification-modal',\n standalone: true,\n imports: [CommonModule, NgbModalModule, SafeHtmlPipe, TranslocoDirective],\n templateUrl: './update-notification-modal.component.html',\n styleUrls: ['./update-notification-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class UpdateNotificationModalComponent implements OnInit {\n\n @Input({required: true}) updateData!: UpdateVersionEvent;\n updateUrl: string = 'https://wiki.kavitareader.com/en/install/windows-install#updating-kavita';\n\n constructor(public modal: NgbActiveModal) { }\n\n ngOnInit() {\n if (this.updateData.isDocker) {\n this.updateUrl = 'https://wiki.kavitareader.com/en/install/docker-install#updating-kavita';\n } else {\n this.updateUrl = 'https://wiki.kavitareader.com/en/install/windows-install#updating-kavita';\n }\n }\n\n close() {\n this.modal.close({success: false, series: undefined});\n }\n}\n","\n
\n

\n \n {{t('edit-title', {name: library.name | sentenceCase})}}\n \n \n {{t('add-title')}}\n \n

\n \n
\n
\n
\n
    \n\n
  • \n {{t(TabID.General)}}\n \n
    \n \n \n
    \n
    \n {{t('required-field')}}\n
    \n
    \n {{t('library-name-unique')}}\n
    \n
    \n
    \n\n
    \n \n {{t('type-tooltip')}}\n \n \n \n \n
    \n
    \n {{t('last-scanned-label')}}\n {{library.lastScanned | date: 'short' | defaultDate}}\n
    \n
    \n
  • \n\n\n
  • \n {{t(TabID.Folder)}}\n \n

    {{t('folder-description')}}

    \n
      \n
    • \n {{folder}}\n \n
    • \n
    \n
    \n \n
    \n
    \n

    {{t('help-us-part-1')}}{{t('help-us-part-2')}} {{t('help-us-part-3')}}

    \n
    \n
    \n

    {{t('naming-conventions-part-1')}}{{t('naming-conventions-part-2')}} {{t('naming-conventions-part-3')}}

    \n
    \n
    \n
  • \n\n
  • \n {{t(TabID.Cover)}}\n \n

    {{t('cover-description')}}

    \n

    {{t('cover-description-extra')}}

    \n \n \n
    \n
  • \n\n
  • \n {{t(TabID.Advanced)}}\n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n

    \n {{t('manage-collection-tooltip')}}\n

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

    \n {{t('manage-reading-list-tooltip')}}\n

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

    \n {{t('allow-scrobbling-tooltip')}}\n

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

    \n {{t('folder-watching-tooltip')}}\n

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

    \n {{t('include-in-dashboard-tooltip')}}\n

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

    \n {{t('include-in-recommendation-tooltip')}}\n

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

    \n {{t('include-in-search-tooltip')}}\n

    \n
    \n
    \n
    \n
  • \n
\n\n
\n
\n
\n
\n \n \n \n\n \n \n \n \n \n \n
\n\n
\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, inject, Input, OnInit} from '@angular/core';\nimport {FormControl, FormGroup, ReactiveFormsModule, Validators} from '@angular/forms';\nimport {\n NgbActiveModal,\n NgbModal,\n NgbModalModule,\n NgbNav,\n NgbNavContent,\n NgbNavItem,\n NgbNavLink,\n NgbNavOutlet,\n NgbTooltip\n} from '@ng-bootstrap/ng-bootstrap';\nimport {ToastrService} from 'ngx-toastr';\nimport {debounceTime, distinctUntilChanged, switchMap, tap} from 'rxjs';\nimport {SettingsService} from 'src/app/admin/settings.service';\nimport {\n DirectoryPickerComponent,\n DirectoryPickerResult\n} from 'src/app/admin/_modals/directory-picker/directory-picker.component';\nimport {ConfirmService} from 'src/app/shared/confirm.service';\nimport {Breakpoint, UtilityService} from 'src/app/shared/_services/utility.service';\nimport {Library, LibraryType} from 'src/app/_models/library';\nimport {ImageService} from 'src/app/_services/image.service';\nimport {LibraryService} from 'src/app/_services/library.service';\nimport {UploadService} from 'src/app/_services/upload.service';\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\nimport {CommonModule} from \"@angular/common\";\nimport {SentenceCasePipe} from \"../../../pipe/sentence-case.pipe\";\nimport {CoverImageChooserComponent} from \"../../../cards/cover-image-chooser/cover-image-chooser.component\";\nimport {translate, TranslocoModule} from \"@ngneat/transloco\";\nimport {DefaultDatePipe} from \"../../../pipe/default-date.pipe\";\n\nenum TabID {\n General = 'general-tab',\n Folder = 'folder-tab',\n Cover = 'cover-tab',\n Advanced = 'advanced-tab'\n}\n\nenum StepID {\n General = 0,\n Folder = 1,\n Cover = 2,\n Advanced = 3\n}\n\n@Component({\n selector: 'app-library-settings-modal',\n standalone: true,\n imports: [CommonModule, NgbModalModule, NgbNavLink, NgbNavItem, NgbNavContent, ReactiveFormsModule, NgbTooltip, SentenceCasePipe, NgbNav, NgbNavOutlet, CoverImageChooserComponent, TranslocoModule, DefaultDatePipe],\n templateUrl: './library-settings-modal.component.html',\n styleUrls: ['./library-settings-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class LibrarySettingsModalComponent implements OnInit {\n\n @Input({required: true}) library!: Library;\n private readonly destroyRef = inject(DestroyRef);\n\n active = TabID.General;\n imageUrls: Array = [];\n\n libraryForm: FormGroup = new FormGroup({\n name: new FormControl('', { nonNullable: true, validators: [Validators.required] }),\n type: new FormControl(LibraryType.Manga, { nonNullable: true, validators: [Validators.required] }),\n folderWatching: new FormControl(true, { nonNullable: true, validators: [Validators.required] }),\n includeInDashboard: new FormControl(true, { nonNullable: true, validators: [Validators.required] }),\n includeInRecommended: new FormControl(true, { nonNullable: true, validators: [Validators.required] }),\n includeInSearch: new FormControl(true, { nonNullable: true, validators: [Validators.required] }),\n manageCollections: new FormControl(true, { nonNullable: true, validators: [Validators.required] }),\n manageReadingLists: new FormControl(true, { nonNullable: true, validators: [Validators.required] }),\n allowScrobbling: new FormControl(true, { nonNullable: true, validators: [Validators.required] }),\n collapseSeriesRelationships: new FormControl(false, { nonNullable: true, validators: [Validators.required] }),\n });\n\n selectedFolders: string[] = [];\n madeChanges = false;\n libraryTypes: string[] = []\n\n isAddLibrary = false;\n setupStep = StepID.General;\n\n get Breakpoint() { return Breakpoint; }\n get TabID() { return TabID; }\n\n constructor(public utilityService: UtilityService, private uploadService: UploadService, private modalService: NgbModal,\n private settingService: SettingsService, public modal: NgbActiveModal, private confirmService: ConfirmService,\n private libraryService: LibraryService, private toastr: ToastrService, private readonly cdRef: ChangeDetectorRef,\n private imageService: ImageService) { }\n\n ngOnInit(): void {\n\n this.settingService.getLibraryTypes().subscribe((types) => {\n this.libraryTypes = types;\n this.cdRef.markForCheck();\n });\n\n\n if (this.library === undefined) {\n this.isAddLibrary = true;\n this.cdRef.markForCheck();\n }\n\n if (this.library?.coverImage != null && this.library?.coverImage !== '') {\n this.imageUrls.push(this.imageService.getLibraryCoverImage(this.library.id));\n this.cdRef.markForCheck();\n }\n\n if (this.library && this.library.type === LibraryType.Comic) {\n this.libraryForm.get('allowScrobbling')?.setValue(false);\n this.libraryForm.get('allowScrobbling')?.disable();\n }\n\n\n this.libraryForm.get('name')?.valueChanges.pipe(\n debounceTime(100),\n distinctUntilChanged(),\n switchMap(name => this.libraryService.libraryNameExists(name)),\n tap(exists => {\n const isExistingName = this.libraryForm.get('name')?.value === this.library?.name;\n if (!exists || isExistingName) {\n this.libraryForm.get('name')?.setErrors(null);\n } else {\n this.libraryForm.get('name')?.setErrors({duplicateName: true})\n }\n this.cdRef.markForCheck();\n }),\n takeUntilDestroyed(this.destroyRef)\n ).subscribe();\n\n\n this.setValues();\n }\n\n setValues() {\n if (this.library !== undefined) {\n this.libraryForm.get('name')?.setValue(this.library.name);\n this.libraryForm.get('type')?.setValue(this.library.type);\n this.libraryForm.get('folderWatching')?.setValue(this.library.folderWatching);\n this.libraryForm.get('includeInDashboard')?.setValue(this.library.includeInDashboard);\n this.libraryForm.get('includeInRecommended')?.setValue(this.library.includeInRecommended);\n this.libraryForm.get('includeInSearch')?.setValue(this.library.includeInSearch);\n this.libraryForm.get('manageCollections')?.setValue(this.library.manageCollections);\n this.libraryForm.get('manageReadingLists')?.setValue(this.library.manageReadingLists);\n this.libraryForm.get('collapseSeriesRelationships')?.setValue(this.library.collapseSeriesRelationships);\n this.libraryForm.get('allowScrobbling')?.setValue(this.library.allowScrobbling);\n this.selectedFolders = this.library.folders;\n this.madeChanges = false;\n this.cdRef.markForCheck();\n }\n }\n\n isDisabled() {\n return !(this.libraryForm.valid && this.selectedFolders.length > 0);\n }\n\n reset() {\n this.setValues();\n }\n\n close(returnVal= false) {\n this.modal.close(returnVal);\n }\n\n forceScan() {\n this.libraryService.scan(this.library.id, true)\n .subscribe(() => this.toastr.info(translate('toasts.forced-scan-queued', {name: this.library.name})));\n }\n\n async save() {\n const model = this.libraryForm.value;\n model.folders = this.selectedFolders;\n\n if (this.libraryForm.errors) {\n return;\n }\n\n if (this.library !== undefined) {\n model.id = this.library.id;\n model.folders = model.folders.map((item: string) => item.startsWith('\\\\') ? item.substr(1, item.length) : item);\n model.type = parseInt(model.type, 10);\n\n if (model.type !== this.library.type) {\n if (!await this.confirmService.confirm(translate('toasts.confirm-library-type-change'))) return;\n }\n\n this.libraryService.update(model).subscribe(() => {\n this.close(true);\n });\n } else {\n model.folders = model.folders.map((item: string) => item.startsWith('\\\\') ? item.substr(1, item.length) : item);\n model.type = parseInt(model.type, 10);\n this.libraryService.create(model).subscribe(() => {\n this.toastr.success(translate('toasts.library-created'));\n this.close(true);\n });\n }\n }\n\n nextStep() {\n this.setupStep++;\n switch(this.setupStep) {\n case StepID.Folder:\n this.active = TabID.Folder;\n break;\n case StepID.Cover:\n this.active = TabID.Cover;\n break;\n case StepID.Advanced:\n this.active = TabID.Advanced;\n break;\n }\n this.cdRef.markForCheck();\n }\n\n applyCoverImage(coverUrl: string) {\n this.uploadService.updateLibraryCoverImage(this.library.id, coverUrl).subscribe(() => {});\n }\n\n resetCoverImage() {\n this.uploadService.updateLibraryCoverImage(this.library.id, '').subscribe(() => {});\n }\n\n openDirectoryPicker() {\n const modalRef = this.modalService.open(DirectoryPickerComponent, { scrollable: true, size: 'lg' });\n modalRef.closed.subscribe((closeResult: DirectoryPickerResult) => {\n if (closeResult.success) {\n if (!this.selectedFolders.includes(closeResult.folderPath)) {\n this.selectedFolders.push(closeResult.folderPath);\n this.madeChanges = true;\n this.cdRef.markForCheck();\n }\n }\n });\n }\n\n removeFolder(folder: string) {\n this.selectedFolders = this.selectedFolders.filter(item => item !== folder);\n this.madeChanges = true;\n this.cdRef.markForCheck();\n }\n\n isNextDisabled() {\n switch (this.setupStep) {\n case StepID.General:\n return this.libraryForm.get('name')?.invalid || this.libraryForm.get('type')?.invalid;\n case StepID.Folder:\n return this.selectedFolders.length === 0;\n case StepID.Cover:\n return false; // Covers are optional\n case StepID.Advanced:\n return false; // Advanced are optional\n }\n }\n\n}\n","import { getBaseUrl } from \"src/app/base-url.provider\";\nconst BASE_URL = getBaseUrl();\n\nexport const environment = {\n production: true,\n apiUrl: `${BASE_URL}api/`,\n hubUrl:`${BASE_URL}hubs/`,\n buyLink: 'https://buy.stripe.com/3cs7uw67p2Re7JK4gj?prefilled_promo_code=FREETRIAL',\n manageLink: 'https://billing.stripe.com/p/login/28oaFRa3HdHWb5ecMM'\n};\n","export function getBaseUrl() : string {\n return document.getElementsByTagName('base')[0]?.getAttribute('href') || '/';\n}\n","\n
\n \n
\n
\n\n\n \n \n \n \n \n \n \n \n \n \n\n\n\n\n\n
\n \n
\n \n \"icon\"\n \n \n
\n
\n \n
\n {{title}}\n
\n
\n \n \n \n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n inject,\n Input,\n OnInit\n} from '@angular/core';\nimport {NavigationEnd, Router, RouterLink} from '@angular/router';\nimport { filter, map } from 'rxjs';\nimport { NavService } from 'src/app/_services/nav.service';\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\nimport {CommonModule, NgOptimizedImage} from \"@angular/common\";\n\n\n@Component({\n selector: 'app-side-nav-item',\n standalone: true,\n imports: [CommonModule, RouterLink, NgOptimizedImage],\n templateUrl: './side-nav-item.component.html',\n styleUrls: ['./side-nav-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SideNavItemComponent implements OnInit {\n /**\n * Icon to display next to item. ie) 'fa-home'\n */\n @Input() icon: string = '';\n @Input() imageUrl: string | null = '';\n /**\n * Text for the item\n */\n @Input() title: string = '';\n\n /**\n * If a link should be generated when clicked. By default (undefined), no link will be generated\n */\n @Input() link: string | undefined;\n /**\n * If external, link will be used as full href and rel will be applied\n */\n @Input() external: boolean = false;\n\n @Input() comparisonMethod: 'startsWith' | 'equals' = 'equals';\n private readonly destroyRef = inject(DestroyRef);\n\n\n highlighted = false;\n\n constructor(public navService: NavService, private router: Router, private readonly cdRef: ChangeDetectorRef) {\n router.events\n .pipe(filter(event => event instanceof NavigationEnd),\n takeUntilDestroyed(this.destroyRef),\n map(evt => evt as NavigationEnd))\n .subscribe((evt: NavigationEnd) => {\n this.updateHighlight(evt.url.split('?')[0]);\n\n });\n }\n\n ngOnInit(): void {\n setTimeout(() => {\n this.updateHighlight(this.router.url.split('?')[0]);\n }, 100);\n\n }\n\n updateHighlight(page: string) {\n if (this.link === undefined) {\n this.highlighted = false;\n this.cdRef.markForCheck();\n return;\n }\n\n if (!page.endsWith('/')) {\n page = page + '/';\n }\n\n if (this.comparisonMethod === 'equals' && page === this.link) {\n this.highlighted = true;\n this.cdRef.markForCheck();\n return;\n }\n if (this.comparisonMethod === 'startsWith' && page.startsWith(this.link)) {\n this.highlighted = true;\n this.cdRef.markForCheck();\n return;\n }\n\n this.highlighted = false;\n this.cdRef.markForCheck();\n }\n\n}\n","\n
\n \n\n \n \n \n \n \n \n \n \n \n 0\">\n
10 && (navService?.sideNavCollapsed$ | async) === false\">\n \n
\n \n \n
\n
\n \n \n \n \n \n
\n
\n
\n \n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n inject,\n OnInit\n} from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\nimport {filter, map, shareReplay, take} from 'rxjs/operators';\nimport { ImportCblModalComponent } from 'src/app/reading-list/_modals/import-cbl-modal/import-cbl-modal.component';\nimport { ImageService } from 'src/app/_services/image.service';\nimport { EVENTS, MessageHubService } from 'src/app/_services/message-hub.service';\nimport { Breakpoint, UtilityService } from '../../../shared/_services/utility.service';\nimport { Library, LibraryType } from '../../../_models/library';\nimport { AccountService } from '../../../_services/account.service';\nimport { Action, ActionFactoryService, ActionItem } from '../../../_services/action-factory.service';\nimport { ActionService } from '../../../_services/action.service';\nimport { LibraryService } from '../../../_services/library.service';\nimport { NavService } from '../../../_services/nav.service';\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\nimport {switchMap} from \"rxjs\";\nimport {CommonModule} from \"@angular/common\";\nimport {SideNavItemComponent} from \"../side-nav-item/side-nav-item.component\";\nimport {FilterPipe} from \"../../../pipe/filter.pipe\";\nimport {FormsModule} from \"@angular/forms\";\nimport {TranslocoDirective} from \"@ngneat/transloco\";\nimport {CardActionablesComponent} from \"../../../_single-module/card-actionables/card-actionables.component\";\n\n@Component({\n selector: 'app-side-nav',\n standalone: true,\n imports: [CommonModule, SideNavItemComponent, CardActionablesComponent, FilterPipe, FormsModule, TranslocoDirective],\n templateUrl: './side-nav.component.html',\n styleUrls: ['./side-nav.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SideNavComponent implements OnInit {\n\n private readonly destroyRef = inject(DestroyRef);\n\n libraries: Library[] = [];\n actions: ActionItem[] = [];\n readingListActions = [{action: Action.Import, title: 'import-cbl', children: [], requiresAdmin: true, callback: this.importCbl.bind(this)}];\n filterQuery: string = '';\n filterLibrary = (library: Library) => {\n return library.name.toLowerCase().indexOf((this.filterQuery || '').toLowerCase()) >= 0;\n }\n\n constructor(private libraryService: LibraryService,\n public utilityService: UtilityService, private messageHub: MessageHubService,\n private actionFactoryService: ActionFactoryService, private actionService: ActionService,\n public navService: NavService, private router: Router, private readonly cdRef: ChangeDetectorRef,\n private ngbModal: NgbModal, private imageService: ImageService, public readonly accountService: AccountService) {\n\n this.router.events.pipe(\n filter(event => event instanceof NavigationEnd),\n takeUntilDestroyed(this.destroyRef),\n map(evt => evt as NavigationEnd),\n filter(() => this.utilityService.getActiveBreakpoint() < Breakpoint.Tablet),\n switchMap(() => this.navService.sideNavCollapsed$),\n take(1),\n filter(collapsed => !collapsed)\n ).subscribe(() => {\n this.navService.toggleSideNav();\n this.cdRef.markForCheck();\n });\n }\n\n ngOnInit(): void {\n this.accountService.currentUser$.pipe(take(1)).subscribe(user => {\n if (!user) return;\n this.libraryService.getLibraries().pipe(take(1), shareReplay()).subscribe((libraries: Library[]) => {\n this.libraries = libraries;\n this.cdRef.markForCheck();\n });\n this.actions = this.actionFactoryService.getLibraryActions(this.handleAction.bind(this));\n this.cdRef.markForCheck();\n });\n\n // TODO: Investigate this, as it might be expensive\n this.messageHub.messages$.pipe(takeUntilDestroyed(this.destroyRef), filter(event => event.event === EVENTS.LibraryModified)).subscribe(event => {\n this.libraryService.getLibraries().pipe(take(1), shareReplay()).subscribe((libraries: Library[]) => {\n this.libraries = [...libraries];\n this.cdRef.markForCheck();\n });\n });\n }\n\n async handleAction(action: ActionItem, library: Library) {\n switch (action.action) {\n case(Action.Scan):\n await this.actionService.scanLibrary(library);\n break;\n case(Action.RefreshMetadata):\n await this.actionService.refreshMetadata(library);\n break;\n case (Action.AnalyzeFiles):\n await this.actionService.analyzeFiles(library);\n break;\n case (Action.Edit):\n this.actionService.editLibrary(library, () => window.scrollTo(0, 0));\n break;\n default:\n break;\n }\n }\n\n importCbl() {\n this.ngbModal.open(ImportCblModalComponent, {size: 'xl'});\n }\n\n performAction(action: ActionItem, library: Library) {\n if (typeof action.callback === 'function') {\n action.callback(action, library);\n }\n }\n\n getLibraryTypeIcon(format: LibraryType) {\n switch (format) {\n case LibraryType.Book:\n return 'fa-book';\n case LibraryType.Comic:\n case LibraryType.Manga:\n return 'fa-book-open';\n }\n }\n\n getLibraryImage(library: Library) {\n if (library.coverImage) return this.imageService.getLibraryCoverImage(library.id);\n return null;\n }\n\n toggleNavBar() {\n this.navService.toggleSideNav();\n }\n\n}\n","import {inject, Pipe, PipeTransform} from '@angular/core';\nimport { PersonRole } from '../_models/metadata/person';\nimport {TranslocoService} from \"@ngneat/transloco\";\n\n@Pipe({\n name: 'personRole',\n standalone: true\n})\nexport class PersonRolePipe implements PipeTransform {\n\n translocoService = inject(TranslocoService);\n transform(value: PersonRole): string {\n switch (value) {\n case PersonRole.Artist:\n return this.translocoService.translate('person-role-pipe.artist');\n case PersonRole.Character:\n return this.translocoService.translate('person-role-pipe.character');\n case PersonRole.Colorist:\n return this.translocoService.translate('person-role-pipe.colorist');\n case PersonRole.CoverArtist:\n return this.translocoService.translate('person-role-pipe.cover-artist');\n case PersonRole.Editor:\n return this.translocoService.translate('person-role-pipe.editor');\n case PersonRole.Inker:\n return this.translocoService.translate('person-role-pipe.inker');\n case PersonRole.Letterer:\n return this.translocoService.translate('person-role-pipe.letterer');\n case PersonRole.Penciller:\n return this.translocoService.translate('person-role-pipe.penciller');\n case PersonRole.Publisher:\n return this.translocoService.translate('person-role-pipe.publisher');\n case PersonRole.Writer:\n return this.translocoService.translate('person-role-pipe.writer');\n case PersonRole.Other:\n return this.translocoService.translate('person-role-pipe.other');\n default:\n return '';\n }\n }\n\n}\n","\n \n \n \n \n \n \n \n \n\n\n \n\n
    \n \n \n
  • 0 || infos.length > 0\" (click)=\"clearAllErrorOrInfos()\">\n {{t('dismiss-all')}}\n
  • \n
    \n
    \n \n
  • \n
    Title goes here
    \n
    Subtitle goes here
    \n
    \n
    \n
    \n
    \n
    \n
  • \n
  • \n
    Title goes here
    \n
    Subtitle goes here
    \n
  • \n
  • \n
    \n
    Scanning Books
    \n
    E:\\\\Books\\\\Demon King Daimaou\\\\Demon King Daimaou - Volume 11.epub
    \n
    \n
    {{prettyPrintProgress(0.1)}}%
    \n
    \n
    \n
    \n
    \n\n
    \n
  • \n
  • \n
    \n
    There was some library scan error
    \n
    Click for more information
    \n
    \n \n
  • \n
  • \n
    \n
    Scan didn't run becasuse nothing to do
    \n
    Click for more information
    \n
    \n \n
  • \n
  • \n
    \n \n \n \n 10% downloaded\n \n \n Downloading {{'series' | sentenceCase}}\n
    \n
    PDFs
    \n
  • \n
    \n\n \n \n \n
  • \n
    {{message.title}}
    \n
    {{message.subTitle}}
    \n
    \n
    \n
    \n
    \n
    \n
  • \n \n
  • \n
    {{message.title}}
    \n
    {{message.subTitle}}
    \n
    \n
    {{prettyPrintProgress(message.body.progress) + '%'}}
    \n
    \n
    \n
    \n
    \n
  • \n
    \n
    \n
    \n\n \n \n \n
  • \n {{t('update-available')}}\n
  • \n
  • \n
    {{singleUpdate.title}}
    \n
    {{singleUpdate.subTitle}}
    \n
  • \n
    \n
    \n\n \n \n \n
  • \n
    {{t('downloading-item', {item: download.entityType | sentenceCase})}}
    \n
    {{download.subTitle}}
    \n
    \n
    {{download.progress}}%
    \n
    \n
    \n
    \n
    \n
  • \n
    \n
    \n\n\n \n \n \n
  • \n
    \n
    {{error.title}}
    \n
    {{t('more-info')}}
    \n
    \n \n
  • \n
    \n
    \n\n \n \n \n
  • \n
    \n
    {{info.title}}
    \n
    {{t('more-info')}}
    \n
    \n \n
  • \n
    \n
    \n\n \n \n
  • 1\">\n
    {{t('users-online-count', {num: onlineUsers.length})}}
    \n
  • \n
  • {{t('active-events-title')}} {{activeEvents}}
  • \n
    \n\n \n
  • {{t('no-data')}}
  • \n
    \n\n
\n
\n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n inject,\n Input,\n OnDestroy,\n OnInit\n} from '@angular/core';\nimport { NgbModal, NgbModalRef, NgbPopover } from '@ng-bootstrap/ng-bootstrap';\nimport { BehaviorSubject, Observable, of } from 'rxjs';\nimport { map, shareReplay } from 'rxjs/operators';\nimport { ConfirmConfig } from 'src/app/shared/confirm-dialog/_models/confirm-config';\nimport { ConfirmService } from 'src/app/shared/confirm.service';\nimport { UpdateNotificationModalComponent } from 'src/app/shared/update-notification/update-notification-modal.component';\nimport { DownloadService } from 'src/app/shared/_services/download.service';\nimport { ErrorEvent } from 'src/app/_models/events/error-event';\nimport { InfoEvent } from 'src/app/_models/events/info-event';\nimport { NotificationProgressEvent } from 'src/app/_models/events/notification-progress-event';\nimport { UpdateVersionEvent } from 'src/app/_models/events/update-version-event';\nimport { User } from 'src/app/_models/user';\nimport { AccountService } from 'src/app/_services/account.service';\nimport { EVENTS, Message, MessageHubService } from 'src/app/_services/message-hub.service';\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\nimport { SentenceCasePipe } from '../../../pipe/sentence-case.pipe';\nimport { CircularLoaderComponent } from '../../../shared/circular-loader/circular-loader.component';\nimport { NgIf, NgClass, NgStyle, NgFor, AsyncPipe } from '@angular/common';\nimport {TranslocoDirective} from \"@ngneat/transloco\";\n\n@Component({\n selector: 'app-nav-events-toggle',\n templateUrl: './events-widget.component.html',\n styleUrls: ['./events-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [NgIf, NgClass, NgbPopover, NgStyle, CircularLoaderComponent, NgFor, AsyncPipe, SentenceCasePipe, TranslocoDirective]\n})\nexport class EventsWidgetComponent implements OnInit, OnDestroy {\n @Input({required: true}) user!: User;\n private readonly destroyRef = inject(DestroyRef);\n\n isAdmin$: Observable = of(false);\n\n /**\n * Progress events (Event Type: 'started', 'ended', 'updated' that have progress property)\n */\n progressEventsSource = new BehaviorSubject([]);\n progressEvents$ = this.progressEventsSource.asObservable();\n\n singleUpdateSource = new BehaviorSubject([]);\n singleUpdates$ = this.singleUpdateSource.asObservable();\n\n errorSource = new BehaviorSubject([]);\n errors$ = this.errorSource.asObservable();\n\n infoSource = new BehaviorSubject([]);\n infos$ = this.infoSource.asObservable();\n\n private updateNotificationModalRef: NgbModalRef | null = null;\n\n activeEvents: number = 0;\n\n debugMode: boolean = false;\n\n\n get EVENTS() {\n return EVENTS;\n }\n\n constructor(public messageHub: MessageHubService, private modalService: NgbModal,\n private accountService: AccountService, private confirmService: ConfirmService,\n private readonly cdRef: ChangeDetectorRef, public downloadService: DownloadService) {\n }\n\n ngOnDestroy(): void {\n this.progressEventsSource.complete();\n this.singleUpdateSource.complete();\n this.errorSource.complete();\n }\n\n ngOnInit(): void {\n this.messageHub.messages$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event: Message) => {\n if (event.event === EVENTS.NotificationProgress) {\n this.processNotificationProgressEvent(event);\n } else if (event.event === EVENTS.Error) {\n const values = this.errorSource.getValue();\n values.push(event.payload as ErrorEvent);\n this.errorSource.next(values);\n this.activeEvents += 1;\n this.cdRef.markForCheck();\n } else if (event.event === EVENTS.Info) {\n const values = this.infoSource.getValue();\n values.push(event.payload as InfoEvent);\n this.infoSource.next(values);\n this.activeEvents += 1;\n this.cdRef.markForCheck();\n } else if (event.event === EVENTS.UpdateAvailable) {\n this.handleUpdateAvailableClick(event.payload);\n }\n });\n\n this.isAdmin$ = this.accountService.currentUser$.pipe(\n takeUntilDestroyed(this.destroyRef),\n map(user => (user && this.accountService.hasAdminRole(user)) || false),\n shareReplay()\n );\n }\n\n processNotificationProgressEvent(event: Message) {\n const message = event.payload as NotificationProgressEvent;\n let data;\n switch (event.payload.eventType) {\n case 'single':\n const values = this.singleUpdateSource.getValue();\n values.push(message);\n this.singleUpdateSource.next(values);\n this.activeEvents += 1;\n this.cdRef.markForCheck();\n break;\n case 'started':\n // Sometimes we can receive 2 started on long running scans, so better to just treat as a merge then.\n data = this.mergeOrUpdate(this.progressEventsSource.getValue(), message);\n this.progressEventsSource.next(data);\n break;\n case 'updated':\n data = this.mergeOrUpdate(this.progressEventsSource.getValue(), message);\n this.progressEventsSource.next(data);\n break;\n case 'ended':\n data = this.progressEventsSource.getValue();\n data = data.filter(m => m.name !== message.name);\n this.progressEventsSource.next(data);\n this.activeEvents = Math.max(this.activeEvents - 1, 0);\n this.cdRef.markForCheck();\n break;\n default:\n break;\n }\n }\n\n private mergeOrUpdate(data: NotificationProgressEvent[], message: NotificationProgressEvent) {\n const index = data.findIndex(m => m.name === message.name);\n // Sometimes we can receive 2 started on long running scans, so better to just treat as a merge then.\n if (index < 0) {\n data.push(message);\n this.activeEvents += 1;\n this.cdRef.markForCheck();\n } else {\n data[index] = message;\n }\n return data;\n }\n\n\n handleUpdateAvailableClick(message: NotificationProgressEvent | UpdateVersionEvent) {\n if (this.updateNotificationModalRef != null) { return; }\n this.updateNotificationModalRef = this.modalService.open(UpdateNotificationModalComponent, { scrollable: true, size: 'lg' });\n if (message.hasOwnProperty('body')) {\n this.updateNotificationModalRef.componentInstance.updateData = (message as NotificationProgressEvent).body as UpdateVersionEvent;\n } else {\n this.updateNotificationModalRef.componentInstance.updateData = message as UpdateVersionEvent;\n }\n\n this.updateNotificationModalRef.closed.subscribe(() => {\n this.updateNotificationModalRef = null;\n });\n this.updateNotificationModalRef.dismissed.subscribe(() => {\n this.updateNotificationModalRef = null;\n });\n }\n\n async seeMore(event: ErrorEvent | InfoEvent) {\n const config = new ConfirmConfig();\n if (event.name === EVENTS.Error) {\n config.buttons = [\n {text: 'Ok', type: 'secondary'},\n {text: 'Dismiss', type: 'primary'}\n ];\n } else {\n config.buttons = [\n {text: 'Ok', type: 'primary'},\n ];\n }\n config.header = event.title;\n config.content = event.subTitle;\n const result = await this.confirmService.alert(event.subTitle || event.title, config);\n if (result) {\n this.removeErrorOrInfo(event);\n }\n }\n\n clearAllErrorOrInfos() {\n const infoCount = this.infoSource.getValue().length;\n const errorCount = this.errorSource.getValue().length;\n this.infoSource.next([]);\n this.errorSource.next([]);\n this.activeEvents -= Math.max(infoCount + errorCount, 0);\n this.cdRef.markForCheck();\n }\n\n removeErrorOrInfo(messageEvent: ErrorEvent | InfoEvent, event?: MouseEvent) {\n if (event) {\n event.stopPropagation();\n event.preventDefault();\n }\n let data = [];\n if (messageEvent.name === EVENTS.Info) {\n data = this.infoSource.getValue();\n data = data.filter(m => m !== messageEvent);\n this.infoSource.next(data);\n } else {\n data = this.errorSource.getValue();\n data = data.filter(m => m !== messageEvent);\n this.errorSource.next(data);\n }\n this.activeEvents = Math.max(this.activeEvents - 1, 0);\n this.cdRef.markForCheck();\n }\n\n prettyPrintProgress(progress: number) {\n return Math.trunc(progress * 100);\n }\n}\n","\n  \n \n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { MangaFormat } from 'src/app/_models/manga-format';\nimport {MangaFormatIconPipe} from \"../../pipe/manga-format-icon.pipe\";\nimport {MangaFormatPipe} from \"../../pipe/manga-format.pipe\";\nimport {CommonModule} from \"@angular/common\";\n\n@Component({\n selector: 'app-series-format',\n standalone: true,\n imports: [\n CommonModule,\n MangaFormatIconPipe,\n MangaFormatPipe\n ],\n templateUrl: './series-format.component.html',\n styleUrls: ['./series-format.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SeriesFormatComponent {\n\n @Input() format: MangaFormat = MangaFormat.UNKNOWN;\n\n get MangaFormat(): typeof MangaFormat {\n return MangaFormat;\n }\n}\n","\n
\n
\n
\n \n
\n {{t('loading')}}\n
\n \n
\n
\n
\n
    \n 0\">\n
  • Series
  • \n
      \n
    • \n \n
    • \n
    \n
    \n\n 0\">\n
  • {{t('collections')}}
  • \n
      \n
    • \n \n
    • \n
    \n
    \n\n 0\">\n
  • {{t('reading-lists')}}
  • \n
      \n
    • \n \n
    • \n
    \n
    \n\n 0\">\n
  • {{t('libraries')}}
  • \n
      \n
    • \n \n
    • \n
    \n
    \n\n 0\">\n
  • {{t('genres')}}
  • \n
      \n
    • \n \n
    • \n
    \n
    \n\n 0\">\n
  • {{t('tags')}}
  • \n
      \n
    • \n \n
    • \n
    \n
    \n\n 0\">\n
  • {{t('people')}}
  • \n
      \n
    • \n \n
    • \n
    \n
    \n\n 0\">\n
  • {{t('chapters')}}
  • \n
      \n
    • \n \n
    • \n
    \n
    \n\n 0\">\n
  • {{t('files')}}
  • \n
      \n
    • \n \n
    • \n
    \n
    \n\n 0\">\n
      \n
    • \n \n
    • \n
    \n\n
    \n
\n
\n\n
\n\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild, DestroyRef,\n ElementRef,\n EventEmitter,\n HostListener,\n inject,\n Input,\n OnInit,\n Output,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { debounceTime } from 'rxjs/operators';\nimport { KEY_CODES } from 'src/app/shared/_services/utility.service';\nimport { SearchResultGroup } from 'src/app/_models/search/search-result-group';\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\nimport { NgClass, NgIf, NgFor, NgTemplateOutlet } from '@angular/common';\nimport {TranslocoDirective} from \"@ngneat/transloco\";\n\n@Component({\n selector: 'app-grouped-typeahead',\n templateUrl: './grouped-typeahead.component.html',\n styleUrls: ['./grouped-typeahead.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [ReactiveFormsModule, NgClass, NgIf, NgFor, NgTemplateOutlet, TranslocoDirective]\n})\nexport class GroupedTypeaheadComponent implements OnInit {\n /**\n * Unique id to tie with a label element\n */\n @Input() id: string = 'grouped-typeahead';\n /**\n * Minimum number of characters in input to trigger a search\n */\n @Input() minQueryLength: number = 0;\n /**\n * Initial value of the search model\n */\n @Input() initialValue: string = '';\n @Input() groupedData: SearchResultGroup = new SearchResultGroup();\n /**\n * Placeholder for the input\n */\n @Input() placeholder: string = '';\n /**\n * Number of milliseconds after typing before triggering inputChanged for data fetching\n */\n @Input() debounceTime: number = 200;\n /**\n * Emits when the input changes from user interaction\n */\n @Output() inputChanged: EventEmitter = new EventEmitter();\n /**\n * Emits when something is clicked/selected\n */\n @Output() selected: EventEmitter = new EventEmitter();\n /**\n * Emits an event when the field is cleared\n */\n @Output() clearField: EventEmitter = new EventEmitter();\n /**\n * Emits when a change in the search field looses/gains focus\n */\n @Output() focusChanged: EventEmitter = new EventEmitter();\n\n @ViewChild('input') inputElem!: ElementRef;\n @ContentChild('itemTemplate') itemTemplate!: TemplateRef;\n @ContentChild('seriesTemplate') seriesTemplate: TemplateRef | undefined;\n @ContentChild('collectionTemplate') collectionTemplate: TemplateRef | undefined;\n @ContentChild('tagTemplate') tagTemplate: TemplateRef | undefined;\n @ContentChild('personTemplate') personTemplate: TemplateRef | undefined;\n @ContentChild('genreTemplate') genreTemplate!: TemplateRef;\n @ContentChild('noResultsTemplate') noResultsTemplate!: TemplateRef;\n @ContentChild('libraryTemplate') libraryTemplate!: TemplateRef;\n @ContentChild('readingListTemplate') readingListTemplate!: TemplateRef;\n @ContentChild('fileTemplate') fileTemplate!: TemplateRef;\n @ContentChild('chapterTemplate') chapterTemplate!: TemplateRef;\n private readonly destroyRef = inject(DestroyRef);\n\n\n hasFocus: boolean = false;\n isLoading: boolean = false;\n typeaheadForm: FormGroup = new FormGroup({});\n\n prevSearchTerm: string = '';\n\n get searchTerm() {\n return this.typeaheadForm.get('typeahead')?.value || '';\n }\n\n get hasData() {\n return !(this.noResultsTemplate != undefined && !this.groupedData.persons.length && !this.groupedData.collections.length\n && !this.groupedData.series.length && !this.groupedData.persons.length && !this.groupedData.tags.length && !this.groupedData.genres.length && !this.groupedData.libraries.length\n && !this.groupedData.files.length && !this.groupedData.chapters.length);\n }\n\n\n constructor(private readonly cdRef: ChangeDetectorRef) { }\n\n @HostListener('window:click', ['$event'])\n handleDocumentClick(event: any) {\n this.close();\n\n }\n\n @HostListener('window:keydown', ['$event'])\n handleKeyPress(event: KeyboardEvent) {\n if (!this.hasFocus) { return; }\n\n switch(event.key) {\n case KEY_CODES.ESC_KEY:\n this.close();\n event.stopPropagation();\n break;\n default:\n break;\n }\n }\n\n ngOnInit(): void {\n this.typeaheadForm.addControl('typeahead', new FormControl(this.initialValue, []));\n this.cdRef.markForCheck();\n\n this.typeaheadForm.valueChanges.pipe(debounceTime(this.debounceTime), takeUntilDestroyed(this.destroyRef)).subscribe(change => {\n const value = this.typeaheadForm.get('typeahead')?.value;\n\n if (value != undefined && value != '' && !this.hasFocus) {\n this.hasFocus = true;\n this.cdRef.markForCheck();\n }\n\n if (value != undefined && value.length >= this.minQueryLength) {\n\n if (this.prevSearchTerm === value) return;\n this.inputChanged.emit(value);\n this.prevSearchTerm = value;\n this.cdRef.markForCheck();\n }\n });\n }\n\n onInputFocus(event: any) {\n if (event) {\n event.stopPropagation();\n event.preventDefault();\n }\n\n this.openDropdown();\n return this.hasFocus;\n }\n\n openDropdown() {\n setTimeout(() => {\n const model = this.typeaheadForm.get('typeahead');\n if (model) {\n model.setValue(model.value);\n }\n });\n }\n\n handleResultlick(item: any) {\n this.selected.emit(item);\n }\n\n resetField() {\n this.prevSearchTerm = '';\n this.typeaheadForm.get('typeahead')?.setValue(this.initialValue);\n this.clearField.emit();\n this.cdRef.markForCheck();\n }\n\n\n close(event?: FocusEvent) {\n if (event) {\n // If the user is tabbing out of the input field, check if there are results first before closing\n if (this.hasData) {\n return;\n }\n }\n if (this.searchTerm === '') {\n this.resetField();\n }\n this.hasFocus = false;\n this.cdRef.markForCheck();\n this.focusChanged.emit(this.hasFocus);\n }\n\n open(event?: FocusEvent) {\n this.hasFocus = true;\n this.focusChanged.emit(this.hasFocus);\n this.cdRef.markForCheck();\n }\n\n public clear() {\n this.prevSearchTerm = '';\n this.typeaheadForm.get('typeahead')?.setValue(this.initialValue);\n this.cdRef.markForCheck();\n }\n\n}\n","\n \n\n\n","import {AsyncPipe, DOCUMENT, NgIf, NgOptimizedImage} from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n ElementRef,\n inject,\n Inject,\n OnInit,\n ViewChild\n} from '@angular/core';\nimport {NavigationEnd, Router, RouterLink, RouterLinkActive} from '@angular/router';\nimport {fromEvent} from 'rxjs';\nimport {debounceTime, distinctUntilChanged, filter, tap} from 'rxjs/operators';\nimport {Chapter} from 'src/app/_models/chapter';\nimport {CollectionTag} from 'src/app/_models/collection-tag';\nimport {Library} from 'src/app/_models/library';\nimport {MangaFile} from 'src/app/_models/manga-file';\nimport {PersonRole} from 'src/app/_models/metadata/person';\nimport {ReadingList} from 'src/app/_models/reading-list';\nimport {SearchResult} from 'src/app/_models/search/search-result';\nimport {SearchResultGroup} from 'src/app/_models/search/search-result-group';\nimport {AccountService} from 'src/app/_services/account.service';\nimport {ImageService} from 'src/app/_services/image.service';\nimport {NavService} from 'src/app/_services/nav.service';\nimport {ScrollService} from 'src/app/_services/scroll.service';\nimport {SearchService} from 'src/app/_services/search.service';\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\nimport {SentenceCasePipe} from '../../../pipe/sentence-case.pipe';\nimport {PersonRolePipe} from '../../../pipe/person-role.pipe';\nimport {NgbDropdown, NgbDropdownItem, NgbDropdownMenu, NgbDropdownToggle} from '@ng-bootstrap/ng-bootstrap';\nimport {EventsWidgetComponent} from '../events-widget/events-widget.component';\nimport {SeriesFormatComponent} from '../../../shared/series-format/series-format.component';\nimport {ImageComponent} from '../../../shared/image/image.component';\nimport {GroupedTypeaheadComponent} from '../grouped-typeahead/grouped-typeahead.component';\nimport {TranslocoDirective} from \"@ngneat/transloco\";\nimport {FilterUtilitiesService} from \"../../../shared/_services/filter-utilities.service\";\nimport {FilterStatement} from \"../../../_models/metadata/v2/filter-statement\";\nimport {FilterField} from \"../../../_models/metadata/v2/filter-field\";\nimport {FilterComparison} from \"../../../_models/metadata/v2/filter-comparison\";\n\n@Component({\n selector: 'app-nav-header',\n templateUrl: './nav-header.component.html',\n styleUrls: ['./nav-header.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [NgIf, RouterLink, RouterLinkActive, NgOptimizedImage, GroupedTypeaheadComponent, ImageComponent, SeriesFormatComponent, EventsWidgetComponent, NgbDropdown, NgbDropdownToggle, NgbDropdownMenu, NgbDropdownItem, AsyncPipe, PersonRolePipe, SentenceCasePipe, TranslocoDirective]\n})\nexport class NavHeaderComponent implements OnInit {\n\n @ViewChild('search') searchViewRef!: any;\n private readonly destroyRef = inject(DestroyRef);\n\n isLoading = false;\n debounceTime = 300;\n searchResults: SearchResultGroup = new SearchResultGroup();\n searchTerm = '';\n\n\n backToTopNeeded = false;\n searchFocused: boolean = false;\n scrollElem: HTMLElement;\n protected readonly FilterField = FilterField;\n\n constructor(public accountService: AccountService, private router: Router, public navService: NavService,\n public imageService: ImageService, @Inject(DOCUMENT) private document: Document,\n private scrollService: ScrollService, private searchService: SearchService, private readonly cdRef: ChangeDetectorRef,\n private filterUtilityService: FilterUtilitiesService) {\n this.scrollElem = this.document.body;\n }\n\n ngOnInit(): void {\n this.scrollService.scrollContainer$.pipe(distinctUntilChanged(), takeUntilDestroyed(this.destroyRef), tap((scrollContainer) => {\n if (scrollContainer === 'body' || scrollContainer === undefined) {\n this.scrollElem = this.document.body;\n } else {\n const elem = scrollContainer as ElementRef;\n this.scrollElem = elem.nativeElement;\n }\n fromEvent(this.scrollElem, 'scroll').pipe(debounceTime(20)).subscribe(() => this.checkBackToTopNeeded(this.scrollElem));\n })).subscribe();\n\n // Sometimes the top event emitter can be slow, so let's also check when a navigation occurs and recalculate\n this.router.events\n .pipe(filter(event => event instanceof NavigationEnd))\n .subscribe(() => {\n this.checkBackToTopNeeded(this.scrollElem);\n });\n }\n\n checkBackToTopNeeded(elem: HTMLElement) {\n const offset = elem.scrollTop || 0;\n if (offset > 100) {\n this.backToTopNeeded = true;\n } else if (offset < 40) {\n this.backToTopNeeded = false;\n }\n this.cdRef.markForCheck();\n }\n\n logout() {\n this.accountService.logout();\n this.navService.hideNavBar();\n this.navService.hideSideNav();\n this.router.navigateByUrl('/login');\n }\n\n moveFocus() {\n this.document.getElementById('content')?.focus();\n }\n\n\n\n onChangeSearch(val: string) {\n this.isLoading = true;\n this.searchTerm = val.trim();\n this.cdRef.markForCheck();\n\n this.searchService.search(val.trim()).pipe(takeUntilDestroyed(this.destroyRef)).subscribe(results => {\n this.searchResults = results;\n this.isLoading = false;\n this.cdRef.markForCheck();\n }, () => {\n this.searchResults.reset();\n this.isLoading = false;\n this.searchTerm = '';\n this.cdRef.markForCheck();\n });\n }\n\n goTo(statement: FilterStatement) {\n let params: any = {};\n const filter = this.filterUtilityService.createSeriesV2Filter();\n filter.statements = [statement];\n params['page'] = 1;\n this.clearSearch();\n this.filterUtilityService.applyFilterWithParams(['all-series'], filter, params);\n }\n\n goToOther(field: FilterField, value: string) {\n this.goTo({field, comparison: FilterComparison.Equal, value});\n }\n\n goToPerson(role: PersonRole, filter: any) {\n this.clearSearch();\n switch(role) {\n case PersonRole.Writer:\n this.goTo({field: FilterField.Writers, comparison: FilterComparison.Equal, value: filter});\n break;\n case PersonRole.Artist:\n this.goTo({field: FilterField.CoverArtist, comparison: FilterComparison.Equal, value: filter}); // TODO: What is this supposed to be?\n break;\n case PersonRole.Character:\n this.goTo({field: FilterField.Characters, comparison: FilterComparison.Equal, value: filter});\n break;\n case PersonRole.Colorist:\n this.goTo({field: FilterField.Colorist, comparison: FilterComparison.Equal, value: filter});\n break;\n case PersonRole.Editor:\n this.goTo({field: FilterField.Editor, comparison: FilterComparison.Equal, value: filter});\n break;\n case PersonRole.Inker:\n this.goTo({field: FilterField.Inker, comparison: FilterComparison.Equal, value: filter});\n break;\n case PersonRole.CoverArtist:\n this.goTo({field: FilterField.CoverArtist, comparison: FilterComparison.Equal, value: filter});\n break;\n case PersonRole.Letterer:\n this.goTo({field: FilterField.Letterer, comparison: FilterComparison.Equal, value: filter});\n break;\n case PersonRole.Penciller:\n this.goTo({field: FilterField.Penciller, comparison: FilterComparison.Equal, value: filter});\n break;\n case PersonRole.Publisher:\n this.goTo({field: FilterField.Publisher, comparison: FilterComparison.Equal, value: filter});\n break;\n case PersonRole.Translator:\n this.goTo({field: FilterField.Translators, comparison: FilterComparison.Equal, value: filter});\n break;\n }\n }\n\n clearSearch() {\n this.searchViewRef.clear();\n this.searchTerm = '';\n this.searchResults = new SearchResultGroup();\n this.cdRef.markForCheck();\n }\n\n clickSeriesSearchResult(item: SearchResult) {\n this.clearSearch();\n const libraryId = item.libraryId;\n const seriesId = item.seriesId;\n this.router.navigate(['library', libraryId, 'series', seriesId]);\n }\n\n clickFileSearchResult(item: MangaFile) {\n this.clearSearch();\n this.searchService.getSeriesForMangaFile(item.id).subscribe(series => {\n if (series !== undefined && series !== null) {\n this.router.navigate(['library', series.libraryId, 'series', series.id]);\n }\n });\n }\n\n clickChapterSearchResult(item: Chapter) {\n this.clearSearch();\n this.searchService.getSeriesForChapter(item.id).subscribe(series => {\n if (series !== undefined && series !== null) {\n this.router.navigate(['library', series.libraryId, 'series', series.id]);\n }\n });\n }\n\n clickLibraryResult(item: Library) {\n this.clearSearch();\n this.router.navigate(['library', item.id]);\n }\n\n clickCollectionSearchResult(item: CollectionTag) {\n this.clearSearch();\n this.router.navigate(['collections', item.id]);\n }\n\n clickReadingListSearchResult(item: ReadingList) {\n this.clearSearch();\n this.router.navigate(['lists', item.id]);\n }\n\n\n scrollToTop() {\n this.scrollService.scrollTo(0, this.scrollElem);\n }\n\n focusUpdate(searchFocused: boolean) {\n this.searchFocused = searchFocused;\n this.cdRef.markForCheck();\n }\n\n hideSideNav() {\n this.navService.toggleSideNav();\n }\n\n\n}\n","
\n \n
\n \n \n\n
\n
\n
\n \n
\n
\n \n \n \n
\n
\n
\n","import {Component, DestroyRef, HostListener, inject, Inject, OnInit} from '@angular/core';\nimport { NavigationStart, Router, RouterOutlet } from '@angular/router';\nimport {map, pluck, shareReplay, take} from 'rxjs/operators';\nimport { AccountService } from './_services/account.service';\nimport { LibraryService } from './_services/library.service';\nimport { NavService } from './_services/nav.service';\nimport { filter } from 'rxjs/operators';\nimport { NgbModal, NgbRatingConfig } from '@ng-bootstrap/ng-bootstrap';\nimport { DOCUMENT, NgClass, NgIf, AsyncPipe } from '@angular/common';\nimport { Observable } from 'rxjs';\nimport {ThemeService} from \"./_services/theme.service\";\nimport { SideNavComponent } from './sidenav/_components/side-nav/side-nav.component';\nimport {NavHeaderComponent} from \"./nav/_components/nav-header/nav-header.component\";\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\nimport {translate, TranslocoService} from \"@ngneat/transloco\";\n\n@Component({\n selector: 'app-root',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.scss'],\n standalone: true,\n imports: [NgClass, NgIf, SideNavComponent, RouterOutlet, AsyncPipe, NavHeaderComponent]\n})\nexport class AppComponent implements OnInit {\n\n transitionState$!: Observable;\n\n destroyRef = inject(DestroyRef);\n translocoService = inject(TranslocoService);\n\n constructor(private accountService: AccountService, public navService: NavService,\n private libraryService: LibraryService,\n private router: Router, private ngbModal: NgbModal, ratingConfig: NgbRatingConfig,\n @Inject(DOCUMENT) private document: Document, private themeService: ThemeService) {\n\n // Setup default rating config\n ratingConfig.max = 5;\n ratingConfig.resettable = true;\n\n // Close any open modals when a route change occurs\n router.events\n .pipe(filter(event => event instanceof NavigationStart), takeUntilDestroyed(this.destroyRef))\n .subscribe((event) => {\n if (this.ngbModal.hasOpenModals()) {\n this.ngbModal.dismissAll();\n }\n });\n\n this.transitionState$ = this.accountService.currentUser$.pipe(map((user) => {\n if (!user) return false;\n return user.preferences.noTransitions;\n }), takeUntilDestroyed(this.destroyRef));\n }\n\n @HostListener('window:resize', ['$event'])\n @HostListener('window:orientationchange', ['$event'])\n setDocHeight() {\n // Sets a CSS variable for the actual device viewport height. Needed for mobile dev.\n const vh = window.innerHeight * 0.01;\n this.document.documentElement.style.setProperty('--vh', `${vh}px`);\n }\n\n ngOnInit(): void {\n this.setDocHeight();\n this.setCurrentUser();\n }\n\n setCurrentUser() {\n const user = this.accountService.getUserFromLocalStorage();\n this.accountService.setCurrentUser(user);\n\n if (user) {\n // Bootstrap anything that's needed\n this.themeService.getThemes().subscribe();\n this.libraryService.getLibraryNames().pipe(take(1), shareReplay()).subscribe();\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule, PreloadAllModules } from '@angular/router';\nimport { AuthGuard } from './_guards/auth.guard';\nimport { LibraryAccessGuard } from './_guards/library-access.guard';\nimport { AdminGuard } from './_guards/admin.guard';\n\nconst routes: Routes = [\n {\n path: 'admin',\n canActivate: [AdminGuard],\n loadChildren: () => import('./admin/admin.module').then(m => m.AdminModule)\n },\n {\n path: 'collections',\n canActivate: [AuthGuard],\n loadChildren: () => import('./collections/collections.module').then(m => m.CollectionsModule)\n },\n {\n path: 'preferences',\n canActivate: [AuthGuard],\n loadChildren: () => import('./user-settings/user-settings.module').then(m => m.UserSettingsModule)\n },\n {\n path: 'lists',\n canActivate: [AuthGuard],\n loadChildren: () => import('./reading-list/reading-list.module').then(m => m.ReadingListModule)\n },\n {\n path: 'registration',\n loadChildren: () => import('../app/registration/registration.module').then(m => m.RegistrationModule)\n },\n {\n path: 'announcements',\n loadChildren: () => import('../app/announcements/announcements.module').then(m => m.AnnouncementsModule)\n },\n {\n path: 'bookmarks',\n loadChildren: () => import('../app/bookmark/bookmark.module').then(m => m.BookmarkModule)\n },\n {\n path: 'all-series',\n loadChildren: () => import('../app/all-series/all-series.module').then(m => m.AllSeriesModule)\n },\n {\n path: 'libraries',\n loadChildren: () => import('./dashboard/dashboard.module').then(m => m.DashboardModule)\n },\n {\n path: 'libraries',\n loadChildren: () => import('./dashboard/dashboard.module').then(m => m.DashboardModule)\n },\n {\n path: 'want-to-read',\n loadChildren: () => import('../app/want-to-read/want-to-read.module').then(m => m.WantToReadModule)\n },\n {\n path: 'library',\n runGuardsAndResolvers: 'always',\n canActivate: [AuthGuard, LibraryAccessGuard],\n children: [\n {\n path: ':libraryId',\n pathMatch: 'full',\n loadChildren: () => import('../app/library-detail/library-detail.module').then(m => m.LibraryDetailModule)\n },\n {\n path: ':libraryId/series/:seriesId',\n pathMatch: 'full',\n loadChildren: () => import('../app/series-detail/series-detail.module').then(m => m.SeriesDetailModule)\n },\n {\n path: ':libraryId/series/:seriesId/manga',\n loadChildren: () => import('../app/manga-reader/manga-reader.module').then(m => m.MangaReaderModule)\n },\n {\n path: ':libraryId/series/:seriesId/book',\n loadChildren: () => import('../app/book-reader/book-reader.module').then(m => m.BookReaderModule)\n },\n {\n path: ':libraryId/series/:seriesId/pdf',\n loadChildren: () => import('../app/pdf-reader/pdf-reader.module').then(m => m.PdfReaderModule)\n },\n ]\n },\n {path: 'login', loadChildren: () => import('../app/registration/registration.module').then(m => m.RegistrationModule)},\n {path: '**', pathMatch: 'full', redirectTo: 'libraries'},\n {path: '**', pathMatch: 'prefix', redirectTo: 'libraries'},\n];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes, {scrollPositionRestoration: 'enabled', preloadingStrategy: PreloadAllModules})],\n exports: [RouterModule]\n})\nexport class AppRoutingModule { }\n","import {Injectable} from '@angular/core';\nimport {\n HttpRequest,\n HttpHandler,\n HttpEvent,\n HttpInterceptor\n} from '@angular/common/http';\nimport {Observable, switchMap} from 'rxjs';\nimport { AccountService } from '../_services/account.service';\nimport { take } from 'rxjs/operators';\n\n@Injectable()\nexport class JwtInterceptor implements HttpInterceptor {\n\n constructor(private accountService: AccountService) {}\n\n intercept(request: HttpRequest, next: HttpHandler): Observable> {\n return this.accountService.currentUser$.pipe(\n take(1),\n switchMap(user => {\n if (user) {\n request = request.clone({\n setHeaders: {\n Authorization: `Bearer ${user.token}`\n }\n });\n }\n return next.handle(request);\n }));\n }\n}\n","import {Injectable} from '@angular/core';\nimport {\n HttpRequest,\n HttpHandler,\n HttpEvent,\n HttpInterceptor\n} from '@angular/common/http';\nimport { Observable, throwError } from 'rxjs';\nimport { Router } from '@angular/router';\nimport { ToastrService } from 'ngx-toastr';\nimport { catchError } from 'rxjs/operators';\nimport { AccountService } from '../_services/account.service';\nimport {translate, TranslocoService} from \"@ngneat/transloco\";\n\n@Injectable()\nexport class ErrorInterceptor implements HttpInterceptor {\n constructor(private router: Router, private toastr: ToastrService,\n private accountService: AccountService,\n private translocoService: TranslocoService) {}\n\n\n intercept(request: HttpRequest, next: HttpHandler): Observable> {\n return next.handle(request).pipe(\n catchError(error => {\n if (error === undefined || error === null) {\n return throwError(error);\n }\n\n switch (error.status) {\n case 400:\n this.handleValidationError(error);\n break;\n case 401:\n this.handleAuthError(error);\n break;\n case 404:\n this.handleNotFound(error);\n break;\n case 500:\n this.handleServerException(error);\n break;\n default:\n // Don't throw multiple Something unexpected went wrong\n let genericError = translate('errors.generic');\n if (this.toastr.previousToastMessage !== 'Something unexpected went wrong.' && this.toastr.previousToastMessage !== genericError) {\n this.toast(genericError);\n }\n break;\n }\n return throwError(error);\n })\n );\n }\n\n private handleValidationError(error: any) {\n // This 400 can also be a bad request\n if (Array.isArray(error.error)) {\n const modalStateErrors: any[] = [];\n if (error.error.length > 0 && error.error[0].hasOwnProperty('message')) {\n if (error.error[0].details === null) {\n error.error.forEach((issue: {status: string, details: string, message: string}) => {\n modalStateErrors.push(issue.message);\n });\n } else {\n error.error.forEach((issue: {status: string, details: string, message: string}) => {\n modalStateErrors.push(issue.details);\n });\n }\n } else {\n error.error.forEach((issue: {code: string, description: string}) => {\n modalStateErrors.push(issue.description);\n });\n }\n throw modalStateErrors.flat();\n } else if (error.error.errors) {\n // Validation error\n const modalStateErrors = [];\n for (const key in error.error.errors) {\n if (error.error.errors[key]) {\n modalStateErrors.push(error.error.errors[key]);\n }\n }\n throw modalStateErrors.flat();\n } else {\n console.error('error:', error);\n if (error.statusText === 'Bad Request') {\n if (error.error instanceof Blob) {\n this.toast('errors.download', error.status);\n return;\n }\n this.toast(error.error, this.translocoService.translate('errors.error-code', {num: error.status}));\n } else {\n this.toast(error.statusText === 'OK' ? error.error : error.statusText, this.translocoService.translate('errors.error-code', {num: error.status}));\n }\n }\n }\n\n private handleNotFound(error: any) {\n this.toast('errors.not-found');\n }\n\n private handleServerException(error: any) {\n const err = error.error;\n if (err.hasOwnProperty('message') && err.message.trim() !== '') {\n if (err.message != 'User is not authenticated' && error.message !== 'errors.user-not-auth') {\n console.error('500 error: ', error);\n }\n this.toast(err.message);\n } else if (error.hasOwnProperty('message') && error.message.trim() !== '') {\n if (error.message !== 'User is not authenticated' && error.message !== 'errors.user-not-auth') {\n console.error('500 error: ', error);\n }\n // This just throws duplicate errors for no reason\n //this.toast(error.message);\n }\n else {\n this.toast('errors.unknown-crit');\n console.error('500 error:', error);\n }\n }\n\n private handleAuthError(error: any) {\n\n // Special hack for register url, to not care about auth\n if (location.href.includes('/registration/confirm-email?token=')) {\n return;\n }\n // NOTE: Signin has error.error or error.statusText available.\n // if statement is due to http/2 spec issue: https://github.com/angular/angular/issues/23334\n this.accountService.logout();\n }\n\n // Assume the title is already translated\n private toast(message: string, title?: string) {\n if (message.startsWith('errors.')) {\n this.toastr.error(this.translocoService.translate(message), title);\n } else {\n this.toastr.error(message, title);\n }\n }\n\n}\n","import {Injectable} from \"@angular/core\";\nimport {HttpClient} from \"@angular/common/http\";\nimport {Translation, TranslocoLoader} from \"@ngneat/transloco\";\n\n\n@Injectable({ providedIn: 'root' })\nexport class HttpLoader implements TranslocoLoader {\n constructor(private http: HttpClient) {}\n\n getTranslation(langPath: string) {\n const tokens = langPath.split('/');\n return this.http.get(`assets/langs/${tokens[tokens.length - 1]}.json`);\n }\n}\n","/// \nimport {\n APP_INITIALIZER, ApplicationConfig,\n importProvidersFrom,\n\n} from '@angular/core';\nimport { AppComponent } from './app/app.component';\nimport { NgCircleProgressModule } from 'ng-circle-progress';\nimport { ToastrModule } from 'ngx-toastr';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { AppRoutingModule } from './app/app-routing.module';\nimport { SAVER, getSaver } from './app/shared/_providers/saver.provider';\nimport { Title, BrowserModule, bootstrapApplication } from '@angular/platform-browser';\nimport { JwtInterceptor } from './app/_interceptors/jwt.interceptor';\nimport { ErrorInterceptor } from './app/_interceptors/error.interceptor';\nimport {HTTP_INTERCEPTORS, withInterceptorsFromDi, provideHttpClient} from '@angular/common/http';\nimport {\n provideTransloco,\n TranslocoService\n} from \"@ngneat/transloco\";\nimport {environment} from \"./environments/environment\";\nimport {HttpLoader} from \"./httpLoader\";\nimport {\n provideTranslocoPersistLang,\n} from '@ngneat/transloco-persist-lang';\nimport {AccountService} from \"./app/_services/account.service\";\nimport {switchMap} from \"rxjs\";\nimport {provideTranslocoLocale} from \"@ngneat/transloco-locale\";\nimport {provideTranslocoPersistTranslations} from \"@ngneat/transloco-persist-translations\";\n\nconst disableAnimations = !('animate' in document.documentElement);\n\nexport function preloadUser(userService: AccountService, transloco: TranslocoService) {\n return function() {\n return userService.currentUser$.pipe(switchMap((user) => {\n if (user && user.preferences.locale) {\n transloco.setActiveLang(user.preferences.locale);\n return transloco.load(user.preferences.locale)\n }\n\n // If no user or locale is available, fallback to the default language ('en')\n const localStorageLocale = localStorage.getItem(AccountService.localeKey) || 'en';\n transloco.setActiveLang(localStorageLocale);\n return transloco.load(localStorageLocale)\n })).subscribe();\n };\n}\n\n\nexport const preLoad = {\n provide: APP_INITIALIZER,\n multi: true,\n useFactory: preloadUser,\n deps: [AccountService, TranslocoService]\n};\n\nfunction transformLanguageCodes(arr: Array) {\n const transformedArray: Array = [];\n\n arr.forEach(code => {\n // Add the original code\n transformedArray.push(code);\n\n // Check if the code has a hyphen (like uk-UA)\n if (code.includes('-')) {\n // Transform hyphen to underscore and add to the array\n const transformedCode = code.replace('-', '_');\n transformedArray.push(transformedCode);\n }\n });\n\n return transformedArray;\n}\n\n// All Languages Kavita will support: http://www.lingoes.net/en/translator/langcode.htm\nconst languageCodes = [\n 'af', 'af-ZA', 'ar', 'ar-AE', 'ar-BH', 'ar-DZ', 'ar-EG', 'ar-IQ', 'ar-JO', 'ar-KW',\n 'ar-LB', 'ar-LY', 'ar-MA', 'ar-OM', 'ar-QA', 'ar-SA', 'ar-SY', 'ar-TN', 'ar-YE',\n 'az', 'az-AZ', 'az-AZ', 'be', 'be-BY', 'bg', 'bg-BG', 'bs-BA', 'ca', 'ca-ES', 'cs',\n 'cs-CZ', 'cy', 'cy-GB', 'da', 'da-DK', 'de', 'de-AT', 'de-CH', 'de-DE', 'de-LI', 'de-LU',\n 'dv', 'dv-MV', 'el', 'el-GR', 'en', 'en-AU', 'en-BZ', 'en-CA', 'en-CB', 'en-GB', 'en-IE',\n 'en-JM', 'en-NZ', 'en-PH', 'en-TT', 'en-US', 'en-ZA', 'en-ZW', 'eo', 'es', 'es-AR', 'es-BO',\n 'es-CL', 'es-CO', 'es-CR', 'es-DO', 'es-EC', 'es-ES', 'es-ES', 'es-GT', 'es-HN', 'es-MX',\n 'es-NI', 'es-PA', 'es-PE', 'es-PR', 'es-PY', 'es-SV', 'es-UY', 'es-VE', 'et', 'et-EE',\n 'eu', 'eu-ES', 'fa', 'fa-IR', 'fi', 'fi-FI', 'fo', 'fo-FO', 'fr', 'fr-BE', 'fr-CA',\n 'fr-CH', 'fr-FR', 'fr-LU', 'fr-MC', 'gl', 'gl-ES', 'gu', 'gu-IN', 'he', 'he-IL', 'hi',\n 'hi-IN', 'hr', 'hr-BA', 'hr-HR', 'hu', 'hu-HU', 'hy', 'hy-AM', 'id', 'id-ID', 'is',\n 'is-IS', 'it', 'it-CH', 'it-IT', 'ja', 'ja-JP', 'ka', 'ka-GE', 'kk', 'kk-KZ', 'kn',\n 'kn-IN', 'ko', 'ko-KR', 'kok', 'kok-IN', 'ky', 'ky-KG', 'lt', 'lt-LT', 'lv', 'lv-LV',\n 'mi', 'mi-NZ', 'mk', 'mk-MK', 'mn', 'mn-MN', 'mr', 'mr-IN', 'ms', 'ms-BN', 'ms-MY',\n 'mt', 'mt-MT', 'nb', 'nb-NO', 'nl', 'nl-BE', 'nl-NL', 'nn-NO', 'ns', 'ns-ZA', 'pa',\n 'pa-IN', 'pl', 'pl-PL', 'ps', 'ps-AR', 'pt', 'pt-BR', 'pt-PT', 'qu', 'qu-BO', 'qu-EC',\n 'qu-PE', 'ro', 'ro-RO', 'ru', 'ru-RU', 'sa', 'sa-IN', 'se', 'se-FI', 'se-FI', 'se-FI',\n 'se-NO', 'se-NO', 'se-NO', 'se-SE', 'se-SE', 'se-SE', 'sk', 'sk-SK', 'sl', 'sl-SI',\n 'sq', 'sq-AL', 'sr-BA', 'sr-BA', 'sr-SP', 'sr-SP', 'sv', 'sv-FI', 'sv-SE', 'sw', 'sw-KE',\n 'syr', 'syr-SY', 'ta', 'ta-IN', 'te', 'te-IN', 'th', 'th-TH', 'tl', 'tl-PH', 'tn',\n 'tn-ZA', 'tr', 'tr-TR', 'tt', 'tt-RU', 'ts', 'uk', 'uk-UA', 'ur', 'ur-PK', 'uz',\n 'uz-UZ', 'uz-UZ', 'vi', 'vi-VN', 'xh', 'xh-ZA', 'zh', 'zh-CN', 'zh-HK', 'zh-MO',\n 'zh-SG', 'zh-TW', 'zu', 'zu-ZA', 'zh_Hans',\n];\n\nconst translocoOptions = {\n config: {\n reRenderOnLangChange: true,\n availableLangs: transformLanguageCodes(languageCodes),\n prodMode: environment.production,\n defaultLang: 'en',\n fallbackLang: 'en',\n missingHandler: {\n useFallbackTranslation: true,\n allowEmpty: false,\n }\n }\n};\n\nbootstrapApplication(AppComponent, {\n providers: [\n importProvidersFrom(BrowserModule,\n AppRoutingModule,\n BrowserAnimationsModule.withConfig({ disableAnimations }),\n ToastrModule.forRoot({\n positionClass: 'toast-bottom-right',\n preventDuplicates: true,\n timeOut: 6000,\n countDuplicates: true,\n autoDismiss: true\n }),\n NgCircleProgressModule.forRoot(),\n ),\n provideTransloco(translocoOptions),\n provideTranslocoLocale({\n defaultLocale: 'en'\n }),\n provideTranslocoPersistTranslations({\n loader: HttpLoader,\n storage: { useValue: localStorage }\n }),\n provideTranslocoPersistLang({\n storage: {\n useValue: localStorage,\n },\n }),\n { provide: HTTP_INTERCEPTORS, useClass: ErrorInterceptor, multi: true },\n { provide: HTTP_INTERCEPTORS, useClass: JwtInterceptor, multi: true },\n preLoad,\n Title,\n { provide: SAVER, useFactory: getSaver },\n provideHttpClient(withInterceptorsFromDi())\n ]\n} as ApplicationConfig)\n.catch(err => console.error(err));\n"],"x_google_ignoreList":[]}