{"version":3,"file":"9830.602f67aa14bc747ac4fc.js","mappings":";8KAkBO,MAAMA,EAA0BC,IACrC,MAAMC,EAAaC,EAA8BF,GAC3CG,EAAWC,EAAuBH,EAAYD,GAEpD,OACE,SAAC,EAAAK,YAAD,CAAaC,MAAM,oBAAoB,cAAY,+BAAnD,UACE,SAAC,KAAD,CACEC,MAAM,OACNC,SAAU,QAAC,MAAEC,GAAH,SAAeT,EAAMQ,SAASC,IACxCA,MAAON,EACPO,QAAS,CACP,CACEJ,MAAO,qBACPI,QAASV,EAAMW,yBAEjB,CACEL,MAAO,eACPM,UAAU,EACVF,QAAST,IAGbY,YAAY,iBACZC,QAAU,GAAEd,EAAMe,0BAClBC,cAAc,WAMhBd,EAAgC,IAAiE,IAAhE,iBAAEe,GAA8D,EACrG,MAAMC,EAAYD,MAAAA,OAAH,EAAGA,EAAkBC,UAC9BC,EAAaF,MAAAA,OAAH,EAAGA,EAAkBE,WAErC,OAAOC,EAAAA,EAAAA,UAAQ,IACRF,GAAcC,GAIZE,EAAAA,EAAAA,IAA8BH,EAAyBC,GAA0BG,KAAKC,GAAD,iBACvFA,EADuF,CAE1FjB,MAAOiB,EAAEC,SALF,IAOR,CAACN,EAAWC,KAGXf,EAAyB,CAACH,EAA4CD,KACnEoB,EAAAA,EAAAA,UAAQ,IACM,IAAInB,KAAeD,EAAMW,yBAC1Bc,MAAMC,GAAMA,EAAEjB,QAAUT,EAAM2B,sBAC/C,CAAC1B,EAAYD,EAAM2B,mBAAoB3B,EAAMW,mICvD3C,MAAMiB,EAAoC,IAAqC,IAApC,MAAEb,EAAF,MAASN,EAAQ,GAAjB,SAAqBD,GAAe,EACpF,MAAOqB,EAAOC,IAAYC,EAAAA,EAAAA,UAAStB,MAAAA,EAAAA,EAAS,IAEtCuB,GAAoBC,EAAAA,EAAAA,UAASzB,EAAU,KAO7C,OALAA,EAAY0B,IACVJ,EAASI,EAAEC,OAAO1B,OAClBuB,EAAkBE,EAAEC,OAAO1B,SAI3B,SAAC,EAAAJ,YAAD,CAAaC,MAAM,WAAnB,UACE,SAAC,EAAA8B,EAAD,CAAOC,GAAK,GAAEtB,aAAkBN,MAAOoB,EAAOrB,SAAUA,sICFvD,MAAM8B,EAAuB,IAO9B,IAP+B,MACnCvB,EADmC,wBAEnCJ,EAFmC,SAGnCH,EAHmC,MAInC+B,EAJmC,eAKnCC,EALmC,WAMnCC,GACI,EACJ,MAAMC,GAAiBtB,EAAAA,EAAAA,UAAQ,KAAMuB,EAAAA,EAAAA,IAAqBH,EAAgBC,IAAa,CAACD,EAAgBC,IACxG,OACE,UAAC,EAAAG,iBAAD,YACE,SAAC,EAAAvC,YAAD,CACEC,MAAM,qBACNuC,QAAQ,iMAFV,UAIE,SAAC,IAAD,CACE/B,QAAU,GAAEC,uBACZJ,wBAAyBA,EACzB4B,MAAOA,EACP/B,SAAUA,OAGd,SAAC,EAAAH,YAAD,CAAaC,MAAM,mBAAmBuC,QAASH,EAA/C,UACE,SAAC,IAAD,CACE5B,QAAU,GAAEC,qBACZJ,wBAAyBA,EACzBmC,QAASP,EAAMQ,gBACfvC,SAAWwC,GAAWxC,EAAS,OAAD,UAAM+B,EAAN,CAAaQ,gBAAiBC,KAC5DC,gBAAiBC,EAAAA,yGCnCpB,MAAMC,EAA+B,IAA2D,IAA1D,QAAErC,EAAF,MAAWyB,EAAX,wBAAkB5B,EAAlB,SAA2CH,GAAe,EACrG,MAAM,UAAEU,EAAF,WAAaC,EAAYiC,iBAAkBC,EAA3C,aAAgDC,GAAiBf,GACjE,iBAAEa,EAAF,aAAoBG,IAAiBnC,EAAAA,EAAAA,UACzC,KAAMoC,EAAAA,EAAAA,IAAuBtC,EAAWC,EAAYkC,EAAKC,IACzD,CAACpC,EAAWC,EAAYkC,EAAKC,IAG/B,OACE,SAAC,KAAD,CACE9C,SAAU,QAAC,MAAEC,GAAH,SAAeD,EAAS,OAAD,UAAM+B,EAAN,CAAaa,iBAAkB3C,MAChEA,MAAO,IAAI8C,KAAiB5C,GAAyBc,MAAMC,GAAMA,EAAEjB,QAAU2C,IAC7E1C,QAAS,CACP,CACEJ,MAAO,qBACPI,QAASC,GAEX,CACEL,MAAO,oBACPM,UAAU,EACVF,QAAS6C,IAGb1C,YAAY,mBACZC,QAASA,EACTE,cAAc,wIClBb,MAAMyC,EAAoC,IAO3C,YAP4C,MAChD1C,EACA2C,OAAQC,EAAW,GAF6B,MAGhDpB,EAHgD,SAIhD/B,EAJgD,oBAKhDoD,EALgD,iBAMhD3C,GACI,EACJ,MAAMP,GAAUU,EAAAA,EAAAA,UACd,IAAM,CAACwC,MAAwBC,EAAAA,EAAAA,IAAuB,IAAIF,KAAaG,EAAAA,OACvE,CAACH,EAAUC,IAGb,OACE,UAAC,EAAAhB,iBAAD,YACE,SAAC,EAAAvC,YAAD,CACEC,MAAM,WACNuC,QAAQ,oTAFV,UAIE,SAAC,KAAD,CACE/B,QAAU,GAAEC,aACZR,MAAM,OACNM,YAAY,eACZH,QAASA,EACTD,MAAK,UAAE8B,EAAMoB,gBAAR,QAAoB,GACzBnD,SAAWE,IACTF,EAAS,OAAD,UAAM+B,EAAN,CAAaoB,SAAUjD,EAAQY,KAAKyC,GAAMA,EAAEtD,YAEtDO,cAAc,WAGlB,SAAC,IAAD,CACEC,iBAAkBA,EAClBN,wBAAyBiD,EAAoBlD,QAC7CiB,mBAAoBY,EAAMZ,mBAC1BgC,SAAQ,UAAEpB,EAAMoB,gBAAR,QAAoB,GAC5BnD,SAAWmB,GAAuBnB,EAAS,OAAD,UAAM+B,EAAN,CAAaZ,mBAAAA,KACvDZ,MAAOA,sICpCf,MAAMiD,EAAmB,IACnBC,EAAoB,MAKpBC,EAAY,CAAC,IAAK,KAAM,KAAM,OAAO5C,IAAI6C,EAAAA,GAElCC,EAAwC,IAK/C,IALgD,OACpDV,EAAS,GACTW,QAASC,EACT9D,SAAU+D,EAH0C,oBAIpDX,GACI,EACJ,MAAMS,GAAoBjD,EAAAA,EAAAA,UAAQ,KAAMoD,EAAAA,EAAAA,IAAqBF,IAAc,CAACA,IACtE5D,GAAUU,EAAAA,EAAAA,UACd,IAAM,CAACwC,MAAwBC,EAAAA,EAAAA,IAAuBY,OAAOC,KAAKhB,MAClE,CAACA,EAAQE,IAGLe,EAAa,IAA+C,IAA9C,IAAEC,EAAM,GAAR,MAAYnE,EAAQ,IAA0B,EAE7CC,EAAQmE,MAAMC,GAC3BA,EAAGpE,QACEA,EAAQmE,MAAME,GAAQA,EAAIzE,QAAUsE,IAEtCE,EAAGxE,QAAUsE,KAGpBlE,EAAQsE,KAAK,CAAE1E,MAAOsE,EAAKnE,MAAOmE,IAGpC,MAAMK,EAAevB,EAAOwB,eAAeN,GACvC,CAAChB,KAAwBF,EAAOkB,GAAKtD,IAAI6C,EAAAA,IACzC,CAACP,GAML,OALqBqB,EAAaJ,MAAMC,GAAOA,EAAGxE,QAAUG,KAE1DwE,EAAaD,KAAK,CAAE1E,MAAOG,EAAOA,MAAAA,IAG7B,CAAEC,QAAAA,EAASuE,aAAAA,IA8CpB,OACE,SAAC,EAAAE,UAAD,WACE,SAAC,EAAA9E,YAAD,CACEC,MAAM,SACNuC,QAAQ,iMAFV,UAIE,SAAC,EAAAuC,WAAD,CAAYC,MAAOhB,EAASiB,WAvCf,CAACC,EAAuBC,EAAsCC,KAC/E,MAAM,IAAEb,EAAM,GAAR,SAAYc,EAAW1B,EAAvB,MAAyCvD,EAAQ,GAAjD,UAAqDkF,EAAY1B,GAAsBsB,GACvF,QAAE7E,EAAF,aAAWuE,GAAiBN,EAAWY,GAE7C,OACE,UAAC,KAAD,CAAiBK,QAAQ,KAAKrF,MAAM,OAApC,WACE,SAAC,KAAD,CACE,aAAW,mBACXsF,kBAAoBC,GAAO,kBAAiBA,IAC5CC,kBAAgB,EAChBtF,MAAOmE,EACPlE,QAASA,EACTF,SAAU,QAAGC,MAAOmE,EAAM,IAAhB,SAAyBY,EAAa,CAAEZ,IAAAA,EAAKc,SAAAA,EAAUjF,MAAAA,EAAOkF,UAAAA,QAE1E,SAAC,KAAD,CACElF,MAAOiF,EACPhF,QAASwD,EACT1D,SAAU,QAAGC,MAAOiF,EAAW1B,GAArB,SAA4CwB,EAAa,CAAEZ,IAAAA,EAAKc,SAAAA,EAAUjF,MAAAA,EAAOkF,UAAAA,QAE7F,SAAC,KAAD,CACE,aAAW,qBACX9E,YAAY,mBACZgF,kBAAoBC,GAAO,oBAAmBA,IAC9CC,kBAAgB,EAChBtF,MAAOA,EACPC,QAASuE,EACTzE,SAAU,QAAC,MAAEC,EAAQ,IAAX,SAAoB+E,EAAa,CAAEZ,IAAAA,EAAKc,SAAAA,EAAUjF,MAAAA,EAAOkF,UAAAA,QAErE,SAAC,EAAAK,gBAAD,CAAiB,aAAW,SAASC,KAAK,QAAQC,QAAQ,YAAYC,QAASV,EAAcW,KAAK,eAW9C5F,SAjDxC6E,IAChB,MAAMhB,EAAUgB,EAAM/D,KAAI,QAAC,IAAEsD,EAAF,SAAOc,EAAP,MAAiBjF,EAAjB,UAAwBkF,GAAzB,QAA0C,CAClEf,IAAKA,GAAO,GACZc,SAAUA,GAAY1B,EACtBvD,MAAOA,GAAS,GAChBkF,UAAWA,GAAa1B,MAE1BM,EA/C0BF,CAAAA,GAC5BA,EAAQgC,SAAQ,QAAC,IAAEzB,EAAF,SAAOc,EAAP,MAAiBjF,EAAjB,UAAwBkF,GAAzB,QAAyC,CAACf,EAAKc,EAAUjF,EAAOkF,MAAYW,MAAM,GAAI,GA8C1FC,CAAqBlC,8FC9D5B,SAASmC,EAAT,GAAyF,IAAjE,MAAEjE,EAAF,SAAS/B,EAAT,WAAmBiG,GAA8C,EAQ9F,OACE,+BACE,SAAC,IAAD,CACEC,KAAK,QACLC,UAAU,oBACVlG,MAAO8B,EACPqE,KAAM,GACN/F,YAAY,4DACZgG,OAAQJ,EACRjG,SAAW0B,GAAM1B,EAAS0B,EAAE4E,cAAcrG,OAC1CsG,UAjBaC,IACC,UAAdA,EAAMpC,MAAoBoC,EAAMC,UAAYD,EAAME,WACpDF,EAAMG,iBACNV,0KCGC,MAAMW,EAAwC,IAA2D,IAA1D,MAAErG,EAAF,SAASP,EAAT,YAAmB6G,EAAnB,oBAAgCzD,GAA0B,EAC9G,OACE,SAAC,EAAAuB,UAAD,WACE,SAAC,EAAA9E,YAAD,CACEC,MAAM,eACNgH,QAAU,GAAEvG,iBACZ8B,SACE,8CACM,4CADN,+GAJJ,UAUE,UAAC,KAAD,YACE,SAAC0E,EAAA,EAAD,CACE,cAAc,GAAExG,wBAChBN,MAAuB,aAAhB4G,EACP7G,SAAW0B,GAAM1B,EAAS0B,EAAE4E,cAAcU,QAAU,GAAK,eAE3D,SAAC,KAAD,CACE1G,QAAU,GAAEC,iBACZJ,wBAAyBiD,EAAoBlD,QAC7CoC,QAASuE,EACT7G,SAAUA,EACViH,SAA0B,aAAhBJ,EACVpE,gBAAiByE,EAAAA,uCCJtB,MAAMC,EAAsB,CACjCjE,OAAQ,IAGGkE,EAAwEC,IAAD,CAClFC,WAAYC,EAAAA,GAAAA,OACZC,YAAaH,EAAWI,oBACxBC,WAAY,GACZ/G,WAAYgH,EAAAA,GAAAA,MACZjH,UAAW,GACXS,mBAAoB,cACpBoB,gBAAiB,wBACjBK,iBAAkBgF,EAAAA,GAAAA,WAClBzE,SAAU,GACVU,QAAS,GACTgE,QAAS,GACT9F,MAAO,GACPe,aAAcgF,EAAAA,GAAAA,OAGhB,SAASC,EAAT,GAQmC,IARnB,MACdxH,EADc,MAEdwB,EAFc,WAGdE,EACAjC,SAAUgI,EAJI,WAKd/B,EALc,eAMdjE,EANc,oBAOdoB,GACiC,EACjC,MAAO6E,EAAOC,IAAY3G,EAAAA,EAAAA,UAAgB4F,IACpC,YAAEK,EAAF,WAAeE,EAAf,SAA2BvE,EAA3B,WAAqCmE,EAArC,mBAAiDnG,GAAuBY,GAE9EoG,EAAAA,EAAAA,YAAU,KACJX,GAAeE,GACjBzF,EACGmG,UAAUV,EAAYnH,EAAOiH,GAC7Ba,MAAMnF,GAAWgF,GAAUI,GAAD,iBAAqBA,EAArB,CAAgCpF,OAAAA,UAE9D,CAACjB,EAAYkB,EAAUuE,EAAYF,EAAajH,EAAOY,IAE1D,MAAMnB,GAAWuI,EAAAA,EAAAA,cACdC,IACCR,EAAc,OAAD,UAAMjG,EAAUyG,IAC7BvC,MAEF,CAAC+B,EAAe/B,EAAYlE,IAGxB0G,GAAqBF,EAAAA,EAAAA,cACzB,IAAuD,IAAtD,UAAE7H,EAAF,WAAaC,EAAb,KAAyBiF,GAA6B,EACrD,MAAM9C,EACJnC,IAAegH,EAAAA,GAAAA,OAAoBjH,IAAcgI,EAAAA,GAAAA,aAC7CZ,EAAAA,GAAAA,KACAA,EAAAA,GAAAA,MACA,iBAAElF,IAAqBI,EAAAA,EAAAA,IAAuBtC,EAAWC,EAAYsH,EAAMrF,iBAAkBE,GACnG9C,EAAS,OAAD,UACH+B,EADG,CAENa,iBAAAA,EACA8E,WAAY9B,EACZlF,UAAAA,EACAC,WAAAA,EACAmC,aAAAA,OAGJ,CAAC9C,EAAU+B,EAAOkG,IAGpB,OACE,UAAC,EAAAU,WAAD,WACGrB,IAAeC,EAAAA,GAAAA,SACd,SAACqB,EAAA,EAAD,CACErI,MAAOA,EACP2C,OAAQ+E,EAAM/E,OACdE,oBAAqBA,EACrBpB,eAAgBA,EAChByG,mBAAoBA,EACpBzI,SAAUA,EACViC,WAAYA,EACZF,MAAOA,IAIVuF,IAAeC,EAAAA,GAAAA,MACd,iCACE,SAACvB,EAAA,EAAD,CACEhG,SAAW6I,GAAcb,EAAc,OAAD,UAAMjG,EAAN,CAAaA,MAAO8G,KAC1D5C,WAAYA,EACZlE,MAAOA,EAAMA,SAEf,SAAC6E,EAAD,CACE5G,SAAW6G,GAAwBmB,EAAc,OAAD,UAAMjG,EAAN,CAAa8E,YAAAA,KAC7DA,YAAa9E,EAAM8E,YACnBtG,MAAOA,EACP6C,oBAAqBA,UAQ1B,MAAM0F,EAAoBC,EAAAA,KAAWhB,yJClHrC,SAASiB,EAAQxJ,GACtB,MAAOyJ,EAAmBC,IAAwB3H,EAAAA,EAAAA,UAA6B,KACxEd,EAAkB0I,IAAuB5H,EAAAA,EAAAA,aACzC6H,EAASC,IAAc9H,EAAAA,EAAAA,UAAyC,KAChE+H,EAAUC,IAAehI,EAAAA,EAAAA,UAAyC,KAClEiI,EAASC,IAAclI,EAAAA,EAAAA,UAAiB,IAEzCmI,GAAQC,EAAAA,EAAAA,MACRC,GAAeC,EAAAA,EAAAA,GAAgBH,GAE/BI,GAAcC,EAAAA,EAAAA,IAAWC,IAEzB,gBACJC,EADI,MAEJlI,EAFI,MAGJxB,EAHI,WAIJmH,EAJI,wBAKJvH,EALI,YAMJqH,EANI,WAOJvF,EAPI,SAQJjC,EARI,SASJkK,GACE1K,GACE,YAAE2K,GAAgBlI,EAElBmI,GAA8B7B,EAAAA,EAAAA,cAClC,CAACU,EAAuCvB,IAC/BuB,EAAkBhI,MAAMoJ,GAAOA,EAAGzE,OAASuE,EAAYG,QAAQ5C,MAExE,CAACyC,KAGHhC,EAAAA,EAAAA,YAAU,KACsBoC,WAC5B,GAAI/C,EAAa,CACf,MAAMyB,QAA0BhH,EAAWuI,eAAehD,GACpD8B,EAAWmB,EAAgBxB,GACjCC,EAAqBD,GACrBM,EAAYD,KAGhBoB,KACC,CAACzI,EAAYuF,EAAasC,EAAaF,EAAae,qBAEvDxC,EAAAA,EAAAA,YAAU,KACR,MAwBMiB,EAxBkBH,CAAAA,IACtB,MAAM2B,EAA2BR,EAA4BnB,EAAmBvB,GAChF,IAAKkD,EACH,MAAO,GAkBT,OAfyB3B,EACtB4B,QAAQC,GAAMA,EAAEtB,UAAYoB,EAAyBpB,UACrD1I,KAAKgK,IAAD,CACHtB,QAASsB,EAAEtB,QACXvJ,MAAO6K,EAAElF,KACT9F,MAAOgL,EAAEC,YACTC,UAAW,WACT,OACE,4BACE,gBAAK7E,UAAW2D,EAAhB,SAA8BgB,EAAElF,QAChC,gBAAKO,UAAWyD,EAAae,kBAA7B,SAAiDG,EAAEG,uBAQ/CC,CAAejC,GACzBO,EAAUJ,EAAQ+B,OAAS,EAAI/B,EAAQ,GAAGI,QAAU,GACpD/I,EAAmB2J,EAA4BnB,EAAmBvB,GACxEyB,EAAoB1I,GACpB4I,EAAWD,GACXK,EAAWD,KACV,CAACP,EAAmBmB,EAA6B1C,EAAYoC,EAAaF,EAAae,oBAE1F,MAoBMlC,EAAqB,IAAwC,IAAvC,MAAExI,GAAqC,EACjE,MAAMQ,EAAmB2J,EAA4BnB,EAAmBhJ,GACxEkJ,EAAoB1I,GACpBT,EAAS,OAAD,UAAMS,EAAN,CAAwBmF,KAAM3F,MAGlCwK,EAAmBxB,IACvB,MAAMK,EAAWL,EAAkBnI,KAAKgK,IAAD,CACrC7K,MAAO6K,EAAEtB,QACT1J,OAAOsL,EAAAA,EAAAA,WAAUN,EAAEO,sBAGrB,OAAO/B,EAAS6B,OAAS,GAAIG,EAAAA,EAAAA,QAAOhC,GAAWpI,GAAMA,EAAEjB,QAAS,IAGlE,OACE,iCACE,SAAC,EAAA0E,UAAD,WACE,UAAC,EAAAvC,iBAAD,YACE,SAAC,IAAD,CACE7B,MAAOA,EACPJ,wBAAyBA,EACzBqH,YAAaA,EACbvF,WAAYA,EACZjC,SAAWwH,IACTyC,EAAgB,OAAD,UAAMlI,EAAN,CAAayF,YAAAA,SAIhC,SAAC,EAAA3H,YAAD,CAAaC,MAAM,UAAUC,MAAM,OAAnC,UACE,SAAC,KAAD,CACEA,MAAM,OACNC,SApDY,IAA6B,IAA1BC,MAAOuJ,GAAmB,EACnD,MAAMJ,EAAUH,EACb4B,QAAQC,GAAwBA,EAAEtB,UAAYW,EAAYG,QAAQd,KAClE1I,KAAKgK,IAAD,CACHtB,QAASsB,EAAEtB,QACXvJ,MAAO6K,EAAElF,KACT9F,MAAOgL,EAAEC,YACTE,YAAaH,EAAEG,gBAGf7B,EAAQ+B,OAAS,IAAM/B,EAAQ/E,MAAMyG,GAAMA,EAAE7K,QAAUkK,EAAYG,QAAQ5C,MAC7Ee,EAAmBW,EAAQ,IAC3BK,EAAWD,GACXH,EAAWD,KAEXK,EAAWD,GACXH,EAAWD,KAqCHnJ,MAAO,IAAIqJ,KAAanJ,GAAyBc,MAAMC,GAAMA,EAAEjB,QAAUuJ,IACzEtJ,QAAS,CACP,CACEJ,MAAO,qBACPI,QAASC,MAERmJ,GAELjJ,YAAY,kBACZC,QAAU,GAAEd,EAAMe,qBAGtB,SAAC,EAAAV,YAAD,CAAaC,MAAM,cAAcC,MAAM,OAAvC,UACE,SAAC,KAAD,CACEA,MAAM,OACNC,SAAUyI,EACVxI,MAAO,IAAImJ,KAAYjJ,GAAyBc,MAAMC,GAAMA,EAAEjB,QAAUyH,IACxExH,QAAS,CACP,CACEJ,MAAO,qBACPI,QAASC,MAERiJ,GAEL/I,YAAY,gBACZC,QAAU,GAAEd,EAAMe,+BAMzB2J,EAASzJ,MAKhB,MAAMuJ,EAAaN,GAAyB6B,EAAAA,GAAI;;;;WAIrC7B,EAAM8B,OAAOxK,KAAKyK;sFCjLtB,SAASC,EAAT,GAOG,IAPmB,QAC3BpL,EAD2B,wBAE3BH,EAF2B,SAG3BH,EAH2B,QAI3BsC,EAJ2B,SAK3B2E,EAL2B,gBAM3BxE,GACQ,EACR,MAAMvC,GAAUU,EAAAA,EAAAA,UACd,IACE6B,EAAgB3B,KAAK6K,GAAD,iBACfA,EADe,CAElB7L,MAAO6L,EAAG3K,UAEd,CAACyB,IAEGmJ,GAAiBhL,EAAAA,EAAAA,UAAQ,IAAMV,EAAQ2K,QAAQc,IAAQA,EAAGE,UAAS,CAAC3L,IAE1E,OACE,SAAC,KAAD,CACEH,MAAM,OACNC,SAAU,QAAC,MAAEC,GAAH,SAAeD,EAASC,IAClCA,MAAO,IAAIC,KAAYC,GAAyBc,MAAMC,GAAMA,EAAEjB,QAAUqC,IACxEpC,QAAS,CACP,CACEJ,MAAO,qBACPI,QAASC,GAEX,CACEL,MAAO,eACPM,UAAU,EACVF,QAAS0L,IAGbvL,YAAY,gBACZC,QAASA,EACT2G,SAAUA,EACV1B,kBAAgB,EAChB/E,cAAc,6HC/CpB,MAAMsL,EAAc,CAAEhM,MAAO,OAAQG,MAAO6H,EAAAA,GAAAA,MAQ/BiE,EAAyC,IAA2C,UAA1C,MAAEhK,EAAF,iBAAStB,EAAT,SAA2BT,GAAe,EAC/F,MAAME,EAAU8L,EAAWvL,GAC3B,OACE,SAAC,EAAAZ,YAAD,CACEC,MAAM,iBACNuC,QAAQ,qWAFV,UAIE,SAAC,IAAD,CACErC,SAAWC,IACT,MAAM,UAAES,EAAF,WAAaC,EAAYiC,iBAAkBC,GAAQd,GACnD,iBAAEa,IAAqBI,EAAAA,EAAAA,IAAuBtC,EAAWC,EAAYkC,EAAK5C,GAChFD,EAAS,OAAD,UAAM+B,EAAN,CAAae,aAAc7C,EAAO2C,iBAAAA,MAE5C3C,MAAK,UAAE8B,EAAMe,oBAAR,QAAwBgF,EAAAA,GAAAA,KAC7B5H,QAASA,OAMX8L,EAAcvL,IAClB,MAAME,EAAaF,MAAAA,OAAH,EAAGA,EAAkBE,WAC/BD,EAAYD,MAAAA,OAAH,EAAGA,EAAkBC,UAEpC,OAAOE,EAAAA,EAAAA,UAAQ,KACb,IAAKD,GAAcA,IAAegH,EAAAA,GAAAA,OAAoBjH,IAAcgI,EAAAA,GAAAA,aAClE,MAAO,CAACoD,GAGV,MAAM5L,EAAU,CACd4L,EACA,CACEhM,MAAO,OACPG,MAAO6H,EAAAA,GAAAA,KACPmD,YAAa,oEAIjB,OAAOtK,IAAegH,EAAAA,GAAAA,WAClB,IACKzH,EACH,CACEJ,MAAO,QACPG,MAAO6H,EAAAA,GAAAA,MACPmD,YAAa,wEAGjB/K,IACH,CAACS,EAAYD,oGCjDX,SAASuL,EAAT,GAA+F,IAA9E,MAAE1L,EAAF,YAASiH,EAAT,WAAsBvF,EAAtB,SAAkCjC,EAAlC,wBAA4CG,GAAkC,EACpG,MAAO+L,EAAUC,IAAe5K,EAAAA,EAAAA,UAAyC,KACzE4G,EAAAA,EAAAA,YAAU,KACRlG,EAAWmK,cAAc/D,MAAM6D,GAAaC,EAAYD,OACvD,CAACjK,IAEJ,MAAMoK,GAAgCzL,EAAAA,EAAAA,UACpC,IAAM,CACJsL,EACA,CACEpM,MAAO,qBACPI,QAASC,MAER+L,IAEL,CAACA,EAAU/L,IAGb,OACE,SAAC,EAAAN,YAAD,CAAaC,MAAM,UAAnB,UACE,SAAC,KAAD,CACEC,MAAM,OACNwF,kBAAgB,EAChBF,kBAAoBC,GAAO,gBAAeA,IAC1CtF,SAAU,QAAC,MAAEC,GAAH,SAAeD,EAASC,IAClCC,QAASmM,EACTpM,MAAO,CAAEA,MAAOuH,EAAa1H,MAAO0H,GACpCnH,YAAY,iBACZC,QAAU,GAAEC,8JC5BpB,MAAM+L,EAAe,CACnB,CAAExM,MAAO,UAAWG,MAAOsH,EAAAA,GAAAA,QAC3B,CAAEzH,MAAO,MAAOG,MAAOsH,EAAAA,GAAAA,MAGZgF,EAAe/M,IAC1B,MAAM,MAAEuC,EAAF,YAASyG,EAAT,SAAsBgE,EAAtB,SAAgCxM,EAAhC,WAA0CiG,GAAezG,GACzD,UAAEiN,GAAc1K,GAChB,WAAEuF,GAAekB,EAEvB,OACE,UAAC,EAAAkE,aAAD,YACE,SAAC,EAAAC,aAAD,CACE7M,MAAM,aACNI,QAAS0M,EAAAA,GACT3M,MAAOwM,EACPzM,SAAU,IAAe,IAAd,MAAEC,GAAY,EACvBD,EAAS,OAAD,UAAM+B,EAAN,CAAayK,SAAAA,EAAUC,UAAWxM,KAC1CgG,OAPN,OAUE,SAAC,EAAA4G,SAAD,CAAUC,KAAM,KACfL,IAAcM,EAAAA,GAAAA,MACb,SAACC,EAAA,EAAD,CACEC,KAAK,KACL/M,QAASoM,EACTrM,MAAOqH,GAAcC,EAAAA,GAAAA,OACrBvH,SAAWC,IACTD,EAAS,OAAD,UACH+B,EADG,CAENyG,YAAa,OAAF,UACNA,EADM,CAETlB,WAAYrH,mHChCrB,MAAMiN,UAAoBC,EAAAA,cACA,kCAC7B,MAAM,WAAElL,EAAF,MAAcF,GAAUqL,KAAK5N,MAInC,IAAK4N,KAAK5N,MAAMuC,MAAM2C,eAAe,eAAgB,CACnD,MAAsE8D,sIAAtE,CAAsF4E,KAAK5N,MAAMuC,MAAjG,GACAqL,KAAK5N,MAAMuC,MAAMyG,YAAcA,EAG5B,CAACuE,EAAAA,GAAAA,QAAmBA,EAAAA,GAAAA,KAAeM,SAASD,KAAK5N,MAAMuC,MAAM0K,aAChEW,KAAK5N,MAAMuC,MAAM0K,UAAYM,EAAAA,GAAAA,eAGzB9K,EAAWqL,0BACZvL,EAAMyG,YAAYhB,cACrB4F,KAAK5N,MAAMuC,MAAMyG,YAAYhB,YAAcvF,EAAWwF,qBAI1DO,cAAcuF,EAActN,GAC1BmN,KAAK5N,MAAMQ,SAAX,iBAAyBoN,KAAK5N,MAAMuC,MAApC,CAA2C,CAACwL,GAAOtN,KACnDmN,KAAK5N,MAAMyG,aAGbuH,SAAS,UACP,MAAM,WAAEvL,EAAF,MAAcF,EAAd,WAAqBkE,EAArB,SAAiCjG,GAAaoN,KAAK5N,MACnDgJ,EAAc,OAAH,WAAQpB,EAAAA,EAAAA,IAAanF,GAAgBF,EAAMyG,aACtDgE,EAAW,OAAH,WAAQiB,EAAAA,EAAAA,GAAgBxL,GAAgBF,EAAMyK,UACtDC,EAAY1K,EAAM0K,WAAaM,EAAAA,GAAAA,QAC/BW,EAAO,UAAAN,KAAK5N,MAAMmO,YAAX,SAAiBC,OAAOzC,OAAxB,UAAiCiC,KAAK5N,MAAMmO,YAA5C,aAAiC,EAAiBC,OAAO,GAAGF,KAAO,GAC1E1L,EAAc,UAAG0L,MAAAA,OAAH,EAAGA,EAAMG,cAAT,QAAmB,GACjCzK,EAAsB,CAC1BtD,MAAO,qBACPM,UAAU,EACVF,QAAS+B,EAAW6L,eAAehN,IAAI6C,EAAAA,IAGzC,OACE,UAAC,EAAAgF,WAAD,YACE,SAAC4D,EAAD,CACExK,MAAOA,EACPyG,YAAaA,EACbgE,SAAUA,EACVxM,SAAUA,EACViG,WAAYA,IAEbwG,IAAcM,EAAAA,GAAAA,UACb,SAAC,KAAD,CACExM,MAAOwB,EAAMxB,MACb6C,oBAAqBA,EACrBpB,eAAgBA,EAChBhC,SAAWwI,IACT4E,KAAK5N,MAAMQ,SAAX,iBAAyBoN,KAAK5N,MAAMuC,MAApC,CAA2CyG,YAAAA,MAE7CvC,WAAYA,EACZhE,WAAYA,EACZF,MAAOyG,IAIViE,IAAcM,EAAAA,GAAAA,MACb,SAAC,KAAD,CACExM,MAAOwB,EAAMxB,MACb6C,oBAAqBA,EACrBpB,eAAgBA,EAChBhC,SAAW+B,GAAoBqL,KAAKpF,cAAc,WAAYjG,GAC9DkE,WAAYA,EACZhE,WAAYA,EACZF,MAAOyK,2JCvEZ,MAAMuB,EAAuB,IAAkE,IAAjE,MAAExN,EAAF,QAAS+B,EAAT,wBAAkBnC,EAAlB,SAA2CH,GAAsB,EACpG,MAAME,EAAU8N,EAAAA,GAAAA,KAAsBC,GAAD,iBAChCA,EADgC,CAEnCnO,MAAOmO,EAAGjN,SAERsB,IAAYpC,EAAQe,MAAMqD,GAAOA,EAAGrE,QAAUqC,KAChDpC,EAAQsE,KAAK,CAAE1E,MAAOwC,EAAStB,KAAMsB,EAASrC,MAAOqC,EAASuJ,QAAQ,IAExE,MAAMD,EAAiB1L,EAAQ2K,QAAQoD,IAAQA,EAAGpC,SAElD,OACE,SAAC,EAAAhM,YAAD,CAAaC,MAAM,kBAAkBgH,QAAU,GAAEvG,oBAAjD,UACE,SAAC2N,EAAA,GAAD,CACE5N,QAAU,GAAEC,oBACZR,MAAM,OACNwF,kBAAgB,EAChBtF,MAAO,IAAIC,KAAYC,GAAyBc,MAAMC,GAAMA,EAAEjB,QAAUqC,IACxEpC,QAAS,CACP,CACEJ,MAAO,qBACPI,QAASC,GAEX,CACEL,MAAO,qBACPM,UAAU,EACVF,QAAS0L,IAGb5L,SAAU,QAAC,MAAEC,GAAH,SAAeD,EAASC,mCC1BnC,MAAMkO,EAAM,IAA4E,IAA3E,MAAE5N,EAAF,MAASwB,EAAT,wBAAgB5B,EAAhB,SAAyCH,EAAzC,WAAmDiC,GAAwB,EAC7F,MAAOmM,EAAMC,IAAW9M,EAAAA,EAAAA,UAAyC,KAC3D,YAAEiG,EAAF,UAAe8G,GAAcvM,EAkBnC,OAhBAoG,EAAAA,EAAAA,YAAU,KACHX,GAAgB8G,GAIrBrM,EAAWsM,0BAA0B/G,EAAa8G,GAAWjG,MAAMmG,IACjEH,EAAQ,CACN,CACEvO,MAAO,qBACPI,QAASC,MAERqO,SAGN,CAACvM,EAAYuF,EAAa8G,EAAWnO,KAGtC,SAAC,EAAAN,YAAD,CAAaC,MAAM,MAAnB,UACE,SAACoO,EAAA,GAAD,CACE5N,QAAU,GAAEC,QACZR,MAAM,OACNwF,kBAAgB,EAChBtF,OAAO8B,MAAAA,OAAA,EAAAA,EAAO0M,QAAS,CAAExO,MAAO8B,MAAAA,OAAF,EAAEA,EAAO0M,MAAO3O,OAAOiC,MAAAA,OAAA,EAAAA,EAAO2M,WAAW3M,MAAAA,OAAlB,EAAkBA,EAAO0M,QAC9EpO,YAAY,aACZH,QAASkO,EACTpO,SAAUuK,MAAAA,IAAsD,IAA7CtK,MAAOwO,EAAQ,GAAI3O,MAAO4O,EAAU,IAAS,EAC9D,MACMC,SADa1M,EAAWsM,0BAA0B/G,EAAa8G,IACpDrN,MAAK,QAAC,MAAEhB,GAAH,SAAeA,IAAUgC,EAAWkI,YAAYG,QAAQmE,MAC9EzO,EAAS,OAAD,UAAM+B,EAAN,CAAa0M,MAAAA,EAAOC,QAAAA,EAASE,KAAMD,MAAAA,OAAF,EAAEA,EAAKC,cC/B7CC,EAAW,IAA4E,IAA3E,MAAEtO,EAAF,MAASwB,EAAT,wBAAgB5B,EAAhB,SAAyCH,EAAzC,WAAmDiC,GAAwB,EAClG,OACE,SAAC,EAAApC,YAAD,CAAaC,MAAM,WAAWgH,QAAU,GAAEvG,iBAA1C,UACE,SAAC2N,EAAA,GAAD,CACE5N,QAAU,GAAEC,iBACZR,MAAM,OACNwF,kBAAgB,EAChBtF,MAAO,IAAI6O,EAAAA,MAAc3O,GAAyBc,MAAMC,IAAD,uBAAOA,EAAEjB,SAAU8B,MAAAA,OAAZ,EAAYA,EAAOgN,qBAA1B,QAA0C,MACjG7O,QAAS,CACP,CACEJ,MAAO,qBACPI,QAASC,MAER2O,EAAAA,IAEL9O,SAAU,QAAGC,MAAO8O,GAAV,SAA6B/O,EAAS,OAAD,UAAM+B,EAAN,CAAagN,aAAcA,MAAAA,EAAAA,EAAgB,YChBrFC,EAAU,IAA4E,IAA3E,MAAEzO,EAAF,MAASwB,EAAT,wBAAgB5B,EAAhB,SAAyCH,EAAzC,WAAmDiC,GAAwB,EACjG,MAAOqH,EAAUC,IAAehI,EAAAA,EAAAA,UAAyC,KACnE,YAAEiG,GAAgBzF,EAkBxB,OAhBAoG,EAAAA,EAAAA,YAAU,KACHX,GAILvF,EAAWgN,eAAezH,GAAaa,MAAMiB,IAC3CC,EAAY,CACV,CACEzJ,MAAO,qBACPI,QAASC,MAERmJ,SAGN,CAACrH,EAAYuF,EAAarH,KAG3B,SAAC,EAAAN,YAAD,CAAaC,MAAM,UAAnB,UACE,SAACoO,EAAA,GAAD,CACE5N,QAAU,GAAEC,gBACZR,MAAM,OACNwF,kBAAgB,EAChBtF,OAAO8B,MAAAA,OAAA,EAAAA,EAAOuM,YAAa,CAAErO,MAAO8B,MAAAA,OAAF,EAAEA,EAAOuM,UAAWxO,OAAOiC,MAAAA,OAAA,EAAAA,EAAOmN,eAAenN,MAAAA,OAAtB,EAAsBA,EAAOuM,YAC1FjO,YAAY,iBACZH,QAASoJ,EACTtJ,SAAU,QAAGC,MAAOqO,EAAY,GAAIxO,MAAOoP,EAAc,IAA/C,SACRlP,EAAS,OAAD,UAAM+B,EAAN,CAAauM,UAAAA,EAAWY,YAAAA,EAAaT,MAAO,YCnBjDrH,EAAqEC,IAAD,CAC/EG,YAAaH,EAAWI,oBACxBlF,gBAAiB,wBACjBK,iBAAkBgF,EAAAA,GAAAA,WAClBC,QAAS,GACTkH,aAAc,oBACdT,UAAW,GACXY,YAAa,GACbT,MAAO,GACPC,QAAS,GACTS,eAAgB,KAGX,SAASC,EAAT,GAO4B,IAPJ,MAC7B7O,EAD6B,MAE7BwB,EAF6B,WAG7BE,EAH6B,SAI7BjC,EAJ6B,oBAK7BoD,EAL6B,eAM7BpB,GACiC,EACjC,MAAME,GAAiBtB,EAAAA,EAAAA,UAAQ,KAAMuB,EAAAA,EAAAA,IAAqBH,EAAgBC,IAAa,CAACD,EAAgBC,IACxG,OACE,+BACE,UAAC,EAAA0C,UAAD,YACE,SAACsH,EAAA,EAAD,CACE1L,MAAOA,EACPJ,wBAAyBiD,EAAoBlD,QAC7CsH,YAAazF,EAAMyF,YACnBvF,WAAYA,EACZjC,SAAWwH,GAAgBxH,EAAS,OAAD,UAAM+B,EAAN,CAAayF,YAAAA,QAElD,SAACwH,EAAD,CACEzO,MAAOA,EACP0B,WAAYA,EACZ9B,wBAAyBiD,EAAoBlD,QAC7C6B,MAAOA,EACP/B,SAAUA,KAEZ,SAACmO,EAAD,CACE5N,MAAOA,EACP0B,WAAYA,EACZ9B,wBAAyBiD,EAAoBlD,QAC7C6B,MAAOA,EACP/B,SAAUA,KAEZ,SAAC6O,EAAD,CACEtO,MAAOA,EACP0B,WAAYA,EACZ9B,wBAAyBiD,EAAoBlD,QAC7C6B,MAAOA,EACP/B,SAAUA,IAEX+B,EAAMgN,eAAiBM,EAAAA,KACtB,SAACtB,EAAD,CACExN,MAAOA,EACPP,SAAWmP,GAAmBnP,EAAS,OAAD,UAAM+B,EAAN,CAAaoN,eAAgBA,KACnE7M,QAASP,EAAMoN,eACfhP,wBAAyBiD,EAAoBlD,WAIjD,SAAC,EAAAkC,iBAAD,WACE,SAAC,EAAAvC,YAAD,CAAaC,MAAM,mBAAmBuC,QAASH,EAA/C,UACE,SAACwJ,EAAA,EAAD,CACEpL,QAAU,GAAEC,qBACZJ,wBAAyBiD,EAAoBlD,QAC7CoC,QAASP,EAAMQ,gBACfvC,SAAWwC,GAAWxC,EAAS,OAAD,UAAM+B,EAAN,CAAaQ,gBAAiBC,KAC5DC,gBAAiBC,EAAAA,UAKvB,SAACtB,EAAA,EAAD,CAASb,MAAOA,EAAON,MAAO8B,EAAM8F,QAAS7H,SAAW6H,GAAY7H,EAAS,OAAD,UAAM+B,EAAN,CAAa8F,QAAAA,mKC5EjG,SAASE,EAAT,GASmC,IATnB,MACdxH,EADc,MAEdwB,EAFc,OAGdmB,EAHc,WAIdjB,EAJc,SAKdjC,EALc,mBAMdyI,EANc,eAOdzG,EAPc,oBAQdoB,GACiC,EACjC,OACE,SAAC,IAAD,CACE7C,MAAOA,EACPiH,YAAazF,EAAMyF,YACnBE,WAAY3F,EAAM2F,WAClBvH,wBAAyBiD,EAAoBlD,QAC7C+B,WAAYA,EACZjC,SAAUyI,EACVwB,gBAAiBjK,EACjB+B,MAAOA,EART,SAUIuN,IACA,iCACE,SAAC,IAAD,CACEpM,OAAQA,EACRW,QAAS9B,EAAM8B,QACf7D,SAAW6D,GAAsB7D,EAAS,OAAD,UAAM+B,EAAN,CAAa8B,QAAAA,KACtDT,oBAAqBA,KAEvB,UAAC,EAAAuB,UAAD,YACE,SAAC,IAAD,CAAclE,iBAAkB6O,EAAQvN,MAAOA,EAAO/B,SAAUA,KAChE,SAAC,IAAD,CACEO,MAAOA,EACP2C,OAAQe,OAAOC,KAAKhB,GACpBnB,MAAOA,EACP/B,SAAUA,EACVoD,oBAAqBA,EACrB3C,iBAAkB6O,KAEpB,SAAC,IAAD,CACE/O,MAAOA,EACP0B,WAAYA,EACZ9B,wBAAyBiD,EAAoBlD,QAC7C6B,MAAOA,EACPC,eAAgBA,EAChBhC,SAAUA,KAEZ,SAAC,IAAD,CACEO,MAAOA,EACPN,MAAO8B,EAAM8F,QACb7H,SAAW6H,IACT7H,EAAS,OAAD,UAAM+B,EAAN,CAAa8F,QAAAA,gBAU9B,MAAMe,EAA0BG,EAAAA,KAAWhB,oKCrF3C,MAAMwH,EAAsB,IAC1B,IAAP,GACE,gBAAKpJ,UAAU,sCAAf,UACE,4BACE,qDACA,mLAEkD,QAElD,+KAIA,4BACI,kBADJ,eACwC,uBAExC,6CACkB,yGAElB,0CACA,0BACE,0BAAQ,qBADV,mCAGA,0BACE,0BAAQ,oBADV,yEAGA,0BACE,0BAAQ,oBADV,0DAGA,0BACE,0BAAQ,uBADV,6CAGA,0BACE,0BAAQ,gCADV,+DAGA,0BACE,0BAAQ,kCADV,uKCrBD,MAAMqJ,EAAkD,IAMzD,IAN0D,MAC9D1P,EAD8D,SAE9DE,EAF8D,MAG9DC,EAH8D,QAI9DC,EAJ8D,iBAK9DqF,GAAmB,GACf,EACJ,OACE,SAACkK,EAAA,EAAD,CAAa3P,MAAOA,EAAO4P,WAAY,GAAvC,UACE,SAACxB,EAAA,GAAD,CACEnO,MAAO,GACPwF,iBAAkBA,EAClBtF,MAAOA,EACPD,SAAU,QAAC,MAAEC,GAAH,SAAeD,EAASC,IAClCC,QAASA,0LCpBkByP,EAAAA,eAAAA,IACYA,EAAAA,eAAAA,IANxC,MASMC,EAAa,CACxB,CACE5O,KAAM,OACNf,MAAO,aACP4P,WAAY,CACVnH,EAAAA,GAAAA,MACAA,EAAAA,GAAAA,OACAA,EAAAA,GAAAA,MACAA,EAAAA,GAAAA,aACAA,EAAAA,GAAAA,OACAA,EAAAA,GAAAA,uBACAA,EAAAA,GAAAA,MAEFoH,YAAa,CAACnI,EAAAA,GAAAA,QAEhB,CACE3G,KAAM,QACNf,MAAO,cACP4P,WAAY,CAACnH,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,OAAmBA,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,cACpEoH,YAAa,CAACnI,EAAAA,GAAAA,WAAuBA,EAAAA,GAAAA,QAEvC,CACE3G,KAAM,OACNf,MAAO,aACP4P,WAAY,CAACnH,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,OAAmBA,EAAAA,GAAAA,OAClDoH,YAAa,CAACnI,EAAAA,GAAAA,WAAuBA,EAAAA,GAAAA,QAEvC,CACE3G,KAAM,cACNf,MAAO,oBACP4P,WAAY,CAACnH,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,OAAmBA,EAAAA,GAAAA,OAClDoH,YAAa,CAACnI,EAAAA,GAAAA,QAEhB,CACE3G,KAAM,aACNf,MAAO,mBACP4P,WAAY,CACVnH,EAAAA,GAAAA,MACAA,EAAAA,GAAAA,OACAA,EAAAA,GAAAA,MACAA,EAAAA,GAAAA,aACAA,EAAAA,GAAAA,OACAA,EAAAA,GAAAA,uBACAA,EAAAA,GAAAA,MAEFoH,YAAa,CAACnI,EAAAA,GAAAA,QAEhB,CACE3G,KAAM,MACNf,MAAO,YACP4P,WAAY,CAACnH,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,OAAmBA,EAAAA,GAAAA,OAClDoH,YAAa,CAACnI,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,QAElC,CACE3G,KAAM,MACNf,MAAO,YACP4P,WAAY,CAACnH,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,OAAmBA,EAAAA,GAAAA,OAClDoH,YAAa,CAACnI,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,QAElC,CACE3G,KAAM,OACNf,MAAO,aACP4P,WAAY,CAACnH,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,OAAmBA,EAAAA,GAAAA,OAClDoH,YAAa,CAACnI,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,QAElC,CACE3G,KAAM,QACNf,MAAO,cACP4P,WAAY,CAACnH,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,OAAmBA,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,MACpEoH,YAAa,CAACnI,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,QAElC,CACE3G,KAAM,MACNf,MAAO,YACP4P,WAAY,CAACnH,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,OAAmBA,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,cACpEoH,YAAa,CAACnI,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,QAElC,CACE3G,KAAM,SACNf,MAAO,eACP4P,WAAY,CAACnH,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,OAAmBA,EAAAA,GAAAA,OAClDoH,YAAa,CAACnI,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,QAElC,CACE3G,KAAM,aACNf,MAAO,mBACP4P,WAAY,CAACnH,EAAAA,GAAAA,MACboH,YAAa,CAACnI,EAAAA,GAAAA,QAEhB,CACE3G,KAAM,cACNf,MAAO,oBACP4P,WAAY,CAACnH,EAAAA,GAAAA,MACboH,YAAa,CAACnI,EAAAA,GAAAA,QAEhB,CACE3G,KAAM,gBACNf,MAAO,sBACP4P,WAAY,CAACnH,EAAAA,GAAAA,MACboH,YAAa,CAACnI,EAAAA,GAAAA,QAEhB,CACE3G,KAAM,gBACNf,MAAO,sBACP4P,WAAY,CAACnH,EAAAA,GAAAA,cACboH,YAAa,CAACnI,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,QAElC,CACE3G,KAAM,gBACNf,MAAO,sBACP4P,WAAY,CAACnH,EAAAA,GAAAA,cACboH,YAAa,CAACnI,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,QAElC,CACE3G,KAAM,gBACNf,MAAO,sBACP4P,WAAY,CAACnH,EAAAA,GAAAA,cACboH,YAAa,CAACnI,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,QAElC,CACE3G,KAAM,gBACNf,MAAO,sBACP4P,WAAY,CAACnH,EAAAA,GAAAA,cACboH,YAAa,CAACnI,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,QAElC,CACE3G,KAAM,iBACNf,MAAO,uBACP4P,WAAY,CAACnH,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,OAAmBA,EAAAA,GAAAA,OAClDoH,YAAa,CAACnI,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,SAIvBoI,EAAe,CAC1B,CACE/O,KAAM,OACNf,MAAO,cACP4P,WAAY,CACVnH,EAAAA,GAAAA,MACAA,EAAAA,GAAAA,OACAA,EAAAA,GAAAA,MACAA,EAAAA,GAAAA,aACAA,EAAAA,GAAAA,KACAA,EAAAA,GAAAA,QAEFoH,YAAa,CAACnI,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,WAAuBA,EAAAA,GAAAA,0BAE3E,CACE3G,KAAM,OACNf,MAAO,cACP4P,WAAY,CAACnH,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,OAAmBA,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,cACpEoH,YAAa,CAACnI,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,aAEpD,CACE3G,KAAM,MACNf,MAAO,aACP4P,WAAY,CAACnH,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,OAAmBA,EAAAA,GAAAA,OAClDoH,YAAa,CAACnI,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,WAAuBA,EAAAA,GAAAA,0BAE3E,CACE3G,KAAM,MACNf,MAAO,aACP4P,WAAY,CAACnH,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,OAAmBA,EAAAA,GAAAA,OAClDoH,YAAa,CAACnI,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,WAAuBA,EAAAA,GAAAA,0BAE3E,CACE3G,KAAM,MACNf,MAAO,aACP4P,WAAY,CAACnH,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,OAAmBA,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,cACpEoH,YAAa,CAACnI,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,WAAuBA,EAAAA,GAAAA,0BAE3E,CACE3G,KAAM,YACNf,MAAO,gBACP4P,WAAY,CAACnH,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,OAAmBA,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,cACpEoH,YAAa,CAACnI,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,WAAuBA,EAAAA,GAAAA,0BAE3E,CACE3G,KAAM,QACNf,MAAO,eACP4P,WAAY,CACVnH,EAAAA,GAAAA,MACAA,EAAAA,GAAAA,OACAA,EAAAA,GAAAA,MACAA,EAAAA,GAAAA,aACAA,EAAAA,GAAAA,KACAA,EAAAA,GAAAA,QAEFoH,YAAa,CAACnI,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,aAEpD,CACE3G,KAAM,aACNf,MAAO,oBACP4P,WAAY,CAACnH,EAAAA,GAAAA,MACboH,YAAa,CAACnI,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,QAElC,CACE3G,KAAM,cACNf,MAAO,qBACP4P,WAAY,CAACnH,EAAAA,GAAAA,MACboH,YAAa,CAACnI,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,QAElC,CACE3G,KAAM,kBACNf,MAAO,uBACP4P,WAAY,CAACnH,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,OAAmBA,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,cACpEoH,YAAa,CAACnI,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,aAEpD,CACE3G,KAAM,kBACNf,MAAO,uBACP4P,WAAY,CAACnH,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,OAAmBA,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,cACpEoH,YAAa,CAACnI,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,aAEpD,CACE3G,KAAM,kBACNf,MAAO,uBACP4P,WAAY,CAACnH,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,OAAmBA,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,cACpEoH,YAAa,CAACnI,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,aAEpD,CACE3G,KAAM,iBACNf,MAAO,uBACP4P,WAAY,CAACnH,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,OAAmBA,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,cACpEoH,YAAa,CAACnI,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,MAAkBA,EAAAA,GAAAA,cAUzCjF,EAAoC,CAC/C,CAAE1B,KAAM,eAAgBf,MAAO,gBAC/B,CAAEe,KAAM,mBAAoBf,MAAO,mBAAoB4L,QAAQ,GAC/D,CAAE7K,KAAM,wBAAyBf,MAAO,yBACxC,CAAEe,KAAM,KAAMf,MAAO,QACrB,CAAEe,KAAM,KAAMf,MAAO,SACrB,CAAEe,KAAM,KAAMf,MAAO,SACrB,CAAEe,KAAM,MAAOf,MAAO,SACtB,CAAEe,KAAM,MAAOf,MAAO,UACtB,CAAEe,KAAM,KAAMf,MAAO,UACrB,CAAEe,KAAM,KAAMf,MAAO,UACrB,CAAEe,KAAM,KAAMf,MAAO,WACrB,CAAEe,KAAM,KAAMf,MAAO,WACrB,CAAEe,KAAM,KAAMf,MAAO,YACrB,CAAEe,KAAM,KAAMf,MAAO,aAGViH,EAAgC,CAC3C,CAAElG,KAAM,OAAQf,MAAO,QACvB,CAAEe,KAAM,KAAMf,MAAO,MACrB,CAAEe,KAAM,KAAMf,MAAO,MACrB,CAAEe,KAAM,KAAMf,MAAO,MACrB,CAAEe,KAAM,MAAOf,MAAO,OACtB,CAAEe,KAAM,MAAOf,MAAO,OACtB,CAAEe,KAAM,KAAMf,MAAO,MACrB,CAAEe,KAAM,KAAMf,MAAO,MACrB,CAAEe,KAAM,KAAMf,MAAO,MACrB,CAAEe,KAAM,KAAMf,MAAO,MACrB,CAAEe,KAAM,KAAMf,MAAO,MACrB,CAAEe,KAAM,KAAMf,MAAO,OAKV+N,EAAmC,CAC9C,CAAEhN,KAAM,KAAMf,MAAO,MACrB,CAAEe,KAAM,KAAMf,MAAO,MACrB,CAAEe,KAAM,KAAMf,MAAO,MACrB,CAAEe,KAAM,MAAOf,MAAO,OACtB,CAAEe,KAAM,MAAOf,MAAO,OACtB,CAAEe,KAAM,KAAMf,MAAO,MACrB,CAAEe,KAAM,KAAMf,MAAO,MACrB,CAAEe,KAAM,KAAMf,MAAO,MACrB,CAAEe,KAAM,MAAOf,MAAO,OACtB,CAAEe,KAAM,MAAOf,MAAO,QAGXqD,EAAgB,CAC3B,uCACA,8BACA,gCACA,+BACA,wCACA,mCACA,sCACA,mDACA,mDACA,0CAGW+L,EAA8B,uBAE9BP,EAAY,CACvB,CAAEhP,MAAO,YAAaG,MAAO,qBAC7B,CAAEH,MAAO,iBAAkBG,MAAO,yBAClC,CAAEH,MAAO,6BAA8BG,MAAO,8BAC9C,CAAEH,MAAO,gBAAiBG,MAAOoP,IAGtBzC,EAAc,CACzB,CAAE9M,MAAO,UAAWG,MAAO8M,EAAAA,GAAAA,SAC3B,CAAEjN,MAAO,iCAAkCG,MAAO8M,EAAAA,GAAAA,iMCtT7C,MAAMiD,EAAwC/G,IACnDqC,EAAAA,EAAAA,QAAOrC,EAAmB,WAEfgH,EAA0B,CAAChH,EAAuCO,IAC7EP,EAAkB4B,QAAQC,GAAwBA,EAAEtB,UAAYA,IAErDgB,EAAiB,CAC5BvB,EACAvB,EACAwI,EACAC,KAEA,MAAMC,EAAcH,EAAwBhH,EAAmBkH,GAAiBrP,KAAKgK,IAAD,CAClF7K,MAAO6K,EAAElF,KACTM,KAAM4E,EAAEC,gBAEJsF,EAAyBD,EAAY/L,MACxCyG,GAAuCA,EAAE7K,QAAUiQ,IAEhDI,EAAsBF,EAAYjF,OAASiF,EAAY,GAAGnQ,MAAQ,GAExE,MAAO,CACLmQ,YAAAA,EACAG,mBAHyBF,EAAyB3I,EAAa4I,IAOtDE,EAA8B,CACzCC,EACA9P,EACAmC,KAEIA,GAAgBA,IAAiBgF,EAAAA,GAAAA,OACnCnH,EAAagH,EAAAA,GAAAA,OAGP8I,EAEJb,EAAAA,GAAAA,QAAmBc,IAE0C,IAAzDA,EAAEb,WAAWc,QAAQF,KACgC,IAArDC,EAAEZ,YAAYa,QAAQhQ,KAJ1B,IASOE,EAAgC,CAACH,EAAuBC,IAC3DA,EAEJoP,EAAAA,GAAAA,QAAqBW,IACyB,IAArCA,EAAEb,WAAWc,QAAQjQ,KAA4D,IAAvCgQ,EAAEZ,YAAYa,QAAQhQ,KAFzE,GAMOiQ,EAAerG,MAC1BtI,EACAsO,EACA/I,KAEA,MACMtE,QAAejB,EAAWmG,UAAUmI,EAD5B,uBACuD/I,GACrE,MAAO,IAAIvD,OAAOC,KAAKhB,MAAYI,EAAAA,KAGxBN,EAAyB,WAKjC,IAJHtC,EAIG,uDAJ6BgI,EAAAA,GAAAA,OAChC/H,EAGG,uDAH8BgH,EAAAA,GAAAA,MACjC/E,EAEG,uDAFoCgF,EAAAA,GAAAA,WACvC9E,EACG,uCACH,MAAMqH,GAA2B0G,EAAAA,EAAAA,KAC3B9N,EAAeyN,EAA4B9P,EAAYC,EAAamC,GAAehC,KAAKgQ,GAAD,iBACxFA,EADwF,CAE3FhR,MAAOgR,EAAO9P,SAKhB,OAHK+B,EAAasB,MAAMd,GAAyBA,EAAEtD,QAAUkK,EAAYG,QAAQ1H,OAC/EA,EAAmBG,EAAaoI,OAAS,EAAIpI,EAAa,GAAG9C,MAAQ2H,EAAAA,GAAAA,YAEhE,CAAE7E,aAAAA,EAAcH,iBAAAA,IAGZS,EAA0BF,IACrC,MAAM4N,EAAS5N,EAAS6N,QAAO,CAACC,EAAUC,KACxC,MAAMC,EAAMD,EAAKE,MAAM,KAAKtQ,IAAIsK,EAAAA,WAC1BiG,GAAwB,IAAfF,EAAIhG,OAAegG,GAAMG,EAAAA,EAAAA,SAAQH,IAAMI,KAAK,KACrDT,EAAS,CACb7Q,MAAOiR,EACPpR,MAAOoR,GAOT,OALID,EAAII,GACNJ,EAAII,GAAS,IAAIJ,EAAII,GAAQP,GAE7BG,EAAII,GAAS,CAACP,GAETG,IACN,IACH,OAAOhN,OAAOuN,QAAQT,GAAQjQ,KAAI,QAAEhB,EAAOI,GAAT,QAAuB,CAAEJ,MAAAA,EAAOI,QAAAA,EAASE,UAAU,KAAS,KAGnF4D,EAAwBF,IACnC2N,EAAAA,EAAAA,OAAM3N,EAAa,GAAGhD,KAAI,QAAEsD,EAAKc,EAAUjF,EAAOkF,EAAY,OAApC,QAAgD,CACxEf,IAAAA,EACAc,SAAAA,EACAjF,MAAAA,EACAkF,UAAAA,MAGShD,EAAuB,CAACH,EAAgCC,KAA0C,MAC7G,MAAM,iBAAEW,EAAF,gBAAoBL,GAAoBP,EAC9C,IAAKO,IAAoBK,EACvB,MAAO,GAGT,MAAM8O,EAAY9B,EAAAA,GAAAA,MAAiBjE,GAAOA,EAAG1L,QAAUgC,EAAWkI,YAAYG,QAAQ1H,KAChF+O,EAAUC,SAASrP,EAAiB,IAE1C,MAAQ,GADIsP,EAAAA,aAAuBF,gBAC5B,UAAoBD,MAAAA,OAApB,EAAoBA,EAAW1Q,YAA/B,QAAuC,4HCzHX2O,EAAAA,eAAAA,IACYA,EAAAA,eAAAA,IAG1C,IAAKmC,EAgDA/E,EAKAxF,EAKAO,EAMAH,EAOAe,EAUAd,YAjFAkK,GAAAA,EAAAA,SAAAA,WAAAA,EAAAA,SAAAA,WAAAA,EAAAA,eAAAA,iBAAAA,EAAAA,YAAAA,cAAAA,EAAAA,UAAAA,YAAAA,EAAAA,YAAAA,cAAAA,EAAAA,cAAAA,gBAAAA,EAAAA,aAAAA,eAAAA,EAAAA,SAAAA,WAAAA,EAAAA,iBAAAA,mBAAAA,EAAAA,UAAAA,YAAAA,EAAAA,YAAAA,cAAAA,EAAAA,IAAAA,OAAAA,IAAAA,EAAAA,cAgDA/E,GAAAA,EAAAA,QAAAA,UAAAA,EAAAA,IAAAA,OAAAA,IAAAA,EAAAA,cAKAxF,GAAAA,EAAAA,OAAAA,SAAAA,EAAAA,IAAAA,OAAAA,IAAAA,EAAAA,cAKAO,GAAAA,EAAAA,KAAAA,OAAAA,EAAAA,KAAAA,OAAAA,EAAAA,MAAAA,SAAAA,IAAAA,EAAAA,cAMAH,GAAAA,EAAAA,wBAAAA,0BAAAA,EAAAA,MAAAA,QAAAA,EAAAA,MAAAA,QAAAA,EAAAA,WAAAA,cAAAA,IAAAA,EAAAA,cAOAe,GAAAA,EAAAA,uBAAAA,yBAAAA,EAAAA,KAAAA,OAAAA,EAAAA,MAAAA,QAAAA,EAAAA,OAAAA,SAAAA,EAAAA,OAAAA,SAAAA,EAAAA,aAAAA,eAAAA,EAAAA,MAAAA,SAAAA,IAAAA,EAAAA,cAUAd,GAAAA,EAAAA,YAAAA,cAAAA,EAAAA,WAAAA,aAAAA,EAAAA,kBAAAA,oBAAAA,EAAAA,iBAAAA,mBAAAA,EAAAA,UAAAA,YAAAA,EAAAA,UAAAA,YAAAA,EAAAA,WAAAA,aAAAA,EAAAA,YAAAA,cAAAA,EAAAA,UAAAA,YAAAA,EAAAA,aAAAA,eAAAA,EAAAA,iBAAAA,mBAAAA,EAAAA,kBAAAA,oBAAAA,EAAAA,oBAAAA,sBAAAA,EAAAA,oBAAAA,sBAAAA,EAAAA,oBAAAA,sBAAAA,EAAAA,oBAAAA,sBAAAA,EAAAA,oBAAAA,sBAAAA,EAAAA,qBAAAA,uBAAAA,EAAAA,WAAAA,cAAAA,IAAAA,EAAAA,sBCzF2C,IAAIlG,EAAE,EAAQ,OAAiBqQ,EAAE,EAAQ,OAAehR,EAAE,EAAQ,OAASiR,EAAE,EAAQ,OAAkF,IAAIzO,EAA5E,SAAW7B,GAAG,OAAOA,GAAG,iBAAiBA,GAAG,YAAYA,EAAEA,EAAE,CAACuQ,QAAQvQ,GAASwQ,CAAEnR,GAAGoR,EAAE,WAAW,OAAOA,EAAElO,OAAOmO,QAAQ,SAAS1Q,GAAG,IAAI,IAAIqQ,EAAEhR,EAAE,EAAEiR,EAAEK,UAAUlH,OAAOpK,EAAEiR,EAAEjR,IAAI,IAAI,IAAImR,KAAKH,EAAEM,UAAUtR,GAAGkD,OAAOqO,UAAU5N,eAAe6N,KAAKR,EAAEG,KAAKxQ,EAAEwQ,GAAGH,EAAEG,IAAI,OAAOxQ,GAAGyQ,EAAEK,MAAMpF,KAAKiF,YAc7V,SAAS3B,EAAEhP,EAAEqQ,GAAG,IAAIhR,EAAE,mBAAmB0R,QAAQ/Q,EAAE+Q,OAAOC,UAAU,IAAI3R,EAAE,OAAOW,EAAE,IAAIsQ,EAAEE,EAAE3O,EAAExC,EAAEwR,KAAK7Q,GAAGyQ,EAAE,GAAG,IAAI,WAAM,IAASJ,GAAGA,KAAK,MAAMC,EAAEzO,EAAEoP,QAAQC,MAAMT,EAAE3N,KAAKwN,EAAE/R,OAAO,MAAMyB,GAAGwQ,EAAE,CAACW,MAAMnR,GAAG,QAAQ,IAAIsQ,IAAIA,EAAEY,OAAO7R,EAAEwC,EAAEuP,SAAS/R,EAAEwR,KAAKhP,GAAG,QAAQ,GAAG2O,EAAE,MAAMA,EAAEW,OAAO,OAAOV,EAAE,IAAIY,EAA0KzN,EAAE,CAAC,cAAc,YAAY,eAAe,cAAc0N,EAAE,SAAStR,GAAG,IAAIsQ,EAAEtQ,EAAE1B,SAASkS,EAAExB,EAAE3P,EAAEQ,WAAW,GAAG4Q,EAAED,EAAE,GAAGa,EAAEb,EAAE,GAAGe,EAAEvC,EAAE3P,EAAEQ,SAAS,MAAM,GAAG2R,EAAED,EAAE,GAAGnI,EAAEmI,EAAE,GAAGE,EAAEpB,EAAEpI,YAAYyJ,EAAErS,EAAEwH,aAAY,SAAU7G,GAAGqR,EAAE,MAAMjI,GAAE,KAAM,CAACA,IAAIxF,EAAEvE,EAAEwH,aAAY,SAAU7G,GAAGoJ,EAAE,MAAMiI,EAAE,QAAQ,CAACjI,IAAIkI,EAAEjS,EAAEwH,aAAY,SAAU7G,GAAG,GAAG,KAAKA,EAAE2R,OAAO,CAAC,IAAItB,OAAE,EAAO,IAAIA,EAAEuB,KAAKC,MAAM7R,GAAG,MAAMA,GAAGqR,EAAE,qBAAqB,IAAIhS,EAAEyS,EAAEzB,GAAGhR,EAAE0S,QAAQzB,EAAE,CAAC0B,WAAW3B,EAAE4B,YAAYC,SAAS7B,EAAE8B,UAAUC,YAAY/B,EAAEgC,aAAaC,UAAUjC,EAAEkC,aAAalB,EAAEhS,EAAE8R,UAAU,CAACE,EAAEf,IAAI,OAAOzO,EAAE0O,QAAQiC,cAAc3Q,EAAE0O,QAAQkC,SAAS,KAAK5Q,EAAE0O,QAAQiC,cAAcnC,EAAEqC,MAAM,CAACtU,MAAM,YAAYuU,QAAQC,QAAQnC,GAAGlH,YAAYiI,EAAE,wBAAwB,mCAAmCL,MAAMV,GAAG5O,EAAE0O,QAAQiC,cAAc3Q,EAAE0O,QAAQkC,SAAS,MAAK,IAAKjB,GAAG3P,EAAE0O,QAAQiC,cAAc,MAAM,CAAC,cAAv8B,2BAAw9B3Q,EAAE0O,QAAQiC,cAAcnC,EAAEwC,aAAa,CAACrU,QAAQ,CAACsU,UAAS,EAAGC,OAAO,oBAAoBC,OAAO,aAAaC,OAAO,SAASjT,GAAGsR,EAAEtR,GAAGoJ,GAAE,KAAMvH,EAAE0O,QAAQiC,cAAc,IAAI,CAACU,MAAM,CAACC,OAAO,EAAEC,SAAS,GAAG3B,EAAE4B,WAAWC,GAAGF,SAASG,UAAU,WAAW,gCAAgC1R,EAAE0O,QAAQiC,cAAc,KAAK,MAAM3Q,EAAE0O,QAAQiC,cAAc,KAAK,MAAM3Q,EAAE0O,QAAQiC,cAAcnC,EAAEmD,WAAW,CAACC,KAAK,WAAW,4BAA4BjC,GAAG3P,EAAE0O,QAAQiC,cAAcnC,EAAEqD,SAAS,CAAC,cAA94C,0BAA85CC,WAAU,EAAGhB,QAAQC,QAAQnC,GAAG9R,YAAY,8BAA8BgG,OAAO,SAAS3E,GAAG,OAAOsR,EAAEtR,EAAE4E,cAAcrG,QAAQmG,KAAK,QAAQ8M,GAAG3P,EAAE0O,QAAQiC,cAAcnC,EAAEqC,MAAM,KAAK7Q,EAAE0O,QAAQiC,cAAcnC,EAAEuD,OAAO,CAAC,cAAvlD,mBAAumD1P,KAAK,SAASuP,KAAK,UAAUP,MAAM,CAACW,MAAM,GAAGpC,EAAE3H,OAAOgK,QAAQxU,MAAM2E,QAAQyN,GAAG,oBAAoBF,GAAGf,GAAG5O,EAAE0O,QAAQiC,cAAcnC,EAAEqC,MAAM,KAAK7Q,EAAE0O,QAAQiC,cAAcnC,EAAEuD,OAAO,CAAC1P,KAAK,SAASuP,KAAK,UAAUP,MAAM,CAACW,MAAM,GAAGpC,EAAE3H,OAAOgK,QAAQxU,MAAM2E,QAAQL,GAAG,uBAAuBkO,EAAE,SAAS9R,GAAG,IAAIsQ,EAAEyD,SAAS/T,GAAG,MAAM,CAAC+R,SAAQ,EAAGZ,MAAM,qBAAqB,IAAId,EAAEzM,EAAEuF,QAAO,SAAUkH,GAAG,OAAOrQ,EAAEqQ,MAAM,OAAOA,EAAE5G,OAAO,EAAE,CAACsI,SAAQ,EAAGZ,MAAM,iBAAiBd,EAAER,KAAK,OAAO,CAACkC,SAAQ,IAAKiC,EAAE,SAAShU,GAAG,IAAIX,EAAEW,EAAExB,QAAQ8R,EAAEtQ,EAAEiU,QAAQzD,EAAExQ,EAAE1B,SAAS,OAAOuD,EAAE0O,QAAQiC,cAAc,MAAM,CAAC,cAAznE,YAA0oE3Q,EAAE0O,QAAQiC,cAAcnC,EAAEqC,MAAM,CAACtU,MAAM,cAAcyD,EAAE0O,QAAQiC,cAAcnC,EAAE6D,MAAM,CAAC/T,GAAG,iBAAiB9B,MAAM,GAAGE,MAAMc,EAAE8U,gBAAgB,GAAG7V,SAASkS,EAAE,qBAAqB3O,EAAE0O,QAAQiC,cAAcnC,EAAEqC,MAAM,CAACtU,MAAM,gBAAgByD,EAAE0O,QAAQiC,cAAcnC,EAAE6D,MAAM,CAAC7V,MAAM,GAAG8B,GAAG,cAAc5B,MAAMc,EAAE+S,aAAa,GAAG9T,SAASkS,EAAE,kBAAkB3O,EAAE0O,QAAQiC,cAAcnC,EAAEqC,MAAM,CAACtU,MAAM,aAAayD,EAAE0O,QAAQiC,cAAcnC,EAAE6D,MAAM,CAAC7V,MAAM,GAAG8B,GAAG,WAAW5B,MAAMc,EAAE6S,UAAU,GAAG5T,SAASkS,EAAE,eAAe3O,EAAE0O,QAAQiC,cAAcnC,EAAEqC,MAAM,CAACtU,MAAM,cAAcmH,UAAS,GAAI1D,EAAE0O,QAAQiC,cAAcnC,EAAE6D,MAAM,CAAC7V,MAAM,GAAG8B,GAAG,aAAaiU,UAAS,EAAGzV,YAAY,yBAAyB0V,WAAWxS,EAAE0O,QAAQiC,cAAcnC,EAAEiE,QAAQ,CAACC,QAAQ,8DAA8D1S,EAAE0O,QAAQiC,cAAcnC,EAAEuD,OAAO,CAAC,cAAl9F,mBAAk+F7P,KAAK,OAAOwH,KAAK,KAAKtH,QAAQ,WAAW,OAAOqM,EAAE,OAAOmD,KAAK,WAAW,qBAAqBe,EAAQvG,oBAAe,GAAQoD,EAAEmD,EAAQvG,iBAAiBuG,EAAQvG,eAAe,KAAKwG,IAAI,MAAMpD,EAAEqD,IAAI,MAAM,IAAIC,EAAE,CAAC,CAACvW,MAAM,kBAAkBG,MAAMiW,EAAQvG,eAAewG,IAAIG,UAA3sG,cAAwtG,CAACxW,MAAM,8BAA8BG,MAAMiW,EAAQvG,eAAeyG,IAAIE,UAA/wG,eAA6xGJ,EAAQK,iBAAiB,SAASxV,GAAG,IAAIiR,EAAEjR,EAAEb,QAAQgS,EAAEnR,EAAEyV,gBAAgB9F,EAAEsB,EAAEyE,SAAS1D,EAAEf,EAAE0E,iBAAiBC,EAAE3E,EAAE4E,eAAelG,EAAEmG,qBAAqBnG,EAAEmG,mBAAmBX,EAAQvG,eAAewG,KAAK,IAAIW,EAAEpG,EAAEmG,qBAAqBX,EAAQvG,eAAewG,UAAK,IAASzF,EAAEmG,mBAAmB3V,EAAEoT,QAAQvB,GAAGA,EAAEW,YAAYhD,EAAEoD,aAAapD,EAAEmF,gBAAgBnF,EAAEkD,UAAU,OAAOrQ,EAAE0O,QAAQiC,cAAc3Q,EAAE0O,QAAQkC,SAAS,KAAK5Q,EAAE0O,QAAQiC,cAAcnC,EAAEgF,SAAS,CAACjX,MAAM,kBAAkByD,EAAE0O,QAAQiC,cAAcnC,EAAEqC,MAAM,CAACtU,MAAM,uBAAuByD,EAAE0O,QAAQiC,cAAcnC,EAAE/E,iBAAiB,CAAC9M,QAAQmW,EAAEpW,MAAMyQ,EAAEmG,oBAAoBX,EAAQvG,eAAewG,IAAInW,SAAS,SAAS0B,GAAGwQ,EAAEC,EAAEA,EAAE,GAAGH,GAAG,CAACyE,SAAStE,EAAEA,EAAE,GAAGH,EAAEyE,UAAU,CAACI,mBAAmBnV,YAAYoV,GAAGvT,EAAE0O,QAAQiC,cAAcnC,EAAEgF,SAAS,CAACjX,MAAM,mBAAmBoB,EAAEqC,EAAE0O,QAAQiC,cAAcwB,EAAE,CAACxV,QAAQ8R,EAAEyE,SAASd,QAAQ,SAASjU,GAAG,IAAIqQ,EAAEI,EAAE,GAAGwE,GAAG5V,EAAEW,EAAEyQ,EAAEA,EAAE,GAAGH,EAAEyE,UAAU/U,GAAGyQ,EAAE,GAAGH,EAAEyE,iBAAiB1V,EAAE+S,mBAAmB/S,EAAE8U,sBAAsB9U,EAAE6S,gBAAgB7B,EAAE2B,WAAWxB,EAAEC,EAAEA,EAAE,GAAGH,GAAG,CAAC4E,eAAe7E,EAAE0E,SAAS1V,MAAMf,SAAS,SAAS+R,GAAG,OAAOrQ,EAAEsV,iCAAiCjW,EAAEgR,MAAMxO,EAAE0O,QAAQiC,cAAclB,EAAE,CAAChT,SAAS,SAAS0B,GAAGwQ,EAAEC,EAAEA,EAAE,GAAGH,GAAG,CAAC0E,iBAAiBvE,EAAEA,EAAE,GAAGY,GAAG,CAACW,YAAW,IAAKkD,eAAezE,EAAEA,EAAE,GAAGwE,GAAG,CAACjD,WAAWhS,EAAEgS,aAAa+C,SAAStE,EAAEA,EAAE,GAAGzB,GAAG,CAACoD,YAAYpS,EAAEoS,YAAY+B,eAAenU,EAAEsS,UAAUJ,SAASlS,EAAEkS,iBAAiB,KAAKrQ,EAAE0O,QAAQiC,cAAc,MAAM,CAAC/N,UAAU,mBAAmByO,MAAM,CAACqC,UAAU,QAAQ,cAAv3J,0BAAw4J1T,EAAE0O,QAAQiC,cAAc,IAAI,KAAK,0FAA0F,IAAI3Q,EAAE0O,QAAQiC,cAAc,IAAI,CAAC/N,UAAU,gBAAgBxE,OAAO,SAASuV,IAAI,sBAAsBC,KAAK,sGAAsG,4BAA4BL,GAAGvT,EAAE0O,QAAQiC,cAAcnC,EAAEqF,MAAM,CAACC,MAAM,GAAGC,SAAS,QAAQ,8FCX5pLC,EAAOrB,QAAU,EAAjB","sources":["webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Aggregation.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/AliasBy.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Alignment.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/AlignmentFunction.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/GroupBy.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/LabelFilter.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/MQLQueryEditor.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/GraphPeriod.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/MetricQueryEditor.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Metrics.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/PeriodSelect.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Preprocessor.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Project.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/QueryHeader.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/QueryEditor.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/LookbackPeriodSelect.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/SLO.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Selector.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Service.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/SLOQueryEditor.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/VisualMetricQueryEditor.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/AnnotationsHelp.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Fields.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/constants.ts","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/functions.ts","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/types.ts","webpack://grafana/./.yarn/cache/@grafana-google-sdk-npm-0.0.3-c91663433f-9eb5e043e0.zip/node_modules/@grafana/google-sdk/dist/index.production.js","webpack://grafana/./.yarn/cache/@grafana-google-sdk-npm-0.0.3-c91663433f-9eb5e043e0.zip/node_modules/@grafana/google-sdk/index.js"],"sourcesContent":["import React, { FC, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { EditorField } from '@grafana/experimental';\nimport { Select } from '@grafana/ui';\n\nimport { getAggregationOptionsByMetric } from '../functions';\nimport { MetricDescriptor, MetricKind, ValueTypes } from '../types';\n\nexport interface Props {\n refId: string;\n onChange: (metricDescriptor: string) => void;\n metricDescriptor?: MetricDescriptor;\n crossSeriesReducer: string;\n groupBys: string[];\n templateVariableOptions: Array>;\n}\n\nexport const Aggregation: FC = (props) => {\n const aggOptions = useAggregationOptionsByMetric(props);\n const selected = useSelectedFromOptions(aggOptions, props);\n\n return (\n \n props.onChange(value!)}\n value={selected}\n options={[\n {\n label: 'Template Variables',\n options: props.templateVariableOptions,\n },\n {\n label: 'Aggregations',\n expanded: true,\n options: aggOptions,\n },\n ]}\n placeholder=\"Select Reducer\"\n inputId={`${props.refId}-group-by-function`}\n menuPlacement=\"top\"\n />\n \n );\n};\n\nconst useAggregationOptionsByMetric = ({ metricDescriptor }: Props): Array> => {\n const valueType = metricDescriptor?.valueType;\n const metricKind = metricDescriptor?.metricKind;\n\n return useMemo(() => {\n if (!valueType || !metricKind) {\n return [];\n }\n\n return getAggregationOptionsByMetric(valueType as ValueTypes, metricKind as MetricKind).map((a) => ({\n ...a,\n label: a.text,\n }));\n }, [valueType, metricKind]);\n};\n\nconst useSelectedFromOptions = (aggOptions: Array>, props: Props) => {\n return useMemo(() => {\n const allOptions = [...aggOptions, ...props.templateVariableOptions];\n return allOptions.find((s) => s.value === props.crossSeriesReducer);\n }, [aggOptions, props.crossSeriesReducer, props.templateVariableOptions]);\n};\n","import { debounce } from 'lodash';\nimport React, { FunctionComponent, useState } from 'react';\n\nimport { EditorField } from '@grafana/experimental';\nimport { Input } from '@grafana/ui';\n\nexport interface Props {\n refId: string;\n onChange: (alias: any) => void;\n value?: string;\n}\n\nexport const AliasBy: FunctionComponent = ({ refId, value = '', onChange }) => {\n const [alias, setAlias] = useState(value ?? '');\n\n const propagateOnChange = debounce(onChange, 1000);\n\n onChange = (e: any) => {\n setAlias(e.target.value);\n propagateOnChange(e.target.value);\n };\n\n return (\n \n \n \n );\n};\n","import React, { FC, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { EditorField, EditorFieldGroup } from '@grafana/experimental';\n\nimport { ALIGNMENT_PERIODS } from '../constants';\nimport CloudMonitoringDatasource from '../datasource';\nimport { alignmentPeriodLabel } from '../functions';\nimport { CustomMetaData, MetricQuery, SLOQuery } from '../types';\n\nimport { AlignmentFunction } from './AlignmentFunction';\nimport { PeriodSelect } from './PeriodSelect';\n\nexport interface Props {\n refId: string;\n onChange: (query: MetricQuery | SLOQuery) => void;\n query: MetricQuery;\n templateVariableOptions: Array>;\n customMetaData: CustomMetaData;\n datasource: CloudMonitoringDatasource;\n}\n\nexport const Alignment: FC = ({\n refId,\n templateVariableOptions,\n onChange,\n query,\n customMetaData,\n datasource,\n}) => {\n const alignmentLabel = useMemo(() => alignmentPeriodLabel(customMetaData, datasource), [customMetaData, datasource]);\n return (\n \n \n \n \n \n onChange({ ...query, alignmentPeriod: period })}\n aligmentPeriods={ALIGNMENT_PERIODS}\n />\n \n \n );\n};\n","import React, { FC, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Select } from '@grafana/ui';\n\nimport { getAlignmentPickerData } from '../functions';\nimport { MetricQuery } from '../types';\n\nexport interface Props {\n inputId: string;\n onChange: (query: MetricQuery) => void;\n query: MetricQuery;\n templateVariableOptions: Array>;\n}\n\nexport const AlignmentFunction: FC = ({ inputId, query, templateVariableOptions, onChange }) => {\n const { valueType, metricKind, perSeriesAligner: psa, preprocessor } = query;\n const { perSeriesAligner, alignOptions } = useMemo(\n () => getAlignmentPickerData(valueType, metricKind, psa, preprocessor),\n [valueType, metricKind, psa, preprocessor]\n );\n\n return (\n onChange({ ...query, perSeriesAligner: value! })}\n value={[...alignOptions, ...templateVariableOptions].find((s) => s.value === perSeriesAligner)}\n options={[\n {\n label: 'Template Variables',\n options: templateVariableOptions,\n },\n {\n label: 'Alignment options',\n expanded: true,\n options: alignOptions,\n },\n ]}\n placeholder=\"Select Alignment\"\n inputId={inputId}\n menuPlacement=\"top\"\n />\n );\n};\n","import React, { FunctionComponent, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { EditorField, EditorFieldGroup } from '@grafana/experimental';\nimport { MultiSelect } from '@grafana/ui';\n\nimport { SYSTEM_LABELS } from '../constants';\nimport { labelsToGroupedOptions } from '../functions';\nimport { MetricDescriptor, MetricQuery } from '../types';\n\nimport { Aggregation } from './Aggregation';\n\nexport interface Props {\n refId: string;\n variableOptionGroup: SelectableValue;\n labels: string[];\n metricDescriptor?: MetricDescriptor;\n onChange: (query: MetricQuery) => void;\n query: MetricQuery;\n}\n\nexport const GroupBy: FunctionComponent = ({\n refId,\n labels: groupBys = [],\n query,\n onChange,\n variableOptionGroup,\n metricDescriptor,\n}) => {\n const options = useMemo(\n () => [variableOptionGroup, ...labelsToGroupedOptions([...groupBys, ...SYSTEM_LABELS])],\n [groupBys, variableOptionGroup]\n );\n\n return (\n \n \n {\n onChange({ ...query, groupBys: options.map((o) => o.value!) });\n }}\n menuPlacement=\"top\"\n />\n \n onChange({ ...query, crossSeriesReducer })}\n refId={refId}\n />\n \n );\n};\n","import React, { FunctionComponent, useMemo } from 'react';\n\nimport { SelectableValue, toOption } from '@grafana/data';\nimport { AccessoryButton, EditorField, EditorList, EditorRow } from '@grafana/experimental';\nimport { HorizontalGroup, Select } from '@grafana/ui';\n\nimport { labelsToGroupedOptions, stringArrayToFilters } from '../functions';\n\nexport interface Props {\n labels: { [key: string]: string[] };\n filters: string[];\n onChange: (filters: string[]) => void;\n variableOptionGroup: SelectableValue;\n}\n\ninterface Filter {\n key: string;\n operator: string;\n value: string;\n condition: string;\n}\n\nconst DEFAULT_OPERATOR = '=';\nconst DEFAULT_CONDITION = 'AND';\n\nconst filtersToStringArray = (filters: Filter[]) =>\n filters.flatMap(({ key, operator, value, condition }) => [key, operator, value, condition]).slice(0, -1);\n\nconst operators = ['=', '!=', '=~', '!=~'].map(toOption);\n\nexport const LabelFilter: FunctionComponent = ({\n labels = {},\n filters: filterArray,\n onChange: _onChange,\n variableOptionGroup,\n}) => {\n const filters: Filter[] = useMemo(() => stringArrayToFilters(filterArray), [filterArray]);\n const options = useMemo(\n () => [variableOptionGroup, ...labelsToGroupedOptions(Object.keys(labels))],\n [labels, variableOptionGroup]\n );\n\n const getOptions = ({ key = '', value = '' }: Partial) => {\n // Add the current key and value as options if they are manually entered\n const keyPresent = options.some((op) => {\n if (op.options) {\n return options.some((opp) => opp.label === key);\n }\n return op.label === key;\n });\n if (!keyPresent) {\n options.push({ label: key, value: key });\n }\n\n const valueOptions = labels.hasOwnProperty(key)\n ? [variableOptionGroup, ...labels[key].map(toOption)]\n : [variableOptionGroup];\n const valuePresent = valueOptions.some((op) => op.label === value);\n if (!valuePresent) {\n valueOptions.push({ label: value, value });\n }\n\n return { options, valueOptions };\n };\n\n const onChange = (items: Array>) => {\n const filters = items.map(({ key, operator, value, condition }) => ({\n key: key || '',\n operator: operator || DEFAULT_OPERATOR,\n value: value || '',\n condition: condition || DEFAULT_CONDITION,\n }));\n _onChange(filtersToStringArray(filters));\n };\n\n const renderItem = (item: Partial, onChangeItem: (item: Filter) => void, onDeleteItem: () => void) => {\n const { key = '', operator = DEFAULT_OPERATOR, value = '', condition = DEFAULT_CONDITION } = item;\n const { options, valueOptions } = getOptions(item);\n\n return (\n \n `Use label key: ${v}`}\n allowCustomValue\n value={key}\n options={options}\n onChange={({ value: key = '' }) => onChangeItem({ key, operator, value, condition })}\n />\n onChangeItem({ key, operator, value, condition })}\n />\n `Use label value: ${v}`}\n allowCustomValue\n value={value}\n options={valueOptions}\n onChange={({ value = '' }) => onChangeItem({ key, operator, value, condition })}\n />\n \n \n );\n };\n\n return (\n \n \n \n \n \n );\n};\n","import React from 'react';\n\nimport { TextArea } from '@grafana/ui';\n\nexport interface Props {\n onChange: (query: string) => void;\n onRunQuery: () => void;\n query: string;\n}\n\nexport function MQLQueryEditor({ query, onChange, onRunQuery }: React.PropsWithChildren) {\n const onKeyDown = (event: any) => {\n if (event.key === 'Enter' && (event.shiftKey || event.ctrlKey)) {\n event.preventDefault();\n onRunQuery();\n }\n };\n\n return (\n <>\n onChange(e.currentTarget.value)}\n onKeyDown={onKeyDown}\n />\n \n );\n}\n","import React, { FunctionComponent } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { EditorField, EditorRow } from '@grafana/experimental';\nimport { HorizontalGroup, Switch } from '@grafana/ui';\n\nimport { GRAPH_PERIODS } from '../constants';\n\nimport { PeriodSelect } from './index';\n\nexport interface Props {\n refId: string;\n onChange: (period: string) => void;\n variableOptionGroup: SelectableValue;\n graphPeriod?: string;\n}\n\nexport const GraphPeriod: FunctionComponent = ({ refId, onChange, graphPeriod, variableOptionGroup }) => {\n return (\n \n \n Set graph_period which forces a preferred period between points. Automatically set to the\n current interval if left blank.\n \n }\n >\n \n onChange(e.currentTarget.checked ? '' : 'disabled')}\n />\n \n \n \n \n );\n};\n","import React, { useCallback, useEffect, useState } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { EditorRows } from '@grafana/experimental';\n\nimport CloudMonitoringDatasource from '../datasource';\nimport { getAlignmentPickerData } from '../functions';\nimport {\n AlignmentTypes,\n CustomMetaData,\n EditorMode,\n MetricDescriptor,\n MetricKind,\n MetricQuery,\n PreprocessorType,\n SLOQuery,\n ValueTypes,\n} from '../types';\n\nimport { GraphPeriod } from './GraphPeriod';\nimport { MQLQueryEditor } from './MQLQueryEditor';\nimport { VisualMetricQueryEditor } from './VisualMetricQueryEditor';\n\nexport interface Props {\n refId: string;\n customMetaData: CustomMetaData;\n variableOptionGroup: SelectableValue;\n onChange: (query: MetricQuery) => void;\n onRunQuery: () => void;\n query: MetricQuery;\n datasource: CloudMonitoringDatasource;\n}\n\ninterface State {\n labels: any;\n [key: string]: any;\n}\n\nexport const defaultState: State = {\n labels: {},\n};\n\nexport const defaultQuery: (dataSource: CloudMonitoringDatasource) => MetricQuery = (dataSource) => ({\n editorMode: EditorMode.Visual,\n projectName: dataSource.getDefaultProject(),\n metricType: '',\n metricKind: MetricKind.GAUGE,\n valueType: '',\n crossSeriesReducer: 'REDUCE_NONE',\n alignmentPeriod: 'cloud-monitoring-auto',\n perSeriesAligner: AlignmentTypes.ALIGN_MEAN,\n groupBys: [],\n filters: [],\n aliasBy: '',\n query: '',\n preprocessor: PreprocessorType.None,\n});\n\nfunction Editor({\n refId,\n query,\n datasource,\n onChange: onQueryChange,\n onRunQuery,\n customMetaData,\n variableOptionGroup,\n}: React.PropsWithChildren) {\n const [state, setState] = useState(defaultState);\n const { projectName, metricType, groupBys, editorMode, crossSeriesReducer } = query;\n\n useEffect(() => {\n if (projectName && metricType) {\n datasource\n .getLabels(metricType, refId, projectName)\n .then((labels) => setState((prevState) => ({ ...prevState, labels })));\n }\n }, [datasource, groupBys, metricType, projectName, refId, crossSeriesReducer]);\n\n const onChange = useCallback(\n (metricQuery: MetricQuery | SLOQuery) => {\n onQueryChange({ ...query, ...metricQuery });\n onRunQuery();\n },\n [onQueryChange, onRunQuery, query]\n );\n\n const onMetricTypeChange = useCallback(\n ({ valueType, metricKind, type }: MetricDescriptor) => {\n const preprocessor =\n metricKind === MetricKind.GAUGE || valueType === ValueTypes.DISTRIBUTION\n ? PreprocessorType.None\n : PreprocessorType.Rate;\n const { perSeriesAligner } = getAlignmentPickerData(valueType, metricKind, state.perSeriesAligner, preprocessor);\n onChange({\n ...query,\n perSeriesAligner,\n metricType: type,\n valueType,\n metricKind,\n preprocessor,\n });\n },\n [onChange, query, state]\n );\n\n return (\n \n {editorMode === EditorMode.Visual && (\n \n )}\n\n {editorMode === EditorMode.MQL && (\n <>\n onQueryChange({ ...query, query: q })}\n onRunQuery={onRunQuery}\n query={query.query}\n >\n onQueryChange({ ...query, graphPeriod })}\n graphPeriod={query.graphPeriod}\n refId={refId}\n variableOptionGroup={variableOptionGroup}\n />\n \n )}\n \n );\n}\n\nexport const MetricQueryEditor = React.memo(Editor);\n","import { css } from '@emotion/css';\nimport { startCase, uniqBy } from 'lodash';\nimport React, { useCallback, useEffect, useState } from 'react';\n\nimport { GrafanaTheme2, SelectableValue } from '@grafana/data';\nimport { EditorField, EditorFieldGroup, EditorRow } from '@grafana/experimental';\nimport { getSelectStyles, Select, useStyles2, useTheme2 } from '@grafana/ui';\n\nimport CloudMonitoringDatasource from '../datasource';\nimport { MetricDescriptor, MetricQuery } from '../types';\n\nimport { Project } from './Project';\n\nexport interface Props {\n refId: string;\n onChange: (metricDescriptor: MetricDescriptor) => void;\n templateVariableOptions: Array>;\n datasource: CloudMonitoringDatasource;\n projectName: string;\n metricType: string;\n query: MetricQuery;\n children: (metricDescriptor?: MetricDescriptor) => JSX.Element;\n onProjectChange: (query: MetricQuery) => void;\n}\n\nexport function Metrics(props: Props) {\n const [metricDescriptors, setMetricDescriptors] = useState([]);\n const [metricDescriptor, setMetricDescriptor] = useState();\n const [metrics, setMetrics] = useState>>([]);\n const [services, setServices] = useState>>([]);\n const [service, setService] = useState('');\n\n const theme = useTheme2();\n const selectStyles = getSelectStyles(theme);\n\n const customStyle = useStyles2(getStyles);\n\n const {\n onProjectChange,\n query,\n refId,\n metricType,\n templateVariableOptions,\n projectName,\n datasource,\n onChange,\n children,\n } = props;\n const { templateSrv } = datasource;\n\n const getSelectedMetricDescriptor = useCallback(\n (metricDescriptors: MetricDescriptor[], metricType: string) => {\n return metricDescriptors.find((md) => md.type === templateSrv.replace(metricType))!;\n },\n [templateSrv]\n );\n\n useEffect(() => {\n const loadMetricDescriptors = async () => {\n if (projectName) {\n const metricDescriptors = await datasource.getMetricTypes(projectName);\n const services = getServicesList(metricDescriptors);\n setMetricDescriptors(metricDescriptors);\n setServices(services);\n }\n };\n loadMetricDescriptors();\n }, [datasource, projectName, customStyle, selectStyles.optionDescription]);\n\n useEffect(() => {\n const getMetricsList = (metricDescriptors: MetricDescriptor[]) => {\n const selectedMetricDescriptor = getSelectedMetricDescriptor(metricDescriptors, metricType);\n if (!selectedMetricDescriptor) {\n return [];\n }\n\n const metricsByService = metricDescriptors\n .filter((m) => m.service === selectedMetricDescriptor.service)\n .map((m) => ({\n service: m.service,\n value: m.type,\n label: m.displayName,\n component: function optionComponent() {\n return (\n
\n
{m.type}
\n
{m.description}
\n
\n );\n },\n }));\n return metricsByService;\n };\n\n const metrics = getMetricsList(metricDescriptors);\n const service = metrics.length > 0 ? metrics[0].service : '';\n const metricDescriptor = getSelectedMetricDescriptor(metricDescriptors, metricType);\n setMetricDescriptor(metricDescriptor);\n setMetrics(metrics);\n setService(service);\n }, [metricDescriptors, getSelectedMetricDescriptor, metricType, customStyle, selectStyles.optionDescription]);\n\n const onServiceChange = ({ value: service }: any) => {\n const metrics = metricDescriptors\n .filter((m: MetricDescriptor) => m.service === templateSrv.replace(service))\n .map((m: MetricDescriptor) => ({\n service: m.service,\n value: m.type,\n label: m.displayName,\n description: m.description,\n }));\n\n if (metrics.length > 0 && !metrics.some((m) => m.value === templateSrv.replace(metricType))) {\n onMetricTypeChange(metrics[0]);\n setService(service);\n setMetrics(metrics);\n } else {\n setService(service);\n setMetrics(metrics);\n }\n };\n\n const onMetricTypeChange = ({ value }: SelectableValue) => {\n const metricDescriptor = getSelectedMetricDescriptor(metricDescriptors, value!);\n setMetricDescriptor(metricDescriptor);\n onChange({ ...metricDescriptor, type: value! });\n };\n\n const getServicesList = (metricDescriptors: MetricDescriptor[]) => {\n const services = metricDescriptors.map((m) => ({\n value: m.service,\n label: startCase(m.serviceShortName),\n }));\n\n return services.length > 0 ? uniqBy(services, (s) => s.value) : [];\n };\n\n return (\n <>\n \n \n {\n onProjectChange({ ...query, projectName });\n }}\n />\n\n \n s.value === service)}\n options={[\n {\n label: 'Template Variables',\n options: templateVariableOptions,\n },\n ...services,\n ]}\n placeholder=\"Select Services\"\n inputId={`${props.refId}-service`}\n />\n \n \n s.value === metricType)}\n options={[\n {\n label: 'Template Variables',\n options: templateVariableOptions,\n },\n ...metrics,\n ]}\n placeholder=\"Select Metric\"\n inputId={`${props.refId}-select-metric`}\n />\n \n \n \n\n {children(metricDescriptor)}\n \n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => css`\n label: grafana-select-option-description;\n font-weight: normal;\n font-style: italic;\n color: ${theme.colors.text.secondary};\n`;\n","import React, { useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Select } from '@grafana/ui';\n\nimport { periodOption } from '../constants';\n\nexport interface Props {\n inputId: string;\n onChange: (period: string) => void;\n templateVariableOptions: Array>;\n aligmentPeriods: periodOption[];\n selectWidth?: number;\n category?: string;\n disabled?: boolean;\n current?: string;\n}\n\nexport function PeriodSelect({\n inputId,\n templateVariableOptions,\n onChange,\n current,\n disabled,\n aligmentPeriods,\n}: Props) {\n const options = useMemo(\n () =>\n aligmentPeriods.map((ap) => ({\n ...ap,\n label: ap.text,\n })),\n [aligmentPeriods]\n );\n const visibleOptions = useMemo(() => options.filter((ap) => !ap.hidden), [options]);\n\n return (\n onChange(value!)}\n value={[...options, ...templateVariableOptions].find((s) => s.value === current)}\n options={[\n {\n label: 'Template Variables',\n options: templateVariableOptions,\n },\n {\n label: 'Aggregations',\n expanded: true,\n options: visibleOptions,\n },\n ]}\n placeholder=\"Select Period\"\n inputId={inputId}\n disabled={disabled}\n allowCustomValue\n menuPlacement=\"top\"\n />\n );\n}\n","import React, { FunctionComponent, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { EditorField } from '@grafana/experimental';\nimport { RadioButtonGroup } from '@grafana/ui';\n\nimport { getAlignmentPickerData } from '../functions';\nimport { MetricDescriptor, MetricKind, MetricQuery, PreprocessorType, ValueTypes } from '../types';\n\nconst NONE_OPTION = { label: 'None', value: PreprocessorType.None };\n\nexport interface Props {\n metricDescriptor?: MetricDescriptor;\n onChange: (query: MetricQuery) => void;\n query: MetricQuery;\n}\n\nexport const Preprocessor: FunctionComponent = ({ query, metricDescriptor, onChange }) => {\n const options = useOptions(metricDescriptor);\n return (\n \n {\n const { valueType, metricKind, perSeriesAligner: psa } = query;\n const { perSeriesAligner } = getAlignmentPickerData(valueType, metricKind, psa, value);\n onChange({ ...query, preprocessor: value, perSeriesAligner });\n }}\n value={query.preprocessor ?? PreprocessorType.None}\n options={options}\n />\n \n );\n};\n\nconst useOptions = (metricDescriptor?: MetricDescriptor): Array> => {\n const metricKind = metricDescriptor?.metricKind;\n const valueType = metricDescriptor?.valueType;\n\n return useMemo(() => {\n if (!metricKind || metricKind === MetricKind.GAUGE || valueType === ValueTypes.DISTRIBUTION) {\n return [NONE_OPTION];\n }\n\n const options = [\n NONE_OPTION,\n {\n label: 'Rate',\n value: PreprocessorType.Rate,\n description: 'Data points are aligned and converted to a rate per time series',\n },\n ];\n\n return metricKind === MetricKind.CUMULATIVE\n ? [\n ...options,\n {\n label: 'Delta',\n value: PreprocessorType.Delta,\n description: 'Data points are aligned by their delta (difference) per time series',\n },\n ]\n : options;\n }, [metricKind, valueType]);\n};\n","import React, { useEffect, useMemo, useState } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { EditorField } from '@grafana/experimental';\nimport { Select } from '@grafana/ui';\n\nimport CloudMonitoringDatasource from '../datasource';\n\nexport interface Props {\n refId: string;\n datasource: CloudMonitoringDatasource;\n onChange: (projectName: string) => void;\n templateVariableOptions: Array>;\n projectName: string;\n}\n\nexport function Project({ refId, projectName, datasource, onChange, templateVariableOptions }: Props) {\n const [projects, setProjects] = useState>>([]);\n useEffect(() => {\n datasource.getProjects().then((projects) => setProjects(projects));\n }, [datasource]);\n\n const projectsWithTemplateVariables = useMemo(\n () => [\n projects,\n {\n label: 'Template Variables',\n options: templateVariableOptions,\n },\n ...projects,\n ],\n [projects, templateVariableOptions]\n );\n\n return (\n \n `Use project: ${v}`}\n onChange={({ value }) => onChange(value!)}\n options={projectsWithTemplateVariables}\n value={{ value: projectName, label: projectName }}\n placeholder=\"Select Project\"\n inputId={`${refId}-project`}\n />\n \n );\n}\n","import React from 'react';\n\nimport { EditorHeader, FlexItem, InlineSelect } from '@grafana/experimental';\nimport { RadioButtonGroup } from '@grafana/ui';\n\nimport { QUERY_TYPES } from '../constants';\nimport { EditorMode, CloudMonitoringQuery, QueryType, SLOQuery, MetricQuery } from '../types';\n\nexport interface QueryEditorHeaderProps {\n query: CloudMonitoringQuery;\n metricQuery: MetricQuery;\n sloQuery: SLOQuery;\n onChange: (value: CloudMonitoringQuery) => void;\n onRunQuery: () => void;\n}\n\nconst EDITOR_MODES = [\n { label: 'Builder', value: EditorMode.Visual },\n { label: 'MQL', value: EditorMode.MQL },\n];\n\nexport const QueryHeader = (props: QueryEditorHeaderProps) => {\n const { query, metricQuery, sloQuery, onChange, onRunQuery } = props;\n const { queryType } = query;\n const { editorMode } = metricQuery;\n\n return (\n \n {\n onChange({ ...query, sloQuery, queryType: value! });\n onRunQuery();\n }}\n />\n \n {queryType !== QueryType.SLO && (\n {\n onChange({\n ...query,\n metricQuery: {\n ...metricQuery,\n editorMode: value,\n },\n });\n }}\n />\n )}\n \n );\n};\n","import React, { PureComponent } from 'react';\n\nimport { QueryEditorProps, toOption } from '@grafana/data';\nimport { EditorRows } from '@grafana/experimental';\n\nimport CloudMonitoringDatasource from '../datasource';\nimport { CloudMonitoringQuery, MetricQuery, QueryType, SLOQuery, CloudMonitoringOptions } from '../types';\n\nimport { defaultQuery } from './MetricQueryEditor';\nimport { QueryHeader } from './QueryHeader';\nimport { defaultQuery as defaultSLOQuery } from './SLOQueryEditor';\n\nimport { MetricQueryEditor, SLOQueryEditor } from './';\n\nexport type Props = QueryEditorProps;\n\nexport class QueryEditor extends PureComponent {\n async UNSAFE_componentWillMount() {\n const { datasource, query } = this.props;\n\n // Unfortunately, migrations like this need to go UNSAFE_componentWillMount. As soon as there's\n // migration hook for this module.ts, we can do the migrations there instead.\n if (!this.props.query.hasOwnProperty('metricQuery')) {\n const { hide, refId, datasource, key, queryType, maxLines, metric, ...metricQuery } = this.props.query as any;\n this.props.query.metricQuery = metricQuery;\n }\n\n if (![QueryType.METRICS, QueryType.SLO].includes(this.props.query.queryType)) {\n this.props.query.queryType = QueryType.METRICS;\n }\n\n await datasource.ensureGCEDefaultProject();\n if (!query.metricQuery.projectName) {\n this.props.query.metricQuery.projectName = datasource.getDefaultProject();\n }\n }\n\n onQueryChange(prop: string, value: MetricQuery | SLOQuery) {\n this.props.onChange({ ...this.props.query, [prop]: value });\n this.props.onRunQuery();\n }\n\n render() {\n const { datasource, query, onRunQuery, onChange } = this.props;\n const metricQuery = { ...defaultQuery(datasource), ...query.metricQuery };\n const sloQuery = { ...defaultSLOQuery(datasource), ...query.sloQuery };\n const queryType = query.queryType || QueryType.METRICS;\n const meta = this.props.data?.series.length ? this.props.data?.series[0].meta : {};\n const customMetaData = meta?.custom ?? {};\n const variableOptionGroup = {\n label: 'Template Variables',\n expanded: false,\n options: datasource.getVariables().map(toOption),\n };\n\n return (\n \n \n {queryType === QueryType.METRICS && (\n {\n this.props.onChange({ ...this.props.query, metricQuery });\n }}\n onRunQuery={onRunQuery}\n datasource={datasource}\n query={metricQuery}\n />\n )}\n\n {queryType === QueryType.SLO && (\n this.onQueryChange('sloQuery', query)}\n onRunQuery={onRunQuery}\n datasource={datasource}\n query={sloQuery}\n />\n )}\n \n );\n }\n}\n","import React from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { EditorField } from '@grafana/experimental';\nimport { Select } from '@grafana/ui';\n\nimport { LOOKBACK_PERIODS } from '../constants';\n\nexport interface Props {\n refId: string;\n onChange: (lookbackPeriod: string) => void;\n templateVariableOptions: Array>;\n current?: string;\n}\n\nexport const LookbackPeriodSelect = ({ refId, current, templateVariableOptions, onChange }: Props) => {\n const options = LOOKBACK_PERIODS.map((lp) => ({\n ...lp,\n label: lp.text,\n }));\n if (current && !options.find((op) => op.value === current)) {\n options.push({ label: current, text: current, value: current, hidden: false });\n }\n const visibleOptions = options.filter((lp) => !lp.hidden);\n\n return (\n \n s.value === current)}\n options={[\n {\n label: 'Template Variables',\n options: templateVariableOptions,\n },\n {\n label: 'Predefined periods',\n expanded: true,\n options: visibleOptions,\n },\n ]}\n onChange={({ value }) => onChange(value!)}\n />\n \n );\n};\n","import React, { useEffect, useState } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { EditorField } from '@grafana/experimental';\nimport { Select } from '@grafana/ui';\n\nimport CloudMonitoringDatasource from '../datasource';\nimport { SLOQuery } from '../types';\n\nexport interface Props {\n refId: string;\n onChange: (query: SLOQuery) => void;\n query: SLOQuery;\n templateVariableOptions: Array>;\n datasource: CloudMonitoringDatasource;\n}\n\nexport const SLO = ({ refId, query, templateVariableOptions, onChange, datasource }: Props) => {\n const [slos, setSLOs] = useState>>([]);\n const { projectName, serviceId } = query;\n\n useEffect(() => {\n if (!projectName || !serviceId) {\n return;\n }\n\n datasource.getServiceLevelObjectives(projectName, serviceId).then((sloIds: Array>) => {\n setSLOs([\n {\n label: 'Template Variables',\n options: templateVariableOptions,\n },\n ...sloIds,\n ]);\n });\n }, [datasource, projectName, serviceId, templateVariableOptions]);\n\n return (\n \n {\n const slos = await datasource.getServiceLevelObjectives(projectName, serviceId);\n const slo = slos.find(({ value }) => value === datasource.templateSrv.replace(sloId));\n onChange({ ...query, sloId, sloName, goal: slo?.goal });\n }}\n />\n \n );\n};\n","import React from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { EditorField } from '@grafana/experimental';\nimport { Select } from '@grafana/ui';\n\nimport { SELECTORS } from '../constants';\nimport CloudMonitoringDatasource from '../datasource';\nimport { SLOQuery } from '../types';\n\nexport interface Props {\n refId: string;\n onChange: (query: SLOQuery) => void;\n query: SLOQuery;\n templateVariableOptions: Array>;\n datasource: CloudMonitoringDatasource;\n}\n\nexport const Selector = ({ refId, query, templateVariableOptions, onChange, datasource }: Props) => {\n return (\n \n s.value === query?.selectorName ?? '')}\n options={[\n {\n label: 'Template Variables',\n options: templateVariableOptions,\n },\n ...SELECTORS,\n ]}\n onChange={({ value: selectorName }) => onChange({ ...query, selectorName: selectorName ?? '' })}\n />\n \n );\n};\n","import React, { useEffect, useState } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { EditorField } from '@grafana/experimental';\nimport { Select } from '@grafana/ui';\n\nimport CloudMonitoringDatasource from '../datasource';\nimport { SLOQuery } from '../types';\n\nexport interface Props {\n refId: string;\n onChange: (query: SLOQuery) => void;\n query: SLOQuery;\n templateVariableOptions: Array>;\n datasource: CloudMonitoringDatasource;\n}\n\nexport const Service = ({ refId, query, templateVariableOptions, onChange, datasource }: Props) => {\n const [services, setServices] = useState>>([]);\n const { projectName } = query;\n\n useEffect(() => {\n if (!projectName) {\n return;\n }\n\n datasource.getSLOServices(projectName).then((services: Array>) => {\n setServices([\n {\n label: 'Template Variables',\n options: templateVariableOptions,\n },\n ...services,\n ]);\n });\n }, [datasource, projectName, templateVariableOptions]);\n\n return (\n \n \n onChange({ ...query, serviceId, serviceName, sloId: '' })\n }\n />\n \n );\n};\n","import React, { useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { EditorField, EditorFieldGroup, EditorRow } from '@grafana/experimental';\n\nimport { ALIGNMENT_PERIODS, SLO_BURN_RATE_SELECTOR_NAME } from '../constants';\nimport CloudMonitoringDatasource from '../datasource';\nimport { alignmentPeriodLabel } from '../functions';\nimport { AlignmentTypes, CustomMetaData, SLOQuery } from '../types';\n\nimport { AliasBy } from './AliasBy';\nimport { LookbackPeriodSelect } from './LookbackPeriodSelect';\nimport { PeriodSelect } from './PeriodSelect';\nimport { Project } from './Project';\nimport { SLO } from './SLO';\nimport { Selector } from './Selector';\nimport { Service } from './Service';\n\nexport interface Props {\n refId: string;\n customMetaData: CustomMetaData;\n variableOptionGroup: SelectableValue;\n onChange: (query: SLOQuery) => void;\n onRunQuery: () => void;\n query: SLOQuery;\n datasource: CloudMonitoringDatasource;\n}\n\nexport const defaultQuery: (dataSource: CloudMonitoringDatasource) => SLOQuery = (dataSource) => ({\n projectName: dataSource.getDefaultProject(),\n alignmentPeriod: 'cloud-monitoring-auto',\n perSeriesAligner: AlignmentTypes.ALIGN_MEAN,\n aliasBy: '',\n selectorName: 'select_slo_health',\n serviceId: '',\n serviceName: '',\n sloId: '',\n sloName: '',\n lookbackPeriod: '',\n});\n\nexport function SLOQueryEditor({\n refId,\n query,\n datasource,\n onChange,\n variableOptionGroup,\n customMetaData,\n}: React.PropsWithChildren) {\n const alignmentLabel = useMemo(() => alignmentPeriodLabel(customMetaData, datasource), [customMetaData, datasource]);\n return (\n <>\n \n onChange({ ...query, projectName })}\n />\n \n \n \n {query.selectorName === SLO_BURN_RATE_SELECTOR_NAME && (\n onChange({ ...query, lookbackPeriod: lookbackPeriod })}\n current={query.lookbackPeriod}\n templateVariableOptions={variableOptionGroup.options}\n />\n )}\n\n \n \n onChange({ ...query, alignmentPeriod: period })}\n aligmentPeriods={ALIGNMENT_PERIODS}\n />\n \n \n\n onChange({ ...query, aliasBy })} />\n \n \n );\n}\n","import React from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { EditorRow } from '@grafana/experimental';\n\nimport CloudMonitoringDatasource from '../datasource';\nimport { CustomMetaData, MetricDescriptor, MetricQuery, SLOQuery } from '../types';\n\nimport { AliasBy } from './AliasBy';\nimport { Alignment } from './Alignment';\nimport { GroupBy } from './GroupBy';\nimport { LabelFilter } from './LabelFilter';\nimport { Metrics } from './Metrics';\nimport { Preprocessor } from './Preprocessor';\n\nexport interface Props {\n refId: string;\n customMetaData: CustomMetaData;\n variableOptionGroup: SelectableValue;\n onMetricTypeChange: (query: MetricDescriptor) => void;\n onChange: (query: MetricQuery | SLOQuery) => void;\n query: MetricQuery;\n datasource: CloudMonitoringDatasource;\n labels: any;\n}\n\nfunction Editor({\n refId,\n query,\n labels,\n datasource,\n onChange,\n onMetricTypeChange,\n customMetaData,\n variableOptionGroup,\n}: React.PropsWithChildren) {\n return (\n \n {(metric) => (\n <>\n onChange({ ...query, filters })}\n variableOptionGroup={variableOptionGroup}\n />\n \n \n \n \n {\n onChange({ ...query, aliasBy });\n }}\n />\n \n \n )}\n \n );\n}\n\nexport const VisualMetricQueryEditor = React.memo(Editor);\n","import React, { FC } from 'react';\n\nexport const AnnotationsHelp: FC = () => {\n return (\n
\n
\n
Annotation Query Format
\n

