platypush/platypush/backend/http/webapp/dist/static/js/2790.73c2ca0a.js.map

1 line
67 KiB
Plaintext

{"version":3,"file":"static/js/2790.73c2ca0a.js","mappings":"4LACSA,MAAM,kB,6CAYPA,MAAM,S,GACJA,MAAM,cAAcC,IAAI,S,GAE1BD,MAAM,QAAQC,IAAI,S,4DAfxB,QAiBQ,QAjBR,EAiBQ,EAhBN,OASgC,SATzBD,MAAM,SAASE,KAAK,QAAQD,IAAI,QAASE,IAAK,EAAAC,MAAK,GAAMC,IAAK,EAAAD,MAAK,GAClEE,KAAM,EAAAA,KAAOC,SAAU,EAAAA,SAAWC,MAAO,EAAAA,MACzC,QAAK,8BAAO,EAAAC,UAAA,EAAAA,YAAA,IAAQ,WACpB,SAAM,8BAAO,EAAAA,UAAA,EAAAA,YAAA,IAAQ,WACrB,UAAO,8BAAO,EAAAA,UAAA,EAAAA,YAAA,IAAQ,WACtB,YAAS,8BAAO,EAAAA,UAAA,EAAAA,YAAA,IAAQ,WACxB,aAAU,8BAAO,EAAAA,UAAA,EAAAA,YAAA,IAAQ,WACzB,WAAQ,8BAAO,EAAAA,UAAA,EAAAA,YAAA,IAAQ,WACvB,QAAK,8BAAO,EAAAA,UAAA,EAAAA,YAAA,IAAQ,WACpB,UAAO,8BAAO,EAAAA,UAAA,EAAAA,YAAA,IAAQ,YAT9B,YAWD,OAEM,MAFN,EAEM,EADJ,OAA2C,MAA3C,EAA2C,aAE7C,OAAqC,MAArC,EAAqC,UACX,EAAAC,YAAA,WAA1B,QAA2D,Q,MAArDV,MAAM,Q,aAAyB,QAAc,EAAD,QAAlD,4B,CAKH,OACEW,KAAM,SACNC,MAAO,CAAC,QAAS,SAAU,UAAW,YAAa,aAAc,WAAY,QAAS,WACtFC,MAAO,CACLL,MAAO,CACLN,KAAMY,QAGRP,SAAU,CACRL,KAAMa,QACNC,SAAS,GAGXZ,MAAO,CACLF,KAAMe,MACND,QAAS,IAAM,CAAC,EAAG,MAGrBV,KAAM,CACJJ,KAAMY,OACNE,QAAS,GAGXN,UAAW,CACTR,KAAMa,QACNC,SAAS,IAIbE,QAAS,CACPT,SAASU,GACPC,KAAKC,OAAOF,EAAMG,OAAOd,OACzBY,KAAKG,MAAMJ,EAAMjB,KAAM,IAClBiB,EACHG,OAAQ,IACHH,EAAMG,OACTd,MAAOY,KAAKI,MAAMpB,MAAMI,QAG7B,EAEDa,OAAOb,GACL,MAAMiB,EAAqC,KAAzBjB,EAAQY,KAAKhB,MAAM,KAAcgB,KAAKhB,MAAM,GAAKgB,KAAKhB,MAAM,IAC9EgB,KAAKI,MAAME,MAAMC,MAAMC,KAAQ,GAAEH,KACjCL,KAAKI,MAAME,MAAMC,MAAME,UAAa,cAAaJ,YACjDL,KAAKI,MAAMM,MAAMH,MAAMI,MAAS,GAAEN,IACnC,GAGHO,UACoB,MAAdZ,KAAKZ,OACPY,KAAKC,OAAOD,KAAKZ,MACpB,G,UCnEH,MAAMyB,GAA2B,OAAgB,EAAQ,CAAC,CAAC,SAASC,GAAQ,CAAC,YAAY,qBAEzF,O,0KCHM,OAEM,OAFDlC,MAAM,UAAQ,EACjB,OAAmB,OAAdA,MAAM,UADb,K,GAGMA,MAAM,S,0CARhB,QAYM,OAZDA,OAAK,SAAC,eAAc,UAAoB,EAAAO,YAAY,QAAK,8BAAO,EAAA4B,SAAA,EAAAA,WAAA,IAAO,YAA5E,EAEE,OAAwC,SAAjCjC,KAAK,WAAYkC,QAAS,EAAA5B,OAAjC,WACA,OAQQ,cANN,GAGA,OAEO,OAFP,EAEO,EADL,QAAQ,sCATd,E,CAgBF,OACEG,KAAM,eACNC,MAAO,CAAC,SACRC,MAAO,CACLL,MAAO,CACLN,KAAMa,QACNC,SAAS,GAGXT,SAAU,CACRL,KAAMa,QACNC,SAAS,IAIbE,QAAS,CACPiB,QAAQhB,GACN,GAAIC,KAAKb,SACP,OAAO,EAETa,KAAKG,MAAM,QAASJ,EACrB,I,UC/BL,MAAMc,GAA2B,OAAgB,EAAQ,CAAC,CAAC,SAASC,GAAQ,CAAC,YAAY,qBAEzF,O,4FCROlC,MAAM,4B,GAGJA,MAAM,Q,GAMNA,MAAM,Q,GASNA,MAAM,Q,wLAlBb,QAiCM,MAjCN,EAiCM,CAhCW,EAAAqC,UAAA,WAAf,QAA0B,aAA1B,gBAEA,OAIM,MAJN,EAIM,EAHJ,QAEQ,GAFDC,MAAM,cAAcrC,IAAI,aAA/B,C,kBACE,IAA6D,CAAhB,EAAAsC,eAAA,WAA7C,QAA6D,G,MAAjDC,KAAM,EAAAC,MAAM,EAAAF,eAAxB,qC,KADF,QAKF,OAOM,MAPN,EAOM,EANJ,QAKQ,GALDD,MAAM,aAAarC,IAAI,cAA9B,C,kBACE,IAGuE,CAAjB,EAAAyC,gBAAA,WAHtD,QAGuE,G,MAH1DC,MAAO,EAAAF,MAAM,EAAAF,cAAcK,OAAO,EAAAF,eAAiBG,QAAS,EAAAJ,MAAM,EAAAF,cAAcM,QAChFC,QAAS,EAAAC,cAAc,EAAAR,cAAgBF,QAAS,EAAAA,QAAU,YAAY,EAAAW,iBACtE,eAAe,EAAAC,sBAAwB,eAAe,EAAAC,aACtD,cAAY,eAAE,EAAAC,YAAYC,KAHvC,oH,KADF,QAQF,OAKM,MALN,EAKM,EAJJ,QAGQ,GAHDd,MAAM,cAAcrC,IAAI,eAA/B,C,kBACE,IACyG,CAAlB,EAAAoD,iBAAA,WADvF,QACyG,G,MAD3FC,OAAQ,EAAAb,MAAM,EAAAF,cAAcK,OAAO,EAAAF,eAAeI,QAAQ,EAAAO,gBAAkBhB,QAAS,EAAAA,QACrF,eAAe,EAAAkB,aAAe,eAAa,eAAE,EAAAC,aAAaJ,KADxE,kE,KADF,SAcE,aARJ,QAOwC,mBAPb,EAAAX,OAAK,CAAlBgB,EAAMC,M,WAApB,QAOwC,GAPLC,IAAKD,EACnCE,OAAQH,EAAKG,OACbf,QAASY,EAAKZ,QACdD,OAAQa,EAAKb,OACb,kBAAiB,eAAE,EAAAiB,UAAUT,IAC7B,mBAAkB,eAAE,EAAAU,WAAWV,IAC/B,qBAAoB,eAAE,EAAAW,gBAAgBX,IACtC,YAAU,eAAE,EAAAY,YAAYZ,KAP7B,gD,kGCzBGpD,MAAM,Q,GACJA,MAAM,U,UAEP,OAAiC,KAA9BA,MAAM,qBAAmB,W,GAGzBA,MAAM,4B,SAORA,MAAM,mB,oEAbb,QA2BM,MA3BN,EA2BM,EA1BJ,OAUM,MAVN,EAUM,EATJ,OAGM,OAHDA,MAAM,cAAe,QAAK,eAAE,EAAAuB,MAAK,+BAAoC,EAAAqC,OAAOH,KAAK9C,SAAtF,CACE,WAAiC,KACjC,QAAG,EAAAiD,OAAOH,KAAK9C,MAAI,MAErB,OAIM,MAJN,EAIM,EAHJ,OAES,UAFDT,KAAK,SAAU,QAAK,eAAE,EAAA+D,WAAa,EAAAA,YAA3C,EACE,OAA4F,KAAzFjE,OAAK,SAAC,UAAS,kBAA4B,EAAAiE,UAAS,kBAAqB,EAAAA,cAA5E,cAK8B,EAAAA,WAApC,iBAAoC,WAApC,QAaM,MAbN,EAaM,gBAZJ,QAWE,mBAX2B,EAAArB,QAAM,CAApBD,EAAOe,M,WAAtB,QAWE,GAXoCC,IAAKD,EACnCA,GAAIf,EAAMe,GACV/C,KAAMgC,EAAMhC,KACZiD,OAAQ,EAAAA,OAAOH,KACfS,MAAOvB,EAAMuB,MACbpB,QAASH,EAAMG,QACfqB,OAAQ,EAAAtB,QAAQF,EAAMyB,WACtB,YAAU,eAAE,EAAA7C,MAAK,aAAe6B,IAChC,kBAAiB,eAAE,EAAA7B,MAAK,oBAAsB6B,IAC9C,mBAAkB,eAAE,EAAA7B,MAAK,qBAAuB6B,IAChD,qBAAoB,eAAE,EAAA7B,MAAK,uBAAyB6B,KAV5D,uE,UCdCpD,MAAM,S,GACJA,MAAM,Q,GAMJA,MAAM,2B,GAMRA,MAAM,Q,gGAbb,QA2BM,MA3BN,EA2BM,EA1BJ,OAUM,MAVN,EAUM,EATJ,OAGM,OAHDA,MAAM,cAAe,QAAK,eAAE,EAAAuB,MAAK,iCAAsC,EAAAmC,GAAE,KAAQ,EAAAE,OAAOjD,SAA7F,EACE,OAAiH,KAA9GX,OAAK,SAAC,UAAS,WAAkC,YAAb,EAAAmE,OAAOE,OAAM,UAAwC,YAAb,EAAAF,OAAOE,WAAtF,iBAAiH,KACjH,QAAG,EAAA1D,MAAQ,EAAAwD,OAAOT,IAAM,EAAAA,IAAE,MAG5B,OAGM,MAHN,EAGM,EAFJ,QACmG,GADpFlD,OAAQ,EAAA0D,MACR,QAAK,eAAE,EAAA3C,MAAK,0BAA6B,EAAAqC,OAAOjD,KAAI,MAAS,EAAA+C,GAAE,OAAU,EAAAQ,UADxF,uBAKJ,OAaM,MAbN,EAaM,gBAZJ,QAW6D,mBAXpC,EAAApB,SAAVQ,K,WAAf,QAW6D,GAX1BK,IAAKL,EAAOI,GACtCY,OAAQhB,EAAOgB,OACfC,UAAWjB,EAAOiB,UAClBX,OAAQ,EAAAA,OACRH,KAAMH,EAAOG,KACbe,QAAS,EAAAd,GACTA,GAAIJ,EAAOI,GACXe,SAAUnB,EAAOmB,SACjBC,WAAYpB,EAAOoB,WACnB,YAAU,eAAE,EAAAnD,MAAK,aAAe6B,IAChC,eAAa,eAAE,EAAA7B,MAAK,uBAAyB6B,IAC7C,aAAW,eAAE,EAAA7B,MAAK,qBAAuB6B,KAXlD,kG,uCCTGpD,MAAM,6B,GACJA,MAAM,2B,GAKNA,MAAM,2B,gGAXf,QAgBM,OAhBDA,OAAK,SAAC,aAAY,UAAoB,EAAAuE,cAA3C,EACE,OAEM,OAFDvE,MAAM,wB,aAAwB,QAAsD,EAAxC,OAACW,MAAMgE,OAAS,EAAAL,OAAO3D,KAAO,EAAA8C,KAAK9C,MAC9E,QAAK,eAAE,EAAAY,MAAK,mCAAwC,EAAAmC,GAAE,MAAS,EAAAc,QAAO,KAAQ,EAAAZ,OAAOjD,SAD3F,WAIA,OAUM,MAVN,EAUM,EATJ,OAGM,MAHN,EAGM,EAFJ,QAC0G,GADjGP,MAAO,CAAC,EAAG,KAAOI,MAAO,EAAA8D,OAAOM,OAAOnD,QACvC,UAAO,eAAE,EAAAF,MAAK,sBAAyB,EAAAqC,OAAOjD,KAAI,OAAU,EAAA+C,GAAE,OAAUN,EAAO9B,OAAOd,UAD/F,qBAIF,OAGM,MAHN,EAGM,EAFJ,QAC4G,GAD7FA,OAAQ,EAAA8D,OAAOM,OAAOV,MACtB,QAAK,eAAE,EAAA3C,MAAK,oBAAuB,EAAAqC,OAAOjD,KAAI,OAAU,EAAA+C,GAAE,OAAU,EAAAY,OAAOM,OAAOV,UADjG,uBAZN,E,cAuBF,GACEvD,KAAM,SACNkE,WAAY,CAACC,OAAD,IAASC,aAAY,KACjCnE,MAAO,CAAC,gBAAiB,cAAe,cAExCC,MAAO,CACLyD,OAAQ,CACNpE,KAAM8E,OACNC,UAAU,GAGZV,UAAW,CACTrE,KAAMa,QACNC,SAAS,GAGXyC,KAAM,CACJvD,KAAM8E,OACNC,UAAU,GAGZvB,GAAI,CACFxD,KAAMgF,OACND,UAAU,GAGZT,QAAS,CACPtE,KAAMgF,OACND,UAAU,GAGZR,SAAU,CACRvE,KAAM8E,OACNhE,QAAS,QAGX0D,WAAY,CACVxE,KAAM8E,OACNC,UAAU,GAGZrB,OAAQ,CACN1D,KAAM8E,OACNC,UAAU,K,UC5DhB,MAAMhD,GAA2B,OAAgB,EAAQ,CAAC,CAAC,SAAS,GAAQ,CAAC,YAAY,qBAEzF,QF0BA,GACEtB,KAAM,QACNkE,WAAY,CAACM,OAAD,EAASJ,aAAY,KACjCnE,MAAO,CAAC,oBAAqB,aAAc,uBAAwB,sBACnEC,MAAO,CACL6C,GAAI,CACFxD,KAAMgF,QAGRpC,QAAS,CACP5C,KAAM8E,OACNhE,QAAS,QAGXkD,MAAO,CACLhE,KAAMa,SAGRJ,KAAM,CACJT,KAAMgF,QAGRf,OAAQ,CACNjE,KAAM8E,QAGRpB,OAAQ,CACN1D,KAAM8E,UGvDZ,MAAM,GAA2B,OAAgB,EAAQ,CAAC,CAAC,SAAS,GAAQ,CAAC,YAAY,qBAEzF,QJyBA,GACErE,KAAM,OACNC,MAAO,CAAC,aAAc,oBAAqB,qBAAsB,wBACjEiE,WAAY,CAACO,MAAK,GAElBvE,MAAO,CACL+B,OAAQ,CACN1C,KAAM8E,OACNhE,QAAS,QAGX4C,OAAQ,CACN1D,KAAM8E,OACNhE,QAAS,QAGX6B,QAAS,CACP3C,KAAM8E,OACNhE,QAAS,SAIbqE,OACE,MAAO,CACLpB,WAAW,EAEd,GKrDH,MAAM,GAA2B,OAAgB,EAAQ,CAAC,CAAC,SAAS,GAAQ,CAAC,YAAY,qBAEzF,Q,SCROjE,MAAM,Q,SACJA,MAAM,O,GACT,OAAyC,OAApCA,MAAM,eAAc,cAAU,G,2BAIhCA,MAAM,O,GACT,OAA0C,OAArCA,MAAM,eAAc,eAAW,G,2BAIjCA,MAAM,O,GACT,OAAmC,OAA9BA,MAAM,eAAc,QAAI,G,2BAI1BA,MAAM,O,GACT,OAAmC,OAA9BA,MAAM,eAAc,QAAI,G,4BAI1BA,MAAM,O,IACT,OAAiC,OAA5BA,MAAM,eAAc,MAAE,G,6BAIxBA,MAAM,O,IACT,OAA2C,OAAtCA,MAAM,eAAc,gBAAY,G,6BAIlCA,MAAM,O,IACT,OAA0C,OAArCA,MAAM,eAAc,eAAW,G,6BAIjCA,MAAM,O,IACT,OAA6C,OAAxCA,MAAM,eAAc,kBAAc,G,6BAIpCA,MAAM,O,IACT,OAA+C,OAA1CA,MAAM,eAAc,oBAAgB,G,6BAItCA,MAAM,O,IACT,OAAuD,OAAlDA,MAAM,eAAc,4BAAwB,G,8DA/CrD,QAkDM,MAlDN,EAkDM,CAjDmB,EAAAwC,MAAMoB,QAAQH,MAAM6B,IAAIX,SAAA,WAA/C,QAGM,MAHN,EAGM,CAFJ,GACA,OAA4D,OAAvD3E,MAAM,c,aAAc,QAA4B,EAAhB,KAAC4D,OAAOH,KAAK6B,KAAlD,cAFF,eAKuB,EAAA9C,MAAMoB,QAAQH,MAAM8B,KAAKZ,SAAA,WAAhD,QAGM,MAHN,EAGM,CAFJ,GACA,OAA6D,OAAxD3E,MAAM,c,aAAc,QAA6B,EAAjB,KAAC4D,OAAOH,KAAK8B,MAAlD,cAFF,eAKuB,EAAA/C,MAAMoB,QAAQH,MAAM9C,MAAMgE,SAAA,WAAjD,QAGM,MAHN,EAGM,CAFJ,GACA,OAA8D,OAAzD3E,MAAM,c,aAAc,QAA8B,EAAlB,KAAC4D,OAAOH,KAAK9C,OAAlD,cAFF,eAKuB,EAAA6B,MAAMoB,QAAQH,MAAM+B,OAAA,WAA3C,QAGM,MAHN,EAGM,CAFJ,GACA,OAA8D,OAAzDxF,MAAM,c,aAAc,QAA8B,EAAlB,KAAC4D,OAAOH,KAAK+B,OAAlD,cAFF,eAKuB,EAAAhD,MAAMoB,QAAQH,MAAMgC,IAAId,SAAA,WAA/C,QAGM,MAHN,GAGM,CAFJ,IACA,OAA4D,OAAvD3E,MAAM,c,aAAc,QAA4B,EAAhB,KAAC4D,OAAOH,KAAKgC,KAAlD,eAFF,eAKuB,EAAAjD,MAAMoB,QAAQH,MAAMiC,MAAMf,SAAA,WAAjD,QAGM,MAHN,GAGM,CAFJ,IACA,OAA8D,OAAzD3E,MAAM,c,aAAc,QAA8B,EAAlB,KAAC4D,OAAOH,KAAKiC,OAAlD,eAFF,eAKuB,EAAAlD,MAAMoB,QAAQ+B,YAAYhF,MAAMgE,SAAA,WAAvD,QAGM,MAHN,GAGM,CAFJ,IACA,OAAoE,OAA/D3E,MAAM,c,aAAc,QAAoC,EAAxB,KAAC4D,OAAO+B,WAAWhF,OAAxD,eAFF,eAKuB,EAAA6B,MAAMoB,QAAQ+B,YAAYC,SAASjB,SAAA,WAA1D,QAGM,MAHN,GAGM,CAFJ,IACA,OAAuE,OAAlE3E,MAAM,c,aAAc,QAAuC,EAA3B,KAAC4D,OAAO+B,WAAWC,UAAxD,eAFF,eAKuB,EAAApD,MAAMoB,QAAQ+B,YAAYE,kBAAA,WAAjD,QAGM,MAHN,GAGM,CAFJ,IACA,OAA+E,OAA1E7F,MAAM,c,aAAc,QAA+C,EAAnC,KAAC4D,OAAO+B,WAAWE,kBAAxD,eAFF,eAKuB,EAAArD,MAAMoB,QAAQ+B,YAAYG,yBAAA,WAAjD,QAGM,MAHN,GAGM,CAFJ,IACA,OAAsF,OAAjF9F,MAAM,c,aAAc,QAAsD,EAA1C,KAAC4D,OAAO+B,WAAWG,yBAAxD,eAFF,gB,CAQJ,QACEnF,KAAM,YACNE,MAAO,CACL2B,KAAM,CACJtC,KAAM8E,OACNhE,QAAS,UCvDf,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,SAAS,MAEpE,U,iECNOhB,MAAM,Q,IACJA,MAAM,gB,YACT,OAA6B,OAAxBA,MAAM,SAAQ,QAAI,K,IAClBA,MAAM,O,IACJA,MAAM,c,+BAGP,OAAwB,KAArBA,MAAM,cAAY,W,IAArB,I,UAMHA,MAAM,mB,YACT,OAAgC,OAA3BA,MAAM,SAAQ,WAAO,K,sEAevBA,MAAM,mB,YACT,OAA+B,OAA1BA,MAAM,SAAQ,UAAM,K,IACpBA,MAAM,O,YACT,OAAiC,OAA5BA,MAAM,eAAc,MAAE,K,IACtBA,MAAM,e,kEAgBRA,MAAM,O,YACT,OAAuC,OAAlCA,MAAM,iBAAgB,UAAM,K,6BAI9BA,MAAM,O,YACT,OAA8C,OAAzCA,MAAM,0BAAyB,QAAI,K,6BAIrCA,MAAM,O,YACT,OAA8C,OAAzCA,MAAM,0BAAyB,QAAI,K,6BAIrCA,MAAM,O,YACT,OAA6C,OAAxCA,MAAM,0BAAyB,OAAG,K,8DAjE7C,QAqEM,MArEN,GAqEM,EApEJ,OAUM,MAVN,GAUM,CATJ,IACA,OAOM,MAPN,GAOM,EANJ,OAKM,MALN,GAKM,EAJJ,OAA0E,QAApEA,MAAM,O,aAAO,QAAoD,EAAvC,MAACW,MAAMgE,OAAS,EAAAhC,MAAMhC,KAAI,YAA1D,YACA,OAES,UAFDX,MAAM,aAAasC,MAAM,SAAU,QAAK,oBAAE,EAAAa,aAAA,EAAAA,eAAA,KAAlD,UAO6B6B,OAAOe,KAAK,EAAApD,OAAOG,SAAO,IAAQ6B,OAAM,eAA3E,QAcM,MAdN,GAcM,CAbJ,KAaI,aAZJ,QAWM,mBAXsD,EAAA7B,SAAO,KAAvBQ,EAAQI,M,WAApD,QAWM,OAXD1D,MAAM,M,WAAMC,IAAI,eAAwD0D,IAAKD,GAAlF,EACE,OASQ,SATD1D,MAAM,SAAUgG,IAAG,mBAAuB1C,EAAOI,IAAxD,EACE,OAMyF,SANlFxD,KAAK,WACLF,MAAM,SACL0D,GAAE,mBAAqBJ,EAAOI,KAC9BlD,MAAO8C,EAAOI,GACdtB,QAASkB,EAAOI,MAAM,EAAAf,MAAMG,QAC5BvC,SAAU,EAAA8B,QACV,QAAK,GAAE,EAAAd,MAAM6B,EAAO9B,OAAOc,QAAO,6BAAmCkB,EAAOI,KANpF,qBAMyF,KACzF,QAAGJ,EAAOG,KAAK9C,MAAI,IARrB,WADF,UAFF,eAgBmC,EAAAgC,OAAOyB,YAAA,WAA1C,QAuCM,MAvCN,GAuCM,CAtCJ,IACA,OAgBM,MAhBN,GAgBM,CAfJ,IACA,OAaM,MAbN,GAaM,EAZJ,OAWQ,eAVN,OASS,UATDnE,IAAI,eAAgB,SAAM,eAAE,EAAAsB,MAAK,gBAAkB6B,EAAO9B,OAAOd,SAAzE,gBACE,QAOS,mBANkB,EAAAqC,SAAO,CAAtBsB,EAAQT,M,WADpB,QAOS,UAN4BC,IAAKD,E,aACtC,QAAoC,EAArB,QAAC,EAAAf,MAAMyB,WAAWV,IAChC/C,KAAMwD,EAAOT,GACblD,MAAO2D,EAAOT,GACdnD,SAAU,EAAA8B,QACV4D,SAAU9B,EAAOT,KAAO,EAAAf,MAAMyB,WANnC,qBADF,WAciB,EAAAvB,UAAU,EAAAF,MAAMyB,YAAYC,SAAA,WAAnD,QAGM,MAHN,GAGM,CAFJ,IACA,OAA0E,OAArErE,MAAM,gB,aAAgB,QAAwC,EAAzB,QAAC,EAAA2C,MAAMyB,WAAWC,SAA5D,eAFF,eAKuB,EAAAxB,UAAU,EAAAF,OAAOyB,YAAY8B,KAAKzC,OAAA,WAAzD,QAGM,MAHN,GAGM,CAFJ,IACA,OAAqF,OAAhFzD,MAAM,yB,aAAyB,QAA0C,EAA3B,QAAC,EAAA2C,MAAMyB,WAAW8B,IAAIzC,OAAzE,eAFF,eAKuB,EAAAZ,UAAU,EAAAF,OAAOyB,YAAY8B,KAAKC,OAAA,WAAzD,QAGM,MAHN,GAGM,CAFJ,IACA,OAAqF,OAAhFnG,MAAM,yB,aAAyB,QAA0C,EAA3B,QAAC,EAAA2C,MAAMyB,WAAW8B,IAAIC,OAAzE,eAFF,eAKuB,EAAAtD,UAAU,EAAAF,OAAOyB,YAAY8B,KAAKE,MAAA,WAAzD,QAGM,MAHN,GAGM,CAFJ,IACA,OAAoF,OAA/EpG,MAAM,yB,aAAyB,QAAyC,EAA1B,QAAC,EAAA2C,MAAMyB,WAAW8B,IAAIE,MAAzE,eAFF,mBAnCF,gB,CA4CJ,QACEzF,KAAM,aACNC,MAAO,CAAC,aAAc,gBAAiB,gBAAiB,gBACxDC,MAAO,CACLwB,QAAS,CACPnC,KAAMa,QACNC,SAAS,GAGX2B,MAAO,CACLzC,KAAM8E,QAGRlC,QAAS,CACP5C,KAAM8E,QAGRnC,QAAS,CACP3C,KAAM8E,SAIV9D,QAAS,CACPiC,cACE,MAAMxC,GAAQ0F,OAAO,iBAAkBjF,KAAKuB,MAAMhC,OAAS,IAAI2F,OAC1D3F,GAAMgE,QAGXvD,KAAKG,MAAM,eAAgBZ,EAC7B,IChGJ,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,SAAS,IAAQ,CAAC,YAAY,qBAEzF,U,iECROX,MAAM,gB,UACJA,MAAM,Q,IACJA,MAAM,O,YACT,OAA4C,OAAvCA,MAAM,0BAAyB,MAAE,K,6BAInCA,MAAM,O,YACT,OAA8C,OAAzCA,MAAM,0BAAyB,QAAI,K,IACnCA,MAAM,0B,+BAGP,OAAwB,KAArBA,MAAM,cAAY,W,IAArB,I,IAKDA,MAAM,O,YACT,OAAmD,OAA9CA,MAAM,0BAAyB,aAAS,K,uBAI1CA,MAAM,O,YACT,OAAgD,OAA3CA,MAAM,0BAAyB,UAAM,K,IACrCA,MAAM,0B,IAGRA,MAAM,O,YACT,OAA+C,OAA1CA,MAAM,0BAAyB,SAAK,K,uBAItCA,MAAM,O,YACT,OAAiD,OAA5CA,MAAM,0BAAyB,WAAO,K,6BAIxCA,MAAM,O,YACT,OAAoD,OAA/CA,MAAM,0BAAyB,cAAU,K,6BAI3CA,MAAM,O,YACT,OAAqD,OAAhDA,MAAM,0BAAyB,eAAW,K,6BAI5CA,MAAM,O,YACT,OAA4C,OAAvCA,MAAM,0BAAyB,MAAE,K,6BAInCA,MAAM,O,YACT,OAAsD,OAAjDA,MAAM,0BAAyB,gBAAY,K,uBAI7CA,MAAM,O,YACT,OAAqD,OAAhDA,MAAM,0BAAyB,eAAW,K,uBAI5CA,MAAM,O,YACT,OAAwD,OAAnDA,MAAM,0BAAyB,kBAAc,K,uBAI/CA,MAAM,O,YACT,OAA0D,OAArDA,MAAM,0BAAyB,oBAAgB,K,uBAKnDA,MAAM,W,IACJA,MAAM,O,4BAEP,OAA0B,KAAvBA,MAAM,gBAAc,W,YACvB,OAAuC,QAAjCA,MAAM,QAAO,iBAAa,K,IADhC,GACA,I,2CA7ER,QAiFM,MAjFN,GAiFM,CAhFoB,EAAAsD,SAAA,WAAxB,QAsEM,MAtEN,GAsEM,EArEJ,OAGM,MAHN,GAGM,CAFJ,IACA,OAA6D,OAAxDtD,MAAM,yB,aAAyB,QAAkB,EAAJ,OAAC0D,KAAnD,aAGqB,EAAAJ,OAAOgB,QAAQ3D,MAAMgE,QAAU,EAAArB,OAAOG,MAAM9C,OAAA,WAAnE,QAQM,MARN,GAQM,CAPJ,IACA,OAKM,MALN,GAKM,EAJJ,OAA4E,QAAtEX,MAAM,O,aAAO,QAAiD,EAAnC,OAACsE,QAAQ3D,MAAQ,EAAA2C,OAAOG,MAAM9C,OAA/D,YACA,OAES,UAFD2B,MAAM,SAAU,QAAK,oBAAE,EAAAkB,cAAA,EAAAA,gBAAA,KAA/B,UAJJ,gBAUA,OAGM,MAHN,GAGM,CAFJ,IACA,OAAoE,OAA/DxD,MAAM,yB,aAAyB,QAAyB,EAAX,OAACuE,YAAnD,cAGF,OAGM,MAHN,GAGM,CAFJ,IACA,OAA6E,MAA7E,IAA6E,QAAtC,EAAAjB,OAAOgB,OAAOM,OAAOnD,SAAU,IAAC,MAGzE,OAGM,MAHN,GAGM,CAFJ,IACA,OAA8E,OAAzEzB,MAAM,yB,aAAyB,QAAmC,EAArB,OAACsE,OAAOM,OAAOV,QAAjE,cAGF,OAGM,MAHN,GAGM,CAFJ,IACA,OAAyE,OAApElE,MAAM,yB,aAAyB,QAA8B,EAAhB,OAACsE,OAAOiC,UAA1D,aAGqB,EAAAjD,OAAOG,KAAK6B,IAAM,EAAAhC,OAAOG,KAAK6B,GAAGX,SAAA,WAAxD,QAGM,MAHN,GAGM,CAFJ,IACA,OAAkE,OAA7D3E,MAAM,yB,aAAyB,QAAuB,EAAT,OAACyD,KAAK6B,KAAxD,eAFF,eAKuB,EAAAhC,OAAOG,KAAK8B,KAAO,EAAAjC,OAAOG,KAAK8B,IAAIZ,SAAA,WAA1D,QAGM,MAHN,GAGM,CAFJ,IACA,OAAmE,OAA9D3E,MAAM,yB,aAAyB,QAAwB,EAAV,OAACyD,KAAK8B,MAAxD,eAFF,eAKuB,EAAAjC,OAAOG,KAAKgC,IAAM,EAAAnC,OAAOG,KAAKgC,GAAGd,SAAA,WAAxD,QAGM,MAHN,GAGM,CAFJ,IACA,OAAkE,OAA7D3E,MAAM,yB,aAAyB,QAAuB,EAAT,OAACyD,KAAKgC,KAAxD,eAFF,eAKuB,EAAAnC,OAAOG,KAAKiC,MAAQ,EAAApC,OAAOG,KAAKiC,KAAKf,SAAA,WAA5D,QAGM,MAHN,GAGM,CAFJ,IACA,OAAoE,OAA/D3E,MAAM,yB,aAAyB,QAAyB,EAAX,OAACyD,KAAKiC,OAAxD,eAFF,gBAKA,OAGM,MAHN,GAGM,CAFJ,IACA,OAA0E,OAArE1F,MAAM,yB,aAAyB,QAA+B,EAAjB,OAAC0E,WAAW/D,OAA9D,cAGF,OAGM,MAHN,GAGM,CAFJ,IACA,OAA6E,OAAxEX,MAAM,yB,aAAyB,QAAkC,EAApB,OAAC0E,WAAWkB,UAA9D,cAGF,OAGM,MAHN,GAGM,CAFJ,IACA,OAAqF,OAAhF5F,MAAM,yB,aAAyB,QAA0C,EAA5B,OAAC0E,WAAWmB,kBAA9D,iBApEJ,gBAwEA,OAOM,MAPN,GAOM,EANJ,OAKM,MALN,GAKM,EAJJ,OAGS,UAHD3F,KAAK,SAAUK,SAAU,EAAA8B,QAAU,QAAK,oBAAE,EAAAkB,cAAA,EAAAA,gBAAA,KAAlD,c,CAUR,QACE5C,KAAM,cACNC,MAAO,CAAC,gBAAiB,iBACzBC,MAAO,CACLwB,QAAS,CACPnC,KAAMa,QACNC,SAAS,GAGXsC,OAAQ,CACNpD,KAAM8E,SAIV9D,QAAS,CACPqC,eACOiD,OAAOC,QAAQ,sDAGpBrF,KAAKG,MAAM,gBACZ,EAEDiC,eACE,MAAM7C,GAAQ6F,OAAOH,OAAO,kBACxBjF,KAAKkC,OAAOgB,OAAO3D,MAAMgE,OAASvD,KAAKkC,OAAOgB,OAAO3D,KAAOS,KAAKkC,OAAOG,KAAK9C,OAAS,IAAI2F,OAEzF3F,EAAKgE,QAGVvD,KAAKG,MAAM,gBAAiBZ,EAC7B,IC7GL,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,SAAS,IAAQ,CAAC,YAAY,qBAEzF,U,WZqCA,IACEA,KAAM,gBACN+F,OAAQ,CAACC,EAAA,GACT9B,WAAY,CAAC+B,QAAD,KAAUC,MAAV,IAAiBC,KAAjB,EAAuBC,UAAvB,GAAkCC,WAAlC,GAA8CC,YAAW,IAErE5B,KAAM,WACJ,MAAO,CACLhD,SAAS,EACTI,MAAO,CAAC,EACRyE,MAAO,CAAC,EACR3E,aAAc,KACdG,cAAe,KACfW,eAAgB,KAEnB,EAED8D,SAAU,CACRpE,gBACE,OAAOiC,OAAOoC,QAAQhG,KAAKqB,OAAO4E,QAAO,CAAC5E,GAAQ9B,EAAM6B,MACtDC,EAAM9B,GAAQ,CAAC,EAEfqE,OAAOsC,OAAO9E,EAAKI,QAAQ2E,SAAS5E,IAClCqC,OAAOoC,QAAQzE,EAAMG,SAASyE,SAAQ,EAAEC,EAAUlE,MAChDb,EAAM9B,GAAM6G,GAAYlE,CAAxB,GADF,IAKKb,IACN,CAAC,EACL,GAGHvB,QAAS,CACPuG,kBAAkBpD,GAChBA,EAAOT,OAAOH,KAAK+B,KAAOpE,KAAK8F,MAAM7C,EAAOT,OAAOH,KAAK9C,MACxDS,KAAKqB,MAAM4B,EAAOT,OAAOH,KAAK9C,MAAQ,IACjC0D,EACHzB,OAAQyB,EAAOzB,OAAO8E,KAAK/E,IAClB,IACFA,EACHG,QAASH,EAAMG,QAAQuE,QAAO,CAACvE,EAASQ,KACtCR,EAAQQ,EAAOI,IAAMJ,EACdR,IACN,CAAC,OAELuE,QAAO,CAACzE,EAAQD,KACjBC,EAAOD,EAAMe,IAAMf,EACZC,IACN,CAAC,GAEJC,QAASwB,EAAOxB,QAAQwE,QAAO,CAACxE,EAASsB,KACvCtB,EAAQsB,EAAOT,IAAMS,EACdtB,IACN,CAAC,GAEP,EAED8E,gBACEvG,KAAKiB,SAAU,EAEf,IACE,MAAMI,QAAcrB,KAAKwG,QAAQ,oCAC3BC,QAAiBC,QAAQC,IAAI/C,OAAOe,KAAKtD,GAAOiF,KAClDC,SAAgBvG,KAAKwG,QAAQ,wBAAyB,CAACnE,KAAMA,EAAM+B,KAAM/C,EAAMgB,QAGnFrC,KAAKqB,MAAQ,CAAC,EACdoF,EAASN,SAASlD,IAChBjD,KAAK8F,MAAM7C,EAAOT,OAAOH,KAAK9C,MAAQ8B,EAAM4B,EAAOT,OAAOH,KAAK9C,MAC/DS,KAAKqG,kBAAkBpD,EAAvB,GAIJ,CAbA,QAYEjD,KAAKiB,SAAU,CACjB,CACD,EAEDsF,kBAAkBlE,GACVA,KAAQrC,KAAKqB,OAGnBrB,KAAKqG,wBAAwBrG,KAAKwG,QAAQ,wBAAyB,CACjEnE,KAAMA,EACN+B,KAAMpE,KAAK8F,MAAMzD,KAEpB,EAEDkE,uBAAuBH,GACrBpG,KAAKiB,SAAU,EAEf,IACE,IAAKjB,KAAKmB,eAAiBnB,KAAKsB,iBAAmB8E,KAAYpG,KAAK2B,cAAc3B,KAAKmB,eACrF,OAEF,MAAMO,EAAU,IAAI,IAAIkF,IAAI,CAACR,KACxBxC,OAAOe,KAAK3E,KAAKqB,MAAMrB,KAAKmB,cAAcK,OAAOxB,KAAKsB,eAAeI,kBAEpE1B,KAAKwG,QAAQ,mCAAoC,CACrDnE,KAAMrC,KAAKmB,aACXiD,KAAMpE,KAAK8F,MAAM9F,KAAKmB,cACtBI,MAAOvB,KAAKsB,cACZI,QAASA,UAGL1B,KAAK6G,YAAY7G,KAAKmB,aAG9B,CAjBA,QAgBEnB,KAAKiB,SAAU,CACjB,CACD,EAEDsF,4BAA4BH,GAC1BpG,KAAKiB,SAAU,EAEf,IACE,IAAKjB,KAAKmB,eAAiBnB,KAAKsB,iBAAmB8E,KAAYpG,KAAK2B,cAAc3B,KAAKmB,eACrF,OAEF,MAAMO,EAAU,IAAIkF,IAAI,IAAIhD,OAAOe,KAAK3E,KAAKqB,MAAMrB,KAAKmB,cAAcK,OAAOxB,KAAKsB,eAAeI,WACjG,IAAKA,EAAQoF,IAAIV,GACf,OAEF1E,EAAQqF,OAAOX,SAETpG,KAAKwG,QAAQ,mCAAoC,CACrDnE,KAAMrC,KAAKmB,aACXiD,KAAMpE,KAAK8F,MAAM9F,KAAKmB,cACtBI,MAAOvB,KAAKsB,cACZI,QAAS,IAAIA,WAGT1B,KAAK6G,YAAY7G,KAAKmB,aAG9B,CApBA,QAmBEnB,KAAKiB,SAAU,CACjB,CACD,EAEDsF,kBAAkBhH,GAChBS,KAAKiB,SAAU,EAEf,IACE,IAAKjB,KAAKmB,eAAiBnB,KAAKsB,cAC9B,aAEItB,KAAKwG,QAAQ,gCAAiC,CAClDnE,KAAMrC,KAAKmB,aACXiD,KAAMpE,KAAK8F,MAAM9F,KAAKmB,cACtBI,MAAOvB,KAAKsB,cACZ/B,KAAMA,UAGFS,KAAK6G,YAAY7G,KAAKmB,aAG9B,CAdA,QAaEnB,KAAKiB,SAAU,CACjB,CACD,EAEDsF,mBAAmBhH,GACjBS,KAAKiB,SAAU,EAEf,IACE,IAAKjB,KAAKmB,eAAiBnB,KAAKiC,eAC9B,aAEIjC,KAAKwG,QAAQ,iCAAkC,CACnDnE,KAAMrC,KAAKmB,aACXiD,KAAMpE,KAAK8F,MAAM9F,KAAKmB,cACtBe,OAAQlC,KAAKiC,eACb1C,KAAMA,UAGFS,KAAK6G,YAAY7G,KAAKmB,aAG9B,CAdA,QAaEnB,KAAKiB,SAAU,CACjB,CACD,EAEDsF,qBACEvG,KAAKiB,SAAU,EAEf,IACE,IAAMjB,KAAKmB,eAAgBnB,KAAKiC,eAC9B,aAEIjC,KAAKwG,QAAQ,+BAAgC,CACjDnE,KAAMrC,KAAKmB,aACXiD,KAAMpE,KAAK8F,MAAM9F,KAAKmB,cACtBe,OAAQlC,KAAKiC,iBAGfjC,KAAKI,MAAM4G,YAAYC,cACjBjH,KAAK6G,YAAY7G,KAAKmB,aAG9B,CAdA,QAaEnB,KAAKiB,SAAU,CACjB,CACD,EAEDsF,mBAAmBW,GACjBlH,KAAKiB,SAAU,EAEf,UACQjB,KAAKwG,QAAQ,kCAAmC,CACpDnE,KAAMrC,KAAKmB,aACXiD,KAAMpE,KAAK8F,MAAM9F,KAAKmB,cACtBI,MAAOvB,KAAKsB,cACZ0B,UAAWkE,UAGPlH,KAAK6G,YAAY7G,KAAKmB,aAG9B,CAXA,QAUEnB,KAAKiB,SAAU,CACjB,CACD,EAEDkG,eAAepH,GACb6D,OAAOe,KAAK3E,KAAKqB,MAAMtB,EAAMsC,MAAMb,QAAQ2E,SAAS/C,IAC9CrD,EAAMmC,OAAOI,MAAMtC,KAAKqB,MAAMtB,EAAMsC,MAAMb,OAAO4B,GAAS1B,UAC5D1B,KAAKqB,MAAMtB,EAAMsC,MAAMb,OAAO4B,GAAS1B,QAAQ3B,EAAMmC,OAAOI,IAAMvC,EAAMmC,OAC1E,GAEH,EAEDkF,oBAAoBrH,GAClBC,KAAKqB,MAAMtB,EAAMsC,MAAMb,OAAOzB,EAAMwB,OAAOyB,UAAYjD,EAAMgD,MAC9D,EAEDsE,eAAetH,GACbC,KAAKqG,kBAAkBtG,EAAMyC,OAC9B,EAED8E,eAAevH,GACbC,KAAKqB,MAAMtB,EAAMsC,MAAMZ,QAAQ1B,EAAMgD,OAAOT,IAAMvC,EAAMgD,MACzD,EAEDwE,qBAAqBxH,GACnB6D,OAAOe,KAAK3E,KAAKqB,MAAMtB,EAAMsC,MAAMb,QAAQ2E,SAAS/C,IAC5CrD,EAAMmC,UAAUlC,KAAKqB,MAAMtB,EAAMsC,MAAMb,OAAO4B,GAAS1B,UAGzC,MAAhB3B,EAAMyD,SACRxD,KAAKqB,MAAMtB,EAAMsC,MAAMb,OAAO4B,GAAS1B,QAAQ3B,EAAMmC,QAAQgB,OAAOM,OAAOnD,QAAUN,EAAMyD,QAE1E,MAAfzD,EAAM+C,QACR9C,KAAKqB,MAAMtB,EAAMsC,MAAMb,OAAO4B,GAAS1B,QAAQ3B,EAAMmC,QAAQgB,OAAOM,OAAOV,MAAQ/C,EAAM+C,OAAzF,GAEL,EAED0E,kBAAkBzH,GAChBC,KAAKqB,MAAMtB,EAAMsC,MAAMb,OAAOzB,EAAMwB,OAAOuB,MAAQ/C,EAAM+C,KAC1D,EAED2E,UAAU1H,GACR,OAAOA,EAAMjB,MACX,IAAK,OACHkB,KAAK0H,MAAM3H,EAAMjB,MAAMsC,KAAOpB,KAAKqB,MAAMtB,EAAMsC,MAC/C,MACF,IAAK,QACHrC,KAAK0H,MAAM3H,EAAMjB,MAAMsC,KAAKoB,OAASxC,KAAKqB,MAAMtB,EAAMsC,MAAMG,OAC5DxC,KAAK0H,MAAM3H,EAAMjB,MAAMsC,KAAKG,MAAQvB,KAAKqB,MAAMtB,EAAMsC,MAAMb,OAAOzB,EAAMwB,OACxEvB,KAAK0H,MAAM3H,EAAMjB,MAAMsC,KAAKK,QAAUzB,KAAKqB,MAAMtB,EAAMsC,MAAMZ,QAC7DzB,KAAK0H,MAAM3H,EAAMjB,MAAMsC,KAAKM,QAAU,CAAC,EAEvC,IAAK,MAAMH,KAASqC,OAAOsC,OAAOlG,KAAKqB,MAAMtB,EAAMsC,MAAMb,QACvD,IAAK,MAAMU,KAAU0B,OAAOsC,OAAO3E,EAAMG,SACvC1B,KAAK0H,MAAM3H,EAAMjB,MAAMsC,KAAKM,QAAQQ,EAAOI,IAAMJ,EAIrD,MACF,IAAK,SACHlC,KAAK0H,MAAM3H,EAAMjB,MAAMsC,KAAOpB,KAAKqB,MAAMtB,EAAMsC,MAAMb,OAAOzB,EAAMwB,OAAOG,QAAQ3B,EAAMmC,QACvFlC,KAAK0H,MAAM3H,EAAMjB,MAAMsC,KAAKoB,OAASxC,KAAKqB,MAAMtB,EAAMsC,MAAMG,OAC5D,MAGJxC,KAAK0H,MAAM3H,EAAMjB,MAAM6I,SAAU,CAClC,EAEDpB,gBAAgBxG,SACRC,KAAKwG,QAAQ,sBAAuB,CACxCjF,MAAOxB,EAAMwB,MACbc,KAAMtC,EAAMsC,KACZ+B,KAAMpE,KAAK8F,MAAM/F,EAAMsC,MACvBuF,KAAM7H,EAAM+C,cAGR9C,KAAK6G,YAAY9G,EAAMsC,KAC9B,EAEDkE,iBAAiBxG,SACTC,KAAKwG,QAAQ,sBAAuB,CACxCtE,OAAQnC,EAAMmC,OACdG,KAAMtC,EAAMsC,KACZ+B,KAAMpE,KAAK8F,MAAM/F,EAAMsC,MACvBuF,KAAM7H,EAAM+C,cAGR9C,KAAK6G,YAAY9G,EAAMsC,KAC9B,EAEDkE,sBAAsBxG,SACdC,KAAKwG,QAAQ,wBAAyB,CAC1CtE,OAAQnC,EAAMmC,OACdG,KAAMtC,EAAMsC,KACZ+B,KAAMpE,KAAK8F,MAAM/F,EAAMsC,MACvBmB,OAAQzD,EAAMyD,eAGVxD,KAAK6G,YAAY9G,EAAMsC,KAC9B,EAEDO,YAAY7C,GACV,OAAQA,EAAMjB,MACZ,IAAK,OACHkB,KAAKmB,aAAepB,EAAMsC,KAC1BrC,KAAKI,MAAMyH,UAAUC,OACrB,MAEF,IAAK,QACH9H,KAAKmB,aAAepB,EAAMsC,KAC1BrC,KAAKsB,cAAgBvB,EAAMwB,MAC3BvB,KAAKI,MAAM2H,WAAWD,OACtB,MAEF,IAAK,SACH9H,KAAKmB,aAAepB,EAAMsC,KAC1BrC,KAAKsB,cAAgBvB,EAAMwB,MAC3BvB,KAAKiC,eAAiBlC,EAAMmC,OAC5BlC,KAAKI,MAAM4G,YAAYc,OACvB,MAEN,GAGFlH,UACEZ,KAAKgI,UAELhI,KAAKiI,UAAUjI,KAAKmH,eAAgB,KAChC,8DACA,iEACA,gEAEJnH,KAAKiI,UAAUjI,KAAKoH,oBAAqB,KAAM,iEAC/CpH,KAAKiI,UAAUjI,KAAKqH,eAAgB,KAAM,4DAC1CrH,KAAKiI,UAAUjI,KAAKsH,eAAgB,KAAM,4DAC1CtH,KAAKiI,UAAUjI,KAAKuH,qBAAsB,KAAM,kEAChDvH,KAAKiI,UAAUjI,KAAKwH,kBAAmB,KAAM,8DAC9C,GahYH,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,SAAS1G,GAAQ,CAAC,YAAY,qBAEzF,S","sources":["webpack://platypush/./src/components/elements/Slider.vue","webpack://platypush/./src/components/elements/Slider.vue?787f","webpack://platypush/./src/components/elements/ToggleSwitch.vue","webpack://platypush/./src/components/elements/ToggleSwitch.vue?94aa","webpack://platypush/./src/components/panels/MusicSnapcast/Index.vue","webpack://platypush/./src/components/panels/MusicSnapcast/Host.vue","webpack://platypush/./src/components/panels/MusicSnapcast/Group.vue","webpack://platypush/./src/components/panels/MusicSnapcast/Client.vue","webpack://platypush/./src/components/panels/MusicSnapcast/Client.vue?98bc","webpack://platypush/./src/components/panels/MusicSnapcast/Group.vue?12df","webpack://platypush/./src/components/panels/MusicSnapcast/Host.vue?8888","webpack://platypush/./src/components/panels/MusicSnapcast/modals/Host.vue","webpack://platypush/./src/components/panels/MusicSnapcast/modals/Host.vue?b4e2","webpack://platypush/./src/components/panels/MusicSnapcast/modals/Group.vue","webpack://platypush/./src/components/panels/MusicSnapcast/modals/Group.vue?b9ce","webpack://platypush/./src/components/panels/MusicSnapcast/modals/Client.vue","webpack://platypush/./src/components/panels/MusicSnapcast/modals/Client.vue?144d","webpack://platypush/./src/components/panels/MusicSnapcast/Index.vue?a513"],"sourcesContent":["<template>\n <label class=\"slider-wrapper\">\n <input class=\"slider\" type=\"range\" ref=\"range\" :min=\"range[0]\" :max=\"range[1]\"\n :step=\"step\" :disabled=\"disabled\" :value=\"value\"\n @input.stop=\"onUpdate\"\n @change.stop=\"onUpdate\"\n @mouseup.stop=\"onUpdate\"\n @mousedown.stop=\"onUpdate\"\n @touchstart.stop=\"onUpdate\"\n @touchend.stop=\"onUpdate\"\n @keyup.stop=\"onUpdate\"\n @keydown.stop=\"onUpdate\">\n\n <div class=\"track\">\n <div class=\"track-inner\" ref=\"track\"></div>\n </div>\n <div class=\"thumb\" ref=\"thumb\"></div>\n <span class=\"label\" v-if=\"withLabel\" v-text=\"value\"></span>\n </label>\n</template>\n\n<script>\nexport default {\n name: \"Slider\",\n emits: ['input', 'change', 'mouseup', 'mousedown', 'touchstart', 'touchend', 'keyup', 'keydown'],\n props: {\n value: {\n type: Number,\n },\n\n disabled: {\n type: Boolean,\n default: false,\n },\n\n range: {\n type: Array,\n default: () => [0, 100],\n },\n\n step: {\n type: Number,\n default: 1,\n },\n\n withLabel: {\n type: Boolean,\n default: false,\n }\n },\n\n methods: {\n onUpdate(event) {\n this.update(event.target.value)\n this.$emit(event.type, {\n ...event,\n target: {\n ...event.target,\n value: this.$refs.range.value,\n }\n })\n },\n\n update(value) {\n const percent = ((value - this.range[0]) * 100) / (this.range[1] - this.range[0])\n this.$refs.thumb.style.left = `${percent}%`\n this.$refs.thumb.style.transform = `translate(-${percent}%, -50%)`\n this.$refs.track.style.width = `${percent}%`\n },\n },\n\n mounted() {\n if (this.value != null)\n this.update(this.value)\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.slider-wrapper {\n width: 100%;\n display: flex;\n position: relative;\n\n .slider {\n width: 100%;\n cursor: pointer;\n opacity: 0;\n\n &::-ms-tooltip {\n display: none;\n }\n }\n\n .track {\n width: 100%;\n height: 0.75em;\n background: $slider-bg;\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n border-radius: 0.5em;\n box-shadow: inset 1px 0px 3px 0 $slider-track-shadow;\n pointer-events: none;\n\n .track-inner {\n width: 0;\n height: 100%;\n background: $slider-progress-bg;\n border-radius: 0.5em 0 0 0.5em;\n }\n }\n\n .thumb {\n width: 1.25em;\n height: 1.25em;\n background: $slider-thumb-bg;\n position: absolute;\n top: 50%;\n left: 0;\n transform: translate(0%, -50%);\n border-radius: 50%;\n box-shadow: 1px 0px 2px 0 $slider-thumb-shadow;\n pointer-events: none;\n }\n\n label {\n position: relative;\n .label {\n font-weight: normal;\n text-align: center;\n }\n }\n}\n</style>\n","import { render } from \"./Slider.vue?vue&type=template&id=95edc28a&scoped=true\"\nimport script from \"./Slider.vue?vue&type=script&lang=js\"\nexport * from \"./Slider.vue?vue&type=script&lang=js\"\n\nimport \"./Slider.vue?vue&type=style&index=0&id=95edc28a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-95edc28a\"]])\n\nexport default __exports__","<template>\n <div class=\"power-switch\" :class=\"{disabled: disabled}\" @click.stop=\"onInput\">\n <!--suppress HtmlFormInputWithoutLabel -->\n <input type=\"checkbox\" :checked=\"value\">\n <label>\n <!--suppress HtmlUnknownTag -->\n <div class=\"switch\">\n <div class=\"dot\" />\n </div>\n <span class=\"label\">\n <slot />\n </span>\n </label>\n </div>\n</template>\n\n<script>\nexport default {\n name: \"ToggleSwitch\",\n emits: ['input'],\n props: {\n value: {\n type: Boolean,\n default: false,\n },\n\n disabled: {\n type: Boolean,\n default: false,\n },\n },\n\n methods: {\n onInput(event) {\n if (this.disabled)\n return false\n\n this.$emit('input', event)\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.power-switch {\n position: relative;\n transition: transform .3s;\n transform: scale(var(--scale, 1)) translateZ(0);\n\n &:active {\n --scale: .96;\n }\n\n &.disabled {\n opacity: 0.6;\n }\n\n input {\n display: none;\n & + label {\n border-radius: 1em;\n display: inline-flex;\n cursor: pointer;\n position: relative;\n transition: box-shadow .4s;\n\n &:before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n border-radius: inherit;\n background: none;\n opacity: var(--gradient, 0);\n transition: opacity .4s;\n }\n\n .switch {\n position: relative;\n display: inline-block;\n vertical-align: top;\n height: 1.4em;\n width: 2.5em;\n border-radius: 1em;\n background: $slider-bg;\n box-shadow: inset 1px 0px 3px 0 $slider-track-shadow;\n\n &:before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n border-radius: inherit;\n background: $slider-progress-bg;\n opacity: var(--gradient, 0);\n transition: opacity .4s;\n }\n\n .dot {\n background: $toggle-dot-bg;\n position: absolute;\n width: 1.5em;\n height: 1.5em;\n border-radius: 50%;\n box-shadow: 1px 0px 3.5px 0 $slider-thumb-shadow;\n left: -0.25em;\n top: -0.05em;\n transform: translateX(var(--offset, 0));\n transition: transform .4s, box-shadow .4s;\n\n &:before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n border-radius: inherit;\n background: $toggle-selected-dot-bg;\n opacity: var(--gradient, 0);\n transition: opacity .4s;\n }\n }\n }\n\n span {\n line-height: 2em;\n font-size: 1.2em;\n color: var(--text, #646B8C);\n font-weight: 500;\n display: inline-block;\n vertical-align: top;\n position: relative;\n margin-left: 0.5em;\n transition: color .4s;\n }\n\n & + span {\n text-align: center;\n display: block;\n position: absolute;\n left: 0;\n right: 0;\n top: 100%;\n opacity: 0;\n font-size: 1em;\n font-weight: 500;\n color: $slider-bg;\n transform: translateY(0.2em);\n transition: opacity .4s, transform .4s;\n }\n }\n\n &:not(:checked) {\n & + label {\n pointer-events: none;\n & + span {\n opacity: 1;\n transform: translateY(0.6em);\n }\n }\n }\n\n &:checked {\n & + label {\n --offset: 1.5em;\n --text: $slider-progress-bg;\n --gradient: 1;\n --shadow: rgba(0, 39, 6, .1);\n }\n }\n }\n}\n</style>\n","import { render } from \"./ToggleSwitch.vue?vue&type=template&id=a6396ae8&scoped=true\"\nimport script from \"./ToggleSwitch.vue?vue&type=script&lang=js\"\nexport * from \"./ToggleSwitch.vue?vue&type=script&lang=js\"\n\nimport \"./ToggleSwitch.vue?vue&type=style&index=0&id=a6396ae8&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-a6396ae8\"]])\n\nexport default __exports__","<template>\n <div class=\"music-snapcast-container\">\n <Loading v-if=\"loading\" />\n\n <div class=\"info\">\n <Modal title=\"Server info\" ref=\"modalHost\">\n <ModalHost :info=\"hosts[selectedHost]\" v-if=\"selectedHost\" />\n </Modal>\n </div>\n\n <div class=\"info\">\n <Modal title=\"Group info\" ref=\"modalGroup\">\n <ModalGroup :group=\"hosts[selectedHost].groups[selectedGroup]\" :streams=\"hosts[selectedHost].streams\"\n :clients=\"clientsByHost[selectedHost]\" :loading=\"loading\" @add-client=\"addClientToGroup\"\n @remove-client=\"removeClientFromGroup\" @stream-change=\"streamChange\"\n @rename-group=\"renameGroup($event)\" v-if=\"selectedGroup\" />\n </Modal>\n </div>\n\n <div class=\"info\">\n <Modal title=\"Client info\" ref=\"modalClient\">\n <ModalClient :client=\"hosts[selectedHost].groups[selectedGroup].clients[selectedClient]\" :loading=\"loading\"\n @remove-client=\"removeClient\" @rename-client=\"renameClient($event)\" v-if=\"selectedClient\" />\n </Modal>\n </div>\n\n <Host v-for=\"(host, id) in hosts\" :key=\"id\"\n :server=\"host.server\"\n :streams=\"host.streams\"\n :groups=\"host.groups\"\n @group-mute-toggle=\"groupMute($event)\"\n @client-mute-toggle=\"clientMute($event)\"\n @client-volume-change=\"clientSetVolume($event)\"\n @modal-show=\"onModalShow($event)\" />\n </div>\n</template>\n\n<script>\nimport Modal from \"@/components/Modal\";\nimport Utils from \"@/Utils\";\nimport Host from \"@/components/panels/MusicSnapcast/Host\";\nimport ModalHost from \"@/components/panels/MusicSnapcast/modals/Host\";\nimport ModalGroup from \"@/components/panels/MusicSnapcast/modals/Group\";\nimport ModalClient from \"@/components/panels/MusicSnapcast/modals/Client\";\nimport Loading from \"@/components/Loading\";\n\nexport default {\n name: \"MusicSnapcast\",\n mixins: [Utils],\n components: {Loading, Modal, Host, ModalHost, ModalGroup, ModalClient},\n\n data: function() {\n return {\n loading: false,\n hosts: {},\n ports: {},\n selectedHost: null,\n selectedGroup: null,\n selectedClient: null,\n }\n },\n\n computed: {\n clientsByHost() {\n return Object.entries(this.hosts).reduce((hosts, [name, info]) => {\n hosts[name] = {}\n\n Object.values(info.groups).forEach((group) => {\n Object.entries(group.clients).forEach(([clientId, client]) => {\n hosts[name][clientId] = client\n })\n })\n\n return hosts\n }, {})\n },\n },\n\n methods: {\n parseServerStatus(status) {\n status.server.host.port = this.ports[status.server.host.name]\n this.hosts[status.server.host.name] = {\n ...status,\n groups: status.groups.map((group) => {\n return {\n ...group,\n clients: group.clients.reduce((clients, client) => {\n clients[client.id] = client\n return clients\n }, {}),\n }\n }).reduce((groups, group) => {\n groups[group.id] = group\n return groups\n }, {}),\n\n streams: status.streams.reduce((streams, stream) => {\n streams[stream.id] = stream\n return streams\n }, {}),\n }\n },\n\n async refresh() {\n this.loading = true\n\n try {\n const hosts = await this.request('music.snapcast.get_backend_hosts')\n const statuses = await Promise.all(Object.keys(hosts).map(\n async (host) => this.request('music.snapcast.status', {host: host, port: hosts[host]})\n ))\n\n this.hosts = {}\n statuses.forEach((status) => {\n this.ports[status.server.host.name] = hosts[status.server.host.name]\n this.parseServerStatus(status)\n })\n } finally {\n this.loading = false\n }\n },\n\n async refreshHost(host) {\n if (!(host in this.hosts))\n return\n\n this.parseServerStatus(await this.request('music.snapcast.status', {\n host: host,\n port: this.ports[host]\n }))\n },\n\n async addClientToGroup(clientId) {\n this.loading = true\n\n try {\n if (!this.selectedHost || !this.selectedGroup || !(clientId in this.clientsByHost[this.selectedHost]))\n return\n\n const clients = [...new Set([clientId,\n ...Object.keys(this.hosts[this.selectedHost].groups[this.selectedGroup].clients)])]\n\n await this.request('music.snapcast.group_set_clients', {\n host: this.selectedHost,\n port: this.ports[this.selectedHost],\n group: this.selectedGroup,\n clients: clients,\n })\n\n await this.refreshHost(this.selectedHost)\n } finally {\n this.loading = false\n }\n },\n\n async removeClientFromGroup(clientId) {\n this.loading = true\n\n try {\n if (!this.selectedHost || !this.selectedGroup || !(clientId in this.clientsByHost[this.selectedHost]))\n return\n\n const clients = new Set([...Object.keys(this.hosts[this.selectedHost].groups[this.selectedGroup].clients)])\n if (!clients.has(clientId))\n return\n\n clients.delete(clientId)\n\n await this.request('music.snapcast.group_set_clients', {\n host: this.selectedHost,\n port: this.ports[this.selectedHost],\n group: this.selectedGroup,\n clients: [...clients],\n })\n\n await this.refreshHost(this.selectedHost)\n } finally {\n this.loading = false\n }\n },\n\n async renameGroup(name) {\n this.loading = true\n\n try {\n if (!this.selectedHost || !this.selectedGroup)\n return\n\n await this.request('music.snapcast.set_group_name', {\n host: this.selectedHost,\n port: this.ports[this.selectedHost],\n group: this.selectedGroup,\n name: name,\n })\n\n await this.refreshHost(this.selectedHost)\n } finally {\n this.loading = false\n }\n },\n\n async renameClient(name) {\n this.loading = true\n\n try {\n if (!this.selectedHost || !this.selectedClient)\n return\n\n await this.request('music.snapcast.set_client_name', {\n host: this.selectedHost,\n port: this.ports[this.selectedHost],\n client: this.selectedClient,\n name: name,\n })\n\n await this.refreshHost(this.selectedHost)\n } finally {\n this.loading = false\n }\n },\n\n async removeClient() {\n this.loading = true\n\n try {\n if (!(this.selectedHost && this.selectedClient))\n return\n\n await this.request('music.snapcast.delete_client', {\n host: this.selectedHost,\n port: this.ports[this.selectedHost],\n client: this.selectedClient,\n })\n\n this.$refs.modalClient.close()\n await this.refreshHost(this.selectedHost)\n } finally {\n this.loading = false\n }\n },\n\n async streamChange(streamId) {\n this.loading = true\n\n try {\n await this.request('music.snapcast.group_set_stream', {\n host: this.selectedHost,\n port: this.ports[this.selectedHost],\n group: this.selectedGroup,\n stream_id: streamId,\n })\n\n await this.refreshHost(this.selectedHost)\n } finally {\n this.loading = false\n }\n },\n\n onClientUpdate(event) {\n Object.keys(this.hosts[event.host].groups).forEach((groupId) => {\n if (event.client.id in this.hosts[event.host].groups[groupId].clients) {\n this.hosts[event.host].groups[groupId].clients[event.client.id] = event.client\n }\n })\n },\n\n onGroupStreamChange(event) {\n this.hosts[event.host].groups[event.group].stream_id = event.stream\n },\n\n onServerUpdate(event) {\n this.parseServerStatus(event.server)\n },\n\n onStreamUpdate(event) {\n this.hosts[event.host].streams[event.stream.id] = event.stream\n },\n\n onClientVolumeChange(event) {\n Object.keys(this.hosts[event.host].groups).forEach((groupId) => {\n if (!(event.client in this.hosts[event.host].groups[groupId].clients))\n return\n\n if (event.volume != null)\n this.hosts[event.host].groups[groupId].clients[event.client].config.volume.percent = event.volume\n\n if (event.muted != null)\n this.hosts[event.host].groups[groupId].clients[event.client].config.volume.muted = event.muted\n })\n },\n\n onGroupMuteChange(event) {\n this.hosts[event.host].groups[event.group].muted = event.muted\n },\n\n modalShow(event) {\n switch(event.type) {\n case 'host':\n this.modal[event.type].info = this.hosts[event.host]\n break\n case 'group':\n this.modal[event.type].info.server = this.hosts[event.host].server\n this.modal[event.type].info.group = this.hosts[event.host].groups[event.group]\n this.modal[event.type].info.streams = this.hosts[event.host].streams\n this.modal[event.type].info.clients = {}\n\n for (const group of Object.values(this.hosts[event.host].groups)) {\n for (const client of Object.values(group.clients)) {\n this.modal[event.type].info.clients[client.id] = client\n }\n }\n\n break\n case 'client':\n this.modal[event.type].info = this.hosts[event.host].groups[event.group].clients[event.client]\n this.modal[event.type].info.server = this.hosts[event.host].server\n break\n }\n\n this.modal[event.type].visible = true\n },\n\n async groupMute(event) {\n await this.request('music.snapcast.mute', {\n group: event.group,\n host: event.host,\n port: this.ports[event.host],\n mute: event.muted,\n })\n\n await this.refreshHost(event.host)\n },\n\n async clientMute(event) {\n await this.request('music.snapcast.mute', {\n client: event.client,\n host: event.host,\n port: this.ports[event.host],\n mute: event.muted,\n })\n\n await this.refreshHost(event.host)\n },\n\n async clientSetVolume(event) {\n await this.request('music.snapcast.volume', {\n client: event.client,\n host: event.host,\n port: this.ports[event.host],\n volume: event.volume,\n })\n\n await this.refreshHost(event.host)\n },\n\n onModalShow(event) {\n switch (event.type) {\n case 'host':\n this.selectedHost = event.host\n this.$refs.modalHost.show()\n break\n\n case 'group':\n this.selectedHost = event.host\n this.selectedGroup = event.group\n this.$refs.modalGroup.show()\n break\n\n case 'client':\n this.selectedHost = event.host\n this.selectedGroup = event.group\n this.selectedClient = event.client\n this.$refs.modalClient.show()\n break\n }\n }\n },\n\n mounted() {\n this.refresh()\n\n this.subscribe(this.onClientUpdate, null,\n 'platypush.message.event.music.snapcast.ClientConnectedEvent',\n 'platypush.message.event.music.snapcast.ClientDisconnectedEvent',\n 'platypush.message.event.music.snapcast.ClientNameChangeEvent')\n\n this.subscribe(this.onGroupStreamChange, null, 'platypush.message.event.music.snapcast.GroupStreamChangeEvent')\n this.subscribe(this.onServerUpdate, null, 'platypush.message.event.music.snapcast.ServerUpdateEvent')\n this.subscribe(this.onStreamUpdate, null, 'platypush.message.event.music.snapcast.StreamUpdateEvent')\n this.subscribe(this.onClientVolumeChange, null, 'platypush.message.event.music.snapcast.ClientVolumeChangeEvent')\n this.subscribe(this.onGroupMuteChange, null, 'platypush.message.event.music.snapcast.GroupMuteChangeEvent')\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.music-snapcast-container {\n width: 100%;\n overflow: auto;\n background: $background-color;\n}\n\n::v-deep(.info) {\n .modal {\n .content {\n width: 90%;\n max-width: 800px;\n }\n\n .body {\n padding: 0;\n }\n }\n\n .row {\n display: flex;\n align-items: center;\n border-radius: .75em;\n padding: 1em;\n\n @include until($tablet) {\n flex-direction: column;\n border-bottom: $default-border;\n }\n\n @include from($desktop) {\n padding: 1em 2em;\n }\n\n .label {\n margin-bottom: 0;\n }\n\n .value {\n display: flex;\n\n @include from($tablet) {\n justify-content: right;\n }\n\n @include until($tablet) {\n width: 100%;\n margin-left: 0;\n }\n }\n\n @include until($tablet) {\n .label {\n width: 100%;\n display: flex;\n }\n }\n\n &:nth-child(odd) {\n background: $background-color;\n }\n\n &:nth-child(even) {\n background: $default-bg-3;\n }\n\n &:hover {\n background: $hover-bg;\n }\n }\n\n .buttons {\n background: initial;\n margin-top: 1.5em;\n padding-top: 1.5em;\n border-top: $default-border-2;\n display: flex;\n justify-content: center;\n }\n}\n\n@media screen and (max-width: calc(#{$tablet} - 1)) {\n .music-snapcast-container {\n .modal {\n width: 95vw;\n }\n }\n}\n\n@media screen and (min-width: $tablet) {\n .music-snapcast-container {\n .modal {\n width: 70vw;\n }\n }\n}\n\n@media screen and (min-width: $desktop) {\n .music-snapcast-container {\n .modal {\n width: 45vw;\n }\n }\n}\n</style>","<template>\n <div class=\"host\">\n <div class=\"header\">\n <div class=\"col-10 name\" @click=\"$emit('modal-show', {type: 'host', host: server.host.name})\">\n <i class=\"icon fa fa-server\"></i>\n {{ server.host.name }}\n </div>\n <div class=\"col-2 buttons pull-right\">\n <button type=\"button\" @click=\"collapsed = !collapsed\">\n <i class=\"icon fa\" :class=\"{'fa-chevron-up': !collapsed, 'fa-chevron-down': collapsed}\"></i>\n </button>\n </div>\n </div>\n\n <div class=\"group-container\" v-if=\"!collapsed\">\n <Group v-for=\"(group, id) in groups\" :key=\"id\"\n :id=\"group.id\"\n :name=\"group.name\"\n :server=\"server.host\"\n :muted=\"group.muted\"\n :clients=\"group.clients\"\n :stream=\"streams[group.stream_id]\"\n @modal-show=\"$emit('modal-show', $event)\"\n @group-mute-toggle=\"$emit('group-mute-toggle', $event)\"\n @client-mute-toggle=\"$emit('client-mute-toggle', $event)\"\n @client-volume-change=\"$emit('client-volume-change', $event)\"\n />\n </div>\n </div>\n</template>\n\n<script>\nimport Group from \"@/components/panels/MusicSnapcast/Group\";\n\nexport default {\n name: \"Host\",\n emits: ['modal-show', 'group-mute-toggle', 'client-mute-toggle', 'client-volume-change'],\n components: {Group},\n\n props: {\n groups: {\n type: Object,\n default: () => {},\n },\n\n server: {\n type: Object,\n default: () => {},\n },\n\n streams: {\n type: Object,\n default: () => {},\n },\n },\n\n data() {\n return {\n collapsed: false,\n }\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.host {\n width: 95%;\n max-width: 1000px;\n margin: 1em auto;\n border: $default-border-2;\n border-radius: .5em;\n box-shadow: $border-shadow-bottom-right;\n background: $default-bg-2;\n\n .header {\n padding: .5em;\n background: $default-bg-5;\n border-bottom: $default-border-2;\n border-radius: .5em .5em 0 0;\n display: flex;\n align-items: center;\n\n .name {\n text-transform: uppercase;\n\n &:hover {\n color: $default-hover-fg;\n cursor: pointer;\n }\n }\n\n .buttons {\n margin-bottom: 0;\n }\n\n button {\n padding: 0;\n border: 0;\n background: none;\n &:hover { color: $default-hover-fg; }\n }\n }\n}\n</style>\n","<template>\n <div class=\"group\">\n <div class=\"head\">\n <div class=\"col-10 name\" @click=\"$emit('modal-show', {type: 'group', group: id, host: server.name})\">\n <i class=\"icon fa\" :class=\"{'fa-play': stream.status === 'playing', 'fa-stop': stream.status !== 'playing'}\"></i>\n {{ name || stream.id || id }}\n </div>\n\n <div class=\"col-2 switch pull-right\">\n <ToggleSwitch :value=\"!muted\"\n @input=\"$emit('group-mute-toggle', {host: server.name, group: id, muted: !muted})\" />\n </div>\n </div>\n\n <div class=\"body\">\n <Client v-for=\"client in clients\" :key=\"client.id\"\n :config=\"client.config\"\n :connected=\"client.connected\"\n :server=\"server\"\n :host=\"client.host\"\n :groupId=\"id\"\n :id=\"client.id\"\n :lastSeen=\"client.lastSeen\"\n :snapclient=\"client.snapclient\"\n @modal-show=\"$emit('modal-show', $event)\"\n @volume-change=\"$emit('client-volume-change', $event)\"\n @mute-toggle=\"$emit('client-mute-toggle', $event)\" />\n </div>\n </div>\n</template>\n\n<script>\nimport ToggleSwitch from \"@/components/elements/ToggleSwitch\";\nimport Client from \"@/components/panels/MusicSnapcast/Client\";\n\nexport default {\n name: \"Group\",\n components: {Client, ToggleSwitch},\n emits: ['group-mute-toggle', 'modal-show', 'client-volume-change', 'client-mute-toggle'],\n props: {\n id: {\n type: String,\n },\n\n clients: {\n type: Object,\n default: () => {},\n },\n\n muted: {\n type: Boolean,\n },\n\n name: {\n type: String,\n },\n\n stream: {\n type: Object,\n },\n\n server: {\n type: Object,\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.group {\n .head {\n display: flex;\n background: $default-bg-4;\n border-top: $default-border-2;\n border-bottom: $default-border-2;\n border-radius: 0;\n cursor: pointer;\n\n &:hover {\n color: $default-hover-fg;\n }\n }\n\n .head,\n .client {\n display: flex;\n align-items: center;\n padding: 1em .5em;\n }\n}\n</style>\n","<template>\n <div class=\"row client\" :class=\"{offline: !connected}\">\n <div class=\"col-s-12 col-m-3 name\" v-text=\"config.name?.length ? config.name : host.name\"\n @click=\"$emit('modal-show', {type: 'client', client: id, group: groupId, host: server.name})\">\n </div>\n\n <div class=\"col-s-12 col-m-9 controls\">\n <div class=\"col-10 slider-container\">\n <Slider :range=\"[0, 100]\" :value=\"config.volume.percent\"\n @mouseup=\"$emit('volume-change', {host: server.name, client: id, volume: $event.target.value})\" />\n </div>\n\n <div class=\"col-2 switch pull-right\">\n <ToggleSwitch :value=\"!config.volume.muted\"\n @input=\"$emit('mute-toggle', {host: server.name, client: id, muted: !config.volume.muted})\" />\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport ToggleSwitch from \"@/components/elements/ToggleSwitch\";\nimport Slider from \"@/components/elements/Slider\";\n\nexport default {\n name: \"Client\",\n components: {Slider, ToggleSwitch},\n emits: ['volume-change', 'mute-toggle', 'modal-show'],\n\n props: {\n config: {\n type: Object,\n required: true,\n },\n\n connected: {\n type: Boolean,\n default: false,\n },\n\n host: {\n type: Object,\n required: true,\n },\n\n id: {\n type: String,\n required: true,\n },\n\n groupId: {\n type: String,\n required: true,\n },\n\n lastSeen: {\n type: Object,\n default: () => {},\n },\n\n snapclient: {\n type: Object,\n required: true,\n },\n\n server: {\n type: Object,\n required: true,\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.client {\n @include until($tablet) {\n flex-direction: column;\n border-bottom: $default-border;\n }\n\n .name, .controls {\n @include until($tablet) {\n width: 100%;\n display: flex;\n }\n }\n\n &.offline {\n color: $disabled-fg;\n }\n\n &:hover {\n background: $hover-bg;\n }\n\n .name {\n @include until($tablet) {\n padding-bottom: .5em;\n }\n\n &:hover {\n color: $default-hover-fg;\n cursor: pointer;\n }\n }\n}\n</style>\n","import { render } from \"./Client.vue?vue&type=template&id=12b0e65b&scoped=true\"\nimport script from \"./Client.vue?vue&type=script&lang=js\"\nexport * from \"./Client.vue?vue&type=script&lang=js\"\n\nimport \"./Client.vue?vue&type=style&index=0&id=12b0e65b&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-12b0e65b\"]])\n\nexport default __exports__","import { render } from \"./Group.vue?vue&type=template&id=748fccb4&scoped=true\"\nimport script from \"./Group.vue?vue&type=script&lang=js\"\nexport * from \"./Group.vue?vue&type=script&lang=js\"\n\nimport \"./Group.vue?vue&type=style&index=0&id=748fccb4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-748fccb4\"]])\n\nexport default __exports__","import { render } from \"./Host.vue?vue&type=template&id=7bce419a&scoped=true\"\nimport script from \"./Host.vue?vue&type=script&lang=js\"\nexport * from \"./Host.vue?vue&type=script&lang=js\"\n\nimport \"./Host.vue?vue&type=style&index=0&id=7bce419a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-7bce419a\"]])\n\nexport default __exports__","<template>\n <div class=\"info\">\n <div class=\"row\" v-if=\"info?.server?.host?.ip?.length\">\n <div class=\"label col-3\">IP Address</div>\n <div class=\"value col-9\" v-text=\"info.server.host.ip\"></div>\n </div>\n\n <div class=\"row\" v-if=\"info?.server?.host?.mac?.length\">\n <div class=\"label col-3\">MAC Address</div>\n <div class=\"value col-9\" v-text=\"info.server.host.mac\"></div>\n </div>\n\n <div class=\"row\" v-if=\"info?.server?.host?.name?.length\">\n <div class=\"label col-3\">Name</div>\n <div class=\"value col-9\" v-text=\"info.server.host.name\"></div>\n </div>\n\n <div class=\"row\" v-if=\"info?.server?.host?.port\">\n <div class=\"label col-3\">Port</div>\n <div class=\"value col-9\" v-text=\"info.server.host.port\"></div>\n </div>\n\n <div class=\"row\" v-if=\"info?.server?.host?.os?.length\">\n <div class=\"label col-3\">OS</div>\n <div class=\"value col-9\" v-text=\"info.server.host.os\"></div>\n </div>\n\n <div class=\"row\" v-if=\"info?.server?.host?.arch?.length\">\n <div class=\"label col-3\">Architecture</div>\n <div class=\"value col-9\" v-text=\"info.server.host.arch\"></div>\n </div>\n\n <div class=\"row\" v-if=\"info?.server?.snapserver?.name?.length\">\n <div class=\"label col-3\">Server name</div>\n <div class=\"value col-9\" v-text=\"info.server.snapserver.name\"></div>\n </div>\n\n <div class=\"row\" v-if=\"info?.server?.snapserver?.version?.length\">\n <div class=\"label col-3\">Server version</div>\n <div class=\"value col-9\" v-text=\"info.server.snapserver.version\"></div>\n </div>\n\n <div class=\"row\" v-if=\"info?.server?.snapserver?.protocolVersion\">\n <div class=\"label col-3\">Protocol version</div>\n <div class=\"value col-9\" v-text=\"info.server.snapserver.protocolVersion\"></div>\n </div>\n\n <div class=\"row\" v-if=\"info?.server?.snapserver?.controlProtocolVersion\">\n <div class=\"label col-3\">Control protocol version</div>\n <div class=\"value col-9\" v-text=\"info.server.snapserver.controlProtocolVersion\"></div>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: \"HostModal\",\n props: {\n info: {\n type: Object,\n default: () => {},\n }\n }\n}\n</script>\n\n<style scoped>\n\n</style>","import { render } from \"./Host.vue?vue&type=template&id=4b0dc9f8\"\nimport script from \"./Host.vue?vue&type=script&lang=js\"\nexport * from \"./Host.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"info\">\n <div class=\"section name\">\n <div class=\"title\">Name</div>\n <div class=\"row\">\n <div class=\"name-value\">\n <span class=\"name\" v-text=\"group.name?.length ? group.name : 'default'\" />\n <button class=\"pull-right\" title=\"Rename\" @click=\"renameGroup\">\n <i class=\"fa fa-edit\" />\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"section clients\" v-if=\"Object.keys(group?.clients || {}).length > 0\">\n <div class=\"title\">Clients</div>\n <div class=\"row\" ref=\"groupClients\" v-for=\"(client, id) in (clients || {})\" :key=\"id\">\n <label class=\"client\" :for=\"'snapcast-client-' + client.id\">\n <input type=\"checkbox\"\n class=\"client\"\n :id=\"`snapcast-client-${client.id}`\"\n :value=\"client.id\"\n :checked=\"client.id in group.clients\"\n :disabled=\"loading\"\n @input=\"$emit($event.target.checked ? 'add-client' : 'remove-client', client.id)\">\n {{ client.host.name }}\n </label>\n </div>\n </div>\n\n <div class=\"section streams\" v-if=\"group?.stream_id\">\n <div class=\"title\">Stream</div>\n <div class=\"row\">\n <div class=\"label col-3\">ID</div>\n <div class=\"value col-9\">\n <label>\n <select ref=\"streamSelect\" @change=\"$emit('stream-change', $event.target.value)\">\n <option\n v-for=\"(stream, id) in streams\" :key=\"id\"\n v-text=\"streams[group.stream_id].id\"\n :name=\"stream.id\"\n :value=\"stream.id\"\n :disabled=\"loading\"\n :selected=\"stream.id === group.stream_id\">\n </option>\n </select>\n </label>\n </div>\n </div>\n\n <div class=\"row\" v-if=\"streams?.[group.stream_id]?.status\">\n <div class=\"label col-m-3\">Status</div>\n <div class=\"value col-m-9\" v-text=\"streams[group.stream_id].status\"></div>\n </div>\n\n <div class=\"row\" v-if=\"streams?.[group?.stream_id]?.uri?.host\">\n <div class=\"label col-s-12 col-m-3\">Host</div>\n <div class=\"value col-s-12 col-m-9\" v-text=\"streams[group.stream_id].uri.host\"></div>\n </div>\n\n <div class=\"row\" v-if=\"streams?.[group?.stream_id]?.uri?.path\">\n <div class=\"label col-s-12 col-m-3\">Path</div>\n <div class=\"value col-s-12 col-m-9\" v-text=\"streams[group.stream_id].uri.path\"></div>\n </div>\n\n <div class=\"row\" v-if=\"streams?.[group?.stream_id]?.uri?.raw\">\n <div class=\"label col-s-12 col-m-3\">URI</div>\n <div class=\"value col-s-12 col-m-9\" v-text=\"streams[group.stream_id].uri.raw\"></div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: \"GroupModal\",\n emits: ['add-client', 'remove-client', 'stream-change', 'rename-group'],\n props: {\n loading: {\n type: Boolean,\n default: false,\n },\n\n group: {\n type: Object,\n },\n\n clients: {\n type: Object,\n },\n\n streams: {\n type: Object,\n },\n },\n\n methods: {\n renameGroup() {\n const name = (prompt('New group name', this.group.name) || '').trim()\n if (!name?.length)\n return\n\n this.$emit('rename-group', name)\n }\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.info {\n .row {\n display: flex;\n align-items: center;\n }\n\n .section {\n padding: 1.5em;\n\n .row {\n align-items: normal;\n }\n }\n\n label.client {\n width: 100%;\n }\n\n .title {\n font-size: 1em;\n padding-left: .5em;\n padding-bottom: .5em;\n margin-bottom: .5em;\n border-bottom: $default-border;\n }\n\n .client {\n display: flex;\n align-items: center;\n\n input {\n margin-right: .5em;\n }\n }\n\n .name-value {\n display: flex;\n align-items: center;\n\n button {\n background: none;\n border: none;\n margin: 0 1em;\n padding: 0;\n\n &:hover {\n color: $default-hover-fg-2;\n }\n }\n }\n}\n</style>\n","import { render } from \"./Group.vue?vue&type=template&id=353ffa58&scoped=true\"\nimport script from \"./Group.vue?vue&type=script&lang=js\"\nexport * from \"./Group.vue?vue&type=script&lang=js\"\n\nimport \"./Group.vue?vue&type=style&index=0&id=353ffa58&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-353ffa58\"]])\n\nexport default __exports__","<template>\n <div class=\"client-modal\">\n <div class=\"info\" v-if=\"client\">\n <div class=\"row\">\n <div class=\"label col-s-12 col-m-3\">ID</div>\n <div class=\"value col-s-12 col-m-9\" v-text=\"client.id\"></div>\n </div>\n\n <div class=\"row\" v-if=\"client.config?.name?.length || client.host?.name\">\n <div class=\"label col-s-12 col-m-3\">Name</div>\n <div class=\"value col-s-12 col-m-9\">\n <span class=\"name\" v-text=\"client.config?.name || client.host?.name\"></span>\n <button title=\"Rename\" @click=\"renameClient\">\n <i class=\"fa fa-edit\" />\n </button>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"label col-s-12 col-m-3\">Connected</div>\n <div class=\"value col-s-12 col-m-9\" v-text=\"client.connected\"></div>\n </div>\n\n <div class=\"row\">\n <div class=\"label col-s-12 col-m-3\">Volume</div>\n <div class=\"value col-s-12 col-m-9\">{{ client.config.volume.percent }}%</div>\n </div>\n\n <div class=\"row\">\n <div class=\"label col-s-12 col-m-3\">Muted</div>\n <div class=\"value col-s-12 col-m-9\" v-text=\"client.config.volume.muted\"></div>\n </div>\n\n <div class=\"row\">\n <div class=\"label col-s-12 col-m-3\">Latency</div>\n <div class=\"value col-s-12 col-m-9\" v-text=\"client.config.latency\"></div>\n </div>\n\n <div class=\"row\" v-if=\"client.host.ip && client.host.ip.length\">\n <div class=\"label col-s-12 col-m-3\">IP Address</div>\n <div class=\"value col-s-12 col-m-9\" v-text=\"client.host.ip\"></div>\n </div>\n\n <div class=\"row\" v-if=\"client.host.mac && client.host.mac.length\">\n <div class=\"label col-s-12 col-m-3\">MAC Address</div>\n <div class=\"value col-s-12 col-m-9\" v-text=\"client.host.mac\"></div>\n </div>\n\n <div class=\"row\" v-if=\"client.host.os && client.host.os.length\">\n <div class=\"label col-s-12 col-m-3\">OS</div>\n <div class=\"value col-s-12 col-m-9\" v-text=\"client.host.os\"></div>\n </div>\n\n <div class=\"row\" v-if=\"client.host.arch && client.host.arch.length\">\n <div class=\"label col-s-12 col-m-3\">Architecture</div>\n <div class=\"value col-s-12 col-m-9\" v-text=\"client.host.arch\"></div>\n </div>\n\n <div class=\"row\">\n <div class=\"label col-s-12 col-m-3\">Client name</div>\n <div class=\"value col-s-12 col-m-9\" v-text=\"client.snapclient.name\"></div>\n </div>\n\n <div class=\"row\">\n <div class=\"label col-s-12 col-m-3\">Client version</div>\n <div class=\"value col-s-12 col-m-9\" v-text=\"client.snapclient.version\"></div>\n </div>\n\n <div class=\"row\">\n <div class=\"label col-s-12 col-m-3\">Protocol version</div>\n <div class=\"value col-s-12 col-m-9\" v-text=\"client.snapclient.protocolVersion\"></div>\n </div>\n </div>\n\n <div class=\"buttons\">\n <div class=\"row\">\n <button type=\"button\" :disabled=\"loading\" @click=\"removeClient\">\n <i class=\"fas fa-trash\" />\n <span class=\"name\">Remove client</span>\n </button>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: \"ClientModal\",\n emits: ['remove-client', 'rename-client'],\n props: {\n loading: {\n type: Boolean,\n default: false,\n },\n\n client: {\n type: Object,\n },\n },\n\n methods: {\n removeClient() {\n if (!window.confirm('Are you sure that you want to remove this client?'))\n return\n\n this.$emit('remove-client')\n },\n\n renameClient() {\n const name = (window.prompt('New client name',\n this.client.config.name?.length ? this.client.config.name : this.client.host.name) || '').trim()\n\n if (!name.length)\n return\n\n this.$emit('rename-client', name)\n },\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.client-modal {\n max-height: 75vh;\n display: flex;\n flex-direction: column;\n\n .info {\n height: 80%;\n overflow: auto;\n }\n\n button {\n background: none;\n border: none;\n padding: 0;\n margin: 0 .5em;\n\n &:hover {\n color: $default-hover-fg-2;\n }\n }\n\n .buttons {\n height: 20%;\n margin: 0 !important;\n padding: 0 !important;\n\n .row {\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n padding: 0;\n\n &:hover {\n background: none;\n }\n\n button {\n width: 100%;\n height: 100%;\n padding: 1em;\n color: #900;\n border-color: #900;\n\n .name {\n margin-left: .5em;\n }\n\n &:hover {\n background: $hover-bg;\n }\n }\n }\n }\n}\n</style>\n","import { render } from \"./Client.vue?vue&type=template&id=0e55ac54&scoped=true\"\nimport script from \"./Client.vue?vue&type=script&lang=js\"\nexport * from \"./Client.vue?vue&type=script&lang=js\"\n\nimport \"./Client.vue?vue&type=style&index=0&id=0e55ac54&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-0e55ac54\"]])\n\nexport default __exports__","import { render } from \"./Index.vue?vue&type=template&id=40841f5a&scoped=true\"\nimport script from \"./Index.vue?vue&type=script&lang=js\"\nexport * from \"./Index.vue?vue&type=script&lang=js\"\n\nimport \"./Index.vue?vue&type=style&index=0&id=40841f5a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-40841f5a\"]])\n\nexport default __exports__"],"names":["class","ref","type","min","range","max","step","disabled","value","onUpdate","withLabel","name","emits","props","Number","Boolean","default","Array","methods","event","this","update","target","$emit","$refs","percent","thumb","style","left","transform","track","width","mounted","__exports__","render","onInput","checked","loading","title","selectedHost","info","hosts","selectedGroup","group","groups","streams","clients","clientsByHost","addClientToGroup","removeClientFromGroup","streamChange","renameGroup","$event","selectedClient","client","removeClient","renameClient","host","id","key","server","groupMute","clientMute","clientSetVolume","onModalShow","collapsed","muted","stream","stream_id","status","config","connected","groupId","lastSeen","snapclient","length","volume","components","Slider","ToggleSwitch","Object","required","String","Client","Group","data","ip","mac","port","os","arch","snapserver","version","protocolVersion","controlProtocolVersion","keys","for","selected","uri","path","raw","prompt","trim","latency","window","confirm","mixins","Utils","Loading","Modal","Host","ModalHost","ModalGroup","ModalClient","ports","computed","entries","reduce","values","forEach","clientId","parseServerStatus","map","async","request","statuses","Promise","all","Set","refreshHost","has","delete","modalClient","close","streamId","onClientUpdate","onGroupStreamChange","onServerUpdate","onStreamUpdate","onClientVolumeChange","onGroupMuteChange","modalShow","modal","visible","mute","modalHost","show","modalGroup","refresh","subscribe"],"sourceRoot":""}