\n An annotation is an event that is overlaid on top of graphs. Annotation rendering is expensive so it is\n important to limit the number of rows returned.{' '}\n

\n

\n The Title and Text fields support templating and can use data returned from the query. For example, the Title\n field could have the following text:\n

\n \n {`${'{{metric.type}}'}`} has value: {`${'{{metric.value}}'}`}\n \n

\n Example Result: monitoring.googleapis.com/uptime_check/http_status has this value: 502\n

\n \n

\n {`${'{{metric.value}}'}`} = value of the metric/point\n

\n

\n {`${'{{metric.type}}'}`} = metric type e.g. compute.googleapis.com/instance/cpu/usage_time\n

\n

\n {`${'{{metric.name}}'}`} = name part of metric e.g. instance/cpu/usage_time\n

\n

\n {`${'{{metric.service}}'}`} = service part of metric e.g. compute\n

\n

\n {`${'{{metric.label.label_name}}'}`} = Metric label metadata e.g. metric.label.instance_name\n

\n

\n {`${'{{resource.label.label_name}}'}`} = Resource label metadata e.g. resource.label.zone\n

\n
\n
\n );\n};\n","import { css } from '@emotion/css';\nimport React, { FC } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { HorizontalGroup, InlineField, InlineLabel, PopoverContent, Select } from '@grafana/ui';\n\nimport { INNER_LABEL_WIDTH, LABEL_WIDTH } from '../constants';\n\ninterface VariableQueryFieldProps {\n onChange: (value: string) => void;\n options: SelectableValue[];\n value: string;\n label: string;\n allowCustomValue?: boolean;\n}\n\nexport const VariableQueryField: FC = ({\n label,\n onChange,\n value,\n options,\n allowCustomValue = false,\n}) => {\n return (\n \n onChange(value!)}\n options={options}\n />\n \n );\n};\n\nexport interface Props {\n children: React.ReactNode;\n tooltip?: PopoverContent;\n label?: React.ReactNode;\n className?: string;\n noFillEnd?: boolean;\n labelWidth?: number;\n fillComponent?: React.ReactNode;\n htmlFor?: string;\n}\n\nexport const QueryEditorRow: FC = ({\n children,\n label,\n tooltip,\n fillComponent,\n noFillEnd = false,\n labelWidth = LABEL_WIDTH,\n htmlFor,\n ...rest\n}) => {\n return (\n
\n {label && (\n \n {label}\n \n )}\n \n \n {children}\n \n
\n
\n {noFillEnd ||
{fillComponent}
}\n
\n \n );\n};\n\nexport const QueryEditorField: FC = ({ children, label, tooltip, labelWidth = INNER_LABEL_WIDTH, ...rest }) => {\n return (\n <>\n {label && (\n \n {label}\n \n )}\n {children}\n \n );\n};\n","import { GoogleAuthType } from '@grafana/google-sdk';\n\nimport { MetricKind, QueryType, ValueTypes } from './types';\n\n// not super excited about using uneven numbers, but this makes it align perfectly with rows that has two fields\nexport const INPUT_WIDTH = 71;\nexport const LABEL_WIDTH = 19;\nexport const INNER_LABEL_WIDTH = 14;\nexport const SELECT_WIDTH = 28;\nexport const AUTH_TYPES = [\n { value: 'Google JWT File', key: GoogleAuthType.JWT },\n { value: 'GCE Default Service Account', key: GoogleAuthType.GCE },\n];\n\nexport const ALIGNMENTS = [\n {\n text: 'none',\n value: 'ALIGN_NONE',\n valueTypes: [\n ValueTypes.INT64,\n ValueTypes.DOUBLE,\n ValueTypes.MONEY,\n ValueTypes.DISTRIBUTION,\n ValueTypes.STRING,\n ValueTypes.VALUE_TYPE_UNSPECIFIED,\n ValueTypes.BOOL,\n ],\n metricKinds: [MetricKind.GAUGE],\n },\n {\n text: 'delta',\n value: 'ALIGN_DELTA',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY, ValueTypes.DISTRIBUTION],\n metricKinds: [MetricKind.CUMULATIVE, MetricKind.DELTA],\n },\n {\n text: 'rate',\n value: 'ALIGN_RATE',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY],\n metricKinds: [MetricKind.CUMULATIVE, MetricKind.DELTA],\n },\n {\n text: 'interpolate',\n value: 'ALIGN_INTERPOLATE',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY],\n metricKinds: [MetricKind.GAUGE],\n },\n {\n text: 'next older',\n value: 'ALIGN_NEXT_OLDER',\n valueTypes: [\n ValueTypes.INT64,\n ValueTypes.DOUBLE,\n ValueTypes.MONEY,\n ValueTypes.DISTRIBUTION,\n ValueTypes.STRING,\n ValueTypes.VALUE_TYPE_UNSPECIFIED,\n ValueTypes.BOOL,\n ],\n metricKinds: [MetricKind.GAUGE],\n },\n {\n text: 'min',\n value: 'ALIGN_MIN',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA],\n },\n {\n text: 'max',\n value: 'ALIGN_MAX',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA],\n },\n {\n text: 'mean',\n value: 'ALIGN_MEAN',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA],\n },\n {\n text: 'count',\n value: 'ALIGN_COUNT',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY, ValueTypes.BOOL],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA],\n },\n {\n text: 'sum',\n value: 'ALIGN_SUM',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY, ValueTypes.DISTRIBUTION],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA],\n },\n {\n text: 'stddev',\n value: 'ALIGN_STDDEV',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA],\n },\n {\n text: 'count true',\n value: 'ALIGN_COUNT_TRUE',\n valueTypes: [ValueTypes.BOOL],\n metricKinds: [MetricKind.GAUGE],\n },\n {\n text: 'count false',\n value: 'ALIGN_COUNT_FALSE',\n valueTypes: [ValueTypes.BOOL],\n metricKinds: [MetricKind.GAUGE],\n },\n {\n text: 'fraction true',\n value: 'ALIGN_FRACTION_TRUE',\n valueTypes: [ValueTypes.BOOL],\n metricKinds: [MetricKind.GAUGE],\n },\n {\n text: 'percentile 99',\n value: 'ALIGN_PERCENTILE_99',\n valueTypes: [ValueTypes.DISTRIBUTION],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA],\n },\n {\n text: 'percentile 95',\n value: 'ALIGN_PERCENTILE_95',\n valueTypes: [ValueTypes.DISTRIBUTION],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA],\n },\n {\n text: 'percentile 50',\n value: 'ALIGN_PERCENTILE_50',\n valueTypes: [ValueTypes.DISTRIBUTION],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA],\n },\n {\n text: 'percentile 05',\n value: 'ALIGN_PERCENTILE_05',\n valueTypes: [ValueTypes.DISTRIBUTION],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA],\n },\n {\n text: 'percent change',\n value: 'ALIGN_PERCENT_CHANGE',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA],\n },\n];\n\nexport const AGGREGATIONS = [\n {\n text: 'none',\n value: 'REDUCE_NONE',\n valueTypes: [\n ValueTypes.INT64,\n ValueTypes.DOUBLE,\n ValueTypes.MONEY,\n ValueTypes.DISTRIBUTION,\n ValueTypes.BOOL,\n ValueTypes.STRING,\n ],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA, MetricKind.CUMULATIVE, MetricKind.METRIC_KIND_UNSPECIFIED],\n },\n {\n text: 'mean',\n value: 'REDUCE_MEAN',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY, ValueTypes.DISTRIBUTION],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA, MetricKind.CUMULATIVE],\n },\n {\n text: 'min',\n value: 'REDUCE_MIN',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA, MetricKind.CUMULATIVE, MetricKind.METRIC_KIND_UNSPECIFIED],\n },\n {\n text: 'max',\n value: 'REDUCE_MAX',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA, MetricKind.CUMULATIVE, MetricKind.METRIC_KIND_UNSPECIFIED],\n },\n {\n text: 'sum',\n value: 'REDUCE_SUM',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY, ValueTypes.DISTRIBUTION],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA, MetricKind.CUMULATIVE, MetricKind.METRIC_KIND_UNSPECIFIED],\n },\n {\n text: 'std. dev.',\n value: 'REDUCE_STDDEV',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY, ValueTypes.DISTRIBUTION],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA, MetricKind.CUMULATIVE, MetricKind.METRIC_KIND_UNSPECIFIED],\n },\n {\n text: 'count',\n value: 'REDUCE_COUNT',\n valueTypes: [\n ValueTypes.INT64,\n ValueTypes.DOUBLE,\n ValueTypes.MONEY,\n ValueTypes.DISTRIBUTION,\n ValueTypes.BOOL,\n ValueTypes.STRING,\n ],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA, MetricKind.CUMULATIVE],\n },\n {\n text: 'count true',\n value: 'REDUCE_COUNT_TRUE',\n valueTypes: [ValueTypes.BOOL],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA],\n },\n {\n text: 'count false',\n value: 'REDUCE_COUNT_FALSE',\n valueTypes: [ValueTypes.BOOL],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA],\n },\n {\n text: '99th percentile',\n value: 'REDUCE_PERCENTILE_99',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY, ValueTypes.DISTRIBUTION],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA, MetricKind.CUMULATIVE],\n },\n {\n text: '95th percentile',\n value: 'REDUCE_PERCENTILE_95',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY, ValueTypes.DISTRIBUTION],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA, MetricKind.CUMULATIVE],\n },\n {\n text: '50th percentile',\n value: 'REDUCE_PERCENTILE_50',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY, ValueTypes.DISTRIBUTION],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA, MetricKind.CUMULATIVE],\n },\n {\n text: '5th percentile',\n value: 'REDUCE_PERCENTILE_05',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY, ValueTypes.DISTRIBUTION],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA, MetricKind.CUMULATIVE],\n },\n];\n\nexport type periodOption = {\n text: string;\n value: string;\n hidden?: boolean;\n};\n\nexport const ALIGNMENT_PERIODS: periodOption[] = [\n { text: 'grafana auto', value: 'grafana-auto' },\n { text: 'stackdriver auto', value: 'stackdriver-auto', hidden: true },\n { text: 'cloud monitoring auto', value: 'cloud-monitoring-auto' },\n { text: '1m', value: '+60s' },\n { text: '2m', value: '+120s' },\n { text: '5m', value: '+300s' },\n { text: '10m', value: '+600s' },\n { text: '30m', value: '+1800s' },\n { text: '1h', value: '+3600s' },\n { text: '3h', value: '+7200s' },\n { text: '6h', value: '+21600s' },\n { text: '1d', value: '+86400s' },\n { text: '3d', value: '+259200s' },\n { text: '1w', value: '+604800s' },\n];\n\nexport const GRAPH_PERIODS: periodOption[] = [\n { text: 'auto', value: 'auto' },\n { text: '1m', value: '1m' },\n { text: '2m', value: '2m' },\n { text: '5m', value: '5m' },\n { text: '10m', value: '10m' },\n { text: '30m', value: '30m' },\n { text: '1h', value: '1h' },\n { text: '3h', value: '3h' },\n { text: '6h', value: '6h' },\n { text: '1d', value: '1d' },\n { text: '3d', value: '3d' },\n { text: '1w', value: '1w' },\n];\n\n// Usable units: ns, us, ms, s, m, h\n// ref. https://cloud.google.com/stackdriver/docs/solutions/slo-monitoring/api/timeseries-selectors#tss-names-args\nexport const LOOKBACK_PERIODS: periodOption[] = [\n { text: '1m', value: '1m' },\n { text: '2m', value: '2m' },\n { text: '5m', value: '5m' },\n { text: '10m', value: '10m' },\n { text: '30m', value: '30m' },\n { text: '1h', value: '1h' },\n { text: '3h', value: '3h' },\n { text: '6h', value: '6h' },\n { text: '24h', value: '24h' },\n { text: '72h', value: '72h' },\n];\n\nexport const SYSTEM_LABELS = [\n 'metadata.system_labels.cloud_account',\n 'metadata.system_labels.name',\n 'metadata.system_labels.region',\n 'metadata.system_labels.state',\n 'metadata.system_labels.instance_group',\n 'metadata.system_labels.node_name',\n 'metadata.system_labels.service_name',\n 'metadata.system_labels.top_level_controller_type',\n 'metadata.system_labels.top_level_controller_name',\n 'metadata.system_labels.container_image',\n];\n\nexport const SLO_BURN_RATE_SELECTOR_NAME = 'select_slo_burn_rate';\n\nexport const SELECTORS = [\n { label: 'SLI Value', value: 'select_slo_health' },\n { label: 'SLO Compliance', value: 'select_slo_compliance' },\n { label: 'SLO Error Budget Remaining', value: 'select_slo_budget_fraction' },\n { label: 'SLO Burn Rate', value: SLO_BURN_RATE_SELECTOR_NAME },\n];\n\nexport const QUERY_TYPES = [\n { label: 'Metrics', value: QueryType.METRICS },\n { label: 'Service Level Objectives (SLO)', value: QueryType.SLO },\n];\n","import { chunk, initial, startCase, uniqBy } from 'lodash';\n\nimport { rangeUtil } from '@grafana/data';\nimport { getTemplateSrv, TemplateSrv } from '@grafana/runtime';\n\nimport { AGGREGATIONS, ALIGNMENTS, SYSTEM_LABELS } from './constants';\nimport CloudMonitoringDatasource from './datasource';\nimport { AlignmentTypes, CustomMetaData, MetricDescriptor, MetricKind, PreprocessorType, ValueTypes } from './types';\n\nexport const extractServicesFromMetricDescriptors = (metricDescriptors: MetricDescriptor[]) =>\n uniqBy(metricDescriptors, 'service');\n\nexport const getMetricTypesByService = (metricDescriptors: MetricDescriptor[], service: string) =>\n metricDescriptors.filter((m: MetricDescriptor) => m.service === service);\n\nexport const getMetricTypes = (\n metricDescriptors: MetricDescriptor[],\n metricType: string,\n interpolatedMetricType: string,\n selectedService: string\n) => {\n const metricTypes = getMetricTypesByService(metricDescriptors, selectedService).map((m) => ({\n value: m.type,\n name: m.displayName,\n }));\n const metricTypeExistInArray = metricTypes.some(\n (m: { value: string; name: string }) => m.value === interpolatedMetricType\n );\n const metricTypeByService = metricTypes.length ? metricTypes[0].value : '';\n const selectedMetricType = metricTypeExistInArray ? metricType : metricTypeByService;\n return {\n metricTypes,\n selectedMetricType,\n };\n};\n\nexport const getAlignmentOptionsByMetric = (\n metricValueType: string,\n metricKind: string,\n preprocessor?: PreprocessorType\n) => {\n if (preprocessor && preprocessor === PreprocessorType.Rate) {\n metricKind = MetricKind.GAUGE;\n }\n\n return !metricValueType\n ? []\n : ALIGNMENTS.filter((i) => {\n return (\n i.valueTypes.indexOf(metricValueType as ValueTypes) !== -1 &&\n i.metricKinds.indexOf(metricKind as MetricKind) !== -1\n );\n });\n};\n\nexport const getAggregationOptionsByMetric = (valueType: ValueTypes, metricKind: MetricKind) => {\n return !metricKind\n ? []\n : AGGREGATIONS.filter((i) => {\n return i.valueTypes.indexOf(valueType) !== -1 && i.metricKinds.indexOf(metricKind) !== -1;\n });\n};\n\nexport const getLabelKeys = async (\n datasource: CloudMonitoringDatasource,\n selectedMetricType: string,\n projectName: string\n) => {\n const refId = 'handleLabelKeysQuery';\n const labels = await datasource.getLabels(selectedMetricType, refId, projectName);\n return [...Object.keys(labels), ...SYSTEM_LABELS];\n};\n\nexport const getAlignmentPickerData = (\n valueType: string | undefined = ValueTypes.DOUBLE,\n metricKind: string | undefined = MetricKind.GAUGE,\n perSeriesAligner: string | undefined = AlignmentTypes.ALIGN_MEAN,\n preprocessor?: PreprocessorType\n) => {\n const templateSrv: TemplateSrv = getTemplateSrv();\n const alignOptions = getAlignmentOptionsByMetric(valueType!, metricKind!, preprocessor!).map((option) => ({\n ...option,\n label: option.text,\n }));\n if (!alignOptions.some((o: { value: string }) => o.value === templateSrv.replace(perSeriesAligner))) {\n perSeriesAligner = alignOptions.length > 0 ? alignOptions[0].value : AlignmentTypes.ALIGN_MEAN;\n }\n return { alignOptions, perSeriesAligner };\n};\n\nexport const labelsToGroupedOptions = (groupBys: string[]) => {\n const groups = groupBys.reduce((acc: any, curr: string) => {\n const arr = curr.split('.').map(startCase);\n const group = (arr.length === 2 ? arr : initial(arr)).join(' ');\n const option = {\n value: curr,\n label: curr,\n };\n if (acc[group]) {\n acc[group] = [...acc[group], option];\n } else {\n acc[group] = [option];\n }\n return acc;\n }, {});\n return Object.entries(groups).map(([label, options]) => ({ label, options, expanded: true }), []);\n};\n\nexport const stringArrayToFilters = (filterArray: string[]) =>\n chunk(filterArray, 4).map(([key, operator, value, condition = 'AND']) => ({\n key,\n operator,\n value,\n condition,\n }));\n\nexport const alignmentPeriodLabel = (customMetaData: CustomMetaData, datasource: CloudMonitoringDatasource) => {\n const { perSeriesAligner, alignmentPeriod } = customMetaData;\n if (!alignmentPeriod || !perSeriesAligner) {\n return '';\n }\n\n const alignment = ALIGNMENTS.find((ap) => ap.value === datasource.templateSrv.replace(perSeriesAligner));\n const seconds = parseInt(alignmentPeriod, 10);\n const hms = rangeUtil.secondsToHms(seconds);\n return `${hms} interval (${alignment?.text ?? ''})`;\n};\n","import { DataQuery, DataSourceJsonData, SelectableValue } from '@grafana/data';\nimport { GoogleAuthType } from '@grafana/google-sdk';\n\nexport const authTypes: Array> = [\n { label: 'Google JWT File', value: GoogleAuthType.JWT },\n { label: 'GCE Default Service Account', value: GoogleAuthType.GCE },\n];\n\nexport enum MetricFindQueryTypes {\n Projects = 'projects',\n Services = 'services',\n DefaultProject = 'defaultProject',\n MetricTypes = 'metricTypes',\n LabelKeys = 'labelKeys',\n LabelValues = 'labelValues',\n ResourceTypes = 'resourceTypes',\n Aggregations = 'aggregations',\n Aligners = 'aligners',\n AlignmentPeriods = 'alignmentPeriods',\n Selectors = 'selectors',\n SLOServices = 'sloServices',\n SLO = 'slo',\n}\n\nexport interface CloudMonitoringVariableQuery extends DataQuery {\n selectedQueryType: string;\n selectedService: string;\n selectedMetricType: string;\n selectedSLOService: string;\n labelKey: string;\n projects: SelectableValue[];\n sloServices: SelectableValue[];\n projectName: string;\n}\n\nexport interface VariableQueryData {\n selectedQueryType: string;\n metricDescriptors: MetricDescriptor[];\n selectedService: string;\n selectedMetricType: string;\n selectedSLOService: string;\n labels: string[];\n labelKey: string;\n metricTypes: Array<{ value: string; name: string }>;\n services: SelectableValue[];\n projects: SelectableValue[];\n sloServices: SelectableValue[];\n projectName: string;\n loading: boolean;\n}\n\nexport interface Aggregation {\n crossSeriesReducer?: string;\n groupBys?: string[];\n}\n\nexport enum QueryType {\n METRICS = 'metrics',\n SLO = 'slo',\n}\n\nexport enum EditorMode {\n Visual = 'visual',\n MQL = 'mql',\n}\n\nexport enum PreprocessorType {\n None = 'none',\n Rate = 'rate',\n Delta = 'delta',\n}\n\nexport enum MetricKind {\n METRIC_KIND_UNSPECIFIED = 'METRIC_KIND_UNSPECIFIED',\n GAUGE = 'GAUGE',\n DELTA = 'DELTA',\n CUMULATIVE = 'CUMULATIVE',\n}\n\nexport enum ValueTypes {\n VALUE_TYPE_UNSPECIFIED = 'VALUE_TYPE_UNSPECIFIED',\n BOOL = 'BOOL',\n INT64 = 'INT64',\n DOUBLE = 'DOUBLE',\n STRING = 'STRING',\n DISTRIBUTION = 'DISTRIBUTION',\n MONEY = 'MONEY',\n}\n\nexport enum AlignmentTypes {\n ALIGN_DELTA = 'ALIGN_DELTA',\n ALIGN_RATE = 'ALIGN_RATE',\n ALIGN_INTERPOLATE = 'ALIGN_INTERPOLATE',\n ALIGN_NEXT_OLDER = 'ALIGN_NEXT_OLDER',\n ALIGN_MIN = 'ALIGN_MIN',\n ALIGN_MAX = 'ALIGN_MAX',\n ALIGN_MEAN = 'ALIGN_MEAN',\n ALIGN_COUNT = 'ALIGN_COUNT',\n ALIGN_SUM = 'ALIGN_SUM',\n ALIGN_STDDEV = 'ALIGN_STDDEV',\n ALIGN_COUNT_TRUE = 'ALIGN_COUNT_TRUE',\n ALIGN_COUNT_FALSE = 'ALIGN_COUNT_FALSE',\n ALIGN_FRACTION_TRUE = 'ALIGN_FRACTION_TRUE',\n ALIGN_PERCENTILE_99 = 'ALIGN_PERCENTILE_99',\n ALIGN_PERCENTILE_95 = 'ALIGN_PERCENTILE_95',\n ALIGN_PERCENTILE_50 = 'ALIGN_PERCENTILE_50',\n ALIGN_PERCENTILE_05 = 'ALIGN_PERCENTILE_05',\n ALIGN_PERCENT_CHANGE = 'ALIGN_PERCENT_CHANGE',\n ALIGN_NONE = 'ALIGN_NONE',\n}\n\nexport interface BaseQuery {\n projectName: string;\n perSeriesAligner?: string;\n alignmentPeriod?: string;\n aliasBy?: string;\n}\n\nexport interface MetricQuery extends BaseQuery {\n editorMode: EditorMode;\n metricType: string;\n crossSeriesReducer: string;\n groupBys?: string[];\n filters?: string[];\n metricKind?: MetricKind;\n valueType?: string;\n view?: string;\n query: string;\n preprocessor?: PreprocessorType;\n // To disable the graphPeriod, it should explictly be set to 'disabled'\n graphPeriod?: 'disabled' | string;\n}\n\nexport interface AnnotationMetricQuery extends MetricQuery {\n title?: string;\n text?: string;\n}\n\nexport interface SLOQuery extends BaseQuery {\n selectorName: string;\n serviceId: string;\n serviceName: string;\n sloId: string;\n sloName: string;\n goal?: number;\n lookbackPeriod?: string;\n}\n\nexport interface CloudMonitoringQuery extends DataQuery {\n datasourceId?: number; // Should not be necessary anymore\n queryType: QueryType;\n metricQuery: MetricQuery | AnnotationMetricQuery;\n sloQuery?: SLOQuery;\n intervalMs: number;\n type: string;\n}\n\nexport interface CloudMonitoringOptions extends DataSourceJsonData {\n defaultProject?: string;\n gceDefaultProject?: string;\n authenticationType: GoogleAuthType;\n clientEmail?: string;\n tokenUri?: string;\n}\n\nexport interface CloudMonitoringSecureJsonData {\n privateKey?: string;\n}\n\nexport interface LegacyCloudMonitoringAnnotationQuery {\n projectName: string;\n metricType: string;\n refId: string;\n filters: string[];\n metricKind: MetricKind;\n valueType: string;\n title: string;\n text: string;\n}\n\nexport interface QueryMeta {\n alignmentPeriod: string;\n rawQuery: string;\n rawQueryString: string;\n metricLabels: { [key: string]: string[] };\n resourceLabels: { [key: string]: string[] };\n resourceTypes: string[];\n}\n\nexport interface MetricDescriptor {\n valueType: string;\n metricKind: MetricKind;\n type: string;\n unit: string;\n service: string;\n serviceShortName: string;\n displayName: string;\n description: string;\n}\n\nexport interface Segment {\n type: string;\n value: string;\n}\n\nexport interface Filter {\n key: string;\n operator: string;\n value: string;\n condition?: string;\n}\n\nexport interface CustomMetaData {\n perSeriesAligner?: string;\n alignmentPeriod?: string;\n}\n\nexport interface PostResponse {\n results: Record;\n}\n","Object.defineProperty(exports,\"__esModule\",{value:!0});var e=require(\"@grafana/data\"),t=require(\"@grafana/ui\"),a=require(\"react\"),n=require(\"lodash\");function l(e){return e&&\"object\"==typeof e&&\"default\"in e?e:{default:e}}var o=l(a),r=function(){return r=Object.assign||function(e){for(var t,a=1,n=arguments.length;a0)&&!(n=o.next()).done;)r.push(n.value)}catch(e){l={error:e}}finally{try{n&&!n.done&&(a=o.return)&&a.call(o)}finally{if(l)throw l.error}}return r}var u,c=\"Configuration help box\",d=\"Configuration drop zone\",f=\"Configuration text area\",s=\"Paste JWT button\",p=\"Reset JWT button\",m=\"JWT form\",y=\"JWT button\",h=\"GCE button\",v=[\"private_key\",\"token_uri\",\"client_email\",\"project_id\"],g=function(e){var n=e.onChange,l=i(a.useState(),2),r=l[0],u=l[1],c=i(a.useState(null),2),p=c[0],m=c[1],y=t.useTheme2(),h=a.useCallback((function(e){u(null),m(!0)}),[m]),v=a.useCallback((function(e){m(null),u(null)}),[m]),g=a.useCallback((function(e){if(\"\"!==e.trim()){var t=void 0;try{t=JSON.parse(e)}catch(e){u(\"Invalid JWT token\")}var a=E(t);a.isValid?n({privateKey:t.private_key,tokenUri:t.token_uri,clientEmail:t.client_email,projectId:t.project_id}):u(a.error)}}),[u,n]);return o.default.createElement(o.default.Fragment,null,o.default.createElement(t.Field,{label:\"JWT token\",invalid:Boolean(r),description:p?\"Paste JWT token below\":\"Upload or paste Google JWT token\",error:r},o.default.createElement(o.default.Fragment,null,!0!==p&&o.default.createElement(\"div\",{\"data-testid\":d},o.default.createElement(t.FileDropzone,{options:{multiple:!1,accept:\"application/json\"},readAs:\"readAsText\",onLoad:function(e){g(e),m(!1)}},o.default.createElement(\"p\",{style:{margin:0,fontSize:\"\"+y.typography.h4.fontSize,textAlign:\"center\"}},\"Drop the Google JWT file here\",o.default.createElement(\"br\",null),o.default.createElement(\"br\",null),o.default.createElement(t.LinkButton,{fill:\"outline\"},\"Click to browse files\")))),p&&o.default.createElement(t.TextArea,{\"data-testid\":f,autoFocus:!0,invalid:Boolean(r),placeholder:\"Paste Google JWT token here\",onBlur:function(e){return g(e.currentTarget.value)},rows:12}))),!p&&o.default.createElement(t.Field,null,o.default.createElement(t.Button,{\"data-testid\":s,type:\"button\",fill:\"outline\",style:{color:\"\"+y.colors.primary.text},onClick:h},\"Paste JWT Token\")),p&&r&&o.default.createElement(t.Field,null,o.default.createElement(t.Button,{type:\"button\",fill:\"outline\",style:{color:\"\"+y.colors.primary.text},onClick:v},\"Upload JWT Token\")))},E=function(e){if(!n.isObject(e))return{isValid:!1,error:\"Invalid JWT token\"};var t=v.filter((function(t){return!e[t]}));return t.length>0?{isValid:!1,error:\"Missing keys: \"+t.join(\", \")}:{isValid:!0}},T=function(e){var a=e.options,n=e.onReset,l=e.onChange;return o.default.createElement(\"div\",{\"data-testid\":m},o.default.createElement(t.Field,{label:\"Project ID\"},o.default.createElement(t.Input,{id:\"defaultProject\",width:60,value:a.defaultProject||\"\",onChange:l(\"defaultProject\")})),o.default.createElement(t.Field,{label:\"Client email\"},o.default.createElement(t.Input,{width:60,id:\"clientEmail\",value:a.clientEmail||\"\",onChange:l(\"clientEmail\")})),o.default.createElement(t.Field,{label:\"Token URI\"},o.default.createElement(t.Input,{width:60,id:\"tokenUri\",value:a.tokenUri||\"\",onChange:l(\"tokenUri\")})),o.default.createElement(t.Field,{label:\"Private key\",disabled:!0},o.default.createElement(t.Input,{width:60,id:\"privateKey\",readOnly:!0,placeholder:\"Private key configured\",addonAfter:o.default.createElement(t.Tooltip,{content:\"Click to clear the uploaded JWT token and upload a new one\"},o.default.createElement(t.Button,{\"data-testid\":p,icon:\"sync\",size:\"xs\",onClick:function(){return n(null)},fill:\"outline\"},\"Reset token\"))})))};exports.GoogleAuthType=void 0,(u=exports.GoogleAuthType||(exports.GoogleAuthType={})).JWT=\"jwt\",u.GCE=\"gce\";var k=[{label:\"Google JWT File\",value:exports.GoogleAuthType.JWT,ariaLabel:y},{label:\"GCE Default Service Account\",value:exports.GoogleAuthType.GCE,ariaLabel:h}];exports.ConnectionConfig=function(a){var n=a.options,l=a.onOptionsChange,i=n.jsonData,u=n.secureJsonFields,d=n.secureJsonData;i.authenticationType||(i.authenticationType=exports.GoogleAuthType.JWT);var f=i.authenticationType===exports.GoogleAuthType.JWT||void 0===i.authenticationType,s=Boolean(u&&u.privateKey&&i.clientEmail&&i.defaultProject&&i.tokenUri);return o.default.createElement(o.default.Fragment,null,o.default.createElement(t.FieldSet,{label:\"Authentication\"},o.default.createElement(t.Field,{label:\"Authentication type\"},o.default.createElement(t.RadioButtonGroup,{options:k,value:i.authenticationType||exports.GoogleAuthType.JWT,onChange:function(e){l(r(r({},n),{jsonData:r(r({},n.jsonData),{authenticationType:e})}))}}))),f&&o.default.createElement(t.FieldSet,{label:\"JWT Key Details\"},s?o.default.createElement(T,{options:n.jsonData,onReset:function(e){var t=r({},d),a=e?r(r({},n.jsonData),e):r({},n.jsonData);delete a.clientEmail,delete a.defaultProject,delete a.tokenUri,delete t.privateKey,l(r(r({},n),{secureJsonData:t,jsonData:a}))},onChange:function(t){return e.onUpdateDatasourceJsonDataOption(a,t)}}):o.default.createElement(g,{onChange:function(e){l(r(r({},n),{secureJsonFields:r(r({},u),{privateKey:!0}),secureJsonData:r(r({},d),{privateKey:e.privateKey}),jsonData:r(r({},i),{clientEmail:e.clientEmail,defaultProject:e.projectId,tokenUri:e.tokenUri})}))}}),\" \"),o.default.createElement(\"div\",{className:\"grafana-info-box\",style:{marginTop:\"16px\"},\"data-testid\":c},o.default.createElement(\"p\",null,\"Don’t know how to get a service account key file or create a service account? Read more\",\" \",o.default.createElement(\"a\",{className:\"external-link\",target:\"_blank\",rel:\"noopener noreferrer\",href:\"https://grafana.com/docs/grafana/latest/datasources/google-cloud-monitoring/google-authentication/\"},\"in the documentation.\"))),!f&&o.default.createElement(t.Alert,{title:\"\",severity:\"info\"},\"Verify GCE default service account by clicking Save & Test\"))};\n//# sourceMappingURL=index.production.js.map\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./dist/index.production.js');\n} else {\n module.exports = require('./dist/index.development.js');\n}\n"],"names":["Aggregation","props","aggOptions","useAggregationOptionsByMetric","selected","useSelectedFromOptions","EditorField","label","width","onChange","value","options","templateVariableOptions","expanded","placeholder","inputId","refId","menuPlacement","metricDescriptor","valueType","metricKind","useMemo","getAggregationOptionsByMetric","map","a","text","find","s","crossSeriesReducer","AliasBy","alias","setAlias","useState","propagateOnChange","debounce","e","target","I","id","Alignment","query","customMetaData","datasource","alignmentLabel","alignmentPeriodLabel","EditorFieldGroup","tooltip","current","alignmentPeriod","period","aligmentPeriods","ALIGNMENT_PERIODS","AlignmentFunction","perSeriesAligner","psa","preprocessor","alignOptions","getAlignmentPickerData","GroupBy","labels","groupBys","variableOptionGroup","labelsToGroupedOptions","SYSTEM_LABELS","o","DEFAULT_OPERATOR","DEFAULT_CONDITION","operators","toOption","LabelFilter","filters","filterArray","_onChange","stringArrayToFilters","Object","keys","getOptions","key","some","op","opp","push","valueOptions","hasOwnProperty","EditorRow","EditorList","items","renderItem","item","onChangeItem","onDeleteItem","operator","condition","spacing","formatCreateLabel","v","allowCustomValue","AccessoryButton","icon","variant","onClick","type","flatMap","slice","filtersToStringArray","MQLQueryEditor","onRunQuery","name","className","rows","onBlur","currentTarget","onKeyDown","event","shiftKey","ctrlKey","preventDefault","GraphPeriod","graphPeriod","htmlFor","Switch","checked","disabled","GRAPH_PERIODS","defaultState","defaultQuery","dataSource","editorMode","EditorMode","projectName","getDefaultProject","metricType","MetricKind","AlignmentTypes","aliasBy","PreprocessorType","Editor","onQueryChange","state","setState","useEffect","getLabels","then","prevState","useCallback","metricQuery","onMetricTypeChange","ValueTypes","EditorRows","VisualMetricQueryEditor","q","MetricQueryEditor","React","Metrics","metricDescriptors","setMetricDescriptors","setMetricDescriptor","metrics","setMetrics","services","setServices","service","setService","theme","useTheme2","selectStyles","getSelectStyles","customStyle","useStyles2","getStyles","onProjectChange","children","templateSrv","getSelectedMetricDescriptor","md","replace","async","getMetricTypes","getServicesList","loadMetricDescriptors","optionDescription","selectedMetricDescriptor","filter","m","displayName","component","description","getMetricsList","length","startCase","serviceShortName","uniqBy","css","colors","secondary","PeriodSelect","ap","visibleOptions","hidden","NONE_OPTION","Preprocessor","useOptions","Project","projects","setProjects","getProjects","projectsWithTemplateVariables","EDITOR_MODES","QueryHeader","sloQuery","queryType","EditorHeader","InlineSelect","QUERY_TYPES","FlexItem","grow","QueryType","RadioButtonGroup","size","QueryEditor","PureComponent","this","includes","ensureGCEDefaultProject","prop","render","defaultSLOQuery","meta","data","series","custom","getVariables","LookbackPeriodSelect","LOOKBACK_PERIODS","lp","Select","SLO","slos","setSLOs","serviceId","getServiceLevelObjectives","sloIds","sloId","sloName","slo","goal","Selector","SELECTORS","selectorName","Service","getSLOServices","serviceName","lookbackPeriod","SLOQueryEditor","SLO_BURN_RATE_SELECTOR_NAME","metric","AnnotationsHelp","VariableQueryField","InlineField","labelWidth","GoogleAuthType","ALIGNMENTS","valueTypes","metricKinds","AGGREGATIONS","extractServicesFromMetricDescriptors","getMetricTypesByService","interpolatedMetricType","selectedService","metricTypes","metricTypeExistInArray","metricTypeByService","selectedMetricType","getAlignmentOptionsByMetric","metricValueType","i","indexOf","getLabelKeys","getTemplateSrv","option","groups","reduce","acc","curr","arr","split","group","initial","join","entries","chunk","alignment","seconds","parseInt","rangeUtil","MetricFindQueryTypes","t","n","default","l","r","assign","arguments","prototype","call","apply","Symbol","iterator","next","done","error","return","u","g","c","p","y","h","trim","JSON","parse","E","isValid","privateKey","private_key","tokenUri","token_uri","clientEmail","client_email","projectId","project_id","createElement","Fragment","Field","invalid","Boolean","FileDropzone","multiple","accept","readAs","onLoad","style","margin","fontSize","typography","h4","textAlign","LinkButton","fill","TextArea","autoFocus","Button","color","primary","isObject","T","onReset","Input","defaultProject","readOnly","addonAfter","Tooltip","content","exports","JWT","GCE","k","ariaLabel","ConnectionConfig","onOptionsChange","jsonData","secureJsonFields","d","secureJsonData","authenticationType","f","FieldSet","onUpdateDatasourceJsonDataOption","marginTop","rel","href","Alert","title","severity","module"],"sourceRoot":""}