{"version":3,"file":"static/js/application.initial~5fa74877.6bb99a61.js","mappings":"ynBAAA,IAAMA,EAAoB,uBACpBC,EAAqB,wBACrBC,EAAyB,4BACzBC,EAAoB,uBACpBC,EAAmB,sBACnBC,EAAwB,2BACxBC,EAAqB,wBACrBC,EAAoB,uBACpBC,EAAoB,sBACpBC,EAAe,kBACfC,EAAoB,0BACpBC,EAAoB,sBACpBC,EAAoB,uBACpBC,EAA2B,+BAC3BC,EAA0B,8BAC1BC,EAA2B,+BAC3BC,EAA0B,8BAC1BC,EAA8B,gC,ysECd9BC,EAA4BC,IAAAA,UAAYC,EAAAA,IAA0B,SAACC,EAAIC,GAAG,OAAKA,CAAG,IAI3EC,EAAgB,SAAHC,GAGnB,IAFLF,EAAGE,EAAHF,IAKMG,EAJID,EAAVE,WAIiCC,sBAAsBL,GAEvD,OAAOH,IAAAA,IAAMM,EAAe,OAC9B,EAEaG,EAAuB,SAAHC,GAAA,IAC/BP,EAAGO,EAAHP,IACAI,EAAUG,EAAVH,WAAU,OACN,SAACI,GACL,IAAMC,EAAiBR,EAAc,CAAED,IAAAA,EAAKI,WAAAA,IACtCM,GAAiBC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAClBF,GACAD,GAGLJ,EAAWQ,eAAe,CACxBC,KAAMH,EACNI,KAAMd,GAEV,CAAE,EAEF,SAASe,EAAsBC,GAG3B,IAFFC,EAAeD,EAAfC,gBACAC,EAAYF,EAAZE,aAEIC,EAAqB,QAWzB,OAVID,IAAiBtB,EAA0BwB,OAASF,IAAiBpB,EAAAA,GAAyBsB,MAChGD,EAAqB,QACZD,IAAiBtB,EAA0ByB,gBAAkBH,IAAiBpB,EAAAA,GAAyBuB,eAChHF,EAAqB,OACZD,IAAiBtB,EAA0B0B,KAAOJ,IAAiBpB,EAAAA,GAAyBwB,IACrGH,EAAqB,MACZD,IAAiBtB,EAA0B2B,UAAYL,IAAiBpB,EAAAA,GAAyByB,WAC1GJ,EAAqB,YAGjB,gBAANK,OAAuBP,EAAe,KAAAO,OAAIL,EAC5C,CAEO,IAAMM,EAAuB,SAAHC,GAI1B,IAHLC,EAAUD,EAAVC,WAIMC,EAASb,EAAuB,CAAEE,gBAHzBS,EAAfT,gBAGyDC,aAF7CQ,EAAZR,eAIA,MAAM,GAANM,OAAUI,EAAM,KAAAJ,OAAIG,EACtB,EAEaE,EAAuB,SAAHC,GAG1B,IACCF,EAASb,EAAuB,CAAEE,gBAHzBa,EAAfb,gBAGyDC,aAF7CY,EAAZZ,eAGA,MAAM,GAANM,OAAUI,EAAM,YAClB,EAGaG,EAA+B,SAAHC,GAMlC,IALLC,EAAMD,EAANC,OACAhB,EAAee,EAAff,gBACAC,EAAYc,EAAZd,aACAd,EAAU4B,EAAV5B,WACA8B,EAAWF,EAAXE,YAEMC,EAAoBV,EAAqB,CAC7CE,WAAYM,EAAOG,OACnBnB,gBAAAA,EACAC,aAAAA,IAEEmB,EAAuBpC,EAAc,CACvCD,IAAKmC,EACL/B,WAAAA,IAEIkC,EAAoBL,EAAOM,qBAAuBN,EAAOM,qBAAqB,CAClFL,YAAAA,SACGM,EAEDH,GAAwBxC,IAAAA,WAAaoC,EAAOQ,qBAAuBR,EAAOQ,kBAAkB,CAC9FC,eAAgBL,EAChBH,YAAAA,EACAhB,aAAAA,MAEAmB,EAAuB,KACnBC,GACsBhC,EAAqB,CAC3CN,IAAKmC,EACL/B,WAAAA,GAEFuC,CAAgBL,IAQpB,OAJwBD,GAAwBC,EAC5CzC,IAAAA,SAAWwC,EAAsBC,QACjCE,CAGN,EAEaI,EAAiC,SAAHC,GAMpC,IALLZ,EAAMY,EAANZ,OACAhB,EAAe4B,EAAf5B,gBACAC,EAAY2B,EAAZ3B,aACAd,EAAUyC,EAAVzC,WACA8B,EAAWW,EAAXX,YAEMQ,EAAiBX,EAA6B,CAClDE,OAAAA,EACAhB,gBAAAA,EACAC,aAAAA,EACAd,WAAAA,EACA8B,YAAAA,IAGEY,EAAUJ,EAKd,OAJII,GAAWb,EAAOc,yBACpBD,EAAUb,EAAOc,uBAAuBL,IAGnC,CACLM,GAAIf,EAAOG,OACXU,QAAAA,EAEJ,EClIMG,EAAmB,CACvBC,mBAAoB,qBACpBC,yBAA0B,2BAC1BC,mCAAoC,sCAGzBC,EAAkD,SAAHnD,GAKrD,IAJLwC,EAAcxC,EAAdwC,eACAC,EAAezC,EAAfyC,gBACAW,EAAIpD,EAAJoD,KACAC,EAASrD,EAATqD,UAEMC,EAAwBd,GAAkBA,EAAee,yBAA4BR,EAAiBC,mBAC5G,OAAKK,EAAUG,SAGP,CACNZ,QAAS,CACP,CACEa,MAAOV,EAAiBC,mBACxBU,YAAaN,EAAKO,UAAUC,UAE9B,CACEH,MAAOV,EAAiBE,yBACxBS,YAAaN,EAAKO,UAAUC,WAE9B,CACEH,MAAOV,EAAiBG,mCACxBQ,YAAaN,EAAKO,UAAUC,cAGhCN,qBAAAA,EACAO,iBAAkB,SAACJ,GACjBhB,EAAgB,CACdc,wBAAyBE,GAE7B,GAtBO,CAAEb,QAAS,GAAIU,qBAAAA,EAwB1B,EAEaQ,EAAiD,SAAHzD,GAOpD,IANLmC,EAAcnC,EAAdmC,eACAC,EAAepC,EAAfoC,gBACAT,EAAW3B,EAAX2B,YACAjB,EAAeV,EAAfU,gBACAqC,EAAI/C,EAAJ+C,KACApC,EAAYX,EAAZW,aAEM+C,EAAmBvB,GAAkBA,EAAeuB,iBAAoBC,EAAAA,mBACxEC,GAAaC,EAAAA,EAAAA,YAAQlC,EAAamC,EAAAA,aAAaC,OAAQpD,GAAcqD,KAAI,SAAAC,GAAM,MAAK,CACxFxE,IAAKwE,EACLZ,YAAaN,EAAKO,UAAUY,EAAAA,uBAAuBD,IACpD,IAED,MAAO,CACLE,uBAF6BT,EAAgBM,KAAI,SAAAI,GAAM,OAAIR,EAAWS,MAAK,SAAAJ,GAAM,OAAIA,EAAOxE,MAAQ2E,CAAM,GAAC,IAG3GR,WAAAA,EACAU,kBAAoBnC,GAAkBA,EAAeoC,YAAeb,EAAgB,GACpFc,qBAAuBrC,GAAkBA,EAAesC,eAAkB,aAC1ErC,gBAAAA,EACA1B,gBAAAA,EACAC,aAAAA,EAEJ,EAEA,SAAS+D,EAAkBtB,GACzB,OAAgB,MAATA,CACT,CAEO,IAAMuB,EAAyB,SAAHlE,GAI5B,IAHL0B,EAAc1B,EAAd0B,eACAR,EAAWlB,EAAXkB,YACAhB,EAAYF,EAAZE,aAEMiE,GAAcf,EAAAA,EAAAA,YAAQlC,EAAamC,EAAAA,aAAaC,OAAQpD,GAC9D,SAAKwB,IACEuC,EAAkBvC,EAAeuB,kBAA8D,IAA1CvB,EAAeuB,gBAAgBmB,SACpFH,EAAkBvC,EAAeuB,kBAAoBvB,EAAeuB,gBAAgBoB,MAAK,SAAAV,GAAM,OAAKQ,EAAYG,SAASX,EAAO,MAChIM,EAAkBvC,EAAee,2BAA6B8B,OAAOC,OAAOvC,GAAkBqC,SAAS5C,EAAee,2BACtHwB,EAAkBvC,EAAeoC,cAAgBK,EAAYG,SAAS5C,EAAeoC,cACrFG,EAAkBvC,EAAesC,gBAAoD,eAAjCtC,EAAesC,eAAmE,cAAjCtC,EAAesC,cAM7H,EAEaS,EAAuC,WAAH,MAAU,CACzDxB,gBAAiBC,EAAAA,mBACjBY,WAAYZ,EAAAA,mBAAmB,GAC/Bc,cAAe,aACfvB,wBAAyBR,EAAiBC,mBAC3C,EAEYwC,EAA4C,SAAAhD,GAAc,MAAK,CAC1EiD,QAASjD,EAAeuB,gBACxB2B,QAASlD,EAAeoC,WACxBe,UAA4C,eAAjCnD,EAAesC,eAAkC,EAAI,EAChEc,iBAAkBpD,EAAee,wBAClC,E,wBCpGK7D,EAA4BC,IAAAA,UAAYC,EAAAA,IAA0B,SAACiG,EAAK/F,GAAG,OAAKA,CAAG,IAmBzF,SAASgG,EAAmBzF,GAExB,IADFH,EAAUG,EAAVH,WAAYc,EAAYX,EAAZW,aAAcD,EAAeV,EAAfU,gBAAiBgF,EAAa1F,EAAb0F,cAErCC,EAA4B,aAApBjF,EAAiCb,EAAWC,sBAAsB,iCAAmCD,EAAW+F,yBAAyB,yBACjJC,EArBR,SAAyBlG,GAErB,IADFE,EAAUF,EAAVE,WAAYc,EAAYhB,EAAZgB,aAAcD,EAAef,EAAfe,gBAAiBgF,EAAa/F,EAAb+F,cAErCI,EAAO,UACP5F,EAAiBL,EAAWC,sBAAsB,+BACxD,OAAKI,GAA0C,UAAxBA,EAAeI,OAAwE,IAAnDoF,EAAcK,gBAAgBC,iBACjF,GAAN/E,OAAU6E,EAAI,KAAA7E,OAAIP,EAAe,UACxBC,IAAiBtB,EAA0BwB,OAASF,IAAiBpB,EAAAA,GAAyBsB,MACjG,GAANI,OAAU6E,EAAI,KAAA7E,OAAIP,EAAe,UACxBC,IAAiBtB,EAA0ByB,gBAAkBH,IAAiBpB,EAAAA,GAAyBuB,eAC1G,GAANG,OAAU6E,EAAI,KAAA7E,OAAIP,EAAe,mBACxBC,IAAiBtB,EAA0B0B,KAAOJ,IAAiBpB,EAAAA,GAAyBwB,IAC/F,GAANE,OAAU6E,EAAI,KAAA7E,OAAIP,EAAe,QAE7B,GAANO,OAAU6E,EAAI,KAAA7E,OAAIP,EACpB,CAMsBuF,CAAiB,CACnCpG,WAAAA,EAAYc,aAAAA,EAAcD,gBAAAA,EAAiBgF,cAAAA,IAE7C,OAAOpG,IAAAA,IAAMqG,EAAO,CAAC,OAAQE,EAAa,SAC5C,CAEA,SAASK,EAAwBzF,GAK7B,IAJF0F,EAAY1F,EAAZ0F,aACAzF,EAAeD,EAAfC,gBACAC,EAAYF,EAAZE,aACAyF,EAAK3F,EAAL2F,MAEA,OAAO9G,IAAAA,OAAS6G,GAAc,SAAAE,GAAU,OAAIF,EAAaG,0BAA0BD,EAAY3F,EAAiBC,EAAcyF,EAAM,GACtI,CAEA,SAASG,EAAuBpF,GAG5B,IAFFqF,EAAqBrF,EAArBqF,sBACAC,EAAatF,EAAbsF,cAEA,OAAInH,IAAAA,QAAUmH,GACLnH,IAAAA,OAASkH,GAAuB,SAAAH,GAAU,OAAK/G,IAAAA,IAAMA,IAAAA,KAAOmH,GAAe,SAAAC,GAAE,OAAIA,EAAGjE,KAAO4D,EAAWxE,MAAM,IAAG,SAAS,IAE1H2E,CACT,CAEO,SAASG,EAA0BpF,GAOtC,IANF1B,EAAU0B,EAAV1B,WACAsG,EAAY5E,EAAZ4E,aACAzF,EAAea,EAAfb,gBACAC,EAAYY,EAAZZ,aACA+E,EAAanE,EAAbmE,cACAU,EAAK7E,EAAL6E,MAEMQ,EAAoBtF,EAAqB,CAC7CZ,gBAAAA,EACAC,aAAAA,IAEIkG,EAAiBnH,EAAc,CACnCD,IAAKmH,EACL/G,WAAAA,KACI,CAAC,EAEDiH,EAAgCrB,EAAoB,CACxD5F,WAAAA,EAAYc,aAAAA,EAAcD,gBAAAA,EAAiBgF,cAAAA,IAGvCe,EAAgBI,EAAeJ,eAAiBK,EActD,OAL6BP,EAAwB,CACnDC,sBAR4BN,EAAyB,CACrDC,aAAAA,EACAzF,gBAAAA,EACAC,aAAAA,EACAyF,MAAAA,IAKAK,cAAAA,GAIJ,CAEO,IAAMM,EAAiC,SAAHtF,GAQpC,IAPL5B,EAAU4B,EAAV5B,WACAsG,EAAY1E,EAAZ0E,aACAzF,EAAee,EAAff,gBACAC,EAAYc,EAAZd,aACA+E,EAAajE,EAAbiE,cACAsB,EAA0BvF,EAA1BuF,2BACAZ,EAAK3E,EAAL2E,MAEMQ,EAAoBtF,EAAqB,CAC7CZ,gBAAAA,EACAC,aAAAA,IAGIkG,GAAiBI,EAAAA,EAAAA,UAAQ,kBAAMvH,EAAc,CACjDD,IAAKmH,EACL/G,WAAAA,KACI,CAAC,CAAC,GAAE,CAAC+G,EAAmB/G,IAExBqH,GAAsBD,EAAAA,EAAAA,UAAQ,kBAAMlH,EAAqB,CAC7DN,IAAKmH,EACL/G,WAAAA,GACA,GAAE,CAAC+G,EAAmB/G,IAEDsH,EAAsBN,EAArCJ,cACFK,EAAgCrB,EAAoB,CACxD5F,WAAAA,EAAYc,aAAAA,EAAcD,gBAAAA,EAAiBgF,cAAAA,IAE7C0B,GAA0CC,EAAAA,EAAAA,UAASF,GAAqBL,GAA8BQ,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAA/FX,EAAaa,EAAA,GAAEE,EAAgBF,EAAA,GAEhCd,GAAwBS,EAAAA,EAAAA,UAC5B,kBAAMf,EAAyB,CAC7BC,aAAAA,EACAzF,gBAAAA,EACAC,aAAAA,EACAyF,MAAAA,GACA,GACF,CAACzF,EAAcwF,EAAczF,EAAiB0F,IAG1CqB,GAAuBR,EAAAA,EAAAA,UAAQ,kBAAMV,EAAwB,CACjEC,sBAAAA,EACAC,cAAAA,GACA,GAAE,CAACD,EAAuBC,IAEtBiB,GAAqBT,EAAAA,EAAAA,UAAQ,WACjC,OAAK3H,IAAAA,QAAUmH,GAGRnH,IAAAA,IAAMkH,GAAuB,SAAAH,GAAU,MAAK,CAAE5D,GAAI4D,EAAWxE,OAAQ8F,OAAQrI,IAAAA,IAAMA,IAAAA,KAAOmH,GAAe,SAAAC,GAAE,OAAIA,EAAGjE,KAAO4D,EAAWxE,MAAM,IAAG,UAAW,IAFtJvC,IAAAA,IAAMkH,GAAuB,SAAAH,GAAU,MAAK,CAAE5D,GAAI4D,EAAWxE,OAAQ8F,QAAQ,EAAO,GAG/F,GAAG,CAACnB,EAAuBC,IAErBmB,GAAuBC,EAAAA,EAAAA,cAAY,SAACC,GACxCZ,EAAoB,CAAET,cAAeqB,IACrCN,EAAiBM,EACnB,GAAG,CAACZ,IAEJ,OAAIF,EACK,CACLS,qBAAsB,GACtBC,mBAAoB,GACpBE,qBAAsBtI,IAAAA,MAInB,CACLmI,qBAAAA,EACAC,mBAAAA,EACAE,qBAAAA,EAEJ,E,YC/JMG,EAAqB,CAAC,EAAG,EAAG,EAAG,GAC/BC,EAA+B,CAAC,EAAG,GAE5BC,EAAuC,SAAHtI,GAAA,IAC/CgC,EAAWhC,EAAXgC,YAAW,MACN,CACLuG,sBAAuBF,EACvBnE,SAASsE,EAAAA,EAAAA,gBAAexG,EAAa,GACtC,EAEYyG,EAA4C,SAAHpI,GAI/C,IAHLmC,EAAcnC,EAAdmC,eACAC,EAAepC,EAAfoC,gBACAzB,EAAYX,EAAZW,aAEM0H,EAAsBC,SAASC,cAAc,sBAEnD,OAAAnI,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACK+B,GAAc,IACjBC,gBAAAA,EACAiG,oBAAAA,EACA1H,aAAAA,GAEJ,EAEa6H,EAAoC,SAAH/H,GAIvC,IAHL0B,EAAc1B,EAAd0B,eACAR,EAAWlB,EAAXkB,YACAhB,EAAYF,EAAZE,aAEM8H,GAAsB7E,EAAAA,EAAAA,YAAWjC,EAAamC,EAAAA,aAAaC,OAAQpD,GACzE,SAAKwB,IACC7C,IAAAA,QAAU6C,EAAe0B,UAC1BvE,IAAAA,KAAO6C,EAAe0B,SAAS,SAAAI,GAAM,OAAKwE,EAAoB1D,SAASd,EAAO,KAC5C,IAAlC9B,EAAe0B,QAAQgB,SACtBvF,IAAAA,QAAU6C,EAAe+F,wBAC1B/F,EAAe+F,sBAAsBrD,OAAS,GAC9CvF,IAAAA,KAAO6C,EAAe+F,uBAAuB,SAAAQ,GAAK,OAAKX,EAAmBhD,SAAS2D,EAAM,IAMhG,EC3CMC,EAAwB,SAEjBC,EAA0B,SAAA7F,GAAI,MAAK,CAAC,CAC/CtD,IAAK,SACL4D,YAAaN,EAAKO,UAAUC,WAC3B,CACD9D,IAAK,cACL4D,YAAaN,EAAKO,UAAUC,gBAC3B,CACD9D,IAAK,MACL4D,YAAaN,EAAKO,UAAUC,QAC3B,CACD9D,IAAK,QACL4D,YAAaN,EAAKO,UAAUC,UAC3B,CACD9D,IAAK,aACL4D,YAAaN,EAAKO,UAAUC,aAC3B,CACD9D,IAAK,uBACL4D,YAAaN,EAAKO,UAAUC,UAC3B,CACD9D,IAAK,wBACL4D,YAAaN,EAAKO,UAAUC,eAC5B,EAEK,SAASsF,EAAqBlJ,GAMjC,IALFe,EAAef,EAAfe,gBACAyB,EAAcxC,EAAdwC,eACAC,EAAezC,EAAfyC,gBACAW,EAAIpD,EAAJoD,KACApC,EAAYhB,EAAZgB,aAEMiD,EAAagF,EAAwB7F,GACvC+F,EAAuBxJ,IAAAA,IAAM6C,EAAgB,UAOjD,OANK7C,IAAAA,SAAWwJ,IACVlF,EAAWkB,MAAK,SAAAb,GAAM,OAAIA,EAAOxE,MAAQqJ,CAAoB,MAEjEA,EAAuBH,GAGlB,CACLG,qBAAAA,EACA1G,gBAAAA,EACA1B,gBAAAA,EACAC,aAAAA,EAEJ,CAEO,IAAMoI,EAA4C,SAAH/I,GAAA,IACpDmC,EAAcnC,EAAdmC,eACAC,EAAepC,EAAfoC,gBACAW,EAAI/C,EAAJ+C,KAAI,MACC,CACLR,QAAS,CACP,CACEa,MAAO4F,EAAAA,uBAAuBC,WAC9B5F,YAAaN,EAAKO,UAAUC,gBAE9B,CACEH,MAAO4F,EAAAA,uBAAuBE,WAC9B7F,YAAaN,EAAKO,UAAUC,gBAE9B,CACEH,MAAO4F,EAAAA,uBAAuBG,aAC9B9F,YAAaN,EAAKO,UAAUC,kBAE9B,CACEH,MAAO4F,EAAAA,uBAAuBI,SAC9B/F,YAAaN,EAAKO,UAAUC,cAGhCN,qBAAuBd,GAAkBA,EAAekH,QAAWL,EAAAA,uBAAuBC,WAC1FzF,iBAAkB,SAACJ,GACjBhB,EAAgB,CACdiH,OAAQjG,GAEZ,EACD,EAEYkG,EAAsC,SAAAnH,GAAc,MAAK,CACpE8B,OAAQ9B,EAAe8B,OACvBsB,iBAAkBpD,EAAekH,OAClC,EAEYE,EAAiC,WAAH,MAAU,CACnDF,OAAQL,EAAAA,uBAAuBC,WAC/BhF,OAAQ0E,EACT,ECrFYa,EAAwC,SAAH7J,GAO3C,IANLwC,EAAcxC,EAAdwC,eACAC,EAAezC,EAAfyC,gBACAT,EAAWhC,EAAXgC,YACAjB,EAAef,EAAfe,gBACAC,EAAYhB,EAAZgB,aACAoC,EAAIpD,EAAJoD,KAEMW,EAAmBvB,GAAkBA,EAAeuB,iBAAoBC,EAAAA,mBACxEC,GAAaC,EAAAA,EAAAA,YAAQlC,EAAa,EAAGhB,GAAcqD,KAAI,SAAAC,GAAM,MAAK,CACtExE,IAAKwE,EACLZ,YAAaN,EAAKO,UAAUY,EAAAA,uBAAuBD,IACpD,IAGD,MAAO,CACLE,uBAH6BT,EAAgBM,KAAI,SAAAI,GAAM,OAAIR,EAAWS,MAAK,SAAAJ,GAAM,OAAIA,EAAOxE,MAAQ2E,CAAM,GAAC,IAI3GR,WAAAA,EACAxB,gBAAAA,EACA1B,gBAAAA,EACAC,aAAAA,EAEJ,EAEa8I,EAA0B,SAAHzJ,GAI7B,IAHLmC,EAAcnC,EAAdmC,eACAR,EAAW3B,EAAX2B,YACAhB,EAAYX,EAAZW,aAEMiE,GAAcf,EAAAA,EAAAA,YAAQlC,EAAa,EAAGhB,GAC5C,SAAKwB,GAC0C,IAA1CA,EAAeuB,gBAAgBmB,QAC/B1C,EAAeuB,gBAAgBoB,MAAK,SAAAV,GAAM,OAAKQ,EAAYG,SAASX,EAAO,IAMlF,EAEasF,EAA6B,WAAH,MAAU,CAC/ChG,gBAAiBC,EAAAA,mBAClB,ECDKtE,EAA4BC,IAAAA,UAAYC,EAAAA,IAA0B,SAACiG,EAAK/F,GAAG,OAAKA,CAAG,IAEzF,SAASkK,GAAchK,GAKnB,IACEiK,EACAC,EAEAC,EARJpJ,EAAef,EAAfe,gBACAC,EAAYhB,EAAZgB,aAAYoJ,EAAApK,EACZqK,UAAAA,OAAS,IAAAD,GAAQA,EAAAE,EAAAtK,EACjBuK,aAAAA,OAAY,IAAAD,GAAQA,EAIhBE,EAAwBzJ,EAG5B,OAAQA,GACN,IAAK,UAEHmJ,GADAD,EAAWQ,EAAAA,QAAIC,gBACMC,UACrB,MACF,IAAK,WAEC3J,IAAiBtB,EAA0ByB,gBAAkBH,IAAiBtB,EAA0B0B,KAC1GoJ,EAAwB,UAExBN,GADAD,EAAWQ,EAAAA,QAAIC,gBACMC,UACrBR,EAAc,CAAC,CACbT,OAAQ,CACN5J,IAAK,aACL2D,MAAO,CACLmH,MAAO,CACLC,GAAIlL,IAAAA,OAAS8K,EAAAA,QAAIK,gBAAiB,CAAC,aAAc,cAOzDZ,GADAD,EAAWQ,EAAAA,QAAIK,iBACMC,SAEvB,MACF,IAAK,WAEHb,GADAD,EAAWQ,EAAAA,QAAIO,iBACMC,SACrB,MACF,QACEhB,OAAW3H,EAGf,OAAI+H,EACK,CACLH,UAAWD,EAASiB,SACpBnK,gBAAAA,GAIAwJ,EACK,CACLL,UAAWD,EAASkB,YACpBpK,gBAAAA,GAIG,CACLmJ,UAAAA,EACAnJ,gBAAiByJ,EACjBL,YAAAA,EAEJ,CAEA,SAASiB,KACP,OAAOpB,GAAe,CACpBjJ,gBAAiB,YAErB,CAEA,SAASsK,KACP,OAAOrB,GAAe,CACpBjJ,gBAAiB,WAErB,CAEA,SAASuK,GAAyBvK,GAChC,OAAOiJ,GAAe,CACpBjJ,gBAAAA,EACAsJ,WAAW,GAEf,CAEA,SAASkB,GAAyBxK,GAChC,OAAOiJ,GAAe,CACpBjJ,gBAAAA,EACAwJ,cAAc,GAElB,CAEA,SAASiB,KACP,OAAOxB,GAAe,CACpBjJ,gBAAiB,YAErB,CAEO,SAAS0K,GAAqBpL,GAAyE,IAAtE2B,EAAW3B,EAAX2B,YAAW0J,EAAArL,EAAEsL,gBAAAA,OAAe,IAAAD,GAAQA,EAAAE,EAAAvL,EAAEwL,oBAAAA,OAAmB,IAAAD,GAAQA,EACjGE,EAA6BnM,IAAAA,IAAMqC,EAAa,sCAAsC,GAEtF+J,EAA6B,CACjCrM,EAA0BsM,KAC1BtM,EAA0BuM,QAC1BvM,EAA0BwM,SAC1BxM,EAA0ByM,iBAC1BzM,EAA0B0M,SAC1B1M,EAA0B2M,MAC1B3M,EAA0BwB,MAC1BxB,EAA0B0B,IAC1B1B,EAA0B2B,UAGtBiL,EAAmDR,EAA6BnM,IAAAA,QAAUoM,EAA4BrM,EAA0B0M,UAAYL,EAC5JQ,EAA8CD,EAAiD5C,QAAO,SAAA8C,GAAI,OAAIA,IAAS9M,EAA0B0B,GAAG,IAEpJqL,EAAcd,EAAkB,CACpC,CACEe,SAAU,CAAC,WACXxK,OAAQ1D,EAAAA,GACR2H,KAAMvC,OACN+I,KAAMC,EAAAA,EAASC,MACfC,oBAAqB9C,GACrB+C,SAAS,IAMX,CACE,CACE7K,OAAQvD,EAAAA,GACRwH,KAAMvC,cACN+I,KAAMC,EAAAA,EAASI,MACfC,wBAAwB,EACxBH,oBAAqB9C,GACrB3H,qBAAsBiG,EACtB/F,kBAAmBsG,EACnBkE,SAAS,GAEX,CACE7K,OAAQrD,EAAAA,GACRqO,oBAAqB,CACnBtN,EAAAA,GAAyBsB,MACzBtB,EAAAA,GAAyBwB,IACzBxB,EAAAA,GAAyByB,SACzBzB,EAAAA,GAAyBuB,eACzBzB,EAA0BwB,MAC1BxB,EAA0B0B,IAC1B1B,EAA0B2B,SAC1B3B,EAA0ByB,gBAE5BgF,KAAMvC,kBACN+I,KAAMC,EAAAA,EAASC,MACfC,oBAAqB9C,GACrB+C,SAAS,GAEX,CACEL,SAAU,CAAC,YACXxK,OAAQtD,EAAAA,GACRsO,oBAAqBrB,EAAsBU,EAA8CD,EACzFnG,KAAMvC,aACN+I,KAAMC,EAAAA,EAASI,MACfC,wBAAwB,EACxBF,SAAS,GAEX,CACEL,SAAU,CAAC,WACXxK,OAAQpD,EAAAA,GACRqH,KAAMvC,YACN+I,KAAMC,EAAAA,EAASC,MACfC,oBAAqBzB,GACrBxI,uBAAwB2C,EACxBnD,qBAAsBkD,EACtBhD,kBAAmByC,EACnB+H,SAAS,GAEX,CACEL,SAAU,CAAC,YACXxK,OAAQ/C,EAAAA,GACR+N,oBAAqB,CACnBxN,EAA0ByB,eAC1BzB,EAA0B0B,IAC1B1B,EAA0B2B,SAC1B3B,EAA0ByB,gBAE5BgF,KAAMvC,YACN+I,KAAMC,EAAAA,EAASC,MACfC,oBAAqBtB,GAKrB3I,uBAAwB2C,EACxBnD,qBAAsBkD,EACtBhD,kBAAmByC,EACnB+H,SAAS,GAEX,CACEL,SAAU,CAAC,YACXxK,OAAQ5C,EAAAA,GACR6G,KAAMvC,wBACNkJ,oBAAqB1B,GACrB2B,SAAS,EACTJ,KAAMC,EAAAA,EAASC,OAEjB,CACEH,SAAU,CAAC,WACXxK,OAAQ3C,EAAAA,GACR2N,oBAAqB,CAACtN,EAAAA,GAAyBwB,KAC/C+E,KAAMvC,yBACNkJ,oBAAqBzB,GACrBxI,uBAAwB8G,EACxBtH,qBAAsBuH,EACtBmD,SAAS,EACTJ,KAAMC,EAAAA,EAASC,OAEjB,CACEH,SAAU,CAAC,YACXxK,OAAQ1C,EAAAA,GACR0N,oBAAqB,CACnBxN,EAA0ByB,eAC1BzB,EAA0B0B,IAC1B1B,EAA0B2B,SAC1B3B,EAA0ByB,gBAE5BgF,KAAMvC,yBACNkJ,oBAAqBtB,GACrBuB,SAAS,EACTJ,KAAMC,EAAAA,EAASC,OAEjB,CACEH,SAAU,CAAC,YACXxK,OAAQnD,EAAAA,GACRoH,KAAMvC,WACNkJ,oBAAqB1B,GACrBvI,uBAAwB2C,EACxBnD,qBAAsBkD,EACtBhD,kBAAmByC,EACnB+H,SAAS,EACTJ,KAAMC,EAAAA,EAASC,OAEjB,CACEH,SAAU,CAAC,UAAW,YACtBxK,OAAQ7C,EAAAA,GACR6N,oBAAqB,CACnBtN,EAAAA,GAAyBwB,IACzB1B,EAA0BsM,KAC1BtM,EAA0BuM,QAC1BvM,EAA0BwM,SAC1BxM,EAA0ByM,iBAC1BzM,EAA0B0M,SAC1B1M,EAA0B2M,MAC1B3M,EAA0BwB,MAC1BxB,EAA0B0B,IAC1B1B,EAA0B2B,SAC1B3B,EAA0ByB,gBAE5BgM,uBAAwB,CACtBvN,EAAAA,GAAyBwB,IACzB1B,EAA0BsM,KAC1BtM,EAA0BuM,QAC1BvM,EAA0BwM,SAC1BxM,EAA0ByM,iBAC1BzM,EAA0B0M,SAC1B1M,EAA0B2M,MAC1B3M,EAA0BwB,MAC1BxB,EAA0B0B,IAC1B1B,EAA0B2B,UAE5B8E,KAAMvC,sBACN+I,KAAMC,EAAAA,EAASC,MACfC,oBAAqBzB,GACrB0B,SAAS,GAEX,CACEL,SAAU,CAAC,UAAW,YACtBxK,OAAQlD,EAAAA,GACRkO,oBAAqB,CACnBtN,EAAAA,GAAyBsB,MACzBtB,EAAAA,GAAyBuB,eACzBvB,EAAAA,GAAyBwB,IACzBxB,EAAAA,GAAyByB,SACzBzB,EAAAA,GAAyBuB,eACzBvB,EAAAA,GAAyBwM,SACzBxM,EAAAA,GAAyBsM,SACzBxM,EAA0BwB,MAC1BxB,EAA0ByB,eAC1BzB,EAA0B0B,IAC1B1B,EAA0B2B,SAC1B3B,EAA0ByB,eAC1BzB,EAA0B0M,SAC1B1M,EAA0BwM,UAE5B/F,KAAMvC,WACN+I,KAAMC,EAAAA,EAASC,MACfC,oBAAqBxB,GACrBzI,uBAAwB2C,EACxBnD,qBAAsBkD,EACtBhD,kBAAmByC,EACnB+H,SAAS,GAEX,CACEL,SAAU,CAAC,UAAW,YACtBxK,OAAQhD,EAAAA,GACRgO,oBAAqB,CACnBtN,EAAAA,GAAyBsB,MACzBtB,EAAAA,GAAyBuB,eACzBvB,EAAAA,GAAyBwB,IACzBxB,EAAAA,GAAyByB,SACzBzB,EAAAA,GAAyBwM,SACzB1M,EAA0BwB,MAC1BxB,EAA0ByB,eAC1BzB,EAA0B0B,IAC1B1B,EAA0B2B,SAC1B3B,EAA0B0M,UAE5BjG,KAAMvC,uBACN+I,KAAMC,EAAAA,EAASC,MACfC,oBAAqBvB,GACrB1I,uBAAwB2C,EACxBnD,qBAAsBkD,EACtBhD,kBAAmByC,EACnB+H,SAAS,GAEX,CACE7K,OAAQjD,EAAAA,GACRiO,oBAAqB,CACnBtN,EAAAA,GAAyBuB,eACzBvB,EAAAA,GAAyBwB,IACzBxB,EAAAA,GAAyByB,SACzB3B,EAA0ByB,eAC1BzB,EAA0B0B,IAC1B1B,EAA0B2B,UAE5B8E,KAAMvC,UACN+I,KAAMC,EAAAA,EAASC,MACfC,oBAAqB9C,GACrB3H,qBAAsB0H,EACtBxH,kBAAmBuH,EACnBiD,SAAS,GAEX,CACEL,SAAU,CAAC,YACXxK,OAAQzD,EAAAA,GACRyO,oBAAqB,CACnBxN,EAA0B0B,IAC1B1B,EAA0B2B,UAE5B8E,KAAMvC,gBACN+I,KAAMC,EAAAA,EAASC,MACfC,oBAAqB9C,GACrB+C,SAAS,GAEX,CACEL,SAAU,CAAC,YACXxK,OAAQxD,EAAAA,GACRwO,oBAAqBrB,EAAsBE,EAA2BrC,QAAO,SAAA8C,GAAI,OAAIA,IAAS9M,EAA0B0B,GAAG,IAAI2K,EAC/H5F,KAAMvC,oBACN+I,KAAMC,EAAAA,EAASC,MACfE,SAAS,GAEX,CACEL,SAAU,CAAC,UAAW,YACtBxK,OAAQ9C,EAAAA,GACR+G,KAAMvC,cACN+I,KAAMC,EAAAA,EAASC,MACfK,oBAAqB,CACnBtN,EAAAA,GAAyBsB,MACzBtB,EAAAA,GAAyBuB,eACzBvB,EAAAA,GAAyBwB,IACzBxB,EAAAA,GAAyByB,SACzB3B,EAA0BwB,MAC1BxB,EAA0ByB,eAC1BzB,EAA0B0B,IAC1B1B,EAA0B2B,UAE5ByL,oBAAqB9C,GACrB+C,SAAS,GAEX,CACEL,SAAU,CAAC,YACXxK,OAAQzC,EAAAA,GACR0G,KAAMvC,GACN+I,KAAMC,EAAAA,EAASC,MACfE,SAAS,EACTG,oBAAqB,CACnBxN,EAA0BsM,KAC1BtM,EAA0BuM,QAC1BvM,EAA0BwM,SAC1BxM,EAA0ByM,iBAC1BzM,EAA0B0M,SAC1B1M,EAA0B2M,MAC1B3M,EAA0BwB,MAC1BxB,EAA0B0B,IAC1B1B,EAA0B2B,SAC1B3B,EAA0ByB,gBAE5BgM,uBAAwB,CACtBzN,EAA0BsM,KAC1BtM,EAA0BuM,QAC1BvM,EAA0BwM,SAC1BxM,EAA0ByM,iBAC1BzM,EAA0B0M,SAC1B1M,EAA0B2M,MAC1B3M,EAA0BwB,MAC1BxB,EAA0B0B,IAC1B1B,EAA0B2B,YAalC,OARAoL,EAAY9F,0BAA4B,SAACD,EAAY3F,EAAiBC,GAAY,IAAEyF,EAAK2G,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,IAAAA,UAAA,GAAQ,OAC7FzN,IAAAA,WAAa+G,EAAWqG,UAAYrG,EAAWqG,WAC9CpN,IAAAA,UAAY+G,EAAWqG,UAAYrG,EAAWqG,YAC/CrG,EAAWgG,UAAY/M,IAAAA,SAAW+G,EAAWgG,SAAU3L,QACrD0F,IAAUC,EAAWyG,2BACrBzG,EAAWwG,sBAAwBvN,IAAAA,SAAW+G,EAAWwG,oBAAqBlM,KAC5EyF,GAASC,EAAWyG,yBAA2BxN,IAAAA,SAAW+G,EAAWyG,uBAAwBnM,GAAgB,EAE9GyL,CACT,CCpdO,IAAMY,GAAkB,CAC7BC,SAAU,WACVC,QAAS,UACTC,SAAU,YAGL,SAASC,GAAmBC,GACjC,IACEC,EAEED,EAFFC,IACAC,EACEF,EADFE,WAEEC,EAASR,GAAgBC,SAO7B,OANIM,EACFC,EAASR,GAAgBG,UAChBG,GAAOlD,EAAAA,QAAIC,kBACpBmD,EAASR,GAAgBE,SAGpBM,CACT,C,iBCnBO,SAASC,GAAW9N,GAEvB,IADF+F,EAAa/F,EAAb+F,cAEA,OAAOgI,EAAAA,GAAAA,eAAc,CACnBC,WAAY,WAAF,OAAQjI,EAAcK,gBAAgByE,EAAE,EAClDoD,WAAY,WAAF,OAAQlI,EAAcmI,YAAYrD,EAAE,EAC9CsD,iBAAiB,GAChBpI,EAAcqI,KAAKC,oBAAqB,CAAC,0BAA0BC,YACxE,C,iBCAaC,GAAoB,SAAAC,GAAc,OAAI7O,IAAAA,MAAQ8O,GAAAA,UAAUC,2BAClEhF,QAAO,SAAA1J,GAAA,IAAG2O,EAAQ3O,EAAR2O,SAAQ,OAAOH,GAAkBG,CAAQ,IACnDC,OACAC,IAAI,OAAQ,KACZpL,OAAQ,EAEEqL,GAAqC,WAAH,OAASP,GAAkBQ,OAAOC,WAT5D,IASuF,EAGtGC,GAAgB,WACpB,IAAMC,EAAiBJ,KACvB,MAAuB,QAAnBI,EACK,EACqB,OAAnBA,EACF,EAEF,CACT,EAEaC,GAAwB,SAACC,GAOpC,IANA,IAAMC,EAAaJ,KACbC,EAAiBJ,KACjBQ,EAAmBF,EAAoBlK,OAEzCqK,EAhBmBC,KAAKC,OAAOV,OAAOW,YAbvB,KAGF,KA2BbC,EAAsBV,KACjBW,EAAI,EAAGA,EAAIN,EAAkBM,GAAK,EAAG,CAC5C,IACIC,EAAW,EAIf,GAHkB,UAFLT,EAAoBQ,GAExBjD,MAAwC,QAAnBuC,GAA+C,OAAnBA,IACxDW,EAAW,GAETF,GAAuBE,EACzBF,GAAuBE,MAClB,CAEL,IADAN,GAAoB,IACI,EACtB,OAAOK,EAETD,EAAsBN,EAAaQ,CACrC,CACF,CAEA,OAAOP,CACT,EAEaQ,GAAe,SAACC,EAASjN,EAAIkN,GACxC,IAAMjH,EAAQgH,EAAQE,QAAQnN,GAC9B,OAAOiG,EAAQiH,GAAgBjH,GAAS,CAC1C,E,+DCjDMmH,GAAoC,EACtCC,GAAkB,KAEf,SAASC,GAASpQ,GAGrB,IAFFqQ,EAAGrQ,EAAHqQ,IACA1C,EAAG3N,EAAH2N,IAEA,OAAKA,GAAQ0C,EAINC,GAAAA,YACJC,UACAC,SAASH,GACTpF,SACAuF,SAAS7C,GACT8C,KACA5B,IAAI,CACH6B,IAAK,GACLC,OAAO,IAERC,YACAC,MAAK,SAAAxQ,GAAQ,OAAAA,EAALoD,KAAiB,IAdnBqN,KAAAA,QAAgB,GAe3B,CAEA,IAAMC,GAAS,CACbC,SAAU,CACR,CACE7K,KAAM,yBACN1C,MAAO,wBACPwN,QAAS,CAAC,EACVC,SAAU,CACR,CACE/K,KAAM,yBACN1C,MAAO,0BAET,CACE0C,KAAM,aACN1C,MAAO,cAET,CACE0C,KAAM,aACN1C,MAAO,kBAOV,SAAS0N,GAAQrQ,GAMpB,IACEsQ,EACAC,EAPJtQ,EAAeD,EAAfC,gBACAuQ,EAAYxQ,EAAZwQ,aACAjB,EAAGvP,EAAHuP,IACA1C,EAAG7M,EAAH6M,IACAC,EAAU9M,EAAV8M,WAKA,OAAQ7M,GACN,IAAK,UACHqQ,EAAUG,GAAAA,EAAgBC,QAC1BH,EAAY,CAAC1D,GACb,MACF,IAAK,WACHyD,EAAUG,GAAAA,EAAgBE,SAC1BJ,EAAY,CAACzD,GACb,MACF,IAAK,WACHwD,EAAUG,GAAAA,EAAgBG,SAC1BL,EAAY,CAAChB,GAejB,MAVc,CACZsB,WAAYtB,EACZuB,UAAWjE,EACXC,WAAAA,EACAiE,aAAclS,IAAAA,OAAS2R,EAAazC,IAAI,mBAAoB,QAC5DiD,MAAOR,EAAazC,IAAI,SACxBuC,QAAAA,EACAC,UAAAA,EAIJ,CAEO,SAASU,GAA+BvQ,GAI3C,IAHF0I,EAAS1I,EAAT0I,UACA8H,EAAMxQ,EAANwQ,OACAhQ,EAAWR,EAAXQ,YAGMiQ,EAAuC,CAC3CC,qBAAqBC,EAAAA,GAAAA,UAAqB7P,EAAW8P,GAAAA,IAAcC,YAAarQ,GAFpE,IAKR4I,EAAQ,CACZV,UAAWA,EAAU,sCAAsCoI,MAAM,CAAEL,qCAAAA,IAAwCM,UAG7G,OAAOP,EAAO9H,EAAUsC,KAAKgG,YAAYC,WAAWC,QAAQ,CAC1D9H,MAAAA,GAEJ,CAEO,SAAS+H,GAAoB/Q,GAWhC,IAVFb,EAAea,EAAfb,gBACA6R,EAAsBhR,EAAtBgR,uBACAtB,EAAY1P,EAAZ0P,aACAtP,EAAWJ,EAAXI,YACA+D,EAAanE,EAAbmE,cACA/E,EAAYY,EAAZZ,aACA6R,EAAQjR,EAARiR,SACAxC,EAAGzO,EAAHyO,IACA1C,EAAG/L,EAAH+L,IACAC,EAAUhM,EAAVgM,WAEA,GAAIuC,IAAuC,YAApBpP,EACrB,OAAOoP,GAGT,IAAM2C,EAAQ3B,GAAS,CACrBpQ,gBAAAA,EACAuQ,aAAAA,EACAjB,IAAAA,EACA1C,IAAAA,EACAC,WAAAA,IAGF,IAAKkF,EAAMlB,UACT,OAAOd,KAAAA,QAAgB,IAGzB8B,EAAuBG,YAAYhC,IACnC,IAAMiC,EAAkBJ,EAAuBK,uBAAuBC,SAChEC,EAAkBH,EAAgBC,uBAAuBC,SAazDE,EAXc,IAAIC,GAAAA,IAAsB,CAC5CP,MAAAA,EACAE,gBAAAA,EACAG,gBAAAA,EACAG,UAAWhC,EAAazC,IAAI,uBAC5B7M,YAAAA,EACAuR,KAAMxN,EAAcmI,YAAYsF,SAChCX,SAAAA,EACAY,QAASrB,GAAAA,IAAcsB,WAGSC,WAAW,CAC3CF,QAASrB,GAAAA,IAAcsB,SACvB1S,aAAAA,EACA0P,IAAKR,GACL0D,eAAe,IAOjB,MAJwB,YAApB7S,IACFoP,GAAkBiD,GAGbA,CACT,CAEO,SAASS,KACd1D,GAAkB,IACpB,CC9KO,SAAS2D,GAAiB9T,GAU7B,IATFkK,EAASlK,EAATkK,UACAR,EAAM1J,EAAN0J,OACA9G,EAAO5C,EAAP4C,QACAmR,EAAc/T,EAAd+T,eACAC,EAAWhU,EAAXgU,YACAhC,EAAMhS,EAANgS,OACAiC,EAAQjU,EAARiU,SACAjS,EAAWhC,EAAXgC,YACAhB,EAAYhB,EAAZgB,aAEA,OAAOgT,EAAYnD,MAAK,SAAAxN,GAAS,OAAI6Q,EAAAA,EAAAA,eAAc,CACjDhK,UAAAA,EACA7G,UAAAA,EACAqG,OAAAA,EACA9G,QAAAA,EACAoP,OAAAA,EACAiC,SAAAA,EACAF,eAAAA,EACA/R,YAAAA,EACAhB,aAAAA,GACA,GACJ,CC6BA,SAASmT,GAAiBnU,GAOtB,IANF+B,EAAM/B,EAAN+B,OACAhB,EAAef,EAAfe,gBACAC,EAAYhB,EAAZgB,aACAd,EAAUF,EAAVE,WACA2C,EAAsB7C,EAAtB6C,uBACAb,EAAWhC,EAAXgC,YAEMQ,EAAiBX,EAA6B,CAClDE,OAAAA,EACAhB,gBAAAA,EACAC,aAAAA,EACAd,WAAAA,EACA8B,YAAAA,IAGEY,EAAUJ,EAId,OAHII,GAAWC,IACbD,EAAUC,EAAuBL,IAE5BI,CACT,CAEO,SAASwR,GAA4B/T,GAYxC,IAXFqJ,EAAMrJ,EAANqJ,OACA1I,EAAYX,EAAZW,aACAqT,EAAOhU,EAAPgU,QACAC,EAAejU,EAAfiU,gBACApU,EAAUG,EAAVH,WACAqU,EAAUlU,EAAVkU,WACAxO,EAAa1F,EAAb0F,cACAiM,EAAM3R,EAAN2R,OACAhQ,EAAW3B,EAAX2B,YACAsP,EAAYjR,EAAZiR,aACAsB,EAAsBvS,EAAtBuS,uBAEA4B,EAEID,EAAWjP,OADbmP,EAAGD,EAAHC,IAAKpE,EAAGmE,EAAHnE,IAAK1C,EAAG6G,EAAH7G,IAAKC,EAAU4G,EAAV5G,WAOX7M,EAAkB0M,GALV,CACZnI,OAAQ,CACNmP,IAAAA,EAAKpE,IAAAA,EAAK1C,IAAAA,EAAKC,WAAAA,EAAY8G,UAJOF,EAATE,YAOoBpP,QAC3C0O,EAAc,IAAIM,EAAgB,CAAEK,MAAAA,EAAAA,IAASC,QAC7CpO,EAAeiF,GAAsB,CACzCzJ,YAAAA,IAGIoN,EAAsBpI,EAA2B,CACrD9G,WAAAA,EACAsG,aAAAA,EACAzF,gBAAAA,EACAC,aAAAA,EACA+E,cAAAA,EACAU,OAAO,IAGHsJ,EAAUpQ,IAAAA,IAAMyP,EAAqB,UACvCyF,EAAmB1F,GAAsBC,GACvC0F,EAA0BhF,GAAaC,EAASpR,EAAAA,GAAmBkW,GACnEE,EAAqBjF,GAAaC,EAAS9Q,EAAAA,GAAc4V,GACzDG,EAA6BlF,GAAaC,EAASlR,EAAAA,GAAuBgW,GAC1EI,EAA2BnF,GAAaC,EAASjR,EAAAA,GAAoB+V,GACrEK,EAAsBpF,GAAaC,EAAS/Q,EAAAA,GAAmB6V,GAC/DM,EAAyBrF,GAAaC,EAAS7Q,EAAAA,GAAmB2V,GAClEO,EAA0BtF,GAAaC,EAAS3Q,EAAAA,GAAmByV,GACnEQ,EAAiCvF,GAAaC,EAAS1Q,EAAAA,GAA0BwV,GACjFS,EAAiCxF,GAAaC,EAASxQ,EAAAA,GAA0BsV,GAEjFd,EAAiB,WAAH,OAASpU,IAAAA,IAAMyP,GAAqB,SAAArN,GAAM,OAAIW,EAA+B,CAC/FX,OAAAA,EACAhB,gBAAAA,EACAC,aAAAA,EACAd,WAAAA,EACA8B,YAAAA,GACA,GAAE,EAWJ,GAVA+M,OAAOwG,oDAAsD,CAC3DxT,OAAQgS,IACR/S,aAAAA,EACA6T,iBAAAA,EACAK,oBAAAA,EACAC,uBAAAA,EACAzF,YAAaX,OAAOW,YACpBV,WAAYD,OAAOC,YAGjB6F,GAAoB,EACtBR,QADF,CAKA,IAAMxB,EAAW/E,GAAY,CAC3B/H,cAAAA,IAGIyP,EAAuB,YAC3BX,GAAoB,IACI,GACtBR,GAEJ,EA4EA,GAzEIS,GAAkD,OAAvBrK,EAAAA,QAAIC,gBACjCsJ,EACGnD,MAAK,SAACxN,GACL,IAAMoS,GAA8BC,EAAAA,EAAAA,qBAAoB,CACtD3U,gBAAiB,UACjBmJ,UAAWO,EAAAA,QAAIC,eAAeC,UAC9BtH,UAAAA,EACA0Q,eAAAA,EACA/B,OAAAA,EACAtI,OAAAA,EACAuK,SAAAA,EAAAA,EACAjS,YAAAA,EACAhB,aAAAA,IAEI2U,GAA0BC,EAAAA,EAAAA,4BAA2B,CACzD7B,eAAAA,EACA7J,UAAWO,EAAAA,QAAIC,eAAeC,UAC9BkL,OAAQxS,EACRqG,OAAAA,EACA1I,aAAAA,KAGF8U,EAAAA,EAAAA,IAAY,GAADxU,OAAI3C,EAAAA,GAAiB,oBAAoB8W,IACpDK,EAAAA,EAAAA,IAAY,GAADxU,OAAI3C,EAAAA,GAAiB,gBAAgBgX,GAEhDH,GACF,IAGAT,GAA6C,OAAvBtK,EAAAA,QAAIC,gBAC5BsJ,EACGnD,MAAK,SAACxN,GACL,IAAM0S,GAAyBL,EAAAA,EAAAA,qBAAoB,CACjD3U,gBAAiB,UACjBmJ,UAAWO,EAAAA,QAAIC,eAAeC,UAC9BtH,UAAAA,EACA0Q,eAAAA,EACA/B,OAAAA,EACAtI,OAAAA,EACAuK,SAAAA,EAAAA,EACAjS,YAAAA,EACAhB,aAAAA,KAGF8U,EAAAA,EAAAA,IAAY7W,EAAAA,GAAc8W,GAE1BP,GACF,IAGAR,KACFgB,EAAAA,EAAAA,cAAa,CACXnD,SAAAA,IAEFzC,GAAU,CACRzC,IAAAA,EACA0C,IAAAA,IAEFsC,GAAqB,CACnB5R,gBAAAA,EACA6R,uBAAAA,EACAtB,aAAAA,EACAtP,YAAAA,EACA+D,cAAAA,EACA/E,aAAAA,EACA6R,SAAAA,EACAxC,IAAAA,EACA1C,IAAAA,EACAC,WAAAA,IAEF4H,KAGEP,EAA0B,CAC5B,IACMrS,EAAUuR,GAAkB,CAChCpS,OAFaqN,EAAoB1K,MAAK,SAAAuR,GAAC,OAAIA,EAAE/T,SAAWpD,EAAAA,EAAkB,IAG1EiC,gBAAAA,EACAC,aAAAA,EACAd,WAAAA,EACA2C,uBAAwB2C,EACxBxD,YAAAA,IAGIkU,EAAiBpC,GAAkB,CACvC5J,UAAWO,EAAAA,QAAIC,eAAeC,UAC9BjB,OAAAA,EACA9G,QAAAA,EACAmR,eAAAA,EACAC,YAAAA,EACAhC,OAAAA,EACAiC,SAAAA,EAAAA,EACAjS,YAAAA,EACAhB,aAAAA,KAGF8U,EAAAA,EAAAA,IAAYhX,EAAAA,GAAoBoX,GAEhCV,GACF,CAEA,GAAIN,EAAqB,CACvB,IACMtS,EAAUuR,GAAkB,CAChCpS,OAFaqN,EAAoB1K,MAAK,SAAAuR,GAAC,OAAIA,EAAE/T,SAAWlD,EAAAA,EAAiB,IAGzE+B,gBAAAA,EACAC,aAAAA,EACAd,WAAAA,EACA2C,uBAAwB2C,EACxBxD,YAAAA,IAGImU,EAAsBrC,GAAkB,CAC5C5J,UAAWO,EAAAA,QAAIC,eAAeQ,SAC9BxB,OAAAA,EACA9G,QAAAA,EACAoR,YAAAA,EACAhC,OAAAA,EACAiC,SAAAA,EAAAA,EACAjS,YAAAA,EACAhB,aAAAA,KAGF8U,EAAAA,EAAAA,IAAY9W,EAAAA,GAAmBmX,GAE/BX,GACF,CAEA,GAAIL,EAAwB,CAC1B,IACMvS,EAAUuR,GAAkB,CAChCpS,OAFaqN,EAAoB1K,MAAK,SAAAuR,GAAC,OAAIA,EAAE/T,SAAWhD,EAAAA,EAAiB,IAGzE6B,gBAAAA,EACAC,aAAAA,EACAd,WAAAA,EACA2C,uBAAwB2C,EACxBxD,YAAAA,IAGIoU,EAA0BtC,GAAkB,CAChD5J,UAAWO,EAAAA,QAAIC,eAAeS,YAC9BzB,OAAAA,EACA9G,QAAAA,EACAoR,YAAAA,EACAhC,OAAAA,EACAiC,SAAAA,EAAAA,EACAjS,YAAAA,EACAhB,aAAAA,KAGF8U,EAAAA,EAAAA,IAAY5W,EAAAA,GAAmBkX,GAE/BZ,GACF,CAEA,GAAIJ,EAAyB,CAC3B,IAAMiB,GAAaC,EAAAA,EAAAA,+BAEbC,GAAoBF,EAAWzL,QAErCyL,EAAWzL,OAAQ4L,EAAAA,EAAAA,IAAaH,EAAWzL,MAAOxL,EAAAA,KAElD0W,EAAAA,EAAAA,IAAY1W,EAAAA,GAAmBmX,IAE/Bf,GACF,CAEA,GAAIH,EAAgC,EAClCW,EAAAA,EAAAA,cAAa,CACXnD,SAAAA,IAGF,IAAM4D,GCxUH,SAAoCzW,GAYvC,IAXFkK,EAASlK,EAATkK,UAIA6J,EAAc/T,EAAd+T,eACArK,EAAM1J,EAAN0J,OACAsK,EAAWhU,EAAXgU,YACAhC,EAAMhS,EAANgS,OACAiC,EAAQjU,EAARiU,SACAjS,EAAWhC,EAAXgC,YACAhB,EAAYhB,EAAZgB,aAEA,OAAOgT,EAAYnD,MAAK,SAAAxN,GAAS,OAAIqT,EAAAA,EAAAA,yBAAwB,CAC3DxM,UAAAA,EACA7G,UAAAA,EAIA2O,OAAAA,EACAiC,SAAAA,EACAF,eAAAA,EACArK,OAAAA,EACA1H,YAAAA,EACAhB,aAAAA,GACA,GACJ,CD8SiC2V,CAA4B,CACvDzM,UAAWO,EAAAA,QAAIC,eAAeC,UAC9BjB,OAAAA,EACAqK,eAAAA,EACAC,YAAAA,EACAhC,OAAAA,EACAiC,SAAAA,EAAAA,EACAjS,YAAAA,EACAhB,aAAAA,KAGF8U,EAAAA,EAAAA,IAAYzW,EAAAA,GAA0BoX,IAEtCjB,GACF,CAEIF,GACFtB,EAAYnD,MAAK,SAACxN,GAChB,IAAMuT,GAAuBC,EAAAA,EAAAA,iBAAgB,CAC3C3M,UAAWO,EAAAA,QAAIC,eAAeC,UAC9BtH,UAAAA,EACAqG,OAAAA,EACAsI,OAAAA,EACAiC,SAAAA,EAAAA,EACAF,eAAAA,EACA/R,YAAAA,EACAhB,aAAAA,KAGF8U,EAAAA,EAAAA,IAAYvW,EAAAA,GAA0BqX,GAEtCpB,GACF,GA1NF,CA4NF,C,iBEvWasB,GAAwC,SAAH9W,GAI3C,IAHLwC,EAAcxC,EAAdwC,eACAC,EAAezC,EAAfyC,gBACAzB,EAAYhB,EAAZgB,aAEImI,EAAuBxJ,IAAAA,IAAM6C,EAAgB,UAOjD,OANK7C,IAAAA,SAAWwJ,IACV4N,GAAAA,EAAe3R,SAAS+D,KAE5BA,EAAuBxJ,IAAAA,MAAQoX,GAAAA,IAG1B,CACL5N,qBAAAA,EACA1G,gBAAAA,EACAzB,aAAAA,EAEJ,EClBO,SAASgW,GAA2ChX,GAKzD,MAAO,CACLiX,kBALejX,EAAjBiX,kBAME/H,eALYlP,EAAdkP,eAMElO,aALUhB,EAAZgB,aAOF,CAEO,SAASkW,GAAiD7W,GAE7D,IADF+C,EAAI/C,EAAJ+C,KAEA,MAAQ,CACNR,QAAS,CACP,CACEa,MAAO0T,EAAAA,uBAAuB7N,WAC9B5F,YAAaN,EAAKO,UAAUC,gBAE9B,CACEH,MAAO0T,EAAAA,uBAAuB5N,WAC9B7F,YAAaN,EAAKO,UAAUC,gBAE9B,CACEH,MAAO0T,EAAAA,uBAAuB3N,aAC9B9F,YAAaN,EAAKO,UAAUC,mBAGhCN,qBAAsB6T,EAAAA,uBAAuB7N,WAE7CzF,iBAAkBlE,IAAAA,KAEtB,CCtCO,SAASyX,GAA0BpX,GAIxC,MAAO,CACLe,gBAJaf,EAAfe,gBAKEC,aAJUhB,EAAZgB,aAMF,C,6BCNA,SAASqW,GAAqBnX,EAAYoX,GACxC,IAAMrX,EAAgBC,EAAW+F,yBAAyBqR,GAE1D,OAAO3X,IAAAA,IAAMM,EAAe,OAC9B,CAEO,SAASsX,GAAyBvX,GAA0D,IAAvDE,EAAUF,EAAVE,WAAYoX,EAActX,EAAdsX,eAAgBE,EAAsBxX,EAAtBwX,uBAChEC,EAAoBJ,GAAqBnX,EAAYoX,GAE3D,OAAI3X,IAAAA,IAAM8X,EAAmBD,GACpBC,EAAkBD,GAGpB,IACT,CAEA,SAASE,GAAkBC,EAAwBC,GACjD,OAAID,GAA0BhY,IAAAA,IAAMgY,EAAwB,SACzChY,IAAAA,KAAOgY,EAAuBE,OAAO,SAAAC,GAAI,OAAIA,EAAKhV,KAAO8U,CAAM,IAI3E,IACT,CAEO,SAASG,GAAyBJ,EAAwBC,GAC/D,IAAMpV,EAAiBkV,GAAkBC,EAAwBC,GAEjE,OAAOjY,IAAAA,IAAM6C,EAAgB,UAC/B,CAEO,SAASwV,GAAoB3X,GAMhC,IALFH,EAAUG,EAAVH,WACAoX,EAAcjX,EAAdiX,eACAE,EAAsBnX,EAAtBmX,uBACAI,EAAMvX,EAANuX,OACAK,EAAW5X,EAAX4X,YAEMC,EAAyBX,GAA0B,CAAErX,WAAAA,EAAYoX,eAAAA,EAAgBE,uBAAAA,IACjFW,EAAoBT,GAAkBQ,EAAwBN,GAC9DC,EAAQlY,IAAAA,IAAMuY,EAAwB,QAAS,IACjDE,EAAW,GAKbA,EAHGD,EAGQxY,IAAAA,IAAMkY,GAAO,SAACC,GACvB,OAAIA,EAAKhV,KAAO8U,GACdnX,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACKqX,GAAI,IACPlV,QAASqV,IAINH,CACT,IAXQ,GAAAxW,QAAA+W,EAAAA,GAAAA,GAAOR,GAAK,CAAE,CAAE/U,GAAI8U,EAAQhV,QAASqV,KAc/C,IAAMK,GAAyB7X,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAC1ByX,GAAsB,IACzBL,MAAOO,IAGHX,EAAoBJ,GAAqBnX,EAAYoX,GAErDiB,GAAoB9X,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACrBgX,GAAiB,IAAAe,EAAAA,GAAAA,GAAA,GACnBhB,EAAyBc,IAG5BpY,EAAWuY,kBAAkB,CAC3B9X,KAAM4X,EACN3X,KAAM0W,GAEV,CC1EO,SAASoB,GAA2BxY,GACzC,IAAAyY,EAA0CC,EAAAA,UAAe,GAAMC,GAAAjR,EAAAA,EAAAA,GAAA+Q,EAAA,GAAxDG,EAAaD,EAAA,GAAEE,EAAgBF,EAAA,GAQtC,OANAD,EAAAA,WAAgB,WACd1Y,EAAW8Y,aAAanI,MAAK,WAC3BkI,GAAiB,EACnB,GACF,GAAG,CAAC7Y,IAEG4Y,CACT,C,0ECMI1V,EACA6V,E,yGAbJ,SAASC,IACFC,KAAKC,sBACRD,KAAKE,cACLF,KAAKG,WAAWC,KAAK,CAAEC,kBAAwC,IAAtBL,KAAKrJ,eAC9CqJ,KAAKC,qBAAsB,EAC3BD,KAAKM,QAAQ,YAAaN,KAAKjX,QAC3BiX,KAAKO,aACPP,KAAKO,YAAYP,KAAKjX,QAG5B,CAKO,IAAMyX,EAAQ,SAAAC,GACnB,SAAAD,EAAY/W,GAAU,IAADiX,EAkBhB,OAlBgBC,EAAAA,EAAAA,GAAA,KAAAH,GACnBvW,EAAOR,EAAQmX,KAAK3W,KACpB6V,EAAkBrW,EAAQmX,KAAKd,iBAC/BY,GAAAG,EAAAA,EAAAA,GAAA,KAAAL,EAAA,CAAMha,IAAAA,OAAS,CAAC,EAAGiD,EAAS,CAAEqX,cAAc,OACvCF,KAAOnX,EAAQmX,KACpBF,EAAKK,UAAYtX,EAAQsX,UACzBL,EAAK3X,OAASU,EAAQV,OACtB2X,EAAK/J,aAAelN,EAAQkN,aAC5B+J,EAAKH,YAAc9W,EAAQ8W,YAC3BG,EAAKM,eAAevX,GAEpBiX,EAAKO,GAAG,YAAY,WAClBP,EAAKQ,UAAW,EACZR,EAAKS,eACPpB,EAAUqB,KAAIV,GAEdA,EAAKW,WAET,IAAGX,CACL,CAAC,OAAAY,EAAAA,EAAAA,GAAAd,EAAAC,IAAAc,EAAAA,EAAAA,GAAAf,EAAA,EAAA7Z,IAAA,iBAAA2D,MAED,SAAczD,GAAwB,IAArBsZ,EAAUtZ,EAAVsZ,WAAYnT,EAAInG,EAAJmG,KACtBgT,KAAKG,aACRH,KAAKG,WAAaA,EAAWqB,YAAYxU,GACzCgT,KAAKG,WAAWsB,WAChBzB,KAAKC,qBAAsB,EAE/B,GAAC,CAAAtZ,IAAA,qBAAA2D,MAED,WACO0V,KAAKC,qBACRD,KAAKG,WAAWuB,YAEpB,GAAC,CAAA/a,IAAA,gBAAA2D,MAED,WACO0V,KAAKC,qBACRD,KAAKG,WAAWwB,eAEpB,GAAC,CAAAhb,IAAA,mBAAA2D,MAED,WACE0V,KAAKmB,gBAAiB,EAClBnB,KAAKkB,UACPnB,EAAUqB,KAAKpB,KAEnB,GAAC,CAAArZ,IAAA,YAAA2D,MAED,WAAyB,IAAfsX,EAAE3N,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAG+L,KAAK4B,GACb5B,KAAK6B,UACJrS,SAASsS,gBAAgBC,SAASH,GACpC5B,KAAK6B,SAAUG,EAAAA,EAAAA,aAAYJ,EAAI3X,EAAKO,UAAU,YAAY,OAAMrB,EAAW,IAClEqG,SAASsS,gBAAgBC,SAASvb,IAAAA,MAAQwZ,KAAKe,cACxDf,KAAK6B,SAAUG,EAAAA,EAAAA,aAAYhC,KAAKe,UAAW9W,EAAKO,UAAU,YAAY,OAAMrB,EAAW,KAG7F,GAAC,CAAAxC,IAAA,0BAAA2D,MAED,WACE,IAAQqH,EAAoBqO,KAAKvW,QAAzBkI,gBACR,OAAOA,IAAwD,KAApCA,EAAgBsQ,iBAA8D,qBAApCtQ,EAAgBsQ,gBACvF,GAAC,CAAAtb,IAAA,cAAA2D,MAED,WACM0V,KAAK6B,UACP7B,KAAK6B,UACL7B,KAAK6B,QAAU,KAEnB,GAAC,CAAAlb,IAAA,cAAA2D,MAED,SAAY4X,GAIV,OAHIA,EAAMC,gBACRnC,KAAKoC,EAAE,qBAAqB,GAAGC,QAE1BC,EAAAA,QAAQC,WAAWvC,KAAMkC,EAClC,GAAC,CAAAvb,IAAA,WAAA2D,MAED,SAASkY,GACPxC,KAAKyC,oBAAsBjc,IAAAA,SAAWgc,EAAU,KAChDxC,KAAK0C,kBAAoBF,EACzB5M,OAAO+M,iBAAiB,SAAU3C,KAAKyC,qBACvC3C,EAAgBmB,GAAG,sBAAuBjB,KAAK0C,mBAC/C5C,EAAgBmB,GAAG,qBAAsBjB,KAAK0C,kBAChD,GAAC,CAAA/b,IAAA,SAAA2D,MAED,WACM0V,KAAKyC,qBACP7M,OAAOgN,oBAAoB,SAAU5C,KAAKyC,qBAGxCzC,KAAK0C,oBACP5C,EAAgB+C,IAAI,sBAAuB7C,KAAK0C,mBAChD5C,EAAgB+C,IAAI,qBAAsB7C,KAAK0C,oBAGjD1C,KAAKE,eAEL4C,EAAAA,EAAAA,GAAAtC,EAAA,gBAAAsC,CAAA,GACF,IAAC,CAnGkB,CAASC,EAAAA,kB,ksECrBjB7S,EAAyB,CACpCC,WAAY,aACZE,aAAc,eACdD,WAAY,aACZE,SAAU,YAGC0S,GAA6B3D,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACvCnP,EAAuBC,WAAa,YACpCD,EAAuBE,WAAa,QACpCF,EAAuBG,aAAe,WACtCH,EAAuBI,SAAW,WAGxBtF,EAAe,CAC1BkI,MAAO,EACPjI,OAAQ,GAGG+S,EAAyB,CACpC7N,WAAY,aACZE,aAAc,eACdD,WAAY,cAGD6S,EAAgC,CAC3C9S,WAAY,WACZC,WAAY,OACZC,aAAc,W,sDCtBH6S,EAAe,WAAH,QAAAC,EAAAlP,UAAAlI,OAAOqX,EAAU,IAAAC,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAVF,EAAUE,GAAArP,UAAAqP,GAAA,OAAK9c,IAAAA,IAAM4c,GAAY,SAAAG,GAAI,gBAAApb,OAAcob,EAAI,IAAIC,KAAK,IAAK,EAE9F,SAASC,EAAWC,GACzB,IAAMC,EAAOD,EAAKE,cACZC,GAASH,EAAKI,WAAa,GAAGC,WAAWC,SAAS,EAAG,KACrDC,EAAMP,EAAKQ,UAAUH,WAAWC,SAAS,EAAG,KAClD,MAAM,GAAN7b,OAAUwb,EAAI,KAAAxb,OAAI0b,EAAK,KAAA1b,OAAI8b,EAC7B,CAEO,SAASE,EAAwBtd,GAGpC,IAFFud,EAAIvd,EAAJud,KACAjZ,EAAMtE,EAANsE,OAEA,GAAIiZ,EAAKC,IAAK,CACZ,IAAMC,EAAiBF,EAAKC,IAAI,uBAEhC,GAAIC,GAAkBA,EAAenZ,GACnC,OAAOmZ,EAAenZ,GAGxB,IAAMoZ,EAAmBH,EAAKC,IAAI,yBAElC,GAAIE,GAAoBA,EAAiBpZ,GACvC,OAAOoZ,EAAiBpZ,EAE5B,MAAO,GAAIiZ,EAAKI,cAWd,OAVIJ,EAAKK,gCAAkCL,EAAKK,+BAA+BtZ,KAE7EiZ,EAAKI,cAAcrZ,GAAU3E,IAAAA,OAC3B,CAAC,EACD4d,EAAKI,cAAcrZ,GACnB,CACEuZ,cAAeN,EAAKK,+BAA+BtZ,GAAQuZ,iBAI1DN,EAAKI,cAAcrZ,GAG5B,OAAO,IACT,CAEA,SAASwZ,EAAqB5T,GAC5B,OAAOA,EAAU6T,WAAWC,OAAOD,UACrC,CAEO,SAASE,EAAaC,EAAQC,GACnC,OAAIA,GAIKC,EADHC,EAAAA,aADFD,gBAEoB,CAAED,uBAAAA,IAOtBxe,IAAAA,SAAW,CACb,aACA,oBACCue,GACM,SAGFA,CACT,CAEO,SAASI,EAAUje,GAWtB,IACEke,EAXJzb,EAAEzC,EAAFyC,GACA0b,EAAQne,EAARme,SACAtU,EAAS7J,EAAT6J,UACAnJ,EAAeV,EAAfU,gBACA0d,EAAOpe,EAAPoe,QACAC,EAAQre,EAARqe,SACAC,EAAete,EAAfse,gBACAT,EAAM7d,EAAN6d,OACAU,EAAWve,EAAXue,YACAC,EAAYxe,EAAZwe,aAKQpK,EAQJmK,EATF1Q,YACErD,GAGIwF,EAKJuO,EANFxY,gBACEyE,GAGI8C,EAEJiR,EAHFE,eACEjU,GAIJ,OAAQ2T,GACN,IAAK,UAEHD,EAAOM,EAAaE,YAAY,mBAAoB,CAAEC,WAAYlc,IAClE,MACF,IAAK,WAGCyb,EAFAI,EACa,eAAXT,EACE,uBAAA5c,OAA0BmT,EAAG,SAAAnT,OAAQqM,EAAG,SAAArM,OAAQ+O,EAAG,qBAAA/O,OAAoBwB,GAEvE,uBAAAxB,OAA0BmT,EAAG,SAAAnT,OAAQqM,EAAG,SAAArM,OAAQ+O,EAAG,eAAA/O,OAAcwB,GAIhE+b,EAAaE,YAAY,oBAAqB,CAAEE,YAAanc,IAEtE,MACF,IAAK,UAEHyb,EAAOM,EAAaE,YAAY,mBAAoB,CAClDE,YAAanB,EAAqB5T,GAAWpK,IAC7Cof,WAAYpc,IAEd,MACF,IAAK,UAEDyb,EADsB,YAApBxd,EACK8d,EAAaE,YAAY,WAGzBF,EAAaE,YAAY,kBAAmB,CAAEE,YAAaP,EAAS7T,GAAIqU,WAAYT,EAAQ5T,KAErG,MACF,IAAK,aAED0T,EADsB,YAApBxd,EACK8d,EAAaE,YAAY,uBAGzBF,EAAaE,YAAY,+BAAgC,CAAEE,YAAaP,EAAS7T,KAE1F,MACF,QACE0T,EAAO,GAGX,OAAOA,CACT,CAEO,SAASY,EAAYre,GAMxB,IALF0d,EAAQ1d,EAAR0d,SACA1b,EAAEhC,EAAFgC,GACAoH,EAASpJ,EAAToJ,UACAwU,EAAQ5d,EAAR4d,SACAD,EAAO3d,EAAP2d,QAEI7Q,EAAa,GACbwR,EAAY,GACZxN,EAAY,GAEhB,OAAQ4M,GACN,IAAK,UACH5M,EAAY9O,EACZ,MACF,IAAK,WACH8K,EAAa9K,EACb,MACF,IAAK,UACHsc,EAAYtc,EACZ8K,EAAakQ,EAAqB5T,GAAWpK,IAC7C,MACF,IAAK,UACL,IAAK,aACH8N,EAAa8Q,EAAS7T,GACtBuU,EAAYX,EAAQ5T,GAKxB,MAAO,CACL+C,WAAAA,EACAwR,UAAAA,EACAxN,UAAAA,EAEJ,CAEA,SAASyN,EAAmB7d,GAIxB,IAHF8d,EAAU9d,EAAV8d,WACAC,EAAI/d,EAAJ+d,MAGsBC,EAFKhe,EAA3Bge,6BAEkDF,GAEpCG,KAAK,CACjB3c,GAAI,KACJqD,KAAM,KACNyE,MAAO,CACL8U,KAAM,CACJC,IAAKJ,KAIb,CAEO,SAASK,EAAgBhe,GAQ5B,IAPFie,EAAKje,EAALie,MACAjB,EAAWhd,EAAXgd,YACAC,EAAYjd,EAAZid,aACAW,EAA2B5d,EAA3B4d,4BACAM,EAAele,EAAfke,gBACAC,EAASne,EAATme,UACAC,EAAQpe,EAARoe,SAEMxB,EAAWjD,IAAEsE,EAAMI,eAAe1C,KAAK,QACvCxc,EAAkBwa,IAAEsE,EAAMI,eAAe1C,KAAK,mBAIpD,GAFAuC,EAAgBI,WAAW,CAACH,EAAUI,YAAYC,OAAQL,EAAUM,SAASC,KAAMN,EAAS,GAAD1e,OAAKP,EAAe,WAAAO,OAAUkd,EAAQ,+BAE7HqB,IAA2B,IAAjBA,EAAMU,QAClBV,EAAMW,SACNX,EAAMY,UACNZ,EAAMa,QACNb,EAAMc,SACN,OAAO,EAET,IAAM/S,EAAa2N,IAAEsE,EAAMI,eAAe1C,KAAK,cACzC6B,EAAY7D,IAAEsE,EAAMI,eAAe1C,KAAK,aACxCgC,EAAOhE,IAAEsE,EAAMI,eAAe1C,KAAK,QACnCvc,EAAeua,IAAEsE,EAAMI,eAAe1C,KAAK,gBAC3CqD,EAAYrF,IAAEsE,EAAMI,eAAe1C,KAAK,aAGtClN,EAKJuO,EANFxY,gBACEyE,GAGI4J,EAEJmK,EAHF1Q,YACErD,GAGAgW,GAAc,EAElB,OAAQrC,GACN,IAAK,UACH,IAAM5M,EAAY2J,IAAEsE,EAAMI,eAAe1C,KAAK,aAE9CxO,OAAO+R,SAASC,KAAOlC,EAAaE,YAAY,mBAAoB,CAAEC,WAAYpN,IAClF,MAEF,IAAK,WACH,IAEQjE,EAEJiR,EAHFE,eACEjU,GAGiB,UAAjB7J,EAEA+N,OAAO+R,SAASC,KADA,eAAdH,EACkB,uBAAAtf,OAA0BmT,EAAG,SAAAnT,OAAQ+O,EAAG,SAAA/O,OAAQqM,EAAG,qBAAArM,OAAoBsM,GAEvE,uBAAAtM,OAA0BmT,EAAG,SAAAnT,OAAQ+O,EAAG,SAAA/O,OAAQqM,EAAG,eAAArM,OAAcsM,GAIvFiR,EAAamC,gBAAgB,oBAAqB,CAAE/B,YAAarR,IAEnE,MAEF,IAAK,UAEHiR,EAAamC,gBAAgB,mBAAoB,CAAE/B,YAAarR,EAAYsR,WAAYE,IACxF,MACF,IAAK,UACHC,EAAoB,CAClBC,WAAY,UACZC,KAAAA,EACAC,4BAAAA,IAEsB,YAApBze,EACF8d,EAAamC,gBAAgB,WAG7BnC,EAAamC,gBAAgB,mBAAoB,CAAE/B,YAAarR,IAElE,MACF,IAAK,aACHyR,EAAoB,CAClBC,WAAY,aACZC,KAAAA,EACAC,4BAAAA,IAEsB,YAApBze,EACF8d,EAAamC,gBAAgB,uBAG7BnC,EAAamC,gBAAgB,+BAAgC,CAAE/B,YAAarR,IAE9E,MACF,QACEiT,GAAc,EAGlB,OAAOA,CACT,CAEO,SAASI,EAAwBrC,GACtC,IAAMsC,EAAUtC,EAAYuC,QAAQC,cAGhCC,EAAmB,0DACnBC,EAAe,2EAGnB,OAAQJ,GACN,IAAK,QACHG,EAAmB,0DACnBC,EAAe,2EACf,MACF,IAAK,QACHD,EAAmB,0DACnBC,EAAe,0FACf,MACF,IAAK,QACHD,EAAmB,0DACnBC,EAAe,4EACf,MACF,IAAK,QACHD,EAAmB,0DACnBC,EAAe,2EACf,MACF,IAAK,QACHD,EAAmB,0DACnBC,EAAe,2EACf,MACF,IAAK,QACHD,EAAmB,0DACnBC,EAAe,0EACf,MACF,IAAK,QACHD,EAAmB,0DACnBC,EAAe,6EACf,MACF,IAAK,QACHD,EAAmB,0DACnBC,EAAe,oFACf,MACF,IAAK,QACHD,EAAmB,0DACnBC,EAAe,2EACf,MACF,IAAK,QACHD,EAAmB,0DACnBC,EAAe,0EACf,MACF,SACiC,IAA3BJ,EAAQjR,QAAQ,QAClBoR,EAAmB,0DACnBC,EAAe,2EAIrB,MAAO,CACLD,iBAAiB,GAAD/f,OAAK+f,EAAgB,qCACrCC,aAAa,GAADhgB,OAAKggB,EAAY,mCAEjC,CAEA,SAASC,EAAiBtN,GAA8C,IAADnS,EAAAsL,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAlB,CAAC,EAAhBoU,EAAK1f,EAAL0f,MAAOC,EAAG3f,EAAH2f,IAAYC,EAAGtU,UAAAlI,OAAA,EAAAkI,UAAA,QAAA9K,EAAEqf,EAAGvU,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAG,EAClE,IAAKzN,IAAAA,OAAS6hB,KAAW7hB,IAAAA,OAAS8hB,GAChC,OAAO,EAGT,IAAMG,EAAW3N,EAAS4N,KAAKL,EAAOC,EAAK,OAE3C,OAAOG,GAAYD,GAAOC,GAAYF,CACxC,CAEA,SAASI,EAAU7N,EAAU4B,EAAQ6L,GACnC,OAAOH,EAAiBtN,EAAU4B,EAAQ6L,EADCtU,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAG,IAE5CmU,EAAiBtN,EAAU4B,EAAOrS,UAAY,CAAC,EAAGke,EACtD,CAEO,SAASK,IAAmF,IAA5DlM,EAAMzI,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAG,CAAC,EAAG6G,EAAQ7G,UAAAlI,OAAA,EAAAkI,UAAA,QAAA9K,EAAE0f,EAAY5U,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAGjJ,EAAaC,OACxF6d,EAEIpM,EADFqM,kBAAAA,OAAiB,IAAAD,EAAG,CAAC,EAACA,EAGlBpU,EAAS,GAETsU,EAAkB,IAAIC,KAoC5B,OAlCAD,EAAgBE,SAASF,EAAgBlF,WAAa,GAElD6E,EAAU7N,EAAU4B,EAAQ,KAC1BiM,EAAU7N,EAAU,CACtBuN,MAAOW,EACPV,IAAK5L,EAAO2L,MACZhe,SAAU,CACRge,MAAOW,EACPV,IAAKS,EAAkBT,MAExBa,MAAaN,IAAiB7d,EAAaC,OAC5CyJ,EAAO0U,KAAK,QAGZ1U,EAAO0U,KAAK,QAIZT,EAAU7N,EAAU4B,EAAQ,GAAI,IAClChI,EAAO0U,KAAK,OAGVT,EAAU7N,EAAU4B,EAAQ,IAAK,IACnChI,EAAO0U,KAAK,QAGVT,EAAU7N,EAAU4B,EAAQ,IAAK,KACnChI,EAAO0U,KAAK,SAGVhB,EAAiBtN,EAAU4B,EAAQyM,IAAU,KAC/CzU,EAAO0U,KAAK,WAGP1U,CACT,CACO,IAAM2U,EAAoB,SAACpf,EAAMqf,GACtC,IAAIC,EACAC,EAGFA,EADEF,EAAoBG,aAAe,EACpBxf,EAAKO,UAAU,wCAEfP,EAAKO,UAAU,+CAIlC8e,EAAoBI,eAAiBzf,EAAKwZ,WAAW6F,EAAoBjB,OAEzEiB,EAAoBK,aAAe1f,EAAKwZ,WAAW6F,EAAoBhB,KAGrEiB,EADED,EAAoBI,iBAAmBJ,EAAoBK,aAC7B,IAAAxhB,OAAOmhB,EAAoBI,eAAc,KAEzC,IAAAvhB,OAAOmhB,EAAoBI,eAAc,OAAAvhB,OAAMmhB,EAAoBK,aAAY,KAGjH,IAAIC,EAAiCJ,EAAevB,cAMpD,MAJgC,iBAA5BqB,EAAoB3iB,MACtBijB,EAAiC,IAG7B,GAANzhB,OAAU8B,EAAKO,UAAU,2CAAyCrC,OAAGyhB,EAA8B,KAAAzhB,OAAIohB,EACzG,E,wBC5bMze,EAAa,WAAgF,IAA/EjC,EAAWoL,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAG,CAAC,EAAG4U,EAAY5U,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAGjJ,EAAaC,OAAQpD,EAAYoM,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAG,KAC/E4V,GAAsChhB,EAAYihB,SAAW,CAAC,GAA9DD,kCACFE,EAAgBF,IAAuD,MAAjBhiB,GAAyC,QAAjBA,GAC9EmiB,EAAiBH,GAAsD,QAAjBhiB,EAC5D,OAAIghB,IAAiB7d,EAAaC,QACzBgf,EAAAA,EAAAA,IACLphB,EACArC,IAAAA,QAAU,CACR,SACA,cACA,MACA,aACA,SACCqC,EAAYqhB,uCAAyC,kBACtD,oBACA,4BACA,cACA,iBACA,MACA,4BACA,oBACCH,GAAiBC,IAAmB,YACrCD,GAAiB,wBACjBA,GAAiB,mBAChBA,GAAiBC,IAAmB,gBACrCD,GAAiB,4BAChBA,GAAiBC,IAAmB,qBACrCD,GAAiB,YACjBA,GAAiB,0BACjBA,GAAiB,kBACjBA,GAAiB,gBACjBA,GAAiB,8BACjBA,GAAiB,yBAKhB,CACL,SACA,cACA,MACA,aACA,QACA,cACA,iBACA,MAEJ,EAIM3e,EAAyB,CAC7B+e,OAAQ1f,SACR2f,YAAa3f,QACb4f,IAAK5f,MACL6f,WAAY7f,WACZ8f,MAAO9f,QACP+f,gBAAiB/f,YACjBggB,kBAAmBhgB,iBACnBigB,0BAA2BjgB,sBAC3BkgB,YAAalgB,QACbmgB,eAAgBngB,aAChBogB,IAAKpgB,MACLqgB,0BAA2BrgB,UAC3BsgB,iBAAkBtgB,qBAClBugB,UAAWvgB,YACXwgB,sBAAuBxgB,2BACvBygB,gBAAiBzgB,oBACjB0gB,cAAe1gB,WACf2gB,yBAA0B3gB,0BAC1B4gB,mBAAoB5gB,mBACpB6gB,UAAW7gB,YACX8gB,wBAAyB9gB,6BACzB+gB,gBAAiB/gB,oBACjBghB,cAAehhB,gBACfihB,4BAA6BjhB,iCAC7BkhB,oBAAqBlhB,wBAGrBmhB,kBAAmBnhB,QACnBohB,sBAAuBphB,aACvBqhB,qBAAsBrhB,OAGlBshB,EAAsB,CAC1B3B,YAAa,aACbD,OAAQ,QACRI,MAAO,SAGHyB,EAAe,SAACnjB,GAAW,IAAEggB,EAAY5U,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAGjJ,EAAaC,OAAQpD,EAAYoM,UAAAlI,OAAA,EAAAkI,UAAA,QAAA9K,EAAA,OAAK3C,IAAAA,IACtFsE,EAAWjC,EAAaggB,EAAchhB,IACtC,SAAAsD,GAAM,4BAAAhD,OAA0BgD,EAAM,IACtCqY,KAAK,IAAK,EAENyI,EAAmB,SAAAC,GAAQ,OAAI1lB,IAAAA,SAAWA,IAAAA,KAAOulB,GAAsBG,EAAU,EAEjFC,EAAoB,SAACC,EAAeF,GAAQ,OAChD1lB,IAAAA,OAAS4lB,GAAe,SAAAC,GAAQ,OAAIA,IAAaN,EAAoBG,EAAS,GAAE,EAE5EI,EAAgC,SAAAnhB,GAAM,8BAAAhD,OAA4B4jB,EAAoB5gB,GAAO,MAE7FkE,EAAiB,WAA2D,IAA1DxG,EAAWoL,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAG,CAAC,EAC/BlJ,EAAU,CAAC,QAAS,SAAU,cAAe,eAEnD,OAHoDkJ,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAGjJ,EAAaC,UAG/CD,EAAaC,QACzBgf,EAAAA,EAAAA,IACLphB,EACAkC,GAIGA,CACT,EAMMwhB,EAAe,SAACxhB,GAAqD,IAA5ClD,EAAYoM,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAG,KAAM3L,EAAU2L,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAG,KACzDuY,EAA0BlkB,IAAe9C,EAAAA,IAAqB8C,IAAe3C,EAAAA,GAE7E8mB,EAAkB,CAAC,YAAa,gBAAiB,sBACvD,OAF6C,QAAjB5kB,GAED2kB,EAClBzhB,EAAQwF,QAAO,SAAAmc,GAAC,OAAKD,EAAgBxgB,SAASygB,EAAE/lB,IAAI,IAEtDoE,CACT,E,kICtHM4hB,GAAmB,CAAC,EAE1B,SAASC,GAAuBC,EAAYhkB,GAC1C,IAAIikB,EAAeH,GAAiBE,GAEpC,GAAIC,EACF,OAAOA,EAGT,OAAQD,GACN,IAAK,aACHC,GAAeC,EAAAA,EAAAA,qBAAoBC,EAAAA,aACnCC,EAAAA,EAAAA,IAAiC,CAAEH,aAAAA,EAAcjkB,YAAAA,IACjD,MACF,IAAK,UACHikB,GAAeC,EAAAA,EAAAA,qBAAoBG,EAAAA,UACnCD,EAAAA,EAAAA,IAAiC,CAAEH,aAAAA,EAAcjkB,YAAAA,IACjD,MACF,IAAK,YACHikB,GAAeC,EAAAA,EAAAA,qBAAoB1Y,EAAAA,WACtB8Y,WAAWC,wBACpBC,EAAAA,GACJ,MACF,IAAK,UACHP,GAAeC,EAAAA,EAAAA,qBAAoBO,EAAAA,UACnCL,EAAAA,EAAAA,IAAiC,CAAEH,aAAAA,EAAcjkB,YAAAA,IACjD,MACF,IAAK,aACHikB,GAAeC,EAAAA,EAAAA,qBAAoBQ,EAAAA,aACnCN,EAAAA,EAAAA,IAAiC,CAAEH,aAAAA,EAAcjkB,YAAAA,IACjD,MACF,QACEikB,EAAe,KAMnB,OAFAH,GAAiBE,GAAcC,EAExBA,CACT,CAEO,SAASU,GAAe3mB,GAM3B,IALF0J,EAAM1J,EAAN0J,OACA8U,EAAQxe,EAARwe,SACAla,EAAMtE,EAANsE,OACAsiB,EAAkB5mB,EAAlB4mB,mBACA5kB,EAAWhC,EAAXgC,YAEA,GAAK0H,EAAL,CAIA,IAAMmd,EAAUlnB,IAAAA,MAAQ+J,GACrBod,UACAziB,KAAI,SAAAhE,GAKE,IAAD0mB,EAAA1mB,EAJJqJ,OAAMsd,OAAA,IAAAD,EAGF,CAAC,EAACA,EAFJjnB,EAAGknB,EAAHlnB,IAAGmnB,EAAAD,EACHvjB,MAASmH,QAAJ,IAAAqc,EAAc,CAAC,EAACA,GAAZrc,MAGX,IAAKA,EACH,OAAO,KAGT,IAAIsc,EAAetc,EAEnB,GAAiB,aAAb4T,EAAyB,CAC3B,GAAI1e,IAAQqnB,EAAAA,oBAAoBC,cAC9B,OAAO,KAGLtnB,IAAQqnB,EAAAA,oBAAoBE,iBAC9BH,EAAe,CACbI,OAAQ1c,EAAMyc,gBAGpB,MAAO,GAAiB,YAAb7I,GAA2B1e,IAAQqnB,EAAAA,oBAAoBC,cAChEF,EAAe,CACbI,OAAQ1c,EAAMwc,oBAEX,GAAiB,eAAb5I,EAET,OAAO,KAGT,OAAO,IAAI+I,EAAAA,aACTL,EACA,CACEjB,aAAcF,GAAuBvH,EAAUxc,IAGrD,IACC8kB,UACArjB,QAEH,GAAiB,aAAb+a,GACCoI,GACAxB,EAAiB9gB,GAAS,CAC7B,IAAMsG,EAAQ,CACZ2b,wBAAyB,CACvBiB,UAAW,CAAC/B,EAA8BnhB,MAGxC2hB,EAAeF,GAAuBvH,EAAUxc,GAChDylB,EAAgC,IAAIF,EAAAA,aACxC3c,EACA,CACEqb,aAAAA,EACAyB,MAAO,CACLC,UAAUC,EAAAA,EAAAA,4BAA2B3B,GACrC4B,YAAY,EACZC,OAAQ,CACNvB,wBAAyB,CACvBrL,UAAU6M,EAAAA,EAAAA,WAMpBlB,EAAQtE,KAAKkF,EACf,CAEA,GAAKZ,GAA8B,IAAnBA,EAAQ3hB,OAAxB,CAIA,IAAM+gB,EAAeF,GAAuBvH,EAAUxc,GAChDgmB,EAAe,IAAIT,EAAAA,aACvBA,EAAAA,aAAaU,MAAMpB,GACnB,CACEZ,aAAAA,EACAyB,MAAO,CACLC,UAAUC,EAAAA,EAAAA,4BAA2B3B,GACrC4B,YAAY,EACZC,OAAQ,CACNvB,wBAAyB,CACvBrL,UAAU6M,EAAAA,EAAAA,WAOpB,OADAC,EAAaplB,QAAUolB,EAAaE,aAC7BF,CAnBP,CA1EA,CA8FF,CAEO,SAASG,GAA6BrnB,GAAyB,IAAtBmW,EAAiBnW,EAAjBmW,kBAM9C,OAL8B,IAAImR,EAAAA,qBAAqB,CACrDnR,kBAAAA,EACAoR,YAAa,wBAGcnV,OAAO,iBAAkB,CACpDoV,oBAAqB,CACnBrC,aAAc,CAAE9f,KAAM,UAG5B,CC7JO,IAAMnC,GAAqB,CAAC,QAAS,SAAU,eAEtD,SAASukB,GAAKvoB,GAkBV,IAjBFkK,EAASlK,EAATkK,UACA7G,EAASrD,EAATqD,UACAof,EAAmBziB,EAAnByiB,oBACA/R,EAAG1Q,EAAH0Q,IACA8X,EAAMxoB,EAANwoB,OACAC,EAAOzoB,EAAPyoB,QACAC,EAAiB1oB,EAAjB0oB,kBACAC,EAAM3oB,EAAN2oB,OACAC,EAAY5oB,EAAZ4oB,aACA5W,EAAMhS,EAANgS,OAEAtI,GADQ1J,EAARiU,SACMjU,EAAN0J,QACApF,EAAMtE,EAANsE,OACAsB,EAAgB5F,EAAhB4F,iBACAijB,EAAY7oB,EAAZ6oB,aACAC,EAAY9oB,EAAZ8oB,aACA9mB,EAAWhC,EAAXgC,YAEM+mB,EAAqBppB,IAAAA,OAAS,CAClCqpB,UAAW,CACTC,UAAWrM,EAAWvZ,EAAUme,OAChC0H,QAAStM,EAAWvZ,EAAUoe,MAEhC0H,oBACE1G,GACE9iB,IAAAA,OAAS8iB,EAAoBjB,QAC7B7hB,IAAAA,OAAS8iB,EAAoBhB,KAC7B,CACEwH,UAAWrM,EAAW6F,EAAoBjB,OAC1C0H,QAAStM,EAAW6F,EAAoBhB,MACtC,MACPiH,EAAoB,CAAEA,kBAAAA,GAAsB,CAAC,GAC1CU,EAAazpB,IAAAA,OAAS,CAC1BopB,mBAAAA,GACCH,GACGhe,EAAQ,CACZV,UAAWA,EAAU,oBAAoBoI,MAAM8W,GAAY7W,UAIvDyV,EAAerB,GAAgB,CACnCjd,OAAAA,EAAQ8U,SAHOtU,EAAUsC,KAAKgG,YAAYC,UAGxBnO,OAAAA,EAAQsiB,mBAFDhhB,IAAqByD,EAAuBI,SAEvBzH,YAAAA,IAE1C6kB,EAAUmB,EAAeA,EAAaqB,eAAY/mB,EA8BxD,OA5BIoO,GACF/Q,IAAAA,OAASiL,EAAO,CACd0e,KAAM5Y,IAIN8X,GACF7oB,IAAAA,OAASiL,EAAO,CACd2e,QAASf,IAITG,GACFhpB,IAAAA,OAASiL,EAAO,CACd4e,QAASb,IAIT9B,GACFlnB,IAAAA,OAASiL,EAAO,CACd6e,QAAS5C,IAITgC,GACFC,EAAaY,WAAWxf,EAAUsC,KAAKgG,YAAYC,WAG9CT,EAAO9H,EAAUsC,KAAKgG,YAAYC,WAAWC,QAAQ,CAC1D9H,MAAAA,EACA6d,QAAAA,GAEJ,CAEA,IAAMkB,GAAoB,MAGbC,GAA2B,CACtChkB,iBAAkB,aAClBtB,OAAQ,UAGGulB,GAA2B,CACtCjkB,iBAAkB,aAClBtB,OAAQ,qBAGH,SAASwlB,GAAuBzmB,GACrC,IAAIof,EAAsBpf,EAAUG,SAEpC,IAAKif,IACF9iB,IAAAA,OAAS8iB,EAAoBjB,SAC7B7hB,IAAAA,OAAS8iB,EAAoBhB,KAAM,CAGpCgB,EAAsB,CAAC,EACvB,IAAMsH,EAAY1mB,EAAUoe,IAAIuI,UAAY3mB,EAAUme,MAAMwI,UACtDpH,EAAcpT,KAAKC,MAAMsa,EAAYJ,IAEvC/G,GAAe,GAEjBH,EAAoBjB,OAAQyI,EAAAA,EAAAA,WAAU5mB,EAAUme,MAAO,GACvDiB,EAAoBhB,KAAMwI,EAAAA,EAAAA,WAAU5mB,EAAUoe,IAAK,GACnDgB,EAAoB3iB,IAAM,gBAG1B2iB,EAAoBhB,KAAMwI,EAAAA,EAAAA,WAAU5mB,EAAUme,MAAO,GACrDiB,EAAoBjB,OAAQyI,EAAAA,EAAAA,WAAUxH,EAAoBhB,IAAKmB,GAC/DH,EAAoB3iB,IAAM,mBAE5B2iB,EAAoBG,YAAcA,CACpC,CAEA,OAAOH,CACT,CAEO,IAAMyH,GAAiB,CAC5BC,YAAa,GACbxB,OAAQ,SAAFtoB,GAOC,IACDsoB,EAPJnK,EAAQne,EAARme,SACA4L,EAAU/pB,EAAV+pB,WACApoB,EAAW3B,EAAX2B,YACAyD,EAAOpF,EAAPoF,QACAzE,EAAYX,EAAZW,aACAghB,EAAY3hB,EAAZ2hB,aAGMqI,EAA8BlF,EAAanjB,EAAaggB,EAAchhB,GAE5E,OAAQwd,GACN,IAAK,aACHmK,EAAM,4CAAArnB,OAA+C3B,IAAAA,IAAM8F,GAAS,SAAAnB,GAAM,4BAAAhD,OAA0BgD,EAAM,IAAIqY,KAAK,MACnH,MACF,IAAK,UACHgM,EAASyB,EAAU,wFAAA9oB,OACuE+oB,GAA2B,4BAAA/oB,OAAiC+oB,GACtJ,MACF,IAAK,WACH1B,EAASyB,EAAU,wGAAA9oB,OAA2G+oB,GAA2B,4CAAA/oB,OAAiD+oB,GAC1M,MACF,QACE1B,EAASyB,EAAU,8EAAA9oB,OAAiF+oB,GAA2B,kBAAA/oB,OAAuB+oB,GAG1J,OAAO1B,CACT,EACAH,OAAQ,SAAChK,GACP,IAAIgK,EAEJ,OAAQhK,GACN,IAAK,aACHgK,EAAS,2EACT,MACF,IAAK,UACHA,EAAS,kEACT,MACF,IAAK,UACHA,EAAS,iCAKb,OAAOA,CACT,EACA8B,kBAAmB,SAAC9L,GAClB,GAAiB,YAAbA,GAAuC,aAAbA,GAAwC,YAAbA,EACvD,MAAO,CAAC,aAGZ,EACA+L,eAAgB,CACd9kB,QAASzB,GACT0B,QAAS,QACTC,WAAY,EACZ6kB,eAAgB,EAChB5kB,iBAAkB,sBAEpBgjB,aAAc,SAACpK,GACb,MAAiB,eAAbA,EACK,CACLiM,yBAAyB,EACzBC,mBAAmB,GAGhB,CAAC,CACV,GAGF,SAASC,GAAiB7pB,GAGtB,IAGE8pB,EALJhoB,EAAO9B,EAAP8B,QACAS,EAASvC,EAATuC,UAEMiB,EAAS1B,EAAQ8C,QACjBmlB,EAA8B,IAAtBjoB,EAAQ+C,UAAkB,MAAQ,OAGhD,GAAItC,EAAUG,SACZ,OAAQZ,EAAQgD,kBACd,IAAK,2BACHglB,EAAe,8BACf,MACF,IAAK,qCACHA,EAAe,wCACf,MAIF,QACEA,EAAe,0BAInBA,EAAe,qBAGjB,MAAO,CACLnmB,OAAO,GAADnD,OAAKspB,EAAY,KAAAtpB,OAAIgD,GAC3BumB,MAAAA,EAEJ,CAEO,SAASC,GAAsBtpB,GAKlC,IAJFoB,EAAOpB,EAAPoB,QACAZ,EAAWR,EAAXQ,YACAggB,EAAYxgB,EAAZwgB,aACAhhB,EAAYQ,EAAZR,aAYA,GAVIgB,EAAYihB,UAAYjhB,EAAYihB,QAAQ8H,sBAAwB/oB,EAAYihB,QAAQ+H,sBAC1FC,EAAAA,QAAsB/K,WACpB,CAACgL,EAAAA,QAAyB/K,YAAYC,OACtC8K,EAAAA,QAAyB7K,SAASC,KAClC,sBACA,6DAKC3gB,IAAAA,QAAUiD,EAAQ6C,SAAU,CAC/B,IAAM0lB,EAAmBlnB,EAAWjC,EAAaggB,EAAchhB,GAC3D+C,EAAkBpE,IAAAA,aAAeiD,EAAQ6C,QAAS0lB,GAEtD,GAAIxrB,IAAAA,KAAOoE,GAAmBpE,IAAAA,KAAOqE,IAAqB,CACxDD,EAAkBpE,IAAAA,MAAQoE,GACvBqnB,MAAMpnB,IACNqnB,OACAC,MAAM3rB,IAAAA,KAAOqE,KACbP,QAEH,IAAMiC,EAAU/F,IAAAA,SAAWwrB,EAAkBvoB,EAAQ8C,SACnD9C,EAAQ8C,QAAU3B,EAAgB,GAEpC,OAAOpE,IAAAA,SAAW,CAChB8F,QAAS1B,EACT2B,QAAAA,GACC9C,EACL,CACF,CAWA,OATIZ,EAAYihB,UAAYjhB,EAAYihB,QAAQ8H,sBAAwB/oB,EAAYihB,QAAQ+H,sBAC1FC,EAAAA,QAAsB/K,WACpB,CAACgL,EAAAA,QAAyB/K,YAAYC,OACtC8K,EAAAA,QAAyB7K,SAASC,KAClC,sBACAiL,KAAKC,UAAU5oB,IAIZA,CACT,CAEA,IAgEasR,IAAgBsC,EAAAA,EAAAA,KAhEC,SAAH5U,GAWpB,IAVLsI,EAAStI,EAATsI,UACA7G,EAASzB,EAATyB,UAASooB,EAAA7pB,EACTgB,QAAAA,OAAO,IAAA6oB,EAAGvB,GAAeK,eAAckB,EACvCnB,EAAiB1oB,EAAjB0oB,kBACAtY,EAAMpQ,EAANoQ,OACAiC,EAAQrS,EAARqS,SACAF,EAAcnS,EAAdmS,eACArK,EAAM9H,EAAN8H,OACA1H,EAAWJ,EAAXI,YACAhB,EAAYY,EAAZZ,aAEMwd,EAAWtU,EAAUsC,KAAKgG,YAAYC,UAC5CiZ,EAA0Bf,GAAkB,CAC1C/nB,QAASkoB,GAAuB,CAC9BloB,QAASA,EAAQ6C,SAAW7C,EAAQ8C,QAAU9C,EAAUsnB,GAAeK,eACvEvoB,YAAAA,EACAhB,aAAAA,IAEFqC,UAAAA,IAEIolB,EAAU,CAAC,CARHiD,EAANjnB,OAAainB,EAALb,QAYhB,MAAiB,aAAbrM,GAA4B7e,IAAAA,IAAM+J,GAAQ,SAAAiiB,GAAC,MAAuC,eAAnChsB,IAAAA,OAASgsB,EAAG,CAAC,SAAU,OAAwB,IAgB3FpD,GAAM,CACXre,UAAAA,EACA7G,UAAAA,EACAof,oBAAqBpf,EAAUG,SAC/BkN,IAAKwZ,GAAeC,YACpB1B,QAAAA,EACAC,kBAAmB4B,GAAqBJ,GAAeI,kBAAkB9L,GACzEgK,OAAQ0B,GAAe1B,OAAOhK,GAC9BmK,OAAQuB,GAAevB,OAAO,CAC5BnK,SAAAA,EACA4L,WAAY/mB,EAAUG,SACtBxB,YAAAA,EACAyD,QAAS7C,EAAQ6C,QACjBzE,aAAAA,EACAghB,aAAc7d,EAAaC,SAE7BwkB,aAAcsB,GAAetB,aAAapK,GAC1CxM,OAAAA,EACAiC,SAAAA,EACAvK,OAAAA,IAjCOkiB,GAAwB,CAC7B1hB,UAAAA,EACA7G,UAAAA,EACA2O,OAAAA,EACAiC,SAAAA,EACAF,eAAAA,EACA0U,QAAAA,EACA/e,OAAAA,EACA1H,YAAAA,EACAggB,aAAc7d,EAAaC,OAC3BpD,aAAAA,GAyBN,IAEiE,SAAA6qB,GAAI,OAAIA,EAAKC,WAAW,IAEzF,SAASC,GAAoBjqB,GAOzB,IACE2C,EACAomB,EARJpC,EAAO3mB,EAAP2mB,QACA1U,EAAcjS,EAAdiS,eACA1Q,EAASvB,EAATuB,UACArB,EAAWF,EAAXE,YAAWgqB,EAAAlqB,EACX0c,SAAAA,OAAQ,IAAAwN,EAAG,UAASA,EACpBhrB,EAAYc,EAAZd,aAKA,GAAIynB,GAAWA,EAAQ,GAAI,CAAC,IAADwD,GAAArkB,EAAAA,EAAAA,GACL6gB,EAAO,GAAAyD,GAAAtkB,EAAAA,EAAAA,GAAAqkB,EAAA,MAAzBxnB,EAAMynB,EAAA,GAAErB,EAAKqB,EAAA,EACjB,KAAO,CACL,IAAMxlB,EAAa/G,IAAAA,KAAOoU,KAAkB,SAAA+D,GAAI,MAAkB,YAAb0G,GAAsC,yBAAZ1G,EAAKhV,IAAgD,aAAb0b,GAAuC,0BAAZ1G,EAAKhV,EAA+B,IAChLqpB,EAAcxB,GAAkB,CACpC/nB,QAASkoB,GAAuB,CAC9BloB,QAAS8D,GAAcA,EAAW9D,SAAW8D,EAAW9D,QAAQ6C,SAAWiB,EAAW9D,QAAQ8C,QAC5FgB,EAAW9D,QAAUsnB,GAAeK,eACtCvoB,YAAAA,EACAhB,aAAAA,IAEFqC,UAAAA,IAGFoB,EAAS0nB,EAAY1nB,OAErBomB,EAAQsB,EAAYtB,KACtB,CAEA,MAAO,CACLjmB,WAAYH,EACZK,cAAyB,SAAV+lB,EAAmB,aAAe,YAErD,CAEO,SAASuB,GAAuBzpB,GAKnC,IAJF2B,EAAM3B,EAAN2B,OACAtC,EAAWW,EAAXX,YACAggB,EAAYrf,EAAZqf,aACAhhB,EAAY2B,EAAZ3B,aAEMmqB,EAAmBlnB,EAAWjC,EAAaggB,EAAchhB,GAC/D,OAAOrB,IAAAA,SAAWwrB,EAAkB7mB,GAClCA,EAASslB,GAAyBtlB,MACtC,CAEA,IAAM+nB,GAAqB,SAACrqB,EAAaggB,GACvC,IAAAsK,EAGItqB,EAAYihB,SAAW,CAAC,EAFRsJ,EAAyBD,EAA3CE,iBACoBC,EAA2BH,EAA/CI,mBAEF,GAAI1K,IAAiB7d,EAAaC,QAAUmoB,EAA2B,CACrE,IAAMI,EAAwBF,EAC5BG,EAAAA,GACAjtB,IAAAA,OAASitB,EAAAA,IACX,OAAO,SAAAtoB,GAAM,OAAI3E,IAAAA,OAASgtB,EAAuBroB,EAAQA,EAAQ,CACnE,CACA,OAAO3E,IAAAA,QACT,EAEaktB,GAAc,WAIf,IAADC,EAAA1f,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAP,CAAC,EAAC2f,EAAAD,EAHJ9qB,YAAAA,OAAW,IAAA+qB,EAAG,CAAC,EAACA,EAChBzoB,EAAMwoB,EAANxoB,OAAM0oB,EAAAF,EACN9K,aAAAA,OAAY,IAAAgL,EAAG7oB,EAAaC,OAAM4oB,EAGlC,OADkBX,GAAmBrqB,EAAaggB,EAC3CiL,CAAU3oB,EACnB,EAEa4oB,GAAe,WAIhB,IAADC,EAAA/f,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAP,CAAC,EAACggB,EAAAD,EAHJnrB,YAAAA,OAAW,IAAAorB,EAAG,CAAC,EAACA,EAAAC,EAAAF,EAChBjpB,QAAAA,OAAO,IAAAmpB,EAAG,GAAEA,EAAAC,EAAAH,EACZnL,aAAAA,OAAY,IAAAsL,EAAGnpB,EAAaC,OAAMkpB,EAE5BL,EAAYZ,GAAmBrqB,EAAaggB,GAClD,OAAOriB,IAAAA,IAAMuE,EAAS+oB,EACxB,EAEA,SAASM,GAAoBC,GAQzB,IAPFzZ,EAAcyZ,EAAdzZ,eACAyK,EAAQgP,EAARhP,SACA5Y,EAAgB4nB,EAAhB5nB,iBACAtB,EAAMkpB,EAANlpB,OACAtC,EAAWwrB,EAAXxrB,YAAWyrB,EAAAD,EACXxL,aAAAA,OAAY,IAAAyL,EAAGtpB,EAAaC,OAAMqpB,EAClCzsB,EAAYwsB,EAAZxsB,aAEA,GAAI4E,GAAoBtB,EACtB,MAAO,CACLopB,SAAU9nB,EACV+nB,eAAgBvB,GAAwB,CACtC9nB,OAAAA,EACAtC,YAAAA,EACAggB,aAAAA,EACAhhB,aAAAA,KAKN,IAAI4W,EAAS,8BAEI,aAAb4G,EACF5G,EAAS,+BACa,YAAb4G,IACT5G,EAAS,+BAGX,IAAMlR,EAAa/G,IAAAA,KAAOoU,KAAkB,SAAA+D,GAAI,OAAIA,EAAKhV,KAAO8U,CAAM,IAEtE,MAAO,CACL8V,SAAUhnB,GAAcA,EAAW9D,QACjC8D,EAAW9D,QAAQgD,iBAAmBgkB,GAAyBhkB,iBACjE+nB,eAAgBvB,GAAwB,CACtC9nB,OAAQoC,GAAcA,EAAW9D,QAC/B8D,EAAW9D,QAAQ0B,OAASslB,GAAyBtlB,OACvDtC,YAAAA,EACAggB,aAAAA,EACAhhB,aAAAA,IAGN,CAEA,SAAS4sB,GAAoBC,GAIzB,IAHF9Z,EAAc8Z,EAAd9Z,eACAnO,EAAgBioB,EAAhBjoB,iBACAtB,EAAMupB,EAANvpB,OAEA,GAAIsB,GAAoBtB,EACtB,MAAO,CACLopB,SAAU9nB,EACV+nB,eAAgBrpB,GAIpB,IAEMwpB,EAAgB/Z,IAChBrN,EAAa/G,IAAAA,KAAOmuB,GAAe,SAAAhW,GAAI,MAH9B,iCAGkCA,EAAKhV,EAAa,IAEnE,MAAO,CACL4qB,SAAUhnB,GAAcA,EAAW9D,SAAW8D,EAAW9D,QAAQgD,iBAC/Dc,EAAW9D,QAAQgD,iBAAmBikB,GAAyBjkB,iBACjE+nB,eAAgBjnB,GAAcA,EAAW9D,SAAW8D,EAAW9D,QAAQ0B,OACrEoC,EAAW9D,QAAQ0B,OAASulB,GAAyBvlB,OAE3D,CAEA,SAASypB,GAAwBC,GAO7B,IANFC,EAAiBD,EAAjBC,kBACAla,EAAcia,EAAdja,eACAyK,EAAQwP,EAARxP,SACAxc,EAAWgsB,EAAXhsB,YAAWksB,EAAAF,EACXhM,aAAAA,OAAY,IAAAkM,EAAG/pB,EAAaC,OAAM8pB,EAClCltB,EAAYgtB,EAAZhtB,aAEAmtB,EAAqCF,GAAqBV,GAAqB,CAC7ExZ,eAAAA,EACAyK,SAAAA,EACAxc,YAAAA,EACAggB,aAAAA,EACAhhB,aAAAA,IALM2sB,EAAcQ,EAAdR,eAAgBD,EAAQS,EAART,SAQlB9oB,EAAU,+BAAAtD,OAAkCqsB,GAGlD,MAAO,CACLS,WAHiBjS,EAA8BuR,GAI/C9oB,WAAAA,EAEJ,CAmBA,SAASypB,GAAkCC,GAIvC,IAHFjrB,EAASirB,EAATjrB,UACA4Q,EAAQqa,EAARra,SAAQsa,EAAAD,EACRtM,aAAAA,OAAY,IAAAuM,EAAGpqB,EAAaC,OAAMmqB,EAElCC,EAAoCzM,EAAuB1e,EAAW4Q,EAAU+N,GAA3EyM,GAAwF7mB,EAAAA,EAAAA,GAAA4mB,EAAA,GAA7D,GAEhC,IAAKC,EAA6B,CAGhC,IAEMC,EAAc,CAAC,EAFCza,EAAS4N,KAAKxe,EAAUme,MAAOne,EAAUoe,IAAK,OAC3CxN,EAAS4N,KAAKxe,EAAUG,SAASge,MAAOne,EAAUG,SAASie,IAAK,QAGvFiN,EAAYlN,MAAQne,EAAUme,MAC9BkN,EAAYjN,IAAMpe,EAAUoe,MAE5BiN,EAAYlN,MAAQne,EAAUG,SAASge,MACvCkN,EAAYjN,IAAMpe,EAAUG,SAASie,KACtC,IAAAkN,EACgC5M,EAAuB2M,EAAaza,EAAU+N,GAA7EyM,GAA0F7mB,EAAAA,EAAAA,GAAA+mB,EAAA,GAA/D,EAC/B,CAEA,OAAOF,CACT,CAEA,SAASG,GAAsCC,GAAsB,IAC7DC,GAAQ/a,EADgD8a,EAAd9a,kBACjB1P,KAAI,SAACyT,GAClC,OAAQA,EAAKhV,IACX,IAAK,uBACH,MAAO,cACT,IAAK,wBACH,MAAO,eACT,IAAK,uBACH,MAAO,cACT,IAAK,8BACH,MAAO,qBACT,IAAK,+BACH,MAAO,sBACT,IAAK,+BACH,MAAO,cACT,IAAK,kBACH,MAAO,SACT,QACE,MAAO,GAEb,IACA,OAAOnD,IAAAA,QAAUmvB,EACnB,CAKO,SAASC,GAAgBC,GAiB5B,IAhBF9kB,EAAS8kB,EAAT9kB,UACA7G,EAAS2rB,EAAT3rB,UACA2O,EAAMgd,EAANhd,OACAiC,EAAQ+a,EAAR/a,SACAgb,EAAkBD,EAAlBC,mBACAhB,EAAiBe,EAAjBf,kBACAla,EAAcib,EAAdjb,eACA+a,EAAKE,EAALF,MACAhP,EAAekP,EAAflP,gBACAC,EAASiP,EAATjP,UACAmP,EAA6BF,EAA7BE,8BACAC,EAAUH,EAAVG,WACAntB,EAAWgtB,EAAXhtB,YACA6mB,EAAYmG,EAAZnG,aACAC,EAAYkG,EAAZlG,aAAYsG,EAAAJ,EACZhN,aAAAA,OAAY,IAAAoN,EAAGjrB,EAAaC,OAAMgrB,EAE5B5Q,EAAWtU,EAAUsC,KAAKgG,YAAYC,UAC5C4c,EAGItD,GAAqB,CACvBkD,mBAAAA,EACAlb,eAAAA,EACA1Q,UAAAA,EACArB,YAAAA,EACAwc,SAAAA,IAPY8Q,EAAqBD,EAAjCzqB,WACe2qB,EAAwBF,EAAvCvqB,cAQI0qB,IAA8BnsB,EAAUG,UAC5C7D,IAAAA,OAAS0D,EAAUG,SAASge,QAC5B7hB,IAAAA,OAAS0D,EAAUG,SAASie,KACxBgB,EAAsBqH,GAAuBzmB,GAC7CorB,EAA8BJ,GAAmC,CACrEhrB,UAAAA,EACA4Q,SAAAA,EACA+N,aAAAA,IAEFyN,EAGI1B,GAAyB,CAC3BE,kBAAAA,EACAla,eAAAA,EACAyK,SAAAA,EACAxc,YAAAA,EACAggB,aAAAA,IAPY0N,EAA4BD,EAAxCrB,WACYuB,EAA4BF,EAAxC7qB,WAQIgrB,EAAQd,GAASF,GAAuC,CAAE7a,eAAAA,IAEhE,GAAsB,IAAlBpU,IAAAA,KAAOiwB,GACT,OAAO,KAGT,IAAMC,EAAmB5rB,EAAWjC,EAAaggB,GAAcrF,KAAK,KAC9DmT,EAAa,wFACbtH,EAAS,GACTG,EAAS,CAEb,oFAAArnB,OAAoFuuB,EAAgB,MAClGL,EAA6B,qCAAAluB,OAAqCuuB,EAAgB,0CAAAvuB,OAC3CuuB,EAAgB,KAAG,+CAAAvuB,OACTuuB,EAAgB,MAC7D,MAGFE,EAAgB,kCACtBpwB,IAAAA,KAAOiwB,GAAO,SAACI,GACb,OAAQA,GACN,IAAK,cACHxH,EAAOjG,KAAK,0FAADjhB,OAA2FuuB,EAAgB,KAAAvuB,OAAIkuB,EAA4BM,EAAa,GAAE,MACrK,MACF,IAAK,cACHtH,EAAOjG,KAAK,yBACZ,MACF,IAAK,qBACHiG,EAAOjG,KAAK,sEAAqE,sDAAAjhB,OACzBuuB,EAAgB,KAAAvuB,OAAIwuB,EAAU,MACtF,MACF,IAAK,SAEHnH,EAAOpG,KAAK,qEAAAjhB,OAAqEyuB,EAAa,MAC5FP,EACG,qCAAAluB,OAAqCyuB,EAAa,0CAAAzuB,OACZyuB,EAAa,KAAG,+CAAAzuB,OACNyuB,EAAa,MAC5D,MAIZ,IAEA,IAAME,EAAiC,CACrCjH,UAAW,CACTC,UAAWrM,EAAWvZ,EAAUme,OAChC0H,QAAStM,EAAWvZ,EAAUoe,MAEhC0H,oBAAqB1G,EAAsB,CACzCwG,UAAWrM,EAAW6F,EAAoBjB,OAC1C0H,QAAStM,EAAW6F,EAAoBhB,MACtC,KACJmO,MAAAA,EACAM,QAASL,EACTL,0BAAAA,EACAF,sBAAAA,EACAC,yBAAAA,EACAG,6BAAAA,EACAC,6BAAAA,EACAQ,yBAA0BnO,IAAiB7d,EAAaC,QAGtDqqB,GACF9uB,IAAAA,OAASswB,EAAgC,CAAExB,4BAAAA,IAG7C,IAAM2B,EAAa,CACjBH,+BAAAA,GAEII,EAAe,CAACrO,IAAiB7d,EAAaC,OAAS,SAAW,SAEpEpC,EAAYihB,QAAQqN,sBACtB3wB,IAAAA,OAASywB,EAAY,CACnBC,aAAAA,IAIJ,IAAMzlB,EAAQ,CACZV,UAAWA,EAAU,gCAAgCoI,MAAM8d,GAAY7d,UAyDzE,OAtDK5S,IAAAA,QAAU6oB,IACb7oB,IAAAA,OAASiL,EAAO,CACd2e,QAASf,EAAO7L,KAAK,OAIpBhd,IAAAA,QAAUgpB,IACbhpB,IAAAA,OAASiL,EAAO,CACd4e,QAASb,EAAOhM,KAAK,OAIrBkM,GACFC,EAAaY,WAAWxf,EAAUsC,KAAKgG,YAAYC,WAIjD0c,GACFoB,EAAAA,UAAUC,iBAAiB3f,MAAK,WAC9B,IACE,IAAM4f,EAAWlF,KAAKmF,MAAMnF,KAAKmF,MAAMxB,GAA+ByB,UAChEC,EAAsBH,EAASR,+BAEhCtwB,IAAAA,QAAUA,IAAAA,KAAOixB,EAAqB,aAAcX,IACvDnQ,EAAgBI,WACd,CAACH,EAAUI,YAAYC,OACvBL,EAAUM,SAASC,KACnB,uBAAuB,GAADhf,OACnB4tB,EAA6B,OAAA5tB,OAAMiqB,KAAKC,UAAUyE,KAIzD,IAAMY,EAAqBJ,EAASJ,aAE/B1wB,IAAAA,QAAUkxB,EAAoBR,IACjCvQ,EAAgBI,WACd,CAACH,EAAUI,YAAYC,OACvBL,EAAUM,SAASC,KACnB,uBAAuB,GAADhf,OACnBiqB,KAAKC,UAAUqF,GAAmB,OAAAvvB,OAAMiqB,KAAKC,UAAUxJ,IAIhE,CAAE,MAAO8O,GACPhR,EAAgBI,WACd,CAACH,EAAUI,YAAYC,OACvBL,EAAUM,SAASC,KACnB,uBAAuB,GAADhf,OACnB4tB,EAA6B,KAAA5tB,OAAIwvB,EAAEC,OAE1C,CACF,IAGK/e,EAAO9H,EAAUsC,KAAKgG,YAAYC,WAAWC,QAAQ,CAC1D9H,MAAAA,GAEJ,CAEO,SAASomB,GAAqBC,GAejC,IAdF/mB,EAAS+mB,EAAT/mB,UACA7G,EAAS4tB,EAAT5tB,UACA2O,EAAMif,EAANjf,OACAiC,EAAQgd,EAARhd,SACAid,EAAmBD,EAAnBC,oBACAjD,EAAiBgD,EAAjBhD,kBACAkD,EAAiBF,EAAjBE,kBACApd,EAAckd,EAAdld,eACA+a,EAAKmC,EAALnC,MACA9sB,EAAWivB,EAAXjvB,YACA0H,EAAMunB,EAANvnB,OACAmf,EAAYoI,EAAZpI,aACAC,EAAYmI,EAAZnI,aACA9nB,EAAYiwB,EAAZjwB,aAEMwd,EAAWtU,EAAUsC,KAAKgG,YAAYC,UAC5C2e,EAGIrF,GAAqB,CACvBtD,QAASyI,EACTnd,eAAAA,EACA1Q,UAAAA,EACArB,YAAAA,EACAwc,SAAAA,EACAxd,aAAAA,IARYqwB,EAAsBD,EAAlCxsB,WACe0sB,EAAyBF,EAAxCtsB,cASI0qB,IAA8BnsB,EAAUG,UAC5C7D,IAAAA,OAAS0D,EAAUG,SAASge,QAC5B7hB,IAAAA,OAAS0D,EAAUG,SAASie,KACxBgB,EAAsBqH,GAAuBzmB,GAC7CorB,EAA8BJ,GAAmC,CACrEhrB,UAAAA,EACA4Q,SAAAA,IAEFsd,EAGIxD,GAAyB,CAC3BE,kBAAAA,EACAla,eAAAA,EACAyK,SAAAA,EACAxc,YAAAA,EACAhB,aAAAA,IAPYwwB,EAA6BD,EAAzCnD,WACYqD,EAA6BF,EAAzC3sB,WASF8sB,EAlTF,SAA0CC,GAGtC,IAFFR,EAAiBQ,EAAjBR,kBACApd,EAAc4d,EAAd5d,eAEA6d,EAAqCT,GAAqBvD,GAAqB,CAC7E7Z,eAAAA,IADM4Z,EAAciE,EAAdjE,eAAgBD,EAAQkE,EAARlE,SAGlB9oB,EAAU,sBAAAtD,OAAyBqsB,GAGzC,MAAO,CACLS,WAHiBhS,EAA8BsR,GAI/C9oB,WAAAA,EAEJ,CAuSMitB,CAAkC,CACpCV,kBAAAA,EACApd,eAAAA,IAJY+d,EAA6BJ,EAAzCtD,WACY2D,EAA6BL,EAAzC9sB,WAKIgrB,EAAQd,GAASF,GAAuC,CAAE7a,eAAAA,IAEhE,GAAsB,IAAlBpU,IAAAA,KAAOiwB,GACT,OAAO,KAGT,IAAM5H,EAAerB,GAAgB,CACnCjd,OAAAA,EAAQ8U,SAAAA,IAEJqI,EAAUmB,EAAeA,EAAaqB,eAAY/mB,EAElDutB,EAAmB5rB,EAAWjC,EAAamC,EAAaC,OAAQpD,GAAc2b,KAAK,KACnFmT,EAAa,wFACbtH,EAAS,GACTG,EAAS,CAEb,oDAAArnB,OAAoDuuB,EAAgB,MAClEL,EAA6B,qCAAAluB,OAAqCuuB,EAAgB,0CAAAvuB,OAC3CuuB,EAAgB,KAAG,+CAAAvuB,OACTuuB,EAAgB,MAC7D,MAGFE,EAAgB,kCACtBpwB,IAAAA,KAAOiwB,GAAO,SAACI,GACb,OAAQA,GACN,IAAK,eACHxH,EAAOjG,KAAK,4FAADjhB,OAA6FuuB,EAAgB,KAAAvuB,OAAIkuB,EAA4BM,EAAa,GAAE,MACvK,MACF,IAAK,cACHtH,EAAOjG,KAAK,yBACZ,MACF,IAAK,sBACHiG,EAAOjG,KAAK,wEAAuE,sDAAAjhB,OAC3BuuB,EAAgB,KAAAvuB,OAAIwuB,EAAU,MACtF,MACF,IAAK,cACHnH,EAAOpG,KAAK,yJAEZ,MACF,IAAK,SAEHoG,EAAOpG,KAAK,qEAAAjhB,OAAqEyuB,EAAa,MAC5FP,EACG,qCAAAluB,OAAqCyuB,EAAa,0CAAAzuB,OACZyuB,EAAa,KAAG,+CAAAzuB,OACNyuB,EAAa,MAC5D,MAIZ,IAEA,IAAMiC,EAA6B,CACjChJ,UAAW,CACTC,UAAWrM,EAAWvZ,EAAUme,OAChC0H,QAAStM,EAAWvZ,EAAUoe,MAEhC0H,oBAAqB1G,EAAsB,CACzCwG,UAAWrM,EAAW6F,EAAoBjB,OAC1C0H,QAAStM,EAAW6F,EAAoBhB,MACtC,KACJmO,MAAAA,EACAM,QAASL,EACTL,0BAAAA,EACA6B,uBAAAA,EACAC,0BAAAA,EACAE,8BAAAA,EACAC,8BAAAA,EACAM,8BAAAA,EACAD,8BAAAA,EACA3B,0BAA0B,GAGxB1B,GACF9uB,IAAAA,OAASqyB,EAA4B,CAAEvD,4BAAAA,IAGzC,IAAM2B,EAAa,CACjB4B,2BAAAA,GAGIpnB,EAAQ,CACZV,UAAWA,EAAU,4BAA4BoI,MAAM8d,GAAY7d,UA6BrE,OA1BK5S,IAAAA,QAAU6oB,IACb7oB,IAAAA,OAASiL,EAAO,CACd2e,QAASf,EAAO7L,KAAK,OAIpBhd,IAAAA,QAAUgpB,IACbhpB,IAAAA,OAASiL,EAAO,CACd4e,QAASb,EAAOhM,KAAK,OAIrBkK,GACFlnB,IAAAA,OAASiL,EAAO,CACd6e,QAAS5C,IAIblnB,IAAAA,OAASiL,EAAO,CACd0e,KAAM,KAGJT,GACFC,EAAaY,WAAWxf,EAAUsC,KAAKgG,YAAYC,WAG9CT,EAAO9H,EAAUsC,KAAKgG,YAAYC,WAAWC,QAAQ,CAC1D9H,MAAAA,GAEJ,CAEO,SAASqnB,GAAkCC,GAW9C,IAVFhoB,EAASgoB,EAAThoB,UACA7G,EAAS6uB,EAAT7uB,UACA2O,EAAMkgB,EAANlgB,OACAiC,EAAQie,EAARje,SACAF,EAAcme,EAAdne,eACAoe,EAAeD,EAAfC,gBACAzoB,EAAMwoB,EAANxoB,OACA1H,EAAWkwB,EAAXlwB,YACAggB,EAAYkQ,EAAZlQ,aACAhhB,EAAYkxB,EAAZlxB,aAIA,MAAiB,YAFAkJ,EAAUsC,KAAKgG,YAAYC,UAGnCsc,GAAiB,CACtB7kB,UAAAA,EACA7G,UAAAA,EACA2O,OAAAA,EACAiC,SAAAA,EACAF,eAAAA,EACA/R,YAAAA,EACAggB,aAAAA,EACA8M,MAAOqD,EAAkB,CAAC,oBAAiB7vB,IAC1CuO,MAAK,SAAC0M,GACP,OAAK5d,IAAAA,QAAU4d,EAAK6U,QAIb,CACLC,sBAAuB9U,EAAK+U,sBAC5BC,aAAchV,EAAKiV,iCALZjV,CAOX,IAGKyT,GAAsB,CAC3B9mB,UAAAA,EACA7G,UAAAA,EACA2O,OAAAA,EACAiC,SAAAA,EACAF,eAAAA,EACArK,OAAAA,EACA1H,YAAAA,EACA8sB,MAAOqD,EAAkB,CAAC,oBAAiB7vB,EAC3CtB,aAAAA,IACC6P,MAAK,SAAC0M,GACP,OAAK5d,IAAAA,QAAU4d,EAAK6U,QAIb,CACLC,sBAAuB9U,EAAK+U,uBAJrB/U,CAMX,GACF,CAEO,SAASqO,GAAuB6G,GAYnC,IAXFvoB,EAASuoB,EAATvoB,UACA7G,EAASovB,EAATpvB,UACA2O,EAAMygB,EAANzgB,OACAiC,EAAQwe,EAARxe,SACAF,EAAc0e,EAAd1e,eACA0U,EAAOgK,EAAPhK,QACA0J,EAAeM,EAAfN,gBACAnwB,EAAWywB,EAAXzwB,YACA0H,EAAM+oB,EAAN/oB,OAAMgpB,EAAAD,EACNzQ,aAAAA,OAAY,IAAA0Q,EAAGvuB,EAAaC,OAAMsuB,EAClC1xB,EAAYyxB,EAAZzxB,aAIA,MAAiB,YAFAkJ,EAAUsC,KAAKgG,YAAYC,UAGnCsc,GAAiB,CACtB7kB,UAAAA,EACA7G,UAAAA,EACA2O,OAAAA,EACAiC,SAAAA,EACAgb,mBAAoBxG,EACpB1U,eAAAA,EACA+a,MAAOqD,EAAkB,CAAC,oBAAiB7vB,EAC3CN,YAAAA,EACAggB,aAAAA,IACCnR,MAAK,SAAC0M,GACP,OAAK5d,IAAAA,QAAU4d,EAAK6U,QAGb7U,EAAKoV,YAFHpV,CAGX,IAGKyT,GAAsB,CAC3B9mB,UAAAA,EACA7G,UAAAA,EACA2O,OAAAA,EACAiC,SAAAA,EACAid,oBAAqBzI,EACrB1U,eAAAA,EACA+a,MAAOqD,EAAkB,CAAC,qBAAkB7vB,EAC5CoH,OAAAA,EACA1H,YAAAA,EACAhB,aAAAA,IACC6P,MAAK,SAAC0M,GACP,OAAK5d,IAAAA,QAAU4d,EAAK6U,QAGb7U,EAAKqV,aAFHrV,CAGX,GACF,CAEA,IA6Ga1G,IAAkBL,EAAAA,EAAAA,KA7GC,SAAHqc,GAgBtB,IAfL3oB,EAAS2oB,EAAT3oB,UACA7G,EAASwvB,EAATxvB,UACAqG,EAAMmpB,EAANnpB,OACA+Y,EAAmBoQ,EAAnBpQ,oBACA7c,EAAgBitB,EAAhBjtB,iBACAtB,EAAMuuB,EAANvuB,OACA0N,EAAM6gB,EAAN7gB,OACAiC,EAAQ4e,EAAR5e,SACAF,EAAc8e,EAAd9e,eACAoe,EAAeU,EAAfV,gBACAnwB,EAAW6wB,EAAX7wB,YACA6mB,EAAYgK,EAAZhK,aACAC,EAAY+J,EAAZ/J,aACA9G,EAAY6Q,EAAZ7Q,aACAhhB,EAAY6xB,EAAZ7xB,aAEMwd,EAAWtU,EAAUsC,KAAKgG,YAAYC,UAC5CqgB,EAAqCvF,GAAqB,CACxDxZ,eAAAA,EACAyK,SAAAA,EACA5Y,iBAAAA,EACAtB,OAAAA,EACAtC,YAAAA,EACAhB,aAAAA,IANM0sB,EAAQoF,EAARpF,SAAUC,EAAcmF,EAAdnF,eASlB,GAAiB,YAAbnP,EACF,OAAOuQ,GAAiB,CACtB7kB,UAAAA,EACA7G,UAAAA,EACA2O,OAAAA,EACAiC,SAAAA,EACAF,eAAAA,EACA+a,MAAOqD,EAAkB,CAAC,2BAAwB7vB,EAClD2rB,kBAAmB,CACjBP,SAAAA,EACAC,eAAAA,GAEF3rB,YAAAA,EACA6mB,aAAAA,EACAC,aAAAA,EACA9G,aAAAA,IACCnR,MAAK,SAAC0M,GACP,OAAK5d,IAAAA,QAAU4d,EAAK6U,QAGb7U,EAAKwV,mBAFHxV,CAGX,IAGF,GAAiB,aAAbiB,EACF,OAAOwS,GAAsB,CAC3B9mB,UAAAA,EACA7G,UAAAA,EACA2O,OAAAA,EACAiC,SAAAA,EACAF,eAAAA,EACA+a,MAAOqD,EAAkB,CAAC,4BAAyB7vB,EACnD2rB,kBAAmB,CACjBP,SAAAA,EACAC,eAAAA,GAEFjkB,OAAAA,EACA1H,YAAAA,EACA6mB,aAAAA,EACAC,aAAAA,EACA9nB,aAAAA,IACC6P,MAAK,SAAC0M,GACP,OAAK5d,IAAAA,QAAU4d,EAAK6U,QAGb7U,EAAKyV,oBAFHzV,CAGX,IAGF,IAKIiL,EALEqC,EAAQ6C,IAAarkB,EAAuBG,aAAe,MAAQ,OACnEypB,EACJvF,IAAarkB,EAAuBC,YAAcokB,IAAarkB,EAAuBI,SAClF,sCAAwC,8BACxCgf,EAAU,CAAC,CAAC,GAADnnB,OAAI2xB,EAAgB,KAAA3xB,OAAIqsB,GAAkB9C,IAEvDlC,EAAM,uGAAArnB,OAA0G6jB,EAAanjB,EAAaggB,EAAchhB,IAQ5J,MANiB,aAAbwd,EACFmK,EAAM,qDAAArnB,OAAwDqnB,GACxC,YAAbnK,IACTgK,EAAS,kCAGJD,GAAM,CACXre,UAAAA,EACA7G,UAAAA,EACAqG,OAAAA,EACA+Y,oBAAqBA,GAAuBqH,GAAuBzmB,GACnEqN,IA7iCQ,GA8iCR+X,QAAAA,EACAE,OAAAA,EACAH,OAAAA,EACAxW,OAAAA,EACAiC,SAAAA,EACA3P,OAAAA,EACAsB,iBAAAA,EACAijB,aAAAA,EACAC,aAAAA,EACA9mB,YAAAA,GAEJ,IAEqE,SAAA6pB,GAAI,OAAIA,EAAKC,WAAW,IA+EhFpW,IACXc,EAAAA,EAAAA,KA9EkC,SAAH0c,GAc1B,IAECpE,EAoBAA,EAnCN5kB,EAASgpB,EAAThpB,UACA7G,EAAS6vB,EAAT7vB,UACAqG,EAAMwpB,EAANxpB,OACAsI,EAAMkhB,EAANlhB,OACAiC,EAAQif,EAARjf,SACAlT,EAAemyB,EAAfnyB,gBACAgT,EAAcmf,EAAdnf,eACAoe,EAAee,EAAff,gBACAgB,EAAQD,EAARC,SACAnxB,EAAWkxB,EAAXlxB,YACAggB,EAAYkR,EAAZlR,aACAsI,EAAiB4I,EAAjB5I,kBACAtpB,EAAYkyB,EAAZlyB,aAEA,GAAwB,aAApBD,EAMF,OAHIoxB,IACFrD,EAAQqE,EAAW,CAAC,UAAY,CAAC,gBAE5BpE,GAAiB,CACtB7kB,UAAAA,EACA7G,UAAAA,EACA2O,OAAAA,EACAiC,SAAAA,EACAF,eAAAA,EACA+a,MAAAA,EACA9sB,YAAAA,EACAggB,aAAAA,IAMJ,GAAwB,YAApBjhB,IAAkCpB,IAAAA,IAAM+J,GAAQ,SAAAiiB,GAAC,MAAuC,eAAnChsB,IAAAA,OAASgsB,EAAG,CAAC,SAAU,OAAwB,IAMtG,OAHIwG,IACFrD,EAAQqE,EAAW,CAAC,UAAY,CAAC,gBAE5BnC,GAAsB,CAC3B9mB,UAAAA,EACA7G,UAAAA,EACA2O,OAAAA,EACAiC,SAAAA,EACAF,eAAAA,EACA+a,MAAAA,EACAplB,OAAAA,EACA1H,YAAAA,EACAhB,aAAAA,IAIJ,IAAM0F,EAAa/G,IAAAA,KAAOoU,KAAkB,SAAC+D,GAC3C,MAAwB,YAApB/W,EACiB,0BAAZ+W,EAAKhV,GAEK,wBAAZgV,EAAKhV,EACd,IAEM0b,EAAWtU,EAAUsC,KAAKgG,YAAYC,UAE5C,OAAOyB,GAAc,CACnBhK,UAAAA,EACA7G,UAAAA,EACAqG,OAAAA,EACA9G,QAAS8D,EAAaA,EAAW9D,aAAUN,EAC3CgoB,kBAAmBA,GAAqBJ,GAAeI,kBAAkB9L,GACzExM,OAAAA,EACAiC,SAAAA,EACAjS,YAAAA,EACA+R,eAAAA,EACA/S,aAAAA,GAEJ,IAG4C,SAAA6qB,GAAI,OAAIA,EAAKC,WAAW,IAkDvDpV,IACXF,EAAAA,EAAAA,KAjD+B,SAAH4c,GAcvB,IAbLlpB,EAASkpB,EAATlpB,UACA7G,EAAS+vB,EAAT/vB,UACAqG,EAAM0pB,EAAN1pB,OACA9D,EAAgBwtB,EAAhBxtB,iBACAtB,EAAM8uB,EAAN9uB,OACA0N,EAAMohB,EAANphB,OACAiC,EAAQmf,EAARnf,SACAF,EAAcqf,EAAdrf,eACA/R,EAAWoxB,EAAXpxB,YACA6mB,EAAYuK,EAAZvK,aACAC,EAAYsK,EAAZtK,aACAqJ,EAAeiB,EAAfjB,gBACAnxB,EAAYoyB,EAAZpyB,aAGAqyB,EAAqCzF,GAAqB,CACxD7Z,eAAAA,EACAyK,SAHetU,EAAUsC,KAAKgG,YAAYC,UAI1C7M,iBAAAA,EACAtB,OAAAA,EACAtC,YAAAA,IAGF,OAAOgvB,GAAsB,CAC3B9mB,UAAAA,EACA7G,UAAAA,EACA2O,OAAAA,EACAiC,SAAAA,EACAF,eAAAA,EACA+a,MAAOqD,EAAkB,CAAC,oBAAiB7vB,EAC3C6uB,kBAAmB,CACjBzD,SAhBY2F,EAAR3F,SAiBJC,eAjB4B0F,EAAd1F,gBAmBhBjkB,OAAAA,EACA1H,YAAAA,EACA6mB,aAAAA,EACAC,aAAAA,EACA9nB,aAAAA,IACC6P,MAAK,SAAC0M,GACP,OAAK5d,IAAAA,QAAU4d,EAAK6U,QAGb7U,EAAK+V,qBAFH/V,CAGX,GACF,IAGyC,SAAAsO,GAAI,OAAIA,EAAKC,WAAW,I,qCCxxC3DyH,GAAgB,IAChBC,GAA6BC,EAAAA,UAAcC,6BAA6BC,aACxEC,GAAoBH,EAAAA,UAAcC,6BAA6BG,OACjEC,GAAY,KAET,SAAS9d,GAAYhW,GAExB,IADF6S,EAAQ7S,EAAR6S,SAEA,GAAIihB,GACF,OAAOA,GAET,IAAMliB,EAAY+C,GAAAA,EAAM9F,IAAI,cAgB5B,OAdAilB,GAAY,IAAIhjB,KAAJ,EAAY,SAACuD,GACnBzC,GAEFyC,EAAQxB,EAASkhB,sBACdrhB,QAAQ,CAAE/E,IAAKiE,IACff,MAAK,SAAAmjB,GAAO,OAAIr0B,IAAAA,OACfq0B,GACA,SAAA3zB,GAAA,IAAGinB,EAAMjnB,EAANinB,OAAiB,OAAAjnB,EAAT4zB,YAA8BV,KAAkBjM,IAAWkM,IAA8BlM,IAAWsM,GAAkB,GAClI,IACAM,OAAM,iBAAM,EAAE,KAEnB7f,EAAQ,GACV,GAGF,CAEO,SAAS8f,KACdL,GAAY,IACd,C,8BChCaM,GAAsB,CACjCC,QAAS,CACPluB,KAAM,cACNmuB,UAAW,mBACXC,SAAU,mBAEZC,OAAQ,CACNruB,KAAM,aACNmuB,UAAW,kBACXC,SAAU,kBAEZE,gBAAiB,CACftuB,KAAM,kBACNmuB,UAAW,wBACXC,SAAU,wBAEZG,KAAM,CACJvuB,KAAM,OACNmuB,UAAW,gBACXC,SAAU,gBAEZI,WAAY,CACVxuB,KAAM,aACNmuB,UAAW,sBACXC,SAAU,uBAId,SAASK,GAAUtwB,GACjB,IAAIuwB,EAAevwB,EAEnB,OAAQA,GACN,IAAK,oBACHuwB,EAAe,2BACf,MACF,IAAK,4BACHA,EAAe,mCAKnB,OAAOA,CACT,CAEA,SAAStM,GAAKvoB,GAEV,IADFqQ,EAAGrQ,EAAHqQ,IAAK1C,EAAG3N,EAAH2N,IAAKC,EAAU5N,EAAV4N,WAAYvK,EAASrD,EAATqD,UAAWiB,EAAMtE,EAANsE,OAAQwwB,EAAK90B,EAAL80B,MAEzC,OAAOxkB,GAAAA,YACJC,UAAUC,SAASH,GACnBpF,SAASuF,SAAS7C,GAClBhD,UAAU6F,SAAS5C,GAAY,2BAC/BmnB,UAAU,CACTC,eAAgB,CACdC,OAAQlzB,GAAAA,QAAO8M,IAAI,eACnBqmB,WAAY,wCAEdtqB,MAAO,CACL+F,OAAO,EACPwkB,KAAM,EACNzkB,IAAK,GACLhL,SAAO8S,EAAAA,EAAAA,GAAA,GACJoc,GAAUtwB,GAAU,MAEvBqkB,OAAQ,CAACmM,EAAM3uB,KAAM2uB,EAAMR,UAAWQ,EAAMP,SAAUjwB,GACtD8wB,UAAWxY,EAAWvZ,EAAUme,OAChC6T,QAASzY,EAAWvZ,EAAUoe,QAGjC7Q,WACL,CAEO,IAAM0kB,IAAmB9e,EAAAA,EAAAA,KAAa,SAAAnW,GACJ,OACnCkoB,GAAM,CACVlY,IAFGhQ,EAAHgQ,IAGA1C,IAHQtN,EAAHsN,IAILC,WAJoBvN,EAAVuN,WAKVvK,UAL+BhD,EAATgD,UAMtBiB,OANuCjE,EAANiE,OAOjCwwB,MAAOV,GAAoBC,SAC3B,GAAE,sCAESkB,IAA2B/e,EAAAA,EAAAA,KAAa,SAAA1V,GACZ,OACnCynB,GAAM,CACVlY,IAFGvP,EAAHuP,IAGA1C,IAHQ7M,EAAH6M,IAILC,WAJoB9M,EAAV8M,WAKVvK,UAL+BvC,EAATuC,UAMtBiB,OANuCxD,EAANwD,OAOjCwwB,MAAOV,GAAoBK,iBAC3B,GAAE,gDAESe,IAAkBhf,EAAAA,EAAAA,KAAa,SAAAhV,GACH,OACnC+mB,GAAM,CACVlY,IAFG7O,EAAH6O,IAGA1C,IAHQnM,EAAHmM,IAILC,WAJoBpM,EAAVoM,WAKVvK,UAL+B7B,EAAT6B,UAMtBiB,OANuC9C,EAAN8C,OAOjCwwB,MAAOV,GAAoBI,QAC3B,GAAE,qCAESiB,IAAgBjf,EAAAA,EAAAA,KAAa,SAAA5U,GACD,OACnC2mB,GAAM,CACVlY,IAFGzO,EAAHyO,IAGA1C,IAHQ/L,EAAH+L,IAILC,WAJoBhM,EAAVgM,WAKVvK,UAL+BzB,EAATyB,UAMtBiB,OANuC1C,EAAN0C,OAOjCwwB,MAAOV,GAAoBM,MAC3B,GAAE,mCAESgB,IAAsBlf,EAAAA,EAAAA,KAAa,SAAA1U,GACP,OACnCymB,GAAM,CACVlY,IAFGvO,EAAHuO,IAGA1C,IAHQ7L,EAAH6L,IAILC,WAJoB9L,EAAV8L,WAKVvK,UAL+BvB,EAATuB,UAMtBiB,OANuCxC,EAANwC,OAOjCwwB,MAAOV,GAAoBO,YAC3B,GAAE,yC,2ZC/HSgB,EAAa,SAAAC,GAAK,OAC5BC,EAAAA,EAAAA,KAACC,EAAAA,cAAa,CACbC,MAAO,CACCC,EAAG,SAAAzW,GAAI,OAAKsW,EAAAA,EAAAA,KAAA,KAAAI,SAAI1W,GAAS,GAEjC2W,SAAUN,EAAMM,UAChB,ECVSC,EACCvyB,cADDuyB,EAEIvyB,gBAFJuyB,EAGEvyB,cAHFuyB,EAIOvyB,yBAJPuyB,EAKUvyB,yIALVuyB,EAMQvyB,6BANRuyB,EAQevyB,0BARfuyB,EASOvyB,2BATPuyB,EAWGvyB,mEAXHuyB,EAYMvyB,gGAZNuyB,EAaGvyB,QAbHuyB,EAcevyB,8BAdfuyB,EAekBvyB,8BAflBuyB,EAgBMvyB,sBAhBNuyB,EAiBQvyB,wBAjBRuyB,EAkBSvyB,yCAlBTuyB,EAoBGvyB,mDApBHuyB,EAsBGvyB,8CAtBHuyB,EAuBGvyB,sBAvBHuyB,EAwBUvyB,0GAxBVuyB,EA0BMvyB,mBA1BNuyB,EA4BgCvyB,8NA5BhCuyB,EA6BuBvyB,6SA7BvBuyB,EA8ByBvyB,qTA9BzBuyB,EA+BgBvyB,wJA/BhBuyB,EAgCevyB,wRAhCfuyB,EAmCSvyB,wBAnCTuyB,EAoCWvyB,4BApCXuyB,GAqCEvyB,gBArCFuyB,GAsCIvyB,kBAtCJuyB,GAuCKvyB,mBAvCLuyB,GAyCGvyB,wPAzCHuyB,GA0CFvyB,UA1CEuyB,GA2CCvyB,aA3CDuyB,GA6CGvyB,0CA7CHuyB,GA8CCvyB,+IAGDwyB,GAAe,CAC1BC,UAAWzyB,cACX0yB,cAAe1yB,iBACf2yB,gBAAiB3yB,mBACjB4yB,QAAS5yB,UACT6yB,cAAe7yB,iBACf8yB,aAAc9yB,cACdoI,KAAMpI,aACN+yB,MAAO/yB,QACPgzB,cAAehzB,iBACfizB,SAAUjzB,YACVkzB,SAAUlzB,WACVmzB,aAAcnzB,gBACdozB,OAAQpzB,YACRqzB,SAAUrzB,YACVszB,eAAgBtzB,oBAGLuzB,GAAiB,CAC5BpS,kBAAmBnhB,yBACnBqgB,0BAA2BrgB,sBChE7B,SAASwzB,GAAYxB,GACnB,IAAQyB,EAAoBzB,EAApByB,QAASC,EAAW1B,EAAX0B,OAETC,EAAgBD,EAAhBC,KAAM9zB,EAAU6zB,EAAV7zB,MAIR+zB,GAAalwB,EAAAA,EAAAA,UACjB,kBACE+vB,EAAQ1zB,UAAUwyB,EAA6B,CAAE1yB,MAAAA,GAAQ,GAC3D,CAAC4zB,EAAS5zB,IAGNg0B,GAAcnwB,EAAAA,EAAAA,UAClB,kBACE+vB,EAAQ1zB,UAAUwyB,EAA4B,GAChD,CAACkB,IAEGK,GAAUpwB,EAAAA,EAAAA,UACd,kBACE+vB,EAAQ1zB,UAAUwyB,EAA4B,GAChD,CAACkB,IAGGM,GAAcrwB,EAAAA,EAAAA,UAClB,kBACE+vB,EAAQ1zB,UAAUwyB,EAAoC,CAAEoB,KAAAA,EAAM9zB,MAAAA,GAAQ,GACxE,CAAC8zB,EAAMF,EAAS5zB,IAIlB,OACEm0B,EAAAA,EAAAA,MAAChf,EAAAA,SAAc,CAAAqd,SAAA,EACbJ,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,cAAa5B,SAAEuB,KAC9BI,EAAAA,EAAAA,MAAA,OAAKC,UAAU,yBAAwB5B,SAAA,EACrC2B,EAAAA,EAAAA,MAAA,OAAKC,UAAU,kBAAiB5B,SAAA,EAC9BJ,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,uBAAsB5B,UACnCJ,EAAAA,EAAAA,KAAA,OAAKgC,UAAS,cAAAv2B,OAhCA,8BAkChBu0B,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,YAAW5B,UACxBJ,EAAAA,EAAAA,KAACF,EAAU,CAACO,SAAUuB,UAG1BG,EAAAA,EAAAA,MAAA,OAAKC,UAAU,mBAAkB5B,SAAA,EAC/BJ,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,uBAAsB5B,UACnCJ,EAAAA,EAAAA,KAAA,OAAKgC,UAAS,cAAAv2B,OAvCA,8BAyChBs2B,EAAAA,EAAAA,MAAA,OAAKC,UAAU,YAAW5B,SAAA,EACxBJ,EAAAA,EAAAA,KAACF,EAAU,CAACO,SAAUwB,IACrBC,aAMb,CAEAP,GAAYU,aAAe,CAC3B,EAYA,UChCA,SAASC,GAAenC,GACtB,IACEhX,EAOEgX,EAPFhX,YACAxb,EAMEwyB,EANFxyB,KACA40B,EAKEpC,EALFoC,mBACAxd,EAIEob,EAJFpb,UACAM,EAGE8a,EAHF9a,cACAmd,EAEErC,EAFFqC,iBACA5e,EACEuc,EADFvc,YAGIxG,GAAWvL,EAAAA,EAAAA,UAAQ,kBAAMyG,EAAAA,EAAAA,eAAc,CAC3CC,WAAY,WAAF,OAAQ4Q,EAAYxY,gBAAgByE,EAAE,EAChDoD,WAAY,WAAF,OAAQ2Q,EAAY1Q,YAAYrD,EAAE,EAC5CsD,iBAAiB,GAChByQ,EAAYsZ,UAAW,CAAC,0BAA0B5pB,YAAY,GAAE,CAACsQ,EAAYsZ,UAAWtZ,EAAYxY,gBAAgByE,GAAI+T,EAAY1Q,YAAYrD,KAEnJstB,EAAsDvZ,EAAYE,eAAtDlN,EAASumB,EAAbttB,GAA6ButB,EAAYD,EAA1BE,aACvB5wB,GAA0DC,EAAAA,EAAAA,UAAS,CAAE4wB,cAAc,EAAOC,gBAAiB,OAAO5wB,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAAA+wB,EAAA7wB,EAAA,GAAzG2wB,EAAYE,EAAZF,aAAcC,EAAeC,EAAfD,gBAAmBE,EAAY9wB,EAAA,GAEhD+wB,GAAYxwB,EAAAA,EAAAA,cAChB,YArDJ,SAA2BlI,GAUvB,IATF6S,EAAQ7S,EAAR6S,SACAulB,EAAYp4B,EAAZo4B,aACAh1B,EAAIpD,EAAJoD,KACAq1B,EAAYz4B,EAAZy4B,aACAT,EAAkBh4B,EAAlBg4B,mBACAxd,EAASxa,EAATwa,UACAM,EAAa9a,EAAb8a,cACAmd,EAAgBj4B,EAAhBi4B,iBACA5e,EAAWrZ,EAAXqZ,YAEAmB,IACAM,KAEA9E,EAAAA,EAAAA,cAAa,CAAEnD,SAAAA,IACZ8lB,SAAQ,WACPV,IACA5e,GACF,IAAGxI,MAAK,SAACmjB,GACP,GAAIA,EAAQ9uB,OAAS,EAAG,CACtB,IAAMqzB,GAAkBK,EAAAA,EAAAA,KAAa,CAAEx1B,KAAAA,EAAMk0B,OAAQtD,EAAQ,GAAI6E,SAAUT,IAC3EK,EAAa,CAAEH,cAAc,EAAMC,gBAAAA,GACrC,MACEE,EAAa,CAAEH,cAAc,EAAMC,gBAAiB,IAExD,IACCrE,OAAM,SAAC4E,GACNd,EAAmBe,MAAMD,EAASE,SAClCP,EAAa,CAAEH,cAAc,EAAMC,gBAAiB,IACtD,GACJ,CAwBMU,CAAmB,CACjBpmB,SAAAA,EACAjB,UAAAA,EACAwmB,aAAAA,EACAh1B,KAAAA,EACA40B,mBAAAA,EACAS,aAAAA,EACAje,UAAAA,EACAM,cAAAA,EACAmd,iBAAAA,EACA5e,YAAAA,GAEJ,GACA,CAACxG,EAAUjB,EAAWwmB,EAAch1B,EAAM40B,EAAoBxd,EAAWM,EAAemd,EAAkB5e,IAQ5G,OALA6f,EAAAA,EAAAA,YAAU,WAER,OADAR,IACOvE,EAAAA,iBACT,GAAG,CAACuE,IAEG,CAAEJ,aAAAA,EAAcC,gBAAAA,EACzB,CAEA,SAASY,GAAWvD,GAClB,IACEwD,EAUExD,EAVFwD,OACAxa,EASEgX,EATFhX,YACAoZ,EAQEpC,EARFoC,mBACA50B,EAOEwyB,EAPFxyB,KACAi0B,EAMEzB,EANFyB,QACAr1B,EAKE4zB,EALF5zB,YACAwY,EAIEob,EAJFpb,UACAM,EAGE8a,EAHF9a,cACAmd,EAEErC,EAFFqC,iBACA5e,EACEuc,EADFvc,YAIIggB,EAAqBr3B,EAAYihB,QAAQ8H,sBAAwB/oB,EAAYihB,QAAQ+H,oBAErFsO,GAAchyB,EAAAA,EAAAA,UAAQ,kBAC1B+vB,EAAQ1zB,UAAUwyB,EAAgC,GAAE,CAACkB,IACjDkC,GAAiBjyB,EAAAA,EAAAA,UAAQ,kBAC7B+vB,EAAQ1zB,UAAUwyB,EAAmC,GAAE,CAACkB,IACpDmC,GAAelyB,EAAAA,EAAAA,UAAQ,kBAC3B+vB,EAAQ1zB,UAAUwyB,EAAiC,GAAE,CAACkB,IAExDoC,EAA0C1B,GAAe,CACvDnZ,YAAAA,EACAxb,KAAAA,EACA40B,mBAAAA,EAEAxd,UAAAA,EACAM,cAAAA,EACAmd,iBAAAA,EACA5e,YAAAA,IARMif,EAAYmB,EAAZnB,aAAcC,EAAekB,EAAflB,gBAWhBmB,GAAapyB,EAAAA,EAAAA,UAAQ,kBAAM3H,IAAAA,KAAO44B,GAAmB,CAAC,GAAE,CAACA,IAEzDoB,GAA4BzxB,EAAAA,EAAAA,cAAY,WACxCkxB,IACFpB,EAAmB4B,uBAAuBF,GAC1CN,EAAOpY,gBAAgB,mBAE3B,GAAG,CAAC0Y,EAAY1B,EAAoBoB,IAE9BS,GAAa3xB,EAAAA,EAAAA,cAAY,WAC7B,GAAIowB,EAAc,CAChB,GAAIoB,EAEF,OADA1B,EAAmB8B,iBACXjE,EAAAA,EAAAA,KAACuB,GAAW,CAACE,OAAQiB,EAAiBlB,QAASA,IAEzDW,EAAmB+B,UACrB,CACA,OACEnC,EAAAA,EAAAA,MAAChf,EAAAA,SAAc,CAAAqd,SAAA,EACbJ,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,6BAA4B5B,UACzCJ,EAAAA,EAAAA,KAAA,OAAKgC,UAAS,oBAAAv2B,OAzCL,sCA2CXu0B,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,aAAY5B,SAAEqD,KAC7BzD,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,gBAAe5B,SAAEsD,MAGtC,GAAG,CAAChB,EAAiBmB,EAAY1B,EAAoBM,EAAcjB,EAASkC,EAAgBD,IAE5F,OACE1B,EAAAA,EAAAA,MAAA,OAAKC,UAAU,yBAAwB5B,SAAA,CACpC4D,KACDhE,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,eAAc5B,SAC1BoD,GACCxD,EAAAA,EAAAA,KAACmE,EAAAA,EAAM,CAACC,QAASN,EAA0B1D,SAAEuD,KAE3C3D,EAAAA,EAAAA,KAACqE,EAAAA,EAAa,CAACD,QAASN,EAA2Bpa,KAAMia,QAKrE,CAEAL,GAAWrB,aAAe,CACxBsB,OAAQ,CACNpY,gBAAiBrhB,IAAAA,MAEnBq4B,mBAAoB,CAClB4B,uBAAwBj6B,IAAAA,KACxBm6B,cAAen6B,IAAAA,KACfo6B,SAAUp6B,IAAAA,KACVo5B,MAAOp5B,IAAAA,MAETqC,YAAam4B,IAAAA,MAAgB,CAC3BlX,QAASkX,IAAAA,MAAgB,CACvBpP,sBAAsB,MAG1BvQ,UAAW7a,IAAAA,KACXmb,cAAenb,IAAAA,KACfs4B,iBAAkBt4B,IAAAA,KAClB0Z,YAAa1Z,IAAAA,MA6Cf,UCrOa6I,GAAiB,CAC5B,CAAE1I,IAAK,oBAAqBs6B,QAASx2B,eACrC,CAAE9D,IAAK,4BAA6Bs6B,QAASx2B,Y,wBCE/C,SAASy2B,GAAiBzE,GACxB,IACE0E,EAEE1E,EAFF0E,KACAC,EACE3E,EADF2E,SAGIC,GAAQlzB,EAAAA,EAAAA,UAAQ,kBAAMgzB,EAAKG,aAAa,GAAE,CAACH,EAAKG,gBAChDC,GAAMpzB,EAAAA,EAAAA,UAAQ,kBAAMgzB,EAAKK,WAAW,GAAE,CAACL,EAAKK,cAElD,OACE9E,EAAAA,EAAAA,KAAA,OAAKgC,UAAW+C,KAAW,kCAAmCL,GAAUtE,UACtE2B,EAAAA,EAAAA,MAAA,OAAKC,UAAU,eAAc5B,SAAA,EAC3BJ,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,YAAYgD,MAAO,CAAEC,KAAMJ,MAC1C7E,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,cAAcgD,MAAO,CAAEC,KAAMN,SAIpD,CAEAH,GAAiBvC,aAAe,CAChC,EASA,UC7BA,SAASiD,GAAgBnF,GACvB,IACE0E,EAEE1E,EAFF0E,KACAC,EACE3E,EADF2E,SAGIC,GAAQlzB,EAAAA,EAAAA,UAAQ,kBAAMgzB,EAAKU,YAAY,GAAE,CAACV,EAAKU,eAC/CN,GAAMpzB,EAAAA,EAAAA,UAAQ,kBAAMgzB,EAAKW,UAAU,GAAE,CAACX,EAAKW,aAEjD,OACEpF,EAAAA,EAAAA,KAAA,OAAKgC,UAAW+C,KAAW,iCAAkCL,GAAUtE,UACrE2B,EAAAA,EAAAA,MAAA,OAAKC,UAAU,cAAa5B,SAAA,EAC1BJ,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,cAAcgD,MAAO,CAAEC,KAAMN,MAC5C3E,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,YAAYgD,MAAO,CAAEC,KAAMJ,SAIlD,CAEAK,GAAgBjD,aAAe,CAC/B,EASA,U,aCxBA,SAASoD,GAAatF,GACpB,IACE0E,EAME1E,EANF0E,KACAl3B,EAKEwyB,EALFxyB,KACAm3B,EAIE3E,EAJF2E,SACAY,EAGEvF,EAHFuF,wBACA/B,EAEExD,EAFFwD,OACApB,EACEpC,EADFoC,mBAGIoD,GAAe9zB,EAAAA,EAAAA,UAAQ,iBAAO,CAClC4W,OAAQoc,EAAKpc,OACb/X,KAAMm0B,EAAKn0B,KACXqY,SAAU8b,EAAK9b,SACfxd,aAAcs5B,EAAKt5B,aACnB4f,UAAW0Z,EAAK1Z,UAChBya,SAAUf,EAAKe,SAChB,GAAG,CAACf,IAECgB,GAAYh0B,EAAAA,EAAAA,UAAQ,iBAAwB,YAAlBgzB,EAAK9b,QAAsB,GAAE,CAAC8b,IACtDiB,EAA0B9sB,GAAAA,UAA1B8sB,sBAEFC,GAAal0B,EAAAA,EAAAA,UAAQ,WACzB,IAAIg0B,EAYF,OAAQzF,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,8BAXvB,OAAQuD,EAAald,QACnB,KAAKqd,EAAsBE,OACzB,OAAQ5F,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,kCACzB,KAAK0D,EAAsBG,QACzB,OAAQ7F,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,yBACzB,KAAK0D,EAAsBI,QAE3B,QACE,OAAQ9F,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,sCAK/B,GAAG,CAAC0D,EAAsBG,QAASH,EAAsBI,QAASJ,EAAsBE,OAAQH,EAAWF,EAAald,SAElHyb,GAA4BzxB,EAAAA,EAAAA,cAAY,WACxCkxB,IACEpB,GACFA,EAAmB4D,gBAAgBR,EAAaj1B,MAElDizB,EAAOpY,gBAAgB,mBAE3B,GAAG,CAACgX,EAAoBoD,EAAaj1B,KAAMizB,IAErCyC,GAAuB3zB,EAAAA,EAAAA,cAAY,WACnCizB,GACFA,EAAwBC,EAAaC,UAEvC1B,GACF,GAAG,CAACwB,EAAyBC,EAAaC,SAAU1B,IACpD,OACE/B,EAAAA,EAAAA,MAAA,OAAKC,UAAW+C,KACd,YACA,+BACAL,GACAtE,SAAA,EAEAJ,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,SAAQ5B,SACpBuF,KAEH3F,EAAAA,EAAAA,KAAA,KACEiG,MAAOxB,EAAKyB,YAAc,GAAKzB,EAAKn0B,KACpC,aAAY/C,EAAKO,UAAU,GAADrC,OAAIg5B,EAAK1Z,UAAS,gBAC5Cob,OAAQZ,EAAaj1B,KACrB8zB,QAAS4B,EAAqB5F,SAC9BmF,EAAaj1B,SAIrB,CAwBA+0B,GAAapD,aAAe,CAC1BwC,KAAM,CAAC,EACPC,SAAU,GACVY,wBAAyBx7B,IAAAA,KACzBy5B,OAAQ,CACNpY,gBAAiBrhB,IAAAA,MAEnBq4B,mBAAoB,CAClB4D,gBAAiBj8B,IAAAA,OAIrB,UC/GA,SAASs8B,GAAQrG,GACf,IACEsG,EAKEtG,EALFsG,YACAC,EAIEvG,EAJFuG,YACA7B,EAGE1E,EAHF0E,KACAjD,EAEEzB,EAFFyB,QACA/yB,EACEsxB,EADFtxB,OAGI83B,GAAe90B,EAAAA,EAAAA,UAAQ,kBAAM+vB,EAAQ1zB,UAAUwyB,GAA6B,CAChF1yB,MAAO62B,EAAK+B,eACZC,gBAAiBhC,EAAKiC,0BACtB,GAAE,CAACjC,EAAKiC,yBAA0BjC,EAAK+B,eAAgBhF,IAEnDmF,GAAgBl1B,EAAAA,EAAAA,UACpB,kBAAM+vB,EAAQ1zB,UAAUwzB,GAAe7yB,GAAS,CAAEb,MAAO62B,EAAKmC,kBAAmB,GACjF,CAACnC,EAAKmC,iBAAkBn4B,EAAQ+yB,IAG5BqF,GAAiBp1B,EAAAA,EAAAA,UACrB,kBAAM+vB,EAAQ1zB,UAAUwzB,GAAe7yB,GAAS,CAAEb,MAAO62B,EAAKqC,wBAAyB,GACvF,CAACrC,EAAKqC,uBAAwBr4B,EAAQ+yB,IAGxC,OACEO,EAAAA,EAAAA,MAAA,OAAKC,UAAU,WAAU5B,SAAA,EACvB2B,EAAAA,EAAAA,MAAA,OAAKC,UAAU,cAAa5B,SAAA,EAC1BJ,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,iBAAgB5B,SAC5BiG,KAEHrG,EAAAA,EAAAA,KAAA,QAAAI,SAAOuG,QAET5E,EAAAA,EAAAA,MAAA,OAAKC,UAAU,iBAAgB5B,SAAA,EAC7BJ,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,iBAAgB5B,SAC5BkG,KAEHtG,EAAAA,EAAAA,KAAA,QAAAI,SAAOyG,QAET9E,EAAAA,EAAAA,MAAA,OAAKC,UAAU,aAAY5B,SAAA,EACzBJ,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,cACfhC,EAAAA,EAAAA,KAAA,QAAAI,SAAOmG,SAKf,CAEA,SAASQ,GAAmBhH,GAC1B,IACEiH,EAOEjH,EAPFiH,OACAC,EAMElH,EANFkH,WACAxC,EAKE1E,EALF0E,KACAC,EAIE3E,EAJF2E,SACAlD,EAGEzB,EAHFyB,QACAh0B,EAEEuyB,EAFFvyB,UACAiB,EACEsxB,EADFtxB,OAGI8wB,GAAY9tB,EAAAA,EAAAA,UAChB,kBACE+vB,EAAQza,WAAWvZ,EAAUme,MAAM,GAErC,CAACne,EAAUme,QAGP6T,GAAU/tB,EAAAA,EAAAA,UACd,kBACE+vB,EAAQza,WAAWvZ,EAAUoe,IAAI,GAEnC,CAACpe,EAAUoe,MAGP0a,GAAc70B,EAAAA,EAAAA,UAClB,WACE,IAAMmb,GAAsBqH,EAAAA,EAAAA,wBAAuBzmB,GAC7C05B,EAAsB1F,EAAQza,WAAW6F,EAAoBjB,OAC7Dwb,EAAoB3F,EAAQza,WAAW6F,EAAoBhB,KACjE,OAAI2T,IAAcC,EACT0H,EAEH,GAANz7B,OAAUy7B,EAAmB,OAAAz7B,OAAM07B,EACrC,GAEA,CAAC35B,IAGG64B,GAAc50B,EAAAA,EAAAA,UAClB,WACE,OAAI8tB,IAAcC,EACTD,EAEH,GAAN9zB,OAAU8zB,EAAS,OAAA9zB,OAAM+zB,EAC3B,GACA,CAACD,EAAWC,IAGR4H,GAAiB31B,EAAAA,EAAAA,UACrB,WACE,OAAIu1B,EACK,qBAEF,kBACT,GACA,CAACA,IAGGK,GAAoB51B,EAAAA,EAAAA,UACxB,kBAAOw1B,EAAa,gBAAkB,cAAc,GACpD,CAACA,IAGH,OACEjH,EAAAA,EAAAA,KAAA,OAAKgC,UAAS,GAAAv2B,OAAK27B,EAAc,KAAA37B,OAAI47B,EAAiB,KAAA57B,OAAIi5B,GAAWtE,UACnEJ,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,kBAAiB5B,UAC9B2B,EAAAA,EAAAA,MAAA,OAAKC,UAAU,gBAAe5B,SAAA,EAC5BJ,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,cAAa5B,SAAEqE,EAAKn0B,QACnC0vB,EAAAA,EAAAA,KAACoG,GAAO,CACNa,WAAYA,EACZZ,YAAaA,EACbC,YAAaA,EACb7B,KAAMA,EACNjD,QAASA,EACT/yB,OAAQA,UAMpB,CAEAs4B,GAAmB9E,aAAe,CAChC+E,QAAQ,EACRC,YAAY,GAuBdb,GAAQnE,aAAe,CACvB,EAkBA,UC9KA,SAASqF,GAAYvH,GACnB,IACE0E,EAEE1E,EAFF0E,KACAC,EACE3E,EADF2E,SAGF,OACE3C,EAAAA,EAAAA,MAAChf,EAAAA,SAAc,CAAAqd,SAAA,EACbJ,EAAAA,EAAAA,KAAA,OAAKgC,UAAS,cAAAv2B,OAAgBi5B,GAAWtE,SAAEqE,EAAK+B,kBAChDxG,EAAAA,EAAAA,KAAA,OAAKgC,UAAS,yBAAAv2B,OAA2Bi5B,GAAWtE,SAAEqE,EAAKiC,4BAC3D1G,EAAAA,EAAAA,KAAA,OAAKgC,UAAS,aAAAv2B,OAAei5B,GAAWtE,SAAEqE,EAAK8C,WAGrD,CAaA,SAASC,GAAQzH,GACf,IACE0E,EAME1E,EANF0E,KACAvxB,EAKE6sB,EALF7sB,MACA3F,EAIEwyB,EAJFxyB,KACAi0B,EAGEzB,EAHFyB,QACAh0B,EAEEuyB,EAFFvyB,UACAiB,EACEsxB,EADFtxB,OAGIi2B,GAAWjzB,EAAAA,EAAAA,UAAQ,8CAAAhG,OAAmCyH,EAAQ,EAAC,GAAI,CAACA,IACpE+zB,GAAax1B,EAAAA,EAAAA,UAAQ,kBAAMgzB,EAAKG,cAAgB,GAAG,GAAE,CAACH,EAAKG,gBAEjE,OACE7C,EAAAA,EAAAA,MAAChf,EAAAA,SAAc,CAAAqd,SAAA,EACbJ,EAAAA,EAAAA,KAACqF,IAAYz6B,EAAAA,EAAAA,GAAA,CAAC65B,KAAMA,EAAMl3B,KAAMA,EAAMm3B,SAAUA,GAAc3E,KAC9DC,EAAAA,EAAAA,KAACkF,GAAe,CAACT,KAAMA,EAAMC,SAAUA,KACvC1E,EAAAA,EAAAA,KAACwE,GAAgB,CAACC,KAAMA,EAAMC,SAAUA,KACxC1E,EAAAA,EAAAA,KAACsH,GAAW,CAAC7C,KAAMA,EAAMC,SAAUA,KACnC1E,EAAAA,EAAAA,KAACyH,GAAc,CACbT,QAAM,EACNC,WAAYA,EACZxC,KAAMA,EACNC,SAAUA,EACVlD,QAASA,EACT/yB,OAAQA,EACRjB,UAAWA,KAEbwyB,EAAAA,EAAAA,KAACyH,GAAc,CACbR,WAAYA,EACZxC,KAAMA,EACNC,SAAUA,EACVlD,QAASA,EACT/yB,OAAQA,EACRjB,UAAWA,MAInB,CAjDA85B,GAAYrF,aAAe,CAC3B,EAkDAuF,GAAQvF,aAAe,CACvB,EAaA,UChFA,SAASyF,GAAuB3H,GAC9B,IACE7b,EAIE6b,EAJF7b,KACAzV,EAGEsxB,EAHFtxB,OACAk5B,EAEE5H,EAFF4H,cACAnG,EACEzB,EADFyB,QAGIoG,GAAan2B,EAAAA,EAAAA,UACjB,kBACGhD,EAASyV,EAAK2jB,OAAOC,SAAS,oBAAqBr5B,GAAU,EAAE,GAClE,CAACyV,EAAK2jB,OAAQp5B,IAEVs5B,GAAYt2B,EAAAA,EAAAA,UAChB,kBAAM+vB,EAAQ1zB,UAAUwyB,GAA0B,GAClD,CAACkB,IAGGwG,GAAiBv2B,EAAAA,EAAAA,UAAQ,kBACH,IAA1B3H,IAAAA,KAAO69B,IACL3H,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,iCAAgC5B,UAC7CJ,EAAAA,EAAAA,KAACF,EAAU,CAACO,SAAU0H,OAGxB/H,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,wBAAuB5B,SACnCuH,EAAcn5B,KAAI,SAACy5B,EAAY/0B,GAAK,OAAMA,EAAQ,GACjD8sB,EAAAA,EAAAA,KAACwH,IAAO58B,EAAAA,EAAAA,GAAA,CACN65B,KAAMwD,EACNL,WAAYA,EACZ10B,MAAOA,GACH6sB,IACD,IAAI,KACP,GAAG,CAACgI,EAAWH,EAAYD,EAAe5H,IAEpD,OACEC,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,qCAAoC5B,SAChD4H,GAGP,CAEAN,GAAuBzF,aAAe,CACpC8F,UAAW,IAiBb,U,0BC/DaG,GACS,qBADTA,GAEW,uBAFXA,GAGE,cAHFA,GAIC,aAJDA,GAKK,8BAGLtC,IAAMjjB,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,GAAA,GAChBulB,GAA+B,CAC9BC,UAAW,uBACXC,MAAO9H,EACP+H,QAAS/H,EACT7O,OAAQ6O,IAGT4H,GAAiC,CAChCC,UAAW,uBACXC,MAAO9H,EACP+H,QAAS/H,EACT7O,OAAQ6O,IAET4H,GAAwB,CACvBC,UAAW,eACXC,MAAO9H,GACP+H,QAAS/H,EACT7O,OAAQ6O,IAET4H,GAAuB,CACtBC,UAAW,kBACXC,MAAO9H,GACP+H,QAAS/H,EACT7O,OAAQ6O,IAET4H,GAA2B,CAC1BC,UAAW,mBACXC,MAAO9H,GACP+H,QAAS/H,EACT7O,OAAQ6O,I,0BCpCL,SAASgI,GAAavI,GAC3B,IACEkG,EAKElG,EALFkG,MACAsC,EAIExI,EAJFwI,QACAC,EAGEzI,EAHFyI,OACAC,EAEE1I,EAFF0I,MACAC,EACE3I,EADF2I,UAGMC,EAAUH,EAAOI,wBAAjBD,MAEFE,GAAYp3B,EAAAA,EAAAA,UAAQ,kBAAOk3B,EADT,IACmCzvB,OAAOC,WAAa,OAAS,OAAO,GAAG,CAACwvB,IAEnG,OACE3I,EAAAA,EAAAA,KAAA,OAAK8I,aAAcL,EAAMrI,UACvBJ,EAAAA,EAAAA,KAAC+I,GAAAA,QAAO,CACNP,OAAQA,EACRD,QAASA,EACTtC,MAAOA,EACP4C,UAAWA,EACXG,QAASP,EACTQ,MAAI,EACJP,UAAWA,EACXQ,aAAa,KAIrB,CAmCAZ,GAAarG,aAAe,CAC1BkH,KAAM,MAGD,IAAMC,IAAkBC,EAAAA,GAAAA,UAASf,GAAc,CACpDgB,QAASC,GAAAA,SAASC,cAClBC,OAAO,IC/DT,SAASC,GAAYv/B,GAEjB,IADFw/B,EAAQx/B,EAARw/B,SAAQC,EAAAz/B,EAAE0/B,UAAAA,OAAS,IAAAD,EAAG,GAAEA,EAAEpI,EAAOr3B,EAAPq3B,QAASwE,EAAoB77B,EAApB67B,qBAE7B8D,GAAWr4B,EAAAA,EAAAA,UACf,WACE,OAAyB,IAArBo4B,EAAUx6B,OACL,MAGP2wB,EAAAA,EAAAA,KAAA,MACEgC,UAAU,kBACVgD,MAAO,CAAE+E,UAAW,GAAIC,mBAAoB,GAAIC,aAAc,IAAK7J,SACnEyJ,EAAUr7B,KAAI,SAAA07B,GAAQ,OAEtBlK,EAAAA,EAAAA,KAAA,MAAIgC,UAAU,kBAAiB5B,UAC7BJ,EAAAA,EAAAA,KAAA,OACEgC,UAAU,uBACVgD,MAAO,CAAEmF,aAAc,WAAYC,SAAU,UAAWhK,SACxD8J,KAJiCA,EAMhC,KAKX,GACE,CAACL,IAGCQ,GAAa54B,EAAAA,EAAAA,UACjB,kBAAM+vB,EAAQ1zB,UAAUwyB,GAAuB,GAC7C,CAACkB,IAEL,OACExB,EAAAA,EAAAA,KAACjd,EAAAA,SAAc,CAAAqd,UACb2B,EAAAA,EAAAA,MAAA,OAAKC,UAAU,gBAAe5B,SAAA,CAC3BuJ,EACAG,GACD9J,EAAAA,EAAAA,KAACsK,GAAAA,EAAI,CACHtI,UAAU,eACVoC,QAAS4B,EAAqB5F,SAE7BiK,QAKX,CAEA,SAASE,GAAqB//B,GAE1B,IADFg3B,EAAOh3B,EAAPg3B,QAEMgJ,GAAgB/4B,EAAAA,EAAAA,UACpB,kBAAM+vB,EAAQ1zB,UAAUwyB,GAA4B,GAClD,CAACkB,IAGL,OACExB,EAAAA,EAAAA,KAACjd,EAAAA,SAAc,CAAAqd,UACb2B,EAAAA,EAAAA,MAAA,OAAKC,UAAU,gBAAe5B,SAAA,CAC3BoK,GACDxK,EAAAA,EAAAA,KAACsK,GAAAA,EAAI,CACHG,GAAG,sDACHzI,UAAU,kBAAiB5B,SAE1BoB,EAAQ1zB,UAAUwyB,UAK7B,CAkGAoJ,GAAazH,aAAe,CAC1B0H,SAAU,GACVE,UAAW,GACX7D,qBAAsBl8B,IAAAA,MAkBxB,OApHA,SAAci2B,GACZ,IACE2K,EAIE3K,EAJF2K,OAAQ/zB,EAINopB,EAJMppB,KAAM6qB,EAIZzB,EAJYyB,QAASqI,EAIrB9J,EAJqB8J,UACvBc,EAGE5K,EAHF4K,wBACApH,EAEExD,EAFFwD,OACApB,EACEpC,EADFoC,mBAGFvwB,GAA8CC,EAAAA,EAAAA,WAAS,GAAMC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAAtDg5B,EAAe94B,EAAA,GAAE+4B,EAAkB/4B,EAAA,GAEpCgyB,GAA4BzxB,EAAAA,EAAAA,cAAY,WACxCkxB,IACFpB,EAAmB2I,cAAcn0B,GACjC4sB,EAAOpY,gBAAgB,mBAE3B,GAAG,CAACgX,EAAoBoB,EAAQ5sB,IAE1BqvB,GAAuB3zB,EAAAA,EAAAA,cAAY,WACnCs4B,GACFA,EAAwBh0B,GAE1BmtB,GACF,GAAG,CAAC6G,EAAyB7G,EAA2BntB,IAElDo0B,GAAkBt5B,EAAAA,EAAAA,UACtB,oBAAAhG,OAAS+1B,EAAQ1zB,UAAUwyB,EAAgC,CAAEoK,OAAAA,IAAS,GACtE,CAAClJ,EAASkJ,IAENM,GAAYv5B,EAAAA,EAAAA,UAChB,kBAAM+vB,EAAQ1zB,UAAU83B,GAAOjvB,GAAMyxB,MAAM,GAC3C,CAAC5G,EAAS7qB,IAENs0B,GAAax5B,EAAAA,EAAAA,UACjB,kBAAM+vB,EAAQ1zB,UAAU83B,GAAOjvB,GAAM8a,OAAO,GAC5C,CAAC+P,EAAS7qB,IAENu0B,GAAcz5B,EAAAA,EAAAA,UAClB,kBAAM+vB,EAAQ1zB,UAAU83B,GAAOjvB,GAAM0xB,QAAQ,GAC7C,CAAC7G,EAAS7qB,IAENw0B,GAAiB15B,EAAAA,EAAAA,UAAQ,kBAAMm0B,GAAOjvB,GAAMwxB,SAAS,GAAE,CAACxxB,IAExDy0B,GAAMC,EAAAA,EAAAA,QAAO,MAkDnB,OAhDmBh5B,EAAAA,EAAAA,cAAY,WAC7B,OAAIsE,IAASuxB,IAETnG,EAAAA,EAAAA,MAAA,OACEC,UAAWA,KAAU,eAAgBmJ,GACrCrC,aAAc,WAAF,OAAQ+B,GAAmB,EAAM,EAACzK,SAAA,IAAA30B,OAE1Cs/B,GAAet/B,OAAGw/B,GACrBL,IAAmB5K,EAAAA,EAAAA,KAACoJ,GAAe,CAClCnD,MAAO+E,EACPxC,OAAQ4C,EAAIE,QACZ/C,SAASvI,EAAAA,EAAAA,KAACuK,GAAqB,CAC7B/I,QAASA,IAEXiH,MAAO,WAAQoC,GAAmB,EAAQ,EAC1CnC,UAAW/xB,QAMjBorB,EAAAA,EAAAA,MAAA,OACEC,UAAWA,KAAU,eAAgBmJ,GACrCrC,aAAc,WAAF,OAAQ+B,GAAmB,EAAM,EAACzK,SAAA,EAE9CJ,EAAAA,EAAAA,KAAA,OACEgC,UAAU,sBACVuJ,aAAc,WAAF,OAAQV,GAAmB,EAAK,EAC5CO,IAAKA,EAAIhL,SACT2K,IAEDE,EACAL,IAAmB5K,EAAAA,EAAAA,KAACoJ,GAAe,CAClCnD,MAAO+E,EACPxC,OAAQ4C,EAAIE,QACZ/C,SAASvI,EAAAA,EAAAA,KAAC0J,GAAY,CACpBC,SAAUuB,EACVrB,UAAWA,EACXrI,QAASA,EACTwE,qBAAsBA,IAExByC,MAAO,WAAQoC,GAAmB,EAAQ,EAC1CnC,UAAW/xB,MAInB,GAAG,CAACu0B,EAAaC,EAAgBJ,EAAiBlB,EAAWe,EAAiBpJ,EAASyJ,EAAYD,EAAWr0B,EAAMqvB,GAE7GwF,EACT,ECzKA,SAASC,GAAe1L,GACtB,IACEyB,EAMEzB,EANFyB,QACA9Z,EAKEqY,EALFrY,KACAgkB,EAIE3L,EAJF2L,6BACAf,EAGE5K,EAHF4K,wBACApH,EAEExD,EAFFwD,OACApB,EACEpC,EADFoC,mBAGI8D,GAAQx0B,EAAAA,EAAAA,UACZ,kBACE+vB,EAAQ1zB,UAAUwyB,EAA4B,GAChD,CAACkB,IAEGmK,GAAWl6B,EAAAA,EAAAA,UACf,kBACE+vB,EAAQ1zB,UAAUwyB,EAA+B,GACjD,CAACkB,IAECoK,GAAYn6B,EAAAA,EAAAA,UAChB,kBACE+vB,EAAQ1zB,UAAUwyB,EAA4B,GAC9C,CAACkB,IAGCqK,GAAWp6B,EAAAA,EAAAA,UACf,kBAAM3H,IAAAA,OAAS4d,GAAM,SAACokB,EAAMzjB,GAAM,OAAKyjB,EAAOzjB,EAAO0jB,SAAS,GAAE,EAAE,GAClE,CAACrkB,IAGH,OACEqa,EAAAA,EAAAA,MAAA,OAAKC,UAAU,uCAAsC5B,SAAA,EACnD2B,EAAAA,EAAAA,MAAA,OAAKC,UAAU,cAAa5B,SAAA,EAC1BJ,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,aAAY5B,SAAEwL,KAC7B5L,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,eAAc5B,SAAEyL,QAEjC9J,EAAAA,EAAAA,MAAA,OAAKC,UAAU,gBAAe5B,SAAA,EAC5B2B,EAAAA,EAAAA,MAAA,OAAKC,UAAU,cAAa5B,SAAA,EAC1BJ,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,wBAAuB5B,SAAG6F,KACzCjG,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,2BAA0B5B,SAAEuL,QAE7C5J,EAAAA,EAAAA,MAAA,OAAKC,UAAU,eAAc5B,SAAA,CAC1Bt2B,IAAAA,IAAM4d,GAAM,SAACW,EAAQnV,GAAK,OACzB8sB,EAAAA,EAAAA,KAACjd,EAAAA,SAAc,CAAAqd,UACbJ,EAAAA,EAAAA,KAACgM,GAAI,CACHtB,OAAQriB,EAAO0jB,UACfp1B,KAAM0R,EAAO4jB,mBACbzK,QAASA,EACTqI,UAAWxhB,EAAO6jB,UAClBvB,wBAAyBA,EACzBpH,OAAQA,EACRpB,mBAAoBA,KACpB,GAAA12B,OAToB4c,EAAO4jB,mBAAkB,KAAAxgC,OAAIyH,GAUpC,IAGlBw4B,IACC1L,EAAAA,EAAAA,KAACgM,GAAI,CACHtB,OAAQ,EACR/zB,KAAMuxB,GACN1G,QAASA,YAQvB,CACAiK,GAAexJ,aAAe,CAC5Bva,KAAM,GACNgkB,8BAA8B,EAC9Bf,wBAAyB7gC,IAAAA,KACzBy5B,OAAQ,CAAEpY,gBAAiBrhB,IAAAA,MAC3Bq4B,mBAAoB,CAAE2I,cAAehhC,IAAAA,OAsBvC,U,uCChGA,SAASqiC,GAAyBpM,GAChC,IACEyB,EAOEzB,EAPFyB,QACA4K,EAMErM,EANFqM,WACAC,EAKEtM,EALFsM,cACA9I,EAIExD,EAJFwD,OACApB,EAGEpC,EAHFoC,mBACAmK,EAEEvM,EAFFuM,eACAngC,EACE4zB,EADF5zB,YAGIogC,GAAkB96B,EAAAA,EAAAA,UACtB,kBACE+vB,EAAQ1zB,UAAUwyB,EAAwC,GAC5D,CAACkB,IAGGgL,GAAY/6B,EAAAA,EAAAA,UAChB,kBACE+vB,EAAQ1zB,UACNwyB,EACA,CAAE8L,WAAYA,EAAa,GAC5B,GACH,CAAC5K,EAAS4K,IAGNtI,GAA4BzxB,EAAAA,EAAAA,cAAY,WACxCkxB,IACEpB,GACFA,EAAmBsK,2BAErBlJ,EAAOpY,gBAAgB,mBAE3B,GAAG,CAACgX,EAAoBoB,IAElBC,EAAqBr3B,EAAYihB,QAAQ8H,sBAAwB/oB,EAAYihB,QAAQ+H,oBAE3F,OAAuB,IAAnBmX,GAEAtM,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,kBAAiB5B,UAC9BJ,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,gBAAe5B,SAC3BoD,GACCxD,EAAAA,EAAAA,KAACmE,EAAAA,EAAM,CAACC,QAASN,EAA0B1D,SAAEmM,KAE7CvM,EAAAA,EAAAA,KAACqE,EAAAA,EAAa,CAACD,QAASN,EAA2Bpa,KAAM6iB,SAQjExK,EAAAA,EAAAA,MAAA,OAAKC,UAAU,kBAAiB5B,SAAA,EAC9BJ,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,gBAAe5B,SAC3BoD,GACCxD,EAAAA,EAAAA,KAACmE,EAAAA,EAAM,CAACC,QAASN,EAA0B1D,SAAEmM,KAE3CvM,EAAAA,EAAAA,KAACqE,EAAAA,EAAa,CAACD,QAASN,EAA2Bpa,KAAM6iB,OAG/DxK,EAAAA,EAAAA,MAAA,OAAKC,UAAU,sBAAqB5B,SAAA,EAClCJ,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,sBAAqB5B,SACjCoM,IAEFhJ,GACCzB,EAAAA,EAAAA,MAAA2K,EAAAA,SAAA,CAAAtM,SAAA,EACEJ,EAAAA,EAAAA,KAAC2M,GAAAA,EAAO,CAACpE,QAAS/G,EAAQ1zB,UAAUC,YAAmB6+B,aAAa,QAAOxM,UACzEJ,EAAAA,EAAAA,KAACmE,EAAAA,EAAM,CAACnC,UAAU,WAAW6K,MAAM7M,EAAAA,EAAAA,KAAC8M,GAAAA,IAAkB,IAAKC,WAAW,cAAcC,SAAyB,IAAfZ,EAAkBhI,QAAS,WAAF,OAAQiI,EAAc,EAAE,OAEjJrM,EAAAA,EAAAA,KAAC2M,GAAAA,EAAO,CAACpE,QAAS/G,EAAQ1zB,UAAUC,QAAe6+B,aAAa,QAAOxM,UACrEJ,EAAAA,EAAAA,KAACmE,EAAAA,EAAM,CAACnC,UAAU,OAAO6K,MAAM7M,EAAAA,EAAAA,KAACiN,GAAAA,IAAmB,IAAKF,WAAW,cAAcC,SAAyB,IAAfZ,EAAkBhI,QAAS,WAAF,OAAQiI,EAAc,EAAE,UAIhJtK,EAAAA,EAAAA,MAAA,OAAKC,UAAU,kBAAiB5B,SAAA,EAC9BJ,EAAAA,EAAAA,KAACkN,GAAAA,EAAU,CACTlL,UAAU,gBACVmL,UAAW,CAAEC,SAAU,eACvBhJ,QAAS,WAAF,OAAQiI,EAAc,EAAE,EAC/BW,SAAyB,IAAfZ,EACViB,UAAW7L,EAAQ1zB,UAAUC,oBAE/BiyB,EAAAA,EAAAA,KAACkN,GAAAA,EAAU,CACTlL,UAAU,iBACVmL,UAAW,CAAEC,SAAU,gBACvBhJ,QAAS,WAAF,OAAQiI,EAAc,EAAE,EAC/BW,SAAyB,IAAfZ,EACViB,UAAW7L,EAAQ1zB,UAAUC,uBAQ3C,CAEAo+B,GAAyBlK,aAAe,CACtCoK,cAAeviC,IAAAA,KACfy5B,OAAQ,CACNpY,gBAAiBrhB,IAAAA,MAEnBq4B,mBAAoB,CAClBsK,yBAA0B3iC,IAAAA,MAE5BwiC,eAAgB,GAuBlB,U,aCjHA,SAASgB,GAAiBvN,GACxB,IACE1xB,EAGE0xB,EAHF1xB,QACAmzB,EAEEzB,EAFFyB,QACA+L,EACExN,EADFwN,aAGF37B,GAAwCC,EAAAA,EAAAA,WAAS,GAAMC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAAhD47B,EAAY17B,EAAA,GAAE27B,EAAe37B,EAAA,GACpC47B,GAA4C77B,EAAAA,EAAAA,UAASxD,EAAQ,IAAGs/B,GAAA57B,EAAAA,EAAAA,GAAA27B,EAAA,GAAzD5V,EAAc6V,EAAA,GAAEC,EAAiBD,EAAA,GAElCE,GAAqBp8B,EAAAA,EAAAA,UAAQ,kBAAM+vB,EAAQ1zB,UAAUgqB,EAAeyM,QAAQ,GAAE,CAACzM,EAAeyM,UAE9FuJ,GAAkBz7B,EAAAA,EAAAA,cAAY,SAAC5D,GAC/B8+B,GACFA,EAAa9+B,EAAOxE,KAEtBwjC,GAAgB,GAChBG,EAAkBn/B,EACpB,GAAG,CAAC8+B,IAGEQ,GAAYt8B,EAAAA,EAAAA,UAAQ,kBAAMpD,EAAQG,KAAI,SAAAC,GAAM,OAChDuxB,EAAAA,EAAAA,KAAA,MAAIgC,UAAU,WAAU5B,UACtBJ,EAAAA,EAAAA,KAAA,KAAGoE,QAAS,WAAQ0J,EAAgBr/B,EAAS,EAAE2xB,SAC5CoB,EAAQ1zB,UAAUW,EAAO81B,YAFA91B,EAAOxE,IAIhC,GACL,GAAE,CAACoE,EAASmzB,EAASsM,IAGjB1C,GAAMC,EAAAA,EAAAA,QAAO,MAGnB,OAlDF,SAA2BD,EAAKqC,IAC9BpK,EAAAA,EAAAA,YAAU,WACR,SAAS2K,EAAmBhkB,GACtBohB,EAAIE,UAAYF,EAAIE,QAAQjmB,SAAS2E,EAAMwe,SAC7CiF,GAAgB,EAEpB,CAGA,OADA36B,SAASmT,iBAAiB,QAAS+nB,GAC5B,WAELl7B,SAASoT,oBAAoB,QAAS8nB,EACxC,CACF,GAAG,CAAC5C,EAAKqC,GACX,CAkCEQ,CAAkB7C,EAAKqC,IAGrBzN,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,mBAAkB5B,UAC/B2B,EAAAA,EAAAA,MAAA,OAAKC,UAAU,+CAA8C5B,SAAA,EAC3D2B,EAAAA,EAAAA,MAAA,OACEC,UAAU,sEACVoJ,IAAKA,EACLhH,QAAS,WAAQqJ,GAAiBD,EAAe,EAAEpN,SAAA,EAEnDJ,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,sBAAqB5B,SACjCyN,KAEH7N,EAAAA,EAAAA,KAAA,QAAMgC,UAAU,mEAEjBwL,IAAgBxN,EAAAA,EAAAA,KAAA,MAAIgC,UAAU,oCAAmC5B,SAAE2N,QAI5E,CAEAT,GAAiBrL,aAAe,CAC9BsL,kBAAc9gC,GAahB,U,aCrFMyhC,GAAiB,CACrBC,SAAU,CACRC,MAAO,IACPC,OAAQ,OACRC,UAAW,OACXC,QAAS,OACTC,UAAW,CACT,SAAU,CACRD,QAAS,QAEX,eAAgB,CACdF,OAAQ,OACRE,QAAS,UAIftI,MAAO,CACLoI,OAAQ,OACRC,UAAW,OACXC,QAAS,OACTC,UAAW,CACT,SAAU,CACRD,QAAS,OACTF,OAAQ,OACRC,UAAW,QAEb,iBAAkB,CAChBC,QAAS,OACTF,OAAQ,OACRC,UAAW,UAIjBG,KAAM,CACJJ,OAAQ,OACRC,UAAW,OACXC,QAAS,QAEXG,QAAS,CACPL,OAAQ,OACRC,UAAW,OACXC,QAAS,QAEXI,UAAW,CACTN,OAAQ,OACRC,UAAW,OACXC,QAAS,SAIb,SAASK,GAAa7O,GACpB,IAAQ1xB,EAAmC0xB,EAAnC1xB,QAASmzB,EAA0BzB,EAA1ByB,QAAS+L,EAAiBxN,EAAjBwN,aAE1B37B,GAA4CC,EAAAA,EAAAA,UAASxD,EAAQ,IAAGyD,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAAzDkmB,EAAchmB,EAAA,GAAE87B,EAAiB97B,EAAA,GAElC/E,GAAU0E,EAAAA,EAAAA,UAAQ,kBAAMpD,EAAQG,KAAI,SAAAC,GAAM,MAAK,CACnDxE,IAAKwE,EAAOxE,IACZyf,KAAM8X,EAAQ1zB,UAAUW,EAAO81B,SAChC,GAAE,GAAE,CAACl2B,EAASmzB,IAETqN,GAAex8B,EAAAA,EAAAA,cAAY,SAAC2X,EAAO8kB,GACvC,IAAMrgC,EAASJ,EAAQQ,MAAK,SAAAmhB,GAAC,OAAIA,EAAE/lB,MAAQ6kC,EAAO7kC,GAAG,IACjDsjC,GAAgB9+B,GAClB8+B,EAAa9+B,EAAOxE,KAEtB2jC,EAAkBn/B,EACpB,GAAG,CAACJ,EAASk/B,IAEb,OACEvN,EAAAA,EAAAA,KAAC+O,GAAAA,EAAQ,CACPC,YAAalX,EAAe7tB,IAC5B8C,QAASA,EACTkiC,SAAUJ,EACVK,OAAQhB,IAGd,CAEAU,GAAa3M,aAAe,CAC1BsL,kBAAc9gC,GAchB,UCtFA,SAAS0iC,GAAWpP,GAClB,IACEvyB,EAGEuyB,EAHFvyB,UACAD,EAEEwyB,EAFFxyB,KACApB,EACE4zB,EADF5zB,YAGIygB,GAAsBnb,EAAAA,EAAAA,UAC1B,kBACEwiB,EAAAA,EAAAA,wBAAuBzmB,EAAU,GACnC,CAACA,IAGG4hC,GAAiB39B,EAAAA,EAAAA,UACrB,kBACEkb,EAAAA,EAAAA,mBAAkBpf,EAAMqf,EAAoB,GAC9C,CAACrf,EAAMqf,IAGH4W,EAAqBr3B,EAAYihB,QAAQ8H,sBAAwB/oB,EAAYihB,QAAQ+H,oBAE3F,OACE4M,EAAAA,EAAAA,MAAA,OAAKC,UAAU,kCAAiC5B,SAAA,EAC9C2B,EAAAA,EAAAA,MAAA,OAAKC,UAAU,qBAAoB5B,SAAA,CAChCgP,GACDpP,EAAAA,EAAAA,KAACqP,GAAAA,WAAU,CACT,aAAYD,EACZE,MAAM,2CAIT9L,GAAqBxD,EAAAA,EAAAA,KAACuP,IAAU3kC,EAAAA,EAAAA,GAAA,GAAKm1B,KAAYC,EAAAA,EAAAA,KAACsN,IAAgB1iC,EAAAA,EAAAA,GAAA,GAAKm1B,MAG9E,CAEAoP,GAAWlN,aAAe,CAC1B,EAkBA,UCiCA,SAASuN,GAAwBzP,GAC/B,IACEtxB,EAiBEsxB,EAjBFtxB,OACAghC,EAgBE1P,EAhBF0P,gBACAC,EAeE3P,EAfF2P,gBACAhE,EAcE3L,EAdF2L,6BACAl+B,EAaEuyB,EAbFvyB,UAEAmiC,EAWE5P,EAXF4P,uBACApC,EAUExN,EAVFwN,aAEArpB,EAQE6b,EARF7b,KACA7P,EAOE0rB,EAPF1rB,UACA9G,EAMEwyB,EANFxyB,KACAi0B,EAKEzB,EALFyB,QACAr1B,EAIE4zB,EAJF5zB,YACAg2B,EAGEpC,EAHFoC,mBACAwI,EAEE5K,EAFF4K,wBACArF,EACEvF,EADFuF,wBAGIsK,GAAmBn+B,EAAAA,EAAAA,UAAQ,kBA3GnC,SAAwBtH,GAMpB,IALFsE,EAAMtE,EAANsE,OACAiZ,EAAIvd,EAAJud,KACArT,EAASlK,EAATkK,UACA6P,EAAI/Z,EAAJ+Z,KACAsd,EAAOr3B,EAAPq3B,QAGEqO,EAIE3rB,EAJF2rB,gBACAtiC,EAGE2W,EAHF3W,KACA0c,EAEE/F,EAFF+F,gBACAC,EACEhG,EADFgG,UAGF,QAAazd,IAATib,GAA+B,OAATA,EAA1B,CAEO,GAAqB,IAAjB5d,IAAAA,KAAO4d,GAChB,MAAO,GAGT5d,IAAAA,KAAO4d,GAAM,SAACye,GACPA,EAAO/4B,0BACV6c,EAAgBI,WAAW,CAACH,EAAUI,YAAYwlB,OAAQ5lB,EAAUM,SAASC,KAAM,2BAA4BiL,KAAKC,UAAUwQ,GAElI,IAEA,IAAM4J,EAAYp2B,KAAKq2B,IAAIlmC,IAAAA,IAAM4d,GAAM,SAAAld,GAAA,IACCoD,EAAKpD,EAA3C4C,yBAA6BqB,GAAM,OAC/BkL,KAAKq2B,IAAIpiC,EAAM,IAAER,yBAAyBqB,IAEhD,OAAO3E,IAAAA,IAAM4d,GAAM,SAACye,GAClB,IAAMW,EAAyB+I,EAAgBI,aAC7CxhC,EACA03B,EAAO+J,yBAAyBzhC,GAChC,CAAEu0B,SAAUmD,EAAOgK,WAEfvJ,EAAmBiJ,EAAgBI,aACvCxhC,EACA03B,EAAOh5B,mBAAmBsB,GAC1B,CAAEu0B,SAAUmD,EAAOgK,WAEfviC,EAAQu4B,EAAO/4B,yBAAyBqB,GAC1C22B,EAAa,EACbD,EAAe,IACfL,EAAc,EACdF,EAAgB,IAEF,IAAdmL,IACEniC,EAAQ,EAEVu3B,EAAe,KADfC,EAAazrB,KAAKy2B,MAAe,IAARxiC,EAAemiC,IAIxCnL,EAAgB,KADhBE,EAAcnrB,KAAKy2B,KAAc,IAARxiC,EAAemiC,KAK5C,IAAMpnB,EAAWtU,EAAUsC,KAAKgG,YAAYC,UACtCyzB,EAAa9P,GAAa4F,EAAOnxB,KAAOmxB,EAAOnxB,GACrD,MAAO,CACL1E,KAAMkxB,EAAQ1zB,UAAUuiC,GACxB7K,SAAUW,EAAOnxB,GACjBqT,QAAQD,EAAAA,EAAAA,cAAa+d,EAAO1U,OAAQ0U,EAAO7d,wBAC3C1a,MAAAA,EACA44B,eAAgBqJ,EAAgBS,qBAC9B7hC,EACA03B,EAAO/4B,yBAAyBqB,GAChC,CAAEu0B,SAAUmD,EAAOgK,WAErBzJ,yBAA0BmJ,EACvBU,+BAA+BpK,EAAO94B,mCAAmCoB,IAC5E84B,OAAQh6B,EAAKO,UAAU,yBAA0B,CAAE0iC,UAAW1J,EAAwB2J,QAAS7J,IAC/Fz7B,aAAcg7B,EAAOuK,aACrB/nB,SAAAA,EACAie,iBAAAA,EACAE,uBAAAA,EACA1B,WAAAA,EACAD,aAAAA,EACAL,YAAAA,EACAF,cAAAA,EACA7Z,UAAWob,EAAO1U,OAEtB,GAhEA,CAiEF,CAwByCkf,CAAgB,CACrDzsB,KAAAA,EACAzV,OAAAA,EACAiZ,KAAM+nB,EACNp7B,UAAAA,EACAmtB,QAAAA,GACA,GAAE,CAACtd,EAAMzV,EAAQghC,EAAiBp7B,EAAWmtB,IAEzC8K,GAAiB76B,EAAAA,EAAAA,UAAQ,WAC7B,OAAgC,IAA5B3H,IAAAA,KAAO4lC,GACF,EAEF,CACT,GAAG,CAACA,IAEJ99B,GAAoCC,EAAAA,EAAAA,UAA4B,IAAnBy6B,EAAuB,EAAI,GAAEx6B,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAAnEw6B,EAAUt6B,EAAA,GAAEu6B,EAAav6B,EAAA,IAEhCuxB,EAAAA,EAAAA,YAAU,WAENsM,EADiB,IAAfvD,EAKN,GAAG,CAACA,EAAYuD,IAEhB,IAAMiB,GAAgBv+B,EAAAA,EAAAA,cAAY,WAChC,OAAmB,IAAf+5B,GAEApM,EAAAA,EAAAA,KAACyL,GAAc,CACb/jB,KAAMgoB,EACNlO,QAASA,EACTkK,6BAA8BA,EAC9Bf,wBAAyBA,EACzBpH,OAAQrf,EAAK8E,aACbmZ,mBAAoBA,KAKxBJ,EAAAA,EAAAA,MAAChf,EAAAA,SAAc,CAAAqd,SAAA,EACbJ,EAAAA,EAAAA,KAACmP,GAAU,CACT9gC,QAASsE,GACTnF,UAAWA,EACXg0B,QAASA,EACTj0B,KAAMA,EACNggC,aAAcA,EACdphC,YAAaA,KAEf6zB,EAAAA,EAAAA,KAAC0H,GAAsB,CACrBC,cAAeiI,EACfnhC,OAAQA,EACRyV,KAAMA,EACNsd,QAASA,EACTj0B,KAAMA,EACN40B,mBAAoBA,EACpBmD,wBAAyBA,EACzB/B,OAAQrf,EAAK8E,aACbxb,UAAWA,MAInB,GAAG,CAAC83B,EAAyBqF,EAAyBn9B,EAAW0W,EAAM3W,EAAM40B,EAAoB1zB,EAAQ+yB,EAASkK,EAA8BU,EAAYjgC,EAAayjC,EAAkBF,EAAiBnC,IAE5M,OACExL,EAAAA,EAAAA,MAAA,OAAKC,UAAU,4BAA2B5B,SAAA,CACvCwQ,KACD5Q,EAAAA,EAAAA,KAACmM,GAAwB,CACvB3K,QAASA,EACT4K,WAAYA,EACZC,cAAeA,EACflgC,YAAaA,EACbo3B,OAAQrf,EAAK8E,aACbmZ,mBAAoBA,EACpBmK,eAAgBA,MAIxB,CAEAkD,GAAwBvN,aAAe,CACrC0N,uBAAwB7lC,IAAAA,KACxBq4B,mBAAoB,CAClB0O,wBAAyB/mC,IAAAA,KACzBm6B,cAAen6B,IAAAA,KACfo6B,SAAUp6B,IAAAA,KACVgnC,uBAAwBhnC,IAAAA,KACxBghC,cAAehhC,IAAAA,KACfo5B,MAAOp5B,IAAAA,MAGTyjC,aAAczjC,IAAAA,KACd2lC,gBAAiB,GACjBC,gBAAiB,GACjBhE,8BAA8B,EAC9Bl+B,UAAW,CAAC,EACZm9B,wBAAyB7gC,IAAAA,KACzBw7B,wBAAyBx7B,IAAAA,MA4D3B,UCxQMinC,GAAsB,SAAAC,GAC1B,SAAAD,EAAYhR,GAAQ,IAAD/b,GAAAC,EAAAA,EAAAA,GAAA,KAAA8sB,IACjB/sB,GAAAG,EAAAA,EAAAA,GAAA,KAAA4sB,EAAA,CAAMhR,KAiFRkR,aAAe,kBAAMjtB,EAAKktB,gBAAiB,EAADltB,EAE1CmtB,oBAAsB,SAACC,GACrB,IACaC,EAGTD,EAHF5jC,UACkB8jC,EAEhBF,EAFFrhC,iBACQwhC,EACNH,EADF3iC,OAGF+iC,EAIIxtB,EAAKlF,MAHPtR,EAASgkC,EAAThkC,UACAuC,EAAgByhC,EAAhBzhC,iBAIF,OAHQyhC,EAAN/iC,SAGa8iC,GAAcxhC,IAAqBuhC,IAAgBxnC,IAAAA,QAAU0D,EAAW6jC,EAIzF,EAACrtB,EAEDytB,kBAAoB,SAACL,GACnB,IACaC,EACTD,EADF5jC,UAIAA,EACEwW,EAAKlF,MADPtR,UAGF,QAAK1D,IAAAA,QAAU0D,EAAW6jC,EAI5B,EAACrtB,EAED2rB,uBAAyB,SAAC+B,GACxB,GAAIA,EAAkB,CACpB,IAAQ3hC,EAAqBiU,EAAKlF,MAA1B/O,iBACRiU,EAAKktB,iBAAmBltB,EAAK2tB,iBAC7B7nC,IAAAA,KAAOka,EAAKktB,kBAAkB,SAACzM,GACzBA,EAAKmN,SAAW7hC,EAElB00B,EAAKoN,QAAS,EAGdpN,EAAKoN,QAAS,CAElB,IACA7tB,EAAK8tB,sBAAsB9tB,EAAKktB,iBAClC,MACEltB,EAAKktB,iBAAmB,GACxBltB,EAAK8tB,sBAAsB9tB,EAAKktB,iBAEpC,EAACltB,EAED+tB,cAAgB,SAACzV,GACf,IAAA0V,EAIIhuB,EAAKlF,MAHPtR,EAASwkC,EAATxkC,UACAuC,EAAgBiiC,EAAhBjiC,iBACAtB,EAAMujC,EAANvjC,OAGGjB,GACAwW,EAAK0O,QAEV1O,EAAKW,YACLX,EAAKiB,gBAELjB,EAAK0O,MAAM,CACTllB,UAAAA,EACAiB,OAAAA,EACAsB,iBAAAA,EACAusB,gBAAAA,IACCthB,MAAK,SAAC0M,GACHA,GACF1D,EAAKiuB,SAAS,CACZC,YAAY,EACZxqB,KAAAA,GAGN,IAAGob,SAAQ,WACT9e,EAAKoe,mBACLpe,EAAKR,aACP,IACF,EAACQ,EAEDmuB,aAAe,SAAAhoC,GAA8C,IAA3CqD,EAASrD,EAATqD,UAAWiB,EAAMtE,EAANsE,OAAQsB,EAAgB5F,EAAhB4F,iBAC/BvC,EACFwW,EAAKiuB,SAAS,CAAEzkC,UAAAA,IACPiB,EACTuV,EAAKiuB,SAAS,CAAExjC,OAAAA,IACPsB,IACTiU,EAAKiuB,SAAS,CAAEliC,iBAAAA,IAChBiU,EAAK2rB,wBAAuB,GAEhC,EAhLE,IACElhC,EAqBEsxB,EArBFtxB,OACAsB,EAoBEgwB,EApBFhwB,iBACAvC,EAmBEuyB,EAnBFvyB,UACAklB,EAkBEqN,EAlBFrN,MACA4J,EAiBEyD,EAjBFzD,gBAEA/uB,EAeEwyB,EAfFxyB,KACAi0B,EAcEzB,EAdFyB,QACAtd,EAaE6b,EAbF7b,KACA7P,EAYE0rB,EAZF1rB,UACAlI,EAWE4zB,EAXF5zB,YAEA2lC,EASE/R,EATF+R,sBACAM,EAQErS,EARFqS,oBACAzH,EAOE5K,EAPF4K,wBACArF,EAMEvF,EANFuF,wBAEA3gB,EAIEob,EAJFpb,UACAM,EAGE8a,EAHF9a,cACAmd,EAEErC,EAFFqC,iBACA5e,EACEuc,EADFvc,YA4CqC,OAzCvCQ,EAAK0O,MAAQA,EACb1O,EAAKlF,MAAQ,CACXozB,YAAY,EACZ1kC,UAAAA,EACAiB,OAAQA,GAAUulB,EAAAA,yBAAyBvlB,OAC3CsB,iBAAkBA,GAAoBikB,EAAAA,yBAAyBjkB,iBAC/D2X,KAAM,CAAC,GAGT1D,EAAKzW,KAAOA,EACZyW,EAAKwd,QAAUA,EACfxd,EAAKE,KAAOA,EACZF,EAAKme,mBCnDyB,SAAHh4B,GAAA,IAAM8f,EAAe9f,EAAf8f,gBAAiBC,EAAS/f,EAAT+f,UAAS,MAAQ,CACrE6Z,uBAAwB,SAACF,GACvB5Z,EAAgBI,WAAW,CAACH,EAAUI,YAAYC,OAAQL,EAAUM,SAASC,KAAM,2BAA2B,iCAADhf,OAAmCo4B,EAAa,eAAiB,mBAChL,EACAI,cAAe,WACbha,EAAgBI,WAAW,CAACH,EAAUI,YAAYC,OAAQL,EAAUM,SAASC,KAAM,2BAA4B,+BACjH,EACAyZ,SAAU,WACRja,EAAgBI,WAAW,CAACH,EAAUI,YAAYC,OAAQL,EAAUM,SAASC,KAAM,2BAA4B,yBACjH,EACAgiB,yBAA0B,WACxBxiB,EAAgBI,WAAW,CAACH,EAAUI,YAAYC,OAAQL,EAAUM,SAASC,KAAM,2BAA4B,gCACjH,EACAqgB,cAAe,SAACuH,GACdpoB,EAAgBI,WAAW,CAACH,EAAUI,YAAYC,OAAQL,EAAUM,SAASC,KAAM,2BAA2B,+BAADhf,OAAiC4mC,GAChJ,EACAtM,gBAAiB,SAACP,GAChBvb,EAAgBI,WAAW,CAACH,EAAUI,YAAYC,OAAQL,EAAUM,SAASC,KAAM,2BAA2B,iCAADhf,OAAmC+5B,GAClJ,EACAtC,MAAO,SAACD,GACNhZ,EAAgBI,WAAW,CAACH,EAAUI,YAAYwlB,OAAQ5lB,EAAUM,SAASC,KAAM,iCAAkCwY,EACvH,EACD,CD6B6BqP,CAAmB,CAC3CroB,gBAAiB/F,EAAK+F,gBACtBC,UAAWhG,EAAKgG,YAGlBlG,EAAK7X,YAAcA,EACnB6X,EAAK3P,UAAYA,EACjB2P,EAAK8tB,sBAAwBA,EAC7B9tB,EAAKouB,oBAAsBA,EAE3BpuB,EAAK2tB,iBAAmB,CAAC,CACvBY,YAAavuB,EAAKwd,QAAQ1zB,UAAUwyB,GACpCsR,OAAQtwB,EAAAA,uBAAuB7N,YAC9B,CACD8+B,YAAavuB,EAAKwd,QAAQ1zB,UAAUwyB,GACpCsR,OAAQtwB,EAAAA,uBAAuB5N,YAC9B,CACD6+B,YAAavuB,EAAKwd,QAAQ1zB,UAAUwyB,GACpCsR,OAAQtwB,EAAAA,uBAAuB3N,eAGjCqQ,EAAKktB,iBAAmB,GAExBltB,EAAKW,UAAYA,EACjBX,EAAKiB,cAAgBA,EACrBjB,EAAKoe,iBAAmBA,EACxBpe,EAAKR,YAAcA,EACnBQ,EAAK2mB,wBAA0BA,EAC/B3mB,EAAKshB,wBAA0BA,EAC/BthB,EAAKsY,gBAAkBA,EAAgBtY,CACzC,CAAC,OAAAY,EAAAA,EAAAA,GAAAmsB,EAAAC,IAAAnsB,EAAAA,EAAAA,GAAAksB,EAAA,EAAA9mC,IAAA,oBAAA2D,MAED,WACE0V,KAAKyuB,cAAczuB,KAAKgZ,gBAC1B,GAAC,CAAAryB,IAAA,qBAAA2D,MAGD,SAAmB4kC,EAAWpB,GAC5B,GAAI9tB,KAAK6tB,oBAAoBC,GAAY,CACvC,IAAM9U,EAAkBhZ,KAAKmuB,kBAAkBL,GAC/C9tB,KAAKyuB,cAAczV,EACrB,CACF,GAAC,CAAAryB,IAAA,SAAA2D,MAoGD,WAAU,IAAD6kC,EAAA,KAEP,IADuBnvB,KAAKxE,MAApBozB,WAEN,OAAQlS,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,0CAGzB,IAAA0Q,EAOIpvB,KAAKxE,MANP4I,KACEirB,EAA6BD,EAA7BC,8BACAC,EAAqCF,EAArCE,sCACAC,EAAsBH,EAAtBG,uBACAC,EAA4BJ,EAA5BI,6BAKFtR,EAKEle,KALFke,QACAj0B,EAIE+V,KAJF/V,KACApB,EAGEmX,KAHFnX,YACA+X,EAEEZ,KAFFY,KACAie,EACE7e,KADF6e,mBAGF,GAAI0Q,EAGF,OAFAvvB,KAAKqsB,wBAAuB,IAG1B3P,EAAAA,EAAAA,KAACsD,GAAU,CACT/1B,KAAMA,EACNi0B,QAASA,EACT+B,OAAQrf,EAAK8E,aACbD,YAAa7E,EAAK6E,YAClBoZ,mBAAoBA,EACpBh2B,YAAaA,EACbwY,UAAWrB,KAAKqB,UAChBM,cAAe3B,KAAK2B,cACpBmd,iBAAkB9e,KAAK8e,iBACvB5e,YAAaF,KAAKE,cAKxB,IAAAuvB,EAIIzvB,KAAKxE,MAHPtR,EAASulC,EAATvlC,UACAiB,EAAMskC,EAANtkC,OACAsB,EAAgBgjC,EAAhBhjC,iBAIAsE,EAIEiP,KAJFjP,UACAs7B,EAGErsB,KAHFqsB,uBACAhF,EAEErnB,KAFFqnB,wBACArF,EACEhiB,KADFgiB,wBAGF,OACEtF,EAAAA,EAAAA,KAACwP,GAAuB,CACtBhiC,UAAWA,EACXiiC,gBAAiBkD,EACjBjD,gBAAiBkD,EACjBlH,6BAA8BoH,EAC9BrkC,OAAQA,EACRsB,iBAAkBA,EAClB4/B,uBAAwBA,EACxBpC,aAAc,SAACyF,GAAgBP,EAAKN,aAAa,CAAE1jC,OAAQukC,GAAc,EAEzE9uB,KAAMA,EACN7P,UAAWA,EACX9G,KAAMA,EACNi0B,QAASA,EACTr1B,YAAaA,EACbg2B,mBAAoBA,EACpBwI,wBAAyBA,EACzBrF,wBAAyBA,GAG/B,IAAC,CAjQyB,CAASviB,EAAAA,WAoQrCguB,GAAuB9O,aAAe,CACpCxzB,OAAQulB,EAAAA,yBAAyBvlB,OACjCsB,iBAAkBikB,EAAAA,yBAAyBjkB,iBAC3CvC,UAAW,CAAC,EACZskC,sBAAuBhoC,IAAAA,KACvB6a,UAAW7a,IAAAA,KACXmb,cAAenb,IAAAA,KACfs4B,iBAAkBt4B,IAAAA,KAClB0Z,YAAa1Z,IAAAA,KACbsoC,oBAAqBtoC,IAAAA,KACrB4oB,MAAO5oB,IAAAA,KACP6gC,wBAAyB7gC,IAAAA,KACzBw7B,wBAAyBx7B,IAAAA,KACzBwyB,iBAAiB,GAwCnB,UE3TM2W,GACG,EADHA,GAEG,EAIT,SAASC,KACP,OAAI5vB,KAAK6vB,IAAIC,QAAQ,yBAAyBC,aAHvB,IAIdJ,GAEFA,EACT,CAEA,IAAMK,GAAsB,SAAHnpC,GAWlB,IAVLkK,EAASlK,EAATkK,UACAR,EAAM1J,EAAN0J,OACAsI,EAAMhS,EAANgS,OACA+B,EAAc/T,EAAd+T,eACAE,EAAQjU,EAARiU,SACAjS,EAAWhC,EAAXgC,YACA6mB,EAAY7oB,EAAZ6oB,aACAC,EAAY9oB,EAAZ8oB,aACA9G,EAAYhiB,EAAZgiB,aACA9f,EAAMlC,EAANkC,OAyBA,OAvBc,SAAH7B,GAAA,IACTgD,EAAShD,EAATgD,UACAiB,EAAMjE,EAANiE,OACAsB,EAAgBvF,EAAhBuF,iBAAgBwjC,EAAA/oC,EAChB8xB,gBAAAA,OAAe,IAAAiX,GAAQA,EAAA,OACnB1yB,EAAAA,EAAAA,yBAAwB,CAC5BrT,UAAAA,EACAuC,iBAAAA,EACAtB,OAAAA,EAEA4F,UAAAA,EACAR,OAAAA,EACAsI,OAAAA,EACA+B,eAAAA,EACAE,SAAAA,EACAke,gBAAAA,EACAnwB,YAAAA,EACA6mB,aAAAA,EACAC,aAAAA,EACA9G,aAAAA,EACA8J,YAAa5pB,GACZ,CAGL,EAEa0kC,GAAsB,SAAAyC,GAAA,SAAAzC,IAAA,OAAA9sB,EAAAA,EAAAA,GAAA,KAAA8sB,IAAA5sB,EAAAA,EAAAA,GAAA,KAAA4sB,EAAAx5B,UAAA,QAAAqN,EAAAA,EAAAA,GAAAmsB,EAAAyC,IAAA3uB,EAAAA,EAAAA,GAAAksB,EAAA,EAAA9mC,IAAA,YAAA+O,IACjC,WACE,MAAO,0BACT,GAAC,CAAA/O,IAAA,YAAA+O,IAED,WACE,GAAIsK,KAAKmwB,QAAQnI,QAAS,CACxB,IAAMoI,EAAQpwB,KAAKmwB,QAAQnI,QAAQ2F,eACnC,OAAInnC,IAAAA,QAAU4pC,GACL,KAEFA,CACT,CACA,OAAO,IACT,GAAC,CAAAzpC,IAAA,eAAA2D,MAED,SAAaiqB,GACX,GAAIvU,KAAKmwB,QAAQnI,QAAS,CAExB,GAD6BhoB,KAAKmwB,QAAQnI,QAAQxsB,MAA1C/O,mBACiB8nB,EACvB,OAEFvU,KAAKmwB,QAAQnI,QAAQ6G,aAAa,CAChCpiC,iBAAkB8nB,GAEtB,CACF,GAAC,CAAA5tB,IAAA,oBAAA2D,MAED,WACE,GAAI0V,KAAKmwB,QAAQnI,QAAS,CACxB,IAAAqI,EAAqCrwB,KAAKswB,WAAlC7jC,EAAgB4jC,EAAhB5jC,iBAER,MAAO,CACLtB,OAH8BklC,EAANllC,OAIxBsB,iBAAAA,EAEJ,CACA,MAAO,CAAC,CACV,GAAC,CAAA9F,IAAA,aAAA2D,MAED,SAAWmyB,GAAQ,IAAD/b,EAAA,KAOdP,EAUEsc,EAVFtc,WACAnT,EASEyvB,EATFzvB,KACAujC,EAQE9T,EARF8T,cACA3vB,EAOE6b,EAPF7b,KAMA9C,EACE2e,EADF3e,kBAIA7T,EAKE2W,EALF3W,KACA4O,EAIE+H,EAJF/H,OACAiC,EAGE8F,EAHF9F,SACA6U,EAEE/O,EAFF+O,aACA/mB,EACEgY,EADFhY,OAGIC,EAAcD,GAAUA,EAAO8M,IAAI,eACjCkF,EAAmB21B,EAAnB31B,eACRoF,KAAKgB,eAAe,CAAEb,WAAAA,EAAYnT,KAAAA,IAClCgT,KAAKmwB,QAAU1wB,EAAAA,YACf,IAAM+wB,GAA6BxhB,EAAAA,EAAAA,+BAA8B,CAAElR,kBAAAA,IAEnEkC,KAAK6lB,MACHpH,EAAAA,EAAAA,MAAChf,EAAAA,SAAc,CAAAqd,SAAA,EACbJ,EAAAA,EAAAA,KAAC+T,EAAAA,SAAQ,CAAC/R,UAAU,mBAAmBgD,MAAO,CAAEgP,QAAS,QAAUC,UAAW,EAAGl/B,MAAM,gBAAgBs4B,UAAU,wDACjHrN,EAAAA,EAAAA,KAACkU,IAA2BtpC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAC1BwgC,IAAK9nB,KAAKmwB,QACVlmC,KAAMA,EACN2W,KAAMA,EACNhG,eAAgBA,EAChB/R,YAAaA,EACbumB,MAAO4gB,IAAmB1oC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EACvBm1B,GAAK,IACR5jB,OAAAA,EACAiC,SAAAA,EACA6U,aAAAA,EACA9mB,YAAAA,EACA+R,eAAAA,MAEE6hB,GAAK,IACT+R,sBAAuB,SAACqC,GACtBnwB,EAAKJ,QAAQ,mBAAoB,CAC/BhW,MAAOumC,EACPpnC,QAAS,CAAEqnC,SAAS,IAExB,EACAhC,oBAAqB,SAACY,GACpBhvB,EAAKJ,QAAQ,OAAQ,CACnBnV,OAAQukC,GAEZ,EACAqB,wBAAyB,WACvBrwB,EAAKJ,QAAQ,sBAAuBI,EAAKnC,oBAC3C,EACA8C,UAAW,WACTX,EAAKW,WACP,EACAM,cAAe,WACbjB,EAAKiB,eACP,EACAmd,iBAAkB,WAChBpe,EAAKoe,kBACP,EACA5e,YAAa,WACXQ,EAAKR,aACP,EACAmnB,wBAAyB,SAAC0H,GACxB,GAAIA,EAAW,CACb,IAAMiC,EAAqB,CACzBC,eAAgB,CACdC,IAAK,CAAC,2BAAD/oC,OAA4B4mC,EAAS,QAI9CyB,EAA2BlqB,KAAK,CAAE7U,MAAOu/B,GAC3C,CACF,EACAhP,wBAAyB,SAACE,GACxB,GAAIA,EAAU,CACZ,IAAMiP,EAAoB,CACxBlU,aAAc,CACZiU,IAAK,CAAC,qBAAD/oC,OAAsB+5B,EAAQ,QAIvCsO,EAA2BlqB,KAAK,CAAE7U,MAAO0/B,GAC3C,CACF,QAKNnxB,KAAKoxB,UAAS,WACZ1wB,EAAK2wB,UACP,GACF,GAAC,CAAA1qC,IAAA,WAAA2D,MAED,WACE,IAAMgnC,EAAgB1B,GAAcxuB,KAAKpB,MAErCA,KAAKuxB,oBAAsBD,IAI3BA,IAAkB3B,GACpB3vB,KAAK6vB,IAAI2B,SAAS,gBAElBxxB,KAAK6vB,IAAI4B,YAAY,gBAGvBzxB,KAAKuxB,kBAAoBD,EAC3B,GAAC,CAAA3qC,IAAA,WAAA2D,MAED,SAASkR,GAIP,OAHIwE,KAAKmwB,QAAQnI,SACfhoB,KAAKmwB,QAAQnI,QAAQ6G,aAAarzB,GAE7BwE,IACT,GAAC,CAAArZ,IAAA,cAAA2D,MAED,WAAe,IAAD6kC,EAAA,KACZuC,EAAAA,OAAgB1xB,KAAK6lB,KAAM7lB,KAAK4B,IAChCpb,IAAAA,OAAQ,WACN2oC,EAAKkC,UACP,GACF,GAAC,CAAA1qC,IAAA,SAAA2D,MAED,WAEE,OADAonC,EAAAA,uBAAgC1xB,KAAK4B,KACrCkB,EAAAA,EAAAA,GAAA2qB,EAAA,gBAAA3qB,CAAA,GACF,IAAC,CArLgC,CAAStC,EAAAA,G,mDCzC/BmxB,IAAYC,EAAAA,GAAAA,GAAW,CAClCC,YAAa,CAGXC,OAAQ,QACR,+BAAgC,CAE9BA,OAAQ,QAER,qBAAsB,CACpBC,cAAe,mBAInB,4BAA6B,CAC3BA,cAAe,kBAKjB,2CAA4C,CAC1CD,OAAQ,UAGZE,cAAe,CACb,eAAgB,CACdtB,QAAS,WAKTV,GAAsB,SAAH9oC,GAalB,IAZL6J,EAAS7J,EAAT6J,UACAR,EAAMrJ,EAANqJ,OACA1I,EAAYX,EAAZW,aACAgR,EAAM3R,EAAN2R,OACA+B,EAAc1T,EAAd0T,eACAE,EAAQ5T,EAAR4T,SACAjS,EAAW3B,EAAX2B,YACA6mB,EAAYxoB,EAAZwoB,aACAC,EAAYzoB,EAAZyoB,aAAYsiB,EAAA/qC,EAEZ2hB,aAAAA,OAAY,IAAAopB,EAAG,EAACA,EAChBlpC,EAAM7B,EAAN6B,OAyBA,OAvBc,SAAHpB,GAAA,IACTuC,EAASvC,EAATuC,UACAiB,EAAMxD,EAANwD,OACAsB,EAAgB9E,EAAhB8E,iBAAgBylC,EAAAvqC,EAChBqxB,gBAAAA,OAAe,IAAAkZ,GAAQA,EAAA,OACnB30B,EAAAA,EAAAA,yBAAwB,CAC5BrT,UAAAA,EACAuC,iBAAAA,EACAtB,OAAAA,EACA4F,UAAAA,EACAR,OAAAA,EACA1I,aAAAA,EACAgR,OAAAA,EACA+B,eAAAA,EACAE,SAAAA,EACAke,gBAAAA,EACAnwB,YAAAA,EACA6mB,aAAAA,EACAC,aAAAA,EACA9G,aAAAA,EACA8J,YAAa5pB,GACZ,CAGL,EA+JO,IAAMopC,IAA+BC,EAAAA,GAAAA,IA7J5C,SAA6C/pC,GAiBzC,IAhBFuS,EAAcvS,EAAduS,eACA3Q,EAAI5B,EAAJ4B,KACApB,EAAWR,EAAXQ,YACAiV,EAAiBzV,EAAjByV,kBACA8C,EAAIvY,EAAJuY,KACA/H,EAAMxQ,EAANwQ,OACAiC,EAAQzS,EAARyS,SACA5Q,EAAS7B,EAAT6B,UACAqG,EAAMlI,EAANkI,OACA1I,EAAYQ,EAAZR,aACAwqC,EAAgBhqC,EAAhBgqC,iBACA1iB,EAAYtnB,EAAZsnB,aACA2iB,EAAUjqC,EAAViqC,WACAhqC,EAAUD,EAAVC,WACAiqC,EAAelqC,EAAfkqC,gBACAx8B,EAAc1N,EAAd0N,eAEMy6B,GAA6BxhB,EAAAA,EAAAA,+BAA8B,CAAElR,kBAAAA,IAEjE/M,EACEshC,IADFthC,UAEIyhC,EAAUb,KACVc,GAAcC,EAAAA,GAAAA,MACdvC,EAAU1wB,EAAAA,YAEdkC,EAGE4wB,EAHF5wB,cACAD,EAEE6wB,EAFF7wB,WACAtB,EACEmyB,EADFnyB,KAIIuyB,EAAqC,MAAnB58B,GAExBgqB,EAAAA,EAAAA,YAAU,WACJoQ,EAAQnI,SAAWyK,GAAeA,EAAYG,mBAChDzC,EAAQnI,QAAQ6G,aAAa,CAC3BpiC,iBAAkBgmC,EAAYG,mBAGpC,GAAG,CAACH,EAAatC,KAEjBpQ,EAAAA,EAAAA,YAAU,WACJoQ,EAAQnI,SAAW99B,GACrBimC,EAAQnI,QAAQ6G,aAAa,CAC3B3kC,UAAAA,GAGN,GAAG,CAACA,EAAWimC,IAEf,IAAM3B,GAAwBz/B,EAAAA,EAAAA,cAAY,SAACwlB,GACrCke,GAAejsC,IAAAA,WAAaisC,EAAYI,YAC1CJ,EAAYI,YAAYte,GAAYA,EAASxoB,QAEjD,GAAG,CAAC0mC,IAEJ,OAAKA,GAKH/V,EAAAA,EAAAA,KAAA,OAAKgC,UAAW+C,KAAW,2BAA4B+Q,EAAQX,aAAWxyB,EAAAA,GAAAA,GAAA,GAAKmzB,EAAQR,cAAgBW,IAAmB7V,UACxHJ,EAAAA,EAAAA,KAACkU,GAA2B,CAC1B9I,IAAKqI,EACLjS,QAASj0B,EACTA,KAAMqoC,EACN1xB,KAAMA,EACNhG,eAAgBA,EAChB1Q,UAAWA,EACXrB,YAAaA,EACbkI,UAAWA,EACXy9B,sBAAuBA,EACvBpf,MAAO4gB,GAAoB,CACzBj/B,UAAAA,EACAR,OAAAA,EACA1I,aAAAA,EACAgR,OAAAA,EACA+B,eAAAA,EACAE,SAAAA,EACAjS,YAAAA,EACA8mB,aAAAA,EACA5mB,OAAQT,IAEVqZ,cAAe,WACbA,GACF,EACAmd,iBAAkB,WAChBpd,IACAtB,GACF,EACAinB,wBAAyB,SAAC0H,GACxB,GAAIA,EAAW,CACb,IAAMiC,EAAqB,CACzBC,eAAgB,CACdC,IAAK,CAAC,2BAAD/oC,OAA4B4mC,EAAS,QAI9CyB,EAA2BlqB,KAAK,CAAE7U,MAAOu/B,GAC3C,CACF,EACAhP,wBAAyB,SAACE,GACxB,GAAIA,EAAU,CACZ,IAAMiP,EAAoB,CACxBlU,aAAc,CACZiU,IAAK,CAAC,qBAAD/oC,OAAsB+5B,EAAQ,QAIvCsO,EAA2BlqB,KAAK,CAAE7U,MAAO0/B,GAC3C,CACF,MAtDG,IA0DX,IAjMyB,SAAC3qC,EAACK,GAAA,IAAAisC,EAAAjsC,EAAIksC,QAAAA,OAAO,IAAAD,EAAG,CAAC,EAACA,EAAA,MAAQ,CACjD,UAAW5mC,OAAO8mC,QAChBC,EAAAA,GAAAA,IAA+BF,GAC/BG,GAAAA,IAEH,G,0RCZoBC,EAAgB,SAAA1yB,GACnC,SAAA0yB,EAAY1pC,GAAS,OAAAkX,EAAAA,EAAAA,GAAA,KAAAwyB,IAAAtyB,EAAAA,EAAAA,GAAA,KAAAsyB,EAAA,CACb3sC,IAAAA,OAAS,CAAC,EAAGiD,EAAS,CAAEqX,cAAc,KAC9C,CAAC,OAAAQ,EAAAA,EAAAA,GAAA6xB,EAAA1yB,IAAAc,EAAAA,EAAAA,GAAA4xB,EAAA,EAAAxsC,IAAA,aAAA2D,MAED,SAAUzD,GAKN,IAJF0lC,EAAe1lC,EAAf0lC,gBACAhI,EAAM19B,EAAN09B,OACAt6B,EAAIpD,EAAJoD,KACA2W,EAAI/Z,EAAJ+Z,KAEAZ,KAAKusB,gBAAkBA,EACvBvsB,KAAKukB,OAASA,EACdvkB,KAAK/V,KAAOA,EACZ+V,KAAKY,KAAOA,CACd,GAAC,CAAAja,IAAA,YAAA+O,IAED,WACE,MAAO,eACT,GAAC,CAAA/O,IAAA,WAAA+O,IAED,WACE,OAAOqnB,GACT,GAAC,CAAAp2B,IAAA,WAAA2D,MAED,WAIS,IAADoW,EAAA,KAAAxZ,EAAA+M,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAJ,CAAC,EAHH9I,EAAMjE,EAANiE,OACAJ,EAAO7D,EAAP6D,QACAquB,EAAYlyB,EAAZkyB,aAqBA,OAnBA9W,EAAAA,QAAQC,WAAWD,EAAAA,QAAQ8wB,gBAAgBpzB,KAAM,gBAAiBsrB,EAAAA,aAAc,CAC9EngC,OAAAA,EACAJ,QAAAA,EACAsoC,eAAgBC,IAChB/G,gBAAiBvsB,KAAKusB,gBACtBhI,OAAQvkB,KAAKukB,OACbt6B,KAAM+V,KAAK/V,KACX2W,KAAMZ,KAAKY,MACV,CACD2yB,KAAM,SAAF5rC,GAA2B,IAAd6rC,EAAM7rC,EAAdwD,QACP2X,EAAAA,EAAAA,GAAAqwB,EAAA,WAAAzyB,EAAA,EAAAoC,CAAA,CAAe,CAAE3X,OAAQqoC,KACzB9yB,EAAKJ,QAAQ,OAAQ,CAAEnV,OAAQqoC,GACjC,IACE,CACFroC,OAAAA,EACAJ,QAAAA,EACAquB,aAAAA,KAGFtW,EAAAA,EAAAA,GAAAqwB,EAAA,kBAAArwB,CAAA,CAAsB,CACpB3X,OAAAA,IAEJ,GAAC,CAAAxE,IAAA,cAAA2D,MAED,WAEE,OADA0V,KAAK6vB,IAAI4D,KAAKzzB,KAAK+c,YACZ/c,IACT,IAAC,CAzDkC,CAAS+C,EAAAA,mB,gCCJjC2wB,EAAiB,SAAH7sC,GAIpB,IAHLgC,EAAWhC,EAAXgC,YACAjB,EAAef,EAAfe,gBACA+J,EAAe9K,EAAf8K,gBAEM+f,EAAQ,CAAC,WAAY,SAAU,cAQrC,OANI7oB,EAAYihB,QAAQ6pB,sBACC,aAApB/rC,GACA+J,IAAmBiiC,EAAAA,EAAAA,IAAwBjiC,EAAgBsQ,mBAE9DyP,EAAMtI,KAAK,eAENsI,CACT,ECPMriB,EAAiB,CAAC,SAAU,cAAe,SAC3CsgC,EACG,EADHA,EAEG,EAMT,SAASkE,IACP,OAAI7zB,KAAKoC,EAAE,kCAAkC2tB,aALjB,IAMnBJ,EAEFA,CACT,CAGA,SAASC,IACP,OAAI5vB,KAAK6vB,IAAIC,QAAQ,yBAAyBC,aAZlB,IAanBJ,EAEFA,CACT,CAGA,SAASmE,IACP,IAAMxC,EAAgBuC,EAAmBzyB,KAAKpB,MAE1CA,KAAK+zB,yBAA2BzC,IAIhCA,IAAkB3B,EACpB3vB,KAAKoC,EAAE,kCAAkCovB,SAAS,eAElDxxB,KAAKoC,EAAE,kCAAkCqvB,YAAY,eAGvDzxB,KAAK+zB,uBAAyBzC,EAChC,CAEA,SAAS0C,EAAmB7oC,GAC1B,OAA8G,IAAvG3E,IAAAA,QAAU,CAAC,MAAO,iBAAkB,mBAAoB,aAAc,mBAAoB2E,EACnG,CAGA,SAAS8oC,IACPH,EAAc1yB,KAAKpB,MAEnB,IAAMsxB,EAAgB1B,EAAcxuB,KAAKpB,MAErCsxB,IAAkBtxB,KAAKuxB,oBAIvBD,IAAkB3B,EACpB3vB,KAAK6vB,IAAI2B,SAAS,gBAElBxxB,KAAK6vB,IAAI4B,YAAY,gBAGvBzxB,KAAKuxB,kBAAoBD,EAC3B,CAGA,SAAS/uB,IAAc,IAAD7B,EAAA,KACdwzB,EAAiBl0B,KAAKswB,WAAWvlC,QAC/Bd,EAAS+V,KAAKY,KAAd3W,KAER+V,KAAK8c,SAAW,GAChBt2B,IAAAA,KAAO0tC,GAAgB,SAAC/oC,EAAQyE,GAC9B,IAAMukC,EAAQ7xB,EAAAA,QAAQ8wB,gBAAgB1yB,EAAM0zB,OAAOxkC,GAAQykC,EAAc,CACvE9H,gBAAiB7rB,EAAKE,KAAK2rB,gBAC3BhI,OAAQ7jB,EAAKE,KAAK2jB,OAClBt6B,KAAAA,GACC,CACDspC,KAAM,SAAF1sC,GAA2B,IAAd2sC,EAAM3sC,EAAdsE,OACDmpC,EAAkB9tC,IAAAA,MAAQka,EAAK4vB,WAAWvlC,SAEhDupC,EAAgB1kC,GAAS4jC,EAEzB,IAAAe,EAAuC7zB,EAAKE,KAApC+F,EAAe4tB,EAAf5tB,gBAAiBC,EAAS2tB,EAAT3tB,UAEzBD,EAAgBI,WACd,CAACH,EAAUI,YAAYC,OACvBL,EAAUM,SAASC,KACnB,cAAc,GAADhf,OACVuY,EAAK9Y,gBAAe,8BAEzB0a,EAAAA,QAAQC,WAAW7B,EAAM,CACvB3V,QAASupC,IAEX5zB,EAAKJ,QAAQ,sBAAuB,CAAEvV,QAASupC,IAC/C,IAAME,EAAe9zB,EAAK0B,EAAE,uBACxBoyB,EAAazoC,OAAS,GACxByoC,EAAaC,OAEjB,IAGF/zB,EAAKoc,SAAS1T,KAAK+qB,GAEnB7xB,EAAAA,QAAQC,WAAW4xB,EAAO,CACxBhpC,OAAAA,EACAupC,4BAA6Bh0B,EAAKi0B,mBAAmBjwB,cACrD3Z,QAASvE,IAAAA,YAAasE,EAAAA,EAAAA,YAAW4V,EAAK7X,aAAcqrC,GACpD9a,aAAc1Y,EAAK0Y,cAEvB,IAEA,IAAQlvB,EAAc8V,KAAKswB,WAAnBpmC,UAER,GAAKA,EAAL,CAIA,IAAM0qC,EAAe,CACnBxb,aAAcpZ,KAAKoZ,cAGrBpZ,KAAKoE,KAAO5d,IAAAA,IAAMktC,EAAe,CAC/B7qC,YAAamX,KAAKnX,YAClBjB,gBAAiBoY,KAAKpY,gBACtB+J,gBAAiBqO,KAAKrO,mBACpB,SAACkjC,GACH,IAAcC,GAAkBtuC,IAAAA,KAC9Bka,EAAKi0B,mBAAmBjwB,eACxB,SAAA/c,GAAM,OAAAA,EAAHotC,IAAc,GAAGC,cAAgBH,CAAU,KAC3C,CAAErtC,KAAM,CAAC,IAHNA,KAKJytC,EAAsB,CAAC,EACvBC,EAAgC,CAAC,EAErC,GAAIhrC,EAAUG,SAAU,CACtB,IAAc8qC,GAAe3uC,IAAAA,KAC3Bka,EAAK00B,yBAAyB1wB,eAC9B,SAAAjc,GAAM,OAAAA,EAAHssC,IAAc,GAAGC,cAAgBH,CAAU,KAC3C,CAAErtC,KAAM,CAAC,IAHNA,KAKRytC,EAAsBE,EAEtB,IAAcE,GAAyB7uC,IAAAA,KACrCka,EAAK40B,mCAAmC5wB,eACxC,SAAAlb,GAAM,OAAAA,EAAHurC,IAAc,GAAGC,cAAgBH,CAAU,KAC3C,CAAErtC,KAAM,CAAC,IAHNA,KAKR0tC,EAAgCG,CAClC,CAEA,IAAME,EAAgB,CAAC,EACjBC,EAAsB,CAAC,EAE7BhvC,IAAAA,KAAO0tC,GAAgB,SAAC/oC,GACtB,IAAQohC,EAAoB7rB,EAAKE,KAAzB2rB,gBACFjiC,EAAQwqC,EAAc3pC,IAAW,EACnCsqC,EAAY,GAEXzB,EAAmB7oC,IAAWuV,EAAKi0B,mBAAmBxpC,KACzDsqC,EAAYp/B,KAAKC,MAAe,IAARhM,EAAiBoW,EAAKi0B,mBAAmBxpC,KAGnE,IAAMuqC,EAAmBnJ,EAAgBI,aAAaxhC,EAAQb,EAAOsqC,GAC/De,EAAsB3B,EAAmB7oC,GAAUuqC,EAAgB,GAAAvtC,OACpEutC,EAAgB,MAAAvtC,OAAK8B,EAAKO,UAC3B,wCACA,CACEorC,WAAY3rC,EAAK4rC,cAAcJ,EAAY,IAAO,CAChDK,sBAAuB,EACvBC,sBAAuB,MAG5B,KAWH,GATAR,EAAcpqC,GAAU,CAAC,EACzB3E,IAAAA,OAAS+uC,EAAcpqC,GAAS,CAC9BA,OAAAA,EACAb,MAAAA,EACAorC,iBAAAA,EACAD,UAAYnrC,EAAY+L,KAAKkS,IAAIktB,EAAW,GAAxB,EACpBE,oBAAAA,IAGEzrC,EAAUG,SAAU,CACtB,IAAM2rC,EAAcf,EAAoB9pC,IAAW,EAC/C8qC,EAAkB,GAEjBjC,EAAmB7oC,IAAWuV,EAAK00B,yBAAyBjqC,KAC/D8qC,EAAkB5/B,KAAKC,MAAqB,IAAd0/B,EAAuBt1B,EAAK00B,yBAAyBjqC,KAGrF,IAAM+qC,EAAyB3J,EAAgBI,aAC7CxhC,EACA6qC,EACApB,GAGIuB,EAA4BnC,EAAmB7oC,GAAU+qC,EAAsB,GAAA/tC,OAChF+tC,EAAsB,MAAA/tC,OAAK8B,EAAKO,UACjC,wCACA,CACEorC,WAAY3rC,EAAK4rC,cAAcI,EAAkB,IAAO,CACtDH,sBAAuB,EACvBC,sBAAuB,MAG5B,KAEHP,EAAoBrqC,GAAU,CAAC,EAC/B3E,IAAAA,OAASgvC,EAAoBrqC,GAAS,CACpCA,OAAAA,EACAb,MAAO0rC,EACPI,iBAAkBlB,EAA8B/pC,GAChDkrC,0BAA0B,IAADluC,OAAMokC,EAAgBU,+BAA+BiI,EAA8B/pC,IAAW,GAAE,KACzHmrC,gBAAiB/J,EAAgBS,qBAAqB7hC,EAAQb,EAAQ0rC,GACtEN,iBAAkBQ,EAClBT,UAAYO,EAAkB3/B,KAAKkS,IAAI0tB,EAAiB,GAA9B,EAC1BN,oBAAqBQ,GAEzB,CACF,IACA,IAAMzuB,EAAc,CAAE6tB,cAAAA,GAKtB,OAHIrrC,EAAUG,UACZ7D,IAAAA,OAASkhB,EAAa,CAAE8tB,oBAAAA,IAEnB9tB,CACT,IAEA,IAAM6uB,EAAkB,GAAApuC,OAAM8B,EAAKwZ,WAAWvZ,EAAUme,OAAM,OAAAlgB,OAAM8B,EAAKwZ,WAAWvZ,EAAUoe,MACxFkuB,EAA2BtsC,EAAUG,SAAQ,GAAAlC,OAAM+B,EAAUG,SAASqf,eAAc,OAAAvhB,OAAM+B,EAAUG,SAASsf,cAAiB,KAEpInjB,IAAAA,OAASwZ,KAAKoE,KAAM,CAClBmyB,mBAAAA,EACAC,yBAAAA,IAEFx2B,KAAKy2B,QAAS,EACdz2B,KAAK02B,QA1HL,CA2HF,CAGA,SAASC,IAAY,IAADxH,EAAA,KAClByH,EAGI52B,KAAKswB,WAFPpmC,EAAS0sC,EAAT1sC,UACAqG,EAAMqmC,EAANrmC,OAEFsmC,EAA+C72B,KAAKY,KAA5C+F,EAAekwB,EAAflwB,gBAAiBC,EAASiwB,EAATjwB,UAAWhe,EAAMiuC,EAANjuC,OAEpCoX,KAAKqB,YACLrB,KAAK2B,iBACLpF,EAAAA,EAAAA,qBAAoB,CAClBxL,UAAWiP,KAAKjP,UAChB7G,UAAAA,EACAqG,OAAAA,EACAsI,OAAQmH,KAAKY,KAAK/H,OAClBiC,SAAUkF,KAAKY,KAAK9F,SACpBlT,gBAAiBoY,KAAKpY,gBACtBgT,eAAgBoF,KAAKuwB,cAAc31B,eACnCoe,gBAAiBhZ,KAAKgZ,gBACtBgB,UAAU,EACVnxB,YAAaD,GAAUA,EAAO8M,IAAI,eAClCid,YAAY,GAADxqB,OAAK6X,KAAKjX,OAAM,sBAC1By2B,SAAQ,WACT2P,EAAKjvB,aACP,IAAGxI,MAAK,SAAC0M,GAEP,GADA+qB,EAAK2H,UAAW,GACZ3H,EAAK4H,QAAT,CAIA,GAAoB,OAAhB3yB,EAAKW,aAAmC5b,IAAhBib,EAAKW,OAM/B,OAHAoqB,EAAK2H,UAAW,EAChBv0B,EAAWnB,KAAK+tB,QAChBxoB,EAAgBI,WAAW,CAACH,EAAUI,YAAYC,OAAQL,EAAUM,SAASC,KAAM,cAAeiL,KAAKC,UAAUjO,IAInH,IAAKA,EAAKC,MAAQD,EAAKK,+BAIrB,OAHA0qB,EAAK2H,UAAW,EAChBv0B,EAAWnB,KAAK+tB,QAChBxoB,EAAgBI,WAAW,CAACH,EAAUI,YAAYwlB,OAAQ5lB,EAAUM,SAASC,KAAM,cAAeiL,KAAKC,UAAUjO,IAInH+qB,EAAK/V,aAAehV,EAAKiV,gCACzB8V,EAAK6H,aAAc,EACnB7H,EAAKwF,oBAAqBxwB,EAAAA,EAAAA,0BAAyB,CACjDC,KAAAA,EACAjZ,OAAQ,wBACJ,CAAC,EAEP3E,IAAAA,SAAW2oC,EAAKwF,mBAAoB,CAAEjwB,cAAe,CAAC,IAElDxa,EAAUG,WACZ8kC,EAAKmG,oCAAqCnxB,EAAAA,EAAAA,0BAAyB,CACjEC,KAAAA,EACAjZ,OAAQ,wCACJ,CAAC,EAEP3E,IAAAA,SAAW2oC,EAAKmG,mCAAoC,CAAE5wB,cAAe,CAAC,IAEtEyqB,EAAKiG,0BAA2BjxB,EAAAA,EAAAA,0BAAyB,CACvDC,KAAAA,EACAjZ,OAAQ,8BACJ,CAAC,EAEP3E,IAAAA,SAAW2oC,EAAKiG,yBAA0B,CAAE1wB,cAAe,CAAC,KAG9DyqB,EAAK2H,UAAW,EAChBv0B,EAAWnB,KAAK+tB,EA5ChB,CA6CF,IAAGpU,OAAM,SAAC4E,GACRwP,EAAK6H,aAAc,OAEK7tC,IAApBw2B,EAAS5a,QACX4B,EAAgBI,WAAW,CAACH,EAAUI,YAAYwlB,OAAQ5lB,EAAUM,SAASC,KAAM,cAAewY,EAAS/H,OAE7GuX,EAAKsH,QAAS,EACdtH,EAAK2H,UAAW,EAChB3H,EAAK8H,aACP,GACF,CAGA,SAASC,IACP,GAA6B,YAAzBl3B,KAAKpY,gBACPoY,KAAKY,KAAK8E,aAAamC,gBAAgB,oBAAqB,CAC1D/P,QAAS,gBAEN,CACL,IAAMrD,EAAauL,KAAKY,KAAKpF,MAAM9F,IAAI,eAEvCsK,KAAKY,KAAK8E,aAAamC,gBAAgB,yBAA0B,CAE/D/B,YAAarR,EACbqD,QAAS,WAEb,CACF,CAEO,IAAMq/B,EAAU,SAAAjH,GAAA,SAAAiH,IAAA,OAAAx2B,EAAAA,EAAAA,GAAA,KAAAw2B,IAAAt2B,EAAAA,EAAAA,GAAA,KAAAs2B,EAAAljC,UAAA,QAAAqN,EAAAA,EAAAA,GAAA61B,EAAAjH,IAAA3uB,EAAAA,EAAAA,GAAA41B,EAAA,EAAAxwC,IAAA,YAAA2D,MACrB,WACE,MAAO,aACT,GAAC,CAAA3D,IAAA,aAAA2D,MAED,SAAU6oB,GAaN,IAADikB,EAAA,KAZDrmC,EAASoiB,EAATpiB,UACAhG,EAAOooB,EAAPpoB,QACAnD,EAAeurB,EAAfvrB,gBACAsC,EAASipB,EAATjpB,UACAiW,EAAUgT,EAAVhT,WACAnT,EAAImmB,EAAJnmB,KACA4T,EAAIuS,EAAJvS,KACA2vB,EAAapd,EAAbod,cACAhgC,EAAM4iB,EAAN5iB,OAAM8mC,EAAAlkB,EACN6F,gBAAAA,OAAe,IAAAqe,GAAQA,EAAAC,EAAAnkB,EACvBokB,eAAAA,OAAc,IAAAD,GAAQA,EACtBvuC,EAAMoqB,EAANpqB,OAEAiX,KAAKgB,eAAe,CAAEb,WAAAA,EAAYnT,KAAAA,IAClCgT,KAAK20B,mBAAqB,CAAEjwB,cAAe,CAAC,GAC5C1E,KAAKs1B,mCAAqC,CAAE5wB,cAAe,CAAC,GAC5D1E,KAAKo1B,yBAA2B,CAAE1wB,cAAe,CAAC,GAClD1E,KAAKjP,UAAYA,EACjBiP,KAAKpY,gBAAkBA,EACvBoY,KAAKuwB,cAAgBA,EACrBvwB,KAAKgZ,gBAAkBA,EACvBhZ,KAAKY,KAAOA,EACZZ,KAAKjX,OAASA,EAEd,IAGIyuC,EAHI5uC,EAAWoX,KAAKY,KAAhBhY,OAKR,GAJAoX,KAAKnX,YAAcD,GAAUA,EAAO8M,IAAI,eACxCsK,KAAKrO,gBAAkB/I,GAAUA,EAAO8M,IAAI,mBAGxC3K,EAAS,CACX,IAAM0sC,GAAiB1jB,EAAAA,EAAAA,cAAa,CAAElrB,YAAamX,KAAKnX,YAAakC,QAAAA,IAC/DinB,GAAmBlnB,EAAAA,EAAAA,YAAWkV,KAAKnX,aAEzC2uC,EAAkBhxC,IAAAA,aAAeixC,EAAgBzlB,GAE7CxrB,IAAAA,KAAOgxC,GAAmBhxC,IAAAA,KAAO6I,KACnCmoC,EAAkBhxC,IAAAA,MAAQgxC,GACvBvlB,MAAM5iB,GACN6iB,OACAC,MAAM3rB,IAAAA,KAAO6I,IACb/E,QAEH9D,IAAAA,OAAQ,WACN4wC,EAAK92B,QAAQ,sBAAuB,CAAEvV,QAASysC,GACjD,IAEJ,MACEA,EAAkBnoC,EAGpB2Q,KAAK2uB,SAAS,CACZ5jC,QAASysC,EACTttC,UAAAA,EACAqG,OAAAA,IAGF,IAAMmnC,EAAeH,EAAiB,WACpCH,EAAKJ,aAAc,CACrB,EAAIL,EAEJe,EAAat2B,KAAKpB,MAElBA,KAAK23B,SAAS33B,KAAK4c,MAAO,oBAAoB,WAC5Cwa,EAAKpe,iBAAkB,EACvB0e,EAAat2B,KAAKg2B,EACpB,IAEAp3B,KAAK23B,SAAS33B,KAAK4c,MAAO,iBAAiB,WACzCwa,EAAKpe,iBAAkB,EACvB0e,EAAat2B,KAAKg2B,EACpB,IAEAp3B,KAAK23B,SAAS33B,KAAK4c,MAAO,kBAAkB,WAC1Cra,EAAWnB,KAAKg2B,EAClB,IAEAp3B,KAAKoxB,UAAS,WACZ6C,EAAS7yB,KAAKg2B,EAChB,IAEAp3B,KAAKiB,GAAG,WAAW,WACjBm2B,EAAKL,SAAU,CACjB,GACF,GAAC,CAAApwC,IAAA,SAAA+O,IAED,WACE,MAAO,CACL,8BAA+BsK,KAAK43B,UACpC,8BAA+B53B,KAAK63B,UACpC,4BAA6BX,EAAyBY,KAAK93B,MAE/D,GAAC,CAAArZ,IAAA,YAAA2D,MAED,SAAUoc,GACR,IAAMqxB,EAAU31B,IAAEsE,EAAMI,eAClBzT,EAAO0kC,EAAQ3zB,KAAK,QAE1B2zB,EAAQjI,QAAQ,eAAe0B,SAAS,QAADrpC,OAASkL,EAAI,UACtD,GAAC,CAAA1M,IAAA,YAAA2D,MAED,SAAUoc,GACR,IAAMqxB,EAAU31B,IAAEsE,EAAMI,eAClBzT,EAAO0kC,EAAQ3zB,KAAK,QAE1B2zB,EAAQjI,QAAQ,eAAe2B,YAAY,QAADtpC,OAASkL,EAAI,UACzD,GAAC,CAAA1M,IAAA,cAAA2D,MAED,WAAe,IAAD0tC,EAAA,KACRh4B,KAAKg3B,aACPh3B,KAAKi4B,qBAEPj4B,KAAKuxB,uBAAoBpoC,EACzB6W,KAAK+zB,4BAAyB5qC,GAC9B2Z,EAAAA,EAAAA,GAAAq0B,EAAA,qBAAAr0B,CAAA,IACI9C,KAAKg3B,cACPh3B,KAAK8e,mBACLt4B,IAAAA,OAAQ,WACNytC,EAAS7yB,KAAK42B,EAChB,IAEJ,GAAC,CAAArxC,IAAA,WAAA+O,IAED,WAAgB,IAADwiC,EAAA,KACLntC,EAAYiV,KAAKswB,WAAjBvlC,QACAqZ,EAASpE,KAAToE,KACR+zB,EAAyBn4B,KAAKY,KAAtB3W,EAAIkuC,EAAJluC,KAAMs6B,EAAM4T,EAAN5T,OAEd,OAAO,kBAAMxH,IAAS,CACpBqb,wBAAyBF,EAAKE,0BAC9B7T,OAAAA,EACA7S,MAAOgiB,EAAe,CACpB7qC,YAAaqvC,EAAKrvC,YAClBjB,gBAAiBswC,EAAKtwC,gBACtB+J,gBAAiBumC,EAAKvmC,kBAExB5G,QAAAA,EACAqZ,KAAAA,EACAqyB,OAAQyB,EAAKzB,OACbK,SAAUoB,EAAKpB,SACf7sC,KAAAA,EACA+pC,mBAAAA,EACApsC,gBAAiBswC,EAAKtwC,iBACrB,CACL,GAAC,CAAAjB,IAAA,WAAA2D,MAED,SAAS+tC,GACHA,EAASttC,SAAYvE,IAAAA,KAAO6xC,EAASttC,SAAWvE,IAAAA,KAAO6I,KAIzDgpC,EAASttC,QAAUsE,EACnB2Q,KAAKM,QAAQ,sBAAuB,CAAEvV,QAASstC,EAASttC,YAG1D+X,EAAAA,EAAAA,GAAAq0B,EAAA,kBAAAr0B,CAAA,CAAeu1B,GACjB,IAAC,CAjKoB,CAAS73B,EAAAA,E,yFC9T5BmsB,EACAK,EACAC,E,0XAiCJ,SAASqL,EAAWhuC,EAAOa,GACzB,MAAO,CACLtB,mBAAoB8iC,EAClBxhC,EACAb,EAAMT,mBACN,CAAE61B,SAAUp1B,EAAMuiC,WAEpB/iC,yBAA0BkjC,EACxB7hC,EACAb,EAAMR,yBACN,CAAE41B,SAAUp1B,EAAMuiC,WAEpB9iC,mCACEkjC,EAA+B3iC,EAAMP,oCAE3C,CAGA,SAASwuC,EAAoBrxC,EAAYiE,GAAS,IAjDnCqtC,EAiDiBluC,EAAKpD,EAALoD,MAC9B,OAAOmuC,IAA0B,CAC/BnuC,MAAOguC,EAAWhuC,EAAOa,GACzBumB,OApDW8mB,EAoDEx4B,KAAKswB,WAAWkI,KAnDxBhyC,IAAAA,SAAW,CAAEgyC,KAAAA,GAAQ,CAC1B3uC,mBAAoB,CAClB6uC,IAAK,qCACLC,IAAK,4BAEP7uC,yBAA0B,CACxB4uC,IAAK,qBACLC,IAAK,sCAEP5uC,mCAAoC,CAClC2uC,IAAK,qBACLC,IAAK,6BAEPH,KAuCAI,UAAW54B,KAAK64B,SAASnjC,IAAI,kBAAkB1I,OAAS7B,GAAU6U,KAAKswB,WAAWpmC,UAAUG,UAA8B,eAAlB2V,KAAKqF,UAEjH,CAEA,IAAMyzB,EAAkB,CACtBjvC,mBAAoB,qBACpBC,yBAA0B,8BAC1BC,mCAAoC,yCAGhCgvC,EAAe,CACnB7rB,QAAS,4BACTF,WAAY,eACZ3Y,SAAU,6BACVD,QAAS,mCACTkZ,QAAS,6BAGL0rB,EAAsB,CAC1B9rB,QAAS,8BACTF,WAAY,wBACZ3Y,SAAU,+BACVD,QAAS,iBACTkZ,QAAS,+BAIX,SAAS2rB,EAAkB9tC,GACzB,MAAM,GAANhD,OAAU2wC,EAAgB94B,KAAKswB,WAAWkI,MAAK,KAAArwC,OAAIgD,EACrD,CAGA,SAAS+tC,EAAa/tC,GAAS,IAADuV,EAAA,KAC5B,OAAOV,KAAKm5B,kBAAkB,CAC5BnsC,KAAM7B,EACNw3B,MAAO3iB,KAAKukB,OAAOC,SAAS,qBAAsBr5B,GAClDq5B,SAAU,SAAA3B,GAAM,OAxEpB,WAKiB,IAADh8B,EAAAoN,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAZ,CAAC,EAACmlC,EAAAvyC,EAJJgD,mBAAAA,OAAkB,IAAAuvC,EAAG,CAAC,EAACA,EAAAC,EAAAxyC,EACvBiD,yBAAAA,OAAwB,IAAAuvC,EAAG,CAAC,EAACA,EAAAC,EAAAzyC,EAC7BkD,mCAAAA,OAAkC,IAAAuvC,EAAG,CAAC,EAACA,EACvCzM,EAAQhmC,EAARgmC,SACM1hC,EAAM8I,UAAAlI,OAAA,EAAAkI,UAAA,QAAA9K,EACZ,MAAO,CACLU,mBAAoBA,EAAmBsB,GACvCrB,yBAA0BA,EAAyBqB,GACnDpB,mCAAoCA,EAAmCoB,GACvE0hC,SAAAA,EAEJ,CA4DwB0M,CAAqB1W,EAAQ13B,EAAO,EACxDquC,SAAU,CACR7yC,IAAKsyC,EAAkB73B,KAAKpB,KAAM7U,GAClCqB,WAAY,GAEditC,WAAY,WAAF,OACP/4B,EAAKm4B,SAASnjC,IAAI,kBAAkB1I,OAAS7B,EAAS,CAAC,kCAAoC,CAAC,qCAAqC,EACpIuuC,YAAa,WAAF,OACRh5B,EAAKm4B,SAASnjC,IAAI,kBAAkB1I,OAAS7B,EAAS,CAAC,iCAAmC,EAAE,EAC/FwuC,YAAa,WAAF,OACRj5B,EAAKm4B,SAASnjC,IAAI,kBAAkB1I,OAAS7B,EAAS,CAAC,iCAAmC,EAAE,EAC/FsoC,KAAMmG,IAAgC,CACpCzuC,OAAAA,EACAo5B,OAAQvkB,KAAKukB,OACbt6B,KAAM+V,KAAK/V,OAEb8yB,SAAU,SAAFp1B,GAAA,IAAK2C,EAAK3C,EAAL2C,MAAK,OAAOiuC,EAAqBn3B,KAAKV,EAAM,CAAEpW,MAAAA,GAASa,EAAO,GAE/E,CAGA,SAAS0uC,IAAc,IAAD1K,EAAA,KACpB,OAAOnvB,KAAKm5B,kBAAkB,CAC5BnsC,KAAM,OACN21B,MAAO3iB,KAAK/V,KAAKO,UAAUwuC,EAAoBh5B,KAAKqF,WACpDmf,SAAU,SAAFn8B,GAeD,IAeDyxC,EA7BJpoC,EAAErJ,EAAFqJ,GACAjK,EAAIY,EAAJZ,KACA8e,EAAIle,EAAJke,KACA4H,EAAM9lB,EAAN8lB,OACAb,EAAOjlB,EAAPilB,QACAjZ,EAAQhM,EAARgM,SACA0lC,EAAS1xC,EAAT0xC,UACAC,EAAkB3xC,EAAlB2xC,mBACA5M,EAAY/kC,EAAZ+kC,aACAlgB,EAAO7kB,EAAP6kB,QACA+sB,EAAK5xC,EAAL4xC,MACAC,EAAgB7xC,EAAhB6xC,iBACAC,EAAY9xC,EAAZ8xC,aACAn1B,EAAsB3c,EAAtB2c,uBAEIo1B,EAAW7zB,EAsBf,MApBsB,YAAlB4oB,EAAK9pB,UACP+0B,EAAW7zB,EACO,WAAdwzB,EACFK,EAAQ,IAAAjyC,OAAOiyC,EAAQ,KACA,UAAdL,IACTK,EAAQ,IAAAjyC,OAAOiyC,EAAQ,OAGzBA,EAD2B,eAAlBjL,EAAK9pB,SACHkB,EAEA9e,EAIS,aAAlB0nC,EAAK9pB,SACPy0B,IAAiBK,EACU,YAAlBhL,EAAK9pB,WACdy0B,IAAiBzlC,EAAS8lC,cAGrB,CACL1yC,KAAM2yC,EACNC,YAAa9zB,EACb4H,QAAQrJ,EAAAA,EAAAA,cAAaqJ,EAAQnJ,GAC7BI,MAAMD,EAAAA,EAAAA,YAAW,CACfxb,GAAI+H,EACJ2T,SAAU8pB,EAAK9pB,SACftU,UAAWo+B,EAAKp+B,UAChBnJ,gBAAiBunC,EAAKvnC,gBACtB0d,QAASgI,EACT/H,SAAUlR,EACVoR,YAAa0pB,EAAK1pB,YAClBC,aAAcypB,EAAKzpB,aACnBF,gBAAkC,UAAjB4nB,EACjBroB,OAAQoJ,IAEV1G,UAAW0G,EACX9I,SAAU8pB,EAAK9pB,SACfi1B,KAAKt0B,EAAAA,EAAAA,cAAa,CAChBrc,GAAI+H,EACJ2T,SAAU8pB,EAAK9pB,SACftU,UAAWo+B,EAAKp+B,UAChBuU,QAASgI,EACT/H,SAAUlR,IAEZiZ,QAASA,GAAW,CAAC,EACrBjZ,SAAUA,GAAY,CAAC,EACvB0lC,UAAWA,GAAaC,EACxBpyC,gBAAiBunC,EAAKvnC,gBACtBqC,KAAMklC,EAAKllC,KACXm4B,sBAAuB9sB,EAAAA,UAAU8sB,sBACjCmY,MAAON,EACPpyC,aAAculC,EACdoN,gBAAiBttB,EAAUA,EAAQ3G,KAAO,KAC1Ck0B,iBAAkBP,EAClBJ,aAAAA,EAEJ,EACA/c,SAAU2d,EAAAA,kBAEd,CAGA,SAASC,IAAiB,IAADvD,EAAA,KACvB,OAAO5wC,IAAAA,OAASA,IAAAA,KAAMuE,EAAAA,EAAAA,YAAQiV,KAAKpX,QAAUoX,KAAKpX,OAAO8M,IAAI,eAAgBsK,KAAK6I,eAAe,SAAA1d,GAAM,MAAI,CAACA,EAAQ+tC,EAAa93B,KAAKg2B,EAAMjsC,GAAQ,IACtJ,CAGA,SAASyvC,IACH56B,KAAK6qB,WACP7qB,KAAK6qB,SAASgF,IAAIC,QAAQ,qBAAqBvkC,KAAK,UAAUgY,KAAK,iBAAiB,GACpFvD,KAAK6qB,SAASgQ,SACd76B,KAAK6qB,SAAW,MAGd7qB,KAAK86B,kBACP14B,IAAE5S,UAAUqT,IAAI,QAAS7C,KAAK86B,iBAC9B96B,KAAK86B,gBAAkB,KAE3B,CA4BA,SAASlD,EAAUmD,IAzBnB,SAA6BA,GAC3B,IAAMhD,EAAU31B,IAAE24B,EAAIj0B,eAChBk0B,EAAejD,EAAQxsC,KAAK,kBAE9ByvC,EAAaz3B,KAAK,UACpBy3B,EAAaz3B,KAAK,QAAS,IAG7B,IAAM03B,EAAYlD,EAAQjI,QAAQ,aAC5BoL,EAAYD,EAAUC,YAExBA,GAAa,IAIbnD,EAAQoD,SAAS5jC,IAAM0jC,EAAUE,SAAS5jC,IAAM,KAClDyjC,EAAaI,IAAI,SAAS,GAADjzC,OAAK+yC,EAAY,GAAE,OAC5CF,EAAaI,IAAI,MAAO,UAExBJ,EAAaI,IAAI,MAAM,GAADjzC,OAAK,EAAI+yC,EAAS,OACxCF,EAAaI,IAAI,SAAU,SAE/B,CAIEC,CAAoBN,GACJ34B,IAAE24B,EAAIj0B,eACCvb,KAAK,qCACrB6vC,IAAI,CAAE1K,QAAS,SACxB,CAEA,SAASmH,EAAUkD,GACD34B,IAAE24B,EAAIj0B,eACCvb,KAAK,qCACrB6vC,IAAI,CAAE1K,QAAS,QACxB,CAIA,SAAS4K,IACP,IAAMC,EAAmBZ,EAAcv5B,KAAKpB,MAE5C,MAAM,CAAE65B,EAAWz4B,KAAKpB,OAAK7X,QAAA+W,EAAAA,EAAAA,GAAK1Y,IAAAA,IAChCwZ,KAAKswB,WAAWhkC,SAChB,SAAAnB,GAAM,OAAIowC,EAAiBpwC,EAAO,KAEtC,CAGA,SAASqwC,IACPx7B,KAAK64B,SAAS4C,SAAQ,EACxB,CAGA,SAASC,IACP,IAAMC,EAAiB37B,KAAK64B,SAASnjC,IAAI,mBAAqB,CAAC,EAC/D26B,EAIIrwB,KAAKswB,WAHP/jC,EAAO8jC,EAAP9jC,QACAC,EAAS6jC,EAAT7jC,UACA6kB,EAAcgf,EAAdhf,eAEIuqB,EAAoBD,EAAe3uC,KAAO2uC,EAAiB,CAC/D3uC,KAAMT,EACN8kB,eAAAA,GAGFrR,KAAK64B,SAAS32B,MAAM,CAClB5V,QAASgvC,EAAcl6B,KAAKpB,MAC5BvO,MAAO,CACLlF,QAAS,CAAC,CACR5F,IAAKsyC,EAAkB73B,KAAKpB,KAAM47B,EAAkB5uC,MACpDR,UAAAA,KAGJmvC,eAAgBC,IAGlBJ,EAAQp6B,KAAKpB,KACf,CAGA,SAAS67B,KACP,IAAAjF,EAKI52B,KAAKswB,WAJPhkC,EAAOsqC,EAAPtqC,QACAC,EAAOqqC,EAAPrqC,QACAC,EAASoqC,EAATpqC,UACA6kB,EAAculB,EAAdvlB,eAGG7qB,IAAAA,SAAW8F,EAASC,IACvB+V,EAAAA,QAAQC,WAAWvC,KAAM,CACvBzT,QAAS/F,IAAAA,MAAQ8F,KAIrB,IAAMqvC,EAAiB37B,KAAK64B,SAASnjC,IAAI,mBAAqB,CAAC,EACzDkmC,EAAoBp1C,IAAAA,SAAW8F,EAASqvC,EAAe3uC,MAAQ2uC,EAAiB,CACpF3uC,KAAMgT,KAAKswB,WAAW/jC,QACtB8kB,eAAAA,GAGFrR,KAAK64B,SAAS32B,MAAM,CAClB5V,QAASgvC,EAAcl6B,KAAKpB,MAC5BvO,MAAO,CACLlF,QAAS,CAAC,CACR5F,IAAKsyC,EAAkB73B,KAAKpB,KAAM47B,EAAkB5uC,MACpDR,UAAAA,KAGJmvC,eAAgBC,IAElBJ,EAAQp6B,KAAKpB,MACbA,KAAKM,QAAQ,mBACf,CAGA,SAASw7B,GAA2BC,GAClC,IACMC,GADYx1C,IAAAA,OAASu1C,EAAQtqC,MAAO,YAAcjL,IAAAA,OAASwZ,KAAK64B,SAASnjC,IAAI,SAAU,YAC9D,GAAGlJ,UAC5ByvC,EAAkBF,EAAQJ,eAAe3uC,KACzCkvC,EAAoBH,EAAQJ,eAAetqB,eACjD8qB,EAA+Cn8B,KAAKswB,WAA5C/jC,EAAO4vC,EAAP5vC,QAASC,EAAS2vC,EAAT3vC,UAAW6kB,EAAc8qB,EAAd9qB,eAExB9kB,IAAY0vC,GACdzvC,IAAcwvC,GACd3qB,IAAmB6qB,IACnBl8B,KAAK2uB,SAAS,CACZpiC,QAAS0vC,EACTzvC,UAAWwvC,EACX3qB,eAAgB6qB,EAChBljB,iBAAiB,IAEnBhZ,KAAK2G,gBAAgBI,WACnB,CAAC/G,KAAK4G,UAAUI,YAAYC,OAC5BjH,KAAK4G,UAAUM,SAASC,KACxB,YAAY,GAADhf,OACR6X,KAAKpY,gBAAe,WAAAO,OAAU6X,KAAKqF,SAAQ,iCAEhDrF,KAAKM,QAAQ,oBAEjB,CAAC,IC/XGrW,GDiYEmyC,GAAkB,WAiBrB,OAAA76B,EAAAA,EAAAA,IAhBD,SAAA66B,EAAA3zC,GAQI,IAPFsI,EAAStI,EAATsI,UACAsrC,EAAc5zC,EAAd4zC,eACAvhC,EAAQrS,EAARqS,SACAjC,EAAMpQ,EAANoQ,OACA+B,EAAcnS,EAAdmS,eACA/R,EAAWJ,EAAXI,YACAggB,EAAYpgB,EAAZogB,cAAYlI,EAAAA,EAAAA,GAAA,KAAAy7B,GAEZp8B,KAAKjP,UAAYA,EACjBiP,KAAKq8B,eAAiBA,EACtBr8B,KAAKlF,SAAWA,EAChBkF,KAAKnH,OAASA,EACdmH,KAAKpF,eAAiBA,EACtBoF,KAAKnX,YAAcA,EACnBmX,KAAK6I,aAAeA,CACtB,GAAC,EAAAliB,IAAA,UAAA2D,MAED,SAAO3B,GAAe,IAAZ2mB,EAAO3mB,EAAP2mB,QACRgtB,EAA+Ct8B,KAAKq8B,iBAA5CnyC,EAASoyC,EAATpyC,UAAW8uB,EAAesjB,EAAftjB,gBAAiBzoB,EAAM+rC,EAAN/rC,OACpC,OAAOkiB,EAAAA,EAAAA,yBAAwB,CAC7B1hB,UAAWiP,KAAKjP,UAChB7G,UAAAA,EACAof,oBAAqBpf,EAAUG,SAC/BilB,QAAAA,EACAzW,OAAQmH,KAAKnH,OACbiC,SAAUkF,KAAKlF,SACfF,eAAgBoF,KAAKpF,eACrBoe,gBAAAA,EACAzoB,OAAAA,EACA1H,YAAamX,KAAKnX,YAClBggB,aAAc7I,KAAK6I,cAEvB,IAAC,CAlCqB,GAqClB0zB,GAAc,WAejB,OAAAh7B,EAAAA,EAAAA,IAdD,SAAAg7B,EAAA/yC,GAOI,IANFuH,EAASvH,EAATuH,UACAsrC,EAAc7yC,EAAd6yC,eACAvhC,EAAQtR,EAARsR,SACAjC,EAAMrP,EAANqP,OACAhQ,EAAWW,EAAXX,YACAE,EAAMS,EAANT,QAAM4X,EAAAA,EAAAA,GAAA,KAAA47B,GAENv8B,KAAKjP,UAAYA,EACjBiP,KAAKq8B,eAAiBA,EACtBr8B,KAAKlF,SAAWA,EAChBkF,KAAKnH,OAASA,EACdmH,KAAKnX,YAAcA,EACnBmX,KAAKjX,OAASA,CAChB,GAAC,EAAApC,IAAA,UAAA2D,MAED,WACE,IAAAkyC,EAOIx8B,KAAKq8B,iBANPnyC,EAASsyC,EAATtyC,UACAqC,EAAOiwC,EAAPjwC,QACAC,EAASgwC,EAAThwC,UACAC,EAAgB+vC,EAAhB/vC,iBACA8D,EAAMisC,EAANjsC,OACAjE,EAAOkwC,EAAPlwC,QAEF,OAAOyO,EAAAA,EAAAA,eAAc,CACnBhK,UAAWiP,KAAKjP,UAChB7G,UAAAA,EACAT,QAAS,CACP8C,QAAAA,EACAC,UAAAA,EACAC,iBAAAA,EACAH,QAAAA,GAEFiE,OAAAA,EACAsI,OAAQmH,KAAKnH,OACbiC,SAAUkF,KAAKlF,SACfjS,YAAamX,KAAKnX,YAClB8pB,YAAa3S,KAAKjX,QAEtB,IAAC,CAzCiB,GA4Cd0zC,GAAe,kBAAAl7B,EAAAA,EAAAA,IAAA,SAAAk7B,KAAA97B,EAAAA,EAAAA,GAAA,KAAA87B,EAAA,KAAA91C,IAAA,UAAA2D,MACnB,WACE,IAAM8Z,EAAO,GAEb,OADAA,EAAKs4B,WAAa,EACX/kC,IAAAA,QAAgByM,EACzB,IAAC,CALkB,GAQAu4B,GAAe,SAAAl8B,GAClC,SAAAk8B,EAAYlzC,GAAS,OAAAkX,EAAAA,EAAAA,GAAA,KAAAg8B,IAAA97B,EAAAA,EAAAA,GAAA,KAAA87B,EAAA,CACbn2C,IAAAA,OAAS,CAAC,EAAGiD,EAAS,CAAEqX,cAAc,KAC9C,CAAC,OAAAQ,EAAAA,EAAAA,GAAAq7B,EAAAl8B,IAAAc,EAAAA,EAAAA,GAAAo7B,EAAA,EAAAh2C,IAAA,aAAA2D,MAED,SAAU6oB,GAgBN,IAAD6kB,EAAA,KAfDjnC,EAASoiB,EAATpiB,UACAnJ,EAAeurB,EAAfvrB,gBACAg1C,EAAMzpB,EAANypB,OACAnwC,EAAgB0mB,EAAhB1mB,iBACAH,EAAO6mB,EAAP7mB,QACAC,EAAO4mB,EAAP5mB,QACAC,EAAS2mB,EAAT3mB,UACA6kB,EAAc8B,EAAd9B,eACAnnB,EAASipB,EAATjpB,UACAqG,EAAM4iB,EAAN5iB,OACAqK,EAAcuY,EAAdvY,eAAcy8B,EAAAlkB,EACd6F,gBAAAA,OAAe,IAAAqe,GAAQA,EAAAC,EAAAnkB,EACvBokB,eAAAA,OAAc,IAAAD,GAAQA,EACtBzuB,EAAYsK,EAAZtK,aACAjI,EAAIuS,EAAJvS,KAEAZ,KAAK48B,OAASA,EACd58B,KAAKjP,UAAYA,EACjBiP,KAAKqF,SAAWtU,EAAUsC,KAAKgG,YAAYC,UAC3C0G,KAAKpY,gBAAkBA,EACvBoY,KAAK6I,aAAeA,EACpB7I,KAAKpX,OAASgY,EAAKhY,OACnBoX,KAAK/V,KAAO2W,EAAK3W,KACjB+V,KAAKukB,OAAS3jB,EAAK2jB,OACnBvkB,KAAKyF,YAAc7E,EAAK6E,YACxBzF,KAAK0F,aAAe9E,EAAK8E,aACzB1F,KAAKqG,4BAA8BzF,EAAKyF,4BACxCrG,KAAK2G,gBAAkB/F,EAAK+F,gBAC5B3G,KAAK4G,UAAYhG,EAAKgG,UACtB5G,KAAKm5B,kBAAoBv4B,EAAKu4B,kBAC9Bn5B,KAAKusB,gBAAkB3rB,EAAK2rB,gBAE5BI,EAAe/rB,EAAK2rB,gBAAgBI,aAEpCK,EAAuBpsB,EAAK2rB,gBAAgBS,qBAE5CC,EAAiCrsB,EAAK2rB,gBAAgBU,+BAEtD,IAAMpkC,EAAcmX,KAAKpX,QAAUoX,KAAKpX,OAAO8M,IAAI,eAC7CmnC,EAAcr2C,IAAAA,SAAW,CAC7BgyC,KAAM/rC,EACNH,QAAAA,EACAC,QAAAA,EACAC,UAAAA,EACA6kB,eAAAA,EACAnnB,UAAAA,EACAqG,OAAAA,EACAyoB,gBAAAA,GACCjI,EAAAA,eAAeK,gBAElByrB,EAAYvwC,QAAUuwC,EAAYvwC,UAChCynB,EAAAA,EAAAA,cAAa,CAAElrB,YAAAA,EAAakC,QAAS8xC,EAAYvwC,QAASuc,aAAAA,IAC5Dg0B,EAAYtwC,QAAUswC,EAAYtwC,UAChCmnB,EAAAA,EAAAA,aAAY,CAAE7qB,YAAAA,EAAasC,OAAQ0xC,EAAYtwC,QAASsc,aAAAA,IAE1D,IAAMi0B,GAAenrB,EAAAA,EAAAA,wBAAuB,CAC1CloB,QAASozC,EACTh0C,YAAAA,EACAggB,aAAAA,IAGF7I,KAAK2uB,SAASmO,GACTt2C,IAAAA,QAAUq2C,EAAaC,IAC1Bt2C,IAAAA,OAAQ,kBAAMwxC,EAAK13B,QAAQ,mBAAmB,IAGhD,IAAMy8B,EAAcC,IAAAA,QAAc,CAAEC,OAAO,IAE3CF,EACGG,IAAIC,EAAAA,YACJD,IAAIE,EAAAA,mBACJF,IAAIG,EAAAA,GAEP,IACExE,EACEkE,EACDhjC,OAAO,CACN/M,KAAK,cAAD7E,OAAgB6X,KAAKqF,UACzBi4B,aAAc,CAAC,SACfC,gBAAiB,CAAE,aAAcv9B,KAAK/V,KAAKO,UAAUuuC,EAAa/4B,KAAKqF,YACvEnI,WAAY,CACV7J,KAAM,SAENwvB,OAAQ0U,EAAiB,IAAIkF,GAAwC,YAAlBz8B,KAAKqF,UACnC,aAAlBrF,KAAKqF,SACN,IAAI+2B,GAAmB,CACrBrrC,UAAAA,EACAsrC,eAAgBr8B,KAAKswB,SAASwH,KAAK93B,MACnClF,SAAU8F,EAAK9F,SACfjC,OAAQ+H,EAAK/H,OACb+B,eAAAA,EACA/R,YAAAA,EACAggB,aAAc7I,KAAK6I,eAChB,IAAI0zB,GAAe,CACtBxrC,UAAAA,EACAsrC,eAAgBr8B,KAAKswB,SAASwH,KAAK93B,MACnClF,SAAU8F,EAAK9F,SACfjC,OAAQ+H,EAAK/H,OACbhQ,YAAAA,EACAE,OAAQiX,KAAKvW,QAAQV,UAG3BuD,QAASgvC,EAAcl6B,KAAKpB,MAC5Bw9B,QAAS,CACPC,KAAM,CAAExzC,KAAM+V,KAAK/V,MACnByzC,eAAgB,CACdC,UAAW/8B,EAAKhY,OAChBg1C,OAAQh9B,EAAK+F,iBAEfk3B,YAAa,CACXC,SAAU99B,KAAK48B,OAAOh7B,GACtBb,UAAW,WACXgc,SAAUghB,IACVC,gBAAiB,CACf/zC,KAAM+V,KAAK/V,QAIjBg0C,OAAQ,CACN,sCAAuC,SAACtmB,GACtCA,EAAEumB,kBACFvmB,EAAEwmB,iBAGFnG,EAAK51B,EAAE,WAAWC,QAClB,IAAM+7B,EAAgBpG,EAAK51B,EAAEuV,EAAE7Q,eAAegpB,QAAQ,kBAChDuO,EAAgBD,EAAc,GAAGE,QAAQnzC,OACzCozC,EAA6BvG,EAAKnN,UAAYuT,EAActO,QAAQ,qBAAqB,GAAG/tB,SAASi2B,EAAKnN,SAASjpB,IAIzH,GAFAg5B,EAAex5B,KAAK42B,IAEfuG,EAA4B,CAC/B,IAAMC,EAAiBxG,EAAKa,SAASnjC,IAAI,WAEzC,yCAAoFgC,MAAK,SAAAic,GAAuB,IAApB2X,EAAY3X,EAAZ2X,aAC1F,8CAAkE5zB,MAAK,SAAAsc,GAAwC,IAA5ByqB,EAAoBzqB,EAA7B0qB,QACxE,8CAA6DhnC,MAAK,SAAA2c,GAAwC,IAA5BsqB,EAAoBtqB,EAA7BqqB,QACnE1G,EAAKnN,SAAW,IAAIS,EAAa,CAC/B+H,eAAgB,WAAF,OAAQ,IAAI,EAC1BtW,SAAU0hB,EACVE,qBAAAA,EACApS,gBAAiByL,EAAKzL,gBACtBhI,OAAQyT,EAAKzT,OACbt6B,KAAM+tC,EAAK/tC,KACX4e,aAAcmvB,EAAKnvB,aACnBjI,KAAAA,IACC+tB,SAAS,CACV3G,QAASqW,EACTtzC,QAASvE,IAAAA,YACPuE,EAAAA,EAAAA,YAAQlC,EAAamvC,EAAKnvB,cAC1BriB,IAAAA,IAAMg4C,GAAgB,SAAAI,GAAG,OAAIA,EAAI5xC,IAAI,OAIzCgrC,EAAKnN,SAAS5pB,GAAG,QAAQ,SAAAyT,GAAiB,IAAdvpB,EAAMupB,EAANvpB,OACpB0zC,EAAer4C,IAAAA,MAAQwxC,EAAK1H,WAAWhkC,SACvCsD,EAAQpJ,IAAAA,UAAYq4C,GAAc,SAAAD,GAAG,OAAIA,IAAQP,CAAa,IAEpErG,EAAKrxB,gBAAgBI,WACnB,CAACixB,EAAKpxB,UAAUI,YAAYC,OAC5B+wB,EAAKpxB,UAAUM,SAASC,KACxB,YAAY,GAADhf,OACR6vC,EAAKpwC,gBAAe,WAAAO,OAAU6vC,EAAK3yB,SAAQ,6BAEhDw5B,EAAajvC,GAASzE,EACtBmX,EAAAA,QAAQC,WAAWy1B,EAAM,CACvB1rC,QAASuyC,GAEb,IAEAT,EAActO,QAAQ,qBAAqBgP,OAAO9G,EAAKnN,SAASjpB,IAChEw8B,EAAc7yC,KAAK,UAAUgY,KAAK,iBAAiB,GAEnDy0B,EAAK8C,gBAAkB,SAACp0B,GAClBsxB,EAAKnN,WAAamN,EAAKnN,SAASjpB,GAAGG,SAAS2E,EAAMwe,SACpD0V,EAAex5B,KAAK42B,EAExB,EACA51B,IAAE5S,UAAUyR,GAAG,QAAS+2B,EAAK8C,gBAC/B,GACF,GACF,GACF,CACF,GAEFiE,UAAW,CACTC,aAAa,EACbC,OAAQ,CACN5rC,KAAM,QACN+P,WAAY,CAAE,aAAcpD,KAAK/V,KAAKO,UAAU,6BAA8B,CAAE00C,UAAWl/B,KAAK/V,KAAKO,UAAUuuC,EAAa/4B,KAAKqF,kBAnHvIwzB,SAwHF74B,KAAK64B,SAAWA,EAChBgD,GAAiBz6B,KAAKpB,MAEtBA,KAAK23B,SAAS33B,KAAK4c,OAAO1Z,EAAAA,EAAAA,cAAa,YAAa,WAAW,WAC7D80B,EAAKrJ,SAAS,CAAE3V,iBAAiB,IACjCwiB,EAAQp6B,KAAK42B,EACf,IAEAh4B,KAAK23B,SAAS33B,KAAK4c,OAAO1Z,EAAAA,EAAAA,cAAa,SAAS,WAC9C80B,EAAKrJ,SAAS,CAAE3V,iBAAiB,IACjC0iB,EAAet6B,KAAK42B,EACtB,IAEAh4B,KAAK23B,SAAS33B,KAAK4c,OAAO1Z,EAAAA,EAAAA,cAAa,YAAY,WACjD80B,EAAKrJ,SAAS,CAAE3V,iBAAiB,IACjC6iB,GAAiBz6B,KAAK42B,EACxB,IAEAh4B,KAAK64B,SAAS53B,GAAG,cAAc,SAAC86B,GAC1Bv1C,IAAAA,IAAMu1C,EAAS,mBACjBD,GAA2B16B,KAAK42B,EAAM+D,EAE1C,IAEA/7B,KAAK64B,SAAS53B,GAAG,aAAa,WAC5B+2B,EAAKmH,qBACP,IAEAn/B,KAAK64B,SAAS53B,GAAG,aAAa,WAC5B+2B,EAAK51B,EAAE,aAAa84B,UAAU,GAC9BlD,EAAKmH,sBACL,IAAMC,EAAepH,EAAK51B,EAAE,4BACtBi9B,EAAWrH,EAAK51B,EAAE,yCACpBi9B,EAAStzC,OAAS,EACpBszC,EAAS5K,QACA2K,EAAarzC,OAAS,GAC/BqzC,EAAa1pC,IAAI,GAAG++B,OAExB,IAEAz0B,KAAK64B,SAASyG,KAAK,aAAa,WAC9BtH,EAAK4E,OAAO3E,qBACZD,EAAKhB,aAAc,EACnBgB,EAAKa,SAASyG,KAAK,aAAa,WAC9BtH,EAAK4E,OAAO9d,kBACd,GACF,IAEA9e,KAAK64B,SAASyG,KAAK,cAAc,WAC/BtH,EAAK4E,OAAOj7B,eACd,IAEA3B,KAAK64B,SAAS53B,GAAG,cAAc,WACxB+2B,EAAKn2B,SAAYm2B,EAAK4E,OAAO/6B,UAChCm2B,EAAKn2B,SAAUG,EAAAA,EAAAA,aAAYg2B,EAAKnI,IAAI+M,SAAU5E,EAAK/tC,KAAKO,UAAU,YAEtE,IAEAwV,KAAK64B,SAAS53B,GAAG,aAAa,WACxB+2B,EAAKn2B,UACPm2B,EAAKn2B,UACLm2B,EAAKn2B,QAAU,MAEjBm2B,EAAK4E,OAAO18B,aACd,GACF,GAAC,CAAAvZ,IAAA,YAAA+O,IAED,WACE,MAAO,cACT,GAAC,CAAA/O,IAAA,SAAA+O,IAED,WAAc,IAADwiC,EAAA,KACX,MAAO,CACL,2BAA4B,SAAAxxB,GAAK,OAAID,EAAAA,EAAAA,kBAAiB,CACpDC,MAAAA,EACAjB,YAAayyB,EAAKzyB,YAClBC,aAAcwyB,EAAKxyB,aACnBW,4BAA6B6xB,EAAK7xB,4BAClCQ,SAAU,YACVF,gBAAiBuxB,EAAKvxB,gBACtBC,UAAWsxB,EAAKtxB,WAChB,EACF,wCAAyCgxB,EACzC,wCAAyCC,EACzC,mCAAoCD,EACpC,kCAAmCC,EACnC,mCAAoC,SAACnxB,GAC/BA,EAAM64B,UAAYA,EAAAA,QAAQC,QAC5B3H,EAAUz2B,KAAK82B,EAAMxxB,EAEzB,EAEJ,GAAC,CAAA/f,IAAA,sBAAA2D,MAED,WACE,GAAK0V,KAAKg3B,YAAV,CAKA,IAAMyI,EAAWz/B,KAAK64B,SAASz2B,EAAE,aAC3Bs9B,EAAgBD,EAAS3U,QAEzB6U,EADQv9B,IAAE,QAASq9B,GACA3U,QAEzB,GAAI4U,GAAiBC,GAAeD,EAAgBC,EAAa,CAE/D,IAAMC,EAAiBF,EAAgBC,EACjCE,EAAkBJ,EAAS3N,SAEU,IAAvC9xB,KAAKoC,EAAE,qBAAqBrW,QAE9B0zC,EAASX,OAAOgB,OAGlB19B,IAAE,oBAAqBpC,KAAK6vB,IAAIC,QAAQ,eAAesL,IAAI,CACzDtQ,MAAO8U,EACP9N,OAAQ+N,IAIV,IAAMxwB,EAAShZ,KAAKmS,IAAIo3B,EAAgB,IAExCH,EAASrE,IAAI,CAAE2E,aAAc1wB,GAC/B,MAAWrP,KAAKoC,EAAE,qBAAqBrW,OAAS,IAE9CiU,KAAKoC,EAAE,qBAAqBy4B,SAC5B4E,EAASrE,IAAI,CAAE2E,YAAa,IA9B9B,CAgCF,GAAC,CAAAp5C,IAAA,WAAA+O,IAED,WACE,OAAOqnB,GACT,GAAC,CAAAp2B,IAAA,cAAA2D,MAED,WAIE,OAHAwY,EAAAA,EAAAA,GAAA65B,EAAA,qBAAA75B,CAAA,IACA9C,KAAK64B,SAASnC,SACd12B,KAAK6vB,IAAImQ,QAAQhgC,KAAK64B,SAASj3B,IACxB5B,IACT,GAAC,CAAArZ,IAAA,SAAA2D,MAED,WACEswC,EAAex5B,KAAKpB,MACpBA,KAAK64B,SAASgC,SAEV76B,KAAK6B,SACP7B,KAAK6B,WAEPiB,EAAAA,EAAAA,GAAA65B,EAAA,gBAAA75B,CAAA,GACF,IAAC,CA9ViC,CAASC,EAAAA,mB,wBChc7C,SAASxE,KACP,IAAA0hC,EAKIjgC,KAAKm0B,MAAM7D,WAIf,MAAO,CACLhkC,QATO2zC,EAAP3zC,QAUAC,QATO0zC,EAAP1zC,QAUAC,UATSyzC,EAATzzC,UAUA6kB,eATc4uB,EAAd5uB,eAUA5kB,iBAP2BuT,KAAKswB,WAA1B7jC,iBASV,CAGA,SAASyzC,GAAQr5C,GAGb,IAFFs5C,EAAgBt5C,EAAhBs5C,iBACAC,EAAiBv5C,EAAjBu5C,kBAEA,GAA6B,YAAzBpgC,KAAKpY,gBACPoY,KAAKY,KAAK8E,aAAamC,gBAAgBs4B,QAClC,GAA6B,aAAzBngC,KAAKpY,gBACdoY,KAAKY,KAAK8E,aAAamC,gBAAgB,uBAAwB,CAAEw4B,YAAargC,KAAK6I,mBAC9E,CACL,IAAMpU,EAAauL,KAAKY,KAAKpF,MAAM9F,IAAI,eAGvCsK,KAAKY,KAAK8E,aAAamC,gBAAgBu4B,EAAmB,CAAEt6B,YAAarR,GAC3E,CACF,CAGA,SAAS6rC,KACP,IAAIH,EACAC,EAKJ,OAAQpgC,KAAKqF,UACX,IAAK,aACH86B,EAAmB,sBACnBC,EAAoB,+BACpB,MACF,IAAK,UACHD,EAAmB,UACnBC,EAAoB,mBACpB,MACF,IAAK,WACHD,EAAmB,WACnB,MACF,IAAK,UACHA,EAAmB,UACnBC,EAAoB,mBAKxB,IAAA7L,EAEIv0B,KAAKY,KADP+F,EAAe4tB,EAAf5tB,gBAAiBC,EAAS2tB,EAAT3tB,UAGnBD,EAAgBI,WACd,CAACH,EAAUI,YAAYC,OACvBL,EAAUM,SAASC,KACnB,YAAY,GAADhf,OACR6X,KAAKpY,gBAAe,WAAAO,OAAU6X,KAAKqF,SAAQ,2BAEhD66B,GAAS9+B,KAAKpB,KAAM,CAClBmgC,iBAAAA,EACAC,kBAAAA,GAEJ,CAEA,SAASG,GAAoBrb,GAC3B,IAAMsb,EAAQp+B,IAAE8iB,GAAQ4K,QAAQ,oBAAoBvkC,KAAK,2BASzD,MAAO,CACLkJ,WATiB+rC,EAAMp8B,KAAK,cAU5B7I,UATgBilC,EAAMp8B,KAAK,aAU3BgC,KATWo6B,EAAMp8B,KAAK,QAAQL,WAU9Bnc,gBATsB44C,EAAMp8B,KAAK,mBAUjC1L,aATmB8nC,EAAMp8B,KAAK,gBAU9Bq8B,YATkBD,EAAMp8B,KAAK,cAU7Bs8B,UATgBF,EAAMp8B,KAAK,aAW/B,CAGA,SAASu8B,KACP,IAAQz2C,EAAc8V,KAAKswB,WAAnBpmC,UAER,GAAIA,GAAaA,EAAUG,UAA8B,eAAlB2V,KAAKqF,SAA2B,CACrE,IAAQ5Y,EAAqBuT,KAAKswB,WAA1B7jC,iBACF2jC,EAlIV,WAGE,IAAMA,EAAQ,GAiBd,OAfAA,EAAMhnB,KAAK,CACT6lB,YAAahlC,GAAKO,UAAU,4CAC5B8jC,OAAQ,uBAGV8B,EAAMhnB,KAAK,CACT6lB,YAAahlC,GAAKO,UAAU,6CAC5B8jC,OAAQ,6BAGV8B,EAAMhnB,KAAK,CACT6lB,YAAahlC,GAAKO,UAAU,uDAC5B8jC,OAAQ,uCAGH8B,CACT,CA6GkBzC,GAEdnnC,IAAAA,KAAO4pC,GAAO,SAACjP,GACTA,EAAKmN,SAAW7hC,EAClB00B,EAAKoN,QAAS,EAEdpN,EAAKoN,QAAS,CAElB,IAEAvuB,KAAK2uB,SAAS,CACZkC,UAAWT,GAEf,MACEpwB,KAAK2uB,SAAS,CACZkC,UAAW,OAEb7wB,KAAK4gC,aAAa7vB,EAAAA,eAAeK,eAAe3kB,iBAEpD,CAEO,IAAMo0C,GAAQ,SAAA3Q,GAAA,SAAA2Q,IAAA,OAAAlgC,EAAAA,EAAAA,GAAA,KAAAkgC,IAAAhgC,EAAAA,EAAAA,GAAA,KAAAggC,EAAA5sC,UAAA,QAAAqN,EAAAA,EAAAA,GAAAu/B,EAAA3Q,IAAA3uB,EAAAA,EAAAA,GAAAs/B,EAAA,EAAAl6C,IAAA,YAAA+O,IACnB,WACE,MAAO,WACT,GAAC,CAAA/O,IAAA,WAAA+O,IAED,WAAgB,IAADgL,EAAA,KACb,OAAO,kBAAMqc,KAAS,CACpB9yB,KAAAA,GACA62C,WAAYpgC,EAAKogC,WACjBz7B,SAAU3E,EAAK2E,SACf07B,gBAA0C,aAAzBrgC,EAAK9Y,iBACrB,CACL,GAAC,CAAAjB,IAAA,YAAA+O,IAED,WACE,OAAOsK,KAAKswB,WAAWO,SACzB,GAAC,CAAAlqC,IAAA,eAAA2D,MAED,SAAakuC,GAAO,IAADrJ,EAAA,KAKjB,GAJA7sB,EAAAA,QAAQC,WAAWvC,KAAKm0B,MAAO3tC,IAAAA,SAAW,CACxCgyC,KAAAA,GACCx4B,KAAKswB,aAEJtwB,KAAK6wB,UAAW,CAGlB,GAAI2H,IAFyBx4B,KAAKswB,WAA1B7jC,iBAGN,OAGFuT,KAAK2uB,SAAS,CACZliC,iBAAkB+rC,IAGpBx4B,KAAKM,QAAQ,sBAAuB/B,GAAkB6C,KAAKpB,OAE3D,IAAA62B,EAEI72B,KAAKY,KADP+F,EAAekwB,EAAflwB,gBAAiBC,EAASiwB,EAATjwB,UAGnBD,EAAgBI,WACd,CAACH,EAAUI,YAAYC,OACvBL,EAAUM,SAASC,KACnB,YAAY,GAADhf,OACR6X,KAAKpY,gBAAe,WAAAO,OAAU6X,KAAKqF,SAAQ,+BAEhD7e,IAAAA,OAAQ,WAEN2oC,EAAKU,IAAIC,QAAQ,gBAAgBvkC,KAAK,6BAA6B8W,OACrE,GACF,CACF,GAAC,CAAA1b,IAAA,aAAA2D,MAED,SAAUpD,GAeN,IAADkwC,EAAA,KAdDrmC,EAAS7J,EAAT6J,UACAnJ,EAAeV,EAAfU,gBACA0E,EAAOpF,EAAPoF,QACAC,EAAOrF,EAAPqF,QACAC,EAAStF,EAATsF,UACA6kB,EAAcnqB,EAAdmqB,eACA5kB,EAAgBvF,EAAhBuF,iBACAvC,EAAShD,EAATgD,UACAqG,EAAMrJ,EAANqJ,OACAggC,EAAarpC,EAAbqpC,cAAaN,EAAA/oC,EACb8xB,gBAAAA,OAAe,IAAAiX,GAAQA,EAAA+Q,EAAA95C,EACvBqwC,eAAAA,OAAc,IAAAyJ,GAAQA,EACtBpgC,EAAI1Z,EAAJ0Z,KAAIqxB,EAAA/qC,EACJ2hB,aAAAA,OAAY,IAAAopB,EAAGjnC,EAAAA,aAAaC,OAAMgnC,EAElCjyB,KAAKqF,SAAWtU,EAAUsC,KAAKgG,YAAYC,UAC3C0G,KAAKpY,gBAAkBA,EACvBoY,KAAK6I,aAAeA,EACpB7I,KAAKY,KAAOA,EACZ3W,GAAO+V,KAAKY,KAAK3W,KAEjB,IAAMmuC,EAA0Bp4B,KAAKo4B,0BACrC,OAAQp4B,KAAKqF,UACX,IAAK,aACHrF,KAAK8gC,WAAc1I,EAAgF,KAAtDnuC,GAAKO,UAAU,qCAC5D,MACF,IAAK,UACHwV,KAAK8gC,WAAc1I,EAA6E,KAAnDnuC,GAAKO,UAAU,kCAC5D,MACF,IAAK,WACHwV,KAAK8gC,WAAa72C,GAAKO,UAAU,mCACjC,MACF,IAAK,UACHwV,KAAK8gC,WAAa72C,GAAKO,UAAU,kCACjC,MACF,IAAK,UACHwV,KAAK8gC,WAAa72C,GAAKO,UAAU,kCACjC,MACF,QACEwV,KAAK8gC,gBAAa33C,EAGtB,IAAI83C,EAAmBx0C,EAElBvC,EAAUG,UAA8B,eAAlB2V,KAAKqF,WAC9B47B,EAAmBlwB,EAAAA,eAAeK,eAAe3kB,kBAGnDuT,KAAK2uB,SAASnoC,IAAAA,SAAW,CACvBiG,iBAAkBw0C,EAClB/2C,UAAAA,GACC,CACDuC,iBAAkBskB,EAAAA,eAAeK,eAAe3kB,oBAGlDuT,KAAKm0B,MAAQ,IAAI+M,GAAQ16C,IAAAA,OAAS,CAChCuK,UAAAA,EACAnJ,gBAAAA,EACAg1C,OAAQ58B,KACR1T,QAAAA,EACAC,QAAAA,EACAC,UAAAA,EACA6kB,eAAAA,EACAnnB,UAAAA,EACAqG,OAAAA,EACAyoB,gBAAAA,EACAue,eAAAA,EACA1uB,aAAAA,EACAjO,eAAgB21B,EAAc31B,eAC9BgG,KAAMZ,KAAKY,KACX7X,OAAQiX,KAAKvW,QAAQV,QACpBvC,IAAAA,KAAOwZ,KAAKswB,WAAY,sBAE3BtwB,KAAKmhC,SAAS,UAAWnhC,KAAKm0B,OAE9BwM,GAAev/B,KAAKpB,MACpBsC,EAAAA,QAAQC,WAAWvC,KAAKm0B,MAAOn0B,KAAKswB,YAEpCtwB,KAAK23B,SAAS33B,KAAK4c,OAAO1Z,EAAAA,EAAAA,cAAa,YAAa,WAAW,WAC7DZ,EAAAA,QAAQC,WAAW60B,EAAKjD,MAAOiD,EAAK9G,WACtC,IAEAtwB,KAAK23B,SAAS33B,KAAK4c,OAAO1Z,EAAAA,EAAAA,cAAa,SAAS,WAC1Ck0B,EAAKgK,gBAAkBhK,EAAKvH,IAAIC,QAAQ,cAAcvkC,KAAK,IAADpD,OAAKivC,EAAKgK,eAAe1iB,YAAa3yB,OAAS,GAC3GqrC,EAAKgK,eAAeC,iBAEtBjK,EAAKjD,MAAMgL,qBACb,IAEAn/B,KAAKiB,GAAG,YAAY,WAClBm2B,EAAKjD,MAAMgL,qBACb,IAEAn/B,KAAK23B,SAAS33B,KAAK4c,OAAO1Z,EAAAA,EAAAA,cAAa,cAAc,WACnDy9B,GAAev/B,KAAKg2B,EACtB,IAEAp3B,KAAK23B,SAAS33B,KAAK4c,OAAO1Z,EAAAA,EAAAA,cAAa,cAAc,WACnDk0B,EAAK92B,QAAQ,mBAAoB,CAC/BhW,MAAO8sC,EAAK9G,WAAWO,UACvBpnC,QAAS,CAAEqnC,SAAS,IAExB,IAEA9wB,KAAKoxB,UAAS,WACZgG,EAAKjD,MAAMgL,qBACb,IAEAn/B,KAAKm0B,MAAMlzB,GAAG,oBAAoB,kBAAMm2B,EAAK92B,QAAQ,sBAAuB/B,GAAkB6C,KAAKg2B,GAAM,GAC3G,GAAC,CAAAzwC,IAAA,aAAA2D,MAED,WACE0V,KAAKm0B,MAAM0E,SAAS4C,SAAQ,EAC9B,GAAC,CAAA90C,IAAA,SAAA+O,IAED,WAAc,IAADsiC,EAAA,KACX,MAAO,CACL,4BAA6B,WAAF,OAAQsI,GAAmBl/B,KAAK42B,EAAK,EAChE,mBAAoBh4B,KAAKshC,aACzB,uBAAwBthC,KAAKuhC,qBAEjC,GAAC,CAAA56C,IAAA,eAAA2D,MAED,SAAaoc,GAAQ,IAADwxB,EAAA,KAElB,yCAAyExgC,MAAK,SAAA/P,GAAyB,IAAtB65C,EAAc75C,EAAd65C,eAC/EtJ,EAAKkJ,eAAiB,IAAII,EAAeh7C,IAAAA,OAAS+5C,GAAoB75B,EAAMI,eAAgB,CAC1F26B,SAAUvJ,EACVqJ,sBAAsB,EACtBG,WAAY,WAAF,OAAQxJ,EAAKwJ,YAAY,EACnC9gC,KAAMs3B,EAAKt3B,QACT81B,SAEJt0B,IAAEsE,EAAMI,eAAegpB,QAAQ,cAAcgP,OAAO5G,EAAKkJ,eAAevR,IAC1E,GACF,GAAC,CAAAlpC,IAAA,uBAAA2D,MAED,SAAqBoc,GAAQ,IAADi7B,EAAA,KAE1B,yCAAyEjqC,MAAK,SAAArP,GAAyB,IAAtBm5C,EAAcn5C,EAAdm5C,eAC/EG,EAAKP,eAAiB,IAAII,EAAeh7C,IAAAA,OAAS+5C,GAAoB75B,EAAMI,eAAgB,CAC1F26B,SAAUE,EACVJ,sBAAsB,EACtBG,WAAY,WAAF,OAAQC,EAAKD,YAAY,EACnC9gC,KAAM+gC,EAAK/gC,QACT81B,SAEJt0B,IAAEsE,EAAMI,eAAegpB,QAAQ,cAAcgP,OAAO6C,EAAKP,eAAevR,IAC1E,GACF,IAAC,CA3MkB,CAASrvB,EAAAA,E,yQCtJtB4yB,EAAoB9wB,EAAAA,QAApB8wB,gBAEFwO,EAA4B,SAAAC,GAAA,SAAAD,IAAA,OAAAjhC,EAAAA,EAAAA,GAAA,KAAAihC,IAAA/gC,EAAAA,EAAAA,GAAA,KAAA+gC,EAAA3tC,UAAA,QAAAqN,EAAAA,EAAAA,GAAAsgC,EAAAC,IAAAtgC,EAAAA,EAAAA,GAAAqgC,EAAA,EAAAj7C,IAAA,cAAA2D,MAChC,SAAWzD,GASP,IARF80B,EAAK90B,EAAL80B,MACAhiB,EAAK9S,EAAL8S,MACAlF,EAAU5N,EAAV4N,WACAqtC,EAAgBj7C,EAAhBi7C,iBACAC,EAAel7C,EAAfk7C,gBACAC,EAAMn7C,EAANm7C,OACA/3C,EAAIpD,EAAJoD,KACAkN,EAAWtQ,EAAXsQ,YAaA,OAXA6I,KAAKiiC,yBAA0BC,EAAAA,EAAAA,IAA8B,CAC3DF,OAAAA,EACA7qC,YAAAA,EACAwC,MAAAA,EACAgiB,MAAAA,EACAlnB,WAAAA,EACAxK,KAAAA,EACA63C,iBAAAA,EACAC,gBAAAA,EACAI,WAAYniC,OAEPA,KAAKiiC,uBACd,IAAC,CAvB+B,CAASG,EAAAA,0BA2B3C,SAASC,IACP,IAAMC,EAAWtiC,KAAKyhC,SAASr/B,EAAE,aAAa+4B,SAE9C,GAAKmH,EAAL,CAIA,IAAMnH,EAASn7B,KAAKuhC,qBAAuB,IAAM,GAC3ChqC,EAAM+qC,EAAS/qC,IAAM4jC,EAAS/4B,IAAExM,QAAQslC,YACxCqH,EAAOD,EAASC,KAAOngC,IAAExM,QAAQ4sC,aAEvCxiC,KAAK6vB,IAAIuL,IAAI,CACX7jC,IAAAA,EACAgrC,KAAAA,GARF,CAUF,CAGA,SAASE,IAGP,IAAMC,EAAY1iC,KAAKoC,EAAE,4HACnBugC,EAAiBvgC,IAAE,kBAEzBsgC,EAAUtH,IAAI,CAAE7jC,IAAK,OAAQgrC,KAAM,SACnC,IAAAK,EAAsBF,EAAUvH,SAAxB5jC,EAAGqrC,EAAHrrC,IAAKgrC,EAAIK,EAAJL,KACbM,EAA6CH,EAAUI,eAAe3H,SAAzD4H,EAASF,EAAdtrC,IAAsByrC,EAAUH,EAAhBN,KACxBU,EAA2DN,EAAexH,SAA7D+H,EAAgBD,EAArB1rC,IAA6B4rC,EAAiBF,EAAvBV,KACzBa,EAAsBT,EAAe7Q,SACrCuR,EAAqBV,EAAe7X,QAGpCwY,EADiD,iBAD5BtjC,KAAKswB,WAAxBiT,gBAC0F,YAAzBvjC,KAAKpY,gBAE5E,CAAEkqC,OAAQ,IAAKhH,MAAO,KAAQ,CAAEgH,OAAQ,IAAKhH,MAAO,KAEhDqQ,EAAS,CAAE5jC,IAAK,OAAQgrC,KAAM,QAE/BhrC,EAAM2rC,EAAoBI,EAAaxR,OAASsR,IACnDjI,EAAO5jC,IAAMlB,KAAKkS,IACf66B,EAAsBF,EAAoBI,EAAaxR,OAASiR,EACjEG,EAAmBH,IAIlBR,EAAOY,EAAqBG,EAAaxY,MAAQuY,IACpDlI,EAAOoH,KAAOlsC,KAAKkS,IAChB86B,EAAqBF,EAAqBG,EAAaxY,MAAQkY,EAChEG,EAAoBH,IAIL,SAAf7H,EAAO5jC,KAAkC,SAAhB4jC,EAAOoH,MAClCG,EAAUtH,IAAID,EAElB,CAGA,SAASqI,IACYxjC,KAAKswB,WAAhBmT,QAGNzjC,KAAK2uB,SAAS,CAAE8U,OAAQ,MAE5B,CAGA,SAASC,IAAqB,IAADhjC,EAAA,KAC3By7B,EAAsDn8B,KAAKswB,WAAnDiT,EAAcpH,EAAdoH,eAAgB9C,EAAWtE,EAAXsE,YAAa/nC,EAAYyjC,EAAZzjC,aAC/B8C,EAAQ,CACZ7B,MAAOqG,KAAKpY,gBACZ+zB,MAAO4nB,EACP9uC,WAAYuL,KAAKvL,WACjBxK,KAAM+V,KAAKY,KAAK3W,KAChB63C,iBAAkB,CAChB90C,KAAM0L,EACNhH,GAAIsO,KAAKvL,YAEXstC,gBAAiB,CACf/0C,KAAMyzC,EACN/nC,aAAAA,GAEFspC,OAAQhiC,KAAKY,KAAK/H,OAClB1B,YAAa6I,KAAKY,KAAKzJ,aAGrB6I,KAAK2jC,SAAS,aAChB3jC,KAAK4jC,YAAY,YAAY/I,SAGbzH,EAChBpzB,KACA,WACA4hC,EACApmC,EACA,CACEqoC,iBAAgB,SAACC,GACf,IAAkDC,EAAf/jC,KAAKswB,WAAhC3U,MAEM,wBAFD,IAAAooB,EAAGR,EAAcQ,KAG5B/jC,KAAKvL,WAAaqvC,EAAYpyC,GAE9BsO,KAAK2uB,SAAS,CACZj2B,aAAcorC,EAAYr8C,OAE5B+7C,EAAWpiC,KAAKpB,MAEpB,EACAgkC,gBAAe,SAACC,GACdjkC,KAAKvL,WAAawvC,EAAWxvC,WAC7BuL,KAAKzE,UAAY0oC,EAAWvyC,GAC5BsO,KAAK2uB,SAAS,CACZ8R,YAAawD,EAAWx8C,KACxBiR,aAAcurC,EAAWvrC,eAE3B8qC,EAAWpiC,KAAKpB,KAClB,IAIMs/B,KAAK,YAAY,WACzB1pC,OAAO+M,iBAAiB,QAASjC,EAAKwjC,oBACtCtuC,OAAO+M,iBAAiB,SAAUjC,EAAKyjC,qBACvCvuC,OAAO+M,iBAAiB,SAAUjC,EAAK+B,qBACvCL,IAAE,kBAAkBw6B,SAASwH,OAAO1jC,EAAKyjC,qBACzC1B,EAAuBrhC,KAAKV,EAC9B,GACF,CAGA,SAAS2jC,EAAa1kB,GAElB,IAAI1G,EADN,GAAI0G,GAAYA,EAAS1G,UAIrBA,EADEjZ,KAAKuhC,qBACEvhC,KAAKY,KAAK0jC,WAAWC,eAAe5kB,EAAS1G,QAE7CjZ,KAAKY,KAAK0jC,WAAWE,iBAAiB7kB,EAAS1G,UAG5CA,EAAO,IAAMA,EAAO,GAAG4G,SAInC,OAHA7f,KAAK2uB,SAAS,CACZ8U,OAAQxqB,EAAO,GAAG4G,WAEb,EAIX,OAAO,CACT,CAEO,IAAM2hB,EAAc,SAAA/gC,GAAA,SAAA+gC,IAAA,OAAA7gC,EAAAA,EAAAA,GAAA,KAAA6gC,IAAA3gC,EAAAA,EAAAA,GAAA,KAAA2gC,EAAAvtC,UAAA,QAAAqN,EAAAA,EAAAA,GAAAkgC,EAAA/gC,IAAAc,EAAAA,EAAAA,GAAAigC,EAAA,EAAA76C,IAAA,YAAA+O,IACzB,WACE,MAAO,uBACT,GAAC,CAAA/O,IAAA,WAAA+O,IAED,WAAgB,IAADy5B,EAAA,KACbsV,EAMIzkC,KAAKswB,WALPmQ,EAAWgE,EAAXhE,YACA/nC,EAAY+rC,EAAZ/rC,aACA6qC,EAAckB,EAAdlB,eACAE,EAAMgB,EAANhB,OACAiB,EAAOD,EAAPC,QAGF,OAAO,kBAAM3nB,IAAS,CACpB9yB,KAAMklC,EAAKvuB,KAAK3W,KAChBmc,KAAM+oB,EAAK/oB,KACXs6B,UAAWvR,EAAKuR,UAChB94C,gBAAiBunC,EAAKvnC,gBACtB25C,qBAAsBpS,EAAKoS,qBAC3Bd,YAAAA,EACA/nC,aAAAA,EACA6qC,eAAAA,EACAoB,oBAAqBxV,EAAKvuB,KAAK+jC,oBAC/BlB,OAAAA,EACAiB,QAAAA,GACC,CACL,GAAC,CAAA/9C,IAAA,aAAA2D,MAED,SAAUpD,GAYN,IAADkwC,EAAA,KAXD3iC,EAAUvN,EAAVuN,WACA8G,EAASrU,EAATqU,UACA6K,EAAIlf,EAAJkf,KACAxe,EAAeV,EAAfU,gBACA8Q,EAAYxR,EAAZwR,aACA+nC,EAAWv5C,EAAXu5C,YACAgB,EAAQv6C,EAARu6C,SACAF,EAAoBr6C,EAApBq6C,qBACAb,EAASx5C,EAATw5C,UACAgB,EAAUx6C,EAAVw6C,WACA9gC,EAAI1Z,EAAJ0Z,KAEAZ,KAAKvL,WAAaA,EAClBuL,KAAKzE,UAAYA,EACjByE,KAAKoG,KAAOA,EACZpG,KAAK0hC,WAAaA,EAClB1hC,KAAKY,KAAOA,EAKVZ,KAAK0gC,UAHHa,GAAsC,UAAdb,EAGT,QACPa,GAAsC,UAAdb,EAKjBA,EAFA,QAKnB1gC,KAAKpY,gBAAkBA,EACvBoY,KAAKyhC,SAAWA,EAChBzhC,KAAKuhC,qBAAuBA,EAC5BE,EAASnhC,QAAQ,oBACjBN,KAAKkkC,mBAAqB,SAAAx9B,GAAK,OAAI0wB,EAAKwN,mBAAmBl+B,EAAO,EAClE1G,KAAKmkC,oBAAsB39C,IAAAA,UAAW,WACpC4wC,EAAKiK,gBACP,GAAG,IAEHrhC,KAAKyC,oBAAsBjc,IAAAA,UAAW,WACpC4wC,EAAKiK,gBACP,GAAG,IACHrhC,KAAK6kC,aAAe7kC,KAAKY,KAAKkkC,aAAa9sC,WAE3CqqC,EAAYjhC,KAAKpB,MACjBA,KAAK2uB,SAAS,CACZ8R,YAAAA,EACA/nC,aAAAA,EACA6qC,eAAgB,eAChBmB,SAAS,IAGXhB,EAAkBtiC,KAAKpB,KACzB,GAAC,CAAArZ,IAAA,YAAA2D,MAED,WACE0V,KAAK0hC,aACL1hC,KAAK66B,QACP,GAAC,CAAAl0C,IAAA,UAAA2D,MAED,SAAQq1B,GACD0kB,EAAajjC,KAAKpB,KAAM2f,IAC3B3f,KAAK66B,QAET,GAAC,CAAAl0C,IAAA,SAAA2D,MAED,WACE0V,KAAK66B,QACP,GAAC,CAAAl0C,IAAA,QAAA2D,MAED,WAAS,IAAD0tC,EAAA,KACN,GAAIh4B,KAAKuhC,qBAAsB,CAC7B,IAYIxwC,EAZIwyC,EAAmBvjC,KAAKswB,WAAxBiT,eACFwB,EAAkB,CACtBC,iBAAkB,CAAC,CACjBz+B,KAAMvG,KAAKoG,KACX6+B,WAA+B,iBAAnB1B,EAAoC,UAAY,WAC5D2B,WAAYllC,KAAKvL,WACjB0wC,UAAWnlC,KAAKzE,UAChBw+B,UAAW/5B,KAAK0gC,aAGd0E,EAAiBplC,KAAKY,KAAKzJ,YAAY5F,eAAeC,UACzD6F,SAAS2I,KAAKvL,YAIf1D,EADqB,iBAAnBwyC,EACU6B,EAAexzC,SAASyF,SAAS2I,KAAKzE,WAEtC6pC,EAGdplC,KAAKY,KAAK/H,OAAOwsC,gBAAgBtrC,OAAOgrC,EAAiB,CACvDh0C,UAAWA,EAAUi0C,iBAAiB,kCACrCxlB,QAAQhwB,SAASsS,gBAAgBC,SAAS/B,KAAK4B,KAChDI,EAAAA,EAAAA,aAAYhC,KAAK4B,IACjBpb,IAAAA,MAAQkR,MAAK,kBAAMsgC,EAAKsN,WAAW,IAAEvqB,OAAM,SAAA4E,GAAQ,OAAIqY,EAAKuN,QAAQ5lB,EAAS,GACjF,KAAO,CACL,IAAQ8gB,EAAgBzgC,KAAKswB,WAArBmQ,YACF+E,EAAc,CAClBnxC,SAAU,CAAE3C,GAAIsO,KAAKvL,YACrBhN,KAAMg5C,EACN/uC,GAAIsO,KAAKzE,UACTxJ,SAAU,CAAC,CACTwU,KAAMvG,KAAKoG,KACX2zB,UAAW/5B,KAAK0gC,UAChB+E,IAAK,CAAC,EACNn4B,QAAS,CAAE5b,GAAIsO,KAAKzE,cAIxByE,KAAKY,KAAK/H,OAAOyU,QACdnmB,OAAOq+C,EAAY9zC,GAAI8zC,EAAa,CAAEE,QAAS,SAC/ClmB,QAAQhwB,SAASsS,gBAAgBC,SAAS/B,KAAK4B,KAC9CI,EAAAA,EAAAA,aAAYhC,KAAK4B,IACjBpb,IAAAA,MAAQkR,MAAK,kBAAMsgC,EAAKsN,WAAW,IAAEvqB,OAAM,SAAA4E,GAAQ,OAAIqY,EAAKuN,QAAQ5lB,EAAS,GACnF,CACF,GAAC,CAAAh5B,IAAA,iBAAA2D,MAED,WACE+3C,EAAYjhC,KAAKpB,MACjByiC,EAAuBrhC,KAAKpB,KAC9B,GAAC,CAAArZ,IAAA,iBAAA2D,MAED,WAAkB,IAAD4tC,EAAA,KAC2C,IAAtDl4B,KAAKoC,EAAE,oCAAoCrW,QAC7CvF,IAAAA,OAAQ,WACN0xC,EAAK91B,EAAE,sDAAsDC,OAC/D,GAEJ,GAAC,CAAA1b,IAAA,oBAAA2D,MAED,SAAkBoc,GAChB,IAAMi/B,EAAW3lC,KAAKoC,EAAE,mDAExB,GAAIujC,EAAS55C,OAAS,EAAG,CACvB,IAAQw3C,EAAmBvjC,KAAKswB,WAAxBiT,eACFj5C,EAAQq7C,EAASj5C,MAEnB62C,IAAmBj5C,IACrB0V,KAAK2uB,SAAS,CACZ4U,eAAgBj5C,IAElBo5C,EAAkBtiC,KAAKpB,MACvBwjC,EAAWpiC,KAAKpB,MAEpB,CACA0G,EAAMw3B,kBACNx3B,EAAMy3B,gBACR,GAAC,CAAAx3C,IAAA,oBAAA2D,MAED,WACE0V,KAAKoG,KAAOpG,KAAKoC,EAAE,6BAA6B1V,MAChD82C,EAAWpiC,KAAKpB,MAChBA,KAAK2uB,SAAS,CACZ+V,SAAU1kC,KAAKoG,MAEnB,GAAC,CAAAzf,IAAA,kBAAA2D,MAED,WACE0V,KAAK0gC,UAAY1gC,KAAKoC,EAAE,4BAA4B1V,MACpD82C,EAAWpiC,KAAKpB,KAClB,GAAC,CAAArZ,IAAA,SAAA+O,IAED,WAAc,IAADisC,EAAA,KACX,MAAO,CACL,sBAAuB3hC,KAAK4lC,OAC5B,qBAAsB5lC,KAAK6lC,MAC3B,+BAAgC7lC,KAAK8lC,eACrC,gDAAiD9lC,KAAK+lC,kBACtD,kCAAmC/lC,KAAKgmC,kBACxC,kCAAmChmC,KAAKimC,gBACxC,oFAAqF,WAAF,OAAQz/C,IAAAA,MAAQi8C,EAAuB3K,KAAK6J,GAAM,EAEzI,GAAC,CAAAh7C,IAAA,SAAA2D,MAED,WACE0V,KAAKyhC,SAASnhC,QAAQ,oBACtB1K,OAAOgN,oBAAoB,QAAS5C,KAAKkkC,oBACzCtuC,OAAOgN,oBAAoB,SAAU5C,KAAKmkC,qBAC1CvuC,OAAOgN,oBAAoB,SAAU5C,KAAKyC,sBAC1CK,EAAAA,EAAAA,GAAA0+B,EAAA,gBAAA1+B,CAAA,GACF,GAAC,CAAAnc,IAAA,qBAAA2D,MAED,SAAmBoc,GACZ1G,KAAK4B,GAAGG,SAAS2E,EAAMwe,SAC1BllB,KAAK66B,QAET,IAAC,CA1NwB,CAAS93B,EAAAA,kB,wXCtLvBmjC,EAAgB,SAAHr/C,GAAA,IAAMo+B,EAAOp+B,EAAPo+B,QAAO,OACrCvI,EAAAA,EAAAA,KAACypB,EAAAA,YAAW,CACVlhB,QAASA,EAAQnI,UAEjBJ,EAAAA,EAAAA,KAAC0pB,EAAAA,UAAS,CAACC,MAAM,UAAU3nB,UAAU,iBACzB,EAGH4nB,EAAyB,SAAAC,GAAA,SAAAD,IAAA,OAAA3lC,EAAAA,EAAAA,GAAA,KAAA2lC,IAAAzlC,EAAAA,EAAAA,GAAA,KAAAylC,EAAAryC,UAAA,QAAAqN,EAAAA,EAAAA,GAAAglC,EAAAC,IAAAhlC,EAAAA,EAAAA,GAAA+kC,EAAA,EAAA3/C,IAAA,aAAA2D,MACpC,SAAUpD,GAAe,IAAZ+9B,EAAO/9B,EAAP+9B,QACXjlB,KAAKilB,QAAUA,CACjB,GAAC,CAAAt+B,IAAA,SAAA2D,MAED,WAKE,OAJAonC,EAAAA,QACGhV,EAAAA,EAAAA,KAACwpB,EAAa,CAACjhB,QAASjlB,KAAKilB,UAC9BjlB,KAAK4B,IAEA5B,IACT,GAAC,CAAArZ,IAAA,SAAA2D,MAED,WAEE,OADAonC,EAAAA,uBAAgC1xB,KAAK4B,KACrCkB,EAAAA,EAAAA,GAAAwjC,EAAA,gBAAAxjC,CAAA,GACF,IAAC,CAhBmC,CAAS0jC,IAAAA,MCPxC,IAAMlb,EAAY,SAAA7qB,GACvB,SAAA6qB,EAAY7hC,GAAS,OAAAkX,EAAAA,EAAAA,GAAA,KAAA2qB,IAAAzqB,EAAAA,EAAAA,GAAA,KAAAyqB,EAAA,CACb9kC,IAAAA,OAAS,CAAC,EAAGiD,EAAS,CAAEqX,cAAc,KAC9C,CAAC,OAAAQ,EAAAA,EAAAA,GAAAgqB,EAAA7qB,IAAAc,EAAAA,EAAAA,GAAA+pB,EAAA,EAAA3kC,IAAA,aAAA2D,MAED,WAaS,IAADzD,EAAAoN,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAJ,CAAC,EAACwyC,EAAA5/C,EAZJk2B,SAAAA,OAAQ,IAAA0pB,EAAGC,IAAeD,EAAAE,EAAA9/C,EAC1BwsC,eAAAA,OAAc,IAAAsT,EAAGC,IAAqBD,EAAAE,EAAAhgD,EACtCigD,qBAAAA,OAAoB,IAAAD,EAAG,CAAC,EAACA,EAAAE,EAAAlgD,EACzB83C,qBAAAA,OAAoB,IAAAoI,EAAGC,IAA2BD,EAClD57C,EAAMtE,EAANsE,OACAJ,EAAOlE,EAAPkE,QACAk8C,EAASpgD,EAATogD,UACA1a,EAAe1lC,EAAf0lC,gBACAhI,EAAM19B,EAAN09B,OACAt6B,EAAIpD,EAAJoD,KACA4e,EAAYhiB,EAAZgiB,aACAjI,EAAI/Z,EAAJ+Z,KAEAZ,KAAK+c,SAAWA,EAChB/c,KAAKqzB,eAAiBA,EACtBrzB,KAAK8mC,qBAAuBA,EAC5B9mC,KAAK2+B,qBAAuBA,EAC5B3+B,KAAKinC,UAAYA,EACjBjnC,KAAKusB,gBAAkBA,EACvBvsB,KAAKukB,OAASA,EACdvkB,KAAK/V,KAAOA,EACZ+V,KAAK6I,aAAeA,EACpB7I,KAAKY,KAAOA,GAAQ,CAAC,EACrBZ,KAAK2uB,SAAS,CACZxjC,OAAAA,EACAJ,QAAAA,GAEJ,GAAC,CAAApE,IAAA,SAAA+O,IAED,WAAc,IAADgL,EAAA,KACX,MAAO,CACL,uBAAwB,SAACiX,GAEvB,GAAIA,EAAEuN,OAAOgiB,UAAUnlC,SAAS,iBAG9B,OAFA4V,EAAEumB,uBACFvmB,EAAEwmB,iBAGJ,IAAMgJ,EAAWzmC,EAAK0B,EAAE,oBAAoB,GAExC+kC,IAAaxvB,EAAEuN,QAAUiiB,EAASplC,SAAS4V,EAAEuN,SAIjDxkB,EAAKJ,QAAQ,OAAQ,CACnBnV,OAAQuV,EAAK4vB,WAAWnlC,QAE5B,EACA,0BAA2B,SAACwsB,GAC1BA,EAAEumB,kBACFvmB,EAAEwmB,iBACF,IAAQhzC,EAAWwsB,EAAE7Q,cAAcw3B,QAA3BnzC,OAERuV,EAAKiuB,SAAS,CACZxjC,OAAAA,IAGFuV,EAAKJ,QAAQ,OAAQ,CACnBnV,OAAQuV,EAAK4vB,WAAWnlC,SAG1BuV,EAAK0mC,sCAAsCj8C,EAC7C,EAEJ,GAAC,CAAAxE,IAAA,cAAA2D,MAED,WACE,IAAA+lC,EAKIrwB,KAAKswB,WAAU+W,EAAAhX,EAJjBiX,kBAAAA,OAAiB,IAAAD,EAAG,GAAEA,EACtBl8C,EAAMklC,EAANllC,OAAMo8C,EAAAlX,EACNtlC,QAAAA,OAAO,IAAAw8C,GAAGl4C,EAAAA,EAAAA,YAAe2Q,KAAKY,KAAKhY,QAAUoX,KAAKY,KAAKhY,OAAO8M,IAAI,eAAgBsK,KAAK6I,cAAa0+B,EACpGnuB,EAAYiX,EAAZjX,aAGFpZ,KAAK6vB,IAAI4D,KAAKzzB,KAAK+c,SAAS,CAC1B5xB,OAAAA,KAGF,ID1DwC85B,EC0DlCuiB,EAAcr8C,EAAS6U,KAAKusB,gBAAgBI,aAChDxhC,EACAm8C,GAAqB,EACrB,CAAEluB,aAAAA,IACA,GACEquB,EAA0B,MAAhBD,EAEhB,GAAIC,EAAS,CACX,IAAMC,GDlEgCziB,ECkEUjlB,KAAK/V,KAAKO,UAAU,yCDjEjE,IAAIm9C,EAAAA,iCAAiC,CAC1C9hB,KAAM,IAAIygB,EAA0B,CAAErhB,QAAAA,OCkEpCjlB,KAAKmhC,SAAS,eAAgBuG,EAChC,CAkBA,OAhBA1nC,KAAKoC,EAAE,kBAAkB08B,OAAO9+B,KAAKqzB,gBAAc/rC,EAAAA,EAAAA,GAAC,CAClDi9B,OAAQvkB,KAAKukB,OACbijB,YAAAA,EACAr8C,OAAAA,EACAm8C,kBAAAA,EACAr9C,KAAM+V,KAAK/V,KACXw9C,QAAAA,GACGznC,KAAK8mC,wBAGV9mC,KAAKoC,EAAE,kBAAkB08B,OAAO9+B,KAAK2+B,qBAAqB,CACxDpa,OAAQvkB,KAAKukB,OACbx5B,QAAAA,EACAk8C,UAAWjnC,KAAKinC,aAGXjnC,IACT,GAAC,CAAArZ,IAAA,wCAAA2D,MAED,SAAsCg6B,GACpC,IAAMsjB,EAAmBp4C,SAASC,cAAc,qBAC5Cm4C,IACFA,EAAiBC,YAAc7nC,KAAK/V,KAAKO,UAAU,iDAAiDsmC,QAAQ,kBAAmB9wB,KAAKukB,OAAOC,SAAS,qBAAsBF,IAC1KwjB,YAAW,WACTF,EAAiBC,YAAc,EACjC,GAAG,GAEP,IAAC,CA5HsB,CAAS9kC,EAAAA,kB,qPCHrBglC,EAAgB,WAAH,OAAS,wCAAiD,C,sEC0D7E,IAAMC,EAAkB,CAC7BC,iBAAgB,WACd,MAjEK,CACLC,YAAa,UACbC,oBAAoB,EACpBC,cAAc,EACdC,2BAA4B,2EAC5BC,cAAe,CACbC,MAAO,CACLC,WAAY,EACZC,YAAa,GACbC,YAAa,GACbC,cAAe,KAEjBC,OAAQ,CACNJ,WAAY,KACZC,YAAa,EACbC,YAAa,GACbC,cAAe,KAEjBE,MAAO,CACLL,WAAY,KACZC,YAAa,EACbC,YAAa,GACbC,cAAe,MAGnBG,QAAS,CACPxO,IAAK,CACHyO,cAAe,gBAEjB3Y,MAAO,CACL,CACE/8B,KAAM,SACN1J,GAAI,eACJ6oC,QAAS,CAAC,MAAO,eACjBwW,QAAS,uBAgCjB,EACAC,iBAAgB,WACd,MA1BK,CACLf,YAAa,UACbC,oBAAoB,EACpBC,cAAc,EACdE,cAAe,CACbC,MAAO,CACLC,WAAY,EACZC,YAAa,GACbC,YAAa,GACbC,cAAe,KAEjBC,OAAQ,CACNJ,WAAY,KACZC,YAAa,EACbC,YAAa,GACbC,cAAe,MAYrB,E,+QClEWO,GAAgB3nC,EAAAA,EAAAA,IAC3B,SAAA2nC,EAAAriD,GAKI,IAAD6Z,EAAA,KAJDyoC,EAAiBtiD,EAAjBsiD,kBACAx7C,EAAa9G,EAAb8G,cACA1D,EAAIpD,EAAJoD,KACAm/C,EAAkBviD,EAAlBuiD,oBAAkBzoC,EAAAA,EAAAA,GAAA,KAAAuoC,GAElBlpC,KAAKrS,cAAgBA,EACrBqS,KAAK/V,KAAOA,EACZ,IAAMo/C,EAAyB,SAAC3qC,GAC9B,IAAM4qC,EAAqB9iD,IAAAA,UACzBkY,GACA,SAAAC,GAAI,OAAIA,EAAKgnC,UAAU,IAEzB,OAA+B,IAAxB2D,EAA4B,EAAIA,CACzC,EAGA9iD,IAAAA,KAAO2iD,GAAmB,SAACxqC,GACzBnY,IAAAA,OAASmY,EAAM,CACbgnC,SAAU4D,IAAAA,YAGH,IAHiB/iD,IAAAA,UACtBmH,GACA,SAAAg4C,GAAQ,OAAIA,IAAahnC,EAAK5V,MAAM,OAIxCvC,IAAAA,OAASmY,EAAM,CACb6qC,aAAcD,IAAAA,cAAgB,WAC5B,OAAI5qC,EAAKgnC,WACD,uBAANx9C,OAA8BwW,EAAK8qC,OAAM,yBAAAthD,OAAwBwW,EAAK8qC,OAAM,cAExE,uBAANthD,OAA8BwW,EAAK8qC,OACrC,GAAG9qC,IAEP,IAEAqB,KAAK0pC,kBAAoBH,IAAAA,WAAcF,EAAuBF,IAE9DnpC,KAAK2pC,SAAWJ,IAAAA,gBAAmBJ,GAEnCnpC,KAAK4pC,WAAaL,IAAAA,cAAgB,kBAAM/iD,IAAAA,MAAQka,EAAKipC,YAClDp5C,QAAO,SAAAoO,GAAI,OAAwB,IAApBA,EAAKgnC,UAAmB,IACvCkE,MAAM,UACNC,WAAWppC,EAAK/S,eAChBrD,OAAO,IAEV0V,KAAK+pC,cAAgBR,IAAAA,cAAgB,kBAAM/iD,IAAAA,MAAQka,EAAKipC,YACrDp5C,QAAO,SAAAoO,GAAI,OAAwB,IAApBA,EAAKgnC,UAAmB,IACvCkE,MAAM,UACNG,aAAatpC,EAAK/S,eAClBrD,OAAO,IAEV0V,KAAKiqC,oBAAsBV,IAAAA,cAAgB,WAGzC,OAFsB/iD,IAAAA,QAAUka,EAAKipC,YAAY,SAAA7sC,GAAC,OAAsB,IAAjBA,EAAE6oC,WAAsB,WAAa,YAAY,IAEnFA,UAAY,CACnC,GAAG3lC,MAGHA,KAAKkqC,mBAAqB,SAACvrC,GACzBA,EAAKgnC,UAAUhnC,EAAKgnC,YACpBjlC,EAAKgpC,kBAAkBL,EAAuBF,GAChD,EAEAnpC,KAAKmqC,WAAa,SAACxrC,EAAM+H,GACnBA,EAAM64B,UAAYA,EAAAA,QAAQ6K,QAC5BzrC,EAAKgnC,UAAUhnC,EAAKgnC,YACpBjlC,EAAKgpC,kBAAkBL,EAAuBF,IAC9CziC,EAAMy3B,iBAEV,EAEAn+B,KAAKqqC,QAAU,SAAC1rC,GACd,IAAM/O,EAAQu5C,EAAkBryC,QAAQ6H,GACxCyqC,EAAmBx5C,EACrB,CACF,ICtEI3F,EAAO2L,OAAO00C,iBAAiB50C,IAAI,2DACnC7M,EAAcD,EAAAA,QAAO8M,IAAI,gBAAkB,CAAC,EAGlD,SAAS60C,IACPvqC,KAAKM,QAAQ,QAAS,CACpBkqC,SAAUxqC,KAAKyqC,UAAUb,aACzBc,YAAa1qC,KAAKyqC,UAAUV,iBAEhC,CAGA,SAASY,IACP3qC,KAAKM,QAAQ,SACf,CAGA,SAASsqC,EAAwBC,EAAYC,EAAeC,GAC1D,IAAMC,EAAWH,EAAa,EAgB9B,OAZIC,EAAgB,EACP,EACFA,EAAgBE,EACdA,EACFD,GAAUD,IAAkBE,EAC1B,EACDD,GAA4B,IAAlBD,EAGTC,EAASD,EAAgB,EAAIA,EAAgB,EAF7CE,CAMf,CAGA,SAASC,IACP,OAAOjrC,KAAKoC,EAAE,sBAChB,CAGA,SAAS8oC,EAAUxkC,GACjB,IAAMykC,EAA2BF,EAA4B7pC,KAAKpB,MAC5D6qC,EAAaM,EAAyBp/C,OACzB,IAAf8+C,IAGAnkC,EAAM64B,UAAYA,EAAAA,QAAQ6L,WAC5BprC,KAAKqrC,aAAeT,EAAwBC,EAAY7qC,KAAKqrC,cAAc,GAC3E3kC,EAAMy3B,kBACGz3B,EAAM64B,UAAYA,EAAAA,QAAQ+L,SACnCtrC,KAAKqrC,aAAeT,EAAwBC,EAAY7qC,KAAKqrC,cAAc,GAC3E3kC,EAAMy3B,kBACGz3B,EAAM64B,UAAYA,EAAAA,QAAQgM,KACnCvrC,KAAKqrC,aAAe,EACX3kC,EAAM64B,UAAYA,EAAAA,QAAQiM,MACnCxrC,KAAKqrC,aAAeR,EAAa,GAEfM,EAAyBnrC,KAAKqrC,cACtC5W,QACd,CAEO,IAAMgX,EAAW,SAAAlF,GAAA,SAAAkF,IAAA,OAAA9qC,EAAAA,EAAAA,GAAA,KAAA8qC,IAAA5qC,EAAAA,EAAAA,GAAA,KAAA4qC,EAAAx3C,UAAA,QAAAqN,EAAAA,EAAAA,GAAAmqC,EAAAlF,IAAAhlC,EAAAA,EAAAA,GAAAkqC,EAAA,EAAA9kD,IAAA,aAAA2D,MACtB,SAAUzD,GAON,IAAD6Z,EAAA,KAAAgrC,EAAA7kD,EAND8G,cAAAA,OAAa,IAAA+9C,EAAG,GAAEA,EAClB9jD,EAAef,EAAfe,gBACAihB,EAAYhiB,EAAZgiB,aAAY8iC,EAAA9kD,EACZ+kD,eAAAA,OAAc,IAAAD,EAAG,KAAIA,EACrB9jD,EAAYhB,EAAZgB,aACAq2B,EAAOr3B,EAAPq3B,QAEAle,KAAKpY,gBAAkBA,EACvBoY,KAAKnY,aAAeA,EACpB,IAAMyL,EAAcs4C,EAAe,CACjC/iD,YAAAA,EACAyI,IAAAA,EAAAA,QACAuX,aAAAA,IAEF7I,KAAKqrC,cAAgB,EAIrBrrC,KAAKke,QAAUA,EAEfle,KAAKyqC,UAAY,IAAIvB,EAAiB,CACpCC,kBAAmB3iD,IAAAA,MAAQ8M,GAAa/C,QAAO,SAAAs7C,GAAI,OAAIv4C,EAAY9F,0BACjEq+C,EACAnrC,EAAK9Y,gBACL8Y,EAAK7Y,aACN,IAAEqD,KAAI,SAAC2gD,GACN,IAAMC,EAAaD,EAAKC,aAAc,EACtC,MAAQ,CACN/iD,OAAQ8iD,EAAK9iD,OACbiE,KAAM6+C,EAAK7+C,KACX++C,aAAcD,EAAa5tB,EAAQ1zB,UAAUqhD,EAAKG,iBAAmB/hD,EAAKO,UAAUqhD,EAAKG,iBACzFvC,OAAQoC,EAAKpC,OACbwC,KAAMH,EAAa5tB,EAAQ1zB,UAAUqhD,EAAKK,SAAWjiD,EAAKO,UAAUqhD,EAAKK,SAE7E,IAAG5hD,QACHqD,cAAAA,EACA1D,KAAAA,EACAi0B,QAAAA,EACAkrB,mBAvByB,SAACx5C,GAC1B8Q,EAAK2qC,aAAez7C,CACtB,GAuBF,GAAC,CAAAjJ,IAAA,SAAA2D,MAED,WACE,MAAO,CACL,cAAeigD,EACf,gBAAiBI,EACjB,8BAA+BO,EAEnC,GAAC,CAAAvkD,IAAA,SAAA2D,MAED,WAME,OALA0V,KAAK6vB,IAAI4D,KAAK0Y,IAAc,CAC1BliD,KAAAA,KAEFs/C,IAAAA,cAAiBvpC,KAAKyqC,UAAWzqC,KAAK4B,IAE/B5B,IACT,GAAC,CAAArZ,IAAA,OAAA2D,MAED,WACE0V,KAAK6vB,IAAIlK,MACX,GAAC,CAAAh/B,IAAA,OAAA2D,MAED,WACE0V,KAAK6vB,IAAIuc,MACX,GAAC,CAAAzlD,IAAA,SAAA2D,MAED,YACEwY,EAAAA,EAAAA,GAAA2oC,EAAA,gBAAA3oC,CAAA,GACF,IAAC,CAvEqB,CAAS0jC,IAAAA,K,yQCrEpB6F,EAAoB,CAC/B,CAEE94C,SAAU,CAAC,WACXxK,OAAQ,uBACRiE,KAAM,kBACNy8C,OAAQ,yBACR6C,SAAU,4BACVC,YAAa,kBACbC,WAAY,CACVjE,MAAO,CACLzd,MAAO,GACP2hB,eAAgB,CAAC,KAEnB7D,OAAQ,CACN9d,MAAO,EACP2hB,eAAgB,CAAC,OAMzBJ,EAAkBK,sBAAwB,SAAA7lD,GAAA,IACxC0lD,EAAW1lD,EAAX0lD,YACA3lC,EAAS/f,EAAT+f,UACAD,EAAe9f,EAAf8f,gBAAe,OACX,IAAIhP,IAAJ,EAAY,SAACuD,GACjB,IACM0F,EAAO,CACX3W,KAFW2L,OAAO00C,iBAAiB50C,IAAI,qEAGvCoK,gBAAAA,EAAAA,SAGF,GACO,oBADCysC,EAEJ,yCAA4G70C,MAAK,SAACi1C,GAChHzxC,EAAQ,CACNyxC,mBAAoBA,EAAmBjO,QACvC99B,KAAAA,GAEJ,SAGA1F,IACAyL,EAAgBI,WACd,CAACH,EAAUI,YAAYwlB,OACvB5lB,EAAUM,SAASC,KACnB,2BAA2B,yBAADhf,OACDokD,GAGjC,GAAG,E,gBC7CGhmD,EAA4BC,IAAAA,UAAYC,EAAAA,IAA0B,SAACiG,EAAK/F,GAAG,OAAKA,CAAG,IASlF,IAAMimD,EAAS,SAAAC,GAAA,SAAAD,IAAA,OAAAjsC,EAAAA,EAAAA,GAAA,KAAAisC,IAAA/rC,EAAAA,EAAAA,GAAA,KAAA+rC,EAAA34C,UAAA,QAAAqN,EAAAA,EAAAA,GAAAsrC,EAAAC,IAAAtrC,EAAAA,EAAAA,GAAAqrC,EAAA,EAAAjmD,IAAA,aAAA2D,MACpB,SAAUzD,GAeN,IAAD6Z,EAAA,KAdD9Y,EAAef,EAAfe,gBACAiB,EAAWhC,EAAXgC,YACAyI,EAAGzK,EAAHyK,IACAmU,EAAW5e,EAAX4e,YACA8I,EAAK1nB,EAAL0nB,MACAu+B,EAAWjmD,EAAXimD,YACAC,EAAuBlmD,EAAvBkmD,wBACApmC,EAAe9f,EAAf8f,gBACAC,EAAS/f,EAAT+f,UAAS+kC,EAAA9kD,EACT+kD,eAAAA,OAAc,IAAAD,EAAG,KAAIA,EACrBqB,EAAkBnmD,EAAlBmmD,mBAAkBC,EAAApmD,EAClBgiB,aAAAA,OAAY,IAAAokC,EAAGjiD,EAAAA,aAAaC,OAAMgiD,EAClCplD,EAAYhB,EAAZgB,aAAYqlD,EAAArmD,EACZsmD,WAAAA,OAAU,IAAAD,GAAQA,EAElBltC,KAAKmtC,WAAaA,EACM,aAApBvlD,IAEF0J,EAAI87C,eAAeC,yBAA0B,GAE/CrtC,KAAKstC,IAAI,CACPtgD,KAAM,UACNpF,gBAAAA,IAEFoY,KAAKnY,aAAeA,EACpBmY,KAAKyF,YAAcA,EACnBzF,KAAKuO,MAAQA,EACbvO,KAAK4rC,eAAiBA,EACtB5rC,KAAKgtC,mBAAqBA,EAC1BhtC,KAAK8sC,YAAcA,EACnB9sC,KAAK6I,aAAeA,EAEpB7I,KAAKutC,cAAgBT,EAAYjtC,aAAanI,MAAK,WACjDgJ,EAAKvT,kBACP,IAEA6S,KAAK1M,YAAcs4C,EAAe,CAChC/iD,YAAAA,EACAyI,IAAAA,EACAuX,aAAAA,IAGF7I,KAAKwtC,qBAAuBxtC,KAAKmtC,WAAa3mD,IAAAA,MAC5CinD,EAAAA,EAAAA,GAAwB,CACtBV,wBAAAA,EACApmC,gBAAAA,EACAC,UAAAA,GAEN,GAAC,CAAAjgB,IAAA,mBAAA2D,MAED,WACE,IAAM0C,EAAOgT,KAAKtK,IAAI,QAElBsK,KAAK6I,eAAiB7d,EAAAA,aAAakI,MACrC8M,KAAKstC,IAAI,cAAc,GAADnlD,OAAK6E,EAAI,KAAA7E,OAAI6X,KAAKpY,gBAAe,WAC9CoY,KAAKnY,eAAiBtB,EAA0BwB,OAASiY,KAAKnY,eAAiBpB,EAAAA,GAAyBsB,MACjHiY,KAAKstC,IAAI,cAAc,GAADnlD,OAAK6E,EAAI,KAAA7E,OAAI6X,KAAKpY,gBAAe,WAC9CoY,KAAKnY,eAAiBtB,EAA0ByB,gBAAkBgY,KAAKnY,eAAiBpB,EAAAA,GAAyBuB,eAC1HgY,KAAKstC,IAAI,cAAc,GAADnlD,OAAK6E,EAAI,KAAA7E,OAAI6X,KAAKpY,gBAAe,oBAC9CoY,KAAKnY,eAAiBtB,EAA0B0B,KAAO+X,KAAKnY,eAAiBpB,EAAAA,GAAyBwB,IAC/G+X,KAAKstC,IAAI,cAAc,GAADnlD,OAAK6E,EAAI,KAAA7E,OAAI6X,KAAKpY,gBAAe,SAEvDoY,KAAKstC,IAAI,cAAc,GAADnlD,OAAK6E,EAAI,KAAA7E,OAAI6X,KAAKpY,iBAE5C,GAAC,CAAAjB,IAAA,qBAAA2D,MAED,WAAsB,IAAD6kC,EAAA,KAEnBnvB,KAAKnT,MAAQmT,KAAK0tC,0BACd1tC,KAAKnT,OAASrG,IAAAA,IAAMwZ,KAAKnT,MAAMrF,KAAMwY,KAAKjT,cAAgBvG,IAAAA,IAAMwZ,KAAKnT,MAAMrF,KAAKwY,KAAKjT,aAAc,YACrGiT,KAAKstC,IAAI,UAAW9mD,IAAAA,OAASA,IAAAA,KAAOwZ,KAAKnT,MAAMrF,KAAKwY,KAAKjT,aAAatD,QAAS,CAAC,iBAAkB,kBAAmB,wBAAyBuW,KAAKvW,UAGrJ,IAAMkkD,EAAkB3tC,KAAK8sC,YAAY9lD,sBAAsBgZ,KAAKtK,IAAI,wBAClEk4C,IAAsBD,GAAkBA,EAAgBnmD,KACxDqmD,EAA4C,oBAArB7tC,KAAKjT,cAA6D,IAAxB6gD,EA+BvE,OA9BsB,IAAIj2C,IAAJ,EAAY,SAACuD,GAC7B2yC,EACF3yC,EAAQ,CAAE1I,iBAAiB,IAClB28B,EAAK1pB,YAAYqoC,gBACzB3e,EAAK1pB,YAAYqoC,cAAcC,iBAChC7yC,EAAQ,CACN1I,gBAAiB28B,EAAK1pB,YAAYqoC,cAAcE,gBAChDC,gBAAiB9e,EAAK1pB,YAAYqoC,cAAcI,aAChDC,6BAA8Bhf,EAAK1lC,QAAQ0kD,6BAC3CC,6BAA8Bjf,EAAK1lC,QAAQ2kD,+BAE7Cjf,EAAK1pB,YAAYqoC,cAAcC,iBAAkB,GAEjD5e,EAAK5gB,MAAM7Y,IA9FX,GAANvN,OAHY,mFAGC,KAAAA,OAFM,oDAgGSuP,MAAK,SAAC0M,GACtBA,EAAKiqC,WAAajqC,EAAKkqC,iBACzBpzC,EAAQ,CAAE1I,iBAAiB,IAE3B0I,EAAQ,CACN1I,iBAAiB,EACjBy7C,gBAAiB7pC,EAAK8pC,aACtBC,6BAA8Bhf,EAAK1lC,QAAQ0kD,6BAC3CC,6BAA8Bjf,EAAK1lC,QAAQ2kD,8BAGjD,IAAGrzB,OAAM,WACP7f,EAAQ,CAAE1I,iBAAiB,GAC7B,GAEJ,IAEqBkF,MAAK,SAACqN,GACzB,GAAIA,EAAOvS,gBACT28B,EAAK38B,iBAAkB,EACvB28B,EAAKof,kBACLpf,EAAKqf,YAAchoD,IAAAA,MAAQ2oC,EAAK6d,mBAAmB,IACnD7d,EAAKqf,YAAYnc,iBAAmBttB,EACpCoqB,EAAKvmC,OAASo/C,EAAAA,EAAgBiB,mBAC9B9Z,EAAKvmC,OAAO8jD,sBAAwBvd,EAAK6d,mBAAmBN,sBAE5Dvd,EAAK2d,YAAYQ,IAAI,CACnB7lD,KAAM0nC,EAAKz5B,IAAI,6BACflO,MAAM,QAEH,CAEL,GADA2nC,EAAK38B,iBAAkB,GAClBq7C,EAAsB,CAGzB,IAAMY,EAAajoD,IAAAA,KAAO2oC,EAAK1lC,QAAS,CAAC,+BAAgC,sBAAuB,iCAEhG0lC,EAAKme,IAAI,UAAWmB,GACpBjoD,IAAAA,OAAQ,kBAAM2oC,EAAK7oB,KAAK,CAAEmoC,WAAAA,GAAa,IACvCtf,EAAKqe,qBAAqB,mBAAoB,yCAC9Cre,EAAK2d,YAAYvlD,eAAe,CAC9BE,KAAM0nC,EAAKz5B,IAAI,uBACflO,MAAM,GAEV,CACA2nC,EAAKvmC,OAASo/C,EAAAA,EAAgBC,mBAC9B9Y,EAAKvmC,OAAO8jD,sBAAwBvd,EAAK77B,YAAYo5C,sBACrDvd,EAAKuf,oBACP,CACF,GACF,GAAC,CAAA/nD,IAAA,kBAAA2D,MAED,WACE0V,KAAKstC,IAAI,QAAS9mD,IAAAA,IAAM6lD,GAAmB,SAAA1tC,GAAI,MAAK,CAClDhV,GAAIgV,EAAK5V,OACTyjD,WAAY7tC,EAAK6tC,WAClB,IACH,GAAC,CAAA7lD,IAAA,qBAAA2D,MAED,WAAsB,IAAD8sC,EAAA,KACnB,GAAIp3B,KAAKnT,OAASrG,IAAAA,IAAMwZ,KAAKnT,MAAMrF,KAAMwY,KAAKjT,cAAgBvG,IAAAA,IAAMwZ,KAAKnT,MAAMrF,KAAKwY,KAAKjT,aAAc,SAAU,CAC/G,IAMI2R,EANEiwC,EAAYnoD,IAAAA,QAChBwZ,KAAK1M,aACL,SAAA/F,GAAU,OAAI6pC,EAAKwX,gBAAgBrhD,EAAW,IAG5CshD,EAAiBF,EAAUG,UAE3BC,GAAiB,EAEgB,IAAjCvoD,IAAAA,KAAOmoD,EAAUK,cACnBH,EAAiBA,EAAe1mD,OAAOwmD,EAAUK,aAKnD,IAAMC,EAAezoD,IAAAA,WAAaA,IAAAA,IAAMwZ,KAAKnT,MAAMrF,KAAKwY,KAAKjT,aAAa2R,OAAO,SAAAC,GAAI,OACnFA,EAAKhV,EAAE,IAAGnD,IAAAA,IAAMqoD,GAAgB,SAAAlwC,GAAI,OACpCA,EAAK5V,MAAM,KAEgB,IAAzBvC,IAAAA,KAAOyoD,IACTjvC,KAAKwtC,qBAAqB,kCAG5BxtC,KAAKnT,MAAMrF,KAAKwY,KAAKjT,aAAa2R,MAAQlY,IAAAA,OACxCwZ,KAAKnT,MAAMrF,KAAKwY,KAAKjT,aAAa2R,OAClC,SAAAC,GAAI,OAAKnY,IAAAA,SAAWyoD,EAActwC,EAAKhV,GAAG,IAG5C+U,EAAQlY,IAAAA,OAASwZ,KAAKnT,MAAMrF,KAAKwY,KAAKjT,aAAa2R,OAAO,SAAAC,GAAI,OAAKA,EAAK9P,MAAM,IAG9E,IAAMqgD,EAAoB1oD,IAAAA,WAAaA,IAAAA,IAAMmoD,EAAUG,WAAW,SAAAnwC,GAAI,OACpEA,EAAK5V,MAAM,IAAGvC,IAAAA,IAAMwZ,KAAKnT,MAAMrF,KAAKwY,KAAKjT,aAAa2R,OAAO,SAAAC,GAAI,OACjEA,EAAKhV,EAAE,KAEHwlD,EAAqB3oD,IAAAA,WAAaA,IAAAA,IAAMmoD,EAAUK,YAAY,SAAArwC,GAAI,OACtEA,EAAK5V,MAAM,IAAGvC,IAAAA,IAAMwZ,KAAKnT,MAAMrF,KAAKwY,KAAKjT,aAAa2R,OAAO,SAAAC,GAAI,OACjEA,EAAKhV,EAAE,KAOT,GALmC,IAA/BnD,IAAAA,KAAO2oD,KACTnvC,KAAKstC,IAAI,+BAA+B,GACxCttC,KAAKwtC,qBAAqB,wBAAwB,iCAADrlD,OAAmCgnD,EAAmB3rC,KAAK,SAG5E,IAA9Bhd,IAAAA,KAAO0oD,GAA0B,CACnC,IAAME,EAAgB5oD,IAAAA,MAAQmoD,EAAUG,WACrCv+C,QAAO,SAAAoO,GAAI,OAAmD,IAA/CnY,IAAAA,QAAU0oD,EAAmBvwC,EAAK5V,OAAc,IAC/DmC,KAAI,SAAAyT,GAAI,MAAK,CACZhV,GAAIgV,EAAK5V,OACTyjD,WAAY7tC,EAAK6tC,WAClB,IAAGliD,QAENoU,EAAQA,EAAMvW,OAAOinD,GACrBpvC,KAAKstC,IAAI,oBAAqB4B,GAC9BlvC,KAAKwtC,qBAAqB,wBAAwB,gCAADrlD,OAAkC+mD,EAAkB1rC,KAAK,OAC5G,CAEAhd,IAAAA,KAAOkY,GAAO,SAACC,GACb,GAAIA,EAAK6tC,YAEP,GAAIhmD,IAAAA,KAAO4wC,EAAKxuC,OAAO0/C,iBAAmB9hD,IAAAA,KAAOmY,EAAK6tC,YAAa,CACjE,IAAMj/C,EAAa/G,IAAAA,KAAO4wC,EAAK9jC,aAAa,SAAA6tB,GAAI,OAAIA,EAAKp4B,SAAW4V,EAAKhV,EAAE,IAE3EnD,IAAAA,KAAOA,IAAAA,KAAO+G,EAAWi/C,aAAa,SAAC7lD,GAChCgY,EAAK6tC,WAAW7lD,KAEnBgY,EAAK6tC,WAAW7lD,GAAO,CAAEmkC,MAAOv9B,EAAWi/C,WAAW7lD,GAAKmkC,OAC3DikB,GAAiB,EAErB,GACF,MACK,CAEL,IAAMxhD,EAAa/G,IAAAA,KAAO4wC,EAAK9jC,aAAa,SAAA6tB,GAAI,OAAIA,EAAKp4B,SAAW4V,EAAKhV,EAAE,IAG3EgV,EAAK6tC,WAAaj/C,EAAWi/C,WAC7BuC,GAAiB,CACnB,CACF,IAGAA,EAAiBA,GACU,IAAzBvoD,IAAAA,KAAOyoD,IACuB,IAA9BzoD,IAAAA,KAAO0oD,GAETlvC,KAAKstC,IAAI,QAAS5uC,GACdqwC,GACFvoD,IAAAA,OAAQ,kBAAM4wC,EAAK9wB,KAAK,CACtBrH,SAAUP,EACV+vC,WAAYrX,EAAK3tC,SACjB,GAEN,KAAO,CACLuW,KAAKwtC,qBAAqB,YAE1B,IAAMmB,EAAYnoD,IAAAA,QAChBwZ,KAAK1M,aACL,SAAA/F,GAAU,OAAI6pC,EAAKwX,gBAAgBrhD,EAAW,IAG1C8hD,EAAe7oD,IAAAA,IAAMmoD,EAAUG,WAAW,SAAAnwC,GAAI,MAAK,CACvDhV,GAAIgV,EAAK5V,OACTyjD,WAAY7tC,EAAK6tC,WAClB,IAEDxsC,KAAKstC,IAAI,QAAS+B,GAIlB7oD,IAAAA,OAAQ,kBAAM4wC,EAAK9wB,KAAK,CACtBrH,SAAUowC,EACVZ,WAJEA,WAKF,GACJ,CACF,GAAC,CAAA9nD,IAAA,OAAA2D,MAED,WAAQ,IAAD0tC,EAAA,KACL,OAAOh4B,KAAKutC,cAAc71C,MAAK,kBAAMsgC,EAAKsX,oBAAoB,GAChE,GAAC,CAAA3oD,IAAA,OAAA2D,MAED,SAAIpD,GAGA,IAFF+X,EAAQ/X,EAAR+X,SACAwvC,EAAUvnD,EAAVunD,WAEA,KAAIzuC,KAAKmtC,YAAe3mD,IAAAA,YAAcyY,IAAazY,IAAAA,YAAcioD,IAAjE,CAIA,IAAI/vC,EAGJ,IAAKsB,KAAKxN,kBAENkM,EADEO,GAGWe,KAAVtB,QAGQsB,KAAKnT,OAASrG,IAAAA,IAAMwZ,KAAKnT,MAAMrF,KAAMwY,KAAKjT,cAAgBvG,IAAAA,IAAMwZ,KAAKnT,MAAMrF,KAAKwY,KAAKjT,aAAc,SAAU,CACxH,IAAMwiD,EAAc/oD,IAAAA,WAClBA,IAAAA,IAAMwZ,KAAKnT,MAAMrF,KAAKwY,KAAKjT,aAAa2R,OAAO,SAAAC,GAAI,OAAIA,EAAKhV,EAAE,IAC9DnD,IAAAA,IAAMkY,GAAO,SAAAC,GAAI,OAAIA,EAAKhV,EAAE,KAG9BqW,KAAKstC,IAAI,QAAS5uC,GACU,IAAxBlY,IAAAA,KAAO+oD,KACT7wC,EAAQA,EAAMvW,OAAO3B,IAAAA,IAAM+oD,GAAa,SAAA5wC,GAAI,MAAK,CAAEhV,GAAIgV,EAAM9P,QAAQ,EAAM,KAE/E,CAGF,IAAMpF,EAAUjD,IAAAA,OAAS,CAAC,EAAGwZ,KAAKvW,QAASglD,GAEtCjoD,IAAAA,YAAciD,IACjBuW,KAAKstC,IAAI,UAAW7jD,GAGtB,IAAI2a,EAAO,CAAC,EAERpE,KAAKnT,QACPuX,EAAO5d,IAAAA,OAAS4d,EAAMpE,KAAKnT,MAAMrF,OAUnC,IAAMT,EAAa,CACjBS,KARF4c,EAAO5d,IAAAA,OAAS4d,GAAI/E,EAAAA,EAAAA,GAAA,GACjBW,KAAKjT,YAAc,CAClB2R,MAAAA,EACAjV,QAAAA,MAQJuW,KAAKwvC,wBAAwBzoD,GAEzBiZ,KAAKnT,MACPmT,KAAKnT,MAAMrF,KAAO4c,EAElBpE,KAAKnT,MAAQ9F,CArDf,CAuDF,GAAC,CAAAJ,IAAA,sBAAA2D,MAED,SAAoBX,GAAK,IACnBgV,EADkBu5B,EAAA,KAUtB,GANEv5B,EADEqB,KAAKxN,gBACAwN,KAAKwuC,YAELhoD,IAAAA,KAAOwZ,KAAK1M,aAAa,SAAAu4C,GAAI,OAAIA,EAAK9iD,SAAWY,GACtDuuC,EAAK5kC,YAAY9F,0BAA0Bq+C,EAAM3T,EAAKtwC,gBAAiBswC,EAAKrwC,aAAa,IAGzFrB,IAAAA,YAAcmY,GAChB,OAAO,KAET,IAAM8wC,EAAY,CAAC,EAGnBrtC,IAAAA,QAAS,EAAMqtC,EAAWjpD,IAAAA,KACxBmY,EACA,CAAC,WAAY,kBAAmB,OAAQ,cAAe,mBAAoB,aAAc,sBAAuB,gBAIlH,IAAM+wC,EAAWlpD,IAAAA,KAAOwZ,KAAKtB,OAAO,SAAAyiB,GAAI,OAAIA,EAAKx3B,KAAOA,CAAE,IAU1D,OARI+lD,GAAYA,EAASlD,YACvBhmD,IAAAA,KAAOkpD,EAASlD,YAAY,SAACliD,EAAO3D,GAC9B8oD,EAAUjD,WAAW7lD,KACvB8oD,EAAUjD,WAAW7lD,GAAKmkC,MAAQxgC,EAAMwgC,MAE5C,IAGK2kB,CACT,GAAC,CAAA9oD,IAAA,kBAAA2D,MAED,SAAgBiD,GACd,OAAKyS,KAAK1M,YAAY9F,0BACpBD,EACAyS,KAAKpY,gBACLoY,KAAKnY,cAGI0F,EAAWuhD,UACb,YAEF,aAJE,qCAKX,GAAC,CAAAnoD,IAAA,0BAAA2D,MAED,WACE,MAA6B,aAAzB0V,KAAKpY,gBACAoY,KAAK8sC,YAAY9lD,sBAAsBgZ,KAAKtK,IAAI,8BAGlDsK,KAAK8sC,YAAYhgD,yBAAyBkT,KAAKtK,IAAI,qBAC5D,GAAC,CAAA/O,IAAA,0BAAA2D,MAED,SAAwBvD,GACO,aAAzBiZ,KAAKpY,gBACPoY,KAAK8sC,YAAYvlD,eAAef,IAAAA,OAAS,CAAC,EAAGO,EAAY,CAAEU,KAAMuY,KAAKtK,IAAI,gCAE1EsK,KAAK8sC,YAAYxtC,kBAAkB9Y,IAAAA,OAAS,CAAC,EAAGO,EAAY,CAAEU,KAAMuY,KAAKtK,IAAI,uBAEjF,GAEA,CAAA/O,IAAA,QAAA+O,IACA,WACE,OAAOsK,KAAKtK,IAAI,QAClB,GAAC,CAAA/O,IAAA,UAAA+O,IAED,WACE,OAAOsK,KAAKtK,IAAI,UAClB,GAAC,CAAA/O,IAAA,cAAA+O,IAED,WACE,OAAOsK,KAAKtK,IAAI,cAClB,GAAC,CAAA/O,IAAA,kBAAA+O,IAED,WACE,OAAOsK,KAAKtK,IAAI,kBAClB,GAAC,CAAA/O,IAAA,8BAAA+O,IAED,WACE,OAAOsK,KAAKtK,IAAI,8BAClB,GAAC,CAAA/O,IAAA,oBAAA+O,IAED,WACE,OAAOsK,KAAKtK,IAAI,oBAClB,GAAC,CAAA/O,IAAA,WAAA+O,IAED,WACE,MAAO,CACLi6C,kBAAmB,wBACnBC,0BAA2B,gCAC3BC,oBAAqB,sBACrBC,0BAA2B,uBAC3B9iD,KAAM,GACNpF,gBAAiB,UACjBmF,YAAa,EACb2R,MAAO,GACPjV,QAAS,CAAC,EACVsmD,6BAA6B,EAEjC,IAAC,CAtbmB,CAASvJ,IAAAA,M,6KCdlBrrC,EAAe,WA8BzB,OAAAoG,EAAAA,EAAAA,IA7BD,SAAApG,IAKS,IAADuF,EAAA,KAAA7Z,EAAAoN,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAJ,CAAC,EAAC+7C,EAAAnpD,EAJJopD,aAAAA,OAAY,IAAAD,GAAQA,EACpBx0C,EAAK3U,EAAL2U,OAAKmF,EAAAA,EAAAA,GAAA,KAAAxF,GAIL6E,KAAKxE,MAAQA,EACbhV,IAAAA,OAASwZ,KAAMwmC,IAAAA,QACfxmC,KAAKkwC,cAAgB,KAErBlwC,KAAKiwC,aAAeA,EAEhBr6C,OAAO3N,KAAO2N,OAAO3N,IAAIkoD,OAASv6C,OAAO3N,IAAIkoD,MAAMC,SACrDx6C,OAAO3N,IAAIkoD,MAAMC,QAAQC,6BAA4B,SAAC14B,EAAGpnB,GACvD,IAAIrG,EAGFA,GADwB,IAAtBwW,EAAKuvC,aACKzpD,IAAAA,KAAO+J,EAAQ,QAAS,MAAO,SAE/BA,GAGT+/C,EAAAA,EAAAA,iBAAgB9pD,IAAAA,KAAOka,EAAKwvC,cAAe,OAAQ1pD,IAAAA,KAAO0D,EAAW,UAExEwW,EAAKJ,QAAQ,UAAW,CAAEpW,UAAAA,IAC1BwW,EAAKwvC,cAAgBhmD,EAEzB,GAEJ,GAAC,EAAAvD,IAAA,UAAA+O,IAED,WAAe,IAADy5B,EAAA,KACZ,OAAOnvB,KAAKxE,MAAM+0C,WAAW,cAAc74C,MAAK,SAACxN,GAI/C,GAHKilC,EAAK+gB,gBACR/gB,EAAK+gB,cAAgBhmD,IAEG,IAAtBilC,EAAK8gB,aAAuB,CAC9B,IAAMO,EAAWhqD,IAAAA,KAAO0D,EAAW,QAAS,MAAO,SAEnD,OAAOyN,IAAAA,QAAgB64C,EACzB,CACA,OAAO74C,IAAAA,QAAgBzN,EACzB,GACF,IAAC,CA5CyB,E,sHCJtBumD,EAAmB,IACnBC,EAAsB,IACtBC,EAAqB,IACrBC,EAAa,GACbC,EAA0B,GAEnBC,EAA8B,GAEpC,SAASC,EAAoBlqD,GAMhC,IALF+B,EAAM/B,EAAN+B,OACA8V,EAAK7X,EAAL6X,MACAkI,EAAS/f,EAAT+f,UACAD,EAAe9f,EAAf8f,gBACAqqC,EAAUnqD,EAAVmqD,WAGA,GAA2B,YAAvBpoD,EAAOs/C,YACT,OAAO,EAGT,IAAM+I,EAAYN,EACZO,EAAaF,EAAaN,EAAsBD,EAEhDU,EAAiBN,EAEjBO,EAAiBx7C,OAAOC,WAAaq7C,EAAaC,EACtDL,EAIF,GAAIM,GAAkB,EACpB,OAAO,EAGT,IAAMC,EAAe7qD,IAAAA,MAAQoC,EAAO0/C,eACjC/3C,QAAO,SAAAi7B,GAAM,OAAIA,EAAOgd,WAAa4I,CAAc,IACnD7oC,KAAI,SAAAijB,GAAM,OAAIA,EAAOgd,UAAU,IAC/Bl+C,QACGgnD,EAAY9qD,IAAAA,QAAUoC,EAAO0/C,eAAe,SAAA9c,GAAM,OAAIhlC,IAAAA,QAAUglC,EAAQ6lB,EAAa,IACrFE,EAAkBl7C,KAAKC,OAAOV,OAAOW,YAAc06C,EAjBpC,IAkBlBI,EAAa1I,cAAgBiI,IAC1BY,EAAUH,EAAa3I,YACzB+I,EAAoBF,EACpBG,EAA2BF,EAE/B,GAA0B,IAAtBC,EACF,OAAO,EAKT,IACE,IAAK,IAAI7hD,EAAQ,EAAGA,EAAQ8O,EAAM3S,OAAQ6D,GAAS,EAAG,CACpD,IAAM8G,EAAWgI,EAAM9O,GAAO48C,WAAW8E,GAAWxmB,MAEpD,GAAI4mB,EAA2Bh7C,EAAU,CAEvC,GAA0B,KAD1B+6C,GAAqB,GAEnB,OAAO7hD,EAET8hD,EAA2BF,EAAU96C,CACvC,MACEg7C,GAA4Bh7C,CAEhC,CACF,CAAE,MAAOi7C,GACP,IAAMn2C,EAAQ,CACZ01C,WAAAA,EACAr7C,WAAYD,OAAOC,WACnB07C,gBAAAA,EACAE,kBAAAA,EACAnJ,cAAe1/C,EAAO0/C,cACtB+I,aAAAA,EACAC,UAAAA,EACA5yC,MAAAA,GAIF,OADAiI,EAAgBI,WAAW,CAACH,EAAUI,YAAYwlB,OAAQ5lB,EAAUM,SAASC,KAAM,iBAAiB,GAADhf,OAAKwpD,EAAG/5B,MAAK,MAAAzvB,OAAKiqB,KAAKC,UAAU7W,KAC7HkD,EAAM3S,MACf,CAEA,OAAO2S,EAAM3S,MACf,C,6rBCpFa6lD,GAAe,CAAC,CAC3BC,yBAA0BpnD,YAC1BqnD,uBAAwBrnD,+BACxBsnD,2BAA4BtnD,UAC5BunD,wBAAyBvnD,YACzBwnD,wBAAyBxnD,OACzBynD,2BAA4BznD,UAC5B0nD,0BAA2B1nD,SAC3B2nD,6BAA8B3nD,mBAC9B4nD,8BAA+B5nD,oBAC/B6nD,6BAA8B7nD,mBAC9B8nD,0BAA2B9nD,SAC3B+nD,QAAS/nD,aACT,4BAA6BA,8BC4BzBR,GAAO2L,OAAO00C,iBAAiB50C,IAAI,2DACnC+8C,GAAa78C,OAAO00C,iBAAiB50C,IAAI,uCACzCo3C,GAAc/lD,EAAAA,QACd2rD,GAAuB9U,EAAAA,QAEvB/0C,GAAcD,EAAAA,QAAO8M,IAAI,gBAAkB,CAAC,EAC5C83C,IAAuBC,EAAAA,EAAAA,GAAwB,CACnDV,wBAAAA,EAAAA,QACApmC,gBAAAA,EAAAA,QACAC,UAAAA,EAAAA,UAIF,SAAS+rC,KAA0B,IAADjyC,EAAA,KAC1BkyC,EAASpsD,IAAAA,IAAMwZ,KAAK6yC,UAAUC,YAAY,SAACnpD,GAC/C,IAAM6hC,EAAS,CAAE7hC,GAAI+W,EAAKqyC,SAASppD,GAAIZ,QASvC,OAPI2X,EAAKqyC,SAASppD,GAAI6iD,YACpBhmD,IAAAA,OAASglC,EAAQ,CAAEghB,WAAY9rC,EAAKqyC,SAASppD,GAAI6iD,aAG/C9rC,EAAKqyC,SAASppD,GAAIF,SACpBjD,IAAAA,OAASglC,EAAQ,CAAE/hC,QAASiX,EAAKqyC,SAASppD,GAAIF,UAEzC+hC,CACT,IAEAxrB,KAAKgzC,UAAU1sC,KAAK,CAClBrH,SAAU2zC,GAEd,CAGA,SAASK,GAAatpD,GACfnD,IAAAA,QAAUwZ,KAAKkzC,0BAClBlzC,KAAKkzC,uBAAyB1sD,IAAAA,OAASwZ,KAAKkzC,wBAAwB,SAAAv0C,GAAI,OAAIA,IAAShV,CAAE,IAEnFnD,IAAAA,QAAUwZ,KAAKkzC,0BACjBlzC,KAAKG,WAAWC,KAAK,CAAE+yC,kBAAmBnzC,KAAKozC,qBAC/Ch8B,EAAAA,UAAUi8B,YAAYrzC,KAAKszC,WAGjC,CAGA,SAASC,GAA0B5G,EAAoBvpC,GAAa,IAC9D6hB,EAD6DkK,EAAA,KAEzDniC,EAA2BoW,EAA3BpW,KAAMqlC,EAAqBjvB,EAArBivB,iBACRmhB,EAAehtD,IAAAA,OAASA,IAAAA,KAAO4c,EAAY,mBAAoB,QAAS,CAC5Em0B,eAAgBv3B,KAAKu3B,eACrB1uB,aAAc7I,KAAK6I,eAGrB,GAAIriB,IAAAA,WAAa6rC,GAAmB,CAClC,IAAMohB,EAAsBphB,EAAiBjxB,KAAKpB,KAAM,CACtDpY,gBAAiBoY,KAAKpY,gBACtBC,aAAcmY,KAAKnY,eAIrBo9B,EAAU,IAAI0nB,EAAmBnmD,IAAAA,OAC/BgtD,EACA,CAAExmD,KAAK,GAAD7E,OAAK6X,KAAKpY,gBAAe,KAAAO,OAAI6E,GAAQmT,WAAYH,KAAKG,YAAcszC,EAAoBphB,kBAElG,MAEEpN,EAAU,IAAI0nB,EAAmBnmD,IAAAA,OAASgtD,EAAc,CAAExmD,KAAK,GAAD7E,OAAK6X,KAAKpY,gBAAe,KAAAO,OAAI6E,GAAQmT,WAAYH,KAAKG,YAAckyB,IAC/H1D,WAsBL,OAnBA1J,EAAQhkB,GAAG,uBAAuB,WAAuB,IAAtBnC,EAAW7K,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAG,CAAC,EAC1Cy/C,EAAcltD,IAAAA,KAAO2oC,EAAK4jB,UAAU,SAAAp0C,GAAI,OAAIA,EAAKsmB,UAAYA,CAAO,IAEtEyuB,IACFA,EAAYjqD,QAAUqV,EACtBtY,IAAAA,MAAQmsD,GAAuB7a,KAAK3I,IAExC,IAEAlK,EAAQhkB,GAAG,wBAAwB,SAACwtC,GAClCjoD,IAAAA,OAAQ,WACN2oC,EAAK6jB,UAAU1sC,KAAK,CAAEmoC,WAAAA,GACxB,GACF,IAEAxpB,EAAQhkB,GAAG,oBAAoB,kBAAMkuB,EAAK0jB,UAAUc,kBAAkB,IACtE1uB,EAAQhkB,GAAG,oBAAoB,kBAAMkuB,EAAK0jB,UAAUe,kBAAkB,IACtE3uB,EAAQhkB,GAAG,aAAa,SAAAtX,GAAE,OAAIspD,GAAa7xC,KAAK+tB,EAAMxlC,EAAG,IAElDs7B,CACT,CAGA,SAAS4uB,KAAuB,IAADzc,EAAA,KAC7B5wC,IAAAA,OAAQ,WACF4wC,EAAK0c,aACP1c,EAAK0c,YAAYjkB,KACjBuH,EAAK0c,YAAYjkB,IAAI,GAAGvK,wBAAwByuB,EAAI,GACpD3c,EAAKvH,IAAIC,QAAQ,QAAQkkB,QAAQ,CAAE9Y,UAAW,GAElD,GACF,CAGA,SAAS+Y,GAAeptD,GAAwB,IAADmxC,EAAA,KAAAkc,EAAArtD,EAApBstD,SAAAA,OAAQ,IAAAD,GAAQA,EACzCp0C,EAAAA,QAAgBQ,QAAQ,mBAEpBN,KAAK8zC,YACHK,GACFN,GAAoBzyC,KAAKpB,MAG3B,yCAAkFtI,MAAK,SAAAxQ,GAAyB,IAAtBktD,EAAcltD,EAAdktD,eACxF,yCAAqD18C,MAAK,SAAA/P,GAAsB,IAAnB8jD,EAAW9jD,EAAX8jD,YACrD4I,EAAeD,EAAe3I,EAAa,CAC/C3gB,MAAO,IACPwpB,eAAgB,0BAChBrqD,KAAAA,GACAsqD,oBAAqBtqD,GAAKO,UAAU,0CAEhCgqD,EAAoB,WACxBxc,EAAK8b,YAAYjZ,SACjB7C,EAAK8b,YAAc,IACrB,EAEA9b,EAAK8b,YAAc,IAAIO,EAAa,CAClC1xB,MAAO14B,GAAKO,UAAU,qBACtBmD,cAAenH,IAAAA,MAAQwxC,EAAK+a,SAAU,UACtClqC,aAAcmvB,EAAKnvB,aACnB+iC,eAAgB5T,EAAKp9B,eACrBhT,gBAAiBowC,EAAKpwC,gBACtBC,aAAcmwC,EAAKnwC,aACnB4sD,gBAAiB,CAAC,CAChB/tC,MAAO,SACP4nB,OAAQkmB,GACP,CACD9tC,MAAO,QACP4nB,OAAQ,SAAFjmC,GAGC,IAFLmiD,EAAQniD,EAARmiD,SACAE,EAAWriD,EAAXqiD,YAEA1S,EAAK8b,YAAYjZ,SACjB7C,EAAK8b,YAAc,KAEnB9b,EAAK0c,QAAQlK,GACbxS,EAAK2c,WAAWjK,GAEXlkD,IAAAA,QAAUgkD,IACbgD,GAAqB,6BAEzB,IAEF9nB,QAAS8uB,EACTt2B,QAAS8Z,EAAK9Z,UAGhB8Z,EAAK8b,YAAYpd,QACnB,GACF,GAEJ,CAGA,SAASke,KAEH50C,KAAK60C,gBACP70C,KAAK80C,WAAa90C,KAAK60C,gBAEvB70C,KAAK80C,WAAa,IAAI35C,EAAAA,EAAgB,CAAEK,MAAAA,EAAAA,IAG1CwE,KAAK80C,WAAW7zC,GAAG,UAAWjB,KAAK+0C,yBAA0B/0C,MAEzDA,KAAKg1C,aACPh1C,KAAKg1C,YAAY/zC,GAAG,UAAWjB,KAAKi1C,qBAAsBj1C,KAE9D,CAGA,SAASk1C,GAAiBzsD,GAMtB,IAADyvC,EAAA,KALDv5B,EAAIlW,EAAJkW,KACAhI,EAAYlO,EAAZkO,aAAYw+C,EAAA1sD,EACZuwB,gBAAAA,OAAe,IAAAm8B,GAAQA,EACvBxjD,EAAelJ,EAAfkJ,gBAAeyjD,EAAA3sD,EACf4sD,UAAAA,OAAS,IAAAD,EAAG,KAAIA,EAEhBE,EAIIt1C,KAAKgzC,UAAUuC,oBAAoB52C,EAAKhV,IAH1CqD,EAAIsoD,EAAJtoD,KACAu/C,EAAW+I,EAAX/I,YACAla,EAAgBijB,EAAhBjjB,iBAGFryB,KAAKpX,OAAO8jD,sBAAsB,CAChCH,YAAAA,EACA3lC,UAAAA,EAAAA,QACAD,gBAAAA,EAAAA,QACAnL,MAAAA,EAAAA,EACA5S,OAAAA,EAAAA,QACA6c,YAAAA,EAAAA,EACA4vC,UAAAA,EACAl+C,YAAa7F,EAAAA,UACZoG,MAAK,SAAA/O,GAAmC,IAAhCgkD,EAAkBhkD,EAAlBgkD,mBAAoB/rC,EAAIjY,EAAJiY,KAC7B,GAAK+rC,IAAsBzU,EAAKnB,QAAhC,CAIA,IAAMt4B,EAASjY,IAAAA,QAAU0xC,EAAK6a,UAAU,SAAA5xB,GAAI,OAAIA,EAAKp4B,SAAW4V,EAAKhV,EAAE,IACjEs7B,EAAUsuB,GAA0BnyC,KAAK82B,EAAMyU,EAAoBnmD,IAAAA,OAAS,CAChFwG,KAAAA,EACAqlC,iBAAAA,EACArZ,gBAAAA,EACAjwB,OAAQ4V,EAAKhV,GACbgN,aAAAA,EACAoK,UAAWm3B,EAAK2a,UAAUn0C,MAAMD,GAAQ+2C,sBACxC50C,MAAItZ,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACCsZ,GAAI,IACP60C,MAAOC,EAAAA,EACPhD,qBAAAA,GACA/iC,aAAAA,EAAAA,UAEF4gB,cAAe,CACb31B,eAAgB,WAAF,OAAQs9B,EAAK8a,UAAUt0C,KAAK,GAE5C/M,gBAAAA,EACAgI,MAAOu+B,EAAKv+B,MACZukB,QAASga,EAAKha,QACdpgB,kBAAmBo6B,EAAKp6B,mBACvBo6B,EAAKyd,YAAah3C,EAAKlV,UAE1ByuC,EAAK6a,SAASt0C,GAAQwmB,QAAUA,EAChCiT,EAAK2a,UAAU+C,cAAcn3C,EAAQwmB,EA1BrC,CA2BF,GACF,CAEO,IAAM4wB,GAAS,SAAAtP,GAAA,SAAAsP,IAAA,OAAAl1C,EAAAA,EAAAA,GAAA,KAAAk1C,IAAAh1C,EAAAA,EAAAA,GAAA,KAAAg1C,EAAA5hD,UAAA,QAAAqN,EAAAA,EAAAA,GAAAu0C,EAAAtP,IAAAhlC,EAAAA,EAAAA,GAAAs0C,EAAA,EAAAlvD,IAAA,aAAA2D,MACpB,SAAUd,GAcN,IAADm4C,EAAA,KAbDxhC,EAAU3W,EAAV2W,WACA00C,EAAerrD,EAAfqrD,gBACAG,EAAWxrD,EAAXwrD,YACArjD,EAAenI,EAAfmI,gBACAi6C,EAAcpiD,EAAdoiD,eACAoB,EAAkBxjD,EAAlBwjD,mBACAsG,EAAQ9pD,EAAR8pD,SACA+B,EAAS7rD,EAAT6rD,UACA17C,EAAKnQ,EAALmQ,MACAkP,EAAYrf,EAAZqf,aACAqV,EAAO10B,EAAP00B,QAAO43B,EAAAtsD,EACP+tC,eAAAA,OAAc,IAAAue,GAAQA,EACtBh4C,EAAiBtU,EAAjBsU,kBAEAkC,KAAKlC,kBAAoBA,EACzBkC,KAAKrO,gBAAkBA,EACvBqO,KAAKG,WAAaA,EACd3E,EAAAA,EAAM9F,IAAI,eACZsK,KAAKpY,gBAAkB,WACd4T,EAAAA,EAAM9F,IAAI,cACnBsK,KAAKpY,gBAAkB,UAEvBoY,KAAKpY,gBAAkB,WAEzBoY,KAAK60C,gBAAkBA,EACvB70C,KAAKg1C,YAAcA,EACnBh1C,KAAKszC,SAAWA,EAChBtzC,KAAKq1C,UAAYA,EACjBr1C,KAAKrG,MAAQA,EACbqG,KAAKke,QAAUA,EACfle,KAAKsyB,YAAayjB,EAAAA,EAAAA,iBAAgB/1C,KAAKke,QAAS0zB,IAChD5xC,KAAK6I,aAAeA,EACpB7I,KAAKpF,eAAiBgxC,EAGtB5rC,KAAKgzC,UAAY,IAAIpG,EAAAA,EAAU,CAC7BhlD,gBAAiBoY,KAAKpY,gBACtB6d,YAAAA,EAAAA,EACA8I,MAAAA,EAAAA,QACAjd,IAAAA,EAAAA,QACAw7C,YAAAA,GACAjkD,YAAAA,GACAkkD,wBAAAA,EAAAA,QACApmC,gBAAAA,EAAAA,QACAC,UAAAA,EAAAA,QACAglC,eAAAA,EACAoB,mBAAAA,EACAnkC,aAAAA,EACAhhB,aAAcmY,KAAKnY,eAIrBmY,KAAKg2C,YAAch2C,KAAKgzC,UAAU5jC,QAAQ1X,MAAK,WAE7CiqC,EAAK50C,YAAc40C,EAAKqR,UAAUt9C,IAAI,cACxC,IAGAsK,KAAKxE,MAAQ,GACbwE,KAAK21C,YAAc,CAAC,EACpB31C,KAAKi2C,YAAa,EAElBj2C,KAAKu3B,eAAiBA,CACxB,GAAC,CAAA5wC,IAAA,eAAA+O,IAED,WACE,IAAI7N,EAAemY,KAAKg1C,aAAeh1C,KAAKg1C,YAAYntD,aAIxD,OAHImY,KAAKrO,kBACP9J,EAAerB,IAAAA,MAAQwZ,KAAKrO,iBAAiB+C,OAAO,gBAAgBpK,SAE/DzC,CACT,GAAC,CAAAlB,IAAA,YAAA+O,IAED,WACE,MAAO,WACT,GAAC,CAAA/O,IAAA,SAAA+O,IAED,WACE,MAAO,CACL,oDAAqDsK,KAAKk2C,YAC1D,wDAAyDl2C,KAAKm2C,yBAC9D,iCAAkCn2C,KAAKo2C,kBAE3C,GAAC,CAAAzvD,IAAA,2BAAA2D,MAED,SAAwB6oB,GAAiB,IAAdjpB,EAASipB,EAATjpB,UAEzB8V,KAAKxE,MAAM4N,KAAK,CAAElf,UAAAA,IAClB8V,KAAKq2C,oBACP,GAAC,CAAA1vD,IAAA,uBAAA2D,MAED,SAAoBqpB,GAA4B,IAAzBpjB,EAAMojB,EAANpjB,OAAQ1I,EAAY8rB,EAAZ9rB,aAC7BmY,KAAKxE,MAAM4N,KAAK,CAAE7Y,OAAAA,EAAQ1I,aAAAA,IAC1BmY,KAAKq2C,oBACP,GAAC,CAAA1vD,IAAA,mBAAA2D,MAED,SAAiBwyC,GACf98B,KAAK21C,YAAc7Y,CACrB,GAAC,CAAAn2C,IAAA,qBAAA2D,MAED,WAAsB,IAADgsD,EAAA,KAEdt2C,KAAKi2C,aACRzvD,IAAAA,OAAQ,WACN8vD,EAAKC,gBACLD,EAAKL,YAAa,CACpB,IACAj2C,KAAKi2C,YAAa,EAEtB,GAAC,CAAAtvD,IAAA,gBAAA2D,MAED,WACE,GAA0B,IAAtB0V,KAAKxE,MAAMzP,OAAf,CAKA,IAAMyqD,EAAShwD,IAAAA,OACbwZ,KAAKxE,OACL,SAACgtB,EAAMrH,GAAI,OAAK36B,IAAAA,OAASgiC,EAAMrH,EAAK,IAItC36B,IAAAA,KAAOwZ,KAAK+yC,UAAU,SAACp0C,GACjBA,EAAKsmB,SACPtmB,EAAKsmB,QAAQwxB,YAAYD,EAE7B,IAGAx2C,KAAK21C,YAAcnvD,IAAAA,OAASwZ,KAAK21C,YAAaa,GAG9ChJ,GACE,uBAAuB,eAADrlD,QACN3B,IAAAA,QAAUwZ,KAAK21C,YAAYplD,UAAY/J,IAAAA,QAAUwZ,KAAK21C,YAAYplD,OAAOkB,OAAM,eAAAtJ,QAAe3B,IAAAA,QAAUwZ,KAAK21C,YAAYzrD,aAAe1D,IAAAA,QAAUwZ,KAAK21C,YAAYzrD,UAAUG,YAI/L2V,KAAKxE,MAAMzP,OAAS,CAzBpB,CA0BF,GAAC,CAAApF,IAAA,eAAA2D,MAED,WACE,GAAI0V,KAAKpX,OAAOkgD,QAAS,CAEnB9oC,KAAK8oC,SACP9oC,KAAK8oC,QAAQjO,SAGf,IAAM6b,EAAelwD,IAAAA,IAAMwZ,KAAKpX,OAAOkgD,QAAQ1Y,OAAO,SAAAjP,GAAI,OAAI36B,IAAAA,OAAS26B,EAAM,CAC3E/a,KAAMnc,GAAKO,UAAU22B,EAAK6nB,UAC1B,IAEFhpC,KAAK8oC,QAAU,IAAI6N,EAAAA,YAAY,CAC7BC,UAAWpwD,IAAAA,SAAW,sBACtB4pC,MAAOsmB,IACNhgB,SAGH12B,KAAK8oC,QAAQ3hD,OAAO,CAClBwC,GAAIqW,KAAKpX,OAAOkgD,QAAQxO,IAAIyO,cAC5BjoB,QAASmzB,GAAgBnc,KAAK93B,MAC9B62C,SAAU,CAAC,YAAa,eAAgB,oBAAqB,oBAG/D72C,KAAKoC,EAAE,uBAAuB08B,OAAO9+B,KAAK8oC,QAAQlnC,GACpD,CACF,GAAC,CAAAjb,IAAA,iBAAA2D,MAED,WAAkB,IAADwsD,EAAA,KAEf92C,KAAK+2C,eAAiBvwD,IAAAA,IAAMwZ,KAAKgzC,UAAUt0C,OAAO,SAACC,GACjD,IAAAq4C,EAKIF,EAAK9D,UAAUuC,oBAAoB52C,EAAKhV,IAJ1C2iD,EAAQ0K,EAAR1K,SACAE,EAAUwK,EAAVxK,WACAyK,EAAmBD,EAAnBC,oBACAnL,EAAUkL,EAAVlL,WAEEnpB,EAAQ,GAIZ,OAHI2pB,IACF3pB,EAAQmpB,EAAagL,EAAK54B,QAAQ1zB,UAAU8hD,GAAYriD,GAAKO,UAAU8hD,IAElE,CACLvjD,OAAQ4V,EAAKhV,GACbg5B,MAAAA,EACA6pB,WAAAA,EACA/iD,QAASkV,EAAKlV,QACdwtD,oBAAAA,EAEJ,IACAj3C,KAAK6yC,UAAY,IAAIqE,EAAAA,UAAU,CAC7BtuD,OAAQpC,IAAAA,SAAW,CACjB2wD,YAAan3C,KAAKpX,OAAOu/C,mBACzBiP,MAAOp3C,KAAKpX,OAAOw/C,aACnBiP,oBAAqBr3C,KAAKpX,OAAOy/C,6BAEnCp+C,KAAM+V,KAAKsyB,WACXgW,cAAetoC,KAAKpX,OAAO0/C,cAC3BgP,aAAcl1C,IAAE,kBAAkBvM,aAAei7C,GAAAA,IAChDpa,SAGH,IAAMkc,EAAS5yC,KAAK6yC,UAAU0E,IAAI/wD,IAAAA,IAAMwZ,KAAK+2C,gBAAgB,SAAAxzC,GAAI,OAAI/c,IAAAA,MAAQ+c,GAAMgwB,KAAK,CAAC,QAAS,UAAW,eAAeikB,OAAO,CAAEC,aAAcjxD,IAAAA,KAAO+c,EAAK0zC,qBAAuB,IAAK3sD,OAAO,IAAG,CAAEotD,QAAQ,IAG/M13C,KAAK+yC,SAAW,CAAC,EACjBvsD,IAAAA,IAAMosD,GAAQ,SAACjpD,EAAIiG,GACjBknD,EAAK/D,SAASppD,GAAMmtD,EAAKC,eAAennD,EAC1C,GAAGoQ,MAGHA,KAAKozC,oBAAqBrC,EAAAA,GAAAA,GAAqB,CAC7CnoD,OAAQoX,KAAKpX,OACb8V,MAAOsB,KAAKgzC,UAAUt0C,MACtBi5C,eAAAA,EAAAA,EACAhxC,gBAAAA,EAAAA,QACAC,UAAAA,EAAAA,QACAoqC,YAAY,IAEdhxC,KAAKkzC,uBAAyB1sD,IAAAA,MAAQwZ,KAAKgzC,UAAUt0C,OAClDyT,MAAMnS,KAAKozC,oBACXvJ,MAAM,MACNv/C,QAEC9D,IAAAA,QAAUwZ,KAAKkzC,0BACjBlzC,KAAKG,WAAWC,KAAK,CAAE+yC,kBAAmBnzC,KAAKozC,qBAC/Ch8B,EAAAA,UAAUi8B,YAAYrzC,KAAKszC,WAGG,YAA5BtzC,KAAKpX,OAAOs/C,aACdloC,KAAK43C,cAIP53C,KAAK6yC,UAAU5xC,GAAG,qBAAqB,WACrC,IAAM42C,EAAgBrxD,IAAAA,MAAQswD,EAAK9D,UAAUt0C,MAAO,MAC9Co5C,EAAWtxD,IAAAA,IAAMswD,EAAKjE,UAAUC,YAAY,SAAAnpD,GAAE,OAAImtD,EAAK/D,SAASppD,GAAIZ,MAAM,IAEhFykD,GAAqB,cAAc,mBAADrlD,OAAqB0vD,EAAcr0C,KAAK,MAAK,iBAAArb,OAAgB2vD,EAASt0C,KAAK,MAAK,MAClHhd,IAAAA,MAAQmsD,GAAuB7a,KAAKgf,IACpCA,EAAKiB,mBACP,IAEA/3C,KAAK6yC,UAAU5xC,GAAG,iBAAiB,WACjCgzC,GAAgB7yC,KAAK01C,EAAM,CAAE3C,UAAU,GACzC,GAAGn0C,MAEHA,KAAK6yC,UAAU5xC,GAAG,cAAc,SAAC0W,GAC/B,IAAMqgC,EAAUxxD,IAAAA,IACdmxB,EAAE2iB,KACF,SAAA3wC,GAAE,OAAKnD,IAAAA,IAAMswD,EAAK/D,SAAUppD,GAAMmtD,EAAK/D,SAASppD,GAAIZ,OAAS,IAAI,IAGnEykD,GAAqB,oBAAqBhnD,IAAAA,QAAUwxD,IAIpDxxD,IAAAA,MAAQmsD,GAAuB7a,KAAKgf,IAEpCA,EAAKiB,mBACP,GAAG/3C,MAEHA,KAAK6yC,UAAU5xC,GAAG,gBAAgB,SAAC0W,GACjC61B,GAAqB,cAGjBhnD,IAAAA,IAAMswD,EAAK/D,SAAUp7B,EAAEhuB,MACzBmtD,EAAK/D,SAASp7B,EAAEhuB,IAAI6iD,WAAasK,EAAK/D,SAASp7B,EAAEhuB,IAAI6iD,YAAc,CAAC,EACpEsK,EAAK/D,SAASp7B,EAAEhuB,IAAI6iD,WAAW70B,EAAEhxB,KAAOmwD,EAAK/D,SAASp7B,EAAEhuB,IAAI6iD,WAAW70B,EAAEhxB,MAAQ,CAAC,EAClFmwD,EAAK/D,SAASp7B,EAAEhuB,IAAI6iD,WAAW70B,EAAEhxB,KAAKmkC,MAAQnT,EAAEmT,MAEhDtkC,IAAAA,MAAQmsD,GAAuB7a,KAAKgf,IAExC,GAAG92C,MAEHA,KAAK6yC,UAAU5xC,GAAG,gBAAgB,SAAC0W,GACjC,IAAMqgC,EAAUxxD,IAAAA,IAAMmxB,EAAE2iB,KAAK,SAAC3wC,GAC5B,IAAIZ,EAASvC,IAAAA,IAAMswD,EAAK/D,SAAUppD,GAAMmtD,EAAK/D,SAASppD,GAAIZ,OAAS,KAUnE,MARe,kBAAXA,IAEAA,EAD2B,YAAzB+tD,EAAKlvD,gBACE,oCAEA,4BAINmB,CACT,IAEAykD,GAAqB,yBAA0BhnD,IAAAA,QAAUwxD,IAIzDxxD,IAAAA,KAAOmxB,EAAE2iB,KAAK,SAAC3wC,GACTnD,IAAAA,IAAMswD,EAAK/D,SAAUppD,WAChBmtD,EAAK/D,SAASppD,EAEzB,GAAGmtD,GAGHtwD,IAAAA,MAAQmsD,GAAuB7a,KAAKgf,IACpCA,EAAKiB,mBACP,GAAG/3C,MAEHA,KAAKoC,EAAE,0BAA0B08B,OAAO9+B,KAAK6yC,UAAUhjB,KACvDrpC,IAAAA,OAAQ,WACNswD,EAAKjE,UAAUvyC,QAAQ,WACzB,IAGA9Z,IAAAA,KAAOA,IAAAA,MAAQwZ,KAAKgzC,UAAUt0C,MAAOsB,KAAKozC,qBAAqB,SAACz0C,GAC9Du2C,GAAkB9zC,KAAK01C,EAAM,CAC3Bn4C,KAAAA,EACA02C,UAAWyB,EAAKzB,UAChB1+C,cAAc,EACdhF,gBAAiBmlD,EAAKnlD,iBAE1B,IAGA,IAAMsmD,EAA2BzxD,IAAAA,MAAO,WAClCswD,EAAK/f,SAITvwC,IAAAA,KACEA,IAAAA,KAAOswD,EAAK9D,UAAUt0C,MAAOo4C,EAAK9D,UAAUt0C,MAAM3S,OAAS+qD,EAAK1D,qBAChE,SAACz0C,GACCu2C,GAAkB9zC,KAAK01C,EAAM,CAC3Bn4C,KAAAA,EACAhI,cAAc,EACdhF,gBAAiBmlD,EAAKnlD,iBAE1B,GAEJ,IAEMumD,EAAkC,WAAH,OAASC,EAAAA,EAAAA,IAAoB3oD,SAAS4oD,uBAAuB,oCAAqC,EACvIhhC,EAAAA,UAAUC,iBAAiB3f,MAAK,WAC9B,IAAKo/C,EAAK/f,QAAS,CACjBkhB,EAAyB72C,KAAK01C,GAC9BtwD,IAAAA,KAAOA,IAAAA,KAAOswD,EAAK/D,WAAW,SAACpsD,GAC7BmwD,EAAKjE,UAAUwF,0BAA0B1xD,EAAKmwD,EAAK/D,SAASpsD,GAAKswD,oBACnE,IAEA,IAAMqB,EAAqB9oD,SAASC,cAAc,qBAC5C8oD,EAA4B/oD,SAASC,cAAc,8BAErD6oD,GACFA,EAAmBE,WAAW71C,iBAAiB,SAAUu1C,GAGvDK,GACFA,EAA0B51C,iBAAiB,SAAUu1C,EAEzD,CACF,IAEAl4C,KAAKy4C,mBAAqB,WACxBR,EAAyBngB,KAAKgf,EAA9BmB,GACAC,GACF,EACAtiD,OAAO+M,iBAAiB,SAAU3C,KAAKy4C,oBACvC7iD,OAAO+M,iBAAiB,SAAU3C,KAAKy4C,oBACvCr2C,IAAE,kBAAkBw6B,SAAS37B,GAAG,SAAUg3C,EAAyBngB,KAAK93B,MAC1E,GAAC,CAAArZ,IAAA,UAAA2D,MAED,SAAQ0tD,GAAU,IAADU,EAAA,KACf,GAAKlyD,IAAAA,QAAUwxD,IAA+B,IAAnBA,EAAQjsD,OAAnC,CAIA,IAAM4sD,EAAYnyD,IAAAA,IAAMwxD,GAAS,SAACjvD,GAChC,IAAA6vD,EAIIF,EAAK1F,UAAUuC,oBAAoBxsD,GAHrCujD,EAAQsM,EAARtM,SACAE,EAAUoM,EAAVpM,WACAyK,EAAmB2B,EAAnB3B,oBAGF,MAAO,CACLt0B,MAAO2pB,EAAWriD,GAAKO,UAAU8hD,GAAY,GAC7CE,WAAAA,EACAyK,oBAAAA,EAEJ,IAEMrgD,EAAUoJ,KAAK6yC,UAAU0E,IAAIoB,GAEnCnyD,IAAAA,KAAOoQ,GAAS,SAAC6H,EAAQ7O,GAEvB8oD,EAAK3F,SAASt0C,GAAUjY,IAAAA,OAAS,CAAC,EAAG,CACnCuC,OAAQivD,EAAQpoD,GAChB+yB,MAAOg2B,EAAU/oD,GAAO+yB,MACxB6pB,WAAYmM,EAAU/oD,GAAO48C,WAC7ByK,oBAAqB0B,EAAU/oD,GAAOqnD,qBAE1C,IAEAzwD,IAAAA,KAAOwxD,GAAS,SAACjvD,GACfmsD,GAAkB9zC,KAAKs3C,EAAM,CAC3B/5C,KAAM,CAAEhV,GAAIZ,GACZ4N,cAAc,EACdqiB,iBAAiB,EACjBrnB,gBAAiB+mD,EAAK/mD,iBAE1B,GAnCA,CAoCF,GAAC,CAAAhL,IAAA,aAAA2D,MAED,SAAW0tD,GAAU,IAADa,EAAA,KAClB,GAAKryD,IAAAA,QAAUwxD,IAA+B,IAAnBA,EAAQjsD,OAAnC,CAIA,IAAM6K,EAAUpQ,IAAAA,IACdwxD,GACA,SAAAjvD,GAAM,OAAIvC,IAAAA,QAAUqyD,EAAK9F,UAAU,SAAA5xB,GAAI,OAAIA,EAAKp4B,SAAWA,CAAM,GAAC,IAIpEiX,KAAK6yC,UAAUiG,OAAOliD,GACtBwgB,EAAAA,UAAUi8B,YAAYrzC,KAAKszC,SAT3B,CAUF,GAAC,CAAA3sD,IAAA,qBAAA2D,MAED,WAKE,GAJI0V,KAAKgzC,UAAUjD,8BACjB/vC,KAAKoC,EAAE,IAADja,OAAK6X,KAAKpX,OAAOkgD,QAAQxO,IAAIyO,gBAAiBjK,OAAOia,IAAmB,CAAE9uD,KAAAA,MAChFujD,GAAqB,wBAAyB,kEAE5CxtC,KAAKgzC,UAAU9D,kBAAmB,CACpC,IAAI8J,EAEJ,GAAIh5C,KAAKgzC,UAAU9D,kBAAkBnjD,OAAS,EAC5CitD,EAAc/uD,GAAKO,UAAU,qBAAsBwV,KAAKgzC,UAAU9D,kBAAkBnjD,aAC/E,GAAgD,IAA5CiU,KAAKgzC,UAAU9D,kBAAkBnjD,OAAc,CACxD,IAAyBktD,EACvBj5C,KAAKgzC,UAAUuC,oBAAoBv1C,KAAKgzC,UAAU9D,kBAAkB,IAD9DlD,gBAEiBkN,EACvBl5C,KAAKgzC,UAAUuC,oBAAoBv1C,KAAKgzC,UAAU9D,kBAAkB,IAD9DlD,gBAGRgN,EAAc/uD,GAAKO,UAAU,sBAAuBP,GAAKO,UAAUyuD,GAAYhvD,GAAKO,UAAU0uD,GAChG,MAAO,GAAgD,IAA5Cl5C,KAAKgzC,UAAU9D,kBAAkBnjD,OAAc,CACxD,IAAyBugD,EACvBtsC,KAAKgzC,UAAUuC,oBAAoBv1C,KAAKgzC,UAAU9D,kBAAkB,IAD9DlD,gBAGRgN,EAAc/uD,GAAKO,UAAU,iBAAkBP,GAAKO,UAAU8hD,GAChE,CAEA,IAAM6M,EAAalvD,GAAKO,UAAU,uBAAwBwuD,GAC3Bh5C,KAAKoC,EAAE,+BAEfqxB,KAAK2lB,IAAsB,CAChDnvD,KAAAA,GACAkvD,WAAAA,KAGFn5C,KAAKq5C,UAAY7yD,IAAAA,KAAOwZ,KAAKgzC,UAAU9D,mBACvC1B,GAAqB,wBAAwB,4BAADrlD,OAA8B6X,KAAKgzC,UAAU9D,kBAAkB1rC,KAAK,OAClH,CACF,GAAC,CAAA7c,IAAA,cAAA2D,MAED,WACE,IAAMgvD,EAAa1wD,EAAAA,QAAO8M,IAAI,mBACxB6jD,EAAkBv5C,KAAKoC,EAAE,4BACzBo3C,EAAsB/G,GAAWjoD,UAAU,cAADrC,OAAemxD,IAE/DC,EAAgB9lB,KAAKgmB,IAAe,CAClCxvD,KAAAA,GACAuvD,oBAAAA,EACA7U,oBAAAA,EAAAA,sBAEJ,GAAC,CAAAh+C,IAAA,8BAAA2D,MAED,SAA4BJ,GAAY,IAKlCyrB,EALiC+jC,EAAA,KACR,aAAzB15C,KAAKpY,kBAMLpB,IAAAA,QAAUwZ,KAAKgzC,UAAUt0C,SAG3BiX,EAAQ,CAAC,YAGXC,EAAAA,EAAAA,kBAAiB,CACf7kB,UAAWO,EAAAA,QAAIO,gBAAgBC,SAC/B5H,UAAAA,EACA2O,OAAAA,EAAAA,QACAiC,SAAAA,EAAAA,EACA6a,MAAAA,EACA/a,eAAgB,WAAF,OAAQ8+C,EAAK1G,UAAUt0C,KAAK,EAC1CiI,gBAAAA,EAAAA,QACAC,UAAAA,EAAAA,QACA/d,YAAAA,GACAggB,aAAc7I,KAAK6I,eAClBnR,MAAK,SAACiiD,GACP,IAAIC,GAAuB,EAK3B,GAJIpzD,IAAAA,KAAOmzD,EAAI1gC,QAAQ,SAAA4gC,GAAK,MAAmB,0BAAfA,EAAMC,IAAgC,MACpEF,GAAuB,GAGrBA,EAAsB,CACxBF,EAAKt3C,EAAE,+BAA+BqxB,KAAK,IAC3CimB,EAAKt3C,EAAE,uBAAuBqxB,KAAK,IACnCimB,EAAKt3C,EAAE,0BAA0BqxB,KAAK,IAEtC,IAAMsmB,EAAmBL,EAAKt3C,EAAE,0BAC1B43C,EAAiBt0C,EAAAA,EAAaE,YAAY,uBAC1Cq0C,EAAW,YAAA9xD,OAAe6xD,EAAc,MAAA7xD,OAAK8B,GAAKO,UAAU,2BAA0B,QACtF0vD,EAAUjwD,GAAKO,UAAU,4BAA6ByvD,GAE5DF,EAAiBjb,OAAOqb,KAAuB,CAAED,QAAAA,KACjD9iC,EAAAA,UAAUi8B,YAAYqG,EAAKpG,SAC7B,CACF,IACF,GAAC,CAAA3sD,IAAA,SAAA2D,MAED,WAAU,IAAD8vD,EAAA,KAwCP,OAvCAp6C,KAAK6vB,IAAI4D,KAAK1W,IAAS,CAAC,IAExBv2B,IAAAA,OAAQ,WACD4zD,EAAKrjB,SACRyW,GAAqB,yCAAyC,+BAADrlD,OAAiCiyD,EAAKxyD,iBAEvG,GAAG,KAEHoY,KAAKg2C,YAAYt+C,MAAK,WACpB0iD,EAAKxxD,OAASwxD,EAAKpH,UAAUpqD,OAG7BwxD,EAAKC,eAE2B,YAA5BD,EAAKxxD,OAAOs/C,aACdkS,EAAKE,iBAELF,EAAKvH,UAAUzwC,EAAE,yBAAyBg5B,IAAI,SAAU,aAExDwZ,GAAYxzC,KAAKg5C,GAGjBA,EAAKG,aAAe5iD,IAAAA,IAAY,CAC9ByiD,EAAKtF,WAAWr5C,UACf++C,QAAO,SAACtwD,GACTkwD,EAAKK,iBAAiB,CACpBvwD,UAAAA,EACAqG,OAAQ6pD,EAAKpF,YAAcoF,EAAKpF,YAAYzkD,YAASpH,EACrDtB,aAAcuyD,EAAKpF,YAAcoF,EAAKpF,YAAYntD,kBAAesB,IAEnEixD,EAAKE,iBACLF,EAAKM,qBACAN,EAAK7iB,gBACR6iB,EAAKO,4BAA4BzwD,EAErC,IAEJ,IAEO8V,IACT,GAAC,CAAArZ,IAAA,cAAA2D,MAED,WAAe,IAADswD,EAAA,KACZp0D,IAAAA,KAAOwZ,KAAK+yC,UAAU,SAAAp0C,GAAI,OAAIA,EAAK5V,SAAW6xD,EAAKvB,SAAS,IAAEp0B,QAAQrjB,GAAGi5C,eAAe,CAAEC,SAAU,WACpGtN,GAAqB,wBAAyB,iDAChD,GAAC,CAAA7mD,IAAA,oBAAA2D,MAED,WACE0V,KAAKoC,EAAE,+BAA+BgqC,MACxC,GAAC,CAAAzlD,IAAA,2BAAA2D,MAED,WACE0V,KAAK+3C,oBACLvK,GAAqB,wBAAyB,qDAChD,GAAC,CAAA7mD,IAAA,oBAAA2D,MAED,SAAkBoc,GAChB,SAAIA,KAA2B,IAAjBA,EAAMU,QACpBV,EAAMW,SACNX,EAAMY,UACNZ,EAAMa,QACNb,EAAMc,YAIN9B,EAAAA,EAAamC,gBAAgB,wBACtB,EACT,GAAC,CAAAlhB,IAAA,SAAA2D,MAED,WACM0V,KAAK8oC,SACP9oC,KAAK8oC,QAAQjO,SAGX76B,KAAK8zC,aACP9zC,KAAK8zC,YAAYjZ,SAGf76B,KAAK6yC,WACP7yC,KAAK6yC,UAAUhY,SAGb76B,KAAKy4C,qBACP7iD,OAAOgN,oBAAoB,SAAU5C,KAAKy4C,oBAC1C7iD,OAAOgN,oBAAoB,SAAU5C,KAAKy4C,qBAG5Cz4C,KAAK+2B,SAAU,GAEfj0B,EAAAA,EAAAA,GAAA+yC,EAAA,gBAAA/yC,CAAA,GACF,IAAC,CApmBmB,CAAS0jC,IAAAA,M,wBC9QlBuU,GAAa,SAAAxU,GAAA,SAAAwU,IAAA,OAAAp6C,EAAAA,EAAAA,GAAA,KAAAo6C,IAAAl6C,EAAAA,EAAAA,GAAA,KAAAk6C,EAAA9mD,UAAA,QAAAqN,EAAAA,EAAAA,GAAAy5C,EAAAxU,IAAAhlC,EAAAA,EAAAA,GAAAw5C,EAAA,EAAAp0D,IAAA,aAAA2D,MACxB,SAAUzD,GAcN,IAbFsZ,EAAUtZ,EAAVsZ,WACA00C,EAAehuD,EAAfguD,gBACAG,EAAWnuD,EAAXmuD,YACArjD,EAAe9K,EAAf8K,gBAAeg6C,EAAA9kD,EACf+kD,eAAAA,OAAc,IAAAD,EAAG,KAAIA,EACrBqB,EAAkBnmD,EAAlBmmD,mBACAsG,EAAQzsD,EAARysD,SAAQ0H,EAAAn0D,EACRwuD,UAAAA,OAAS,IAAA2F,EAAG,KAAIA,EAChBrhD,EAAK9S,EAAL8S,MACAkP,EAAYhiB,EAAZgiB,aACAqV,EAAOr3B,EAAPq3B,QAAO+8B,EAAAp0D,EACP0wC,eAAAA,OAAc,IAAA0jB,GAAQA,EACtBn9C,EAAiBjX,EAAjBiX,kBAEAkC,KAAKG,WAAaA,EAClBH,KAAK60C,gBAAkBA,EACvB70C,KAAKg1C,YAAcA,EACnBh1C,KAAKrO,gBAAkBA,EACvBqO,KAAKszC,SAAWA,EAChBtzC,KAAKG,WAAWsB,WAChBzB,KAAK4rC,eAAiBA,EACtB5rC,KAAKgtC,mBAAqBA,EAC1BhtC,KAAKq1C,UAAYA,EACjBr1C,KAAKrG,MAAQA,EACbqG,KAAKu3B,eAAiBA,EACtBv3B,KAAK6I,aAAeA,EACpB7I,KAAKke,QAAUA,EACfle,KAAKlC,kBAAoBA,EACzBkC,KAAKk7C,iBACP,GAAC,CAAAv0D,IAAA,kBAAA2D,MAED,WACE0V,KAAKm7C,UAAY,IAAItF,GAAU,CAC7B7oD,KAAMg7C,EAAAA,EAAgBE,YACtB/nC,WAAYH,KAAKG,WACjB00C,gBAAiB70C,KAAK60C,gBACtBG,YAAah1C,KAAKg1C,YAClBrjD,gBAAiBqO,KAAKrO,gBACtBi6C,eAAgB5rC,KAAK4rC,eACrBoB,mBAAoBhtC,KAAKgtC,mBACzBsG,SAAUtzC,KAAKszC,SACf+B,UAAWr1C,KAAKq1C,UAChB17C,MAAOqG,KAAKrG,MACZkP,aAAc7I,KAAK6I,aACnBqV,QAASle,KAAKke,QACdqZ,eAAgBv3B,KAAKu3B,eACrBz5B,kBAAmBkC,KAAKlC,mBAE5B,GAAC,CAAAnX,IAAA,eAAA2D,MAED,WACO0V,KAAKo7C,YACRp7C,KAAKm7C,UAAUtgB,SACf76B,KAAKk7C,kBACLl7C,KAAK6vB,IAAI4D,KAAK1W,QAEd/c,KAAK6vB,IAAIiP,OAAO9+B,KAAKm7C,UAAUtrB,KAC/B7vB,KAAKm7C,UAAUzkB,SAEnB,GAAC,CAAA/vC,IAAA,cAAA2D,MAED,WACE0V,KAAKq7C,cACP,GAAC,CAAA10D,IAAA,aAAA2D,MAED,SAAUpD,GAAoB,IAAjB2hB,EAAY3hB,EAAZ2hB,aACX7I,KAAK6I,aAAeA,EACpB7I,KAAKq7C,cACP,GAAC,CAAA10D,IAAA,SAAA2D,MAED,WASE,OARA0V,KAAKG,WAAWuB,aAGhB1B,KAAK6vB,IAAI4D,KAAK1W,QAEd/c,KAAK6vB,IAAIiP,OAAO9+B,KAAKm7C,UAAUtrB,KAC/B7vB,KAAKm7C,UAAUzkB,SAER12B,IACT,GAAC,CAAArZ,IAAA,SAAA2D,MAED,WACE0V,KAAKm7C,UAAUtgB,SACf76B,KAAK6vB,IAAIgL,SACT76B,KAAKo7C,WAAY,CACnB,IAAC,CAxFuB,CAAS5U,IAAAA,K,+FCH5B,SAASiH,EAAuB5mD,GAInC,IAHFkmD,EAAuBlmD,EAAvBkmD,wBACAnmC,EAAS/f,EAAT+f,UACAD,EAAe9f,EAAf8f,gBAEM20C,EAAmB,CACvBC,iBAAkB,CAChB1jD,SAAUk1C,EAAwByO,aAAaD,iBAC/CxjD,SAAUg1C,EAAwB0O,aAAaF,kBAEjDG,uCAAwC,CACtC7jD,SAAUk1C,EAAwByO,aAAaE,uCAC/C3jD,SAAUg1C,EAAwB0O,aAAaC,wCAEjDC,yBAA0B,CACxB9jD,SAAUk1C,EAAwByO,aAAaG,yBAC/C5jD,SAAUg1C,EAAwB0O,aAAaE,0BAEjDC,kBAAmB,CACjB/jD,SAAUk1C,EAAwByO,aAAaI,kBAC/C7jD,SAAUg1C,EAAwB0O,aAAaG,mBAEjDC,2BAA4B,CAC1BhkD,SAAUk1C,EAAwByO,aAAaK,2BAC/C9jD,SAAUg1C,EAAwB0O,aAAaI,4BAEjDC,uBAAwB,CACtBjkD,SAAUk1C,EAAwByO,aAAaM,uBAC/C/jD,SAAUg1C,EAAwB0O,aAAaK,wBAEjDC,YAAa,CACXlkD,SAAUk1C,EAAwByO,aAAaO,YAC/ChkD,SAAUg1C,EAAwB0O,aAAaM,aAEjDC,WAAY,CACVnkD,SAAUk1C,EAAwByO,aAAaQ,WAC/CjkD,SAAUg1C,EAAwB0O,aAAaO,YAEjDC,SAAU,CACRpkD,SAAUk1C,EAAwByO,aAAaS,SAC/ClkD,SAAUg1C,EAAwB0O,aAAaQ,UAEjDC,+BAAgC,CAC9BrkD,SAAUk1C,EAAwByO,aAAaU,+BAC/CnkD,SAAUg1C,EAAwB0O,aAAaS,gCAEjDC,sBAAuB,CACrBtkD,SAAUk1C,EAAwByO,aAAaW,sBAC/CpkD,SAAUg1C,EAAwB0O,aAAaU,uBAEjDC,qBAAsB,CACpBvkD,SAAUk1C,EAAwByO,aAAaY,qBAC/CrkD,SAAUg1C,EAAwB0O,aAAaW,uBAInD,OAAO,SAA8BpvD,GAAkB,IAAZqvD,EAAIpoD,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAG,GAChD0S,EAAgB21C,cAAchB,EAAiBtuD,GAAM6K,UACrD8O,EAAgB41C,cAAcjB,EAAiBtuD,GAAM+K,UACjDvR,IAAAA,QAAU61D,GACR71D,IAAAA,KAAO61D,GAAQ,GACjB71D,IAAAA,KAAO61D,GAAM,SAAAG,GAAG,OAAI71C,EAAgBI,WAAW,CAACH,EAAUI,YAAYC,OAAQL,EAAUM,SAASC,KAAM,WAAYq1C,EAAI,IAEhHH,GACT11C,EAAgBI,WAAW,CAACH,EAAUI,YAAYC,OAAQL,EAAUM,SAASC,KAAM,WAAYk1C,EAEnG,CACF,C,6FCpEA,IAAMpyD,EAAO2L,OAAO00C,iBAAiB50C,IAAI,qEAE5B+mD,EAAW,CACtBC,WAAY,aACZC,YAAa,cACbC,gBAAiB,kBACjBC,UAAW,YACXC,UAAW,YACXC,UAAW,YACXC,cAAe,gBACfC,cAAe,gBACfC,aAAc,eACdC,aAAc,eACdC,eAAgB,iBAChBC,eAAgB,iBAChBC,IAAK,MACLC,wBAAyB,0BACzBC,gBAAiB,kBACjBC,iBAAkB,mBAClBC,iBAAkB,mBAClBC,iBAAkB,mBAClBC,YAAa,cACbC,YAAa,cACbC,kBAAmB,oBACnBC,SAAU,WACVC,SAAU,WACVC,YAAa,cACbC,YAAa,cACbC,gBAAiB,kBACjBC,gBAAiB,kBACjBC,WAAY,aACZC,WAAY,aACZC,eAAgB,iBAChBC,oBAAqB,sBACrBC,qBAAsB,uBACtBC,oBAAqB,sBACrBC,gCAAiC,kCACjCC,qCAAsC,uCACtCC,4BAA6B,8BAC7BC,eAAgB,iBAChBC,kBAAmB,qBAGRC,EAAa,CACxB,IAAK,CACHC,QAASxC,EAASC,WAClB/5B,MAAO14B,EAAKO,UAAU,uCACtB00D,YAAaj1D,EAAKO,UAAU,sCAC5B20D,SAAU,WACVC,SAAU,YACVC,SAAU,iBACVC,oBAAoB,GAEtB,IAAK,CACHL,QAASxC,EAASE,YAClBh6B,MAAO14B,EAAKO,UAAU,wCACtB00D,YAAaj1D,EAAKO,UAAU,uCAC5B20D,SAAU,cACVC,SAAU,QACVC,SAAU,iBACVC,oBAAoB,GAEtB,IAAK,CACHL,QAASxC,EAASG,gBAClBj6B,MAAO14B,EAAKO,UAAU,4CACtB00D,YAAaj1D,EAAKO,UAAU,2CAC5B20D,SAAU,cACVC,SAAU,QACVC,SAAU,sBAaZ,IAAK,CACHJ,QAASxC,EAASK,UAClBn6B,MAAO14B,EAAKO,UAAU,sCACtB00D,YAAaj1D,EAAKO,UAAU,qCAC5B20D,SAAU,WACVC,SAAU,YACVC,SAAU,gBAEZ,IAAK,CACHJ,QAASxC,EAASM,UAClBp6B,MAAO14B,EAAKO,UAAU,sCACtB00D,YAAaj1D,EAAKO,UAAU,qCAC5B20D,SAAU,WACVC,SAAU,YACVC,SAAU,gBAEZ,IAAK,CACHJ,QAASxC,EAASO,cAClBr6B,MAAO14B,EAAKO,UAAU,0CACtB00D,YAAaj1D,EAAKO,UAAU,yCAC5B20D,SAAU,4FACVC,SAAU,WACVC,SAAU,qBAEZ,IAAK,CACHJ,QAASxC,EAASQ,cAClBt6B,MAAO14B,EAAKO,UAAU,0CACtB00D,YAAaj1D,EAAKO,UAAU,yCAC5B20D,SAAU,WACVC,SAAU,YACVC,SAAU,qBAEZ,IAAK,CACHJ,QAASxC,EAASS,aAClBv6B,MAAO14B,EAAKO,UAAU,yCACtB00D,YAAaj1D,EAAKO,UAAU,wCAC5B20D,SAAU,2FACVC,SAAU,WACVC,SAAU,oBAEZ,IAAK,CACHJ,QAASxC,EAASU,aAClBx6B,MAAO14B,EAAKO,UAAU,yCACtB00D,YAAaj1D,EAAKO,UAAU,wCAC5B20D,SAAU,WACVC,SAAU,YACVC,SAAU,oBAEZ,IAAK,CACHJ,QAASxC,EAASW,eAClBz6B,MAAO14B,EAAKO,UAAU,2CACtB00D,YAAaj1D,EAAKO,UAAU,0CAC5B20D,SAAU,WACVC,SAAU,YACVC,SAAU,sBAEZ,IAAK,CACHJ,QAASxC,EAASY,eAClB16B,MAAO14B,EAAKO,UAAU,2CACtB00D,YAAaj1D,EAAKO,UAAU,0CAC5B20D,SAAU,mJACVC,SAAU,WACVC,SAAU,sBAEZ,IAAK,CACHJ,QAASxC,EAASa,IAClB36B,MAAO14B,EAAKO,UAAU,oCACtB00D,YAAaj1D,EAAKO,UAAU,mCAC5B20D,SAAU,WACVC,SAAU,YACVC,SAAU,eAEZ,IAAK,CACHJ,QAASxC,EAASc,wBAClB56B,MAAO14B,EAAKO,UAAU,oDACtB00D,YAAaj1D,EAAKO,UAAU,mDAC5B20D,SAAU,cACVC,SAAU,QACVC,SAAU,8BAEZ,IAAK,CACHJ,QAASxC,EAASe,gBAClB76B,MAAO14B,EAAKO,UAAU,4CACtB00D,YAAaj1D,EAAKO,UAAU,2CAC5B20D,SAAU,OACVC,SAAU,OACVC,SAAU,uBAEZ,IAAK,CACHJ,QAASxC,EAASgB,iBAClB96B,MAAO14B,EAAKO,UAAU,6CACtB00D,YAAaj1D,EAAKO,UAAU,4CAC5B20D,SAAU,WACVC,SAAU,YACVC,SAAU,uBAEZ,IAAK,CACHJ,QAASxC,EAASiB,iBAClB/6B,MAAO14B,EAAKO,UAAU,6CACtB00D,YAAaj1D,EAAKO,UAAU,4CAC5B20D,SAAU,cACVC,SAAU,QACVC,SAAU,uBAEZ,IAAK,CACHJ,QAASxC,EAASkB,iBAClBh7B,MAAO14B,EAAKO,UAAU,6CACtB00D,YAAaj1D,EAAKO,UAAU,4CAC5B20D,SAAU,WACVC,SAAU,YACVC,SAAU,uBAEZ,KAAM,CACJJ,QAASxC,EAASmB,YAClBj7B,MAAO14B,EAAKO,UAAU,wCACtB00D,YAAaj1D,EAAKO,UAAU,uCAC5B20D,SAAU,WACVC,SAAU,YACVC,SAAU,mBAEZ,KAAM,CACJJ,QAASxC,EAASoB,YAClBl7B,MAAO14B,EAAKO,UAAU,wCACtB00D,YAAaj1D,EAAKO,UAAU,uCAC5B20D,SAAU,kIACVC,SAAU,WACVC,SAAU,mBAEZ,KAAM,CACJJ,QAASxC,EAASqB,kBAClBn7B,MAAO14B,EAAKO,UAAU,8CACtB00D,YAAaj1D,EAAKO,UAAU,6CAC5B20D,SAAU,WACVC,SAAU,YACVC,SAAU,yBAEZ,KAAM,CACJJ,QAASxC,EAASsB,SAClBp7B,MAAO14B,EAAKO,UAAU,qCACtB00D,YAAaj1D,EAAKO,UAAU,oCAC5B20D,SAAU,wFACVC,SAAU,WACVC,SAAU,gBAEZ,KAAM,CACJJ,QAASxC,EAASuB,SAClBr7B,MAAO14B,EAAKO,UAAU,qCACtB00D,YAAaj1D,EAAKO,UAAU,oCAC5B20D,SAAU,WACVC,SAAU,YACVC,SAAU,gBAEZ,KAAM,CACJJ,QAASxC,EAASwB,YAClBt7B,MAAO14B,EAAKO,UAAU,wCACtB00D,YAAaj1D,EAAKO,UAAU,uCAC5B20D,SAAU,0FACVC,SAAU,WACVC,SAAU,mBAEZ,KAAM,CACJJ,QAASxC,EAASyB,YAClBv7B,MAAO14B,EAAKO,UAAU,wCACtB00D,YAAaj1D,EAAKO,UAAU,uCAC5B20D,SAAU,WACVC,SAAU,YACVC,SAAU,mBAEZ,KAAM,CACJJ,QAASxC,EAAS0B,gBAClBx7B,MAAO14B,EAAKO,UAAU,4CACtB00D,YAAaj1D,EAAKO,UAAU,2CAC5B20D,SAAU,WACVC,SAAU,YACVC,SAAU,uBAEZ,KAAM,CACJJ,QAASxC,EAAS2B,gBAClBz7B,MAAO14B,EAAKO,UAAU,4CACtB00D,YAAaj1D,EAAKO,UAAU,2CAC5B20D,SAAU,yFACVC,SAAU,WACVC,SAAU,uBAEZ,KAAM,CACJJ,QAASxC,EAAS4B,WAClB17B,MAAO14B,EAAKO,UAAU,uCACtB00D,YAAaj1D,EAAKO,UAAU,sCAC5B20D,SAAU,WACVC,SAAU,YACVC,SAAU,iBAEZ,KAAM,CACJJ,QAASxC,EAAS6B,WAClB37B,MAAO14B,EAAKO,UAAU,uCACtB00D,YAAaj1D,EAAKO,UAAU,sCAC5B20D,SAAU,WACVC,SAAU,YACVC,SAAU,iBAEZ,KAAM,CACJJ,QAASxC,EAAS8B,eAClB57B,MAAO14B,EAAKO,UAAU,2CACtB00D,YAAaj1D,EAAKO,UAAU,0CAC5B20D,SAAU,WACVC,SAAU,YACVC,SAAU,sBAEZ,KAAM,CACJJ,QAASxC,EAAS+B,oBAClB77B,MAAO14B,EAAKO,UAAU,gDACtB00D,YAAaj1D,EAAKO,UAAU,+CAC5B20D,SAAU,WACVC,SAAU,YACVC,SAAU,iBACVC,oBAAoB,GAEtB,KAAM,CACJL,QAASxC,EAASgC,qBAClB97B,MAAO14B,EAAKO,UAAU,4CACtB00D,YAAaj1D,EAAKO,UAAU,2CAC5B20D,SAAU,WACVC,SAAU,YACVC,SAAU,iBACVC,oBAAoB,GAEtB,KAAM,CACJL,QAASxC,EAASiC,oBAClB/7B,MAAO14B,EAAKO,UAAU,4CACtB00D,YAAaj1D,EAAKO,UAAU,2CAC5B20D,SAAU,WACVC,SAAU,YACVC,SAAU,iBACVC,oBAAoB,GAEtB,KAAM,CACJL,QAASxC,EAASkC,gCAClBh8B,MAAO14B,EAAKO,UAAU,sDACtB00D,YAAaj1D,EAAKO,UAAU,qDAC5B20D,SAAU,WACVC,SAAU,YACVC,SAAU,iBACVC,oBAAoB,GAEtB,KAAM,CACJL,QAASxC,EAASmC,qCAClBj8B,MAAO14B,EAAKO,UAAU,0EACtB00D,YAAaj1D,EAAKO,UAAU,yEAC5B20D,SAAU,WACVC,SAAU,YACVC,SAAU,iBACVC,oBAAoB,GAEtB,KAAM,CACJL,QAASxC,EAASoC,4BAClBl8B,MAAO14B,EAAKO,UAAU,gEACtB00D,YAAaj1D,EAAKO,UAAU,+DAC5B20D,SAAU,WACVC,SAAU,YACVC,SAAU,iBACVC,oBAAoB,GAEtB,KAAM,CACJL,QAASxC,EAASqC,eAClBn8B,MAAO14B,EAAKO,UAAU,0CACtB00D,YAAaj1D,EAAKO,UAAU,yCAC5B20D,SAAU,WACVC,SAAU,YACVC,SAAU,iBACVC,oBAAoB,GAEtB,KAAM,CACJL,QAASxC,EAASsC,kBAClBp8B,MAAO14B,EAAKO,UAAU,kDACtB00D,YAAaj1D,EAAKO,UAAU,iDAC5B20D,SAAU,yEACVC,SAAU,WACVC,SAAU,8B,iQCzVd,SAAShyB,EAAexmC,GAIpB,IAHFsE,EAAMtE,EAANsE,OACAiZ,EAAIvd,EAAJud,KACArT,EAASlK,EAATkK,UAEAwjC,EAOIv0B,KAAKY,KANP6E,EAAW8uB,EAAX9uB,YACAC,EAAY6uB,EAAZ7uB,aACA6mB,EAAegI,EAAfhI,gBACAtiC,EAAIsqC,EAAJtqC,KACA0c,EAAe4tB,EAAf5tB,gBACAC,EAAS2tB,EAAT3tB,UAIF,QAAazd,IAATib,GAA+B,OAATA,EAA1B,CAEO,GAAqB,IAAjB5d,IAAAA,KAAO4d,GAChB,MAAO,GAGT5d,IAAAA,KAAO4d,GAAM,SAACye,GACPA,EAAO/4B,0BACV6c,EAAgBI,WAAW,CAACH,EAAUI,YAAYwlB,OAAQ5lB,EAAUM,SAASC,KAAM,mBAAoBiL,KAAKC,UAAUwQ,GAE1H,IAEA,IAAM4J,EAAYp2B,KAAKq2B,IAAIlmC,IAAAA,IAAM4d,GAAM,SAAAld,GAAA,IACCoD,EAAKpD,EAA3C4C,yBAA6BqB,GAAM,OAC/BkL,KAAKq2B,IAAIpiC,EAAM,IAAER,yBAAyBqB,IAEhD,OAAO3E,IAAAA,IAAM4d,GAAM,SAACye,GAClB,IAAMW,EAAyB+I,EAAgBI,aAC7CxhC,EACA03B,EAAO+J,yBAAyBzhC,GAChC,CAAEu0B,SAAUmD,EAAOgK,WAEfvJ,EAAmBiJ,EAAgBI,aACvCxhC,EACA03B,EAAOh5B,mBAAmBsB,GAC1B,CAAEu0B,SAAUmD,EAAOgK,WAEfviC,EAAQu4B,EAAO/4B,yBAAyBqB,GAC1C22B,EAAa,EACbD,EAAe,IACfL,EAAc,EACdF,EAAgB,IAEF,IAAdmL,IACEniC,EAAQ,EAEVu3B,EAAe,KADfC,EAAazrB,KAAKy2B,MAAe,IAARxiC,EAAemiC,IAIxCnL,EAAgB,KADhBE,EAAcnrB,KAAKy2B,KAAc,IAARxiC,EAAemiC,KAK5C,IAOIqN,EAPEz0B,EAAWtU,EAAUsC,KAAKgG,YAAYC,UAC5CimD,GAA6Cv5C,EAAAA,EAAAA,cAAa,CACxDX,SAAAA,EACA1b,GAAIk5B,EAAOnxB,GACXX,UAAAA,IAHM0D,EAAU8qD,EAAV9qD,WAAYwR,EAASs5C,EAATt5C,UAAWxN,EAAS8mD,EAAT9mD,UAQd,aAAb4M,EACFy0B,IAAiBjX,EAAOsX,aACF,YAAb90B,IACTy0B,IAAiBjX,EAAOxuB,SAAS8lC,cAGnC,IAAMqlB,GAAqBrzC,EAAAA,EAAAA,mBAAkB0W,EAAOzV,wBAAyBjiB,GAE7E,MAAO,CACL6B,KAAM61B,EAAOp7B,KACbsd,QAAQD,EAAAA,EAAAA,cAAa+d,EAAO1U,OAAQ0U,EAAO7d,wBAC3C1a,MAAAA,EACA44B,eAAgBqJ,EAAgBS,qBAC9B7hC,EACA03B,EAAO/4B,yBAAyBqB,GAChC,CAAEu0B,SAAUmD,EAAOgK,WAErBzJ,yBAA0BmJ,EACvBU,+BAA+BpK,EAAO94B,mCAAmCoB,IAC5E84B,OAAQh6B,EAAKO,UAAU,yBAA0B,CAAE0iC,UAAW1J,EAAwB2J,QAAS7J,IAC/Fle,MAAMD,EAAAA,EAAAA,YAAW,CACfE,SAAAA,EACA1b,GAAIk5B,EAAOnxB,GACX8T,gBAAiBqd,EAAOuK,cAAwC,UAAxBvK,EAAOuK,aAC/Cr8B,UAAAA,EACA0U,YAAAA,EACAC,aAAAA,EACAX,OAAQ8d,EAAO1U,SAEjBtmB,aAAcg7B,EAAOuK,aACrB34B,WAAAA,EACAwR,UAAAA,EACAxN,UAAAA,EACA4M,SAAAA,EACAie,iBAAAA,EACAE,uBAAAA,EACA1B,WAAAA,EACAD,aAAAA,EACAL,YAAAA,EACAF,cAAAA,EACAwY,aAAAA,EACAryB,UAAWob,EAAO1U,OAClBqxC,mBAAAA,EAEJ,GA5FA,CA6FF,CAAC,ICxGGv1D,EACAmmC,EDyGiBqvB,EAAa,SAAAh/C,GAChC,SAAAg/C,EAAYh2D,GAAS,OAAAkX,EAAAA,EAAAA,GAAA,KAAA8+C,IAAA5+C,EAAAA,EAAAA,GAAA,KAAA4+C,EAAA,CACbj5D,IAAAA,OAAS,CAAC,EAAGiD,EAAS,CAAEqX,cAAc,KAC9C,CAAC,OAAAQ,EAAAA,EAAAA,GAAAm+C,EAAAh/C,IAAAc,EAAAA,EAAAA,GAAAk+C,EAAA,EAAA94D,IAAA,aAAA2D,MAED,SAAU3C,GAGN,IAFFiZ,EAAIjZ,EAAJiZ,KACAT,EAAUxY,EAAVwY,WAEAH,KAAKY,KAAOA,EACZZ,KAAKG,WAAaA,CACpB,GAAC,CAAAxZ,IAAA,YAAA+O,IAED,WACE,MAAO,2BACT,GAAC,CAAA/O,IAAA,SAAA+O,IAED,WAAc,IAADgL,EAAA,KACXm2B,EAAmE72B,KAAKY,KAAhE6E,EAAWoxB,EAAXpxB,YAAaC,EAAYmxB,EAAZnxB,aAAcW,EAA2BwwB,EAA3BxwB,4BAEnC,MAAO,CACL,kCAAmC,SAAAK,GAAK,OAAID,EAAAA,EAAAA,kBAAiB,CAC3DC,MAAAA,EACAjB,YAAAA,EACAC,aAAAA,EACAW,4BAAAA,EACAQ,SAAU,mBACVF,gBAAiBjG,EAAKE,KAAK+F,gBAC3BC,UAAWlG,EAAKE,KAAKgG,WACrB,EACF,mCAAoC,SAAAF,GAAK,OAAIhG,EAAKg/C,qBAAqBh5C,EAAM,EAC7E,sCAAuC,SAAAA,GAAK,OAAIhG,EAAKg/C,qBAAqBh5C,EAAM,EAEpF,GAAC,CAAA/f,IAAA,uBAAA2D,MAED,SAAqBqtB,GAAI,IAADwX,EAAA,KAChBwwB,EAAgBhoC,EAAE7Q,cAClB+2B,EAAclmB,EAAE7Q,cAAc84C,YAEpCv3D,EADgBsvB,EAAE7Q,cAAcw3B,SAGjB,CAAC,EAACuhB,EAAAx3D,EADfy3D,YAAAA,OAAW,IAAAD,EAAG,GAAEA,EAAEE,EAAU13D,EAAV03D,WAAYC,EAAU33D,EAAV23D,WAAYC,EAAI53D,EAAJ43D,KAAMzrD,EAAGnM,EAAHmM,IAE1CtK,EAAc8V,KAAKswB,WAAnBpmC,UACFg2D,EAAkB1rD,EAAM,CAAEmR,eAAgB,CAAEjU,GAAIyuD,OAAO3rD,IAAQ,IAAQ,CAAC,EACxEstC,EAAmBme,EAAO,CAAEG,gBAAiB,CAAE1uD,GAAIyuD,OAAOF,IAAS,IAAQ,CAAC,EAC5EI,GAA4B/4D,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAC7B0Y,KAAKY,KAAK6E,aACVy6C,GACApe,GACA9hC,KAAKY,KAAK0/C,SAGe,qCAA1BziB,EAAYnf,YACd6hC,EAAAA,EAAAA,2CAA0C,CACxCZ,cAAAA,EACA/+C,MAAItZ,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACC0Y,KAAKY,MAAI,IAEZ+F,gBAAiB3G,KAAKY,KAAK8xC,qBAE3B8N,UAAW,qHACX7nD,MAAOqH,KAAKY,KAAK6E,YAAYg7C,MAC7BH,QAASD,EACT1iB,UAAW39B,KAAKY,KAAKhY,SAEvBmC,QAAS,CAAC,CACRiC,KAAM+yD,EACNz1D,MAAO01D,IAETU,oBAAoB,EACpBC,2BAA4B,CAC1Bz2D,UAAW,CACT+xB,UAAW/xB,EAAUme,MACrB6T,QAAShyB,EAAUoe,KAErBk3C,mBAAoBptC,KAAKmF,MAAMuoC,IAAgB,IAEjDc,aAAcX,EAAO,oBAAsB,mBAC3CY,cAAe,SAAFp4D,GAAeA,EAAVq4D,YAEd/9C,EAAAA,kBAAkBg+C,UAAU5xB,GAAMR,SAAS,CAAEqyB,wBAAwB,GAEzE,EACAC,UAAW,WACLtB,GACFA,EAAclrB,OAElB,EACAt0B,WAAYH,KAAKG,YAChB09B,EAEP,GAAC,CAAAl3C,IAAA,WAAA2D,MAED,WAAY,IAWN42D,EAXK9pB,EAAA,KACTR,EAQI52B,KAAKswB,WAPPnlC,EAAMyrC,EAANzrC,OACAiZ,EAAIwyB,EAAJxyB,KACArT,EAAS6lC,EAAT7lC,UACAowD,EAAoBvqB,EAApBuqB,qBACAC,EAAuBxqB,EAAvBwqB,wBACAtqB,EAAQF,EAARE,SACAL,EAAMG,EAANH,OAaF,OARKK,IACHoqB,EAAW7zB,EAAgBjsB,KAAKpB,KAAM,CACpC7U,OAAAA,EACAiZ,KAAM5d,IAAAA,QAAU4d,GAChBrT,UAAAA,KAIG,kBAAMswD,EAAAA,EAAAA,wBAAuB,CAClCvqB,SAAAA,EACAL,OAAAA,EACAyqB,SAAAA,EACAj3D,KAAMmtC,EAAKx2B,KAAK3W,KAChBq6B,WAAYn5B,EAASisC,EAAKx2B,KAAK2jB,OAAOC,SAAS,qBAAsBr5B,GAAU,GAC/Eg2D,qBAAAA,EACAC,wBAAAA,EACAh/B,sBAAuB9sB,EAAAA,UAAU8sB,uBAChC,CACL,GAAC,CAAAz7B,IAAA,cAAA2D,MAED,WACE,IAAQmsC,EAAWz2B,KAAKswB,WAAhBmG,OACFmG,EAAS75B,EAAAA,kBAAkBg+C,UAAU/gD,MAEvCy2B,GACFmG,EAAO3E,sBAETn1B,EAAAA,EAAAA,GAAA28C,EAAA,qBAAA38C,CAAA,IACI2zB,GACFmG,EAAO9d,kBAEX,IAAC,CAzI+B,CAAS/b,EAAAA,mB,0CCtG3C,SAASu+C,IAqBP,OApBKlxB,IACHA,EAAQ,CAAC,CACPnB,YAAahlC,EAAKO,UAAU,oDAC5B8jC,OAAQp+B,EAAAA,uBAAuBC,YAC9B,CACD8+B,YAAahlC,EAAKO,UAAU,oDAC5B8jC,OAAQp+B,EAAAA,uBAAuBE,YAC9B,CACD6+B,YAAahlC,EAAKO,UAAU,sDAC5B8jC,OAAQp+B,EAAAA,uBAAuBG,eAG7B2P,KAAK6I,eAAiB7d,EAAAA,aAAakI,OACrCk9B,EAAMhnB,KAAK,CACT6lB,YAAahlC,EAAKO,UAAU,iDAC5B8jC,OAAQp+B,EAAAA,uBAAuBI,YAK9B8/B,CACT,CAEA,IAAMT,EACG,EADHA,EAEG,EAIT,SAASC,IACP,OAAI5vB,KAAK6vB,IAAIC,QAAQ,yBAAyBC,aAjCvB,IAkCdJ,EAEFA,CACT,CAGA,SAASsE,IACP,IAAM3C,EAAgB1B,EAAcxuB,KAAKpB,MAErCA,KAAKuxB,oBAAsBD,IAI3BA,IAAkB3B,EACpB3vB,KAAK6vB,IAAI2B,SAAS,gBAElBxxB,KAAK6vB,IAAI4B,YAAY,gBAGvBzxB,KAAKuxB,kBAAoBD,EAC3B,CAGA,SAAS/yB,IACP,IAAA8xB,EAAqCrwB,KAAKswB,WAAlC7jC,EAAgB4jC,EAAhB5jC,iBAER,MAAO,CACLtB,OAH8BklC,EAANllC,OAIxBsB,iBAAAA,EAEJ,CAGA,SAAS80D,IACPj/C,EAAAA,QAAQC,WAAWvC,KAAK2jC,SAAS,gBAAiB,CAChD7M,UAAU,EACVL,QAAQ,GAEZ,CAGA,SAAS+qB,IAAc,IAAD9gD,EAAA,KACpBk2B,EAOI52B,KAAKswB,WANPpmC,EAAS0sC,EAAT1sC,UACAuC,EAAgBmqC,EAAhBnqC,iBACAtB,EAAMyrC,EAANzrC,OACAoF,EAAMqmC,EAANrmC,OACA1H,EAAW+tC,EAAX/tC,YACAm4D,EAAsBpqB,EAAtBoqB,uBAGF,GAAK92D,EAAL,CAIA,IAKIi3D,EACAC,EANE93C,GAAsBqH,EAAAA,EAAAA,wBAAuBzmB,GAC7C+xB,EAAYhyB,EAAKwZ,WAAWvZ,EAAUme,OACtC6T,EAAUjyB,EAAKwZ,WAAWvZ,EAAUoe,KACpCsb,EAAsB35B,EAAKwZ,WAAW6F,EAAoBjB,OAC1Dwb,EAAoB55B,EAAKwZ,WAAW6F,EAAoBhB,KAI9DtI,KAAKyhD,SAAUp4C,EAAAA,EAAAA,mBAAkBpf,EAAMqf,GACvCtJ,KAAK0hD,kBAAoBz3D,EAAKO,UAAU,uCAAyC,IAAIsmC,QAAQ,WAAY9wB,KAAKyhD,SAC1GxlC,IAAcC,GAChBilC,EAAuBllC,EACvBmlC,EAA0Bx9B,IAE1Bu9B,EAAoB,GAAAh5D,OAAM8zB,EAAS,OAAA9zB,OAAM+zB,GACzCklC,EAAuB,GAAAj5D,OAAMy7B,EAAmB,OAAAz7B,OAAM07B,IAGxD,IAAA0Q,EAEIv0B,KAAKY,KADP+F,EAAe4tB,EAAf5tB,gBAAiBC,EAAS2tB,EAAT3tB,UAAW/N,EAAM07B,EAAN17B,OAAQiC,EAAQy5B,EAARz5B,SAAU6U,EAAY4kB,EAAZ5kB,aAGhD3P,KAAKqB,YACLrB,KAAK2B,iBAELjE,EAAAA,EAAAA,iBAAgB,CACd3M,UAAWiP,KAAKjP,UAChB7G,UAAAA,EACAqG,OAAAA,EACA+Y,oBAAAA,EACA7c,iBAAAA,EACAtB,OAAAA,EACA0N,OAAAA,EACA+B,eAAgBoF,KAAKpF,eACrBE,SAAAA,EACAke,gBAAiBhZ,KAAKgZ,gBACtBgB,UAAU,EACVnxB,YAAAA,EACA6mB,aAAcsxC,EACdrxC,aAAAA,EACA9G,aAAc7I,KAAK6I,aACnB8J,YAAa3S,KAAKjX,SACjBy2B,SAAQ,WACT9e,EAAKR,cACLQ,EAAKiuB,SAAS,CAAEqyB,wBAAwB,IACxC,IAAM3hB,EAAW3+B,EAAK0B,EAAE,oEACpBi9B,EAAStzC,OAAS,EACpBszC,EAAS5K,QAET/zB,EAAK0B,EAAE,uBAAuBqyB,OAElC,IAAG/8B,MAAK,SAAC0M,GACP,IAAI1D,EAAKq2B,QAAT,CAIA,IAAK3yB,GAAyB,OAAhBA,EAAKW,aAAmC5b,IAAhBib,EAAKW,OAKzC,OAJAw8C,EAAangD,KAAKV,QAGlBiG,EAAgBI,WAAW,CAACH,EAAUI,YAAYC,OAAQL,EAAUM,SAASC,KAAM,mBAAoBiL,KAAKC,UAAUjO,IAIxH,IAAIu9C,GAAY,EAehB,GAbAn7D,IAAAA,KAAO4d,GAAM,SAACye,GAIZ,GAHKA,GAAWA,EAAO/4B,2BACrB63D,GAAY,GAEV9+B,EAAOzV,yBAA2ByV,EAAOzV,wBAAwBrhB,OAAQ,CAC3E,IAAM60D,EAAe/9B,EAAOuK,aAAe,oBAAsB,mBACjEzmB,EAAgBI,WACd,CAACH,EAAUI,YAAYC,OAAQL,EAAUM,SAASC,KAAM,mBAAmB,wCAADhf,OAClCy4D,EAAY,oBAAAz4D,OAAmBsE,EAAgB,cAAAtE,OAAagD,EAAM,eAAAhD,OAAc06B,EAAOzV,wBAAwBrJ,WAAU,UAAA5b,OAAS06B,EAAOnxB,GAAE,MAEvL,CACF,IAEIiwD,EAGF,OAFAJ,EAAangD,KAAKV,QAClBiG,EAAgBI,WAAW,CAACH,EAAUI,YAAYwlB,OAAQ5lB,EAAUM,SAASC,KAAM,mBAAoBiL,KAAKC,UAAUjO,IAIxH,IAAI88C,EAAW98C,EAEX3X,IAAqByD,EAAAA,uBAAuBG,aAC9C6wD,EAAW16D,IAAAA,OAAS06D,GAAU,SAAAr+B,GAAM,OAAIA,EAAO/4B,yBAAyBqB,GAAU,CAAC,IAC1EsB,IAAqByD,EAAAA,uBAAuBE,WACrD8wD,EAAW16D,IAAAA,OAAS06D,GAAU,SAAAr+B,GAAM,OAAIA,EAAO/4B,yBAAyBqB,GAAU,CAAC,IAC1EsB,IAAqByD,EAAAA,uBAAuBI,WACrD4wD,GAAWj1C,EAAAA,EAAAA,kBAAiB9gB,GAAU3E,IAAAA,OACpC06D,GACA,SAAAr+B,GAAM,OAAKr8B,IAAAA,QAAUq8B,EAAOzV,wBAAwB,IAClD,IAGN9K,EAAAA,QAAQC,WAAW7B,EAAKijC,SAAS,gBAAiB,CAChDlN,QAAQ,EACRK,UAAU,EACV1yB,KAAM88C,EACN/1D,OAAAA,EACA4F,UAAW2P,EAAK3P,UAChBowD,qBAAAA,EACAC,wBAAAA,EACAl3D,UAAAA,GApDF,CAsDF,IAAG6wB,OAAM,SAAC4E,QAEgBx2B,IAApBw2B,EAAS5a,QACX4B,EAAgBI,WAAW,CAACH,EAAUI,YAAYwlB,OAAQ5lB,EAAUM,SAASC,KAAM,mBAAoBwY,EAAS/H,OAElH2pC,EAAangD,KAAKV,EACpB,GApHA,CAqHF,CAGA,SAASkhD,IACP,IAAAzlB,EAAgCn8B,KAAKswB,WAA7BnlC,EAAMgxC,EAANhxC,OAAQtC,EAAWszC,EAAXtzC,YAEhByZ,EAAAA,QAAQC,WAAWvC,KAAK6hD,kBAAmB,CACzC12D,OAAAA,EACAJ,QAASvE,IAAAA,YAAasE,EAAAA,EAAAA,YAAWjC,EAAamX,KAAK6I,cAAe,CAAC1d,KAEvE,CAGA,SAAS22D,IACP,IAAAjrB,EAKI72B,KAAKY,KAJP8E,EAAYmxB,EAAZnxB,aACAlK,EAAKq7B,EAALr7B,MACAmL,EAAekwB,EAAflwB,gBACAC,EAASiwB,EAATjwB,UAGFD,EAAgBI,WACd,CAACH,EAAUI,YAAYC,OACvBL,EAAUM,SAASC,KACnB,mBAAmB,GAADhf,OACf6X,KAAKpY,gBAAe,4BAGI,YAAzBoY,KAAKpY,gBACP8d,EAAamC,gBAAgB,YACK,aAAzB7H,KAAKpY,gBACd8d,EAAamC,gBAAgB,uBAAwB,CAAEw4B,YAAargC,KAAK6I,eAEzEnD,EAAamC,gBAAgB,mBAAoB,CAE/C/B,YAAatK,EAAM9F,IAAI,gBAG7B,CAGA,SAAS2lC,EAAoBN,GAC3B,IAAMhD,EAAU/3B,KAAKoC,EAAE24B,EAAIj0B,eACrBk0B,EAAejD,EAAQxsC,KAAK,kBAE9ByvC,EAAaz3B,KAAK,UACpBy3B,EAAaz3B,KAAK,QAAS,IAG7B,IAAM03B,EAAYlD,EAAQjI,QAAQ,8BAC5BoL,EAAYD,EAAUC,YAExBA,GAAa,IAIbnD,EAAQoD,SAAS5jC,IAAM0jC,EAAUE,SAAS5jC,IAAM,GAClDyjC,EAAaI,IAAI,CACf7jC,IAAK,OACLwqD,OAAO,GAAD55D,OAAK+yC,EAAS,QAGtBF,EAAaI,IAAI,CACf7jC,IAAI,GAADpP,OAAK,GAAK+yC,EAAS,MACtB6mB,OAAQ,SAGd,CAGA,SAAS5iB,IACP,IAAMM,EAAWz/B,KAAKoC,EAAE,8BAClBs9B,EAAgBD,EAAS3U,QAEzBk3B,EADOhiD,KAAKoC,EAAE,oBACG0oB,QAEvB,GAAI4U,GAAiBsiB,GAActiB,EAAgBsiB,EAAY,CAC7D,IAAMpiB,EAAiBF,EAAgBsiB,EACjCniB,EAAkBJ,EAAS3N,SAEjC9xB,KAAKoC,EAAE,oBAAqBpC,KAAK6vB,IAAIC,QAAQ,eAAesL,IAAI,CAC9DtQ,MAAO8U,EACP9N,OAAQ+N,IAGV,IAAMxwB,EAAShZ,KAAKmS,IAAIo3B,EAAgB,IAExCH,EAASrE,IAAI,CAAE2E,aAAc1wB,GAC/B,CACF,CAEO,IAAM4yC,EAAc,SAAA/xB,GAAA,SAAA+xB,IAAA,OAAAthD,EAAAA,EAAAA,GAAA,KAAAshD,IAAAphD,EAAAA,EAAAA,GAAA,KAAAohD,EAAAhuD,UAAA,QAAAqN,EAAAA,EAAAA,GAAA2gD,EAAA/xB,IAAA3uB,EAAAA,EAAAA,GAAA0gD,EAAA,EAAAt7D,IAAA,YAAA+O,IACzB,WACE,MAAO,kBACT,GAAC,CAAA/O,IAAA,WAAA+O,IAED,WAAgB,IAADy5B,EAAA,KACb,OAAO,kBAAMpS,IAAS,CACpB0kC,QAAStyB,EAAKsyB,QACd3gB,WAAY3R,EAAK2R,WACjBC,gBAA0C,aAAzB5R,EAAKvnC,gBACtB85D,iBAAkBvyB,EAAKuyB,kBACtB,CACL,GAAC,CAAA/6D,IAAA,YAAA+O,IAED,WACE,IAAQjJ,EAAqBuT,KAAKswB,WAA1B7jC,iBAYR,OAVAjG,IAAAA,KAAO86D,EAASlgD,KAAKpB,OAAO,SAACmhB,GACvBA,EAAKmN,SAAW7hC,EAElB00B,EAAKoN,QAAS,EAGdpN,EAAKoN,QAAS,CAElB,IAEO6B,CACT,GAAC,CAAAzpC,IAAA,eAAA2D,MAED,SAAaiqB,GAGX,GAF6BvU,KAAKswB,WAA1B7jC,mBAEiB8nB,EAAzB,CAIA,IAAA4jB,EAEIn4B,KAAKY,KADP+F,EAAewxB,EAAfxxB,gBAAiBC,EAASuxB,EAATvxB,UAGnBD,EAAgBI,WACd,CAACH,EAAUI,YAAYC,OACvBL,EAAUM,SAASC,KACnB,mBAAmB,GAADhf,OACf6X,KAAKpY,gBAAe,gCAGzBoY,KAAK2uB,SAAS,CACZliC,iBAAkB8nB,GAdpB,CAgBF,GAAC,CAAA5tB,IAAA,aAAA2D,MAED,SAAUzD,GAiBN,IAADuwC,EAAA,KAhBDrmC,EAASlK,EAATkK,UACA5F,EAAMtE,EAANsE,OACAsB,EAAgB5F,EAAhB4F,iBACAvC,EAASrD,EAATqD,UACAqG,EAAM1J,EAAN0J,OACA3I,EAAef,EAAfe,gBACAuY,EAAUtZ,EAAVsZ,WACAnT,EAAInG,EAAJmG,KACAujC,EAAa1pC,EAAb0pC,cACA3vB,EAAI/Z,EAAJ+Z,KAAIshD,EAAAr7D,EACJmyB,gBAAAA,OAAe,IAAAkpC,GAAQA,EAAAjH,EAAAp0D,EACvB0wC,eAAAA,OAAc,IAAA0jB,GAAQA,EACtBpyC,EAAYhiB,EAAZgiB,aACAlP,EAAK9S,EAAL8S,MAAKwoD,EAAAt7D,EACLm6D,uBAAAA,OAAsB,IAAAmB,GAAQA,EAC9Bp5D,EAAMlC,EAANkC,OAEAiX,KAAKpF,eAAiB21B,EAAc31B,eACpCoF,KAAKgZ,gBAAkBA,EACvBhZ,KAAK6I,aAAeA,EACpB7I,KAAKY,KAAOA,EACZZ,KAAKjX,OAASA,EACdiX,KAAKgB,eAAe,CAAEb,WAAAA,EAAYnT,KAAAA,IAElC/C,EAAO2W,EAAK3W,KACZ+V,KAAKmhC,SAAS,eAAgB,IAAIse,EAAc,CAC9C7+C,MAAItZ,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACCsZ,GAAI,IACP0/C,SAAOh5D,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACFsZ,EAAK0/C,SAAO,IACf3mD,MAAAA,MAGJwG,WAAYH,KAAKG,cAGnB,IAAMtX,EAAc+X,EAAKhY,QAAUgY,EAAKhY,OAAO8M,IAAI,eAC7ConC,EAAet2C,IAAAA,SAAW,CAC9B2E,OAAAA,EACAsB,iBAAAA,EACAvC,UAAAA,EACAqG,OAAAA,EACA1H,YAAAA,EACAm4D,uBAAAA,GACCvwC,EAAAA,0BAEG2xC,GAAgB1uC,EAAAA,EAAAA,aAAY,CAChC7qB,YAAAA,EACAsC,OAAQ2xC,EAAa3xC,OACrB0d,aAAAA,IAEIw5C,GAAkBpvC,EAAAA,EAAAA,yBAAwB,CAC9C9nB,OAAQi3D,EACRv5D,YAAAA,EACAggB,aAAAA,IAGEw5C,IAAoBvlB,EAAa3xC,QACnC3E,IAAAA,OAASs2C,EAAc,CAAE3xC,OAAQk3D,IAEjCriD,KAAK2uB,SAASmO,GACdt2C,IAAAA,OAAQ,WACN4wC,EAAK92B,QAAQ,sBAAuB/B,EAAkB6C,KAAKg2B,GAC7D,KAEAp3B,KAAK2uB,SAASmO,GAGhB98B,KAAKjP,UAAYA,EACjB,IAAgBuxD,EAAkBtiD,KAAKswB,WAA/BnlC,OA6BR,OA3BA6U,KAAK6hD,kBAAoBv/C,EAAAA,QAAQ8wB,gBAAgBpzB,KAAM,gBAAiBsrB,EAAAA,aAAc,CACpF+H,eAAgBC,IAChBnoC,OAAQm3D,EACRv3D,QAASvE,IAAAA,YAAasE,EAAAA,EAAAA,YAAWjC,EAAamX,KAAK6I,cAAe,CAACy5C,IACnE/1B,gBAAiBvsB,KAAKY,KAAK2rB,gBAC3BhI,OAAQvkB,KAAKY,KAAK2jB,OAClBt6B,KAAAA,EACA4e,aAAAA,EACAjI,KAAAA,GACC,CACD2yB,KAAM,SAAFrsC,GAA8B,IAAjBwoC,EAASxoC,EAAjBiE,OACPo3D,EAEInrB,EAAKx2B,KADP+F,EAAe47C,EAAf57C,gBAAiBC,EAAS27C,EAAT37C,UAGnBD,EAAgBI,WACd,CAACH,EAAUI,YAAYC,OACvBL,EAAUM,SAASC,KACnB,mBAAmB,GAADhf,OACfivC,EAAKxvC,gBAAe,8BAEzBwvC,EAAKzI,SAAS,CAAExjC,OAAQukC,IACxBkyB,EAAmBxgD,KAAKg2B,EAC1B,IAEFp3B,KAAKpY,gBAAkBA,EAEfA,GACN,IAAK,UACHoY,KAAK8gC,WAAa72C,EAAKO,UAAU,mCACjC,MACF,IAAK,WACHwV,KAAK8gC,WAAa72C,EAAKO,UAAU,kCACjC,MACF,IAAK,WACHwV,KAAK8gC,WAAa72C,EAAKO,UAAU,kCAKrC,IAAMg4D,EAAiBjrB,EAAiB,WACtCj1B,EAAAA,QAAQC,WAAW60B,EAAKuM,SAAS,gBAAiB,CAChDlN,QAAQ,GAEZ,EAAI+qB,EACEl4C,GAAsBqH,EAAAA,EAAAA,wBAAuBzmB,GAEnD8V,KAAKyhD,SAAUp4C,EAAAA,EAAAA,mBAAkBpf,EAAMqf,GACvCtJ,KAAK0hD,kBAAoBz3D,EAAKO,UAAU,uCAAyC,IAAIsmC,QAAQ,WAAY9wB,KAAKyhD,SAC9GG,EAAmBxgD,KAAKpB,MACxBwiD,EAAephD,KAAKpB,MAEpBA,KAAK23B,SAAS33B,KAAK4c,OAAO1Z,EAAAA,EAAAA,cAAa,YAAa,WAAW,WAC7Dk0B,EAAKpe,iBAAkB,EACvBwpC,EAAephD,KAAKg2B,EACtB,IAEAp3B,KAAK23B,SAAS33B,KAAK4c,OAAO1Z,EAAAA,EAAAA,cAAa,mBAAoB,WAAW,WACpEk0B,EAAKpe,iBAAkB,EACvBwpC,EAAephD,KAAKg2B,EACtB,IAEAp3B,KAAK23B,SAAS33B,KAAK4c,OAAO1Z,EAAAA,EAAAA,cAAa,2BAA2B,WAChEk0B,EAAKpe,iBAAkB,EACvBwoC,EAAWpgD,KAAKg2B,EAClB,IAEAp3B,KAAK23B,SAAS33B,KAAK4c,OAAO1Z,EAAAA,EAAAA,cAAa,WAAW,WAChD0+C,EAAmBxgD,KAAKg2B,EAC1B,IAEAp3B,KAAK23B,SAAS33B,KAAK4c,OAAO1Z,EAAAA,EAAAA,cAAa,qBAAqB,WAC1Dk0B,EAAK92B,QAAQ,mBAAoB,CAC/BhW,MAAO8sC,EAAKvG,UACZpnC,QAAS,CAAEqnC,SAAS,IAExB,IAEA9wB,KAAK23B,SAAS33B,KAAK4c,OAAO1Z,EAAAA,EAAAA,cAAa,mBAAoB,WAAW,WACpEk0B,EAAK92B,QAAQ,sBAAuB/B,EAAkB6C,KAAKg2B,GAC7D,IAEAp3B,KAAKoxB,UAAS,WACZ6C,EAAS7yB,KAAKg2B,GACd+H,EAAoB/9B,KAAKg2B,EAC3B,IAEAp3B,KAAKiB,GAAG,WAAW,WACjBm2B,EAAKL,SAAU,CACjB,IAEA/2B,KAAK23B,SAAS33B,KAAK4c,OAAO1Z,EAAAA,EAAAA,cAAa,SAAS,WAC9Ci8B,EAAoB/9B,KAAKg2B,EAC3B,IAEAp3B,KAAK2jC,SAAS,gBAAgB1iC,GAAG,YAAY,WACvCm2B,EAAKx2B,KAAKy0C,UACZje,EAAKx2B,KAAKy0C,UAAUoN,UAAS,kBAAMtjB,EAAoB/9B,KAAKg2B,EAAK,IAEjE+H,EAAoB/9B,KAAKg2B,EAE7B,GACF,GAAC,CAAAzwC,IAAA,SAAA+O,IAED,WACE,MAAO,CACL,kDAAmD2lC,EAAoBvD,KAAK93B,MAC5E,4BAA6B8hD,EAAqBhqB,KAAK93B,MAE3D,GAAC,CAAArZ,IAAA,cAAA2D,MAED,WAAe,IAAD0tC,EAAA,KACZh4B,KAAKuxB,uBAAoBpoC,GACzB2Z,EAAAA,EAAAA,GAAAm/C,EAAA,qBAAAn/C,CAAA,IACAtc,IAAAA,OAAQ,WACNytC,EAAS7yB,KAAK42B,EAChB,GACF,IAAC,CAlPwB,CAASx3B,EAAAA,E,wJCxT7B,SAASkiD,EAAUC,GACxB,IAAQh5D,EAAiCg5D,EAAjCh5D,GAAIi5D,EAA6BD,EAA7BC,QAASC,EAAoBF,EAApBE,gBAErB,GAAIr8D,IAAAA,KAAOo8D,EAASp8D,IAAAA,OAASA,IAAAA,WAC3B,MAAM,IAAIo5B,MAAM,sBAGlB,MAAO,CACLluB,GAAI/H,EACJlC,KAAK,UAADU,OAAYy6D,EAAO,gBACvBp7D,KAAMq7D,EACNC,KAAM,SACNC,QAAS,EAEb,CAMO,SAASC,EAAY5+C,GAC1B,IAAM6+C,EAAQ7+C,EAAK3c,KAAKw7D,MAAM,+BAE9B,IAAKA,EACH,MAAM,IAAIrjC,MAAM,2BAGlB,IAAMgjC,EAAUK,EAAMC,MAAM,GACtBL,EAAkBz+C,EAAK5c,KAG7B,MAAO,CAAEmC,GAFEya,EAAK1S,GAEHkxD,QAAAA,EAASC,gBAAAA,EACxB,CClCO,IAAMM,EAAsB,WA2BjC,OAAA5hD,EAAAA,EAAAA,IA1BA,SAAA4hD,EACEC,EACAC,EACA3d,EACA4d,IACA3iD,EAAAA,EAAAA,GAAA,KAAAwiD,GACI38D,IAAAA,YAAc48D,EAAMG,YAAYC,eAClCJ,EAAMK,eAAe,eAGrB/d,EAAQge,mBACN,cACA,IAAIC,EAAAA,EAAsB,CACxB7lD,kBAAmBwlD,EACnBM,SAAUR,EAAMG,YAAYC,YAC5Bj7D,OAAQ,gCACRm6D,UAAAA,EACAM,YAAAA,MAKNhjD,KAAKqjD,WAAaA,EAClBrjD,KAAK6jD,YAAcT,EAAMG,YAAYC,WACvC,GAEA,EAAA78D,IAAA,qBAAA2D,MASA,WAAwD,IAArC3D,EAAGsN,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAG,KAAM2uD,EAAO3uD,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAG,aACvC,OAAO+L,KAAK6jD,YAAYtqD,QAAQ,CAC9BuqD,MAAO,CAAElB,QAAAA,KACRlrD,MAAK,SAACqsD,GACP,GAAsB,IAAlBA,EAAOh4D,OACT,OAAO4L,IAAAA,UAIT,IAAMqsD,EAAYr9D,EAAMo9D,EAAO,GAAGlB,gBAAgBl8D,GAAOo9D,EAAO,GAAGlB,gBACnE,OAAOlrD,IAAAA,QAAgBqsD,EACzB,GACF,GAEA,CAAAr9D,IAAA,qBAAA2D,MAWA,SAAmB62B,GAA+B,IAADzgB,EAAA,KAAxBkiD,EAAO3uD,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAG,aACjC,OAAO+L,KAAK6jD,YAAYtqD,QAAQ,CAC9BuqD,MAAO,CAAElB,QAAAA,KACRlrD,MAAK,SAACqsD,GACP,GAAsB,IAAlBA,EAAOh4D,OAET,OAAO2U,EAAKmjD,YAAY9pD,OAAO,CAAE8oD,gBAAiB1hC,EAAMyhC,QAAAA,GAAW,CACjEqB,KAAMvjD,EAAK2iD,WAAW3tD,IAAI,gBAI9B,IAAMwuD,EAAkB19D,IAAAA,OAASu9D,EAAO,GAAI,mBACtCI,EAAqB39D,IAAAA,OAAS,CAAC,EAAG09D,EAAiB/iC,GAEzD,OAAOzgB,EAAKmjD,YAAY18D,OAAO48D,EAAO,GAAGp6D,GAAI,CAAEk5D,gBAAiBsB,GAClE,GACF,IAAC,CA7EgC,E,6VCItBC,EAAU,SAAAC,GAAA,SAAAD,IAAA,IAAA1jD,GAAAC,EAAAA,EAAAA,GAAA,KAAAyjD,GAAA,QAAAjhD,EAAAlP,UAAAlI,OAAA2mB,EAAA,IAAArP,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAAoP,EAAApP,GAAArP,UAAAqP,GAGlB,OAHkB5C,GAAAG,EAAAA,EAAAA,GAAA,KAAAujD,EAAA,GAAAj8D,OAAAuqB,KACrB4xC,cAAgB,SAAA53D,GAAG,MAAK,CACtB63D,WAAY73D,EAAM,UAAY,SAC/B,EAACgU,CAAC,CAAD,OAAAY,EAAAA,EAAAA,GAAA8iD,EAAAC,IAAA9iD,EAAAA,EAAAA,GAAA6iD,EAAA,EAAAz9D,IAAA,SAAA2D,MAEF,WAGE,OAFA0V,KAAKwkD,cAAgB/kD,EAAAA,YACrBO,KAAKykD,YAAchlD,EAAAA,aAEjBgf,EAAAA,EAAAA,MAAA,OAAKC,UAAU,cAAa5B,SAAA,EAC1B2B,EAAAA,EAAAA,MAAA,OAAKC,UAAU,oBAAmB5B,SAAA,EAChCJ,EAAAA,EAAAA,KAAA,OACEgC,UAAU,qBACVoJ,IAAK9nB,KAAKwkD,cACV9iC,MAAO1hB,KAAKskD,cAActkD,KAAKyc,MAAMioC,sBAAsB5nC,SAE1D9c,KAAKyc,MAAMkoC,eAAeC,oBAE7BloC,EAAAA,EAAAA,KAAA,OACEgC,UAAU,mBACVoJ,IAAK9nB,KAAKykD,YACV/iC,MAAO1hB,KAAKskD,cAActkD,KAAKyc,MAAMooC,oBAAoB/nC,SAExD9c,KAAKyc,MAAMkoC,eAAeG,oBAG5B9kD,KAAKyc,MAAMsoC,eACZtmC,EAAAA,EAAAA,MAAA,OAAKC,UAAU,uBAAsB5B,SAAA,EACnCJ,EAAAA,EAAAA,KAAA,OACEgC,UAAU,wBACVgD,MAAO1hB,KAAKskD,cAActkD,KAAKyc,MAAMioC,sBAAsB5nC,SAE1D9c,KAAKyc,MAAMkoC,eAAe/gC,uBAE7BlH,EAAAA,EAAAA,KAAA,OACEgC,UAAU,sBACVgD,MAAO1hB,KAAKskD,cAActkD,KAAKyc,MAAMooC,oBAAoB/nC,SAExD9c,KAAKyc,MAAMkoC,eAAe9gC,yBAMvC,IAAC,CA5CoB,CAASpkB,EAAAA,e,YCJnBulD,EAAa,SAAAX,GAAA,SAAAW,IAAA,IAAAtkD,GAAAC,EAAAA,EAAAA,GAAA,KAAAqkD,GAAA,QAAA7hD,EAAAlP,UAAAlI,OAAA2mB,EAAA,IAAArP,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAAoP,EAAApP,GAAArP,UAAAqP,GAWvB,OAXuB5C,GAAAG,EAAAA,EAAAA,GAAA,KAAAmkD,EAAA,GAAA78D,OAAAuqB,KACxBuyC,mBAAqB,SAAC9jC,GAEpB,IAAM+jC,EAA+BxkD,EAAK+b,MAAM0oC,iBAAmB,+BAAiC,+BAEpG,OACE1mC,EAAAA,EAAAA,MAAA,OAAA3B,SAAA,EACEJ,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,oBAAmB5B,SAAEqE,EAAK72B,SACzCoyB,EAAAA,EAAAA,KAAA,OAAKgC,UAAWwmC,EAA6BpoC,SAAEpc,EAAK+b,MAAM2oC,2BAGhE,EAAC1kD,CAAA,QAAAY,EAAAA,EAAAA,GAAA0jD,EAAAX,IAAA9iD,EAAAA,EAAAA,GAAAyjD,EAAA,EAAAr+D,IAAA,SAAA2D,MAED,WACE,IAAM+6D,EAA+BrlD,KAAKyc,MAAM0oC,iBAAmB,uBAAyB,uBACtFG,EAAe9+D,IAAAA,UAAYwZ,KAAKyc,MAAM3xB,WAAY,CAAEnB,GAAIqW,KAAKyc,MAAM6oC,aAAa37D,KAEhF47D,EAA6C,qBAArBvlD,KAAKyc,MAAM+oC,MACrCxlD,KAAKyc,MAAMxyB,KAAKO,UAAU,kCAC1BwV,KAAKyc,MAAMxyB,KAAKO,UAAU,yBAE9B,OACEi0B,EAAAA,EAAAA,MAAA,OAAKC,UAAW1e,KAAKyc,MAAM+oC,MAAM1oC,SAAA,EAC/B2B,EAAAA,EAAAA,MAAA,OAAKC,UAAU,gBAAe5B,SAAA,EAC5BJ,EAAAA,EAAAA,KAAA,QAAMgC,UAAU,oCAChBhC,EAAAA,EAAAA,KAAA,QAAMgC,UAAS,sCAAAv2B,OAAwCk9D,SAEzD3oC,EAAAA,EAAAA,KAAC+oC,EAAAA,iBAAgB,CACfH,aAAcA,EACdI,SAAU1lD,KAAKyc,MAAMkpC,gBACrBjpB,WAAa18B,KAAKyc,MAAM3xB,WAAYiB,OACpCqkC,MAAOpwB,KAAKyc,MAAM3xB,WAClBm6D,mBAAoBjlD,KAAKilD,mBACzBW,WAAY,SAAAzkC,GAAI,OACdzE,EAAAA,EAAAA,KAAA,MAAIgC,UAAU,uBAAuBmnC,KAAK,eAAc/oC,SACrDqE,EAAK2kC,eAEFrnC,EAAAA,EAAAA,MAAA,OAAA3B,SAAA,EACEJ,EAAAA,EAAAA,KAAA,QAAMgC,UAAU,qCAChBhC,EAAAA,EAAAA,KAAA,QAAMgC,UAAU,sBAAqB5B,SAAEqE,EAAK72B,YAG/CoyB,EAAAA,EAAAA,KAAA,QAAAI,SAAOqE,EAAK72B,SACZ,EAEPL,KAAM+V,KAAKyc,MAAMxyB,KACjB87D,sBAAuBR,EACvBS,wBAAsB,EACtBC,sCAAoC,MAI5C,IAAC,CApDuB,CAASxmD,EAAAA,eA6EnCulD,EAAcrmC,aAAe,CAC3BwmC,kBAAkB,EAClBC,uBAAwB,GACxBI,MAAO,kBChFF,IAAMU,EAAiB,SAAA7B,GAAA,SAAA6B,IAAA,OAAAvlD,EAAAA,EAAAA,GAAA,KAAAulD,IAAArlD,EAAAA,EAAAA,GAAA,KAAAqlD,EAAAjyD,UAAA,QAAAqN,EAAAA,EAAAA,GAAA4kD,EAAA7B,IAAA9iD,EAAAA,EAAAA,GAAA2kD,EAAA,EAAAv/D,IAAA,SAAA2D,MAC5B,WACE,IAAMg7D,EAAiB9+D,IAAAA,YAAcwZ,KAAKyc,MAAM6oC,mBAE9Cn8D,EADA3C,IAAAA,UAAYwZ,KAAKyc,MAAM0pC,iBAAkB,CAAEx8D,GAAIqW,KAAKyc,MAAM6oC,aAAa37D,KAGzE,OAASnD,IAAAA,YAAcwZ,KAAKyc,MAAM6oC,cAa9B,MAZF5oC,EAAAA,EAAAA,KAAA,OAAKgC,UAAW1e,KAAKyc,MAAM+oC,MAAM1oC,UAC/BJ,EAAAA,EAAAA,KAAC+oC,EAAAA,iBAAgB,CACfH,aAAcA,EACdI,SAAU1lD,KAAKyc,MAAMkpC,gBACrBjpB,WAAa18B,KAAKyc,MAAM0pC,iBAAkBp6D,OAC1CqkC,MAAOpwB,KAAKyc,MAAM0pC,iBAClBl8D,KAAM+V,KAAKyc,MAAMxyB,KACjB87D,sBAAuB/lD,KAAKyc,MAAMxyB,KAAKO,UAAU,8BACjDw7D,wBAAsB,EACtBC,sCAAoC,KAI5C,IAAC,CApB2B,CAASxmD,EAAAA,eA2CvCymD,EAAkBvnC,aAAe,CAC/B6mC,MAAO,qBACPF,kBAAcn8D,G,gBCvCHi9D,EAAU,SAAA/B,GAAA,SAAA+B,IAAA,OAAAzlD,EAAAA,EAAAA,GAAA,KAAAylD,IAAAvlD,EAAAA,EAAAA,GAAA,KAAAulD,EAAAnyD,UAAA,QAAAqN,EAAAA,EAAAA,GAAA8kD,EAAA/B,IAAA9iD,EAAAA,EAAAA,GAAA6kD,EAAA,EAAAz/D,IAAA,SAAA2D,MACrB,WAEE,IAAM66D,EAAoBnlD,KAAKyc,MAAM4pC,iBAAmBrmD,KAAKyc,MAAM6pC,wBAC9DtmD,KAAKyc,MAAMsoC,aACVwB,EAAWvmD,KAAKyc,MAAMxyB,KAAKO,UAAU,yBACrCg8D,EAAsBxmD,KAAKyc,MAAMxyB,KAAKO,UAAU,+BAEtD,OACEkyB,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,mBAAkB5B,UAC/B2B,EAAAA,EAAAA,MAAA,OAAKC,UAAU,oBAAmB5B,SAAA,EAChC2B,EAAAA,EAAAA,MAAA,OAAKC,UAAU,kBAAiB5B,SAAA,EAC9BJ,EAAAA,EAAAA,KAACsoC,EAAa,CACZM,aAActlD,KAAKyc,MAAMgqC,cAAcnB,aACvCx6D,WAAYkV,KAAKyc,MAAMgqC,cAAcC,YACrCf,gBAAiB3lD,KAAKyc,MAAMgqC,cAAcE,wBAC1CxB,iBAAkBA,EAClBC,uBAAwBplD,KAAKyc,MAAMgqC,cAAc7wB,WACjD4vB,MAAM,iBACNv7D,KAAM+V,KAAKyc,MAAMxyB,QAEnByyB,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,aAAY5B,SACxBypC,KAEH7pC,EAAAA,EAAAA,KAACsoC,EAAa,CACZM,aAActlD,KAAKyc,MAAMmqC,gBAAgBtB,aACzCx6D,WAAYkV,KAAKyc,MAAMmqC,gBAAgBF,YACvCf,gBAAiB3lD,KAAKyc,MAAMmqC,gBAAgBD,wBAC5CxB,iBAAkBA,EAClBC,uBAAwBplD,KAAKyc,MAAMmqC,gBAAgBhxB,WACnD4vB,MAAM,mBACNv7D,KAAM+V,KAAKyc,MAAMxyB,WAIrByyB,EAAAA,EAAAA,KAACwpC,EAAiB,CAChBZ,aAActlD,KAAKyc,MAAMoqC,YAAYvB,aACrCa,iBAAkBnmD,KAAKyc,MAAMoqC,YAAYC,gBACzCnB,gBAAiB3lD,KAAKyc,MAAMoqC,YAAYF,wBACxCnB,MAAM,qBACNv7D,KAAM+V,KAAKyc,MAAMxyB,OAElB+V,KAAKyc,MAAM6pC,yBACV7nC,EAAAA,EAAAA,MAAA,OAAKC,UAAU,iBAAgB5B,SAAA,EAC7B2B,EAAAA,EAAAA,MAAA,SACEsoC,QAAQ,kBAAiBjqC,SAAA,EAEzBJ,EAAAA,EAAAA,KAAA,SACE/yB,GAAG,kBACHqD,KAAK,kBACLqG,KAAK,WACL2zD,QAAShnD,KAAKyc,MAAM4pC,gBACpB16B,SAAU3rB,KAAKyc,MAAMwqC,8BAEtBT,MAEH9pC,EAAAA,EAAAA,KAACwqC,EAAAA,UAAS,CACR,aAAYlnD,KAAKyc,MAAMxyB,KAAKO,UAAU,qBACtCwhC,MAAM,2CAMpB,IAAC,CAhEoB,CAASvsB,EAAAA,eCXnB0nD,EACM,EADNA,GAES,EAFTA,EAGE,MAHFA,EAII,EAJJA,GAKQ,EALRA,GAMA,EAQAC,EAAc,CACzBC,QAAS,CACPC,SAPoB,UAQpBC,YAPuB,WASzBC,UAAW,CACTF,SATsB,UAUtBC,YATyB,YCT7B,SAASE,EAAwBC,EAAYC,EAAaC,GAKxD,MAAO,CACLC,EAAID,EAAME,MAAQJ,EAAe1nD,KAAK+nD,MAAMC,UAL/B,GAMVhoD,KAAK+nD,MAAMC,UAND,GAMuBN,EAClCE,EAAME,MACR/T,EAAI6T,EAAMK,MAAQN,EAAgB3nD,KAAK+nD,MAAMG,WARhC,GASVloD,KAAK+nD,MAAMG,WATD,GASwBP,EACnCC,EAAMK,MAEZ,CAEO,IAAME,EAAc,WAuOxB,OAAA5mD,EAAAA,EAAAA,IAvOwB,SAAA4mD,IAAA,IAAAznD,EAAA,MAAAC,EAAAA,EAAAA,GAAA,KAAAwnD,GAAA,KA+CzBC,WAAa,SAAC1kD,EAAMzZ,GAAI,OAAKA,EAAKwZ,WAAWC,EAAM,CAAEW,IAAK,cAAe,OAEzEgkD,oBAAsB,SAACC,EAAc7+D,EAAS29D,GAAW,MAAM,CAC7DmB,UAAS,WACP,IAAMC,EAAgB,GAChBC,EAAmB,GACrBC,EAAW,GACfliE,IAAAA,KAAOwZ,KAAK2oD,QAAQ,SAACf,GACnB,GAAKphE,IAAAA,YAAcohE,EAAMgB,OAAOC,aAuB9B,OAAQjB,EAAMkB,OACZ,KAAK1B,EAAYC,QAAQC,SACvBM,EAAMj+D,GAAKF,EAAQg9D,cAAc98D,GACjC6+D,EAAcp/C,KAAKw+C,GACnB,MACF,KAAKR,EAAYI,UAAUF,SACzBM,EAAMj+D,GAAKF,EAAQm9D,gBAAgBj9D,GACnC6+D,EAAcp/C,KAAKw+C,GACnB,MACF,KAAKR,EAAYC,QAAQE,YACvBK,EAAMj+D,GAAKF,EAAQg9D,cAAc98D,GACjC8+D,EAAiBr/C,KAAKw+C,GACtB,MACF,KAAKR,EAAYI,UAAUD,YACzBK,EAAMj+D,GAAKF,EAAQm9D,gBAAgBj9D,GACnC8+D,EAAiBr/C,KAAKw+C,QArC1B,OAAQA,EAAMgB,OAAOC,YAAYl/D,IAC/B,IAAK,UACHi+D,EAAMj+D,GAAKF,EAAQg9D,cAAc98D,GACjC6+D,EAAcp/C,KAAKw+C,GACnB,MACF,IAAK,YACHA,EAAMj+D,GAAKF,EAAQm9D,gBAAgBj9D,GACnC6+D,EAAcp/C,KAAKw+C,GACnB,MACF,IAAK,oBACHA,EAAMj+D,GAAKF,EAAQg9D,cAAc98D,GACjC8+D,EAAiBr/C,KAAKw+C,GACtB,MACF,IAAK,sBACHA,EAAMj+D,GAAKF,EAAQm9D,gBAAgBj9D,GACnC8+D,EAAiBr/C,KAAKw+C,GA4B9B,IAEA,IAAMmB,EAAsB,SAAAnB,GAAK,yDAAAz/D,OAAuDy/D,EAAMkB,MAAK,OAAA3gE,OAAMmgE,EAAa37B,aAAai7B,EAAMj+D,GAAIi+D,EAAM7T,GAAE,kBA0BrJ,OAxBIyU,EAAcz8D,OAAS,IACzB28D,EAAQ,qCAAAvgE,OAAwCqgE,EAAc,GAAG7hE,IAAG,WACpE+hE,EAAQ,GAAAvgE,OAAMugE,EAAQ,SACtBliE,IAAAA,KAAOgiE,GAAe,SAACZ,EAAOnxD,GAC5B,IAAMuyD,EAAkB,IAANvyD,EAAW,UAAY,qBACzCiyD,EAAQ,GAAAvgE,OAAMugE,EAAQ,sBAAAvgE,OAAqB6gE,EAAQ,mCAAA7gE,OAAkCy/D,EAAMgB,OAAO57D,KAAI,YAAA7E,OAAW4gE,EAAoBnB,GACvI,IACAc,GAAY,UAGVD,EAAiB18D,OAAS,IAC5B28D,EAAWj/D,EAAQw/D,kBAAiB,GAAA9gE,OAC/BugE,EAAQ,8DAAAvgE,OACRugE,EAAQ,yCAAAvgE,OAAwCsgE,EAAiB,GAAG9hE,IAAG,eAE5E+hE,EAAQ,GAAAvgE,OAAMugE,EAAQ,UAEtBliE,IAAAA,KAAOiiE,GAAkB,SAACb,EAAOnxD,GAC/B,IAAMuyD,EAAkB,IAANvyD,EAAW,gBAAkB,2BAC/CiyD,EAAQ,GAAAvgE,OAAMugE,EAAQ,sBAAAvgE,OAAqB6gE,EAAQ,mCAAA7gE,OAAkCy/D,EAAMgB,OAAO57D,KAAI,YAAA7E,OAAW4gE,EAAoBnB,GACvI,KAEFc,EAAQ,GAAAvgE,OAAMugE,EAAQ,UAEhB,wCAANvgE,OAA+CugE,EAAQ,SACzD,EACD,EAAC,KAEFQ,mBAAqB,SAACv/D,EAAIqD,EAAM87D,EAAOR,EAAcM,EAAQO,GAK3D,MAAO,CACLx/D,GAAAA,EACAqD,KAAAA,EACA87D,MAAAA,EACA1kD,KARW5d,IAAAA,IAAMoiE,GAAQ,SAAAQ,GAAK,MAC9B,CAACd,EAAa7kD,WAAW2lD,EAAM,GAAID,GACjCC,EAAM,GAAG,IAQf,EAAC,KAEDC,sBAAwB,SAACf,EAAc7+D,EAAS6/D,GAC9C,IAIIC,EAJEnC,EAAc5gE,IAAAA,QAAUiD,EAAQ+/D,cAAgBC,EAAqBhgE,EAAQ+/D,aAC7EzB,EAAQ,CAAEj2B,OAAQ,IAAKhH,MAAOrhC,EAAQigE,YACtCd,EAAS,GAITe,EAAoBnjE,IAAAA,YAAciD,EAAQg9D,eAC9C,GACEh9D,EAAQg9D,cAAcn8D,MACpBs/D,EAAsBpjE,IAAAA,YAAciD,EAAQm9D,iBAChD,GACEn9D,EAAQm9D,gBAAgBt8D,MAExBu/D,EAAc,EACZC,EAAgBtjE,IAAAA,YAAciD,EAAQg9D,eAC1C,KACE6C,EAAQ7/D,EAAQg9D,cAAc98D,IAE5BnD,IAAAA,OAASsjE,IAAkBtjE,IAAAA,YAAcsjE,KAC7ClB,EAAOiB,GAAenpD,EAAKwoD,mBACzB,UACAS,EACAvC,EAAYC,QAAQC,SACpBgB,EACAwB,EAAcC,YACdtgE,EAAQ0/D,eAGL3iE,IAAAA,YAAcsjE,EAAcE,kBAE/BpB,EADAiB,GAAe,GACOnpD,EAAKwoD,mBACzB,oBACAS,EACAvC,EAAYC,QAAQE,YACpBe,EACAwB,EAAcE,eACdvgE,EAAQ0/D,iBAKd,IAAMc,EAAmBzjE,IAAAA,YAAciD,EAAQg9D,iBACZ,IAAhCh9D,EAAQm9D,gBAAgBj9D,GACzB,KACE2/D,EAAQ7/D,EAAQm9D,gBAAgBj9D,IAoCpC,OAlCMnD,IAAAA,OAASyjE,IAAoBzjE,IAAAA,YAAcyjE,KAE/CrB,EADAiB,GAAe,GACOnpD,EAAKwoD,mBACzB,YACAU,EACAxC,EAAYI,UAAUF,SACtBgB,EACA2B,EAAgBF,YAChBtgE,EAAQ0/D,eAEVP,EAAOiB,GAAaK,MAAQ,EAEvB1jE,IAAAA,YAAcyjE,EAAgBD,kBAEjCpB,EADAiB,GAAe,GACOnpD,EAAKwoD,mBACzB,sBACAU,EACAxC,EAAYI,UAAUD,YACtBe,EACA2B,EAAgBD,eAChBvgE,EAAQ0/D,eAEVP,EAAOiB,GAAaK,MAAQ,IAIhCxpD,EAAKypD,gBAAgBvB,EAAQn/D,EAAQw/D,mBAErCM,EAAU7oD,EAAK2nD,oBAAoBC,EAAc7+D,EAAS29D,GAE1D5gE,IAAAA,OAAS+iE,EAAS,CAChBa,WAAY3C,IAGP,CACLM,MAAAA,EACAa,OAAAA,EACAjmC,MAhFY,CAAEvc,KAAM,IAiFpBmjD,QAAAA,EAEJ,CAAC,KAAA5iE,IAAA,kBAAA2D,MArOD,SAAgBs+D,EAAQK,GACtBziE,IAAAA,KAAOoiE,GAAQ,SAACyB,EAAMz6D,GACpB,IAAI06D,EACAC,EACJ,OAAQ36D,GACN,KAAK,EACH06D,EAAiB,SACjBC,EAAoB,QACpB,MAEF,KAAK,EAMH,IAAMC,EAAYvB,GAAkC,sBAAZoB,EAAK1gE,GAC7C2gE,EAAiBE,EAAY,SAAW,UACxCD,EAAoBC,EAAY,YAAc,QAC9C,MACF,KAAK,EACHF,EAAiB,UACjBC,EAAoB,QACpB,MACF,KAAK,EACHD,EAAiB,UACjBC,EAAoB,YAMxBF,EAAKI,OAAS,CACZC,OAAQJ,EACR12D,SAAS,EACT+2D,OAAQ,EACRC,UAAWP,EAAKvB,MAChB+B,UAAW,UACXC,UAAW,GAEbT,EAAKU,UAAYR,EACjBF,EAAKS,UAAY,CACnB,GACF,IAAC,CA7CwB,G,YChBdE,GAAuBzpD,EAAAA,EAAAA,IAClC,SAAAypD,IAAkE,IAADtqD,EAAA,KAAA7Z,EAAAoN,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAJ,CAAC,EAAhDhK,EAAIpD,EAAJoD,KAAMghE,EAAQpkE,EAARokE,SAAUC,EAA0BrkE,EAA1BqkE,4BAA0BvqD,EAAAA,EAAAA,GAAA,KAAAqqD,GAqCxD,KAIAG,qBAAuB,kBAAM3kE,IAAAA,OAASka,EAAK0qD,gBAAgB,SAACC,EAASlqC,GAOnE,OANKA,EAAKuI,UACR2hC,EAAQjiD,KAAK,CACXzf,GAAIw3B,EAAKx3B,GACTW,MAAOoW,EAAKzW,KAAKO,UAAU22B,EAAK72B,SAG7B+gE,CACT,GAAG,GAAI,EAEP,KAKAC,mBAAqB,SAACC,GACpB,QAAepiE,IAAXoiE,EACF,OAAOA,EAGT,IAAMpqC,EAAO36B,IAAAA,UAAYka,EAAK0qD,eAAgB,CAAEzhE,GAAI4hE,IACpD,MAAO,CACL5hE,GAAIw3B,EAAKx3B,GACTW,MAAOoW,EAAKzW,KAAKO,UAAU22B,EAAK72B,OAEpC,EAEA,KAKAkhE,6BAA+B,SAACC,GAC9B,IAAMtqC,EAAO36B,IAAAA,UAAYka,EAAK0qD,eAAgB,CAAEzhE,GAAI8hE,IAIpD,OAAKtqC,GAAQA,EAAKuI,SACThpB,EAAKgrD,kCAIPD,CACT,EAEA,KAKAC,gCAAkC,WAChC,IAAMvqC,EAAO36B,IAAAA,UAAYka,EAAK0qD,eAAgB,CAAE1hC,UAAU,IAE1D,GAAKvI,EAQL,OAAOA,EAAKx3B,EACd,EAEA,KAMAgiE,yBAA2B,SAACC,GAE1B,OADaplE,IAAAA,UAAYka,EAAK0qD,eAAgB,CAAES,UAAWD,IAC/CjiE,EACd,EAEA,KAKAmiE,yBAA2B,SAACP,GAC1B,IAAMpqC,EAAO36B,IAAAA,UAAYka,EAAK0qD,eAAgB,CAAEzhE,GAAI4hE,IACpD,OAAOpqC,GAAQA,EAAK0qC,SACtB,EAEA,KAMAE,yBAA2B,SAACR,EAAQS,GAClCxlE,IAAAA,OAASA,IAAAA,UAAYka,EAAK0qD,eAAgB,CAAEzhE,GAAI4hE,IAAW,CAAE7hC,SAAUsiC,GACzE,EAEA,KAKAC,yBAA2B,SAACV,GAE1B,OADa/kE,IAAAA,UAAYka,EAAK0qD,eAAgB,CAAEzhE,GAAI4hE,IACxCW,UACd,EAAE,KAEFC,cAAgB,SAACjiE,GACf,GAAIA,EAAW,CACb,IAAM+xB,EAAY,IAAIhT,KAAK/e,EAAUme,OAC/B6T,EAAU,IAAIjT,KAAK/e,EAAUoe,KAC7B8jD,EAAW/1D,KAAKq2B,IAAIxQ,EAAQrL,UAAYoL,EAAUpL,WAExD,OAAOxa,KAAKC,MAAM81D,EAAQ,MAC5B,CACA,OAAO,IACT,EAAE,KAEFC,kBAAoB,SAACC,EAAU9jD,EAAKD,GAAG,OAAK+jD,EAAW9jD,GAAO8jD,EAAW/jD,CAAI,EAAD,KAE5EgkD,6BAA+B,SAACriE,GAC9B,IAAMsiE,EAAe9rD,EAAKyrD,cAAcjiE,GAClCuiE,EAAmB/rD,EAAKyrD,cAAcjiE,EAAUG,UAChDqiE,EAAM,IAAIzjD,KAEVD,EAAkB,IAAIC,KAAKyjD,EAAIxjD,SAASwjD,EAAI5oD,WAAa,IAE3D6oD,EAAyC,yBAAlBjsD,EAAKuqD,UAC9BuB,EAAe,KACdC,GAAmBA,EAAmB,KACrCviE,EAAUme,MAAQW,OAClB9e,EAAUG,UAAWH,EAAUG,SAASge,MAAQW,GAEZ,QAApCtI,EAAKwqD,6BACPyB,GAAuB,GAGzB,IAAIC,EAAsBlsD,EAAK2rD,kBAAkBG,EAAc,EAAG,OAC/DC,GAAmB/rD,EAAK2rD,kBAAkBI,EAAkB,EAAG,IAE1B,QAApC/rD,EAAKwqD,6BACP0B,EAAsBlsD,EAAK2rD,kBAAkBG,EAAc,EAAG,OAC3DC,GAAmB/rD,EAAK2rD,kBAAkBI,EAAkB,EAAG,KAGpE,IAAMI,EAAuBnsD,EAAK2rD,kBAAkBG,EAAc,EAAG,QAClEC,GAAmB/rD,EAAK2rD,kBAAkBI,EAAkB,EAAG,KAE5DK,EAAwBpsD,EAAK2rD,kBAAkBG,EAAc,GAAI,QACpEC,GAAmB/rD,EAAK2rD,kBAAkBI,EAAkB,GAAI,KAE7DM,EAA0BrsD,EAAK2rD,kBAAkBG,EAAc,GAAIrjD,QACtEsjD,GAAmB/rD,EAAK2rD,kBAAkBI,EAAkB,GAAItjD,KAEnEzI,EAAKqrD,yBAAyB,EAAGY,GACjCjsD,EAAKqrD,yBAAyB,EAAGa,GACjClsD,EAAKqrD,yBAAyB,EAAGc,GACjCnsD,EAAKqrD,yBAAyB,EAAGe,GACjCpsD,EAAKqrD,yBAAyB,EAAGgB,EACnC,EArME/sD,KAAK/V,KAAOA,EACZ+V,KAAKirD,SAAWA,EAChBjrD,KAAKorD,eAAiB,CAAC,CACrBzhE,GAAI,EACJW,MAAO,iCACPuhE,UAAW,OACXniC,UAAU,EACVwiC,WAAY,CAAEc,SAAU,UACvB,CACDrjE,GAAI,EACJW,MAAO,gCACPuhE,UAAW,MACXniC,UAAU,EACVwiC,WAAY,CAAEe,SAAU,SACvB,CACDtjE,GAAI,EACJW,MAAO,iCACPuhE,UAAW,OACXniC,UAAU,EACVwiC,WAAY,CAAEe,SAAU,UACvB,CACDtjE,GAAI,EACJW,MAAO,kCACPuhE,UAAW,QACXniC,UAAU,EACVwiC,WAAY,CAAEe,SAAU,SACvB,CACDtjE,GAAI,EACJW,MAAO,oCACPuhE,UAAW,UACXniC,UAAU,EACVwiC,WAAY,CAAEe,SAAU,UAE1BjtD,KAAKkrD,2BAA6BA,CACpC,ICnCIgC,EAAa,CAAEvjE,IAAK,EAAGW,MAAO,0BAA2B0C,KAAM,QAC/DmgE,EAAY,IAOLC,EAAW,GACXC,EAAqB,CAChC,aACA,kBACA,aACA,qBACA,gCACA,+BACA,wBACA,wBACA,wBACA,sBACA,uBAGWC,GAAmB/rD,EAAAA,EAAAA,IAC9B,SAAA+rD,EAAYrjE,EAAMpC,GAAe,IAAD6Y,EAAA,MAAAC,EAAAA,EAAAA,GAAA,KAAA2sD,GA8VhC,KAQAC,eAAiB,WAmBL,IAGN7G,EAHK7/D,EAAAoN,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAP,CAAC,EAACu5D,EAAA3mE,EAlBJ4mE,QAAAA,OAAO,IAAAD,GAAQA,EAAAE,EAAA7mE,EACf8mE,+BAAAA,OAA8B,IAAAD,GAAQA,EAAAE,EAAA/mE,EACtCgnE,sCAAAA,OAAqC,IAAAD,GAAQA,EAAAE,EAAAjnE,EAC7CqjB,sCAAAA,OAAqC,IAAA4jD,GAAQA,EAAAC,EAAAlnE,EAC7CmnE,6BAAAA,OAA4B,IAAAD,GAAQA,EAAAE,EAAApnE,EACpCqnE,wCAAAA,OAAuC,IAAAD,GAAQA,EAAAE,EAAAtnE,EAC/CunE,uCAAAA,OAAsC,IAAAD,GAAQA,EAAAE,EAAAxnE,EAC9CijB,QAAOwkD,OAAA,IAAAD,EAOH,CAAC,EAACA,EANcj7C,EAAyBk7C,EAA3Cj7C,iBACoBC,EAA2Bg7C,EAA/C/6C,mBACcg7C,EAAqBD,EAAnCE,aACAC,EAAyBH,EAAzBG,0BACgBC,EAAuBJ,EAAvCK,eACA9kD,EAAiCykD,EAAjCzkD,kCAAiC+kD,EAAA/nE,EAEnCgoE,cAAAA,OAAa,IAAAD,EAAG,KAAIA,EAAAE,EAAAjoE,EACpBkoE,qBAAAA,OAAoB,IAAAD,EAAG,GAAEA,EACzBE,EAAanoE,EAAbmoE,cAEMjlD,EAAgBF,IAA4D,MAAtBnJ,EAAK7Y,cAA8C,QAAtB6Y,EAAK7Y,cACxFmiB,EAAiBH,GAA2D,QAAtBnJ,EAAK7Y,aAEjE,GAAIknE,EAAqBhjE,OAAS,EAAG,CACnC,IAAMkjE,EAAgBzoE,IAAAA,OAASka,EAAKwuD,YAAY,SAAA/jE,GAAM,OAAI3E,IAAAA,SAAWuoE,EAAsB5jE,EAAO6B,KAAK,IAMvG,OAJE05D,EADE+G,EACS,CAAIP,GAAU/kE,QAAA+W,EAAAA,EAAAA,GAAK+vD,IAEhBA,EAETzoE,IAAAA,MAAQkgE,GACZx7D,KAAI,SAAAi2B,GAAI,MAAK,CACZx3B,GAAIw3B,EAAKx3B,GACTW,MAAOoW,EAAKzW,KAAKO,UAAU22B,EAAK72B,OAChC0C,KAAMm0B,EAAKn0B,KACZ,IACA1C,OACL,CAEEo8D,EADE+G,EACS,CAAIP,GAAU/kE,QAAA+W,EAAAA,EAAAA,GAAKwB,EAAKwuD,aAErBxuD,EAAKwuD,WAGrB,IAAMC,EAAsB,GACtBC,EAAgB,GAEjBzB,IACHyB,EAAchmD,KAAK,0BACnBgmD,EAAchmD,KAAK,iCAGhBglD,GACHgB,EAAchmD,KAAIy8B,MAAlBupB,EAAsB,CACpB,gCACA,4BACA,mCACA,wCACA,6BACA,sCAICvB,GACHuB,EAAchmD,KAAIy8B,MAAlBupB,EAAsB,CACpB,oBACA,8BAIAllD,GACFklD,EAAchmD,KAAK,mBAGf4kD,GAAgCE,GACpCkB,EAAchmD,KAAIy8B,MAAlBupB,EAAsB/B,GAGnBW,GACHoB,EAAchmD,KAAK,cAGhBmlD,GACHa,EAAchmD,KAAIy8B,MAAlBupB,EAAsB,CACpB,aACA,eAICX,GACHW,EAAchmD,KAAIy8B,MAAlBupB,EAAsB,CACpB,WACA,iBACA,sBAICV,GACHU,EAAchmD,KAAIy8B,MAAlBupB,EAAsB,CACpB,sCACA,0CACA,qDAICrlD,GACHqlD,EAAchmD,KAAIy8B,MAAlBupB,EAAsB,CACpB,wBACA,kBACA,2BACA,YACA,0BACA,kBACA,gBACA,8BACA,yBAIEplD,GAAmBD,IAAoC,aAAlBilD,GACzCI,EAAchmD,KAAIy8B,MAAlBupB,EAAsB,CACpB,YACA,gBACA,uBAKJA,EAAchmD,KAAK,UAEnBgmD,EAAchmD,KAAIy8B,MAAlBupB,GAAalwD,EAAAA,EAAAA,GAASkU,GAA6BE,EACjD9sB,IAAAA,KAAOitB,EAAAA,IACPjtB,IAAAA,OAASitB,EAAAA,MAENjtB,IAAAA,QAAU4oE,IACbD,EAAoB/lD,MAAK,SAAAje,GAAM,OAAI3E,IAAAA,SAAW4oE,EAAejkE,EAAO6B,KAAK,IAGvExG,IAAAA,WAAaqoE,IACfM,EAAoB/lD,KAAK5iB,IAAAA,OAASqoE,IAIpC,OAAOroE,IAAAA,MAAQkgE,GACZ2I,QAFwB,SAAA/kE,GAAK,OAAI9D,IAAAA,IAAM2oE,GAAqB,SAAAG,GAAS,OAAIA,EAAUhlE,EAAM,GAAE,IAG3FY,KAAI,SAAAi2B,GAAI,MAAK,CACZx3B,GAAIw3B,EAAKx3B,GACTW,MAAOoW,EAAKzW,KAAKO,UAAU22B,EAAK72B,OAChC0C,KAAMm0B,EAAKn0B,KACZ,IACA1C,OACL,EAEA,KAKAilE,cAAgB,SAAChE,GACf,IAAM7E,EAAW,CAAIwG,GAAU/kE,QAAA+W,EAAAA,EAAAA,GAAKwB,EAAKwuD,aACnC/tC,EAAO36B,IAAAA,UAAYkgE,EAAa,CAAE/8D,GAAI4hE,IAC5C,MAAO,CACL5hE,GAAIw3B,EAAKx3B,GACTW,MAAOoW,EAAKzW,KAAKO,UAAU22B,EAAK72B,OAChC0C,KAAMm0B,EAAKn0B,KAEf,EAEA,KAKAwiE,oBAAsB,SAACjE,GACrB,IAAM7E,EAAW,CAAIwG,GAAU/kE,QAAA+W,EAAAA,EAAAA,GAAKwB,EAAKwuD,aACnC/tC,EAAO36B,IAAAA,UAAYkgE,EAAa,CAAE/8D,GAAI4hE,IAC5C,OAAOpqC,EAAKmD,WAAanD,EAAKmD,WAAanD,EAAKn0B,IAClD,EAEA,KAKAyiE,oBAAsB,SAACnrC,GACrB,IAAMoiC,EAAW,CAAIwG,GAAU/kE,QAAA+W,EAAAA,EAAAA,GAAKwB,EAAKwuD,aACnC/tC,EAAO36B,IAAAA,UAAYkgE,EAAa,CAAE15D,KAAMs3B,IAC9C,OAAOnD,EAAOA,EAAKx3B,IAAM,CAC3B,EAEA,KAKA+lE,mBAAqB,SAACnE,GAEpB,OADa/kE,IAAAA,UAAYka,EAAKwuD,WAAY,CAAEvlE,GAAI4hE,IACpChD,SACd,EAEA,KAQAoH,gBAAkB,SAACvoC,EAAQ39B,GAAO,OAAMjD,IAAAA,SAAW4gC,GACjD1mB,EAAKzW,KAAK2lE,cAAcxoC,EAAQ5gC,IAAAA,OAAS,CACvCsvC,sBAAuB,EACvBC,sBAAuB,GACtBtsC,IACH0jE,CAAS,EAEX,KAQA0C,gBAAkB,SAACzoC,EAAQ39B,GAAO,OAAMjD,IAAAA,SAAW4gC,GACjD1mB,EAAKzW,KAAK2lE,cAAcxoC,EAAQ5gC,IAAAA,OAAS,CACvCsvC,sBAAuB,EACvBC,sBAAuB,GACtBtsC,IACH0jE,CAAS,EAGX,KAQA2C,0BAA4B,SAAC1oC,EAAQ39B,GAAO,OAAMjD,IAAAA,SAAW4gC,GAC3D1mB,EAAKzW,KAAK2lE,cAAcxoC,EAAS,IAAM5gC,IAAAA,OAAS,CAC9CsvC,sBAAuB,EACvBC,sBAAuB,GACtBtsC,IACH0jE,CAAS,EAEX,KAQA4C,uBAAyB,SAAC3oC,EAAQ39B,GAAO,OAAMjD,IAAAA,SAAW4gC,GACxD1mB,EAAKzW,KAAK4rC,cAAczO,EAAS,IAAK5gC,IAAAA,OAAS,CAC7CsvC,sBAAuB,EACvBC,sBAAuB,GACtBtsC,IACH0jE,CAAS,EAEX,KAQA6C,eAAiB,SAAC5oC,EAAQ39B,GAAO,OAAMjD,IAAAA,SAAW4gC,GAEhD1mB,EAAKzW,KAAK+lE,eAAe5oC,OAAQj+B,EAAWM,GAC5C0jE,CAAS,EArnBTntD,KAAK/V,KAAOA,EACZ+V,KAAKnY,aAAeA,EACpBmY,KAAKkvD,WAAa,CAAC,CACjBvlE,GAxBkB,EAyBlBW,MAAO,oBACP0C,KAAM,SACNu7D,UAAWvoD,KAAK2vD,iBACf,CACDhmE,GAAI,EACJW,MAAO,+BACP0C,KAAM,aACNu7D,UAAWvoD,KAAKgwD,gBACf,CACDrmE,GAAI,EACJW,MAAO,iBACP0C,KAAM,MACNu7D,UAAWvoD,KAAKgwD,gBACf,CACDrmE,GArCgB,EAsChBW,MAAO,yBACP0C,KAAM,cACNu7D,UAAWvoD,KAAK2vD,iBACf,CACDhmE,GAAI,EACJW,MAAO,iBACP0C,KAAM,gBACNs3B,WAAY,MACZikC,UAAWvoD,KAAK+vD,wBACf,CACDpmE,GAnDuB,EAoDvBW,MAAO,uBACP0C,KAAM,cACNu7D,UAAWvoD,KAAK2vD,iBACf,CACDhmE,GAtDiB,EAuDjBW,MAAO,mBACP0C,KAAM,QACNs3B,WAAY,QACZikC,UAAWvoD,KAAKgwD,gBACf,CACDrmE,GAAI,EACJW,MAAO,oBACP0C,KAAM,kBACNu7D,UAAWvoD,KAAK6vD,iBACf,CACDlmE,GAAI,EACJW,MAAO,+BACP0C,KAAM,oBACNu7D,UAAWvoD,KAAK+vD,wBACf,CACDpmE,GAAI,EACJW,MAAO,uCACP0C,KAAM,4BACNu7D,UAAWvoD,KAAK+vD,wBACf,CACDpmE,GAAI,GACJW,MAAO,4BACP0C,KAAM,iBACNu7D,UAAWvoD,KAAK+vD,wBACf,CACDpmE,GAAI,GACJW,MAAO,qBACP0C,KAAM,4BACNu7D,UAAWvoD,KAAKgwD,gBACf,CACDrmE,GAAI,GACJW,MAAO,kBACP0C,KAAM,mBACNu7D,UAAWvoD,KAAK+vD,wBACf,CACDpmE,GAAI,GACJW,MAAO,8BACP0C,KAAM,mBACNu7D,UAAWvoD,KAAKgwD,gBACf,CACDrmE,GAAI,GACJW,MAAO,4BACP0C,KAAM,iBACNu7D,UAAWvoD,KAAK2vD,iBACf,CACDhmE,GAAI,GACJW,MAAO,+BACP0C,KAAM,oBACNu7D,UAAWvoD,KAAK+vD,wBACf,CACDpmE,GAAI,GACJW,MAAO,oDACP0C,KAAM,yCACNu7D,UAAWvoD,KAAKgwD,gBACf,CACDrmE,GAAI,GACJW,MAAO,2CACP0C,KAAM,gCACNu7D,UAAWvoD,KAAK+vD,wBACf,CACDpmE,GAAI,GACJW,MAAO,oCACP0C,KAAM,yBACNu7D,UAAWvoD,KAAK2vD,iBACf,CACDhmE,GAAI,GACJW,MAAO,wBACP0C,KAAM,aACNu7D,UAAWvoD,KAAK2vD,iBACf,CACDhmE,GAAI,GACJW,MAAO,6BACP0C,KAAM,kBACNu7D,UAAWvoD,KAAK+vD,wBACf,CACDpmE,GAAI,GACJW,MAAO,wBACP0C,KAAM,aACNu7D,UAAWvoD,KAAKgwD,gBACf,CACDrmE,GAAI,GACJW,MAAO,gCACP0C,KAAM,qBACNu7D,UAAWvoD,KAAK8vD,2BACf,CACDnmE,GAAI,GACJW,MAAO,2CACP0C,KAAM,gCACNu7D,UAAWvoD,KAAK6vD,iBACf,CACDlmE,GAAI,GACJW,MAAO,0CACP0C,KAAM,+BACNu7D,UAAWvoD,KAAK6vD,iBACf,CACDlmE,GAAI,GACJW,MAAO,mCACP0C,KAAM,wBACNu7D,UAAWvoD,KAAK2vD,iBACf,CACDhmE,GAAI,GACJW,MAAO,mCACP0C,KAAM,wBACNu7D,UAAWvoD,KAAK2vD,iBACf,CACDhmE,GAAI,GACJW,MAAO,mCACP0C,KAAM,wBACNu7D,UAAWvoD,KAAK2vD,iBACf,CACDhmE,GAAI,GACJW,MAAO,iCACP0C,KAAM,sBACNu7D,UAAWvoD,KAAK2vD,iBACf,CACDhmE,GAAI,GACJW,MAAO,iCACP0C,KAAM,sBACNu7D,UAAWvoD,KAAK+vD,wBACf,CACDpmE,GAAI,GACJW,MAAO,2CACP0C,KAAM,gCACNu7D,UAAWvoD,KAAK6vD,iBACf,CACDlmE,GAAI,GACJW,MAAO,uCACP0C,KAAM,4BACNu7D,UAAWvoD,KAAK6vD,iBACf,CACDlmE,GAAI,GACJW,MAAO,mDACP0C,KAAM,wCACNu7D,UAAWvoD,KAAK+vD,wBACf,CACDpmE,GAAI,GACJW,MAAO,wCACP0C,KAAM,6BACNu7D,UAAWvoD,KAAK+vD,wBACf,CACDpmE,GAjMuB,GAkMvBW,MAAO,+BACP0C,KAAM,oBACNu7D,UAAWvoD,KAAK6vD,iBACf,CACDlmE,GAAI,GACJW,MAAO,kCACP0C,KAAM,uBACNu7D,UAAWvoD,KAAK6vD,iBACf,CACDlmE,GAAI,GACJW,MAAO,0CACP0C,KAAM,+BACNu7D,UAAWvoD,KAAK6vD,iBACf,CACDlmE,GAAI,GACJW,MAAO,kCACP0C,KAAM,uBACNu7D,UAAWvoD,KAAKgwD,gBACf,CACDrmE,GAAI,GACJW,MAAO,mCACP0C,KAAM,wBACNu7D,UAAWvoD,KAAK+vD,wBACf,CACDpmE,GAAI,GACJW,MAAO,qCACP0C,KAAM,0BACNu7D,UAAWvoD,KAAKgwD,gBACf,CACDrmE,GAAI,GACJW,MAAO,sCACP0C,KAAM,2BACNu7D,UAAWvoD,KAAK+vD,wBACf,CACDpmE,GAAI,GACJW,MAAO,8CACP0C,KAAM,mCACNu7D,UAAWvoD,KAAK6vD,iBACf,CACDlmE,GAAI,GACJW,MAAO,+CACP0C,KAAM,oCACNu7D,UAAWvoD,KAAK+vD,wBACf,CACDpmE,GAAI,GACJW,MAAO,wBACP0C,KAAM,aACNu7D,UAAWvoD,KAAKgwD,gBACf,CACDrmE,GAAI,GACJW,MAAO,kCACP0C,KAAM,SACNu7D,UAAWvoD,KAAK2vD,iBACf,CACDhmE,GAAI,GACJW,MAAO,wBACP0C,KAAM,aACNu7D,UAAWvoD,KAAKgwD,gBACf,CACDrmE,GAAI,GACJW,MAAO,wBACP0C,KAAM,aACNu7D,UAAWvoD,KAAK2vD,iBACf,CACDhmE,GAAI,GACJW,MAAO,sBACP0C,KAAM,WACNu7D,UAAWvoD,KAAK2vD,iBACf,CACDhmE,GAAI,GACJW,MAAO,4BACP0C,KAAM,iBACNu7D,UAAWvoD,KAAKgwD,gBACf,CACDrmE,GAAI,GACJW,MAAO,+BACP0C,KAAM,oBACNu7D,UAAWvoD,KAAKgwD,gBAElB,CACErmE,GAAI,GACJW,MAAO,iDACP0C,KAAM,sCACNu7D,UAAWvoD,KAAK6vD,iBAElB,CACElmE,GAAI,GACJW,MAAO,qDACP0C,KAAM,0CACNu7D,UAAWvoD,KAAK6vD,iBAElB,CACElmE,GAAI,GACJW,MAAO,8DACP0C,KAAM,mDACNu7D,UAAWvoD,KAAK6vD,iBAElB,CACElmE,GAAI,GACJW,MAAO,uBACP0C,KAAM,YACNu7D,UAAWvoD,KAAK2vD,iBAElB,CACEhmE,GAAI,GACJW,MAAO,mCACP0C,KAAM,wBACNu7D,UAAWvoD,KAAK+vD,wBAElB,CACEpmE,GAAI,GACJW,MAAO,6BACP0C,KAAM,kBACNu7D,UAAWvoD,KAAKgwD,gBAElB,CACErmE,GAAI,GACJW,MAAO,2BACP0C,KAAM,gBACNu7D,UAAWvoD,KAAK2vD,iBAElB,CACEhmE,GAAI,GACJW,MAAO,sCACP0C,KAAM,2BACNu7D,UAAWvoD,KAAK+vD,wBAElB,CACEpmE,GAAI,GACJW,MAAO,gCACP0C,KAAM,qBACNu7D,UAAWvoD,KAAKgwD,gBAElB,CACErmE,GAAI,GACJW,MAAO,uBACP0C,KAAM,YACNu7D,UAAWvoD,KAAK2vD,iBAElB,CACEhmE,GAAI,GACJW,MAAO,qCACP0C,KAAM,0BACNu7D,UAAWvoD,KAAK+vD,wBAElB,CACEpmE,GAAI,GACJW,MAAO,6BACP0C,KAAM,kBACNu7D,UAAWvoD,KAAKgwD,gBAElB,CACErmE,GAAI,GACJW,MAAO,2BACP0C,KAAM,gBACNu7D,UAAWvoD,KAAK2vD,iBAElB,CACEhmE,GAAI,GACJW,MAAO,yCACP0C,KAAM,8BACNu7D,UAAWvoD,KAAK+vD,wBAElB,CACEpmE,GAAI,GACJW,MAAO,iCACP0C,KAAM,sBACNu7D,UAAWvoD,KAAKgwD,gBAIpB,ICtVWC,EAAgB,WAc1B,OAAA1uD,EAAAA,EAAAA,IAbD,SAAA0uD,IAES,IAADvvD,EAAA,KAAAxZ,EAAA+M,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAJ,CAAC,EADHhK,EAAI/C,EAAJ+C,KAAIimE,EAAAhpE,EAAE2B,YAAAA,OAAW,IAAAqnE,EAAG,CAAC,EAACA,EAAEjF,EAAQ/jE,EAAR+jE,SAAUC,EAA0BhkE,EAA1BgkE,2BAA4BrjE,EAAYX,EAAZW,cAAY8Y,EAAAA,EAAAA,GAAA,KAAAsvD,GAc5E,KAKAE,cAAgB,SAAC30D,GACf,IAAI40D,EAAe,wBAMnB,OALI50D,EAAM9F,IAAI,cACZ06D,EAAe,wBACN50D,EAAM9F,IAAI,iBACnB06D,EAAe,0BAEV1vD,EAAKzW,KAAKO,UAAU4lE,EAC7B,EAEA,KAKAC,cAAgB,WAAgB,OAARp8D,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,IAAAA,UAAA,GACtByM,EAAKzW,KAAKO,UAAU,kBACpBkW,EAAKzW,KAAKO,UAAU,kBAAkB,EAExC,KAIA8lE,iBAAmB,SAAAlsD,GAAI,OAAI5d,IAAAA,OAAS4d,GAAM,EAAG,EAE7C,KAIAmsD,uBAAyB,SAAAC,GAAQ,OAC/BhqE,IAAAA,SAAWgqE,IACRhqE,IAAAA,QAAUgqE,EAASzG,eAClBvjE,IAAAA,QAAUgqE,EAASzG,cACpBvjE,IAAAA,MAAQgqE,EAASzG,aAAa,SAAA0G,GAAe,OAAIjqE,IAAAA,QAAUiqE,EAAgB,GAAE,EAElF,KAIAC,0BAA4B,SAAAF,GAAQ,OAClChqE,IAAAA,SAAWgqE,IACRhqE,IAAAA,QAAUgqE,EAASxG,kBAClBxjE,IAAAA,QAAUgqE,EAASxG,iBACpBxjE,IAAAA,MAAQgqE,EAASxG,gBAAgB,SAAA2G,GAAkB,OAAInqE,IAAAA,QAAUmqE,EAAmB,GAAE,EAE3F,KASAC,cAAgB,SAACxsD,EAAM+kD,GACrB,IAAM0H,EAAgBnwD,EAAK4vD,iBAAiBlsD,GACtCssD,EAA4BhwD,EAAKgwD,0BAA0BG,GAC3DC,EAAiBD,EAAc9G,YAAY,GAAG,GAC9CgH,EAAerwD,EAAKswD,qBAAqBH,EAAc9G,aACvDkH,EAAwBP,EAC5BG,EAAc7G,eAAe,GAAG,GAChC,GACIkH,EAAsBR,EAC1BhwD,EAAKswD,qBAAqBH,EAAc7G,gBACxC,GAEF,MAAO,CACLpF,iBAAkBlkD,EAAK+C,WAAWqtD,EAAgB3H,GAClDrE,eAAgBpkD,EAAK+C,WAAWstD,EAAc5H,GAC9CvlC,oBAAqBljB,EAAK+C,WAAWwtD,EAAuB9H,GAC5DtlC,kBAAmBnjB,EAAK+C,WAAWytD,EAAqB/H,GAE5D,EAmBA,KAQAgI,sBAAwB,eAACC,EAAUn9D,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAG,CAAC,EAAG46D,EAAa56D,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAG,KAAM86D,EAAoB96D,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAG,GAAI+6D,EAAa/6D,UAAAlI,OAAA,EAAAkI,UAAA,QAAA9K,EAAA,OACtGuX,EAAK2wD,eAAe9D,eAAe/mE,IAAAA,OAAS4qE,EAAY,CACtD3D,SAAS,EACToB,cAAAA,EACAE,qBAAAA,EACAC,cAAAA,IACE,EAEN,KAQAsC,wBAA0B,eAACF,EAAUn9D,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAG,CAAC,EAAG46D,EAAa56D,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAG,KAAM86D,EAAoB96D,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAG,GAAI+6D,EAAa/6D,UAAAlI,OAAA,EAAAkI,UAAA,QAAA9K,EAAA,OACxGuX,EAAK2wD,eAAe9D,eAAe/mE,IAAAA,OAAS4qE,EAAY,CACtD3D,SAAS,EACToB,cAAAA,EACAE,qBAAAA,EACAC,cAAAA,IACE,EAEN,KAKAO,cAAgB,SAAA5lE,GAAE,OAAI+W,EAAK2wD,eAAe9B,cAAc5lE,EAAI,EAE5D,KAKA4nE,cAAgB,SAAA5nE,GAAE,OAAI+W,EAAK2wD,eAAe7B,oBAAoB7lE,EAAI,EAElE,KAOAgjC,aAAe,SAAChjC,EAAIW,GAAyB,IAAlBb,EAAOwK,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAG,CAAC,EAEpC,OADkByM,EAAK2wD,eAAe3B,mBAAmB/lE,EAClD4+D,CAAUj+D,EAAOb,EAC1B,EAEA,KAKA+nE,wBAA0B,SAAA7nE,GAAE,OAAI+W,EAAK+wD,mBAAmBnG,mBAAmB3hE,EAAI,EAE/E,KAIAwhE,qBAAuB,kBAAMzqD,EAAK+wD,mBAAmBtG,sBAAuB,EAE5E,KAKAuG,mBAAqB,SAAA/nE,GAAE,OAAI+W,EAAK+wD,mBAAmB3F,yBAAyBniE,EAAI,EAEhF,KAOAgoE,0BAA4B,SAAC5qE,EAAY0e,GAAW,OAClD1e,EAAW6qE,qBAAqBl6D,MAAK,SAACm6D,GACpC,IAAMC,EAAgBtrE,IAAAA,OACpBqrE,EAAiB,GAAD1pE,OACbsd,EAAYssD,aAAY,cAC3B5K,GAGI6K,EAA0BxrE,IAAAA,OAC9BqrE,EAAiB,GAAD1pE,OACbsd,EAAYssD,aAAY,sBAC3B5K,GAGI8K,EAAwBzrE,IAAAA,OAC5BqrE,EAAiB,GAAD1pE,OACbsd,EAAYssD,aAAY,gBAC3B5K,GAEI+K,EACJxxD,EAAK+wD,mBAAmB9F,yBAAyBsG,GAE/CE,EAAkBhL,EACtB,GAAIzmD,EAAK0S,0BAA2B,CAClC,IAAMg/C,EAAoB,GAAAjqE,OAAMsd,EAAYssD,aAAY,kBACpDvrE,IAAAA,IAAMqrE,EAAkBO,KAC1BD,EACEzxD,EAAKpX,gBAAgBuoE,EAAiBO,IAE5C,MACED,EAAkB3rE,IAAAA,OAChBqrE,EAAiB,GAAD1pE,OACbsd,EAAYssD,aAAY,kBAC3B5K,GAIJ,IAAIkL,EAAoBlL,EACxB,GAAIzmD,EAAK0S,0BAA2B,CAClC,IAAMk/C,EAAsB,GAAAnqE,OAAMsd,EAAYssD,aAAY,oBACtDvrE,IAAAA,IAAMqrE,EAAkBS,KAC1BD,EACE3xD,EAAKpX,gBAAgBuoE,EAAiBS,IAE5C,MACED,EAAoB7rE,IAAAA,OAClBqrE,EAAiB,GAAD1pE,OACbsd,EAAYssD,aAAY,oBAC3B5K,GAIJ,MAAO,CACLoL,UAAWT,EACXU,kBAAmBR,EACnB7I,cAAe+I,EACfO,gBAAiBN,EACjBO,kBAAmBL,EAEvB,GAAG,EAEL,KAMAM,sBAAwB,SAACzoE,EAAW0oE,GAElC,OADAlyD,EAAK+wD,mBAAmBlF,6BAA6BriE,GAC9CwW,EAAK+wD,mBAAmBjG,6BAA6BoH,EAC9D,EAEA,KAKAC,YAAc,SAACC,GACb,IAqCMC,EAAM,CAAC,EAYb,OAVAvsE,IAAAA,KAAOssE,GAAS,SAAClK,GACf,GAAKA,EAAL,CAGA,IAAMoK,EAAWtyD,EAAK2wD,eAAe5B,oBAAoB7G,EAAOqK,YAEhEF,EAAIC,GAAY,CAAC,EACjBD,EAAIC,GA9CuB,SAACpK,GAC5B,IAAMmK,EAAM,CAAC,EAEPG,EAAc,SAACtL,EAAOuL,GACtBA,EACFJ,EAAIhJ,YAAcgJ,EAAIhJ,aAAe,GAErCgJ,EAAI/I,eAAiB+I,EAAI/I,gBAAkB,GAG7C,IAAMoJ,EAAWxL,EAKjBwL,EAASC,SAAWzL,EAAMyL,SAASC,UAAU,EAAG,IAEhD,IAAMC,EAAW,IAAItqD,KAAKmqD,EAASC,UAE/BF,EACFJ,EAAIhJ,YAAY3gD,KAAK,CAACmqD,EAAS1iD,UAAWuiD,EAASI,MAAO5L,EAAMyL,WAEhEN,EAAI/I,eAAe5gD,KAAK,CAACmqD,EAAS1iD,UAAWuiD,EAASI,MAAOJ,EAASC,UAE1E,EAUA,OARA7sE,IAAAA,KAAOoiE,EAAO6K,mBAAmB,SAAC7L,GAChCsL,EAAYtL,GAAO,EACrB,IAEAphE,IAAAA,KAAOoiE,EAAO8K,sBAAsB,SAAC9L,GACnCsL,EAAYtL,GAAO,EACrB,IAEOmL,CACT,CAWkBY,CAAqB/K,EAJrC,CAKF,IAEOmK,CACT,EAEA,KASAa,uBAAyB,SAACC,EAAShN,GACjC,IAAMiN,EAAO5nE,OAAO4nE,KAAKD,GAEzBrtE,IAAAA,KAAOstE,GAAM,SAACntE,GACZ,IAAMotE,EAAaF,EAAQltE,GAE3B,GAAIotE,EAAWhK,aACbgK,EAAW/J,gBACX+J,EAAWhK,YAAYh+D,SAAWgoE,EAAW/J,eAAej+D,OAa5D,IAZA,IAAMioE,EACJD,EAAWhK,YAAYh+D,OAASgoE,EAAW/J,eAAej+D,OACxDgoE,EAAW/J,eACX+J,EAAWhK,YAETkK,EACJF,EAAWhK,YAAYh+D,OAASgoE,EAAW/J,eAAej+D,OACxDgoE,EAAW/J,eACX+J,EAAWhK,YAETrhD,EAAOrS,KAAKq2B,IAAIqnC,EAAWhK,YAAYh+D,OAASgoE,EAAW/J,eAAej+D,QAEvE0K,EAAI,EAAGA,EAAIiS,EAAMjS,IAAK,CAC7B,IAAMy9D,EAAQD,EAAiBD,EAAkBjoE,QAAQ,GACrDkoE,EAAiBD,EAAkBjoE,OAAS,GAAG,GAC7CooE,EAAWH,EAAkBA,EAAkBjoE,OAAS,GAAG,GAAKmoE,EAEtEF,EAAkB5qD,KAAK,CAAC+qD,EAAU,MACpC,CAKF,GAAoB,UAAhBtN,GAA2C,YAAhBA,EAI7B,IAHA,IAAMuN,EAAgB,MAGb39D,EAAI,EAAGA,EAAIs9D,EAAWhK,YAAYh+D,OAAS,EAAG0K,IAAK,CAC1D,IAAM49D,GACHN,EAAWhK,YAAYtzD,EAAI,GAAG,GAAKs9D,EAAWhK,YAAYtzD,GAAG,IAAM29D,EAChEE,GACHP,EAAW/J,eAAevzD,EAAI,GAAG,GAAKs9D,EAAW/J,eAAevzD,GAAG,IAAM29D,EAExEE,EAAyBD,EAC3BN,EAAWhK,YAAYtzD,EAAI,GAAG,IAAM29D,EAC3BE,EAAyBD,IAClCN,EAAW/J,eAAevzD,EAAI,GAAG,IAAM29D,EAE3C,CAEJ,GACF,EAAE,KAEF3wD,WAAa,SAAC8wD,EAAWpL,GAEvB,GAAI3iE,IAAAA,YAAc2iE,GAChB,MAAO,GAGT,IAAM1/D,EAAUiX,EAAK+wD,mBAAmBxF,yBAAyB9C,GAEjE,GAAIoL,GAAa9qE,EAAS,CACpBjD,IAAAA,YAAcka,EAAK8zD,cACrB9zD,EAAK8zD,WAAa9zD,EAAKzW,KAAKuqE,WAAW,CAAEnwD,IAAK,yBAG5C7d,IAAAA,YAAcka,EAAK+zD,kBACrB/zD,EAAK+zD,eAAiB,CAAC,GAGzB,IAAIC,EAAgBh0D,EAAK+zD,eAAetL,GACxC,GAAI3iE,IAAAA,YAAckuE,GAAgB,CAChC,IAAMnM,EAAY7nD,EAAKzW,KAAKyqE,cAAcjrE,GAC1CirE,EAAgBluE,IAAAA,QAAU+hE,EAAW7nD,EAAK8zD,YAC1C9zD,EAAK+zD,eAAetL,GAAiBuL,CACvC,CAEA,OAAOA,EAAcH,EACvB,CAEA,MAAO,EACT,EAEA,KAOAI,mBAAqB,SAACC,EAAOC,GAC3B,QAAKD,IAAUC,GACZruE,IAAAA,QAAUouE,IAAUpuE,IAAAA,QAAUquE,QAK5BD,GAAUC,IAASruE,IAAAA,QAAUouE,KAAUpuE,IAAAA,QAAUquE,MAKjDD,EAAMvsD,MAAMwI,YAAcgkD,EAAMxsD,MAAMwI,WACxC+jD,EAAMtsD,IAAIuI,YAAcgkD,EAAMvsD,IAAIuI,eAKjC+jD,EAAMvqE,WAAYwqE,EAAMxqE,UACrBuqE,EAAMvqE,SAASge,MAAMwI,YAAcgkD,EAAMxqE,SAASge,MAAMwI,WAC1D+jD,EAAMvqE,SAASie,IAAIuI,YAAcgkD,EAAMxqE,SAASie,IAAIuI,eAMpD+jD,EAAMvqE,WAAawqE,EAAMxqE,UAC3BwqE,EAAMxqE,WAAauqE,EAAMvqE,YAK9B,EAAE,KAEFyqE,gBAAkB,SAACC,EAA0BC,GAC3C,IAAKt0D,EAAKu0D,gCACR,MAAO,MAET,IAAMtL,EAAoBjpD,EAAK6wD,cAAcwD,GACvCnL,EAAsBlpD,EAAK6wD,cAAcyD,GAK/C,OAJoBxuE,IAAAA,MAAQ,CAACmjE,EAAmBC,IAC7Cr5D,QAAO,SAAAvD,GAAI,MAAa,SAATA,CAAe,IAC9BklB,OACA5nB,QACgBkZ,KAAK,IAC1B,EAAE,KAEF0xD,sBAAwB,SAAChrE,EAAWirE,GAClC,IAAMhM,EAAgBzoD,EAAKiyD,sBAAsBzoE,EAAWirE,EAAgBhM,eAC5E,IAAI3iE,IAAAA,YAAc2iE,GAAlB,CAGA,IAAMtC,EAAcnmD,EAAKgxD,mBAAmBvI,GACtCp+D,EAAU2V,EAAKo0D,gBACnBK,EAAgB1C,gBAChB0C,EAAgBzC,mBAEZ0C,EAAgBD,EAAgB3C,kBAEtC,MAAO,CACL6C,YAAaxO,EACb9vC,QAAShsB,EACTuqE,eAAiBprE,EAAUG,UAC1B8+D,IAAkBhC,GAA2BiO,EAZhD,CAcF,EAteEp1D,KAAK/V,KAAOA,EACZ+V,KAAKnY,aAAeA,EACpBmY,KAAKyxD,mBAAqB,IAAIzG,EAAwB,CAAE/gE,KAAAA,EAAMghE,SAAAA,EAAUC,2BAAAA,IACxElrD,KAAKqxD,eAAiB,IAAI/D,EAAoBrjE,EAAMpC,GAAc,IAAAF,EAK9DkB,EAAYihB,SAAW,CAAC,EAHR9J,KAAKoT,0BAAyBzrB,EAAhD0rB,iBACoBrT,KAAKsT,4BAA2B3rB,EAApD4rB,mBACiCvT,KAAKi1D,gCAA+BttE,EAArE4tE,gCAEFv1D,KAAK1W,gBAxCe,SAAC4lE,GAAkC,IACzDroE,GAD8CoN,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAG,CAAC,GAIlC6V,SAAW,CAAC,EAFRsJ,EAAyBvsB,EAA3CwsB,iBACoBC,EAA2BzsB,EAA/C0sB,mBAGIiiD,EAAoBhvE,IAAAA,QAAU0oE,EAAY,MAC1CuG,EAAsBjvE,IAAAA,QAAU0oE,EAAY,QAC5C17C,EAAwBF,EAC5BG,EAAAA,GACAjtB,IAAAA,OAASitB,EAAAA,IAEX,OAAOL,EACL,SAACsiD,GACC,GAAIlvE,IAAAA,IAAMgvE,EAAmBE,GAAc,CACzC,IAAMC,EAAgBH,EAAkBE,GAAa1oE,KACrD,GAAIxG,IAAAA,IAAMgtB,EAAuBmiD,GAAgB,CAC/C,IAAMC,EAAmBpiD,EAAsBmiD,GAE/C,OADuBF,EAAoBG,GAAkBjsE,EAE/D,CACF,CACA,OAAO+rE,CACT,EACAlvE,IAAAA,QACJ,CAe2B8C,CAAgB0W,KAAKqxD,eAAenC,WAAYrmE,EACzE,GAAC,EAAAlC,IAAA,uBAAA2D,MAuFD,SAAqB8Z,GACnB,IAAKA,EAAKA,EAAKrY,OAAS,GAAG,GACzB,IAAK,IAAI0K,EAAI2N,EAAKrY,OAAS,EAAG0K,GAAK,EAAGA,GAAK,EACzC,GAAI2N,EAAK3N,GAAG,GACV,OAAO2N,EAAK3N,GAAG,GAIrB,OAAO2N,EAAKA,EAAKrY,OAAS,GAAG,EAC/B,IAAC,CA9G0B,GCxBhB8pE,EAAe,SAAAxR,GAAA,SAAAwR,IAAA,OAAAl1D,EAAAA,EAAAA,GAAA,KAAAk1D,IAAAh1D,EAAAA,EAAAA,GAAA,KAAAg1D,EAAA5hE,UAAA,QAAAqN,EAAAA,EAAAA,GAAAu0D,EAAAxR,IAAA9iD,EAAAA,EAAAA,GAAAs0D,EAAA,EAAAlvE,IAAA,SAAA2D,MAC1B,WACE0V,KAAK81D,SAAWr2D,EAAAA,YAChB,IAAMs2D,EAAW,CACfxzB,KAAK,GAADp6C,OAAK6X,KAAKyc,MAAM8lB,KAAI,OAE1ByzB,EAA4Bh2D,KAAKyc,MAAzBw5C,EAAKD,EAALC,MAAOC,EAAQF,EAARE,SAETC,EAAeF,EAAQ,iBADTC,EAAW,gBAAkB,UAE3CE,GAAa15C,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,aAAa/0B,GAAIqW,KAAKyc,MAAM9yB,KAE9D,OACE+yB,EAAAA,EAAAA,KAAA,OAAKgC,UAAWy3C,EAAcz0C,MAAOq0C,EAAUjuC,IAAK9nB,KAAK81D,SAAUnsE,GAAIqW,KAAKyc,MAAM9yB,GAAGmzB,SAClFs5C,GAGP,IAAC,CAhByB,CAAS32D,EAAAA,eCTxB42D,EAAwB,CACnCx+D,SAAU,CAAC,CACT7K,KAAM,cACN1C,MAAO,cACPwN,QAAS,CAAC,EACVC,SAAU,CACR,CACE/K,KAAM,oBACN1C,MAAO,qBAET,CACE0C,KAAM,oBACN1C,MAAO,qBAET,CACE0C,KAAM,mBACN1C,MAAO,wBCPf,SAASgsE,EAAmBtD,GAC1B,OAAQA,GACN,KJLyB,EIMvB,OAAOuD,EAAAA,gBAAgBC,EAAAA,mBAAmBC,YAC5C,KJNoB,EIOlB,OAAOF,EAAAA,gBAAgBC,EAAAA,mBAAmBE,OAC5C,KJPmB,EIQjB,OAAOH,EAAAA,gBAAgBC,EAAAA,mBAAmBjsD,OAC5C,KJRkB,EISlB,KJRyB,GISvB,OAAOgsD,EAAAA,gBAAgBC,EAAAA,mBAAmBG,MAC5C,QACE,OAAO,KAEb,CAEO,IAAMC,EAAgB,SAAAvS,GAC3B,SAAAuS,EAAYn6C,GAAQ,IAAD/b,EAaf,OAbeC,EAAAA,EAAAA,GAAA,KAAAi2D,IACjBl2D,GAAAG,EAAAA,EAAAA,GAAA,KAAA+1D,EAAA,CAAMn6C,KAmCRo6C,eAAiB,SAAC9O,GAChBrnD,EAAKiuB,SAAS,CACZo5B,MAAAA,GAEJ,EAACrnD,EAEDo2D,0BAA4B,WAC1Bp2D,EAAK+b,MAAM7b,KAAK+F,gBAAgB/M,YAAYy8D,GAE5C,IAAMU,EAAsBr2D,EAAK+b,MAAM7b,KAAK+F,gBAAgBk9C,YAAY9pD,SACxE2G,EAAKs2D,WAAa,CAChBC,oBAAqBF,EAAoBG,kBAAkBn9D,SAC3Do9D,mBAAoBJ,EAAoBK,iBAAiBr9D,SAE7D,EAAC2G,EAED22D,qBAAuB,SAACC,EAAOC,GAAK,OAEhCD,EAAM/0B,MAAQg1B,EAAMh1B,MAAQg1B,EAAMlyC,OAASiyC,EAAM/0B,MAChD+0B,EAAM/0B,MAAQg1B,EAAMh1B,MAAQ+0B,EAAMjyC,OAASkyC,EAAMlyC,OACjDkyC,EAAMh1B,MAAQ+0B,EAAM/0B,MAAQg1B,EAAMlyC,OAASiyC,EAAMjyC,OACjDiyC,EAAMjyC,OAASkyC,EAAMh1B,MAAQg1B,EAAMlyC,OAASiyC,EAAMjyC,KAAQ,EAAD3kB,EAE9D82D,2BAA6B,SAAC1B,GAC5B,IAAMtR,EAAgB9jD,EAAK+b,MAAMg7C,cAAczvC,QAAQw8B,cAAcx8B,QAC/Dy8B,EAAc/jD,EAAK+b,MAAMg7C,cAAczvC,QAAQy8B,YAAYz8B,QAC3D0vC,EAAiB5B,EAASxwC,wBAC5BqyC,GAA6B,EAC7BC,GAA2B,EAE/B,GAAIpT,EAAe,CACjB,IAAMqT,EAAgBrT,EAAcl/B,wBACpCqyC,EAA6Bj3D,EAAK22D,qBAAqBQ,EAAeH,EACxE,CACA,GAAIjT,EAAa,CACf,IAAMqT,EAAerT,EAAYn/B,wBACjCsyC,EAA2Bl3D,EAAK22D,qBAAqBS,EAAcJ,EACrE,CAEA,MAAO,CACLK,cAAeJ,EACfK,YAAaJ,EAEjB,EAACl3D,EAEDu3D,WAAa,SAACv0D,EAAMw0D,GAClBA,EAAaC,SAAQ,SAACC,GACpB,IAAMC,EAAY,CAChBC,OAAQF,EAAKG,SACbC,gBAAiB93D,EAAK+b,MAAMg2C,gBAC5BgG,kBAAmB/3D,EAAK+b,MAAMi2C,kBAC9BgG,UAAW,YACXC,YAAa,CACXC,QAASpyE,IAAAA,MAAQ4xE,EAAKS,SACnBhvB,MAAM,WACNivB,UAAUjvB,MAAM,aAChBv/C,QACHyuE,WAAYvyE,IAAAA,MAAQ4xE,EAAKY,YACtBnvB,MAAM,WACNivB,UAAUjvB,MAAM,aAChBv/C,QACH40D,YAAa14D,IAAAA,MAAQ4xE,EAAKa,YAAa,cAEzCC,SAAUx1D,EACVy1D,QAASf,EAAK7B,gBACd6C,OAAQ14D,EAAK+b,MAAM7b,KAAK0/C,QAAQvrD,YAAYrD,GAC5C2nE,WAAY34D,EAAK+b,MAAM7b,KAAK0/C,QAAQvrD,YAAYukE,WAChD9gE,WAAY4/D,EAAKmB,WACjB9gE,UAAW2/D,EAAKoB,UAChB/kE,WAAY2jE,EAAKlzB,YAEnBxkC,EAAKs2D,WAAWC,oBAAoBwC,MAAM,qBAADtxE,OAAsBiqB,KAAKC,UAAUgmD,IAAc,oBAC9F,GACF,EA1GE33D,EAAKo2D,4BACLp2D,EAAKg5D,iBAAmB,IAAIzJ,EAAiB,CAC3ChmE,KAAMyW,EAAK+b,MAAM7b,KAAK3W,KACtBpB,YAAa6X,EAAK+b,MAAM7b,KAAK0/C,QAAQqZ,cAEvCj5D,EAAKk5D,WAAa,GAElBl5D,EAAKlF,MAAQ,CACXusD,MAAO,KACP8R,aAAc,MACdn5D,CACJ,CAAC,OAAAY,EAAAA,EAAAA,GAAAs1D,EAAAvS,IAAA9iD,EAAAA,EAAAA,GAAAq1D,EAAA,EAAAjwE,IAAA,qBAAA2D,MAED,WAAsB,IAAD6kC,EAAA,KACf2qC,GAAkB,EAClBC,GAAgB,EACpB/5D,KAAK45D,WAAWzB,SAAQ,SAACh3C,GACvB,GAAIA,EAAK20C,SAAS9tC,QAAS,CACzB,IAAAgyC,EACE7qC,EAAKqoC,2BAA2Br2C,EAAK20C,SAAS9tC,SADxC+vC,EAAYiC,EAAZjC,aAAcC,EAAUgC,EAAVhC,WAEtB8B,EAAkBA,GAAmB/B,EACrCgC,EAAgBA,GAAiB/B,CACnC,CACF,IACIh4D,KAAKyc,MAAMw9C,iBAAiBvV,uBAAyBoV,GACvD95D,KAAKyc,MAAMw9C,iBAAiBpV,qBAAuBkV,GACnD/5D,KAAKyc,MAAMy9C,mBAAmB,CAC5BxV,qBAAsBoV,EACtBjV,mBAAoBkV,GAG1B,GAAC,CAAApzE,IAAA,SAAA2D,MA6ED,WAAU,IAAD8sC,EAAA,KACP,IAAKp3B,KAAKxE,MAAMusD,QAAU/nD,KAAKyc,MAAMy7C,cAAmD,IAAnCl4D,KAAKyc,MAAMy7C,aAAansE,SACvEiU,KAAKxE,MAAMusD,MAAMa,OACrB,OAAO,KAET5oD,KAAK45D,WAAa,GAClB,IAAMO,EAAmB,GAqHzB,OApHAn6D,KAAKyc,MAAMy7C,aAAaC,SAAQ,SAACC,GACS,IAApCA,EAAKgC,oBAAoBruE,QAG7BqrC,EAAK57B,MAAMusD,MAAMa,OAAO,GAAGxkD,KAAK+zD,SAAQ,SAACvQ,EAAOyS,GAC9C,GAAIzS,EAAM56D,OAASorE,EAAKkC,cAAe,CACjCljC,EAAK4/B,YACP5/B,EAAK6gC,WAAWG,EAAKnvD,KAAMmvD,EAAKgC,qBAIlC,IACMG,EAAUnjC,EAAK57B,MAAMusD,MAAMa,OAAO,GAAGD,OAAO0R,GAAKE,SACpDnjC,EAAK57B,MAAMusD,MAAMyS,SAAYC,IAC1BC,GAAel0E,IAAAA,YAAcA,IAAAA,KACjC4xE,EAAKgC,qBACL,SAAAj5C,GAAI,OACFA,EAAK63C,YACL73C,EAAK63C,WAAW,IAChB73C,EAAK63C,WAAW,GAAGj0C,SACsB,cAAzC5D,EAAK63C,WAAW,GAAGj0C,QAAQ41C,SAAyB,KAGlD7E,GACJp5C,EAAAA,EAAAA,KAACm5C,EAAe,CACdlsE,GAAIyuE,EAAKgC,oBAAoB,GAAG7B,SAChCzwC,IAAK,SAACA,GACAA,GACFsP,EAAKwiC,WAAWxwD,KAAK0e,EAEzB,EACAmuC,MAAOyE,EACPxE,UAAQ,EACR3zB,KAAMg4B,EACNK,SAAQ,GAAAzyE,OAAKivC,EAAK3a,MAAM7b,KAAK4/C,UAAS,0BASpCz1D,EAAU,GAChBqsC,EAAK57B,MAAMusD,MAAMa,OAAOuP,SAAQ,SAACvP,GAC/B,IAAMoK,GAA0D,IAA9CpK,EAAOC,YAAYl/D,GAAGmN,QAAQ,WAC9CsgC,EAAK3a,MAAMg2C,gBACXr7B,EAAK3a,MAAMi2C,mBAEK,IAAdM,GACFpK,EAAOxkD,KAAKrY,OAAS,GACrBhB,EAAQqe,KAAK,CACXpc,KAAM47D,EAAO57D,KACb1C,MAAO8sC,EAAKsiC,iBAAiB/sC,aAC3BqmC,EACApK,EAAOxkD,KAAKi2D,GAAKtmB,GACjBhwC,WACF82D,KAAMjS,EAAOC,YAAYl/D,GACzBm/D,MAAOF,EAAOC,YAAYC,OAGhC,IAEA,IAAMtJ,EAAqBh5D,IAAAA,QAAU,CACnC8vE,EAAmBl/B,EAAK3a,MAAMg2C,iBAC9B6D,EAAmBl/B,EAAK3a,MAAMi2C,qBAK1BoI,GAAUt0E,IAAAA,YAAcA,IAAAA,KAAO4xE,EAAKgC,qBAAqB,SAAAj5C,GAAI,OACjEA,EAAKo3C,WAAanhC,EAAK57B,MAAMq+D,YAAY,KAE3CM,EAAiB/wD,MACfsT,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,0BAAyB5B,UACtCJ,EAAAA,EAAAA,KAACq+C,EAAAA,iBAAgB,CACfC,kBAAmB5C,EAAK4C,kBACxBC,eAAgB7jC,EAAK3a,MAAMw+C,eAC3BC,oBAAqB9jC,EAAK3a,MAAMy+C,oBAChCva,2BAA4B,CAC1Bz2D,UAAWktC,EAAK3a,MAAMvyB,UACtBs1D,mBAAAA,GAEF2b,YAAa/C,EAAK4C,kBAAoB,GAAK5C,EAC3CgD,WAAY,SAACpI,EAAUqI,GACrBjkC,EAAKzI,SAAS,CACZkrC,aAAcwB,IAEhBjkC,EAAKkkC,SAAW90E,IAAAA,UAAY4xE,EAAKgC,oBAAqB,CACpD7B,SAAU8C,IAERrI,IAAa57B,EAAK3a,MAAMg2C,iBAC1BO,IAAa57B,EAAK3a,MAAMi2C,mBACxBt7B,EAAK3a,MAAM8+C,sBAAsB,CAC/B5xE,GAAIqpE,GAGV,EACApyD,KAAM,CACJ3W,KAAMmtC,EAAK3a,MAAM7b,KAAK3W,KACtBq2D,QAASlpB,EAAK3a,MAAM7b,KAAK0/C,QACzB35C,gBAAiBywB,EAAK3a,MAAM7b,KAAK+F,gBACjChO,MAAOy+B,EAAK3a,MAAM7b,KAAKjI,MACvB6nD,UAAWppB,EAAK3a,MAAM7b,KAAK4/C,WAE7Bz1D,QAASA,EACT40D,cAAemW,EACfgF,OAAQA,EACRja,cAAezpB,EAAK3a,MAAMokC,cAC1B2a,KAAMV,EAAS1jC,EAAKkkC,SAAW,KAnCWlD,EAAKgC,oBAAoB,GAAG7B,UAuC9E,CACF,GACF,KAEE77C,EAAAA,EAAAA,KAAA,OAAAI,SACGq9C,GAGP,IAAC,CAhP0B,CAAS16D,EAAAA,eCpBzBg8D,EAAkB,CAC7BC,YAAa,CACXb,KAAM,CACJc,WAAY,CACV/nE,SAAS,GAEXgoE,qBAAqB,IAGzBC,MAAO,CACLl5C,MAAO,CACLvc,KAAM,IAER01D,UAAW,CACTloE,SAAS,EACTk1D,MAAO,UACPiC,UAAW,YAEbgR,gBAAgB,EAChBC,eAAe,EACfC,SAAS,EACTnR,UAAW,EACXoR,OAAQ,CACNtoE,SAAS,GAEXuoE,WAAY,GAEdjS,MAAO,CAAC,CACNvnC,MAAO,CACLvc,KAAM,IAERg2D,kBAAmB,GACnBC,kBAAmB,OACnBJ,SAAS,EACTF,gBAAgB,EAChBC,eAAe,GACd,CACDr5C,MAAO,CACLvc,KAAM,IAERg2D,kBAAmB,GACnBC,kBAAmB,OACnBJ,SAAS,EACTF,gBAAgB,EAChBC,eAAe,EACfM,UAAU,IAEZ/S,QAAS,CACPgT,gBAAiB,UACjBC,aAAc,EACdC,YAAa,UACbC,YAAa,EACbC,SAAS,EACTC,QAAQ,EACRC,QAAQ,EACRC,cAAe,GAEjB/U,MAAO,CACLgV,WAAY,EACZC,YAAa,EACbC,aAAc,EACdC,cAAe,IAEjBC,OAAQ,CACNvpE,SAAS,GAEXwpE,QAAS,CACPxpE,SAAS,IAIAypE,EAA+B,CAC1CtV,MAAO,CACLj2B,OAAQ,KAEV+pC,MAAO,CACLC,UAAW,CACThT,MAAO,qBCxDAwU,EAAmB,SAAAjZ,GAC9B,SAAAiZ,EAAY7gD,GAAQ,IAAD/b,GAAAC,EAAAA,EAAAA,GAAA,KAAA28D,IACjB58D,GAAAG,EAAAA,EAAAA,GAAA,KAAAy8D,EAAA,CAAM7gD,KAoOR8gD,oBAAsB,SAAC5lD,EAAG6lD,GACxB,GAAK98D,EAAKf,cAgBV,GAXIe,EAAK+b,MAAMtc,aACbO,EAAK+8D,iBAAmB/8D,EAAK+b,MAAMtc,WAAWqB,YAAY,sBAAuB,CAAEk8D,eAAe,IAClGh9D,EAAK+8D,iBAAiBh8D,YAGxBf,EAAKs2D,WAAWC,oBAAoBwC,MAAM,0CAADtxE,OACvCiqB,KAAKC,UAAUmrD,IAAiB,qBAK7B98D,EAAKg5D,iBAAiB/E,mBAAmB6I,EAAc98D,EAAKlF,MAAMtR,WAAvE,CAOA,IAAMyzE,EACJj9D,EAAKg5D,iBAAiB/G,sBAAsB6K,EAAc98D,EAAKlF,MAAMoiE,wBAEvEl9D,EAAKs2D,WAAWC,oBAAoBwC,MAAM,kEAADtxE,OAClBuY,EAAKlF,MAAMoiE,uBAAsB,+BAAAz1E,OAClCw1E,GAAyB,qBAE/C,IAAMtlC,EAAW,CACfulC,uBAAwBD,EACxBzzE,UAAWszE,EACXzY,eAAgByY,EAAanzE,SAC7Bs6D,eAAgB,CAAC,GAGfn+D,IAAAA,YAAcm3E,KAChBtlC,EAASwlC,iBAAkB,GAI7Bn9D,EAAKiuB,SAAS0J,EAtBd,MAHE33B,EAAKs2D,WAAWC,oBAAoBwC,MAAM,6CAADtxE,OACvCiqB,KAAKC,UAAU3R,EAAKlF,MAAMtR,YAAc,oBAyB9C,EAACwW,EAEDo9D,eAAiB,SAACC,GAChB,GAAKA,KAAar9D,EAAKqnD,OAASgW,IAAar9D,EAAKqnD,MAAM2B,YAAxD,CAIAhpD,EAAKs9D,6BAA8B,EAEnC,IAAIlzC,EAAQizC,EACNE,EAAuB77D,IAAE,2BAE3B67D,IACFnzC,GAAUozC,WAAWD,EAAqB7iC,IAAI,gBAC5C8iC,WAAWD,EAAqB7iC,IAAI,kBAGxC16B,EAAK+b,MAAMhzB,QAAQ00E,qBAEnBz9D,EAAK09D,YAAYtzC,EAdjB,CAeF,EAACpqB,EAED66D,sBAAwB,SAAC8C,GACvB,GAAIA,EAAU10E,KAAO+W,EAAKlF,MAAMu5D,yBAAhC,CAaA,GARIr0D,EAAK+b,MAAMtc,aACbO,EAAK+8D,iBAAmB/8D,EAAK+b,MAAMtc,WAAWqB,YAAY,sBAAuB,CAAEk8D,eAAe,IAClGh9D,EAAK+8D,iBAAiBh8D,YAIxBf,EAAK49D,qBAAqB,gBAAiBD,EAAU10E,IAEjD+W,EAAKu0D,gCACPv0D,EAAKiuB,SAAS,CACZomC,yBAA0BsJ,EAAU10E,KACnC,WACD+W,EAAK69D,qBACH79D,EAAKlF,MAAMtR,UACXwW,EAAKlF,MAAMoiE,uBAEf,QACK,CAEL,IAAMY,EAAmB99D,EAAK+9D,yBAC5BJ,EAAU10E,GACV+W,EAAKlF,MAAMw5D,4BAGbt0D,EAAKiuB,SAAS,CACZomC,yBAA0BsJ,EAAU10E,GACpC+0E,0BAA2BF,GAE/B,CAEA99D,EAAKs2D,WAAWC,oBAAoBwC,MAAM,wCAADtxE,OACCk2E,EAAU10E,IAClD,oBAlCF,CAoCF,EAAC+W,EAEDi+D,wBAA0B,SAACN,GACzB,GAAIA,EAAU10E,KAAO+W,EAAKlF,MAAMw5D,2BAAhC,CAaA,GARIt0D,EAAK+b,MAAMtc,aACbO,EAAK+8D,iBAAmB/8D,EAAK+b,MAAMtc,WAAWqB,YAAY,sBAAuB,CAAEk8D,eAAe,IAClGh9D,EAAK+8D,iBAAiBh8D,YAIxBf,EAAK49D,qBAAqB,kBAAmBD,EAAU10E,IAEnD+W,EAAKu0D,gCACPv0D,EAAKiuB,SAAS,CACZqmC,2BAA4BqJ,EAAU10E,KACrC,WACD+W,EAAK69D,qBACH79D,EAAKlF,MAAMtR,UACXwW,EAAKlF,MAAMoiE,uBAEf,QACK,CAEL,IAAMc,EAA4Bh+D,EAAK+9D,yBACrC/9D,EAAKlF,MAAMu5D,yBACXsJ,EAAU10E,IAGZ+W,EAAKiuB,SAAS,CACZqmC,2BAA4BqJ,EAAU10E,GACtC+0E,0BAAAA,GAEJ,CAEAh+D,EAAKs2D,WAAWC,oBAAoBwC,MAAM,0CAADtxE,OACGk2E,EAAU10E,IACpD,oBAlCF,CAoCF,EAAC+W,EAEDk+D,oBAAsB,SAACP,GACrB,GAAIA,EAAU10E,KAAO+W,EAAKlF,MAAMoiE,uBAAhC,CAKIl9D,EAAK+b,MAAMtc,aACbO,EAAK+8D,iBAAmB/8D,EAAK+b,MAAMtc,WAAWqB,YAAY,sBAAuB,CAAEk8D,eAAe,IAClGh9D,EAAK+8D,iBAAiBh8D,YAIxB,IAAMo9D,EAAkBn+D,EAAKg5D,iBAAiBhI,mBAAmB2M,EAAU10E,IAC3E+W,EAAK49D,qBAAqB,cAAeO,GAErCn+D,EAAK+b,MAAMqiD,eACbp+D,EAAKiuB,SAAS,CACZivC,uBAAwBS,EAAU10E,GAClCg7D,eAAgB,CAAC,IAChB,WACDjkD,EAAKq+D,+BACHr+D,EAAKlF,MAAMtR,UACXwW,EAAKlF,MAAMoiE,uBAEf,IAEAl9D,EAAKiuB,SAAS,CACZivC,uBAAwBS,EAAU10E,GAClCg7D,eAAgB,CAAC,IAIrBjkD,EAAKs2D,WAAWC,oBAAoBwC,MAAM,qCAADtxE,OACFk2E,EAAU10E,IAC/C,oBA9BF,CAgCF,EAAC+W,EAEDs+D,sBAAwB,SAACt4D,GACnBhG,EAAK+b,MAAMtc,aACbO,EAAK+8D,iBAAmB/8D,EAAK+b,MAAMtc,WAAWqB,YAAY,sBAAuB,CAAEk8D,eAAe,IAClGh9D,EAAK+8D,iBAAiBh8D,YAIxBf,EAAK49D,qBAAqB,oBAAqB53D,EAAMwe,OAAO8hC,SAG5D,IAAM0X,EAA4Bh+D,EAAK+9D,yBACrC/9D,EAAKlF,MAAMu5D,yBACXr0D,EAAKlF,MAAMw5D,4BAGTt0D,EAAK+b,MAAMqiD,eACbp+D,EAAKiuB,SAAS,CACZswC,uBAAwBv4D,EAAMwe,OAAO8hC,QACrC0X,0BAAAA,IACC,WACDh+D,EAAKq+D,+BACHr+D,EAAKlF,MAAMtR,UACXwW,EAAKlF,MAAMoiE,uBAEf,IAEAl9D,EAAKiuB,SAAS,CACZswC,uBAAwBv4D,EAAMwe,OAAO8hC,QACrC0X,0BAAAA,IAIJh+D,EAAKs2D,WAAWC,oBAAoBwC,MAAM,wCAADtxE,OACCue,EAAMwe,OAAO8hC,SACrD,oBAEJ,EAACtmD,EAEDw+D,cAAgB,SAAAr4E,GAAmD,IAAhD69D,EAAoB79D,EAApB69D,qBAAsBG,EAAkBh+D,EAAlBg+D,mBACvCnkD,EAAKiuB,SAAS,CACZ+1B,qBAAAA,EACAG,mBAAAA,GAEJ,EAACnkD,EAEDy+D,gBAAkB,SAACpX,GACjBrnD,EAAKs2D,WAAWC,oBAAoBwC,MAAM,qCAAsC,qBAChF/4D,EAAKqnD,MAAQA,EACbrnD,EAAK09D,cAED19D,EAAK+b,MAAMhzB,QAAQ21E,wBACnB1+D,EAAK2+D,kBAC+B,IAAtC3+D,EAAKlF,MAAMoiE,wBACXl9D,EAAKlF,MAAMqiE,iBACXn9D,EAAK4+D,gBACL5+D,EAAK4+D,gBAAgB5nE,MAAK,SAAChD,GACrBgM,EAAKqnD,OACPrnD,EAAKqnD,MAAMa,SACXloD,EAAKiuB,SAAS,CACZ4wC,iBAAkBxX,EAAMhoB,cAEtBr/B,EAAK8+D,UACP9+D,EAAK8+D,SAAS3I,eAAe9O,GAE/BrnD,EAAKs2D,WAAWC,oBAAoBwC,MAAM,kBAADtxE,OAAmBuY,EAAKlF,MAAM+jE,kBAAoB,sBAG7F7+D,EAAKs2D,WAAWC,oBAAoBwC,MAAM,6BAADtxE,OAA8BuM,EAAO3I,QAAU,qBACxF2U,EAAKs2D,WAAWC,oBAAoBwC,MAAM,8CAADtxE,OAA+CiqB,KAAKC,UAAU7rB,IAAAA,OAASka,EAAKlF,MAAMmpD,eAAgB,CACzI9hC,OAAQniB,EAAK+b,MAAMhzB,QAAQ0c,WAC3B8V,UAAWvb,EAAK++D,eAAerX,WAAW1nD,EAAKlF,MAAMtR,UAAUme,MAAO3H,EAAKzW,MAC3EiyB,QAASxb,EAAK++D,eAAerX,WAAW1nD,EAAKlF,MAAMtR,UAAUoe,IAAK5H,EAAKzW,UAClE,oBACT,KAEAyW,EAAKg/D,yBAA0B,EACzBh/D,EAAKlF,MAAMkpD,sBACbhkD,EAAKlF,MAAMqpD,oBACbnkD,EAAKiuB,SAAS,CACZgxC,SAAU,GACVjb,sBAAsB,EACtBG,oBAAoB,KAKtBnkD,EAAK+8D,mBAAqB/8D,EAAK+8D,iBAAiBmC,QAClDl/D,EAAK+8D,iBAAiBr9D,MAE1B,EAACM,EAED+9D,yBAA2B,SAAChM,EAAiBC,GAC3C,IAAQlJ,EAAiB9oD,EAAK+b,MAAMhzB,QAA5B+/D,aACF/C,EACJ/lD,EAAKg5D,iBAAiBnK,cAAckD,GAChC7L,EACJlmD,EAAKg5D,iBAAiBnK,cAAcmD,GAEhCmN,EAAgBn/D,EAAK++D,eAAepW,sBACxC3oD,EAAKg5D,iBACL,CACEjT,cAAAA,EACAG,gBAAAA,EACAuC,cAAezoD,EAAKlF,MAAMoiE,uBAC1B3U,kBAAmBvoD,EAAKlF,MAAMyjE,wBAA0Bv+D,EAAK4lD,yBAC7DoD,WAAYhpD,EAAKlF,MAAMkuD,WACvBF,aAAAA,GAEF9oD,EAAKo/D,WAKP,OAFAhxD,EAAAA,EAAAA,OAAM2sD,EAAiB4B,IAEhBvuD,EAAAA,EAAAA,OAAM+wD,EAAepE,EAC9B,EAAC/6D,EAkDDq/D,qBAAuB,SAACC,GACtB,OAAQA,GACN,KAAKxJ,EAAAA,mBAAmBC,WACtB,ON7lBqB,EM8lBvB,KAAKD,EAAAA,mBAAmBE,MACtB,ON9lBgB,EM+lBlB,KAAKF,EAAAA,mBAAmBjsD,MACtB,ON/lBe,EMgmBjB,KAAKisD,EAAAA,mBAAmByJ,WACtB,OAAOv/D,EAAK0S,2BAA6B1S,EAAK4S,4BN/lBzB,GADP,EMkmBhB,QAME,OALA5S,EAAKs2D,WAAWC,oBACbpd,MAAM,6BAAD1xD,OACyB63E,GAC7B,oBAEG,KAEb,EAACt/D,EAsCDo2D,0BAA4B,WAC1Bp2D,EAAK+b,MAAMhzB,QAAQkd,gBAAgB/M,YAAYy8D,GAE/C,IAAMU,EAAsBr2D,EAAK+b,MAAMhzB,QAAQkd,gBAAgBk9C,YAAY9pD,SAC3E2G,EAAKs2D,WAAa,CAChBkJ,eAAgBnJ,EAAoBoJ,kBAAkBpmE,SACtDk9D,oBAAqBF,EAAoBG,kBAAkBn9D,SAC3Do9D,mBAAoBJ,EAAoBK,iBAAiBr9D,SAE7D,EAAC2G,EAiMD69D,qBAAuB,SAACr0E,EAAWi/D,EAAeiX,GAChD,IAAMC,EAAU,WACd3/D,EAAKiuB,SAAS,CACZ2xC,WAAW,EACXzC,iBAAiB,GAErB,EAEAn9D,EAAKs2D,WAAWC,oBAAoBwC,MAAM,+BAAgC,oBAE1E,IAAMnZ,EAAU,CACd/vD,OAAQmQ,EAAK+b,MAAMlsB,OACnBmM,OAAQxS,EACR28D,YAAanmD,EAAKg5D,iBAAiBhI,mBAAmBvI,GAEtDF,kBACEvoD,EAAK4lD,uBACH6C,EACAzoD,EAAKlF,MAAM+kE,aACR7/D,EAAKlF,MAAMyjE,uBAClBuB,iBAAiB,EACjBxR,cAAetuD,EAAK+b,MAAMhzB,QAAQ0c,WAClChb,OAAQuV,EAAK+/D,kBAKTxI,EAAa,CACjByI,YAAapgB,EAAQ/vD,OAAS+vD,EAAQ/vD,OAAOkB,MAAQ,GACrDiL,OAAQ4jD,EAAQ5jD,OAChBmqD,YAAavG,EAAQuG,YACrBuO,cAAe9U,EAAQ2I,kBACvBpmC,OAAQy9B,EAAQ0O,cAChBv6D,WAAYiM,EAAK+b,MAAMhzB,QAAQgc,YAAY26C,iBACzC1/C,EAAK+b,MAAMhzB,QAAQgc,YAAY26C,gBAAgB1uD,GACjDivE,QAASjgE,EAAKlF,MAAMu5D,yBACpB6L,QAASlgE,EAAKlF,MAAMw5D,2BACpBqE,WAAY34D,EAAK+b,MAAMhzB,QAAQgc,YAAY1Q,YAAYukE,YAQzD,OANA54D,EAAKs2D,WAAWC,oBAAoBwC,MAAM,2BAADtxE,OAA4BiqB,KAAKC,UAAU4lD,IAAe,qBAE/Fv3D,EAAK+8D,kBACP/8D,EAAK+8D,iBAAiB97D,gBAGjB,IAAIhK,IAAJ,EAAY,SAACuD,GAClB,IAAM2lE,EAAkB,SAACnsE,GAKvB,GAJIgM,EAAK+8D,kBACP/8D,EAAK+8D,iBAAiB/7D,cAGnBhB,EAAKogE,SAAU,CAClBpgE,EAAKs2D,WAAWC,oBAAoBwC,MAAM,gCAAiC,oBAC3E,IAAMr1D,EAAO1D,EAAKg5D,iBAAiB7G,YAAYn+D,GAE/C,IAAKlO,IAAAA,MAAQ4d,EAAM1D,EAAKg5D,iBAAiBnJ,wBAOvC,OALA7vD,EAAKiuB,SAAS,CACZ2xC,WAAW,EACXzC,iBAAiB,SAEnB3iE,IAKFwF,EAAKo/D,UAAY17D,EAGb5d,IAAAA,MAAQ4d,EAAM1D,EAAKg5D,iBAAiBhJ,4BACtChwD,EAAKg5D,iBAAiB9F,uBACpBxvD,EACA1D,EAAKg5D,iBAAiBhI,mBAAmBvI,IAK7C,IAAM4X,EACJrgE,EAAKg5D,iBAAiB9I,cACpBxsD,EACA+kD,GAGEuV,EAA4Bh+D,EAAK+9D,yBACrC/9D,EAAKlF,MAAMu5D,yBACXr0D,EAAKlF,MAAMw5D,4BAGbt0D,EAAKiuB,SAAS,CACZ+vC,0BAAAA,EACA4B,WAAW,EACXzC,iBAAiB,EACjBlZ,eAAgBoc,IAElB7lE,GACF,CACF,EACM8lE,EAAgB,SAACC,GACrBvgE,EAAKs2D,WAAWG,mBAAmBsC,MAAM,wCAADtxE,OACEiqB,KAAKC,UAAU4uD,IACvD,oBAEFvgE,EAAKiuB,SAAS,CACZ2xC,WAAW,EACXzC,iBAAiB,GAErB,EACIuC,GAC6C,oBAAxC1/D,EAAK+b,MAAMqiD,eAAeoC,WACiB,oBAA3CxgE,EAAK+b,MAAMqiD,eAAeqC,cAEjCzgE,EAAK+b,MAAMqiD,eAAeoC,UAAUb,GACpC3/D,EAAK+b,MAAMqiD,eAAeqC,aAAaN,EAAiBG,KAExDX,IACA3/D,EAAK+b,MAAMvf,WAAW3D,QAAQ+mD,GAC3B5oD,MAAK,SAAChD,GAIL,OAHIgM,EAAK+b,MAAMqiD,gBACbp+D,EAAK+b,MAAMqiD,eAAesC,gBAAgB1sE,GAErCA,CACT,IACCgD,KAAKmpE,EAAiBG,GAE7B,GACF,EAACtgE,EAYD2gE,YAAc,SAAAn6E,GAA4B,IAAzBwc,EAAIxc,EAAJwc,KAAMy3D,EAAWj0E,EAAXi0E,YACfwE,EAAWj/D,EAAKlF,MAAMmkE,SAASz0E,KAAI,SAACi2B,GACxC,IAAMmgD,EAAWngD,EASjB,OARImgD,EAASr4D,OAASvF,IACpB49D,EAASlH,oBAAsB5zE,IAAAA,QAC7B86E,EAASlH,oBACT5zE,IAAAA,UAAY86E,EAASlH,oBAAqB,CACxC7B,SAAU4C,EAAY5C,aAIrB+I,CACT,IAEA5gE,EAAKiuB,SAAS,CACZgxC,SAAAA,GAEJ,EAACj/D,EAED6gE,WAAa,WACX,IAAMtJ,EAAa,CACjBp1C,OAAQniB,EAAK+b,MAAMhzB,QAAQ0c,WAC3B1R,WAAYiM,EAAK+b,MAAMhzB,QAAQgc,YAAY26C,iBACzC1/C,EAAK+b,MAAMhzB,QAAQgc,YAAY26C,gBAAgB1uD,GACjDivE,QAASjgE,EAAKlF,MAAMu5D,yBACpB6L,QAASlgE,EAAKlF,MAAMw5D,2BACpBwM,gBAAiB9gE,EAAKlF,MAAMimE,2BAC5BpI,WAAY34D,EAAK+b,MAAMhzB,QAAQgc,YAAY1Q,YAAYukE,YAGzD54D,EAAKs2D,WAAWC,oBAAoBwC,MAAM,8BAA+B,oBACzE/4D,EAAKs2D,WAAWC,oBAAoBwC,MAAM,kBAADtxE,OAAmBiqB,KAAKC,UAAU4lD,IAAe,oBAC5F,EAACv3D,EAEDghE,iBAAmB,kBAAOhhE,EAAKlF,MAAMmkE,SAAWj/D,EAAKlF,MAAMmkE,SAASz0E,KAAI,SAACi2B,GACvE,IAAMwgD,EAAsBxgD,EAAKlY,KAAKqqD,UAAU,EAAG,IAC7CsO,EAAuB,GACzBxH,EAAsB,GACtBY,GAAoB,EA0BxB,OAzBI75C,EAAKi5C,qBACP5zE,IAAAA,KAAO26B,EAAKi5C,qBAAqB,SAACkH,GAChCM,EAAqBx4D,KAAK1I,EAAKq/D,qBAAqBuB,EAAS/K,iBAC/D,IACG6D,EAAwBj5C,EAAxBi5C,qBACMj5C,EAAK0gD,kBACdzH,EAAsB5zE,IAAAA,IAAM26B,EAAK0gD,iBAAiB,SAACP,GAEjD,OADAM,EAAqBx4D,KAAK1I,EAAKq/D,qBAAqBuB,EAAS/K,kBACtD,CACLA,gBAAiB+K,EAAS/K,gBAC1BgC,SAAU+I,EAASQ,cACnB9I,WAAYxyE,IAAAA,IAAM86E,EAAStI,YAAY,SAAA+I,GAAK,MAAK,CAAEh9C,QAAS,CAAE41C,UAAWoH,GAAS,IAEtF,IACA/G,GAAoB,GAGtBZ,EAAsBA,EAAoB7pE,QAAO,SAAC6nE,GAChD,IAAM4J,EAAethE,EAAKq/D,qBAAqB3H,EAAK7B,iBACpD,OAAOyL,IAAiBthE,EAAKlF,MAAMu5D,0BACjCiN,IAAiBthE,EAAKlF,MAAMw5D,4BAC5BgN,IAAiBthE,EAAKlF,MAAMimE,0BAChC,IAEA/gE,EAAKuhE,mBAAmBL,GACjB,CACL34D,KAAMkY,EAAKlY,KACXqxD,cAAe55D,EAAKg5D,iBAAiBj2D,WACnCk+D,EACAjhE,EAAKlF,MAAMoiE,wBAEbxD,oBAAAA,EACAY,kBAAAA,EAEJ,IAAK,IAAI,EAthCHt6D,EAAK+b,MAAMtc,aACbO,EAAKP,WAAaO,EAAK+b,MAAMtc,WAAWqB,YAAY,yBAA0B,CAAEk8D,eAAe,IAC/Fh9D,EAAKP,WAAWsB,YAGlBf,EAAKo2D,4BACLp2D,EAAKzW,KAAOyW,EAAK+b,MAAMxyB,KAEvByW,EAAK+b,MAAMhzB,QAAQy4E,sBAAsBxhE,EAAK68D,oBAAoBzlC,KAAIp3B,IACtEA,EAAK+b,MAAMhzB,QAAQ04E,oBAAoBzhE,EAAKo9D,eAAehmC,KAAIp3B,IAE/DA,EAAK7Y,cAAeu6E,EAAAA,EAAAA,IAAqC1hE,EAAK+b,MAlB1B,IAoBpC/b,EAAK++D,eAAiB,IAAItX,EAC1BznD,EAAKg5D,iBACH,IAAIzJ,EAAiB,CACnBhmE,KAAMyW,EAAKzW,KACXpB,YAAa6X,EAAK+b,MAAMhzB,QAAQgc,YAAYk0D,YAC5C1O,SAAUvqD,EAAK+b,MAAMhzB,QAAQgc,YAAY48D,gBACzCnX,2BAA4BxqD,EAAK+b,MAAMhzB,QAAQyhE,2BAC/CrjE,aAAc6Y,EAAK7Y,eAEvB6Y,EAAKf,eAAgB,EACrBe,EAAKs9D,6BAA8B,EACnCt9D,EAAK4hE,gBAAiB,EACtB5hE,EAAKu0D,iCAAkC,EAEnCv0D,EAAK+b,MAAM7vB,eAAiB8T,EAAK+b,MAAM7vB,cAAc21E,qBACvD7hE,EAAKu0D,gCACHv0D,EAAK+b,MAAM7vB,cAAc21E,mBAAmBhN,iCAGhD70D,EAAKo/D,UAAY,CAAC,EAElB,IAAMj3E,EAAc6X,EAAK+b,MAAMhzB,QAAQgc,YAAYk0D,aAAe,CAAC,EAAE6I,EAMjE35E,EAJFihB,QAAO04D,OAAA,IAAAA,EAGH,CAAC,EAACA,EAFc9hE,EAAK0S,0BAAyBovD,EAAhDnvD,iBACoB3S,EAAK4S,4BAA2BkvD,EAApDjvD,mBAIJ7S,EAAKs6D,kBAAoBnyE,EAAYihB,SAAWjhB,EAAYihB,QAAQ24D,4BAEpE/hE,EAAKlF,MAAQ,CACX8kE,WAAW,EACXvb,cAAc,EACd8Y,iBAAiB,EACjB6E,aAAa,EACbhe,sBAAsB,EACtBG,oBAAoB,EACpB8a,SAAU,GACVJ,iBAAkB,EAClBxK,yBAA0B5N,EAC1B6N,2BAA4B7N,EAC5ByW,uBAAwBzW,EAExB8X,uBAAwB9X,EACxBwb,wBAAyB,GACzBC,0BAA2B,GAC3Bje,eAAgB,CAAC,EAEjBke,YAAaniE,EAAKg5D,iBAAiBrJ,gBACnCnmE,UAAW,CAAC,EACZw0E,0BAA2B,CAAC,EAC5BoE,oBAAoB,GAGtB,IAAMC,EAAariE,EAAK+b,MAAMhzB,QAAQu5E,kBAChChU,EAAgBtuD,EAAK+b,MAAMhzB,QAAQ0c,WACjC5K,GAAemF,EAAK+b,MAAM9iB,OAAS+G,EAAK+b,MAAM9iB,MAAMxN,QAAW,CAAC,GAAhEoP,UAEF0nE,EAAmB,WACvB,IAAMC,EAAuB,CAAC,aAAc,aAAc,WAAY,iBAAkB,qBAIlFC,EAAgB,GAFgB,CAAC,UAAW,WAAY,UAAW,KAAM,WAI5Cl3E,SAAS+iE,IAC1CmU,EAAc/5D,KAAIy8B,MAAlBs9B,EAN4B,CAAC,sCAAuC,0CAA2C,qDAU9F,QAAfJ,GAAuC,WAAfA,GAC1BI,EAAc/5D,KAAIy8B,MAAlBs9B,EAAsBD,EAAoB/6E,OAAA,CAAE,SAGxB,YAAlB6mE,GACFmU,EAAc/5D,KAAIy8B,MAAlBs9B,EAAsBD,EAAoB/6E,QAAA+W,EAAAA,EAAAA,GAAKmuD,KAGlB,CAAC,WAAY,UAAW,WAAWphE,SAAS+iE,IAC3B,iBAAf+T,IAAkCxnE,GAEjE4nE,EAAc/5D,KAAIy8B,MAAlBs9B,EAAsBD,GAGxB,IAAME,EAAsB58E,IAAAA,KAAO28E,GACnC,OAAK38E,IAAAA,QAAU48E,GAGR,KAFE,SAAAj4E,GAAM,OAAKi4E,EAAoBn3E,SAASd,EAAO6B,KAAM,CAGhE,EAgBI,OAdJ0T,EAAK2iE,mBACH3iE,EAAKg5D,iBAAiBvI,sBACpBtoE,EACAo6E,IACAviE,EAAK+b,MAAMhzB,QAAQslE,qBACnBC,GAGJtuD,EAAK4iE,qBACH5iE,EAAKg5D,iBAAiBpI,wBACpBzoE,EACAo6E,IACAviE,EAAK+b,MAAMhzB,QAAQslE,qBACnBC,GACAtuD,CACN,CAAC,OAAAY,EAAAA,EAAAA,GAAAg8D,EAAAjZ,IAAA9iD,EAAAA,EAAAA,GAAA+7D,EAAA,EAAA32E,IAAA,oBAAA2D,MAED,WAAqB,IAAD6kC,EAAA,KAClBnvB,KAAK8gE,UAAW,EAEhBnpE,IAAAA,IAAY,CACVqI,KAAKyc,MAAMhzB,QAAQ85E,UAAUhzB,WAAW,cACxCvwC,KAAK05D,iBAAiB/H,0BACpB3xD,KAAKyc,MAAMhzB,QAAQ1C,WACnBiZ,KAAKyc,MAAMhzB,QAAQgc,eAEpB+0C,QAAO,SAACtwD,EAAW4iD,GAClB,IAAK3d,EAAK2xC,SAAU,CAElB,IAAM0C,EAAwBr0C,EAAKs0C,uBAAuB32B,GACpD6wB,EAAwBxuC,EAAKuqC,iBAAiB/G,sBAClDzoE,EACAs5E,EAAsBra,eAGxBh6B,EAAK6nC,WAAWC,oBAAoBwC,MAAM,gFAADtxE,OACVq7E,EAAsBra,cAAa,sCAAAhhE,OAC3Cw1E,GAAyB,qBAEhDxuC,EAAKxvB,eAAgB,EAGrBwvB,EAAKR,UAAS,SAACb,EAAW41C,GAAQ,OAChCv0C,EAAKsnB,YAAYvsD,EAAWw5E,EAAUF,EAAuB7F,EAAsB,GACvF,CACF,GACJ,GAAC,CAAAh3E,IAAA,qBAAA2D,MAED,SAAmB4kC,EAAWpB,GACvB9tB,KAAKL,eAAkBK,KAAKg+D,6BAO7Bh+D,KAAKG,aAAeH,KAAKG,WAAWy/D,SAAW5/D,KAAKxE,MAAM8kE,WAAatgE,KAAKL,eAC9EK,KAAKG,WAAWC,OAGd8uB,EAAUwzC,cAAgB1iE,KAAKyc,MAAMimD,aACvC1iE,KAAK2jE,kBAAkB3jE,KAAKxE,MAAMknE,aAGhC1iE,KAAK05D,iBAAiB/E,mBAAmBzlC,EAAUhlC,UAAW8V,KAAKyc,MAAMvyB,WAK3E8V,KAAKu9D,oBAAoB,KAAMv9D,KAAKyc,MAAMvyB,WAIxC1D,IAAAA,YAAcwZ,KAAKxE,MAAMoiE,0BAKxB59D,KAAKxE,MAAMknE,aAQd1iE,KAAKsiE,gBACJtiE,KAAK4jE,gBAAgB10C,EAAU3+B,OAAQyP,KAAKyc,MAAMlsB,SAClDyP,KAAK6jE,sBAAsB30C,EAAU40C,aAAc9jE,KAAKyc,MAAMqnD,eAC9D9jE,KAAK05D,iBAAiB/E,mBAAmB7mC,EAAU5jC,UAAW8V,KAAKxE,MAAMtR,YACzE4jC,EAAUi3B,eAAiB/kD,KAAKxE,MAAMupD,eAGrC/kD,KAAKyc,MAAMqiD,gBACXhxC,EAAU8vC,yBAA2B59D,KAAKxE,MAAMoiE,yBAChD59D,KAAKyc,MAAMqiD,gBACXhxC,EAAUmxC,yBAA2Bj/D,KAAKxE,MAAMyjE,0BAElDj/D,KAAKsiE,gBAAiB,EAElBtiE,KAAKG,YACPH,KAAKG,WAAWwB,gBAIlB3B,KAAK++D,+BACH/+D,KAAKxE,MAAMtR,UACX8V,KAAKxE,MAAMoiE,uBAGX59D,KAAKyc,MAAMqiD,gBAAkBhxC,EAAU40C,cAAgB1iE,KAAKxE,MAAMknE,aAEpE1iE,KAAKg3D,WAAWC,oBAAoBwC,MAAM,+BAAgC,sBAhC1Ez5D,KAAKsiE,gBAAiB,IA5BtBtiE,KAAKsiE,gBAAiB,CA8D1B,GAAC,CAAA37E,IAAA,uBAAA2D,MAED,WACE0V,KAAK8gE,UAAW,CAClB,GAAC,CAAAn6E,IAAA,kBAAA2D,MAkTD,WACE,IAAIy5E,EAAkB/jE,KAAKxE,MAAM8kE,WAC/B5jD,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,UAAS5B,UACtBJ,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,mBAEf,MAGAl4B,IAAAA,YAAcwZ,KAAKxE,MAAMoiE,0BACzB59D,KAAKxE,MAAMqiE,kBAAoB79D,KAAKxE,MAAM8kE,aAC5CyD,GACErnD,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,0BAAyB5B,UACtCJ,EAAAA,EAAAA,KAAA,QACEgC,UAAU,sBACVslD,wBACE,CACEC,OAAQjkE,KAAKxE,MAAMqnE,kBAO/B7iE,KAAKy3D,cAAgBh4D,EAAAA,YACrB,IAAMykE,GAAuBxnD,EAAAA,EAAAA,KAAC0nC,EAAU,CACtCW,aAAc/kD,KAAKxE,MAAMupD,aACzBJ,eAAgB3kD,KAAKxE,MAAMmpD,eAC3BD,qBAAsB1kD,KAAKxE,MAAMkpD,qBACjCG,mBAAoB7kD,KAAKxE,MAAMqpD,mBAC/B/8B,IAAK9nB,KAAKy3D,gBAgBZ,OAbcz3D,KAAKxE,MAAMqiE,kBAAoB79D,KAAKxE,MAAM8kE,WACtD7hD,EAAAA,EAAAA,MAAA,OAAA3B,SAAA,EACEJ,EAAAA,EAAAA,KAACynD,EAAAA,sBAAqB,CACpB16E,QAASuW,KAAKxE,MAAMkjE,0BACpB0F,wBAAyBpkE,KAAKm/D,kBAE/B+E,MAGDxnD,EAAAA,EAAAA,KAAA,OAAAI,SACGinD,GAIT,GAAC,CAAAp9E,IAAA,qBAAA2D,MAuBD,SAAmB+5E,GACjB79E,IAAAA,KAAOwZ,KAAKqjE,oBAAoB,SAACl4E,GAG/BA,EAAO26D,cAAgB36D,EAAO26D,eAAiBt/D,IAAAA,SAAW69E,EAAal5E,EAAOxB,GAChF,IACAnD,IAAAA,KAAOwZ,KAAKsjE,sBAAsB,SAACn4E,GAEjCA,EAAO26D,cAAgB36D,EAAO26D,eAAiBt/D,IAAAA,SAAW69E,EAAal5E,EAAOxB,GAChF,GACF,GAAC,CAAAhD,IAAA,iBAAA2D,MAED,WACE,IAAA4jC,EAAiEluB,KAAKxE,MAA9Du5D,EAAwB7mC,EAAxB6mC,yBAA0BC,EAA0B9mC,EAA1B8mC,2BAKlC,OAJgBh1D,KAAK05D,iBAAiB5E,gBACpCC,EACAC,EAGJ,GAAC,CAAAruE,IAAA,cAAA2D,MAED,SAAYwgC,GACNA,GAAS9qB,KAAK+nD,OAAS/nD,KAAK+nD,MAAMt+D,SACpCuW,KAAK+nD,MAAMuc,QAAQx5C,EAAO,MAAM,GAK7BA,EAAQ,GACXA,IAAU9qB,KAAKxE,MAAMkuD,YACrB1pD,KAAK2uB,SAAS,CACZ+6B,WAAY5+B,GAGlB,GAAC,CAAAnkC,IAAA,mBAAA2D,MAaD,SAAiBi6E,GAEfvkE,KAAKs+D,qBAAqB,YAAaiG,GAEvCvkE,KAAK2uB,SAAS,CACZ+zC,YAAa6B,IAEfvkE,KAAKg3D,WAAWC,oBAAoBwC,MAAM,mCAADtxE,OAAoCo8E,GAAkB,qBAE/FvkE,KAAK8gE,UAAYyD,CACnB,GAAC,CAAA59E,IAAA,cAAA2D,MAED,SAAYoS,EAAQ+f,EAAOqwB,EAAaqc,GACtC,IAAI4L,EAMJ,OALIvuE,IAAAA,SAAWi2B,EAAMhzB,QAAQ+6E,sBAC3BzP,EAA2Bt4C,EAAMhzB,QAAQ+6E,qBAChCh+E,IAAAA,SAAWsmD,EAAY2lB,mBAChCsC,EAA2BjoB,EAAY2lB,iBAElC,CACLiQ,YAAajmD,EAAMimD,aAAe51B,EAAYylB,UAC9C0M,uBAAwBnyB,EAAY0lB,kBACpCuC,yBAAAA,EACAC,2BAA4BloB,EAAY4lB,kBACxCkL,uBAAwBzU,EACxBj/D,UAAWwS,EACXqoD,eAAgBroD,EAAOrS,SAE3B,GAEA,CAAA1D,IAAA,yBAAA2D,MACA,SAAuBwiD,GACrB,IAAM02B,EAAwB12B,EAkB9B,OAfKtmD,IAAAA,KAAOwZ,KAAKqjE,mBAAoB,CAAE15E,GAAImjD,EAAY2lB,oBACrD+Q,EAAsB/Q,gBAAkBtL,EACxCnnD,KAAKs+D,qBAAqB,gBAAiBkF,EAAsB/Q,kBAI9DjsE,IAAAA,KAAOwZ,KAAKsjE,qBAAsB,CAAE35E,GAAImjD,EAAY4lB,sBACvD8Q,EAAsB9Q,kBAAoBvL,EAC1CnnD,KAAKs+D,qBAAqB,kBAAmBkF,EAAsB9Q,oBAGjE1yD,KAAKyc,MAAMhzB,QAAQg7E,uBACrB33B,EAAY0lB,mBAAoB,GAG3BgR,CACT,GAAC,CAAA78E,IAAA,uBAAA2D,MAED,SAAqBo6E,EAAQp6E,GAC3B,IAAMq6E,EAAU,CAAC,EACjBA,EAAQ,GAADx8E,OAAI6X,KAAKyc,MAAMhzB,QAAQgc,YAAYssD,aAAY,KAAA5pE,OAAIu8E,IACxDp6E,EACF0V,KAAKyc,MAAMhzB,QAAQ1C,WAAW69E,mBAAmBD,EACnD,GAAC,CAAAh+E,IAAA,yBAAA2D,MAED,WAGG,IAFD6+D,EAAal1D,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAG+L,KAAKxE,MAAMoiE,uBAC3B2C,EAAUtsE,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAG+L,KAAKxE,MAAMupD,aAExB,OAAI/kD,KAAKyc,MAAMhzB,QAAQg7E,wBAGdlE,GACNpX,IAAkBhC,EACvB,GAAC,CAAAxgE,IAAA,iBAAA2D,MAED,WAGE,SAFqB0V,KAAKyc,MAAMlsB,QAAUyP,KAAKyc,MAAMlsB,OAAO2f,QAC1DlQ,KAAKyc,MAAMlsB,OAAO2f,QAAQ,CAAExB,YAAY,IAAW,GAEvD,GAAC,CAAA/nB,IAAA,kBAAA2D,MAED,SAAgBu6E,EAAWC,GAOzB,OANwBD,GAAaA,EAAU30D,QAC7C20D,EAAU30D,QAAQ,CAAExB,YAAY,IAAW,OACrBo2D,GAAaA,EAAU50D,QAC7C40D,EAAU50D,QAAQ,CAAExB,YAAY,IAAW,GAI/C,GAAC,CAAA/nB,IAAA,wBAAA2D,MAED,SAAsBu6E,EAAWC,GAC/B,SAAKD,IAAcC,KAIXt+E,IAAAA,QAAUq+E,EAAWC,EAC/B,GAAC,CAAAn+E,IAAA,qBAAA2D,MAED,WAGE,OAAQ0V,KAAKyc,MAAMhzB,QAAQgc,YAAY26C,kBACpCpgD,KAAKyc,MAAMhzB,QAAQgc,YAAYs/D,iBAC9B/kE,KAAKyc,MAAMhzB,QAAQgc,YAAY26C,kBAC9BpgD,KAAKyc,MAAMhzB,QAAQgc,YAAYs/D,cACtC,GAAC,CAAAp+E,IAAA,iBAAA2D,MAED,SAAe8Z,GACbpE,KAAK2uB,SAAS,CACZgxC,SAAUv7D,GAEd,GAAC,CAAAzd,IAAA,sBAAA2D,MAED,SAAoB+1E,GAClBrgE,KAAK2uB,SAAS,CACZm0C,mBAAoBzC,GAExB,GAAC,CAAA15E,IAAA,mBAAA2D,MAED,SAAiBJ,EAAWi/D,GAAgB,IAAD/xB,EAAA,KASzC,GARIp3B,KAAKyc,MAAMhzB,QAAQ21E,uBACrBp/D,KAAKg3D,WAAWC,oBAAoBwC,MAAM,mDAADtxE,OAEzB6X,KAAKyc,MAAMhzB,QAAQgc,YAAY1Q,YAAYukE,WAAa,WAAa,YACnF,qBAICt5D,KAAKglE,qBAAV,CAIA,IAAM3F,EAAiBr/D,KAAKq/D,iBAQ5B,GAPAr/D,KAAKg3D,WAAWC,oBAAoBwC,MAAM,uBAADtxE,OAChBk3E,GACvB,qBAKElW,IAAkBhC,IAA2BkY,GAC3Cr/D,KAAKyc,MAAMhzB,QAAQ21E,sBAAuB,CAC5C,IACM6F,EAAiB,IAAIC,EADPllE,KAAKyc,MAAMhzB,QAAQ07E,oBACA,CACrCxsE,MAAOqH,KAAKyc,MAAMhzB,QAAQkP,MAC1BlP,QAAS,CACP2vE,OAAQp5D,KAAKyc,MAAMhzB,QAAQgc,YAAY1Q,YAAYrD,GACnD8G,WAAYwH,KAAKyc,MAAMhzB,QAAQgc,YAAYxY,gBAAgByE,GAC3D+G,UAAWuH,KAAKyc,MAAMhzB,QAAQgc,YAAYE,eAAejU,GACzD+C,WAAYuL,KAAKyc,MAAMhzB,QAAQgc,YAAY26C,iBACzCpgD,KAAKyc,MAAMhzB,QAAQgc,YAAY26C,gBAAgB1uD,GACjDm1D,YAAaM,EACblrC,UAAWjc,KAAKolE,iBAAiBl7E,EAAUme,OAC3C6T,QAASlc,KAAKolE,iBAAiBl7E,EAAUoe,KACzC+8D,mBAAsD,aAAlCrlE,KAAKyc,MAAMhzB,QAAQ0c,WAA4B,EAAI,EACvEm/D,iCAAkCtlE,KAAKyc,MAAMhzB,QAAQ67E,oCAIzDtlE,KAAKuhE,aACLvhE,KAAKs/D,gBAAkB2F,EAAe1rE,QAAQ,CAC5CyhE,kBAAmBh7D,KAAKg7D,oBAE1Bh7D,KAAKs/D,gBAAgB5nE,MAAK,SAAChD,GACzB0iC,EAAKzI,SAAS,CACZgxC,SAAUjrE,IAEZ0iC,EAAK4/B,WAAWC,oBAAoBwC,MAAM,+BAAgC,mBAC5E,IAAG,SAACwH,GACF7pC,EAAK4/B,WAAWG,mBAAmBsC,MAAM,8BAADtxE,OACRiqB,KAAKC,UAAU4uD,IAC7C,oBAEF7pC,EAAKzI,SAAS,CACZgxC,SAAU,IAEd,GACF,CA/CF,CAiDF,GAAC,CAAAh5E,IAAA,iCAAA2D,MAED,SAA+BJ,EAAWi/D,EAAeiX,GAAc,IAADpoC,EAAA,KACpEh4B,KAAKu+D,qBAAqBr0E,EAAWi/D,EAAeiX,GAAa1oE,MAAK,WAChEsgC,EAAK73B,YACP63B,EAAK73B,WAAWuB,aAGds2B,EAAKvb,MAAM8oD,iBACbvtC,EAAKvb,MAAM8oD,iBAEf,IACAvlE,KAAKwlE,iBAAiBt7E,EAAWi/D,EACnC,GAAC,CAAAxiE,IAAA,mBAAA2D,MAiID,SAAiBm7E,GACf,IAAMC,EAAc,SAAAC,GAAC,OAAmB,IAAbA,EAAE55E,OAAY,IAAA5D,OAAQw9E,GAAMA,CAAC,EAClDC,EAAK,IAAI38D,KAAKA,KAAKsO,MAAMkuD,IACzB9hE,EAAI,GAAAxb,OAAMy9E,EAAGhiE,eACbC,EAAK,GAAA1b,OAAMy9E,EAAG9hE,WAAa,GAC3BG,EAAG,GAAA9b,OAAMy9E,EAAG1hE,WAElB,MAAM,GAAN/b,OAAUwb,EAAI,KAAAxb,OAAIu9E,EAAY7hE,GAAM,KAAA1b,OAAIu9E,EAAYzhE,GACtD,GAAC,CAAAtd,IAAA,SAAA2D,MA6ED,WAAU,IAAD4tC,EAAA,KACCzuC,EAAYuW,KAAKyc,MAAjBhzB,QACFq9D,EAAkB9mD,KAAK05D,iBAAiBvO,uBACxC0a,EACJ7lE,KAAK05D,iBAAiBnK,cAAcvvD,KAAKxE,MAAMu5D,0BAC3C+Q,EACJ9lE,KAAK05D,iBAAiBnK,cAAcvvD,KAAKxE,MAAMw5D,4BAC3C+Q,EACJ/lE,KAAK05D,iBAAiBlI,wBAAwBxxD,KAAKxE,MAAMoiE,wBAErD7V,EAAQ/nD,KAAKgmE,kBAEbC,EAAqB,CACzBnf,gBAAAA,EACAxB,aAAcygB,EACdpf,wBAAyB3mD,KAAK4+D,qBAG1BsH,EAAmBlmE,KAAKyc,MAAMhzB,QAAQ21E,wBACxCp/D,KAAKq/D,kBAC+B,IAAtCr/D,KAAKxE,MAAMoiE,wBACX59D,KAAKxE,MAAMqiE,gBAEb79D,KAAKg3D,WAAWC,oBAAoBwC,MAAM,wBAAyB,qBACnEz5D,KAAKg3D,WAAWC,oBAAoBwC,MAAM,gBAADtxE,OAAiB6X,KAAKxE,MAAMkuD,YAAc,qBAEnF1pD,KAAKw/D,SAAW//D,EAAAA,YAEhB,IAAM0mE,EAAuB,CAC3Bzf,YAAa1mD,KAAKqjE,mBAClB/d,aAAcugB,EACdjwC,WAAY51B,KAAKxE,MAAMmnE,wBACvBhc,wBAAyB3mD,KAAKu7D,uBAG1B6K,EAAyB,CAC7B1f,YAAa1mD,KAAKsjE,qBAClBhe,aAAcwgB,EACdlwC,WAAY51B,KAAKxE,MAAMonE,0BACvBjc,wBAAyB3mD,KAAK2+D,yBAGhC,OAAO3+D,KAAKxE,MAAMknE,aAChBhmD,EAAAA,EAAAA,KAAC2pD,EAAAA,UAAS,CACRC,SAAUtmE,KAAKxE,MAAMsnE,mBACrByD,YAAavmE,KAAK/V,KAAKO,UAAU,eACjCgoC,QAAS,CACPg0C,iBAAkB,iBAClBC,iBAAkB,qBAClB3pD,UAEF2B,EAAAA,EAAAA,MAAA,OAAKC,UAAU,yBAAwB5B,SAAA,EACnC9c,KAAKyc,MAAMhzB,QAAQi9E,iBAAkBhqD,EAAAA,EAAAA,KAAC0pC,EAAU,CAChDn8D,KAAM+V,KAAK/V,KACX08E,WAAY3mE,KAAK05D,iBAAiBvJ,cAAc1mE,EAAQ85E,WACxDxe,aAAc/kD,KAAKxE,MAAMupD,aACzBsB,gBAAiBrmD,KAAKxE,MAAMyjE,uBAC5B3Y,uBAAwBtmD,KAAKsmD,yBAC7BG,cAAe0f,EACfvf,gBAAiBwf,EACjBvf,YAAaof,EACbhf,4BAA6BjnD,KAAKg/D,yBAEpCvgD,EAAAA,EAAAA,MAAA,OAAKC,UAAU,kBAAiB5B,SAAA,CAC7BirC,EACAme,GACCxpD,EAAAA,EAAAA,KAACk6C,EAAgB,CACf9uC,IAAK,SAAC8+C,GAAQ1uC,EAAKsnC,SAAWoH,CAAG,EACjC1O,aAAcl4D,KAAK0hE,mBACnBzG,eAAgB,SAAC72D,GAAW8zB,EAAK+iC,eAAe72D,EAAO,EACvD82D,oBAAqB,SAAAmF,GAAO,OAAInoC,EAAKgjC,oBAAoBmF,EAAQ,EACjEtY,MAAO/nD,KAAK+nD,MACZ0K,gBAAiBzyD,KAAKxE,MAAMu5D,yBAC5BrC,kBAAmB1yD,KAAKxE,MAAMw5D,2BAC9BuG,sBAAuBv7D,KAAKu7D,sBAC5B9D,cAAez3D,KAAKy3D,cACpBwC,iBAAkB,CAChBvV,qBAAsB1kD,KAAKxE,MAAMkpD,qBACjCG,mBAAoB7kD,KAAKxE,MAAMqpD,oBAEjChE,cAAe7gD,KAAKqhE,YACpBnH,mBAAoBl6D,KAAKk/D,cACzBh1E,UAAW,CACT+xB,UAAWjc,KAAKxE,MAAMtR,UAAUme,MAChC6T,QAASlc,KAAKxE,MAAMtR,UAAUoe,KAEhC1H,KAAM,CACJ3W,KAAM+V,KAAKyc,MAAMxyB,KACjBq2D,QAAStgD,KAAKyc,MAAMhzB,QAAQgc,YAC5BkB,gBAAiB3G,KAAKyc,MAAMhzB,QAAQkd,gBACpChO,MAAOqH,KAAKyc,MAAMhzB,QAAQkP,MAC1B6nD,UAAWxgD,KAAKyc,MAAMhzB,QAAQ+2D,aAE7B,aAIX,IACN,IAAC,CA/nC6B,CAAS/gD,EAAAA,eA0vCzC69D,EAAoB3+C,aAAe,CACjCpuB,OAAQ,KACRg1E,gBAAiB,WACf/+E,IAAAA,MACF,EACA0D,UAAW,KACXiW,WAAY,KACZvT,cAAe,KACfkyE,eAAgB,KAChBgF,aAAc,KACdnqE,MAAO,CACLxN,OAAQ,CACNoP,UAAW,KAKV,IAAMioD,GAAcqjB,EAAAA,EAAAA,kBAAiBvJ,E,qpBC1vClB,QAADn1E,OAAU2+E,EAAgB,MAGzB,QAAD3+E,OAAU4+E,EAAiB,MAG1B,QAAD5+E,OAAU6+E,EAAsB,MAG/B,QAAD7+E,OAAU8+E,EAAoB,MAG7B,QAAD9+E,OAAU++E,EAAgB,MAsCvB,QAAD/+E,OAAU2+E,EAAgB,MAGzB,QAAD3+E,OAAU4+E,EAAiB,MAG1B,QAAD5+E,OAAU6+E,EAAsB,MAG/B,QAAD7+E,OAAU8+E,EAAoB,MAG7B,QAAD9+E,OAAU++E,EAAgB,M,gLCnGxCj0C,EAAiC,SAAAF,GAAO,MAAK,CACxD,WAASzrC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,IACJ6/E,EAAAA,EAAAA,0BAAyB,CAAEp0C,QAAAA,MAC3Bq0C,EAAAA,EAAAA,+BAA4B,IAC/B,qDAAsD,CACpD5xE,SAAU,kBACVu1B,OAAQ,kBACRs8C,cAAe,iBACfr8C,UAAW,kBACXrE,cAAe,EAEf,2BAA4B,CAC1B4b,KAAM,kBAGR,4BAA6B,CAC3Bld,MAAO,iBACPyF,MAAO,sBAMb,6BAA2BxjC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,IACtBggF,EAAAA,EAAAA,sBAAoBC,EAAAA,EAAAA,iBAAgB,CAAEx0C,QAAAA,MAAW,IAEpD,2BAA4B,CAC1By0C,gBAAgB,OAADr/E,OAASs/E,EAAgB,MAG1C,2BAA4B,CAC1BD,gBAAgB,OAADr/E,OAASu/E,EAAgB,MAE1C,4BAA6B,CAC3B51C,OAAQ,OACRhH,MAAO,OACPiH,cAAe,GACfrB,QAAS,OACT22C,cAAe,SACfM,UAAW,EACXC,eAAgB,eAEhB,iBAAkB,CAChBC,SAAU,GACVC,WAAY,IACZhf,MAAO,UACPif,UAAW,SACXphD,aAAc,GACdF,UAAW,GACXuhD,WAAY,WACZC,UAAW,UAGb,4BAA6B,CAC3Bv3C,QAAS,OACT22C,cAAe,MACf,0BAA2B,CACzBv1C,OAAQ,IACRhH,MAAO,IACP4F,QAAS,QAEX,UAAW,CACT5F,MAAO,MACP4F,QAAS,OACT22C,cAAe,SACfO,eAAgB,aAChBM,WAAY,SACZ,gBAAiB,CACfvmD,KAAM,EACNwmD,iBAAkB,YAClBC,mBAAoB,mBAI1B,gBAAiB,CACfP,SAAU,GACVC,WAAY,IACZE,WAAY,WACZt2D,MAAO,EACPogB,OAAQ,IAEV,mBAAoB,CAClB+1C,SAAU,GACVG,WAAY,WACZl2C,OAAQ,GACRpgB,MAAO,GAET,gCAAiC,CAC/Blc,SAAU,QACVk7B,QAAS,OACTk3C,eAAgB,WAChBl2D,MAAO,EACP21D,cAAe,SACf1lD,KAAM,EACNgF,aAAc,IAEhB,sBAAuB,CACrBhF,KAAM,EACNwmD,iBAAkB,YAClBE,eAAgB,QAChBD,mBAAoB,iBAEtB,mCAAoC,CAClCZ,gBAAgB,QAADr/E,OAAUmgF,EAA0B,OAGrD,kBAAmB,CACjB52D,MAAO,EACP+U,UAAW,KAIf,+BAAgC,CAC9BqL,OAAQ,OACRC,cAAe,EACfrB,QAAS,OACT22C,cAAe,SACfQ,SAAU,GACVF,UAAW,EAEX,0CAA2C,CACzCj3C,QAAS,OACT/O,KAAM,IACNimD,eAAgB,gBAChBtlC,SAAU,WAEV,iBAAkB,CAChB9sC,SAAU,GACVs8B,OAAQ,GACRpB,QAAS,OACT22C,cAAe,SACfkB,SAAU,SACVX,eAAgB,SAChBY,aAAc,SACdC,aAAc,SACdP,WAAY,SAEZ,gBAAiB,CACfL,SAAU,GACVC,WAAY,IACZG,UAAW,SACXD,WAAY,WACZlf,MAAO,WAET,kBAAmB,CACjB+e,SAAU,GACVC,WAAY,IACZG,UAAW,SACXnf,MAAO,UACPkf,WAAY,aAIhB,mBAAoB,CAClBt3C,QAAS,OACT22C,cAAe,SACfkB,SAAU,SACVL,WAAY,aACZp9C,MAAO,MACP,iBAAkB,CAChB4F,QAAS,OACT+3C,aAAc,eACdb,eAAgB,QAChBnhD,UAAW,MAEX,2BAA4B,CAC1BohD,SAAU,GACVC,WAAY,IACZG,UAAW,SACXD,WAAY,WACZlf,MAAO,WAET,8BAA+B,CAC7BriC,UAAW,OACXohD,SAAU,GACVC,WAAY,IACZG,UAAW,SACXD,WAAY,WACZlf,MAAO,YAGX,kBAAmB,CACjBriC,UAAW,OACXiK,QAAS,OACT22C,cAAe,SACfkB,SAAU,SACVX,eAAgB,aAChBM,WAAY,aACZ,kBAAmB,CACjBL,SAAU,GACVC,WAAY,IACZG,UAAW,SACXnf,MAAO,UACPkf,WAAY,WACZ,yBAA0B,CACxBt3C,QAAS,SACTo4B,MAAO,UACP4f,aAAc,0BAMxB,qCAAsC,CACpCh4C,QAAS,OACTi4C,OAAQ,aACRT,WAAY,aACZ,wBAAyB,CACvBvmD,KAAM,IACNoe,YAAa,GACb+oB,MAAO/1B,EAAQ61C,iBACfl4C,QAAS,eAEX,oCAAqC,CACnCm4C,WAAY,GAEd,kCAAmC,CACjClnD,KAAM,KAER,sBAAuB,CACrBoe,YAAa,GACb,qBAAsB,CACpBjO,OAAQ,aAId,wCAAyC,CACvCpB,QAAS,OACT/O,KAAM,MACNimD,eAAgB,SAChBkB,UAAW,OACXC,UAAW,SAEX,oCAAqC,CACnCC,UAAW,SACXnB,SAAU,QAEZ,2BAA4B,CAC1Bn3C,QAAS,OACTu4C,oBAAqB,yGACrBf,WAAY,UACZvmD,KAAM,IACNqnD,UAAW,aAEX,kCAAmC,CACjCE,QAAS,KACTC,UAAU,aAADhhF,OAAe4qC,EAAQq2C,iBAElC,iCAAkC,CAChCF,QAAS,IACTC,UAAU,aAADhhF,OAAe4qC,EAAQq2C,iBAElC,iCAAkC,CAChCF,QAAS,IACTC,UAAU,aAADhhF,OAAe4qC,EAAQq2C,iBAElC,iCAAkC,CAChCF,QAAS,IACTC,UAAU,aAADhhF,OAAe4qC,EAAQq2C,iBAElC,iCAAkC,CAChCF,QAAS,IACTC,UAAU,aAADhhF,OAAe4qC,EAAQq2C,iBAElC,iCAAkC,CAChCF,QAAS,IACTC,UAAU,aAADhhF,OAAe4qC,EAAQq2C,iBAElC,iCAAkC,CAChCF,QAAS,IACTC,UAAU,aAADhhF,OAAe4qC,EAAQq2C,iBAElC,iCAAkC,CAChCF,QAAS,IACTC,UAAU,aAADhhF,OAAe4qC,EAAQq2C,iBAElC,iCAAkC,CAChCF,QAAS,IACTC,UAAU,aAADhhF,OAAe4qC,EAAQq2C,iBAElC,iCAAkC,CAChCF,QAAS,IACTC,UAAU,aAADhhF,OAAe4qC,EAAQq2C,iBAGlC,kCAAmC,CACjCC,WAAY,IACZC,YAAa,oBACb54C,QAAS,OACTw3C,WAAY,SACZP,UAAW,GACX4B,YAAa,GACbC,aAAc,IAEhB,0CAA2C,CACzCzpC,YAAa,GAEf,oCAAqC,CACnCjZ,SAAU,SACVD,aAAc,WACdrxB,SAAU,EACVi0E,WAAY,UAEd,oCAAqC,CACnCJ,WAAY,IACZC,YAAa,oBACbI,QAAS,gBACTh5C,QAAS,OACTw3C,WAAY,SACZ3L,gBAAiBxpC,EAAQq2C,gBAE3B,iDAAkD,CAChD14C,QAAS,OACToB,OAAQ,GACRhH,MAAO,QAET,4DAA6D,CAC3DyxC,gBAAiBxpC,EAAQ42C,cAE3B,qCAAsC,CACpCN,WAAY,IACZC,YAAa,oBACbI,QAAS,gBACTh5C,QAAS,OACTw3C,WAAY,SACZ3L,gBAAiBxpC,EAAQq2C,gBAE3B,mDAAoD,CAClD14C,QAAS,OACToB,OAAQ,GACRhH,MAAO,QAET,8DAA+D,CAC7DyxC,gBAAiB,WAEnB,gBAAiB,CACf8M,WAAY,IACZxB,SAAU,GACV/e,MAAO/1B,EAAQ62C,eACfL,YAAa,GACbM,WAAY,GACZ9B,UAAW,SAEb,2BAA4B,CAC1BsB,WAAY,IACZxB,SAAU,GACV/e,MAAO/1B,EAAQ61C,iBACfW,YAAa,GACbM,WAAY,GACZ9B,UAAW,SAEb,eAAgB,CACdsB,WAAY,IACZxB,SAAU,GACV/e,MAAO/1B,EAAQ61C,iBACfW,YAAa,GACbC,aAAc,GACdK,WAAY,GACZ9B,UAAW,SAEb,wBAAyB,CACvBsB,WAAY,aACZS,WAAY,OACZC,OAAQ,IACRh/C,OAAQ,mBAEV,sBAAuB,CACrBs+C,WAAY,aACZS,WAAY,OACZC,OAAQ,IACRh/C,OAAQ,mBAEV,+CAAgD,CAC9C2F,QAAS,SAEX,6CAA8C,CAC5CA,QAAS,SAEX,6BAA8B,CAC5BA,QAAS,eACT6rC,gBAAiB,WAEnB,4BAA6B,CAC3B7rC,QAAS,eACT6rC,gBAAiB,WAEnB,cAAe,CACb7rC,QAAS,OACT5F,MAAO,GACPgH,OAAQ,GACRiO,YAAa,GAEf,sDAAuD,CACrD1a,MAAO,UAET,wDAAyD,CACvDkd,KAAM,UAER,qBAAsB,CACpBD,SAAU,WACV5R,QAAS,OACTm3C,SAAU,GACV/e,MAAO,UACPh+B,MAAO,IACPgH,OAAQ,IACR+2C,WAAY,EAEZ,mBAAoB,CAClBvmC,SAAU,WACVynC,OAAQ,KACRL,QAAS,GACT3nB,OAAQ,IACRya,aAAc,EACdxxC,UAAW,qEACXuxC,gBAAiB,4BACjB,0CAA2C,CACzCyN,eAAgB,aAChBzN,gBAAiB,8BAGrB,yBAA0B,CACxB7rC,QAAS,QAEX,gCAAiC,CAC/Bu5C,UAAW,YACXl4C,cAAe,IAEjB,6BAA8B,CAC5BrB,QAAS,OACTu4C,oBAAqB,qEAEvB,6CAA8C,CAC5Cl3C,cAAe,IAEjB,uCAAwC,CACtC+1C,WAAY,QAEd,0CAA2C,CACzCoC,SAAU,QACVhB,QAAS,IACTG,WAAY,IACZC,YAAa,oBACbE,aAAc,IAEhB,6CAA8C,CAC5CU,SAAU,QACVb,WAAY,IACZE,YAAa,IAEf,yCAA0C,CACxCL,QAAS,IACTG,WAAY,aACZQ,WAAY,GACZn5C,QAAS,OACTw3C,WAAY,WAGhB,+HAAgI,CAC9H3wE,IAAK,GACLwqD,OAAQ,SAGZ,sBAAuB,CACrBzf,SAAU,WACVwnC,WAAY,SAEd,4BAA6B,CAC3Bp5C,QAAS,SAIb,qBAAsB,CACpBA,QAAS,OACTk3C,eAAgB,gBAChB71C,cAAe,GAEf,iBAAkB,CAChB+1C,WAAY,OACZD,SAAU,GACV/1C,OAAQ,OACRyqC,gBAAiBxpC,EAAQo3C,MACzBrhB,MAAO/1B,EAAQq3C,MACfV,QAAS,UACTlN,aAAc,MACdzxC,OAAQ,YACR0xC,YAAa,UAEbjnE,SAAU,QACV,UAAW,CACT+mE,gBAAiB,YAGrB,yBAA0B,CACxB/mE,SAAU,IACVk7B,QAAS,OACTm3C,SAAU,GACVD,eAAgB,gBAChBM,WAAY,SAEZ,yBAA0B,CAC1B,EACA,qBAAsB,CACpB1yE,SAAU,GACVoyE,eAAgB,SAChByC,WAAY,OACZvhB,MAAO/1B,EAAQ42C,aAEf,UAAW,CACT7gB,MAAO/1B,EAAQu3C,iBAMzB,oCAAqC,CACrC,EAEA,kBAAmB,CACjB7jD,UAAW,IAEb,sCAAuC,CACrC9E,KAAM,YAER,mBAAoB,CAClB+nD,QAAS,IACT3+C,OAAQ,IACR+8C,WAAY,MACZa,OAAQ,IACRd,SAAU,GACV0C,WAAY,SACZC,UAAW,CACT,CACE1C,WAAY,cAKrB,E,kKC1hBK2C,EAAmB,uFAMnBC,EAAgB,UAChBC,EAAc,UACdC,EAAkB,UAClBC,EAAmB,UAEZC,EAAqB,SAAA/3C,GAAO,MAAK,CAC5C,eAAgB,CACdrC,QAAS,OACT22C,cAAe,SACf,yBAA0B,CACxB32C,QAAS,OACT5F,MAAO,OACPrE,UAAW,GACX9E,KAAM,IACNsnD,oBAnBqB,8FAoBrB8B,iBAlBkB,sBAoBlB,mBAAoB,CAClB9B,oBAtB8B,wHAyBhC,gBAAiB,CACf,mBAAoB,CAClBn+C,MAAO,SAGX,uBAAwB,CACtB,eAAgB,IAChBo+C,QAAS,IACTp3C,OAAQ,GACRC,cAAe,EACfo3C,UAAU,aAADhhF,OAAe4qC,EAAQq2C,gBAChCV,aAAa,aAADvgF,OAAe4qC,EAAQq2C,gBAEnC,iDAAkD,CAChD,mBAAoB,CAClB7xE,IAAK,OACLwqD,OAAQ,UAId,uBAAwB,CACtB,eAAgB,IAChBmnB,QAAS,IACTp3C,OAAQ,GACRC,cAAe,EACfo3C,UAAU,aAADhhF,OAAe4qC,EAAQq2C,iBAElC,uBAAwB,CACtB,eAAgB,IAChBF,QAAS,IACTp3C,OAAQ,GACRC,cAAe,EACftL,UAAW,EACX0iD,UAAU,aAADhhF,OAAe4qC,EAAQq2C,iBAElC,uBAAwB,CACtB,eAAgB,IAChBF,QAAS,KAEX,sCAAuC,CACrC3xE,IAAK,kBACLwqD,OAAQ,mBAEV,0BAA2B,CACzB,kBAAmB,IACnBipB,gBAAiB,KAEnB,0BAA2B,CACzB,kBAAmB,IACnBA,gBAAiB,KAEnB,0BAA2B,CACzB,kBAAmB,IACnBA,gBAAiB,KAEnB,0BAA2B,CACzB,kBAAmB,IACnBA,gBAAiB,KAEnB,0BAA2B,CACzB,kBAAmB,IACnBA,gBAAiB,IACjBt6C,QAAS,OACT22C,cAAe,SACfa,WAAY,cAEd,iDAAkD,CAChDn9C,OAAQ,OACRw+C,YAAa,EACbC,aAAc,EACd13C,OAAQ,OAER,yBAA0B,CACxBy4C,WAAY,QAGd,mBAAoB,CAClBhoC,KAAM,MACNld,MAAO,QAET,mCAAoC,CAClC1D,KAAM,IACNimD,eAAgB,eAGpB,WAAY,CACVe,OAAQ,WAEV,sBAAuB,CACrBj4C,QAAS,OACTw3C,WAAY,SACZN,eAAgB,WAChB4B,aAAc,GACd1B,WAAY,MACZ,iBAAkB,CAChBK,iBAAkB,YAClBE,eAAgB,UAChBD,mBAAoB,gBACpBroC,YAAa,EACb8nC,SAAU,OACV0C,WAAY,EACZzC,WAAY,SACZp3C,QAAS,OACTw3C,WAAY,SACZp2C,OAAQ,OACRhH,MAAO,QAET,gBAAiB,CACf+8C,SAAU,OACV0C,WAAY,SAGhB,wDAAyD,CACvDzhB,MAAO4hB,GAET,wDAAyD,CACvD5hB,MAAO6hB,GAET,wDAAyD,CACvD7hB,MAAO8hB,GAET,wDAAyD,CACvD9hB,MAAO+hB,GAET,qBAAsB,CACpBn6C,QAAS,OACTo5C,WAAY/2C,EAAQq2C,eACpB9mC,SAAU,WACVxX,MAAO,OAEP,qBAAsB,CACpBnJ,KAAM,SAER,8BAA+B,CAC7B46C,gBAAiBxpC,EAAQ42C,cAE3B,gCAAiC,CAC/BpN,gBAAiBqO,GAEnB,4BAA6B,CAC3BrO,gBAAiBoO,GAEnB,iCAAkC,CAChCpO,gBAAiBsO,GAEnB,qBAAsB,CACpBn6C,QAAS,OACT4R,SAAU,WACVxX,MAAO,IACPgH,OAAQ,IACRyQ,KAAM,IACNslC,SAAU,GACV/e,MAAO,UACPihB,OAAQ,KACR,mBAAoB,CAClBznC,SAAU,WACVonC,QAAS,SACT3nB,OAAQ,EACRxf,KAAM,IACNvX,UAAW,qEACXuxC,gBAAiB,4BACjB,0CAA2C,CACzCyN,eAAgB,aAChBzN,gBAAiB,8BAGrB,gCAAiC,CAC/BmN,QAAS,UAEX,gCAAiC,CAC/BA,QAAS,aAEX,wCAAyC,CACvCh5C,QAAS,OACT+4C,WAAY,UAEd,oDAAqD,CACnD/4C,QAAS,OACTw3C,WAAY,UAEd,iEAAkE,CAChEp9C,MAAO,GACPgH,OAAQ,GACRiO,YAAa,GAEf,kFAAmF,CACjF+pC,WAAYY,GAEd,oFAAqF,CACnFZ,WAAYc,GAEd,gFAAiF,CAC/Ed,WAAYa,GAEd,qFAAsF,CACpFb,WAAYe,GAEd,iFAAkF,CAChFf,WAAYY,EACZlD,gBAAiBiD,GAEnB,mFAAoF,CAClFX,WAAYc,EACZpD,gBAAiBiD,GAEnB,+EAAgF,CAC9EX,WAAYa,EACZnD,gBAAiBiD,GAEnB,oFAAqF,CACnFX,WAAYe,EACZrD,gBAAiBiD,GAEnB,mDAAoD,CAClDf,QAAS,UAEX,wGAAyG,CACvGuB,WAAY,qBAEd,+CAAgD,CAC9CpB,WAAY,GACZ/B,WAAY,QAEd,+BAAgC,CAC9Bp3C,QAAS,OACTg5C,QAAS,eAEX,sCAAuC,CACrC5B,WAAY,QAEd,yBAA0B,CACxBp3C,QAAS,SAGb,qBAAsB,CACpB6R,KAAM,GAER,mBAAoB,CAClBA,KAAM,IAER,uBAAwB,CACtBA,KAAM,IAER,wBAAyB,CACvBA,KAAM,KAGV,0CAA2C,CACzC7R,QAAS,oBAEX,8CAA+C,CAC7CA,QAAS,oBAEX,sCAAuC,CACrCA,QAAS,oBAEX,gDAAiD,CAC/CA,QAAS,oBAEX,YAAa,CACX4R,SAAU,WACV7b,UAAW,EACXqL,OAAQ,IAEV,qBAAsB,CACpBwQ,SAAU,WACV5R,QAAS,OACTn5B,IAAK,IACLwqD,OAAQ,IACR18B,MAAO,IACPkd,KAAM,IACNunC,WAAYW,GAEd,aAAc,CACZ9oD,KAAM,KAER,wBAAyB,CACvB+O,QAAS,QAEX,mBAAoB,CAClBjK,UAAW,GACXqL,OAAQ,GACRy3C,YAAa,GACb74C,QAAS,OACT22C,cAAe,SACfO,eAAgB,UAElB,wBAAyB,CACvBl3C,QAAS,OACTk3C,eAAgB,WAChB4B,aAAc,GACdtB,WAAY,YAEd,uCAAwC,CACtCL,SAAU,OACVlhD,aAAc,EACdmiC,MAAO,WAET,kCAAmC,CACjCA,MAAO,WAET,kCAAmC,CACjCA,MAAO,WAET,2CAA4C,CAC1C+e,SAAU,OACVgB,WAAY,GAEd,sCAAuC,CACrChB,SAAU,OACV/e,MAAO/1B,EAAQ61C,kBAEjB,uBAAwB,CACtBpB,gBAAgB,QAADr/E,OAAU+iF,EAAY,OAEvC,yBAA0B,CACxB1D,gBAAgB,QAADr/E,OAAUgjF,EAAc,OAEzC,qBAAsB,CACpB3D,gBAAgB,QAADr/E,OAAUijF,EAAU,OAErC,0BAA2B,CACzB5D,gBAAgB,QAADr/E,OAAUkjF,EAAe,QAG5C,kBAAmB,CACjB1C,OAAQ,eAEV,sCAAuC,CACrChnD,KAAM,YAER,kBAAmB,CACjBqnD,UAAW,SACXviD,UAAW,UAGf,qEAAsE,CACpEiK,QAAS,QAEZ,ECnXY46C,EAAmB,SAAAv4C,GAAO,MAAK,CAC1C,aAAc,CACZ40C,UAAW,EACXj3C,QAAS,OACT22C,cAAe,SACf,2CAA4C,CAC1C32C,QAAS,QAEX,6BAA8B,CAC5Bi3C,UAAW,EACXhmD,KAAM,WACN2gB,SAAU,WACV5R,QAAS,OACT22C,cAAe,SACf,kBAAmB,CACjB32C,QAAS,OACTi3C,UAAW,EACXN,cAAe,SACf1lD,KAAM,IAEN,aAAc,CACZA,KAAM,UACNumD,WAAY,SACZN,eAAgB,SAChBJ,gBAAgB,mBAADr/E,OAAqB4qC,EAAQw4C,qBAAoB,0BAChElD,eAAgB,cAElB,QAAS,CACP33C,QAAS,OACT5F,MAAO,kBACP68C,UAAW,EACX6D,WAAY,KAEd,yBAA0B,CACxB96C,QAAS,OACT22C,cAAe,SACfv8C,MAAO,kBACPo9C,WAAY,WAEd,uCAAwC,CACtCp9C,MAAO,mBAET,mCAAoC,CAClC4F,QAAS,SAGb,sBAAuB,CACrB4R,SAAU,WACVwnC,WAAY,SAEd,mBAAoB,CACpB,EACA,4BAA6B,CAC3Bp5C,QAAS,SAGb,gBAAiB,CACfi4C,OAAQ,eAEV,oCAAqC,CACnChnD,KAAM,YAER,UAAW,CACT8pD,YAAa,SAEf,sBAAuB,CACrBlP,gBAAiB,QACjBmM,aAAc,OACdZ,WAAY,OAEd,4BAA6B,CAC3B78C,QAAS,QAEX,mBAAoB,CAClB6G,OAAQ,IAEV,sBAAuB,CACrB42C,aAAc,OACdS,UAAU,aAADhhF,OAAe4qC,EAAQq2C,gBAChCsC,cAAe,SACfhC,QAAS,OAEX,qBAAsB,CACpBD,WAAY,SACZ3iD,SAAU,SACVD,aAAc,WACd6iD,QAAS,QACT7B,SAAU,OACV0C,WAAY,OAEZ,MAAO,CACLzjD,SAAU,SACV2iD,WAAY,SACZ5iD,aAAc,WACdlF,KAAM,WACNnsB,SAAU,OAEZ,cAAe,CACbszD,MAAO,YAGX,yCAA0C,CACxC+e,SAAU,GACV/e,MAAO,WAET,oDAAqD,CACnDkf,WAAY,sBACZjoC,YAAa,EACbuC,SAAU,UAEZ,kDAAmD,CACjD5R,QAAS,QAEX,yDAA0D,CACxD3F,OAAQ,IACRC,UAAW,OACXwxC,aAAc,IACdD,gBAAiB,QACjBzT,MAAO,UACP4gB,QAAS,KAEX,uDAAwD,CACtDh5C,QAAS,OACTw3C,WAAY,SACZnoC,YAAa,IAEf,yEAA0E,CACxEioC,WAAY,sBACZlf,MAAO,UACP7jC,QAAS,YAEX,2DAA4D,CAC1DyL,QAAS,OACTw3C,WAAY,UAEd,6EAA8E,CAC5EF,WAAY,sBACZlf,MAAO,UACP7jC,QAAS,YAEX,sCAAuC,CACrCqd,SAAU,WACV5R,QAAS,OACTm3C,SAAU,GACV/e,MAAO,UACPh+B,MAAO,IACPgH,OAAQ,IACRi4C,OAAQ,MAEV,qDAAsD,CACpDznC,SAAU,WACV4nC,SAAU,IACVR,QAAS,GACTlN,aAAc,EACdj6B,KAAM,GACNwf,OAAQ,GACR/2B,UAAW,qEACXuxC,gBAAiB,4BACjB,0CAA2C,CACzCyN,eAAgB,aAChBzN,gBAAiB,8BAGrB,2DAA4D,CAC1D7rC,QAAS,QAEX,2DAA4D,CAC1D+4C,WAAY,SACZ3iD,SAAU,SACVD,aAAc,YAEhB,2DAA4D,CAC1D4iD,WAAY,MACZ/4C,QAAS,OACT63C,SAAU,OACVsB,WAAY,IAEd,uEAAwE,CACtE/iD,SAAU,SACVD,aAAc,YAEhB,4DAA6D,CAC3DihD,WAAY,OACZ2B,WAAY,SACZQ,UAAW,SACXJ,WAAY,IAEd,8DAA+D,CAC7D/iD,SAAU,SACVgL,OAAQ,IACRyyB,WAAY,SACZklB,WAAY,MACZd,OAAQ,SAEV,uIAAwI,CACtI5mB,OAAQ,OACRxqD,IAAK,GAEP,YAAa,CACXm5B,QAAS,eACTqP,YAAa,GAEf,sBAAuB,CACrBrP,QAAS,OACT22C,cAAe,SACfa,WAAY,WACZ1yE,SAAU,EACVmsB,KAAM,YAER,yBAA0B,CACxBomD,UAAW,SAEb,6BAA8B,CAC5BzlC,SAAU,WACVynC,OAAQ,QAEV,cAAe,CACbj/C,MAAO,OAET,oCAAqC,CACnCA,MAAO,OAET,wCAAyC,CACvCA,MAAO,OAET,mCAAoC,CAClCyxC,gBAAiBxpC,EAAQq2C,gBAE3B,uCAAwC,CACtC14C,QAAS,OACTk3C,eAAgB,UAElB,mCAAoC,CAClCl3C,QAAS,OACTk3C,eAAgB,YAElB,wCAAyC,CACvCl3C,QAAS,OACTw3C,WAAY,UAEd,8DAA+D,CAC7DvmD,KAAM,IACNoe,YAAa,GACbgoC,UAAW,QACXF,SAAU,OACV0C,WAAY,QAEd,+DAAgE,CAC9D5oD,KAAM,IACNkmD,SAAU,OAEZ,oBAAqB,CACnBtwE,IAAK,EACLwoC,YAAa,GAEf,oDAAqD,CACnD4rC,OAAQ,UACR,UAAW,CACTpP,gBAAiBxpC,EAAQq2C,gBAE3B,UAAW,CACT7M,gBAAiBxpC,EAAQw4C,qBACzBtgD,QAAQ,aAAD9iC,OAAe4qC,EAAQ61C,kBAC9BgD,cAAe,QAEjB,0DAA2D,CACzD3mD,QAAS,WACT+iD,WAAY,qBAEd,wDAAyD,CACvD/iD,QAAS,WACT+iD,WAAY,qBAEd,2BAA4B,CAC1B8B,WAAY,cACZ,UAAW,CACTvN,gBAAiBxpC,EAAQ84C,oBAE3B,UAAW,CACTtP,gBAAiBxpC,EAAQ+4C,wBAKlC,EC5RYC,EAAoB,CAC/B,uCAAwC,CACtCr7C,QAAS,OACT5F,MAAO,OACPo9C,WAAY,SACZN,eAAgB,YAElB,sDAAuD,CACrDjmD,KAAM,WACNnsB,SAAU,KAEZ,wDAAyD,CACvDu1B,OAAQ,OACR+G,OAAQ,OACR43C,QAAS,SAEX,6CAA8C,CAC5C/nD,KAAM,WACN8nD,WAAY,SACZj0E,SAAU,EACVqxB,aAAc,WACdC,SAAU,SACV+gD,SAAU,QAEZ,8CAA+C,CAC7C/gD,SAAU,SACVD,aAAc,WACd6J,QAAS,OAET,kBAAmB,CACjB7J,aAAc,WACd4iD,WAAY,SACZ9nD,KAAM,WACNmF,SAAU,SACVtxB,SAAU,GAGZ,uBAAwB,CACtBqzE,WAAY,QAGhB,+CAAgD,CAC9C99C,OAAQ,QAEV,uDAAwD,CACtD2F,QAAS,OACTw3C,WAAY,SACZb,cAAe,MACf7xE,SAAU,EACVoyE,eAAgB,WCjDP10C,EAA4B,CACvC,gCAAiC,CAC/BxC,QAAS,OACT5F,MAAO,OACPo9C,WAAY,SACZN,eAAgB,YAElB,+CAAgD,CAC9CjmD,KAAM,WACNnsB,SAAU,KAEZ,iDAAkD,CAChDu1B,OAAQ,OACR+G,OAAQ,OACR43C,QAAS,SAEX,sCAAuC,CACrC/nD,KAAM,WACN8nD,WAAY,SACZj0E,SAAU,EACV00E,SAAU,GACVrjD,aAAc,WACdC,SAAU,SACV+gD,SAAU,QAEZ,uCAAwC,CACtC/gD,SAAU,SACVD,aAAc,WACd6J,QAAS,OACTw5C,SAAU,GAEV,kBAAmB,CACjBrjD,aAAc,WACd4iD,WAAY,SACZ9nD,KAAM,WACNmF,SAAU,SACVtxB,SAAU,EACVqyE,SAAU,OACVC,WAAY,MACZhf,MAAO,WAGT,uBAAwB,CACtB+f,WAAY,QAGhB,wCAAyC,CACvC99C,OAAQ,QAEV,gDAAiD,CAC/C2F,QAAS,OACTw3C,WAAY,SACZb,cAAe,MACf7xE,SAAU,EACVoyE,eAAgB,W,0YC7CPoE,EAA0B,SAAAj5C,GAAO,MAAK,CACjD,oBAAqB,CACnBrC,QAAS,OACT22C,cAAe,SACf,qCAAsC,CACpC32C,QAAS,OAET,yBAA0B,CACxB/O,KAAM,WACNnsB,SAAU,EAEV,UAAW,CACTs0E,WAAY/2C,EAAQq2C,iBAGxB,6CAA8C,CAC5C14C,QAAS,OACT/O,KAAM,WACNnsB,SAAU,EACVk0E,QAAS,qBACTxB,WAAY,SAEZ,UAAW,CACTvmD,KAAM,WACNnsB,SAAU,EACVk7B,QAAS,OAET,mBAAoB,CAClBu7C,YAAa,QACbxP,YAAa,cACbmL,eAAgB,SAChB8B,QAAS,MACT53C,OAAQ,OACRt8B,SAAU,OACV0yE,WAAY,aAEZ,UAAW,CACT4B,WAAY,iBAKlB,YAAa,CACX3B,iBAAkB,YAClBr9C,MAAO,GACPgH,OAAQ,GACRs2C,mBAAoB,SACpBC,eAAgB,UAChB1mD,KAAM,SAIV,sDAAuD,CACrD,qBAAsB,CACpB6lD,gBAAgB,QAADr/E,OAAU+jF,EAAW,OAEtC,uBAAwB,CACtB1E,gBAAgB,QAADr/E,OAAUgkF,EAAY,QAGzC,sDAAuD,CACrD,qBAAsB,CACpB3E,gBAAgB,QAADr/E,OAAUikF,EAAY,OAEvC,uBAAwB,CACtB5E,gBAAgB,QAADr/E,OAAUkkF,EAAa,QAG1C,sDAAuD,CACrD,qBAAsB,CACpB7E,gBAAgB,QAADr/E,OAAUmkF,EAAiB,OAE5C,uBAAwB,CACtB9E,gBAAgB,QAADr/E,OAAUokF,EAAkB,QAG/C,sDAAuD,CACrD/C,aAAc,EACd,qBAAsB,CACpBhC,gBAAgB,QAADr/E,OAAUqkF,EAAe,OAE1C,uBAAwB,CACtBhF,gBAAgB,QAADr/E,OAAUskF,EAAgB,QAG7C,uGAAwG,CACtG36C,OAAQ,UAIf,EC1FK46C,EAA0B,CAC9B,UACA,UACA,UACA,WAGIC,EAA6B,SAAArhF,GAAM,MAAK,CAC5Cy/B,OAAO,aAAD5iC,OAAeukF,EAAwBphF,IAC7CkxE,aAAc,MACf,EAEYoQ,EAAkC,SAAA75C,GAAO,MAAK,CACzD,gDAAiD,CAC/CjB,OAAQ,QACR,mBAAoB,CAClBA,OAAQ,UAGZ,oCAAqC,CACnC+6C,UAAW,QAEb,oBAAqB,CACnBn8C,QAAS,OACT22C,cAAe,SACf,qCAAsC,CACpC32C,QAAS,OACT/J,aAAc,OACdmmD,IAAK,OAEL,yBAA0B,CACxBp8C,QAAS,OACT22C,cAAe,SACfa,WAAY,aACZgC,SAAU,OAEV,UAAW,CACTJ,WAAY/2C,EAAQq2C,iBAGxB,6CAA8C,CAC5C14C,QAAS,OACT/O,KAAM,WACN+nD,QAAS,WACTxB,WAAY,SACZN,eAAgB,aAChBkF,IAAK,MAEL/hD,OAAQ,oBACRyxC,aAAc,MACd1xC,MAAO,QACPgH,OAAQ,OAER,sBAAuB,CACrBpB,QAAS,OACTl7B,SAAU,QAGZ,mBAAoB,CAClBy2E,YAAa,QACbxP,YAAa,cACbmL,eAAgB,SAChB8B,QAAS,MACT53C,OAAQ,OACRt8B,SAAU,OACV0yE,WAAY,aAEZ,UAAW,CACT4B,WAAY,gBAIhB,YAAa,CACX3B,iBAAkB,YAClBr9C,MAAO,GACPgH,OAAQ,GACRs2C,mBAAoB,SACpBC,eAAgB,UAChB1mD,KAAM,QAGR,yBAA0B,CACxBooD,OAAQ,EACRxyE,IAAK,SAIT,uDAAqDjQ,EAAAA,EAAAA,GAAA,CACnD,qBAAsB,CACpBkgF,gBAAgB,QAADr/E,OAAU+jF,EAAW,OAEtC,uBAAwB,CACtB1E,gBAAgB,QAADr/E,OAAUgkF,EAAY,QAEpCQ,EAA2B,IAEhC,uDAAqDrlF,EAAAA,EAAAA,GAAA,CACnD,qBAAsB,CACpBkgF,gBAAgB,QAADr/E,OAAUikF,EAAY,OAEvC,uBAAwB,CACtB5E,gBAAgB,QAADr/E,OAAUkkF,EAAa,QAErCM,EAA2B,IAEhC,uDAAqDrlF,EAAAA,EAAAA,GAAA,CACnD,qBAAsB,CACpBkgF,gBAAgB,QAADr/E,OAAUmkF,EAAiB,OAE5C,uBAAwB,CACtB9E,gBAAgB,QAADr/E,OAAUokF,EAAkB,QAE1CI,EAA2B,IAEhC,uDAAqDrlF,EAAAA,EAAAA,GAAA,CACnD,qBAAsB,CACpBkgF,gBAAgB,QAADr/E,OAAUqkF,EAAe,OAE1C,uBAAwB,CACtBhF,gBAAgB,QAADr/E,OAAUskF,EAAgB,QAExCE,EAA2B,IAEhC,uGAAwG,CACtG76C,OAAQ,UAIf,EChIYi7C,EAA2B,SAAAh6C,GAAO,MAAK,CAClD,qBAAsB,CACpBrC,QAAS,OACT22C,cAAe,SACf1lD,KAAM,WACNkrD,UAAW,IACXlF,UAAW,EACX,8BAA+B,CAC7BhmD,KAAM,WACN+O,QAAS,OACT22C,cAAe,SAEf,mBAAoB,CAClBQ,SAAU,OACV/1C,OAAQ,IACRhL,SAAU,qBACV,+BAAgC,CAC9BA,SAAU,qBACVijD,OAAQ,gBAGV,qBAAsB,CACpBjjD,SAAU,WAGZ,wBAAyB,CACvB,iDAAkD,CAChDkmD,QAAS,GAEX,WAAY,CACVjD,OAAQ,GAEV,yBAA0B,CACxBr5C,QAAS,OACT1F,UAAW,qEACXuxC,gBAAiB,4BACjB,0CAA2C,CACzCyN,eAAgB,aAChBzN,gBAAiB,6BAEnB,oBAAqB,CACnBoM,OAAQ,OAER,oBAAqB,CACnBhiD,aAAc,QAEhB,yBAA0B,CACxB+J,QAAS,OACT85C,UAAW,CACT95C,QAAS,YAEX,oCAAqC,CACnC,eAAgB,IAChBw4C,QAAS,IACT,kBAAmB,IACnBG,WAAY,IACZtpC,YAAa,QAEf,oCAAqC,CACnC,eAAgB,IAChBmpC,QAAS,IACT,kBAAmB,IACnBG,WAAY,KAEd,oCAAqC,CACnC,eAAgB,IAChBH,QAAS,IACT,kBAAmB,IACnBG,WAAY,IACZtpC,YAAa,OACbtZ,UAAW,QAEb,oCAAqC,CACnC,eAAgB,IAChByiD,QAAS,IACT,kBAAmB,IACnBG,WAAY,IACZ5iD,UAAW,QAEb,uBAAwB,CACtBiK,QAAS,OAET,mBAAoB,CAClBy3C,iBAAkB,YAClBr9C,MAAO,GACPgH,OAAQ,GACRs2C,mBAAoB,SACpBC,eAAgB,UAChBtoC,YAAa,QAEf,kBAAmB,CACjBynC,gBAAgB,QAADr/E,OAAU+jF,EAAW,OAEtC,sBAAuB,CACrB1E,gBAAgB,QAADr/E,OAAUgkF,EAAY,OAEvC,mBAAoB,CAClB3E,gBAAgB,QAADr/E,OAAUikF,EAAY,OAEvC,uBAAwB,CACtB5E,gBAAgB,QAADr/E,OAAUkkF,EAAa,OAExC,yBAA0B,CACxB7E,gBAAgB,QAADr/E,OAAUmkF,EAAiB,OAE5C,6BAA8B,CAC5B9E,gBAAgB,QAADr/E,OAAUokF,EAAkB,OAE7C,oBAAqB,CACnB/E,gBAAgB,QAADr/E,OAAUqkF,EAAe,OAE1C,wBAAyB,CACvBhF,gBAAgB,QAADr/E,OAAUskF,EAAgB,OAG3C,sBAAuB,CAErB,oBAAqB,CACnB5E,SAAU,aAQtB,6BAA8B,CAC5B,oBAAqB,CACnBc,OAAQ,OAER,yBAA0B,CACxBj4C,QAAS,QAET,4CAA6C,CAC3CjK,UAAW,QAGb,uBAAwB,CACtBiK,QAAS,OACTqP,YAAa,sBAOvB,qEAAsE,CACpExoC,IAAK,mBAGP,sDAAuD,CACrDkvB,WAAY,IAEd,iCAAkC,CAClC,EACA,gCAAiC,CACjC,IAGJ,cAAe,CACb9E,KAAM,WACN+O,QAAS,OACT22C,cAAe,UAEjB,0BAA2B,CACzBsB,OAAQ,qBACRD,aAAa,aAADvgF,OAAe4qC,EAAQw4C,sBACnC5pD,KAAM,WACN+O,QAAS,OACTk3C,eAAgB,SAChBJ,gBAAgB,mBAADr/E,OAAqB4qC,EAAQw4C,qBAAoB,0BAChElD,eAAgB,cAEhB,2BAA4B,CAC1B5hD,UAAW,UAIlB,ECzLKwmD,EAAc,UAIdC,EAAa,CACjB,0BAA2B,CACzB5qC,SAAU,WACV/qC,IAAK,EACL8tB,MAAO,GAET,gBAAiB,CACfyjC,MAAO,QACPp4B,QAAS,OACToB,OAXc,GAYdhH,MAAO,cACPwX,SAAU,WACV,6CAA8C,CAC5C7b,UAfY,IAiBd,8BAA+B,CAC7BqE,MAAO,EACPgH,OAAQ,EACRm6C,YAAa,QACbvP,YAAa,CAACyQ,GAAe,IAC7B1Q,YAAa,CAACwQ,EAAaA,EAAaA,EAAa,eACrDltC,aAAc,GAEhB,wBAAyB,CACvBw8B,gBAAiB0Q,EACjBn7C,OA3BY,GA4BZ43C,QAAS,CAAC,EAAG,GAAI,EAAG,GACpB7B,SAAU,GACVuF,UAAW,gBAKJC,EAAyB,SAAHxmF,GAAA,IAAAisC,EAAAjsC,EAAMksC,QAAAA,OAAO,IAAAD,EAAG,CAAC,EAACA,EAAA,MAAQ,CAC3D,cAAYxrC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACP4lF,GAAU,IACbx8C,QAAS,OACTi3C,UAAW,GACX78C,MAAO,OACP,gCAAiC,CAC/BA,MAAO,QAET,oBAAqB,CACnBC,OAAQ,IACRuiD,KAAM,gBACNx7C,OAAQ,MACR62C,OAAQ,OACR7hD,SAAU,SACV4iD,QAAS,IACTpnC,SAAU,WACVxX,MAAO,OAET,kBAAmB,CACjBgH,OAAQ,OACRpB,QAAS,OACT5F,MAAO,OACP,oBAAqB,CACnB4F,QAAS,OACTg5C,QAAS,KAEX,0BAA2B,CACzB/nD,KAAM,IACNmQ,OAAQ,OACRt8B,SAAU,GAEZ,qBAAsB,CACpBk7B,QAAS,OACTg5C,QAAS,IACTpnC,SAAU,WACVyf,OAAQ,GAEV,qCAAsC,CACpCrxB,QAAS,QAEX,2CAA4C,CAC1CA,QAAS,OACT/O,KAAM,IACN0lD,cAAe,UAEjB,6DAA8D,CAC5D32C,QAAS,OACT/O,KAAM,MACN0lD,cAAe,SACf31D,MAAO,GAET,wEAAyE,CACvE67D,eAAgB,OAChB5E,OAAQ,WACR7hD,SAAU,SACVnF,KAAM,WACNgmD,UAAW,EACX4C,WAAY,SACZ1C,SAAU,OACVC,WAAY,OAEd,uFAAwF,CACtFp3C,QAAS,QACT/O,KAAM,QACNmF,SAAU,UAEZ,wGAAyG,CACvGyjD,WAAY,OACZz4C,OAAQ,OACRhL,SAAU,SACV+gD,SAAU,OACVC,WAAY,SACZa,OAAQ,KAEV,wEAAyE,CACvEliD,UAAW,GACXiK,QAAS,OACT86C,WAAY,IACZ7kD,aAAc,IAEhB,oFAAqF,CACnF4jD,WAAY,QAEd,8EAA+E,CAC7E5jD,aAAc,IAEhB,uFAAwF,CACtFhF,KAAM,WACN,wBAAyB,CACvBknD,WAAY,IAGhB,yFAA0F,CACxFA,WAAY,GACZgB,WAAY,GAEd,2FAA4F,CAC1FvnC,SAAU,WACVwmB,MAAO,WAET,gEAAiE,CAC/DnnC,KAAM,MACNnsB,SAAU,QACVk7B,QAAS,OACTk3C,eAAgB,WAChBl2D,MAAO,EACP+U,UAAW,MACX4gD,cAAe,UAEjB,2EAA4E,CAC1E1lD,KAAM,IACNwmD,iBAAkB,YAClBE,eAAgB,UAChBD,mBAAoB,iBAEtB,+CAAgD,CAC9C13C,QAAS,OACT/O,KAAM,IACN0lD,cAAe,UAEjB,qEAAsE,CACpE32C,QAAS,OACT/O,KAAM,MACN0lD,cAAe,SACf31D,MAAO,GAET,oFAAqF,CACnF67D,eAAgB,OAChB5E,OAAQ,WACR7hD,SAAU,SACVnF,KAAM,WACNgmD,UAAW,EACX4C,WAAY,SACZ1C,SAAU,OACVC,WAAY,OAEd,mGAAoG,CAClGp3C,QAAS,QACT/O,KAAM,QACNmF,SAAU,UAEZ,wHAAyH,CACvHyjD,WAAY,OACZz4C,OAAQ,OACRhL,SAAU,SACV+gD,SAAU,OACVC,WAAY,SACZa,OAAQ,KAEV,oFAAqF,CACnFliD,UAAW,GACXiK,QAAS,OACT86C,WAAY,IACZ7kD,aAAc,IAEhB,uGAAwG,CACtGhF,KAAM,YAER,mHAAoH,CAClH4oD,WAAY,QAEd,qGAAsG,CACpG5oD,KAAM,YAER,sHAAuH,CACrHmmD,WAAY,OACZD,SAAU,OACVgC,WAAY,EACZ93C,cAAe,EACfw3C,YAAa,GACbC,aAAc,GACdx+C,UAAW,OACXwxC,aAAc,IACd1T,MAAO,UACPyT,gBAAiB,UACjBiO,UAAW,CACT,CACEz/C,OAAQ,MAGZ4gD,OAAQ,WAEV,4HAA6H,CAC3H1gD,QAAS,KAEX,wEAAyE,CACvEtJ,KAAM,MACNnsB,SAAU,QACVk7B,QAAS,OACTk3C,eAAgB,SAChBl2D,MAAO,EACP+U,UAAW,OAEb,uFAAwF,CACtF9E,KAAM,IACNwmD,iBAAkB,YAClBE,eAAgB,UAChBD,mBAAoB,iBAEtB,4CAA6C,CAC3C13C,QAAS,OACT22C,cAAe,SACf1lD,KAAM,IACNnsB,SAAU,EACVmzE,OAAQ,YAEV,yDAA0D,CACxDj4C,QAAS,OACT/O,KAAM,IACNgmD,UAAW,GAEb,4EAA6E,CAC3EhmD,KAAM,MACNnsB,SAAU,EACVk7B,QAAS,OACT22C,cAAe,UAEjB,wFAAyF,CACvFQ,SAAU,OACV0C,WAAY,OACZ5jD,aAAc,MACdmhD,WAAY,OAEd,+FAA6FxgF,EAAAA,EAAAA,GAAA,CAC3FugF,SAAU,OACV0C,WAAY,OACZzB,UAAW,OACXhgB,MAAO/1B,EAAQ61C,mBACZ4E,EAAAA,EAAAA,oBAAmB,CAAEz6C,QAAAA,EAAS06C,eAAgB,SAEnD,gGAAiG,CAC/FvD,SAAU,QACVphB,MAAO/1B,EAAQ61C,kBAEjB,uEAAwE,CACtE7oC,YAAa,OACb+nC,WAAY,MAEZ,UAAW,CACT,0BAA2B,CACzBp3C,QAAS,QACT,cAAe,CACbm3C,SAAU,OACV/e,MAAO,WAET,eAAgB,CACdp4B,QAAS,OACTw3C,WAAY,SACZL,SAAU,OACV0C,WAAY,OACZzhB,MAAO,UACP/oB,YAAa,MAEb,2BAA4B,CAC1B9a,QAAS,WACT+iD,WAAY,qBAEd,2BAA4B,CAC1B/iD,QAAS,WACT+iD,WAAY,sBAGhB,gBAAiB,CACfH,SAAU,OACV0C,WAAY,OACZ5jD,aAAc,SAGlB,cAAe,CACb+J,QAAS,OACT,uBAAwB,CACtBo4B,MAAO,YAGX,4BAA6B,CAC7B,EACA,eAAgB,CACdp4B,QAAS,OACTqP,YAAa,QAGjB,qBAAsB,CACpBtZ,UAAW,OACXqiC,MAAO/1B,EAAQ61C,mBAGnB,+EAAgF,CAC9EjnD,KAAM,MACNnsB,SAAU,EACVk7B,QAAS,OACTk3C,eAAgB,SAChBnhD,UAAW,OACXE,aAAc,QAEhB,2FAA4F,CAC1FhF,KAAM,IACNwmD,iBAAkB,YAClBE,eAAgB,UAChBD,mBAAoB,iBAEtB,yDAA0D,CACxDzmD,KAAM,WACNgmD,UAAW,IAEb,yEAA0E,CACxEhmD,KAAM,YAER,mCAAoC,CAClCgnD,OAAQ,eAEV,yJAA0J,CACxJj4C,QAAS,QAEX,iDAAkD,CAChDoB,OAAQ,WAIf,E,ozDC3TK47C,GAAe,CACnB,+BAAgC,CAC9B3D,OAAQ,EACR,2BAA4B,CAC1Br5C,QAAS,QAEX,UAAW,CACTi9C,UAAW,mBACX,+BAAgC,CAC9B,oBAAqB,CACnBtoD,MAAO,QAET,UAAW,CACTo3C,YAAa,CAAC,cAAe,QAAS,cAAe,eACrD18B,aAAc,GAEhB,WAAY,CACV08B,YAAa,CAAC,cAAe,YAAa,cAAe,kBAI/D,SAAU,CACRkR,UAAW,oBACX,+BAAgC,CAC9B,oBAAqB,CACnBprC,KAAM,QAER,UAAW,CACTk6B,YAAa,CAAC,cAAe,cAAe,cAAe,SAC3DoM,YAAa,GAEf,WAAY,CACVpM,YAAa,CAAC,cAAe,cAAe,cAAe,gBAIjE,wBAAyB,CACvBh2C,WAAW,GACX,uBAAwB,CACtB,+BAAgC,CAC9B81C,gBAAiB,QACjBxxC,OAAQ,sBACR2+C,QAAS,GACT5gB,MAAO,QACPh+B,MAAO,IACPE,UAAW,sBACX,oBAAqB,CACnBzzB,KAAM,GACN00E,YAAa,QACbhnD,QAAS,MACT6M,OAAQ,EACRhH,MAAO,EACPwX,SAAU,WACVsrC,cAAe,QAEjB,UAAW,CACTlR,YAAa,KACbj2C,WAAY,MAEd,WAAY,CACVi2C,YAAa,GACbj2C,WAAY,IAEd,6BAA8B,CAC5BqhD,WAAY,QAEd,6BAA8B,CAC5Bhf,MAAO,MACPniC,aAAc,QAQbknD,GAAkB,SAAA96C,GAAO,OAAAzrC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACjComF,IAAY,IACf,sBAAuB,CACrBprC,SAAU,WACV5R,QAAS,QAGX,kCAAmC,CACjCm3C,SAAU,OACV0C,WAAY,OACZvC,WAAY,gCACZt3C,QAAS,WACT,qBAAsB,CACpBo4B,MAAO,OACP+e,SAAU,IAEZ,uBAAwB,CACtB/e,MAAO,UACP+e,SAAU,IAEZ,6BAA8B,CAC5BphD,UAAW,OACX,oCAAqC,CACnCqE,MAAO,QACPy/C,WAAY,OACZzC,WAAY,OACZgG,UAAW,EACX5E,QAAS,GAEX,sCAAuC,CACrCp+C,MAAO,QACPy/C,WAAY,OACZzC,WAAY,OACZgG,UAAW,EACX5E,QAAS,IAGb,6BAA8B,CAC5Bp+C,MAAO,QACPy/C,WAAY,OACZzC,WAAY,OACZgG,UAAW,EACX5E,QAAS,EACTrB,SAAU,mBAEZ,+BAAgC,CAC9B/8C,MAAO,QACPy/C,WAAY,OACZzC,WAAY,OACZgG,UAAW,EACX5E,QAAS,EACT,+BAAgC,CAC9B3xE,IAAK,OACL+qC,SAAU,WACV,WAAY,CACVulC,SAAU,oBAIhB,8BAA+B,CAC7BA,SAAU,OACV0C,WAAY,OACZz/C,MAAO,QACP2+C,WAAY,WACZqE,UAAW,EACX5E,QAAS,EACTpgB,MAAO,QAET,wBAAyB,CACvB6f,OAAQ,YACRd,SAAU,OACV0C,WAAY,OACZuD,UAAW,EACX5E,QAAS,EACT,4BAA6B,CAC3BpB,WAAY,QAEd,4BAA6B,CAC3BA,WAAY,WAGhB,uBAAwB,CACtBD,SAAU,OACV0C,WAAY,OACZuD,UAAW,EACX5E,QAAS,EACT,6BAA8B,CAC5BpB,WAAY,UAEd,6BAA8B,CAC5BA,WAAY,WAGhB,mBAAoB,CAClBD,SAAU,OACV0C,WAAY,OACZzhB,MAAO,QACPglB,UAAW,EACX5E,QAAS,EACT,yBAA0B,CACxBpB,WAAY,UAEd,yBAA0B,CACxBA,WAAY,WAGhB,mBAAoB,CAClBa,OAAQ,YACRd,SAAU,OACV0C,WAAY,OACZuD,UAAW,EACX5E,QAAS,EACTpgB,MAAO,SAGX,0CAA2C,CACzCzjC,MAAO,GAET,cAAe,CACbwjD,WAAY,GACZ,mBAAoB,CAClBn4C,QAAS,iBAGb,mBAAoB,CAClBjK,UAAW,IAIb,uBAAwB,CACtBkiD,OAAQ,QACRj4C,QAAS,OACTw3C,WAAY,SACZN,eAAgB,SAEhB,gBAAiB,CACfl3C,QAAS,eACTqP,YAAa,GAEbguC,IAAK,CACHjjD,MAAO,IACPgH,OAAQ,MAIZ,mBAAoB,CAClBpB,QAAS,eACTo4B,MAAO,UACPogB,QAAS,IACTG,WAAY,IACZ,iBAAkB,CAChBxB,SAAU,GACVc,OAAQ,aAEV,sBAAoBrhF,EAAAA,EAAAA,GAAA,CAClBugF,SAAU,GACVC,WAAY,WACT0F,EAAAA,EAAAA,oBAAmB,CAAEz6C,QAAAA,OAK9B,+BAAgC,CAC9BjB,OAAQ,QACRhH,MAAO,OACPk9C,WAAY,gCACZH,SAAU,GACVn3C,QAAS,OACTo4B,MAAO,UACPmgB,oBAAqB,OACrB8B,iBAAkB,iBAClB,qBAAsB,CACpB7B,QAAS,IACT6B,iBAAkB,iBAClB,0BAA2B,CACzB,2CAA4C,CAC1CjB,WAAY,qBACZp5C,QAAS,OACT,sCAAuC,CACrCw5C,SAAU,MACVR,QAAS,iBACTD,WAAY,SACZ3iD,SAAU,SACVD,aAAc,YAEhB,sCAAuC,CACrCqjD,SAAU,MACVR,QAAS,mBAGb,iBAAiBnC,EAAAA,EAAAA,iBAAgB,CAAEx0C,QAAAA,IAAW,eAC9C,yBAAuBzrC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,IAAOigF,EAAAA,EAAAA,iBAAgB,CAAEx0C,QAAAA,IAAW,wBAAsB,IAAEx7B,IAAK,KAE1F,oBAAqB,CACnBuyE,WAAY,UACZZ,QAAS,IACT,0BAA2B,CACzBx4C,QAAS,aACTg7C,cAAe,SACf5D,WAAY,OACZhf,MAAO,UACPh3B,OAAQ,GACR43C,QAAS,aAGb,6BAA8B,CAC5BhB,aAAc,oBACdmB,WAAY,GACZ93C,cAAe,GACfrB,QAAS,OACTw4C,QAAS,IACT,mCAAoC,CAClCx4C,QAAS,eACTm4C,WAAY,EACZ,wBAAyB,CACvBU,YAAa,GACbC,aAAc,IAEhB,8BAA+B,CAC7BD,YAAa,EACbC,aAAc,EACdz3C,cAAe,IAGnB,kBAAmB,CACjBs3C,WAAY,IACZ2E,UAAW,QACXlF,UAAW,OAEX,yBAA0B,CACxBjB,SAAU,GACVC,WAAY,OACZhf,MAAO,WAET,4BAA6B,CAC3Bp4B,QAAS,UAEX,sBAAuB,CACrBm3C,SAAU,GACVC,WAAY,SACZhf,MAAO,UACPriC,UAAW,GACX,YAAUn/B,EAAAA,EAAAA,GAAA,IACLkmF,EAAAA,EAAAA,oBAAmB,CAAEz6C,QAAAA,QAKhC,uBAAwB,CACtBs2C,WAAY,KAEd,wCAAyC,CACvCA,WAAY,IACZv+C,MAAO,IACP,uCAAwC,CACtC+8C,SAAU,GACV/e,MAAO/1B,EAAQk7C,KACfnjD,MAAO,IACPo+C,QAAS,EACTpB,WAAY,UAIlB,qBAAmBxgF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACjB4hF,QAAS,IACTJ,UAAW,SACX,WAAY,CACVA,UAAW,QAEb,2BAA4B,CAC1B,0BAA2B,CACzBriD,UAAW,EACXohD,SAAU,GACVC,WAAY,SACZhf,MAAO,WAET,oBAAqB,CACnB6f,OAAQ,aACRd,SAAU,GACVC,WAAY,SACZhf,MAAO,WAET,2CAA4C,CAC1C6f,OAAQ,aAEV,iCAAkC,CAChCA,OAAQ,QACRQ,UAAW,qBAEb,yBAA0B,CACxBtB,SAAU,GACVC,WAAY,SACZhf,MAAO,WAET,iCAAkC,CAChC6f,OAAQ,gBAGTuF,EAAAA,EAAAA,aAAY,CAAEn7C,QAAAA,KAAU,IAC3B,uBAAwB,CACtB22C,QAAS,eAEX,yCAA0C,CACxC,uCAAwC,CACtC5+C,MAAO,OACP4+C,QAAS,sBACTI,WAAY/2C,EAAQo3C,MACpBp/C,OAAQ,wBAId,oBAAqB,CACnBg3B,OAAQ,MACRzf,SAAU,WACV4mC,QAAS,IACT,oBAAqB,CACnB,WAAY,CACVlB,WAAY,+BACZF,WAAY,OACZD,SAAU,GACVtL,gBAAiBxpC,EAAQ42C,aACzB7gB,MAAO/1B,EAAQo3C,MACfT,QAAS,WACT3+C,OAAQ,kBACR49C,OAAQ,YACR,UAAW,CACTpM,gBAAiB,aAIvB,sBAAuB,CACrB,WAAY,CACVyL,WAAY,+BACZF,WAAY,OACZD,SAAU,GACVtL,gBAAiBxpC,EAAQo3C,MACzBrhB,MAAO,UACP4gB,QAAS,WACT3+C,OAAQ,kBACR49C,OAAQ,YACR,UAAW,CACTpM,gBAAiB,eAM3B,mBAAoB,CAClB,iBAAkB,CAChB7rC,QAAS,QAEX,iBAAkB,CAChBo3C,WAAY,OACZD,SAAU,GACV/1C,OAAQ,OACRyqC,gBAAiBxpC,EAAQo3C,MACzBrhB,MAAO/1B,EAAQq3C,MACfV,QAAS,WACTlN,aAAc,MACdzxC,OAAQ,kBACRv1B,SAAU,QACV,UAAW,CACT+mE,gBAAiB,aAKvB,gBAAiB,CACf91C,UAAW,EACXuhD,WAAY,gCACZ,UAAW,CACT,OAAQ,CACNH,SAAU,GACV/e,MAAO,UACPgf,WAAY,OACZ0B,aAAc,OACdz3C,cAAe,MACf,eAAgB,CACdy3C,aAAc,SAIpB,UAAW,CACT,OAAQ,CACN3B,SAAU,GACV/e,MAAO,YAGX,OAAQ,CACN+e,SAAU,GACVC,WAAY,SACZhf,MAAO,UACP/2B,cAAe,EACf25C,cAAe,MACflC,aAAc,OACd,aAAc,aACd,eAAgB,CACdA,aAAc,OAEhB,mCAAoC,CAClCX,WAAY,GACZI,oBAAqB,UACrBf,WAAY,SACZ,cAAe,CACbnoC,YAAa,EACbmpC,QAAS,IACTG,WAAY,KAEd,iBAAkB,CAChBH,QAAS,IACTG,WAAY,QAKpB,gBAAiB,CACf,6BAA8B,CAC5BE,YAAa,GACbM,WAAY,EACZljD,aAAc,QACd,qBAAsB,CACpBmjD,WAAY,UACZ/+C,OAAQ,oBACRqiD,UAAW,aACX5Q,aAAc,MACdqL,SAAU,OACVgB,WAAY,QACZkB,OAAQ,OAId,eAAgB,CACd,OAAQ,CACNh/C,OAAQ,oBACR,uBAAwB,CACtBwxC,gBAAiB,UACjBzT,MAAO,OACPgf,WAAY,QAEd,iBAAkB,CAChBwB,YAAa,KAEf,MAAO,CACLI,QAAS,oBACT3+C,OAAQ,OACR+8C,WAAY,YAIlB,mBAAoB,CAClB,wBAAyB,CACvB,WAAY,CACV/8C,OAAQ,iBACR2+C,QAAS,kBACT3B,UAAW,UAGf,iBAAkB,CAChBj9C,MAAO,MAGX,kEAAmE,CACjE08C,gBAAiB,OACjBj3E,OAAQ,kBACRu6B,MAAO,GACPkiD,QAAS,IACTrE,OAAQ,EACRgD,OAAQ,UACRp0E,IAAK,OACLwqD,OAAQ,OACR8lB,SAAU,OACV/1C,OAAQ,QAEV,0CAA2C,CACzCyqC,gBAAiB,QACjB8N,WAAY,OACZvhB,MAAO/1B,EAAQ42C,aAEf,UAAW,CACT7gB,MAAO/1B,EAAQu3C,cAGnB,+CAAgD,CAC9C/nC,KAAM,OACNld,MAAO,QAET,yEAA0E,CACxEyF,MAAO,GACPgH,OAAQ,GACR65C,OAAQ,UACR5pB,OAAQ,OACR,WAAY,CACVimB,WAAY,sBACZ/iD,QAAS,aAGb,wEAAyE,CACvE6F,MAAO,GACPgH,OAAQ,GACR65C,OAAQ,UACR5pB,OAAQ,OACR,WAAY,CACVimB,WAAY,sBACZ/iD,QAAS,aAGb,gEAAiE,CAC/D8F,OAAQ,OACRE,QAAQ,aAAD9iC,OAAe4qC,EAAQ61C,kBAC9BgD,cAAe,GAEjB,6CAA8C,CAC5CjlD,aAAc,IACdmL,OAAQ,EACRiwB,OAAQ,OACRxf,KAAM,MACNzX,MAAO,OACP69C,OAAQ,MACR4B,WAAY,MACZ1C,SAAU,OAEZ,gDAAiD,CAC/C/1C,OAAQ,EACRhH,MAAO,EACP69C,OAAQ,IACR5oC,YAAa,GACb+pC,WAAY,OACZ/+C,OAAO,aAAD5iC,OAAe4qC,EAAQ61C,kBAE7B,4CAA6C,CAC3CuF,kBAAmB,QAGrB,gDAAiD,CAC/CrE,WAAY,SACZrN,YAAa,eAGjB,qDAAsD,CACpDkM,OAAQ,IACR5oC,YAAa,GACbhV,OAAQ,OACR++C,WAAY/2C,EAAQ42C,aAEpB,4CAA6C,CAC3CwE,kBAAmB,QAGrB,gDAAiD,CAC/CrE,WAAY,cAGhB,wCAAyC,CACvCtC,gBAAgB,QAADr/E,OAAUimF,EAAe,OAE1C,4CAA6C,CAC3C5G,gBAAgB,QAADr/E,OAAUkmF,EAAqB,OAEhD,sCAAuC,CACrC7G,gBAAgB,QAADr/E,OAAUmmF,EAAkB,OAE7C,2CAA4C,CAC1C9G,gBAAgB,QAADr/E,OAAUomF,GAAqB,OAEhD,0CAA2C,CACzC/G,gBAAgB,QAADr/E,OAAUqmF,EAAoB,OAE/C,4CAA6C,CAC3ChH,gBAAgB,QAADr/E,OAAUsmF,GAAqB,OAEhD,qCAAsC,CACpCjH,gBAAgB,QAADr/E,OAAUumF,EAAmB,OAE9C,oDAAqD,CACnDlH,gBAAgB,QAADr/E,OAAUwmF,EAAe,OAE1C,6CAA8C,CAC5CnH,gBAAgB,QAADr/E,OAAUymF,GAAc,OAEzC,yCAA0C,CACxCpH,gBAAgB,QAADr/E,OAAU0mF,EAAqB,OAEhD,+CAAgD,CAC9CrH,gBAAgB,QAADr/E,OAAU2mF,GAAgB,OAE3C,sCAAuC,CACrCtH,gBAAgB,QAADr/E,OAAU4mF,EAAO,OAElC,yCAA0C,CACxCvH,gBAAgB,QAADr/E,OAAU6mF,GAAmB,OAE9C,6CAA8C,CAC5CxH,gBAAgB,QAADr/E,OAAU8mF,EAAe,OAE1C,uCAAwC,CACtCzH,gBAAgB,QAADr/E,OAAU+mF,GAAc,OAEzC,6CAA8C,CAC5C1H,gBAAgB,QAADr/E,OAAUgnF,EAAgB,OAE3C,wDAAyD,CACvD3H,gBAAgB,QAADr/E,OAAUgnF,EAAgB,OAE3C,yDAA0D,CACxD3H,gBAAgB,QAADr/E,OAAUinF,EAAiB,OAE5C,kDAAmD,CACjD5H,gBAAgB,QAADr/E,OAAUknF,GAAkB,OAE7C,gDAAiD,CAC/C7H,gBAAgB,QAADr/E,OAAUmnF,GAAgB,OAE3C,qDAAsD,CACpD9H,gBAAgB,QAADr/E,OAAUonF,GAAoB,OAE/C,8CAA+C,CAC7C/H,gBAAgB,QAADr/E,OAAUqnF,GAAc,OAEzC,mDAAoD,CAClDhI,gBAAgB,QAADr/E,OAAUsnF,GAAY,OAEvC,wDAAyD,CACvDjI,gBAAgB,QAADr/E,OAAUunF,GAAiB,OAE5C,qDAAsD,CACpDlI,gBAAgB,QAADr/E,OAAUwnF,GAAc,OAEzC,iDAAkD,CAChDnI,gBAAgB,QAADr/E,OAAUynF,GAAgB,OAE3C,8DAA+D,CAC7DpI,gBAAgB,QAADr/E,OAAU0nF,GAAa,OAExC,sDAAuD,CACrDrI,gBAAgB,QAADr/E,OAAU2nF,GAAiB,OAE5C,kDAAmD,CACjDtI,gBAAgB,QAADr/E,OAAU4nF,GAAoB,OAE/C,iDAAkD,CAChDvI,gBAAgB,QAADr/E,OAAU6nF,GAAmB,OAE9C,gDAAiD,CAC/CxI,gBAAgB,QAADr/E,OAAU8nF,GAAa,OAExC,2DAA4D,CAC1DzI,gBAAgB,QAADr/E,OAAU+nF,GAAe,OAE1C,mEAAoE,CAClE1I,gBAAgB,QAADr/E,OAAUgoF,GAAuB,OAElD,mDAAoD,CAClD3I,gBAAgB,QAADr/E,OAAUioF,GAAgB,OAE3C,qDAAsD,CACpD5I,gBAAgB,QAADr/E,OAAUkoF,GAAe,OAE1C,sDAAuD,CACrD7I,gBAAgB,QAADr/E,OAAUmoF,GAAgB,OAE3C,wDAAyD,CACvD9I,gBAAgB,QAADr/E,OAAUooF,GAAiB,OAE5C,sDAAuD,CACrD/I,gBAAgB,QAADr/E,OAAUqoF,GAAe,OAE1C,qBAAsB,CACpBluC,SAAU,WACVyf,OAAQ,OACR18B,MAAO,SACR,EC1uBG4nD,GAAc,UACdC,GAAa,CACjB,0BAA2B,CACzB5qC,SAAU,WACV/qC,IAAK,EACL8tB,MAAO,GAET,gBAAiB,CACfyjC,MAAO,QACPp4B,QAAS,OACToB,OAZc,GAadhH,MAAO,cACPwX,SAAU,WACV,6CAA8C,CAC5C7b,UAhBY,IAkBd,8BAA+B,CAC7BqE,MAAO,EACPgH,OAAQ,EACRm6C,YAAa,QACbvP,YAAa,CAACyQ,GAAe,IAC7B1Q,YAAa,CAACwQ,GAAaA,GAAaA,GAAa,eACrDltC,aAAc,GAEhB,wBAAyB,CACvBw8B,gBAAiB0Q,GACjBn7C,OA5BY,GA6BZ43C,QAAS,CAAC,EAAG,GAAI,EAAG,GACpB7B,SAAU,GACVuF,UAAW,eAGf,uBAAwB,CACtB,+BAAgC,CAC9B,6BAA8B,CAC5BtF,WAAY,QAEd,6BAA8B,CAC5Bhf,M,UAAO2nB,EAAOC,kCAMTC,GAA0B,SAAA59C,GAAO,MAAK,CACjD,sBAAuB,CACrBuP,SAAU,WACV5R,QAAS,QAGX,kCAAmC,CACjCm3C,SAAU,OACV0C,WAAY,OACZvC,WAAY,gCACZt3C,QAAS,WACT,qBAAsB,CACpBo4B,MAAO,OACP+e,SAAU,IAEZ,uBAAwB,CACtB/e,MAAO,UACP+e,SAAU,IAEZ,6BAA8B,CAC5BphD,UAAW,OACX,oCAAqC,CACnCqE,MAAO,QACPy/C,WAAY,OACZzC,WAAY,OACZgG,UAAW,EACX5E,QAAS,GAEX,sCAAuC,CACrCp+C,MAAO,QACPy/C,WAAY,OACZzC,WAAY,OACZgG,UAAW,EACX5E,QAAS,IAGb,6BAA8B,CAC5Bp+C,MAAO,QACPy/C,WAAY,OACZzC,WAAY,OACZgG,UAAW,EACX5E,QAAS,EACTrB,SAAU,mBAEZ,+BAAgC,CAC9B/8C,MAAO,QACPy/C,WAAY,OACZzC,WAAY,OACZgG,UAAW,EACX5E,QAAS,EACT,+BAAgC,CAC9B3xE,IAAK,OACL+qC,SAAU,WACV,WAAY,CACVulC,SAAU,oBAIhB,8BAA+B,CAC7BA,SAAU,OACV0C,WAAY,OACZz/C,MAAO,QACP2+C,WAAY,WACZqE,UAAW,EACX5E,QAAS,EACTpgB,MAAO,QAET,wBAAyB,CACvB6f,OAAQ,YACRd,SAAU,OACV0C,WAAY,OACZuD,UAAW,EACX5E,QAAS,EACT,4BAA6B,CAC3BpB,WAAY,QAEd,4BAA6B,CAC3BA,WAAY,WAGhB,uBAAwB,CACtBD,SAAU,OACV0C,WAAY,OACZuD,UAAW,EACX5E,QAAS,EACT,6BAA8B,CAC5BpB,WAAY,UAEd,6BAA8B,CAC5BA,WAAY,WAGhB,mBAAoB,CAClBD,SAAU,OACV0C,WAAY,OACZzhB,MAAO,QACPglB,UAAW,EACX5E,QAAS,EACT,yBAA0B,CACxBpB,WAAY,UAEd,yBAA0B,CACxBA,WAAY,WAGhB,mBAAoB,CAClBa,OAAQ,YACRd,SAAU,OACV0C,WAAY,OACZuD,UAAW,EACX5E,QAAS,EACTpgB,MAAO,SAGX,0CAA2C,CACzCzjC,MAAO,GAET,cAAe,CACbwjD,WAAY,GACZ,mBAAoB,CAClBn4C,QAAS,iBAGb,mBAAoB,CAClBjK,UAAW,IAIb,uBAAwB,CACtBkiD,OAAQ,QACRj4C,QAAS,OACTw3C,WAAY,SACZN,eAAgB,SAEhB,gBAAiB,CACfl3C,QAAS,eACTqP,YAAa,GAEbguC,IAAK,CACHjjD,MAAO,IACPgH,OAAQ,MAIZ,mBAAoB,CAClBpB,QAAS,eACTo4B,MAAO,UACPogB,QAAS,IACTG,WAAY,IACZ,iBAAkB,CAChBxB,SAAU,GACVc,OAAQ,aAEV,sBAAoBrhF,EAAAA,EAAAA,GAAA,CAClBugF,SAAU,GACVC,WAAY,WACT0F,EAAAA,EAAAA,oBAAmB,CAAEz6C,QAAAA,OAK9B,+BAAgC,CAC9BjB,OAAQ,QACRhH,MAAO,OACPk9C,WAAY,gCACZH,SAAU,GACVn3C,QAAS,OACTo4B,MAAO,UACPmgB,oBAAqB,OACrB8B,iBAAkB,iBAClB,qBAAsB,CACpB7B,QAAS,IACT6B,iBAAkB,iBAClB,0BAA2B,CACzB,2CAA4C,CAC1CjB,WAAY,qBACZp5C,QAAS,OACT,sCAAuC,CACrCw5C,SAAU,MACVR,QAAS,iBACTD,WAAY,SACZ3iD,SAAU,SACVD,aAAc,YAEhB,sCAAuC,CACrCqjD,SAAU,MACVR,QAAS,mBAGb,iBAAiBnC,EAAAA,EAAAA,iBAAgB,CAAEx0C,QAAAA,IAAW,eAC9C,yBAAuBzrC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,IAAOigF,EAAAA,EAAAA,iBAAgB,CAAEx0C,QAAAA,IAAW,wBAAsB,IAAEx7B,IAAK,KAE1F,oBAAqB,CACnBuyE,WAAY,UACZZ,QAAS,IACT,0BAA2B,CACzBx4C,QAAS,aACTg7C,cAAe,SACf5D,WAAY,OACZhf,MAAO,UACPh3B,OAAQ,GACR43C,QAAS,aAGb,6BAA8B,CAC5BhB,aAAc,oBACdmB,WAAY,GACZ93C,cAAe,GACfrB,QAAS,OACTw4C,QAAS,IACT,mCAAoC,CAClCx4C,QAAS,eACTm4C,WAAY,EACZ,wBAAyB,CACvBU,YAAa,GACbC,aAAc,IAEhB,8BAA+B,CAC7BD,YAAa,EACbC,aAAc,EACdz3C,cAAe,IAGnB,kBAAmB,CACjBs3C,WAAY,IACZ2E,UAAW,QACXlF,UAAW,OAEX,yBAA0B,CACxBjB,SAAU,GACVC,WAAY,OACZhf,MAAO,WAET,4BAA6B,CAC3Bp4B,QAAS,UAEX,sBAAuB,CACrBm3C,SAAU,GACVC,WAAY,SACZhf,MAAO,UACPriC,UAAW,GACX,YAAUn/B,EAAAA,EAAAA,GAAA,IACLkmF,EAAAA,EAAAA,oBAAmB,CAAEz6C,QAAAA,QAKhC,uBAAwB,CACtBs2C,WAAY,KAEd,wCAAyC,CACvCA,WAAY,IACZv+C,MAAO,IACP,uCAAwC,CACtC+8C,SAAU,GACV/e,MAAO/1B,EAAQk7C,KACfnjD,MAAO,IACPo+C,QAAS,EACTpB,WAAY,UAIlB,qBAAmBxgF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACjB4hF,QAAS,IACTJ,UAAW,OACX,2BAA4B,CAC1B,0BAA2B,CACzBriD,UAAW,EACXohD,SAAU,GACVC,WAAY,SACZhf,MAAO,WAET,oBAAqB,CACnB6f,OAAQ,aACRd,SAAU,GACVC,WAAY,SACZhf,MAAO,WAET,2CAA4C,CAC1C6f,OAAQ,aAEV,iCAAkC,CAChCA,OAAQ,QACRQ,UAAW,qBAEb,yBAA0B,CACxBtB,SAAU,GACVC,WAAY,SACZhf,MAAO,WAET,iCAAkC,CAChC6f,OAAQ,gBAGTuF,EAAAA,EAAAA,aAAY,CAAEn7C,QAAAA,KAAU,IAC3B,uBAAwB,CACtB22C,QAAS,eAEX,yCAA0C,CACxC,uCAAwC,CACtC5+C,MAAO,OACP4+C,QAAS,sBACTI,WAAY/2C,EAAQo3C,MACpBp/C,OAAQ,wBAId,oBAAqB,CACnBg3B,OAAQ,MACRzf,SAAU,WACV4mC,QAAS,IACT,oBAAqB,CACnB,WAAY,CACVlB,WAAY,+BACZF,WAAY,OACZD,SAAU,GACVtL,gBAAiBxpC,EAAQ42C,aACzB7gB,MAAO/1B,EAAQo3C,MACfT,QAAS,WACT3+C,OAAQ,kBACR49C,OAAQ,YACR,UAAW,CACTpM,gBAAiB,aAIvB,sBAAuB,CACrB,WAAY,CACVyL,WAAY,+BACZF,WAAY,OACZD,SAAU,GACVtL,gBAAiBxpC,EAAQo3C,MACzBrhB,MAAO,UACP4gB,QAAS,WACT3+C,OAAQ,kBACR49C,OAAQ,YACR,UAAW,CACTpM,gBAAiB,eAO3B,gBAAiB,CACf91C,UAAW,EACXuhD,WAAY,gCACZ,UAAW,CACT,OAAQ,CACNH,SAAU,GACV/e,MAAO,UACPgf,WAAY,OACZ0B,aAAc,OACdz3C,cAAe,MACf,eAAgB,CACdy3C,aAAc,SAIpB,UAAW,CACT,OAAQ,CACN3B,SAAU,GACV/e,MAAO,YAGX,OAAQ,CACN+e,SAAU,GACVC,WAAY,SACZhf,MAAO,UACP/2B,cAAe,EACf25C,cAAe,MACflC,aAAc,OACd,aAAc,aACd,eAAgB,CACdA,aAAc,OAEhB,mCAAoC,CAClCX,WAAY,GACZI,oBAAqB,UACrBf,WAAY,SACZ,cAAe,CACbnoC,YAAa,EACbmpC,QAAS,IACTG,WAAY,KAEd,iBAAkB,CAChBH,QAAS,IACTG,WAAY,QAKpB,gBAAiB,CACf,6BAA8B,CAC5BE,YAAa,GACbM,WAAY,EACZljD,aAAc,QACd,qBAAsB,CACpBmjD,WAAY,UACZ/+C,OAAQ,oBACRqiD,UAAW,aACX5Q,aAAc,MACdqL,SAAU,OACVgB,WAAY,QACZkB,OAAQ,OAId,eAAgB,CACd,OAAQ,CACNh/C,OAAQ,oBACR,uBAAwB,CACtBwxC,gBAAiB,UACjBzT,MAAO,OACPgf,WAAY,QAEd,iBAAkB,CAChBwB,YAAa,KAEf,MAAO,CACLI,QAAS,oBACT3+C,OAAQ,OACR+8C,WAAY,YAIlB,mBAAoB,CAClB,wBAAyB,CACvB,WAAY,CACV/8C,OAAQ,iBACR2+C,QAAS,kBACT3B,UAAW,UAGf,iBAAkB,CAChBj9C,MAAO,MAGX,cAAYxjC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACP4lF,IAAU,IACbx8C,QAAS,OACTi3C,UAAW,GACX78C,MAAO,OACP,gCAAiC,CAC/BA,MAAO,QAET,oBAAqB,CACnBC,OAAQ,IACRuiD,KAAM,gBACNx7C,OAAQ,MACR62C,OAAQ,OACR7hD,SAAU,SACV4iD,QAAS,IACTpnC,SAAU,WACVxX,MAAO,OAET,kBAAmB,CACjBgH,OAAQ,OACRpB,QAAS,OACT22C,cAAe,SACfv8C,MAAO,OACP,oBAAqB,CACnB4F,QAAS,OACTg5C,QAAS,IACT53C,OAAQ,QACRhL,SAAU,QACV,gDAAiD,CAC/C,UAAW,CACT8pD,WAAY,4BACZC,mBAAoB,SACpBC,YAAa,UAEf,iBAAkB,CAChBnD,UAAW,gBACXprC,KAAM,IAGV,iBAAkB,CAEhBzb,SAAU,WAGZ,oBAAqB,CAEnBgE,MAAO,MACP,iBAAkB,CAChB4F,QAAS,QAEX,iBAAkB,CAChB5F,MAAO,kBACP,aAAc,OACd,gBAAiB,WACjBwX,SAAU,WACV/qC,IAAK,MACLuwE,WAAY,OACZD,SAAU,GACV/1C,OAAQ,OACRyqC,gBAAiBxpC,EAAQo3C,MACzBrhB,MAAO/1B,EAAQq3C,MACfV,QAAS,WACTlN,aAAc,MACdzxC,OAAQ,oBACR,UAAW,CACTwxC,gBAAiB,WAEnB,UAAW,CACTxxC,OAAO,aAAD5iC,OAAe4qC,EAAQq3C,WAKrC,0BAA2B,CACzBzoD,KAAM,IACNmQ,OAAQ,OACRt8B,SAAU,EACVsxB,SAAU,SACVgE,MAAO,QAET,2CAA4C,CAC1C4F,QAAS,OACT/O,KAAM,IACN0lD,cAAe,SACfv1C,OAAQ,SAEV,6DAA8D,CAC5DpB,QAAS,OACT/O,KAAM,YACN0lD,cAAe,UAEjB,wEAAyE,CACvEkG,eAAgB,OAChB5E,OAAQ,WACR7hD,SAAU,SACVnF,KAAM,WACNgmD,UAAW,EACX4C,WAAY,SACZ1C,SAAU,OACVC,WAAY,OAEd,uFAAwF,CACtFp3C,QAAS,QACT/O,KAAM,QACNmF,SAAU,UAEZ,wGAAyG,CACvGyjD,WAAY,OACZz4C,OAAQ,OACRhL,SAAU,SACV+gD,SAAU,OACVC,WAAY,SACZa,OAAQ,KAEV,+BAAgC,CAC9BliD,UAAW,EACXiK,QAAS,OACT5F,MAAO,eAET,2CAA4C,CAC1Cy/C,WAAY,QAEd,8CAA+C,CAC7C5oD,KAAM,WACN,wBAAyB,CACvBknD,WAAY,IAGhB,gDAAiD,CAC/CA,WAAY,GACZgB,WAAY,GAEd,kDAAmD,CACjDvnC,SAAU,WACVwmB,MAAO,WAET,gEAAiE,CAC/DnnC,KAAM,YACNnsB,SAAU,QACVk7B,QAAS,OACTk3C,eAAgB,WAChBnhD,UAAW,MACX4gD,cAAe,UAEjB,2EAA4E,CAC1E1lD,KAAM,IACNwmD,iBAAkB,YAClBE,eAAgB,UAChBD,mBAAoB,iBAEtB,mCAAoC,CAClCO,OAAQ,kBAId,6BAA8B,CAC5BnB,gBAAgB,QAADr/E,OAAUimF,EAAe,OAE1C,iCAAkC,CAChC5G,gBAAgB,QAADr/E,OAAUkmF,EAAqB,OAEhD,2BAA4B,CAC1B7G,gBAAgB,QAADr/E,OAAUmmF,EAAkB,OAE7C,gCAAiC,CAC/B9G,gBAAgB,QAADr/E,OAAUomF,GAAqB,OAEhD,+BAAgC,CAC9B/G,gBAAgB,QAADr/E,OAAUqmF,EAAoB,OAE/C,iCAAkC,CAChChH,gBAAgB,QAADr/E,OAAUsmF,GAAqB,OAEhD,0BAA2B,CACzBjH,gBAAgB,QAADr/E,OAAUumF,EAAmB,OAE9C,yCAA0C,CACxClH,gBAAgB,QAADr/E,OAAUwmF,EAAe,OAE1C,kCAAmC,CACjCnH,gBAAgB,QAADr/E,OAAUymF,GAAc,OAEzC,8BAA+B,CAC7BpH,gBAAgB,QAADr/E,OAAU0mF,EAAqB,OAEhD,oCAAqC,CACnCrH,gBAAgB,QAADr/E,OAAU2mF,GAAgB,OAE3C,2BAA4B,CAC1BtH,gBAAgB,QAADr/E,OAAU4mF,EAAO,OAElC,8BAA+B,CAC7BvH,gBAAgB,QAADr/E,OAAU6mF,GAAmB,OAE9C,kCAAmC,CACjCxH,gBAAgB,QAADr/E,OAAU8mF,EAAe,OAE1C,4BAA6B,CAC3BzH,gBAAgB,QAADr/E,OAAU+mF,GAAc,OAEzC,kCAAmC,CACjC1H,gBAAgB,QAADr/E,OAAUgnF,EAAgB,OAE3C,6CAA8C,CAC5C3H,gBAAgB,QAADr/E,OAAUgnF,EAAgB,OAE3C,8CAA+C,CAC7C3H,gBAAgB,QAADr/E,OAAUinF,EAAiB,OAE5C,uCAAwC,CACtC5H,gBAAgB,QAADr/E,OAAUknF,GAAkB,OAE7C,qCAAsC,CACpC7H,gBAAgB,QAADr/E,OAAUmnF,GAAgB,OAE3C,0CAA2C,CACzC9H,gBAAgB,QAADr/E,OAAUonF,GAAoB,OAE/C,mCAAoC,CAClC/H,gBAAgB,QAADr/E,OAAUqnF,GAAc,OAEzC,wCAAyC,CACvChI,gBAAgB,QAADr/E,OAAUsnF,GAAY,OAEvC,6CAA8C,CAC5CjI,gBAAgB,QAADr/E,OAAUunF,GAAiB,OAE5C,0CAA2C,CACzClI,gBAAgB,QAADr/E,OAAUwnF,GAAc,OAEzC,sCAAuC,CACrCnI,gBAAgB,QAADr/E,OAAUynF,GAAgB,OAE3C,mDAAoD,CAClDpI,gBAAgB,QAADr/E,OAAU0nF,GAAa,OAExC,2CAA4C,CAC1CrI,gBAAgB,QAADr/E,OAAU2nF,GAAiB,OAE5C,uCAAwC,CACtCtI,gBAAgB,QAADr/E,OAAU4nF,GAAoB,OAE/C,sCAAuC,CACrCvI,gBAAgB,QAADr/E,OAAU6nF,GAAmB,OAE9C,qCAAsC,CACpCxI,gBAAgB,QAADr/E,OAAU8nF,GAAa,OAExC,gDAAiD,CAC/CzI,gBAAgB,QAADr/E,OAAU+nF,GAAe,OAE1C,wDAAyD,CACvD1I,gBAAgB,QAADr/E,OAAUgoF,GAAuB,OAElD,wCAAyC,CACvC3I,gBAAgB,QAADr/E,OAAUioF,GAAgB,OAE3C,0CAA2C,CACzC5I,gBAAgB,QAADr/E,OAAUkoF,GAAe,OAE1C,2CAA4C,CAC1C7I,gBAAgB,QAADr/E,OAAUmoF,GAAgB,OAE3C,6CAA8C,CAC5C9I,gBAAgB,QAADr/E,OAAUooF,GAAiB,OAE5C,2CAA4C,CAC1C/I,gBAAgB,QAADr/E,OAAUqoF,GAAe,OAE3C,ECxxBYO,GAAwB,SAAAh+C,GAAO,MAAK,CAC/C,WAASzrC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,IACJ6/E,EAAAA,EAAAA,0BAAyB,CAAEp0C,QAAAA,MAC3Bq0C,EAAAA,EAAAA,+BAA4B,IAC/B,qDAAsD,CACpD5xE,SAAU,kBACVu1B,OAAQ,kBACRs8C,cAAe,iBACfr8C,UAAW,kBACXrE,cAAe,EAEf,2BAA4B,CAC1B4b,KAAM,kBAGR,4BAA6B,CAC3Bld,MAAO,iBACPyF,MAAO,sBAIb,qBAAmBxjC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACjByqC,cAAe,GACfrB,QAAS,OACT22C,cAAe,SACfQ,SAAU,GACVF,UAAW,IAERL,EAAAA,EAAAA,sBAAoBC,EAAAA,EAAAA,iBAAgB,CAAEx0C,QAAAA,MAAW,IACpD,6BAA8B,CAC5BrC,QAAS,OACTi4C,OAAQ,aACRT,WAAY,aACZ,wBAAyB,CACvBvmD,KAAM,IACNoe,YAAa,GACb+oB,MAAO/1B,EAAQ61C,kBAEjB,oCAAqC,CACnCC,WAAY,GAEd,6BAA8B,CAC5BlnD,KAAM,KAER,sBAAuB,CACrBoe,YAAa,KAGjB,+BAAgC,CAC9BrP,QAAS,OACT/O,KAAM,MACNimD,eAAgB,SAChBkB,UAAW,OACXC,UAAW,SACX,sBAAuB,CACrBC,UAAW,SACXnB,SAAU,QAEZ,qBAAsB,CACpBn3C,QAAS,OACTu4C,oBAAqB,mJACrBf,WAAY,UACZvmD,KAAM,IACNqnD,UAAW,aAEX,4BAA6B,CAC3BE,QAAS,KACTC,UAAU,aAADhhF,OAAe4qC,EAAQq2C,iBAElC,4BAA6B,CAC3BF,QAAS,KACTC,UAAU,aAADhhF,OAAe4qC,EAAQq2C,iBAElC,4BAA6B,CAC3BF,QAAS,KACTC,UAAU,aAADhhF,OAAe4qC,EAAQq2C,iBAElC,4BAA6B,CAC3BF,QAAS,KACTC,UAAU,aAADhhF,OAAe4qC,EAAQq2C,iBAElC,4BAA6B,CAC3BF,QAAS,KACTC,UAAU,aAADhhF,OAAe4qC,EAAQq2C,iBAElC,4BAA6B,CAC3BF,QAAS,KACTC,UAAU,aAADhhF,OAAe4qC,EAAQq2C,iBAElC,4BAA6B,CAC3BF,QAAS,KACTC,UAAU,aAADhhF,OAAe4qC,EAAQq2C,iBAElC,4BAA6B,CAC3BF,QAAS,KACTC,UAAU,aAADhhF,OAAe4qC,EAAQq2C,iBAElC,4BAA6B,CAC3BF,QAAS,KACTC,UAAU,aAADhhF,OAAe4qC,EAAQq2C,iBAElC,4BAA6B,CAC3BF,QAAS,KACTC,UAAU,aAADhhF,OAAe4qC,EAAQq2C,iBAElC,4BAA6B,CAC3BF,QAAS,KACTC,UAAU,aAADhhF,OAAe4qC,EAAQq2C,iBAElC,2BAA4B,CAC1BF,QAAS,IACTC,UAAU,aAADhhF,OAAe4qC,EAAQq2C,iBAElC,2BAA4B,CAC1BF,QAAS,IACTC,UAAU,aAADhhF,OAAe4qC,EAAQq2C,iBAElC,2BAA4B,CAC1BF,QAAS,IACTC,UAAU,aAADhhF,OAAe4qC,EAAQq2C,iBAElC,2BAA4B,CAC1BF,QAAS,IACTC,UAAU,aAADhhF,OAAe4qC,EAAQq2C,iBAElC,2BAA4B,CAC1BF,QAAS,IACTC,UAAU,aAADhhF,OAAe4qC,EAAQq2C,iBAElC,2BAA4B,CAC1BF,QAAS,IACTC,UAAU,aAADhhF,OAAe4qC,EAAQq2C,iBAElC,2BAA4B,CAC1BF,QAAS,IACTC,UAAU,aAADhhF,OAAe4qC,EAAQq2C,iBAElC,2BAA4B,CAC1BF,QAAS,IACTC,UAAU,aAADhhF,OAAe4qC,EAAQq2C,iBAElC,2BAA4B,CAC1BF,QAAS,IACTC,UAAU,aAADhhF,OAAe4qC,EAAQq2C,iBAElC,4BAA6B,CAC3BC,WAAY,IACZC,YAAa,oBACb54C,QAAS,OACTw3C,WAAY,SACZP,UAAW,GACX4B,YAAa,GACbC,aAAc,IAEhB,oCAAqC,CACnCzpC,YAAa,GAEf,8BAA+B,CAC7BjZ,SAAU,SACVD,aAAc,WACdrxB,SAAU,EACVi0E,WAAY,UAEd,8BAA+B,CAC7BJ,WAAY,IACZC,YAAa,oBACbI,QAAS,gBACTh5C,QAAS,OACTw3C,WAAY,SACZ3L,gBAAiBxpC,EAAQq2C,gBAE3B,2CAA4C,CAC1C14C,QAAS,OACToB,OAAQ,GACRhH,MAAO,QAET,sDAAuD,CACrDyxC,gBAAiBxpC,EAAQ42C,cAE3B,+BAAgC,CAC9BN,WAAY,IACZC,YAAa,oBACbI,QAAS,gBACTh5C,QAAS,OACTw3C,WAAY,SACZ3L,gBAAiBxpC,EAAQq2C,gBAE3B,6CAA8C,CAC5C14C,QAAS,OACToB,OAAQ,GACRhH,MAAO,QAET,wDAAyD,CACvDyxC,gBAAiB,WAEnB,yCAA0C,CACxChlE,IAAK,eACLuzB,MAAO,IACPzF,MAAO,mBAET,gEAAiE,CAC/DqL,QAAS,QACT4R,SAAU,WACVC,KAAM,qBAER,yCAA0C,CACxC8mC,WAAY,IAEZ,+BAAgC,CAC9BK,QAAS,GACT5+C,MAAO,GACP6gD,OAAQ,WAGV,sCAAuC,CACrC3D,WAAY,oBACZlf,MAAO,UACP+e,SAAU,KAGd,gBAAiB,CACfwB,WAAY,IACZxB,SAAU,GACV/e,MAAO/1B,EAAQ62C,eACfL,YAAa,GACbM,WAAY,GACZ9B,UAAW,SAEb,2BAA4B,CAC1BsB,WAAY,IACZxB,SAAU,GACV/e,MAAO/1B,EAAQ61C,iBACfW,YAAa,GACbM,WAAY,GACZ9B,UAAW,SAEb,eAAgB,CACdsB,WAAY,IACZxB,SAAU,GACV/e,MAAO/1B,EAAQ61C,iBACfW,YAAa,GACbC,aAAc,GACdK,WAAY,GACZ9B,UAAW,SAEb,wBAAyB,CACvBsB,WAAY,aACZS,WAAY,OACZC,OAAQ,IACRh/C,OAAQ,mBAEV,sBAAuB,CACrBs+C,WAAY,aACZS,WAAY,OACZC,OAAQ,IACRh/C,OAAQ,mBAEV,+CAAgD,CAC9C2F,QAAS,SAEX,6CAA8C,CAC5CA,QAAS,SAEX,6BAA8B,CAC5BA,QAAS,eACT6rC,gBAAiB,WAEnB,4BAA6B,CAC3B7rC,QAAS,eACT6rC,gBAAiB,WAEnB,cAAe,CACb7rC,QAAS,OACT5F,MAAO,GACPgH,OAAQ,GACRiO,YAAa,GAEf,sDAAuD,CACrD1a,MAAO,UAET,wDAAyD,CACvDkd,KAAM,UAER,qBAAsB,CACpBD,SAAU,WACV5R,QAAS,OACTm3C,SAAU,GACV/e,MAAO,UACPh+B,MAAO,IACPgH,OAAQ,IACR+2C,WAAY,EAEZ,mBAAoB,CAClBvmC,SAAU,WACVynC,OAAQ,KACRL,QAAS,GACT3nB,OAAQ,IACRya,aAAc,EACdxxC,UAAW,qEACXuxC,gBAAiB,4BACjB,0CAA2C,CACzCyN,eAAgB,aAChBzN,gBAAiB,8BAGrB,yBAA0B,CACxB7rC,QAAS,QAEX,gCAAiC,CAC/Bu5C,UAAW,YACXl4C,cAAe,IAEjB,6BAA8B,CAC5BrB,QAAS,OACTu4C,oBAAqB,qEAEvB,6CAA8C,CAC5Cl3C,cAAe,IAEjB,uCAAwC,CACtC+1C,WAAY,QAEd,0CAA2C,CACzCoC,SAAU,QACVhB,QAAS,IACTG,WAAY,IACZC,YAAa,oBACbE,aAAc,IAEhB,6CAA8C,CAC5CU,SAAU,QACVb,WAAY,IACZE,YAAa,IAEf,yCAA0C,CACxCL,QAAS,IACTG,WAAY,aACZQ,WAAY,GACZn5C,QAAS,OACTw3C,WAAY,WAGhB,mHAAoH,CAClH3wE,IAAK,GACLwqD,OAAQ,SAGZ,sBAAuB,CACrBzf,SAAU,WACVwnC,WAAY,SAEd,4BAA6B,CAC3Bp5C,QAAS,SAGb,kBAAmB,CACjBjK,UAAW,IAEb,sCAAuC,CACrC9E,KAAM,YAER,mBAAoB,CAClB+nD,QAAS,IACT3+C,OAAQ,IACR+8C,WAAY,MACZa,OAAQ,IACRd,SAAU,GACV0C,WAAY,SACZC,UAAW,CACT,CACE1C,WAAY,cAKrB,ECzXYkJ,GAA0B,SAAAj+C,GAAO,MAAK,CACjD,sBAAuB,CACrBrC,QAAS,OACT22C,cAAe,SACfO,eAAgB,gBAChBnhD,UAAW,GACXE,aAAc,IAEhB,+CAAgD,CAC9C+J,QAAS,OACTk3C,eAAgB,WAChB91C,OAAQ,IACRnQ,KAAM,IACN2gB,SAAU,WACV/qC,KAAM,GACN8tB,MAAO,GAET,8DAA+D,CAC7DqkD,QAAS,IACT3+C,OAAQ,IACR+8C,WAAY,MACZa,OAAQ,IACRd,SAAU,GACV0C,WAAY,UAEd,qCAAsC,CACpC5oD,KAAM,IACNkrD,UAAW,EACXlF,UAAW,EACXj3C,QAAS,OACT4R,SAAU,YAEZ,mDAAoD,CAClD5R,QAAS,OACT/O,KAAM,KAER,uDAAwD,CACtDA,KAAM,IACN+O,QAAS,OACT22C,cAAe,UAEjB,8EAA+E,CAC7E1lD,KAAM,IACN+O,QAAS,QAEX,6FAA8F,CAC5F/O,KAAM,IACN2gB,SAAU,YAEZ,2GAA4G,CAC1GA,SAAU,sBACVC,KAAM,EACNld,MAAO,EACP9tB,IAAK,EACLwqD,OAAQ,EACRj3B,MAAO,qBACPgH,OAAQ,sBAEV,iHAAkH,CAChH43C,QAAS,GACT1+C,UAAW,qEACXuxC,gBAAiB,4BACjB,0CAA2C,CACzCyN,eAAgB,aAChBzN,gBAAiB,8BAGrB,6HAA8H,CAC5HkN,WAAY,SACZd,OAAQ,UAEV,mIAAoI,CAClIj4C,QAAS,OACTw3C,WAAY,UAEd,gJAAiJ,CAC/InoC,YAAa,GAEf,iJAAkJ,CAChJ+nC,WAAY,QAEd,oEAAqE,CACnEp3C,QAAS,QAEX,qDAAsD,CACpDA,QAAS,OACT22C,cAAe,SACf1lD,KAAM,KAER,qEAAsE,CACpE46C,gBAAgB,GAADp0E,OAAK4qC,EAAQq2C,eAAc,gBAE5C,uEAAwE,CACtE,eAAgB,KAChBF,QAAS,KACTx4C,QAAS,OACTw3C,WAAY,UAEd,sEAAuE,CACrE,eAAgB,IAChBgB,QAAS,IACTx4C,QAAS,OACTw3C,WAAY,UAEd,sEAAuE,CACrE,eAAgB,IAChBgB,QAAS,IACTx4C,QAAS,OACTw3C,WAAY,UAEd,sEAAuE,CACrE,eAAgB,IAChBgB,QAAS,IACTx4C,QAAS,OACTw3C,WAAY,UAEd,sEAAuE,CACrE,eAAgB,IAChBgB,QAAS,IACTx4C,QAAS,OACTw3C,WAAY,UAEd,sEAAuE,CACrE,eAAgB,IAChBgB,QAAS,IACTx4C,QAAS,OACTw3C,WAAY,UAEd,sEAAuE,CACrE,eAAgB,IAChBgB,QAAS,IACTx4C,QAAS,OACTw3C,WAAY,UAEd,sEAAuE,CACrE,eAAgB,IAChBgB,QAAS,IACTx4C,QAAS,OACTw3C,WAAY,UAEd,sEAAuE,CACrE,eAAgB,IAChBgB,QAAS,IACTx4C,QAAS,OACTw3C,WAAY,UAEd,sEAAuE,CACrE,eAAgB,IAChBgB,QAAS,IACTx4C,QAAS,OACTw3C,WAAY,SACZiB,UAAU,aAADhhF,OAAe4qC,EAAQq2C,iBAElC,uEAAwE,CACtEN,UAAW,OACXnnD,KAAM,KAER,kFAAmF,CACjF+O,QAAS,OACT85C,UAAW,CACT,CACE95C,QAAS,aAGbs4C,UAAW,aACXF,UAAW,OACX,4BAA6B,WAC7BG,oBAAqB,YAEvB,iGAAkG,CAChGS,QAAS,SACT53C,OAAQ,GACR23C,WAAY,SACZ3iD,SAAU,SACVD,aAAc,WACd,kBAAmB,IACnBwiD,WAAY,IACZR,WAAY,GACZH,aAAa,aAADvgF,OAAe4qC,EAAQq2C,iBAErC,uFAAwF,CACtFxB,eAAgB,WAChB4B,aAAc,GACd,kBAAmB,IACnBH,WAAY,IACZX,aAAa,aAADvgF,OAAe4qC,EAAQq2C,iBAErC,+EAAgF,CAC9E14C,QAAS,OACTw3C,WAAY,SACZS,OAAQ,oBAEV,8GAA+G,CAC7Gj4C,QAAS,OACT86C,WAAY,IACZtD,WAAY,SACZN,eAAgB,SAChB7nC,YAAa,EACbhV,OAAQ,oBACRwxC,gBAAiB,UACjBzxC,MAAO,GACPgH,OAAQ,IAEV,yIAA0I,CACxIg3B,MAAO,sBAET,gJAAiJ,CAC/I+e,SAAU,mBAEZ,oFAAqF,CACnFn3C,QAAS,SACTo4B,MAAO,WAET,4MAA6M,CAC3MA,MAAO,WAET,6EAA8E,CAC5Ep4B,QAAS,QAEX,uEAAwE,CACtE4R,SAAU,WACVwnC,WAAY,QACZzkD,MAAO,IACP9tB,IAAK,IACLuvB,SAAU,UAEZ,wFAAyF,CACvFwb,SAAU,WACVxX,MAAO,QAET,qGAAsG,CACpGgH,OAAQ,IAEV,sCAAuC,CACrCo2C,WAAY,WACZx3C,QAAS,OACTk3C,eAAgB,gBAChB91C,OAAQ,IACRwQ,SAAU,WACV/qC,IAAK,GACLoqB,KAAM,YAER,6DAA8D,CAC5D+O,QAAS,QAEX,mCAAoC,CAClC5F,MAAO,GACPgH,OAAQ,GACR/G,OAAQ,oBACRyxC,aAAc,EACdz8B,YAAa,EACbrP,QAAS,OACTw3C,WAAY,SACZN,eAAgB,UAElB,wCAAyC,CACvC98C,MAAO,EACPgH,OAAQ,EACR/G,OAAQ,oBACRyxC,aAAc,GAEhB,oDAAqD,CACnD9rC,QAAS,QAEX,oIAAqI,CACnIm4C,WAAY,GAEd,sDAAuD,CACrDn4C,QAAS,OACT/O,KAAM,KAER,6EAA8E,CAC5E+O,QAAS,QACTi7C,OAAQ,WAEX,ECnRYsF,GAAkC,SAAAl+C,GAAO,MAAK,CACzD,sBAAuB,CACrBrC,QAAS,OACT22C,cAAe,SACfO,eAAgB,gBAChB91C,OAAQ,QAEV,+CAAgD,CAC9CpB,QAAS,OACTk3C,eAAgB,WAChBtlC,SAAU,YAEZ,8DAA+D,CAC7DonC,QAAS,IACT3+C,OAAQ,IACR+8C,WAAY,MACZa,OAAQ,IACRd,SAAU,GACV0C,WAAY,UAEd,yDAA0D,CACxDR,OAAQ,KAEV,qCAAsC,CACpCpoD,KAAM,IACNkrD,UAAW,EACXlF,UAAW,EACXj3C,QAAS,OACT4R,SAAU,YAEZ,mDAAoD,CAClD5R,QAAS,OACT/O,KAAM,KAER,uDAAwD,CACtDA,KAAM,IACN+O,QAAS,OACT22C,cAAe,UAEjB,8EAA+E,CAC7E1lD,KAAM,IACN+O,QAAS,QAEX,6FAA8F,CAC5F/O,KAAM,IACN2gB,SAAU,YAEZ,2GAA4G,CAC1GA,SAAU,sBACVC,KAAM,EACNld,MAAO,EACP9tB,IAAK,EACLwqD,OAAQ,EACRj3B,MAAO,qBACPgH,OAAQ,sBAEV,iHAAkH,CAChH43C,QAAS,GACT1+C,UAAW,qEACXuxC,gBAAiB,4BACjB,0CAA2C,CACzCyN,eAAgB,aAChBzN,gBAAiB,8BAGrB,6HAA8H,CAC5HkN,WAAY,SACZd,OAAQ,UAEV,mIAAoI,CAClIj4C,QAAS,OACTw3C,WAAY,UAEd,gJAAiJ,CAC/InoC,YAAa,GAEf,iJAAkJ,CAChJ+nC,WAAY,QAEd,oEAAqE,CACnEp3C,QAAS,QAEX,qDAAsD,CACpDA,QAAS,OACT22C,cAAe,SACf1lD,KAAM,KAER,qEAAsE,CACpE46C,gBAAgB,GAADp0E,OAAK4qC,EAAQq2C,eAAc,gBAE5C,uEAAwE,CACtE,eAAgB,KAChBF,QAAS,KACTx4C,QAAS,OACTw3C,WAAY,UAEd,sEAAuE,CACrE,eAAgB,IAChBgB,QAAS,IACTx4C,QAAS,OACTw3C,WAAY,UAEd,sEAAuE,CACrE,eAAgB,IAChBgB,QAAS,IACTx4C,QAAS,OACTw3C,WAAY,UAEd,sEAAuE,CACrE,eAAgB,IAChBgB,QAAS,IACTx4C,QAAS,OACTw3C,WAAY,UAEd,sEAAuE,CACrE,eAAgB,IAChBgB,QAAS,IACTx4C,QAAS,OACTw3C,WAAY,UAEd,sEAAuE,CACrE,eAAgB,IAChBgB,QAAS,IACTx4C,QAAS,OACTw3C,WAAY,UAEd,sEAAuE,CACrE,eAAgB,IAChBgB,QAAS,IACTx4C,QAAS,OACTw3C,WAAY,UAEd,sEAAuE,CACrE,eAAgB,IAChBgB,QAAS,IACTx4C,QAAS,OACTw3C,WAAY,UAEd,sEAAuE,CACrE,eAAgB,IAChBgB,QAAS,IACTx4C,QAAS,OACTw3C,WAAY,UAEd,sEAAuE,CACrE,eAAgB,IAChBgB,QAAS,IACTx4C,QAAS,OACTw3C,WAAY,SACZiB,UAAU,aAADhhF,OAAe4qC,EAAQq2C,iBAElC,uEAAwE,CACtEN,UAAW,OACXnnD,KAAM,KAER,kFAAmF,CACjF+O,QAAS,OACT85C,UAAW,CACT,CACE95C,QAAS,aAGbs4C,UAAW,aACXF,UAAW,OACX,4BAA6B,WAC7BG,oBAAqB,YAEvB,iGAAkG,CAChGS,QAAS,SACT53C,OAAQ,GACR23C,WAAY,SACZ3iD,SAAU,SACVD,aAAc,WACd,kBAAmB,IACnBwiD,WAAY,IACZR,WAAY,GACZH,aAAa,aAADvgF,OAAe4qC,EAAQq2C,iBAErC,uFAAwF,CACtFxB,eAAgB,WAChB4B,aAAc,GACd,kBAAmB,IACnBH,WAAY,IACZX,aAAa,aAADvgF,OAAe4qC,EAAQq2C,iBAErC,+EAAgF,CAC9E14C,QAAS,OACTw3C,WAAY,SACZS,OAAQ,oBAEV,8GAA+G,CAC7Gj4C,QAAS,OACT86C,WAAY,IACZtD,WAAY,SACZN,eAAgB,SAChB7nC,YAAa,EACbhV,OAAQ,oBACRwxC,gBAAiB,UACjBzxC,MAAO,GACPgH,OAAQ,IAEV,yIAA0I,CACxIg3B,MAAO,sBAET,gJAAiJ,CAC/I+e,SAAU,mBAEZ,oFAAqF,CACnFn3C,QAAS,SACTo4B,MAAO,WAET,4MAA6M,CAC3MA,MAAO,WAET,6EAA8E,CAC5Ep4B,QAAS,QAEX,uEAAwE,CACtE4R,SAAU,WACVwnC,WAAY,QACZzkD,MAAO,IACP9tB,IAAK,IACLuvB,SAAU,UAEZ,wFAAyF,CACvFwb,SAAU,WACVxX,MAAO,QAET,qGAAsG,CACpGgH,OAAQ,IAEV,sCAAuC,CACrCo2C,WAAY,WACZx3C,QAAS,OACTk3C,eAAgB,gBAChBtlC,SAAU,WACV7b,UAAW,IAEb,6DAA8D,CAC5DiK,QAAS,QAEX,mCAAoC,CAClC5F,MAAO,GACPgH,OAAQ,GACR/G,OAAQ,oBACRyxC,aAAc,EACdz8B,YAAa,EACbrP,QAAS,OACTw3C,WAAY,SACZN,eAAgB,UAElB,wCAAyC,CACvC98C,MAAO,EACPgH,OAAQ,EACR/G,OAAQ,oBACRyxC,aAAc,GAEhB,6CAA8C,CAC5C9rC,QAAS,QAEX,6HAA8H,CAC5Hm4C,WAAY,GAEd,+CAAgD,CAC9Cn4C,QAAS,OACT/O,KAAM,KAER,sEAAuE,CACrE+O,QAAS,QACTi7C,OAAQ,WAEX,C,iRC/POuF,EADmB1qF,IAAAA,OAASoC,EAAAA,QAAO8M,IAAI,eAAgB,UAAW,CAAC,GACnEw7E,8BAEKC,EAAqB,CAChC,CAAC,WAAY,kBAAmB,kBAChC,CAAC,YAAa,YACd,CAAC,sBAAuB,eAAgB,iBAAkB,WAAY,qBAAsB,gBAAiBD,EAAgC,aAAe,SAAU,gBAAiB,eACvL,CAAC,WAAY,MAAO,iBAAkBA,EAAgC,kBAAoB,eAAgB,YAAa,gBACvH,CAAC,WAAY,YAAa,cAAe,WACzC,CAAC,kBACD,CAAC,eACD,CAAC,gBAGUE,EAAiB,CAAC,kBAAmB,kBAE5CC,GAAgCC,EAAAA,EAAAA,qBAAoBC,EAAAA,GAAoB/qF,IAAAA,MAAQgrF,EAAAA,aAAaC,IAAK,CAACC,EAAAA,UAAUC,4BAA6BD,EAAAA,UAAUE,qCAE7IC,EAAS,SAACp1D,GACrB,IACEq1D,EAGEr1D,EAHFq1D,QACAC,EAEEt1D,EAFFs1D,mBACGC,GAAMC,EAAAA,EAAAA,GACPx1D,EAAKy1D,GAEHC,EAAiB3rF,IAAAA,UAAYsrF,EAAS,CAAEnsC,UAAU,IAMxD,OAJA5lB,EAAAA,EAAAA,YAAU,WACRgyD,GAAoBvrF,IAAAA,QAAU2rF,GAChC,IAEK11D,EAAM21D,WAKT11D,EAAAA,EAAAA,KAAC21D,EAAAA,SAAQ,CAACrlF,KAAK,wBAAuB8vB,UACpCJ,EAAAA,EAAAA,KAAC41D,EAAAA,SAAQ,CAACtlF,KAAK,wBAAuB8vB,UACpCJ,EAAAA,EAAAA,KAAC20D,GAA6B/pF,EAAAA,EAAAA,GAAA,CAACirF,WAAYpB,EAAoBC,eAAgBA,GAAoBY,QANhG,IAUX,EAQAH,EAAOlzD,aAAe,CACpBozD,mBAAoBvrF,IAAAA,KACpB4rF,WAAW,EACXN,QAAS,MAGX,IAAMU,EAAsBhsF,IAAAA,UAAYisF,EAAAA,QAAQC,kBAAmB,CAAE/oF,GAAI,uBACnEgpF,EAA4BnsF,IAAAA,MAAQisF,EAAAA,QAAQG,gBAAiB,CAACJ,IAEvDK,GAAyBC,EAAAA,EAAAA,aACpCrzE,EAAAA,KAAWoyE,GACXL,EAAAA,aAAaC,IACbkB,GCnEII,EAAqB,CACzB,CAAC,qBACD,CAAC,mBACD,CAAC,oBACD,CAAC,6BACD,CAAC,0BAGUlB,EAAS,SAACp1D,GACrB,IAAQq1D,EAAgCr1D,EAAhCq1D,QAASC,EAAuBt1D,EAAvBs1D,mBAEXI,EAAiB3rF,IAAAA,UAAYsrF,EAAS,CAAEnsC,UAAU,IAMxD,OAJA5lB,EAAAA,EAAAA,YAAU,WACRgyD,GAAoBvrF,IAAAA,QAAU2rF,GAChC,IAEO11D,EAAM21D,WAAa11D,EAAAA,EAAAA,KAACs2D,EAAAA,GAAQ1rF,EAAAA,EAAAA,GAAA,CAACirF,WAAYQ,EAAoBjB,QAASA,GAAar1D,IAAa,IACzG,EAQAo1D,EAAOlzD,aAAe,CACpBozD,mBAAoBvrF,IAAAA,KACpB4rF,WAAW,GAGb,IAAMa,EAAa,CAACvB,EAAAA,UAAUwB,mBAAoBxB,EAAAA,UAAUyB,YAAazB,EAAAA,UAAU0B,cAEtEC,GAAyBC,EAAAA,EAAAA,qBACpC7zE,EAAAA,KAAWoyE,GACXoB,GCnCIM,EAA0B,CAC9B,CAAC,SACD,CAAC,cACD,CAAC,WACD,CAAC,iBAGU1B,EAAS,SAACp1D,GACrB,IAAQq1D,EAAgCr1D,EAAhCq1D,QAASC,EAAuBt1D,EAAvBs1D,mBAEXI,EAAiB3rF,IAAAA,UAAYsrF,EAAS,CAAEnsC,UAAU,IAMxD,OAJA5lB,EAAAA,EAAAA,YAAU,WACRgyD,GAAoBvrF,IAAAA,QAAU2rF,GAChC,IAEO11D,EAAM21D,WAAa11D,EAAAA,EAAAA,KAACs2D,EAAAA,GAAQ1rF,EAAAA,EAAAA,GAAA,CAACirF,WAAYgB,EAAyBzB,QAASA,GAAar1D,IAAa,IAC9G,EAQAo1D,EAAOlzD,aAAe,CACpBozD,mBAAoBvrF,IAAAA,KACpB4rF,WAAW,GAGb,IAAMa,EAAa,CAACvB,EAAAA,UAAUwB,mBAAoBxB,EAAAA,UAAUyB,YAAazB,EAAAA,UAAU0B,cAEtEI,GAA8BC,EAAAA,EAAAA,kBACzCh0E,EAAAA,KAAWoyE,GACXoB,EACAzsF,IAAAA,QAAU+sF,ICnCNG,EAAyB,CAC7B,CAAC,uBACD,CAAC,sBACD,CAAC,cACD,CAAC,0BAEU7B,EAAS,SAACp1D,GACrB,IAAQq1D,EAAgCr1D,EAAhCq1D,QAASC,EAAuBt1D,EAAvBs1D,mBAEXI,EAAiB3rF,IAAAA,UAAYsrF,EAAS,CAAEnsC,UAAU,IAKxD,OAHA5lB,EAAAA,EAAAA,YAAU,WACRgyD,GAAoBvrF,IAAAA,QAAU2rF,GAChC,IACO11D,EAAM21D,WAAa11D,EAAAA,EAAAA,KAACs2D,EAAAA,GAAQ1rF,EAAAA,EAAAA,GAAA,CAACirF,WAAYmB,EAAwBC,8BAA8B,GAAWl3D,IAAa,IAChI,EAQAo1D,EAAOlzD,aAAe,CACpBozD,mBAAoBvrF,IAAAA,KACpB4rF,WAAW,GAGN,IAAMwB,GAA6BH,EAAAA,EAAAA,kBACxCh0E,EAAAA,KAAWoyE,GACXL,EAAAA,aAAaC,IACbjrF,IAAAA,QAAUktF,I,YC/BNG,EAAgB,CAAC,sBACjBC,EAAoB,CAAC,SAAU,wBAAyB,wBAyBjDjC,EAAS,SAACp1D,GACrB,IAAQq1D,EAAgCr1D,EAAhCq1D,QAASC,EAAuBt1D,EAAvBs1D,mBAEXI,EAAiB3rF,IAAAA,UAAYsrF,EAAS,CAAEnsC,UAAU,KAExD5lB,EAAAA,EAAAA,YAAU,WACR,IAAMg0D,GAAavtF,IAAAA,QAAU2rF,GAC7BJ,EAAmBgC,GACnBt3D,EAAMu3D,aAAa,CAAEC,KAAM,CAAEC,gBAAiBH,IAChD,IAEA,IAAMI,EAnCa,SAACC,EAAS95C,EAAK+5C,GAClC,IAAMC,EAAY,SAACC,EAAMC,GACvB,IAAQ7qF,EAAiB4qF,EAAjB5qF,GAAImzB,EAAay3D,EAAbz3D,SAENpoB,EAASlO,IAAAA,MAAQ+tF,GAUvB,OARI/tF,IAAAA,KAAOguF,GAAM,SAAA3sB,GAAC,OAAIA,IAAMl+D,CAAE,MAC5B+K,EAAOooB,SAAW,IAGhBA,GAAYA,EAAS/wB,OAAS,IAChC2I,EAAOooB,SAAWt2B,IAAAA,IAAMkO,EAAOooB,UAAU,SAAA+qC,GAAC,OAAIysB,EAAUzsB,EAAG2sB,EAAK,KAG3D9/E,CACT,EAMA,OAJelO,IAAAA,MAAQ4tF,GACpB7jF,QAAO,SAAAs3D,GAAC,OAA4C,IAAvCrhE,IAAAA,QAAU6tF,EAAkBxsB,EAAEl+D,GAAU,IACrDuB,KAAI,SAAA28D,GAAC,OAAIysB,EAAUzsB,EAAGvtB,EAAI,IAC1BhwC,OAEL,CAawBmqF,CAAa3C,EAASgC,EAAmBD,GAC/D,OAAOp3D,EAAM21D,WAAa11D,EAAAA,EAAAA,KAACg4D,EAAAA,GAAQptF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKm1B,GAAK,IAAEq1D,QAASqC,KAAqB,IAC/E,EASAtC,EAAOlzD,aAAe,CACpBq1D,aAAcxtF,IAAAA,KACdurF,mBAAoBvrF,IAAAA,KACpB4rF,WAAW,GAGN,IAAMuC,GAA4BC,EAAAA,EAAAA,wBACvCn1E,EAAAA,KAAWoyE,GACXL,EAAAA,aAAaC,K,mCCvDTJ,GAAgCwD,EAAAA,EAAAA,0BAAyBtD,EAAAA,GAAoBC,EAAAA,aAAaC,KAE1FqD,EAA0B,CAAC,CAC/B,2BACA,wBACA,wBACA,4BAGWjD,EAAS,SAACp1D,GACrB,IAAQq1D,EAA2Cr1D,EAA3Cq1D,QAASC,EAAkCt1D,EAAlCs1D,mBAAuBC,GAAMC,EAAAA,EAAAA,GAAKx1D,EAAKy1D,GAElDC,EAAiB3rF,IAAAA,UAAYsrF,EAAS,CAAEnsC,UAAU,IAOxD,OALA5lB,EAAAA,EAAAA,YAAU,WACR,IAAMg0D,GAAavtF,IAAAA,QAAU2rF,GAC7BJ,EAAmBgC,EACrB,IAEKt3D,EAAM21D,WAKT11D,EAAAA,EAAAA,KAAC21D,EAAAA,SAAQ,CAACrlF,KAAK,wBAAuB8vB,UACpCJ,EAAAA,EAAAA,KAAC41D,EAAAA,SAAQ,CAACtlF,KAAK,wBAAuB8vB,UACpCJ,EAAAA,EAAAA,KAAC20D,GAA6B/pF,EAAAA,EAAAA,GAAA,CAACirF,WAAYuC,EAAyB1D,eAAgB,IAAQY,QANzF,IAUX,EAYAH,EAAOlzD,aAAe,CACpBq1D,aAAcxtF,IAAAA,KACdurF,mBAAoBvrF,IAAAA,KACpB4rF,WAAW,GAGN,IAAM2C,GAA8BF,EAAAA,EAAAA,0BACzCp1E,EAAAA,KAAWoyE,GACXL,EAAAA,aAAaC,KCnDTuD,EAA2B,CAC/B,CAAC,oBAAqB,YAAa,iBAAkB,aAAc,eAAgB,iBAG/EC,EAAwC,CAC5C,CAAC,oBAAqB,YAAa,iBAAkB,eAAgB,iBAG1DpD,EAAS,SAACp1D,GACrB,IAAQq1D,EAA6Cr1D,EAA7Cq1D,QAASC,EAAoCt1D,EAApCs1D,mBAAoBlpF,EAAgB4zB,EAAhB5zB,YAE/BspF,EAAiB3rF,IAAAA,UAAYsrF,EAAS,CAAEnsC,UAAU,IAMxD,OAJA5lB,EAAAA,EAAAA,YAAU,WACRgyD,GAAoBvrF,IAAAA,QAAU2rF,GAChC,IAEO11D,EAAM21D,WAAa11D,EAAAA,EAAAA,KAACs2D,EAAAA,GAAQ1rF,EAAAA,EAAAA,GAAA,CAACirF,WAAY1pF,EAAYqsF,mCAAqCD,EAAwCD,EAA0BlD,QAASA,GAAar1D,IAAa,IACxM,EAQAo1D,EAAOlzD,aAAe,CACpBozD,mBAAoBvrF,IAAAA,KACpB4rF,WAAW,GAGN,IAAM+C,GAA+B1B,EAAAA,EAAAA,kBAC1Ch0E,EAAAA,KAAWoyE,GACXL,EAAAA,aAAaC,IACbjrF,IAAAA,IAAMwuF,EAAyB,IAAI,SAAArrF,GAAE,SAAAxB,OAAOwB,EAAE,UClC1CyrF,EAA0B,CAC9B,CAAC,0BACD,CAAC,sBAGUvD,EAAS,SAACp1D,GACrB,IAAQq1D,EAAgCr1D,EAAhCq1D,QAASC,EAAuBt1D,EAAvBs1D,mBAEXI,EAAiB3rF,IAAAA,UAAYsrF,EAAS,CAAEnsC,UAAU,IAMxD,OAJA5lB,EAAAA,EAAAA,YAAU,WACRgyD,GAAoBvrF,IAAAA,QAAU2rF,GAChC,IAEO11D,EAAM21D,WAAa11D,EAAAA,EAAAA,KAACs2D,EAAAA,GAAQ1rF,EAAAA,EAAAA,GAAA,CAACirF,WAAY6C,EAAyBtD,QAASA,GAAar1D,IAAa,IAC9G,EAQAo1D,EAAOlzD,aAAe,CACpBozD,mBAAoBvrF,IAAAA,KACpB4rF,WAAW,GAGb,IAAMa,EAAa,CAACvB,EAAAA,UAAUwB,mBAAoBxB,EAAAA,UAAUyB,YAAazB,EAAAA,UAAU0B,cAEtEiC,GAA8BC,EAAAA,EAAAA,0BACzC71E,EAAAA,KAAWoyE,GACXoB,G,YChCWpB,GAAS,SAACp1D,GACrB,IAAQq1D,EAAgCr1D,EAAhCq1D,QAASC,EAAuBt1D,EAAvBs1D,mBAEXI,EAAiB3rF,IAAAA,UAAYsrF,EAAS,CAAEnsC,UAAU,IAMxD,OAJA5lB,EAAAA,EAAAA,YAAU,WACRgyD,GAAoBvrF,IAAAA,QAAU2rF,GAChC,IAEO11D,EAAM21D,WAAY11D,EAAAA,EAAAA,KAAC64D,EAAAA,EAAe,CAACzD,QAASA,IAAc,IACnE,EAQAD,GAAOlzD,aAAe,CACpBozD,mBAAoBvrF,IAAAA,KACpB4rF,WAAW,GAGN,IAAMoD,IAAoB/B,EAAAA,EAAAA,kBAC/Bh0E,EAAAA,KAAWoyE,IACXL,EAAAA,aAAaC,IACb,W,qECvBIgE,GAAiB,gCACjBC,GAAsB,4CAEtBC,GAAyB,CAC7B,CAACF,IACD,CAACC,KAGU7D,GAAS,SAACp1D,GACrB,IACEq1D,EACEr1D,EADFq1D,QAASC,EACPt1D,EADOs1D,mBAAoB6D,EAC3Bn5D,EAD2Bm5D,KAASC,GAAI5D,EAAAA,EAAAA,GACxCx1D,EAAKy1D,IAEHC,EAAiB3rF,IAAAA,UAAYsrF,EAAS,CAAEnsC,UAAU,KAExD5lB,EAAAA,EAAAA,YAAU,WACRgyD,GAAoBvrF,IAAAA,QAAU2rF,GAChC,IAEA,IAcmE2D,GAApB3D,GAAkB,CAAC,GAA1Dr1D,SAAUi5D,OAAmB,IAAAD,EAAG,GAAEA,EAC1C,OAAOr5D,EAAM21D,WACT11D,EAAAA,EAAAA,KAACs2D,EAAAA,GAAQ1rF,EAAAA,EAAAA,GAAA,CACPirF,WAAYoD,GACZ7D,QAASiE,EACTC,eAnBiB,SAAHnvF,GAAgB,IAAV8C,EAAE9C,EAAF8C,GACxB,OAAIA,IAAO+rF,IACFh5D,EAAAA,EAAAA,KAAC0pB,GAAAA,UAAS,CAACC,MAAM,aAEtB18C,IAAO8rF,IAEP/4D,EAAAA,EAAAA,KAAA,OAAKgF,MAAO,CAAE4gB,SAAU,WAAY/qC,IAAK,GAAIulB,UAC3CJ,EAAAA,EAAAA,KAACu5D,GAAAA,iBAAgB,MAIhB,IACT,EAQMC,UAAoB,cAATN,GACPC,IAEN,IACN,EAaAhE,GAAOlzD,aAAe,CACpBozD,mBAAoBvrF,IAAAA,KACpB4rF,WAAW,EACXwD,UAAMzsF,GAGR,IAAM8pF,GAAa,CAACvB,EAAAA,UAAUwB,mBAAoBxB,EAAAA,UAAUyB,YAAazB,EAAAA,UAAU0B,cAEtE+C,IAA6B1C,EAAAA,EAAAA,kBACxCh0E,EAAAA,KAAWoyE,IACXoB,GACA,CApE6B,kCCGlBmD,GAAoB32E,EAAAA,MAAW,SAAAgd,GAAK,OAC/CgC,EAAAA,EAAAA,MAAC43D,EAAAA,EAAe,CAACC,UAAW55D,EAAAA,EAAAA,KAAC65D,EAAAA,4BAA2B,IAAKz5D,SAAA,EAC3DJ,EAAAA,EAAAA,KAAC22D,GAAsB/rF,EAAAA,EAAAA,GAAA,GAAKm1B,KAC5BC,EAAAA,EAAAA,KAAC24D,GAA2B/tF,EAAAA,EAAAA,GAAA,GAAKm1B,KACjCC,EAAAA,EAAAA,KAACm2D,GAAsBvrF,EAAAA,EAAAA,GAAA,GAAKm1B,KAC5BC,EAAAA,EAAAA,KAACk3D,GAA0BtsF,EAAAA,EAAAA,GAAA,GAAKm1B,KAChCC,EAAAA,EAAAA,KAAC82D,GAA2BlsF,EAAAA,EAAAA,GAAA,GAAKm1B,KACjCC,EAAAA,EAAAA,KAACi4D,GAAyBrtF,EAAAA,EAAAA,GAAA,GAAKm1B,KAC/BC,EAAAA,EAAAA,KAACq4D,GAA2BztF,EAAAA,EAAAA,GAAA,GAAKm1B,KACjCC,EAAAA,EAAAA,KAACy4D,GAA4B7tF,EAAAA,EAAAA,GAAA,GAAKm1B,KAClCC,EAAAA,EAAAA,KAAC84D,IAAiBluF,EAAAA,EAAAA,GAAA,GAAKm1B,KACvBC,EAAAA,EAAAA,KAACy5D,IAA0B7uF,EAAAA,EAAAA,GAAA,GAAKm1B,MAChB,G,8WCpBP+5D,EAAc,SAAAC,GAAQ,SAAAtuF,OAFZ,oBAEiCA,OAAGsuF,EAASC,MAAK,EAElE,SAASC,EAAevmD,EAAOnmC,EAAM2sF,EAAoBC,GAC9D,OAAOrwF,IAAAA,IAAM4pC,GAAO,SAAAjP,GAAI,MAAmB,YAAdA,EAAK9tB,KAAqB8tB,EAAO,CAC5Dx3B,GAAIw3B,EAAKx3B,GACTs7B,QAAS9D,EAAK8D,SAAWh7B,EAAKO,UAAU22B,EAAKn0B,MAC7C8pF,WAAYtwF,IAAAA,YAAc26B,EAAK21D,YAAc31D,EAAKwkB,SAAWxkB,EAAK21D,WAClEC,cAAevwF,IAAAA,YAAc26B,EAAK41D,eAAiB51D,EAAK4yD,UAAY5yD,EAAK41D,cACzEL,MAAOv1D,EAAKu1D,MACZM,qBAAsB71D,EAAKx3B,KAAOitF,EAClCC,mBAAoBA,EAAmB11D,GACvC81D,8BAA+B91D,EAAK81D,gCAClCC,EAAAA,EAAAA,eAAcjtF,EAAKO,UAAUC,iDAA7BysF,CAAqF,CAAE5jC,SAAUrpD,EAAKO,UAAU22B,EAAKn0B,QACvHmqF,QAASh2D,EAAKg2D,QACdC,SAAUj2D,EAAKi2D,SACfntF,KAAAA,EACA6yB,SAAUqE,EAAKrE,SACfu6D,QAASl2D,EAAKk2D,QACf,GACH,CAEO,SAASC,EAAa/E,EAAYT,EAAS7nF,EAAM2sF,EAAoBC,GAC1E,OAAOrwF,IAAAA,OAAS+rF,GAAY,SAAC79E,EAAQ6iF,EAAO3nF,GAC1C,IAAM4nF,EAAWb,EAAenwF,IAAAA,OAASsrF,GAAS,SAAA3wD,GAAI,OAAIo2D,EAAMzgF,QAAQqqB,EAAKx3B,KAAO,CAAC,IAAGM,EAAM2sF,EAAoBC,GAC5GY,EAAqB,IAAV7nF,GAAepJ,IAAAA,QAAUgxF,GAAa,GACrD,CAAC,CAAE7tF,GAAG,WAADxB,OAAayH,GAASyD,KAAM,YAEnC,OAAO7M,IAAAA,MAAQkO,EAAQ+iF,EAASD,EAClC,GAAG,GACL,CAEO,IAAME,EAAmB,SAACv2D,EAAMxnB,GACrC,IAAMg+E,EAAYC,EAAAA,MAAkBj+E,EAAMk+E,QAAQlwE,SAASmwE,QAE3D,OADsBC,EAAAA,QAAQC,YAAY72D,EAAKk2D,QAASM,EAE1D,EAOaM,EAAiB,SAACxB,EAAU98E,GACvC,IAAK88E,EAASM,cACZ,MAAO,GAGT,IAAM9yB,EAAOuyB,EAAYC,GACnBhlF,EAXuB,SAAC0vB,EAAMxnB,GACpC,IAAMu+E,EAAgBR,EAAiBv2D,EAAMxnB,GAC7C,OAAOi+E,EAAAA,UAAsBM,EAAe,CAAEC,MAAM,GACtD,CAQgBC,CAAgB3B,EAAU98E,GAExC,MAAM,GAANxR,OAAU87D,EAAI,KAAA97D,OAAIsJ,EACpB,EAGa4mF,EAAoB,SAACjoD,EAAOghD,GAAc,IAAEkH,EAAUrkF,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAG,EAAC,OACrEm8B,EAAMmoD,QAAO,SAACC,EAAgBr3D,GAC5B,OAAKA,EAAKrE,UAAqC,IAAzBqE,EAAKrE,SAAS/wB,QAAgBusF,GAAc,GAAK9xF,IAAAA,SAAW4qF,EAAgBjwD,EAAKx3B,IAC/F,GAANxB,QAAA+W,EAAAA,EAAAA,GAAWs5E,GAAc,CAAEr3D,IAGvB,GAANh5B,QAAA+W,EAAAA,EAAAA,GACKs5E,IAAct5E,EAAAA,EAAAA,GACdm5E,EAAkBl3D,EAAKrE,SAAUs0D,EAAgBkH,EAAa,IAErE,GAAG,GAAI,EAEHG,EAAiB,SAAAC,GAAM,OAAIlyF,IAAAA,IAAMkyF,GAAQ,SAACnB,GAC9C,GAAIA,EAAM//E,MACR,OAAO+/E,EAGT,IAAMoB,EAAWnyF,IAAAA,OAAS+wF,EAAO,CAC/Bz6D,SAAU27D,EAAelB,EAAMz6D,YAEjC,OAAOt2B,IAAAA,OAASmyF,EAAU,CACxBnhF,MAAOhR,IAAAA,OAASmyF,EAAS77D,UAAU,SAAC87D,EAAKzkD,GAAK,OAAKykD,EAAMzkD,EAAM38B,KAAK,GAAE,IAE1E,GAAG,EAEGqhF,EAAsB,SAACH,GAAM,IAAEI,EAAU7kF,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAG,EAAC,OAAKzN,IAAAA,IAAMkyF,GAAQ,SAACnB,EAAO3nF,GAC5E,IAAMmpF,EAAe,IAAVnpF,EAAckpF,EAAaJ,EAAO9oF,EAAQ,GAAGkpF,WAAaJ,EAAO9oF,EAAQ,GAAG4H,MAIvF,OAHAhR,IAAAA,OAAS+wF,EAAO,CACdz6D,SAAU+7D,EAAoBtB,EAAMz6D,SAAUi8D,KAEzCvyF,IAAAA,OAAS+wF,EAAO,CACrBuB,WAAYC,GAEhB,GAAG,EAEGC,EAA0B,SAACN,EAAQO,GAAwC,IAAxBC,EAAajlF,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,IAAI,EAClE8kF,EAAKG,EAAgB,EAAI1yF,IAAAA,UAAYyyF,EAAgB,CAAEnC,YAAY,IAAUoC,EACnF,OAAO1yF,IAAAA,IAAMkyF,GAAQ,SAACnB,GACpB,GAAIwB,GAAMxB,EAAMuB,YAAcC,EAAKxB,EAAMuB,WAAavB,EAAM//E,MAC1D,OAAOhR,IAAAA,OAAS,CAAC,EAAG+wF,EAAO,CAAET,YAAY,IAG3C,GAAoB,IAAhBS,EAAM//E,MACR,OAAO+/E,EAGT,IAAM4B,EAAcH,EAAwBzB,EAAMz6D,SAAUm8D,EAAgBF,GAC5E,OAAOvyF,IAAAA,OAAS,CAAC,EAAG+wF,EAAO,CAAE6B,aAAa,EAAMt8D,SAAUq8D,GAC5D,GACF,EAEaE,EAAyB,SAACjpD,EAAO6oD,EAAgB7H,GAA+C,IAA/Bz1D,EAAK1nB,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAG,EAAGqkF,EAAUrkF,UAAAlI,OAAA,QAAA5C,IAAA8K,UAAA,GAAAA,UAAA,GAAG,EAC9FqlF,EAAe9yF,IAAAA,OAAS4pC,GAAO,SAACsoD,EAAQv3D,GAC5C,IAAIo2D,EACEvqF,EAAOm0B,EAAK8D,SAAYz+B,IAAAA,KAAOyyF,EAAgB,CAAEtvF,GAAIw3B,EAAKx3B,KAAOs7B,QAEvE,GAAIz+B,IAAAA,SAAW4qF,EAAgBjwD,EAAKx3B,KAAqB,YAAdw3B,EAAK9tB,MAAuB7M,IAAAA,QAAU26B,EAAKrE,WAAuB,IAAVnB,EACjG47D,EAAQ,CAAC,CACP5wF,IAAI,SAADwB,OAAWg5B,EAAKx3B,IACnB4vF,MAAOp4D,EAAKx3B,GACZ6N,MAAO,EACPslB,SAAU,GACVnB,MAAAA,EACA3uB,KAAAA,SAEG,GAAIxG,IAAAA,QAAU26B,EAAKrE,WAAanB,EAAQ,EAAI28D,EACjDf,EAAQ,QACH,GAAIp2D,EAAKrE,SAAS/wB,OAAS,GAAKo1B,EAAKrE,SAAS,GAAGA,UAAYqE,EAAKrE,SAAS,GAAGA,SAAS/wB,OAAS,GAAK4vB,EAAQ,EAAI28D,EAAY,CAClI,IAAMx7D,EAAWu8D,EAAuBl4D,EAAKrE,SAAUm8D,EAAgB7H,EAAgBz1D,EAAQ,EAAG28D,GAClGf,EAAQ,CAAC,CACP5wF,IAAI,SAADwB,OAAWg5B,EAAKx3B,IACnB4vF,MAAOp4D,EAAKx3B,GACZgyB,MAAAA,EACAmB,SAAAA,EACA9vB,KAAAA,GAEJ,MACEuqF,EAAQ,CAAC,CACP5wF,IAAI,SAADwB,OAAWg5B,EAAKx3B,IACnB4vF,MAAOp4D,EAAKx3B,GACZ6N,MAAO2pB,EAAKrE,SAAS/wB,OACrB+wB,SAAU,GACVnB,MAAAA,EACA3uB,KAAAA,IAIJ,MAAM,GAAN7E,QAAA+W,EAAAA,EAAAA,GACKw5E,IAAMx5E,EAAAA,EAAAA,GACNq4E,GAEP,GAAG,IACH,OAAiB,IAAV57D,EAAcq9D,EAAwBH,EAAoBJ,EAAea,IAAgBL,GAC9FK,CACJ,E,wBC3JaE,EAAwB,SAACC,EAAY5yF,GAAA,IAAAisC,EAAAjsC,EAAIksC,QAAAA,OAAO,IAAAD,EAAG,CAAC,EAACA,EAAA,MAAQ,CACxE4mD,aAAc,CACZ5wB,MAAO,mBACPkf,WAAY,WACZF,WAAY,SACZyC,WAAY,SACZ75C,QAAS,OACT22C,cAAe,MACfqC,QAAS,aACT6D,eAAgB,OAChB5B,OAAQ,WAEV8N,aAAc,CACZ,UAAW,CACTld,gBAAiBxpC,EAAQ4mD,aACzBpM,eAAgB,OAChBzkB,MAAO,mBAET,WAAY,CACVyT,gBAAiBxpC,EAAQw4C,qBACzBgC,eAAgB,SAGpBqM,uBAAwB,CACtB,UAAW,CACT9wB,MAAO/1B,EAAQ42C,cAEjB,WAAY,CACV7gB,MAAO/1B,EAAQ42C,cAEjB,UAAW,CACT7gB,MAAO/1B,EAAQ42C,eAGnBkQ,qBAAsB,CACpB/R,WAAY,IACZvL,gBAAiBxpC,EAAQ+mD,aACzB,UAAW,CACTvd,gBAAiBxpC,EAAQgnD,WACzBxM,eAAgB,OAChBzkB,MAAO/1B,EAAQ42C,cAEjB,YAAa,CACX4D,eAAgB,QAElB,oBAAqB,CACnBzkB,MAAO,oBAGXkxB,+BAAgC,CAC9BlxB,MAAO/1B,EAAQ42C,cAEjBsQ,WAAY,CACVhP,WAAW,aAAD9iF,OAAe4qC,EAAQ42C,cACjCD,QAAS,EACT3pC,aAAc,EACdipC,UAAW,WAEbkR,cAAe,CACbxpD,QAAS,eACTm4C,WAAY,GACZpiD,UAAW,EACXE,aAAc,EACdsjD,UAAW,aACXtoD,KAAM,UACNmnC,MAAO/1B,EAAQ62C,eACf,8BAA+B,CAC7B,4CAA6C,CAC3C9gB,MAAO,gBAIbqxB,cAAe,CACbzpD,QAAS,eACTm4C,WAAY,GACZpiD,UAAW,EACXE,aAAc,EACdmiC,MAAO/1B,EAAQ62C,gBAEjBxjE,KAAM,CACJyhE,SAAU,GACV/e,MAAO/1B,EAAQ62C,gBAEjBwQ,cAAe,CACbvS,SAAU,GACV/e,MAAO,UACPuxB,MAAO,QACP3Q,QAAS,mBACTa,WAAY,QAEd+P,uBAAwB,CACxB,EACAC,oBAAqB,CACnBzxB,MAAM,GAAD3gE,OAAK4qC,EAAQ42C,aAAY,gBAEhC6Q,uBAAwB,CACtB1xB,MAAO,WAET2xB,kBAAmB,CACjB,UAAW,CACTxvD,QAAQ,aAAD9iC,OAAe4qC,EAAQ61C,oBAGlC8R,qBAAsB,CACpBp4C,SAAU,WACV5R,QAAS,eACTjK,UAAW,QACXoiD,WAAY,SAEd8R,aAAc,CACZrR,YAAY,aAADnhF,OAAe4qC,EAAQw4C,sBAClCxrC,aAAc,EACdtZ,WAAY,IAEf,E,gDCxGKm0D,EAAsB,SAAH/zF,GAOlB,IASDg0F,EAfJroD,EAAO3rC,EAAP2rC,QACAukD,EAAalwF,EAAbkwF,cACA+D,EAAMj0F,EAANi0F,OACAC,EAAcl0F,EAAdk0F,eACA/D,EAAoBnwF,EAApBmwF,qBACAC,EAA6BpwF,EAA7BowF,8BAEM+D,EAAkB,CACtB,CAACxoD,EAAQ4nD,cAAe,kBACxBpD,EACIxkD,EAAQ+nD,oBACR/nD,EAAQgoD,wBAGR97D,EAAY+C,IAAWu5D,GAoC7B,MAlCe,cAAXF,GAAqC,aAAXA,GAAoC,qBAAXA,GAA4C,sBAAXA,EAEpFD,EADE7D,GACgBt6D,EAAAA,EAAAA,KAAC0pB,EAAAA,UAAS,CAACtlB,QAAS,SAAAnJ,GAAC,OAAIojE,EAAeD,EAAQnjE,EAAE,EAAE+G,UAAWA,EAAW2nB,MAAM,kBAGhG3pB,EAAAA,EAAAA,KAACu+D,EAAAA,eAAc,CAEb11D,UAAU,SACV21D,SACEx+D,EAAAA,EAAAA,KAAC2M,EAAAA,QAAO,CAAC1/B,GAAG,cAAamzB,SACtBm6D,IAEJn6D,UAEDJ,EAAAA,EAAAA,KAAA,OACEoE,QAAS,SAAAnJ,GAAC,OAAIojE,EAAeD,EAAQnjE,EAAE,EACvCkuC,KAAK,SACLnnC,UAAW+C,IAAW,CAAC+Q,EAAQioD,kBAAmB,4BAClD9pD,SAAU,EACVua,UAAW,SAAAvzB,GAAC,OAAIwjE,EAAAA,EAAAA,aAAYJ,EAAZI,CAA4BxjE,EAAGmjE,EAAQnjE,EAAE,EACzD,aAAYs/D,EACZ,uBAAiBn6D,UAEjBJ,EAAAA,EAAAA,KAAC0pB,EAAAA,UAAS,CACR1nB,UAAWA,EACX2nB,MAAM,eAnBN,UAwBA0wC,IACV8D,GAAkBn+D,EAAAA,EAAAA,KAAC0pB,EAAAA,UAAS,CAAC1nB,UAAW8T,EAAQ4nD,cAAe/zC,MAAM,yBAIrE3pB,EAAAA,EAAAA,KAACjd,EAAAA,SAAc,CAAAqd,SACZ+9D,GAIP,EAEAD,EAAoBj8D,aAAe,CACjCo8D,eAAgB,KAChB/D,qBAAsB,KACtBC,8BAA+B,IAiBjC,OAAemE,EAAAA,EAAAA,kBAAgBC,EAAAA,EAAAA,mBAAkBT,EAAqBpB,IC/EtE,SAAS8B,EAAoB9oD,EAASikD,GACpC,OACE/5D,EAAAA,EAAAA,KAAA,QAAMgC,UAAW+C,IAAW,CAAC+Q,EAAQpsB,KAAM,2BAA2B0W,SACnE25D,EAASxxD,SAGhB,CAEA,SAASnE,IAEP,OAAO,CACT,CAEA,IAAMy6D,EAAmB,SAAH10F,GAAA,IACpB2rC,EAAO3rC,EAAP2rC,QAASikD,EAAQ5vF,EAAR4vF,SAAU+E,EAAW30F,EAAX20F,YAAaC,EAAS50F,EAAT40F,UAAS,OAEzCh9D,EAAAA,EAAAA,MAAA,OACEC,UAAW+C,IAAW,CAAC+Q,EAAQ0nD,cAAe,kCAC9Cv3D,MAAO84D,EAAYhF,EAASxxD,QAAU,GAAGnI,SAAA,CAExC0+D,GACC9+D,EAAAA,EAAAA,KAAA,KAAG9U,KAAM4zE,EAAa16D,QAASA,EAAQhE,SACpCw+D,EAAoB9oD,EAASikD,KAGhC6E,EAAoB9oD,EAASikD,GAE9BA,EAASU,SACRz6D,EAAAA,EAAAA,KAAA,OAAKgC,UAAW8T,EAAQkoD,qBAAqB59D,UAC3CJ,EAAAA,EAAAA,KAACg/D,EAAAA,kBAAiB,CAACC,WAAYlF,EAASU,QAASC,SAAUX,EAASW,SAAmCntF,KAAMwsF,EAASxsF,MAApC,wBAC3E,KACP,EAIF2xF,EAAe,SAAH10F,GASX,IARLsrC,EAAOtrC,EAAPsrC,QACAikD,EAAQvvF,EAARuvF,SACAsE,EAAc7zF,EAAd6zF,eAAcc,EAAA30F,EACds0F,YAAAA,OAAW,IAAAK,EAAG,GAAEA,EAAAC,EAAA50F,EAChB60F,iBAAAA,OAAgB,IAAAD,GAAQA,EAAAE,EAAA90F,EACxBu0F,UAAAA,OAAS,IAAAO,GAAQA,EAAAC,EAAA/0F,EACjBg1F,WAAAA,OAAU,IAAAD,EAAG,KAAIA,EAAAE,EAAAj1F,EACjBgvF,UAAAA,OAAS,IAAAiG,GAAQA,EAEXC,EAAiB,CACrB5pD,EAAQknD,aACRjD,EAASK,WACL,CAACtkD,EAAQqnD,qBAAsB,2BAC/BrnD,EAAQinD,aAAa,yCAADtxF,OACiBsuF,EAAS9sF,IAClD,wCAAwC,yCAADxB,OACE4zF,EAAmB,MAAQ,QAGjEtF,EAASM,gBACZqF,EAAehzE,KAAKopB,EAAQonD,wBAExBnD,EAASI,oBACXuF,EAAehzE,KAAKopB,EAAQwnD,iCAIhC,IAAMt7D,EAAY+C,IAAW26D,GAE7B,OACE39D,EAAAA,EAAAA,MAAA,OAEEC,UAAWA,EACX,aAAY+3D,EAASxxD,QACrB4gC,KAAK,OAAM/oC,SAAA,CAEVi/D,IAAoBr/D,EAAAA,EAAAA,KAAA,OAAKgC,UAAW8T,EAAQmoD,eAC5ClE,EAASK,aAAcp6D,EAAAA,EAAAA,KAAA,OAAKgC,UAAW8T,EAAQynD,aAC/CiC,IAAcx/D,EAAAA,EAAAA,KAAA,OAAKgC,UAAW8T,EAAQ2nD,cAAcr9D,SAAEo/D,EAAWzF,OAC/DyF,IAAehG,KAAcx5D,EAAAA,EAAAA,KAAC6+D,EAAgB,CAAC/oD,QAASA,EAASikD,SAAUA,EAAU+E,YAAaA,EAAaC,UAAWA,KAC7H/+D,EAAAA,EAAAA,KAACk+D,EAAmB,CAClB7D,cAAeN,EAASM,cACxBC,qBAAsBP,EAASO,qBAC/B8D,OAAQrE,EAAS9sF,GACjBoxF,eAAgBA,EAChB9D,8BAA+BR,EAASQ,kCACxC,eAAA9uF,OAfkBsuF,EAAS9sF,IAkBnC,EAEAiyF,EAAaj9D,aAAe,CAC1Bo8D,eAAgB,KAChBS,YAAa,GACbO,kBAAkB,EAClBN,WAAW,EACXS,WAAY,KACZhG,WAAW,GAyCb,OAAemF,EAAAA,EAAAA,oBAAkBgB,EAAAA,EAAAA,qBAAoBT,GAAepC,GCjI9DxG,EAAQ,SAAA3uB,GACZ,SAAA2uB,EAAYv2D,GAAQ,IAAD/b,EAMf,OANeC,EAAAA,EAAAA,GAAA,KAAAqyE,IACjBtyE,GAAAG,EAAAA,EAAAA,GAAA,KAAAmyE,EAAA,CAAMv2D,KAgBRipC,SAAW,SAAC42B,GACV,IAAAtmB,EAA4Bt1D,EAAK+b,MAAzB9iB,EAAKq8D,EAALr8D,MAAeq8D,EAARj+D,SAENwkF,OAAO,iDAADp0F,OAAkDm0F,EAAiBr3D,UAE9Eq3D,EAAiBvF,eACnBp9E,EAAM2M,KAAKkwE,EAAY8F,IAEvB57E,EAAKiuB,SAAS,CACZ6tD,yBAA0B,QAG5B97E,EAAKiuB,UAAS,SAAAnzB,GAAK,MAAK,CAEtBghF,yBAA0BhhF,EAAMghF,2BAA6BF,EACzD,KACAA,EACL,GAEL,EAAC57E,EAED+7E,UAAY,SAAC/1E,GACX,GAAIA,EAAM64B,UAAYA,EAAAA,QAAQm9C,IAA9B,CAIA,IAAMC,EAAuBntF,SAASC,cAAc,4BAC/CktF,IAIDj8E,EAAKlF,MAAMohF,+BACbl8E,EAAKm8E,gCACLn8E,EAAKiuB,SAAS,CAAEiuD,+BAA+B,MAE/CD,EAAqBloD,QACrB/zB,EAAKiuB,SAAS,CAAEiuD,+BAA+B,KAZjD,CAcF,EAACl8E,EAEDo8E,OAAS,WACPp8E,EAAKiuB,SAAS,CAAEiuD,+BAA+B,GACjD,EAACl8E,EAEDm8E,8BAAgC,WAC9B,IAAME,EAA2BvtF,SAASC,cAAc,gDACpDstF,GACFA,EAAyBtoD,OAE7B,EAAC/zB,EAEDs8E,2BAA6B,SAACrzF,EAAIguB,GAEhCA,EAAEumB,kBAEFx9B,EAAKiuB,UAAS,SAACnzB,GAEb,OAAIA,EAAMghF,0BAA4B7yF,IAAO6R,EAAMghF,yBAAyB7yF,GACnE,CACL6yF,yBAA0B,MAIvB,CAAC,CACV,GACF,EAAC97E,EAEDu8E,cAAgB,SAAC97D,GACf,IAAQqR,EAAY9xB,EAAK+b,MAAjB+V,QACR,OACE9V,EAAAA,EAAAA,KAAA,OAEEgC,UAAW+C,IAAW,CAAC+Q,EAAQilD,QAAS,8CADnCt2D,EAAKx3B,GAGhB,EAxFE+W,EAAKlF,MAAQ,CACXghF,yBAA0B,KAC1BI,+BAA+B,GAC/Bl8E,CACJ,CAAC,OAAAY,EAAAA,EAAAA,GAAA0xE,EAAA3uB,IAAA9iD,EAAAA,EAAAA,GAAAyxE,EAAA,EAAArsF,IAAA,qBAAA2D,MAED,WACM0V,KAAKyc,MAAMtc,aACZH,KAAKyc,MAAMtc,WAAWy/D,QAEvB5/D,KAAKyc,MAAMtc,WAAWC,MAE1B,GAAC,CAAAzZ,IAAA,SAAA2D,MA8ED,WAAU,IAAD6kC,EAAA,KACP+tD,EASIl9E,KAAKyc,MARP+V,EAAO0qD,EAAP1qD,QACAs/C,EAAOoL,EAAPpL,QACA7nF,EAAIizF,EAAJjzF,KACA2sF,EAAkBsG,EAAlBtG,mBACAmE,EAAcmC,EAAdnC,eACAxI,EAAU2K,EAAV3K,WACA54E,EAAKujF,EAALvjF,MACAu8E,EAASgH,EAAThH,UAEIiH,EAAoB17D,IAAW,CACnC+Q,EAAQ4qD,kBACR,mCACAlH,GAAa1jD,EAAQ6qD,6BAGjBxG,EAAqB,SAAA11D,GAAI,QAC3BgO,EAAK3zB,MAAMghF,0BAA4BrtD,EAAK3zB,MAAMghF,yBAAyB7yF,KAAOw3B,EAAKx3B,EAAG,EAExF2zF,EAAYhG,EAAa/E,EAAYT,EAAS7nF,EAAM2sF,EAAoBC,GACxEyF,EAAmB91F,IAAAA,UAAY82F,EAAW,CAAExG,YAAY,IAE9D,OACEp6D,EAAAA,EAAAA,KAAA,OAAKgC,UAAWy+D,EAAmB,aAAYlzF,EAAKO,UAAUC,aAAmBqyB,UAC/EJ,EAAAA,EAAAA,KAAC6gE,EAAAA,aAAY,CACX33B,WACE,SAAAzkC,GAAI,OACHzE,EAAAA,EAAAA,KAACk/D,EAAY,CACZnF,SAAUt1D,EACVq8D,kBAAmBr8D,EAAKx3B,GACxB8zF,cAAet8D,EAAK8D,QACpBy4D,aAAc7G,EAAmB11D,GACjCw8D,oBAAqB,SAAAhmE,GAAC,OAAIwX,EAAK6tD,2BAA2B77D,EAAKx3B,GAAIguB,EAAE,EACrEojE,eAAgBA,EAChBS,YAAavD,EAAe92D,EAAMxnB,GAClCuiF,WAAY/sD,EAAK1S,MAAMu5D,eACvBE,UAAWA,GACX,EAEJ9xE,KAAMk5E,EACNL,cAAej9E,KAAKi9E,cACpB33B,aAAcg3B,EACdsB,UAAW59E,KAAKxE,MAAMghF,yBACtB92B,SAAU1lD,KAAK0lD,SACfxa,UAAWlrC,KAAKy8E,UAChBK,OAAQ98E,KAAK88E,OACb92B,wBAAsB,EACtBj8B,UAAW9/B,EAAKO,UAAUC,aAE1BozF,SAAUC,EAAAA,aAAaC,QAI/B,IAAC,CApJW,CAASt+E,EAAAA,eAuJvBuzE,EAASr0D,aAAe,CACtBi4D,mBAAoB,KACpBmE,eAAgB,KAChB56E,WAAY,KACZpI,SAAU,CAAEwkF,OAAQ/1F,IAAAA,MACpBwvF,eAAgB,KAChBE,WAAW,GA2BN,IAAM8H,GAAiBC,EAAAA,EAAAA,sBAAoBC,EAAAA,EAAAA,mBAAiB7C,EAAAA,EAAAA,mBACjErI,GCxM+B,SAACmL,EAAQt3F,GAAA,IAAAisC,EAAAjsC,EAAIksC,QAAAA,OAAO,IAAAD,EAAG,CAAC,EAACA,EAAA,MAAQ,CAChEsqD,kBAAmB,CACjBvT,WAAY,EACZ/+C,MAAO,OACPyxC,gBAAiBxpC,EAAQq2C,eACzBE,YAAY,aAADnhF,OAAe4qC,EAAQw4C,sBAClCjpC,SAAU,WACV/qC,IAAK,EACLwqD,OAAQ,EACRgnB,UAAW,SACXD,UAAW,SACX,UAAW,CACTA,UAAW,QAEb,wBAAyB,CACvBh+C,MAAO,IACPwX,SAAU,WACV,UAAW,CACTrX,QAAQ,aAAD9iC,OAAe4qC,EAAQ61C,kBAC9BgD,eAAgB,GAElB,UAAW,CACT9gD,MAAO,QACPgH,OAAQ,WAId2lD,QAAS,CACP3sD,MAAO,OACPq+C,UAAU,aAADhhF,OAAe4qC,EAAQw4C,uBAElC8R,2BAA4B,CAC1B,wBAAyB,CACvBvyD,MAAO,KAGZ,MC9BKszD,EAAkB,SAAA/5B,GACtB,SAAA+5B,EAAY3hE,GAAQ,IAAD/b,EAKhB,OALgBC,EAAAA,EAAAA,GAAA,KAAAy9E,IACjB19E,GAAAG,EAAAA,EAAAA,GAAA,KAAAu9E,EAAA,CAAM3hE,KAOR4hE,WAAa,SAAC/vD,GACR5tB,EAAK49E,4BAA8BhwD,GACrC5tB,EAAK49E,2BAA2BhwD,IAEpC,EAVM7R,EAAM8hE,gBACR79E,EAAK49E,2BAA6B7hE,EAAM8hE,cAAc/8E,YAAY,uBAClEd,EAAK29E,WAAW,aACjB39E,CACH,CAAC,OAAAY,EAAAA,EAAAA,GAAA88E,EAAA/5B,IAAA9iD,EAAAA,EAAAA,GAAA68E,EAAA,EAAAz3F,IAAA,SAAA2D,MAQD,WAGE,OAFA0V,KAAKq+E,WAAW,eAGd3hE,EAAAA,EAAAA,KAACshE,GAAc12F,EAAAA,EAAAA,GAAA,CACb6Y,WAAYH,KAAKs+E,2BACjB1H,mBAAoB52E,KAAKyc,MAAMm6D,mBAC/BmE,eAAgB/6E,KAAKyc,MAAMs+D,gBACvB/6E,KAAKyc,OAGf,IAAC,CA1BqB,CAAShd,EAAAA,eAqCpB++E,GAAiCC,EAAAA,EAAAA,GAAuBL,G,8HCf/D9xF,GAAU,CACd,CAAE3F,IAAK,OAAQqG,KAAM,OAAQ0xF,UAAW,SAG1C,SAASC,GAA2BliE,GAClC,IACE+V,EAUE/V,EAVF+V,QACAs/C,EASEr1D,EATFq1D,QACA7nF,EAQEwyB,EARFxyB,KACA2sF,EAOEn6D,EAPFm6D,mBACAmE,EAMEt+D,EANFs+D,eACAxI,EAKE91D,EALF81D,WACA54E,EAIE8iB,EAJF9iB,MACAy3E,EAGE30D,EAHF20D,eACAvoF,EAEE4zB,EAFF5zB,YACA+D,EACE6vB,EADF7vB,cAEF0B,GAA8DC,EAAAA,EAAAA,WAAS,GAAKC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAArEswF,EAAuBpwF,EAAA,GAAEqwF,EAA0BrwF,EAAA,GACpDswF,EAAoBriE,EAAMzO,GAAAA,oBAAoBof,eAAiB3Q,EAAMzO,GAAAA,oBAAoBof,cAAc9iC,OAASmyB,EAAMzO,GAAAA,oBAAoBof,cAAc9iC,MAAMmH,MAC9J5J,EAAei3F,GAAqBA,EAAkB1xD,cAAgB0xD,EAAkB1xD,aAAa8D,IAAI,GAE7G6tD,GACEl2F,GAAeA,EAAYihB,SAD7Bi1E,+BAEIhnF,GAAWinF,EAAAA,EAAAA,YAAWC,EAAAA,iBACtB3B,EAAYhG,EAAa/E,EAAYT,EAAS7nF,EAAM2sF,GAAoB,kBAAM,CAAK,IACnFxmD,EAAQumD,EAAe0B,EAAkBiF,EAAWlM,GAAiBnnF,EAAM2sF,GAAoB,kBAAM,CAAK,IAC1G8B,EAASW,EAAuBiE,EAAWltD,EAAOghD,GAClD8N,EPsGsB,SAACxG,EAAQtoD,GAAK,OAAK5pC,IAAAA,OAASkyF,GAAQ,SAACwG,EAAa3H,GAC9E,OAAoB,IAAhBA,EAAM//E,MACF,GAANrP,QAAA+W,EAAAA,EAAAA,GAAWggF,GAAW,CAAE14F,IAAAA,OAAS,CAAC,EAAG4pC,EAAMmnD,EAAMuB,YAAa,CAAEqG,SAAU5H,EAAMgC,UAE3E2F,CACT,GAAG,GAAI,CO3GeE,CAAe1G,EAAQtoD,GACrCivD,EAAkBp1F,EAAKO,UAAUC,UACjC60F,EAAoBr1F,EAAKO,UAAUC,YACnCi7D,EAAW,SAAAvkC,GAAI,OAAI,SAACza,EAAO64E,GAC/B,IAAmB,UAAf74E,EAAMrT,MAAoBqT,EAAM64B,UAAYA,EAAAA,QAAQigD,UAIxDC,EAAAA,GAAAA,eAAc,CAAElO,mBAAoB,SACpC7qE,EAAMy3B,iBACDohD,GACHxnF,EAASwkF,OAAO,gDAADp0F,OAAiDg5B,EAAKx3B,KAEnEw3B,EAAK41D,eAAe,CACtB,IAAMmB,EAAgBR,EAAiBv2D,EAAMxnB,GAC7CA,EAAM2zC,IAAI4qC,GACVv+E,EAAM2M,KAAKkwE,EAAYr1D,GACzB,CACF,CAAE,EA2BIu+D,EAAmB,SAAAC,GAAS,OAAI,WACpC5nF,EAASwkF,OAAO,6BAADp0F,SAAgCw3F,EAAUpI,MAAM6B,cAC/DuG,EAAUD,iBAAiBC,EAAUpI,MACvC,CAAE,EAEIqI,EAAqB,SAAAD,GAAS,OAAI,SAAChoE,GACvC5f,EAASwkF,OAAO,+BAADp0F,OAAgCw3F,EAAUpI,MAAMgC,QAC3DoG,EAAUpI,MAAMT,WAClB6I,EAAUD,iBAAiBC,EAAUpI,OAErC7xB,EAASt1B,EAAMuvD,EAAUpI,MAAMuB,YAA/BpzB,CAA4C/tC,GAAG,EAEnD,CAAE,EAqFIwlE,EAAoB17D,IAAW,CACnC+Q,EAAQ4qD,kBACR5qD,EAAQqtD,oBACR,qCAGF,OACEnjE,EAAAA,EAAAA,KAAA,OAAKgC,UAAWy+D,EAAmB,aAAYlzF,EAAKO,UAAUC,aAAmBqyB,UAC/EJ,EAAAA,EAAAA,KAAA,OAAKgC,UAAU,wBAAuB5B,UACpCJ,EAAAA,EAAAA,KAACojE,GAAAA,EAAW,CACV1vD,MAAOA,EACPsoD,OAAQA,EACRqH,WAAY,CACVC,eAhGkB,SAACL,GAC3B,GAAIA,GAAaA,EAAUpI,MAAO,CAChC,GAAIoI,EAAUpI,MAAM//E,MAAQ,EAAG,CAC7B,IAAQ+/E,EAAUoI,EAAVpI,MACF0I,EAAY1I,EAAM6B,YAAciG,EAAkBC,EAClDY,EAAuB1wF,SAASC,cAAc,oDAAuDD,SAASC,cAAc,mDAAmD0wF,aAAe,EAC9LC,EAAcxzF,GAAiBA,EAAcyzF,WAAazzF,EAAcyzF,UAAUD,YAAe,QACjGE,EAAYF,GAAcA,EAAWn0F,SAAS,KAAQm0F,EAAWG,MAAM,KAAK,GAAK,KAEvF,OACE9hE,EAAAA,EAAAA,MAAA,OACEC,UAAW+C,IAAW,CAAC+Q,EAAQguD,oBAAqBjJ,EAAMT,WAAatkD,EAAQiuD,4BAA8B,GAAIlJ,EAAMT,WAAa,WAAa,GAAI,wCAAwC,iDAAD3uF,OAAmDovF,EAAMgC,SACrP52D,MAAO40D,EAAMvqF,KAAK8vB,SAAA,EAElBJ,EAAAA,EAAAA,KAACkN,EAAAA,EAAU,CACTC,UAAW,CAAEC,SAAUytD,EAAM6B,YAAc,eAAiB,kBAC5DrvD,UAAWk2D,EACXn/D,QAAS4+D,EAAiBC,GAC1BjhE,UAAW+C,IAAW,CACpB+Q,EAAQkuD,wBACRnJ,EAAM6B,YAAc,GAAK5mD,EAAQmuD,4BACjCpJ,EAAM6B,YAAc,eAAiB,mBAEvC,iBAAgB7B,EAAM6B,eAExB18D,EAAAA,EAAAA,KAACsK,EAAAA,EAAI,CACH6+B,KAAK,SACL/kC,QAAS8+D,EAAmBD,GAC5BjhE,UAAW+C,IAAW,CAAC,yCAADt5B,OAA0CovF,EAAMgC,OAAS,yBAA0B/mD,EAAQouD,6BACjH,iBAAgBrJ,EAAM6B,YAAYt8D,SAEjCy6D,EAAMvqF,OAER+xF,GAAkCl3F,GAAgBA,EAAaoE,SAAS,YAAc2yF,GAA2BsB,GAAwC,aAAhB3I,EAAMgC,QAChJ78D,EAAAA,EAAAA,KAACmkE,GAAAA,eAAc,CACb3xE,YAAY,2BACZyT,MAAO14B,EAAKO,UAAUC,0DACtBw6B,QAASh7B,EAAKO,UAAUC,kPACxBq2F,OAAQ,WAAQjC,GAA2B,GAAQjpF,OAAOmrF,KAAK,4CAAD54F,OAA6Cm4F,EAAQ,kBAAAn4F,OAAiBi4F,EAAU,sBAAuB,EACrKn/B,UAAW,WAAQ49B,GAA2B,EAAQ,EACtDn5D,QAAS,WAAQm5D,GAA2B,EAAQ,EACpDmC,kBAAmB/2F,EAAKO,UAAUC,cAClCw2F,cAAc,kDACdC,gBAAiBC,GAAAA,gBAAgBC,oBAKzC,CAEA,OAAKzB,EAAUpI,MAAMvqF,MASd0vB,EAAAA,EAAAA,KAAA,OAAKgC,UAAW8T,EAAQ6uD,iCAP3B3kE,EAAAA,EAAAA,KAAA,OAEEgC,UAAW+C,IAAW,CAAC+Q,EAAQilD,QAAS,8CADnCkI,EAAUpI,MAAM5wF,IAO7B,CACA,OAAO,IACT,GAoCQ2F,QAASA,GACTg1F,cAAeC,GAAAA,GAAcC,KAC7BC,iBAAiB,EACjBC,mBA5ImB,SAACvgE,GAC1B,GAAkB,YAAdA,EAAK9tB,KACP,OAAO,KAGT,IAAMsuF,EAAan7F,IAAAA,UAAY04F,EAAa/9D,GACxCykC,EAAazkC,EAKjB,OAJIwgE,IACF/7B,EAAap/D,IAAAA,UAAY82F,EAAW,CAAE3zF,GAAIg4F,EAAWxC,aAIrDziE,EAAAA,EAAAA,KAAA,OAAKgC,UAAW8T,EAAQinD,aAAa38D,UACnCJ,EAAAA,EAAAA,KAACk/D,EAAY,CACXnF,SAAU7wB,EACVm1B,eAAgBA,EAChBS,YAAavD,EAAeryB,EAAYjsD,GACxCoiF,kBAAmB4F,EACnBlG,WAAS,EACTgC,cAAe73B,EAAW3gC,WAIlC,EAsHQ28D,YAtCY,SAACC,GACnB,IAAMF,EAAan7F,IAAAA,UAAY04F,EAAa2C,EAAS1gE,MACjDykC,EAAai8B,EAAS1gE,KAK1B,OAJIwgE,IACF/7B,EAAap/D,IAAAA,UAAY82F,EAAW,CAAE3zF,GAAIg4F,EAAWxC,aAG/CziE,EAAAA,EAAAA,KAAColE,GAAAA,GAAUx6F,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACbu6F,GAAQ,IACZnjE,UAAW+C,IAAW,CACpB+Q,EAAQuvD,YACR,8BAEFjhE,QAAS4kC,EAASE,GAClB1a,UAAWwa,EAASE,GACpBC,KAAK,QAET,EAsBQl4C,SAAO,EACPq0E,mBAAiB,EACjBC,YAAa,GACbr2D,OAAQ,CACNT,KAAM,CACJoxC,gBAAiB,WAEnB2lB,cAAe,CACb3lB,gBAAiB,WAEnB4lB,eAAgB,CACd5lB,gBAAiB,YAGrB6lB,UAAW,CACT1jE,UAAW+C,IAAW,CACpB+Q,EAAQ6vD,KACR,gCAGJx8B,KAAK,gBAKf,CAsBA84B,GAA2BhgE,aAAe,CACxCi4D,mBAAoB,KACpBmE,eAAgB,KAChB56E,WAAY,MAGP,IAAMoxE,IAAqBkN,EAAAA,EAAAA,IAAuBP,EAAAA,EAAAA,mBAAiB7C,EAAAA,EAAAA,mBACxEsD,IC/Q+B,SAACR,EAAQt3F,GAAA,IAAAisC,EAAAjsC,EAAIksC,QAAAA,OAAO,IAAAD,EAAG,CAAC,EAACA,EAAA,MAAQ,CAChEsqD,kBAAmB,CACjBvT,WAAY,EACZ/+C,MAAO,OACPyxC,gBAAiBxpC,EAAQq2C,eACzBE,YAAY,aAADnhF,OAAe4qC,EAAQw4C,sBAClCjpC,SAAU,WACV/qC,IAAK,EACLwqD,OAAQ,EACRgnB,UAAW,SACXD,UAAW,SACX,UAAW,CACTA,UAAW,QAEb,wBAAyB,CACvBY,QAAS,EACTl0E,SAAU,KAEZ,uBAAwB,CACtBs1B,MAAO,MACPyxC,gBAAiB,eAEnB,6BAA8B,CAC5BA,gBAAiB,eAEnB,6BAA8B,CAC5BC,aAAc,OACdD,gBAAiB,WAEnB,oCAAqC,CACnCuN,WAAY,WAEd,yCAA0C,CACxCnC,UAAW,GAEb,sEAAuE,CACrEhhD,aAAc,IAGlB8wD,QAAS,CACP3sD,MAAO,OACPq+C,UAAU,aAADhhF,OAAe4qC,EAAQw4C,sBAChC,UAAW,CACT76C,QAAS,SAGbmvD,oBAAqB,CACnBtW,YAAa,GAEf8Y,KAAM,CACJ9lB,gBAAiBxpC,EAAQq2C,gBAE3BqQ,aAAc,CACZ,4BAA6B,CAC3B5R,SAAU,IAEZ,6BAA8B,CAC5BtL,gBAAiBxpC,EAAQ4mD,cAE3B,2CAA4C,CAC1CnQ,aAAc,GAEhB,mCAAoC,CAClCX,WAAY,GACZY,WAAY,UAEd,UAAW,CACT3+C,MAAO,QACPgH,OAAQ,UAGZ0uD,oBAAqB,CACnB9W,QAAS,qBACT7B,SAAU,GACVC,WAAY,IACZp3C,QAAS,OACTw3C,WAAY,SACZ,uBAAwB,CACtBpf,MAAO/1B,EAAQ62C,eACf2D,eAAgB,OAChB,4CAA6C,CAC3CzkB,MAAO,eAGX,UAAW,CACTyT,gBAAiBxpC,EAAQ4mD,aACzBpM,eAAgB,QAElB,oCAAqC,CACnChR,gBAAiBxpC,EAAQw4C,qBACzBgC,eAAgB,SAGpBkT,4BAA6B,CAC3B3Y,WAAY,KAEduZ,8BAA+B,CAC/B,EACAX,wBAAyB,CACvB51D,MAAO,GACPgH,OAAQ,GACRiO,YAAa,EACb,MAAO,CACL8nC,SAAU,EACV/e,MAAO/1B,EAAQ62C,iBAGnBgX,2BAA4B,CAC1B/T,UAAW,QAEb8T,4BAA6B,CAC3B,MAAO,CACLl6D,UAAW,IAGfs7D,YAAa,CACXxlB,gBAAiBxpC,EAAQq2C,eACzB,wBAAyB,CACvB9mC,SAAU,WAGf,K,4VCjHKq3B,EAAch8B,EAAAA,QAAUjoC,IAAI,eAC5B4sF,EAAgC97F,IAAAA,OAASmzE,EAAY7vD,QAAS,wBAC9Dy4E,EAAqB/7F,IAAAA,OAASmzE,EAAY7vD,QAAS,aACnD04E,EAA8Bh8F,IAAAA,OAASmzE,EAAY7vD,QAAS,sBAGhE+jD,EAEE8L,EAFF9L,sCACsB40B,EACpB9oB,EADF+oB,qBAGWC,EAAsB,CACjC31F,KAAM,SACNw3B,SAAUh+B,IAAAA,QAAU,CAClB,SACAi8F,GAAkB,2BAITG,EAAgB,CAC3B51F,KAAM,UACNw3B,SAAU,CAAC,OAAQ,KAAM,SAAU,aAAc,cAAe,8BAGrDq+D,EAAiB,CAC5B71F,KAAM,WACNw3B,SAAUh+B,IAAAA,QAAU,CAClB,gBACA,cACAi8F,GAAkB,+BAGTK,EAAgB,CAC3B91F,KAAM,UACNw3B,SAAU,CAAC,eAAgB,eAGhBu+D,EAAwB,CACnC/1F,KAAM,kBACNw3B,SAAU,4BAGCw+D,EAAwB,CACnCh2F,KAAM,kBACNw3B,SAAU,8BAGCy+D,EAAY,CACvBj2F,KAAM,MACNw3B,SAAU,CAAC,aACT,0BACA,wBACA,uBACA,6BACA,cACA,eAGS0+D,EAAkB,CAC7Bl2F,KAAM,YACNw3B,SAAUh+B,IAAAA,QAAU,CAClB,aACC+7F,GAAsBC,IAAgC,uCAG9CW,EAAiB,CAC5Bn2F,KAAM,WACNw3B,SAAU,CAAC,iBACT,wBACA,eACA,iCACA,0BACA,cACA,OAGS4+D,EAAqB,CAChCp2F,KAAM,eACNw3B,SAAU,gBAGC6+D,EAAoB,CAC/Br2F,KAAM,cACNw3B,SAAU,CAAC,iBAAkB,YAAa,oBAG/B8+D,EAAyB,CACpCt2F,KAAM,mBACNw3B,SAAU,uBAGC++D,EAAyB,CACpCv2F,KAAM,mBACNw3B,SAAU,uBAGCg/D,EAAuB,CAClCx2F,KAAM,iBACNw3B,SAAU,kBAGCi/D,EAAe,CAC1Bz2F,KAAM,SACNw3B,SAAU,UAGCk/D,EAAe,CAC1B12F,KAAM,SACNw3B,SAAU,UAGCm/D,EAAe,CAC1B32F,KAAM,SACNw3B,SAAU,UAGCo/D,EAA+B,CAC1C52F,KAAM,yBACNw3B,SAAU,sCAGCq/D,EAA8B,CACzC72F,KAAM,wBACNw3B,SAAU,qCAGCs/D,EAAkC,CAC7C92F,KAAM,4BACNw3B,SAAU,yCAGCu/D,EAAkB,CAC7B/2F,KAAM,YACNw3B,SAAU,MAGCw/D,EAAe,CAC1Bh3F,KAAM,SACNw3B,SAAU,UAGCy/D,EAAmB,SAAHp9F,GAAmB,IAAb8S,EAAK9S,EAAL8S,MACzBlF,EAA0BkF,EAA1BlF,WAAY8G,EAAc5B,EAAd4B,UAQpB,OAP0B/U,IAAAA,QAAU,CAClC,SACA,WACCiO,GAAc,YACd8G,GAAa,UACd,aAGJ,EAEa2oF,EAAqB,SAAHh9F,GAAmB,IAAbyS,EAAKzS,EAALyS,MAC3BlF,EAA0BkF,EAA1BlF,WAAY8G,EAAc5B,EAAd4B,UAsBpB,OArB4B/U,IAAAA,QAAU,CACpCm8F,EACAC,GACCnuF,GAAcouF,GACdtnF,GAAaunF,EACdR,GAAiCS,EACjCC,EACAG,EACAF,EACAC,EACAc,EACAG,EAAAA,GACA,SACA,cACA,MACA,aACA,QACA,kBACAt2B,GAAyC,oBACzCA,GAAyC,6BAG7C,EAEO,SAASu2B,EAAaz8F,GAAgB,IAAbsjE,EAAQtjE,EAARsjE,SACxBo5B,EAAc,CAClB1B,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAG,EAAAA,IAEIG,GAAmBC,EAAAA,EAAAA,KAAsBC,EAAAA,EAAAA,IAAsBv5B,IAC/D3+D,EAAO,GAAAnE,OAAOk8F,GAAWnlF,EAAAA,EAAAA,GAAKolF,IACpC,OAAO99F,IAAAA,OAASA,IAAAA,IAAM8F,GAAS,SAAAhB,GAAM,MAAI,CAACA,EAAO0B,KAAM1B,EAAOk5B,SAAS,IACzE,C,+GCnNMigE,EAAW,CACf/uF,IAAKlP,IAAAA,SACLgE,UAAWhE,IAAAA,SACX6M,KAAM7M,IAAAA,SACNk+F,KAAMl+F,IAAAA,SACN8D,MAAO9D,IAAAA,SACPm+F,iBAAkBn+F,IAAAA,SAClBo+F,gBAAiBp+F,IAAAA,SACjBq+F,iBAAkBr+F,IAAAA,SAClBs+F,SAAUt+F,IAAAA,SACVg+B,SAAUh+B,IAAAA,UAENu+F,EAAY,CAChB96F,KAAMw6F,EACNvmE,QAASumE,EACTO,iBAAkBP,EAClBQ,mBAAoBR,GAIf,SAASS,EAAer+F,GAM3B,IALFgS,EAAMhS,EAANgS,OACA8kC,EAAS92C,EAAT82C,UACA7wB,EAAYjmB,EAAZimB,aACAq4E,EAAkBt+F,EAAlBs+F,mBACGC,GAAUnT,EAAAA,EAAAA,GAAAprF,EAAAqrF,GAGb1rF,IAAAA,UAAYu+F,GAAW,SAACr4F,EAAK/F,GACvBy+F,EAAWz+F,KACbo+F,EAAUp+F,GAAOy+F,EAAWz+F,GAEhC,IACA,IAAM0+F,GAAeC,EAAAA,EAAAA,KAAqBh+F,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EACvCy9F,GACAK,GAAU,IACbG,OAAQ,CAAC,EACTz4E,aAAAA,EACAq4E,mBAAAA,EACAK,UAAW,CACT3nD,YAAaknD,EAAU96F,KAAKO,UAAU,gCACtCi7F,eAAgB,OAChBC,eAAgB,YAChBC,UAAW74E,EAAaK,WAAW5G,KAAKo/E,WAE1Cz2E,YAAa,cACbrW,OAAAA,EACA+sF,aAAcjoD,EACdkoD,yBAAyB,EACzBC,gCAAgC,EAChCC,wBAAwB,EACxBC,SAAU,CAAC,CACT51D,MAAO,CACL,CACEhqB,KAAM2+E,EAAU96F,KAAKO,UAAU,cAC/BF,MAAO,MAET,CACE8b,KAAM2+E,EAAU96F,KAAKO,UAAU,qBAC/BF,MAAO,CAAC,kCAGZk6B,SAAU,SACVyhE,WAAW,EACXC,aAAc,UAGlB,GAAInB,EAAU7mE,QAAS,CAErB,IAAMioE,EAA2Bd,EAAav4E,aAAaK,WAAWi5E,yBAClED,IAA6BA,EAAyBE,YACxDF,EAAyBE,WAAYC,EAAAA,EAAAA,IAAsCvB,EAAU7mE,SACrFioE,EAAyB9yF,KAAO,SAEpC,CACA,OAAOgyF,CACT,C,0YClDMZ,GAAW,CACfj6F,UAAWhE,IAAAA,UAEPykE,GAAW,sBACX8G,GAAe,WACfw0B,GAAuB,4BACvBC,IAAsB,EACrB,SAASC,GAAmB5/F,GAM/B,IALF6/F,EAAc7/F,EAAd6/F,eACA/sF,EAAK9S,EAAL8S,MACAgtF,EAAW9/F,EAAX8/F,YACA7oF,EAAiBjX,EAAjBiX,kBACGsnF,GAAUnT,EAAAA,EAAAA,GAAAprF,EAAAqrF,IAEPvY,EAAch8B,EAAAA,QAAUjoC,IAAI,eAClCkxF,EAAyBjtB,EAAjB7vD,QAAAA,OAAO,IAAA88E,EAAG,CAAC,EAACA,EAEAxzE,EAEhBtJ,EAFFuJ,iBACAwzE,EACE/8E,EADF+8E,4CAGIC,EAAeN,GAAsB,CACzC/0F,MAAO,CACLs1F,2BAA2B,GAE7Bn3E,oBAAoBo3E,EAAAA,GAAAA,IAAkBrpD,EAAAA,UACpC,CAAC,EAECspD,EAAezgG,IAAAA,OAAS,CAC5BgS,WAAYmB,EAAMxN,OAAO+K,IACzBuB,UAAWkB,EAAMxN,OAAOqI,IACxBC,WAAYkF,EAAMxN,OAAOsI,WACzB8G,UAAW5B,EAAMxN,OAAOoP,WACvB5B,GAECstF,EAAa1rF,WACfC,EAAAA,EAAM8xC,IAAI,cAAe25C,EAAaxyF,YACtC+G,EAAAA,EAAM8xC,IAAI,aAAc25C,EAAa1rF,YAC5B0rF,EAAaxyF,YACtB+G,EAAAA,EAAM8xC,IAAI,cAAe25C,EAAaxyF,YACtC+G,EAAAA,EAAM0rF,MAAM,gBAEZ1rF,EAAAA,EAAM0rF,MAAM,eACZ1rF,EAAAA,EAAM0rF,MAAM,eAGd,IAAIC,EAAY71F,EAAAA,QAAIC,eAChB01F,EAAa1rF,UACf4rF,EAAY71F,EAAAA,QAAI81F,eACPH,EAAaxyF,aACtB0yF,EAAY71F,EAAAA,QAAIK,iBAGlB,IAGI01F,EACAC,EAJEv2F,EAAYo2F,EAAUp1F,SAAS,oBAE7Bw1F,EAAqC5tB,EAAY7vD,QAAjDy9E,iCAGJrqF,EAAa,CACf7J,KAAM,SACNwvB,OAAQhqB,EAAAA,QAAOqU,QACfs6E,WAAY,KACZ/1F,MAAO,CAAC,EACRhI,QAAS,CACPsH,UAAWo2F,EAAUp1F,SACrB01F,eAAe,EACfC,aAAa,EACbC,SAAOtoF,EAAAA,EAAAA,GAAA,GACJknF,IAAuB,KAe9B,GAVIG,GAAkBa,IACpBF,EAAqBO,GAAAA,EAAgBlyF,IAAIgxF,MAIvCxpF,EAAamqF,EAAmBnqF,WAEhCoqF,EAAgBD,EAAmBC,gBAGlCZ,IAAmBa,IAAqCF,EAAoB,CAC/E,IAAMhC,EAAeH,GAAe59F,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EACjC89F,GAAU,IACb9zF,IAAAA,EAAAA,QACAqI,MAAAA,EACAd,OAAAA,EAAAA,QACA8kC,UAAAA,EAAAA,QACAkqD,aAAAA,GAAAA,EACA/6E,aAAcI,GAAAA,QACd46E,aAAAA,GAAAA,QACAC,uBAAAA,GACAjqF,kBAAAA,EACAkqF,uBAAwBA,GAAAA,WACxBC,mBAAAA,GAAAA,WAGFX,EAAgB,IAAIY,GAAAA,cAAc7C,EACpC,CAEA,MAAO,CACLgC,mBAAAA,EACAnqF,WAAAA,EACAoqF,cAAAA,EACAa,aAAc,CACZC,WAAY5hG,IAAAA,QAAU,CACpB,CACEwG,KAAM,gBACNq7F,WAAYjE,EAAc,CAAEn5B,SAAAA,GAAUtxD,MAAOstF,IAC7CqB,eAAgBpE,EAAmB,CAAEj5B,SAAAA,GAAUtxD,MAAOstF,IACtDsB,cAAetE,EAAiB,CAAEh5B,SAAAA,GAAUtxD,MAAOstF,IACnDuB,kCAAkC,EAClCC,qBAAsB9uB,EAAY+uB,oCAClCx+E,sCAAuCyvD,EAAYzvD,sCACnDy+E,qBAAsB,CACpB,2BACA,2BACA,uCAGJ,CAAE37F,KAAM,cACR,CAAEA,KAAM,WACR,CAAEA,KAAM,aAAc47F,gBAAiB,IACvC,CAAE57F,KAAM,WACR,CAAEA,KAAM,SAAUs6F,cAAAA,GAClB,CAAEt6F,KAAM,qBAAsB+D,UAAAA,GAC9B81F,GAA+C,CAC7C75F,KAAM,sBACN+D,UAAAA,EACAwyE,UAAW/nE,EAAAA,EACXiK,aAAWne,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAOme,GAAAA,GAAW,IAAEssD,aAAAA,KAC/B2H,iBAAkB,IAAIzJ,GAAAA,GAAiB,CAAEhmE,KAAMw6F,GAAU57F,YAAa8wE,IACtEkvB,sBAAuB,IAAI1lC,GAAAA,EACzBC,GAAAA,MACAzlB,EAAAA,QACA+H,GAAAA,QACAojD,GAAAA,QAAAA,aAAqCpxF,MAAK,kBAAMC,IAAAA,aAAqBmxF,GAAAA,QAAwB,QAInGC,cAAYzhG,EAAAA,EAAAA,GAAA,CACV4nB,YAAa+7C,GACbu7B,oBAAAA,GACA7oD,UAAAA,EAAAA,QACAqrD,SAAUxtF,EAAAA,EACVoF,KAAM,CACJ9F,SAAAA,EAAAA,EACAU,MAAAA,EAAAA,EACAytF,wBAAAA,GACAC,uBAAwBnB,GACxBoB,uBAAAA,GACAC,sBAAAA,GAAAA,sBACAC,cAAAA,GAAAA,GAEFj2E,0BAAAA,GACGA,EAA4B,CAC7Bk2E,mBAAmBC,EAAAA,GAAAA,IAAwBt+B,GAAU0O,IACnD,CAAC,GAEPgtB,YAAAA,EACAG,aAAAA,GAGN,C,wEC1LO,SAAS0C,GAAa3iG,GAGzB,IAFFokE,EAAQpkE,EAARokE,SACGm6B,GAAUnT,EAAAA,EAAAA,GAAAprF,EAAAqrF,IAKLpoE,EADY6zB,EAAAA,QAAUjoC,IAAI,eAC1BoU,QACAy9E,EAAqCz9E,EAArCy9E,iCACR,GAAIt8B,IAAas8B,EAAkC,CACjD,IAAMF,EAAqBO,GAAAA,EAAgBlyF,IAAIu1D,GAC/C,GAAIo8B,EACF,OAAOA,CAEX,CAEA,IAAQR,EAAgD/8E,EAAhD+8E,4CACF4C,EAAkBhD,IAAmBn/F,EAAAA,EAAAA,GAAC,CAC1Co/F,eAAgBz7B,GACbm6B,IAEL,GAAIqE,EAAgBpC,mBAClB,OAAOoC,EAAgBpC,mBAEzB,IAAQn4E,EAAgBu6E,EAAgBtB,aAAaY,aAA7C75E,YACFi5E,EAAeuB,GAAAA,GAAoBC,KAAKF,EAAgBtB,cACxDyB,EAAcC,GAAAA,EAAkBF,KAAKF,EAAgBvsF,YACrDA,GAAa4sF,EAAAA,GAAAA,GACjBL,EAAgBvsF,WAChBirF,EACAj5E,EACA0uB,GAAAA,SACA,EACAipD,GAEF3pF,EAAW0sF,YAAcA,EACzB1sF,EAAW2lB,OAAShqB,EAAAA,QAAO9G,SAC3B,IAAQu1F,EAAkBmC,EAAlBnC,cAER,GAAKC,EAEE,CACL,IAAMwC,EAAmB,CACvB7sF,WAAAA,EACAoqF,cAAAA,GAGFM,GAAAA,EAAgBt6C,IAAIp+B,EAAa66E,EACnC,MAREnC,GAAAA,EAAgBt6C,IAAIp+B,EAAahS,GASnC,MAAO,CAAEA,WAAAA,EAAYoqF,cAAAA,EACvB,C,yBC3DA,IAAI0C,EAAM,EAAQ,QAgIlBC,EAAOC,QA9HP,SAAkBC,GAAS,IAAoCC,EAAhCC,EAAW,GAAIC,EAAa,CAAC,EAAmBC,EAAmBJ,GAAU,CAAC,EA6H4C,OA7HxC,SAAU7/F,GAAQggG,EAAuB,WAAIF,EAAa,SAASjpE,GACvKnhB,MAAQA,KAAKwqF,MAAsBxqF,MAAQA,KAAKoD,WAA7D,IACIhS,EAAiC,eAAlB+vB,EAAK9b,SACpB8c,EAA8B,YAAlBhB,EAAK9b,SACjB+c,EAAwBjB,EAAKiB,sBAC7BD,EACAhB,EAAKpc,SAAWqd,EAAsBE,OAC1C+nE,EAAWA,+CAAqEL,EAAIzmF,KAAK,QAAS4d,EAAKl3B,KAAKO,UAAU,wBAAwB,GAAM,GAAS,UAGzJ22B,EAAKpc,SAAWqd,EAAsBG,QAC1C8nE,EAAWA,sCAA4DL,EAAIzmF,KAAK,QAAS4d,EAAKl3B,KAAKO,UAAU,0BAA0B,GAAM,GAAS,UAGlJ22B,EAAKpc,SAAWqd,EAAsBI,UAC1C6nE,EAAWA,mDAAyEL,EAAIzmF,KAAK,QAAS4d,EAAKl3B,KAAKO,UAAU,yBAAyB,GAAM,GAAS,WAI7J4G,IACLi5F,GAAsB,uBACF,YAAhBlpE,EAAKpc,OACLoc,EAAK2Y,aACTuwD,GAAsB,6CAGtBA,GAAsB,yCAIF,WAAhBlpE,EAAKpc,OACLoc,EAAK2Y,aACTuwD,GAAsB,6CAGtBA,GAAsB,wCAIF,cAAhBlpE,EAAKpc,OACLoc,EAAK2Y,aACTuwD,GAAsB,6CAGtBA,GAAsB,2CAIF,UAAhBlpE,EAAKpc,OACLoc,EAAK2Y,aACTuwD,GAAsB,6CAGtBA,GAAsB,uCAIF,YAAhBlpE,EAAKpc,OACTslF,GAAsB,yCAGlBlpE,EAAK2Y,aACTuwD,GAAsB,6CAGtBA,GAAsB,yCAGtBA,GAAsB,UAEtBA,EAAWA,EAAW,MAAaL,EAAIzmF,KAAK,OAAQ4d,EAAK/b,MAAM,GAAM,GAAM4kF,EAAIzmF,KAAK,QAAS4d,EAAKyB,YAAc,GAAKzB,EAAKn0B,MAAM,GAAM,GAAMg9F,EAAIzmF,KAAK,aAAc4d,EAAKl3B,KAAKO,UAAU,GAAG22B,EAAK1Z,uBAAwB,CAACob,OAAQ1B,EAAKn0B,QAAQ,GAAM,GAAMg9F,EAAIzmF,KAAK,kBAAmB4d,EAAK1sB,YAAY,GAAM,GAAMu1F,EAAIzmF,KAAK,iBAAkB4d,EAAK5lB,WAAW,GAAM,GAAMyuF,EAAIzmF,KAAK,iBAAkB4d,EAAK1oB,WAAW,GAAM,GAAMuxF,EAAIzmF,KAAK,YAAa4d,EAAK9b,UAAU,GAAM,GAAM2kF,EAAIzmF,KAAK,YAAa4d,EAAK/a,MAAM,GAAM,GAAM4jF,EAAIzmF,KAAK,uBAAwB4d,EAAKv5B,iBAAiB,GAAM,GAAMoiG,EAAIzmF,KAAK,oBAAqB4d,EAAKt5B,cAAc,GAAM,GAAMmiG,EAAIzmF,KAAK,iBAAkB4d,EAAK1Z,WAAW,GAAM,GAAMuiF,EAAIzmF,KAAK,oBAAqB4d,EAAKzoB,cAAc,GAAM,GAAMsxF,EAAIzmF,KAAK,kBAAmB4d,EAAKsf,aAAa,GAAM,GAAMupD,EAAIzmF,KAAK,iBAAkB4d,EAAKuf,WAAW,GAAM,IAAS,IAAYspD,EAAIS,OAAO,OAASL,EAAajpE,EAAKn0B,MAAQ,GAAKo9F,GAAe,OACh7BjoE,GAA6B,YAAhBhB,EAAKpc,SACtBslF,EAAWA,EAAW,2BAAyC,OAASD,EAAa,SAASjpE,EAAKl3B,KAAKO,UAAU,8BAAgC,GAAK4/F,GAAc,UAErK,EACAC,GAAsB,0CACtB,IAAIznE,EAAkC,YAAnBt4B,EAAM+a,UAA+C,eAAnB/a,EAAM+a,UAA6B/a,EAAMkwC,gBAC1FkwD,EAAW,CAAC,EAoBhB,GAnBAA,EAAS3lF,OAASza,EAAM6jB,OACxBu8E,EAAS19F,KAAO1C,EAAM7C,KACtBijG,EAAStlF,KAAO9a,EAAM8a,KACtBslF,EAASj2F,WAAanK,EAAMgwC,IAAI7lC,WAChCi2F,EAASnvF,UAAYjR,EAAMgwC,IAAIr0B,UAC/BykF,EAASjyF,UAAYnO,EAAMgwC,IAAI7hC,UAC/BiyF,EAASrlF,SAAW/a,EAAM+a,SAC1BqlF,EAAStkF,KAAO9b,EAAM+vC,YACtBqwD,EAAS9iG,gBAAkB0C,EAAM1C,gBACjC8iG,EAAShyF,aAAepO,EAAM+J,SAAS5M,KACvCijG,EAASjqD,YAAcn2C,EAAMgjB,QAAQ7lB,KACrCijG,EAAShqD,UAAYp2C,EAAMyvC,UAC3B2wD,EAAS9nE,YAAcA,EACvB8nE,EAAS5wD,aAAexvC,EAAMwvC,aAC9B4wD,EAAS7iG,aAAeyC,EAAMzC,aAC9B6iG,EAASjjF,UAAYnd,EAAMmd,UAC3BijF,EAASzgG,KAAOK,EAAML,KACtBygG,EAAStoE,sBAAwB93B,EAAM83B,sBACvCkoE,EAAuB,WAAEI,GACF,eAAnBpgG,EAAM+a,SAA2B,CAErC,GADAglF,GAAsB,wDAClB//F,EAAMkwC,gBAAiB,CAC3B,IAAID,EAAQjwC,EAAMmwC,iBAAiB3jC,QAAQ,UAAY,EAEvDuzF,EADI9vD,EACO8vD,EAAW,qBAAmC,OAASD,EAAa9/F,EAAML,KAAKO,UAAU,2BAA6B,GAAK4/F,GAAc,SAGzIC,EAAW,kFAAqI,OAASD,EAAa9/F,EAAML,KAAKO,UAAU,iCAAmC,GAAK4/F,GAAc,iBAE5P,CACA,IAAIO,EAAWrgG,EAAMmwC,iBAAiB3jC,QAAQ,aAAe,EAO7DuzF,GALAA,EADIM,EACON,EAAW,yBAAuC,OAASD,EAAa9/F,EAAML,KAAKO,UAAU,8BAAgC,GAAK4/F,GAAc,SAGhJC,EAAW,0FAA6I,OAASD,EAAa9/F,EAAML,KAAKO,UAAU,qCAAuC,GAAK4/F,GAAc,mBAElP,mHAAyKJ,EAAIS,OAAO,OAASL,EAAa9/F,EAAM7C,MAAQ,GAAK2iG,GAAe,6CAA2EJ,EAAIS,OAAO,OAASL,EAAa9/F,EAAM7C,MAAQ,GAAK2iG,GAAe,SAC5Y9/F,EAAMkwC,kBACV6vD,EAAWA,EAAW,sCAAoD,OAASD,EAAa9/F,EAAML,KAAKO,UAAU,6CAA+C,GAAK4/F,GAAc,sEAAqG,OAASA,EAAa9/F,EAAMkwC,iBAAmB,GAAK4vD,GAAc,8CAA2E,OAASA,EAAa9/F,EAAMkwC,iBAAmB,GAAK4vD,GAAc,UAE3eC,GAAsB,oBACtB,KAEuB,YAAnB//F,EAAM+a,WACVglF,EAAWA,EAAW,6GAAoJL,EAAIS,OAAO,OAASL,EAAa9/F,EAAM7C,MAAQ,GAAK2iG,GAAe,kEAA4GJ,EAAIS,OAAO,OAASL,EAAa9/F,EAAM+J,SAAS5M,MAAQ,GAAK2iG,GAAe,kCAA+D,OAASA,EAAa,KAAO,GAAKA,GAAc,KAAaJ,EAAIS,OAAO,OAASL,EAAa9/F,EAAMgjB,QAAQ7lB,MAAQ,GAAK2iG,GAAe,qBAA+D,OAASA,EAAa9/F,EAAML,KAAKO,UAAU,oBAAsB,GAAK4/F,GAAc,MAAQ,OAASA,EAAa9/F,EAAMyvC,WAAa,GAAKqwD,GAAc,6CAA2EJ,EAAIS,OAAO,OAASL,EAAa9/F,EAAM+J,SAAS5M,MAAQ,GAAK2iG,GAAe,MAAcJ,EAAIS,OAAO,OAASL,EAAa9/F,EAAMgjB,QAAQ7lB,MAAQ,GAAK2iG,GAAe,sBAEnjCC,GAAsB,QAAwB,EAAEjpF,KAAKpB,KAAK,UAAWuqF,EAAgBA,EAAgBjgG,MAAqB,qBAARA,MAAoBA,WAAMnB,GAAoBkhG,CAAS,C,yBC/HzK,IAAIL,EAAM,EAAQ,QAsLlBC,EAAOC,QApLP,SAAkBC,GAAS,IAAoCC,EAAhCC,EAAW,GAAIC,EAAa,CAAC,EAAmBC,EAAmBJ,GAAU,CAAC,EAmL2nC,OAnLvnC,SAAU/nE,EAAuBwoE,EAA2BxpC,EAAyBD,EAAsBD,EAAUpqB,EAAU7sC,EAAM2F,EAAO6mC,EAAQnS,GAAagmE,EAAuB,WAAIF,EAAa,SAASjpE,GACtTnhB,MAAQA,KAAKwqF,MAAsBxqF,MAAQA,KAAKoD,WAA7D,IACIhS,EAAiC,eAAlB+vB,EAAK9b,SACpB8c,EAA8B,YAAlBhB,EAAK9b,SACjB+c,EAAwBjB,EAAKiB,sBAC7BD,EACAhB,EAAKpc,SAAWqd,EAAsBE,OAC1C+nE,EAAWA,+CAAqEL,EAAIzmF,KAAK,QAAS4d,EAAKl3B,KAAKO,UAAU,wBAAwB,GAAM,GAAS,UAGzJ22B,EAAKpc,SAAWqd,EAAsBG,QAC1C8nE,EAAWA,sCAA4DL,EAAIzmF,KAAK,QAAS4d,EAAKl3B,KAAKO,UAAU,0BAA0B,GAAM,GAAS,UAGlJ22B,EAAKpc,SAAWqd,EAAsBI,UAC1C6nE,EAAWA,mDAAyEL,EAAIzmF,KAAK,QAAS4d,EAAKl3B,KAAKO,UAAU,yBAAyB,GAAM,GAAS,WAI7J4G,IACLi5F,GAAsB,uBACF,YAAhBlpE,EAAKpc,OACLoc,EAAK2Y,aACTuwD,GAAsB,6CAGtBA,GAAsB,yCAIF,WAAhBlpE,EAAKpc,OACLoc,EAAK2Y,aACTuwD,GAAsB,6CAGtBA,GAAsB,wCAIF,cAAhBlpE,EAAKpc,OACLoc,EAAK2Y,aACTuwD,GAAsB,6CAGtBA,GAAsB,2CAIF,UAAhBlpE,EAAKpc,OACLoc,EAAK2Y,aACTuwD,GAAsB,6CAGtBA,GAAsB,uCAIF,YAAhBlpE,EAAKpc,OACTslF,GAAsB,yCAGlBlpE,EAAK2Y,aACTuwD,GAAsB,6CAGtBA,GAAsB,yCAGtBA,GAAsB,UAEtBA,EAAWA,EAAW,MAAaL,EAAIzmF,KAAK,OAAQ4d,EAAK/b,MAAM,GAAM,GAAM4kF,EAAIzmF,KAAK,QAAS4d,EAAKyB,YAAc,GAAKzB,EAAKn0B,MAAM,GAAM,GAAMg9F,EAAIzmF,KAAK,aAAc4d,EAAKl3B,KAAKO,UAAU,GAAG22B,EAAK1Z,uBAAwB,CAACob,OAAQ1B,EAAKn0B,QAAQ,GAAM,GAAMg9F,EAAIzmF,KAAK,kBAAmB4d,EAAK1sB,YAAY,GAAM,GAAMu1F,EAAIzmF,KAAK,iBAAkB4d,EAAK5lB,WAAW,GAAM,GAAMyuF,EAAIzmF,KAAK,iBAAkB4d,EAAK1oB,WAAW,GAAM,GAAMuxF,EAAIzmF,KAAK,YAAa4d,EAAK9b,UAAU,GAAM,GAAM2kF,EAAIzmF,KAAK,YAAa4d,EAAK/a,MAAM,GAAM,GAAM4jF,EAAIzmF,KAAK,uBAAwB4d,EAAKv5B,iBAAiB,GAAM,GAAMoiG,EAAIzmF,KAAK,oBAAqB4d,EAAKt5B,cAAc,GAAM,GAAMmiG,EAAIzmF,KAAK,iBAAkB4d,EAAK1Z,WAAW,GAAM,GAAMuiF,EAAIzmF,KAAK,oBAAqB4d,EAAKzoB,cAAc,GAAM,GAAMsxF,EAAIzmF,KAAK,kBAAmB4d,EAAKsf,aAAa,GAAM,GAAMupD,EAAIzmF,KAAK,iBAAkB4d,EAAKuf,WAAW,GAAM,IAAS,IAAYspD,EAAIS,OAAO,OAASL,EAAajpE,EAAKn0B,MAAQ,GAAKo9F,GAAe,OACh7BjoE,GAA6B,YAAhBhB,EAAKpc,SACtBslF,EAAWA,EAAW,2BAAyC,OAASD,EAAa,SAASjpE,EAAKl3B,KAAKO,UAAU,8BAAgC,GAAK4/F,GAAc,UAErK,EACAE,EAAyB,aAAIF,EAAa,SAASx6F,GACtCoQ,MAAQA,KAAKwqF,MAAsBxqF,MAAQA,KAAKoD,WAC7DinF,EAAWA,EAAW,iEAAsGL,EAAIS,OAAO,OAASL,EAAa,yBAA2B,GAAKA,GAAe,qBAC5M,EACAE,EAAwB,YAAIF,EAAa,SAASjpE,GACrCnhB,MAAQA,KAAKwqF,MAAsBxqF,MAAQA,KAAKoD,WAC7DinF,EAAWA,EAAW,OAAeL,EAAIzmF,KAAK,QAASymF,EAAIx3D,QAAQ,CAAC,sCAAsCrR,EAAKC,UAAW,EAAC,GAAM,KAAQ,GAAO,GAAS,IACpJD,EAAKq+B,mBAAmBzzD,OAAS,IACtCs+F,EAAWA,+EAA0GL,EAAIzmF,KAAK,gBAAiB4d,EAAKvxB,OAAO,GAAM,GAAMo6F,EAAIzmF,KAAK,mBAAoB4d,EAAKq+B,oBAAoB,GAAM,GAAMwqC,EAAIzmF,KAAK,kBAAmB4d,EAAKmD,YAAY,GAAM,GAAM0lE,EAAIzmF,KAAK,kBAAmB4d,EAAK+B,gBAAgB,GAAM,GAAM8mE,EAAIzmF,KAAK,YAAa4d,EAAK1sB,YAAY,GAAM,GAAMu1F,EAAIzmF,KAAK,WAAY4d,EAAK1oB,WAAW,GAAM,GAAS,8DAClc0oB,EAAKq+B,mBAAmBzzD,OAAS,IACrCs+F,GAAsB,qCACtBC,EAAyB,aAAE,CAAE16F,QAAO3F,SACpCogG,GAAsB,WAGtBA,GAAsB,QACtB,EACAC,EAAyB,aAAIF,EAAa,SAASngG,GACtC+V,MAAQA,KAAKwqF,MAAsBxqF,MAAQA,KAAKoD,WAC7DinF,EAAWA,EAAW,kCAAgD,OAASD,EAAangG,EAAKO,UAAU,mCAAqC,GAAK4/F,GAAc,QACnK,EACAE,EAAyB,aAAIF,EAAa,SAASngG,GACtC+V,MAAQA,KAAKwqF,MAAsBxqF,MAAQA,KAAKoD,WAC7DinF,EAAWA,EAAW,kCAAgD,OAASD,EAAangG,EAAKO,UAAU,+BAAiC,GAAK4/F,GAAc,QAC/J,EACAE,EAAgB,IAAIF,EAAa,SAASS,EAASvmE,EAAYwmE,GAClD9qF,MAAQA,KAAKwqF,MAAsBxqF,MAAQA,KAAKoD,WAC7DinF,EAAWA,EAAW,+BAA8CL,EAAIS,OAAO,OAASL,EAAaU,GAAiB,GAAKV,GAAe,eAA2CJ,EAAIS,OAAO,OAASL,EAAa9lE,GAAc,GAAK8lE,GAAe,iCAAgDJ,EAAIS,OAAO,OAASL,EAAaS,GAAW,GAAKT,GAAe,gBACxW,EACAE,EAAyB,aAAIF,EAAa,SAASngG,EAAMk3B,EAAMmD,EAAY68B,EAAsBC,GACpFphD,MAAQA,KAAKwqF,MAAsBxqF,MAAQA,KAAKoD,WAC7DinF,EAAWA,EAAW,oFAA2HL,EAAIS,OAAO,OAASL,EAAajpE,EAAKn0B,MAAQ,GAAKo9F,GAAe,wDACnNE,EAAgB,IAAEnpE,EAAKmC,iBAAkBgB,EAAY68B,GACrDkpC,GAAsB,qCACtBC,EAAgB,IAAEnpE,EAAKqC,uBAAwBc,EAAY88B,GAC3DipC,EAAWA,EAAW,oEAAsI,OAASD,EAAangG,EAAKO,UAAU,qBAAuB,GAAK4/F,GAAc,6CAAqFJ,EAAIS,OAAO,OAASL,EAAajpE,EAAK+B,gBAAkB,GAAKknE,GAAe,uBAAmDJ,EAAIS,OAAO,OAASL,EAAajpE,EAAKiC,0BAA4B,GAAKgnE,GAAe,yCACrhB,EACAE,EAAoB,QAAIF,EAAa,SAASngG,EAAMk3B,EAAMvxB,EAAO00B,EAAY68B,EAAsBC,EAAyBwpC,GAC/G5qF,MAAQA,KAAKwqF,MAAsBxqF,MAAQA,KAAKoD,WAA7D,IACIge,EAAW,wBAA0BxxB,EAAM,GAC/Cy6F,EAAWA,EAAW,OAAeL,EAAIzmF,KAAK,QAASymF,EAAIx3D,QAAQ,CAAC,yBAAyBpR,GAAW,EAAC,GAAM,KAAQ,GAAO,GAAS,IACvI,IAAIspE,EAAW,CAAC,EAChBA,EAAS3lF,OAASoc,EAAKpc,OACvB2lF,EAAS19F,KAAOm0B,EAAKn0B,KACrB09F,EAAStlF,KAAO+b,EAAK/b,KACrBslF,EAASj2F,WAAa0sB,EAAK1sB,WAC3Bi2F,EAASnvF,UAAY4lB,EAAKlb,UAC1BykF,EAASjyF,UAAY0oB,EAAK1oB,UAC1BiyF,EAASrlF,SAAW8b,EAAK9b,SACzBqlF,EAAS5wD,aAAe3Y,EAAK2Y,aAC7B4wD,EAAS7iG,aAAes5B,EAAKt5B,aAC7B6iG,EAASjjF,UAAY0Z,EAAK1Z,UAC1BijF,EAASzgG,KAAOA,EAChBygG,EAAStoE,sBAAwBA,EACjCkoE,EAAuB,WAAEI,GACzBL,EAAWA,EAAW,aAAoCL,EAAIzmF,KAAK,QAASymF,EAAIx3D,QAAQ,CAAC,2BAA2BpR,GAAW,EAAC,GAAM,KAAQ,GAAO,GAA1IipE,qDAAsOL,EAAIzmF,KAAK,QAASymF,EAAItoE,MAAM,SAASP,EAAKU,iBAAiB,GAAM,GAAvSwoE,gCAAiXL,EAAIzmF,KAAK,QAASymF,EAAItoE,MAAM,SAASP,EAAKW,eAAe,GAAM,GAAS,0BAAoFkoE,EAAIzmF,KAAK,QAASymF,EAAIx3D,QAAQ,CAAC,4BAA4BpR,GAAW,EAAC,GAAM,KAAQ,GAAO,GAAzmBipE,oDAAosBL,EAAIzmF,KAAK,QAASymF,EAAItoE,MAAM,SAASP,EAAKK,gBAAgB,GAAM,GAApwB6oE,kCAAg1BL,EAAIzmF,KAAK,QAASymF,EAAItoE,MAAM,SAASP,EAAKG,kBAAkB,GAAM,GAAS,sBACt6BgpE,EAAwB,YAAE,CAAE16F,QAAO4vD,mBAAoBr+B,EAAKq+B,mBAAoBp+B,WAAUkD,aAAYpB,eAAgB/B,EAAK+B,eAAgBzuB,WAAY0sB,EAAK1sB,WAAYgE,UAAW0oB,EAAK1oB,YACxL4xF,EAAWA,EAAW,OAAeL,EAAIzmF,KAAK,QAASymF,EAAIx3D,QAAQ,CAAC,aAAapR,GAAW,EAAC,GAAM,KAAQ,GAAO,GAAS,IAAY4oE,EAAIS,OAAO,OAASL,EAAajpE,EAAK+B,gBAAkB,GAAKknE,GAAe,aAAoCJ,EAAIzmF,KAAK,QAASymF,EAAIx3D,QAAQ,CAAC,wBAAwBpR,GAAW,EAAC,GAAM,KAAQ,GAAO,GAAS,IAAY4oE,EAAIS,OAAO,OAASL,EAAajpE,EAAKiC,0BAA4B,GAAKgnE,GAAe,aAAoCJ,EAAIzmF,KAAK,QAASymF,EAAIx3D,QAAQ,CAAC,YAAYpR,GAAW,EAAC,GAAM,KAAQ,GAAO,GAAS,IAAY4oE,EAAIS,OAAO,OAASL,EAAajpE,EAAK8C,QAAU,GAAKmmE,GAAe,SACnoB,IAAI53D,EAAU,CAACpR,GACXD,EAAKW,WAAa,EACtB0Q,EAAQppB,KAAK,gBAGT+X,EAAKK,YAAc,GACvBgR,EAAQppB,KAAK,iBAEbihF,EAAWA,EAAW,OAAeL,EAAIzmF,KAAK,QAASymF,EAAIx3D,QAAQ,CAAC,qBAAqBA,GAAU,EAAC,GAAM,KAAQ,GAAO,GAAS,IAClI83D,EAAyB,aAAErgG,EAAMk3B,EAAMmD,EAAY68B,EAAsBC,GACzEipC,EAAWA,EAAW,aAAoCL,EAAIzmF,KAAK,QAASymF,EAAIx3D,QAAQ,CAAC,mBAAmBA,GAAU,EAAC,GAAM,KAAQ,GAAO,GAAS,IACrJ83D,EAAyB,aAAErgG,EAAMk3B,EAAMmD,EAAY68B,EAAsBC,GACzEipC,GAAsB,QACtB,EACI5zD,IACAK,EACJwzD,EAAyB,aAAErgG,QAGXd,GAAZ+3D,IACAA,EAASn1D,OAAS,EACtBu+F,EAAyB,aAAErgG,IAG3BogG,GAAsB,gCAErB,WACC,IAAIU,EAAQ7pC,EACZ,GAAI,iBAAmB6pC,EAAMh/F,OACzB,IAAK,IAAI6D,EAAQ,EAAGo7F,EAAMD,EAAMh/F,OAAQ6D,EAAQo7F,EAAKp7F,IAAS,CAC5D,IAAIuxB,EAAO4pE,EAAMn7F,GACzB06F,EAAoB,QAAErgG,EAAMk3B,EAAMvxB,EAAO00B,EAAY68B,EAAsBC,EAAyBwpC,EAC9F,KACG,CACDI,EAAM,EACV,IAAK,IAAIp7F,KAASm7F,EAAO,CACvBC,IACI7pE,EAAO4pE,EAAMn7F,GACvB06F,EAAoB,QAAErgG,EAAMk3B,EAAMvxB,EAAO00B,EAAY68B,EAAsBC,EAAyBwpC,EAChG,CACF,CACD,EAAExpF,KAAKpB,MAERqqF,GAAsB,kFAGrB,EAAEjpF,KAAKpB,KAAK,0BAA2BuqF,EAAgBA,EAAgBnoE,sBAAqD,qBAAxBA,sBAAoCA,2BAAsBj5B,EAAU,8BAA+BohG,EAAgBA,EAAgBK,0BAA6D,qBAA5BA,0BAAwCA,+BAA0BzhG,EAAU,4BAA6BohG,EAAgBA,EAAgBnpC,wBAAyD,qBAA1BA,wBAAsCA,6BAAwBj4D,EAAU,yBAA0BohG,EAAgBA,EAAgBppC,qBAAmD,qBAAvBA,qBAAmCA,0BAAqBh4D,EAAU,aAAcohG,EAAgBA,EAAgBrpC,SAA2B,qBAAXA,SAAuBA,cAAS/3D,EAAU,aAAcohG,EAAgBA,EAAgBzzD,SAA2B,qBAAXA,SAAuBA,cAAS3tC,EAAU,SAAUohG,EAAgBA,EAAgBtgG,KAAmB,qBAAPA,KAAmBA,UAAKd,EAAU,UAAWohG,EAAgBA,EAAgB36F,MAAqB,qBAARA,MAAoBA,WAAMzG,EAAU,WAAYohG,EAAgBA,EAAgB9zD,OAAuB,qBAATA,OAAqBA,YAAOttC,EAAU,eAAgBohG,EAAgBA,EAAgBjmE,WAA+B,qBAAbA,WAAyBA,gBAAWn7B,GAAoBkhG,CAAS,C,yBCrLxvC,IAAIL,EAAM,EAAQ,QASlBC,EAAOC,QAPP,SAAkBC,GAAS,IAAoCC,EAAhCC,EAAW,GAAqCE,EAAmBJ,GAAU,CAAC,EAM0S,OANtS,SAAU1iD,EAASt8C,EAAQo5B,GAAS8lE,GAAsB,iLAC3K,IAAI/lE,EAAaC,EAAOC,SAAS,qBAAsBr5B,GACvDk/F,EAAWA,qCAA2DL,EAAIzmF,KAAK,QAAS+gB,GAAY,GAAM,GAAS,IAAY0lE,EAAIS,OAAO,OAASL,EAAa9lE,GAAc,GAAK8lE,GAAe,SAC9L3iD,IACJ4iD,GAAsB,4EAEtBA,GAAsB,mCAA8E,EAAEjpF,KAAKpB,KAAK,YAAauqF,EAAgBA,EAAgB9iD,QAAyB,qBAAVA,QAAsBA,aAAQt+C,EAAU,WAAYohG,EAAgBA,EAAgBp/F,OAAuB,qBAATA,OAAqBA,YAAOhC,EAAU,WAAYohG,EAAgBA,EAAgBhmE,OAAuB,qBAATA,OAAqBA,YAAOp7B,GAAoBkhG,CAAS,C,yBCR7Z,EAAQ,QAGlBJ,EAAOC,QADP,SAAkBC,GAAS,IAAIE,EAAW,GAA+M,OAA/KA,GAAsB,iGAAyK,C,yBCFzQ,IAAIL,EAAM,EAAQ,QA0KlBC,EAAOC,QAxKP,SAAkBC,GAAS,IAAoCC,EAAhCC,EAAW,GAAIC,EAAa,CAAC,EAAmBC,EAAmBJ,GAAU,CAAC,EAuKq0C,OAvKj0C,SAAU/1D,EAAQhwB,EAAM0yB,EAAU7sC,EAAM+pC,EAAoBoE,EAAyB3B,EAAQ1rC,EAASnD,EAAiB8pB,EAAO6S,GA2J/O,GA3JwP+lE,EAAyB,aAAIF,EAAa,SAAS14E,EAAOtN,EAAMjZ,GAC3S6U,MAAQA,KAAKwqF,MAAsBxqF,MAAQA,KAAKoD,WAC7D,IADA,IACSxT,EAAQ,EAAGA,EAAQ8hB,EAAM3lB,OAAQ6D,IAE1Cy6F,EAAWA,EAAW,OAAeL,EAAIzmF,KAAK,QAASymF,EAAIx3D,QAAQ,CAAC,kBAAkB9gB,EAAM9hB,GAAOqY,cAAgB,WAAY,EAAC,GAAM,KAAQ,GAAO,GAAS,wDAAwF+hF,EAAIS,OAAO,OAASL,EAAa7lE,EAAOmgE,KAAK,aAAchzE,EAAM9hB,KAAW,GAAKw6F,GAAe,kCAAgEJ,EAAIS,OAAO,OAASL,EAAa7lE,EAAOC,SAAS,qBAAsBr5B,IAAW,GAAKi/F,GAAe,uIAAkMJ,EAAIzmF,KAAK,QAASymF,EAAIx3D,QAAQ,CAAC,+CAA+C,uBAAyB9gB,EAAM9hB,GAAOqY,eAAgB,EAAC,GAAM,KAAQ,GAAO,GAAS,eAAgD+hF,EAAIS,OAAO,OAASL,EAAahmF,EAAKmyB,oBAAsB,GAAK6zD,GAAe,uDAAoGJ,EAAIS,OAAO,OAASL,EAAahmF,EAAKxU,GAAO2lC,cAAcpqC,GAAQwqC,qBAAuB,GAAKy0D,GAAe,eAC/qChmF,EAAKoyB,2BACT6zD,EAAWA,EAAW,gGAAgIL,EAAIzmF,KAAK,QAASymF,EAAIx3D,QAAQ,CAAC,+CAA+C,sBAAwB9gB,EAAM9hB,GAAOqY,eAAgB,EAAC,GAAM,KAAQ,GAAO,GAAS,eAAgD+hF,EAAIS,OAAO,OAASL,EAAahmF,EAAKoyB,0BAA4B,GAAK4zD,GAAe,uDAAoGJ,EAAIS,OAAO,OAASL,EAAahmF,EAAKxU,GAAO4lC,oBAAoBrqC,GAAQwqC,qBAAuB,GAAKy0D,GAAe,gBAEtpBC,GAAsB,SAClBjmF,EAAKoyB,2BACT6zD,EAAWA,EAAW,gDAAwE,OAASD,EAAangG,EAAKO,UAAU,qBAAuB,GAAK4/F,GAAc,wDAAqF,OAASA,EAAahmF,EAAKxU,GAAO4lC,oBAAoBrqC,GAAQmrC,gBAAkB,IAAOlyB,EAAKxU,GAAO4lC,oBAAoBrqC,GAAQkrC,2BAA6B,GAAK+zD,GAAc,gBAEjbC,GAAsB,cAEtB,EAKAC,EAAyB,aAAIF,EAAa,SAASngG,GACtC+V,MAAQA,KAAKwqF,MAAsBxqF,MAAQA,KAAKoD,WAC7DinF,EAAWA,EAAW,8BAA4C,OAASD,EAAangG,EAAKO,UAAU,+BAAiC,GAAK4/F,GAAc,QAC3J,EACAE,EAA6B,iBAAIF,EAAa,SAAS7lE,EAAQ7S,EAAO3mB,EAASqZ,EAAMna,EAAM+pC,GAC9Eh0B,MAAQA,KAAKwqF,MAAsBxqF,MAAQA,KAAKoD,WAC7DinF,EAAWA,EAAW,OAAeL,EAAIzmF,KAAK,QAASymF,EAAIx3D,QAAQ,CAAC,sBAAsB,gBAAkB9gB,EAAM3lB,QAAS,EAAC,GAAM,KAAQ,GAAO,GAAS,IAC1J,IAAK,IAAI6D,EAAQ,EAAGA,EAAQ8hB,EAAM3lB,OAAQ6D,IAC1C,CACA,IAAIq7F,EAAc,uBAAyBr7F,EAAQ,GACnDy6F,EAAWA,EAAW,OAAeL,EAAIzmF,KAAK,QAASymF,EAAIx3D,QAAQ,CAAC,0BAA0B,oBAAoBy4D,GAAc,EAAC,GAAM,GAAM,KAAQ,GAAO,GAAS,sCAA+DjB,EAAIzmF,KAAK,QAASymF,EAAIx3D,QAAQ,CAAC,cAAc9gB,EAAM9hB,GAAOqY,cAAgB,aAAc,EAAC,GAAM,KAAQ,GAAO,GAAS,kCAAqE+hF,EAAIS,OAAO,OAASL,EAAa7lE,EAAOmgE,KAAK,aAAchzE,EAAM9hB,KAAW,GAAKw6F,GAAe,oBAChgB,EAEC,WACC,IAAIW,EAAQ,CAAC,EAAG,EAAG,GACnB,GAAI,iBAAmBA,EAAMh/F,OACzB,IAAK,IAAIm/F,EAAa,EAAGF,EAAMD,EAAMh/F,OAAQm/F,EAAaF,EAAKE,IAAc,CAC3E,IACJ//F,EAASJ,EADDogG,EAAcJ,EAAMG,IAE5B9pE,EAAW,oBAAsB+pE,EAAc,GAEnD,GADAd,EAAWA,EAAW,OAAeL,EAAIzmF,KAAK,QAASymF,EAAIx3D,QAAQ,CAAC,aAAa,uBAAuBpR,GAAW,EAAC,GAAM,GAAM,KAAQ,GAAO,GAApIipE,oCAAmML,EAAIzmF,KAAK,WAAY6wB,EAAO+2D,IAAc,GAAM,GAAS,UACnQ/mF,EAAM,CACVimF,GAAsB,wCACtB,IAAK,IAAIz6F,EAAQ,EAAGA,EAAQ8hB,EAAM3lB,OAAQ6D,IAC1C,CACA,IACIw7F,EAAW,oBADX/3F,EAAOqe,EAAM9hB,GAAOqY,eAEpBwtB,EAAYrxB,EAAKxU,GAAO2lC,cAAcpqC,GAAQsqC,UAClD40D,EAAWA,EAAW,QAAeL,EAAIzmF,KAAK,QAASymF,EAAIx3D,QAAQ,CAAC,kBAAkB44D,GAAW,EAAC,GAAM,KAAQ,GAAO,GAAMpB,EAAIzmF,KAAK,QAASymF,EAAItoE,MAAM,SAAS+T,iBAAyBA,EAAY,EAAG,MAAO,UAAU,GAAM,GAAMu0D,EAAIzmF,KAAK,YAAalQ,GAAM,GAAM,IAAS,SAClR,CAKA,GAJK2gC,EAAmB7oC,IACxBm/F,EAAyB,aAAE54E,EAAOtN,EAAMjZ,GAExCk/F,GAAsB,SAClBjmF,EAAKoyB,yBAA0B,CACnC6zD,GAAsB,uCACtB,IAASz6F,EAAQ,EAAGA,EAAQ8hB,EAAM3lB,OAAQ6D,IAC1C,CACA,IAAIyD,EAAOqe,EAAM9hB,GAAOqY,cACpBmjF,EAAW,mBAAqB15E,EAAM9hB,GAAOqY,cAC7CwtB,EAAYrxB,EAAKxU,GAAO4lC,oBAAoBrqC,GAAQsqC,UACxD40D,EAAWA,EAAW,QAAeL,EAAIzmF,KAAK,QAASymF,EAAIx3D,QAAQ,CAAC,kBAAkB44D,GAAW,EAAC,GAAM,KAAQ,GAAO,GAAMpB,EAAIzmF,KAAK,QAASymF,EAAItoE,MAAM,SAAS+T,iBAAyBA,EAAY,EAAG,MAAO,UAAU,GAAM,GAAMu0D,EAAIzmF,KAAK,YAAalQ,GAAM,GAAM,IAAS,SAClR,CACAg3F,GAAsB,wBACtB,IAASz6F,EAAQ,EAAGA,EAAQ8hB,EAAM3lB,OAAQ6D,IAC1C,CACIyD,EAAOqe,EAAM9hB,GAAOqY,cACpBwtB,EAAYrxB,EAAKxU,GAAO4lC,oBAAoBrqC,GAAQsqC,UACxD40D,EAAWA,iCAAuDL,EAAIzmF,KAAK,QAASymF,EAAItoE,MAAM,SAAS+T,iBAAyBA,EAAY,EAAG,MAAO,UAAU,GAAM,GAAMu0D,EAAIzmF,KAAK,YAAalQ,GAAM,GAAM,GAAS,SACvN,CACAg3F,GAAsB,cACtB,CACA,CACAA,GAAsB,SACtB,IAASz6F,EAAQ,EAAGA,EAAQ8hB,EAAM3lB,OAAQ6D,IAC1C,CACA,IAAIy7F,EAAa,CAAC,uBAAyBz7F,EAAQ,GAAIwxB,GAEvD,GADAipE,EAAWA,EAAW,OAAeL,EAAIzmF,KAAK,QAASymF,EAAIx3D,QAAQ,CAAC64D,GAAa,EAAC,KAAQ,GAAO,GAAS,+BACtGjnF,EAAM,CAEV,GADAimF,EAAWA,EAAW,+CAA0EL,EAAIS,OAAO,OAASL,EAAahmF,EAAKxU,GAAO2lC,cAAcpqC,GAAQuqC,kBAAoB,GAAK00D,GAAe,SACvMhmF,EAAKoyB,yBAA0B,CACnC,IAAI80D,EAAWlnF,EAAKxU,GAAO4lC,oBAAoBrqC,GAAQirC,kBAAoB,EAC3Ei0D,EAAWA,EAAW,OAAeL,EAAIzmF,KAAK,QAASymF,EAAIx3D,QAAQ,CAAC,oBAAoB84D,EAAW,WAAa,YAAa,EAAC,GAAM,KAAQ,GAAO,GAAS,KAAY,OAASlB,EAAahmF,EAAKxU,GAAO4lC,oBAAoBrqC,GAAQkrC,2BAA6B,GAAK+zD,GAAc,QACtR,CACAC,GAAsB,SAClBjmF,EAAKoyB,2BACT6zD,EAAWA,EAAW,8CAAyEL,EAAIS,OAAO,OAASL,EAAahmF,EAAKxU,GAAO4lC,oBAAoBrqC,GAAQuqC,kBAAoB,GAAK00D,GAAe,eAEhN,CACAC,GAAsB,cACtB,CACM,KACG,CACDW,EAAM,EACV,IAAK,IAAIE,KAAcH,EAAO,CAC5BC,IACA,IAAIG,EACNhgG,EAASJ,EADHogG,EAAcJ,EAAMG,IAE1B9pE,EAAW,oBAAsB+pE,EAAc,GAEnD,GADAd,EAAWA,EAAW,OAAeL,EAAIzmF,KAAK,QAASymF,EAAIx3D,QAAQ,CAAC,aAAa,uBAAuBpR,GAAW,EAAC,GAAM,GAAM,KAAQ,GAAO,GAApIipE,oCAAmML,EAAIzmF,KAAK,WAAY6wB,EAAO+2D,IAAc,GAAM,GAAS,UACnQ/mF,EAAM,CACVimF,GAAsB,wCACtB,IAASz6F,EAAQ,EAAGA,EAAQ8hB,EAAM3lB,OAAQ6D,IAC1C,CAEIw7F,EAAW,oBADX/3F,EAAOqe,EAAM9hB,GAAOqY,eAEpBwtB,EAAYrxB,EAAKxU,GAAO2lC,cAAcpqC,GAAQsqC,UAClD40D,EAAWA,EAAW,QAAeL,EAAIzmF,KAAK,QAASymF,EAAIx3D,QAAQ,CAAC,kBAAkB44D,GAAW,EAAC,GAAM,KAAQ,GAAO,GAAMpB,EAAIzmF,KAAK,QAASymF,EAAItoE,MAAM,SAAS+T,iBAAyBA,EAAY,EAAG,MAAO,UAAU,GAAM,GAAMu0D,EAAIzmF,KAAK,YAAalQ,GAAM,GAAM,IAAS,SAClR,CAKA,GAJK2gC,EAAmB7oC,IACxBm/F,EAAyB,aAAE54E,EAAOtN,EAAMjZ,GAExCk/F,GAAsB,SAClBjmF,EAAKoyB,yBAA0B,CACnC6zD,GAAsB,uCACtB,IAASz6F,EAAQ,EAAGA,EAAQ8hB,EAAM3lB,OAAQ6D,IAC1C,CACIyD,EAAOqe,EAAM9hB,GAAOqY,cACpBmjF,EAAW,mBAAqB15E,EAAM9hB,GAAOqY,cAC7CwtB,EAAYrxB,EAAKxU,GAAO4lC,oBAAoBrqC,GAAQsqC,UACxD40D,EAAWA,EAAW,QAAeL,EAAIzmF,KAAK,QAASymF,EAAIx3D,QAAQ,CAAC,kBAAkB44D,GAAW,EAAC,GAAM,KAAQ,GAAO,GAAMpB,EAAIzmF,KAAK,QAASymF,EAAItoE,MAAM,SAAS+T,iBAAyBA,EAAY,EAAG,MAAO,UAAU,GAAM,GAAMu0D,EAAIzmF,KAAK,YAAalQ,GAAM,GAAM,IAAS,SAClR,CACAg3F,GAAsB,wBACtB,IAASz6F,EAAQ,EAAGA,EAAQ8hB,EAAM3lB,OAAQ6D,IAC1C,CACIyD,EAAOqe,EAAM9hB,GAAOqY,cACpBwtB,EAAYrxB,EAAKxU,GAAO4lC,oBAAoBrqC,GAAQsqC,UACxD40D,EAAWA,iCAAuDL,EAAIzmF,KAAK,QAASymF,EAAItoE,MAAM,SAAS+T,iBAAyBA,EAAY,EAAG,MAAO,UAAU,GAAM,GAAMu0D,EAAIzmF,KAAK,YAAalQ,GAAM,GAAM,GAAS,SACvN,CACAg3F,GAAsB,cACtB,CACA,CACAA,GAAsB,SACtB,IAASz6F,EAAQ,EAAGA,EAAQ8hB,EAAM3lB,OAAQ6D,IAC1C,CACIy7F,EAAa,CAAC,uBAAyBz7F,EAAQ,GAAIwxB,GAEvD,GADAipE,EAAWA,EAAW,OAAeL,EAAIzmF,KAAK,QAASymF,EAAIx3D,QAAQ,CAAC64D,GAAa,EAAC,KAAQ,GAAO,GAAS,+BACtGjnF,EAAM,CAEV,GADAimF,EAAWA,EAAW,+CAA0EL,EAAIS,OAAO,OAASL,EAAahmF,EAAKxU,GAAO2lC,cAAcpqC,GAAQuqC,kBAAoB,GAAK00D,GAAe,SACvMhmF,EAAKoyB,yBAA0B,CAC/B80D,EAAWlnF,EAAKxU,GAAO4lC,oBAAoBrqC,GAAQirC,kBAAoB,EAC3Ei0D,EAAWA,EAAW,OAAeL,EAAIzmF,KAAK,QAASymF,EAAIx3D,QAAQ,CAAC,oBAAoB84D,EAAW,WAAa,YAAa,EAAC,GAAM,KAAQ,GAAO,GAAS,KAAY,OAASlB,EAAahmF,EAAKxU,GAAO4lC,oBAAoBrqC,GAAQkrC,2BAA6B,GAAK+zD,GAAc,QACtR,CACAC,GAAsB,SAClBjmF,EAAKoyB,2BACT6zD,EAAWA,EAAW,8CAAyEL,EAAIS,OAAO,OAASL,EAAahmF,EAAKxU,GAAO4lC,oBAAoBrqC,GAAQuqC,kBAAoB,GAAK00D,GAAe,eAEhN,CACAC,GAAsB,cACtB,CACI,CACF,CACD,GAAEjpF,KAAKpB,MAERqqF,GAAsB,QACtB,EACI5zD,EAAQ,CACRK,EACJwzD,EAAyB,aAAErgG,GAG3BqgG,EAA6B,iBAAE/lE,EAAQ7S,EAAO3mB,EAASqZ,EAAMna,EAAM+pC,GAEnE,IAAI+M,EAAsC,aAApBn5C,EACjBm5C,GAAoB3I,IACzBiyD,EAAWA,EAAW,0KAAwN,OAASD,EAAangG,EAAKO,UAAU,kCAAoC,GAAK4/F,GAAc,yBAE1U,CACAC,EAAWA,0CAAgEL,EAAIzmF,KAAK,QAASw9B,EAAkB,gBAAiB,iBAAiB,GAAM,GAA5IspD,uDAAwO,EAAEjpF,KAAKpB,KAAK,WAAYuqF,EAAgBA,EAAgBn2D,OAAuB,qBAATA,OAAqBA,YAAOjrC,EAAU,SAAUohG,EAAgBA,EAAgBnmF,KAAmB,qBAAPA,KAAmBA,UAAKjb,EAAU,aAAcohG,EAAgBA,EAAgBzzD,SAA2B,qBAAXA,SAAuBA,cAAS3tC,EAAU,SAAUohG,EAAgBA,EAAgBtgG,KAAmB,qBAAPA,KAAmBA,UAAKd,EAAU,uBAAwBohG,EAAgBA,EAAgBv2D,mBAA+C,qBAArBA,mBAAiCA,wBAAmB7qC,EAAU,4BAA6BohG,EAAgBA,EAAgBnyD,wBAAyD,qBAA1BA,wBAAsCA,6BAAwBjvC,EAAU,WAAYohG,EAAgBA,EAAgB9zD,OAAuB,qBAATA,OAAqBA,YAAOttC,EAAU,YAAaohG,EAAgBA,EAAgBx/F,QAAyB,qBAAVA,QAAsBA,aAAQ5B,EAAU,oBAAqBohG,EAAgBA,EAAgB3iG,gBAAyC,qBAAlBA,gBAA8BA,qBAAgBuB,EAAU,UAAWohG,EAAgBA,EAAgB74E,MAAqB,qBAARA,MAAoBA,WAAMvoB,EAAU,WAAYohG,EAAgBA,EAAgBhmE,OAAuB,qBAATA,OAAqBA,YAAOp7B,GAAoBkhG,CAAS,C,yBCzKx7C,EAAQ,QAGlBJ,EAAOC,QADP,SAAkBC,GAAS,IAAIE,EAAW,GAAgH,OAAhFA,GAAsB,6BAA0E,C,yBCFhK,EAAQ,QAGlBJ,EAAOC,QADP,SAAkBC,GAAS,IAAIE,EAAW,GAAuL,OAAvJA,GAAsB,yEAAiJ,C,yBCFjP,IAAIL,EAAM,EAAQ,QAsBlBC,EAAOC,QApBP,SAAkBC,GAAS,IAAoCC,EAAhCC,EAAW,GAAqCE,EAAmBJ,GAAU,CAAC,EAmBwK,OAnBpK,SAAUp/F,EAASw5B,GAAS8lE,GAAsB,wFAElK,WACC,IAAIU,EAAQhgG,EACZ,GAAI,iBAAmBggG,EAAMh/F,OACzB,IAAK,IAAIm/F,EAAa,EAAGF,EAAMD,EAAMh/F,OAAQm/F,EAAaF,EAAKE,IAAc,CAC3E,IAAI//F,EAAS4/F,EAAMG,GAC3Bb,EAAWA,EAAW,MAAcL,EAAIzmF,KAAK,cAAepY,GAAQ,GAAM,GAAS,gCAAsD6+F,EAAIS,OAAO,OAASL,EAAa7lE,EAAOC,SAAS,qBAAsBr5B,IAAW,GAAKi/F,GAAe,WACzO,KACG,CACDY,EAAM,EACV,IAAK,IAAIE,KAAcH,EAAO,CAC5BC,IACI7/F,EAAS4/F,EAAMG,GACzBb,EAAWA,EAAW,MAAcL,EAAIzmF,KAAK,cAAepY,GAAQ,GAAM,GAAS,gCAAsD6+F,EAAIS,OAAO,OAASL,EAAa7lE,EAAOC,SAAS,qBAAsBr5B,IAAW,GAAKi/F,GAAe,WAC3O,CACF,CACD,EAAEhpF,KAAKpB,MAERqqF,GAAsB,aAA4C,EAAEjpF,KAAKpB,KAAK,YAAauqF,EAAgBA,EAAgBx/F,QAAyB,qBAAVA,QAAsBA,aAAQ5B,EAAU,WAAYohG,EAAgBA,EAAgBhmE,OAAuB,qBAATA,OAAqBA,YAAOp7B,GAAoBkhG,CAAS,C,yBCrBrS,IAAIL,EAAM,EAAQ,QAGlBC,EAAOC,QADP,SAAkBC,GAAS,IAAIE,EAAW,GAAqCE,EAAmBJ,GAAU,CAAC,EAA6R,OAAzR,SAAUh/F,GAASk/F,EAAWA,yCAA+DL,EAAIzmF,KAAK,cAAepY,GAAQ,GAAM,GAAS,SAA8B,EAAEiW,KAAKpB,KAAK,WAAYuqF,EAAgBA,EAAgBp/F,OAAuB,qBAATA,OAAqBA,YAAOhC,GAAoBkhG,CAAS,C,yBCF1Z,IAAIL,EAAM,EAAQ,QAKlBC,EAAOC,QAHP,SAAkBC,GAAS,IAAoCC,EAAhCC,EAAW,GAAqCE,EAAmBJ,GAAU,CAAC,EAEgwB,OAF5vB,SAAUlgG,EAAMkB,EAAQo5B,GAAS8lE,EAAWA,6DAA+FL,EAAIzmF,KAAK,cAAepY,GAAQ,GAAM,GAAS,IAC3S,IAAIm5B,EAAaC,EAAOC,SAAS,qBAAsBr5B,GACvDk/F,EAAWA,qCAA2DL,EAAIzmF,KAAK,QAAS+gB,GAAY,GAAM,GAAS,IAAY0lE,EAAIS,OAAO,OAASL,EAAa9lE,GAAc,GAAK8lE,GAAxKC,gIAAwVL,EAAIzmF,KAAK,aAActZ,EAAKO,UAAU,kBAAkB,GAAM,GAAtZ6/F,yEAA2jB,EAAEjpF,KAAKpB,KAAK,SAAUuqF,EAAgBA,EAAgBtgG,KAAmB,qBAAPA,KAAmBA,UAAKd,EAAU,WAAYohG,EAAgBA,EAAgBp/F,OAAuB,qBAATA,OAAqBA,YAAOhC,EAAU,WAAYohG,EAAgBA,EAAgBhmE,OAAuB,qBAATA,OAAqBA,YAAOp7B,GAAoBkhG,CAAS,C,uBCJ73B,IAAIL,EAAM,EAAQ,QAOlBC,EAAOC,QALP,SAAkBC,GAAS,IAAoCC,EAAhCC,EAAW,GAAqCE,EAAmBJ,GAAU,CAAC,EAIoP,OAJhP,SAAUz4E,EAAOknB,EAAWtuC,GAAQ+/F,EAAWA,EAAW,oGAA+HL,EAAIS,OAAO,OAASL,EAAa9/F,EAAMonB,EAAM8mB,OAAS,GAAK4xD,GAAe,SAChXxxD,IACJyxD,EAAWA,EAAW,uEAAkGL,EAAIS,OAAO,OAASL,EAAa9/F,EAAMonB,EAAMgnB,MAAQ,GAAK0xD,GAAe,0CAAwEJ,EAAIS,OAAO,OAASL,EAAa9/F,EAAMonB,EAAMinB,MAAQ,GAAKyxD,GAAe,gBAElVC,GAAsB,QAAwB,EAAEjpF,KAAKpB,KAAK,UAAWuqF,EAAgBA,EAAgB74E,MAAqB,qBAARA,MAAoBA,WAAMvoB,EAAU,cAAeohG,EAAgBA,EAAgB3xD,UAA6B,qBAAZA,UAAwBA,eAAUzvC,EAAU,UAAWohG,EAAgBA,EAAgBjgG,MAAqB,qBAARA,MAAoBA,WAAMnB,GAAoBkhG,CAAS,C,yBCNvW,EAAQ,QAGlBJ,EAAOC,QADP,SAAkBC,GAAS,IAAoCC,EAAhCC,EAAW,GAAqCE,EAAmBJ,GAAU,CAAC,EAAmV,OAA/U,SAAU1gG,GAAU4gG,EAAWA,EAAW,+BAA6C,OAASD,EAAa3gG,EAAQu0C,gBAAgB/zC,KAAKO,UAAU,2BAA6B,GAAK4/F,GAAc,QAAwB,EAAEhpF,KAAKpB,KAAK,YAAauqF,EAAgBA,EAAgB9gG,QAAyB,qBAAVA,QAAsBA,aAAQN,GAAoBkhG,CAAS,C,yBCFhd,IAAIL,EAAM,EAAQ,QAwDlBC,EAAOC,QAtDP,SAAkBC,GAAS,IAAoCC,EAAhCC,EAAW,GAAIC,EAAa,CAAC,EAAmBC,EAAmBJ,GAAU,CAAC,EAqDi6C,OArD75C,SAAU1pD,EAAac,EAAsBoD,EAAqBjsC,EAAc+qC,EAAQx5C,EAAMy6C,EAAShE,EAAW94C,EAAiB27C,EAAgBn9B,GAAOkkF,EAA2B,eAAIF,EAAa,SAASxiG,EAAiBqC,EAAMyO,EAAc+nC,EAAa8C,GACrWvjC,MAAQA,KAAKwqF,MAAsBxqF,MAAQA,KAAKoD,WACrC,YAApBxb,EAEJyiG,EADuB,iBAAnB9mD,EACO8mD,EAAW,uCAAsDL,EAAIS,OAAO,OAASL,EAAangG,EAAKO,UAAU,2CAA6C,GAAK4/F,GAAe,2EAGlLC,EAAW,uCAAsDL,EAAIS,OAAO,OAASL,EAAangG,EAAKO,UAAU,4CAA8C,GAAK4/F,GAAe,4EAI9LC,EAAWA,EAAW,2FAAkIL,EAAIS,OAAO,OAASL,EAAangG,EAAKO,UAAU,oBAAsB,GAAK4/F,GAAxNC,2CAA+RL,EAAIzmF,KAAK,QAAS7K,GAAc,GAAM,GAAS,IAAYsxF,EAAIS,OAAO,OAASL,EAAa1xF,GAAgB,GAAK0xF,GAAe,qBACnZ,iBAAnB7mD,IACJ8mD,EAAWA,EAAW,iEAA4FL,EAAIS,OAAO,OAASL,EAAangG,EAAKO,UAAU,mBAAqB,GAAK4/F,GAAe,kFAE3MC,GAAsB,SAEtB,EACAA,GAAsB,oCACV9oD,EAAuBt3C,EAAKO,UAAU,iDAAkDP,EAAKO,UAAU,yCAC/G+2C,GACJ8oD,EAAWA,EAAW,4CAA2DL,EAAIS,OAAO,OAASL,EAAangG,EAAKO,UAAU,kDAAoD,GAAK4/F,GAAe,6CAA2EJ,EAAIS,OAAO,OAASL,EAAangG,EAAKO,UAAU,sDAAwD,GAAK4/F,GAAe,qCAEhZC,EADuB,iBAAnB9mD,EACO8mD,EAAW,2FAA0HL,EAAIS,OAAO,OAASL,EAAangG,EAAKO,UAAU,2CAA6C,GAAK4/F,GAAe,oHAAoKJ,EAAIS,OAAO,OAASL,EAAangG,EAAKO,UAAU,0CAA4C,GAAK4/F,GAAe,WAG1gBC,EAAW,6GAA8IL,EAAIS,OAAO,OAASL,EAAangG,EAAKO,UAAU,2CAA6C,GAAK4/F,GAAe,kGAAgJJ,EAAIS,OAAO,OAASL,EAAangG,EAAKO,UAAU,0CAA4C,GAAK4/F,GAAe,WAErhBC,GAAsB,SACtBC,EAA2B,eAAE1iG,EAAiBqC,EAAMyO,EAAc+nC,EAAa8C,KAG/E8mD,EAAWA,EAAW,4CAA2DL,EAAIS,OAAO,OAASL,EAAangG,EAAKO,UAAU,0CAA4C,GAAK4/F,GAAe,SACjME,EAA2B,eAAE1iG,EAAiBqC,EAAMyO,EAAc+nC,EAAa8C,IAE/E8mD,GAAsB,sDACtB,IAEIhsB,EAFAktB,EAAchqD,EAAuBt3C,EAAKO,UAAU,2BAA4BP,EAAKO,UAAU,mBAGnG6zE,EAA0B,UAAd39B,EAAwB,CAACiF,SAAU,YAAc,CAAC,EAC9D0kD,GAHAA,EAAWA,EAAW,iFAA8GL,EAAIS,OAAO,OAASL,EAAamB,GAAe,GAAKnB,GAAe,wCAA2EJ,EAAIzmF,KAAK,QAASymF,EAAIx3D,QAAQ,CAAC+O,EAAuB,yBAA2B,iBAAkB,EAAC,KAAQ,GAAO,GAA3X8oD,mDAAycL,EAAIzmF,KAAK,QAAS6C,GAAM,GAAM,GAAveikF,6JAAmuBL,EAAIS,OAAO,OAASL,EAAangG,EAAKO,UAAU,oBAAsB,GAAK4/F,GAA9yBC,gGAAq8BL,EAAIzmF,KAAK,QAASm9B,GAAW,GAAM,GAAx+B2pD,4CAGW,UAAkBL,EAAIrnC,MAAMqnC,EAAIl7E,MAAM,CAAC,CAAC,MAAS,SAASuvD,KAAa,GAAS,IAAY2rB,EAAIS,OAAO,OAASL,EAAangG,EAAKO,UAAU,sBAAwB,GAAK4/F,GAAe,YAC9M/rB,EAA0B,WAAd39B,EAAyB,CAACiF,SAAU,YAAc,CAAC,EAC/D0kD,EAAWA,EAAW,UAAkBL,EAAIrnC,MAAMqnC,EAAIl7E,MAAM,CAAC,CAAC,MAAS,UAAUuvD,KAAa,GAAS,IAAY2rB,EAAIS,OAAO,OAASL,EAAangG,EAAKO,UAAU,uBAAyB,GAAK4/F,GAAe,YAC3M7oD,IACL88B,EAA0B,UAAd39B,EAAwB,CAACiF,SAAU,YAAc,CAAC,EAC9D0kD,EAAWA,EAAW,UAAkBL,EAAIrnC,MAAMqnC,EAAIl7E,MAAM,CAAC,CAAC,MAAS,SAASuvD,KAAa,GAAS,IAAY2rB,EAAIS,OAAO,OAASL,EAAangG,EAAKO,UAAU,sBAAwB,GAAK4/F,GAAe,aAE9MC,GAAsB,8BAClB5mD,IACJ4mD,EAAWA,EAAW,8BAA4C,OAASD,EAAa3mD,GAAU,GAAK2mD,GAAc,UAGrH,IAAIhnF,EAAashC,EAAU,CAAEhb,SAAU,YAAc,CAAC,EACtD2gE,GAFAA,EAAWA,EAAW,2BAAyC,OAASD,EAAazlD,EAAoB16C,EAAKO,UAAU,qCAAsC,aAAe,GAAK4/F,GAAc,cAE1K,UAAkBJ,EAAIrnC,MAAMqnC,EAAIl7E,MAAM,CAAC,CAAC,MAAS,yBAAyB1L,KAAc,GAAS,6EAA4I,EAAEhC,KAAKpB,KAAK,gBAAiBuqF,EAAgBA,EAAgB9pD,YAAiC,qBAAdA,YAA0BA,iBAAYt3C,EAAU,yBAA0BohG,EAAgBA,EAAgBhpD,qBAAmD,qBAAvBA,qBAAmCA,0BAAqBp4C,EAAU,wBAAyBohG,EAAgBA,EAAgB5lD,oBAAiD,qBAAtBA,oBAAkCA,yBAAoBx7C,EAAU,iBAAkBohG,EAAgBA,EAAgB7xF,aAAmC,qBAAfA,aAA2BA,kBAAavP,EAAU,WAAYohG,EAAgBA,EAAgB9mD,OAAuB,qBAATA,OAAqBA,YAAOt6C,EAAU,SAAUohG,EAAgBA,EAAgBtgG,KAAmB,qBAAPA,KAAmBA,UAAKd,EAAU,YAAaohG,EAAgBA,EAAgB7lD,QAAyB,qBAAVA,QAAsBA,aAAQv7C,EAAU,cAAeohG,EAAgBA,EAAgB7pD,UAA6B,qBAAZA,UAAwBA,eAAUv3C,EAAU,oBAAqBohG,EAAgBA,EAAgB3iG,gBAAyC,qBAAlBA,gBAA8BA,qBAAgBuB,EAAU,mBAAoBohG,EAAgBA,EAAgBhnD,eAAuC,qBAAjBA,eAA6BA,oBAAep6C,EAAU,SAAUohG,EAAgBA,EAAgBnkF,KAAmB,qBAAPA,KAAmBA,UAAKjd,GAAoBkhG,CAAS,C,yBCvD9hD,IAAIL,EAAM,EAAQ,QASlBC,EAAOC,QAPP,SAAkBC,GAAS,IAAoCC,EAAhCC,EAAW,GAAqCE,EAAmBJ,GAAU,CAAC,EAMif,OAN7e,SAAUrpD,EAAYC,EAAiB17B,GAAW,IAAIknC,EAAclnC,EAAS4C,cAAgB,gBAE9M,GADAoiF,EAAWA,EAAW,OAAeL,EAAIzmF,KAAK,QAASymF,EAAIx3D,QAAQ,CAAC,0BAA0B+Z,GAAc,EAAC,GAAM,KAAQ,GAAO,GAAS,wCACvI,EAAc,CAClB,IAAIi/C,EAAWnmF,EAAS4C,cAAgB,aACxCoiF,EAAWA,EAAW,OAAeL,EAAIzmF,KAAK,QAASymF,EAAIx3D,QAAQ,CAAC,aAAag5D,GAAW,EAAC,GAAM,KAAQ,GAAO,GAAS,mFAAqHxB,EAAIS,OAAO,OAASL,EAAatpD,GAAc,GAAKspD,GAAe,wBACnT,CACAC,EAAWA,0CAAgEL,EAAIzmF,KAAK,QAASw9B,EAAkB,gBAAiB,iBAAiB,GAAM,GAA5IspD,uDAAwO,EAAEjpF,KAAKpB,KAAK,eAAgBuqF,EAAgBA,EAAgBzpD,WAA+B,qBAAbA,WAAyBA,gBAAW33C,EAAU,oBAAqBohG,EAAgBA,EAAgBxpD,gBAAyC,qBAAlBA,gBAA8BA,qBAAgB53C,EAAU,aAAcohG,EAAgBA,EAAgBllF,SAA2B,qBAAXA,SAAuBA,cAASlc,GAAoBkhG,CAAS,C,yBCR9mB,IAAIL,EAAM,EAAQ,QAWlBC,EAAOC,QATP,SAAkBC,GAAS,IAAoCC,EAAhCC,EAAW,GAAqCE,EAAmBJ,GAAU,CAAC,EAQy6B,OARr6B,SAAU1iD,EAAS1d,EAAW9/B,EAAMkB,EAAQq8C,EAAajjB,GAAS8lE,GAAsB,oCACzM,IAAI/lE,EAAaC,EAAOC,SAAS,qBAAsBr5B,GAEnDw3B,EAAQ8kB,EAAU,KAAOD,EAC7B6iD,GAFAA,EAAWA,qCAA2DL,EAAIzmF,KAAK,QAAS+gB,GAAY,GAAM,GAAS,IAAY0lE,EAAIS,OAAO,OAASL,EAAa9lE,GAAc,GAAK8lE,GAAe,4CAEvLC,4BAAoDL,EAAIzmF,KAAK,QAASof,GAAO,GAAM,GAAS,IAAYqnE,EAAIS,OAAO,OAASL,EAAa5iD,GAAe,GAAK4iD,GAAe,SACnL3iD,IACJ4iD,GAAsB,4EAEtBA,EAAWA,0IAAmML,EAAIzmF,KAAK,aAAcwmB,GAAa9/B,EAAKO,UAAU,kBAAkB,GAAM,GAA9Q6/F,kFAAga,EAAEjpF,KAAKpB,KAAK,YAAauqF,EAAgBA,EAAgB9iD,QAAyB,qBAAVA,QAAsBA,aAAQt+C,EAAU,cAAeohG,EAAgBA,EAAgBxgE,UAA6B,qBAAZA,UAAwBA,eAAU5gC,EAAU,SAAUohG,EAAgBA,EAAgBtgG,KAAmB,qBAAPA,KAAmBA,UAAKd,EAAU,WAAYohG,EAAgBA,EAAgBp/F,OAAuB,qBAATA,OAAqBA,YAAOhC,EAAU,gBAAiBohG,EAAgBA,EAAgB/iD,YAAiC,qBAAdA,YAA0BA,iBAAYr+C,EAAU,WAAYohG,EAAgBA,EAAgBhmE,OAAuB,qBAATA,OAAqBA,YAAOp7B,GAAoBkhG,CAAS,C,yBCVtiC,IAAIL,EAAM,EAAQ,QAuBlBC,EAAOC,QArBP,SAAkBC,GAAS,IAAoCC,EAAhCC,EAAW,GAAqCE,EAAmBJ,GAAU,CAAC,EAoB+P,OApB3P,SAAUljD,EAAWl8C,EAASw5B,GAAS,IAAIknE,EAAYxkD,EAAY,qBAAuB,sBAC3MojD,EAAWA,EAAW,MAAcL,EAAIzmF,KAAK,QAASymF,EAAIx3D,QAAQ,CAAC,gBAAgBi5D,GAAY,EAAC,GAAM,KAAQ,GAAO,GAA1GpB,gBAEV,WACC,IAAIU,EAAQhgG,EACZ,GAAI,iBAAmBggG,EAAMh/F,OACzB,IAAK,IAAIm/F,EAAa,EAAGF,EAAMD,EAAMh/F,OAAQm/F,EAAaF,EAAKE,IAAc,CAC3E,IAAI//F,EAAS4/F,EAAMG,GAC3Bb,EAAWA,EAAW,MAAcL,EAAIzmF,KAAK,cAAepY,GAAQ,GAAM,GAA/Dk/F,oDAAuJL,EAAIS,OAAO,OAASL,EAAa7lE,EAAOC,SAAS,qBAAsBr5B,IAAW,GAAKi/F,GAAe,WAClQ,KACG,CACDY,EAAM,EACV,IAAK,IAAIE,KAAcH,EAAO,CAC5BC,IACI7/F,EAAS4/F,EAAMG,GACzBb,EAAWA,EAAW,MAAcL,EAAIzmF,KAAK,cAAepY,GAAQ,GAAM,GAA/Dk/F,oDAAuJL,EAAIS,OAAO,OAASL,EAAa7lE,EAAOC,SAAS,qBAAsBr5B,IAAW,GAAKi/F,GAAe,WACpQ,CACF,CACD,EAAEhpF,KAAKpB,MAERqqF,GAAsB,OAAuB,EAAEjpF,KAAKpB,KAAK,cAAeuqF,EAAgBA,EAAgBtjD,UAA6B,qBAAZA,UAAwBA,eAAU99C,EAAU,YAAaohG,EAAgBA,EAAgBx/F,QAAyB,qBAAVA,QAAsBA,aAAQ5B,EAAU,WAAYohG,EAAgBA,EAAgBhmE,OAAuB,qBAATA,OAAqBA,YAAOp7B,GAAoBkhG,CAAS,C,yBCtB5X,IAAIL,EAAM,EAAQ,QAGlBC,EAAOC,QADP,SAAkBC,GAAS,IAAIE,EAAW,GAAqCE,EAAmBJ,GAAU,CAAC,EAA6S,OAAzS,SAAUh/F,GAASk/F,EAAWA,yDAA+EL,EAAIzmF,KAAK,cAAepY,GAAQ,GAAM,GAAS,SAA8B,EAAEiW,KAAKpB,KAAK,WAAYuqF,EAAgBA,EAAgBp/F,OAAuB,qBAATA,OAAqBA,YAAOhC,GAAoBkhG,CAAS,C,yBCFha,EAAQ,QAGlBJ,EAAOC,QADP,SAAkBC,GAAS,IAAIE,EAAW,GAA+I,OAA/GA,GAAsB,0DAAyG,C,yBCFzM,IAAIL,EAAM,EAAQ,QAGlBC,EAAOC,QADP,SAAkBC,GAAS,IAAoCC,EAAhCC,EAAW,GAAqCE,EAAmBJ,GAAU,CAAC,EAAwwE,OAApwE,SAAUlgG,GAAOogG,EAAWA,EAAW,2EAAsGL,EAAIS,OAAO,OAASL,EAAangG,EAAKO,UAAU,+BAAiC,GAAK4/F,GAAvMC,6DAAoTL,EAAIzmF,KAAK,aAActZ,EAAKO,UAAU,sBAAsB,GAAM,GAAtX6/F,44BAAyiDL,EAAIS,OAAO,OAASL,EAAangG,EAAKO,UAAU,2BAA6B,GAAK4/F,GAAe,iEAAiGJ,EAAIS,OAAO,OAASL,EAAangG,EAAKO,UAAU,6BAA+B,GAAK4/F,GAAe,gMAAmT,EAAEhpF,KAAKpB,KAAK,SAAUuqF,EAAgBA,EAAgBtgG,KAAmB,qBAAPA,KAAmBA,UAAKd,GAAoBkhG,CAAS,C,yBCF33E,EAAQ,QAGlBJ,EAAOC,QADP,SAAkBC,GAAS,IAAIE,EAAW,GAAkZ,OAAlXA,GAAsB,mNAA4W,C,yBCFlc,EAAQ,QAGlBJ,EAAOC,QADP,SAAkBC,GAAS,IAAoCC,EAAhCC,EAAW,GAAqCE,EAAmBJ,GAAU,CAAC,EAA6pC,OAAzpC,SAAU1/F,EAAM+uD,EAAqB7U,EAAqB16C,GAAOogG,EAAWA,IAAa,OAASD,EAAazlD,EAAoB16C,EAAKO,UAAU,0BAA2B,aAAe,GAAK4/F,GAAc,SAAoB,OAASA,EAAazlD,EAAoB16C,EAAKO,UAAU,uBAAwB,GAAI,CAACkhG,SAASzhG,EAAKO,UAAUC,EAAK,iBAAiBkhG,MAAM1hG,EAAKO,UAAU,wBAA2B,gIAAkI,GAAK4/F,IAAe,OAASA,EAAazlD,EAAoB16C,EAAKO,UAAU,qBAAqBgvD,GAAsB,aAAe,GAAK4wC,EAAa,EAAEhpF,KAAKpB,KAAK,SAAUuqF,EAAgBA,EAAgB9/F,KAAmB,qBAAPA,KAAmBA,UAAKtB,EAAU,wBAAyBohG,EAAgBA,EAAgB/wC,oBAAiD,qBAAtBA,oBAAkCA,yBAAoBrwD,EAAU,wBAAyBohG,EAAgBA,EAAgB5lD,oBAAiD,qBAAtBA,oBAAkCA,yBAAoBx7C,EAAU,SAAUohG,EAAgBA,EAAgBtgG,KAAmB,qBAAPA,KAAmBA,UAAKd,GAAoBkhG,CAAS,C,wBCF1xC,IAAIL,EAAM,EAAQ,QAGlBC,EAAOC,QADP,SAAkBC,GAAS,IAAoCC,EAAhCC,EAAW,GAAqCE,EAAmBJ,GAAU,CAAC,EAAuT,OAAnT,SAAUlgG,GAAOogG,EAAWA,EAAW,kCAAiDL,EAAIS,OAAO,OAASL,EAAangG,EAAKO,UAAU,sBAAwB,GAAK4/F,GAAe,QAAwB,EAAEhpF,KAAKpB,KAAK,SAAUuqF,EAAgBA,EAAgBtgG,KAAmB,qBAAPA,KAAmBA,UAAKd,GAAoBkhG,CAAS,C,yBCFpb,IAAIL,EAAM,EAAQ,QAGlBC,EAAOC,QADP,SAAkBC,GAAS,IAAoCC,EAAhCC,EAAW,GAAqCE,EAAmBJ,GAAU,CAAC,EAAg5B,OAA54B,SAAUlgG,EAAMkvD,GAAakxC,EAAWA,EAAW,6DAAwFL,EAAIS,OAAO,OAASL,EAAangG,EAAKO,UAAU,sBAAwB,GAAK4/F,GAAe,gBAA4CJ,EAAIS,OAAO,OAASL,EAAajxC,GAAc,GAAKixC,GAAe,mDAAmFJ,EAAIS,OAAO,OAASL,EAAangG,EAAKO,UAAU,qBAAuB,GAAK4/F,GAAe,4FAAiL,EAAEhpF,KAAKpB,KAAK,SAAUuqF,EAAgBA,EAAgBtgG,KAAmB,qBAAPA,KAAmBA,UAAKd,EAAU,eAAgBohG,EAAgBA,EAAgBpxC,WAA+B,qBAAbA,WAAyBA,gBAAWhwD,GAAoBkhG,CAAS,C,yBCFngC,EAAQ,QAGlBJ,EAAOC,QADP,SAAkBC,GAAS,IAAoCC,EAAhCC,EAAW,GAAqCE,EAAmBJ,GAAU,CAAC,EAAkQ,OAA9P,SAAUjwC,GAAUmwC,EAAWA,EAAW,SAAqB,OAASD,EAAalwC,GAAW,GAAKkwC,GAAc,QAAwB,EAAEhpF,KAAKpB,KAAK,YAAauqF,EAAgBA,EAAgBrwC,QAAyB,qBAAVA,QAAsBA,aAAQ/wD,GAAoBkhG,CAAS,C,yBCF/X,IAAIL,EAAM,EAAQ,QAGlBC,EAAOC,QADP,SAAkBC,GAAS,IAAoCC,EAAhCC,EAAW,GAAqCE,EAAmBJ,GAAU,CAAC,EAA0vB,OAAtvB,SAAUh/F,EAAQo5B,GAAS8lE,EAAWA,EAAW,kNAAuPL,EAAIS,OAAO,OAASL,EAAa7lE,EAAOC,SAAS,qBAAsBr5B,IAAW,GAAKi/F,GAAe,+FAAyJ,EAAEhpF,KAAKpB,KAAK,WAAYuqF,EAAgBA,EAAgBp/F,OAAuB,qBAATA,OAAqBA,YAAOhC,EAAU,WAAYohG,EAAgBA,EAAgBhmE,OAAuB,qBAATA,OAAqBA,YAAOp7B,GAAoBkhG,CAAS,C,yBCFv3B,IAAIL,EAAM,EAAQ,QAOlBC,EAAOC,QALP,SAAkBC,GAAS,IAAoCC,EAAhCC,EAAW,GAAqCE,EAAmBJ,GAAU,CAAC,EAIqnB,OAJjnB,SAAUrpD,EAAYC,EAAiB0gB,EAASC,GAAmB2oC,EAAWA,EAAW,wEAAmGL,EAAIS,OAAO,OAASL,EAAa3oC,GAAW,GAAK2oC,GAA/JC,yCAAyOL,EAAIzmF,KAAK,aAAcm+C,GAAkB,GAAM,GAAxR2oC,2QAC3L,IACJA,EAAWA,EAAW,yKAAwNL,EAAIS,OAAO,OAASL,EAAatpD,GAAc,GAAKspD,GAAe,0BAEjTC,EAAWA,0CAAgEL,EAAIzmF,KAAK,QAASw9B,EAAkB,gBAAiB,iBAAiB,GAAM,GAA5IspD,uDAAwO,EAAEjpF,KAAKpB,KAAK,eAAgBuqF,EAAgBA,EAAgBzpD,WAA+B,qBAAbA,WAAyBA,gBAAW33C,EAAU,oBAAqBohG,EAAgBA,EAAgBxpD,gBAAyC,qBAAlBA,gBAA8BA,qBAAgB53C,EAAU,YAAaohG,EAAgBA,EAAgB9oC,QAAyB,qBAAVA,QAAsBA,aAAQt4D,EAAU,qBAAsBohG,EAAgBA,EAAgB7oC,iBAA2C,qBAAnBA,iBAA+BA,sBAAiBv4D,GAAoBkhG,CAAS,C","sources":["../../../../overview/packages/fluent-page-consts/src/card-ids.js","../../../../overview/packages/fluent-page-data/src/preference/preference-helper.js","../../../../overview/packages/fluent-page-data/src/preference/card-preference/performance-table.js","../../../../overview/packages/fluent-page-data/src/preference/use-selected-cards-with-preference.js","../../../../overview/packages/fluent-page-data/src/preference/card-preference/performance-chart.js","../../../../overview/packages/fluent-page-data/src/preference/card-preference/top-changes.js","../../../../overview/packages/fluent-page-data/src/preference/card-preference/devices.js","../../../../overview/packages/fluent-page-data/src/cards-configs/fluent-card-configs.js","../../../../overview/packages/fluent-page-data/src/helper/get-navigation-level.js","../../../../overview/packages/fluent-page-data/src/helper/get-cc-jsdata.js","../../../../overview/packages/fluent-page-data/src/helper/get-responsive-size.js","../../../../overview/packages/fluent-page-data/src/data-fetch/recommendation-card.js","../../../../overview/packages/fluent-page-data/src/data-fetch/grid-data.js","../../../../overview/packages/fluent-page-data/src/data-fetch-manager/fluent-page-data-fetch-manager.js","../../../../overview/packages/fluent-page-data/src/data-fetch/conversion-tracking.js","../../../../overview/packages/fluent-page-data/src/preference/card-preference/top-locations.js","../../../../overview/packages/fluent-page-data/src/preference/card-preference/conversion-tracking.js","../../../../overview/packages/fluent-page-data/src/preference/card-preference/recommendations.js","../../../../overview/packages/fluent-page-data/src/pmax-campaign-page-preference/pmax-single-campaign-overview-preference.js","../../../../overview/packages/fluent-page-data/src/pmax-campaign-page-preference/use-is-preference-initialized.js","../../../../overview/packages/overview-base-card/src/base-card.js","../../../../overview/packages/overview-cards-common/src/constants.js","../../../../overview/packages/overview-cards-common/src/util.js","../../../../overview/packages/overview-cards-common/src/metrics.js","../../../../overview/packages/overview-cards-common/src/filter-util.js","../../../../overview/packages/overview-cards-common/src/fetch.js","../../../../overview/packages/overview-cards-common/src/fetch-coupons.js","../../../../overview/packages/overview-cards-common/src/top-locations-fetch.js","../../../../overview/packages/overview-conversion-tracking-card/src/common/util.js","../../../../overview/packages/overview-conversion-tracking-card/src/common/strings.js","../../../../overview/packages/overview-conversion-tracking-card/src/conversion-tracking-card-react/conversion-setup/coupon-setup.js","../../../../overview/packages/overview-conversion-tracking-card/src/conversion-tracking-card-react/empty-state.js","../../../../overview/packages/overview-conversion-tracking-card/src/common/metrics.js","../../../../overview/packages/overview-conversion-tracking-card/src/conversion-tracking-card-react/react-grid/grid-increase-graph.js","../../../../overview/packages/overview-conversion-tracking-card/src/conversion-tracking-card-react/react-grid/grid-decline-graph.js","../../../../overview/packages/overview-conversion-tracking-card/src/conversion-tracking-card-react/react-grid/grid-name-cell.js","../../../../overview/packages/overview-conversion-tracking-card/src/conversion-tracking-card-react/react-grid/grid-hover-container.js","../../../../overview/packages/overview-conversion-tracking-card/src/conversion-tracking-card-react/react-grid/grid-row.js","../../../../overview/packages/overview-conversion-tracking-card/src/conversion-tracking-card-react/react-grid/react-grid.js","../../../../overview/packages/overview-conversion-tracking-card/src/common/error-type.js","../../../../overview/packages/overview-conversion-tracking-card/src/conversion-tracking-card-react/conversion-error-overview/popup.js","../../../../overview/packages/overview-conversion-tracking-card/src/conversion-tracking-card-react/conversion-error-overview/line.js","../../../../overview/packages/overview-conversion-tracking-card/src/conversion-tracking-card-react/conversion-error-overview/status-overview.js","../../../../overview/packages/overview-conversion-tracking-card/src/conversion-tracking-card-react/conversion-error-overview/footer.js","../../../../overview/packages/overview-conversion-tracking-card/src/conversion-tracking-card-react/react-grid/grid-metric-picker.js","../../../../overview/packages/overview-conversion-tracking-card/src/conversion-tracking-card-react/react-grid/grid-metric-picker-fluent.js","../../../../overview/packages/overview-conversion-tracking-card/src/conversion-tracking-card-react/react-grid/grid-header.js","../../../../overview/packages/overview-conversion-tracking-card/src/conversion-tracking-card-react/conversion-tracking-state.js","../../../../overview/packages/overview-conversion-tracking-card/src/conversion-tracking-card-react/conversion-tracking-card.js","../../../../overview/packages/overview-conversion-tracking-card/src/common/instrumentation.js","../../../../overview/packages/overview-conversion-tracking-card/src/conversion-tracking-card-backbone.js","../../../../overview/packages/overview-conversion-tracking-card/src/conversion-tracking-card-fluent.js","../../../../overview/packages/overview-device-card/src/metric/index.js","../../../../overview/packages/overview-device-card/src/order.js","../../../../overview/packages/overview-device-card/src/index.js","../../../../overview/packages/overview-grid-card/src/content.js","../../../../overview/packages/overview-grid-card/src/index.js","../../../../overview/packages/overview-grid-card/src/search-term-operations/add-keyword.js","../../../../overview/packages/overview-metric-picker/src/info-tooltip.js","../../../../overview/packages/overview-metric-picker/src/index.js","../../../../overview/packages/overview-panel/index.js","../../../../overview/packages/overview-panel/src/config/dashboard-config.js","../../../../overview/packages/overview-panel/src/dashboard/add-card/viewmodel.js","../../../../overview/packages/overview-panel/src/dashboard/add-card/index.js","../../../../overview/packages/overview-panel/src/config/welcome-card-config.js","../../../../overview/packages/overview-panel/src/dashboard/card-state.js","../../../../overview/packages/overview-panel/src/dashboard/datefilter-state.js","../../../../overview/packages/overview-panel/src/dashboard/util.js","../../../../overview/packages/overview-panel/src/dashboard/i18nMappings.js","../../../../overview/packages/overview-panel/src/dashboard/dashboard-view.js","../../../../overview/packages/overview-panel/src/dashboard-page/dashboard-page-view.js","../../../../overview/packages/overview-panel/src/instrumentation/log-helper.js","../../../../overview/packages/overview-recommendations-config/src/tips-config.js","../../../../overview/packages/overview-top-changes-card/src/content.js","../../../../overview/packages/overview-top-changes-card/src/index.js","../../../../performance-charts/packages/inline-chart-preferences/src/chart-preference-subadapter.js","../../../../performance-charts/packages/inline-chart-preferences/src/inline-chart-preferences.js","../../../../performance-charts/packages/inline-chart/src/chart-label.js","../../../../performance-charts/packages/metrics-picker/src/metrics-picker.js","../../../../performance-charts/packages/granularity-picker/src/granularity-picker.js","../../../../performance-charts/packages/inline-chart/src/chart-panel.js","../../../../performance-charts/packages/inline-chart/src/constants.js","../../../../performance-charts/packages/inline-chart/src/chart-formatter.js","../../../../performance-charts/packages/inline-chart/src/chart-granularity-adapter.js","../../../../performance-charts/packages/inline-chart/src/chart-metrics-adapter.js","../../../../performance-charts/packages/inline-chart/src/chart-data-adapter.js","../../../../performance-charts/packages/inline-chart/src/fluctuation-bulb.js","../../../../performance-charts/packages/inline-chart/src/inline-chart-instr-schema.js","../../../../performance-charts/packages/inline-chart/src/fluctuation-panel.js","../../../../performance-charts/packages/inline-chart/style/js/highcharts-style.js","../../../../performance-charts/packages/inline-chart/src/inline-chart.js","../../overview-card-styles/src/competition-card-style.js","../../overview-card-styles/src/conversion-tracking-card-style.js","../../overview-card-styles/src/device-card-style.js","../../overview-card-styles/src/grid-card-style.js","../../overview-card-styles/src/metric-picker-style.js","../../overview-card-styles/src/metric-picker-fluent-v2-style.js","../../overview-card-styles/src/performance-card-style.js","../../overview-card-styles/src/performance-card-fluent-v2-style.js","../../overview-card-styles/src/performance-graph-style.js","../../overview-card-styles/src/tip-card-style-default.js","../../overview-card-styles/src/tip-card-style.js","../../overview-card-styles/src/tip-card-fluent-v2-style.js","../../overview-card-styles/src/top-change-card-style.js","../../overview-card-styles/src/top-location-card-style.js","../../overview-card-styles/src/top-location-card-fluent-v2-style.js","../../page-menu-container/src/campaign-page-menu-loader.js","../../page-menu-container/src/accounts-page-menu-loader.js","../../page-menu-container/src/bulk-operation-menu-loader.js","../../page-menu-container/src/business-data-page-menu-loader.js","../../page-menu-container/src/hotel-center-page-menu-loader.js","../../page-menu-container/src/hotel-center-v2-page-menu-loader.js","../../page-menu-container/src/merchant-center-page-menu-loader.js","../../page-menu-container/src/bid-strategies-menu-loader.js","../../page-menu-container/src/uet-tag-page-menu-loader.js","../../page-menu-container/src/asset-library-page-menu-loader.js","../../page-menu-container/src/page-menu-container.js","../../page-menu/src/common/page-item-helper.js","../../page-menu/src/styles/page-menu-item-styles.js","../../page-menu/src/components/landing-page-selector.js","../../page-menu/src/components/page-menu-item.js","../../page-menu/src/page-menu.js","../../page-menu/src/styles/page-menu-styles.js","../../page-menu/src/page-menu-with-default-landing-page.js","../../page-menu/src/detail-list-page-menu.js","../../page-menu/src/styles/page-menu-detail-list-styles.js","../../positive-keywords-data/src/columns-config.js","../../positive-keywords-data/src/filter-config.js","../../positive-keywords-data/src/data-fetch-config.js","../../positive-keywords-data/src/data-fetch-source.js","../../../../overview/packages/overview-cards-common/src/grid-entity-name-template.pug","../../../../overview/packages/overview-cards-common/src/top-changes-grid-template.pug","../../../../overview/packages/overview-device-card/src/metric/metric-picker-button-template.pug","../../../../overview/packages/overview-device-card/src/metric/template-v2.pug","../../../../overview/packages/overview-device-card/src/template.pug","../../../../overview/packages/overview-grid-card/src/content-template.pug","../../../../overview/packages/overview-grid-card/src/cover-template.pug","../../../../overview/packages/overview-grid-card/src/dropdown-template.pug","../../../../overview/packages/overview-grid-card/src/metric-picker-template.pug","../../../../overview/packages/overview-grid-card/src/performance-metric-header-template.pug","../../../../overview/packages/overview-grid-card/src/performance-metric-template.pug","../../../../overview/packages/overview-grid-card/src/placeholder-template.pug","../../../../overview/packages/overview-grid-card/src/search-term-operations/add-keyword-template.pug","../../../../overview/packages/overview-grid-card/src/template.pug","../../../../overview/packages/overview-metric-picker/src/button-template.pug","../../../../overview/packages/overview-metric-picker/src/dropdown-menu-template.pug","../../../../overview/packages/overview-metric-picker/src/template.pug","../../../../overview/packages/overview-panel/src/dashboard-page/dashboard-page-template.pug","../../../../overview/packages/overview-panel/src/dashboard/add-card/template-vnext.pug","../../../../overview/packages/overview-panel/src/dashboard/dashboard-template.pug","../../../../overview/packages/overview-panel/src/dashboard/footer-template.pug","../../../../overview/packages/overview-panel/src/dashboard/new-feature-template.pug","../../../../overview/packages/overview-panel/src/dashboard/new-tile-banner-template.pug","../../../../overview/packages/overview-panel/src/dashboard/too-many-accounts-warning.pug","../../../../overview/packages/overview-top-changes-card/src/metric-picker-button-template.pug","../../../../overview/packages/overview-top-changes-card/src/template.pug"],"sourcesContent":["const cardWelcomeTipsId = 'CardType-WelcomeTips';\r\nconst cardTopLocationsId = 'CardType-TopLocations';\r\nconst cardAssetPerformanceId = 'CardType-AssetPerformance';\r\nconst cardPerformanceId = 'CardType-Performance';\r\nconst cardDiagnosticId = 'CardType-Diagnostic';\r\nconst cardRecommendationsId = 'CardType-Recommendations';\r\nconst cardTopCampaignsId = 'CardType-TopCampaigns';\r\nconst cardTopAccountsId = 'CardType-TopAccounts';\r\nconst cardTopKeywordsId = 'CardType-TopKeyword';\r\nconst cardDeviceId = 'CardType-Device';\r\nconst cardSearchTermsId = 'CardType-TopSearchTerms';\r\nconst cardTopAdGroupsId = 'CardType-TopAdGroup';\r\nconst cardCompetitionId = 'CardType-Competition';\r\nconst cardConversionTrackingId = 'CardType-Conversion-Tracking';\r\nconst cardTopChangesAccountId = 'CardType-TopChanges-Account';\r\nconst cardTopChangesCampaignId = 'CardType-TopChanges-Campaign';\r\nconst cardTopChangesAdGroupId = 'CardType-TopChanges-AdGroup';\r\nconst cardNavigateToFullProductId = 'CardType-NavigateToFullProduct';\r\n\r\nexport {\r\n  cardWelcomeTipsId,\r\n  cardTopLocationsId,\r\n  cardAssetPerformanceId,\r\n  cardPerformanceId,\r\n  cardDiagnosticId,\r\n  cardRecommendationsId,\r\n  cardTopCampaignsId,\r\n  cardTopAccountsId,\r\n  cardTopKeywordsId,\r\n  cardDeviceId,\r\n  cardSearchTermsId,\r\n  cardTopAdGroupsId,\r\n  cardCompetitionId,\r\n  cardConversionTrackingId,\r\n  cardTopChangesAccountId,\r\n  cardTopChangesCampaignId,\r\n  cardTopChangesAdGroupId,\r\n  cardNavigateToFullProductId,\r\n};\r\n","import _ from 'underscore';\r\nimport { CampaignType as AccountLevelCampaignType } from '@bingads-webui-campaign/campaign-ui-common';\r\n\r\nconst CampaignLevelCampaignType = _.mapObject(AccountLevelCampaignType, (__, key) => key);\r\n\r\n// For card level preference, we should always use getCardPreferenceWithDefault to make sure we can fallback to default value\r\n// we now should only use this to try to get page level preference\r\nexport const getPreference = ({\r\n  key,\r\n  preference,\r\n}) => {\r\n  // In fluent overview page, we always use user level preference, if we need to load legacy preference, we need add scope info\r\n  // to figure out the correct preference level.\r\n  const preferenceObj = preference.findByNameAtUserLevel(key);\r\n\r\n  return _.get(preferenceObj, 'Data');\r\n};\r\n\r\nexport const getPreferencePatcher = ({\r\n  key,\r\n  preference,\r\n}) => (update) => {\r\n  const preferenceData = getPreference({ key, preference });\r\n  const newPreferenceData = {\r\n    ...preferenceData,\r\n    ...update,\r\n  };\r\n\r\n  preference.setAtUserLevel({\r\n    Data: newPreferenceData,\r\n    Name: key,\r\n  });\r\n};\r\n\r\nfunction getPreferenceKeyPrefix({\r\n  navigationLevel,\r\n  campaignType,\r\n}) {\r\n  let campaignTypeString = 'other';\r\n  if (campaignType === CampaignLevelCampaignType.Hotel || campaignType === AccountLevelCampaignType.Hotel) {\r\n    campaignTypeString = 'hotel';\r\n  } else if (campaignType === CampaignLevelCampaignType.PerformanceMax || campaignType === AccountLevelCampaignType.PerformanceMax) {\r\n    campaignTypeString = 'pmax';\r\n  } else if (campaignType === CampaignLevelCampaignType.App || campaignType === AccountLevelCampaignType.App) {\r\n    campaignTypeString = 'app';\r\n  } else if (campaignType === CampaignLevelCampaignType.LinkedIn || campaignType === AccountLevelCampaignType.LinkedIn) {\r\n    campaignTypeString = 'linkedin';\r\n  }\r\n\r\n  return `OverviewPage-${navigationLevel}-${campaignTypeString}`;\r\n}\r\n\r\nexport const getCardPreferenceKey = ({\r\n  cardTypeId,\r\n  navigationLevel,\r\n  campaignType,\r\n}) => {\r\n  const prefix = getPreferenceKeyPrefix({ navigationLevel, campaignType });\r\n\r\n  return `${prefix}-${cardTypeId}`;\r\n};\r\n\r\nexport const getPagePreferenceKey = ({\r\n  navigationLevel,\r\n  campaignType,\r\n}) => {\r\n  const prefix = getPreferenceKeyPrefix({ navigationLevel, campaignType });\r\n  return `${prefix}-PageData`;\r\n};\r\n\r\n// This is not a pure function, we may need to clean up the preference store(set defualt value) if current preference is not valid\r\nexport const getCardPreferenceWithDefault = ({\r\n  config,\r\n  navigationLevel,\r\n  campaignType,\r\n  preference,\r\n  permissions,\r\n}) => {\r\n  const cardPreferenceKey = getCardPreferenceKey({\r\n    cardTypeId: config.typeId,\r\n    navigationLevel,\r\n    campaignType,\r\n  });\r\n  let originCardPreference = getPreference({\r\n    key: cardPreferenceKey,\r\n    preference,\r\n  });\r\n  const defaultPreference = config.getDefaultPreference ? config.getDefaultPreference({\r\n    permissions,\r\n  }) : undefined;\r\n\r\n  if (originCardPreference && _.isFunction(config.isPreferenceValid) && !config.isPreferenceValid({\r\n    cardPreference: originCardPreference,\r\n    permissions,\r\n    campaignType,\r\n  })) {\r\n    originCardPreference = null;\r\n    if (defaultPreference) {\r\n      const patchPreference = getPreferencePatcher({\r\n        key: cardPreferenceKey,\r\n        preference,\r\n      });\r\n      patchPreference(defaultPreference);\r\n    }\r\n  }\r\n\r\n  const cardPreference = (originCardPreference || defaultPreference)\r\n    ? _.defaults(originCardPreference, defaultPreference)\r\n    : undefined;\r\n\r\n  return cardPreference;\r\n};\r\n\r\nexport const getCardPreferenceOptionsForDfm = ({\r\n  config,\r\n  navigationLevel,\r\n  campaignType,\r\n  preference,\r\n  permissions,\r\n}) => {\r\n  const cardPreference = getCardPreferenceWithDefault({\r\n    config,\r\n    navigationLevel,\r\n    campaignType,\r\n    preference,\r\n    permissions,\r\n  });\r\n\r\n  let options = cardPreference;\r\n  if (options && config.getDfmPreferenceObject) {\r\n    options = config.getDfmPreferenceObject(cardPreference);\r\n  }\r\n\r\n  return {\r\n    id: config.typeId,\r\n    options,\r\n  };\r\n};\r\n","import {\r\n  allMetrics as metrics,\r\n  metricToDisplayNameMap,\r\n  defaultGridColumns,\r\n  AccountsMode,\r\n} from '@bingads-webui-campaign/overview-cards-common';\r\n\r\nconst ComparisonValues = {\r\n  PerformanceMetrics: 'PerformanceMetrics',\r\n  PerformanceMetricsChange: 'PerformanceMetricsChange',\r\n  PerformanceMetricsChangePercentage: 'PerformanceMetricsChangePercentage',\r\n};\r\n\r\nexport const getHeaderPropsFromPreferenceForPerformanceTable = ({\r\n  cardPreference,\r\n  patchPreference,\r\n  i18n,\r\n  dateRange,\r\n}) => {\r\n  const initialSelectedValue = (cardPreference && cardPreference.selectedComparisonValue) || ComparisonValues.PerformanceMetrics;\r\n  if (!dateRange.compared) {\r\n    return { options: [], initialSelectedValue };\r\n  }\r\n  return ({\r\n    options: [\r\n      {\r\n        value: ComparisonValues.PerformanceMetrics,\r\n        displayName: i18n.getString(_TL_('Value')),\r\n      },\r\n      {\r\n        value: ComparisonValues.PerformanceMetricsChange,\r\n        displayName: i18n.getString(_TL_('Change')),\r\n      },\r\n      {\r\n        value: ComparisonValues.PerformanceMetricsChangePercentage,\r\n        displayName: i18n.getString(_TL_('Change %')),\r\n      },\r\n    ],\r\n    initialSelectedValue,\r\n    onOptionSelected: (value) => {\r\n      patchPreference({\r\n        selectedComparisonValue: value,\r\n      });\r\n    },\r\n  });\r\n};\r\n\r\nexport const getTablePropsFromPreferenceForPerformanceTable = ({\r\n  cardPreference,\r\n  patchPreference,\r\n  permissions,\r\n  navigationLevel,\r\n  i18n,\r\n  campaignType,\r\n}) => {\r\n  const selectedColumns = (cardPreference && cardPreference.selectedColumns) || defaultGridColumns;\r\n  const allMetrics = metrics(permissions, AccountsMode.Expert, campaignType).map(metric => ({\r\n    key: metric,\r\n    displayName: i18n.getString(metricToDisplayNameMap[metric]),\r\n  }));\r\n  const initialSelectedMetrics = selectedColumns.map(column => allMetrics.find(metric => metric.key === column));\r\n  return {\r\n    initialSelectedMetrics,\r\n    allMetrics,\r\n    initialSortColumn: (cardPreference && cardPreference.sortColumn) || selectedColumns[0],\r\n    initialSortDirection: (cardPreference && cardPreference.sortDirection) || 'descending',\r\n    patchPreference,\r\n    navigationLevel,\r\n    campaignType,\r\n  };\r\n};\r\n\r\nfunction isNullOrUndefined(value) {\r\n  return value == null; // This covers both null and undefined\r\n}\r\n\r\nexport const isTablePreferenceValid = ({\r\n  cardPreference,\r\n  permissions,\r\n  campaignType,\r\n}) => {\r\n  const metricsKeys = metrics(permissions, AccountsMode.Expert, campaignType);\r\n  if (!cardPreference\r\n    || (!isNullOrUndefined(cardPreference.selectedColumns) && cardPreference.selectedColumns.length !== 3)\r\n    || (!isNullOrUndefined(cardPreference.selectedColumns) && cardPreference.selectedColumns.some(column => !metricsKeys.includes(column)))\r\n    || (!isNullOrUndefined(cardPreference.selectedComparisonValue) && !Object.values(ComparisonValues).includes(cardPreference.selectedComparisonValue))\r\n    || (!isNullOrUndefined(cardPreference.sortColumn) && !metricsKeys.includes(cardPreference.sortColumn))\r\n    || (!isNullOrUndefined(cardPreference.sortDirection) && (cardPreference.sortDirection !== 'descending' && cardPreference.sortDirection !== 'ascending'))\r\n  ) {\r\n    return false;\r\n  }\r\n\r\n  return true;\r\n};\r\n\r\nexport const getDefaultPerformanceTablePreference = () => ({\r\n  selectedColumns: defaultGridColumns,\r\n  sortColumn: defaultGridColumns[0],\r\n  sortDirection: 'descending',\r\n  selectedComparisonValue: ComparisonValues.PerformanceMetrics,\r\n});\r\n\r\nexport const getDfmPreferenceObjectForPerformanceTable = cardPreference => ({\r\n  columns: cardPreference.selectedColumns,\r\n  orderby: cardPreference.sortColumn,\r\n  direction: cardPreference.sortDirection === 'descending' ? -1 : 1,\r\n  selectedMenuItem: cardPreference.selectedComparisonValue,\r\n});\r\n\r\n","import _ from 'underscore';\r\nimport { useMemo, useCallback, useState } from 'react';\r\n\r\nimport { CampaignType as AccountLevelCampaignType } from '@bingads-webui-campaign/campaign-ui-common';\r\n\r\nimport { getPreference, getPreferencePatcher, getPagePreferenceKey } from './preference-helper';\r\n\r\nconst CampaignLevelCampaignType = _.mapObject(AccountLevelCampaignType, (val, key) => key);\r\n\r\nfunction fetchDashboardId({\r\n  preference, campaignType, navigationLevel, serverContext,\r\n}) {\r\n  const name = 'default';\r\n  const preferenceData = preference.findByNameAtUserLevel('AccountsOverviewAccountMode');\r\n  if ((preferenceData && preferenceData.Data === 'smart') || serverContext.CurrentCustomer.HasExpertAccount === false) {\r\n    return `${name}-${navigationLevel}-smart`;\r\n  } else if (campaignType === CampaignLevelCampaignType.Hotel || campaignType === AccountLevelCampaignType.Hotel) {\r\n    return `${name}-${navigationLevel}-hotel`;\r\n  } else if (campaignType === CampaignLevelCampaignType.PerformanceMax || campaignType === AccountLevelCampaignType.PerformanceMax) {\r\n    return `${name}-${navigationLevel}-performancemax`;\r\n  } else if (campaignType === CampaignLevelCampaignType.App || campaignType === AccountLevelCampaignType.App) {\r\n    return `${name}-${navigationLevel}-app`;\r\n  }\r\n  return `${name}-${navigationLevel}`;\r\n}\r\n\r\nfunction getLegacyPreference({\r\n  preference, campaignType, navigationLevel, serverContext,\r\n}) {\r\n  const prefs = navigationLevel === 'customer' ? preference.findByNameAtUserLevel('accountsDashboard/preferences') : preference.findByNameAtAccountLevel('dashboard/preferences');\r\n  const dashboardId = fetchDashboardId({\r\n    preference, campaignType, navigationLevel, serverContext,\r\n  });\r\n  return _.get(prefs, ['Data', dashboardId, 'cards']);\r\n}\r\n\r\nfunction getAvailableCardsConfigs({\r\n  cardsConfigs,\r\n  navigationLevel,\r\n  campaignType,\r\n  isSDK,\r\n}) {\r\n  return _.filter(cardsConfigs, cardConfig => cardsConfigs.isValidForNavigationLevel(cardConfig, navigationLevel, campaignType, isSDK));\r\n}\r\n\r\nfunction getSelectedCardsConfigs({\r\n  availableCardsConfigs,\r\n  selectedCards,\r\n}) {\r\n  if (_.isArray(selectedCards)) {\r\n    return _.filter(availableCardsConfigs, cardConfig => !_.get(_.find(selectedCards, sc => sc.id === cardConfig.typeId), 'hidden'));\r\n  }\r\n  return availableCardsConfigs;\r\n}\r\n\r\nexport function getInitSelectedCardsConfig({\r\n  preference,\r\n  cardsConfigs,\r\n  navigationLevel,\r\n  campaignType,\r\n  serverContext,\r\n  isSDK,\r\n}) {\r\n  const pagePreferenceKey = getPagePreferenceKey({\r\n    navigationLevel,\r\n    campaignType,\r\n  });\r\n  const pagePreference = getPreference({\r\n    key: pagePreferenceKey,\r\n    preference,\r\n  }) || {};\r\n\r\n  const legacyCardSelectionPreference = getLegacyPreference({\r\n    preference, campaignType, navigationLevel, serverContext,\r\n  });\r\n\r\n  const selectedCards = pagePreference.selectedCards || legacyCardSelectionPreference;\r\n\r\n  const availableCardsConfigs = getAvailableCardsConfigs({\r\n    cardsConfigs,\r\n    navigationLevel,\r\n    campaignType,\r\n    isSDK,\r\n  });\r\n\r\n  const selectedCardsConfigs = getSelectedCardsConfigs({\r\n    availableCardsConfigs,\r\n    selectedCards,\r\n  });\r\n\r\n  return selectedCardsConfigs;\r\n}\r\n\r\nexport const useSelectedCardsWithPreference = ({\r\n  preference,\r\n  cardsConfigs,\r\n  navigationLevel,\r\n  campaignType,\r\n  serverContext,\r\n  isLoadingWelcomeCardConfig,\r\n  isSDK,\r\n}) => {\r\n  const pagePreferenceKey = getPagePreferenceKey({\r\n    navigationLevel,\r\n    campaignType,\r\n  });\r\n\r\n  const pagePreference = useMemo(() => getPreference({\r\n    key: pagePreferenceKey,\r\n    preference,\r\n  }) || {}, [pagePreferenceKey, preference]);\r\n\r\n  const patchPagePreference = useMemo(() => getPreferencePatcher({\r\n    key: pagePreferenceKey,\r\n    preference,\r\n  }), [pagePreferenceKey, preference]);\r\n\r\n  const { selectedCards: initSelectedCards } = pagePreference;\r\n  const legacyCardSelectionPreference = getLegacyPreference({\r\n    preference, campaignType, navigationLevel, serverContext,\r\n  });\r\n  const [selectedCards, setSelectedCards] = useState(initSelectedCards || legacyCardSelectionPreference);\r\n\r\n  const availableCardsConfigs = useMemo(\r\n    () => getAvailableCardsConfigs({\r\n      cardsConfigs,\r\n      navigationLevel,\r\n      campaignType,\r\n      isSDK,\r\n    }),\r\n    [campaignType, cardsConfigs, navigationLevel, isSDK]\r\n  );\r\n\r\n  const selectedCardsConfigs = useMemo(() => getSelectedCardsConfigs({\r\n    availableCardsConfigs,\r\n    selectedCards,\r\n  }), [availableCardsConfigs, selectedCards]);\r\n\r\n  const cardSelectionCards = useMemo(() => {\r\n    if (!_.isArray(selectedCards)) {\r\n      return _.map(availableCardsConfigs, cardConfig => ({ id: cardConfig.typeId, hidden: false }));\r\n    }\r\n    return _.map(availableCardsConfigs, cardConfig => ({ id: cardConfig.typeId, hidden: _.get(_.find(selectedCards, sc => sc.id === cardConfig.typeId), 'hidden') }));\r\n  }, [availableCardsConfigs, selectedCards]);\r\n\r\n  const onCardSelectionSaved = useCallback((selectionToSave) => {\r\n    patchPagePreference({ selectedCards: selectionToSave });\r\n    setSelectedCards(selectionToSave);\r\n  }, [patchPagePreference]);\r\n\r\n  if (isLoadingWelcomeCardConfig) {\r\n    return {\r\n      selectedCardsConfigs: [],\r\n      cardSelectionCards: [],\r\n      onCardSelectionSaved: _.noop,\r\n    };\r\n  }\r\n\r\n  return {\r\n    selectedCardsConfigs,\r\n    cardSelectionCards,\r\n    onCardSelectionSaved,\r\n  };\r\n};\r\n","import _ from 'underscore';\r\n\r\nimport { allMetrics, defaultMetrics, AccountsMode } from '@bingads-webui-campaign/overview-cards-common';\r\n\r\nconst validMetricIndexes = [0, 1, 2, 3];\r\nconst defaultSelectedMetricIndexes = [0, 1];\r\n\r\nexport const getDefaultPerformanceChartPreference = ({\r\n  permissions,\r\n}) => ({\r\n  selectedMetricIndexes: defaultSelectedMetricIndexes,\r\n  metrics: defaultMetrics(permissions, 1),\r\n});\r\n\r\nexport const getPropsFromPreferenceForPerformanceChart = ({\r\n  cardPreference,\r\n  patchPreference,\r\n  campaignType,\r\n}) => {\r\n  const shellContentElement = document.querySelector('.app-shell-content');\r\n\r\n  return {\r\n    ...cardPreference,\r\n    patchPreference,\r\n    shellContentElement,\r\n    campaignType,\r\n  };\r\n};\r\n\r\nexport const isPerformanceChartPreferenceValid = ({\r\n  cardPreference,\r\n  permissions,\r\n  campaignType,\r\n}) => {\r\n  const availableMetricKeys = allMetrics(permissions, AccountsMode.Expert, campaignType);\r\n  if (!cardPreference\r\n    || !_.isArray(cardPreference.metrics)\r\n    || _.some(cardPreference.metrics, metric => !availableMetricKeys.includes(metric))\r\n    || cardPreference.metrics.length !== 4\r\n    || !_.isArray(cardPreference.selectedMetricIndexes)\r\n    || cardPreference.selectedMetricIndexes.length > 4\r\n    || _.some(cardPreference.selectedMetricIndexes, index => !validMetricIndexes.includes(index))\r\n  ) {\r\n    return false;\r\n  }\r\n\r\n  return true;\r\n};\r\n","import _ from 'underscore';\r\n\r\nimport { TopChangesFilterOption } from '@bingads-webui-campaign/overview-cards-common';\r\n\r\nconst defaultSelectedMetric = 'Clicks';\r\n\r\nexport const getTopChangesAllMetrics = i18n => ([{\r\n  key: 'Clicks',\r\n  displayName: i18n.getString(_TL_('Clicks')),\r\n}, {\r\n  key: 'Impressions',\r\n  displayName: i18n.getString(_TL_('Impressions')),\r\n}, {\r\n  key: 'CTR',\r\n  displayName: i18n.getString(_TL_('CTR')),\r\n}, {\r\n  key: 'Spend',\r\n  displayName: i18n.getString(_TL_('Spend')),\r\n}, {\r\n  key: 'AverageCPC',\r\n  displayName: i18n.getString(_TL_('Avg. CPC')),\r\n}, {\r\n  key: 'PartialConversionCPA',\r\n  displayName: i18n.getString(_TL_('Conv.')),\r\n}, {\r\n  key: 'PartialConversionRate',\r\n  displayName: i18n.getString(_TL_('Conv. Rate')),\r\n}]);\r\n\r\nexport function getPropsForTopChanges({\r\n  navigationLevel,\r\n  cardPreference,\r\n  patchPreference,\r\n  i18n,\r\n  campaignType,\r\n}) {\r\n  const allMetrics = getTopChangesAllMetrics(i18n);\r\n  let preferenceFromServer = _.get(cardPreference, 'metric');\r\n  if (!_.isString(preferenceFromServer)\r\n    || !allMetrics.some(metric => metric.key === preferenceFromServer)\r\n  ) {\r\n    preferenceFromServer = defaultSelectedMetric;\r\n  }\r\n\r\n  return {\r\n    preferenceFromServer,\r\n    patchPreference,\r\n    navigationLevel,\r\n    campaignType,\r\n  };\r\n}\r\n\r\nexport const getHeaderPropsFromPreferenceForTopChanges = ({\r\n  cardPreference,\r\n  patchPreference,\r\n  i18n,\r\n}) => ({\r\n  options: [\r\n    {\r\n      value: TopChangesFilterOption.AllChanges,\r\n      displayName: i18n.getString(_TL_('All changes')),\r\n    },\r\n    {\r\n      value: TopChangesFilterOption.TopGainers,\r\n      displayName: i18n.getString(_TL_('Top gainers')),\r\n    },\r\n    {\r\n      value: TopChangesFilterOption.TopDecliners,\r\n      displayName: i18n.getString(_TL_('Top decliners')),\r\n    },\r\n    {\r\n      value: TopChangesFilterOption.Insights,\r\n      displayName: i18n.getString(_TL_('Insights')),\r\n    },\r\n  ],\r\n  initialSelectedValue: (cardPreference && cardPreference.filter) || TopChangesFilterOption.AllChanges,\r\n  onOptionSelected: (value) => {\r\n    patchPreference({\r\n      filter: value,\r\n    });\r\n  },\r\n});\r\n\r\nexport const getDfmPreferenceObjectForTopChanges = cardPreference => ({\r\n  metric: cardPreference.metric,\r\n  selectedMenuItem: cardPreference.filter,\r\n});\r\n\r\nexport const getDefaultTopChangesPreference = () => ({\r\n  filter: TopChangesFilterOption.AllChanges,\r\n  metric: defaultSelectedMetric,\r\n});\r\n","import {\r\n  allMetrics as metrics,\r\n  metricToDisplayNameMap,\r\n  defaultGridColumns,\r\n} from '@bingads-webui-campaign/overview-cards-common';\r\n\r\nexport const getTablePropsFromPreferenceForDevices = ({\r\n  cardPreference,\r\n  patchPreference,\r\n  permissions,\r\n  navigationLevel,\r\n  campaignType,\r\n  i18n,\r\n}) => {\r\n  const selectedColumns = (cardPreference && cardPreference.selectedColumns) || defaultGridColumns;\r\n  const allMetrics = metrics(permissions, 1, campaignType).map(metric => ({\r\n    key: metric,\r\n    displayName: i18n.getString(metricToDisplayNameMap[metric]),\r\n  }));\r\n  const initialSelectedMetrics = selectedColumns.map(column => allMetrics.find(metric => metric.key === column));\r\n\r\n  return {\r\n    initialSelectedMetrics,\r\n    allMetrics,\r\n    patchPreference,\r\n    navigationLevel,\r\n    campaignType,\r\n  };\r\n};\r\n\r\nexport const isDevicePreferenceValid = ({\r\n  cardPreference,\r\n  permissions,\r\n  campaignType,\r\n}) => {\r\n  const metricsKeys = metrics(permissions, 1, campaignType);\r\n  if (!cardPreference\r\n    || cardPreference.selectedColumns.length !== 3\r\n    || cardPreference.selectedColumns.some(column => !metricsKeys.includes(column))\r\n  ) {\r\n    return false;\r\n  }\r\n\r\n  return true;\r\n};\r\n\r\nexport const getDefaultDevicePreference = () => ({\r\n  selectedColumns: defaultGridColumns,\r\n});\r\n","import _ from 'underscore';\r\nimport { CampaignType as AccountLevelCampaignType } from '@bingads-webui-campaign/campaign-ui-common';\r\nimport { CardSize } from '@bingads-webui-campaign-react/overview-card-const';\r\nimport edm from '@bingads-webui-component-legacy/edm-campaign/index';\r\n\r\nimport {\r\n  cardWelcomeTipsId,\r\n  cardPerformanceId,\r\n  cardDiagnosticId,\r\n  cardAssetPerformanceId,\r\n  cardRecommendationsId,\r\n  cardTopCampaignsId,\r\n  cardTopAccountsId,\r\n  cardTopKeywordsId,\r\n  cardDeviceId,\r\n  cardSearchTermsId,\r\n  cardCompetitionId,\r\n  cardTopAdGroupsId,\r\n  cardConversionTrackingId,\r\n  cardTopLocationsId,\r\n  cardTopChangesAccountId,\r\n  cardTopChangesCampaignId,\r\n  cardTopChangesAdGroupId,\r\n  cardNavigateToFullProductId,\r\n} from '@bingads-webui-campaign/fluent-page-consts';\r\n\r\nimport {\r\n  getDfmPreferenceObjectForPerformanceTable,\r\n  getDefaultPerformanceTablePreference,\r\n  isTablePreferenceValid,\r\n} from '../preference/card-preference/performance-table';\r\n\r\nimport {\r\n  getDefaultPerformanceChartPreference,\r\n  isPerformanceChartPreferenceValid,\r\n} from '../preference/card-preference/performance-chart';\r\n\r\nimport {\r\n  getDfmPreferenceObjectForTopChanges,\r\n  getDefaultTopChangesPreference,\r\n} from '../preference/card-preference/top-changes';\r\n\r\nimport {\r\n  getDefaultDevicePreference,\r\n  isDevicePreferenceValid,\r\n} from '../preference/card-preference/devices';\r\n\r\nconst CampaignLevelCampaignType = _.mapObject(AccountLevelCampaignType, (val, key) => key);\r\n\r\nfunction getCardOptions({\r\n  navigationLevel,\r\n  campaignType,\r\n  isKeyword = false,\r\n  isSearchTerm = false,\r\n}) {\r\n  let edmLevel;\r\n  let entitySet;\r\n  let targetNagivationLevel = navigationLevel;\r\n  let extraFilter;\r\n\r\n  switch (navigationLevel) {\r\n    case 'account':\r\n      edmLevel = edm.currentAccount;\r\n      entitySet = edmLevel.Campaigns;\r\n      break;\r\n    case 'campaign':\r\n      // For PMax and App campaign, call campaigns on account level with filter by Campaign Id to include BI data for both AssetGroups and AdGroups before migration.\r\n      if (campaignType === CampaignLevelCampaignType.PerformanceMax || campaignType === CampaignLevelCampaignType.App) {\r\n        targetNagivationLevel = 'account';\r\n        edmLevel = edm.currentAccount;\r\n        entitySet = edmLevel.Campaigns;\r\n        extraFilter = [{\r\n          filter: {\r\n            key: 'CampaignId',\r\n            value: {\r\n              query: {\r\n                Id: _.result(edm.currentCampaign, ['navigation', 'key']),\r\n              },\r\n            },\r\n          },\r\n        }];\r\n      } else {\r\n        edmLevel = edm.currentCampaign;\r\n        entitySet = edmLevel.AdGroups;\r\n      }\r\n      break;\r\n    case 'customer':\r\n      edmLevel = edm.currentCustomer;\r\n      entitySet = edmLevel.Accounts;\r\n      break;\r\n    default:\r\n      edmLevel = undefined;\r\n  }\r\n\r\n  if (isKeyword) {\r\n    return {\r\n      entitySet: edmLevel.Keywords,\r\n      navigationLevel,\r\n    };\r\n  }\r\n\r\n  if (isSearchTerm) {\r\n    return {\r\n      entitySet: edmLevel.SearchTerms,\r\n      navigationLevel,\r\n    };\r\n  }\r\n\r\n  return {\r\n    entitySet,\r\n    navigationLevel: targetNagivationLevel,\r\n    extraFilter,\r\n  };\r\n}\r\n\r\nfunction getCustomerLevelDataEntitySetOptions() {\r\n  return getCardOptions({\r\n    navigationLevel: 'customer',\r\n  });\r\n}\r\n\r\nfunction getAccountLevelDataEntitySetOptions() {\r\n  return getCardOptions({\r\n    navigationLevel: 'account',\r\n  });\r\n}\r\n\r\nfunction getTopKeywordCardOptions(navigationLevel) {\r\n  return getCardOptions({\r\n    navigationLevel,\r\n    isKeyword: true,\r\n  });\r\n}\r\n\r\nfunction getSearchTermCardOptions(navigationLevel) {\r\n  return getCardOptions({\r\n    navigationLevel,\r\n    isSearchTerm: true,\r\n  });\r\n}\r\n\r\nfunction getCampaignLevelDataEntitySetOptions() {\r\n  return getCardOptions({\r\n    navigationLevel: 'campaign',\r\n  });\r\n}\r\n\r\nexport function getFluentCardsConfigs({ permissions, showWelcomeTips = false, isMobileAppCampaign = false }) {\r\n  const audienceUnderspendShowTile = _.get(permissions, 'dynamic.AudienceUnderspendShowTile', false);\r\n\r\n  const defaultHiddenCampaignTypes = [\r\n    CampaignLevelCampaignType.None,\r\n    CampaignLevelCampaignType.Default,\r\n    CampaignLevelCampaignType.Shopping,\r\n    CampaignLevelCampaignType.DynamicSearchAds,\r\n    CampaignLevelCampaignType.Audience,\r\n    CampaignLevelCampaignType.Smart,\r\n    CampaignLevelCampaignType.Hotel,\r\n    CampaignLevelCampaignType.App,\r\n    CampaignLevelCampaignType.LinkedIn,\r\n  ];\r\n\r\n  const diagnosticCardDefaultHiddenCampaignTypesFiltered = audienceUnderspendShowTile ? _.without(defaultHiddenCampaignTypes, CampaignLevelCampaignType.Audience) : defaultHiddenCampaignTypes;\r\n  const diagnosticCardForMobileAppCampaignsFiltered = diagnosticCardDefaultHiddenCampaignTypesFiltered.filter(type => type !== CampaignLevelCampaignType.App);\r\n\r\n  const cardsConfig = showWelcomeTips ? [\r\n    {\r\n      validFor: ['account'],\r\n      typeId: cardWelcomeTipsId,\r\n      name: _TL_('Tips'),\r\n      size: CardSize.Small,\r\n      getEntitySetOptions: getCardOptions,\r\n      enabled: true,\r\n    },\r\n  ] :\r\n    // Order matters in this array, as this will be the default order of the cards in the dashboard\r\n    // When we need to add a new config here, please refer to old overview page to get the correct position in this array\r\n    // If we need to add a new card, please check with PM/Designer to get the correct position\r\n    [\r\n      {\r\n        typeId: cardPerformanceId,\r\n        name: _TL_('Performance'),\r\n        size: CardSize.Large,\r\n        dynamicHeightForNarrow: true,\r\n        getEntitySetOptions: getCardOptions,\r\n        getDefaultPreference: getDefaultPerformanceChartPreference,\r\n        isPreferenceValid: isPerformanceChartPreferenceValid,\r\n        enabled: true,\r\n      },\r\n      {\r\n        typeId: cardRecommendationsId,\r\n        hideForCampaignType: [\r\n          AccountLevelCampaignType.Hotel,\r\n          AccountLevelCampaignType.App,\r\n          AccountLevelCampaignType.LinkedIn,\r\n          AccountLevelCampaignType.PerformanceMax,\r\n          CampaignLevelCampaignType.Hotel,\r\n          CampaignLevelCampaignType.App,\r\n          CampaignLevelCampaignType.LinkedIn,\r\n          CampaignLevelCampaignType.PerformanceMax,\r\n        ],\r\n        name: _TL_('Recommendations'),\r\n        size: CardSize.Small,\r\n        getEntitySetOptions: getCardOptions,\r\n        enabled: true,\r\n      },\r\n      {\r\n        validFor: ['campaign'],\r\n        typeId: cardDiagnosticId,\r\n        hideForCampaignType: isMobileAppCampaign ? diagnosticCardForMobileAppCampaignsFiltered : diagnosticCardDefaultHiddenCampaignTypesFiltered,\r\n        name: _TL_('Diagnostic'),\r\n        size: CardSize.Large,\r\n        dynamicHeightForNarrow: true,\r\n        enabled: true,\r\n      },\r\n      {\r\n        validFor: ['account'],\r\n        typeId: cardTopCampaignsId,\r\n        name: _TL_('Campaigns'),\r\n        size: CardSize.Small,\r\n        getEntitySetOptions: getAccountLevelDataEntitySetOptions,\r\n        getDfmPreferenceObject: getDfmPreferenceObjectForPerformanceTable,\r\n        getDefaultPreference: getDefaultPerformanceTablePreference,\r\n        isPreferenceValid: isTablePreferenceValid,\r\n        enabled: true,\r\n      },\r\n      {\r\n        validFor: ['campaign'],\r\n        typeId: cardTopAdGroupsId,\r\n        hideForCampaignType: [\r\n          CampaignLevelCampaignType.PerformanceMax,\r\n          CampaignLevelCampaignType.App,\r\n          CampaignLevelCampaignType.LinkedIn,\r\n          CampaignLevelCampaignType.PerformanceMax,\r\n        ],\r\n        name: _TL_('Ad groups'),\r\n        size: CardSize.Small,\r\n        getEntitySetOptions: getCampaignLevelDataEntitySetOptions,\r\n        // Ad group table will not have DFM, but we need it's preference to send out performance chart\r\n        // aggregated data request, so we need to use getDfmPreferenceObject to convert new preference\r\n        // so that data interface (processGridTileOptions, getColumnAndOrder) in\r\n        // overview-cards-common/src/fetch.js can recognize it.\r\n        getDfmPreferenceObject: getDfmPreferenceObjectForPerformanceTable,\r\n        getDefaultPreference: getDefaultPerformanceTablePreference,\r\n        isPreferenceValid: isTablePreferenceValid,\r\n        enabled: true,\r\n      },\r\n      {\r\n        validFor: ['customer'],\r\n        typeId: cardTopChangesAccountId,\r\n        name: _TL_('Top changes: Accounts'),\r\n        getEntitySetOptions: getCustomerLevelDataEntitySetOptions,\r\n        enabled: true,\r\n        size: CardSize.Small,\r\n      },\r\n      {\r\n        validFor: ['account'],\r\n        typeId: cardTopChangesCampaignId,\r\n        hideForCampaignType: [AccountLevelCampaignType.App],\r\n        name: _TL_('Top changes: Campaigns'),\r\n        getEntitySetOptions: getAccountLevelDataEntitySetOptions,\r\n        getDfmPreferenceObject: getDfmPreferenceObjectForTopChanges,\r\n        getDefaultPreference: getDefaultTopChangesPreference,\r\n        enabled: true,\r\n        size: CardSize.Small,\r\n      },\r\n      {\r\n        validFor: ['campaign'],\r\n        typeId: cardTopChangesAdGroupId,\r\n        hideForCampaignType: [\r\n          CampaignLevelCampaignType.PerformanceMax,\r\n          CampaignLevelCampaignType.App,\r\n          CampaignLevelCampaignType.LinkedIn,\r\n          CampaignLevelCampaignType.PerformanceMax,\r\n        ],\r\n        name: _TL_('Top changes: Ad groups'),\r\n        getEntitySetOptions: getCampaignLevelDataEntitySetOptions,\r\n        enabled: true,\r\n        size: CardSize.Small,\r\n      },\r\n      {\r\n        validFor: ['customer'],\r\n        typeId: cardTopAccountsId,\r\n        name: _TL_('Accounts'),\r\n        getEntitySetOptions: getCustomerLevelDataEntitySetOptions,\r\n        getDfmPreferenceObject: getDfmPreferenceObjectForPerformanceTable,\r\n        getDefaultPreference: getDefaultPerformanceTablePreference,\r\n        isPreferenceValid: isTablePreferenceValid,\r\n        enabled: true,\r\n        size: CardSize.Small,\r\n      },\r\n      {\r\n        validFor: ['account', 'campaign'],\r\n        typeId: cardConversionTrackingId,\r\n        hideForCampaignType: [\r\n          AccountLevelCampaignType.App,\r\n          CampaignLevelCampaignType.None,\r\n          CampaignLevelCampaignType.Default,\r\n          CampaignLevelCampaignType.Shopping,\r\n          CampaignLevelCampaignType.DynamicSearchAds,\r\n          CampaignLevelCampaignType.Audience,\r\n          CampaignLevelCampaignType.Smart,\r\n          CampaignLevelCampaignType.Hotel,\r\n          CampaignLevelCampaignType.App,\r\n          CampaignLevelCampaignType.LinkedIn,\r\n          CampaignLevelCampaignType.PerformanceMax,\r\n        ],\r\n        hideForCampaignTypeSDK: [\r\n          AccountLevelCampaignType.App,\r\n          CampaignLevelCampaignType.None,\r\n          CampaignLevelCampaignType.Default,\r\n          CampaignLevelCampaignType.Shopping,\r\n          CampaignLevelCampaignType.DynamicSearchAds,\r\n          CampaignLevelCampaignType.Audience,\r\n          CampaignLevelCampaignType.Smart,\r\n          CampaignLevelCampaignType.Hotel,\r\n          CampaignLevelCampaignType.App,\r\n          CampaignLevelCampaignType.LinkedIn,\r\n        ],\r\n        name: _TL_('Conversion Tracking'),\r\n        size: CardSize.Small,\r\n        getEntitySetOptions: getAccountLevelDataEntitySetOptions,\r\n        enabled: true,\r\n      },\r\n      {\r\n        validFor: ['account', 'campaign'],\r\n        typeId: cardTopKeywordsId,\r\n        hideForCampaignType: [\r\n          AccountLevelCampaignType.Hotel,\r\n          AccountLevelCampaignType.PerformanceMax,\r\n          AccountLevelCampaignType.App,\r\n          AccountLevelCampaignType.LinkedIn,\r\n          AccountLevelCampaignType.PerformanceMax,\r\n          AccountLevelCampaignType.Audience,\r\n          AccountLevelCampaignType.Shopping,\r\n          CampaignLevelCampaignType.Hotel,\r\n          CampaignLevelCampaignType.PerformanceMax,\r\n          CampaignLevelCampaignType.App,\r\n          CampaignLevelCampaignType.LinkedIn,\r\n          CampaignLevelCampaignType.PerformanceMax,\r\n          CampaignLevelCampaignType.Audience,\r\n          CampaignLevelCampaignType.Shopping,\r\n        ],\r\n        name: _TL_('Keywords'),\r\n        size: CardSize.Small,\r\n        getEntitySetOptions: getTopKeywordCardOptions,\r\n        getDfmPreferenceObject: getDfmPreferenceObjectForPerformanceTable,\r\n        getDefaultPreference: getDefaultPerformanceTablePreference,\r\n        isPreferenceValid: isTablePreferenceValid,\r\n        enabled: true,\r\n      },\r\n      {\r\n        validFor: ['account', 'campaign'],\r\n        typeId: cardSearchTermsId,\r\n        hideForCampaignType: [\r\n          AccountLevelCampaignType.Hotel,\r\n          AccountLevelCampaignType.PerformanceMax,\r\n          AccountLevelCampaignType.App,\r\n          AccountLevelCampaignType.LinkedIn,\r\n          AccountLevelCampaignType.Audience,\r\n          CampaignLevelCampaignType.Hotel,\r\n          CampaignLevelCampaignType.PerformanceMax,\r\n          CampaignLevelCampaignType.App,\r\n          CampaignLevelCampaignType.LinkedIn,\r\n          CampaignLevelCampaignType.Audience,\r\n        ],\r\n        name: _TL_('What people searched'),\r\n        size: CardSize.Small,\r\n        getEntitySetOptions: getSearchTermCardOptions,\r\n        getDfmPreferenceObject: getDfmPreferenceObjectForPerformanceTable,\r\n        getDefaultPreference: getDefaultPerformanceTablePreference,\r\n        isPreferenceValid: isTablePreferenceValid,\r\n        enabled: true,\r\n      },\r\n      {\r\n        typeId: cardDeviceId,\r\n        hideForCampaignType: [\r\n          AccountLevelCampaignType.PerformanceMax,\r\n          AccountLevelCampaignType.App,\r\n          AccountLevelCampaignType.LinkedIn,\r\n          CampaignLevelCampaignType.PerformanceMax,\r\n          CampaignLevelCampaignType.App,\r\n          CampaignLevelCampaignType.LinkedIn,\r\n        ],\r\n        name: _TL_('Devices'),\r\n        size: CardSize.Small,\r\n        getEntitySetOptions: getCardOptions,\r\n        getDefaultPreference: getDefaultDevicePreference,\r\n        isPreferenceValid: isDevicePreferenceValid,\r\n        enabled: true,\r\n      },\r\n      {\r\n        validFor: ['campaign'],\r\n        typeId: cardTopLocationsId,\r\n        hideForCampaignType: [\r\n          CampaignLevelCampaignType.App,\r\n          CampaignLevelCampaignType.LinkedIn,\r\n        ],\r\n        name: _TL_('Top Locations'),\r\n        size: CardSize.Small,\r\n        getEntitySetOptions: getCardOptions,\r\n        enabled: true,\r\n      },\r\n      {\r\n        validFor: ['campaign'],\r\n        typeId: cardAssetPerformanceId,\r\n        hideForCampaignType: isMobileAppCampaign ? defaultHiddenCampaignTypes.filter(type => type !== CampaignLevelCampaignType.App) : defaultHiddenCampaignTypes,\r\n        name: _TL_('Asset Performance'),\r\n        size: CardSize.Small,\r\n        enabled: true,\r\n      },\r\n      {\r\n        validFor: ['account', 'campaign'],\r\n        typeId: cardCompetitionId,\r\n        name: _TL_('Competition'),\r\n        size: CardSize.Small,\r\n        hideForCampaignType: [\r\n          AccountLevelCampaignType.Hotel,\r\n          AccountLevelCampaignType.PerformanceMax,\r\n          AccountLevelCampaignType.App,\r\n          AccountLevelCampaignType.LinkedIn,\r\n          CampaignLevelCampaignType.Hotel,\r\n          CampaignLevelCampaignType.PerformanceMax,\r\n          CampaignLevelCampaignType.App,\r\n          CampaignLevelCampaignType.LinkedIn,\r\n        ],\r\n        getEntitySetOptions: getCardOptions,\r\n        enabled: true,\r\n      },\r\n      {\r\n        validFor: ['campaign'],\r\n        typeId: cardNavigateToFullProductId,\r\n        name: _TL_(''),\r\n        size: CardSize.Small,\r\n        enabled: true,\r\n        hideForCampaignType: [\r\n          CampaignLevelCampaignType.None,\r\n          CampaignLevelCampaignType.Default,\r\n          CampaignLevelCampaignType.Shopping,\r\n          CampaignLevelCampaignType.DynamicSearchAds,\r\n          CampaignLevelCampaignType.Audience,\r\n          CampaignLevelCampaignType.Smart,\r\n          CampaignLevelCampaignType.Hotel,\r\n          CampaignLevelCampaignType.App,\r\n          CampaignLevelCampaignType.LinkedIn,\r\n          CampaignLevelCampaignType.PerformanceMax,\r\n        ],\r\n        hideForCampaignTypeSDK: [\r\n          CampaignLevelCampaignType.None,\r\n          CampaignLevelCampaignType.Default,\r\n          CampaignLevelCampaignType.Shopping,\r\n          CampaignLevelCampaignType.DynamicSearchAds,\r\n          CampaignLevelCampaignType.Audience,\r\n          CampaignLevelCampaignType.Smart,\r\n          CampaignLevelCampaignType.Hotel,\r\n          CampaignLevelCampaignType.App,\r\n          CampaignLevelCampaignType.LinkedIn,\r\n        ],\r\n      },\r\n    ];\r\n\r\n  cardsConfig.isValidForNavigationLevel = (cardConfig, navigationLevel, campaignType, isSDK = false) =>\r\n    ((_.isFunction(cardConfig.enabled) && cardConfig.enabled()) ||\r\n      (_.isBoolean(cardConfig.enabled) && cardConfig.enabled)) &&\r\n    (!cardConfig.validFor || _.contains(cardConfig.validFor, navigationLevel)) &&\r\n    (((!isSDK || !cardConfig.hideForCampaignTypeSDK) &&\r\n      (!cardConfig.hideForCampaignType || !_.contains(cardConfig.hideForCampaignType, campaignType)))\r\n      || (isSDK && cardConfig.hideForCampaignTypeSDK && !_.contains(cardConfig.hideForCampaignTypeSDK, campaignType)));\r\n\r\n  return cardsConfig;\r\n}\r\n","import edm from '@bingads-webui-component-legacy/edm-campaign/index';\r\n\r\nexport const NavigationLevel = {\r\n  Customer: 'customer',\r\n  Account: 'account',\r\n  Campaign: 'campaign',\r\n};\r\n\r\nexport function getNavigationLevel(scopeValues) {\r\n  const {\r\n    aid,\r\n    campaignId,\r\n  } = scopeValues;\r\n  let result = NavigationLevel.Customer;\r\n  if (campaignId) {\r\n    result = NavigationLevel.Campaign;\r\n  } else if (aid || edm.currentAccount) {\r\n    result = NavigationLevel.Account;\r\n  }\r\n\r\n  return result;\r\n}\r\n","import { GetJsDataInfo } from '@bingads-webui-clientcenter/js-data-cc-rest-base';\r\n\r\nexport function getCcJsData({\r\n  serverContext,\r\n}) {\r\n  return GetJsDataInfo({\r\n    cidFetcher: () => serverContext.CurrentCustomer.Id,\r\n    uidFetcher: () => serverContext.CurrentUser.Id,\r\n    willSupportCors: true,\r\n  }, serverContext.Urls.ClientCenterBaseUrl, ['FeatureAdoptionCoupon']).jsDataCcRest;\r\n}\r\n","import _, { get } from 'underscore';\r\n\r\nimport { Constants } from '@bingads-webui-theme-2018/theme-fluent';\r\n\r\n// Global header + Shell status + Shell tab + Add/Remove tile button\r\nconst headerHeight = 60 + 56 + 58 + 50;\r\n// Shell nav + Shell scope panel\r\nconst sidebarWidth = 64 + 224;\r\nconst cardHeight = 389;\r\n\r\nexport const getResponsiveSize = containerWidth => _.chain(Constants.ResponsiveSizeBreakpoints)\r\n  .filter(({ minWidth }) => containerWidth >= minWidth)\r\n  .last()\r\n  .get('name', 's')\r\n  .value();\r\n\r\nexport const getResponsiveSizeBasedOnWindowSize = () => getResponsiveSize(window.innerWidth - sidebarWidth);\r\n\r\nconst getRowSize = () => Math.round((window.innerHeight - headerHeight) / cardHeight);\r\nconst getColumnSize = () => {\r\n  const responsiveSize = getResponsiveSizeBasedOnWindowSize();\r\n  if (responsiveSize === 'xxl') {\r\n    return 3;\r\n  } else if (responsiveSize === 'xl') {\r\n    return 2;\r\n  }\r\n  return 1;\r\n};\r\n\r\nexport const getViewPortCardsCount = (selectedCardsConfig) => {\r\n  const columnSize = getColumnSize();\r\n  const responsiveSize = getResponsiveSizeBasedOnWindowSize();\r\n  const selectedCardSize = selectedCardsConfig.length;\r\n\r\n  let remainingRowSize = getRowSize();\r\n  let remainingColumnSize = getColumnSize();\r\n  for (let i = 0; i < selectedCardSize; i += 1) {\r\n    const card = selectedCardsConfig[i];\r\n    let cardSize = 1;\r\n    if (card.size === 'large' && (responsiveSize === 'xxl' || responsiveSize === 'xl')) {\r\n      cardSize = 2;\r\n    }\r\n    if (remainingColumnSize >= cardSize) {\r\n      remainingColumnSize -= cardSize;\r\n    } else {\r\n      remainingRowSize -= 1;\r\n      if (remainingRowSize <= 0) {\r\n        return i;\r\n      }\r\n      remainingColumnSize = columnSize - cardSize;\r\n    }\r\n  }\r\n\r\n  return selectedCardSize;\r\n};\r\n\r\nexport const isInViewPort = (cardIds, id, viewPortSize) => {\r\n  const index = cardIds.indexOf(id);\r\n  return index < viewPortSize && index >= 0;\r\n};\r\n","import _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport { levelAtConstant } from '@bingads-webui-campaign/scope-constants';\r\nimport {\r\n  RecommendationService,\r\n  CHANNEL_TYPES,\r\n  getRecommendationIds,\r\n} from '@bingads-webui-campaign/recommendation-core';\r\nimport { edmCampaign } from '@bingads-webui/edm-campaign';\r\n\r\nconst RECOMMENDATION_SUMMARY_TOP_NUMBER = 5;\r\nlet p$Opportunities = null;\r\n\r\nexport function fetchTips({\r\n  cid,\r\n  aid,\r\n}) {\r\n  if (!aid || !cid) {\r\n    return Promise.resolve([]);\r\n  }\r\n\r\n  return edmCampaign\r\n    .Customers\r\n    .$withKey(cid)\r\n    .Accounts\r\n    .$withKey(aid)\r\n    .Tips\r\n    .get({\r\n      top: 20,\r\n      count: true,\r\n    })\r\n    .toPromise()\r\n    .then(({ value }) => value);\r\n}\r\n\r\nconst schema = {\r\n  scenario: [\r\n    {\r\n      name: 'loadRecommendationTile',\r\n      value: 'LoadRecommendationTab',\r\n      setting: {},\r\n      activity: [\r\n        {\r\n          name: 'loadRecommendationTile',\r\n          value: 'LoadRecommendationTile',\r\n        },\r\n        {\r\n          name: 'getSummary',\r\n          value: 'getSummary',\r\n        },\r\n        {\r\n          name: 'getCoupons',\r\n          value: 'getCoupons',\r\n        },\r\n      ],\r\n    },\r\n  ],\r\n};\r\n\r\nexport function getScope({\r\n  navigationLevel,\r\n  legacyConfig,\r\n  cid,\r\n  aid,\r\n  campaignId,\r\n}) {\r\n  let levelAt;\r\n  let entityIds;\r\n\r\n  switch (navigationLevel) {\r\n    case 'account':\r\n      levelAt = levelAtConstant.ACCOUNT;\r\n      entityIds = [aid];\r\n      break;\r\n    case 'campaign':\r\n      levelAt = levelAtConstant.CAMPAIGN;\r\n      entityIds = [campaignId];\r\n      break;\r\n    case 'customer':\r\n      levelAt = levelAtConstant.CUSTOMER;\r\n      entityIds = [cid];\r\n      break;\r\n    default:\r\n  }\r\n\r\n  const scope = {\r\n    customerId: cid,\r\n    accountId: aid,\r\n    campaignId,\r\n    campaignName: _.result(legacyConfig.get('CurrentCampaign'), 'Name'),\r\n    token: legacyConfig.get('Token'),\r\n    levelAt,\r\n    entityIds,\r\n  };\r\n\r\n  return scope;\r\n}\r\n\r\nexport function fetchMCCOverviewRecommendations({\r\n  entitySet,\r\n  jsdata,\r\n  permissions,\r\n}) {\r\n  const isMCC = true;\r\n  const multiAccountRecommendationParameters = {\r\n    RecommendationTypes: getRecommendationIds(undefined, CHANNEL_TYPES.MCCOVERVIEW, permissions, isMCC),\r\n  };\r\n\r\n  const query = {\r\n    entitySet: entitySet['Default.MultiAccountRecommendation'].$call({ multiAccountRecommendationParameters }).toJSON(),\r\n  };\r\n\r\n  return jsdata[entitySet.type.elementType.shortName].findAll({\r\n    query,\r\n  });\r\n}\r\n\r\nexport function fetchRecommendations({\r\n  navigationLevel,\r\n  featureInstrumentation,\r\n  legacyConfig,\r\n  permissions,\r\n  serverContext,\r\n  campaignType,\r\n  ccJsData,\r\n  cid,\r\n  aid,\r\n  campaignId,\r\n}) {\r\n  if (p$Opportunities && navigationLevel === 'account') {\r\n    return p$Opportunities;\r\n  }\r\n\r\n  const scope = getScope({\r\n    navigationLevel,\r\n    legacyConfig,\r\n    cid,\r\n    aid,\r\n    campaignId,\r\n  });\r\n\r\n  if (!scope.accountId) {\r\n    return Promise.resolve([]);\r\n  }\r\n\r\n  featureInstrumentation.addScenario(schema);\r\n  const currentScenario = featureInstrumentation.loadRecommendationTile.create();\r\n  const currentActivity = currentScenario.loadRecommendationTile.create();\r\n\r\n  const dataService = new RecommendationService({\r\n    scope,\r\n    currentScenario,\r\n    currentActivity,\r\n    odataPath: legacyConfig.get('adinsight.odata.url'),\r\n    permissions,\r\n    lcid: serverContext.CurrentUser.LocaleID,\r\n    ccJsData,\r\n    channel: CHANNEL_TYPES.OVERVIEW,\r\n  });\r\n\r\n  const opportunities = dataService.getSummary({\r\n    channel: CHANNEL_TYPES.OVERVIEW,\r\n    campaignType,\r\n    top: RECOMMENDATION_SUMMARY_TOP_NUMBER,\r\n    ignoreCoupons: true,\r\n  });\r\n\r\n  if (navigationLevel === 'account') {\r\n    p$Opportunities = opportunities;\r\n  }\r\n\r\n  return opportunities;\r\n}\r\n\r\nexport function clearRecommendationsCache() {\r\n  p$Opportunities = null;\r\n}\r\n","import { fetchGridData } from '@bingads-webui-campaign/overview-cards-common';\r\n\r\nexport function fetchGridTileData({\r\n  entitySet,\r\n  filter,\r\n  options,\r\n  getCardsConfig,\r\n  p$DateRange,\r\n  jsdata,\r\n  dateUtil,\r\n  permissions,\r\n  campaignType,\r\n}) {\r\n  return p$DateRange.then(dateRange => fetchGridData({\r\n    entitySet,\r\n    dateRange,\r\n    filter,\r\n    options,\r\n    jsdata,\r\n    dateUtil,\r\n    getCardsConfig,\r\n    permissions,\r\n    campaignType,\r\n  }));\r\n}\r\n","import _ from 'underscore';\r\n\r\n// TODO: [yaoyao] Do we need to lazy load the data-fetch module based on preference data?\r\nimport { getAuctionInsightDataSource } from '@bingads-webui-campaign-legacy/dashboard-cards/competition-card/data-fetch';\r\nimport { fetchPerformanceTimeSeries } from '@bingads-webui-campaign-legacy/performance-graph/data-fetch';\r\nimport {\r\n  fetchCoupons,\r\n  fetchTopChanges,\r\n  fetchAggregatedData,\r\n} from '@bingads-webui-campaign/overview-cards-common';\r\nimport edm from '@bingads-webui-component-legacy/edm-campaign/index';\r\nimport state from '@bingads-webui-component-legacy/state/index';\r\nimport dateUtil from '@bingads-webui-component-legacy/humanize/date';\r\n\r\nimport { setDFMCache, withDFMCache } from '@bingads-webui/dfm-cache';\r\nimport {\r\n  // We only need to enable DFM for cards in account level page\r\n  // Customer level and campaign level won't hit the code in this file\r\n  cardPerformanceId, // need preference logic to enable DFM\r\n  cardRecommendationsId,\r\n  cardTopCampaignsId, // need preference logic to enable DFM\r\n  cardTopKeywordsId, // need preference logic to enable DFM\r\n  cardSearchTermsId, // need preference logic to enable DFM\r\n  cardCompetitionId,\r\n  cardDeviceId,\r\n  cardConversionTrackingId, // preference is disabled for this card somehow\r\n  cardTopChangesCampaignId, // need preference logic to enable DFM\r\n} from '@bingads-webui-campaign/fluent-page-consts';\r\n\r\nimport {\r\n  getCardPreferenceWithDefault,\r\n  getCardPreferenceOptionsForDfm,\r\n} from '../preference/preference-helper';\r\nimport { getDfmPreferenceObjectForPerformanceTable } from '../preference/card-preference/performance-table';\r\nimport { getInitSelectedCardsConfig } from '../preference/use-selected-cards-with-preference';\r\n\r\nimport { getFluentCardsConfigs } from '../cards-configs/fluent-card-configs';\r\n\r\nimport { getNavigationLevel } from '../helper/get-navigation-level';\r\nimport { getCcJsData } from '../helper/get-cc-jsdata';\r\nimport { isInViewPort, getViewPortCardsCount } from '../helper/get-responsive-size';\r\n\r\nimport {\r\n  fetchRecommendations,\r\n  fetchTips,\r\n} from '../data-fetch/recommendation-card';\r\nimport {\r\n  fetchGridTileData,\r\n} from '../data-fetch/grid-data';\r\nimport {\r\n  fetchConversionTrackingData,\r\n} from '../data-fetch/conversion-tracking';\r\n\r\nfunction getOptionsForCard({\r\n  config,\r\n  navigationLevel,\r\n  campaignType,\r\n  preference,\r\n  getDfmPreferenceObject,\r\n  permissions,\r\n}) {\r\n  const cardPreference = getCardPreferenceWithDefault({\r\n    config,\r\n    navigationLevel,\r\n    campaignType,\r\n    preference,\r\n    permissions,\r\n  });\r\n\r\n  let options = cardPreference;\r\n  if (options && getDfmPreferenceObject) {\r\n    options = getDfmPreferenceObject(cardPreference);\r\n  }\r\n  return options;\r\n}\r\n\r\nexport function fetchFluentOverviewTilesData({\r\n  filter,\r\n  campaignType,\r\n  resolve,\r\n  DateFilterState,\r\n  preference,\r\n  queryParam,\r\n  serverContext,\r\n  jsdata,\r\n  permissions,\r\n  legacyConfig,\r\n  featureInstrumentation,\r\n}) {\r\n  const {\r\n    uid, cid, aid, campaignId, adGroupId,\r\n  } = queryParam.values;\r\n  const scope = {\r\n    values: {\r\n      uid, cid, aid, campaignId, adGroupId,\r\n    },\r\n  };\r\n  const navigationLevel = getNavigationLevel(scope.values);\r\n  const p$DateRange = new DateFilterState({ state }).p$State;\r\n  const cardsConfigs = getFluentCardsConfigs({\r\n    permissions,\r\n  });\r\n\r\n  const selectedCardsConfig = getInitSelectedCardsConfig({\r\n    preference,\r\n    cardsConfigs,\r\n    navigationLevel,\r\n    campaignType,\r\n    serverContext,\r\n    isSDK: false,\r\n  });\r\n\r\n  const cardIds = _.map(selectedCardsConfig, 'typeId');\r\n  let viewPortCardSize = getViewPortCardsCount(selectedCardsConfig);\r\n  const isPerformanceInViewPort = isInViewPort(cardIds, cardPerformanceId, viewPortCardSize);\r\n  const isDeviceInViewPort = isInViewPort(cardIds, cardDeviceId, viewPortCardSize);\r\n  const isRecommendationInViewPort = isInViewPort(cardIds, cardRecommendationsId, viewPortCardSize);\r\n  const isTopCampaignsInViewPort = isInViewPort(cardIds, cardTopCampaignsId, viewPortCardSize);\r\n  const isKeywordInViewPort = isInViewPort(cardIds, cardTopKeywordsId, viewPortCardSize);\r\n  const isSearchTermInViewPort = isInViewPort(cardIds, cardSearchTermsId, viewPortCardSize);\r\n  const isCompetitionInViewPort = isInViewPort(cardIds, cardCompetitionId, viewPortCardSize);\r\n  const isConversionTrackingInViewPort = isInViewPort(cardIds, cardConversionTrackingId, viewPortCardSize);\r\n  const isTopChangesCampaignInViewPort = isInViewPort(cardIds, cardTopChangesCampaignId, viewPortCardSize);\r\n\r\n  const getCardsConfig = () => _.map(selectedCardsConfig, config => getCardPreferenceOptionsForDfm({\r\n    config,\r\n    navigationLevel,\r\n    campaignType,\r\n    preference,\r\n    permissions,\r\n  }));\r\n  window.FluentOverviewPageDataFetchManagerCardsConfigObject = {\r\n    config: getCardsConfig(),\r\n    campaignType,\r\n    viewPortCardSize,\r\n    isKeywordInViewPort,\r\n    isSearchTermInViewPort,\r\n    innerHeight: window.innerHeight,\r\n    innerWidth: window.innerWidth,\r\n  };\r\n\r\n  if (viewPortCardSize <= 0) {\r\n    resolve();\r\n    return;\r\n  }\r\n\r\n  const ccJsData = getCcJsData({\r\n    serverContext,\r\n  });\r\n\r\n  const dfmDataFetchCallback = () => {\r\n    viewPortCardSize -= 1;\r\n    if (viewPortCardSize <= 0) {\r\n      resolve();\r\n    }\r\n  };\r\n\r\n  // current dfm logic is checking edm.currentAccount, we follow this logic here\r\n  if (isPerformanceInViewPort && edm.currentAccount !== null) {\r\n    p$DateRange\r\n      .then((dateRange) => {\r\n        const p$PerformanceAggregatedData = fetchAggregatedData({\r\n          navigationLevel: 'account',\r\n          entitySet: edm.currentAccount.Campaigns,\r\n          dateRange,\r\n          getCardsConfig,\r\n          jsdata,\r\n          filter,\r\n          dateUtil,\r\n          permissions,\r\n          campaignType,\r\n        });\r\n        const p$PerformanceTimeSeries = fetchPerformanceTimeSeries({\r\n          getCardsConfig,\r\n          entitySet: edm.currentAccount.Campaigns,\r\n          period: dateRange,\r\n          filter,\r\n          campaignType,\r\n        });\r\n\r\n        setDFMCache(`${cardPerformanceId}-aggregated-data`, p$PerformanceAggregatedData);\r\n        setDFMCache(`${cardPerformanceId}-time-series`, p$PerformanceTimeSeries);\r\n\r\n        dfmDataFetchCallback();\r\n      });\r\n  }\r\n\r\n  if (isDeviceInViewPort && edm.currentAccount !== null) {\r\n    p$DateRange\r\n      .then((dateRange) => {\r\n        const p$DeviceAggregatedData = fetchAggregatedData({\r\n          navigationLevel: 'account',\r\n          entitySet: edm.currentAccount.Campaigns,\r\n          dateRange,\r\n          getCardsConfig,\r\n          jsdata,\r\n          filter,\r\n          dateUtil,\r\n          permissions,\r\n          campaignType,\r\n        });\r\n\r\n        setDFMCache(cardDeviceId, p$DeviceAggregatedData);\r\n\r\n        dfmDataFetchCallback();\r\n      });\r\n  }\r\n\r\n  if (isRecommendationInViewPort) {\r\n    fetchCoupons({\r\n      ccJsData,\r\n    });\r\n    fetchTips({\r\n      aid,\r\n      cid,\r\n    });\r\n    fetchRecommendations({\r\n      navigationLevel,\r\n      featureInstrumentation,\r\n      legacyConfig,\r\n      permissions,\r\n      serverContext,\r\n      campaignType,\r\n      ccJsData,\r\n      cid,\r\n      aid,\r\n      campaignId,\r\n    });\r\n    dfmDataFetchCallback();\r\n  }\r\n\r\n  if (isTopCampaignsInViewPort) {\r\n    const config = selectedCardsConfig.find(c => c.typeId === cardTopCampaignsId);\r\n    const options = getOptionsForCard({\r\n      config,\r\n      navigationLevel,\r\n      campaignType,\r\n      preference,\r\n      getDfmPreferenceObject: getDfmPreferenceObjectForPerformanceTable,\r\n      permissions,\r\n    });\r\n\r\n    const p$TopCampaigns = fetchGridTileData({\r\n      entitySet: edm.currentAccount.Campaigns,\r\n      filter,\r\n      options,\r\n      getCardsConfig,\r\n      p$DateRange,\r\n      jsdata,\r\n      dateUtil,\r\n      permissions,\r\n      campaignType,\r\n    });\r\n\r\n    setDFMCache(cardTopCampaignsId, p$TopCampaigns);\r\n\r\n    dfmDataFetchCallback();\r\n  }\r\n\r\n  if (isKeywordInViewPort) {\r\n    const config = selectedCardsConfig.find(c => c.typeId === cardTopKeywordsId);\r\n    const options = getOptionsForCard({\r\n      config,\r\n      navigationLevel,\r\n      campaignType,\r\n      preference,\r\n      getDfmPreferenceObject: getDfmPreferenceObjectForPerformanceTable,\r\n      permissions,\r\n    });\r\n\r\n    const p$TopAccountKeyword = fetchGridTileData({\r\n      entitySet: edm.currentAccount.Keywords,\r\n      filter,\r\n      options,\r\n      p$DateRange,\r\n      jsdata,\r\n      dateUtil,\r\n      permissions,\r\n      campaignType,\r\n    });\r\n\r\n    setDFMCache(cardTopKeywordsId, p$TopAccountKeyword);\r\n\r\n    dfmDataFetchCallback();\r\n  }\r\n\r\n  if (isSearchTermInViewPort) {\r\n    const config = selectedCardsConfig.find(c => c.typeId === cardSearchTermsId);\r\n    const options = getOptionsForCard({\r\n      config,\r\n      navigationLevel,\r\n      campaignType,\r\n      preference,\r\n      getDfmPreferenceObject: getDfmPreferenceObjectForPerformanceTable,\r\n      permissions,\r\n    });\r\n\r\n    const p$TopAccountSearchTerms = fetchGridTileData({\r\n      entitySet: edm.currentAccount.SearchTerms,\r\n      filter,\r\n      options,\r\n      p$DateRange,\r\n      jsdata,\r\n      dateUtil,\r\n      permissions,\r\n      campaignType,\r\n    });\r\n\r\n    setDFMCache(cardSearchTermsId, p$TopAccountSearchTerms);\r\n\r\n    dfmDataFetchCallback();\r\n  }\r\n\r\n  if (isCompetitionInViewPort) {\r\n    const dataSource = getAuctionInsightDataSource();\r\n\r\n    const p$CompetitionTile = dataSource.query();\r\n\r\n    dataSource.query = withDFMCache(dataSource.query, cardCompetitionId);\r\n\r\n    setDFMCache(cardCompetitionId, p$CompetitionTile);\r\n\r\n    dfmDataFetchCallback();\r\n  }\r\n\r\n  if (isConversionTrackingInViewPort) {\r\n    fetchCoupons({\r\n      ccJsData,\r\n    });\r\n\r\n    const p$ConversionTracking = fetchConversionTrackingData({\r\n      entitySet: edm.currentAccount.Campaigns,\r\n      filter,\r\n      getCardsConfig,\r\n      p$DateRange,\r\n      jsdata,\r\n      dateUtil,\r\n      permissions,\r\n      campaignType,\r\n    });\r\n\r\n    setDFMCache(cardConversionTrackingId, p$ConversionTracking);\r\n\r\n    dfmDataFetchCallback();\r\n  }\r\n\r\n  if (isTopChangesCampaignInViewPort) {\r\n    p$DateRange.then((dateRange) => {\r\n      const p$TopChangesCampaign = fetchTopChanges({\r\n        entitySet: edm.currentAccount.Campaigns,\r\n        dateRange,\r\n        filter,\r\n        jsdata,\r\n        dateUtil,\r\n        getCardsConfig,\r\n        permissions,\r\n        campaignType,\r\n      });\r\n\r\n      setDFMCache(cardTopChangesCampaignId, p$TopChangesCampaign);\r\n\r\n      dfmDataFetchCallback();\r\n    });\r\n  }\r\n}\r\n","import { fetchConversionTracking } from '@bingads-webui-campaign/overview-cards-common';\r\n\r\nexport function fetchConversionTrackingData({\r\n  entitySet,\r\n  // we are not using this info in current conversion tracking card, maybe we shoud add it back?\r\n  // metric,\r\n  // selectedMenuItem,\r\n  getCardsConfig,\r\n  filter,\r\n  p$DateRange,\r\n  jsdata,\r\n  dateUtil,\r\n  permissions,\r\n  campaignType,\r\n}) {\r\n  return p$DateRange.then(dateRange => fetchConversionTracking({\r\n    entitySet,\r\n    dateRange,\r\n    // we are not using this info in current conversion tracking card, maybe we shoud add it back?\r\n    // metric,\r\n    // selectedMenuItem,\r\n    jsdata,\r\n    dateUtil,\r\n    getCardsConfig,\r\n    filter,\r\n    permissions,\r\n    campaignType,\r\n  }));\r\n}\r\n","import _ from 'underscore';\r\n\r\nimport { METRIC_OPTIONS } from '@bingads-webui-campaign-react/top-locations-card-const';\r\n\r\n\r\nexport const getPropsFromPreferenceForTopLocations = ({\r\n  cardPreference,\r\n  patchPreference,\r\n  campaignType,\r\n}) => {\r\n  let preferenceFromServer = _.get(cardPreference, 'metric');\r\n  if (!_.isString(preferenceFromServer)\r\n    || !METRIC_OPTIONS.includes(preferenceFromServer)\r\n  ) {\r\n    preferenceFromServer = _.first(METRIC_OPTIONS);\r\n  }\r\n\r\n  return {\r\n    preferenceFromServer,\r\n    patchPreference,\r\n    campaignType,\r\n  };\r\n};\r\n","import _ from 'underscore';\r\n\r\nimport { ConversionFilterOption } from '@bingads-webui-campaign/overview-cards-common';\r\n\r\nexport function getPropsFromPreferenceForConversionTracking({\r\n  preferenceService,\r\n  responsiveSize,\r\n  campaignType,\r\n}) {\r\n  return {\r\n    preferenceService,\r\n    responsiveSize,\r\n    campaignType,\r\n  };\r\n}\r\n\r\nexport function getHeaderPropsFromPreferenceForConversionTracking({\r\n  i18n,\r\n}) {\r\n  return ({\r\n    options: [\r\n      {\r\n        value: ConversionFilterOption.AllChanges,\r\n        displayName: i18n.getString(_TL_('All changes')),\r\n      },\r\n      {\r\n        value: ConversionFilterOption.TopGainers,\r\n        displayName: i18n.getString(_TL_('Top gainers')),\r\n      },\r\n      {\r\n        value: ConversionFilterOption.TopDecliners,\r\n        displayName: i18n.getString(_TL_('Top decliners')),\r\n      },\r\n    ],\r\n    initialSelectedValue: ConversionFilterOption.AllChanges,\r\n    // we are not using preference in conversion tracking card now.\r\n    onOptionSelected: _.noop,\r\n  });\r\n}\r\n","export function getPropsForRecommendations({\r\n  navigationLevel,\r\n  campaignType,\r\n}) {\r\n  return {\r\n    navigationLevel,\r\n    campaignType,\r\n  };\r\n}\r\n","import _ from 'underscore';\r\n\r\nfunction getPreferenceDataObj(preference, preferenceName) {\r\n  const preferenceObj = preference.findByNameAtAccountLevel(preferenceName);\r\n\r\n  return _.get(preferenceObj, 'Data');\r\n}\r\n\r\nexport function getPreferenceForDashboard({ preference, preferenceName, dashboardPreferenceKey }) {\r\n  const preferenceDataObj = getPreferenceDataObj(preference, preferenceName);\r\n\r\n  if (_.has(preferenceDataObj, dashboardPreferenceKey)) {\r\n    return preferenceDataObj[dashboardPreferenceKey];\r\n  }\r\n\r\n  return null;\r\n}\r\n\r\nfunction getCardPreference(dashboardPreferenceObj, cardId) {\r\n  if (dashboardPreferenceObj && _.has(dashboardPreferenceObj, 'cards')) {\r\n    const cardPref = _.find(dashboardPreferenceObj.cards, card => card.id === cardId);\r\n    return cardPref;\r\n  }\r\n\r\n  return null;\r\n}\r\n\r\nexport function getCardPreferenceOptions(dashboardPreferenceObj, cardId) {\r\n  const cardPreference = getCardPreference(dashboardPreferenceObj, cardId);\r\n\r\n  return _.get(cardPreference, 'options');\r\n}\r\n\r\nexport function setPreferenceForCard({\r\n  preference,\r\n  preferenceName,\r\n  dashboardPreferenceKey,\r\n  cardId,\r\n  cardOptions,\r\n}) {\r\n  const preferenceForDashboard = getPreferenceForDashboard({ preference, preferenceName, dashboardPreferenceKey });\r\n  const preferenceForCard = getCardPreference(preferenceForDashboard, cardId);\r\n  const cards = _.get(preferenceForDashboard, 'cards', []);\r\n  let newCards = [];\r\n\r\n  if (!preferenceForCard) {\r\n    newCards = [...cards, { id: cardId, options: cardOptions }];\r\n  } else {\r\n    newCards = _.map(cards, (card) => {\r\n      if (card.id === cardId) {\r\n        return {\r\n          ...card,\r\n          options: cardOptions,\r\n        };\r\n      }\r\n\r\n      return card;\r\n    });\r\n  }\r\n\r\n  const newPreferenceForDashboard = {\r\n    ...preferenceForDashboard,\r\n    cards: newCards,\r\n  };\r\n\r\n  const preferenceDataObj = getPreferenceDataObj(preference, preferenceName);\r\n\r\n  const newPreferenceDataObj = {\r\n    ...preferenceDataObj,\r\n    [dashboardPreferenceKey]: newPreferenceForDashboard,\r\n  };\r\n\r\n  preference.setAtAccountLevel({\r\n    Data: newPreferenceDataObj,\r\n    Name: preferenceName,\r\n  });\r\n}\r\n","import React from 'react';\r\n\r\nexport function useIsPreferenceInitialized(preference) {\r\n  const [isInitialized, setIsInitialized] = React.useState(false);\r\n\r\n  React.useEffect(() => {\r\n    preference.initialize().then(() => {\r\n      setIsInitialized(true);\r\n    });\r\n  }, [preference]);\r\n\r\n  return isInitialized;\r\n}\r\n","import _ from 'underscore';\r\n\r\nimport { withUiBlock } from '@bingads-webui/uiblocker';\r\nimport { DeterministicView, helpers } from '@bingads-webui/deterministic-view';\r\n\r\n/* @this BaseCard */\r\nfunction cardReady() {\r\n  if (!this.perfMarkerCompleted) {\r\n    this.unblockCard();\r\n    this.perfMarker.done({ IsCardInViewPort: this.isInViewPort === true });\r\n    this.perfMarkerCompleted = true;\r\n    this.trigger('cardReady', this.typeId);\r\n    if (this.onCardReady) {\r\n      this.onCardReady(this.typeId);\r\n    }\r\n  }\r\n}\r\n\r\nlet i18n;\r\nlet eventDispatcher;\r\n\r\nexport class BaseCard extends DeterministicView {\r\n  constructor(options) {\r\n    i18n = options.deps.i18n; // eslint-disable-line\r\n    eventDispatcher = options.deps.eventDispatcher; // eslint-disable-line\r\n    super(_.extend({}, options, { renderInSync: true }));\r\n    this.deps = options.deps;\r\n    this.container = options.container;\r\n    this.typeId = options.typeId;\r\n    this.isInViewPort = options.isInViewPort;\r\n    this.onCardReady = options.onCardReady;\r\n    this.initPerfMarker(options);\r\n\r\n    this.on('attached', () => {\r\n      this.attached = true;\r\n      if (this.finishedRender) {\r\n        cardReady.call(this);\r\n      } else {\r\n        this.blockCard();\r\n      }\r\n    });\r\n  }\r\n\r\n  initPerfMarker({ perfMarker, name }) {\r\n    if (!this.perfMarker) {\r\n      this.perfMarker = perfMarker.createChild(name);\r\n      this.perfMarker.willInit();\r\n      this.perfMarkerCompleted = false;\r\n    }\r\n  }\r\n\r\n  willRenderWithData() {\r\n    if (!this.perfMarkerCompleted) {\r\n      this.perfMarker.willRender();\r\n    }\r\n  }\r\n\r\n  willFetchData() {\r\n    if (!this.perfMarkerCompleted) {\r\n      this.perfMarker.willFetchData();\r\n    }\r\n  }\r\n\r\n  renderedWithData() {\r\n    this.finishedRender = true;\r\n    if (this.attached) {\r\n      cardReady.call(this);\r\n    }\r\n  }\r\n\r\n  blockCard(el = this.el) {\r\n    if (!this.unblock) {\r\n      if (document.documentElement.contains(el)) {\r\n        this.unblock = withUiBlock(el, i18n.getString('Loading'), true, undefined, 10);\r\n      } else if (document.documentElement.contains(_.first(this.container))) {\r\n        this.unblock = withUiBlock(this.container, i18n.getString('Loading'), true, undefined, 10);\r\n      }\r\n    }\r\n  }\r\n\r\n  isSmartShoppingCampaign() {\r\n    const { currentCampaign } = this.options;\r\n    return currentCampaign && (currentCampaign.CampaignSubType === 12 || currentCampaign.CampaignSubType === 'ShoppingSmartAds');\r\n  }\r\n\r\n  unblockCard() {\r\n    if (this.unblock) {\r\n      this.unblock();\r\n      this.unblock = null;\r\n    }\r\n  }\r\n\r\n  updateState(patch) {\r\n    if (patch.requestingHelp) {\r\n      this.$('.hiddenHelpBridge')[0].click();\r\n    }\r\n    return helpers.updateView(this, patch);\r\n  }\r\n\r\n  onResize(callback) {\r\n    this.windowResizeHandler = _.throttle(callback, 100);\r\n    this.wunderbarCallback = callback;\r\n    window.addEventListener('resize', this.windowResizeHandler);\r\n    eventDispatcher.on('wunderbar.collapsed', this.wunderbarCallback);\r\n    eventDispatcher.on('wunderbar.expanded', this.wunderbarCallback);\r\n  }\r\n\r\n  remove() {\r\n    if (this.windowResizeHandler) {\r\n      window.removeEventListener('resize', this.windowResizeHandler);\r\n    }\r\n\r\n    if (this.wunderbarCallback) {\r\n      eventDispatcher.off('wunderbar.collapsed', this.wunderbarCallback);\r\n      eventDispatcher.off('wunderbar.expanded', this.wunderbarCallback);\r\n    }\r\n\r\n    this.unblockCard();\r\n\r\n    super.remove();\r\n  }\r\n}\r\n","export const TopChangesFilterOption = {\r\n  AllChanges: 'AllChanges',\r\n  TopDecliners: 'TopDecliners',\r\n  TopGainers: 'TopGainers',\r\n  Insights: 'Insights',\r\n};\r\n\r\nexport const TopChangesFilterSortOptionMap = {\r\n  [TopChangesFilterOption.AllChanges]: 'Absolute',\r\n  [TopChangesFilterOption.TopGainers]: 'Gain',\r\n  [TopChangesFilterOption.TopDecliners]: 'Decline',\r\n  [TopChangesFilterOption.Insights]: 'Insight',\r\n};\r\n\r\nexport const AccountsMode = {\r\n  Smart: 0,\r\n  Expert: 1,\r\n};\r\n\r\nexport const ConversionFilterOption = {\r\n  AllChanges: 'AllChanges',\r\n  TopDecliners: 'TopDecliners',\r\n  TopGainers: 'TopGainers',\r\n};\r\n\r\nexport const ConversionFilterSortOptionMap = {\r\n  AllChanges: 'Absolute',\r\n  TopGainers: 'Gain',\r\n  TopDecliners: 'Decline',\r\n};\r\n","import _ from 'underscore';\r\nimport $ from 'jquery';\r\nimport { AccountUtils } from '@bingads-webui-clientcenter/entity-utils';\r\n\r\nimport { AccountsMode } from './constants';\r\n\r\nexport const changeEvents = (...attributes) => _.map(attributes, attr => `change:${attr}`).join(' ');\r\n\r\nexport function formatDate(date) {\r\n  const year = date.getFullYear();\r\n  const month = (date.getMonth() + 1).toString().padStart(2, '0');\r\n  const day = date.getDate().toString().padStart(2, '0');\r\n  return `${year}-${month}-${day}`;\r\n}\r\n\r\nexport function getFilteredTotalsMetrics({\r\n  data,\r\n  metric,\r\n}) {\r\n  if (data.raw) {\r\n    const filteredTotals = data.raw['@ns.filtered.totals'];\r\n\r\n    if (filteredTotals && filteredTotals[metric]) {\r\n      return filteredTotals[metric];\r\n    }\r\n\r\n    const unfilteredTotals = data.raw['@ns.unfiltered.totals'];\r\n\r\n    if (unfilteredTotals && unfilteredTotals[metric]) {\r\n      return unfilteredTotals[metric];\r\n    }\r\n  } else if (data.OverallTotals) {\r\n    if (data.DeviceSegmentedPerformanceData && data.DeviceSegmentedPerformanceData[metric]) {\r\n      // eslint-disable-next-line no-param-reassign\r\n      data.OverallTotals[metric] = _.extend(\r\n        {},\r\n        data.OverallTotals[metric],\r\n        {\r\n          SegmentedData: data.DeviceSegmentedPerformanceData[metric].SegmentedData,\r\n        }\r\n      );\r\n    }\r\n    return data.OverallTotals[metric];\r\n  }\r\n\r\n  return null;\r\n}\r\n\r\nfunction upperLevelNavigation(entitySet) {\r\n  return entitySet.navigation.source.navigation;\r\n}\r\n\r\nexport function coerceStatus(status, AccountInactiveReasons) {\r\n  if (AccountInactiveReasons) {\r\n    const {\r\n      activityStatus,\r\n    } = AccountUtils;\r\n    return activityStatus({ AccountInactiveReasons });\r\n  }\r\n\r\n  // Here we are coercing status for both Campaigns and Adgroups for status template.\r\n  // This must match what we do in Campaign and Ad-group grid.\r\n  // So we are showing 'CampaignUserPaused', 'CampaignBudgetPaused' and 'CampaignBudgetUserPaused'\r\n  // as active for adgroups.\r\n  if (_.contains([\r\n    'UserPaused',\r\n    'BudgetUserPaused',\r\n  ], status)) {\r\n    return 'Paused';\r\n  }\r\n\r\n  return status;\r\n}\r\n\r\nexport function entityHash({\r\n  id,\r\n  typeName,\r\n  entitySet,\r\n  navigationLevel,\r\n  adGroup,\r\n  campaign,\r\n  isSmartCampaign,\r\n  status,\r\n  pageContext,\r\n  legacyRouter,\r\n}) {\r\n  let hash;\r\n  const {\r\n    CurrentUser: {\r\n      Id: uid,\r\n    },\r\n    CurrentCustomer: {\r\n      Id: cid,\r\n    },\r\n    CurrentAccount: {\r\n      Id: aid,\r\n    },\r\n  } = pageContext;\r\n\r\n  switch (typeName) {\r\n    case 'Account':\r\n      // eslint-disable-next-line camelcase\r\n      hash = legacyRouter.getRouteUrl('account_$summary', { account_id: id });\r\n      break;\r\n    case 'Campaign':\r\n      if (isSmartCampaign) {\r\n        if (status === 'InProgress') {\r\n          hash = `/Campaign/Smart?uid=${uid}&aid=${aid}&cid=${cid}#/CreateCampaign/${id}`;\r\n        } else {\r\n          hash = `/Campaign/Smart?uid=${uid}&aid=${aid}&cid=${cid}#/campaign/${id}`;\r\n        }\r\n      } else {\r\n        // eslint-disable-next-line camelcase\r\n        hash = legacyRouter.getRouteUrl('campaign_$summary', { campaign_id: id });\r\n      }\r\n      break;\r\n    case 'AdGroup':\r\n      // eslint-disable-next-line camelcase\r\n      hash = legacyRouter.getRouteUrl('adgroup_$summary', {\r\n        campaign_id: upperLevelNavigation(entitySet).key,\r\n        adgroup_id: id,\r\n      });\r\n      break;\r\n    case 'Keyword':\r\n      if (navigationLevel === 'account') {\r\n        hash = legacyRouter.getRouteUrl('keyword');\r\n      } else {\r\n        // eslint-disable-next-line camelcase\r\n        hash = legacyRouter.getRouteUrl('adgroup_keyword', { campaign_id: campaign.Id, adgroup_id: adGroup.Id });\r\n      }\r\n      break;\r\n    case 'SearchTerm':\r\n      if (navigationLevel === 'account') {\r\n        hash = legacyRouter.getRouteUrl('keyword_search_term');\r\n      } else {\r\n        // eslint-disable-next-line camelcase\r\n        hash = legacyRouter.getRouteUrl('campaign_keyword_search_term', { campaign_id: campaign.Id });\r\n      }\r\n      break;\r\n    default:\r\n      hash = '';\r\n  }\r\n\r\n  return hash;\r\n}\r\n\r\nexport function getEntityIds({\r\n  typeName,\r\n  id,\r\n  entitySet,\r\n  campaign,\r\n  adGroup,\r\n}) {\r\n  let campaignId = '';\r\n  let adgroupId = '';\r\n  let accountId = '';\r\n\r\n  switch (typeName) {\r\n    case 'Account':\r\n      accountId = id;\r\n      break;\r\n    case 'Campaign':\r\n      campaignId = id;\r\n      break;\r\n    case 'AdGroup':\r\n      adgroupId = id;\r\n      campaignId = upperLevelNavigation(entitySet).key;\r\n      break;\r\n    case 'Keyword':\r\n    case 'SearchTerm':\r\n      campaignId = campaign.Id;\r\n      adgroupId = adGroup.Id;\r\n      break;\r\n    default:\r\n  }\r\n\r\n  return {\r\n    campaignId,\r\n    adgroupId,\r\n    accountId,\r\n  };\r\n}\r\n\r\nfunction saveToFilterStorage({\r\n  entityType,\r\n  text,\r\n  createEditableFilterStorage,\r\n}) {\r\n  const filterStorage = createEditableFilterStorage(entityType);\r\n\r\n  filterStorage.save({\r\n    id: null,\r\n    name: null,\r\n    query: {\r\n      Text: {\r\n        $eq: text,\r\n      },\r\n    },\r\n  });\r\n}\r\n\r\nexport function navigateToEntity({\r\n  event,\r\n  pageContext,\r\n  legacyRouter,\r\n  createEditableFilterStorage,\r\n  instrumentation,\r\n  constants,\r\n  cardType,\r\n}) {\r\n  const typeName = $(event.currentTarget).data('type');\r\n  const navigationLevel = $(event.currentTarget).data('navigationlevel');\r\n\r\n  instrumentation.logMessage([constants.LOGCATEGORY.TRACE], constants.LOGLEVEL.INFO, cardType, `${navigationLevel} level ${typeName} type entity link clicked.`);\r\n\r\n  if (event && (event.button !== 0 ||\r\n    event.ctrlKey ||\r\n    event.shiftKey ||\r\n    event.altKey ||\r\n    event.metaKey)) {\r\n    return true;\r\n  }\r\n  const campaignId = $(event.currentTarget).data('campaignid');\r\n  const adgroupId = $(event.currentTarget).data('adgroupid');\r\n  const text = $(event.currentTarget).data('text');\r\n  const campaignType = $(event.currentTarget).data('campaigntype');\r\n  const rawStatus = $(event.currentTarget).data('rawstatus');\r\n  const {\r\n    CurrentCustomer: {\r\n      Id: cid,\r\n    },\r\n    CurrentUser: {\r\n      Id: uid,\r\n    },\r\n  } = pageContext;\r\n  let returnValue = false;\r\n\r\n  switch (typeName) {\r\n    case 'Account': {\r\n      const accountId = $(event.currentTarget).data('accountid');\r\n      // eslint-disable-next-line camelcase\r\n      window.location.href = legacyRouter.getRouteUrl('account_$summary', { account_id: accountId });\r\n      break;\r\n    }\r\n    case 'Campaign': {\r\n      const {\r\n        CurrentAccount: {\r\n          Id: aid,\r\n        },\r\n      } = pageContext;\r\n      if (campaignType === 'Smart') {\r\n        if (rawStatus === 'InProgress') {\r\n          window.location.href = `/Campaign/Smart?uid=${uid}&cid=${cid}&aid=${aid}#/CreateCampaign/${campaignId}`;\r\n        } else {\r\n          window.location.href = `/Campaign/Smart?uid=${uid}&cid=${cid}&aid=${aid}#/campaign/${campaignId}`;\r\n        }\r\n      } else {\r\n        // eslint-disable-next-line camelcase\r\n        legacyRouter.navigateToRoute('campaign_$summary', { campaign_id: campaignId });\r\n      }\r\n      break;\r\n    }\r\n    case 'AdGroup':\r\n      // eslint-disable-next-line camelcase\r\n      legacyRouter.navigateToRoute('adgroup_$summary', { campaign_id: campaignId, adgroup_id: adgroupId });\r\n      break;\r\n    case 'Keyword':\r\n      saveToFilterStorage({\r\n        entityType: 'keyword',\r\n        text,\r\n        createEditableFilterStorage,\r\n      });\r\n      if (navigationLevel === 'account') {\r\n        legacyRouter.navigateToRoute('keyword');\r\n      } else {\r\n        // eslint-disable-next-line camelcase\r\n        legacyRouter.navigateToRoute('campaign_keyword', { campaign_id: campaignId });\r\n      }\r\n      break;\r\n    case 'SearchTerm':\r\n      saveToFilterStorage({\r\n        entityType: 'searchTerm',\r\n        text,\r\n        createEditableFilterStorage,\r\n      });\r\n      if (navigationLevel === 'account') {\r\n        legacyRouter.navigateToRoute('keyword_search_term');\r\n      } else {\r\n        // eslint-disable-next-line camelcase\r\n        legacyRouter.navigateToRoute('campaign_keyword_search_term', { campaign_id: campaignId });\r\n      }\r\n      break;\r\n    default:\r\n      returnValue = true;\r\n  }\r\n\r\n  return returnValue;\r\n}\r\n\r\nexport function getLocalizedSupportLink(pageContext) {\r\n  const culture = pageContext.Culture.toLowerCase();\r\n\r\n  // Default to en-us.\r\n  let consultationLink = 'https://help.ads.microsoft.com/apex/index/3/en-us/60029';\r\n  let coachingLink = 'https://advertise.bingads.microsoft.com/en-us/resources/support/coaching';\r\n\r\n  // Get culture specific pages if we have one.\r\n  switch (culture) {\r\n    case 'en-gb':\r\n      consultationLink = 'https://help.ads.microsoft.com/apex/index/3/en-gb/60029';\r\n      coachingLink = 'https://advertise.bingads.microsoft.com/en-gb/resources/support/coaching';\r\n      break;\r\n    case 'fr-fr':\r\n      consultationLink = 'https://help.ads.microsoft.com/apex/index/3/fr-fr/60029';\r\n      coachingLink = 'https://advertise.bingads.microsoft.com/fr-fr/ressources/support/un-coach-pour-demarrer';\r\n      break;\r\n    case 'de-de':\r\n      consultationLink = 'https://help.ads.microsoft.com/apex/index/3/de-de/60029';\r\n      coachingLink = 'https://advertise.bingads.microsoft.com/de-de/Ressourcen/support/coaching';\r\n      break;\r\n    case 'en-au':\r\n      consultationLink = 'https://help.ads.microsoft.com/apex/index/3/en-au/60029';\r\n      coachingLink = 'https://advertise.bingads.microsoft.com/en-au/resources/support/coaching';\r\n      break;\r\n    case 'en-nz':\r\n      consultationLink = 'https://help.ads.microsoft.com/apex/index/3/en-nz/60029';\r\n      coachingLink = 'https://advertise.bingads.microsoft.com/en-nz/resources/support/coaching';\r\n      break;\r\n    case 'pt-br':\r\n      consultationLink = 'https://help.ads.microsoft.com/apex/index/3/pt-br/60029';\r\n      coachingLink = 'https://advertise.bingads.microsoft.com/pt-br/recursos/suporte/coaching';\r\n      break;\r\n    case 'it-it':\r\n      consultationLink = 'https://help.ads.microsoft.com/apex/index/3/it-it/60029';\r\n      coachingLink = 'https://advertise.bingads.microsoft.com/it-it/risorse/supporto-di/coaching';\r\n      break;\r\n    case 'nl-nl':\r\n      consultationLink = 'https://help.ads.microsoft.com/apex/index/3/nl-nl/60029';\r\n      coachingLink = 'https://advertise.bingads.microsoft.com/nl-nl/hulpmiddelen/ondersteuning/coaching';\r\n      break;\r\n    case 'en-in':\r\n      consultationLink = 'https://help.ads.microsoft.com/apex/index/3/en-in/60029';\r\n      coachingLink = 'https://advertise.bingads.microsoft.com/en-in/resources/support/coaching';\r\n      break;\r\n    case 'es-es':\r\n      consultationLink = 'https://help.ads.microsoft.com/apex/index/3/es-es/60029';\r\n      coachingLink = 'https://advertise.bingads.microsoft.com/es-es/recursos/soporte/coaching';\r\n      break;\r\n    default:\r\n      if (culture.indexOf('es') !== -1) {\r\n        consultationLink = 'https://help.ads.microsoft.com/apex/index/3/es-mx/60029';\r\n        coachingLink = 'https://advertise.bingads.microsoft.com/es-mx/recursos/soporte/coaching';\r\n      }\r\n  }\r\n\r\n  return {\r\n    consultationLink: `${consultationLink}?id=optimization-consultation-tip`,\r\n    coachingLink: `${coachingLink}?id=onboarding-consultation-tip`,\r\n  };\r\n}\r\n\r\nfunction periodDurationIn(dateUtil, { start, end } = {}, max, min = 0) {\r\n  if (!_.isDate(start) || !_.isDate(end)) {\r\n    return true;\r\n  }\r\n\r\n  const duration = dateUtil.diff(start, end, 'day');\r\n\r\n  return duration >= min && duration <= max;\r\n}\r\n\r\nfunction periodFit(dateUtil, period, max, min = 0) {\r\n  return periodDurationIn(dateUtil, period, max, min) &&\r\n    periodDurationIn(dateUtil, period.compared || {}, max);\r\n}\r\n\r\nexport function availableGranularities(period = {}, dateUtil, accountsMode = AccountsMode.Expert) {\r\n  const {\r\n    comparativePeriod = {},\r\n  } = period;\r\n\r\n  const result = [];\r\n\r\n  const hourlyStartDate = new Date();\r\n\r\n  hourlyStartDate.setMonth(hourlyStartDate.getMonth() - 6);\r\n\r\n  if (periodFit(dateUtil, period, 0)) {\r\n    if (periodFit(dateUtil, {\r\n      start: hourlyStartDate,\r\n      end: period.start,\r\n      compared: {\r\n        start: hourlyStartDate,\r\n        end: comparativePeriod.end,\r\n      },\r\n    }, Infinity) && accountsMode === AccountsMode.Expert) {\r\n      result.push('Hour');\r\n    } else {\r\n      // we only support hourly data for a sliding 6 months window\r\n      result.push('Day');\r\n    }\r\n  }\r\n\r\n  if (periodFit(dateUtil, period, 30, 1)) {\r\n    result.push('Day');\r\n  }\r\n\r\n  if (periodFit(dateUtil, period, 210, 7)) {\r\n    result.push('Week');\r\n  }\r\n\r\n  if (periodFit(dateUtil, period, 900, 31)) {\r\n    result.push('Month');\r\n  }\r\n\r\n  if (periodDurationIn(dateUtil, period, Infinity, 90)) {\r\n    result.push('Quarter');\r\n  }\r\n\r\n  return result;\r\n}\r\nexport const getPopDescription = (i18n, comparisonDateRange) => {\r\n  let comparisonDateRangeDateRangeText;\r\n  let comparisonText;\r\n\r\n  if (comparisonDateRange.rangeInDays <= 7) {\r\n    comparisonText = i18n.getString('Dashboard_TopChanges_Period_LastWeek');\r\n  } else {\r\n    comparisonText = i18n.getString('Dashboard_TopChanges_Period_Previous_Period');\r\n  }\r\n\r\n  // eslint-disable-next-line no-param-reassign\r\n  comparisonDateRange.formattedStart = i18n.formatDate(comparisonDateRange.start);\r\n  // eslint-disable-next-line no-param-reassign\r\n  comparisonDateRange.formattedEnd = i18n.formatDate(comparisonDateRange.end);\r\n\r\n  if (comparisonDateRange.formattedStart === comparisonDateRange.formattedEnd) {\r\n    comparisonDateRangeDateRangeText = `(${comparisonDateRange.formattedStart})`;\r\n  } else {\r\n    comparisonDateRangeDateRangeText = `(${comparisonDateRange.formattedStart} - ${comparisonDateRange.formattedEnd})`;\r\n  }\r\n\r\n  let comparisonDateRangeDescription = comparisonText.toLowerCase();\r\n\r\n  if (comparisonDateRange.key === 'customPeriod') {\r\n    comparisonDateRangeDescription = '';\r\n  }\r\n\r\n  return `${i18n.getString('Dashboard_TopChanges_Period_Comparison')}${comparisonDateRangeDescription} ${comparisonDateRangeDateRangeText}`;\r\n};\r\n","import _ from 'underscore';\r\nimport { applyPartialConversionColumnName } from '@bingads-webui-campaign/column-conversions';\r\nimport { AccountsMode } from './constants';\r\nimport { cardPerformanceId, cardTopCampaignsId } from '../../fluent-page-consts';\r\n\r\nconst allMetrics = (permissions = {}, accountsMode = AccountsMode.Expert, campaignType = null) => {\r\n  const { AppCampaignNewCampaignGridColumns } = permissions.dynamic || {};\r\n  const isAppCampaign = AppCampaignNewCampaignGridColumns && (campaignType === 128 || campaignType === 'App');\r\n  const isAllCampaigns = AppCampaignNewCampaignGridColumns && campaignType === 65535;\r\n  if (accountsMode === AccountsMode.Expert) {\r\n    return applyPartialConversionColumnName(\r\n      permissions,\r\n      _.compact([\r\n        'Clicks',\r\n        'Impressions',\r\n        'CTR',\r\n        'AverageCPC',\r\n        'Spend',\r\n        !permissions.IsAvgPositionDeprecationPhase2Enabled && 'AveragePosition',\r\n        'TopImpressionRate',\r\n        'AbsoluteTopImpressionRate',\r\n        'Conversions',\r\n        'ConversionRate',\r\n        'CPA',\r\n        'AdvertiserReportedRevenue',\r\n        'RevenueOnAdSpend',\r\n        (isAppCampaign || isAllCampaigns) && 'Downloads',\r\n        isAppCampaign && 'PostClickDownloadRate',\r\n        isAppCampaign && 'CostPerDownload',\r\n        (isAppCampaign || isAllCampaigns) && 'FirstLaunches',\r\n        isAppCampaign && 'PostClickFirstLaunchRate',\r\n        (isAppCampaign || isAllCampaigns) && 'CostPerFirstLaunch',\r\n        isAppCampaign && 'Purchases',\r\n        isAppCampaign && 'PostInstallPurchaseRate',\r\n        isAppCampaign && 'CostPerPurchase',\r\n        isAppCampaign && 'Subscriptions',\r\n        isAppCampaign && 'PostInstallSubscriptionRate',\r\n        isAppCampaign && 'CostPerSubscription',\r\n      ])\r\n    );\r\n  }\r\n\r\n  return [\r\n    'Clicks',\r\n    'Impressions',\r\n    'CTR',\r\n    'AverageCPC',\r\n    'Spend',\r\n    'Conversions',\r\n    'ConversionRate',\r\n    'CPA',\r\n  ];\r\n};\r\n\r\n// Do we need a full list like this?\r\n// https://msasg.visualstudio.com/Bing_Ads/_git/AdsAppsCampaignUI?path=/private/component-new-grid/packages/campaignui-common-columns/src/strings.js&_a=contents&version=GBmaster\r\nconst metricToDisplayNameMap = {\r\n  Clicks: _TL_('Clicks'),\r\n  Impressions: _TL_('Impr.'),\r\n  CTR: _TL_('CTR'),\r\n  AverageCPC: _TL_('Avg. CPC'),\r\n  Spend: _TL_('Spend'),\r\n  AveragePosition: _TL_('Avg. pos.'),\r\n  TopImpressionRate: _TL_('Top impr. rate'),\r\n  AbsoluteTopImpressionRate: _TL_('Abs. top impr. rate'),\r\n  Conversions: _TL_('Conv.'),\r\n  ConversionRate: _TL_('Conv. rate'),\r\n  CPA: _TL_('CPA'),\r\n  AdvertiserReportedRevenue: _TL_('Revenue'),\r\n  RevenueOnAdSpend: _TL_('Return on ad spend'),\r\n  Downloads: _TL_('Downloads'),\r\n  PostClickDownloadRate: _TL_('Post-click download rate'),\r\n  CostPerDownload: _TL_('Cost per download'),\r\n  FirstLaunches: _TL_('Installs'),\r\n  PostClickFirstLaunchRate: _TL_('Post-click install rate'),\r\n  CostPerFirstLaunch: _TL_('Cost per install'),\r\n  Purchases: _TL_('Purchases'),\r\n  PostInstallPurchaseRate: _TL_('Post-install purchase rate'),\r\n  CostPerPurchase: _TL_('Cost per purchase'),\r\n  Subscriptions: _TL_('Subscriptions'),\r\n  PostInstallSubscriptionRate: _TL_('Post-install subscription rate'),\r\n  CostPerSubscription: _TL_('Cost per subscription'),\r\n\r\n  // when dynamic PartialConversions & ColumnConversion are true\r\n  ConversionsCredit: _TL_('Conv.'),\r\n  PartialConversionRate: _TL_('Conv. rate'),\r\n  PartialConversionCPA: _TL_('CPA'),\r\n};\r\n\r\nconst UIToMTMetricNameMap = {\r\n  Impressions: 'Impression',\r\n  Clicks: 'Click',\r\n  Spend: 'Spend',\r\n};\r\n\r\nconst metricSelect = (permissions, accountsMode = AccountsMode.Expert, campaignType) => _.map(\r\n  allMetrics(permissions, accountsMode, campaignType),\r\n  metric => `PerformanceMetrics/${metric}`\r\n).join(',');\r\n\r\nconst isInsightsMetric = UIMetric => _.contains(_.keys(UIToMTMetricNameMap), UIMetric);\r\n\r\nconst getInsightsMetric = (allowedMetric, UIMetric) =>\r\n  _.filter(allowedMetric, MTMetric => MTMetric === UIToMTMetricNameMap[UIMetric]);\r\n\r\nconst getInsightsMetricFilterOption = metric => `Enum.FluctuationType'${UIToMTMetricNameMap[metric]}'`;\r\n\r\nconst defaultMetrics = (permissions = {}, accountsMode = AccountsMode.Expert) => {\r\n  const metrics = ['Spend', 'Clicks', 'Conversions', 'Impressions'];\r\n\r\n  if (accountsMode === AccountsMode.Expert) {\r\n    return applyPartialConversionColumnName(\r\n      permissions,\r\n      metrics\r\n    );\r\n  }\r\n\r\n  return metrics;\r\n};\r\n\r\n/**\r\n * This function filters unsupported metrics from dropdowns on the overview page, based on card and campaign types.\r\n * This ensures users can only select valid metrics, avoiding multiple API calls per page.\r\n */\r\nconst getUIMetrics = (metrics, campaignType = null, cardTypeId = null) => {\r\n  const shouldExcludeAppMetrics = cardTypeId !== cardPerformanceId && cardTypeId !== cardTopCampaignsId;\r\n  const isAllCampaignsScope = campaignType === 65535;\r\n  const excludedMetrics = ['Downloads', 'FirstLaunches', 'CostPerFirstLaunch'];\r\n  if (isAllCampaignsScope && shouldExcludeAppMetrics) {\r\n    return metrics.filter(m => !excludedMetrics.includes(m.key));\r\n  }\r\n  return metrics;\r\n};\r\n\r\nexport {\r\n  allMetrics,\r\n  defaultMetrics,\r\n  metricToDisplayNameMap,\r\n  metricSelect,\r\n  isInsightsMetric,\r\n  getInsightsMetric,\r\n  getInsightsMetricFilterOption,\r\n  getUIMetrics,\r\n};\r\n","import _ from 'underscore';\r\nimport {\r\n  Campaign,\r\n  AdGroup,\r\n  AssetGroup,\r\n  SearchTerm,\r\n  Keyword,\r\n} from '@bingads-webui-campaign/campaign-ui-schemas';\r\nimport { FilterEntity } from '@bingads-webui/filter-entity';\r\nimport { WaterfallFilterType, FilterStorageFactory } from '@bingads-webui-campaign/filter-storage';\r\nimport { flattenEntitySchema, buildNameToPropertyMapping } from '@bingads-webui/filter-schema';\r\nimport { addCampaignTypePropertyForFilter, baseEntitySchemaForAvailableInsightTypeIds, lambdaConvertForAvailableInsightTypeIds } from '@bingads-webui-campaign/common-grid-config';\r\nimport { getInsightsMetricFilterOption, isInsightsMetric } from './metrics';\r\n\r\nconst entitySchemaCopy = {};\r\n\r\nfunction getflattenEntitySchema(schemaName, permissions) {\r\n  let entitySchema = entitySchemaCopy[schemaName];\r\n\r\n  if (entitySchema) {\r\n    return entitySchema;\r\n  }\r\n\r\n  switch (schemaName) {\r\n    case 'SearchTerm':\r\n      entitySchema = flattenEntitySchema(SearchTerm);\r\n      addCampaignTypePropertyForFilter({ entitySchema, permissions });\r\n      break;\r\n    case 'Keyword':\r\n      entitySchema = flattenEntitySchema(Keyword);\r\n      addCampaignTypePropertyForFilter({ entitySchema, permissions });\r\n      break;\r\n    case 'Campaign':\r\n      entitySchema = flattenEntitySchema(Campaign);\r\n      entitySchema.properties.AvailableInsightTypeIds =\r\n          baseEntitySchemaForAvailableInsightTypeIds;\r\n      break;\r\n    case 'AdGroup':\r\n      entitySchema = flattenEntitySchema(AdGroup);\r\n      addCampaignTypePropertyForFilter({ entitySchema, permissions });\r\n      break;\r\n    case 'AssetGroup':\r\n      entitySchema = flattenEntitySchema(AssetGroup);\r\n      addCampaignTypePropertyForFilter({ entitySchema, permissions });\r\n      break;\r\n    default:\r\n      entitySchema = null;\r\n      break;\r\n  }\r\n\r\n  entitySchemaCopy[schemaName] = entitySchema;\r\n\r\n  return entitySchema;\r\n}\r\n\r\nexport function getMergedFilter({\r\n  filter,\r\n  typeName,\r\n  metric,\r\n  isFilterByInsights,\r\n  permissions,\r\n}) {\r\n  if (!filter) {\r\n    return undefined;\r\n  }\r\n\r\n  const filters = _.chain(filter)\r\n    .compact()\r\n    .map(({\r\n      filter: {\r\n        key,\r\n        value: { query } = {},\r\n      } = {},\r\n    }) => {\r\n      if (!query) {\r\n        return null;\r\n      }\r\n\r\n      let updatedQuery = query;\r\n\r\n      if (typeName === 'Campaign') {\r\n        if (key === WaterfallFilterType.AdGroupStatus) {\r\n          return null;\r\n        }\r\n\r\n        if (key === WaterfallFilterType.CampaignStatus) {\r\n          updatedQuery = {\r\n            Status: query.CampaignStatus,\r\n          };\r\n        }\r\n      } else if (typeName === 'AdGroup' && (key === WaterfallFilterType.AdGroupStatus)) {\r\n        updatedQuery = {\r\n          Status: query.AdGroupStatus,\r\n        };\r\n      } else if (typeName === 'AssetGroup') {\r\n        // No filters support for asset groups\r\n        return null;\r\n      }\r\n\r\n      return new FilterEntity(\r\n        updatedQuery,\r\n        {\r\n          entitySchema: getflattenEntitySchema(typeName, permissions),\r\n        }\r\n      );\r\n    })\r\n    .compact()\r\n    .value();\r\n\r\n  if (typeName === 'Campaign'\r\n    && isFilterByInsights\r\n    && isInsightsMetric(metric)) {\r\n    const query = {\r\n      AvailableInsightTypeIds: {\r\n        $contains: [getInsightsMetricFilterOption(metric)],\r\n      },\r\n    };\r\n    const entitySchema = getflattenEntitySchema(typeName, permissions);\r\n    const availableInsightsTypeIdFilter = new FilterEntity(\r\n      query,\r\n      {\r\n        entitySchema,\r\n        odata: {\r\n          fieldMap: buildNameToPropertyMapping(entitySchema),\r\n          ignoreCase: false,\r\n          custom: {\r\n            AvailableInsightTypeIds: {\r\n              contains: lambdaConvertForAvailableInsightTypeIds(),\r\n            },\r\n          },\r\n        },\r\n      }\r\n    );\r\n    filters.push(availableInsightsTypeIdFilter);\r\n  }\r\n\r\n  if (!filters || filters.length === 0) {\r\n    return undefined;\r\n  }\r\n\r\n  const entitySchema = getflattenEntitySchema(typeName, permissions);\r\n  const mergedFilter = new FilterEntity(\r\n    FilterEntity.merge(filters),\r\n    {\r\n      entitySchema,\r\n      odata: {\r\n        fieldMap: buildNameToPropertyMapping(entitySchema),\r\n        ignoreCase: false,\r\n        custom: {\r\n          AvailableInsightTypeIds: {\r\n            contains: lambdaConvertForAvailableInsightTypeIds(),\r\n          },\r\n        },\r\n      },\r\n    }\r\n  );\r\n  mergedFilter.options = mergedFilter.odataOptions;\r\n  return mergedFilter;\r\n}\r\n\r\nexport function getConversionGoalsFilterStore({ preferenceService }) {\r\n  const conversionGoalsFilter = new FilterStorageFactory({\r\n    preferenceService,\r\n    featureName: 'ConversionGoalsGrid',\r\n  });\r\n\r\n  return conversionGoalsFilter.create('editableFilter', {\r\n    filterEntityOptions: {\r\n      entitySchema: { name: 'Goal' },\r\n    },\r\n  });\r\n}\r\n","import _ from 'underscore';\r\nimport { lastNDate } from '@bingads-webui-universal/primitive-utilities';\r\nimport { PageReady } from '@bingads-webui/page-ready';\r\nimport { withDFMCache } from '@bingads-webui/dfm-cache';\r\nimport { partialConversionPairs } from '@bingads-webui-campaign/column-conversions';\r\nimport instrumentationLegacy from '@bingads-webui-static-legacy/instrumentation/index';\r\nimport instrumentationConstants from '@bingads-webui-static-legacy/instrumentation/constants';\r\n\r\nimport { formatDate, availableGranularities } from './util';\r\nimport { metricSelect, allMetrics } from './metrics';\r\nimport { getMergedFilter } from './filter-util';\r\nimport { TopChangesFilterOption, TopChangesFilterSortOptionMap, AccountsMode, ConversionFilterSortOptionMap } from './constants';\r\n\r\n\r\nexport const defaultGridColumns = ['Spend', 'Clicks', 'Impressions'];\r\n\r\nfunction fetch({\r\n  entitySet,\r\n  dateRange,\r\n  comparisonDateRange,\r\n  top,\r\n  expand,\r\n  orderBy,\r\n  SegmentationTypes,\r\n  select,\r\n  extraPayload,\r\n  jsdata,\r\n  dateUtil,\r\n  filter,\r\n  metric,\r\n  selectedMenuItem,\r\n  disableCache,\r\n  cacheManager,\r\n  permissions,\r\n}) {\r\n  const gridDataParameters = _.extend({\r\n    DateRange: {\r\n      StartDate: formatDate(dateRange.start),\r\n      EndDate: formatDate(dateRange.end),\r\n    },\r\n    ComparisonDateRange:\r\n      comparisonDateRange &&\r\n        _.isDate(comparisonDateRange.start) &&\r\n        _.isDate(comparisonDateRange.end) ?\r\n        {\r\n          StartDate: formatDate(comparisonDateRange.start),\r\n          EndDate: formatDate(comparisonDateRange.end),\r\n        } : null,\r\n  }, SegmentationTypes ? { SegmentationTypes } : {});\r\n  const parameters = _.extend({\r\n    gridDataParameters,\r\n  }, extraPayload);\r\n  const query = {\r\n    entitySet: entitySet['Default.GridData'].$call(parameters).toJSON(),\r\n  };\r\n  const typeName = entitySet.type.elementType.shortName;\r\n  const isFilterByInsights = selectedMenuItem === TopChangesFilterOption.Insights;\r\n  const mergedFilter = getMergedFilter({\r\n    filter, typeName, metric, isFilterByInsights, permissions,\r\n  });\r\n  const filters = mergedFilter ? mergedFilter.odataV4() : undefined;\r\n\r\n  if (top) {\r\n    _.extend(query, {\r\n      $top: top,\r\n    });\r\n  }\r\n\r\n  if (expand) {\r\n    _.extend(query, {\r\n      $expand: expand,\r\n    });\r\n  }\r\n\r\n  if (select) {\r\n    _.extend(query, {\r\n      $select: select,\r\n    });\r\n  }\r\n\r\n  if (filters) {\r\n    _.extend(query, {\r\n      $filter: filters,\r\n    });\r\n  }\r\n\r\n  if (disableCache) {\r\n    cacheManager.invalidate(entitySet.type.elementType.shortName);\r\n  }\r\n\r\n  return jsdata[entitySet.type.elementType.shortName].findAll({\r\n    query,\r\n    orderBy,\r\n  });\r\n}\r\n\r\nconst millisecondsInDay = 86400000;\r\nconst top = 10;\r\n\r\nexport const topChangesDefaultOptions = {\r\n  selectedMenuItem: 'AllChanges',\r\n  metric: 'Clicks',\r\n};\r\n\r\nexport const conversionDefaultOptions = {\r\n  selectedMenuItem: 'AllChanges',\r\n  metric: 'ConversionsCredit', // ConversionsCredit, AdvertiserReportedRevenue\r\n};\r\n\r\nexport function getComparisonDateRange(dateRange) {\r\n  let comparisonDateRange = dateRange.compared;\r\n\r\n  if (!comparisonDateRange ||\r\n    !_.isDate(comparisonDateRange.start) ||\r\n    !_.isDate(comparisonDateRange.end)) {\r\n    // Comparison date rage is not set in date filter.\r\n    // Create one.\r\n    comparisonDateRange = {};\r\n    const timeRange = dateRange.end.getTime() - dateRange.start.getTime();\r\n    const rangeInDays = Math.round(timeRange / millisecondsInDay);\r\n\r\n    if (rangeInDays <= 7) {\r\n      // If date range is within 7 days, compare with last weeks data.\r\n      comparisonDateRange.start = lastNDate(dateRange.start, 7);\r\n      comparisonDateRange.end = lastNDate(dateRange.end, 7);\r\n      comparisonDateRange.key = 'last 7 days';\r\n    } else {\r\n      // For longer time period, compare with pervious time period.\r\n      comparisonDateRange.end = lastNDate(dateRange.start, 1);\r\n      comparisonDateRange.start = lastNDate(comparisonDateRange.end, rangeInDays);\r\n      comparisonDateRange.key = 'previous period';\r\n    }\r\n    comparisonDateRange.rangeInDays = rangeInDays;\r\n  }\r\n\r\n  return comparisonDateRange;\r\n}\r\n\r\nexport const gridCardConfig = {\r\n  entityCount: 10,\r\n  select: ({\r\n    typeName,\r\n    isCompared,\r\n    permissions,\r\n    columns,\r\n    campaignType,\r\n    accountsMode,\r\n  }) => {\r\n    let select;\r\n    const metricSelectUnserPermission = metricSelect(permissions, accountsMode, campaignType);\r\n\r\n    switch (typeName) {\r\n      case 'SearchTerm':\r\n        select = `Text,DeliveredMatchType,SearchTermStatus,${_.map(columns, metric => `PerformanceMetrics/${metric}`).join(',')}`;\r\n        break;\r\n      case 'Keyword':\r\n        select = isCompared ?\r\n          `Text,Status,Id,MatchType,PerformanceMetricsChange,PerformanceMetricsChangePercentage,${metricSelectUnserPermission}` : `Text,Status,Id,MatchType,${metricSelectUnserPermission}`;\r\n        break;\r\n      case 'Campaign':\r\n        select = isCompared ? `Name,Status,Id,PerformanceMetricsChange,PerformanceMetricsChangePercentage,ExperimentId,CampaignType,${metricSelectUnserPermission}` : `Name,Status,Id,ExperimentId,CampaignType,${metricSelectUnserPermission}`;\r\n        break;\r\n      default:\r\n        select = isCompared ? `Name,Status,Id,PerformanceMetricsChange,PerformanceMetricsChangePercentage,${metricSelectUnserPermission}` : `Name,Status,Id,${metricSelectUnserPermission}`;\r\n        break;\r\n    }\r\n    return select;\r\n  },\r\n  expand: (typeName) => {\r\n    let expand;\r\n\r\n    switch (typeName) {\r\n      case 'SearchTerm':\r\n        expand = 'Campaign($select=Id,Name),AdGroup($select=Id,Name),Keyword($select=Text)';\r\n        break;\r\n      case 'Keyword':\r\n        expand = 'Campaign($select=Id,Name,ExperimentId),AdGroup($select=Id,Name)';\r\n        break;\r\n      case 'AdGroup':\r\n        expand = 'Campaign($select=ExperimentId)';\r\n        break;\r\n      default:\r\n        break;\r\n    }\r\n    return expand;\r\n  },\r\n  segmentationTypes: (typeName) => {\r\n    if (typeName === 'AdGroup' || typeName === 'Campaign' || typeName === 'Account') {\r\n      return ['DeviceType'];\r\n    }\r\n    return undefined;\r\n  },\r\n  defaultOptions: {\r\n    columns: defaultGridColumns,\r\n    orderby: 'Spend',\r\n    direction: -1,\r\n    directionIndex: 0,\r\n    selectedMenuItem: 'PerformanceMetrics',\r\n  },\r\n  extraPayload: (typeName) => {\r\n    if (typeName === 'SearchTerm') {\r\n      return {\r\n        shouldLoadShoppingTerms: true,\r\n        isOverviewRequest: true,\r\n      };\r\n    }\r\n    return {};\r\n  },\r\n};\r\n\r\nfunction getColumnAndOrder({\r\n  options,\r\n  dateRange,\r\n}) {\r\n  const metric = options.orderby;\r\n  const order = options.direction === 1 ? 'ASC' : 'DESC';\r\n  let orderByValue;\r\n\r\n  if (dateRange.compared) {\r\n    switch (options.selectedMenuItem) {\r\n      case 'PerformanceMetricsChange':\r\n        orderByValue = 'PoPPerformanceMetricsChange';\r\n        break;\r\n      case 'PerformanceMetricsChangePercentage':\r\n        orderByValue = 'PoPPerformanceMetricsChangePercentage';\r\n        break;\r\n      case 'PerformanceMetrics':\r\n        orderByValue = 'PerformanceMetrics';\r\n        break;\r\n      default:\r\n        orderByValue = 'PerformanceMetrics';\r\n        break;\r\n    }\r\n  } else {\r\n    orderByValue = 'PerformanceMetrics';\r\n  }\r\n\r\n  return {\r\n    column: `${orderByValue}/${metric}`,\r\n    order,\r\n  };\r\n}\r\n\r\nexport function processGridTileOptions({\r\n  options,\r\n  permissions,\r\n  accountsMode,\r\n  campaignType,\r\n}) {\r\n  if (permissions.dynamic && (permissions.dynamic.OverviewPageFluentV2 || permissions.dynamic.OverviewPageFluent2)) {\r\n    instrumentationLegacy.logMessage(\r\n      [instrumentationConstants.LOGCATEGORY.TRACE],\r\n      instrumentationConstants.LOGLEVEL.INFO,\r\n      'NewOverviewPage DFM',\r\n      'Start to process grid tile options for new overview page'\r\n    );\r\n  }\r\n\r\n  // handle cases where columns might be deprecated.\r\n  if (!_.isEmpty(options.columns)) {\r\n    const availableMetrics = allMetrics(permissions, accountsMode, campaignType);\r\n    let selectedColumns = _.intersection(options.columns, availableMetrics);\r\n\r\n    if (_.size(selectedColumns) < _.size(defaultGridColumns)) {\r\n      selectedColumns = _.chain(selectedColumns)\r\n        .union(defaultGridColumns)\r\n        .uniq()\r\n        .first(_.size(defaultGridColumns))\r\n        .value();\r\n\r\n      const orderby = _.contains(availableMetrics, options.orderby) ?\r\n        options.orderby : selectedColumns[0];\r\n\r\n      return _.defaults({\r\n        columns: selectedColumns,\r\n        orderby,\r\n      }, options);\r\n    }\r\n  }\r\n\r\n  if (permissions.dynamic && (permissions.dynamic.OverviewPageFluentV2 || permissions.dynamic.OverviewPageFluent2)) {\r\n    instrumentationLegacy.logMessage(\r\n      [instrumentationConstants.LOGCATEGORY.TRACE],\r\n      instrumentationConstants.LOGLEVEL.INFO,\r\n      'NewOverviewPage DFM',\r\n      JSON.stringify(options)\r\n    );\r\n  }\r\n\r\n  return options;\r\n}\r\n\r\nconst originalFetchGridData = ({\r\n  entitySet,\r\n  dateRange,\r\n  options = gridCardConfig.defaultOptions,\r\n  segmentationTypes,\r\n  jsdata,\r\n  dateUtil,\r\n  getCardsConfig,\r\n  filter,\r\n  permissions,\r\n  campaignType,\r\n}) => {\r\n  const typeName = entitySet.type.elementType.shortName;\r\n  const { column, order } = getColumnAndOrder({\r\n    options: processGridTileOptions({\r\n      options: options.columns && options.orderby ? options : gridCardConfig.defaultOptions,\r\n      permissions,\r\n      campaignType,\r\n    }),\r\n    dateRange,\r\n  });\r\n  const orderBy = [[column, order]];\r\n\r\n  // fetchEntityGridCombined is only for all campaigns,\r\n  // if there is a filter on CampaignId (e.g. PMax campaign overview), call fetch with the filter\r\n  if (typeName === 'Campaign' && !_.any(filter, f => _.result(f, ['filter', 'key']) === 'CampaignId')) {\r\n    // eslint-disable-next-line no-use-before-define\r\n    return fetchEntityGridCombined({\r\n      entitySet,\r\n      dateRange,\r\n      jsdata,\r\n      dateUtil,\r\n      getCardsConfig,\r\n      orderBy,\r\n      filter,\r\n      permissions,\r\n      accountsMode: AccountsMode.Expert,\r\n      campaignType,\r\n    });\r\n  }\r\n\r\n  return fetch({\r\n    entitySet,\r\n    dateRange,\r\n    comparisonDateRange: dateRange.compared,\r\n    top: gridCardConfig.entityCount,\r\n    orderBy,\r\n    SegmentationTypes: segmentationTypes || gridCardConfig.segmentationTypes(typeName),\r\n    expand: gridCardConfig.expand(typeName),\r\n    select: gridCardConfig.select({\r\n      typeName,\r\n      isCompared: dateRange.compared,\r\n      permissions,\r\n      columns: options.columns,\r\n      campaignType,\r\n      accountsMode: AccountsMode.Expert,\r\n    }),\r\n    extraPayload: gridCardConfig.extraPayload(typeName),\r\n    jsdata,\r\n    dateUtil,\r\n    filter,\r\n  });\r\n};\r\n\r\nexport const fetchGridData = withDFMCache(originalFetchGridData, args => args.dfmCacheKey);\r\n\r\nfunction getEntityGridOptions({\r\n  orderBy,\r\n  getCardsConfig,\r\n  dateRange,\r\n  permissions,\r\n  typeName = 'Account',\r\n  campaignType,\r\n}) {\r\n  let column;\r\n  let order;\r\n\r\n  if (orderBy && orderBy[0]) {\r\n    [[column, order]] = orderBy;\r\n  } else {\r\n    const cardConfig = _.find(getCardsConfig(), card => (typeName === 'Account' && card.id === 'CardType-TopAccounts') || (typeName === 'Campaign' && card.id === 'CardType-TopCampaigns'));\r\n    const columnOrder = getColumnAndOrder({\r\n      options: processGridTileOptions({\r\n        options: cardConfig && cardConfig.options && cardConfig.options.columns && cardConfig.options.orderby ?\r\n          cardConfig.options : gridCardConfig.defaultOptions,\r\n        permissions,\r\n        campaignType,\r\n      }),\r\n      dateRange,\r\n    });\r\n    // eslint-disable-next-line prefer-destructuring\r\n    column = columnOrder.column;\r\n    // eslint-disable-next-line prefer-destructuring\r\n    order = columnOrder.order;\r\n  }\r\n\r\n  return {\r\n    sortColumn: column,\r\n    sortDirection: order === 'DESC' ? 'DESCENDING' : 'ASCENDING',\r\n  };\r\n}\r\n\r\nexport function processTopChangesMetric({\r\n  metric,\r\n  permissions,\r\n  accountsMode,\r\n  campaignType,\r\n}) {\r\n  const availableMetrics = allMetrics(permissions, accountsMode, campaignType);\r\n  return _.contains(availableMetrics, metric) ?\r\n    metric : topChangesDefaultOptions.metric;\r\n}\r\n\r\nconst getMetricConverter = (permissions, accountsMode) => {\r\n  const {\r\n    ColumnConversion: IsColumnConversionEnabled,\r\n    PartialConversions: IsPartialConversionsEnabled,\r\n  } = permissions.dynamic || {};\r\n  if (accountsMode === AccountsMode.Expert && IsColumnConversionEnabled) {\r\n    const conversionPropertyMap = IsPartialConversionsEnabled ?\r\n      partialConversionPairs :\r\n      _.invert(partialConversionPairs);\r\n    return metric => _.result(conversionPropertyMap, metric, metric);\r\n  }\r\n  return _.identity;\r\n};\r\n\r\nexport const patchMetric = ({\r\n  permissions = {},\r\n  metric,\r\n  accountsMode = AccountsMode.Expert,\r\n} = {}) => {\r\n  const converter = getMetricConverter(permissions, accountsMode);\r\n  return converter(metric);\r\n};\r\n\r\nexport const patchMetrics = ({\r\n  permissions = {},\r\n  metrics = [],\r\n  accountsMode = AccountsMode.Expert,\r\n} = {}) => {\r\n  const converter = getMetricConverter(permissions, accountsMode);\r\n  return _.map(metrics, converter);\r\n};\r\n\r\nfunction getTopChangesOptions({\r\n  getCardsConfig,\r\n  typeName,\r\n  selectedMenuItem,\r\n  metric,\r\n  permissions,\r\n  accountsMode = AccountsMode.Expert,\r\n  campaignType,\r\n}) {\r\n  if (selectedMenuItem && metric) {\r\n    return {\r\n      menuItem: selectedMenuItem,\r\n      selectedMetric: processTopChangesMetric({\r\n        metric,\r\n        permissions,\r\n        accountsMode,\r\n        campaignType,\r\n      }),\r\n    };\r\n  }\r\n\r\n  let cardId = 'CardType-TopChanges-Account';\r\n\r\n  if (typeName === 'Campaign') {\r\n    cardId = 'CardType-TopChanges-Campaign';\r\n  } else if (typeName === 'AdGroup') {\r\n    cardId = 'CardType-TopChanges-AdGroup';\r\n  }\r\n\r\n  const cardConfig = _.find(getCardsConfig(), card => card.id === cardId);\r\n\r\n  return {\r\n    menuItem: cardConfig && cardConfig.options ?\r\n      cardConfig.options.selectedMenuItem : topChangesDefaultOptions.selectedMenuItem,\r\n    selectedMetric: processTopChangesMetric({\r\n      metric: cardConfig && cardConfig.options ?\r\n        cardConfig.options.metric : topChangesDefaultOptions.metric,\r\n      permissions,\r\n      accountsMode,\r\n      campaignType,\r\n    }),\r\n  };\r\n}\r\n\r\nfunction getConversionOptions({\r\n  getCardsConfig,\r\n  selectedMenuItem,\r\n  metric,\r\n}) {\r\n  if (selectedMenuItem && metric) {\r\n    return {\r\n      menuItem: selectedMenuItem,\r\n      selectedMetric: metric,\r\n    };\r\n  }\r\n\r\n  const cardId = 'CardType-Conversion-Tracking';\r\n\r\n  const allCardConfig = getCardsConfig();\r\n  const cardConfig = _.find(allCardConfig, card => card.id === cardId);\r\n\r\n  return {\r\n    menuItem: cardConfig && cardConfig.options && cardConfig.options.selectedMenuItem ?\r\n      cardConfig.options.selectedMenuItem : conversionDefaultOptions.selectedMenuItem,\r\n    selectedMetric: cardConfig && cardConfig.options && cardConfig.options.metric ?\r\n      cardConfig.options.metric : conversionDefaultOptions.metric,\r\n  };\r\n}\r\n\r\nfunction convertTopChangesOptions({\r\n  topChangesOrderBy,\r\n  getCardsConfig,\r\n  typeName,\r\n  permissions,\r\n  accountsMode = AccountsMode.Expert,\r\n  campaignType,\r\n}) {\r\n  const { selectedMetric, menuItem } = topChangesOrderBy || getTopChangesOptions({\r\n    getCardsConfig,\r\n    typeName,\r\n    permissions,\r\n    accountsMode,\r\n    campaignType,\r\n  });\r\n\r\n  const sortColumn = `PoPPerformanceMetricsChange/${selectedMetric}`;\r\n  const sortOption = TopChangesFilterSortOptionMap[menuItem];\r\n\r\n  return {\r\n    sortOption,\r\n    sortColumn,\r\n  };\r\n}\r\n\r\nfunction convertOverviewConversionsOptions({\r\n  conversionOrderBy,\r\n  getCardsConfig,\r\n}) {\r\n  const { selectedMetric, menuItem } = conversionOrderBy || getConversionOptions({\r\n    getCardsConfig,\r\n  });\r\n  const sortColumn = `PerformanceMetrics/${selectedMetric}`;\r\n  const sortOption = ConversionFilterSortOptionMap[menuItem];\r\n\r\n  return {\r\n    sortOption,\r\n    sortColumn,\r\n  };\r\n}\r\n\r\n\r\nfunction getGranularityForConsolidatedCalls({\r\n  dateRange,\r\n  dateUtil,\r\n  accountsMode = AccountsMode.Expert,\r\n}) {\r\n  let [PerformanceChartGranularity] = availableGranularities(dateRange, dateUtil, accountsMode);\r\n\r\n  if (!PerformanceChartGranularity) {\r\n    // If we have large discrepancy between time periods, we have no granularity.\r\n    // In this case, get granularity from  larger period.\r\n    const rangeDuration = dateUtil.diff(dateRange.start, dateRange.end, 'day');\r\n    const comparedDuration = dateUtil.diff(dateRange.compared.start, dateRange.compared.end, 'day');\r\n    const largerRange = {};\r\n    if (rangeDuration > comparedDuration) {\r\n      largerRange.start = dateRange.start;\r\n      largerRange.end = dateRange.end;\r\n    } else {\r\n      largerRange.start = dateRange.compared.start;\r\n      largerRange.end = dateRange.compared.end;\r\n    }\r\n    ([PerformanceChartGranularity] = availableGranularities(largerRange, dateUtil, accountsMode));\r\n  }\r\n\r\n  return PerformanceChartGranularity;\r\n}\r\n\r\nfunction getTilesFromConfigForConsolidatedCalls({ getCardsConfig }) {\r\n  const tiles = getCardsConfig().map((card) => {\r\n    switch (card.id) {\r\n      case 'CardType-TopAccounts':\r\n        return 'AllAccounts';\r\n      case 'CardType-TopCampaigns':\r\n        return 'AllCampaigns';\r\n      case 'CardType-Performance':\r\n        return 'Performance';\r\n      case 'CardType-TopChanges-Account':\r\n        return 'TopChangedAccounts';\r\n      case 'CardType-TopChanges-Campaign':\r\n        return 'TopChangedCampaigns';\r\n      case 'CardType-Conversion-Tracking':\r\n        return 'Conversions';\r\n      case 'CardType-Device':\r\n        return 'Device';\r\n      default:\r\n        return '';\r\n    }\r\n  });\r\n  return _.compact(tiles);\r\n}\r\n\r\n// TODO: [yaoyao][markel] check if we need to add campaignType here to handle metrics\r\n// getEntityGridOptions, convertTopChangesOptions can take a campaignType to decide metric\r\n// maybe we need a default value of 65535 to make it work in new customer level overview page?\r\nexport function fetchMCCOverview({\r\n  entitySet,\r\n  dateRange,\r\n  jsdata,\r\n  dateUtil,\r\n  allAccountsOrderBy,\r\n  topChangesOrderBy,\r\n  getCardsConfig,\r\n  tiles,\r\n  instrumentation,\r\n  constants,\r\n  AccountsOverviewPrefetchQuery,\r\n  isPreFetch,\r\n  permissions,\r\n  disableCache,\r\n  cacheManager,\r\n  accountsMode = AccountsMode.Expert,\r\n}) {\r\n  const typeName = entitySet.type.elementType.shortName;\r\n  const {\r\n    sortColumn: AllAccountsSortColumn,\r\n    sortDirection: AllAccountsSortDirection,\r\n  } = getEntityGridOptions({\r\n    allAccountsOrderBy,\r\n    getCardsConfig,\r\n    dateRange,\r\n    permissions,\r\n    typeName,\r\n  });\r\n  const HasGlobalComparisonPeriod = !!dateRange.compared &&\r\n    _.isDate(dateRange.compared.start) &&\r\n    _.isDate(dateRange.compared.end);\r\n  const comparisonDateRange = getComparisonDateRange(dateRange);\r\n  const PerformanceChartGranularity = getGranularityForConsolidatedCalls({\r\n    dateRange,\r\n    dateUtil,\r\n    accountsMode,\r\n  });\r\n  const {\r\n    sortOption: TopChangedAccountsSortOption,\r\n    sortColumn: TopChangedAccountsSortColumn,\r\n  } = convertTopChangesOptions({\r\n    topChangesOrderBy,\r\n    getCardsConfig,\r\n    typeName,\r\n    permissions,\r\n    accountsMode,\r\n  });\r\n  const Tiles = tiles || getTilesFromConfigForConsolidatedCalls({ getCardsConfig });\r\n\r\n  if (_.size(Tiles) === 0) {\r\n    return null;\r\n  }\r\n\r\n  const allMetricsJoined = allMetrics(permissions, accountsMode).join(',');\r\n  const popMetrics = ',PeriodPerformanceMetrics,PerformanceMetricsChange,PerformanceMetricsChangePercentage';\r\n  const expand = [];\r\n  const select = [\r\n    // eslint-disable-next-line prefer-template\r\n    `AccountsHaveDifferentCurrencies,OverallTotals($select=PerformanceMetrics($select=${allMetricsJoined})` + (\r\n      HasGlobalComparisonPeriod ? (`,PeriodPerformanceMetrics($select=${allMetricsJoined})` +\r\n        `,PerformanceMetricsChange($select=${allMetricsJoined})` +\r\n        `,PerformanceMetricsChangePercentage($select=${allMetricsJoined}))`)\r\n        : ')'\r\n    ),\r\n  ];\r\n  const segmentSelect = 'SegmentedData($select=Key,Data)';\r\n  _.each(Tiles, (tile) => {\r\n    switch (tile) {\r\n      case 'AllAccounts':\r\n        expand.push(`AllAccounts($select=Id,AccountInactiveReasons,Currency,Name,PerformanceMetrics($select=${allMetricsJoined})${HasGlobalComparisonPeriod ? popMetrics : ''})`);\r\n        break;\r\n      case 'Performance':\r\n        expand.push('PerformanceTimeSeries');\r\n        break;\r\n      case 'TopChangedAccounts':\r\n        expand.push('TopChangedAccounts($select=Id,AccountInactiveReasons,Currency,Name,' +\r\n          `AvailableInsightTypeIds,PerformanceMetrics($select=${allMetricsJoined})${popMetrics})`);\r\n        break;\r\n      case 'Device':\r\n        // eslint-disable-next-line prefer-template\r\n        select.push(`DeviceSegmentedPerformanceData($select=PerformanceMetrics($select=${segmentSelect})` + (\r\n          HasGlobalComparisonPeriod ?\r\n            (`,PeriodPerformanceMetrics($select=${segmentSelect})` +\r\n              `,PerformanceMetricsChange($select=${segmentSelect})` +\r\n              `,PerformanceMetricsChangePercentage($select=${segmentSelect}))`)\r\n            : ')'));\r\n        break;\r\n      default:\r\n    }\r\n  });\r\n\r\n  const multiAccountOverviewParameters = {\r\n    DateRange: {\r\n      StartDate: formatDate(dateRange.start, dateUtil),\r\n      EndDate: formatDate(dateRange.end, dateUtil),\r\n    },\r\n    ComparisonDateRange: comparisonDateRange ? {\r\n      StartDate: formatDate(comparisonDateRange.start, dateUtil),\r\n      EndDate: formatDate(comparisonDateRange.end, dateUtil),\r\n    } : null,\r\n    Tiles,\r\n    Metrics: allMetricsJoined,\r\n    HasGlobalComparisonPeriod,\r\n    AllAccountsSortColumn,\r\n    AllAccountsSortDirection,\r\n    TopChangedAccountsSortOption,\r\n    TopChangedAccountsSortColumn,\r\n    FetchFluctuationInsights: accountsMode === AccountsMode.Expert,\r\n  };\r\n\r\n  if (PerformanceChartGranularity) {\r\n    _.extend(multiAccountOverviewParameters, { PerformanceChartGranularity });\r\n  }\r\n\r\n  const callParams = {\r\n    multiAccountOverviewParameters,\r\n  };\r\n  const accountModes = [accountsMode === AccountsMode.Expert ? 'Expert' : 'Smart'];\r\n\r\n  if (permissions.dynamic.UnifiedProductPhase2) {\r\n    _.extend(callParams, {\r\n      accountModes,\r\n    });\r\n  }\r\n\r\n  const query = {\r\n    entitySet: entitySet['Default.MultiAccountOverview'].$call(callParams).toJSON(),\r\n  };\r\n\r\n  if (!_.isEmpty(expand)) {\r\n    _.extend(query, {\r\n      $expand: expand.join(','),\r\n    });\r\n  }\r\n\r\n  if (!_.isEmpty(select)) {\r\n    _.extend(query, {\r\n      $select: select.join(','),\r\n    });\r\n  }\r\n\r\n  if (disableCache) {\r\n    cacheManager.invalidate(entitySet.type.elementType.shortName);\r\n  }\r\n\r\n  // Add log for debugging\r\n  if (isPreFetch) {\r\n    PageReady.afterPageReady().then(() => {\r\n      try {\r\n        const postBody = JSON.parse(JSON.parse(AccountsOverviewPrefetchQuery).PostBody);\r\n        const serverPreloadParams = postBody.multiAccountOverviewParameters;\r\n\r\n        if (!_.isEqual(_.omit(serverPreloadParams, 'IsPreload'), multiAccountOverviewParameters)) {\r\n          instrumentation.logMessage(\r\n            [constants.LOGCATEGORY.TRACE],\r\n            constants.LOGLEVEL.INFO,\r\n            'MccOverview PreFetch',\r\n            `${AccountsOverviewPrefetchQuery} : ${JSON.stringify(multiAccountOverviewParameters)}`\r\n          );\r\n        }\r\n\r\n        const serverAccountModes = postBody.accountModes;\r\n\r\n        if (!_.isEqual(serverAccountModes, accountModes)) {\r\n          instrumentation.logMessage(\r\n            [constants.LOGCATEGORY.TRACE],\r\n            constants.LOGLEVEL.INFO,\r\n            'MccOverview PreFetch',\r\n            `${JSON.stringify(serverAccountModes)} : ${JSON.stringify(accountsMode)}`\r\n          );\r\n        }\r\n        // eslint-disable-next-line no-empty\r\n      } catch (e) {\r\n        instrumentation.logMessage(\r\n          [constants.LOGCATEGORY.TRACE],\r\n          constants.LOGLEVEL.INFO,\r\n          'MccOverview PreFetch',\r\n          `${AccountsOverviewPrefetchQuery} ${e.stack}`\r\n        );\r\n      }\r\n    });\r\n  }\r\n\r\n  return jsdata[entitySet.type.elementType.shortName].findAll({\r\n    query,\r\n  });\r\n}\r\n\r\nexport function fetchCampaignOverview({\r\n  entitySet,\r\n  dateRange,\r\n  jsdata,\r\n  dateUtil,\r\n  allCampaignsOrderBy,\r\n  topChangesOrderBy,\r\n  conversionOrderBy,\r\n  getCardsConfig,\r\n  tiles,\r\n  permissions,\r\n  filter,\r\n  disableCache,\r\n  cacheManager,\r\n  campaignType,\r\n}) {\r\n  const typeName = entitySet.type.elementType.shortName;\r\n  const {\r\n    sortColumn: AllCampaignsSortColumn,\r\n    sortDirection: AllCampaignsSortDirection,\r\n  } = getEntityGridOptions({\r\n    orderBy: allCampaignsOrderBy,\r\n    getCardsConfig,\r\n    dateRange,\r\n    permissions,\r\n    typeName,\r\n    campaignType,\r\n  });\r\n  const HasGlobalComparisonPeriod = !!dateRange.compared &&\r\n    _.isDate(dateRange.compared.start) &&\r\n    _.isDate(dateRange.compared.end);\r\n  const comparisonDateRange = getComparisonDateRange(dateRange);\r\n  const PerformanceChartGranularity = getGranularityForConsolidatedCalls({\r\n    dateRange,\r\n    dateUtil,\r\n  });\r\n  const {\r\n    sortOption: TopChangedCampaignsSortOption,\r\n    sortColumn: TopChangedCampaignsSortColumn,\r\n  } = convertTopChangesOptions({\r\n    topChangesOrderBy,\r\n    getCardsConfig,\r\n    typeName,\r\n    permissions,\r\n    campaignType,\r\n  });\r\n\r\n  const {\r\n    sortOption: OverviewConversionsSortOption,\r\n    sortColumn: OverviewConversionsSortColumn,\r\n  } = convertOverviewConversionsOptions({\r\n    conversionOrderBy,\r\n    getCardsConfig,\r\n  });\r\n  const Tiles = tiles || getTilesFromConfigForConsolidatedCalls({ getCardsConfig });\r\n\r\n  if (_.size(Tiles) === 0) {\r\n    return null;\r\n  }\r\n\r\n  const mergedFilter = getMergedFilter({\r\n    filter, typeName,\r\n  });\r\n  const filters = mergedFilter ? mergedFilter.odataV4() : undefined;\r\n\r\n  const allMetricsJoined = allMetrics(permissions, AccountsMode.Expert, campaignType).join(',');\r\n  const popMetrics = ',PeriodPerformanceMetrics,PerformanceMetricsChange,PerformanceMetricsChangePercentage';\r\n  const expand = [];\r\n  const select = [\r\n    // eslint-disable-next-line prefer-template\r\n    `OverallTotals($select=PerformanceMetrics($select=${allMetricsJoined})` + (\r\n      HasGlobalComparisonPeriod ? (`,PeriodPerformanceMetrics($select=${allMetricsJoined})` +\r\n        `,PerformanceMetricsChange($select=${allMetricsJoined})` +\r\n        `,PerformanceMetricsChangePercentage($select=${allMetricsJoined}))`)\r\n        : ')'\r\n    ),\r\n  ];\r\n  const segmentSelect = 'SegmentedData($select=Key,Data)';\r\n  _.each(Tiles, (tile) => {\r\n    switch (tile) {\r\n      case 'AllCampaigns':\r\n        expand.push(`AllCampaigns($select=Name,Status,Id,ExperimentId,CampaignType,PerformanceMetrics($select=${allMetricsJoined})${HasGlobalComparisonPeriod ? popMetrics : ''})`);\r\n        break;\r\n      case 'Performance':\r\n        expand.push('PerformanceTimeSeries');\r\n        break;\r\n      case 'TopChangedCampaigns':\r\n        expand.push('TopChangedCampaigns($select=ExperimentId,CampaignType,Name,Status,Id,' +\r\n          `AvailableInsightTypeIds,PerformanceMetrics($select=${allMetricsJoined})${popMetrics})`);\r\n        break;\r\n      case 'Conversions':\r\n        select.push('ConversionTileResult($select=NoConversionGoalsExist,NoConversionGoalsWithRevenue,ConversionGoalTrackingStatusSummaries,' +\r\n          'ConversionGoalCategoryResults)');\r\n        break;\r\n      case 'Device':\r\n        // eslint-disable-next-line prefer-template\r\n        select.push(`DeviceSegmentedPerformanceData($select=PerformanceMetrics($select=${segmentSelect})` + (\r\n          HasGlobalComparisonPeriod ?\r\n            (`,PeriodPerformanceMetrics($select=${segmentSelect})` +\r\n              `,PerformanceMetricsChange($select=${segmentSelect})` +\r\n              `,PerformanceMetricsChangePercentage($select=${segmentSelect}))`)\r\n            : ')'));\r\n        break;\r\n      default:\r\n    }\r\n  });\r\n\r\n  const campaignOverviewParameters = {\r\n    DateRange: {\r\n      StartDate: formatDate(dateRange.start, dateUtil),\r\n      EndDate: formatDate(dateRange.end, dateUtil),\r\n    },\r\n    ComparisonDateRange: comparisonDateRange ? {\r\n      StartDate: formatDate(comparisonDateRange.start, dateUtil),\r\n      EndDate: formatDate(comparisonDateRange.end, dateUtil),\r\n    } : null,\r\n    Tiles,\r\n    Metrics: allMetricsJoined,\r\n    HasGlobalComparisonPeriod,\r\n    AllCampaignsSortColumn,\r\n    AllCampaignsSortDirection,\r\n    TopChangedCampaignsSortOption,\r\n    TopChangedCampaignsSortColumn,\r\n    OverviewConversionsSortColumn,\r\n    OverviewConversionsSortOption,\r\n    FetchFluctuationInsights: true,\r\n  };\r\n\r\n  if (PerformanceChartGranularity) {\r\n    _.extend(campaignOverviewParameters, { PerformanceChartGranularity });\r\n  }\r\n\r\n  const callParams = {\r\n    campaignOverviewParameters,\r\n  };\r\n\r\n  const query = {\r\n    entitySet: entitySet['Default.CampaignOverview'].$call(callParams).toJSON(),\r\n  };\r\n\r\n  if (!_.isEmpty(expand)) {\r\n    _.extend(query, {\r\n      $expand: expand.join(','),\r\n    });\r\n  }\r\n\r\n  if (!_.isEmpty(select)) {\r\n    _.extend(query, {\r\n      $select: select.join(','),\r\n    });\r\n  }\r\n\r\n  if (filters) {\r\n    _.extend(query, {\r\n      $filter: filters,\r\n    });\r\n  }\r\n\r\n  _.extend(query, {\r\n    $top: 10,\r\n  });\r\n\r\n  if (disableCache) {\r\n    cacheManager.invalidate(entitySet.type.elementType.shortName);\r\n  }\r\n\r\n  return jsdata[entitySet.type.elementType.shortName].findAll({\r\n    query,\r\n  });\r\n}\r\n\r\nexport function fetchCombinedPerformanceTimeSeries({\r\n  entitySet,\r\n  dateRange,\r\n  jsdata,\r\n  dateUtil,\r\n  getCardsConfig,\r\n  fetchSingleTile,\r\n  filter,\r\n  permissions,\r\n  accountsMode,\r\n  campaignType,\r\n}) {\r\n  const typeName = entitySet.type.elementType.shortName;\r\n\r\n  if (typeName === 'Account') {\r\n    return fetchMCCOverview({\r\n      entitySet,\r\n      dateRange,\r\n      jsdata,\r\n      dateUtil,\r\n      getCardsConfig,\r\n      permissions,\r\n      accountsMode,\r\n      tiles: fetchSingleTile ? ['Performance'] : undefined,\r\n    }).then((data) => {\r\n      if (!_.isEmpty(data.errors)) {\r\n        return data;\r\n      }\r\n\r\n      return {\r\n        performanceTimeSeries: data.PerformanceTimeSeries,\r\n        hideCurrency: data.AccountsHaveDifferentCurrencies,\r\n      };\r\n    });\r\n  }\r\n\r\n  return fetchCampaignOverview({\r\n    entitySet,\r\n    dateRange,\r\n    jsdata,\r\n    dateUtil,\r\n    getCardsConfig,\r\n    filter,\r\n    permissions,\r\n    tiles: fetchSingleTile ? ['Performance'] : undefined,\r\n    campaignType,\r\n  }).then((data) => {\r\n    if (!_.isEmpty(data.errors)) {\r\n      return data;\r\n    }\r\n\r\n    return {\r\n      performanceTimeSeries: data.PerformanceTimeSeries,\r\n    };\r\n  });\r\n}\r\n\r\nexport function fetchEntityGridCombined({\r\n  entitySet,\r\n  dateRange,\r\n  jsdata,\r\n  dateUtil,\r\n  getCardsConfig,\r\n  orderBy,\r\n  fetchSingleTile,\r\n  permissions,\r\n  filter,\r\n  accountsMode = AccountsMode.Expert,\r\n  campaignType,\r\n}) {\r\n  const typeName = entitySet.type.elementType.shortName;\r\n\r\n  if (typeName === 'Account') {\r\n    return fetchMCCOverview({\r\n      entitySet,\r\n      dateRange,\r\n      jsdata,\r\n      dateUtil,\r\n      allAccountsOrderBy: orderBy,\r\n      getCardsConfig,\r\n      tiles: fetchSingleTile ? ['AllAccounts'] : undefined,\r\n      permissions,\r\n      accountsMode,\r\n    }).then((data) => {\r\n      if (!_.isEmpty(data.errors)) {\r\n        return data;\r\n      }\r\n      return data.AllAccounts;\r\n    });\r\n  }\r\n\r\n  return fetchCampaignOverview({\r\n    entitySet,\r\n    dateRange,\r\n    jsdata,\r\n    dateUtil,\r\n    allCampaignsOrderBy: orderBy,\r\n    getCardsConfig,\r\n    tiles: fetchSingleTile ? ['AllCampaigns'] : undefined,\r\n    filter,\r\n    permissions,\r\n    campaignType,\r\n  }).then((data) => {\r\n    if (!_.isEmpty(data.errors)) {\r\n      return data;\r\n    }\r\n    return data.AllCampaigns;\r\n  });\r\n}\r\n\r\nconst originalFetchTopChanges = ({\r\n  entitySet,\r\n  dateRange,\r\n  filter,\r\n  comparisonDateRange,\r\n  selectedMenuItem,\r\n  metric,\r\n  jsdata,\r\n  dateUtil,\r\n  getCardsConfig,\r\n  fetchSingleTile,\r\n  permissions,\r\n  disableCache,\r\n  cacheManager,\r\n  accountsMode,\r\n  campaignType,\r\n}) => {\r\n  const typeName = entitySet.type.elementType.shortName;\r\n  const { menuItem, selectedMetric } = getTopChangesOptions({\r\n    getCardsConfig,\r\n    typeName,\r\n    selectedMenuItem,\r\n    metric,\r\n    permissions,\r\n    campaignType,\r\n  });\r\n\r\n  if (typeName === 'Account') {\r\n    return fetchMCCOverview({\r\n      entitySet,\r\n      dateRange,\r\n      jsdata,\r\n      dateUtil,\r\n      getCardsConfig,\r\n      tiles: fetchSingleTile ? ['TopChangedAccounts'] : undefined,\r\n      topChangesOrderBy: {\r\n        menuItem,\r\n        selectedMetric,\r\n      },\r\n      permissions,\r\n      disableCache,\r\n      cacheManager,\r\n      accountsMode,\r\n    }).then((data) => {\r\n      if (!_.isEmpty(data.errors)) {\r\n        return data;\r\n      }\r\n      return data.TopChangedAccounts;\r\n    });\r\n  }\r\n\r\n  if (typeName === 'Campaign') {\r\n    return fetchCampaignOverview({\r\n      entitySet,\r\n      dateRange,\r\n      jsdata,\r\n      dateUtil,\r\n      getCardsConfig,\r\n      tiles: fetchSingleTile ? ['TopChangedCampaigns'] : undefined,\r\n      topChangesOrderBy: {\r\n        menuItem,\r\n        selectedMetric,\r\n      },\r\n      filter,\r\n      permissions,\r\n      disableCache,\r\n      cacheManager,\r\n      campaignType,\r\n    }).then((data) => {\r\n      if (!_.isEmpty(data.errors)) {\r\n        return data;\r\n      }\r\n      return data.TopChangedCampaigns;\r\n    });\r\n  }\r\n\r\n  const order = menuItem === TopChangesFilterOption.TopDecliners ? 'ASC' : 'DESC';\r\n  const popOrderByMetric =\r\n    menuItem === TopChangesFilterOption.AllChanges || menuItem === TopChangesFilterOption.Insights\r\n      ? 'PoPPerformanceMetricsAbsoluteChange' : 'PoPPerformanceMetricsChange';\r\n  const orderBy = [[`${popOrderByMetric}/${selectedMetric}`, order]];\r\n  let expand;\r\n  let select = `Name,Status,Id,PerformanceMetricsChange,PeriodPerformanceMetrics,PerformanceMetricsChangePercentage,${metricSelect(permissions, accountsMode, campaignType)}`;\r\n\r\n  if (typeName === 'Campaign') {\r\n    select = `ExperimentId,CampaignType,AvailableInsightTypeIds,${select}`;\r\n  } else if (typeName === 'AdGroup') {\r\n    expand = 'Campaign($select=ExperimentId)';\r\n  }\r\n\r\n  return fetch({\r\n    entitySet,\r\n    dateRange,\r\n    filter,\r\n    comparisonDateRange: comparisonDateRange || getComparisonDateRange(dateRange),\r\n    top,\r\n    orderBy,\r\n    select,\r\n    expand,\r\n    jsdata,\r\n    dateUtil,\r\n    metric,\r\n    selectedMenuItem,\r\n    disableCache,\r\n    cacheManager,\r\n    permissions,\r\n  });\r\n};\r\n\r\nexport const fetchTopChanges = withDFMCache(originalFetchTopChanges, args => args.dfmCacheKey);\r\n\r\nconst originalFetchAggregatedData = ({\r\n  entitySet,\r\n  dateRange,\r\n  filter,\r\n  jsdata,\r\n  dateUtil,\r\n  navigationLevel,\r\n  getCardsConfig,\r\n  fetchSingleTile,\r\n  isDevice,\r\n  permissions,\r\n  accountsMode,\r\n  segmentationTypes,\r\n  campaignType,\r\n}) => {\r\n  if (navigationLevel === 'customer') {\r\n    let tiles;\r\n\r\n    if (fetchSingleTile) {\r\n      tiles = isDevice ? ['Device'] : ['Performance'];\r\n    }\r\n    return fetchMCCOverview({\r\n      entitySet,\r\n      dateRange,\r\n      jsdata,\r\n      dateUtil,\r\n      getCardsConfig,\r\n      tiles,\r\n      permissions,\r\n      accountsMode,\r\n    });\r\n  }\r\n\r\n  // fetchCampaignOverview is only for all campaigns,\r\n  // if there is a filter on CampaignId (e.g. PMax campaign overview), call fetchGridData with the filter\r\n  if (navigationLevel === 'account' && !_.any(filter, f => _.result(f, ['filter', 'key']) === 'CampaignId')) {\r\n    let tiles;\r\n\r\n    if (fetchSingleTile) {\r\n      tiles = isDevice ? ['Device'] : ['Performance'];\r\n    }\r\n    return fetchCampaignOverview({\r\n      entitySet,\r\n      dateRange,\r\n      jsdata,\r\n      dateUtil,\r\n      getCardsConfig,\r\n      tiles,\r\n      filter,\r\n      permissions,\r\n      campaignType,\r\n    });\r\n  }\r\n\r\n  const cardConfig = _.find(getCardsConfig(), (card) => {\r\n    if (navigationLevel === 'account') {\r\n      return card.id === 'CardType-TopCampaigns';\r\n    }\r\n    return card.id === 'CardType-TopAdGroup';\r\n  });\r\n\r\n  const typeName = entitySet.type.elementType.shortName;\r\n\r\n  return fetchGridData({\r\n    entitySet,\r\n    dateRange,\r\n    filter,\r\n    options: cardConfig ? cardConfig.options : undefined,\r\n    segmentationTypes: segmentationTypes || gridCardConfig.segmentationTypes(typeName),\r\n    jsdata,\r\n    dateUtil,\r\n    permissions,\r\n    getCardsConfig,\r\n    campaignType,\r\n  });\r\n};\r\n\r\nexport const fetchAggregatedData =\r\n  withDFMCache(originalFetchAggregatedData, args => args.dfmCacheKey);\r\n\r\nconst originalFetchConversions = ({\r\n  entitySet,\r\n  dateRange,\r\n  filter,\r\n  selectedMenuItem,\r\n  metric,\r\n  jsdata,\r\n  dateUtil,\r\n  getCardsConfig,\r\n  permissions,\r\n  disableCache,\r\n  cacheManager,\r\n  fetchSingleTile,\r\n  campaignType,\r\n}) => {\r\n  const typeName = entitySet.type.elementType.shortName;\r\n  const { menuItem, selectedMetric } = getConversionOptions({\r\n    getCardsConfig,\r\n    typeName,\r\n    selectedMenuItem,\r\n    metric,\r\n    permissions,\r\n  });\r\n\r\n  return fetchCampaignOverview({\r\n    entitySet,\r\n    dateRange,\r\n    jsdata,\r\n    dateUtil,\r\n    getCardsConfig,\r\n    tiles: fetchSingleTile ? ['Conversions'] : undefined,\r\n    conversionOrderBy: {\r\n      menuItem,\r\n      selectedMetric,\r\n    },\r\n    filter,\r\n    permissions,\r\n    disableCache,\r\n    cacheManager,\r\n    campaignType,\r\n  }).then((data) => {\r\n    if (!_.isEmpty(data.errors)) {\r\n      return data;\r\n    }\r\n    return data.ConversionTileResult;\r\n  });\r\n};\r\n\r\nexport const fetchConversionTracking =\r\n  withDFMCache(originalFetchConversions, args => args.dfmCacheKey);\r\n","import _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport state from '@bingads-webui-component-legacy/state/index';\r\nimport { Constants as CCUIConstants } from '@bingads-webui-clientcenter/entity-utils';\r\n\r\n// TODO: there is an issue with import { FAC_FEATURE_ID } from '@bingads-webui-campaign/recommendation-core';\r\n// hard code FAC_FEATURE_ID.CONVERSION_TRACKING for now\r\nconst FAC_FEATUREID = 208;\r\nconst FAC_STATUS_NOT_IN_PROGRESS = CCUIConstants.RecommendationAdoptionStatus.NotInProgess;\r\nconst FAC_STATUS_ACTIVE = CCUIConstants.RecommendationAdoptionStatus.Active;\r\nlet p$Coupons = null;\r\n\r\nexport function fetchCoupons({\r\n  ccJsData,\r\n}) {\r\n  if (p$Coupons) {\r\n    return p$Coupons;\r\n  }\r\n  const accountId = state.get('account_id');\r\n\r\n  p$Coupons = new Promise((resolve) => {\r\n    if (accountId) {\r\n      // if call fails, eat the error to avoid blocking workflow\r\n      resolve(ccJsData.FeatureAdoptionCoupon\r\n        .findAll({ aid: accountId })\r\n        .then(coupons => _.filter(\r\n          coupons,\r\n          ({ Status, FeatureId }) => FeatureId === FAC_FEATUREID && (Status === FAC_STATUS_NOT_IN_PROGRESS || Status === FAC_STATUS_ACTIVE)\r\n        ))\r\n        .catch(() => []));\r\n    }\r\n    resolve([]);\r\n  });\r\n\r\n  return p$Coupons;\r\n}\r\n\r\nexport function clearCouponsCache() {\r\n  p$Coupons = null;\r\n}\r\n","/* eslint-disable indent */\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\nimport { withDFMCache } from '@bingads-webui/dfm-cache';\r\nimport { edmCampaign } from '@bingads-webui/edm-campaign';\r\n\r\nimport { formatDate } from './util';\r\n\r\nexport const locationGranularity = {\r\n  country: {\r\n    name: 'CountryName',\r\n    longitude: 'CountryLongitude',\r\n    latitude: 'CountryLatitude',\r\n  },\r\n  county: {\r\n    name: 'CountyName',\r\n    longitude: 'CountyLongitude',\r\n    latitude: 'CountyLatitude',\r\n  },\r\n  stateOrProvince: {\r\n    name: 'StateOrProvince',\r\n    longitude: 'SubGeographyLongitude',\r\n    latitude: 'SubGeographyLatitude',\r\n  },\r\n  city: {\r\n    name: 'City',\r\n    longitude: 'CityLongitude',\r\n    latitude: 'CityLatitude',\r\n  },\r\n  postalCode: {\r\n    name: 'PostalCode',\r\n    longitude: 'PostalCodeLongitude',\r\n    latitude: 'PostalCodeLatitude',\r\n  },\r\n};\r\n\r\nfunction mapMetric(metric) {\r\n  let mappedMetric = metric;\r\n\r\n  switch (metric) {\r\n    case 'TopImpressionRate':\r\n      mappedMetric = 'TopImpressionRatePercent';\r\n      break;\r\n    case 'AbsoluteTopImpressionRate':\r\n      mappedMetric = 'AbsoluteTopImpressionRatePercent';\r\n      break;\r\n    default:\r\n      break;\r\n  }\r\n  return mappedMetric;\r\n}\r\n\r\nfunction fetch({\r\n  cid, aid, campaignId, dateRange, metric, level,\r\n}) {\r\n  return edmCampaign\r\n    .Customers.$withKey(cid)\r\n    .Accounts.$withKey(aid)\r\n    .Campaigns.$withKey(campaignId)['Default.DimensionReport']\r\n    .$makeCall({\r\n      functionParams: {\r\n        Locale: config.get('CultureLcid'),\r\n        ReportType: 'Enum.DimensionReportType\\'Geographic\\'',\r\n      },\r\n      query: {\r\n        count: true,\r\n        skip: 0,\r\n        top: 15,\r\n        orderby: {\r\n          [mapMetric(metric)]: '-1',\r\n        },\r\n        select: [level.name, level.longitude, level.latitude, metric],\r\n        startDate: formatDate(dateRange.start),\r\n        endDate: formatDate(dateRange.end),\r\n      },\r\n    })\r\n    .toPromise();\r\n}\r\n\r\nexport const fetchCountryData = withDFMCache(({\r\n  cid, aid, campaignId, dateRange, metric,\r\n}) => fetch({\r\n  cid,\r\n  aid,\r\n  campaignId,\r\n  dateRange,\r\n  metric,\r\n  level: locationGranularity.country,\r\n}), 'CardType-TopLocations-country-data');\r\n\r\nexport const fetchStateOrProvinceData = withDFMCache(({\r\n  cid, aid, campaignId, dateRange, metric,\r\n}) => fetch({\r\n  cid,\r\n  aid,\r\n  campaignId,\r\n  dateRange,\r\n  metric,\r\n  level: locationGranularity.stateOrProvince,\r\n}), 'CardType-TopLocations-state-or-province-data');\r\n\r\nexport const fetchCountyData = withDFMCache(({\r\n  cid, aid, campaignId, dateRange, metric,\r\n}) => fetch({\r\n  cid,\r\n  aid,\r\n  campaignId,\r\n  dateRange,\r\n  metric,\r\n  level: locationGranularity.county,\r\n}), 'CardType-TopLocations-county-data');\r\n\r\nexport const fetchCityData = withDFMCache(({\r\n  cid, aid, campaignId, dateRange, metric,\r\n}) => fetch({\r\n  cid,\r\n  aid,\r\n  campaignId,\r\n  dateRange,\r\n  metric,\r\n  level: locationGranularity.city,\r\n}), 'CardType-TopLocations-city-data');\r\n\r\nexport const fetchPostalCodeData = withDFMCache(({\r\n  cid, aid, campaignId, dateRange, metric,\r\n}) => fetch({\r\n  cid,\r\n  aid,\r\n  campaignId,\r\n  dateRange,\r\n  metric,\r\n  level: locationGranularity.postalCode,\r\n}), 'CardType-TopLocations-postal-code-data');\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { ReactTemplate } from '@bingads-webui-react/react-template';\r\n\r\nexport const BoldSyntax = props =>\r\n  (<ReactTemplate\r\n    model={{\r\n            b: text => (<b>{text}</b>),\r\n          }}\r\n    template={props.template}\r\n  />);\r\n\r\nBoldSyntax.propTypes = {\r\n  template: PropTypes.string.isRequired,\r\n};\r\n\r\n","export const StringsMapping = {\r\n  All_Change: _TL_('All changes'),\r\n  Top_Decliners: _TL_('Top decliners'),\r\n  Top_Gainers: _TL_('Top gainers'),\r\n  EmptyState_Title: _TL_('Track your conversions'),\r\n  EmptyState_Subtitle: _TL_('Visit the conversion tracking and UET dashboard pages to start creating conversion goals that will track your conversions and revenue.'),\r\n  EmptyState_Action: _TL_('Set up conversion tracking'),\r\n\r\n  Footer_ManageConversions: _TL_('Manage Conversion Goals'),\r\n  Footer_PageCount: _TL_('Page {{pageNumber}} of 2', 'text in {{}} must NOT be translated'),\r\n\r\n  Status_Title: _TL_('You have conversion tracking status errors that need to be fixed'),\r\n  Status_Subtitle: _TL_('Visit the Conversion goals page to identify issues with your goals to get them back on track.'),\r\n  Status_Alert: _TL_('Alert'),\r\n  Status_RecentConversions: _TL_(' with no recent conversions', 'preserve one space at the beginning'),\r\n  Status_RecordingConversions: _TL_(' with revenue attribute set', 'preserve one space at the beginning'),\r\n  Status_Inactive: _TL_(' with inactive tags', 'preserve one space at the beginning'),\r\n  Status_Unverified: _TL_(' with unverified tags', 'preserve one space at the beginning'),\r\n  Status_Unavailable: _TL_(' with inactive due to unavailable tags', 'preserve one space at the beginning'),\r\n\r\n  Coupon_Title: _TL_('Get {{value}} when you set up a conversion goal.'),\r\n\r\n  Coupon_Step1: _TL_('{{b}}Step 1{{/b}}: Set up a conversion goal', 'text in between {{b}} {{/b}} is bolded'),\r\n  Coupon_Step2: _TL_('{{b}}Step 2{{/b}}: ', 'text in between {{b}} {{/b}} is bolded'),\r\n  Coupon_Step2_Detail: _TL_('Spend {{cost}} on your campaigns and you’ll automatically receive {{value}} in advertising credit.', 'text in {{}} must NOT be translated'),\r\n\r\n  Number_Of_Goals: _TL_('{{number}} goals', 'text in {{}} must NOT be translated'),\r\n\r\n  StatusMessage_InactiveDueToTagUnavailable: _TL_('The account no longer has access to the UET tag. Permissions to a UET tag in another manager account may have been removed, or this account was transferred and lost permission to a UET tag in a previous manager account.'),\r\n  StatusMessage_NoRecentConversion: _TL_(\"We've seen your UET tag, but haven't recorded any conversions in the last 7 days. This is most likely because you either have created the goal incorrectly, have not tagged your entire website, especially the pages that have the conversion action or you don't have any users converting on your site.\"),\r\n  StatusMessage_RecordingConversions: _TL_(\"We've seen your UET tag and have recorded conversions within the last 7 days. If your conversion window is greater than 7 days and you are filtering on the last 7 days, you may see this status even if no conversions are shown in the Conversions column, as conversions are reported at the time of the click.\"),\r\n  StatusMessage_TagInactive: _TL_(\"We haven't received any user activity data from your UET tag in the last 24 hours. Make sure that the UET tag tracking code is still on your website.\"),\r\n  StatusMessage_Unverified: _TL_(\"We haven't received any user activity data from the UET tag on your website. It can take up to 24 hours for us to verify. If you still see this status, you either have not added the UET tag tracking code to your website or there is an issue with the setup that you need to fix.\"),\r\n\r\n\r\n  NoRecentConversion: _TL_('No recent conversions'),\r\n  RecordingConversions: _TL_('No revenue attribute sets'),\r\n  InactiveTag: _TL_('Inactive tags'),\r\n  UnverifiedTag: _TL_('Unverified tags'),\r\n  UnavailableTag: _TL_('Unavailable tags'),\r\n\r\n  NoReveueText: _TL_(\"None of your conversion goals are tracking revenue. This means that you haven't associated any specific revenue value to your goals. Tracking revenue is a great way of measuring the revenue gained from advertisers converting on your ad campaign.\"),\r\n  See_All: _TL_('See all'),\r\n  Learn_More: _TL_('Learn more'),\r\n\r\n  Hover_Change: _TL_('Change: {{value}} ({{percentageValue}})', 'text in {{}} must NOT be translated'),\r\n  Empty_Data: _TL_('{{b}}No data available.{{/b}} To update the tile, select a different date range. If the tile remains blank, your account might have no data.'),\r\n};\r\n\r\nexport const GoalCategory = {\r\n  AddToCart: _TL_('Add to cart'),\r\n  BeginCheckout: _TL_('Begin checkout'),\r\n  BookAppointment: _TL_('Book appointment'),\r\n  Contact: _TL_('Contact'),\r\n  GetDirections: _TL_('Get directions'),\r\n  InStoreVisit: _TL_('Store visit'),\r\n  None: _TL_('Unassigned'),\r\n  Other: _TL_('Other'),\r\n  OutboundClick: _TL_('Outbound click'),\r\n  PageView: _TL_('Page view'),\r\n  Purchase: _TL_('Purchase'),\r\n  RequestQuote: _TL_('Request quote'),\r\n  Signup: _TL_('Sign - up'),\r\n  Subcribe: _TL_('Subscribe'),\r\n  SubmitLeadForm: _TL_('Submit lead form'),\r\n};\r\n\r\nexport const metrici18nKeys = {\r\n  ConversionsCredit: _TL_('Conversions: {{value}}', 'text in {{}} must NOT be translated'),\r\n  AdvertiserReportedRevenue: _TL_('Revenue: {{value}}', 'text in {{}} must NOT be translated'),\r\n};\r\n","import React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { BoldSyntax } from '../../common/util';\r\nimport { StringsMapping } from '../../common/strings';\r\n\r\nfunction CouponSetup(props) {\r\n  const { newI18n, coupon } = props;\r\n\r\n  const { cost, value } = coupon;\r\n\r\n  const stepOneImgClass = 'coupon-step-one-image';\r\n  const stepTwoImgClass = 'coupon-step-two-image';\r\n  const couponText = useMemo(\r\n    () =>\r\n      newI18n.getString(StringsMapping.Coupon_Title, { value }),\r\n    [newI18n, value]\r\n  );\r\n\r\n  const stepOneText = useMemo(\r\n    () =>\r\n      newI18n.getString(StringsMapping.Coupon_Step1),\r\n    [newI18n]\r\n  );\r\n  const stepTwo = useMemo(\r\n    () =>\r\n      newI18n.getString(StringsMapping.Coupon_Step2),\r\n    [newI18n]\r\n  );\r\n\r\n  const stepTwoText = useMemo(\r\n    () =>\r\n      newI18n.getString(StringsMapping.Coupon_Step2_Detail, { cost, value }),\r\n    [cost, newI18n, value]\r\n  );\r\n\r\n\r\n  return (\r\n    <React.Fragment>\r\n      <div className=\"coupon-text\">{couponText}</div>\r\n      <div className=\"coupon-steps-container\">\r\n        <div className=\"first-step step\">\r\n          <div className=\"step-image-container\">\r\n            <div className={`step-image ${stepOneImgClass}`} />\r\n          </div>\r\n          <div className=\"step-text\">\r\n            <BoldSyntax template={stepOneText} />\r\n          </div>\r\n        </div>\r\n        <div className=\"second-step step\">\r\n          <div className=\"step-image-container\">\r\n            <div className={`step-image ${stepTwoImgClass}`} />\r\n          </div>\r\n          <div className=\"step-text\">\r\n            <BoldSyntax template={stepTwo} />\r\n            {stepTwoText}\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </React.Fragment>\r\n  );\r\n}\r\n\r\nCouponSetup.defaultProps = {\r\n};\r\n\r\nCouponSetup.propTypes = {\r\n  newI18n: PropTypes.shape({\r\n    getString: PropTypes.func.isRequired,\r\n  }).isRequired,\r\n  coupon: PropTypes.shape({\r\n    cost: PropTypes.string.isRequired,\r\n    value: PropTypes.string.isRequired,\r\n  }).isRequired,\r\n};\r\n\r\nexport default CouponSetup;\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { GetJsDataInfo } from '@bingads-webui-clientcenter/js-data-cc-rest-base';\r\nimport { formatCoupon } from '@bingads-webui-campaign/recommendation-core';\r\nimport { Button } from '@fluentui/react-components';\r\nimport { DefaultButton } from '@fluentui/react/lib/Button';\r\nimport { fetchCoupons, clearCouponsCache } from '@bingads-webui-campaign/overview-cards-common';\r\nimport CouponSetup from './conversion-setup/coupon-setup';\r\nimport { StringsMapping } from '../common/strings';\r\n\r\nfunction fetchCouponsMethod({\r\n  ccJsData,\r\n  currencyCode,\r\n  i18n,\r\n  setDataState,\r\n  instrumentationLog,\r\n  blockCard,\r\n  willFetchData,\r\n  renderedWithData,\r\n  unblockCard,\r\n}) {\r\n  blockCard();\r\n  willFetchData();\r\n\r\n  fetchCoupons({ ccJsData })\r\n    .finally(() => {\r\n      renderedWithData();\r\n      unblockCard();\r\n    }).then((coupons) => {\r\n      if (coupons.length > 0) {\r\n        const couponLocalized = formatCoupon({ i18n, coupon: coupons[0], currency: currencyCode });\r\n        setDataState({ isDataLoaded: true, couponLocalized });\r\n      } else {\r\n        setDataState({ isDataLoaded: true, couponLocalized: [] });\r\n      }\r\n    })\r\n    .catch((response) => {\r\n      instrumentationLog.Error(response.message);\r\n      setDataState({ isDataLoaded: true, couponLocalized: [] });\r\n    });\r\n}\r\n\r\nfunction useFetchCoupon(props) {\r\n  const {\r\n    pageContext,\r\n    i18n,\r\n    instrumentationLog,\r\n    blockCard,\r\n    willFetchData,\r\n    renderedWithData,\r\n    unblockCard,\r\n  } = props;\r\n\r\n  const ccJsData = useMemo(() => GetJsDataInfo({\r\n    cidFetcher: () => pageContext.CurrentCustomer.Id,\r\n    uidFetcher: () => pageContext.CurrentUser.Id,\r\n    willSupportCors: true,\r\n  }, pageContext.CCBaseUrl, ['FeatureAdoptionCoupon']).jsDataCcRest, [pageContext.CCBaseUrl, pageContext.CurrentCustomer.Id, pageContext.CurrentUser.Id]);\r\n\r\n  const { Id: accountId, CurrencyCode: currencyCode } = pageContext.CurrentAccount;\r\n  const [{ isDataLoaded, couponLocalized }, setDataState] = useState({ isDataLoaded: false, couponLocalized: null });\r\n\r\n  const fetchDate = useCallback(\r\n    () => {\r\n      fetchCouponsMethod({\r\n        ccJsData,\r\n        accountId,\r\n        currencyCode,\r\n        i18n,\r\n        instrumentationLog,\r\n        setDataState,\r\n        blockCard,\r\n        willFetchData,\r\n        renderedWithData,\r\n        unblockCard,\r\n      });\r\n    },\r\n    [ccJsData, accountId, currencyCode, i18n, instrumentationLog, blockCard, willFetchData, renderedWithData, unblockCard]\r\n  );\r\n\r\n  useEffect(() => {\r\n    fetchDate();\r\n    return clearCouponsCache;\r\n  }, [fetchDate]);\r\n\r\n  return { isDataLoaded, couponLocalized };\r\n}\r\n\r\nfunction EmptyState(props) {\r\n  const {\r\n    router,\r\n    pageContext,\r\n    instrumentationLog,\r\n    i18n,\r\n    newI18n,\r\n    permissions,\r\n    blockCard,\r\n    willFetchData,\r\n    renderedWithData,\r\n    unblockCard,\r\n  } = props;\r\n\r\n  const imgClass = 'conversion_tracking_setup_img';\r\n  const requiredPermission = permissions.dynamic.OverviewPageFluentV2 || permissions.dynamic.OverviewPageFluent2;\r\n\r\n  const titleString = useMemo(() =>\r\n    newI18n.getString(StringsMapping.EmptyState_Title), [newI18n]);\r\n  const subtitleString = useMemo(() =>\r\n    newI18n.getString(StringsMapping.EmptyState_Subtitle), [newI18n]);\r\n  const actionString = useMemo(() =>\r\n    newI18n.getString(StringsMapping.EmptyState_Action), [newI18n]);\r\n\r\n  const { isDataLoaded, couponLocalized } = useFetchCoupon({\r\n    pageContext,\r\n    i18n,\r\n    instrumentationLog,\r\n\r\n    blockCard,\r\n    willFetchData,\r\n    renderedWithData,\r\n    unblockCard,\r\n  });\r\n\r\n  const hasCoupons = useMemo(() => _.size(couponLocalized) > 0, [couponLocalized]);\r\n\r\n  const navigateToConversionGoals = useCallback(() => {\r\n    if (router) {\r\n      instrumentationLog.SetUpConversionClicked(hasCoupons);\r\n      router.navigateToRoute('conversiongoals');\r\n    }\r\n  }, [hasCoupons, instrumentationLog, router]);\r\n\r\n  const renderView = useCallback(() => {\r\n    if (isDataLoaded) {\r\n      if (hasCoupons) {\r\n        instrumentationLog.CouponIsShown();\r\n        return (<CouponSetup coupon={couponLocalized} newI18n={newI18n} />);\r\n      }\r\n      instrumentationLog.NoCoupon();\r\n    }\r\n    return (\r\n      <React.Fragment>\r\n        <div className=\"conversion-image-container\">\r\n          <div className={`conversion-image ${imgClass}`} />\r\n        </div>\r\n        <div className=\"title-text\">{titleString}</div>\r\n        <div className=\"subtitle-text\">{subtitleString}</div>\r\n      </React.Fragment>\r\n    );\r\n  }, [couponLocalized, hasCoupons, instrumentationLog, isDataLoaded, newI18n, subtitleString, titleString]);\r\n\r\n  return (\r\n    <div className=\"conversion-empty-state\">\r\n      {renderView()}\r\n      <div className=\"entity-links\">\r\n        {requiredPermission ? (\r\n          <Button onClick={navigateToConversionGoals}>{actionString}</Button>\r\n          ) : (\r\n            <DefaultButton onClick={navigateToConversionGoals} text={actionString} />\r\n          )}\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n\r\nEmptyState.defaultProps = {\r\n  router: {\r\n    navigateToRoute: _.noop,\r\n  },\r\n  instrumentationLog: {\r\n    SetUpConversionClicked: _.noop,\r\n    CouponIsShown: _.noop,\r\n    NoCoupon: _.noop,\r\n    Error: _.noop,\r\n  },\r\n  permissions: PropTypes.shape({\r\n    dynamic: PropTypes.shape({\r\n      OverviewPageFluentV2: false,\r\n    }),\r\n  }),\r\n  blockCard: _.noop,\r\n  willFetchData: _.noop,\r\n  renderedWithData: _.noop,\r\n  unblockCard: _.noop,\r\n};\r\n\r\nEmptyState.propTypes = {\r\n  newI18n: PropTypes.shape({\r\n    getString: PropTypes.func.isRequired,\r\n  }).isRequired,\r\n  i18n: PropTypes.shape({\r\n    getString: PropTypes.func.isRequired,\r\n  }).isRequired,\r\n  router: PropTypes.shape({\r\n    navigateToRoute: PropTypes.func,\r\n  }),\r\n  instrumentationLog: PropTypes.shape({\r\n    SetUpConversionClicked: PropTypes.func,\r\n    CouponIsShown: PropTypes.func,\r\n    NoCoupon: PropTypes.func,\r\n    Error: PropTypes.func,\r\n  }),\r\n  pageContext: PropTypes.shape({\r\n    CurrentCustomer: PropTypes.shape({\r\n      Id: PropTypes.number.isRequired,\r\n    }).isRequired,\r\n    CurrentUser: PropTypes.shape({\r\n      Id: PropTypes.number.isRequired,\r\n      CurrencyCode: PropTypes.string.isRequired,\r\n    }).isRequired,\r\n    CurrentAccount: PropTypes.shape({\r\n      Id: PropTypes.number.isRequired,\r\n      CurrencyCode: PropTypes.string.isRequired,\r\n    }).isRequired,\r\n    CCBaseUrl: PropTypes.string.isRequired,\r\n  }).isRequired,\r\n  permissions: PropTypes.shape({\r\n    dynamic: PropTypes.shape({\r\n      OverviewPageFluentV2: PropTypes.bool,\r\n      OverviewPageFluent2: PropTypes.bool,\r\n    }),\r\n  }),\r\n  blockCard: PropTypes.func,\r\n  willFetchData: PropTypes.func,\r\n  renderedWithData: PropTypes.func,\r\n  unblockCard: PropTypes.func,\r\n};\r\n\r\nexport default EmptyState;\r\n","export const defaultMetrics = [\r\n  { key: 'ConversionsCredit', i18nKey: _TL_('Conversions') },\r\n  { key: 'AdvertiserReportedRevenue', i18nKey: _TL_('Revenue') },\r\n];\r\n","import React, { useMemo } from 'react';\r\nimport classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\n\r\nfunction GridIncreaseCell(props) {\r\n  const {\r\n    item,\r\n    rowClass,\r\n  } = props;\r\n\r\n  const space = useMemo(() => item.increaseSpace, [item.increaseSpace]);\r\n  const bar = useMemo(() => item.increaseBar, [item.increaseBar]);\r\n\r\n  return (\r\n    <div className={classNames('conversion-goals-graph-increase', rowClass)}>\r\n      <div className=\"increase-box\">\r\n        <div className=\"graph-bar\" style={{ flex: bar }} />\r\n        <div className=\"graph-space\" style={{ flex: space }} />\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n\r\nGridIncreaseCell.defaultProps = {\r\n};\r\nGridIncreaseCell.propTypes = {\r\n  rowClass: PropTypes.string.isRequired,\r\n  item: PropTypes.shape({\r\n    increaseSpace: PropTypes.number,\r\n    increaseBar: PropTypes.number,\r\n  }).isRequired,\r\n};\r\n\r\nexport default GridIncreaseCell;\r\n","import React, { useMemo } from 'react';\r\nimport classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\n\r\nfunction GridDeclineCell(props) {\r\n  const {\r\n    item,\r\n    rowClass,\r\n  } = props;\r\n\r\n  const space = useMemo(() => item.declineSpace, [item.declineSpace]);\r\n  const bar = useMemo(() => item.declineBar, [item.declineBar]);\r\n\r\n  return (\r\n    <div className={classNames('conversion-goals-graph-decline', rowClass)}>\r\n      <div className=\"decline-box\">\r\n        <div className=\"graph-space\" style={{ flex: space }} />\r\n        <div className=\"graph-bar\" style={{ flex: bar }} />\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n\r\nGridDeclineCell.defaultProps = {\r\n};\r\nGridDeclineCell.propTypes = {\r\n  item: PropTypes.shape({\r\n    declineSpace: PropTypes.number,\r\n    declineBar: PropTypes.number,\r\n  }).isRequired,\r\n  rowClass: PropTypes.string.isRequired,\r\n};\r\n\r\nexport default GridDeclineCell;\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\n/* eslint-disable jsx-a11y/click-events-have-key-events */\r\n/* eslint-disable jsx-a11y/no-static-element-interactions */\r\nimport React, { useMemo, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { Constants } from '@bingads-webui-clientcenter/entity-utils';\r\nimport _ from 'underscore';\r\n\r\nfunction GridNameCell(props) {\r\n  const {\r\n    item,\r\n    i18n,\r\n    rowClass,\r\n    GoalCategoryFilterStore,\r\n    router,\r\n    instrumentationLog,\r\n  } = props;\r\n\r\n  const nameCellData = useMemo(() => ({\r\n    status: item.status,\r\n    name: item.name,\r\n    typeName: item.typeName,\r\n    campaignType: item.campaignType,\r\n    rawStatus: item.rawStatus,\r\n    category: item.category,\r\n  }), [item]);\r\n\r\n  const isAccount = useMemo(() => item.typeName === 'Account', [item]);\r\n  const { AccountActivityStatus } = Constants;\r\n\r\n  const statusIcon = useMemo(() => {\r\n    if (isAccount) {\r\n      switch (nameCellData.status) {\r\n        case AccountActivityStatus.Errors:\r\n          return (<div className=\"account-error-icon icon-error\" />);\r\n        case AccountActivityStatus.Deleted:\r\n          return (<div className=\"account-deleted-icon\" />);\r\n        case AccountActivityStatus.Enabled:\r\n          return (<div className=\"account-enabled-icon icon-success\" />);\r\n        default:\r\n          return (<div className=\"account-enabled-icon icon-success\" />);\r\n      }\r\n    } else {\r\n      return (<div className=\"status statusEnabled_icon\" />);\r\n    }\r\n  }, [AccountActivityStatus.Deleted, AccountActivityStatus.Enabled, AccountActivityStatus.Errors, isAccount, nameCellData.status]);\r\n\r\n  const navigateToConversionGoals = useCallback(() => {\r\n    if (router) {\r\n      if (instrumentationLog) {\r\n        instrumentationLog.GridNameClicked(nameCellData.name);\r\n      }\r\n      router.navigateToRoute('conversiongoals');\r\n    }\r\n  }, [instrumentationLog, nameCellData.name, router]);\r\n\r\n  const updateFilterAndRoute = useCallback(() => {\r\n    if (GoalCategoryFilterStore) {\r\n      GoalCategoryFilterStore(nameCellData.category);\r\n    }\r\n    navigateToConversionGoals();\r\n  }, [GoalCategoryFilterStore, nameCellData.category, navigateToConversionGoals]);\r\n  return (\r\n    <div className={classNames(\r\n      'name-cell',\r\n      'conversion-goals-entity-name',\r\n      rowClass\r\n    )}\r\n    >\r\n      <div className=\"status\">\r\n        {statusIcon}\r\n      </div>\r\n      <a\r\n        title={item.hideToolTip ? '' : item.name}\r\n        aria-label={i18n.getString(`${item.rawStatus} {{entity}}`)}\r\n        entity={nameCellData.name}\r\n        onClick={updateFilterAndRoute}\r\n      >{nameCellData.name}\r\n      </a>\r\n    </div>\r\n  );\r\n}\r\n\r\nGridNameCell.propTypes = {\r\n  item: PropTypes.shape({\r\n    status: PropTypes.string,\r\n    name: PropTypes.string,\r\n    category: PropTypes.string,\r\n    typeName: PropTypes.string,\r\n    campaignType: PropTypes.string,\r\n    rawStatus: PropTypes.string,\r\n    hideToolTip: PropTypes.bool,\r\n  }),\r\n  i18n: PropTypes.shape({\r\n    getString: PropTypes.func,\r\n  }).isRequired,\r\n  rowClass: PropTypes.string,\r\n  GoalCategoryFilterStore: PropTypes.func,\r\n  router: PropTypes.shape({\r\n    navigateToRoute: PropTypes.func,\r\n  }),\r\n  instrumentationLog: PropTypes.shape({\r\n    GridNameClicked: PropTypes.func,\r\n  }),\r\n};\r\nGridNameCell.defaultProps = {\r\n  item: {},\r\n  rowClass: '',\r\n  GoalCategoryFilterStore: _.noop,\r\n  router: {\r\n    navigateToRoute: _.noop,\r\n  },\r\n  instrumentationLog: {\r\n    GridNameClicked: _.noop,\r\n  },\r\n};\r\n\r\nexport default GridNameCell;\r\n","import React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n  getComparisonDateRange,\r\n} from '@bingads-webui-campaign/overview-cards-common';\r\nimport { StringsMapping, metrici18nKeys } from '../../common/strings';\r\n\r\nfunction KpiGrid(props) {\r\n  const {\r\n    currentDate,\r\n    compareDate,\r\n    item,\r\n    newI18n,\r\n    metric,\r\n  } = props;\r\n\r\n  const changeString = useMemo(() => newI18n.getString(StringsMapping.Hover_Change, {\r\n    value: item.formattedValue,\r\n    percentageValue: item.formattedPercentageValue,\r\n  }), [item.formattedPercentageValue, item.formattedValue, newI18n]);\r\n\r\n  const metricCurrent = useMemo(\r\n    () => newI18n.getString(metrici18nKeys[metric], { value: item.formattedMetrics }),\r\n    [item.formattedMetrics, metric, newI18n]\r\n  );\r\n\r\n  const metricCompared = useMemo(\r\n    () => newI18n.getString(metrici18nKeys[metric], { value: item.formattedPeriodMetrics }),\r\n    [item.formattedPeriodMetrics, metric, newI18n]\r\n  );\r\n\r\n  return (\r\n    <div className=\"kpi-grid\">\r\n      <div className=\"kpi-current\">\r\n        <div className=\"kpi-date-range\">\r\n          {currentDate}\r\n        </div>\r\n        <span>{metricCurrent}</span>\r\n      </div>\r\n      <div className=\"kpi-comparison\">\r\n        <div className=\"kpi-date-range\">\r\n          {compareDate}\r\n        </div>\r\n        <span>{metricCompared}</span>\r\n      </div>\r\n      <div className=\"kpi-change\">\r\n        <div className=\"bar-icon\" />\r\n        <span>{changeString}</span>\r\n      </div>\r\n\r\n    </div>\r\n  );\r\n}\r\n\r\nfunction GridHoverContainer(props) {\r\n  const {\r\n    isGrid,\r\n    isIncrease,\r\n    item,\r\n    rowClass,\r\n    newI18n,\r\n    dateRange,\r\n    metric,\r\n  } = props;\r\n\r\n  const startDate = useMemo(\r\n    () =>\r\n      newI18n.formatDate(dateRange.start),\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    [dateRange.start]\r\n  );\r\n\r\n  const endDate = useMemo(\r\n    () =>\r\n      newI18n.formatDate(dateRange.end),\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    [dateRange.end]\r\n  );\r\n\r\n  const compareDate = useMemo(\r\n    () => {\r\n      const comparisonDateRange = getComparisonDateRange(dateRange);\r\n      const comparisonStartDate = newI18n.formatDate(comparisonDateRange.start);\r\n      const comparisonEndDate = newI18n.formatDate(comparisonDateRange.end);\r\n      if (startDate === endDate) {\r\n        return comparisonStartDate;\r\n      }\r\n      return `${comparisonStartDate} - ${comparisonEndDate}`;\r\n    },\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    [dateRange]\r\n  );\r\n\r\n  const currentDate = useMemo(\r\n    () => {\r\n      if (startDate === endDate) {\r\n        return startDate;\r\n      }\r\n      return `${startDate} - ${endDate}`;\r\n    },\r\n    [startDate, endDate]\r\n  );\r\n\r\n  const hoverClassName = useMemo(\r\n    () => {\r\n      if (isGrid) {\r\n        return 'graph-hover-target';\r\n      }\r\n      return 'pop-hover-target';\r\n    },\r\n    [isGrid]\r\n  );\r\n\r\n  const KpiColorClassName = useMemo(\r\n    () => (isIncrease ? 'kpi-increased' : 'kpi-declined'),\r\n    [isIncrease]\r\n  );\r\n\r\n  return (\r\n    <div className={`${hoverClassName} ${KpiColorClassName} ${rowClass}`}>\r\n      <div className=\"hover-container\">\r\n        <div className=\"hover-content\">\r\n          <div className=\"entity-name\">{item.name}</div>\r\n          <KpiGrid\r\n            isIncrease={isIncrease}\r\n            currentDate={currentDate}\r\n            compareDate={compareDate}\r\n            item={item}\r\n            newI18n={newI18n}\r\n            metric={metric}\r\n          />\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n\r\nGridHoverContainer.defaultProps = {\r\n  isGrid: false,\r\n  isIncrease: false,\r\n};\r\n\r\nGridHoverContainer.propTypes = {\r\n  isGrid: PropTypes.bool,\r\n  isIncrease: PropTypes.bool,\r\n  rowClass: PropTypes.string.isRequired,\r\n  item: PropTypes.shape({\r\n    increaseSpace: PropTypes.number,\r\n    increaseBar: PropTypes.number,\r\n    name: PropTypes.string,\r\n  }).isRequired,\r\n  newI18n: PropTypes.shape({\r\n    getString: PropTypes.func.isRequired,\r\n    formatDate: PropTypes.func.isRequired,\r\n  }).isRequired,\r\n  dateRange: PropTypes.shape({\r\n    start: PropTypes.shape({}).isRequired,\r\n    end: PropTypes.shape({}).isRequired,\r\n  }).isRequired,\r\n  metric: PropTypes.string.isRequired,\r\n};\r\n\r\nKpiGrid.defaultProps = {\r\n};\r\n\r\nKpiGrid.propTypes = {\r\n  currentDate: PropTypes.string.isRequired,\r\n  compareDate: PropTypes.string.isRequired,\r\n  item: PropTypes.shape({\r\n    formattedValue: PropTypes.string,\r\n    formattedPercentageValue: PropTypes.string,\r\n    formattedMetrics: PropTypes.string,\r\n    formattedPeriodMetrics: PropTypes.string,\r\n  }).isRequired,\r\n  newI18n: PropTypes.shape({\r\n    getString: PropTypes.func.isRequired,\r\n    formatDate: PropTypes.func.isRequired,\r\n  }).isRequired,\r\n  metric: PropTypes.string.isRequired,\r\n};\r\n\r\nexport default GridHoverContainer;\r\n","import React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport GridIncreaseCell from './grid-increase-graph';\r\nimport GridDeclineCell from './grid-decline-graph';\r\nimport GridNameCell from './grid-name-cell';\r\nimport HoverContainer from './grid-hover-container';\r\n\r\nfunction GridPopCell(props) {\r\n  const {\r\n    item,\r\n    rowClass,\r\n  } = props;\r\n\r\n  return (\r\n    <React.Fragment>\r\n      <div className={`pop-change ${rowClass}`}>{item.formattedValue}</div>\r\n      <div className={`pop-change-percentage ${rowClass}`}>{item.formattedPercentageValue}</div>\r\n      <div className={`pop-range ${rowClass}`}>{item.fromTo}</div>\r\n    </React.Fragment>\r\n  );\r\n}\r\n\r\nGridPopCell.defaultProps = {\r\n};\r\nGridPopCell.propTypes = {\r\n  item: PropTypes.shape({\r\n    formattedValue: PropTypes.string.isRequired,\r\n    formattedPercentageValue: PropTypes.string.isRequired,\r\n    fromTo: PropTypes.string.isRequired,\r\n  }).isRequired,\r\n  rowClass: PropTypes.string.isRequired,\r\n};\r\n\r\nfunction GridRow(props) {\r\n  const {\r\n    item,\r\n    index,\r\n    i18n,\r\n    newI18n,\r\n    dateRange,\r\n    metric,\r\n  } = props;\r\n\r\n  const rowClass = useMemo(() => `conversion-goals-grid-row-${index + 1}`, [index]);\r\n  const isIncrease = useMemo(() => item.increaseSpace < 100, [item.increaseSpace]);\r\n\r\n  return (\r\n    <React.Fragment>\r\n      <GridNameCell item={item} i18n={i18n} rowClass={rowClass} {...props} />\r\n      <GridDeclineCell item={item} rowClass={rowClass} />\r\n      <GridIncreaseCell item={item} rowClass={rowClass} />\r\n      <GridPopCell item={item} rowClass={rowClass} />\r\n      <HoverContainer\r\n        isGrid\r\n        isIncrease={isIncrease}\r\n        item={item}\r\n        rowClass={rowClass}\r\n        newI18n={newI18n}\r\n        metric={metric}\r\n        dateRange={dateRange}\r\n      />\r\n      <HoverContainer\r\n        isIncrease={isIncrease}\r\n        item={item}\r\n        rowClass={rowClass}\r\n        newI18n={newI18n}\r\n        metric={metric}\r\n        dateRange={dateRange}\r\n      />\r\n    </React.Fragment>\r\n  );\r\n}\r\n\r\nGridRow.defaultProps = {\r\n};\r\n\r\nGridRow.propTypes = {\r\n  item: PropTypes.shape({\r\n    increaseSpace: PropTypes.number.isRequired,\r\n  }).isRequired,\r\n  index: PropTypes.number.isRequired,\r\n  i18n: PropTypes.shape({}).isRequired,\r\n  newI18n: PropTypes.shape({}).isRequired,\r\n  dateRange: PropTypes.shape({}).isRequired,\r\n  metric: PropTypes.string.isRequired,\r\n};\r\n\r\nexport default GridRow;\r\n","import React, { useMemo } from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport GridRow from './grid-row';\r\nimport { StringsMapping } from '../../common/strings';\r\nimport { BoldSyntax } from '../../common/util';\r\n\r\nfunction ConversionTrackingGrid(props) {\r\n  const {\r\n    deps,\r\n    metric,\r\n    processedData,\r\n    newI18n,\r\n  } = props;\r\n\r\n  const metricName = useMemo(\r\n    () =>\r\n      (metric ? deps.s$i18n.property('PerformanceMetric', metric) : ''),\r\n    [deps.s$i18n, metric]\r\n  );\r\n  const emptyText = useMemo(\r\n    () => newI18n.getString(StringsMapping.Empty_Data),\r\n    [newI18n]\r\n  );\r\n\r\n  const renderGridRows = useMemo(() => (\r\n    _.size(processedData) === 0 ?\r\n      <div className=\"conversion-tracking-grid-empty\">\r\n        <BoldSyntax template={emptyText} />\r\n      </div> :\r\n\r\n      <div className=\"conversion-goals-grid\">\r\n        {processedData.map((currentRow, index) => (index < 4 ?\r\n          <GridRow\r\n            item={currentRow}\r\n            metricName={metricName}\r\n            index={index}\r\n            {...props}\r\n          /> : null))}\r\n      </div>), [emptyText, metricName, processedData, props]);\r\n\r\n  return (\r\n    <div className=\"conversion-tracking-grid-container\">\r\n      {renderGridRows}\r\n    </div>\r\n  );\r\n}\r\n\r\nConversionTrackingGrid.defaultProps = {\r\n  emptyText: '',\r\n};\r\nConversionTrackingGrid.propTypes = {\r\n  deps: PropTypes.shape({\r\n    s$i18n: PropTypes.shape({\r\n      property: PropTypes.func.isRequired,\r\n    }).isRequired,\r\n  }).isRequired,\r\n  metric: PropTypes.string.isRequired,\r\n  processedData: PropTypes.arrayOf(PropTypes.shape({\r\n  })).isRequired,\r\n  newI18n: PropTypes.shape({\r\n    getString: PropTypes.func.isRequired,\r\n  }).isRequired,\r\n  emptyText: PropTypes.string,\r\n};\r\n\r\nexport default ConversionTrackingGrid;\r\n","// this is the error type of conversion goals\r\nimport { StringsMapping } from './strings';\r\n\r\nexport const ErrorType = {\r\n  NoRecentConversion: 'NoRecentConversion',\r\n  RecordingConversions: 'RecordingConversions',\r\n  TagInactive: 'TagInactive',\r\n  Unverified: 'Unverified',\r\n  UnavailableTag: 'InactiveDueToTagUnavailable',\r\n};\r\n\r\nexport const Errors = {\r\n  [ErrorType.NoRecentConversion]: {\r\n    ClassName: 'no-recent-conversion',\r\n    Title: StringsMapping.NoRecentConversion,\r\n    Message: StringsMapping.StatusMessage_NoRecentConversion,\r\n    Status: StringsMapping.Status_RecentConversions,\r\n  },\r\n  // No revenue attribute\r\n  [ErrorType.RecordingConversions]: {\r\n    ClassName: 'no-revenue-attribute',\r\n    Title: StringsMapping.RecordingConversions,\r\n    Message: StringsMapping.StatusMessage_RecordingConversions,\r\n    Status: StringsMapping.Status_RecordingConversions,\r\n  },\r\n  [ErrorType.TagInactive]: {\r\n    ClassName: 'tag-inactive',\r\n    Title: StringsMapping.InactiveTag,\r\n    Message: StringsMapping.StatusMessage_TagInactive,\r\n    Status: StringsMapping.Status_Inactive,\r\n  },\r\n  [ErrorType.Unverified]: {\r\n    ClassName: 'unverified-tags',\r\n    Title: StringsMapping.UnverifiedTag,\r\n    Message: StringsMapping.StatusMessage_Unverified,\r\n    Status: StringsMapping.Status_Unverified,\r\n  },\r\n  [ErrorType.UnavailableTag]: {\r\n    ClassName: 'unavailable-tags',\r\n    Title: StringsMapping.UnavailableTag,\r\n    Message: StringsMapping.StatusMessage_InactiveDueToTagUnavailable,\r\n    Status: StringsMapping.Status_Unavailable,\r\n  },\r\n};\r\n","import React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Callout } from '@bingads-webui-react/callout';\r\nimport { withLock, keyVault } from '@bingads-webui-react/popup-manager';\r\n\r\nexport function PopupCallout(props) {\r\n  const {\r\n    title,\r\n    content,\r\n    target,\r\n    close,\r\n    popoverId,\r\n  } = props;\r\n\r\n  const { right } = target.getBoundingClientRect();\r\n  const calloutMaxWidth = 325; // this value is defined in global style\r\n  const placement = useMemo(() => (right + calloutMaxWidth > window.innerWidth ? 'left' : 'right'), [right]);\r\n\r\n  return (\r\n    <div onMouseLeave={close}>\r\n      <Callout\r\n        target={target}\r\n        content={content}\r\n        title={title}\r\n        placement={placement}\r\n        onClose={close}\r\n        show\r\n        popoverId={popoverId}\r\n        closeButton={false}\r\n      />\r\n    </div>\r\n  );\r\n}\r\n\r\nPopupCallout.propTypes = {\r\n  title: PropTypes.oneOfType([\r\n    PropTypes.element.isRequired,\r\n    PropTypes.string.isRequired,\r\n  ]).isRequired,\r\n  /**\r\n   * the content element or text of the callout\r\n   */\r\n  content: PropTypes.oneOfType([\r\n    PropTypes.element.isRequired,\r\n    PropTypes.string.isRequired,\r\n  ]).isRequired,\r\n  /**\r\n   * target of the callout, DOM element\r\n   */\r\n  target: PropTypes.instanceOf(Element).isRequired,\r\n  /**\r\n   * function called to remove callout\r\n   */\r\n  close: PropTypes.func.isRequired,\r\n  /**\r\n   * callout id\r\n   */\r\n  popoverId: PropTypes.string.isRequired,\r\n  /**\r\n   * view that has event triggered to close the popup\r\n   */\r\n  view: PropTypes.shape({\r\n    on: PropTypes.func.isRequired,\r\n    off: PropTypes.func.isRequired,\r\n  }),\r\n};\r\n\r\nPopupCallout.defaultProps = {\r\n  view: null,\r\n};\r\n\r\nexport const CalloutWithLock = withLock(PopupCallout, {\r\n  lockKey: keyVault.hoveringPopup,\r\n  force: true,\r\n});\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React, { useCallback, useMemo, useRef, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport className from 'classnames';\r\nimport { Link } from '@fluentui/react';\r\nimport { ErrorType, Errors } from '../../common/error-type';\r\nimport { StringsMapping } from '../../common/strings';\r\nimport { CalloutWithLock } from './popup';\r\n\r\nfunction PopupContent({\r\n  bodyText, goalNames = [], newI18n, updateFilterAndRoute,\r\n}) {\r\n  const goalList = useMemo(\r\n    () => {\r\n      if (goalNames.length === 0) {\r\n        return null;\r\n      }\r\n      return (\r\n        <ul\r\n          className=\"popup-goal-list\"\r\n          style={{ marginTop: 10, paddingInlineStart: 15, marginBottom: 10 }}\r\n        >{goalNames.map(goalName =>\r\n        (\r\n          <li className=\"popup-goal-name\" key={goalName}>\r\n            <div\r\n              className=\"popup-goal-name-text\"\r\n              style={{ textOverflow: 'ellipsis', overflow: 'hidden' }}\r\n            >{goalName}\r\n            </div>\r\n          </li>\r\n        ))\r\n          }\r\n        </ul>\r\n      );\r\n    }\r\n    , [goalNames]\r\n  );\r\n\r\n  const seeAllText = useMemo(\r\n    () => newI18n.getString(StringsMapping.See_All)\r\n    , [newI18n]\r\n  );\r\n  return (\r\n    <React.Fragment>\r\n      <div className=\"popup-content\">\r\n        {bodyText}\r\n        {goalList}\r\n        <Link\r\n          className=\"see-all-link\"\r\n          onClick={updateFilterAndRoute}\r\n        >\r\n          {seeAllText}\r\n        </Link>\r\n      </div>\r\n    </React.Fragment>\r\n  );\r\n}\r\n\r\nfunction PopupContentNoRevenue({\r\n  newI18n,\r\n}) {\r\n  const noRevenueText = useMemo(\r\n    () => newI18n.getString(StringsMapping.NoReveueText)\r\n    , [newI18n]\r\n  );\r\n\r\n  return (\r\n    <React.Fragment>\r\n      <div className=\"popup-content\">\r\n        {noRevenueText}\r\n        <Link\r\n          to=\"https://help.ads.microsoft.com/#apex/ads/en/56716/2\"\r\n          className=\"no-revenue-link\"\r\n        >\r\n          {newI18n.getString(StringsMapping.Learn_More)}\r\n        </Link>\r\n      </div>\r\n    </React.Fragment>\r\n  );\r\n}\r\n\r\n\r\nfunction Line(props) {\r\n  const {\r\n    number, type, newI18n, goalNames,\r\n    TrackingTypeFilterStore,\r\n    router,\r\n    instrumentationLog,\r\n  } = props;\r\n\r\n  const [hoverCardStatus, setHoverCardStatus] = useState(false);\r\n\r\n  const navigateToConversionGoals = useCallback(() => {\r\n    if (router) {\r\n      instrumentationLog.SeeAllClicked(type);\r\n      router.navigateToRoute('conversiongoals');\r\n    }\r\n  }, [instrumentationLog, router, type]);\r\n\r\n  const updateFilterAndRoute = useCallback(() => {\r\n    if (TrackingTypeFilterStore) {\r\n      TrackingTypeFilterStore(type);\r\n    }\r\n    navigateToConversionGoals();\r\n  }, [TrackingTypeFilterStore, navigateToConversionGoals, type]);\r\n\r\n  const formattedNumber = useMemo(\r\n    () => `${newI18n.getString(StringsMapping.Number_Of_Goals, { number })}`,\r\n    [newI18n, number]\r\n  );\r\n  const titleText = useMemo(\r\n    () => newI18n.getString(Errors[type].Title),\r\n    [newI18n, type]\r\n  );\r\n  const statusText = useMemo(\r\n    () => newI18n.getString(Errors[type].Status),\r\n    [newI18n, type]\r\n  );\r\n  const MessageText = useMemo(\r\n    () => newI18n.getString(Errors[type].Message),\r\n    [newI18n, type]\r\n  );\r\n  const errorClassName = useMemo(() => Errors[type].ClassName, [type]);\r\n\r\n  const ref = useRef(null);\r\n\r\n  const renderLine = useCallback(() => {\r\n    if (type === ErrorType.RecordingConversions) {\r\n      return (\r\n        <div\r\n          className={className('error-status', errorClassName)}\r\n          onMouseLeave={() => setHoverCardStatus(false)}\r\n        >\r\n          {`${formattedNumber}${statusText}`}\r\n          {hoverCardStatus && <CalloutWithLock\r\n            title={titleText}\r\n            target={ref.current}\r\n            content={<PopupContentNoRevenue\r\n              newI18n={newI18n}\r\n            />}\r\n            close={() => { setHoverCardStatus(false); }}\r\n            popoverId={type}\r\n          />}\r\n        </div>\r\n      );\r\n    }\r\n    return (\r\n      <div\r\n        className={className('error-status', errorClassName)}\r\n        onMouseLeave={() => setHoverCardStatus(false)}\r\n      >\r\n        <div\r\n          className=\"error-status-number\"\r\n          onMouseEnter={() => setHoverCardStatus(true)}\r\n          ref={ref}\r\n        >{formattedNumber}\r\n        </div>\r\n        {statusText}\r\n        {hoverCardStatus && <CalloutWithLock\r\n          title={titleText}\r\n          target={ref.current}\r\n          content={<PopupContent\r\n            bodyText={MessageText}\r\n            goalNames={goalNames}\r\n            newI18n={newI18n}\r\n            updateFilterAndRoute={updateFilterAndRoute}\r\n          />}\r\n          close={() => { setHoverCardStatus(false); }}\r\n          popoverId={type}\r\n        />}\r\n      </div>\r\n    );\r\n  }, [MessageText, errorClassName, formattedNumber, goalNames, hoverCardStatus, newI18n, statusText, titleText, type, updateFilterAndRoute]);\r\n\r\n  return renderLine();\r\n}\r\n\r\nPopupContent.defaultProps = {\r\n  bodyText: '',\r\n  goalNames: [],\r\n  updateFilterAndRoute: _.noop,\r\n};\r\n\r\nPopupContent.propTypes = {\r\n  bodyText: PropTypes.string,\r\n  goalNames: PropTypes.arrayOf(PropTypes.string),\r\n  newI18n: PropTypes.shape({\r\n    getString: PropTypes.func.isRequired,\r\n  }).isRequired,\r\n  updateFilterAndRoute: PropTypes.func,\r\n};\r\n\r\n\r\nPopupContentNoRevenue.propTypes = {\r\n  newI18n: PropTypes.shape({\r\n    getString: PropTypes.func.isRequired,\r\n  }).isRequired,\r\n};\r\nexport default Line;\r\n","import _ from 'underscore';\r\nimport React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Line from './line';\r\nimport { ErrorType } from '../../common/error-type';\r\nimport { StringsMapping } from '../../common/strings';\r\n\r\nfunction StatusOverview(props) {\r\n  const {\r\n    newI18n,\r\n    data,\r\n    noConversionGoalsWithRevenue,\r\n    TrackingTypeFilterStore,\r\n    router,\r\n    instrumentationLog,\r\n  } = props;\r\n\r\n  const title = useMemo(\r\n    () =>\r\n      newI18n.getString(StringsMapping.Status_Title),\r\n    [newI18n]\r\n  );\r\n  const subtitle = useMemo(\r\n    () =>\r\n      newI18n.getString(StringsMapping.Status_Subtitle)\r\n    , [newI18n]\r\n  );\r\n  const alertText = useMemo(\r\n    () =>\r\n      newI18n.getString(StringsMapping.Status_Alert)\r\n    , [newI18n]\r\n  );\r\n\r\n  const alertNum = useMemo(\r\n    () => _.reduce(data, (memo, status) => memo + status.GoalCount, 0),\r\n    [data]\r\n  );\r\n\r\n  return (\r\n    <div className=\"conversion-trackig-tile-error-status\">\r\n      <div className=\"alert-group\">\r\n        <div className=\"alert-text\">{alertText}</div>\r\n        <div className=\"alert-number\">{alertNum}</div>\r\n      </div>\r\n      <div className=\"details-group\">\r\n        <div className=\"title-group\">\r\n          <div className=\"status-overview-title\" >{title}</div>\r\n          <div className=\"status-overview-subtitle\">{subtitle}</div>\r\n        </div>\r\n        <div className=\"errors-group\">\r\n          {_.map(data, (status, index) => (\r\n            <React.Fragment key={`${status.GoalTrackingStatus}-${index}`}>\r\n              <Line\r\n                number={status.GoalCount}\r\n                type={status.GoalTrackingStatus}\r\n                newI18n={newI18n}\r\n                goalNames={status.GoalNames}\r\n                TrackingTypeFilterStore={TrackingTypeFilterStore}\r\n                router={router}\r\n                instrumentationLog={instrumentationLog}\r\n              />\r\n            </React.Fragment>\r\n          ))\r\n          }\r\n          {noConversionGoalsWithRevenue && (\r\n            <Line\r\n              number={0}\r\n              type={ErrorType.RecordingConversions}\r\n              newI18n={newI18n}\r\n            />\r\n          )}\r\n        </div>\r\n      </div>\r\n\r\n    </div>\r\n  );\r\n}\r\nStatusOverview.defaultProps = {\r\n  data: [],\r\n  noConversionGoalsWithRevenue: false,\r\n  TrackingTypeFilterStore: _.noop,\r\n  router: { navigateToRoute: _.noop },\r\n  instrumentationLog: { SeeAllClicked: _.noop },\r\n};\r\n\r\nStatusOverview.propTypes = {\r\n  data: PropTypes.arrayOf(PropTypes.shape({\r\n    GoalCount: PropTypes.number.isRequired,\r\n    GoalNames: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n    GoalTrackingStatus: PropTypes.string.isRequired,\r\n  })),\r\n  newI18n: PropTypes.shape({\r\n    getString: PropTypes.func.isRequired,\r\n  }).isRequired,\r\n  noConversionGoalsWithRevenue: PropTypes.bool,\r\n  TrackingTypeFilterStore: PropTypes.func,\r\n  router: PropTypes.shape({\r\n    navigateToRoute: PropTypes.func.isRequired,\r\n  }),\r\n  instrumentationLog: PropTypes.shape({\r\n    SeeAllClicked: PropTypes.func.isRequired,\r\n  }),\r\n};\r\n\r\nexport default StatusOverview;\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Button, Tooltip } from '@fluentui/react-components';\r\nimport { ChevronLeftRegular, ChevronRightRegular } from '@fluentui/react-icons';\r\nimport { IconButton, DefaultButton } from '@fluentui/react/lib/Button';\r\nimport { StringsMapping } from '../../common/strings';\r\n\r\nfunction ConversionTrackingFooter(props) {\r\n  const {\r\n    newI18n,\r\n    pageNumber,\r\n    setPageNumber,\r\n    router,\r\n    instrumentationLog,\r\n    totalPageCount,\r\n    permissions,\r\n  } = props;\r\n\r\n  const manageGoalsText = useMemo(\r\n    () =>\r\n      newI18n.getString(StringsMapping.Footer_ManageConversions),\r\n    [newI18n]\r\n  );\r\n\r\n  const pageCount = useMemo(\r\n    () =>\r\n      newI18n.getString(\r\n        StringsMapping.Footer_PageCount,\r\n        { pageNumber: pageNumber + 1 }\r\n      ),\r\n    [newI18n, pageNumber]\r\n  );\r\n\r\n  const navigateToConversionGoals = useCallback(() => {\r\n    if (router) {\r\n      if (instrumentationLog) {\r\n        instrumentationLog.ManageConversionsClicked();\r\n      }\r\n      router.navigateToRoute('conversiongoals');\r\n    }\r\n  }, [instrumentationLog, router]);\r\n\r\n  const requiredPermission = permissions.dynamic.OverviewPageFluentV2 || permissions.dynamic.OverviewPageFluent2;\r\n\r\n  if (totalPageCount === 1) {\r\n    return (\r\n      <div className=\"carousel-footer\">\r\n        <div className=\"action-button\">\r\n          {requiredPermission ? (\r\n            <Button onClick={navigateToConversionGoals}>{manageGoalsText}</Button>\r\n          ) : (\r\n            <DefaultButton onClick={navigateToConversionGoals} text={manageGoalsText} />\r\n          )}\r\n        </div>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  return (\r\n    <div className=\"carousel-footer\">\r\n      <div className=\"action-button\">\r\n        {requiredPermission ? (\r\n          <Button onClick={navigateToConversionGoals}>{manageGoalsText}</Button>\r\n          ) : (\r\n            <DefaultButton onClick={navigateToConversionGoals} text={manageGoalsText} />\r\n          )}\r\n      </div>\r\n      <div className=\"carousel-pagination\">\r\n        <div className=\"carousel-item-count\">\r\n          {pageCount}\r\n        </div>\r\n        {requiredPermission ? (\r\n          <>\r\n            <Tooltip content={newI18n.getString(_TL_('Previous'))} relationship=\"label\">\r\n              <Button className=\"previous\" icon={<ChevronLeftRegular />} appearance=\"transparent\" disabled={pageNumber === 0} onClick={() => setPageNumber(0)} />\r\n            </Tooltip>\r\n            <Tooltip content={newI18n.getString(_TL_('Next'))} relationship=\"label\">\r\n              <Button className=\"next\" icon={<ChevronRightRegular />} appearance=\"transparent\" disabled={pageNumber === 1} onClick={() => setPageNumber(1)} />\r\n            </Tooltip>\r\n          </>\r\n        ) : (\r\n          <div className=\"carousel-arrows\">\r\n            <IconButton\r\n              className=\"carousel-left\"\r\n              iconProps={{ iconName: 'ChevronLeft' }}\r\n              onClick={() => setPageNumber(0)}\r\n              disabled={pageNumber === 0}\r\n              ariaLabel={newI18n.getString(_TL_('Previous page'))}\r\n            />\r\n            <IconButton\r\n              className=\"carousel-right\"\r\n              iconProps={{ iconName: 'ChevronRight' }}\r\n              onClick={() => setPageNumber(1)}\r\n              disabled={pageNumber === 1}\r\n              ariaLabel={newI18n.getString(_TL_('Next page'))}\r\n            />\r\n          </div>\r\n        )\r\n      }\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n\r\nConversionTrackingFooter.defaultProps = {\r\n  setPageNumber: _.noop,\r\n  router: {\r\n    navigateToRoute: _.noop,\r\n  },\r\n  instrumentationLog: {\r\n    ManageConversionsClicked: _.noop,\r\n  },\r\n  totalPageCount: 1,\r\n};\r\nConversionTrackingFooter.propTypes = {\r\n  newI18n: PropTypes.shape({\r\n    getString: PropTypes.func,\r\n  }).isRequired,\r\n  pageNumber: PropTypes.number.isRequired,\r\n  permissions: PropTypes.shape({\r\n    dynamic: PropTypes.shape({\r\n      OverviewPageFluentV2: PropTypes.bool,\r\n      OverviewPageFluent2: PropTypes.bool,\r\n    }),\r\n  }).isRequired,\r\n  setPageNumber: PropTypes.func,\r\n  router: PropTypes.shape({\r\n    navigateToRoute: PropTypes.func,\r\n  }),\r\n  instrumentationLog: PropTypes.shape({\r\n    ManageConversionsClicked: PropTypes.func,\r\n  }),\r\n  totalPageCount: PropTypes.number,\r\n};\r\n\r\nexport default ConversionTrackingFooter;\r\n","/* eslint-disable jsx-a11y/no-static-element-interactions */\r\n/* eslint-disable jsx-a11y/click-events-have-key-events */\r\n/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React, { useState, useEffect, useCallback, useRef, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nfunction useOutsideAlerter(ref, setShowDropDown) {\r\n  useEffect(() => {\r\n    function handleClickOutside(event) {\r\n      if (ref.current && !ref.current.contains(event.target)) {\r\n        setShowDropDown(false);\r\n      }\r\n    }\r\n    // Bind the event listener\r\n    document.addEventListener('click', handleClickOutside);\r\n    return () => {\r\n      // Unbind the event listener on clean up\r\n      document.removeEventListener('click', handleClickOutside);\r\n    };\r\n  }, [ref, setShowDropDown]);\r\n}\r\n\r\n\r\nfunction GridMetricPicker(props) {\r\n  const {\r\n    metrics,\r\n    newI18n,\r\n    updateMetric,\r\n  } = props;\r\n\r\n  const [showDropDown, setShowDropDown] = useState(false);\r\n  const [selectedMetric, setSelectedMetric] = useState(metrics[0]);\r\n  // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  const selectedMetricText = useMemo(() => newI18n.getString(selectedMetric.i18nKey), [selectedMetric.i18nKey]);\r\n\r\n  const selectNewMetric = useCallback((metric) => {\r\n    if (updateMetric) {\r\n      updateMetric(metric.key);\r\n    }\r\n    setShowDropDown(false);\r\n    setSelectedMetric(metric);\r\n  }, [updateMetric]);\r\n\r\n\r\n  const listItems = useMemo(() => metrics.map(metric => (\r\n    <li className=\"menuitem\" key={metric.key}>\r\n      <a onClick={() => { selectNewMetric(metric); }}>\r\n        {newI18n.getString(metric.i18nKey)}\r\n      </a>\r\n    </li>\r\n  )), [metrics, newI18n, selectNewMetric]);\r\n\r\n\r\n  const ref = useRef(null);\r\n  useOutsideAlerter(ref, setShowDropDown);\r\n\r\n  return (\r\n    <div className=\"metric-container\">\r\n      <div className=\"btn-group btn btn-default metric-picker open\">\r\n        <div\r\n          className=\"metric-picker__button metric-picker__button--single dropdown-toggle\"\r\n          ref={ref}\r\n          onClick={() => { setShowDropDown(!showDropDown); }}\r\n        >\r\n          <div className=\"metric-picker__name\">\r\n            {selectedMetricText}\r\n          </div>\r\n          <span className=\"glyphicon glyphicon-triangle-bottom toolbar-icon pull-right\" />\r\n        </div>\r\n        {showDropDown && <ul className=\"dropdown-menu dropdown-menu-right\">{listItems}</ul>}\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n\r\nGridMetricPicker.defaultProps = {\r\n  updateMetric: undefined,\r\n};\r\nGridMetricPicker.propTypes = {\r\n  metrics: PropTypes.arrayOf(PropTypes.shape({\r\n    key: PropTypes.string.isRequired,\r\n    i18nKey: PropTypes.string.isRequired,\r\n  })).isRequired,\r\n  updateMetric: PropTypes.func,\r\n  newI18n: PropTypes.shape({\r\n    getString: PropTypes.func.isRequired,\r\n  }).isRequired,\r\n};\r\n\r\nexport default GridMetricPicker;\r\n","import React, { useState, useCallback, useMemo } from 'react';\r\nimport { Dropdown } from '@fluentui/react/lib/Dropdown';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst dropdownStyles = {\r\n  dropdown: {\r\n    width: 120,\r\n    border: 'none',\r\n    boxShadow: 'none',\r\n    outline: 'none',\r\n    selectors: {\r\n      ':focus': {\r\n        outline: 'none',\r\n      },\r\n      ':focus:after': {\r\n        border: 'none',\r\n        outline: 'none',\r\n      },\r\n    },\r\n  },\r\n  title: {\r\n    border: 'none',\r\n    boxShadow: 'none',\r\n    outline: 'none',\r\n    selectors: {\r\n      ':focus': {\r\n        outline: 'none',\r\n        border: 'none',\r\n        boxShadow: 'none',\r\n      },\r\n      ':focus-visible': {\r\n        outline: 'none',\r\n        border: 'none',\r\n        boxShadow: 'none',\r\n      },\r\n    },\r\n  },\r\n  root: {\r\n    border: 'none',\r\n    boxShadow: 'none',\r\n    outline: 'none',\r\n  },\r\n  callout: {\r\n    border: 'none',\r\n    boxShadow: 'none',\r\n    outline: 'none',\r\n  },\r\n  caretDown: {\r\n    border: 'none',\r\n    boxShadow: 'none',\r\n    outline: 'none',\r\n  },\r\n};\r\n\r\nfunction MetricPicker(props) {\r\n  const { metrics, newI18n, updateMetric } = props;\r\n\r\n  const [selectedMetric, setSelectedMetric] = useState(metrics[0]);\r\n\r\n  const options = useMemo(() => metrics.map(metric => ({\r\n    key: metric.key,\r\n    text: newI18n.getString(metric.i18nKey),\r\n  })), [metrics, newI18n]);\r\n\r\n  const handleChange = useCallback((event, option) => {\r\n    const metric = metrics.find(m => m.key === option.key);\r\n    if (updateMetric && metric) {\r\n      updateMetric(metric.key);\r\n    }\r\n    setSelectedMetric(metric);\r\n  }, [metrics, updateMetric]);\r\n\r\n  return (\r\n    <Dropdown\r\n      selectedKey={selectedMetric.key}\r\n      options={options}\r\n      onChange={handleChange}\r\n      styles={dropdownStyles}\r\n    />\r\n  );\r\n}\r\n\r\nMetricPicker.defaultProps = {\r\n  updateMetric: undefined,\r\n};\r\n\r\nMetricPicker.propTypes = {\r\n  metrics: PropTypes.arrayOf(PropTypes.shape({\r\n    key: PropTypes.string.isRequired,\r\n    i18nKey: PropTypes.string.isRequired,\r\n  })).isRequired,\r\n  updateMetric: PropTypes.func,\r\n  newI18n: PropTypes.shape({\r\n    getString: PropTypes.func.isRequired,\r\n  }).isRequired,\r\n};\r\n\r\nexport default MetricPicker;\r\n","\r\nimport React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n  getComparisonDateRange,\r\n  getPopDescription,\r\n} from '@bingads-webui-campaign/overview-cards-common';\r\nimport { HelpButton } from '@bingads-webui-react/help-popup';\r\nimport GridMetricPicker from './grid-metric-picker';\r\nimport GridPicker from './grid-metric-picker-fluent';\r\n\r\nfunction GridHeader(props) {\r\n  const {\r\n    dateRange,\r\n    i18n,\r\n    permissions,\r\n  } = props;\r\n\r\n  const comparisonDateRange = useMemo(\r\n    () =>\r\n      getComparisonDateRange(dateRange),\r\n    [dateRange]\r\n  );\r\n\r\n  const popDescription = useMemo(\r\n    () =>\r\n      getPopDescription(i18n, comparisonDateRange),\r\n    [i18n, comparisonDateRange]\r\n  );\r\n\r\n  const requiredPermission = permissions.dynamic.OverviewPageFluentV2 || permissions.dynamic.OverviewPageFluent2;\r\n\r\n  return (\r\n    <div className=\"conversion-tracking-grid-header\">\r\n      <div className=\"popComparisonRange\">\r\n        {popDescription}\r\n        <HelpButton\r\n          aria-label={popDescription}\r\n          topic=\"pop_BA_Overview_TopChangesDateRange\"\r\n        />\r\n      </div>\r\n\r\n      {requiredPermission ? <GridPicker {...props} /> : <GridMetricPicker {...props} /> }\r\n    </div>\r\n  );\r\n}\r\n\r\nGridHeader.defaultProps = {\r\n};\r\nGridHeader.propTypes = {\r\n  dateRange: PropTypes.shape({\r\n    RangeEndDate: PropTypes.string,\r\n    RangeStartDate: PropTypes.string,\r\n  }).isRequired,\r\n  i18n: PropTypes.shape({\r\n  }).isRequired,\r\n  newI18n: PropTypes.shape({\r\n  }).isRequired,\r\n  permissions: PropTypes.shape({\r\n    dynamic: PropTypes.shape({\r\n      OverviewPageFluentV2: PropTypes.bool,\r\n      OverviewPageFluent2: PropTypes.bool,\r\n    }),\r\n  }).isRequired,\r\n};\r\n\r\nexport default GridHeader;\r\n","import _ from 'underscore';\r\nimport React, { useState, useEffect, useCallback, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n  coerceStatus,\r\n} from '@bingads-webui-campaign/overview-cards-common';\r\nimport { defaultMetrics } from '../common/metrics';\r\nimport ConversionTrackingGrid from './react-grid/react-grid';\r\nimport StatusOverview from './conversion-error-overview/status-overview';\r\nimport ConversionTrackingFooter from './conversion-error-overview/footer';\r\nimport GridHeader from './react-grid/grid-header';\r\nimport { GoalCategory } from '../common/strings';\r\n\r\nfunction processGridData({\r\n  metric,\r\n  data,\r\n  entitySet,\r\n  deps,\r\n  newI18n,\r\n}) {\r\n  const {\r\n    metricFormatter,\r\n    i18n,\r\n    instrumentation,\r\n    constants,\r\n  } = deps;\r\n\r\n  if (data === undefined || data === null) {\r\n    return undefined;\r\n  } else if (_.size(data) === 0) {\r\n    return [];\r\n  }\r\n\r\n  _.each(data, (entity) => {\r\n    if (!entity.PerformanceMetricsChange) {\r\n      instrumentation.logMessage([constants.LOGCATEGORY.ERROR], constants.LOGLEVEL.INFO, 'conversion-tracking-card', JSON.stringify(entity));\r\n    }\r\n  });\r\n\r\n  const maxChange = Math.abs(_.max(data, ({\r\n    PerformanceMetricsChange: { [metric]: value },\r\n  }) => Math.abs(value)).PerformanceMetricsChange[metric]);\r\n\r\n  return _.map(data, (entity) => {\r\n    const formattedPeriodMetrics = metricFormatter.formatMetric(\r\n      metric,\r\n      entity.PeriodPerformanceMetrics[metric],\r\n      { currency: entity.Currency }\r\n    );\r\n    const formattedMetrics = metricFormatter.formatMetric(\r\n      metric,\r\n      entity.PerformanceMetrics[metric],\r\n      { currency: entity.Currency }\r\n    );\r\n    const value = entity.PerformanceMetricsChange[metric];\r\n    let declineBar = 0;\r\n    let declineSpace = 100;\r\n    let increaseBar = 0;\r\n    let increaseSpace = 100;\r\n\r\n    if (maxChange !== 0) {\r\n      if (value < 0) {\r\n        declineBar = Math.ceil(-(value * 100) / maxChange);\r\n        declineSpace = 100 - declineBar;\r\n      } else {\r\n        increaseBar = Math.ceil((value * 100) / maxChange);\r\n        increaseSpace = 100 - increaseBar;\r\n      }\r\n    }\r\n\r\n    const typeName = entitySet.type.elementType.shortName;\r\n    const i18nString = GoalCategory[entity.Id] || entity.Id;\r\n    return {\r\n      name: newI18n.getString(i18nString),\r\n      category: entity.Id,\r\n      status: coerceStatus(entity.Status, entity.AccountInactiveReasons),\r\n      value,\r\n      formattedValue: metricFormatter.formatMetricWithSign(\r\n        metric,\r\n        entity.PerformanceMetricsChange[metric],\r\n        { currency: entity.Currency }\r\n      ),\r\n      formattedPercentageValue: metricFormatter\r\n        .formatChangePercentageWithSign(entity.PerformanceMetricsChangePercentage[metric]),\r\n      fromTo: i18n.getString('Dashboard_Cards_FromTo', { fromValue: formattedPeriodMetrics, toValue: formattedMetrics }),\r\n      campaignType: entity.CampaignType,\r\n      typeName,\r\n      formattedMetrics,\r\n      formattedPeriodMetrics,\r\n      declineBar,\r\n      declineSpace,\r\n      increaseBar,\r\n      increaseSpace,\r\n      rawStatus: entity.Status,\r\n    };\r\n  });\r\n}\r\n\r\n\r\nfunction ConversionTrackingState(props) {\r\n  const {\r\n    metric,\r\n    categoryResults,\r\n    statusSummaries,\r\n    noConversionGoalsWithRevenue,\r\n    dateRange,\r\n\r\n    updateCurrentMenuItems,\r\n    updateMetric,\r\n\r\n    deps,\r\n    entitySet,\r\n    i18n,\r\n    newI18n,\r\n    permissions,\r\n    instrumentationLog,\r\n    TrackingTypeFilterStore,\r\n    GoalCategoryFilterStore,\r\n  } = props;\r\n\r\n  const processedResults = useMemo(() => processGridData({\r\n    deps,\r\n    metric,\r\n    data: categoryResults,\r\n    entitySet,\r\n    newI18n,\r\n  }), [deps, metric, categoryResults, entitySet, newI18n]);\r\n\r\n  const totalPageCount = useMemo(() => {\r\n    if (_.size(statusSummaries) === 0) {\r\n      return 1;\r\n    }\r\n    return 2;\r\n  }, [statusSummaries]);\r\n\r\n  const [pageNumber, setPageNumber] = useState(totalPageCount === 1 ? 1 : 0);\r\n\r\n  useEffect(() => {\r\n    if (pageNumber === 0) {\r\n      updateCurrentMenuItems(false);\r\n    } else {\r\n      updateCurrentMenuItems(true);\r\n    }\r\n  }, [pageNumber, updateCurrentMenuItems]);\r\n\r\n  const renderContent = useCallback(() => {\r\n    if (pageNumber === 0) {\r\n      return (\r\n        <StatusOverview\r\n          data={statusSummaries}\r\n          newI18n={newI18n}\r\n          noConversionGoalsWithRevenue={noConversionGoalsWithRevenue}\r\n          TrackingTypeFilterStore={TrackingTypeFilterStore}\r\n          router={deps.legacyRouter}\r\n          instrumentationLog={instrumentationLog}\r\n        />\r\n      );\r\n    }\r\n    return (\r\n      <React.Fragment>\r\n        <GridHeader\r\n          metrics={defaultMetrics}\r\n          dateRange={dateRange}\r\n          newI18n={newI18n}\r\n          i18n={i18n}\r\n          updateMetric={updateMetric}\r\n          permissions={permissions}\r\n        />\r\n        <ConversionTrackingGrid\r\n          processedData={processedResults}\r\n          metric={metric}\r\n          deps={deps}\r\n          newI18n={newI18n}\r\n          i18n={i18n}\r\n          instrumentationLog={instrumentationLog}\r\n          GoalCategoryFilterStore={GoalCategoryFilterStore}\r\n          router={deps.legacyRouter}\r\n          dateRange={dateRange}\r\n        />\r\n      </React.Fragment>\r\n    );\r\n  }, [GoalCategoryFilterStore, TrackingTypeFilterStore, dateRange, deps, i18n, instrumentationLog, metric, newI18n, noConversionGoalsWithRevenue, pageNumber, permissions, processedResults, statusSummaries, updateMetric]);\r\n\r\n  return (\r\n    <div className=\"conversion-tracking-state\">\r\n      {renderContent()}\r\n      <ConversionTrackingFooter\r\n        newI18n={newI18n}\r\n        pageNumber={pageNumber}\r\n        setPageNumber={setPageNumber}\r\n        permissions={permissions}\r\n        router={deps.legacyRouter}\r\n        instrumentationLog={instrumentationLog}\r\n        totalPageCount={totalPageCount}\r\n      />\r\n    </div>\r\n  );\r\n}\r\n\r\nConversionTrackingState.defaultProps = {\r\n  updateCurrentMenuItems: _.noop,\r\n  instrumentationLog: {\r\n    SetUpConversionTracking: _.noop,\r\n    CouponIsShown: _.noop,\r\n    NoCoupon: _.noop,\r\n    ManageConversionsClick: _.noop,\r\n    SeeAllClicked: _.noop,\r\n    Error: _.noop,\r\n  },\r\n\r\n  updateMetric: _.noop,\r\n  categoryResults: [],\r\n  statusSummaries: [],\r\n  noConversionGoalsWithRevenue: false,\r\n  dateRange: {},\r\n  TrackingTypeFilterStore: _.noop,\r\n  GoalCategoryFilterStore: _.noop,\r\n\r\n};\r\nConversionTrackingState.propTypes = {\r\n  metric: PropTypes.string.isRequired,\r\n  categoryResults: PropTypes.arrayOf(PropTypes.shape({\r\n  })),\r\n  statusSummaries: PropTypes.arrayOf(PropTypes.shape({\r\n    GoalCount: PropTypes.number,\r\n    GoalNames: PropTypes.arrayOf(PropTypes.string),\r\n    GoalTrackingStatus: PropTypes.string,\r\n  })),\r\n  noConversionGoalsWithRevenue: PropTypes.bool,\r\n\r\n  dateRange: PropTypes.shape({\r\n    RangeStartDate: PropTypes.string.isRequired,\r\n    RangeEndDate: PropTypes.string.isRequired,\r\n  }),\r\n  updateCurrentMenuItems: PropTypes.func,\r\n\r\n  deps: PropTypes.shape({\r\n    metricFormatter: PropTypes.shape({\r\n      formatMetric: PropTypes.func.isRequired,\r\n      formatMetricWithSign: PropTypes.func.isRequired,\r\n      formatChangePercentageWithSign: PropTypes.func.isRequired,\r\n    }).isRequired,\r\n    legacyRouter: PropTypes.shape({\r\n      navigateToRoute: PropTypes.func.isRequired,\r\n    }).isRequired,\r\n    pageContext: PropTypes.shape({\r\n      accountId: PropTypes.string,\r\n      adgroupId: PropTypes.string,\r\n      campaignId: PropTypes.string,\r\n    }).isRequired,\r\n  }).isRequired,\r\n\r\n\r\n  i18n: PropTypes.shape({\r\n    getString: PropTypes.func.isRequired,\r\n  }).isRequired,\r\n  newI18n: PropTypes.shape({\r\n    getString: PropTypes.func.isRequired,\r\n  }).isRequired,\r\n  permissions: PropTypes.shape({}).isRequired,\r\n\r\n  instrumentationLog: PropTypes.shape({\r\n    SetUpConversionTracking: PropTypes.func,\r\n    CouponIsShown: PropTypes.func,\r\n    NoCoupon: PropTypes.func,\r\n    ManageConversionsClick: PropTypes.func,\r\n    SeeAllClicked: PropTypes.func,\r\n    Error: PropTypes.func,\r\n  }),\r\n\r\n  updateMetric: PropTypes.func,\r\n  TrackingTypeFilterStore: PropTypes.func,\r\n  GoalCategoryFilterStore: PropTypes.func,\r\n  entitySet: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nexport default ConversionTrackingState;\r\n","import _ from 'underscore';\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n  ConversionFilterOption,\r\n  conversionDefaultOptions,\r\n} from '@bingads-webui-campaign/overview-cards-common';\r\nimport { InstrumentationLog } from '../common/instrumentation';\r\nimport EmptyState from './empty-state';\r\nimport ConversionTrackingState from './conversion-tracking-state';\r\nimport { StringsMapping } from '../common/strings';\r\n\r\nclass ConversionTrackingCard extends React.Component {\r\n  constructor(props) {\r\n    super(props);\r\n    const {\r\n      metric,\r\n      selectedMenuItem,\r\n      dateRange,\r\n      fetch, // fetch for conversion tracking data\r\n      fetchSingleTile,\r\n\r\n      i18n,\r\n      newI18n,\r\n      deps,\r\n      entitySet,\r\n      permissions,\r\n\r\n      triggerChangeMenuItem,\r\n      triggerChangeMetric,\r\n      TrackingTypeFilterStore,\r\n      GoalCategoryFilterStore,\r\n\r\n      blockCard,\r\n      willFetchData,\r\n      renderedWithData,\r\n      unblockCard,\r\n    } = props;\r\n\r\n    this.fetch = fetch;\r\n    this.state = {\r\n      dataLoaded: false,\r\n      dateRange,\r\n      metric: metric || conversionDefaultOptions.metric, // grid data type\r\n      selectedMenuItem: selectedMenuItem || conversionDefaultOptions.selectedMenuItem, // tile dropdown\r\n      data: {},\r\n    };\r\n\r\n    this.i18n = i18n;\r\n    this.newI18n = newI18n;\r\n    this.deps = deps;\r\n    this.instrumentationLog = InstrumentationLog({\r\n      instrumentation: deps.instrumentation,\r\n      constants: deps.constants,\r\n    });\r\n\r\n    this.permissions = permissions;\r\n    this.entitySet = entitySet;\r\n    this.triggerChangeMenuItem = triggerChangeMenuItem;\r\n    this.triggerChangeMetric = triggerChangeMetric;\r\n\r\n    this.defaultMenuItems = [{\r\n      displayText: this.newI18n.getString(StringsMapping.All_Change),\r\n      action: ConversionFilterOption.AllChanges,\r\n    }, {\r\n      displayText: this.newI18n.getString(StringsMapping.Top_Gainers),\r\n      action: ConversionFilterOption.TopGainers,\r\n    }, {\r\n      displayText: this.newI18n.getString(StringsMapping.Top_Decliners),\r\n      action: ConversionFilterOption.TopDecliners,\r\n    }];\r\n\r\n    this.currentMenuItems = [];\r\n\r\n    this.blockCard = blockCard;\r\n    this.willFetchData = willFetchData;\r\n    this.renderedWithData = renderedWithData;\r\n    this.unblockCard = unblockCard;\r\n    this.TrackingTypeFilterStore = TrackingTypeFilterStore;\r\n    this.GoalCategoryFilterStore = GoalCategoryFilterStore;\r\n    this.fetchSingleTile = fetchSingleTile;\r\n  }\r\n\r\n  componentDidMount() {\r\n    this.fetchTileData(this.fetchSingleTile);\r\n  }\r\n\r\n\r\n  componentDidUpdate(prevProps, prevState) {\r\n    if (this.isDataFetchRequired(prevState)) {\r\n      const fetchSingleTile = this.isFetchSingleTile(prevState);\r\n      this.fetchTileData(fetchSingleTile);\r\n    }\r\n  }\r\n\r\n  getMenuItems = () => this.currentMenuItems;\r\n\r\n  isDataFetchRequired = (prevState) => {\r\n    const {\r\n      dateRange: prevDateRange,\r\n      selectedMenuItem: prevMenuItem,\r\n      metric: prevMetric,\r\n    } = prevState;\r\n\r\n    const {\r\n      dateRange,\r\n      selectedMenuItem,\r\n      metric,\r\n    } = this.state;\r\n\r\n    if (metric === prevMetric && selectedMenuItem === prevMenuItem && _.isEqual(dateRange, prevDateRange)) {\r\n      return false;\r\n    }\r\n    return true;\r\n  };\r\n\r\n  isFetchSingleTile = (prevState) => {\r\n    const {\r\n      dateRange: prevDateRange,\r\n    } = prevState;\r\n\r\n    const {\r\n      dateRange,\r\n    } = this.state;\r\n\r\n    if (!_.isEqual(dateRange, prevDateRange)) {\r\n      return false;\r\n    }\r\n    return true;\r\n  };\r\n\r\n  updateCurrentMenuItems = (isMenuItemNeeded) => {\r\n    if (isMenuItemNeeded) {\r\n      const { selectedMenuItem } = this.state;\r\n      this.currentMenuItems = this.defaultMenuItems;\r\n      _.each(this.currentMenuItems, (item) => {\r\n        if (item.action === selectedMenuItem) {\r\n        // eslint-disable-next-line no-param-reassign\r\n          item.preset = true;\r\n        } else {\r\n        // eslint-disable-next-line no-param-reassign\r\n          item.preset = false;\r\n        }\r\n      });\r\n      this.triggerChangeMenuItem(this.currentMenuItems);\r\n    } else {\r\n      this.currentMenuItems = [];\r\n      this.triggerChangeMenuItem(this.currentMenuItems);\r\n    }\r\n  };\r\n\r\n  fetchTileData = (fetchSingleTile) => {\r\n    const {\r\n      dateRange,\r\n      selectedMenuItem,\r\n      metric,\r\n    } = this.state;\r\n\r\n    if (!dateRange) { return; }\r\n    if (!this.fetch) { return; }\r\n\r\n    this.blockCard();\r\n    this.willFetchData();\r\n\r\n    this.fetch({\r\n      dateRange,\r\n      metric,\r\n      selectedMenuItem,\r\n      fetchSingleTile,\r\n    }).then((data) => {\r\n      if (data) {\r\n        this.setState({\r\n          dataLoaded: true,\r\n          data,\r\n        });\r\n      }\r\n    }).finally(() => {\r\n      this.renderedWithData();\r\n      this.unblockCard();\r\n    });\r\n  };\r\n\r\n  handleUpdate = ({ dateRange, metric, selectedMenuItem }) => {\r\n    if (dateRange) {\r\n      this.setState({ dateRange });\r\n    } else if (metric) {\r\n      this.setState({ metric });\r\n    } else if (selectedMenuItem) {\r\n      this.setState({ selectedMenuItem });\r\n      this.updateCurrentMenuItems(true);\r\n    }\r\n  };\r\n\r\n  render() {\r\n    const { dataLoaded } = this.state;\r\n    if (!dataLoaded) {\r\n      return (<div className=\"conversion-tracking-card-data-loading\" />);\r\n    }\r\n\r\n    const {\r\n      data: {\r\n        ConversionGoalCategoryResults,\r\n        ConversionGoalTrackingStatusSummaries,\r\n        NoConversionGoalsExist,\r\n        NoConversionGoalsWithRevenue,\r\n      },\r\n    } = this.state;\r\n\r\n    const {\r\n      newI18n,\r\n      i18n,\r\n      permissions,\r\n      deps,\r\n      instrumentationLog,\r\n    } = this;\r\n\r\n    if (NoConversionGoalsExist) {\r\n      this.updateCurrentMenuItems(false);\r\n\r\n      return (\r\n        <EmptyState\r\n          i18n={i18n}\r\n          newI18n={newI18n}\r\n          router={deps.legacyRouter}\r\n          pageContext={deps.pageContext}\r\n          instrumentationLog={instrumentationLog}\r\n          permissions={permissions}\r\n          blockCard={this.blockCard}\r\n          willFetchData={this.willFetchData}\r\n          renderedWithData={this.renderedWithData}\r\n          unblockCard={this.unblockCard}\r\n        />\r\n      );\r\n    }\r\n\r\n    const {\r\n      dateRange,\r\n      metric,\r\n      selectedMenuItem,\r\n    } = this.state;\r\n\r\n    const {\r\n      entitySet,\r\n      updateCurrentMenuItems,\r\n      TrackingTypeFilterStore,\r\n      GoalCategoryFilterStore,\r\n    } = this;\r\n\r\n    return (\r\n      <ConversionTrackingState\r\n        dateRange={dateRange}\r\n        categoryResults={ConversionGoalCategoryResults}\r\n        statusSummaries={ConversionGoalTrackingStatusSummaries}\r\n        noConversionGoalsWithRevenue={NoConversionGoalsWithRevenue}\r\n        metric={metric}\r\n        selectedMenuItem={selectedMenuItem}\r\n        updateCurrentMenuItems={updateCurrentMenuItems}\r\n        updateMetric={(newMetric) => { this.handleUpdate({ metric: newMetric }); }}\r\n\r\n        deps={deps}\r\n        entitySet={entitySet}\r\n        i18n={i18n}\r\n        newI18n={newI18n}\r\n        permissions={permissions}\r\n        instrumentationLog={instrumentationLog}\r\n        TrackingTypeFilterStore={TrackingTypeFilterStore}\r\n        GoalCategoryFilterStore={GoalCategoryFilterStore}\r\n      />\r\n    );\r\n  }\r\n}\r\n\r\nConversionTrackingCard.defaultProps = {\r\n  metric: conversionDefaultOptions.metric,\r\n  selectedMenuItem: conversionDefaultOptions.selectedMenuItem,\r\n  dateRange: {},\r\n  triggerChangeMenuItem: _.noop,\r\n  blockCard: _.noop,\r\n  willFetchData: _.noop,\r\n  renderedWithData: _.noop,\r\n  unblockCard: _.noop,\r\n  triggerChangeMetric: _.noop,\r\n  fetch: _.noop,\r\n  TrackingTypeFilterStore: _.noop,\r\n  GoalCategoryFilterStore: _.noop,\r\n  fetchSingleTile: false,\r\n};\r\n\r\nConversionTrackingCard.propTypes = {\r\n  metric: PropTypes.string,\r\n  selectedMenuItem: PropTypes.string,\r\n  fetchSingleTile: PropTypes.bool,\r\n  dateRange: PropTypes.shape({\r\n    RangeStartDate: PropTypes.string,\r\n    RangeEndDate: PropTypes.string,\r\n    RangeId: PropTypes.number,\r\n    Rangelcid: PropTypes.number,\r\n    compared: PropTypes.bool,\r\n    start: PropTypes.objectOf(Date),\r\n    end: PropTypes.objectOf(Date),\r\n    grain: PropTypes.number,\r\n  }),\r\n  i18n: PropTypes.shape({\r\n    getString: PropTypes.func.isRequired,\r\n  }).isRequired,\r\n  deps: PropTypes.shape({\r\n    constants: PropTypes.shape({}).isRequired,\r\n    instrumentation: PropTypes.shape({}).isRequired,\r\n  }).isRequired,\r\n  entitySet: PropTypes.shape({}).isRequired,\r\n  permissions: PropTypes.shape({}).isRequired,\r\n  triggerChangeMenuItem: PropTypes.func,\r\n  blockCard: PropTypes.func,\r\n  willFetchData: PropTypes.func,\r\n  renderedWithData: PropTypes.func,\r\n  unblockCard: PropTypes.func,\r\n  newI18n: PropTypes.shape({\r\n    getString: PropTypes.func.isRequired,\r\n  }).isRequired,\r\n  triggerChangeMetric: PropTypes.func,\r\n  fetch: PropTypes.func,\r\n  TrackingTypeFilterStore: PropTypes.func,\r\n  GoalCategoryFilterStore: PropTypes.func,\r\n};\r\n\r\nexport default ConversionTrackingCard;\r\n","export const InstrumentationLog = ({ instrumentation, constants }) => ({\r\n  SetUpConversionClicked: (hasCoupons) => {\r\n    instrumentation.logMessage([constants.LOGCATEGORY.TRACE], constants.LOGLEVEL.INFO, 'conversion-tracking-card', `Set up conversions is clicked ${hasCoupons ? 'with coupons' : 'without coupons'}`);\r\n  },\r\n  CouponIsShown: () => {\r\n    instrumentation.logMessage([constants.LOGCATEGORY.TRACE], constants.LOGLEVEL.INFO, 'conversion-tracking-card', 'Coupon is shown - setup page');\r\n  },\r\n  NoCoupon: () => {\r\n    instrumentation.logMessage([constants.LOGCATEGORY.TRACE], constants.LOGLEVEL.INFO, 'conversion-tracking-card', 'No Coupon - setup page');\r\n  },\r\n  ManageConversionsClicked: () => {\r\n    instrumentation.logMessage([constants.LOGCATEGORY.TRACE], constants.LOGLEVEL.INFO, 'conversion-tracking-card', 'Manage conversions is clicked');\r\n  },\r\n  SeeAllClicked: (errorType) => {\r\n    instrumentation.logMessage([constants.LOGCATEGORY.TRACE], constants.LOGLEVEL.INFO, 'conversion-tracking-card', `See all is clicked for type ${errorType}`);\r\n  },\r\n  GridNameClicked: (category) => {\r\n    instrumentation.logMessage([constants.LOGCATEGORY.TRACE], constants.LOGLEVEL.INFO, 'conversion-tracking-card', `Grid name is clicked for type ${category}`);\r\n  },\r\n  Error: (response) => {\r\n    instrumentation.logMessage([constants.LOGCATEGORY.ERROR], constants.LOGLEVEL.INFO, 'conversion-tracking-card-error', response);\r\n  },\r\n});\r\n","/* eslint-disable jsx-a11y/anchor-has-content */\r\n/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport _ from 'underscore';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { BaseCard } from '@bingads-webui-campaign/overview-base-card';\r\nimport { fetchConversionTracking, getConversionGoalsFilterStore } from '@bingads-webui-campaign/overview-cards-common';\r\nimport { HelpLink } from '@bingads-webui-react/help-link';\r\nimport ConversionTrackingCardReact from './conversion-tracking-card-react/conversion-tracking-card';\r\n\r\nconst layoutSize = {\r\n  small: 0,\r\n  large: 1,\r\n};\r\nconst layoutBreakPoint = 800;\r\n\r\nfunction getLayoutSize() {\r\n  if (this.$el.closest('.card-holder__wrapper').outerWidth() < layoutBreakPoint) {\r\n    return layoutSize.small;\r\n  }\r\n  return layoutSize.large;\r\n}\r\n\r\nconst conversionTileFetch = ({\r\n  entitySet,\r\n  filter,\r\n  jsdata,\r\n  getCardsConfig,\r\n  dateUtil,\r\n  permissions,\r\n  disableCache,\r\n  cacheManager,\r\n  accountsMode,\r\n  typeId,\r\n}) => {\r\n  const fetch = ({\r\n    dateRange,\r\n    metric,\r\n    selectedMenuItem,\r\n    fetchSingleTile = false,\r\n  }) => fetchConversionTracking({\r\n    dateRange,\r\n    selectedMenuItem,\r\n    metric,\r\n\r\n    entitySet,\r\n    filter,\r\n    jsdata,\r\n    getCardsConfig,\r\n    dateUtil,\r\n    fetchSingleTile,\r\n    permissions,\r\n    disableCache,\r\n    cacheManager,\r\n    accountsMode,\r\n    dfmCacheKey: typeId,\r\n  });\r\n\r\n  return fetch;\r\n};\r\n\r\nexport class ConversionTrackingCard extends BaseCard {\r\n  get className() {\r\n    return 'conversion-tracking-card';\r\n  }\r\n\r\n  get menuItems() {\r\n    if (this.viewRef.current) {\r\n      const items = this.viewRef.current.getMenuItems();\r\n      if (_.isEmpty(items)) {\r\n        return null;\r\n      }\r\n      return items;\r\n    }\r\n    return null;\r\n  }\r\n\r\n  onMenuAction(menuItem) {\r\n    if (this.viewRef.current) {\r\n      const { selectedMenuItem } = this.viewRef.current.state;\r\n      if (selectedMenuItem === menuItem) {\r\n        return;\r\n      }\r\n      this.viewRef.current.handleUpdate({\r\n        selectedMenuItem: menuItem,\r\n      });\r\n    }\r\n  }\r\n\r\n  getCardPreference() {\r\n    if (this.viewRef.current) {\r\n      const { selectedMenuItem, metric } = this.getState();\r\n\r\n      return {\r\n        metric,\r\n        selectedMenuItem,\r\n      };\r\n    }\r\n    return {};\r\n  }\r\n\r\n  initialize(props) {\r\n    const {\r\n      // entitySet,\r\n      // metric,\r\n      // selectedMenuItem,\r\n      // dateRange,\r\n      // filter,\r\n      perfMarker,\r\n      name,\r\n      sharedOptions,\r\n      deps,\r\n      // accountsMode,\r\n      // scope,\r\n      // dismissLastFluctuation = false,\r\n      // typeId,\r\n      // newI18n,\r\n      preferenceService,\r\n    } = props;\r\n\r\n    const {\r\n      i18n,\r\n      jsdata,\r\n      dateUtil,\r\n      cacheManager,\r\n      config,\r\n    } = deps;\r\n\r\n    const permissions = config && config.get('Permissions');\r\n    const { getCardsConfig } = sharedOptions;\r\n    this.initPerfMarker({ perfMarker, name });\r\n    this.viewRef = React.createRef();\r\n    const conversionGoalsFilterStore = getConversionGoalsFilterStore({ preferenceService });\r\n\r\n    this.view = (\r\n      <React.Fragment>\r\n        <HelpLink className=\"hiddenHelpBridge\" style={{ display: 'none' }} tabIndex={-1} query=\"help:app54555\" ariaLabel=\"Click to learn more about conversion tracking tile\" />\r\n        <ConversionTrackingCardReact\r\n          ref={this.viewRef}\r\n          i18n={i18n}\r\n          deps={deps}\r\n          getCardsConfig={getCardsConfig}\r\n          permissions={permissions}\r\n          fetch={conversionTileFetch({\r\n            ...props,\r\n            jsdata,\r\n            dateUtil,\r\n            cacheManager,\r\n            permissions,\r\n            getCardsConfig,\r\n          })}\r\n          {...props}\r\n          triggerChangeMenuItem={(menuItems) => {\r\n            this.trigger('change:menuItems', {\r\n              value: menuItems,\r\n              options: { replace: true },\r\n            });\r\n          }}\r\n          triggerChangeMetric={(newMetric) => {\r\n            this.trigger('pick', {\r\n              metric: newMetric,\r\n            });\r\n          }}\r\n          triggerPreferenceChange={() => {\r\n            this.trigger('storeCardPreference', this.getCardPreference());\r\n          }}\r\n          blockCard={() => {\r\n            this.blockCard();\r\n          }}\r\n          willFetchData={() => {\r\n            this.willFetchData();\r\n          }}\r\n          renderedWithData={() => {\r\n            this.renderedWithData();\r\n          }}\r\n          unblockCard={() => {\r\n            this.unblockCard();\r\n          }}\r\n          TrackingTypeFilterStore={(errorType) => {\r\n            if (errorType) {\r\n              const newErrorTypeFilter = {\r\n                TrackingStatus: {\r\n                  $in: [`Enum.GoalTrackingStatus'${errorType}'`],\r\n                },\r\n              };\r\n\r\n              conversionGoalsFilterStore.save({ query: newErrorTypeFilter });\r\n            }\r\n          }}\r\n          GoalCategoryFilterStore={(category) => {\r\n            if (category) {\r\n              const newCategoryFilter = {\r\n                GoalCategory: {\r\n                  $in: [`Enum.GoalCategory'${category}'`],\r\n                },\r\n              };\r\n\r\n              conversionGoalsFilterStore.save({ query: newCategoryFilter });\r\n            }\r\n          }}\r\n        />\r\n      </React.Fragment>\r\n    );\r\n\r\n    this.onResize(() => {\r\n      this.relayout();\r\n    });\r\n  }\r\n\r\n  relayout() {\r\n    const newLayoutSize = getLayoutSize.call(this);\r\n\r\n    if (this.currentLayoutSize === newLayoutSize) {\r\n      return;\r\n    }\r\n\r\n    if (newLayoutSize === layoutSize.small) {\r\n      this.$el.addClass('small_layout');\r\n    } else {\r\n      this.$el.removeClass('small_layout');\r\n    }\r\n\r\n    this.currentLayoutSize = newLayoutSize;\r\n  }\r\n\r\n  setState(state) {\r\n    if (this.viewRef.current) {\r\n      this.viewRef.current.handleUpdate(state);\r\n    }\r\n    return this;\r\n  }\r\n\r\n  renderTrunk() {\r\n    ReactDOM.render(this.view, this.el);\r\n    _.defer(() => {\r\n      this.relayout();\r\n    });\r\n  }\r\n\r\n  remove() {\r\n    ReactDOM.unmountComponentAtNode(this.el);\r\n    return super.remove();\r\n  }\r\n}\r\n","import _ from 'underscore';\r\nimport React, { useEffect, useCallback } from 'react';\r\nimport classNames from 'classnames';\r\nimport { makeStyles } from '@fluentui/react-components';\r\nimport PropTypes from 'prop-types';\r\nimport { fetchConversionTracking, getConversionGoalsFilterStore } from '@bingads-webui-campaign/overview-cards-common';\r\nimport { withDelayedStyles } from '@bingads-webui-campaign-react/common-utils';\r\nimport { getConversionTrackingCardStyle, metricPickerFluentV2Style } from '@bingads-webui-campaign-react/overview-card-styles';\r\nimport { useHeaderStateContext } from '@bingads-webui-campaign-react/overview-card';\r\n\r\nimport ConversionTrackingCardReact from './conversion-tracking-card-react/conversion-tracking-card';\r\n\r\n// Most of the content styles are from existing conversion tracking card\r\nconst getDefaultStyles = (_, { palette = {} }) => ({\r\n  '@global': Object.assign(\r\n    getConversionTrackingCardStyle(palette),\r\n    metricPickerFluentV2Style\r\n  ),\r\n});\r\n\r\nexport const useStyles = makeStyles({\r\n  cardContent: {\r\n    // to make sure empty state flex container can take full height from parent\r\n    // flex element can take 100% height from parent only if parent has fixed height\r\n    height: '307px',\r\n    '& .conversion-tracking-state': {\r\n      // to make the container height fixed with 377px, this is from Figma.\r\n      height: '307px',\r\n\r\n      '& .carousel-footer': {\r\n        paddingBottom: '0px !important',\r\n      },\r\n    },\r\n\r\n    '& .conversion-empty-state': {\r\n      paddingBottom: '0px !important',\r\n    },\r\n\r\n    // TODO: [yaoyao] add shimmer for loading status\r\n    // https://msasg.visualstudio.com/Bing_Ads/_workitems/edit/7173186\r\n    '& .conversion-tracking-card-data-loading': {\r\n      height: '307px',\r\n    },\r\n  },\r\n  smallSizeCard: {\r\n    '& .pop-range': {\r\n      display: 'none',\r\n    },\r\n  },\r\n});\r\n\r\nconst conversionTileFetch = ({\r\n  entitySet,\r\n  filter,\r\n  campaignType,\r\n  jsdata,\r\n  getCardsConfig,\r\n  dateUtil,\r\n  permissions,\r\n  disableCache,\r\n  cacheManager,\r\n  // 1 for expert mode, we don't expect to have smart mode account anymore\r\n  accountsMode = 1,\r\n  typeId,\r\n}) => {\r\n  const fetch = ({\r\n    dateRange,\r\n    metric,\r\n    selectedMenuItem,\r\n    fetchSingleTile = false,\r\n  }) => fetchConversionTracking({\r\n    dateRange,\r\n    selectedMenuItem,\r\n    metric,\r\n    entitySet,\r\n    filter,\r\n    campaignType,\r\n    jsdata,\r\n    getCardsConfig,\r\n    dateUtil,\r\n    fetchSingleTile,\r\n    permissions,\r\n    disableCache,\r\n    cacheManager,\r\n    accountsMode,\r\n    dfmCacheKey: typeId,\r\n  });\r\n\r\n  return fetch;\r\n};\r\n\r\nfunction ConversionTrackingCardFluentInternal({\r\n  getCardsConfig,\r\n  i18n,\r\n  permissions,\r\n  preferenceService,\r\n  deps,\r\n  jsdata,\r\n  dateUtil,\r\n  dateRange,\r\n  filter,\r\n  campaignType,\r\n  constructOptions,\r\n  cacheManager,\r\n  legacyI18n,\r\n  cardTypeId,\r\n  perfMarkerUtils,\r\n  responsiveSize,\r\n}) {\r\n  const conversionGoalsFilterStore = getConversionGoalsFilterStore({ preferenceService });\r\n  const {\r\n    entitySet,\r\n  } = constructOptions();\r\n  const classes = useStyles();\r\n  const headerState = useHeaderStateContext();\r\n  const viewRef = React.createRef();\r\n  const {\r\n    willFetchData,\r\n    willRender,\r\n    done,\r\n  } = perfMarkerUtils;\r\n  // For size larger than l, we split into columns, so we don't show range column\r\n  // For size smaller than l, we don't have enough space to show range column\r\n  const hideRangeColumn = responsiveSize !== 'l';\r\n\r\n  useEffect(() => {\r\n    if (viewRef.current && headerState && headerState.selectedItemValue) {\r\n      viewRef.current.handleUpdate({\r\n        selectedMenuItem: headerState.selectedItemValue,\r\n      });\r\n    }\r\n  }, [headerState, viewRef]);\r\n\r\n  useEffect(() => {\r\n    if (viewRef.current && dateRange) {\r\n      viewRef.current.handleUpdate({\r\n        dateRange,\r\n      });\r\n    }\r\n  }, [dateRange, viewRef]);\r\n\r\n  const triggerChangeMenuItem = useCallback((menuItem) => {\r\n    if (headerState && _.isFunction(headerState.setHidden)) {\r\n      headerState.setHidden(!(menuItem && menuItem.length));\r\n    }\r\n  }, [headerState]);\r\n\r\n  if (!headerState) {\r\n    return null;\r\n  }\r\n\r\n  return (\r\n    <div className={classNames('conversion-tracking-card', classes.cardContent, { [classes.smallSizeCard]: hideRangeColumn })}>\r\n      <ConversionTrackingCardReact\r\n        ref={viewRef}\r\n        newI18n={i18n}\r\n        i18n={legacyI18n}\r\n        deps={deps}\r\n        getCardsConfig={getCardsConfig}\r\n        dateRange={dateRange}\r\n        permissions={permissions}\r\n        entitySet={entitySet}\r\n        triggerChangeMenuItem={triggerChangeMenuItem}\r\n        fetch={conversionTileFetch({\r\n          entitySet,\r\n          filter,\r\n          campaignType,\r\n          jsdata,\r\n          getCardsConfig,\r\n          dateUtil,\r\n          permissions,\r\n          cacheManager,\r\n          typeId: cardTypeId,\r\n        })}\r\n        willFetchData={() => {\r\n          willFetchData();\r\n        }}\r\n        renderedWithData={() => {\r\n          willRender();\r\n          done();\r\n        }}\r\n        TrackingTypeFilterStore={(errorType) => {\r\n          if (errorType) {\r\n            const newErrorTypeFilter = {\r\n              TrackingStatus: {\r\n                $in: [`Enum.GoalTrackingStatus'${errorType}'`],\r\n              },\r\n            };\r\n\r\n            conversionGoalsFilterStore.save({ query: newErrorTypeFilter });\r\n          }\r\n        }}\r\n        GoalCategoryFilterStore={(category) => {\r\n          if (category) {\r\n            const newCategoryFilter = {\r\n              GoalCategory: {\r\n                $in: [`Enum.GoalCategory'${category}'`],\r\n              },\r\n            };\r\n\r\n            conversionGoalsFilterStore.save({ query: newCategoryFilter });\r\n          }\r\n        }}\r\n      />\r\n    </div>\r\n  );\r\n}\r\n\r\nConversionTrackingCardFluentInternal.propTypes = {\r\n  i18n: PropTypes.shape({\r\n    getString: PropTypes.func.isRequired,\r\n  }).isRequired,\r\n  perfMarkerUtils: PropTypes.shape({\r\n    willFetchData: PropTypes.func.isRequired,\r\n    willRender: PropTypes.func.isRequired,\r\n    done: PropTypes.func.isRequired,\r\n  }).isRequired,\r\n  getCardsConfig: PropTypes.func.isRequired,\r\n  permissions: PropTypes.shape({}).isRequired,\r\n  preferenceService: PropTypes.shape({}).isRequired,\r\n  deps: PropTypes.shape({\r\n    constants: PropTypes.shape({}).isRequired,\r\n    instrumentation: PropTypes.shape({}).isRequired,\r\n  }).isRequired,\r\n  jsdata: PropTypes.shape({}).isRequired,\r\n  dateUtil: PropTypes.shape({}).isRequired,\r\n  dateRange: PropTypes.shape({\r\n    RangeStartDate: PropTypes.string,\r\n    RangeEndDate: PropTypes.string,\r\n    RangeId: PropTypes.number,\r\n    Rangelcid: PropTypes.number,\r\n    compared: PropTypes.shape({}),\r\n    start: PropTypes.objectOf(Date),\r\n    end: PropTypes.objectOf(Date),\r\n    grain: PropTypes.number,\r\n  }).isRequired,\r\n  filter: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n  campaignType: PropTypes.oneOfType([\r\n    PropTypes.number,\r\n    PropTypes.string,\r\n  ]).isRequired,\r\n  constructOptions: PropTypes.func.isRequired,\r\n  cacheManager: PropTypes.shape({}).isRequired,\r\n  legacyI18n: PropTypes.shape({}).isRequired,\r\n  cardTypeId: PropTypes.string.isRequired,\r\n  responsiveSize: PropTypes.string.isRequired,\r\n};\r\n\r\nexport const ConversionTrackingCardFluent = withDelayedStyles(ConversionTrackingCardFluentInternal, getDefaultStyles);\r\n","import _ from 'underscore';\r\nimport { MetricPicker } from '@bingads-webui-campaign/overview-metric-picker';\r\nimport { DeterministicView, helpers } from '@bingads-webui/deterministic-view';\r\nimport template from './template-v2.pug';\r\nimport metricPickerButtonTemplate from './metric-picker-button-template.pug';\r\n\r\nexport default class DeviceMetricView extends DeterministicView {\r\n  constructor(options) {\r\n    super(_.extend({}, options, { renderInSync: true }));\r\n  }\r\n\r\n  initialize({\r\n    metricFormatter,\r\n    s$i18n,\r\n    i18n,\r\n    deps,\r\n  }) {\r\n    this.metricFormatter = metricFormatter;\r\n    this.s$i18n = s$i18n;\r\n    this.i18n = i18n;\r\n    this.deps = deps;\r\n  }\r\n\r\n  get className() {\r\n    return 'device-metric';\r\n  }\r\n\r\n  get template() {\r\n    return template;\r\n  }\r\n\r\n  setState({\r\n    metric,\r\n    metrics,\r\n    hideCurrency,\r\n  } = {}) {\r\n    helpers.updateView(helpers.ensureChildView(this, 'metric-picker', MetricPicker, {\r\n      metric,\r\n      metrics,\r\n      buttonTemplate: metricPickerButtonTemplate,\r\n      metricFormatter: this.metricFormatter,\r\n      s$i18n: this.s$i18n,\r\n      i18n: this.i18n,\r\n      deps: this.deps,\r\n    }, {\r\n      pick: ({ metric: picked }) => {\r\n        super.setState({ metric: picked });\r\n        this.trigger('pick', { metric: picked });\r\n      },\r\n    }), {\r\n      metric,\r\n      metrics,\r\n      hideCurrency,\r\n    });\r\n\r\n    return super.setState({\r\n      metric,\r\n    });\r\n  }\r\n\r\n  renderTrunk() {\r\n    this.$el.html(this.template());\r\n    return this;\r\n  }\r\n}\r\n","import { isXandrVideoAdsCampaign } from '@bingads-webui-campaign-react/constants';\r\n\r\nexport const getDeviceOrder = ({\r\n  permissions,\r\n  navigationLevel,\r\n  currentCampaign,\r\n}) => {\r\n  const order = ['Computer', 'Tablet', 'SmartPhone'];\r\n\r\n  if (permissions.dynamic.XandrVideoCampaigns &&\r\n      (navigationLevel !== 'campaign' ||\r\n      (currentCampaign && isXandrVideoAdsCampaign(currentCampaign.CampaignSubType)))\r\n  ) {\r\n    order.push('ConnectedTV');\r\n  }\r\n  return order;\r\n};\r\n","import _ from 'underscore';\r\nimport $ from 'jquery';\r\nimport { BaseCard } from '@bingads-webui-campaign/overview-base-card';\r\nimport { helpers } from '@bingads-webui/deterministic-view';\r\nimport { getFilteredTotalsMetrics, fetchAggregatedData, allMetrics, patchMetrics } from '@bingads-webui-campaign/overview-cards-common';\r\nimport SingleMetric from './metric/index';\r\nimport template from './template.pug';\r\nimport { getDeviceOrder } from './order';\r\n\r\nconst defaultMetrics = ['Clicks', 'Impressions', 'Spend'];\r\nconst layoutSize = {\r\n  small: 0,\r\n  large: 1,\r\n};\r\nconst graphLayoutBreakPoint = 100;\r\nconst smallLayoutBreakPoint = 585;\r\n\r\n/* @this DeviceCard */\r\nfunction getGraphLayoutSize() {\r\n  if (this.$('.device-graph-legend-container').outerWidth() < graphLayoutBreakPoint) {\r\n    return layoutSize.small;\r\n  }\r\n  return layoutSize.large;\r\n}\r\n\r\n/* @this TipsCard */\r\nfunction getLayoutSize() {\r\n  if (this.$el.closest('.card-holder__wrapper').outerWidth() < smallLayoutBreakPoint) {\r\n    return layoutSize.small;\r\n  }\r\n  return layoutSize.large;\r\n}\r\n\r\n/* @this DeviceCard */\r\nfunction reLayoutGraph() {\r\n  const newLayoutSize = getGraphLayoutSize.call(this);\r\n\r\n  if (this.currentGraphLayoutSize === newLayoutSize) {\r\n    return;\r\n  }\r\n\r\n  if (newLayoutSize === layoutSize.small) {\r\n    this.$('.device-graph-legend-container').addClass('small_graph');\r\n  } else {\r\n    this.$('.device-graph-legend-container').removeClass('small_graph');\r\n  }\r\n\r\n  this.currentGraphLayoutSize = newLayoutSize;\r\n}\r\n\r\nfunction isAggregatedMetric(metric) {\r\n  return _.indexOf(['CTR', 'ConversionRate', 'RevenueOnAdSpend', 'AverageCPC', 'AveragePosition'], metric) !== -1;\r\n}\r\n\r\n/* @this DeviceCard */\r\nfunction reLayout() {\r\n  reLayoutGraph.call(this);\r\n\r\n  const newLayoutSize = getLayoutSize.call(this);\r\n\r\n  if (newLayoutSize === this.currentLayoutSize) {\r\n    return;\r\n  }\r\n\r\n  if (newLayoutSize === layoutSize.small) {\r\n    this.$el.addClass('small_layout');\r\n  } else {\r\n    this.$el.removeClass('small_layout');\r\n  }\r\n\r\n  this.currentLayoutSize = newLayoutSize;\r\n}\r\n\r\n/* @this DeviceCard */\r\nfunction updateView() {\r\n  const currentMetrics = this.getState().metrics;\r\n  const { i18n } = this.deps;\r\n\r\n  this.children = [];\r\n  _.each(currentMetrics, (metric, index) => {\r\n    const child = helpers.ensureChildView(this, String(index), SingleMetric, {\r\n      metricFormatter: this.deps.metricFormatter,\r\n      s$i18n: this.deps.s$i18n,\r\n      i18n,\r\n    }, {\r\n      pick: ({ metric: picked }) => {\r\n        const metricsWhenPick = _.clone(this.getState().metrics);\r\n\r\n        metricsWhenPick[index] = picked;\r\n\r\n        const { instrumentation, constants } = this.deps;\r\n\r\n        instrumentation.logMessage(\r\n          [constants.LOGCATEGORY.TRACE],\r\n          constants.LOGLEVEL.INFO,\r\n          'device-card',\r\n          `${this.navigationLevel} level new metric picked.`\r\n        );\r\n        helpers.updateView(this, {\r\n          metrics: metricsWhenPick,\r\n        });\r\n        this.trigger('storeCardPreference', { metrics: metricsWhenPick });\r\n        const actionButton = this.$('.view-all-clickLink');\r\n        if (actionButton.length > 0) {\r\n          actionButton.focus();\r\n        }\r\n      },\r\n    });\r\n\r\n    this.children.push(child);\r\n\r\n    helpers.updateView(child, {\r\n      metric,\r\n      segmentedPerformanceMetrics: this.performanceMetrics.SegmentedData,\r\n      metrics: _.difference(allMetrics(this.permissions), currentMetrics),\r\n      hideCurrency: this.hideCurrency,\r\n    });\r\n  });\r\n\r\n  const { dateRange } = this.getState();\r\n\r\n  if (!dateRange) {\r\n    return;\r\n  }\r\n\r\n  const formatOption = {\r\n    hideCurrency: this.hideCurrency,\r\n  };\r\n\r\n  this.data = _.map(getDeviceOrder({\r\n    permissions: this.permissions,\r\n    navigationLevel: this.navigationLevel,\r\n    currentCampaign: this.currentCampaign,\r\n  }), (deviceType) => {\r\n    const { Data: segmentedData } = _.find(\r\n      this.performanceMetrics.SegmentedData,\r\n      ({ Key }) => Key[0].StringValue === deviceType\r\n    ) || { Data: {} };\r\n\r\n    let segmentedPeriodData = {};\r\n    let segmentedChangePercentageData = {};\r\n\r\n    if (dateRange.compared) {\r\n      const { Data: periodData } = _.find(\r\n        this.periodPerformanceMetrics.SegmentedData,\r\n        ({ Key }) => Key[0].StringValue === deviceType\r\n      ) || { Data: {} };\r\n\r\n      segmentedPeriodData = periodData;\r\n\r\n      const { Data: changePercentageData } = _.find(\r\n        this.performanceMetricsChangePercentage.SegmentedData,\r\n        ({ Key }) => Key[0].StringValue === deviceType\r\n      ) || { Data: {} };\r\n\r\n      segmentedChangePercentageData = changePercentageData;\r\n    }\r\n\r\n    const formattedData = {};\r\n    const formattedPeriodData = {};\r\n\r\n    _.each(currentMetrics, (metric) => {\r\n      const { metricFormatter } = this.deps;\r\n      const value = segmentedData[metric] || 0;\r\n      let flexValue = 0;\r\n\r\n      if (!isAggregatedMetric(metric) && this.performanceMetrics[metric]) {\r\n        flexValue = Math.round((value * 10000) / this.performanceMetrics[metric]);\r\n      }\r\n\r\n      const formattedSegment = metricFormatter.formatMetric(metric, value, formatOption);\r\n      const formattedHoverValue = isAggregatedMetric(metric) ? formattedSegment :\r\n        `${formattedSegment} (${i18n.getString(\r\n          'Dashboard_DeviceCard_Percentage_Total',\r\n          {\r\n            percentage: i18n.formatPercent(flexValue / 10000, {\r\n              maximumFractionDigits: 2,\r\n              minimumFractionDigits: 2,\r\n            }),\r\n          }\r\n        )})`;\r\n\r\n      formattedData[metric] = {};\r\n      _.extend(formattedData[metric], {\r\n        metric,\r\n        value,\r\n        formattedSegment,\r\n        flexValue: !value ? 0 : Math.max(flexValue, 1),\r\n        formattedHoverValue,\r\n      });\r\n\r\n      if (dateRange.compared) {\r\n        const periodValue = segmentedPeriodData[metric] || 0;\r\n        let periodFlexValue = 0;\r\n\r\n        if (!isAggregatedMetric(metric) && this.periodPerformanceMetrics[metric]) {\r\n          periodFlexValue = Math.round((periodValue * 10000) / this.periodPerformanceMetrics[metric]);\r\n        }\r\n\r\n        const formattedPeriodSegment = metricFormatter.formatMetric(\r\n          metric,\r\n          periodValue,\r\n          formatOption\r\n        );\r\n\r\n        const formattedPeriodHoverValue = isAggregatedMetric(metric) ? formattedPeriodSegment :\r\n          `${formattedPeriodSegment} (${i18n.getString(\r\n            'Dashboard_DeviceCard_Percentage_Total',\r\n            {\r\n              percentage: i18n.formatPercent(periodFlexValue / 10000, {\r\n                maximumFractionDigits: 2,\r\n                minimumFractionDigits: 2,\r\n              }),\r\n            }\r\n          )})`;\r\n\r\n        formattedPeriodData[metric] = {};\r\n        _.extend(formattedPeriodData[metric], {\r\n          metric,\r\n          value: periodValue,\r\n          changePercentage: segmentedChangePercentageData[metric],\r\n          formattedChangePercentage: `(${metricFormatter.formatChangePercentageWithSign(segmentedChangePercentageData[metric] || 0)})`,\r\n          formattedChange: metricFormatter.formatMetricWithSign(metric, value - periodValue),\r\n          formattedSegment: formattedPeriodSegment,\r\n          flexValue: !periodValue ? 0 : Math.max(periodFlexValue, 1),\r\n          formattedHoverValue: formattedPeriodHoverValue,\r\n        });\r\n      }\r\n    });\r\n    const returnValue = { formattedData };\r\n\r\n    if (dateRange.compared) {\r\n      _.extend(returnValue, { formattedPeriodData });\r\n    }\r\n    return returnValue;\r\n  });\r\n\r\n  const formattedDateRange = `${i18n.formatDate(dateRange.start)} - ${i18n.formatDate(dateRange.end)}`;\r\n  const formattedPeriodDateRange = dateRange.compared ? `${dateRange.compared.formattedStart} - ${dateRange.compared.formattedEnd}` : null;\r\n\r\n  _.extend(this.data, {\r\n    formattedDateRange,\r\n    formattedPeriodDateRange,\r\n  });\r\n  this.loaded = true;\r\n  this.render();\r\n}\r\n\r\n/* @this DeviceCard */\r\nfunction loadData() {\r\n  const {\r\n    dateRange,\r\n    filter,\r\n  } = this.getState();\r\n  const { instrumentation, constants, config } = this.deps;\r\n\r\n  this.blockCard();\r\n  this.willFetchData();\r\n  fetchAggregatedData({\r\n    entitySet: this.entitySet,\r\n    dateRange,\r\n    filter,\r\n    jsdata: this.deps.jsdata,\r\n    dateUtil: this.deps.dateUtil,\r\n    navigationLevel: this.navigationLevel,\r\n    getCardsConfig: this.sharedOptions.getCardsConfig,\r\n    fetchSingleTile: this.fetchSingleTile,\r\n    isDevice: true,\r\n    permissions: config && config.get('Permissions'),\r\n    dfmCacheKey: `${this.typeId}-aggregated-data`,\r\n  }).finally(() => {\r\n    this.unblockCard();\r\n  }).then((data) => {\r\n    this.hasError = false;\r\n    if (this.removed) {\r\n      return;\r\n    }\r\n\r\n    if (data.status !== null && data.status !== undefined) {\r\n      // If we have error status. Those are already logged in ajax stub.\r\n      // Add a trace log.\r\n      this.hasError = true;\r\n      updateView.call(this);\r\n      instrumentation.logMessage([constants.LOGCATEGORY.TRACE], constants.LOGLEVEL.INFO, 'device-card', JSON.stringify(data));\r\n      return;\r\n    }\r\n\r\n    if (!data.raw && !data.DeviceSegmentedPerformanceData) {\r\n      this.hasError = true;\r\n      updateView.call(this);\r\n      instrumentation.logMessage([constants.LOGCATEGORY.ERROR], constants.LOGLEVEL.INFO, 'device-card', JSON.stringify(data));\r\n      return;\r\n    }\r\n\r\n    this.hideCurrency = data.AccountsHaveDifferentCurrencies;\r\n    this.dataFetched = true;\r\n    this.performanceMetrics = getFilteredTotalsMetrics({\r\n      data,\r\n      metric: 'PerformanceMetrics',\r\n    }) || {};\r\n\r\n    _.defaults(this.performanceMetrics, { SegmentedData: {} });\r\n\r\n    if (dateRange.compared) {\r\n      this.performanceMetricsChangePercentage = getFilteredTotalsMetrics({\r\n        data,\r\n        metric: 'PerformanceMetricsChangePercentage',\r\n      }) || {};\r\n\r\n      _.defaults(this.performanceMetricsChangePercentage, { SegmentedData: {} });\r\n\r\n      this.periodPerformanceMetrics = getFilteredTotalsMetrics({\r\n        data,\r\n        metric: 'PeriodPerformanceMetrics',\r\n      }) || {};\r\n\r\n      _.defaults(this.periodPerformanceMetrics, { SegmentedData: {} });\r\n    }\r\n\r\n    this.hasError = false;\r\n    updateView.call(this);\r\n  }).catch((response) => {\r\n    this.dataFetched = true;\r\n    // no need to log ajax error here.\r\n    if (response.status === undefined) {\r\n      instrumentation.logMessage([constants.LOGCATEGORY.ERROR], constants.LOGLEVEL.INFO, 'device-card', response.stack);\r\n    }\r\n    this.loaded = true;\r\n    this.hasError = true;\r\n    this.renderTrunk();\r\n  });\r\n}\r\n\r\n/* @this DeviceCard */\r\nfunction navigateToDevicesSetting() {\r\n  if (this.navigationLevel === 'account') {\r\n    this.deps.legacyRouter.navigateToRoute('campaign_settings', {\r\n      setting: 'devices',\r\n    });\r\n  } else {\r\n    const campaignId = this.deps.state.get('campaign_id');\r\n\r\n    this.deps.legacyRouter.navigateToRoute('campaign_edit_settings', {\r\n      // eslint-disable-next-line camelcase\r\n      campaign_id: campaignId,\r\n      setting: 'devices',\r\n    });\r\n  }\r\n}\r\n\r\nexport class DeviceCard extends BaseCard {\r\n  className() {\r\n    return 'device-card';\r\n  }\r\n\r\n  initialize({\r\n    entitySet,\r\n    metrics,\r\n    navigationLevel,\r\n    dateRange,\r\n    perfMarker,\r\n    name,\r\n    deps,\r\n    sharedOptions,\r\n    filter,\r\n    fetchSingleTile = false,\r\n    preexecuteFlag = false,\r\n    typeId,\r\n  }) {\r\n    this.initPerfMarker({ perfMarker, name });\r\n    this.performanceMetrics = { SegmentedData: {} };\r\n    this.performanceMetricsChangePercentage = { SegmentedData: {} };\r\n    this.periodPerformanceMetrics = { SegmentedData: {} };\r\n    this.entitySet = entitySet;\r\n    this.navigationLevel = navigationLevel;\r\n    this.sharedOptions = sharedOptions;\r\n    this.fetchSingleTile = fetchSingleTile;\r\n    this.deps = deps;\r\n    this.typeId = typeId;\r\n\r\n    const { config } = this.deps;\r\n    this.permissions = config && config.get('Permissions');\r\n    this.currentCampaign = config && config.get('CurrentCampaign');\r\n    let selectedMetrics;\r\n\r\n    if (metrics) {\r\n      const patchedMetrics = patchMetrics({ permissions: this.permissions, metrics });\r\n      const availableMetrics = allMetrics(this.permissions);\r\n\r\n      selectedMetrics = _.intersection(patchedMetrics, availableMetrics);\r\n\r\n      if (_.size(selectedMetrics) < _.size(defaultMetrics)) {\r\n        selectedMetrics = _.chain(selectedMetrics)\r\n          .union(defaultMetrics)\r\n          .uniq()\r\n          .first(_.size(defaultMetrics))\r\n          .value();\r\n\r\n        _.defer(() => {\r\n          this.trigger('storeCardPreference', { metrics: selectedMetrics });\r\n        });\r\n      }\r\n    } else {\r\n      selectedMetrics = defaultMetrics;\r\n    }\r\n\r\n    this.setState({\r\n      metrics: selectedMetrics,\r\n      dateRange,\r\n      filter,\r\n    });\r\n\r\n    const loadDataFunc = preexecuteFlag ? () => {\r\n      this.dataFetched = true;\r\n    } : loadData;\r\n\r\n    loadDataFunc.call(this);\r\n\r\n    this.listenTo(this.model, 'change:dateRange', () => {\r\n      this.fetchSingleTile = false;\r\n      loadDataFunc.call(this);\r\n    });\r\n\r\n    this.listenTo(this.model, 'change:filter', () => {\r\n      this.fetchSingleTile = false;\r\n      loadDataFunc.call(this);\r\n    });\r\n\r\n    this.listenTo(this.model, 'change:metrics', () => {\r\n      updateView.call(this);\r\n    });\r\n\r\n    this.onResize(() => {\r\n      reLayout.call(this);\r\n    });\r\n\r\n    this.on('removed', () => {\r\n      this.removed = true;\r\n    });\r\n  }\r\n\r\n  get events() {\r\n    return {\r\n      'mouseenter .device-grid-bar': this.showPopup,\r\n      'mouseleave .device-grid-bar': this.hidePopup,\r\n      'click .view-all-clickLink': navigateToDevicesSetting.bind(this),\r\n    };\r\n  }\r\n\r\n  showPopup(event) {\r\n    const $target = $(event.currentTarget);\r\n    const type = $target.data('type');\r\n\r\n    $target.closest('.graph-area').addClass(`show-${type}-hover`);\r\n  }\r\n\r\n  hidePopup(event) {\r\n    const $target = $(event.currentTarget);\r\n    const type = $target.data('type');\r\n\r\n    $target.closest('.graph-area').removeClass(`show-${type}-hover`);\r\n  }\r\n\r\n  renderTrunk() {\r\n    if (this.dataFetched) {\r\n      this.willRenderWithData();\r\n    }\r\n    this.currentLayoutSize = undefined;\r\n    this.currentGraphLayoutSize = undefined;\r\n    super.renderTrunk();\r\n    if (this.dataFetched) {\r\n      this.renderedWithData();\r\n      _.defer(() => {\r\n        reLayout.call(this);\r\n      });\r\n    }\r\n  }\r\n\r\n  get template() {\r\n    const { metrics } = this.getState();\r\n    const { data } = this;\r\n    const { i18n, s$i18n } = this.deps;\r\n\r\n    return () => template({\r\n      isSmartShoppingCampaign: this.isSmartShoppingCampaign(),\r\n      s$i18n,\r\n      order: getDeviceOrder({\r\n        permissions: this.permissions,\r\n        navigationLevel: this.navigationLevel,\r\n        currentCampaign: this.currentCampaign,\r\n      }),\r\n      metrics,\r\n      data,\r\n      loaded: this.loaded,\r\n      hasError: this.hasError,\r\n      i18n,\r\n      isAggregatedMetric,\r\n      navigationLevel: this.navigationLevel,\r\n    });\r\n  }\r\n\r\n  setState(newState) {\r\n    if (newState.metrics && (_.size(newState.metrics) > _.size(defaultMetrics))) {\r\n      // Customer might have erroneous preference due to bug that is fixed.\r\n      // Reset to default.\r\n      // eslint-disable-next-line no-param-reassign\r\n      newState.metrics = defaultMetrics;\r\n      this.trigger('storeCardPreference', { metrics: newState.metrics });\r\n    }\r\n\r\n    super.setState(newState);\r\n  }\r\n}\r\n","import _ from 'underscore';\r\nimport $ from 'jquery';\r\nimport 'bootstrap';\r\nimport Promise from 'bluebird';\r\nimport { DeterministicView, helpers } from '@bingads-webui/deterministic-view';\r\nimport { a11yPlugin } from '@bingads-webui/projection-grid-a11y';\r\nimport pgrid from 'projection-grid';\r\nimport { performanceLogPlugin } from '@bingads-webui-campaign/pgrid-performance-log';\r\nimport { placeholderPlugin } from '@bingads-webui/projection-grid-placeholder';\r\nimport { withUiBlock } from '@bingads-webui/uiblocker';\r\nimport { Constants } from '@bingads-webui-clientcenter/entity-utils';\r\nimport { keyCode } from '@bingads-webui/keycode';\r\nimport {\r\n  changeEvents,\r\n  entityHash,\r\n  getEntityIds,\r\n  navigateToEntity,\r\n  coerceStatus,\r\n  gridCardConfig,\r\n  allMetrics as metrics,\r\n  gridNameTemplate as nameTemplate,\r\n  fetchEntityGridCombined,\r\n  fetchGridData,\r\n  processGridTileOptions,\r\n  patchMetrics, patchMetric,\r\n} from '@bingads-webui-campaign/overview-cards-common';\r\nimport coverTemplate from './cover-template.pug';\r\nimport placeholderTemplate from './placeholder-template.pug';\r\nimport template from './content-template.pug';\r\nimport performanceMetricHeaderTemplate from './performance-metric-header-template.pug';\r\nimport performanceMetricTemplate from './performance-metric-template.pug';\r\n\r\nlet formatMetric;\r\nlet formatMetricWithSign;\r\nlet formatChangePercentageWithSign;\r\n\r\nfunction order(body) {\r\n  return _.defaults({ body }, {\r\n    PerformanceMetrics: {\r\n      sup: 'PerformanceMetricsChangePercentage',\r\n      sub: 'PerformanceMetricsChange',\r\n    },\r\n    PerformanceMetricsChange: {\r\n      sup: 'PerformanceMetrics',\r\n      sub: 'PerformanceMetricsChangePercentage',\r\n    },\r\n    PerformanceMetricsChangePercentage: {\r\n      sup: 'PerformanceMetrics',\r\n      sub: 'PerformanceMetricsChange',\r\n    },\r\n  }[body]);\r\n}\r\n\r\nfunction metricColumnProperty({\r\n  PerformanceMetrics = {},\r\n  PerformanceMetricsChange = {},\r\n  PerformanceMetricsChangePercentage = {},\r\n  Currency,\r\n} = {}, metric) {\r\n  return {\r\n    PerformanceMetrics: PerformanceMetrics[metric],\r\n    PerformanceMetricsChange: PerformanceMetricsChange[metric],\r\n    PerformanceMetricsChangePercentage: PerformanceMetricsChangePercentage[metric],\r\n    Currency,\r\n  };\r\n}\r\n\r\nfunction formatCell(value, metric) {\r\n  return {\r\n    PerformanceMetrics: formatMetric(\r\n      metric,\r\n      value.PerformanceMetrics,\r\n      { currency: value.Currency }\r\n    ),\r\n    PerformanceMetricsChange: formatMetricWithSign(\r\n      metric,\r\n      value.PerformanceMetricsChange,\r\n      { currency: value.Currency }\r\n    ),\r\n    PerformanceMetricsChangePercentage:\r\n      formatChangePercentageWithSign(value.PerformanceMetricsChangePercentage),\r\n  };\r\n}\r\n\r\n/* @this GridCard */\r\nfunction metricColumnTemplate({ value }, metric) {\r\n  return performanceMetricTemplate({\r\n    value: formatCell(value, metric),\r\n    order: order(this.getState().body),\r\n    showExtra: this.gridView.get('sortableHeader').name === metric && this.getState().dateRange.compared && this.typeName !== 'SearchTerm',\r\n  });\r\n}\r\n\r\nconst sortableMapping = {\r\n  PerformanceMetrics: 'PerformanceMetrics',\r\n  PerformanceMetricsChange: 'PoPPerformanceMetricsChange',\r\n  PerformanceMetricsChangePercentage: 'PoPPerformanceMetricsChangePercentage',\r\n};\r\n\r\nconst titleMapping = {\r\n  Keyword: 'EntityType_Keyword_Plural',\r\n  SearchTerm: 'Search_Terms',\r\n  Campaign: 'EntityType_Campaign_Plural',\r\n  Account: 'Dashboard_TopAccounts_Card_Title',\r\n  AdGroup: 'EntityType_AdGroup_Plural',\r\n};\r\n\r\nconst columnHeaderMapping = {\r\n  Keyword: 'EntityType_Keyword_Singular',\r\n  SearchTerm: 'ColumnName_SearchTerm',\r\n  Campaign: 'EntityType_Campaign_Singular',\r\n  Account: 'Entity_Account',\r\n  AdGroup: 'EntityType_AdGroup_Singular',\r\n};\r\n\r\n/* @this GridCard */\r\nfunction sortableAttribute(metric) {\r\n  return `${sortableMapping[this.getState().body]}/${metric}`;\r\n}\r\n\r\n/* @this GridCard */\r\nfunction metricColumn(metric) {\r\n  return this.bingadsGridColumn({\r\n    name: metric,\r\n    title: this.s$i18n.property('PerformanceMetrics', metric),\r\n    property: entity => metricColumnProperty(entity, metric),\r\n    sortable: {\r\n      key: sortableAttribute.call(this, metric),\r\n      direction: -1,\r\n    },\r\n    colClasses: () =>\r\n      (this.gridView.get('sortableHeader').name === metric ? ['performance-metric-col-sorting'] : ['performance-metric-col-non-sorting']),\r\n    bodyClasses: () =>\r\n      (this.gridView.get('sortableHeader').name === metric ? ['performance-metric-td-sorting'] : []),\r\n    headClasses: () =>\r\n      (this.gridView.get('sortableHeader').name === metric ? ['performance-metric-th-sorting'] : []),\r\n    html: performanceMetricHeaderTemplate({\r\n      metric,\r\n      s$i18n: this.s$i18n,\r\n      i18n: this.i18n,\r\n    }),\r\n    template: ({ value }) => metricColumnTemplate.call(this, { value }, metric),\r\n  });\r\n}\r\n\r\n/* @this GridCard */\r\nfunction nameColumn() {\r\n  return this.bingadsGridColumn({\r\n    name: 'Name',\r\n    title: this.i18n.getString(columnHeaderMapping[this.typeName]),\r\n    property: ({\r\n      Id,\r\n      Name,\r\n      Text,\r\n      Status,\r\n      AdGroup,\r\n      Campaign,\r\n      MatchType,\r\n      DeliveredMatchType,\r\n      CampaignType,\r\n      Keyword,\r\n      Added,\r\n      SearchTermStatus,\r\n      ExperimentId,\r\n      AccountInactiveReasons,\r\n    }) => {\r\n      let nameText = Text;\r\n\r\n      if (this.typeName === 'Keyword') {\r\n        nameText = Text;\r\n        if (MatchType === 'Phrase') {\r\n          nameText = `\"${nameText}\"`;\r\n        } else if (MatchType === 'Exact') {\r\n          nameText = `[${nameText}]`;\r\n        }\r\n      } else if (this.typeName === 'SearchTerm') {\r\n        nameText = Text;\r\n      } else {\r\n        nameText = Name;\r\n      }\r\n      let isExperiment;\r\n\r\n      if (this.typeName === 'Campaign') {\r\n        isExperiment = !!ExperimentId;\r\n      } else if (this.typeName !== 'Account') {\r\n        isExperiment = !!Campaign.ExperimentId;\r\n      }\r\n\r\n      return {\r\n        Name: nameText,\r\n        keywordText: Text,\r\n        Status: coerceStatus(Status, AccountInactiveReasons),\r\n        hash: entityHash({\r\n          id: Id,\r\n          typeName: this.typeName,\r\n          entitySet: this.entitySet,\r\n          navigationLevel: this.navigationLevel,\r\n          adGroup: AdGroup,\r\n          campaign: Campaign,\r\n          pageContext: this.pageContext,\r\n          legacyRouter: this.legacyRouter,\r\n          isSmartCampaign: CampaignType === 'Smart',\r\n          status: Status,\r\n        }),\r\n        rawStatus: Status,\r\n        typeName: this.typeName,\r\n        ids: getEntityIds({\r\n          id: Id,\r\n          typeName: this.typeName,\r\n          entitySet: this.entitySet,\r\n          adGroup: AdGroup,\r\n          campaign: Campaign,\r\n        }),\r\n        AdGroup: AdGroup || {},\r\n        Campaign: Campaign || {},\r\n        MatchType: MatchType || DeliveredMatchType,\r\n        navigationLevel: this.navigationLevel,\r\n        i18n: this.i18n,\r\n        AccountActivityStatus: Constants.AccountActivityStatus,\r\n        added: Added,\r\n        campaignType: CampaignType,\r\n        matchingKeyword: Keyword ? Keyword.Text : null,\r\n        searchTermStatus: SearchTermStatus,\r\n        isExperiment,\r\n      };\r\n    },\r\n    template: nameTemplate,\r\n  });\r\n}\r\n\r\n/* @this GridCard */\r\nfunction metricColumns() {\r\n  return _.object(_.map(metrics(this.config && this.config.get('Permissions'), this.accountsMode), metric => [metric, metricColumn.call(this, metric)]));\r\n}\r\n\r\n/* @this GridCard */\r\nfunction removeDropdown() {\r\n  if (this.dropdown) {\r\n    this.dropdown.$el.closest('.grid-card-header').find('button').attr('aria-expanded', false);\r\n    this.dropdown.remove();\r\n    this.dropdown = null;\r\n  }\r\n\r\n  if (this.onClickDocument) {\r\n    $(document).off('click', this.onClickDocument);\r\n    this.onClickDocument = null;\r\n  }\r\n}\r\n\r\n/* @this GridCardContent */\r\nfunction updatePopupPosition(evt) {\r\n  const $target = $(evt.currentTarget);\r\n  const hoverContent = $target.find('.hover-content');\r\n\r\n  if (hoverContent.attr('style')) {\r\n    hoverContent.attr('style', '');\r\n  }\r\n\r\n  const $viewport = $target.closest('.viewport');\r\n  const scrollTop = $viewport.scrollTop();\r\n\r\n  if (scrollTop <= 0) {\r\n    return;\r\n  }\r\n\r\n  if ($target.offset().top - $viewport.offset().top > 100) {\r\n    hoverContent.css('bottom', `${scrollTop + 35}px`);\r\n    hoverContent.css('top', 'auto');\r\n  } else {\r\n    hoverContent.css('top', `${5 - scrollTop}px`);\r\n    hoverContent.css('bottom', 'auto');\r\n  }\r\n}\r\n\r\n\r\nfunction showPopup(evt) {\r\n  updatePopupPosition(evt);\r\n  const $target = $(evt.currentTarget);\r\n  const $popup = $target.find('.grid-cell--Name__hover-container');\r\n  $popup.css({ display: 'block' });\r\n}\r\n\r\nfunction hidePopup(evt) {\r\n  const $target = $(evt.currentTarget);\r\n  const $popup = $target.find('.grid-cell--Name__hover-container');\r\n  $popup.css({ display: 'none' });\r\n}\r\n\r\n\r\n/* @this GridCardContent */\r\nfunction getAllColumns() {\r\n  const allMetricColumns = metricColumns.call(this);\r\n\r\n  return [nameColumn.call(this), ..._.map(\r\n    this.getState().columns,\r\n    metric => allMetricColumns[metric]\r\n  )];\r\n}\r\n\r\n/* @this GridCardContent */\r\nfunction refetch() {\r\n  this.gridView.refresh(true);\r\n}\r\n\r\n/* @this GridCardContent */\r\nfunction updateGridBody() {\r\n  const sortableHeader = this.gridView.get('sortableHeader') || {};\r\n  const {\r\n    orderby,\r\n    direction,\r\n    directionIndex,\r\n  } = this.getState();\r\n  const newSortableHeader = sortableHeader.name ? sortableHeader : {\r\n    name: orderby,\r\n    directionIndex,\r\n  };\r\n\r\n  this.gridView.patch({\r\n    columns: getAllColumns.call(this),\r\n    query: {\r\n      orderby: [{\r\n        key: sortableAttribute.call(this, newSortableHeader.name),\r\n        direction,\r\n      }],\r\n    },\r\n    sortableHeader: newSortableHeader,\r\n  });\r\n\r\n  refetch.call(this);\r\n}\r\n\r\n/* @this GridCardContent */\r\nfunction updateGridColumn() {\r\n  const {\r\n    columns,\r\n    orderby,\r\n    direction,\r\n    directionIndex,\r\n  } = this.getState();\r\n\r\n  if (!_.contains(columns, orderby)) {\r\n    helpers.updateView(this, {\r\n      orderby: _.first(columns),\r\n    });\r\n  }\r\n\r\n  const sortableHeader = this.gridView.get('sortableHeader') || {};\r\n  const newSortableHeader = _.contains(columns, sortableHeader.name) ? sortableHeader : {\r\n    name: this.getState().orderby,\r\n    directionIndex,\r\n  };\r\n\r\n  this.gridView.patch({\r\n    columns: getAllColumns.call(this),\r\n    query: {\r\n      orderby: [{\r\n        key: sortableAttribute.call(this, newSortableHeader.name),\r\n        direction,\r\n      }],\r\n    },\r\n    sortableHeader: newSortableHeader,\r\n  });\r\n  refetch.call(this);\r\n  this.trigger('gridOptionChange');\r\n}\r\n\r\n/* @this GridCardContent */\r\nfunction onGridSortableHeaderChange(changes) {\r\n  const newOderBy = _.result(changes.query, 'orderby') || _.result(this.gridView.get('query'), 'orderby');\r\n  const newDirection = newOderBy[0].direction;\r\n  const newOderByColumn = changes.sortableHeader.name;\r\n  const newDirectionIndex = changes.sortableHeader.directionIndex;\r\n  const { orderby, direction, directionIndex } = this.getState();\r\n\r\n  if (orderby !== newOderByColumn ||\r\n    direction !== newDirection ||\r\n    directionIndex !== newDirectionIndex) {\r\n    this.setState({\r\n      orderby: newOderByColumn,\r\n      direction: newDirection,\r\n      directionIndex: newDirectionIndex,\r\n      fetchSingleTile: true,\r\n    });\r\n    this.instrumentation.logMessage(\r\n      [this.constants.LOGCATEGORY.TRACE],\r\n      this.constants.LOGLEVEL.INFO,\r\n      'grid-card',\r\n      `${this.navigationLevel} level ${this.typeName} type new sort order picked.`\r\n    );\r\n    this.trigger('gridOptionChange');\r\n  }\r\n}\r\n\r\nclass CombinedCallEntity {\r\n  constructor({\r\n    entitySet,\r\n    getParentState,\r\n    dateUtil,\r\n    jsdata,\r\n    getCardsConfig,\r\n    permissions,\r\n    accountsMode,\r\n  }) {\r\n    this.entitySet = entitySet;\r\n    this.getParentState = getParentState;\r\n    this.dateUtil = dateUtil;\r\n    this.jsdata = jsdata;\r\n    this.getCardsConfig = getCardsConfig;\r\n    this.permissions = permissions;\r\n    this.accountsMode = accountsMode;\r\n  }\r\n\r\n  findAll({ orderBy }) {\r\n    const { dateRange, fetchSingleTile, filter } = this.getParentState();\r\n    return fetchEntityGridCombined({\r\n      entitySet: this.entitySet,\r\n      dateRange,\r\n      comparisonDateRange: dateRange.compared,\r\n      orderBy,\r\n      jsdata: this.jsdata,\r\n      dateUtil: this.dateUtil,\r\n      getCardsConfig: this.getCardsConfig,\r\n      fetchSingleTile,\r\n      filter,\r\n      permissions: this.permissions,\r\n      accountsMode: this.accountsMode,\r\n    });\r\n  }\r\n}\r\n\r\nclass GridDataEntity {\r\n  constructor({\r\n    entitySet,\r\n    getParentState,\r\n    dateUtil,\r\n    jsdata,\r\n    permissions,\r\n    typeId,\r\n  }) {\r\n    this.entitySet = entitySet;\r\n    this.getParentState = getParentState;\r\n    this.dateUtil = dateUtil;\r\n    this.jsdata = jsdata;\r\n    this.permissions = permissions;\r\n    this.typeId = typeId;\r\n  }\r\n\r\n  findAll() {\r\n    const {\r\n      dateRange,\r\n      orderby,\r\n      direction,\r\n      selectedMenuItem,\r\n      filter,\r\n      columns,\r\n    } = this.getParentState();\r\n    return fetchGridData({\r\n      entitySet: this.entitySet,\r\n      dateRange,\r\n      options: {\r\n        orderby,\r\n        direction,\r\n        selectedMenuItem,\r\n        columns,\r\n      },\r\n      filter,\r\n      jsdata: this.jsdata,\r\n      dateUtil: this.dateUtil,\r\n      permissions: this.permissions,\r\n      dfmCacheKey: this.typeId,\r\n    });\r\n  }\r\n}\r\n\r\nclass DummyDataSource {\r\n  findAll() {\r\n    const data = [];\r\n    data.totalCount = 0;\r\n    return Promise.resolve(data);\r\n  }\r\n}\r\n\r\nexport default class GridCardContent extends DeterministicView {\r\n  constructor(options) {\r\n    super(_.extend({}, options, { renderInSync: true }));\r\n  }\r\n\r\n  initialize({\r\n    entitySet,\r\n    navigationLevel,\r\n    parent,\r\n    selectedMenuItem,\r\n    columns,\r\n    orderby,\r\n    direction,\r\n    directionIndex,\r\n    dateRange,\r\n    filter,\r\n    getCardsConfig,\r\n    fetchSingleTile = false,\r\n    preexecuteFlag = false,\r\n    accountsMode,\r\n    deps,\r\n  }) {\r\n    this.parent = parent;\r\n    this.entitySet = entitySet;\r\n    this.typeName = entitySet.type.elementType.shortName;\r\n    this.navigationLevel = navigationLevel;\r\n    this.accountsMode = accountsMode;\r\n    this.config = deps.config;\r\n    this.i18n = deps.i18n;\r\n    this.s$i18n = deps.s$i18n;\r\n    this.pageContext = deps.pageContext;\r\n    this.legacyRouter = deps.legacyRouter;\r\n    this.createEditableFilterStorage = deps.createEditableFilterStorage;\r\n    this.instrumentation = deps.instrumentation;\r\n    this.constants = deps.constants;\r\n    this.bingadsGridColumn = deps.bingadsGridColumn;\r\n    this.metricFormatter = deps.metricFormatter;\r\n    // eslint-disable-next-line prefer-destructuring\r\n    formatMetric = deps.metricFormatter.formatMetric;\r\n    // eslint-disable-next-line prefer-destructuring\r\n    formatMetricWithSign = deps.metricFormatter.formatMetricWithSign;\r\n    // eslint-disable-next-line prefer-destructuring\r\n    formatChangePercentageWithSign = deps.metricFormatter.formatChangePercentageWithSign;\r\n\r\n    const permissions = this.config && this.config.get('Permissions');\r\n    const tileOptions = _.defaults({\r\n      body: selectedMenuItem,\r\n      columns,\r\n      orderby,\r\n      direction,\r\n      directionIndex,\r\n      dateRange,\r\n      filter,\r\n      fetchSingleTile,\r\n    }, gridCardConfig.defaultOptions);\r\n\r\n    tileOptions.columns = tileOptions.columns &&\r\n      patchMetrics({ permissions, metrics: tileOptions.columns, accountsMode });\r\n    tileOptions.orderby = tileOptions.orderby &&\r\n      patchMetric({ permissions, metric: tileOptions.orderby, accountsMode });\r\n\r\n    const initialState = processGridTileOptions({\r\n      options: tileOptions,\r\n      permissions,\r\n      accountsMode,\r\n    });\r\n\r\n    this.setState(initialState);\r\n    if (!_.isEqual(tileOptions, initialState)) {\r\n      _.defer(() => this.trigger('gridOptionChange'));\r\n    }\r\n\r\n    const gridFactory = pgrid.factory({ vnext: true });\r\n\r\n    gridFactory\r\n      .use(a11yPlugin)\r\n      .use(placeholderPlugin)\r\n      .use(performanceLogPlugin);\r\n\r\n    const {\r\n      gridView,\r\n    } = gridFactory\r\n      .create({\r\n        name: `OverviewTop${this.typeName}`,\r\n        tableClasses: ['table'],\r\n        tableAttributes: { 'aria-label': this.i18n.getString(titleMapping[this.typeName]) },\r\n        dataSource: {\r\n          type: 'jsdata',\r\n          // eslint-disable-next-line no-nested-ternary\r\n          entity: preexecuteFlag ? new DummyDataSource() : ((this.typeName === 'Account' ||\r\n            (this.typeName === 'Campaign')) ?\r\n            new CombinedCallEntity({\r\n              entitySet,\r\n              getParentState: this.getState.bind(this),\r\n              dateUtil: deps.dateUtil,\r\n              jsdata: deps.jsdata,\r\n              getCardsConfig,\r\n              permissions,\r\n              accountsMode: this.accountsMode,\r\n            }) : new GridDataEntity({\r\n              entitySet,\r\n              getParentState: this.getState.bind(this),\r\n              dateUtil: deps.dateUtil,\r\n              jsdata: deps.jsdata,\r\n              permissions,\r\n              typeId: this.options.typeId,\r\n            })),\r\n        },\r\n        columns: getAllColumns.call(this),\r\n        plugins: {\r\n          a11y: { i18n: this.i18n },\r\n          performanceLog: {\r\n            appConfig: deps.config,\r\n            logger: deps.instrumentation,\r\n          },\r\n          placeholder: {\r\n            viewRoot: this.parent.el,\r\n            container: '.no-data',\r\n            template: placeholderTemplate,\r\n            templateOptions: {\r\n              i18n: this.i18n,\r\n            },\r\n          },\r\n        },\r\n        events: {\r\n          'click .metric-picker__button--caret': (e) => {\r\n            e.stopPropagation();\r\n            e.preventDefault();\r\n            // Event propagation is stopped above.\r\n            // Click on header to bubble up event to window without side effect.\r\n            this.$('.header').click();\r\n            const $metricPicker = this.$(e.currentTarget).closest('.metric-picker');\r\n            const currentMetric = $metricPicker[0].dataset.metric;\r\n            const isDropdownOpenfortheColumn = this.dropdown && $metricPicker.closest('.grid-card-header')[0].contains(this.dropdown.el);\r\n\r\n            removeDropdown.call(this);\r\n\r\n            if (!isDropdownOpenfortheColumn) {\r\n              const currentColumns = this.gridView.get('columns');\r\n\r\n              import(/* webpackMode: 'eager' */ '@bingads-webui-campaign/overview-metric-picker').then(({ MetricPicker }) => {\r\n                import(/* webpackMode: 'eager' */ './metric-picker-template.pug').then(({ default: metricPickerTemplate }) => {\r\n                  import(/* webpackMode: 'eager' */ './dropdown-template.pug').then(({ default: dropdownMenuTemplate }) => {\r\n                    this.dropdown = new MetricPicker({\r\n                      buttonTemplate: () => null,\r\n                      template: metricPickerTemplate,\r\n                      dropdownMenuTemplate,\r\n                      metricFormatter: this.metricFormatter,\r\n                      s$i18n: this.s$i18n,\r\n                      i18n: this.i18n,\r\n                      accountsMode: this.accountsMode,\r\n                      deps,\r\n                    }).setState({\r\n                      current: currentMetric,\r\n                      metrics: _.difference(\r\n                        metrics(permissions, this.accountsMode),\r\n                        _.map(currentColumns, col => col.name)\r\n                      ),\r\n                    });\r\n\r\n                    this.dropdown.on('pick', ({ metric }) => {\r\n                      const stateColumns = _.clone(this.getState().columns);\r\n                      const index = _.findIndex(stateColumns, col => col === currentMetric);\r\n\r\n                      this.instrumentation.logMessage(\r\n                        [this.constants.LOGCATEGORY.TRACE],\r\n                        this.constants.LOGLEVEL.INFO,\r\n                        'grid-card',\r\n                        `${this.navigationLevel} level ${this.typeName} type new metric picked.`\r\n                      );\r\n                      stateColumns[index] = metric;\r\n                      helpers.updateView(this, {\r\n                        columns: stateColumns,\r\n                      });\r\n                    });\r\n\r\n                    $metricPicker.closest('.grid-card-header').append(this.dropdown.el);\r\n                    $metricPicker.find('button').attr('aria-expanded', true);\r\n\r\n                    this.onClickDocument = (event) => {\r\n                      if (this.dropdown && !this.dropdown.el.contains(event.target)) {\r\n                        removeDropdown.call(this);\r\n                      }\r\n                    };\r\n                    $(document).on('click', this.onClickDocument);\r\n                  });\r\n                });\r\n              });\r\n            }\r\n          },\r\n        },\r\n        scrolling: {\r\n          virtualized: false,\r\n          header: {\r\n            type: 'fixed',\r\n            attributes: { 'aria-label': this.i18n.getString('{{tableName}} table header', { tableName: this.i18n.getString(titleMapping[this.typeName]) }) },\r\n          },\r\n        },\r\n      });\r\n\r\n    this.gridView = gridView;\r\n    updateGridColumn.call(this);\r\n\r\n    this.listenTo(this.model, changeEvents('dateRange', 'filter'), () => {\r\n      this.setState({ fetchSingleTile: false });\r\n      refetch.call(this);\r\n    });\r\n\r\n    this.listenTo(this.model, changeEvents('body'), () => {\r\n      this.setState({ fetchSingleTile: true });\r\n      updateGridBody.call(this);\r\n    });\r\n\r\n    this.listenTo(this.model, changeEvents('columns'), () => {\r\n      this.setState({ fetchSingleTile: true });\r\n      updateGridColumn.call(this);\r\n    });\r\n\r\n    this.gridView.on('willUpdate', (changes) => {\r\n      if (_.has(changes, 'sortableHeader')) {\r\n        onGridSortableHeaderChange.call(this, changes);\r\n      }\r\n    });\r\n\r\n    this.gridView.on('didUpdate', () => {\r\n      this.setupScrollBarCover();\r\n    });\r\n\r\n    this.gridView.on('didRedraw', () => {\r\n      this.$('.viewport').scrollTop(0);\r\n      this.setupScrollBarCover();\r\n      const headerOption = this.$('.column-header.clickable');\r\n      const firstRow = this.$('.viewport tr:not(.top-filler):first a');\r\n      if (firstRow.length > 0) {\r\n        firstRow.focus();\r\n      } else if (headerOption.length > 0) {\r\n        headerOption.get(0).focus();\r\n      }\r\n    });\r\n\r\n    this.gridView.once('didReload', () => {\r\n      this.parent.willRenderWithData();\r\n      this.dataFetched = true;\r\n      this.gridView.once('didRedraw', () => {\r\n        this.parent.renderedWithData();\r\n      });\r\n    });\r\n\r\n    this.gridView.once('willReload', () => {\r\n      this.parent.willFetchData();\r\n    });\r\n\r\n    this.gridView.on('willReload', () => {\r\n      if (!this.unblock && !this.parent.unblock) {\r\n        this.unblock = withUiBlock(this.$el.parent(), this.i18n.getString('Loading'));\r\n      }\r\n    });\r\n\r\n    this.gridView.on('didReload', () => {\r\n      if (this.unblock) {\r\n        this.unblock();\r\n        this.unblock = null;\r\n      }\r\n      this.parent.unblockCard();\r\n    });\r\n  }\r\n\r\n  get className() {\r\n    return 'grid-content';\r\n  }\r\n\r\n  get events() {\r\n    return {\r\n      'click .grid-cell--Name a': event => navigateToEntity({\r\n        event,\r\n        pageContext: this.pageContext,\r\n        legacyRouter: this.legacyRouter,\r\n        createEditableFilterStorage: this.createEditableFilterStorage,\r\n        cardType: 'grid-card',\r\n        instrumentation: this.instrumentation,\r\n        constants: this.constants,\r\n      }),\r\n      'mouseenter .grid-cell.grid-cell--Name': showPopup,\r\n      'mouseleave .grid-cell.grid-cell--Name': hidePopup,\r\n      'focus .grid-cell.grid-cell--Name': showPopup,\r\n      'blur .grid-cell.grid-cell--Name': hidePopup,\r\n      'keyup .grid-cell.grid-cell--Name': (event) => {\r\n        if (event.keyCode === keyCode.Escape) {\r\n          hidePopup.call(this, event);\r\n        }\r\n      },\r\n    };\r\n  }\r\n\r\n  setupScrollBarCover() {\r\n    if (!this.dataFetched) {\r\n      return;\r\n    }\r\n    // If have a scroll bar, cover it per design.\r\n    // Scroll bar will only be shown on hover.\r\n    const viewport = this.gridView.$('.viewport');\r\n    const viewportWidth = viewport.width();\r\n    const table = $('table', viewport);\r\n    const tableWidth = table.width();\r\n\r\n    if (viewportWidth && tableWidth && (viewportWidth > tableWidth)) {\r\n      // we have a scroll bar.\r\n      const scrollBarWidth = viewportWidth - tableWidth;\r\n      const scrollBarHeight = viewport.height();\r\n\r\n      if (this.$('.scroll-bar-cover').length === 0) {\r\n        // If we don't have a cover, create one.\r\n        viewport.append(coverTemplate());\r\n      }\r\n\r\n      $('.scroll-bar-cover', this.$el.closest('.grid-card')).css({\r\n        width: scrollBarWidth,\r\n        height: scrollBarHeight,\r\n      });\r\n\r\n      // expand the viewport area to accommodate the scroll bar.\r\n      const expand = Math.min(scrollBarWidth, 16);\r\n\r\n      viewport.css({ marginRight: -expand });\r\n    } else if (this.$('.scroll-bar-cover').length > 0) {\r\n      // remove the scroll bar related change\r\n      this.$('.scroll-bar-cover').remove();\r\n      viewport.css({ marginRight: 0 });\r\n    }\r\n  }\r\n\r\n  get template() {\r\n    return template;\r\n  }\r\n\r\n  renderTrunk() {\r\n    super.renderTrunk();\r\n    this.gridView.render();\r\n    this.$el.prepend(this.gridView.el);\r\n    return this;\r\n  }\r\n\r\n  remove() {\r\n    removeDropdown.call(this);\r\n    this.gridView.remove();\r\n\r\n    if (this.unblock) {\r\n      this.unblock();\r\n    }\r\n    super.remove();\r\n  }\r\n}\r\n","import _ from 'underscore';\r\nimport $ from 'jquery';\r\nimport { BaseCard } from '@bingads-webui-campaign/overview-base-card';\r\nimport { helpers } from '@bingads-webui/deterministic-view';\r\nimport { gridCardConfig, changeEvents, AccountsMode } from '@bingads-webui-campaign/overview-cards-common';\r\nimport Content from './content';\r\nimport template from './template.pug';\r\n\r\nlet i18n;\r\n\r\nfunction getMenuItems() {\r\n  // Can be shared by multiple tiles on the same page.\r\n  // create a new copy every time.\r\n  const items = [];\r\n\r\n  items.push({\r\n    displayText: i18n.getString('Dashboard_GridCard_ToolbarDropdown_Value'),\r\n    action: 'PerformanceMetrics',\r\n  });\r\n\r\n  items.push({\r\n    displayText: i18n.getString('Dashboard_GridCard_ToolbarDropdown_Change'),\r\n    action: 'PerformanceMetricsChange',\r\n  });\r\n\r\n  items.push({\r\n    displayText: i18n.getString('Dashboard_GridCard_ToolbarDropdown_ChangePercentage'),\r\n    action: 'PerformanceMetricsChangePercentage',\r\n  });\r\n\r\n  return items;\r\n}\r\n\r\n/* @this GridCard */\r\nfunction getCardPreference() {\r\n  const {\r\n    columns,\r\n    orderby,\r\n    direction,\r\n    directionIndex,\r\n  } = this.child.getState();\r\n\r\n  const { selectedMenuItem } = this.getState();\r\n\r\n  return {\r\n    columns,\r\n    orderby,\r\n    direction,\r\n    directionIndex,\r\n    selectedMenuItem,\r\n  };\r\n}\r\n\r\n/* @this GridCard */\r\nfunction navigate({\r\n  accountLevelRout,\r\n  campaignLevelRout,\r\n}) {\r\n  if (this.navigationLevel === 'account') {\r\n    this.deps.legacyRouter.navigateToRoute(accountLevelRout);\r\n  } else if (this.navigationLevel === 'customer') {\r\n    this.deps.legacyRouter.navigateToRoute('accounts_performance', { accountMode: this.accountsMode });\r\n  } else {\r\n    const campaignId = this.deps.state.get('campaign_id');\r\n\r\n    // eslint-disable-next-line camelcase\r\n    this.deps.legacyRouter.navigateToRoute(campaignLevelRout, { campaign_id: campaignId });\r\n  }\r\n}\r\n\r\n/* @this GridCard */\r\nfunction navigateToMainGrid() {\r\n  let accountLevelRout;\r\n  let campaignLevelRout;\r\n\r\n  // For now we only support this for search term and keyword.\r\n  // Neither of them are enabled in prod.\r\n  // We might want to do this for all types.\r\n  switch (this.typeName) {\r\n    case 'SearchTerm':\r\n      accountLevelRout = 'keyword_search_term';\r\n      campaignLevelRout = 'campaign_keyword_search_term';\r\n      break;\r\n    case 'Keyword':\r\n      accountLevelRout = 'keyword';\r\n      campaignLevelRout = 'campaign_keyword';\r\n      break;\r\n    case 'Campaign':\r\n      accountLevelRout = 'campaign';\r\n      break;\r\n    case 'AdGroup':\r\n      accountLevelRout = 'adgroup';\r\n      campaignLevelRout = 'campaign_adgroup';\r\n      break;\r\n    default:\r\n  }\r\n\r\n  const {\r\n    instrumentation, constants,\r\n  } = this.deps;\r\n\r\n  instrumentation.logMessage(\r\n    [constants.LOGCATEGORY.TRACE],\r\n    constants.LOGLEVEL.INFO,\r\n    'grid-card',\r\n    `${this.navigationLevel} level ${this.typeName} type view all clicked`\r\n  );\r\n  navigate.call(this, {\r\n    accountLevelRout,\r\n    campaignLevelRout,\r\n  });\r\n}\r\n\r\nfunction getSearchTermDetail(target) {\r\n  const $link = $(target).closest('.grid-cell--Name').find('a[data-type=SearchTerm]');\r\n  const campaignId = $link.data('campaignid');\r\n  const adGroupId = $link.data('adgroupid');\r\n  const text = $link.data('text').toString();\r\n  const navigationLevel = $link.data('navigationlevel');\r\n  const campaignName = $link.data('campaignname');\r\n  const adGroupName = $link.data('adgoupname');\r\n  const matchType = $link.data('matchtype');\r\n\r\n  return {\r\n    campaignId,\r\n    adGroupId,\r\n    text,\r\n    navigationLevel,\r\n    campaignName,\r\n    adGroupName,\r\n    matchType,\r\n  };\r\n}\r\n\r\n/* @this GridCard */\r\nfunction setupMenuItems() {\r\n  const { dateRange } = this.getState();\r\n\r\n  if (dateRange && dateRange.compared && this.typeName !== 'SearchTerm') {\r\n    const { selectedMenuItem } = this.getState();\r\n    const items = getMenuItems();\r\n\r\n    _.each(items, (item) => {\r\n      if (item.action === selectedMenuItem) {\r\n        item.preset = true; // eslint-disable-line no-param-reassign\r\n      } else {\r\n        item.preset = false; // eslint-disable-line no-param-reassign\r\n      }\r\n    });\r\n\r\n    this.setState({\r\n      menuItems: items,\r\n    });\r\n  } else {\r\n    this.setState({\r\n      menuItems: null,\r\n    });\r\n    this.onMenuAction(gridCardConfig.defaultOptions.selectedMenuItem);\r\n  }\r\n}\r\n\r\nexport class GridCard extends BaseCard {\r\n  get className() {\r\n    return 'grid-card';\r\n  }\r\n\r\n  get template() {\r\n    return () => template({\r\n      i18n,\r\n      buttonText: this.buttonText,\r\n      typeName: this.typeName,\r\n      isCustomerLevel: this.navigationLevel === 'customer',\r\n    });\r\n  }\r\n\r\n  get menuItems() {\r\n    return this.getState().menuItems;\r\n  }\r\n\r\n  onMenuAction(body) {\r\n    helpers.updateView(this.child, _.defaults({\r\n      body,\r\n    }, this.getState()));\r\n\r\n    if (this.menuItems) {\r\n      const { selectedMenuItem } = this.getState();\r\n\r\n      if (body === selectedMenuItem) {\r\n        return;\r\n      }\r\n\r\n      this.setState({\r\n        selectedMenuItem: body,\r\n      });\r\n\r\n      this.trigger('storeCardPreference', getCardPreference.call(this));\r\n\r\n      const {\r\n        instrumentation, constants,\r\n      } = this.deps;\r\n\r\n      instrumentation.logMessage(\r\n        [constants.LOGCATEGORY.TRACE],\r\n        constants.LOGLEVEL.INFO,\r\n        'grid-card',\r\n        `${this.navigationLevel} level ${this.typeName} type new pop type picked.`\r\n      );\r\n      _.defer(() => {\r\n        // If the menu is open close it.\r\n        this.$el.closest('.card-holder').find('.multilevel-dropdown.open').click();\r\n      });\r\n    }\r\n  }\r\n\r\n  initialize({\r\n    entitySet,\r\n    navigationLevel,\r\n    columns,\r\n    orderby,\r\n    direction,\r\n    directionIndex,\r\n    selectedMenuItem,\r\n    dateRange,\r\n    filter,\r\n    sharedOptions,\r\n    fetchSingleTile = false,\r\n    preexecuteFlag = false,\r\n    deps,\r\n    accountsMode = AccountsMode.Expert,\r\n  }) {\r\n    this.typeName = entitySet.type.elementType.shortName;\r\n    this.navigationLevel = navigationLevel;\r\n    this.accountsMode = accountsMode;\r\n    this.deps = deps;\r\n    i18n = this.deps.i18n; // eslint-disable-line\r\n\r\n    const isSmartShoppingCampaign = this.isSmartShoppingCampaign();\r\n    switch (this.typeName) {\r\n      case 'SearchTerm':\r\n        this.buttonText = !isSmartShoppingCampaign ? i18n.getString('Dashboard_TopSearchTerms_View_All') : null;\r\n        break;\r\n      case 'Keyword':\r\n        this.buttonText = !isSmartShoppingCampaign ? i18n.getString('Dashboard_TopKeywords_View_All') : null;\r\n        break;\r\n      case 'Campaign':\r\n        this.buttonText = i18n.getString('Dashboard_TopCampaigns_View_All');\r\n        break;\r\n      case 'AdGroup':\r\n        this.buttonText = i18n.getString('Dashboard_TopAdGroups_View_All');\r\n        break;\r\n      case 'Account':\r\n        this.buttonText = i18n.getString('Dashboard_TopAccounts_View_All');\r\n        break;\r\n      default:\r\n        this.buttonText = undefined;\r\n    }\r\n\r\n    let adjustedMenuItem = selectedMenuItem;\r\n\r\n    if (!dateRange.compared || this.typeName === 'SearchTerm') {\r\n      adjustedMenuItem = gridCardConfig.defaultOptions.selectedMenuItem;\r\n    }\r\n\r\n    this.setState(_.defaults({\r\n      selectedMenuItem: adjustedMenuItem,\r\n      dateRange,\r\n    }, {\r\n      selectedMenuItem: gridCardConfig.defaultOptions.selectedMenuItem,\r\n    }));\r\n\r\n    this.child = new Content(_.extend({\r\n      entitySet,\r\n      navigationLevel,\r\n      parent: this,\r\n      columns,\r\n      orderby,\r\n      direction,\r\n      directionIndex,\r\n      dateRange,\r\n      filter,\r\n      fetchSingleTile,\r\n      preexecuteFlag,\r\n      accountsMode,\r\n      getCardsConfig: sharedOptions.getCardsConfig,\r\n      deps: this.deps,\r\n      typeId: this.options.typeId,\r\n    }, _.pick(this.getState(), 'selectedMenuItem')));\r\n\r\n    this.setChild('content', this.child);\r\n\r\n    setupMenuItems.call(this);\r\n    helpers.updateView(this.child, this.getState());\r\n\r\n    this.listenTo(this.model, changeEvents('dateRange', 'filter'), () => {\r\n      helpers.updateView(this.child, this.getState());\r\n    });\r\n\r\n    this.listenTo(this.model, changeEvents('size'), () => {\r\n      if (this.addKeywordView && this.$el.closest('.dashboard').find(`.${this.addKeywordView.className}`).length > 0) {\r\n        this.addKeywordView.updatePosition();\r\n      }\r\n      this.child.setupScrollBarCover();\r\n    });\r\n\r\n    this.on('rendered', () => {\r\n      this.child.setupScrollBarCover();\r\n    });\r\n\r\n    this.listenTo(this.model, changeEvents('dateRange'), () => {\r\n      setupMenuItems.call(this);\r\n    });\r\n\r\n    this.listenTo(this.model, changeEvents('menuItems'), () => {\r\n      this.trigger('change:menuItems', {\r\n        value: this.getState().menuItems,\r\n        options: { replace: true },\r\n      });\r\n    });\r\n\r\n    this.onResize(() => {\r\n      this.child.setupScrollBarCover();\r\n    });\r\n\r\n    this.child.on('gridOptionChange', () => this.trigger('storeCardPreference', getCardPreference.call(this)));\r\n  }\r\n\r\n  reloadGrid() {\r\n    this.child.gridView.refresh(true);\r\n  }\r\n\r\n  get events() {\r\n    return {\r\n      'click .view-all-clickLink': () => navigateToMainGrid.call(this),\r\n      'click button.add': this.addAsKeyword,\r\n      'click button.exclude': this.addAsNegativeKeyword,\r\n    };\r\n  }\r\n\r\n  addAsKeyword(event) {\r\n    /* eslint-disable global-require */\r\n    import(/* webpackMode: 'eager' */'./search-term-operations/add-keyword').then(({ AddKeywordView }) => {\r\n      this.addKeywordView = new AddKeywordView(_.extend(getSearchTermDetail(event.currentTarget), {\r\n        gridCard: this,\r\n        addAsNegativeKeyword: false,\r\n        reloadGrid: () => this.reloadGrid(),\r\n        deps: this.deps,\r\n      })).render();\r\n\r\n      $(event.currentTarget).closest('.dashboard').append(this.addKeywordView.$el);\r\n    });\r\n  }\r\n\r\n  addAsNegativeKeyword(event) {\r\n    /* eslint-disable global-require */\r\n    import(/* webpackMode: 'eager' */'./search-term-operations/add-keyword').then(({ AddKeywordView }) => {\r\n      this.addKeywordView = new AddKeywordView(_.extend(getSearchTermDetail(event.currentTarget), {\r\n        gridCard: this,\r\n        addAsNegativeKeyword: true,\r\n        reloadGrid: () => this.reloadGrid(),\r\n        deps: this.deps,\r\n      })).render();\r\n\r\n      $(event.currentTarget).closest('.dashboard').append(this.addKeywordView.$el);\r\n    });\r\n  }\r\n}\r\n","import _ from 'underscore';\r\nimport $ from 'jquery';\r\nimport { DeterministicView, helpers } from '@bingads-webui/deterministic-view';\r\nimport { withUiBlock } from '@bingads-webui/uiblocker';\r\nimport {\r\n  createCampaignAdGroupSelector,\r\n} from '@bingads-webui-campaign-react/campaign-adgroup-selector-control';\r\nimport { DeterministicWrapperView } from '@bingads-webui/deterministic-wrapper-view';\r\n\r\nimport template from './add-keyword-template.pug';\r\n\r\nconst { ensureChildView } = helpers;\r\n\r\nclass CampaignAdgroupSelectorVnext extends DeterministicWrapperView {\r\n  viewFactory({\r\n    level,\r\n    scope,\r\n    campaignId,\r\n    selectedCampaign,\r\n    selectedAdGroup,\r\n    jsData,\r\n    i18n,\r\n    edmCampaign,\r\n  }) {\r\n    this.campaignAdgroupSelector = createCampaignAdGroupSelector({\r\n      jsData,\r\n      edmCampaign,\r\n      scope,\r\n      level,\r\n      campaignId,\r\n      i18n,\r\n      selectedCampaign,\r\n      selectedAdGroup,\r\n      parentView: this,\r\n    });\r\n    return this.campaignAdgroupSelector;\r\n  }\r\n}\r\n\r\n/* @this AddKeywordView */\r\nfunction setPosition() {\r\n  const position = this.gridCard.$('.viewport').offset();\r\n\r\n  if (!position) {\r\n    return;\r\n  }\r\n\r\n  const offset = this.addAsNegativeKeyword ? 150 : 50;\r\n  const top = position.top - offset - $(window).scrollTop();\r\n  const left = position.left - $(window).scrollLeft();\r\n\r\n  this.$el.css({\r\n    top,\r\n    left,\r\n  });\r\n}\r\n\r\n/* @this AddKeywordView */\r\nfunction updateSelectorPosition() {\r\n  // Update position of campaign adgroup popup,\r\n  // so that it's in view.\r\n  const $selector = this.$('.ba-campaign-adgroup-selector .dropdown-menu, .ba-campaign-selector .dropdown-menu, .ba-campaign-selector .dropdown-menu');\r\n  const $pageContainer = $('.overview-page');\r\n\r\n  $selector.css({ top: 'auto', left: 'auto' });\r\n  const { top, left } = $selector.offset();\r\n  const { top: parentTop, left: parentLeft } = $selector.offsetParent().offset();\r\n  const { top: pageContainerTop, left: pageContainerLeft } = $pageContainer.offset();\r\n  const pageContainerHeight = $pageContainer.height();\r\n  const pageContainerWidth = $pageContainer.width();\r\n  const { selectionLevel } = this.getState();\r\n  const selectingCampaignAndAdGroup = selectionLevel === 'adGroupLevel' && this.navigationLevel === 'account';\r\n  const selectorSize = selectingCampaignAndAdGroup ?\r\n    { height: 450, width: 620 } : { height: 450, width: 320 };\r\n\r\n  const offset = { top: 'auto', left: 'auto' };\r\n\r\n  if ((top - pageContainerTop) + selectorSize.height > pageContainerHeight) {\r\n    offset.top = Math.max(\r\n      (pageContainerHeight + pageContainerTop) - selectorSize.height - parentTop,\r\n      pageContainerTop - parentTop\r\n    );\r\n  }\r\n\r\n  if ((left - pageContainerLeft) + selectorSize.width > pageContainerWidth) {\r\n    offset.left = Math.max(\r\n      (pageContainerWidth + pageContainerLeft) - selectorSize.width - parentLeft,\r\n      pageContainerLeft - parentLeft\r\n    );\r\n  }\r\n\r\n  if (offset.top !== 'auto' || offset.left !== 'auto') {\r\n    $selector.css(offset);\r\n  }\r\n}\r\n\r\n/* @this AddKeywordView */\r\nfunction clearError() {\r\n  const { errMsg } = this.getState();\r\n\r\n  if (errMsg) {\r\n    this.setState({ errMsg: null });\r\n  }\r\n}\r\n\r\n/* @this AddKeywordView */\r\nfunction setupSelectorView() {\r\n  const { selectionLevel, adGroupName, campaignName } = this.getState();\r\n  const state = {\r\n    scope: this.navigationLevel,\r\n    level: selectionLevel,\r\n    campaignId: this.campaignId,\r\n    i18n: this.deps.i18n,\r\n    selectedCampaign: {\r\n      name: campaignName,\r\n      Id: this.campaignId,\r\n    },\r\n    selectedAdGroup: {\r\n      name: adGroupName,\r\n      campaignName,\r\n    },\r\n    jsData: this.deps.jsdata,\r\n    edmCampaign: this.deps.edmCampaign,\r\n  };\r\n\r\n  if (this.getChild('selector')) {\r\n    this.detachChild('selector').remove();\r\n  }\r\n\r\n  const childView = ensureChildView(\r\n    this,\r\n    'selector',\r\n    CampaignAdgroupSelectorVnext,\r\n    state,\r\n    {\r\n      campaignSelected(newCampaign) {\r\n        const { level = selectionLevel } = this.getState();\r\n\r\n        if (level === 'campaignLevel') {\r\n          this.campaignId = newCampaign.Id;\r\n\r\n          this.setState({\r\n            campaignName: newCampaign.Name,\r\n          });\r\n          clearError.call(this);\r\n        }\r\n      },\r\n      adgroupSelected(newAdGroup) {\r\n        this.campaignId = newAdGroup.campaignId;\r\n        this.adGroupId = newAdGroup.Id;\r\n        this.setState({\r\n          adGroupName: newAdGroup.Name,\r\n          campaignName: newAdGroup.campaignName,\r\n        });\r\n        clearError.call(this);\r\n      },\r\n    }\r\n  );\r\n\r\n  childView.once('rendered', () => {\r\n    window.addEventListener('click', this.windowClickHandler);\r\n    window.addEventListener('scroll', this.windowScrollHandler);\r\n    window.addEventListener('resize', this.windowResizeHandler);\r\n    $('.overview-page').parent().scroll(this.windowScrollHandler);\r\n    updateSelectorPosition.call(this);\r\n  });\r\n}\r\n\r\n/* @this AddKeywordView */\r\nfunction errorHandler(response) {\r\n  if (response && response.errors) {\r\n    let errors;\r\n\r\n    if (this.addAsNegativeKeyword) {\r\n      errors = this.deps.i18nErrors.getODataErrors(response.errors);\r\n    } else {\r\n      errors = this.deps.i18nErrors.getBulkApiErrors(response.errors);\r\n    }\r\n\r\n    if (errors && errors[0] && errors[0].message) {\r\n      this.setState({\r\n        errMsg: errors[0].message,\r\n      });\r\n      return true;\r\n    }\r\n  }\r\n\r\n  return false;\r\n}\r\n\r\nexport class AddKeywordView extends DeterministicView {\r\n  get className() {\r\n    return 'add-keyword-container';\r\n  }\r\n\r\n  get template() {\r\n    const {\r\n      adGroupName,\r\n      campaignName,\r\n      selectionLevel,\r\n      errMsg,\r\n      isEmpty,\r\n    } = this.getState();\r\n\r\n    return () => template({\r\n      i18n: this.deps.i18n,\r\n      text: this.text,\r\n      matchType: this.matchType,\r\n      navigationLevel: this.navigationLevel,\r\n      addAsNegativeKeyword: this.addAsNegativeKeyword,\r\n      adGroupName,\r\n      campaignName,\r\n      selectionLevel,\r\n      appendLearnMoreLink: this.deps.appendLearnMoreLink,\r\n      errMsg,\r\n      isEmpty,\r\n    });\r\n  }\r\n\r\n  initialize({\r\n    campaignId,\r\n    adGroupId,\r\n    text,\r\n    navigationLevel,\r\n    campaignName,\r\n    adGroupName,\r\n    gridCard,\r\n    addAsNegativeKeyword,\r\n    matchType,\r\n    reloadGrid,\r\n    deps,\r\n  }) {\r\n    this.campaignId = campaignId;\r\n    this.adGroupId = adGroupId;\r\n    this.text = text;\r\n    this.reloadGrid = reloadGrid;\r\n    this.deps = deps;\r\n\r\n    if (addAsNegativeKeyword && matchType === 'Broad') {\r\n      // Negative keyword do not have 'Broad' match, while delivery match type is 'Broad'.\r\n      // Set default negative keyword match type as 'Exact'.\r\n      this.matchType = 'Exact';\r\n    } else if (!addAsNegativeKeyword && matchType === 'Exact') {\r\n      // The delivery match type is 'Broad'. So the keyword already exist with 'Exact' match.\r\n      // Set default new keyword match type as 'Broad'.\r\n      this.matchType = 'Broad';\r\n    } else {\r\n      this.matchType = matchType;\r\n    }\r\n\r\n    this.navigationLevel = navigationLevel;\r\n    this.gridCard = gridCard;\r\n    this.addAsNegativeKeyword = addAsNegativeKeyword;\r\n    gridCard.trigger('clearDragAndDrop');\r\n    this.windowClickHandler = event => this.hideOnClickOutSide(event);\r\n    this.windowScrollHandler = _.throttle(() => {\r\n      this.updatePosition();\r\n    }, 10);\r\n\r\n    this.windowResizeHandler = _.throttle(() => {\r\n      this.updatePosition();\r\n    }, 10);\r\n    this.scopeContext = this.deps.scopeService.getScope();\r\n\r\n    setPosition.call(this);\r\n    this.setState({\r\n      adGroupName,\r\n      campaignName,\r\n      selectionLevel: 'adGroupLevel',\r\n      isEmpty: false,\r\n    });\r\n\r\n    setupSelectorView.call(this);\r\n  }\r\n\r\n  onSuccess() {\r\n    this.reloadGrid();\r\n    this.remove();\r\n  }\r\n\r\n  onError(response) {\r\n    if (!errorHandler.call(this, response)) {\r\n      this.remove();\r\n    }\r\n  }\r\n\r\n  cancel() {\r\n    this.remove();\r\n  }\r\n\r\n  apply() {\r\n    if (this.addAsNegativeKeyword) {\r\n      const { selectionLevel } = this.getState();\r\n      const negativeKeyword = {\r\n        NegativeKeywords: [{\r\n          Text: this.text,\r\n          EntityType: selectionLevel === 'adGroupLevel' ? 'AdGroup' : 'Campaign',\r\n          CampaignId: this.campaignId,\r\n          AdGroupId: this.adGroupId,\r\n          MatchType: this.matchType,\r\n        }],\r\n      };\r\n      const campaignEntity = this.deps.edmCampaign.currentAccount.Campaigns\r\n        .$withKey(this.campaignId);\r\n      let entitySet;\r\n\r\n      if (selectionLevel === 'adGroupLevel') {\r\n        entitySet = campaignEntity.AdGroups.$withKey(this.adGroupId);\r\n      } else {\r\n        entitySet = campaignEntity;\r\n      }\r\n\r\n      this.deps.jsdata.NegativeKeyword.create(negativeKeyword, {\r\n        entitySet: entitySet.NegativeKeywords['Default.PostNegativeKeywords'],\r\n      }).finally(document.documentElement.contains(this.el) ?\r\n        withUiBlock(this.el) :\r\n        _.noop).then(() => this.onSuccess()).catch(response => this.onError(response));\r\n    } else {\r\n      const { adGroupName } = this.getState();\r\n      const keywordData = {\r\n        Campaign: { Id: this.campaignId },\r\n        Name: adGroupName,\r\n        Id: this.adGroupId,\r\n        Keywords: [{\r\n          Text: this.text,\r\n          MatchType: this.matchType,\r\n          Bid: {},\r\n          AdGroup: { Id: this.adGroupId },\r\n        }],\r\n      };\r\n\r\n      this.deps.jsdata.AdGroup\r\n        .update(keywordData.Id, keywordData, { adapter: 'bulk' })\r\n        .finally(document.documentElement.contains(this.el) ?\r\n          withUiBlock(this.el) :\r\n          _.noop).then(() => this.onSuccess()).catch(response => this.onError(response));\r\n    }\r\n  }\r\n\r\n  updatePosition() {\r\n    setPosition.call(this);\r\n    updateSelectorPosition.call(this);\r\n  }\r\n\r\n  toggleSelector() {\r\n    if (this.$('.popover.row.fade.bottom:visible').length === 0) {\r\n      _.defer(() => {\r\n        this.$('div.form-control.dropDownSelect.k-button.clickable').click();\r\n      });\r\n    }\r\n  }\r\n\r\n  updateEntityLevel(event) {\r\n    const selected = this.$('input[type=\"radio\"][name=\"entityLevel\"]:checked');\r\n\r\n    if (selected.length > 0) {\r\n      const { selectionLevel } = this.getState();\r\n      const value = selected.val();\r\n\r\n      if (selectionLevel !== value) {\r\n        this.setState({\r\n          selectionLevel: value,\r\n        });\r\n        setupSelectorView.call(this);\r\n        clearError.call(this);\r\n      }\r\n    }\r\n    event.stopPropagation();\r\n    event.preventDefault();\r\n  }\r\n\r\n  keywordTextChange() {\r\n    this.text = this.$('input.keyword-text__value').val();\r\n    clearError.call(this);\r\n    this.setState({\r\n      isEmpty: !this.text,\r\n    });\r\n  }\r\n\r\n  matchTypeChange() {\r\n    this.matchType = this.$('select.match-type__value').val();\r\n    clearError.call(this);\r\n  }\r\n\r\n  get events() {\r\n    return {\r\n      'click button.cancel': this.cancel,\r\n      'click button.apply': this.apply,\r\n      'click .selected-entity-names': this.toggleSelector,\r\n      'click input[type=\"radio\"][name=\"entityLevel\"]': this.updateEntityLevel,\r\n      'input input.keyword-text__value': this.keywordTextChange,\r\n      'change select.match-type__value': this.matchTypeChange,\r\n      'click .ba-campaign-adgroup-selector, .ba-campaign-selector, .ba-campaign-selector': () => _.defer(updateSelectorPosition.bind(this)),\r\n    };\r\n  }\r\n\r\n  remove() {\r\n    this.gridCard.trigger('setupDragAndDrop');\r\n    window.removeEventListener('click', this.windowClickHandler);\r\n    window.removeEventListener('scroll', this.windowScrollHandler);\r\n    window.removeEventListener('resize', this.windowResizeHandler);\r\n    super.remove();\r\n  }\r\n\r\n  hideOnClickOutSide(event) {\r\n    if (!this.el.contains(event.target)) {\r\n      this.remove();\r\n    }\r\n  }\r\n}\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport Backbone from 'backbone';\r\nimport { TooltipHost } from '@bingads-webui-react/fabric-control';\r\nimport { Glyphicon } from '@bingads-webui-react/primitive-unthemed';\r\nimport { DeterministicViewForBackBoneView } from '@bingads-webui/deterministic-wrapper-view';\r\n\r\n// eslint-disable-next-line react/prop-types\r\nexport const MetricToolTip = ({ content }) => (\r\n  <TooltipHost\r\n    content={content}\r\n  >\r\n    <Glyphicon glyph=\"ba-Info\" className=\"metric-info\" />\r\n  </TooltipHost>\r\n);\r\n\r\nexport class MetricToolTipBackBoneView extends Backbone.View {\r\n  initialize({ content }) {\r\n    this.content = content;\r\n  }\r\n\r\n  render() {\r\n    ReactDOM.render(\r\n      (<MetricToolTip content={this.content} />),\r\n      this.el\r\n    );\r\n    return this;\r\n  }\r\n\r\n  remove() {\r\n    ReactDOM.unmountComponentAtNode(this.el);\r\n    return super.remove();\r\n  }\r\n}\r\n\r\nexport function getDeterministicTooltipView(content) {\r\n  return new DeterministicViewForBackBoneView({\r\n    view: new MetricToolTipBackBoneView({ content }),\r\n  });\r\n}\r\n","import _ from 'underscore';\r\nimport 'bootstrap';\r\nimport { DeterministicView } from '@bingads-webui/deterministic-view';\r\nimport { allMetrics as defaultMetrics } from '@bingads-webui-campaign/overview-cards-common';\r\nimport defaultTemplate from './template.pug';\r\nimport defaultButtonTemplate from './button-template.pug';\r\nimport defaultDropdownMenuTemplate from './dropdown-menu-template.pug';\r\nimport { getDeterministicTooltipView } from './info-tooltip';\r\n\r\nexport class MetricPicker extends DeterministicView {\r\n  constructor(options) {\r\n    super(_.extend({}, options, { renderInSync: true }));\r\n  }\r\n\r\n  initialize({\r\n    template = defaultTemplate,\r\n    buttonTemplate = defaultButtonTemplate,\r\n    buttonTemplateParams = {},\r\n    dropdownMenuTemplate = defaultDropdownMenuTemplate,\r\n    metric,\r\n    metrics,\r\n    leftAlign,\r\n    metricFormatter,\r\n    s$i18n,\r\n    i18n,\r\n    accountsMode,\r\n    deps,\r\n  } = {}) {\r\n    this.template = template;\r\n    this.buttonTemplate = buttonTemplate;\r\n    this.buttonTemplateParams = buttonTemplateParams;\r\n    this.dropdownMenuTemplate = dropdownMenuTemplate;\r\n    this.leftAlign = leftAlign;\r\n    this.metricFormatter = metricFormatter;\r\n    this.s$i18n = s$i18n;\r\n    this.i18n = i18n;\r\n    this.accountsMode = accountsMode;\r\n    this.deps = deps || {};\r\n    this.setState({\r\n      metric,\r\n      metrics,\r\n    });\r\n  }\r\n\r\n  get events() {\r\n    return {\r\n      'click .metric-picker': (e) => {\r\n        // if the event was triggered from dropdown menu, ignore it\r\n        if (e.target.classList.contains('dropdown-menu')) {\r\n          e.stopPropagation();\r\n          e.preventDefault();\r\n          return;\r\n        }\r\n        const toggleEl = this.$('.dropdown-toggle')[0];\r\n\r\n        if (toggleEl === e.target || toggleEl.contains(e.target)) {\r\n          return;\r\n        }\r\n\r\n        this.trigger('pick', {\r\n          metric: this.getState().metric,\r\n        });\r\n      },\r\n      'click .dropdown-menu li': (e) => {\r\n        e.stopPropagation();\r\n        e.preventDefault();\r\n        const { metric } = e.currentTarget.dataset;\r\n\r\n        this.setState({\r\n          metric,\r\n        });\r\n\r\n        this.trigger('pick', {\r\n          metric: this.getState().metric,\r\n        });\r\n\r\n        this.SetUpContentForGlobalA11yAnnounceArea(metric);\r\n      },\r\n    };\r\n  }\r\n\r\n  renderTrunk() {\r\n    const {\r\n      performanceMetric = '',\r\n      metric,\r\n      metrics = defaultMetrics(this.deps.config && this.deps.config.get('Permissions'), this.accountsMode),\r\n      hideCurrency,\r\n    } = this.getState();\r\n\r\n    this.$el.html(this.template({\r\n      metric,\r\n    }));\r\n\r\n    const metricValue = metric ? this.metricFormatter.formatMetric(\r\n      metric,\r\n      performanceMetric || 0,\r\n      { hideCurrency }\r\n    ) : '';\r\n    const addInfo = metricValue === '-';\r\n\r\n    if (addInfo) {\r\n      const tooltipView = getDeterministicTooltipView(this.i18n.getString('Dashboard_CurrencyMetric_Info_Tooltip'));\r\n\r\n      this.setChild('info-tooltip', tooltipView);\r\n    }\r\n\r\n    this.$('.metric-picker').append(this.buttonTemplate({\r\n      s$i18n: this.s$i18n,\r\n      metricValue,\r\n      metric,\r\n      performanceMetric,\r\n      i18n: this.i18n,\r\n      addInfo,\r\n      ...this.buttonTemplateParams,\r\n    }));\r\n\r\n    this.$('.metric-picker').append(this.dropdownMenuTemplate({\r\n      s$i18n: this.s$i18n,\r\n      metrics,\r\n      leftAlign: this.leftAlign,\r\n    }));\r\n\r\n    return this;\r\n  }\r\n\r\n  SetUpContentForGlobalA11yAnnounceArea(metricName) {\r\n    const a11yAnnounceArea = document.querySelector('#a11yAnnounceArea');\r\n    if (a11yAnnounceArea) {\r\n      a11yAnnounceArea.textContent = this.i18n.getString('Dashboard_Graph_MetricsName_Updated_A11y_Info').replace('{{metricsName}}', this.s$i18n.property('PerformanceMetrics', metricName));\r\n      setTimeout(() => {\r\n        a11yAnnounceArea.textContent = '';\r\n      }, 0);\r\n    }\r\n  }\r\n}\r\n","export { CardState } from './src/dashboard/card-state';\r\n\r\nexport { getViewportCardCount } from './src/dashboard/util';\r\n\r\nexport { DateFilterState } from './src/dashboard/datefilter-state';\r\n\r\nexport const overviewPanel = () => import(/* webpackMode: 'eager' */ './src/index');\r\n","function getDefaultConfig() {\r\n  return {\r\n    defaultName: 'default',\r\n    defaultDragAndDrop: true,\r\n    defaultDebug: false,\r\n    defaultDragHandlerSelector: '.card-holder__toolbar, .card-holder__title, .card-holder__menu-container',\r\n    layoutOptions: {\r\n      small: {\r\n        breakpoint: 0,\r\n        minCardSize: 12,\r\n        maxCardSize: 12,\r\n        defaultHeight: 368,\r\n      },\r\n      medium: {\r\n        breakpoint: 1046,\r\n        minCardSize: 6,\r\n        maxCardSize: 12,\r\n        defaultHeight: 368,\r\n      },\r\n      large: {\r\n        breakpoint: 1400,\r\n        minCardSize: 4,\r\n        maxCardSize: 12,\r\n        defaultHeight: 368,\r\n      },\r\n    },\r\n    toolbar: {\r\n      ids: {\r\n        addCardButton: 'btn-add-card',\r\n      },\r\n      items: [\r\n        {\r\n          type: 'button',\r\n          id: 'btn-add-card',\r\n          classes: ['btn', 'btn-default'],\r\n          textKey: 'Dashboard_AddCard',\r\n        },\r\n      ],\r\n    },\r\n  };\r\n}\r\n\r\nfunction getWelcomeConfig() {\r\n  return {\r\n    defaultName: 'welcome',\r\n    defaultDragAndDrop: false,\r\n    defaultDebug: false,\r\n    layoutOptions: {\r\n      small: {\r\n        breakpoint: 0,\r\n        minCardSize: 12,\r\n        maxCardSize: 12,\r\n        defaultHeight: 368,\r\n      },\r\n      medium: {\r\n        breakpoint: 1046,\r\n        minCardSize: 6,\r\n        maxCardSize: 12,\r\n        defaultHeight: 368,\r\n      },\r\n    },\r\n  };\r\n}\r\n\r\nexport const dashboardConfig = {\r\n  getDefaultConfig() {\r\n    return getDefaultConfig();\r\n  },\r\n  getWelcomeConfig() {\r\n    return getWelcomeConfig();\r\n  },\r\n};\r\n","import ko from 'knockout';\r\nimport _ from 'underscore';\r\nimport { keyCode } from '@bingads-webui/keycode';\r\n\r\nexport class AddCardViewModel {\r\n  constructor({\r\n    allAvailableCards,\r\n    selectedCards,\r\n    i18n,\r\n    updateFocusedIndex,\r\n  }) {\r\n    this.selectedCards = selectedCards;\r\n    this.i18n = i18n;\r\n    const getFirstFocusableIndex = (cards) => {\r\n      const firstSelectedIndex = _.findIndex(\r\n        cards,\r\n        card => card.selected()\r\n      );\r\n      return firstSelectedIndex === -1 ? 0 : firstSelectedIndex;\r\n    };\r\n\r\n    // construct the observables\r\n    _.each(allAvailableCards, (card) => {\r\n      _.extend(card, {\r\n        selected: ko.observable(_.findIndex(\r\n          selectedCards,\r\n          selected => selected === card.typeId\r\n        ) !== -1),\r\n      });\r\n\r\n      _.extend(card, {\r\n        appliedClass: ko.pureComputed(() => {\r\n          if (card.selected()) {\r\n            return `add-card__thumbnail-${card.cssKey} add-card__thumbnail-${card.cssKey}--selected`;\r\n          }\r\n          return `add-card__thumbnail-${card.cssKey}`;\r\n        }, card),\r\n      });\r\n    });\r\n\r\n    this.firstFocusedIndex = ko.observable(getFirstFocusableIndex(allAvailableCards));\r\n\r\n    this.allCards = ko.observableArray(allAvailableCards);\r\n\r\n    this.cardsToAdd = ko.pureComputed(() => _.chain(this.allCards())\r\n      .filter(card => card.selected() === true)\r\n      .pluck('typeId')\r\n      .difference(this.selectedCards)\r\n      .value());\r\n\r\n    this.cardsToDelete = ko.pureComputed(() => _.chain(this.allCards())\r\n      .filter(card => card.selected() !== true)\r\n      .pluck('typeId')\r\n      .intersection(this.selectedCards)\r\n      .value());\r\n\r\n    this.selectedTilesNumber = ko.pureComputed(() => {\r\n      const selectedGroup = _.countBy(this.allCards(), c => (c.selected() === true ? 'selected' : 'unselected'));\r\n\r\n      return selectedGroup.selected || 0;\r\n    }, this);\r\n\r\n    // Simple click callback, only for toggle state\r\n    this.onThumbnailClicked = (card) => {\r\n      card.selected(!card.selected());\r\n      this.firstFocusedIndex(getFirstFocusableIndex(allAvailableCards));\r\n    };\r\n\r\n    this.onKeyPress = (card, event) => {\r\n      if (event.keyCode === keyCode.Space) {\r\n        card.selected(!card.selected());\r\n        this.firstFocusedIndex(getFirstFocusableIndex(allAvailableCards));\r\n        event.preventDefault();\r\n      }\r\n    };\r\n\r\n    this.onFocus = (card) => {\r\n      const index = allAvailableCards.indexOf(card);\r\n      updateFocusedIndex(index);\r\n    };\r\n  }\r\n}\r\n","import Backbone from 'backbone';\r\nimport ko from 'knockout';\r\nimport _ from 'underscore';\r\nimport { keyCode } from '@bingads-webui/keycode';\r\nimport edm from '@bingads-webui-component-legacy/edm-campaign/index';\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\n\r\nimport templateVNext from './template-vnext.pug';\r\nimport { AddCardViewModel } from './viewmodel';\r\n\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/feature/dashboard-page');\r\nconst permissions = config.get('Permissions') || {};\r\n\r\n/* @this AddCardView */\r\nfunction saveAddCard() {\r\n  this.trigger('apply', {\r\n    idsToAdd: this.viewModel.cardsToAdd(),\r\n    idsToDelete: this.viewModel.cardsToDelete(),\r\n  });\r\n}\r\n\r\n/* @this AddCardView */\r\nfunction cancelAddCard() {\r\n  this.trigger('cancel');\r\n}\r\n\r\n/* @this GetNextFocusedIndex */\r\nfunction getNextFocusedItemIndex(numOfCards, previousIndex, isNext) {\r\n  const maxIndex = numOfCards - 1;\r\n\r\n  let newIndex;\r\n\r\n  if (previousIndex < 0) {\r\n    newIndex = 0;\r\n  } else if (previousIndex > maxIndex) {\r\n    newIndex = maxIndex;\r\n  } else if (isNext && previousIndex === maxIndex) {\r\n    newIndex = 0;\r\n  } else if (!isNext && previousIndex === 0) {\r\n    newIndex = maxIndex;\r\n  } else {\r\n    newIndex = isNext ? previousIndex + 1 : previousIndex - 1;\r\n  }\r\n\r\n  return newIndex;\r\n}\r\n\r\n/* @this GetAllCardElements */\r\nfunction getAllAvailableCardElements() {\r\n  return this.$('.add-card__card-box');\r\n}\r\n\r\n/* @this AddCardKeyDown */\r\nfunction onKeyDown(event) {\r\n  const allAvailableCardElements = getAllAvailableCardElements.call(this);\r\n  const numOfCards = allAvailableCardElements.length;\r\n  if (numOfCards === 0) {\r\n    return;\r\n  }\r\n  if (event.keyCode === keyCode.ArrowDown) {\r\n    this.focusedIndex = getNextFocusedItemIndex(numOfCards, this.focusedIndex, true);\r\n    event.preventDefault();\r\n  } else if (event.keyCode === keyCode.ArrowUp) {\r\n    this.focusedIndex = getNextFocusedItemIndex(numOfCards, this.focusedIndex, false);\r\n    event.preventDefault();\r\n  } else if (event.keyCode === keyCode.Home) {\r\n    this.focusedIndex = 0;\r\n  } else if (event.keyCode === keyCode.End) {\r\n    this.focusedIndex = numOfCards - 1;\r\n  }\r\n  const cardElement = allAvailableCardElements[this.focusedIndex];\r\n  cardElement.focus();\r\n}\r\n\r\nexport class AddCardView extends Backbone.View {\r\n  initialize({\r\n    selectedCards = [],\r\n    navigationLevel,\r\n    accountsMode,\r\n    newCardsConfig = null,\r\n    campaignType,\r\n    newI18n,\r\n  }) {\r\n    this.navigationLevel = navigationLevel;\r\n    this.campaignType = campaignType;\r\n    const cardsConfig = newCardsConfig({\r\n      permissions,\r\n      edm,\r\n      accountsMode,\r\n    });\r\n    this.focusedIndex = -1;\r\n    const updateFocusedIndex = (index) => {\r\n      this.focusedIndex = index;\r\n    };\r\n    this.newI18n = newI18n;\r\n\r\n    this.viewModel = new AddCardViewModel({\r\n      allAvailableCards: _.chain(cardsConfig).filter(conf => cardsConfig.isValidForNavigationLevel(\r\n        conf,\r\n        this.navigationLevel,\r\n        this.campaignType\r\n      )).map((conf) => {\r\n        const useNewI18n = conf.useNewI18n || false;\r\n        return ({\r\n          typeId: conf.typeId,\r\n          name: conf.name,\r\n          addCardTitle: useNewI18n ? newI18n.getString(conf.addCardTitleKey) : i18n.getString(conf.addCardTitleKey),\r\n          cssKey: conf.cssKey,\r\n          desc: useNewI18n ? newI18n.getString(conf.descKey) : i18n.getString(conf.descKey),\r\n        });\r\n      }).value(),\r\n      selectedCards,\r\n      i18n,\r\n      newI18n,\r\n      updateFocusedIndex,\r\n    });\r\n  }\r\n\r\n  events() {\r\n    return {\r\n      'click .save': saveAddCard,\r\n      'click .cancel': cancelAddCard,\r\n      'keydown .add-card__card-box': onKeyDown,\r\n    };\r\n  }\r\n\r\n  render() {\r\n    this.$el.html(templateVNext({\r\n      i18n,\r\n    }));\r\n    ko.applyBindings(this.viewModel, this.el);\r\n\r\n    return this;\r\n  }\r\n\r\n  show() {\r\n    this.$el.show();\r\n  }\r\n\r\n  hide() {\r\n    this.$el.hide();\r\n  }\r\n\r\n  remove() {\r\n    super.remove();\r\n  }\r\n}\r\n","/* eslint-disable import/no-unresolved */\r\n/* eslint-disable import/extensions */\r\nimport Promise from 'bluebird';\r\nimport eventDispatcher from '@bingads-webui-component-legacy/event-dispatcher/index';\r\n\r\nexport const welcomeCardConfig = [\r\n  {\r\n    // Welcome Tips Card\r\n    validFor: ['account'],\r\n    typeId: 'CardType-WelcomeTips',\r\n    name: 'WelcomeTipsCard',\r\n    cssKey: 'tips-and-opportunities',\r\n    titleKey: 'Dashboard_Tips_Card_Title',\r\n    contentType: 'WelcomeTipsCard',\r\n    sizeOption: {\r\n      small: {\r\n        width: 12,\r\n        supportedWidth: [12],\r\n      },\r\n      medium: {\r\n        width: 6,\r\n        supportedWidth: [6],\r\n      },\r\n    },\r\n  },\r\n];\r\n\r\nwelcomeCardConfig.getContentConstructor = ({\r\n  contentType,\r\n  constants,\r\n  instrumentation,\r\n}) => new Promise((resolve) => {\r\n  const i18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/dashboard-cards');\r\n  const deps = {\r\n    i18n,\r\n    eventDispatcher,\r\n  };\r\n\r\n  switch (contentType) {\r\n    case 'WelcomeTipsCard':\r\n      import(/* webpackMode: 'eager' */ '@bingads-webui-campaign-legacy/dashboard-cards/welcome-tips-card/index').then((contentConstructor) => {\r\n        resolve({\r\n          contentConstructor: contentConstructor.default,\r\n          deps,\r\n        });\r\n      });\r\n      break;\r\n    default:\r\n      resolve();\r\n      instrumentation.logMessage(\r\n        [constants.LOGCATEGORY.ERROR],\r\n        constants.LOGLEVEL.INFO,\r\n        'dashboard/dashboard-view',\r\n        `Unknown card content: ${contentType}`\r\n      );\r\n  }\r\n});\r\n","import Backbone from 'backbone';\r\nimport Promise from 'bluebird';\r\nimport $ from 'jquery';\r\nimport _ from 'underscore';\r\nimport { AccountsMode } from '@bingads-webui-campaign/overview-cards-common';\r\nimport { CampaignType as AccountLevelCampaignType } from '@bingads-webui-campaign/campaign-ui-common';\r\n\r\nimport { dashboardConfig } from '../config/dashboard-config';\r\nimport { welcomeCardConfig } from '../config/welcome-card-config';\r\nimport { getQuickInstrumentation } from '../instrumentation/log-helper';\r\n\r\nconst CampaignLevelCampaignType = _.mapObject(AccountLevelCampaignType, (val, key) => key);\r\n\r\nfunction uri() {\r\n  const api = 'Customers(:advertisercustomer_id)/Accounts(:account_id)/Default.AlertInformation';\r\n  const odataParam = '$select=HasBIData,HasCampaigns,HasOtherAccounts';\r\n\r\n  return `${api}?${odataParam}`;\r\n}\r\n\r\nexport class CardState extends Backbone.Model {\r\n  initialize({\r\n    navigationLevel,\r\n    permissions,\r\n    edm,\r\n    pageContext,\r\n    odata,\r\n    preferences,\r\n    instrumentationSettings,\r\n    instrumentation,\r\n    constants,\r\n    newCardsConfig = null,\r\n    welcomeCardsConfig,\r\n    accountsMode = AccountsMode.Expert,\r\n    campaignType,\r\n    isPrefetch = false,\r\n  }) {\r\n    this.isPrefetch = isPrefetch;\r\n    if (navigationLevel === 'customer') {\r\n      // eslint-disable-next-line no-param-reassign\r\n      edm.customerIdType.useAdvertiserCustomerId = false;\r\n    }\r\n    this.set({\r\n      name: 'default',\r\n      navigationLevel,\r\n    });\r\n    this.campaignType = campaignType;\r\n    this.pageContext = pageContext;\r\n    this.odata = odata;\r\n    this.newCardsConfig = newCardsConfig;\r\n    this.welcomeCardsConfig = welcomeCardsConfig;\r\n    this.preferences = preferences;\r\n    this.accountsMode = accountsMode;\r\n    // Get the ID based on the name and navigation level before anything else.\r\n    this.p$Initialized = preferences.initialize().then(() => {\r\n      this.fetchDashboardId();\r\n    });\r\n\r\n    this.cardsConfig = newCardsConfig({\r\n      permissions,\r\n      edm,\r\n      accountsMode,\r\n    });\r\n\r\n    this.quickInstrumentation = this.isPrefetch ? _.noop :\r\n      getQuickInstrumentation({\r\n        instrumentationSettings,\r\n        instrumentation,\r\n        constants,\r\n      });\r\n  }\r\n\r\n  fetchDashboardId() {\r\n    const name = this.get('name');\r\n\r\n    if (this.accountsMode === AccountsMode.Smart) {\r\n      this.set('dashboardId', `${name}-${this.navigationLevel}-smart`);\r\n    } else if (this.campaignType === CampaignLevelCampaignType.Hotel || this.campaignType === AccountLevelCampaignType.Hotel) {\r\n      this.set('dashboardId', `${name}-${this.navigationLevel}-hotel`);\r\n    } else if (this.campaignType === CampaignLevelCampaignType.PerformanceMax || this.campaignType === AccountLevelCampaignType.PerformanceMax) {\r\n      this.set('dashboardId', `${name}-${this.navigationLevel}-performancemax`);\r\n    } else if (this.campaignType === CampaignLevelCampaignType.App || this.campaignType === AccountLevelCampaignType.App) {\r\n      this.set('dashboardId', `${name}-${this.navigationLevel}-app`);\r\n    } else {\r\n      this.set('dashboardId', `${name}-${this.navigationLevel}`);\r\n    }\r\n  }\r\n\r\n  loadDashboardState() {\r\n    // get all dashboard preference\r\n    this.prefs = this.getDashBoardPreferences();\r\n    if (this.prefs && _.has(this.prefs.Data, this.dashboardId) && _.has(this.prefs.Data[this.dashboardId], 'options')) {\r\n      this.set('options', _.extend(_.omit(this.prefs.Data[this.dashboardId].options, ['reOrderedForV2', 'showWelcomeTips', 'reOrderedForABCTest']), this.options));\r\n    }\r\n\r\n    const userWelcomePref = this.preferences.findByNameAtUserLevel(this.get('userWelcomePrefName'));\r\n    const doneWithWelcomeTips = userWelcomePref ? userWelcomePref.Data : false;\r\n    const doNotShowWelcomeTips = this.dashboardId !== 'default-account' || doneWithWelcomeTips === true;\r\n    const welcomeStatus = new Promise((resolve) => {\r\n      if (doNotShowWelcomeTips) {\r\n        resolve({ showWelcomeTips: false });\r\n      } else if (this.pageContext.WelcomeStatus &&\r\n        !this.pageContext.WelcomeStatus.doneInitialLoad) {\r\n        resolve({\r\n          showWelcomeTips: this.pageContext.WelcomeStatus.ShowWelcomeTips,\r\n          createdCampaign: this.pageContext.WelcomeStatus.HasCampaigns,\r\n          skippedBothAtAccountCreation: this.options.skippedBothAtAccountCreation,\r\n          skippedNoneAtAccountCreation: this.options.skippedNoneAtAccountCreation,\r\n        });\r\n        this.pageContext.WelcomeStatus.doneInitialLoad = true;\r\n      } else {\r\n        this.odata.get(uri()).then((data) => {\r\n          if (data.HasBIData || data.HasOtherAccounts) {\r\n            resolve({ showWelcomeTips: false });\r\n          } else {\r\n            resolve({\r\n              showWelcomeTips: true,\r\n              createdCampaign: data.HasCampaigns,\r\n              skippedBothAtAccountCreation: this.options.skippedBothAtAccountCreation,\r\n              skippedNoneAtAccountCreation: this.options.skippedNoneAtAccountCreation,\r\n            });\r\n          }\r\n        }).catch(() => {\r\n          resolve({ showWelcomeTips: false });\r\n        });\r\n      }\r\n    });\r\n\r\n    return welcomeStatus.then((status) => {\r\n      if (status.showWelcomeTips) {\r\n        this.showWelcomeTips = true;\r\n        this.loadWelcomeTips();\r\n        this.welcomeAttr = _.clone(this.welcomeCardsConfig[0]);\r\n        this.welcomeAttr.constructOptions = status;\r\n        this.config = dashboardConfig.getWelcomeConfig();\r\n        this.config.getContentConstructor = this.welcomeCardsConfig.getContentConstructor;\r\n        // for the users we show welcome tips, set overview tab as default.\r\n        this.preferences.set({\r\n          Name: this.get('OverviewAsDefaultPrefName'),\r\n          Data: true,\r\n        });\r\n      } else {\r\n        this.showWelcomeTips = false;\r\n        if (!doNotShowWelcomeTips) {\r\n          // status changed. We will not show welcome tips for this user anymore.\r\n          // option clean up\r\n          const newOptions = _.omit(this.options, ['skippedBothAtAccountCreation', 'doneWithWelcomeTips', 'skippedNoneAtAccountCreation']);\r\n\r\n          this.set('options', newOptions);\r\n          _.defer(() => this.save({ newOptions }));\r\n          this.quickInstrumentation('LoadOverviewPage', 'No welcomeTips for this user anymore.');\r\n          this.preferences.setAtUserLevel({\r\n            Name: this.get('userWelcomePrefName'),\r\n            Data: true,\r\n          });\r\n        }\r\n        this.config = dashboardConfig.getDefaultConfig();\r\n        this.config.getContentConstructor = this.cardsConfig.getContentConstructor;\r\n        this.loadDashBoardCards();\r\n      }\r\n    });\r\n  }\r\n\r\n  loadWelcomeTips() {\r\n    this.set('cards', _.map(welcomeCardConfig, card => ({\r\n      id: card.typeId,\r\n      sizeOption: card.sizeOption,\r\n    })));\r\n  }\r\n\r\n  loadDashBoardCards() {\r\n    if (this.prefs && _.has(this.prefs.Data, this.dashboardId) && _.has(this.prefs.Data[this.dashboardId], 'cards')) {\r\n      const cardGroup = _.groupBy(\r\n        this.cardsConfig,\r\n        cardConfig => this.getCardCategory(cardConfig)\r\n      );\r\n\r\n      let availableCards = cardGroup.defaultIn;\r\n      let cards;\r\n      let savePreference = false;\r\n\r\n      if (_.size(cardGroup.defaultOut) !== 0) {\r\n        availableCards = availableCards.concat(cardGroup.defaultOut);\r\n      }\r\n\r\n      // See if we have any retired cards:\r\n      // cards that in the user's preference but not available anymore.\r\n      const retiredCards = _.difference(_.map(this.prefs.Data[this.dashboardId].cards, card =>\r\n        card.id), _.map(availableCards, card =>\r\n        card.typeId));\r\n\r\n      if (_.size(retiredCards) !== 0) {\r\n        this.quickInstrumentation('RemoveRetiredTilesFromOverview');\r\n      }\r\n      // Filter out retired cards from preference.\r\n      this.prefs.Data[this.dashboardId].cards = _.filter(\r\n        this.prefs.Data[this.dashboardId].cards,\r\n        card => !_.contains(retiredCards, card.id)\r\n      );\r\n      // Filter out hidden cards.\r\n      cards = _.filter(this.prefs.Data[this.dashboardId].cards, card => !card.hidden);\r\n\r\n      // Check for cards that are not in users preference -- new cards for the user.\r\n      const newDefaultInCards = _.difference(_.map(cardGroup.defaultIn, card =>\r\n        card.typeId), _.map(this.prefs.Data[this.dashboardId].cards, card =>\r\n        card.id));\r\n\r\n      const newDefaultOutCards = _.difference(_.map(cardGroup.defaultOut, card =>\r\n        card.typeId), _.map(this.prefs.Data[this.dashboardId].cards, card =>\r\n        card.id));\r\n\r\n      if (_.size(newDefaultOutCards) !== 0) {\r\n        this.set('newDefaultOutCardsAvailable', true);\r\n        this.quickInstrumentation('AddNewTilesToOverview', `Adding new default out cards: ${newDefaultOutCards.join(', ')}`);\r\n      }\r\n      // Add new default-in cards to the collection.\r\n      if (_.size(newDefaultInCards) !== 0) {\r\n        const newCardConfig = _.chain(cardGroup.defaultIn)\r\n          .filter(card => _.indexOf(newDefaultInCards, card.typeId) !== -1)\r\n          .map(card => ({\r\n            id: card.typeId,\r\n            sizeOption: card.sizeOption,\r\n          })).value();\r\n\r\n        cards = cards.concat(newCardConfig);\r\n        this.set('newDefaultInCards', newDefaultInCards);\r\n        this.quickInstrumentation('AddNewTilesToOverview', `Adding new default in cards: ${newDefaultInCards.join(', ')}`);\r\n      }\r\n\r\n      _.each(cards, (card) => {\r\n        if (card.sizeOption) {\r\n          // If user does not have pref for some size due to new size options. use the one in config\r\n          if (_.size(this.config.layoutOptions) !== _.size(card.sizeOption)) {\r\n            const cardConfig = _.find(this.cardsConfig, item => item.typeId === card.id);\r\n\r\n            _.each(_.keys(cardConfig.sizeOption), (key) => {\r\n              if (!card.sizeOption[key]) {\r\n                // eslint-disable-next-line no-param-reassign\r\n                card.sizeOption[key] = { width: cardConfig.sizeOption[key].width };\r\n                savePreference = true;\r\n              }\r\n            });\r\n          }\r\n        } else {\r\n          // Some old preferences might not contain sizeOptions. Add it if it's missing.\r\n          const cardConfig = _.find(this.cardsConfig, item => item.typeId === card.id);\r\n\r\n          // eslint-disable-next-line no-param-reassign\r\n          card.sizeOption = cardConfig.sizeOption;\r\n          savePreference = true;\r\n        }\r\n      });\r\n\r\n      // Update preference if its modified due to new cards or retirement.\r\n      savePreference = savePreference ||\r\n        _.size(retiredCards) !== 0 ||\r\n        _.size(newDefaultInCards) !== 0;\r\n\r\n      this.set('cards', cards);\r\n      if (savePreference) {\r\n        _.defer(() => this.save({\r\n          newCards: cards,\r\n          newOptions: this.options,\r\n        }));\r\n      }\r\n    } else {\r\n      this.quickInstrumentation('FirstUse');\r\n      // Add all the default-in cards.\r\n      const cardGroup = _.groupBy(\r\n        this.cardsConfig,\r\n        cardConfig => this.getCardCategory(cardConfig)\r\n      );\r\n\r\n      const defaultCards = _.map(cardGroup.defaultIn, card => ({\r\n        id: card.typeId,\r\n        sizeOption: card.sizeOption,\r\n      }));\r\n\r\n      this.set('cards', defaultCards);\r\n\r\n      let newOptions;\r\n\r\n      _.defer(() => this.save({\r\n        newCards: defaultCards,\r\n        newOptions,\r\n      }));\r\n    }\r\n  }\r\n\r\n  sync() {\r\n    return this.p$Initialized.then(() => this.loadDashboardState());\r\n  }\r\n\r\n  save({\r\n    newCards,\r\n    newOptions,\r\n  }) {\r\n    if (this.isPrefetch || (_.isUndefined(newCards) && _.isUndefined(newOptions))) {\r\n      return;\r\n    }\r\n\r\n    let cards;\r\n\r\n    // Do not save card specific prefs for welcome tips.\r\n    if (!this.showWelcomeTips) {\r\n      if (newCards) {\r\n        cards = newCards;\r\n      } else {\r\n        ({ cards } = this);\r\n      }\r\n\r\n      if (cards && this.prefs && _.has(this.prefs.Data, this.dashboardId) && _.has(this.prefs.Data[this.dashboardId], 'cards')) {\r\n        const hiddenCards = _.difference(\r\n          _.map(this.prefs.Data[this.dashboardId].cards, card => card.id),\r\n          _.map(cards, card => card.id)\r\n        );\r\n\r\n        this.set('cards', cards);\r\n        if (_.size(hiddenCards) !== 0) {\r\n          cards = cards.concat(_.map(hiddenCards, card => ({ id: card, hidden: true })));\r\n        }\r\n      }\r\n    }\r\n\r\n    const options = _.extend({}, this.options, newOptions);\r\n\r\n    if (!_.isUndefined(options)) {\r\n      this.set('options', options);\r\n    }\r\n\r\n    let data = {};\r\n\r\n    if (this.prefs) {\r\n      data = _.extend(data, this.prefs.Data);\r\n    }\r\n\r\n    data = _.extend(data, {\r\n      [this.dashboardId]: {\r\n        cards,\r\n        options,\r\n      },\r\n    });\r\n\r\n    const preference = {\r\n      Data: data,\r\n    };\r\n\r\n    this.setDashBoardPreferences(preference);\r\n\r\n    if (this.prefs) {\r\n      this.prefs.Data = data;\r\n    } else {\r\n      this.prefs = preference;\r\n    }\r\n  }\r\n\r\n  getCardAttrByTypeId(id) {\r\n    let card;\r\n\r\n    if (this.showWelcomeTips) {\r\n      card = this.welcomeAttr;\r\n    } else {\r\n      card = _.find(this.cardsConfig, conf => conf.typeId === id &&\r\n        this.cardsConfig.isValidForNavigationLevel(conf, this.navigationLevel, this.campaignType));\r\n    }\r\n\r\n    if (_.isUndefined(card)) {\r\n      return null;\r\n    }\r\n    const attribute = {};\r\n\r\n    // create a deep copy before return\r\n    $.extend(true, attribute, _.pick(\r\n      card,\r\n      ['titleKey', 'addCardTitleKey', 'name', 'contentType', 'constructOptions', 'sizeOption', 'preDefinedMenuItems', 'useNewI18n']\r\n    ));\r\n\r\n    // If we have size options stored in preference, over write with preference.\r\n    const cardPref = _.find(this.cards, item => item.id === id);\r\n\r\n    if (cardPref && cardPref.sizeOption) {\r\n      _.each(cardPref.sizeOption, (value, key) => {\r\n        if (attribute.sizeOption[key]) {\r\n          attribute.sizeOption[key].width = value.width;\r\n        }\r\n      });\r\n    }\r\n\r\n    return attribute;\r\n  }\r\n\r\n  getCardCategory(cardConfig) {\r\n    if (!this.cardsConfig.isValidForNavigationLevel(\r\n      cardConfig,\r\n      this.navigationLevel,\r\n      this.campaignType\r\n    )) {\r\n      return 'notEnabledOrValidForNavigationLevel';\r\n    } else if (cardConfig.defaultIn) {\r\n      return 'defaultIn';\r\n    }\r\n    return 'defaultOut';\r\n  }\r\n\r\n  getDashBoardPreferences() {\r\n    if (this.navigationLevel === 'customer') {\r\n      return this.preferences.findByNameAtUserLevel(this.get('accountsDashboardPrefName'));\r\n    }\r\n\r\n    return this.preferences.findByNameAtAccountLevel(this.get('dashboardPrefName'));\r\n  }\r\n\r\n  setDashBoardPreferences(preference) {\r\n    if (this.navigationLevel === 'customer') {\r\n      this.preferences.setAtUserLevel(_.extend({}, preference, { Name: this.get('accountsDashboardPrefName') }));\r\n    } else {\r\n      this.preferences.setAtAccountLevel(_.extend({}, preference, { Name: this.get('dashboardPrefName') }));\r\n    }\r\n  }\r\n\r\n  // Getters for the caller's convenience\r\n  get cards() {\r\n    return this.get('cards');\r\n  }\r\n\r\n  get options() {\r\n    return this.get('options');\r\n  }\r\n\r\n  get dashboardId() {\r\n    return this.get('dashboardId');\r\n  }\r\n\r\n  get navigationLevel() {\r\n    return this.get('navigationLevel');\r\n  }\r\n\r\n  get newDefaultOutCardsAvailable() {\r\n    return this.get('newDefaultOutCardsAvailable');\r\n  }\r\n\r\n  get newDefaultInCards() {\r\n    return this.get('newDefaultInCards');\r\n  }\r\n\r\n  get defaults() {\r\n    return {\r\n      dashboardPrefName: 'dashboard/preferences',\r\n      accountsDashboardPrefName: 'accountsDashboard/preferences',\r\n      userWelcomePrefName: 'doneWithWelcomeTips',\r\n      OverviewAsDefaultPrefName: 'OverviewAsDefaultTab',\r\n      name: '',\r\n      navigationLevel: 'account',\r\n      dashboardId: 0,\r\n      cards: [],\r\n      options: {},\r\n      newDefaultOutCardsAvailable: false,\r\n    };\r\n  }\r\n}\r\n","import Backbone from 'backbone';\r\nimport Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport { dateRangeEquals } from '@bingads-webui-universal/primitive-utilities';\r\n\r\n// A wrapper to 'component/state/index'\r\nexport class DateFilterState {\r\n  constructor({\r\n    simpleFormat = false,\r\n    state,\r\n    // Note: configure which date picker to connect to, for now\r\n    // all the campaign ui features use the global one.\r\n  } = {}) {\r\n    this.state = state;\r\n    _.extend(this, Backbone.Events);\r\n    this.previousRange = null;\r\n\r\n    this.simpleFormat = simpleFormat;\r\n\r\n    if (window.App && window.App.views && window.App.views.Summary) {\r\n      window.App.views.Summary.bindDateFilterChangeHandler((e, filter) => {\r\n        let dateRange;\r\n\r\n        if (this.simpleFormat === true) {\r\n          dateRange = _.pick(filter, 'start', 'end', 'grain');\r\n        } else {\r\n          dateRange = filter;\r\n        }\r\n\r\n        if (!dateRangeEquals(_.omit(this.previousRange, 'key'), _.omit(dateRange, 'key'))) {\r\n          // Raise event and send data out.\r\n          this.trigger('changed', { dateRange });\r\n          this.previousRange = dateRange;\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  get p$State() {\r\n    return this.state.getPromise('$daterange').then((dateRange) => {\r\n      if (!this.previousRange) {\r\n        this.previousRange = dateRange;\r\n      }\r\n      if (this.simpleFormat === true) {\r\n        const newRange = _.pick(dateRange, 'start', 'end', 'grain');\r\n\r\n        return Promise.resolve(newRange);\r\n      }\r\n      return Promise.resolve(dateRange);\r\n    });\r\n  }\r\n}\r\n","import _ from 'underscore';\r\n\r\nconst leftOffsetUINext = 392;\r\nconst leftOffsetMccUINext = 164;\r\nconst dashboardTopUINext = 205;\r\nconst cardMargin = 16;\r\nconst subPageMarginsForUINext = 30;\r\n\r\nexport const newUIWidthPaddingsAndOffSet = 35;\r\n\r\nexport function getViewportCardCount({\r\n  config,\r\n  cards,\r\n  constants,\r\n  instrumentation,\r\n  isMccLevel,\r\n}) {\r\n  // Only one tile available for welcome tips\r\n  if (config.defaultName === 'welcome') {\r\n    return 1;\r\n  }\r\n\r\n  const topOffset = dashboardTopUINext;\r\n  const leftOffset = isMccLevel ? leftOffsetMccUINext : leftOffsetUINext;\r\n  const bottomOffset = 0;\r\n  const subPageMargins = subPageMarginsForUINext;\r\n\r\n  const availableWidth = window.innerWidth - leftOffset - subPageMargins -\r\n    newUIWidthPaddingsAndOffSet;\r\n\r\n  // From the error logs we have rare cases where users window.innerWidth returns 0.\r\n  // In that case, only preload one tile.\r\n  if (availableWidth <= 0) {\r\n    return 1;\r\n  }\r\n\r\n  const layoutOption = _.chain(config.layoutOptions)\r\n    .filter(option => option.breakpoint < availableWidth)\r\n    .max(option => option.breakpoint)\r\n    .value();\r\n  const optionKey = _.findKey(config.layoutOptions, option => _.isEqual(option, layoutOption));\r\n  const initialRowCount = Math.round((window.innerHeight - topOffset - bottomOffset) /\r\n    (layoutOption.defaultHeight + cardMargin));\r\n  const rowSize = layoutOption.maxCardSize;\r\n  let remainingRowCount = initialRowCount;\r\n  let currentRowRemainingSpace = rowSize;\r\n\r\n  if (remainingRowCount === 0) {\r\n    return 0;\r\n  }\r\n\r\n  // We have cards with different sizes.\r\n  // count how many we can fit in based on space and card size.\r\n  try {\r\n    for (let index = 0; index < cards.length; index += 1) {\r\n      const cardSize = cards[index].sizeOption[optionKey].width;\r\n\r\n      if (currentRowRemainingSpace < cardSize) {\r\n        remainingRowCount -= 1;\r\n        if (remainingRowCount === 0) {\r\n          return index;\r\n        }\r\n        currentRowRemainingSpace = rowSize - cardSize;\r\n      } else {\r\n        currentRowRemainingSpace -= cardSize;\r\n      }\r\n    }\r\n  } catch (ex) {\r\n    const state = {\r\n      leftOffset,\r\n      innerWidth: window.innerWidth,\r\n      initialRowCount,\r\n      remainingRowCount,\r\n      layoutOptions: config.layoutOptions,\r\n      layoutOption,\r\n      optionKey,\r\n      cards,\r\n    };\r\n\r\n    instrumentation.logMessage([constants.LOGCATEGORY.ERROR], constants.LOGLEVEL.INFO, 'dashboard/util', `${ex.stack}, ${JSON.stringify(state)}`);\r\n    return cards.length;\r\n  }\r\n\r\n  return cards.length;\r\n}\r\n","export const i18nMappings = [{\r\n  CardHolder_Toolbar_Close: _TL_('Hide tile'),\r\n  CardHolder_Toolbar_Add: _TL_('Add or remove overview tiles'),\r\n  CardHolder_Toolbar_Refresh: _TL_('Refresh'),\r\n  CardHolder_Toolbar_Hide: _TL_('Hide tile'),\r\n  CardHolder_Toolbar_Help: _TL_('Help'),\r\n  CardHolder_Toolbar_Enlarge: _TL_('Enlarge'),\r\n  CardHolder_Toolbar_Shrink: _TL_('Shrink'),\r\n  CardHolder_Toolbar_SmallSize: _TL_('Tile size: small'),\r\n  CardHolder_Toolbar_MediumSize: _TL_('Tile size: medium'),\r\n  CardHolder_Toolbar_LargeSize: _TL_('Tile size: large'),\r\n  CardHolder_Toolbar_Toggle: _TL_('Toggle'),\r\n  Loading: _TL_('Loading...'),\r\n  'More options for {{item}}': _TL_('More options for {{item}}'),\r\n}];\r\n","import Backbone from 'backbone';\r\nimport Promise from 'bluebird';\r\nimport $ from 'jquery';\r\nimport _ from 'underscore';\r\nimport { CardPanel } from '@bingads-webui/card-panel';\r\nimport { PageReady } from '@bingads-webui/page-ready';\r\nimport { ToolbarView } from '@bingads-webui/toolbar';\r\nimport { fetchMCCOverview } from '@bingads-webui-campaign/overview-cards-common';\r\nimport { dismissPopupIfExist } from '@bingads-webui-campaign/fluctuation-common';\r\nimport edm from '@bingads-webui-component-legacy/edm-campaign/index';\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\nimport constants from '@bingads-webui-static-legacy/instrumentation/constants';\r\nimport instrumentation from '@bingads-webui-static-legacy/instrumentation/index';\r\nimport pageContext from '@bingads-webui-static-legacy/page-context';\r\nimport odata from '@bingads-webui-component-legacy/http/channel/odata';\r\nimport preference from '@bingads-webui-component-legacy/preference/service/index';\r\nimport { appendLearnMoreLink } from '@bingads-webui-component-legacy/help/index';\r\nimport state from '@bingads-webui-component-legacy/state/index';\r\nimport wunderbarState from '@bingads-webui-static-legacy/wunderbar/controls/wunderbar-state';\r\nimport instrumentationSettings from '@bingads-webui-static-legacy/instrumentation/campaignSchemaAndSetting';\r\nimport jsdata from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport dateUtil from '@bingads-webui-component-legacy/humanize/date';\r\nimport legacyRouter from '@bingads-webui-component-legacy/legacy-router/index';\r\nimport logger from '@bingads-webui-campaign-legacy/instrumentation/index';\r\nimport azureUrlRewrite from '@bingads-webui-static-legacy/app/component/azureUrlRewrite';\r\nimport cacheManager from '@bingads-webui-campaign-legacy/cache-manager/index';\r\nimport eventDispatcher from '@bingads-webui-component-legacy/event-dispatcher/index';\r\nimport { buildLegacyI18n } from '@bingads-webui/build-legacy-i18n';\r\n\r\nimport { getQuickInstrumentation } from '../instrumentation/log-helper';\r\nimport { CardState } from './card-state';\r\nimport template from './dashboard-template.pug';\r\nimport { DateFilterState } from './datefilter-state';\r\nimport footerTemplate from './footer-template.pug';\r\nimport newFeatureTemplate from './new-feature-template.pug';\r\nimport newTileBannerTemplate from './new-tile-banner-template.pug';\r\nimport tooManyAccountTemplate from './too-many-accounts-warning.pug';\r\nimport { getViewportCardCount, newUIWidthPaddingsAndOffSet } from './util';\r\nimport { i18nMappings } from './i18nMappings';\r\n\r\n\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/feature/dashboard-page');\r\nconst i18nGlobal = window.globalLegacyI18n.get('component/i18n/loader!legacy/global');\r\nconst preferences = preference;\r\nconst localInstrumentation = logger;\r\n\r\nconst permissions = config.get('Permissions') || {};\r\nconst quickInstrumentation = getQuickInstrumentation({\r\n  instrumentationSettings,\r\n  instrumentation,\r\n  constants,\r\n});\r\n\r\n/* @this Dashboard */\r\nfunction saveSelectedCardsState() {\r\n  const orders = _.map(this.cardPanel.cardsOrder, (id) => {\r\n    const option = { id: this.cardMaps[id].typeId };\r\n\r\n    if (this.cardMaps[id].sizeOption) {\r\n      _.extend(option, { sizeOption: this.cardMaps[id].sizeOption });\r\n    }\r\n\r\n    if (this.cardMaps[id].options) {\r\n      _.extend(option, { options: this.cardMaps[id].options });\r\n    }\r\n    return option;\r\n  });\r\n\r\n  this.cardState.save({\r\n    newCards: orders,\r\n  });\r\n}\r\n\r\n/* @this Dashboard */\r\nfunction contentReady(id) {\r\n  if (!_.isEmpty(this.remainingViewportCards)) {\r\n    this.remainingViewportCards = _.reject(this.remainingViewportCards, card => card === id);\r\n\r\n    if (_.isEmpty(this.remainingViewportCards)) {\r\n      this.perfMarker.done({ ViewportCardCount: this.viewportCardsCount });\r\n      PageReady.pageIsReady(this.pageName);\r\n    }\r\n  }\r\n}\r\n\r\n/* @this Dashboard */\r\nfunction createCardContentInstance(contentConstructor, attributes) {\r\n  let content;\r\n  const { name, constructOptions } = attributes;\r\n  const otherOptions = _.extend(_.omit(attributes, 'constructOptions', 'name'), {\r\n    preexecuteFlag: this.preexecuteFlag,\r\n    accountsMode: this.accountsMode,\r\n  });\r\n\r\n  if (_.isFunction(constructOptions)) {\r\n    const cardCreationOptions = constructOptions.call(this, {\r\n      navigationLevel: this.navigationLevel,\r\n      campaignType: this.campaignType,\r\n    });\r\n\r\n    // eslint-disable-next-line new-cap\r\n    content = new contentConstructor(_.extend(\r\n      otherOptions,\r\n      { name: `${this.navigationLevel}-${name}`, perfMarker: this.perfMarker }, cardCreationOptions.constructOptions\r\n    ));\r\n  } else {\r\n    // eslint-disable-next-line new-cap\r\n    content = new contentConstructor(_.extend(otherOptions, { name: `${this.navigationLevel}-${name}`, perfMarker: this.perfMarker }, constructOptions))\r\n      .setState();\r\n  }\r\n\r\n  content.on('storeCardPreference', (cardOptions = {}) => {\r\n    const currentCard = _.find(this.cardMaps, card => card.content === content);\r\n\r\n    if (currentCard) {\r\n      currentCard.options = cardOptions;\r\n      _.defer(saveSelectedCardsState.bind(this));\r\n    }\r\n  });\r\n\r\n  content.on('saveDashBoardOptions', (newOptions) => {\r\n    _.defer(() => {\r\n      this.cardState.save({ newOptions });\r\n    });\r\n  });\r\n\r\n  content.on('clearDragAndDrop', () => this.cardPanel.clearDragAndDrop());\r\n  content.on('setupDragAndDrop', () => this.cardPanel.setupDragAndDrop());\r\n  content.on('cardReady', id => contentReady.call(this, id));\r\n\r\n  return content;\r\n}\r\n\r\n/* @this Dashboard */\r\nfunction scrollToAddCardView() {\r\n  _.defer(() => {\r\n    if (this.addCardView &&\r\n      this.addCardView.$el &&\r\n      this.addCardView.$el[0].getBoundingClientRect().y < 0) {\r\n      this.$el.closest('html').animate({ scrollTop: 0 });\r\n    }\r\n  });\r\n}\r\n\r\n/* @this Dashboard */\r\nfunction showAddCardView({ fromTile = false }) {\r\n  eventDispatcher.trigger('overview_loaded');\r\n\r\n  if (this.addCardView) {\r\n    if (fromTile) {\r\n      scrollToAddCardView.call(this);\r\n    }\r\n  } else {\r\n    import(/* webpackMode: 'eager' */'@bingads-webui-campaign-react/panel-decorator').then(({ panelDecorator }) => {\r\n      import(/* webpackMode: 'eager' */'./add-card/index').then(({ AddCardView }) => {\r\n        const AddCardPanel = panelDecorator(AddCardView, {\r\n          width: 940,\r\n          panelClassName: 'overview-add-card-panel',\r\n          i18n,\r\n          panelReadyAriaLabel: i18n.getString('Dashboard add card side panel opened'),\r\n        });\r\n        const closeAddCardPanel = () => {\r\n          this.addCardView.remove();\r\n          this.addCardView = null;\r\n        };\r\n\r\n        this.addCardView = new AddCardPanel({\r\n          title: i18n.getString('Dashboard_AddCard'),\r\n          selectedCards: _.pluck(this.cardMaps, 'typeId'),\r\n          accountsMode: this.accountsMode,\r\n          newCardsConfig: this.getCardsConfig,\r\n          navigationLevel: this.navigationLevel,\r\n          campaignType: this.campaignType,\r\n          eventsToActions: [{\r\n            event: 'cancel',\r\n            action: closeAddCardPanel,\r\n          }, {\r\n            event: 'apply',\r\n            action: ({\r\n              idsToAdd,\r\n              idsToDelete,\r\n            }) => {\r\n              this.addCardView.remove();\r\n              this.addCardView = null;\r\n\r\n              this.addCard(idsToAdd);\r\n              this.deleteCard(idsToDelete);\r\n\r\n              if (!_.isEmpty(idsToAdd)) {\r\n                quickInstrumentation('AddTileToOverviewFromPanel');\r\n              }\r\n            },\r\n          }],\r\n          onClose: closeAddCardPanel,\r\n          newI18n: this.newI18n,\r\n        });\r\n\r\n        this.addCardView.render();\r\n      });\r\n    });\r\n  }\r\n}\r\n\r\n/* @this Dashboard */\r\nfunction setUpAgents() {\r\n  // Setup date filter service\r\n  if (this.dateFilterState) {\r\n    this.dateFilter = this.dateFilterState;\r\n  } else {\r\n    this.dateFilter = new DateFilterState({ state });\r\n  }\r\n\r\n  this.dateFilter.on('changed', this.onDateFilterStateChanged, this);\r\n\r\n  if (this.filterAgent) {\r\n    this.filterAgent.on('changed', this.onFilterStateChanged, this);\r\n  }\r\n}\r\n\r\n/* @this Dashboard */\r\nfunction updateCardContent({\r\n  card,\r\n  isInViewPort,\r\n  fetchSingleTile = false,\r\n  currentCampaign,\r\n  onMounted = null,\r\n}) {\r\n  const {\r\n    name,\r\n    contentType,\r\n    constructOptions,\r\n  } = this.cardState.getCardAttrByTypeId(card.id);\r\n\r\n  this.config.getContentConstructor({\r\n    contentType,\r\n    constants,\r\n    instrumentation,\r\n    state,\r\n    config,\r\n    pageContext,\r\n    onMounted,\r\n    edmCampaign: edm,\r\n  }).then(({ contentConstructor, deps }) => {\r\n    if (!contentConstructor || this.removed) {\r\n      return;\r\n    }\r\n\r\n    const cardId = _.findKey(this.cardMaps, item => item.typeId === card.id);\r\n    const content = createCardContentInstance.call(this, contentConstructor, _.extend({\r\n      name,\r\n      constructOptions,\r\n      fetchSingleTile,\r\n      typeId: card.id,\r\n      isInViewPort,\r\n      container: this.cardPanel.cards[cardId].getContentContainer(),\r\n      deps: {\r\n        ...deps,\r\n        azure: azureUrlRewrite,\r\n        localInstrumentation,\r\n        cacheManager,\r\n      },\r\n      sharedOptions: {\r\n        getCardsConfig: () => this.cardState.cards,\r\n      },\r\n      currentCampaign,\r\n      scope: this.scope,\r\n      newI18n: this.newI18n,\r\n      preferenceService: this.preferenceService,\r\n    }, this.savedStates, card.options));\r\n\r\n    this.cardMaps[cardId].content = content;\r\n    this.cardPanel.updateContent(cardId, content);\r\n  });\r\n}\r\n\r\nexport class Dashboard extends Backbone.View {\r\n  initialize({\r\n    perfMarker,\r\n    dateFilterState,\r\n    filterAgent,\r\n    currentCampaign,\r\n    newCardsConfig,\r\n    welcomeCardsConfig,\r\n    pageName,\r\n    onMounted,\r\n    scope,\r\n    accountsMode,\r\n    newI18n,\r\n    preexecuteFlag = false,\r\n    preferenceService,\r\n  }) {\r\n    this.preferenceService = preferenceService;\r\n    this.currentCampaign = currentCampaign;\r\n    this.perfMarker = perfMarker;\r\n    if (state.get('campaign_id')) {\r\n      this.navigationLevel = 'campaign';\r\n    } else if (state.get('account_id')) {\r\n      this.navigationLevel = 'account';\r\n    } else {\r\n      this.navigationLevel = 'customer';\r\n    }\r\n    this.dateFilterState = dateFilterState;\r\n    this.filterAgent = filterAgent;\r\n    this.pageName = pageName;\r\n    this.onMounted = onMounted;\r\n    this.scope = scope;\r\n    this.newI18n = newI18n;\r\n    this.legacyI18n = buildLegacyI18n(this.newI18n, i18nMappings);\r\n    this.accountsMode = accountsMode;\r\n    this.getCardsConfig = newCardsConfig;\r\n\r\n    // Setup card state manager\r\n    this.cardState = new CardState({\r\n      navigationLevel: this.navigationLevel,\r\n      pageContext,\r\n      odata,\r\n      edm,\r\n      preferences,\r\n      permissions,\r\n      instrumentationSettings,\r\n      instrumentation,\r\n      constants,\r\n      newCardsConfig,\r\n      welcomeCardsConfig,\r\n      accountsMode,\r\n      campaignType: this.campaignType,\r\n    });\r\n\r\n    // Initial load of the card state (from preference)\r\n    this.p$CardState = this.cardState.fetch().then(() => {\r\n      // Remember the dashboard ID assigned by CardState\r\n      this.dashboardId = this.cardState.get('dashboardId');\r\n    });\r\n\r\n    // Use this array as a state queue\r\n    this.state = [];\r\n    this.savedStates = {};\r\n    this.dispatched = false;\r\n\r\n    this.preexecuteFlag = preexecuteFlag;\r\n  }\r\n\r\n  get campaignType() {\r\n    let campaignType = this.filterAgent && this.filterAgent.campaignType;\r\n    if (this.currentCampaign) {\r\n      campaignType = _.chain(this.currentCampaign).result('CampaignType').value();\r\n    }\r\n    return campaignType;\r\n  }\r\n\r\n  get className() {\r\n    return 'dashboard';\r\n  }\r\n\r\n  get events() {\r\n    return {\r\n      'click .dashboard__new-tile-banner a.show-new-tile': this.showNewTile,\r\n      'click .dashboard__new-tile-banner .msg-dismiss-button': this.hideNewTileBannerClicked,\r\n      'click .mcc_too_many-accounts a': this.gotoManagementTab,\r\n    };\r\n  }\r\n\r\n  onDateFilterStateChanged({ dateRange }) {\r\n    // Dispatch the new dateRange state to children cards.\r\n    this.state.push({ dateRange });\r\n    this.dispatchStateAsync();\r\n  }\r\n\r\n  onFilterStateChanged({ filter, campaignType }) {\r\n    this.state.push({ filter, campaignType });\r\n    this.dispatchStateAsync();\r\n  }\r\n\r\n  saveInitialState(initialState) {\r\n    this.savedStates = initialState;\r\n  }\r\n\r\n  dispatchStateAsync() {\r\n    // Only async dispatch one time until the sync dispatchment finishes\r\n    if (!this.dispatched) {\r\n      _.defer(() => {\r\n        this.dispatchState();\r\n        this.dispatched = false;\r\n      });\r\n      this.dispatched = true;\r\n    }\r\n  }\r\n\r\n  dispatchState() {\r\n    if (this.state.length === 0) {\r\n      return;\r\n    }\r\n\r\n    // Merge the state queue\r\n    const states = _.reduce(\r\n      this.state,\r\n      (memo, item) => _.extend(memo, item)\r\n    );\r\n\r\n    // dispatch all states to cards\r\n    _.each(this.cardMaps, (card) => {\r\n      if (card.content) {\r\n        card.content.updateState(states);\r\n      }\r\n    });\r\n\r\n    // Save all the states for being used as initial states while adding new cards.\r\n    this.savedStates = _.extend(this.savedStates, states);\r\n\r\n    // Also add a log\r\n    quickInstrumentation(\r\n      'OverviewPageLoadData',\r\n      `WithFilter: ${!_.isEmpty(this.savedStates.filter) && !_.isEmpty(this.savedStates.filter.query)}; WithPoP: ${!_.isEmpty(this.savedStates.dateRange) && !_.isEmpty(this.savedStates.dateRange.compared)}`\r\n    );\r\n\r\n    // Clear the queue\r\n    this.state.length = 0;\r\n  }\r\n\r\n  setupToolbar() {\r\n    if (this.config.toolbar) {\r\n      // Toolbar could be dynamically created and removed based on current context\r\n      if (this.toolbar) {\r\n        this.toolbar.remove();\r\n      }\r\n\r\n      const toolbarItems = _.map(this.config.toolbar.items, item => _.extend(item, {\r\n        text: i18n.getString(item.textKey),\r\n      }));\r\n\r\n      this.toolbar = new ToolbarView({\r\n        toolbarId: _.uniqueId('dashboard-toolbar-'),\r\n        items: toolbarItems,\r\n      }).render();\r\n\r\n      // Setup the 'add card' button\r\n      this.toolbar.update({\r\n        id: this.config.toolbar.ids.addCardButton,\r\n        onClick: showAddCardView.bind(this),\r\n        iconLeft: ['glyphicon', 'toolbar-icon', 'toolbar-icon-left', 'glyphicon-plus'],\r\n      });\r\n\r\n      this.$('.dashboard__toolbar').append(this.toolbar.el);\r\n    }\r\n  }\r\n\r\n  setupCardPanel() {\r\n    // CardState is already ready.\r\n    this.cardAttrsArray = _.map(this.cardState.cards, (card) => {\r\n      const {\r\n        titleKey,\r\n        sizeOption,\r\n        preDefinedMenuItems,\r\n        useNewI18n,\r\n      } = this.cardState.getCardAttrByTypeId(card.id);\r\n      let title = '';\r\n      if (titleKey) {\r\n        title = useNewI18n ? this.newI18n.getString(titleKey) : i18n.getString(titleKey);\r\n      }\r\n      return {\r\n        typeId: card.id,\r\n        title,\r\n        sizeOption,\r\n        options: card.options,\r\n        preDefinedMenuItems,\r\n      };\r\n    });\r\n    this.cardPanel = new CardPanel({\r\n      config: _.defaults({\r\n        dragAndDrop: this.config.defaultDragAndDrop,\r\n        debug: this.config.defaultDebug,\r\n        dragHandlerSelector: this.config.defaultDragHandlerSelector,\r\n      }),\r\n      i18n: this.legacyI18n,\r\n      layoutOptions: this.config.layoutOptions,\r\n      initialWidth: $('.overview-page').innerWidth() - newUIWidthPaddingsAndOffSet,\r\n    }).render();\r\n\r\n    // Add initial cards to the panel\r\n    const orders = this.cardPanel.add(_.map(this.cardAttrsArray, attr => _.chain(attr).pick(['title', 'content', 'sizeOption']).extend({ showMenuIcon: _.size(attr.preDefinedMenuItems) > 0 }).value()), { silent: true });\r\n\r\n    // Save the initial order information\r\n    this.cardMaps = {};\r\n    _.map(orders, (id, index) => {\r\n      this.cardMaps[id] = this.cardAttrsArray[index];\r\n    }, this);\r\n\r\n    // Check how many cards fits in the viewport\r\n    this.viewportCardsCount = getViewportCardCount({\r\n      config: this.config,\r\n      cards: this.cardState.cards,\r\n      wunderbarState,\r\n      instrumentation,\r\n      constants,\r\n      isMccLevel: false,\r\n    });\r\n    this.remainingViewportCards = _.chain(this.cardState.cards)\r\n      .first(this.viewportCardsCount)\r\n      .pluck('id')\r\n      .value();\r\n\r\n    if (_.isEmpty(this.remainingViewportCards)) {\r\n      this.perfMarker.done({ ViewportCardCount: this.viewportCardsCount });\r\n      PageReady.pageIsReady(this.pageName);\r\n    }\r\n\r\n    if (this.config.defaultName !== 'welcome') {\r\n      this.setupFooter();\r\n    }\r\n\r\n    // Hook the card-panel events\r\n    this.cardPanel.on('card-orderchanged', () => {\r\n      const originalOrder = _.pluck(this.cardState.cards, 'id');\r\n      const newOrder = _.map(this.cardPanel.cardsOrder, id => this.cardMaps[id].typeId);\r\n\r\n      quickInstrumentation('ReorderTile', `Original order: ${originalOrder.join(', ')}. New order: ${newOrder.join(', ')}.`);\r\n      _.defer(saveSelectedCardsState.bind(this));\r\n      this.hideNewTileBanner();\r\n    });\r\n\r\n    this.cardPanel.on('add-requested', () => {\r\n      showAddCardView.call(this, { fromTile: true });\r\n    }, this);\r\n\r\n    this.cardPanel.on('card-added', (e) => {\r\n      const typeIds = _.map(\r\n        e.ids,\r\n        id => (_.has(this.cardMaps, id) ? this.cardMaps[id].typeId : null)\r\n      );\r\n\r\n      quickInstrumentation('AddTileToOverview', _.compact(typeIds));\r\n\r\n      // Note: do nothing here, adding card is only triggered from dashboard, no need to\r\n      // update cardMaps. Save the new card order to preference.\r\n      _.defer(saveSelectedCardsState.bind(this));\r\n\r\n      this.hideNewTileBanner();\r\n    }, this);\r\n\r\n    this.cardPanel.on('card-resized', (e) => {\r\n      quickInstrumentation('ResizeTile');\r\n\r\n      // Card size option should be saved as user preference\r\n      if (_.has(this.cardMaps, e.id)) {\r\n        this.cardMaps[e.id].sizeOption = this.cardMaps[e.id].sizeOption || {};\r\n        this.cardMaps[e.id].sizeOption[e.key] = this.cardMaps[e.id].sizeOption[e.key] || {};\r\n        this.cardMaps[e.id].sizeOption[e.key].width = e.width;\r\n\r\n        _.defer(saveSelectedCardsState.bind(this));\r\n      }\r\n    }, this);\r\n\r\n    this.cardPanel.on('card-deleted', (e) => {\r\n      const typeIds = _.map(e.ids, (id) => {\r\n        let typeId = _.has(this.cardMaps, id) ? this.cardMaps[id].typeId : null;\r\n\r\n        if (typeId === 'CardType-Tips') {\r\n          if (this.navigationLevel === 'account') {\r\n            typeId = 'CardType-Tips-And-Recommendations';\r\n          } else {\r\n            typeId = 'CardType-Recommendations';\r\n          }\r\n        }\r\n\r\n        return typeId;\r\n      });\r\n\r\n      quickInstrumentation('RemoveTileFromOverview', _.compact(typeIds));\r\n      // Card deletion could be triggered from card holder toolbar.\r\n      // Remove the entry from local cardMaps first\r\n\r\n      _.each(e.ids, (id) => {\r\n        if (_.has(this.cardMaps, id)) {\r\n          delete this.cardMaps[id];\r\n        }\r\n      }, this);\r\n\r\n      // Save the new card order\r\n      _.defer(saveSelectedCardsState.bind(this));\r\n      this.hideNewTileBanner();\r\n    }, this);\r\n\r\n    this.$('.dashboard__card-panel').append(this.cardPanel.$el);\r\n    _.defer(() => {\r\n      this.cardPanel.trigger('attached');\r\n    });\r\n\r\n    // Load cards in the viewport.\r\n    _.each(_.first(this.cardState.cards, this.viewportCardsCount), (card) => {\r\n      updateCardContent.call(this, {\r\n        card,\r\n        onMounted: this.onMounted,\r\n        isInViewPort: true,\r\n        currentCampaign: this.currentCampaign,\r\n      });\r\n    });\r\n\r\n    // Function to load cards outside the initial viewport\r\n    const loadCardsOutSizeViewPort = _.once(() => {\r\n      if (this.removed) {\r\n        return;\r\n      }\r\n\r\n      _.each(\r\n        _.last(this.cardState.cards, this.cardState.cards.length - this.viewportCardsCount),\r\n        (card) => {\r\n          updateCardContent.call(this, {\r\n            card,\r\n            isInViewPort: false,\r\n            currentCampaign: this.currentCampaign,\r\n          });\r\n        }\r\n      );\r\n    });\r\n\r\n    const dismissOverviewFluctuationPopup = () => dismissPopupIfExist(document.getElementsByClassName('mcc-perf-fluctuation-placeholder'));\r\n    PageReady.afterPageReady().then(() => {\r\n      if (!this.removed) {\r\n        loadCardsOutSizeViewPort.call(this);\r\n        _.each(_.keys(this.cardMaps), (key) => {\r\n          this.cardPanel.updatePreDefinedMenuItems(key, this.cardMaps[key].preDefinedMenuItems);\r\n        });\r\n\r\n        const windowScrollLayout = document.querySelector('.app-content-body');\r\n        const topChangeCardScrollLayout = document.querySelector('.top-change-grid-container');\r\n\r\n        if (windowScrollLayout) {\r\n          windowScrollLayout.parentNode.addEventListener('scroll', dismissOverviewFluctuationPopup);\r\n        }\r\n\r\n        if (topChangeCardScrollLayout) {\r\n          topChangeCardScrollLayout.addEventListener('scroll', dismissOverviewFluctuationPopup);\r\n        }\r\n      }\r\n    });\r\n\r\n    this.windowEventHandler = () => {\r\n      loadCardsOutSizeViewPort.bind(this)();\r\n      dismissOverviewFluctuationPopup();\r\n    };\r\n    window.addEventListener('scroll', this.windowEventHandler);\r\n    window.addEventListener('resize', this.windowEventHandler);\r\n    $('.overview-page').parent().on('scroll', loadCardsOutSizeViewPort.bind(this));\r\n  }\r\n\r\n  addCard(typeIds) {\r\n    if (!_.isArray(typeIds) || typeIds.length === 0) {\r\n      return;\r\n    }\r\n\r\n    const cardAttrs = _.map(typeIds, (typeId) => {\r\n      const {\r\n        titleKey,\r\n        sizeOption,\r\n        preDefinedMenuItems,\r\n      } = this.cardState.getCardAttrByTypeId(typeId);\r\n\r\n      return {\r\n        title: titleKey ? i18n.getString(titleKey) : '',\r\n        sizeOption,\r\n        preDefinedMenuItems,\r\n      };\r\n    });\r\n\r\n    const cardIds = this.cardPanel.add(cardAttrs);\r\n\r\n    _.each(cardIds, (cardId, index) => {\r\n      // Keep the card attrs in the map.\r\n      this.cardMaps[cardId] = _.extend({}, {\r\n        typeId: typeIds[index],\r\n        title: cardAttrs[index].title,\r\n        sizeOption: cardAttrs[index].sizeOption,\r\n        preDefinedMenuItems: cardAttrs[index].preDefinedMenuItems,\r\n      });\r\n    });\r\n\r\n    _.each(typeIds, (typeId) => {\r\n      updateCardContent.call(this, {\r\n        card: { id: typeId },\r\n        isInViewPort: false,\r\n        fetchSingleTile: true,\r\n        currentCampaign: this.currentCampaign,\r\n      });\r\n    });\r\n  }\r\n\r\n  deleteCard(typeIds) {\r\n    if (!_.isArray(typeIds) || typeIds.length === 0) {\r\n      return;\r\n    }\r\n\r\n    const cardIds = _.map(\r\n      typeIds,\r\n      typeId => _.findKey(this.cardMaps, item => item.typeId === typeId)\r\n    );\r\n\r\n    // card panel will remove the card content view and raise 'card-deleted' event back when done\r\n    this.cardPanel.delete(cardIds);\r\n    PageReady.pageIsReady(this.pageName);\r\n  }\r\n\r\n  setupNewTileNotice() {\r\n    if (this.cardState.newDefaultOutCardsAvailable) {\r\n      this.$(`#${this.config.toolbar.ids.addCardButton}`).append(newFeatureTemplate({ i18n }));\r\n      quickInstrumentation('AddNewTilesToOverview', 'New! icon shown in Add Tiles button for new default out cards');\r\n    }\r\n    if (this.cardState.newDefaultInCards) {\r\n      let newTileDesc;\r\n\r\n      if (this.cardState.newDefaultInCards.length > 2) {\r\n        newTileDesc = i18n.getString('Dashboard_NewTiles', this.cardState.newDefaultInCards.length);\r\n      } else if (this.cardState.newDefaultInCards.length === 2) {\r\n        const { addCardTitleKey: title1Key } =\r\n          this.cardState.getCardAttrByTypeId(this.cardState.newDefaultInCards[0]);\r\n        const { addCardTitleKey: title2Key } =\r\n          this.cardState.getCardAttrByTypeId(this.cardState.newDefaultInCards[1]);\r\n\r\n        newTileDesc = i18n.getString('Dashboard_Two_Tiles', i18n.getString(title1Key), i18n.getString(title2Key));\r\n      } else if (this.cardState.newDefaultInCards.length === 1) {\r\n        const { addCardTitleKey: titleKey } =\r\n          this.cardState.getCardAttrByTypeId(this.cardState.newDefaultInCards[0]);\r\n\r\n        newTileDesc = i18n.getString('Dashboard_Tile', i18n.getString(titleKey));\r\n      }\r\n\r\n      const newTileMsg = i18n.getString('Dashboard_NewTileMsg', newTileDesc);\r\n      const newTileBannerContainer = this.$('.dashboard__new-tile-banner');\r\n\r\n      newTileBannerContainer.html(newTileBannerTemplate({\r\n        i18n,\r\n        newTileMsg,\r\n      }));\r\n\r\n      this.newTileId = _.last(this.cardState.newDefaultInCards);\r\n      quickInstrumentation('AddNewTilesToOverview', `Show new tile banner for ${this.cardState.newDefaultInCards.join(', ')}`);\r\n    }\r\n  }\r\n\r\n  setupFooter() {\r\n    const timeZoneId = config.get('AccountTimeZone');\r\n    const footerContainer = this.$('.summarypage-bifreshtime');\r\n    const accountTimeZoneText = i18nGlobal.getString(`TimeZoneId_${timeZoneId}`);\r\n\r\n    footerContainer.html(footerTemplate({\r\n      i18n,\r\n      accountTimeZoneText,\r\n      appendLearnMoreLink,\r\n    }));\r\n  }\r\n\r\n  setupTooManyAccountsWarning(dateRange) {\r\n    if (this.navigationLevel !== 'customer') {\r\n      return;\r\n    }\r\n\r\n    let tiles;\r\n\r\n    if (_.isEmpty(this.cardState.cards)) {\r\n      // Corner case if the user removed call tiles.\r\n      // If theres no tiles. Add one to get MT response.\r\n      tiles = ['Device'];\r\n    }\r\n\r\n    fetchMCCOverview({\r\n      entitySet: edm.currentCustomer.Accounts,\r\n      dateRange,\r\n      jsdata,\r\n      dateUtil,\r\n      tiles,\r\n      getCardsConfig: () => this.cardState.cards,\r\n      instrumentation,\r\n      constants,\r\n      permissions,\r\n      accountsMode: this.accountsMode,\r\n    }).then((res) => {\r\n      let showTooMuchDataError = false;\r\n      if (_.some(res.errors, error => error.Code === 'TooMuchDataToDownload')) {\r\n        showTooMuchDataError = true;\r\n      }\r\n\r\n      if (showTooMuchDataError) {\r\n        this.$('.dashboard__new-tile-banner').html('');\r\n        this.$('.dashboard__toolbar').html('');\r\n        this.$('.dashboard__card-panel').html('');\r\n\r\n        const warningContainer = this.$('.mcc_too_many-accounts');\r\n        const managementLink = legacyRouter.getRouteUrl('accounts_management');\r\n        const linkContent = `<a href=\"${managementLink}\">${i18n.getString('Dashboard_ManagementTab')}</a>`;\r\n        const warning = i18n.getString('Dashboard_TooManyAccounts', linkContent);\r\n\r\n        warningContainer.append(tooManyAccountTemplate({ warning }));\r\n        PageReady.pageIsReady(this.pageName);\r\n      }\r\n    });\r\n  }\r\n\r\n  render() {\r\n    this.$el.html(template({}));\r\n\r\n    _.delay(() => {\r\n      if (!this.removed) {\r\n        quickInstrumentation('QualifiedVisitOverviewPageFromCampaign', `QualifiedOverviewPageVisit: ${this.navigationLevel}`);\r\n      }\r\n    }, 5000);\r\n\r\n    this.p$CardState.then(() => {\r\n      this.config = this.cardState.config;\r\n\r\n      // Setup toolbar\r\n      this.setupToolbar();\r\n\r\n      if (this.config.defaultName === 'welcome') {\r\n        this.setupCardPanel();\r\n        // no dragNdrop for welcome tips, which only has one tile, without add/remove.\r\n        this.cardPanel.$('.card-holder__toolbar').css('cursor', 'default');\r\n      } else {\r\n        setUpAgents.call(this);\r\n\r\n        // Setup card-panel\r\n        this.p$ReadyState = Promise.all([\r\n          this.dateFilter.p$State,\r\n        ]).spread((dateRange) => {\r\n          this.saveInitialState({\r\n            dateRange,\r\n            filter: this.filterAgent ? this.filterAgent.filter : undefined,\r\n            campaignType: this.filterAgent ? this.filterAgent.campaignType : undefined,\r\n          });\r\n          this.setupCardPanel();\r\n          this.setupNewTileNotice();\r\n          if (!this.preexecuteFlag) {\r\n            this.setupTooManyAccountsWarning(dateRange);\r\n          }\r\n        });\r\n      }\r\n    });\r\n\r\n    return this;\r\n  }\r\n\r\n  showNewTile() {\r\n    _.find(this.cardMaps, card => card.typeId === this.newTileId).content.el.scrollIntoView({ behavior: 'smooth' });\r\n    quickInstrumentation('AddNewTilesToOverview', 'The show me button clicked in new tiles banner');\r\n  }\r\n\r\n  hideNewTileBanner() {\r\n    this.$('.dashboard__new-tile-banner').hide();\r\n  }\r\n\r\n  hideNewTileBannerClicked() {\r\n    this.hideNewTileBanner();\r\n    quickInstrumentation('AddNewTilesToOverview', 'The hide banner button clicked in new tiles banner');\r\n  }\r\n\r\n  gotoManagementTab(event) {\r\n    if (event && (event.button !== 0 ||\r\n    event.ctrlKey ||\r\n    event.shiftKey ||\r\n    event.altKey ||\r\n    event.metaKey)) {\r\n      return true;\r\n    }\r\n\r\n    legacyRouter.navigateToRoute('accounts_management');\r\n    return false;\r\n  }\r\n\r\n  remove() {\r\n    if (this.toolbar) {\r\n      this.toolbar.remove();\r\n    }\r\n\r\n    if (this.addCardView) {\r\n      this.addCardView.remove();\r\n    }\r\n\r\n    if (this.cardPanel) {\r\n      this.cardPanel.remove();\r\n    }\r\n\r\n    if (this.windowEventHandler) {\r\n      window.removeEventListener('scroll', this.windowEventHandler);\r\n      window.removeEventListener('resize', this.windowEventHandler);\r\n    }\r\n\r\n    this.removed = true;\r\n\r\n    super.remove();\r\n  }\r\n}\r\n","import Backbone from 'backbone';\r\nimport { dashboardConfig } from '../config/dashboard-config';\r\nimport { Dashboard } from '../dashboard/dashboard-view';\r\nimport template from './dashboard-page-template.pug';\r\n\r\nexport class DashboardPage extends Backbone.View {\r\n  initialize({\r\n    perfMarker,\r\n    dateFilterState,\r\n    filterAgent,\r\n    currentCampaign,\r\n    newCardsConfig = null,\r\n    welcomeCardsConfig,\r\n    pageName,\r\n    onMounted = null,\r\n    scope,\r\n    accountsMode,\r\n    newI18n,\r\n    preexecuteFlag = false,\r\n    preferenceService,\r\n  }) {\r\n    this.perfMarker = perfMarker;\r\n    this.dateFilterState = dateFilterState;\r\n    this.filterAgent = filterAgent;\r\n    this.currentCampaign = currentCampaign;\r\n    this.pageName = pageName;\r\n    this.perfMarker.willInit();\r\n    this.newCardsConfig = newCardsConfig;\r\n    this.welcomeCardsConfig = welcomeCardsConfig;\r\n    this.onMounted = onMounted;\r\n    this.scope = scope;\r\n    this.preexecuteFlag = preexecuteFlag;\r\n    this.accountsMode = accountsMode;\r\n    this.newI18n = newI18n;\r\n    this.preferenceService = preferenceService;\r\n    this.createDashboard();\r\n  }\r\n\r\n  createDashboard() {\r\n    this.dashboard = new Dashboard({\r\n      name: dashboardConfig.defaultName,\r\n      perfMarker: this.perfMarker,\r\n      dateFilterState: this.dateFilterState,\r\n      filterAgent: this.filterAgent,\r\n      currentCampaign: this.currentCampaign,\r\n      newCardsConfig: this.newCardsConfig,\r\n      welcomeCardsConfig: this.welcomeCardsConfig,\r\n      pageName: this.pageName,\r\n      onMounted: this.onMounted,\r\n      scope: this.scope,\r\n      accountsMode: this.accountsMode,\r\n      newI18n: this.newI18n,\r\n      preexecuteFlag: this.preexecuteFlag,\r\n      preferenceService: this.preferenceService,\r\n    });\r\n  }\r\n\r\n  recreateView() {\r\n    if (!this.isRemoved) {\r\n      this.dashboard.remove();\r\n      this.createDashboard();\r\n      this.$el.html(template());\r\n\r\n      this.$el.append(this.dashboard.$el);\r\n      this.dashboard.render();\r\n    }\r\n  }\r\n\r\n  updateScope() {\r\n    this.recreateView();\r\n  }\r\n\r\n  updateMode({ accountsMode }) {\r\n    this.accountsMode = accountsMode;\r\n    this.recreateView();\r\n  }\r\n\r\n  render() {\r\n    this.perfMarker.willRender();\r\n\r\n\r\n    this.$el.html(template());\r\n\r\n    this.$el.append(this.dashboard.$el);\r\n    this.dashboard.render();\r\n\r\n    return this;\r\n  }\r\n\r\n  remove() {\r\n    this.dashboard.remove();\r\n    this.$el.remove();\r\n    this.isRemoved = true;\r\n  }\r\n}\r\n","import _ from 'underscore';\r\n\r\nexport function getQuickInstrumentation({\r\n  instrumentationSettings,\r\n  constants,\r\n  instrumentation,\r\n}) {\r\n  const localScenarioMap = {\r\n    LoadOverviewPage: {\r\n      scenario: instrumentationSettings.SCENARIONAME.LoadOverviewPage,\r\n      activity: instrumentationSettings.ACTIVITYNAME.LoadOverviewPage,\r\n    },\r\n    QualifiedVisitOverviewPageFromCampaign: {\r\n      scenario: instrumentationSettings.SCENARIONAME.QualifiedVisitOverviewPageFromCampaign,\r\n      activity: instrumentationSettings.ACTIVITYNAME.QualifiedVisitOverviewPageFromCampaign,\r\n    },\r\n    SetOverviewPageAsDefault: {\r\n      scenario: instrumentationSettings.SCENARIONAME.SetOverviewPageAsDefault,\r\n      activity: instrumentationSettings.ACTIVITYNAME.SetOverviewPageAsDefault,\r\n    },\r\n    AddTileToOverview: {\r\n      scenario: instrumentationSettings.SCENARIONAME.AddTileToOverview,\r\n      activity: instrumentationSettings.ACTIVITYNAME.AddTileToOverview,\r\n    },\r\n    AddTileToOverviewFromPanel: {\r\n      scenario: instrumentationSettings.SCENARIONAME.AddTileToOverviewFromPanel,\r\n      activity: instrumentationSettings.ACTIVITYNAME.AddTileToOverviewFromPanel,\r\n    },\r\n    RemoveTileFromOverview: {\r\n      scenario: instrumentationSettings.SCENARIONAME.RemoveTileFromOverview,\r\n      activity: instrumentationSettings.ACTIVITYNAME.RemoveTileFromOverview,\r\n    },\r\n    ReorderTile: {\r\n      scenario: instrumentationSettings.SCENARIONAME.ReorderTile,\r\n      activity: instrumentationSettings.ACTIVITYNAME.ReorderTile,\r\n    },\r\n    ResizeTile: {\r\n      scenario: instrumentationSettings.SCENARIONAME.ResizeTile,\r\n      activity: instrumentationSettings.ACTIVITYNAME.ResizeTile,\r\n    },\r\n    FirstUse: {\r\n      scenario: instrumentationSettings.SCENARIONAME.FirstUse,\r\n      activity: instrumentationSettings.ACTIVITYNAME.FirstUse,\r\n    },\r\n    RemoveRetiredTilesFromOverview: {\r\n      scenario: instrumentationSettings.SCENARIONAME.RemoveRetiredTilesFromOverview,\r\n      activity: instrumentationSettings.ACTIVITYNAME.RemoveRetiredTilesFromOverview,\r\n    },\r\n    AddNewTilesToOverview: {\r\n      scenario: instrumentationSettings.SCENARIONAME.AddNewTilesToOverview,\r\n      activity: instrumentationSettings.ACTIVITYNAME.AddNewTilesToOverview,\r\n    },\r\n    OverviewPageLoadData: {\r\n      scenario: instrumentationSettings.SCENARIONAME.OverviewPageLoadData,\r\n      activity: instrumentationSettings.ACTIVITYNAME.OverviewPageLoadData,\r\n    },\r\n  };\r\n\r\n  return function quickInstrumentation(name, msgs = []) {\r\n    instrumentation.startScenario(localScenarioMap[name].scenario);\r\n    instrumentation.startActivity(localScenarioMap[name].activity);\r\n    if (_.isArray(msgs)) {\r\n      if (_.size(msgs) > 0) {\r\n        _.each(msgs, msg => instrumentation.logMessage([constants.LOGCATEGORY.TRACE], constants.LOGLEVEL.INFO, 'overview', msg));\r\n      }\r\n    } else if (msgs) {\r\n      instrumentation.logMessage([constants.LOGCATEGORY.TRACE], constants.LOGLEVEL.INFO, 'overview', msgs);\r\n    }\r\n  };\r\n}\r\n","\r\nconst i18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/dashboard-cards');\r\n\r\nexport const tipNames = {\r\n  importHelp: 'importHelp',\r\n  importVideo: 'importVideo',\r\n  broadMatchVideo: 'broadMatchVideo',\r\n  extaVideo: 'extaVideo',\r\n  extaHelp1: 'extaHelp1',\r\n  extaHelp2: 'extaHelp2',\r\n  sitelinksMktg: 'sitelinksMktg',\r\n  sitelinksHelp: 'sitelinksHelp',\r\n  calloutsMktg: 'calloutsMktg',\r\n  calloutsHelp: 'calloutsHelp',\r\n  structSnipHelp: 'structSnipHelp',\r\n  structSnipMktg: 'structSnipMktg',\r\n  dsa: 'dsa',\r\n  conversionTrackingVideo: 'conversionTrackingVideo',\r\n  remarketingTour: 'remarketingTour',\r\n  remarketingHelp1: 'remarketingHelp1',\r\n  remarketingVideo: 'remarketingVideo',\r\n  remarketingHelp2: 'remarketingHelp2',\r\n  autoBidHelp: 'autoBidHelp',\r\n  autoBidMktg: 'autoBidMktg',\r\n  sharedBudgetsHelp: 'sharedBudgetsHelp',\r\n  callMktg: 'callMktg',\r\n  callHelp: 'callHelp',\r\n  reviewsMktg: 'reviewsMktg',\r\n  reviewsHelp: 'reviewsHelp',\r\n  kWMatchTypeHelp: 'kWMatchTypeHelp',\r\n  kWMatchTypeMktg: 'kWMatchTypeMktg',\r\n  negKWHelp1: 'negKWHelp1',\r\n  negKWHelp2: 'negKWHelp2',\r\n  broadMatchHelp: 'broadMatchHelp',\r\n  ScheduledImportHelp: 'ScheduledImportHelp',\r\n  ReImportRSACampaigns: 'ReImportRSACampaigns',\r\n  IncludeRSACampaigns: 'IncludeRSACampaigns',\r\n  IncludeMultiAccountGoogleImport: 'IncludeMultiAccountGoogleImport',\r\n  ProvideStoreToImportShoppingCampaign: 'ProvideStoreToImportShoppingCampaign',\r\n  SelectAdCusFeedToImportEXTA: 'SelectAdCusFeedToImportEXTA',\r\n  FacebookImport: 'FacebookImport',\r\n  UETCombineClarity: 'UETCombineClarity',\r\n};\r\n\r\nexport const tipsConfig = {\r\n  101: {\r\n    tipName: tipNames.importHelp,\r\n    title: i18n.getString('Dashboard_TipCard_Import_Help_Title'),\r\n    description: i18n.getString('Dashboard_TipCard_Import_Help_Desc'),\r\n    helpLink: 'app54577',\r\n    helpType: 'side_pane',\r\n    imgClass: 'import_tip_img',\r\n    isImportRelatedTip: true,\r\n  },\r\n  102: {\r\n    tipName: tipNames.importVideo,\r\n    title: i18n.getString('Dashboard_TipCard_Import_Video_Title'),\r\n    description: i18n.getString('Dashboard_TipCard_Import_Video_Desc'),\r\n    helpLink: '1xyCD6fbf70',\r\n    helpType: 'video',\r\n    imgClass: 'import_tip_img',\r\n    isImportRelatedTip: true,\r\n  },\r\n  202: {\r\n    tipName: tipNames.broadMatchVideo,\r\n    title: i18n.getString('Dashboard_TipCard_BroadMatch_Video_Title'),\r\n    description: i18n.getString('Dashboard_TipCard_BroadMatch_Video_Desc'),\r\n    helpLink: 'rYoAn-lZdJs',\r\n    helpType: 'video',\r\n    imgClass: 'broadMatch_tip_img',\r\n  },\r\n  // video no longer available on youtube\r\n  /*\r\n  301: {\r\n    tipName: tipNames.extaVideo,\r\n    title: i18n.getString('Dashboard_TipCard_EXTA_Video_Title'),\r\n    description: i18n.getString('Dashboard_TipCard_EXTA_Video_Desc'),\r\n    helpLink: 'YJCaOCLfWms',\r\n    helpType: 'video',\r\n    imgClass: 'exta_tip_img',\r\n  },\r\n  */\r\n  302: {\r\n    tipName: tipNames.extaHelp1,\r\n    title: i18n.getString('Dashboard_TipCard_EXTA_Help1_Title'),\r\n    description: i18n.getString('Dashboard_TipCard_EXTA_Help1_Desc'),\r\n    helpLink: 'app54589',\r\n    helpType: 'side_pane',\r\n    imgClass: 'exta_tip_img',\r\n  },\r\n  303: {\r\n    tipName: tipNames.extaHelp2,\r\n    title: i18n.getString('Dashboard_TipCard_EXTA_Help2_Title'),\r\n    description: i18n.getString('Dashboard_TipCard_EXTA_Help2_Desc'),\r\n    helpLink: 'app54589',\r\n    helpType: 'side_pane',\r\n    imgClass: 'exta_tip_img',\r\n  },\r\n  401: {\r\n    tipName: tipNames.sitelinksMktg,\r\n    title: i18n.getString('Dashboard_TipCard_Sitelinks_Mktg_Title'),\r\n    description: i18n.getString('Dashboard_TipCard_Sitelinks_Mktg_Desc'),\r\n    helpLink: 'https://advertise.bingads.microsoft.com/en-us/solutions/ad-extensions/sitelink-extensions',\r\n    helpType: 'new_page',\r\n    imgClass: 'sitelinks_tip_img',\r\n  },\r\n  402: {\r\n    tipName: tipNames.sitelinksHelp,\r\n    title: i18n.getString('Dashboard_TipCard_Sitelinks_Help_Title'),\r\n    description: i18n.getString('Dashboard_TipCard_Sitelinks_Help_Desc'),\r\n    helpLink: 'app54652',\r\n    helpType: 'side_pane',\r\n    imgClass: 'sitelinks_tip_img',\r\n  },\r\n  501: {\r\n    tipName: tipNames.calloutsMktg,\r\n    title: i18n.getString('Dashboard_TipCard_Callouts_Mktg_Title'),\r\n    description: i18n.getString('Dashboard_TipCard_Callouts_Mktg_Desc'),\r\n    helpLink: 'https://advertise.bingads.microsoft.com/en-us/solutions/ad-extensions/callout-extensions',\r\n    helpType: 'new_page',\r\n    imgClass: 'callouts_tip_img',\r\n  },\r\n  502: {\r\n    tipName: tipNames.calloutsHelp,\r\n    title: i18n.getString('Dashboard_TipCard_Callouts_Help_Title'),\r\n    description: i18n.getString('Dashboard_TipCard_Callouts_Help_Desc'),\r\n    helpLink: 'app54575',\r\n    helpType: 'side_pane',\r\n    imgClass: 'callouts_tip_img',\r\n  },\r\n  601: {\r\n    tipName: tipNames.structSnipHelp,\r\n    title: i18n.getString('Dashboard_TipCard_StructSnip_Help_Title'),\r\n    description: i18n.getString('Dashboard_TipCard_StructSnip_Help_Desc'),\r\n    helpLink: 'app54578',\r\n    helpType: 'side_pane',\r\n    imgClass: 'structSnip_tip_img',\r\n  },\r\n  602: {\r\n    tipName: tipNames.structSnipMktg,\r\n    title: i18n.getString('Dashboard_TipCard_StructSnip_Mktg_Title'),\r\n    description: i18n.getString('Dashboard_TipCard_StructSnip_Mktg_Desc'),\r\n    helpLink: 'https://advertise.bingads.microsoft.com/en-us/blog/post/september-2016/new!-easily-highlight-your-products-and-services-with-structured-snippets',\r\n    helpType: 'new_page',\r\n    imgClass: 'structSnip_tip_img',\r\n  },\r\n  701: {\r\n    tipName: tipNames.dsa,\r\n    title: i18n.getString('Dashboard_TipCard_DSA_Help_Title'),\r\n    description: i18n.getString('Dashboard_TipCard_DSA_Help_Desc'),\r\n    helpLink: 'app54588',\r\n    helpType: 'side_pane',\r\n    imgClass: 'dsa_tip_img',\r\n  },\r\n  801: {\r\n    tipName: tipNames.conversionTrackingVideo,\r\n    title: i18n.getString('Dashboard_TipCard_ConversionTracking_Video_Title'),\r\n    description: i18n.getString('Dashboard_TipCard_ConversionTracking_Video_Desc'),\r\n    helpLink: 'IQbuhowpV3c',\r\n    helpType: 'video',\r\n    imgClass: 'conversionTracking_tip_img',\r\n  },\r\n  901: {\r\n    tipName: tipNames.remarketingTour,\r\n    title: i18n.getString('Dashboard_TipCard_Remarketing_Tour_Title'),\r\n    description: i18n.getString('Dashboard_TipCard_Remarketing_Tour_Desc'),\r\n    helpLink: 144778,\r\n    helpType: 'tour',\r\n    imgClass: 'remarketing_tip_img',\r\n  },\r\n  902: {\r\n    tipName: tipNames.remarketingHelp1,\r\n    title: i18n.getString('Dashboard_TipCard_Remarketing_Help1_Title'),\r\n    description: i18n.getString('Dashboard_TipCard_Remarketing_Help1_Desc'),\r\n    helpLink: 'app54581',\r\n    helpType: 'side_pane',\r\n    imgClass: 'remarketing_tip_img',\r\n  },\r\n  903: {\r\n    tipName: tipNames.remarketingVideo,\r\n    title: i18n.getString('Dashboard_TipCard_Remarketing_Video_Title'),\r\n    description: i18n.getString('Dashboard_TipCard_Remarketing_Video_Desc'),\r\n    helpLink: 'PZZvA-X04-8',\r\n    helpType: 'video',\r\n    imgClass: 'remarketing_tip_img',\r\n  },\r\n  904: {\r\n    tipName: tipNames.remarketingHelp2,\r\n    title: i18n.getString('Dashboard_TipCard_Remarketing_Help2_Title'),\r\n    description: i18n.getString('Dashboard_TipCard_Remarketing_Help2_Desc'),\r\n    helpLink: 'app54582',\r\n    helpType: 'side_pane',\r\n    imgClass: 'remarketing_tip_img',\r\n  },\r\n  1001: {\r\n    tipName: tipNames.autoBidHelp,\r\n    title: i18n.getString('Dashboard_TipCard_AutoBid_Help_Title'),\r\n    description: i18n.getString('Dashboard_TipCard_AutoBid_Help_Desc'),\r\n    helpLink: 'app54580',\r\n    helpType: 'side_pane',\r\n    imgClass: 'autoBid_tip_img',\r\n  },\r\n  1002: {\r\n    tipName: tipNames.autoBidMktg,\r\n    title: i18n.getString('Dashboard_TipCard_AutoBid_Mktg_Title'),\r\n    description: i18n.getString('Dashboard_TipCard_AutoBid_Mktg_Desc'),\r\n    helpLink: 'https://advertise.bingads.microsoft.com/en-us/blog/post/august-2016/get-more-conversions-with-the-new-enhanced-cpc-bid-strategy',\r\n    helpType: 'new_page',\r\n    imgClass: 'autoBid_tip_img',\r\n  },\r\n  1101: {\r\n    tipName: tipNames.sharedBudgetsHelp,\r\n    title: i18n.getString('Dashboard_TipCard_SharedBudgets_Help_Title'),\r\n    description: i18n.getString('Dashboard_TipCard_SharedBudgets_Help_Desc'),\r\n    helpLink: 'app54584',\r\n    helpType: 'side_pane',\r\n    imgClass: 'sharedBudgets_tip_img',\r\n  },\r\n  1201: {\r\n    tipName: tipNames.callMktg,\r\n    title: i18n.getString('Dashboard_TipCard_Call_Mktg_Title'),\r\n    description: i18n.getString('Dashboard_TipCard_Call_Mktg_Desc'),\r\n    helpLink: 'https://advertise.bingads.microsoft.com/en-us/solutions/ad-extensions/call-extensions',\r\n    helpType: 'new_page',\r\n    imgClass: 'call_tip_img',\r\n  },\r\n  1202: {\r\n    tipName: tipNames.callHelp,\r\n    title: i18n.getString('Dashboard_TipCard_Call_Help_Title'),\r\n    description: i18n.getString('Dashboard_TipCard_Call_Help_Desc'),\r\n    helpLink: 'app54576',\r\n    helpType: 'side_pane',\r\n    imgClass: 'call_tip_img',\r\n  },\r\n  1301: {\r\n    tipName: tipNames.reviewsMktg,\r\n    title: i18n.getString('Dashboard_TipCard_Reviews_Mktg_Title'),\r\n    description: i18n.getString('Dashboard_TipCard_Reviews_Mktg_Desc'),\r\n    helpLink: 'https://advertise.bingads.microsoft.com/en-us/solutions/ad-extensions/review-extensions',\r\n    helpType: 'new_page',\r\n    imgClass: 'reviews_tip_img',\r\n  },\r\n  1302: {\r\n    tipName: tipNames.reviewsHelp,\r\n    title: i18n.getString('Dashboard_TipCard_Reviews_Help_Title'),\r\n    description: i18n.getString('Dashboard_TipCard_Reviews_Help_Desc'),\r\n    helpLink: 'app54579',\r\n    helpType: 'side_pane',\r\n    imgClass: 'reviews_tip_img',\r\n  },\r\n  1401: {\r\n    tipName: tipNames.kWMatchTypeHelp,\r\n    title: i18n.getString('Dashboard_TipCard_KWMatchType_Help_Title'),\r\n    description: i18n.getString('Dashboard_TipCard_KWMatchType_Help_Desc'),\r\n    helpLink: 'app54583',\r\n    helpType: 'side_pane',\r\n    imgClass: 'kWMatchType_tip_img',\r\n  },\r\n  1402: {\r\n    tipName: tipNames.kWMatchTypeMktg,\r\n    title: i18n.getString('Dashboard_TipCard_KWMatchType_Mktg_Title'),\r\n    description: i18n.getString('Dashboard_TipCard_KWMatchType_Mktg_Desc'),\r\n    helpLink: 'https://advertise.bingads.microsoft.com/en-us/resources/training/keyword-match-options',\r\n    helpType: 'new_page',\r\n    imgClass: 'kWMatchType_tip_img',\r\n  },\r\n  1501: {\r\n    tipName: tipNames.negKWHelp1,\r\n    title: i18n.getString('Dashboard_TipCard_NegKW_Help1_Title'),\r\n    description: i18n.getString('Dashboard_TipCard_NegKW_Help1_Desc'),\r\n    helpLink: 'app54586',\r\n    helpType: 'side_pane',\r\n    imgClass: 'negKW_tip_img',\r\n  },\r\n  1502: {\r\n    tipName: tipNames.negKWHelp2,\r\n    title: i18n.getString('Dashboard_TipCard_NegKW_Help2_Title'),\r\n    description: i18n.getString('Dashboard_TipCard_NegKW_Help2_Desc'),\r\n    helpLink: 'app54587',\r\n    helpType: 'side_pane',\r\n    imgClass: 'negKW_tip_img',\r\n  },\r\n  1601: {\r\n    tipName: tipNames.broadMatchHelp,\r\n    title: i18n.getString('Dashboard_TipCard_BroadMatch_Help_Title'),\r\n    description: i18n.getString('Dashboard_TipCard_BroadMatch_Help_Desc'),\r\n    helpLink: 'app54583',\r\n    helpType: 'side_pane',\r\n    imgClass: 'broadMatch_tip_img',\r\n  },\r\n  1701: {\r\n    tipName: tipNames.ScheduledImportHelp,\r\n    title: i18n.getString('Dashboard_TipCard_ScheduledImport_Help_Title'),\r\n    description: i18n.getString('Dashboard_TipCard_ScheduledImport_Help_Desc'),\r\n    helpLink: 'app54497',\r\n    helpType: 'side_pane',\r\n    imgClass: 'import_tip_img',\r\n    isImportRelatedTip: true,\r\n  },\r\n  1801: {\r\n    tipName: tipNames.ReImportRSACampaigns,\r\n    title: i18n.getString('Dashboard_TipCard_RSA_Import_Help1_Title'),\r\n    description: i18n.getString('Dashboard_TipCard_RSA_Import_Help1_Desc'),\r\n    helpLink: 'app54667',\r\n    helpType: 'side_pane',\r\n    imgClass: 'import_tip_img',\r\n    isImportRelatedTip: true,\r\n  },\r\n  1901: {\r\n    tipName: tipNames.IncludeRSACampaigns,\r\n    title: i18n.getString('Dashboard_TipCard_RSA_Import_Help2_Title'),\r\n    description: i18n.getString('Dashboard_TipCard_RSA_Import_Help2_Desc'),\r\n    helpLink: 'app54667',\r\n    helpType: 'side_pane',\r\n    imgClass: 'import_tip_img',\r\n    isImportRelatedTip: true,\r\n  },\r\n  2001: {\r\n    tipName: tipNames.IncludeMultiAccountGoogleImport,\r\n    title: i18n.getString('Dashboard_TipCard_Multi_Account_Import_Help1_Title'),\r\n    description: i18n.getString('Dashboard_TipCard_Multi_Account_Import_Help1_Desc'),\r\n    helpLink: 'app54577',\r\n    helpType: 'side_pane',\r\n    imgClass: 'import_tip_img',\r\n    isImportRelatedTip: true,\r\n  },\r\n  2101: {\r\n    tipName: tipNames.ProvideStoreToImportShoppingCampaign,\r\n    title: i18n.getString('Dashboard_TipCard_Provide_Store_To_Import_Shopping_Campaign_Help_Title'),\r\n    description: i18n.getString('Dashboard_TipCard_Provide_Store_To_Import_Shopping_Campaign_Help_Desc'),\r\n    helpLink: 'app51001',\r\n    helpType: 'side_pane',\r\n    imgClass: 'import_tip_img',\r\n    isImportRelatedTip: true,\r\n  },\r\n  2201: {\r\n    tipName: tipNames.SelectAdCusFeedToImportEXTA,\r\n    title: i18n.getString('Dashboard_TipCard_Select_AdCusFeed_To_Import_EXTA_Help_Title'),\r\n    description: i18n.getString('Dashboard_TipCard_Select_AdCusFeed_To_Import_EXTA_Help_Desc'),\r\n    helpLink: 'app54730',\r\n    helpType: 'side_pane',\r\n    imgClass: 'import_tip_img',\r\n    isImportRelatedTip: true,\r\n  },\r\n  2301: {\r\n    tipName: tipNames.FacebookImport,\r\n    title: i18n.getString('Dashboard_TipCard_FB_Import_Help_Title'),\r\n    description: i18n.getString('Dashboard_TipCard_FB_Import_Help_Desc'),\r\n    helpLink: 'app54769',\r\n    helpType: 'side_pane',\r\n    imgClass: 'import_tip_img',\r\n    isImportRelatedTip: true,\r\n  },\r\n  2401: {\r\n    tipName: tipNames.UETCombineClarity,\r\n    title: i18n.getString('Dashboard_TipCard_UETCombineClarity_Help_Title'),\r\n    description: i18n.getString('Dashboard_TipCard_UETCombineClarity_Help_Desc'),\r\n    helpLink: 'https://help.ads-int.microsoft.com/#apex/3/en/60110/-1/en/#ext:Default',\r\n    helpType: 'new_page',\r\n    imgClass: 'conversionTracking_tip_img',\r\n  },\r\n};\r\n","import _ from 'underscore';\r\nimport { DeterministicView } from '@bingads-webui/deterministic-view';\r\nimport {\r\n  entityHash,\r\n  navigateToEntity,\r\n  getEntityIds,\r\n  coerceStatus,\r\n  topChangesGridTemplate,\r\n  getInsightsMetric,\r\n} from '@bingads-webui-campaign/overview-cards-common';\r\nimport { Constants } from '@bingads-webui-clientcenter/entity-utils';\r\nimport { createElementBasedFluctuationPopupFactory } from '@bingads-webui-campaign-react/fluctuation-popup';\r\n\r\n/* @this TopChangeGrid */\r\nfunction processGridData({\r\n  metric,\r\n  data,\r\n  entitySet,\r\n}) {\r\n  const {\r\n    pageContext,\r\n    legacyRouter,\r\n    metricFormatter,\r\n    i18n,\r\n    instrumentation,\r\n    constants,\r\n  } = this.deps;\r\n\r\n\r\n  if (data === undefined || data === null) {\r\n    return undefined;\r\n  } else if (_.size(data) === 0) {\r\n    return [];\r\n  }\r\n\r\n  _.each(data, (entity) => {\r\n    if (!entity.PerformanceMetricsChange) {\r\n      instrumentation.logMessage([constants.LOGCATEGORY.ERROR], constants.LOGLEVEL.INFO, 'top-changes-card', JSON.stringify(entity));\r\n    }\r\n  });\r\n\r\n  const maxChange = Math.abs(_.max(data, ({\r\n    PerformanceMetricsChange: { [metric]: value },\r\n  }) => Math.abs(value)).PerformanceMetricsChange[metric]);\r\n\r\n  return _.map(data, (entity) => {\r\n    const formattedPeriodMetrics = metricFormatter.formatMetric(\r\n      metric,\r\n      entity.PeriodPerformanceMetrics[metric],\r\n      { currency: entity.Currency }\r\n    );\r\n    const formattedMetrics = metricFormatter.formatMetric(\r\n      metric,\r\n      entity.PerformanceMetrics[metric],\r\n      { currency: entity.Currency }\r\n    );\r\n    const value = entity.PerformanceMetricsChange[metric];\r\n    let declineBar = 0;\r\n    let declineSpace = 100;\r\n    let increaseBar = 0;\r\n    let increaseSpace = 100;\r\n\r\n    if (maxChange !== 0) {\r\n      if (value < 0) {\r\n        declineBar = Math.ceil(-(value * 100) / maxChange);\r\n        declineSpace = 100 - declineBar;\r\n      } else {\r\n        increaseBar = Math.ceil((value * 100) / maxChange);\r\n        increaseSpace = 100 - increaseBar;\r\n      }\r\n    }\r\n\r\n    const typeName = entitySet.type.elementType.shortName;\r\n    const { campaignId, adgroupId, accountId } = getEntityIds({\r\n      typeName,\r\n      id: entity.Id,\r\n      entitySet,\r\n    });\r\n\r\n    let isExperiment;\r\n\r\n    if (typeName === 'Campaign') {\r\n      isExperiment = !!entity.ExperimentId;\r\n    } else if (typeName === 'AdGroup') {\r\n      isExperiment = !!entity.Campaign.ExperimentId;\r\n    }\r\n\r\n    const fluctuationTypeIds = getInsightsMetric(entity.AvailableInsightTypeIds, metric);\r\n\r\n    return {\r\n      name: entity.Name,\r\n      status: coerceStatus(entity.Status, entity.AccountInactiveReasons),\r\n      value,\r\n      formattedValue: metricFormatter.formatMetricWithSign(\r\n        metric,\r\n        entity.PerformanceMetricsChange[metric],\r\n        { currency: entity.Currency }\r\n      ),\r\n      formattedPercentageValue: metricFormatter\r\n        .formatChangePercentageWithSign(entity.PerformanceMetricsChangePercentage[metric]),\r\n      fromTo: i18n.getString('Dashboard_Cards_FromTo', { fromValue: formattedPeriodMetrics, toValue: formattedMetrics }),\r\n      hash: entityHash({\r\n        typeName,\r\n        id: entity.Id,\r\n        isSmartCampaign: entity.CampaignType && entity.CampaignType === 'Smart',\r\n        entitySet,\r\n        pageContext,\r\n        legacyRouter,\r\n        status: entity.Status,\r\n      }),\r\n      campaignType: entity.CampaignType,\r\n      campaignId,\r\n      adgroupId,\r\n      accountId,\r\n      typeName,\r\n      formattedMetrics,\r\n      formattedPeriodMetrics,\r\n      declineBar,\r\n      declineSpace,\r\n      increaseBar,\r\n      increaseSpace,\r\n      isExperiment,\r\n      rawStatus: entity.Status,\r\n      fluctuationTypeIds,\r\n    };\r\n  });\r\n}\r\n\r\nexport default class TopChangeGrid extends DeterministicView {\r\n  constructor(options) {\r\n    super(_.extend({}, options, { renderInSync: true }));\r\n  }\r\n\r\n  initialize({\r\n    deps,\r\n    perfMarker,\r\n  }) {\r\n    this.deps = deps;\r\n    this.perfMarker = perfMarker;\r\n  }\r\n\r\n  get className() {\r\n    return 'top-change-grid-container';\r\n  }\r\n\r\n  get events() {\r\n    const { pageContext, legacyRouter, createEditableFilterStorage } = this.deps;\r\n\r\n    return {\r\n      'click .top-change-entity-name a': event => navigateToEntity({\r\n        event,\r\n        pageContext,\r\n        legacyRouter,\r\n        createEditableFilterStorage,\r\n        cardType: 'top-changes-card',\r\n        instrumentation: this.deps.instrumentation,\r\n        constants: this.deps.constants,\r\n      }),\r\n      'click .mcc-perf-fluctuation-bulb': event => this.showFluctuationPopup(event),\r\n      'keypress .mcc-perf-fluctuation-bulb': event => this.showFluctuationPopup(event),\r\n    };\r\n  }\r\n\r\n  showFluctuationPopup(e) {\r\n    const triggerButton = e.currentTarget;\r\n    const placeholder = e.currentTarget.nextSibling;\r\n    const dataSet = e.currentTarget.dataset;\r\n    const {\r\n      fluxtypeids = [], metricname, metrictext, cmid, aid,\r\n    } = dataSet || {};\r\n    const { dateRange } = this.getState();\r\n    const selectedAccount = aid ? { CurrentAccount: { Id: Number(aid) || 0 } } : {};\r\n    const selectedCampaign = cmid ? { CurrentCampaign: { Id: Number(cmid) || 0 } } : {};\r\n    const pageContextWithMetricRowInfo = {\r\n      ...this.deps.pageContext,\r\n      ...selectedAccount,\r\n      ...selectedCampaign,\r\n      ...this.deps.context,\r\n    };\r\n\r\n    if (placeholder.className === 'mcc-perf-fluctuation-placeholder') {\r\n      createElementBasedFluctuationPopupFactory({\r\n        triggerButton,\r\n        deps: {\r\n          ...this.deps,\r\n          // campaignui/feature/instrumentation/index\r\n          instrumentation: this.deps.localInstrumentation,\r\n          // TODO: update imagePath with newest resource URL\r\n          imagePath: 'https://RESOURCES.UI.BINGADS.MICROSOFT.COM/AdvertiserUI/V2018.1030.2248.41/Application/Images/fluctuation-bulb.png',\r\n          token: this.deps.pageContext.Token,\r\n          context: pageContextWithMetricRowInfo,\r\n          appConfig: this.deps.config,\r\n        },\r\n        metrics: [{\r\n          name: metricname,\r\n          value: metrictext,\r\n        }],\r\n        canViewAllInsights: true,\r\n        asyncLoadFluctuationConfig: {\r\n          dateRange: {\r\n            startDate: dateRange.start,\r\n            endDate: dateRange.end,\r\n          },\r\n          fluctuationTypeIds: JSON.parse(fluxtypeids) || [],\r\n        },\r\n        fromScenario: cmid ? 'CampaignsOverview' : 'AccountsOverview',\r\n        onFlucDismiss: ({ isLastFluc }) => {\r\n          if (isLastFluc) {\r\n            DeterministicView.getParent(this).setState({ dismissLastFluctuation: true });\r\n          }\r\n        },\r\n        onDismiss: () => {\r\n          if (triggerButton) {\r\n            triggerButton.focus();\r\n          }\r\n        },\r\n        perfMarker: this.perfMarker,\r\n      }, placeholder);\r\n    }\r\n  }\r\n\r\n  template() {\r\n    const {\r\n      metric,\r\n      data,\r\n      entitySet,\r\n      currentDateRangeText,\r\n      comparisonDateRangeText,\r\n      hasError,\r\n      loaded,\r\n    } = this.getState();\r\n\r\n    let gridData;\r\n\r\n    if (!hasError) {\r\n      gridData = processGridData.call(this, {\r\n        metric,\r\n        data: _.compact(data),\r\n        entitySet,\r\n      });\r\n    }\r\n\r\n    return () => topChangesGridTemplate({\r\n      hasError,\r\n      loaded,\r\n      gridData,\r\n      i18n: this.deps.i18n,\r\n      metricName: metric ? this.deps.s$i18n.property('PerformanceMetrics', metric) : '',\r\n      currentDateRangeText,\r\n      comparisonDateRangeText,\r\n      AccountActivityStatus: Constants.AccountActivityStatus,\r\n    });\r\n  }\r\n\r\n  renderTrunk() {\r\n    const { loaded } = this.getState();\r\n    const parent = DeterministicView.getParent(this);\r\n\r\n    if (loaded) {\r\n      parent.willRenderWithData();\r\n    }\r\n    super.renderTrunk();\r\n    if (loaded) {\r\n      parent.renderedWithData();\r\n    }\r\n  }\r\n}\r\n","import _ from 'underscore';\r\n\r\nimport { BaseCard } from '@bingads-webui-campaign/overview-base-card';\r\nimport { helpers } from '@bingads-webui/deterministic-view';\r\nimport {\r\n  TopChangesFilterOption,\r\n  getComparisonDateRange,\r\n  fetchTopChanges,\r\n  topChangesDefaultOptions,\r\n  changeEvents,\r\n  allMetrics,\r\n  isInsightsMetric,\r\n  processTopChangesMetric,\r\n  AccountsMode,\r\n  patchMetric,\r\n  getPopDescription,\r\n} from '@bingads-webui-campaign/overview-cards-common';\r\nimport { MetricPicker } from '@bingads-webui-campaign/overview-metric-picker';\r\nimport TopChangeGrid from './content';\r\nimport metricPickerButtonTemplate from './metric-picker-button-template.pug';\r\nimport template from './template.pug';\r\n\r\nlet i18n;\r\nlet items;\r\nconst layoutBreakPoint = 800;\r\n\r\nfunction getItems() {\r\n  if (!items) {\r\n    items = [{\r\n      displayText: i18n.getString('Dashboard_TopChanges_ToolbarDropdown_All_Changes'),\r\n      action: TopChangesFilterOption.AllChanges,\r\n    }, {\r\n      displayText: i18n.getString('Dashboard_TopChanges_ToolbarDropdown_Top_Gainers'),\r\n      action: TopChangesFilterOption.TopGainers,\r\n    }, {\r\n      displayText: i18n.getString('Dashboard_TopChanges_ToolbarDropdown_Top_Decliners'),\r\n      action: TopChangesFilterOption.TopDecliners,\r\n    }];\r\n\r\n    if (this.accountsMode !== AccountsMode.Smart) {\r\n      items.push({\r\n        displayText: i18n.getString('Dashboard_TopChanges_ToolbarDropdown_Insights'),\r\n        action: TopChangesFilterOption.Insights,\r\n      });\r\n    }\r\n  }\r\n\r\n  return items;\r\n}\r\n\r\nconst layoutSize = {\r\n  small: 0,\r\n  large: 1,\r\n};\r\n\r\n/* @this TopChanges */\r\nfunction getLayoutSize() {\r\n  if (this.$el.closest('.card-holder__wrapper').outerWidth() < layoutBreakPoint) {\r\n    return layoutSize.small;\r\n  }\r\n  return layoutSize.large;\r\n}\r\n\r\n/* @this TopChanges */\r\nfunction reLayout() {\r\n  const newLayoutSize = getLayoutSize.call(this);\r\n\r\n  if (this.currentLayoutSize === newLayoutSize) {\r\n    return;\r\n  }\r\n\r\n  if (newLayoutSize === layoutSize.small) {\r\n    this.$el.addClass('small_layout');\r\n  } else {\r\n    this.$el.removeClass('small_layout');\r\n  }\r\n\r\n  this.currentLayoutSize = newLayoutSize;\r\n}\r\n\r\n/* @this TopChanges */\r\nfunction getCardPreference() {\r\n  const { selectedMenuItem, metric } = this.getState();\r\n\r\n  return {\r\n    metric,\r\n    selectedMenuItem,\r\n  };\r\n}\r\n\r\n/* @this TopChange */\r\nfunction loadErrorMsg() {\r\n  helpers.updateView(this.getChild('grid-content'), {\r\n    hasError: true,\r\n    loaded: true,\r\n  });\r\n}\r\n\r\n/* @this TopChange */\r\nfunction updateData() {\r\n  const {\r\n    dateRange,\r\n    selectedMenuItem,\r\n    metric,\r\n    filter,\r\n    permissions,\r\n    dismissLastFluctuation,\r\n  } = this.getState();\r\n\r\n  if (!dateRange) {\r\n    return;\r\n  }\r\n\r\n  const comparisonDateRange = getComparisonDateRange(dateRange);\r\n  const startDate = i18n.formatDate(dateRange.start);\r\n  const endDate = i18n.formatDate(dateRange.end);\r\n  const comparisonStartDate = i18n.formatDate(comparisonDateRange.start);\r\n  const comparisonEndDate = i18n.formatDate(comparisonDateRange.end);\r\n  let currentDateRangeText;\r\n  let comparisonDateRangeText;\r\n\r\n  this.popText = getPopDescription(i18n, comparisonDateRange);\r\n  this.popTextAriaLabel = (i18n.getString('Click to learn more about {{item}}') || '').replace('{{item}}', this.popText);\r\n  if (startDate === endDate) {\r\n    currentDateRangeText = startDate;\r\n    comparisonDateRangeText = comparisonStartDate;\r\n  } else {\r\n    currentDateRangeText = `${startDate} - ${endDate}`;\r\n    comparisonDateRangeText = `${comparisonStartDate} - ${comparisonEndDate}`;\r\n  }\r\n\r\n  const {\r\n    instrumentation, constants, jsdata, dateUtil, cacheManager,\r\n  } = this.deps;\r\n\r\n  this.blockCard();\r\n  this.willFetchData();\r\n\r\n  fetchTopChanges({\r\n    entitySet: this.entitySet,\r\n    dateRange,\r\n    filter,\r\n    comparisonDateRange,\r\n    selectedMenuItem,\r\n    metric,\r\n    jsdata,\r\n    getCardsConfig: this.getCardsConfig,\r\n    dateUtil,\r\n    fetchSingleTile: this.fetchSingleTile,\r\n    isDevice: true,\r\n    permissions,\r\n    disableCache: dismissLastFluctuation,\r\n    cacheManager,\r\n    accountsMode: this.accountsMode,\r\n    dfmCacheKey: this.typeId,\r\n  }).finally(() => {\r\n    this.unblockCard();\r\n    this.setState({ dismissLastFluctuation: false });\r\n    const firstRow = this.$('.top-change-grid .top-change-entity-name.top-change-grid-row-1 a');\r\n    if (firstRow.length > 0) {\r\n      firstRow.focus();\r\n    } else {\r\n      this.$('.view-all-clickLink').focus();\r\n    }\r\n  }).then((data) => {\r\n    if (this.removed) {\r\n      return;\r\n    }\r\n\r\n    if (!data || (data.status !== null && data.status !== undefined)) {\r\n      loadErrorMsg.call(this);\r\n      // If we have error status. Those are already logged in ajax stub.\r\n      // Add a trace log.\r\n      instrumentation.logMessage([constants.LOGCATEGORY.TRACE], constants.LOGLEVEL.INFO, 'top-changes-card', JSON.stringify(data));\r\n      return;\r\n    }\r\n\r\n    let dataError = false;\r\n\r\n    _.each(data, (entity) => {\r\n      if (!entity || !entity.PerformanceMetricsChange) {\r\n        dataError = true;\r\n      }\r\n      if (entity.AvailableInsightTypeIds && entity.AvailableInsightTypeIds.length) {\r\n        const fromScenario = entity.CampaignType ? 'CampaignsOverview' : 'AccountsOverView';\r\n        instrumentation.logMessage(\r\n          [constants.LOGCATEGORY.TRACE], constants.LOGLEVEL.INFO, 'top-changes-card',\r\n          `Fluctuations Rendered. FromScenario: ${fromScenario}, FilterOption: ${selectedMenuItem}, Metric: ${metric}, TypeIds: ${entity.AvailableInsightTypeIds.toString()}, id: ${entity.Id}}.`\r\n        );\r\n      }\r\n    });\r\n\r\n    if (dataError) {\r\n      loadErrorMsg.call(this);\r\n      instrumentation.logMessage([constants.LOGCATEGORY.ERROR], constants.LOGLEVEL.INFO, 'top-changes-card', JSON.stringify(data));\r\n      return;\r\n    }\r\n\r\n    let gridData = data;\r\n\r\n    if (selectedMenuItem === TopChangesFilterOption.TopDecliners) {\r\n      gridData = _.filter(gridData, entity => entity.PerformanceMetricsChange[metric] < 0);\r\n    } else if (selectedMenuItem === TopChangesFilterOption.TopGainers) {\r\n      gridData = _.filter(gridData, entity => entity.PerformanceMetricsChange[metric] > 0);\r\n    } else if (selectedMenuItem === TopChangesFilterOption.Insights) {\r\n      gridData = isInsightsMetric(metric) ? _.filter(\r\n        gridData,\r\n        entity => !_.isEmpty(entity.AvailableInsightTypeIds)\r\n      ) : [];\r\n    }\r\n\r\n    helpers.updateView(this.getChild('grid-content'), {\r\n      loaded: true,\r\n      hasError: false,\r\n      data: gridData,\r\n      metric,\r\n      entitySet: this.entitySet,\r\n      currentDateRangeText,\r\n      comparisonDateRangeText,\r\n      dateRange,\r\n    });\r\n  }).catch((response) => {\r\n    // no need to log ajax error here.\r\n    if (response.status === undefined) {\r\n      instrumentation.logMessage([constants.LOGCATEGORY.ERROR], constants.LOGLEVEL.INFO, 'top-changes-card', response.stack);\r\n    }\r\n    loadErrorMsg.call(this);\r\n  });\r\n}\r\n\r\n/* @this TopChange */\r\nfunction updateMetricPicker() {\r\n  const { metric, permissions } = this.getState();\r\n\r\n  helpers.updateView(this.metricPickerChild, {\r\n    metric,\r\n    metrics: _.difference(allMetrics(permissions, this.accountsMode), [metric]),\r\n  });\r\n}\r\n\r\n/* @this TopChange */\r\nfunction navigateToEntityGrid() {\r\n  const {\r\n    legacyRouter,\r\n    state,\r\n    instrumentation,\r\n    constants,\r\n  } = this.deps;\r\n\r\n  instrumentation.logMessage(\r\n    [constants.LOGCATEGORY.TRACE],\r\n    constants.LOGLEVEL.INFO,\r\n    'top-changes-card',\r\n    `${this.navigationLevel} level view all clicked`\r\n  );\r\n\r\n  if (this.navigationLevel === 'account') {\r\n    legacyRouter.navigateToRoute('campaign');\r\n  } else if (this.navigationLevel === 'customer') {\r\n    legacyRouter.navigateToRoute('accounts_performance', { accountMode: this.accountsMode });\r\n  } else {\r\n    legacyRouter.navigateToRoute('campaign_adgroup', {\r\n      // eslint-disable-next-line camelcase\r\n      campaign_id: state.get('campaign_id'),\r\n    });\r\n  }\r\n}\r\n\r\n/* @this TopChange */\r\nfunction updatePopupPosition(evt) {\r\n  const $target = this.$(evt.currentTarget);\r\n  const hoverContent = $target.find('.hover-content');\r\n\r\n  if (hoverContent.attr('style')) {\r\n    hoverContent.attr('style', '');\r\n  }\r\n\r\n  const $viewport = $target.closest('.top-change-grid-container');\r\n  const scrollTop = $viewport.scrollTop();\r\n\r\n  if (scrollTop <= 0) {\r\n    return;\r\n  }\r\n\r\n  if ($target.offset().top - $viewport.offset().top > 50) {\r\n    hoverContent.css({\r\n      top: 'auto',\r\n      bottom: `${scrollTop}px`,\r\n    });\r\n  } else {\r\n    hoverContent.css({\r\n      top: `${50 - scrollTop}px`,\r\n      bottom: 'auto',\r\n    });\r\n  }\r\n}\r\n\r\n/* @this TopChange */\r\nfunction setupScrollBarCover() {\r\n  const viewport = this.$('.top-change-grid-container');\r\n  const viewportWidth = viewport.width();\r\n  const grid = this.$('.top-change-grid');\r\n  const gridWidth = grid.width();\r\n\r\n  if (viewportWidth && gridWidth && (viewportWidth > gridWidth)) {\r\n    const scrollBarWidth = viewportWidth - gridWidth;\r\n    const scrollBarHeight = viewport.height();\r\n\r\n    this.$('.scroll-bar-cover', this.$el.closest('.grid-card')).css({\r\n      width: scrollBarWidth,\r\n      height: scrollBarHeight,\r\n    });\r\n\r\n    const expand = Math.min(scrollBarWidth, 16);\r\n\r\n    viewport.css({ marginRight: -expand });\r\n  }\r\n}\r\n\r\nexport class TopChangesCard extends BaseCard {\r\n  get className() {\r\n    return 'top-changes-card';\r\n  }\r\n\r\n  get template() {\r\n    return () => template({\r\n      popText: this.popText,\r\n      buttonText: this.buttonText,\r\n      isCustomerLevel: this.navigationLevel === 'customer',\r\n      popTextAriaLabel: this.popTextAriaLabel,\r\n    });\r\n  }\r\n\r\n  get menuItems() {\r\n    const { selectedMenuItem } = this.getState();\r\n\r\n    _.each(getItems.call(this), (item) => {\r\n      if (item.action === selectedMenuItem) {\r\n        // eslint-disable-next-line no-param-reassign\r\n        item.preset = true;\r\n      } else {\r\n        // eslint-disable-next-line no-param-reassign\r\n        item.preset = false;\r\n      }\r\n    });\r\n\r\n    return items;\r\n  }\r\n\r\n  onMenuAction(menuItem) {\r\n    const { selectedMenuItem } = this.getState();\r\n\r\n    if (selectedMenuItem === menuItem) {\r\n      return;\r\n    }\r\n\r\n    const {\r\n      instrumentation, constants,\r\n    } = this.deps;\r\n\r\n    instrumentation.logMessage(\r\n      [constants.LOGCATEGORY.TRACE],\r\n      constants.LOGLEVEL.INFO,\r\n      'top-changes-card',\r\n      `${this.navigationLevel} level new pop type picked.`\r\n    );\r\n\r\n    this.setState({\r\n      selectedMenuItem: menuItem,\r\n    });\r\n  }\r\n\r\n  initialize({\r\n    entitySet,\r\n    metric,\r\n    selectedMenuItem,\r\n    dateRange,\r\n    filter,\r\n    navigationLevel,\r\n    perfMarker,\r\n    name,\r\n    sharedOptions,\r\n    deps,\r\n    fetchSingleTile = false,\r\n    preexecuteFlag = false,\r\n    accountsMode,\r\n    scope,\r\n    dismissLastFluctuation = false,\r\n    typeId,\r\n  }) {\r\n    this.getCardsConfig = sharedOptions.getCardsConfig;\r\n    this.fetchSingleTile = fetchSingleTile;\r\n    this.accountsMode = accountsMode;\r\n    this.deps = deps;\r\n    this.typeId = typeId;\r\n    this.initPerfMarker({ perfMarker, name });\r\n    // eslint-disable-next-line prefer-destructuring\r\n    i18n = deps.i18n;\r\n    this.setChild('grid-content', new TopChangeGrid({\r\n      deps: {\r\n        ...deps,\r\n        context: {\r\n          ...deps.context,\r\n          scope,\r\n        },\r\n      },\r\n      perfMarker: this.perfMarker,\r\n    }));\r\n\r\n    const permissions = deps.config && deps.config.get('Permissions');\r\n    const initialState = _.defaults({\r\n      metric,\r\n      selectedMenuItem,\r\n      dateRange,\r\n      filter,\r\n      permissions,\r\n      dismissLastFluctuation,\r\n    }, topChangesDefaultOptions);\r\n\r\n    const patchedMetric = patchMetric({\r\n      permissions,\r\n      metric: initialState.metric,\r\n      accountsMode,\r\n    });\r\n    const metricProcessed = processTopChangesMetric({\r\n      metric: patchedMetric,\r\n      permissions,\r\n      accountsMode,\r\n    });\r\n\r\n    if (metricProcessed !== initialState.metric) {\r\n      _.extend(initialState, { metric: metricProcessed });\r\n\r\n      this.setState(initialState);\r\n      _.defer(() => {\r\n        this.trigger('storeCardPreference', getCardPreference.call(this));\r\n      });\r\n    } else {\r\n      this.setState(initialState);\r\n    }\r\n\r\n    this.entitySet = entitySet;\r\n    const { metric: initialMetric } = this.getState();\r\n\r\n    this.metricPickerChild = helpers.ensureChildView(this, 'metric-picker', MetricPicker, {\r\n      buttonTemplate: metricPickerButtonTemplate,\r\n      metric: initialMetric,\r\n      metrics: _.difference(allMetrics(permissions, this.accountsMode), [initialMetric]),\r\n      metricFormatter: this.deps.metricFormatter,\r\n      s$i18n: this.deps.s$i18n,\r\n      i18n,\r\n      accountsMode,\r\n      deps,\r\n    }, {\r\n      pick: ({ metric: newMetric }) => {\r\n        const {\r\n          instrumentation, constants,\r\n        } = this.deps;\r\n\r\n        instrumentation.logMessage(\r\n          [constants.LOGCATEGORY.TRACE],\r\n          constants.LOGLEVEL.INFO,\r\n          'top-changes-card',\r\n          `${this.navigationLevel} level new metric picked.`\r\n        );\r\n        this.setState({ metric: newMetric });\r\n        updateMetricPicker.call(this);\r\n      },\r\n    });\r\n    this.navigationLevel = navigationLevel;\r\n\r\n    switch (navigationLevel) {\r\n      case 'account':\r\n        this.buttonText = i18n.getString('Dashboard_TopCampaigns_View_All');\r\n        break;\r\n      case 'customer':\r\n        this.buttonText = i18n.getString('Dashboard_TopAccounts_View_All');\r\n        break;\r\n      case 'campaign':\r\n        this.buttonText = i18n.getString('Dashboard_TopAdGroups_View_All');\r\n        break;\r\n      default:\r\n    }\r\n\r\n    const updateDataFunc = preexecuteFlag ? () => {\r\n      helpers.updateView(this.getChild('grid-content'), {\r\n        loaded: true,\r\n      });\r\n    } : updateData;\r\n    const comparisonDateRange = getComparisonDateRange(dateRange);\r\n\r\n    this.popText = getPopDescription(i18n, comparisonDateRange);\r\n    this.popTextAriaLabel = (i18n.getString('Click to learn more about {{item}}') || '').replace('{{item}}', this.popText);\r\n    updateMetricPicker.call(this);\r\n    updateDataFunc.call(this);\r\n\r\n    this.listenTo(this.model, changeEvents('dateRange', 'filter'), () => {\r\n      this.fetchSingleTile = false;\r\n      updateDataFunc.call(this);\r\n    });\r\n\r\n    this.listenTo(this.model, changeEvents('selectedMenuItem', 'metric'), () => {\r\n      this.fetchSingleTile = true;\r\n      updateDataFunc.call(this);\r\n    });\r\n\r\n    this.listenTo(this.model, changeEvents('dismissLastFluctuation'), () => {\r\n      this.fetchSingleTile = true;\r\n      updateData.call(this);\r\n    });\r\n\r\n    this.listenTo(this.model, changeEvents('metric'), () => {\r\n      updateMetricPicker.call(this);\r\n    });\r\n\r\n    this.listenTo(this.model, changeEvents('selectedMenuItem'), () => {\r\n      this.trigger('change:menuItems', {\r\n        value: this.menuItems,\r\n        options: { replace: true },\r\n      });\r\n    });\r\n\r\n    this.listenTo(this.model, changeEvents('selectedMenuItem', 'metric'), () => {\r\n      this.trigger('storeCardPreference', getCardPreference.call(this));\r\n    });\r\n\r\n    this.onResize(() => {\r\n      reLayout.call(this);\r\n      setupScrollBarCover.call(this);\r\n    });\r\n\r\n    this.on('removed', () => {\r\n      this.removed = true;\r\n    });\r\n\r\n    this.listenTo(this.model, changeEvents('size'), () => {\r\n      setupScrollBarCover.call(this);\r\n    });\r\n\r\n    this.getChild('grid-content').on('rendered', () => {\r\n      if (this.deps.onMounted) {\r\n        this.deps.onMounted.schedule(() => setupScrollBarCover.call(this));\r\n      } else {\r\n        setupScrollBarCover.call(this);\r\n      }\r\n    });\r\n  }\r\n\r\n  get events() {\r\n    return {\r\n      'mouseover .graph-hover-target,.pop-hover-target': updatePopupPosition.bind(this),\r\n      'click .view-all-clickLink': navigateToEntityGrid.bind(this),\r\n    };\r\n  }\r\n\r\n  renderTrunk() {\r\n    this.currentLayoutSize = undefined;\r\n    super.renderTrunk();\r\n    _.defer(() => {\r\n      reLayout.call(this);\r\n    });\r\n  }\r\n}\r\n","import _ from 'underscore';\r\n\r\n/**\r\n * Serialize the inlinechart preference object.\r\n * @param {object} attrs - { id, project, inlineChartData }\r\n * @returns {object} searialized data.\r\n*/\r\nexport function serialize(attrs) {\r\n  const { id, project, inlineChartData } = attrs;\r\n\r\n  if (_.some(project, _.negate(_.isString))) {\r\n    throw new Error('Invalid attributes');\r\n  }\r\n\r\n  return {\r\n    Id: id,\r\n    Name: `WebApp.${project}.InlineChart`,\r\n    Data: inlineChartData,\r\n    Type: 'object',\r\n    Version: 1,\r\n  };\r\n}\r\n\r\n/** de-serialize the inlinechart preference object.\r\n * @param {string} data - data from preference store\r\n * @return {object} de-seraialized inlinechart data.\r\n*/\r\nexport function deserialize(data) {\r\n  const match = data.Name.match(/^WebApp\\.(\\w+)\\.InlineChart/);\r\n\r\n  if (!match) {\r\n    throw new Error('Invalid preference name');\r\n  }\r\n\r\n  const project = match.slice(1);\r\n  const inlineChartData = data.Data;\r\n  const id = data.Id;\r\n\r\n  return { id, project, inlineChartData };\r\n}\r\n","import _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport { PreferencesSubadapter } from '@bingads-webui-campaign/preferences-subadapter';\r\nimport { serialize, deserialize } from './chart-preference-subadapter';\r\n\r\nexport class InlineChartPreferences {\r\n  constructor(\r\n    store,\r\n    pathConfig,\r\n    adapter,\r\n    preferenceServicePromise\r\n  ) {\r\n    if (_.isUndefined(store.definitions.InlineChart)) {\r\n      store.defineResource('InlineChart');\r\n\r\n      // Attach a preferenceSubadapter to serialize and deserialize data\r\n      adapter.registerSubadapter(\r\n        'InlineChart',\r\n        new PreferencesSubadapter({\r\n          preferenceService: preferenceServicePromise,\r\n          Resource: store.definitions.InlineChart,\r\n          prefix: 'WebApp.CampaignUI.InlineChart',\r\n          serialize,\r\n          deserialize,\r\n        })\r\n      );\r\n    }\r\n\r\n    this.pathConfig = pathConfig;\r\n    this.inlineChart = store.definitions.InlineChart;\r\n  }\r\n\r\n  /**\r\n   * This function gets inline chart specific preference data, and returns\r\n   * promise with resolved data. If key is injected as parameter, it will\r\n   * return the speicific key value inside the inline chart preference\r\n   * Otherwise, it returns all key/value pairs saved for inline charts.\r\n   * @param {string} key to find in the inlinechart preference data\r\n   * @param {string} project name under which preference will be stored\r\n   * @returns {object} promise with set of key/values stored in preference\r\n  */\r\n  getInlineChartInfo(key = null, project = 'CampaignUI') {\r\n    return this.inlineChart.findAll({\r\n      where: { project },\r\n    }).then((record) => {\r\n      if (record.length === 0) {\r\n        return Promise.resolve();\r\n      }\r\n\r\n      // Return the found record.\r\n      const keyRecord = key ? record[0].inlineChartData[key] : record[0].inlineChartData;\r\n      return Promise.resolve(keyRecord);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * This function sets inline chart specific preference data, and returns\r\n   * promise with resolved data. If provided key in passed parameter exists in preference\r\n   * already, then it will update the value. Otherwise it will create a new key/value pair.\r\n   * eg) setInlineChartInfo('{\r\n   *   'Campaign-showChart': true,\r\n   * }', 'CampaignUI')\r\n   * @param {object} item that needs to be saved to perference store\r\n   * @param {string} project name under which preference will be stored\r\n   * @returns {object} key that is created/updated on preference service\r\n   */\r\n  setInlineChartInfo(item, project = 'CampaignUI') {\r\n    return this.inlineChart.findAll({\r\n      where: { project },\r\n    }).then((record) => {\r\n      if (record.length === 0) {\r\n        // Create the new item.\r\n        return this.inlineChart.create({ inlineChartData: item, project }, {\r\n          path: this.pathConfig.get('odata.path'),\r\n        });\r\n      }\r\n\r\n      const inlineChartInfo = _.result(record[0], 'inlineChartData');\r\n      const newinlineChartInfo = _.extend({}, inlineChartInfo, item);\r\n\r\n      return this.inlineChart.update(record[0].id, { inlineChartData: newinlineChartInfo });\r\n    });\r\n  }\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\n/**\r\n * React component that renders chart label component. Chart label appears\r\n * below the highchart component and has the start and end dateranges.\r\n * @param {Bool} val - Properties used to render the component.\r\n * @returns {Element} React element.\r\n */\r\nexport class ChartLabel extends React.PureComponent {\r\n  generateStyle = val => ({\r\n    visibility: val ? 'visible' : 'hidden',\r\n  });\r\n\r\n  render() {\r\n    this.startLabelRef = React.createRef();\r\n    this.endLabelRef = React.createRef();\r\n    return (\r\n      <div className=\"chart-label\" >\r\n        <div className=\"primary-daterange\">\r\n          <div\r\n            className=\"primary-start-date\"\r\n            ref={this.startLabelRef}\r\n            style={this.generateStyle(this.props.isShowStartDateLabel)}\r\n          >\r\n            {this.props.chartLabelData.primaryStartDate}\r\n          </div>\r\n          <div\r\n            className=\"primary-end-date\"\r\n            ref={this.endLabelRef}\r\n            style={this.generateStyle(this.props.isShowEndDateLabel)}\r\n          >\r\n            {this.props.chartLabelData.primaryEndDate}\r\n          </div>\r\n        </div>\r\n        { (this.props.isPopEnabled) &&\r\n          <div className=\"comparison-daterange\">\r\n            <div\r\n              className=\"comparison-start-date\"\r\n              style={this.generateStyle(this.props.isShowStartDateLabel)}\r\n            >\r\n              {this.props.chartLabelData.comparisonStartDate}\r\n            </div>\r\n            <div\r\n              className=\"comparison-end-date\"\r\n              style={this.generateStyle(this.props.isShowEndDateLabel)}\r\n            >\r\n              {this.props.chartLabelData.comparisonEndDate}\r\n            </div>\r\n          </div>\r\n        }\r\n      </div>\r\n    );\r\n  }\r\n}\r\n\r\nChartLabel.propTypes = {\r\n  /** Pop daterange is enabled/disabled */\r\n  isPopEnabled: PropTypes.bool.isRequired,\r\n\r\n  /**\r\n   * Chart label parameters showing the start and end date for\r\n   * primary metric series and comparison series.\r\n   */\r\n  chartLabelData: PropTypes.shape({\r\n    primaryStartDate: PropTypes.string,\r\n    primaryEndDate: PropTypes.string,\r\n    comparisonStartDate: PropTypes.string,\r\n    comparisonEndDate: PropTypes.string,\r\n  }).isRequired,\r\n  isShowStartDateLabel: PropTypes.bool.isRequired,\r\n  isShowEndDateLabel: PropTypes.bool.isRequired,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { DropdownSelector } from '@bingads-webui-react/dropdown-selector';\r\n\r\nexport class MetricsPicker extends React.PureComponent {\r\n  renderSelectedItem = (item) => {\r\n    // Format the selected item content based on whether comparison data is being shown.\r\n    const selectedItemDataDisplayClass = this.props.isPopOrMovingAvg ? 'show-selectedItem-percentage' : 'hide-selectedItem-percentage';\r\n\r\n    return (\r\n      <div>\r\n        <div className=\"selectedItem-data\">{item.value}</div>\r\n        <div className={selectedItemDataDisplayClass}>{this.props.selectedItemPercentage}</div>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  render() {\r\n    const comparisonMetricDisplayClass = this.props.isPopOrMovingAvg ? 'show-comparison-line' : 'hide-comparison-line';\r\n    const selectedItem = _.findWhere(this.props.allMetrics, { id: this.props.selectedItem.id });\r\n\r\n    const metricPickerAriaLabel = this.props.class === 'secondary-metric'\r\n      ? this.props.i18n.getString('BI_Chart_SecondaryMetricPicker')\r\n      : this.props.i18n.getString('BI_Chart_MetricPicker');\r\n\r\n    return (\r\n      <div className={this.props.class} >\r\n        <div className=\"metric-colors\">\r\n          <span className=\"metric-color metric-color-line\" />\r\n          <span className={`comparison-color metric-color-line ${comparisonMetricDisplayClass}`} />\r\n        </div>\r\n        <DropdownSelector\r\n          selectedItem={selectedItem}\r\n          onSelect={this.props.onChangeHandler}\r\n          totalCount={(this.props.allMetrics).length}\r\n          items={this.props.allMetrics}\r\n          renderSelectedItem={this.renderSelectedItem}\r\n          renderItem={item => (\r\n            <li className=\"list-selector-option\" role=\"presentation\">\r\n              {item.isFluctuation ?\r\n                (\r\n                  <div>\r\n                    <span className=\"inline-recommendation-grid-icon\" />\r\n                    <span className=\"inline-chart-option\">{item.value}</span>\r\n                  </div>\r\n                  ) :\r\n                (<span>{item.value}</span>)}\r\n            </li>\r\n          )}\r\n          i18n={this.props.i18n}\r\n          dropdownMenuAriaLabel={metricPickerAriaLabel}\r\n          enableArrowKeysSupport\r\n          shouldFocusFirstFocusableItemOnMount\r\n        />\r\n      </div>\r\n    );\r\n  }\r\n}\r\n\r\nMetricsPicker.propTypes = {\r\n  allMetrics: PropTypes.arrayOf(PropTypes.shape({\r\n    id: PropTypes.number.isRequired,\r\n    value: PropTypes.string.isRequired,\r\n  })).isRequired,\r\n  onChangeHandler: PropTypes.func.isRequired,\r\n  selectedItem: PropTypes.shape({\r\n    id: PropTypes.number.isRequired,\r\n    value: PropTypes.string.isRequired,\r\n  }).isRequired,\r\n  isPopOrMovingAvg: PropTypes.bool,\r\n  selectedItemPercentage: PropTypes.string,\r\n  class: PropTypes.string,\r\n  /**\r\n   * i18n for localization\r\n   */\r\n  i18n: PropTypes.shape({\r\n    getString: PropTypes.func.isRequired,\r\n    parseDecimal: PropTypes.func.isRequired,\r\n  }).isRequired,\r\n};\r\n\r\nMetricsPicker.defaultProps = {\r\n  isPopOrMovingAvg: false,\r\n  selectedItemPercentage: '',\r\n  class: 'metrics-picker',\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { DropdownSelector } from '@bingads-webui-react/dropdown-selector';\r\n\r\nexport class GranularityPicker extends React.PureComponent {\r\n  render() {\r\n    const selectedItem = (!_.isUndefined(this.props.selectedItem)) ?\r\n      _.findWhere(this.props.allGranularities, { id: this.props.selectedItem.id }) :\r\n      undefined;\r\n\r\n    return (!_.isUndefined(this.props.selectedItem)) ? (\r\n      <div className={this.props.class} >\r\n        <DropdownSelector\r\n          selectedItem={selectedItem}\r\n          onSelect={this.props.onChangeHandler}\r\n          totalCount={(this.props.allGranularities).length}\r\n          items={this.props.allGranularities}\r\n          i18n={this.props.i18n}\r\n          dropdownMenuAriaLabel={this.props.i18n.getString('BI_Chart_GranularityPicker')}\r\n          enableArrowKeysSupport\r\n          shouldFocusFirstFocusableItemOnMount\r\n        />\r\n      </div>\r\n    ) : null;\r\n  }\r\n}\r\n\r\nGranularityPicker.propTypes = {\r\n  allGranularities: PropTypes.arrayOf(PropTypes.shape({\r\n    id: PropTypes.number.isRequired,\r\n    value: PropTypes.string.isRequired,\r\n  })).isRequired,\r\n  onChangeHandler: PropTypes.func.isRequired,\r\n  selectedItem: PropTypes.shape({\r\n    id: PropTypes.number.isRequired,\r\n    value: PropTypes.string.isRequired,\r\n  }),\r\n  class: PropTypes.string,\r\n  /**\r\n   * i18n for localization\r\n   */\r\n  i18n: PropTypes.shape({\r\n    getString: PropTypes.func.isRequired,\r\n    parseDecimal: PropTypes.func.isRequired,\r\n  }).isRequired,\r\n};\r\n\r\nGranularityPicker.defaultProps = {\r\n  class: 'granularity-picker',\r\n  selectedItem: undefined,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { MetricsPicker } from '@bingads-webui-campaign-react/metrics-picker';\r\nimport { GranularityPicker } from '@bingads-webui-campaign-react/granularity-picker';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\n\r\n/**\r\n * React component that renders a Chart Panel.\r\n * @param {Object} props - Properties used to render the component.\r\n * @returns {Element} React element.\r\n */\r\nexport class ChartPanel extends React.PureComponent {\r\n  render() {\r\n    // Moving average can be enabled but not active/used due to granularity not being daily.\r\n    const isPopOrMovingAvg = (this.props.isMovingAverage && this.props.isMovingAverageVisible)\r\n      || this.props.isPopEnabled;\r\n    const vsString = this.props.i18n.getString('InlineChart_Metric_Vs');\r\n    const showMovingAvgString = this.props.i18n.getString('BI_Chart_Show_MovingAverage');\r\n\r\n    return (\r\n      <div className=\"flex-chart-panel\">\r\n        <div className=\"chart-panel-right\">\r\n          <div className=\"metrics-pickers\">\r\n            <MetricsPicker\r\n              selectedItem={this.props.primaryMetric.selectedItem}\r\n              allMetrics={this.props.primaryMetric.metricsList}\r\n              onChangeHandler={this.props.primaryMetric.selectionChangeCallback}\r\n              isPopOrMovingAvg={isPopOrMovingAvg}\r\n              selectedItemPercentage={this.props.primaryMetric.percentage}\r\n              class=\"primary-metric\"\r\n              i18n={this.props.i18n}\r\n            />\r\n            <div className=\"metrics-vs\">\r\n              {vsString}\r\n            </div>\r\n            <MetricsPicker\r\n              selectedItem={this.props.secondaryMetric.selectedItem}\r\n              allMetrics={this.props.secondaryMetric.metricsList}\r\n              onChangeHandler={this.props.secondaryMetric.selectionChangeCallback}\r\n              isPopOrMovingAvg={isPopOrMovingAvg}\r\n              selectedItemPercentage={this.props.secondaryMetric.percentage}\r\n              class=\"secondary-metric\"\r\n              i18n={this.props.i18n}\r\n            />\r\n          </div>\r\n\r\n          <GranularityPicker\r\n            selectedItem={this.props.granularity.selectedItem}\r\n            allGranularities={this.props.granularity.granularityList}\r\n            onChangeHandler={this.props.granularity.selectionChangeCallback}\r\n            class=\"granularity-picker\"\r\n            i18n={this.props.i18n}\r\n          />\r\n          {this.props.isMovingAverageVisible &&\r\n            <div className=\"moving-average\">\r\n              <label\r\n                htmlFor=\"isMovingAverage\"\r\n              >\r\n                <input\r\n                  id=\"isMovingAverage\"\r\n                  name=\"isMovingAverage\"\r\n                  type=\"checkbox\"\r\n                  checked={this.props.isMovingAverage}\r\n                  onChange={this.props.movingAverageChangeCallback}\r\n                />\r\n                {showMovingAvgString}\r\n              </label>\r\n              <HelpPopup\r\n                aria-label={this.props.i18n.getString('LearnMoreLinkText')}\r\n                topic=\"pop_BA_PerformanceMovingAverage\"\r\n              />\r\n            </div>}\r\n        </div>\r\n      </div >\r\n    );\r\n  }\r\n}\r\n\r\nChartPanel.propTypes = {\r\n  /** i18n */\r\n  i18n: PropTypes.shape({\r\n    getString: PropTypes.func,\r\n  }).isRequired,\r\n\r\n  /** If Pop and Moving average comparison are enabled */\r\n  isPopEnabled: PropTypes.bool.isRequired,\r\n  isMovingAverage: PropTypes.bool.isRequired,\r\n  isMovingAverageVisible: PropTypes.bool.isRequired,\r\n  /** Primary metric props used to drive the primary metric picker component */\r\n  primaryMetric: PropTypes.shape({\r\n    metricsList: PropTypes.arrayOf(PropTypes.shape({\r\n      id: PropTypes.number.isRequired,\r\n      value: PropTypes.string.isRequired,\r\n    })).isRequired,\r\n    selectedItem: PropTypes.shape({\r\n      id: PropTypes.number.isRequired,\r\n      value: PropTypes.string.isRequired,\r\n    }).isRequired,\r\n    percentage: PropTypes.string.isRequired,\r\n    selectionChangeCallback: PropTypes.func.isRequired,\r\n  }).isRequired,\r\n\r\n  /** Secondary metric props used to drive the secondary metric picker component */\r\n  secondaryMetric: PropTypes.shape({\r\n    metricsList: PropTypes.arrayOf(PropTypes.shape({\r\n      id: PropTypes.number.isRequired,\r\n      value: PropTypes.string.isRequired,\r\n    })).isRequired,\r\n    selectedItem: PropTypes.shape({\r\n      id: PropTypes.number.isRequired,\r\n      value: PropTypes.string.isRequired,\r\n    }).isRequired,\r\n    percentage: PropTypes.string.isRequired,\r\n    selectionChangeCallback: PropTypes.func.isRequired,\r\n  }).isRequired,\r\n\r\n  /** Granularity props used to drive the granularity picker component */\r\n  granularity: PropTypes.shape({\r\n    granularityList: PropTypes.arrayOf(PropTypes.shape({\r\n      id: PropTypes.number.isRequired,\r\n      value: PropTypes.string.isRequired,\r\n    })).isRequired,\r\n    selectedItem: PropTypes.shape({\r\n      id: PropTypes.number.isRequired,\r\n      value: PropTypes.string.isRequired,\r\n    }).isRequired,\r\n    selectionChangeCallback: PropTypes.func.isRequired,\r\n  }).isRequired,\r\n\r\n  /** moving average prop */\r\n  movingAverageChangeCallback: PropTypes.func.isRequired,\r\n};\r\n","export const Defaults = {\r\n  primaryMetricId: 1,\r\n  secondaryMetricId: -1,\r\n  granularity: 'Day',\r\n  graunlarityId: 1,\r\n  showMovingAverage: false,\r\n  showChart: true,\r\n};\r\n\r\nconst originalPrimary = '#01188F';\r\nconst comparativePrimary = '#808CC7'; // 50% mix of originalPrimary and white\r\nconst originalSecondary = '#B40091';\r\nconst comparativeSecondary = '#D980C8'; // 50% mix of originalSecondary and white\r\n\r\nexport const seriesColor = {\r\n  primary: {\r\n    original: originalPrimary,\r\n    comparative: comparativePrimary,\r\n  },\r\n  secondary: {\r\n    original: originalSecondary,\r\n    comparative: comparativeSecondary,\r\n  },\r\n};\r\n","import _ from 'underscore';\r\nimport { seriesColor as defaultSeriesColor } from './constants';\r\n\r\nfunction uiNextTooltipPositioner(labelWidth, labelHeight, point) {\r\n  const margin = 20;\r\n  // reposition label so it does not go beyond chart bottom\r\n  // a side effect is by doing this highchart gives up auto-positions x axis as well\r\n  // so a similar calculation is done for x axis as well\r\n  return {\r\n    x: (point.plotX + labelWidth) > (this.chart.plotWidth + margin) ?\r\n      (this.chart.plotWidth + margin) - labelWidth :\r\n      point.plotX,\r\n    y: (point.plotY + labelHeight) > (this.chart.plotHeight + margin) ?\r\n      (this.chart.plotHeight + margin) - labelHeight :\r\n      point.plotY,\r\n  };\r\n}\r\n\r\nexport class ChartFormatter {\r\n  /* eslint-disable no-param-reassign */\r\n  setSeriesMarker(series, isMovingAverageOn) {\r\n    _.each(series, (sery, index) => {\r\n      let selectedSymbol;\r\n      let selectedDashStyle;\r\n      switch (index) {\r\n        case 0:\r\n          selectedSymbol = 'circle';\r\n          selectedDashStyle = 'solid';\r\n          break;\r\n        // eslint-disable-next-line no-case-declarations\r\n        case 1:\r\n          // when there are 4 series, index 1 is always primary (circle dashed line)\r\n          // either primary comparison or primary moving average\r\n          // when there are only 2 series, index 1 could be either primary or secondary\r\n          // 1. if it's primary comparison or primary moving average, style is circle dashed line\r\n          // 2. if it's secondary, style is diamond solid line\r\n          const isPrimary = isMovingAverageOn || (sery.id === 'primaryComparison');\r\n          selectedSymbol = isPrimary ? 'circle' : 'diamond';\r\n          selectedDashStyle = isPrimary ? 'ShortDash' : 'solid';\r\n          break;\r\n        case 2:\r\n          selectedSymbol = 'diamond';\r\n          selectedDashStyle = 'solid';\r\n          break;\r\n        case 3:\r\n          selectedSymbol = 'diamond';\r\n          selectedDashStyle = 'ShortDash';\r\n          break;\r\n        default:\r\n          break;\r\n      }\r\n\r\n      sery.marker = {\r\n        symbol: selectedSymbol,\r\n        enabled: true,\r\n        radius: 6,\r\n        fillColor: sery.color,\r\n        lineColor: '#FFFFFF',\r\n        lineWidth: 2,\r\n      };\r\n      sery.dashStyle = selectedDashStyle;\r\n      sery.lineWidth = 2;\r\n    });\r\n  }\r\n\r\n  getRawDate = (date, i18n) => i18n.formatDate(date, { raw: 'MM/dd/yyyy' })\r\n\r\n  getFormattedToolTip = (chartAdapter, options, seriesColor) => ({\r\n    formatter() {\r\n      const primaryPoints = [];\r\n      const comparisonPoints = [];\r\n      let tempHtml = '';\r\n      _.each(this.points, (point) => {\r\n        if (!_.isUndefined(point.series.userOptions)) {\r\n          switch (point.series.userOptions.id) {\r\n            case 'primary':\r\n              point.id = options.primaryMetric.id;\r\n              primaryPoints.push(point);\r\n              break;\r\n            case 'secondary':\r\n              point.id = options.secondaryMetric.id;\r\n              primaryPoints.push(point);\r\n              break;\r\n            case 'primaryComparison':\r\n              point.id = options.primaryMetric.id;\r\n              comparisonPoints.push(point);\r\n              break;\r\n            case 'secondaryComparison':\r\n              point.id = options.secondaryMetric.id;\r\n              comparisonPoints.push(point);\r\n              break;\r\n            default:\r\n              break;\r\n          }\r\n        } else {\r\n          // FIXME: using the color of a point is not a reliable way to find out its type.\r\n          switch (point.color) {\r\n            case seriesColor.primary.original:\r\n              point.id = options.primaryMetric.id;\r\n              primaryPoints.push(point);\r\n              break;\r\n            case seriesColor.secondary.original:\r\n              point.id = options.secondaryMetric.id;\r\n              primaryPoints.push(point);\r\n              break;\r\n            case seriesColor.primary.comparative:\r\n              point.id = options.primaryMetric.id;\r\n              comparisonPoints.push(point);\r\n              break;\r\n            case seriesColor.secondary.comparative:\r\n              point.id = options.secondaryMetric.id;\r\n              comparisonPoints.push(point);\r\n              break;\r\n            default:\r\n              break;\r\n          }\r\n        }\r\n      });\r\n\r\n      const getToolTipValueHtml = point => `<br/><span class=\"tool-tip-value\" style=\"color: ${point.color};\">${chartAdapter.formatMetric(point.id, point.y)}</span></div>`;\r\n\r\n      if (primaryPoints.length > 0) {\r\n        tempHtml = `<div class=\"charts-tooltip\"><span>${primaryPoints[0].key}</span>`;\r\n        tempHtml = `${tempHtml}<br/>`;\r\n        _.each(primaryPoints, (point, i) => {\r\n          const divClass = (i === 0) ? 'primary' : 'primary-comparison';\r\n          tempHtml = `${tempHtml}<br /><div class=\"${divClass}\"><span class=\"toolTipMetric\" >${point.series.name} </span>${getToolTipValueHtml(point)}`;\r\n        });\r\n        tempHtml += '</div>';\r\n      }\r\n\r\n      if (comparisonPoints.length > 0) {\r\n        tempHtml = options.isMovingAverageOn ?\r\n          `${tempHtml}<div class=\"charts-tooltip\"><span>Moving average</span>` :\r\n          `${tempHtml}<div class=\"charts-tooltip\"><span><b>${comparisonPoints[0].key}</b></span>`;\r\n\r\n        tempHtml = `${tempHtml}<br />`;\r\n\r\n        _.each(comparisonPoints, (point, i) => {\r\n          const divClass = (i === 0) ? 'movingaverage' : 'movingaverage-comparison';\r\n          tempHtml = `${tempHtml}<br /><div class=\"${divClass}\"><span class=\"toolTipMetric\" >${point.series.name} </span>${getToolTipValueHtml(point)}`;\r\n        });\r\n      }\r\n      tempHtml = `${tempHtml}</div>`;\r\n\r\n      return `<div class=\"perf-graph-tool-tip pop\">${tempHtml}</div>`;\r\n    },\r\n  })\r\n\r\n  getFormattedSeries = (id, name, color, chartAdapter, series, granularityId) => {\r\n    const data = _.map(series, entry =>\r\n      [chartAdapter.formatDate(entry[2], granularityId),\r\n        entry[1]]);\r\n\r\n    return {\r\n      id,\r\n      name,\r\n      color,\r\n      data,\r\n    };\r\n  }\r\n\r\n  getFormattedHighChart = (chartAdapter, options, allData) => {\r\n    const seriesColor = _.isEmpty(options.seriesColors) ? defaultSeriesColor : options.seriesColors;\r\n    const chart = { height: 143, width: options.chartWidth };\r\n    const series = [];\r\n    const title = { text: '' };\r\n    let tooltip = {};\r\n\r\n    const primaryMetricName = _.isUndefined(options.primaryMetric) ?\r\n      ''\r\n      : options.primaryMetric.value;\r\n    const secondaryMetricName = _.isUndefined(options.secondaryMetric) ?\r\n      ''\r\n      : options.secondaryMetric.value;\r\n\r\n    let seriesIndex = 0;\r\n    const primarySeries = _.isUndefined(options.primaryMetric) ?\r\n      null\r\n      : allData[options.primaryMetric.id];\r\n\r\n    if (!(_.isNull(primarySeries) || _.isUndefined(primarySeries))) {\r\n      series[seriesIndex] = this.getFormattedSeries(\r\n        'primary',\r\n        primaryMetricName,\r\n        seriesColor.primary.original,\r\n        chartAdapter,\r\n        primarySeries.PrimaryData,\r\n        options.granularityId\r\n      );\r\n\r\n      if (!_.isUndefined(primarySeries.ComparisonData)) {\r\n        seriesIndex += 1;\r\n        series[seriesIndex] = this.getFormattedSeries(\r\n          'primaryComparison',\r\n          primaryMetricName,\r\n          seriesColor.primary.comparative,\r\n          chartAdapter,\r\n          primarySeries.ComparisonData,\r\n          options.granularityId\r\n        );\r\n      }\r\n    }\r\n\r\n    const secondarySeries = (_.isUndefined(options.primaryMetric) ||\r\n      (options.secondaryMetric.id === -1)) ?\r\n      null\r\n      : allData[options.secondaryMetric.id];\r\n\r\n    if (!(_.isNull(secondarySeries) || _.isUndefined(secondarySeries))) {\r\n      seriesIndex += 1;\r\n      series[seriesIndex] = this.getFormattedSeries(\r\n        'secondary',\r\n        secondaryMetricName,\r\n        seriesColor.secondary.original,\r\n        chartAdapter,\r\n        secondarySeries.PrimaryData,\r\n        options.granularityId\r\n      );\r\n      series[seriesIndex].yAxis = 1;\r\n\r\n      if (!_.isUndefined(secondarySeries.ComparisonData)) {\r\n        seriesIndex += 1;\r\n        series[seriesIndex] = this.getFormattedSeries(\r\n          'secondaryComparison',\r\n          secondaryMetricName,\r\n          seriesColor.secondary.comparative,\r\n          chartAdapter,\r\n          secondarySeries.ComparisonData,\r\n          options.granularityId\r\n        );\r\n        series[seriesIndex].yAxis = 1;\r\n      }\r\n    }\r\n\r\n    this.setSeriesMarker(series, options.isMovingAverageOn);\r\n\r\n    tooltip = this.getFormattedToolTip(chartAdapter, options, seriesColor);\r\n\r\n    _.extend(tooltip, {\r\n      positioner: uiNextTooltipPositioner,\r\n    });\r\n\r\n    return {\r\n      chart,\r\n      series,\r\n      title,\r\n      tooltip,\r\n    };\r\n  }\r\n}\r\n","import _ from 'underscore';\r\n\r\nexport class ChartGranularityAdapter {\r\n  constructor({ i18n, gridName, lowestSupportedGranularity } = {}) {\r\n    this.i18n = i18n;\r\n    this.gridName = gridName;\r\n    this.granularityMap = [{\r\n      id: 0,\r\n      value: 'InlineChart_Granularity_Hourly',\r\n      enumValue: 'Hour',\r\n      disabled: false,\r\n      dateFormat: { datetime: 'short' },\r\n    }, {\r\n      id: 1,\r\n      value: 'InlineChart_Granularity_Daily',\r\n      enumValue: 'Day',\r\n      disabled: false,\r\n      dateFormat: { skeleton: 'yMEd' },\r\n    }, {\r\n      id: 2,\r\n      value: 'InlineChart_Granularity_Weekly',\r\n      enumValue: 'Week',\r\n      disabled: false,\r\n      dateFormat: { skeleton: 'yMMMd' },\r\n    }, {\r\n      id: 3,\r\n      value: 'InlineChart_Granularity_Monthly',\r\n      enumValue: 'Month',\r\n      disabled: false,\r\n      dateFormat: { skeleton: 'yMMM' },\r\n    }, {\r\n      id: 4,\r\n      value: 'InlineChart_Granularity_Quarterly',\r\n      enumValue: 'Quarter',\r\n      disabled: false,\r\n      dateFormat: { skeleton: 'yQQQ' },\r\n    }];\r\n    this.lowestSupportedGranularity = lowestSupportedGranularity;\r\n  }\r\n\r\n  /**\r\n   * Gets localized list of granularities for the current daterange.\r\n   * @returns {object} localized list of granularity items as {id, value}\r\n  */\r\n  getGranularitiesList = () => _.reduce(this.granularityMap, (results, item) => {\r\n    if (!item.disabled) {\r\n      results.push({\r\n        id: item.id,\r\n        value: this.i18n.getString(item.value),\r\n      });\r\n    }\r\n    return results;\r\n  }, []);\r\n\r\n  /**\r\n   * Gets localized granularity item corresponding to the id.\r\n   * @param {number} itemId - Id corresponding to the granularity item\r\n   * @returns {object} localized list of granularity items as {id, value}\r\n   */\r\n  getGranularityItem = (itemId) => {\r\n    if (itemId === undefined) {\r\n      return itemId;\r\n    }\r\n\r\n    const item = _.findWhere(this.granularityMap, { id: itemId });\r\n    return {\r\n      id: item.id,\r\n      value: this.i18n.getString(item.value),\r\n    };\r\n  };\r\n\r\n  /**\r\n   * Reconcile preferred granularity with available granularities.\r\n   * @param {number} preferredId - granularity Id preference of the user\r\n   * @returns {number} granularity id of the selected granularity\r\n   */\r\n  reconcileSelectedGranularity = (preferredId) => {\r\n    const item = _.findWhere(this.granularityMap, { id: preferredId });\r\n\r\n    // If the preferred granularity is not available for the current daterange, we fallback\r\n    // to the lowest granularity level that is supported.\r\n    if (!item || item.disabled) {\r\n      return this.getLowestAvailableGranularityId();\r\n    }\r\n\r\n    // User preference is available in current granularity menu.\r\n    return preferredId;\r\n  };\r\n\r\n  /**\r\n   * Gets localized granularity item corresponding to the id.\r\n   * @param {number} itemId - Id corresponding to the granularity item\r\n   * @returns {object} localized list of granularity items as {id, value}\r\n   */\r\n  getLowestAvailableGranularityId = () => {\r\n    const item = _.findWhere(this.granularityMap, { disabled: false });\r\n\r\n    if (!item) {\r\n      // All the granularities may be disabled (Eg. if current selected range is Today and\r\n      // POP is same day last year, then only available granularity for Today which is 'hourly'\r\n      // is not supported for period older than 6months rolling window. So in this case all\r\n      // granularities will be in disabled state.)\r\n      return undefined;\r\n    }\r\n\r\n    return item.id;\r\n  };\r\n\r\n  /**\r\n   * Get the granularity item corresponding to the enum value.\r\n   * (Enum value is being stored in the preference store.)\r\n   * @param {string} enumVal - granularity enum\r\n   * @returns {object} granularity item\r\n   */\r\n  getGranularityIdFromEnum = (enumVal) => {\r\n    const item = _.findWhere(this.granularityMap, { enumValue: enumVal });\r\n    return item.id;\r\n  };\r\n\r\n  /**\r\n   * Get the granularity enum corresponding to the id value.\r\n   * @param {number} itemId - granularity item id\r\n   * @returns {object} granularity item\r\n   */\r\n  getGranularityEnumFromId = (itemId) => {\r\n    const item = _.findWhere(this.granularityMap, { id: itemId });\r\n    return item && item.enumValue;\r\n  };\r\n\r\n  /**\r\n   * Set the granularity disabled status.\r\n   * @param {number} itemId - granularity item id\r\n   * @param {boolean} isDisabled flag\r\n   * @returns {undefined}\r\n   */\r\n  setIsGranularityDisabled = (itemId, isDisabled) => {\r\n    _.extend(_.findWhere(this.granularityMap, { id: itemId }), { disabled: isDisabled });\r\n  };\r\n\r\n  /**\r\n   * Gets LDML date format corresponding to the granularity.\r\n   * @param {number} itemId - granularity item id\r\n   * @returns {object} LDML format option of granularity\r\n   */\r\n  getGranularityDateFormat = (itemId) => {\r\n    const item = _.findWhere(this.granularityMap, { id: itemId });\r\n    return item.dateFormat;\r\n  };\r\n\r\n  calculateDiff = (dateRange) => {\r\n    if (dateRange) {\r\n      const startDate = new Date(dateRange.start);\r\n      const endDate = new Date(dateRange.end);\r\n      const timeDiff = Math.abs(endDate.getTime() - startDate.getTime());\r\n\r\n      return Math.round(timeDiff / (1000 * 3600 * 24));\r\n    }\r\n    return null;\r\n  };\r\n\r\n  calculateDisabled = (dateDiff, min, max) => dateDiff < min || dateDiff > max;\r\n\r\n  updateAvailableGranularities = (dateRange) => {\r\n    const mainDateDiff = this.calculateDiff(dateRange);\r\n    const comparedDateDiff = this.calculateDiff(dateRange.compared);\r\n    const now = new Date();\r\n    // we only support hourly data for a sliding 6 months window\r\n    const hourlyStartDate = new Date(now.setMonth(now.getMonth() - 6));\r\n    // UP Smart Performance Grid doesn't support hourly per backend team\r\n    let hourlyOptionDisabled = this.gridName === 'SmartPerformanceGrid' ||\r\n      mainDateDiff > 0 ||\r\n      (comparedDateDiff ? comparedDateDiff > 0 : false) ||\r\n      !(dateRange.start > hourlyStartDate) ||\r\n      !(dateRange.compared ? dateRange.compared.start > hourlyStartDate : true);\r\n\r\n    if (this.lowestSupportedGranularity === 'Day') {\r\n      hourlyOptionDisabled = true;\r\n    }\r\n\r\n    let dailyOptionDisabled = this.calculateDisabled(mainDateDiff, 1, 30) ||\r\n      (comparedDateDiff ? this.calculateDisabled(comparedDateDiff, 1, 30) : false);\r\n\r\n    if (this.lowestSupportedGranularity === 'Day') {\r\n      dailyOptionDisabled = this.calculateDisabled(mainDateDiff, 0, 30) ||\r\n        (comparedDateDiff ? this.calculateDisabled(comparedDateDiff, 0, 30) : false);\r\n    }\r\n\r\n    const weeklyOptionDisabled = this.calculateDisabled(mainDateDiff, 7, 210) ||\r\n      (comparedDateDiff ? this.calculateDisabled(comparedDateDiff, 7, 210) : false);\r\n\r\n    const monthlyOptionDisabled = this.calculateDisabled(mainDateDiff, 31, 900) ||\r\n      (comparedDateDiff ? this.calculateDisabled(comparedDateDiff, 31, 900) : false);\r\n\r\n    const quarterlyOptionDisabled = this.calculateDisabled(mainDateDiff, 90, Infinity) ||\r\n      (comparedDateDiff ? this.calculateDisabled(comparedDateDiff, 90, Infinity) : false);\r\n\r\n    this.setIsGranularityDisabled(0, hourlyOptionDisabled);\r\n    this.setIsGranularityDisabled(1, dailyOptionDisabled);\r\n    this.setIsGranularityDisabled(2, weeklyOptionDisabled);\r\n    this.setIsGranularityDisabled(3, monthlyOptionDisabled);\r\n    this.setIsGranularityDisabled(4, quarterlyOptionDisabled);\r\n  };\r\n}\r\n","import _ from 'underscore';\r\nimport { partialConversionPairs } from '@bingads-webui-campaign/column-conversions';\r\n\r\nconst MetricNone = { id: -1, value: 'InlineChart_Metric_None', name: 'none' };\r\nconst stringNaN = '-';\r\n\r\nexport const ImpressionsID = 5;\r\nexport const ClicksID = 1;\r\nexport const SpentID = 6;\r\nexport const ConvID = 3;\r\nexport const PartialConvID = 34;\r\nexport const EventsID = 44;\r\nexport const VideoMetricColumns = [\r\n  'VideoViews',\r\n  'ViewThroughRate',\r\n  'AverageCPV',\r\n  'TotalWatchTimeInMS',\r\n  'AverageWatchTimePerImpression',\r\n  'AverageWatchTimePerVideoView',\r\n  'VideoViewsAt25Percent',\r\n  'VideoViewsAt50Percent',\r\n  'VideoViewsAt75Percent',\r\n  'CompletedVideoViews',\r\n  'VideoCompletionRate',\r\n];\r\n\r\nexport class ChartMetricsAdapter {\r\n  constructor(i18n, campaignType) {\r\n    this.i18n = i18n;\r\n    this.campaignType = campaignType;\r\n    this.metricsMap = [{\r\n      id: ClicksID,\r\n      value: 'ColumnName_Clicks',\r\n      name: 'Clicks',\r\n      formatter: this.formatToInteger,\r\n    }, {\r\n      id: 0,\r\n      value: 'ColumnName_CostPerConversion',\r\n      name: 'AverageCPC',\r\n      formatter: this.formatCurrency,\r\n    }, {\r\n      id: 2,\r\n      value: 'ColumnName_CPA',\r\n      name: 'CPA',\r\n      formatter: this.formatCurrency,\r\n    }, {\r\n      id: ConvID,\r\n      value: 'ColumnName_Conversions',\r\n      name: 'Conversions',\r\n      formatter: this.formatToInteger,\r\n    }, {\r\n      id: 4,\r\n      value: 'ColumnName_CTR',\r\n      name: 'ClickThruRate',\r\n      metricName: 'CTR',\r\n      formatter: this.formatTo2DigitsPercent,\r\n    }, {\r\n      id: ImpressionsID,\r\n      value: 'TrendAreaChart_AxisY',\r\n      name: 'Impressions',\r\n      formatter: this.formatToInteger,\r\n    }, {\r\n      id: SpentID,\r\n      value: 'ColumnName_Spend',\r\n      name: 'Spent',\r\n      metricName: 'Spend',\r\n      formatter: this.formatCurrency,\r\n    }, {\r\n      id: 7,\r\n      value: 'Chart_AvgPosition',\r\n      name: 'AveragePosition',\r\n      formatter: this.formatTo2Digits,\r\n    }, {\r\n      id: 8,\r\n      value: 'ColumnName_TopImpressionRate',\r\n      name: 'TopImpressionRate',\r\n      formatter: this.formatTo2DigitsPercent,\r\n    }, {\r\n      id: 9,\r\n      value: 'ColumnName_AbsoluteTopImpressionRate',\r\n      name: 'AbsoluteTopImpressionRate',\r\n      formatter: this.formatTo2DigitsPercent,\r\n    }, {\r\n      id: 10,\r\n      value: 'ColumnName_ConversionRate',\r\n      name: 'ConversionRate',\r\n      formatter: this.formatTo2DigitsPercent,\r\n    }, {\r\n      id: 11,\r\n      value: 'ColumnName_Revenue',\r\n      name: 'AdvertiserReportedRevenue',\r\n      formatter: this.formatCurrency,\r\n    }, {\r\n      id: 12,\r\n      value: 'ColumnName_ROAS',\r\n      name: 'RevenueOnAdSpend',\r\n      formatter: this.formatTo2DigitsPercent,\r\n    }, {\r\n      id: 13,\r\n      value: 'ColumnName_AllConversionCPA',\r\n      name: 'AllConversionCPA',\r\n      formatter: this.formatCurrency,\r\n    }, {\r\n      id: 14,\r\n      value: 'ColumnName_AllConversions',\r\n      name: 'AllConversions',\r\n      formatter: this.formatToInteger,\r\n    }, {\r\n      id: 15,\r\n      value: 'ColumnName_AllConversionRate',\r\n      name: 'AllConversionRate',\r\n      formatter: this.formatTo2DigitsPercent,\r\n    }, {\r\n      id: 16,\r\n      value: 'ColumnName_AllConversionAdvertiserReportedRevenue',\r\n      name: 'AllConversionAdvertiserReportedRevenue',\r\n      formatter: this.formatCurrency,\r\n    }, {\r\n      id: 17,\r\n      value: 'ColumnName_AllConversionRevenueOnAdSpend',\r\n      name: 'AllConversionRevenueOnAdSpend',\r\n      formatter: this.formatTo2DigitsPercent,\r\n    }, {\r\n      id: 18,\r\n      value: 'ColumnName_ViewThroughConversions',\r\n      name: 'ViewThroughConversions',\r\n      formatter: this.formatToInteger,\r\n    }, {\r\n      id: 19,\r\n      value: 'ColumnName_VideoViews',\r\n      name: 'VideoViews',\r\n      formatter: this.formatToInteger,\r\n    }, {\r\n      id: 20,\r\n      value: 'ColumnName_ViewThroughRate',\r\n      name: 'ViewThroughRate',\r\n      formatter: this.formatTo2DigitsPercent,\r\n    }, {\r\n      id: 21,\r\n      value: 'ColumnName_AverageCPV',\r\n      name: 'AverageCPV',\r\n      formatter: this.formatCurrency,\r\n    }, {\r\n      id: 22,\r\n      value: 'ColumnName_TotalWatchTimeInMS',\r\n      name: 'TotalWatchTimeInMS',\r\n      formatter: this.formatThousandthTo2Digits,\r\n    }, {\r\n      id: 23,\r\n      value: 'ColumnName_AverageWatchTimePerImpression',\r\n      name: 'AverageWatchTimePerImpression',\r\n      formatter: this.formatTo2Digits,\r\n    }, {\r\n      id: 24,\r\n      value: 'ColumnName_AverageWatchTimePerVideoView',\r\n      name: 'AverageWatchTimePerVideoView',\r\n      formatter: this.formatTo2Digits,\r\n    }, {\r\n      id: 25,\r\n      value: 'ColumnName_VideoViewsAt25Percent',\r\n      name: 'VideoViewsAt25Percent',\r\n      formatter: this.formatToInteger,\r\n    }, {\r\n      id: 26,\r\n      value: 'ColumnName_VideoViewsAt50Percent',\r\n      name: 'VideoViewsAt50Percent',\r\n      formatter: this.formatToInteger,\r\n    }, {\r\n      id: 27,\r\n      value: 'ColumnName_VideoViewsAt75Percent',\r\n      name: 'VideoViewsAt75Percent',\r\n      formatter: this.formatToInteger,\r\n    }, {\r\n      id: 28,\r\n      value: 'ColumnName_CompletedVideoViews',\r\n      name: 'CompletedVideoViews',\r\n      formatter: this.formatToInteger,\r\n    }, {\r\n      id: 29,\r\n      value: 'ColumnName_VideoCompletionRate',\r\n      name: 'VideoCompletionRate',\r\n      formatter: this.formatTo2DigitsPercent,\r\n    }, {\r\n      id: 30,\r\n      value: 'ColumnName_ViewThroughConversionsRevenue',\r\n      name: 'ViewThroughConversionsRevenue',\r\n      formatter: this.formatTo2Digits,\r\n    }, {\r\n      id: 31,\r\n      value: 'ColumnName_ViewThroughConversionsCPA',\r\n      name: 'ViewThroughConversionsCPA',\r\n      formatter: this.formatTo2Digits,\r\n    }, {\r\n      id: 32,\r\n      value: 'ColumnName_ViewThroughConversionsReturnOnAdSpend',\r\n      name: 'ViewThroughConversionsReturnOnAdSpend',\r\n      formatter: this.formatTo2DigitsPercent,\r\n    }, {\r\n      id: 33,\r\n      value: 'ColumnName_ViewThroughConversionsRate',\r\n      name: 'ViewThroughConversionsRate',\r\n      formatter: this.formatTo2DigitsPercent,\r\n    }, {\r\n      id: PartialConvID,\r\n      value: 'ColumnName_ConversionsCredit',\r\n      name: 'ConversionsCredit',\r\n      formatter: this.formatTo2Digits,\r\n    }, {\r\n      id: 35,\r\n      value: 'ColumnName_AllConversionsCredit',\r\n      name: 'AllConversionsCredit',\r\n      formatter: this.formatTo2Digits,\r\n    }, {\r\n      id: 36,\r\n      value: 'ColumnName_ViewThroughConversionsCredit',\r\n      name: 'ViewThroughConversionsCredit',\r\n      formatter: this.formatTo2Digits,\r\n    }, {\r\n      id: 37,\r\n      value: 'ColumnName_PartialConversionCPA',\r\n      name: 'PartialConversionCPA',\r\n      formatter: this.formatCurrency,\r\n    }, {\r\n      id: 38,\r\n      value: 'ColumnName_PartialConversionRate',\r\n      name: 'PartialConversionRate',\r\n      formatter: this.formatTo2DigitsPercent,\r\n    }, {\r\n      id: 39,\r\n      value: 'ColumnName_AllPartialConversionCPA',\r\n      name: 'AllPartialConversionCPA',\r\n      formatter: this.formatCurrency,\r\n    }, {\r\n      id: 40,\r\n      value: 'ColumnName_AllPartialConversionRate',\r\n      name: 'AllPartialConversionRate',\r\n      formatter: this.formatTo2DigitsPercent,\r\n    }, {\r\n      id: 41,\r\n      value: 'ColumnName_ViewThroughPartialConversionsCPA',\r\n      name: 'ViewThroughPartialConversionsCPA',\r\n      formatter: this.formatTo2Digits,\r\n    }, {\r\n      id: 42,\r\n      value: 'ColumnName_ViewThroughPartialConversionsRate',\r\n      name: 'ViewThroughPartialConversionsRate',\r\n      formatter: this.formatTo2DigitsPercent,\r\n    }, {\r\n      id: 43,\r\n      value: 'ColumnName_AverageCPM',\r\n      name: 'AverageCPM',\r\n      formatter: this.formatCurrency,\r\n    }, {\r\n      id: 44,\r\n      value: 'UETTags_Event_Grid_ColumnEvents',\r\n      name: 'Events',\r\n      formatter: this.formatToInteger,\r\n    }, {\r\n      id: 45,\r\n      value: 'ColumnName_AverageCPS',\r\n      name: 'AverageCPS',\r\n      formatter: this.formatCurrency,\r\n    }, {\r\n      id: 46,\r\n      value: 'ColumnName_SalesCount',\r\n      name: 'SalesCount',\r\n      formatter: this.formatToInteger,\r\n    }, {\r\n      id: 47,\r\n      value: 'ColumnName_Installs',\r\n      name: 'Installs',\r\n      formatter: this.formatToInteger,\r\n    }, {\r\n      id: 48,\r\n      value: 'ColumnName_CostPerInstall',\r\n      name: 'CostPerInstall',\r\n      formatter: this.formatCurrency,\r\n    }, {\r\n      id: 49,\r\n      value: 'ColumnName_RevenuePerInstall',\r\n      name: 'RevenuePerInstall',\r\n      formatter: this.formatCurrency,\r\n    },\r\n    {\r\n      id: 50,\r\n      value: 'ColumnName_AdvertiserReportedRevenueAdjustment',\r\n      name: 'AdvertiserReportedRevenueAdjustment',\r\n      formatter: this.formatTo2Digits,\r\n    },\r\n    {\r\n      id: 51,\r\n      value: 'ColumnName_ViewThroughConversionsRevenueAdjustment',\r\n      name: 'ViewThroughConversionsRevenueAdjustment',\r\n      formatter: this.formatTo2Digits,\r\n    },\r\n    {\r\n      id: 52,\r\n      value: 'ColumnName_AllConversionAdvertiserReportedRevenueAdjustment',\r\n      name: 'AllConversionAdvertiserReportedRevenueAdjustment',\r\n      formatter: this.formatTo2Digits,\r\n    },\r\n    {\r\n      id: 53,\r\n      value: 'ColumnName_Downloads',\r\n      name: 'Downloads',\r\n      formatter: this.formatToInteger,\r\n    },\r\n    {\r\n      id: 54,\r\n      value: 'ColumnName_PostClickDownloadRate',\r\n      name: 'PostClickDownloadRate',\r\n      formatter: this.formatTo2DigitsPercent,\r\n    },\r\n    {\r\n      id: 55,\r\n      value: 'ColumnName_CostPerDownload',\r\n      name: 'CostPerDownload',\r\n      formatter: this.formatCurrency,\r\n    },\r\n    {\r\n      id: 56,\r\n      value: 'ColumnName_FirstLaunches',\r\n      name: 'FirstLaunches',\r\n      formatter: this.formatToInteger,\r\n    },\r\n    {\r\n      id: 57,\r\n      value: 'ColumnName_PostClickFirstLaunchRate',\r\n      name: 'PostClickFirstLaunchRate',\r\n      formatter: this.formatTo2DigitsPercent,\r\n    },\r\n    {\r\n      id: 58,\r\n      value: 'ColumnName_CostPerFirstLaunch',\r\n      name: 'CostPerFirstLaunch',\r\n      formatter: this.formatCurrency,\r\n    },\r\n    {\r\n      id: 59,\r\n      value: 'ColumnName_Purchases',\r\n      name: 'Purchases',\r\n      formatter: this.formatToInteger,\r\n    },\r\n    {\r\n      id: 60,\r\n      value: 'ColumnName_PostInstallPurchaseRate',\r\n      name: 'PostInstallPurchaseRate',\r\n      formatter: this.formatTo2DigitsPercent,\r\n    },\r\n    {\r\n      id: 61,\r\n      value: 'ColumnName_CostPerPurchase',\r\n      name: 'CostPerPurchase',\r\n      formatter: this.formatCurrency,\r\n    },\r\n    {\r\n      id: 62,\r\n      value: 'ColumnName_Subscriptions',\r\n      name: 'Subscriptions',\r\n      formatter: this.formatToInteger,\r\n    },\r\n    {\r\n      id: 63,\r\n      value: 'ColumnName_PostInstallSubscriptionRate',\r\n      name: 'PostInstallSubscriptionRate',\r\n      formatter: this.formatTo2DigitsPercent,\r\n    },\r\n    {\r\n      id: 64,\r\n      value: 'ColumnName_CostPerSubscription',\r\n      name: 'CostPerSubscription',\r\n      formatter: this.formatCurrency,\r\n    },\r\n\r\n    ];\r\n  }\r\n\r\n  /**\r\n   * Gets localized list of metrics.\r\n   * @param {boolean} hasNone - flag whether to include none in metriclist\r\n   * @param {boolean} IsAllConvEnabled - flag whether all conv metrics enabled\r\n   * @param {boolean} IsViewThroughConversionsEnabled - flag whether ViewThroughConversions enabled\r\n   * @param {string} currentEntity - the current entity of the page\r\n   * @returns {object} localized list of metric items as {id, value}\r\n   */\r\n  getMetricsList = ({\r\n    hasNone = false,\r\n    IsViewThroughConversionEnabled = false,\r\n    IsAvgPositionDeprecationPhase1Enabled = false,\r\n    IsAvgPositionDeprecationPhase2Enabled = false,\r\n    IsVideoAdsForCampaignEnabled = false,\r\n    IsVideoMetricsInPerformanceChartEnabled = false,\r\n    IsViewThroughConversionsRevenueEnabled = false,\r\n    dynamic: {\r\n      ColumnConversion: IsColumnConversionEnabled,\r\n      PartialConversions: IsPartialConversionsEnabled,\r\n      CPSReporting: isCPSReportingEnabled,\r\n      InstallPerformanceColumns,\r\n      ConvValueRules: IsConvValueRulesEnabled,\r\n      AppCampaignNewCampaignGridColumns,\r\n    } = {},\r\n    metricsFilter = null,\r\n    customMetricNameList = [],\r\n    currentEntity,\r\n  } = {}) => {\r\n    const isAppCampaign = AppCampaignNewCampaignGridColumns && (this.campaignType === 128 || this.campaignType === 'App');\r\n    const isAllCampaigns = AppCampaignNewCampaignGridColumns && this.campaignType === 65535;\r\n    let metricsList;\r\n    if (customMetricNameList.length > 0) {\r\n      const customMetrics = _.filter(this.metricsMap, metric => _.contains(customMetricNameList, metric.name));\r\n      if (hasNone) {\r\n        metricsList = [MetricNone, ...customMetrics];\r\n      } else {\r\n        metricsList = customMetrics;\r\n      }\r\n      return _.chain(metricsList)\r\n        .map(item => ({\r\n          id: item.id,\r\n          value: this.i18n.getString(item.value),\r\n          name: item.name,\r\n        }))\r\n        .value();\r\n    }\r\n    if (hasNone) {\r\n      metricsList = [MetricNone, ...this.metricsMap];\r\n    } else {\r\n      metricsList = this.metricsMap;\r\n    }\r\n\r\n    const rejectionPredicates = [];\r\n    const rejectedNames = [];\r\n\r\n    if (!IsViewThroughConversionEnabled) {\r\n      rejectedNames.push('ViewThroughConversions');\r\n      rejectedNames.push('ViewThroughConversionsCredit');\r\n    }\r\n\r\n    if (!IsViewThroughConversionsRevenueEnabled) {\r\n      rejectedNames.push(...[\r\n        'ViewThroughConversionsRevenue',\r\n        'ViewThroughConversionsCPA',\r\n        'ViewThroughPartialConversionsCPA',\r\n        'ViewThroughConversionsReturnOnAdSpend',\r\n        'ViewThroughConversionsRate',\r\n        'ViewThroughPartialConversionsRate',\r\n      ]);\r\n    }\r\n\r\n    if (!IsAvgPositionDeprecationPhase1Enabled) {\r\n      rejectedNames.push(...[\r\n        'TopImpressionRate',\r\n        'AbsoluteTopImpressionRate',\r\n      ]);\r\n    }\r\n\r\n    if (IsAvgPositionDeprecationPhase2Enabled) {\r\n      rejectedNames.push('AveragePosition');\r\n    }\r\n\r\n    if (!(IsVideoAdsForCampaignEnabled && IsVideoMetricsInPerformanceChartEnabled)) {\r\n      rejectedNames.push(...VideoMetricColumns);\r\n    }\r\n\r\n    if (!IsVideoAdsForCampaignEnabled) {\r\n      rejectedNames.push('AverageCPM');\r\n    }\r\n\r\n    if (!isCPSReportingEnabled) {\r\n      rejectedNames.push(...[\r\n        'AverageCPS',\r\n        'SalesCount',\r\n      ]);\r\n    }\r\n\r\n    if (!InstallPerformanceColumns) {\r\n      rejectedNames.push(...[\r\n        'Installs',\r\n        'CostPerInstall',\r\n        'RevenuePerInstall',\r\n      ]);\r\n    }\r\n\r\n    if (!IsConvValueRulesEnabled) {\r\n      rejectedNames.push(...[\r\n        'AdvertiserReportedRevenueAdjustment',\r\n        'ViewThroughConversionsRevenueAdjustment',\r\n        'AllConversionAdvertiserReportedRevenueAdjustment',\r\n      ]);\r\n    }\r\n\r\n    if (!isAppCampaign) {\r\n      rejectedNames.push(...[\r\n        'PostClickDownloadRate',\r\n        'CostPerDownload',\r\n        'PostClickFirstLaunchRate',\r\n        'Purchases',\r\n        'PostInstallPurchaseRate',\r\n        'CostPerPurchase',\r\n        'Subscriptions',\r\n        'PostInstallSubscriptionRate',\r\n        'CostPerSubscription',\r\n      ]);\r\n    }\r\n\r\n    if ((!isAllCampaigns && !isAppCampaign) || currentEntity !== 'Campaign') {\r\n      rejectedNames.push(...[\r\n        'Downloads',\r\n        'FirstLaunches',\r\n        'CostPerFirstLaunch',\r\n      ]);\r\n    }\r\n\r\n\r\n    rejectedNames.push('Events');\r\n\r\n    rejectedNames.push(...IsColumnConversionEnabled && IsPartialConversionsEnabled ?\r\n      _.keys(partialConversionPairs) :\r\n      _.values(partialConversionPairs));\r\n\r\n    if (!_.isEmpty(rejectedNames)) {\r\n      rejectionPredicates.push(metric => _.contains(rejectedNames, metric.name));\r\n    }\r\n\r\n    if (_.isFunction(metricsFilter)) {\r\n      rejectionPredicates.push(_.negate(metricsFilter));\r\n    }\r\n\r\n    const rejectionPredicate = value => _.any(rejectionPredicates, predicate => predicate(value));\r\n    return _.chain(metricsList)\r\n      .reject(rejectionPredicate)\r\n      .map(item => ({\r\n        id: item.id,\r\n        value: this.i18n.getString(item.value),\r\n        name: item.name,\r\n      }))\r\n      .value();\r\n  };\r\n\r\n  /**\r\n   * Gets localized metric item corresponding to the id.\r\n   * @param {number} itemId - Id corresponding to the metric item\r\n   * @returns {object} localized list of metric items as {id, value}\r\n   */\r\n  getMetricItem = (itemId) => {\r\n    const metricsList = [MetricNone, ...this.metricsMap];\r\n    const item = _.findWhere(metricsList, { id: itemId });\r\n    return {\r\n      id: item.id,\r\n      value: this.i18n.getString(item.value),\r\n      name: item.name,\r\n    };\r\n  };\r\n\r\n  /**\r\n   * Gets localized metric name corresponding to the id.\r\n   * @param {number} itemId - Id corresponding to the metric item\r\n   * @returns {string} name of the metric\r\n   */\r\n  getMetricNameFromId = (itemId) => {\r\n    const metricsList = [MetricNone, ...this.metricsMap];\r\n    const item = _.findWhere(metricsList, { id: itemId });\r\n    return item.metricName ? item.metricName : item.name;\r\n  };\r\n\r\n  /**\r\n   * Gets localized metric item corresponding to the id.\r\n   * @param {string} metricName - string representing internal name of the metric\r\n   * @returns {number} id of the metric\r\n   */\r\n  getMetricIdFromName = (metricName) => {\r\n    const metricsList = [MetricNone, ...this.metricsMap];\r\n    const item = _.findWhere(metricsList, { name: metricName });\r\n    return item ? item.id : -1;\r\n  };\r\n\r\n  /**\r\n   * Gets formatter corresponding to the id.\r\n   * @param {number} itemId - Id corresponding to the metric item\r\n   * @returns {number} id of the metric\r\n   */\r\n  getMetricFormatter = (itemId) => {\r\n    const item = _.findWhere(this.metricsMap, { id: itemId });\r\n    return item.formatter;\r\n  };\r\n\r\n  /**\r\n   * Format to integer value.\r\n   *\r\n   * @private\r\n   * @param {number} number - value to be formatted\r\n   * @param {options} options - format options\r\n   * @returns {number} number with 2 digit fraction\r\n   */\r\n  formatToInteger = (number, options) => (_.isNumber(number) ?\r\n    this.i18n.formatDecimal(number, _.extend({\r\n      maximumFractionDigits: 0,\r\n      minimumFractionDigits: 0,\r\n    }, options)) :\r\n    stringNaN);\r\n\r\n  /**\r\n   * Format to 2 fraction Digit value.\r\n   *\r\n   * @private\r\n   * @param {number} number -  value to be formatted\r\n   * @param {options} options - format options (Eg. {compact: short, maximumFractionDigits: 0})\r\n   * @returns {number} number with 2 digit fraction\r\n   */\r\n  formatTo2Digits = (number, options) => (_.isNumber(number) ?\r\n    this.i18n.formatDecimal(number, _.extend({\r\n      maximumFractionDigits: 2,\r\n      minimumFractionDigits: 2,\r\n    }, options)) :\r\n    stringNaN);\r\n\r\n\r\n  /**\r\n   * Format to 2 fraction Digit value after dividing by 1000\r\n   *\r\n   * @private\r\n   * @param {number} number -  value to be formatted\r\n   * @param {options} options - format options (Eg. {compact: short, maximumFractionDigits: 0})\r\n   * @returns {number} number with 2 digit fraction\r\n   */\r\n  formatThousandthTo2Digits = (number, options) => (_.isNumber(number) ?\r\n    this.i18n.formatDecimal(number / 1000, _.extend({\r\n      maximumFractionDigits: 2,\r\n      minimumFractionDigits: 2,\r\n    }, options)) :\r\n    stringNaN);\r\n\r\n  /**\r\n   * Format to 2 fraction Digit percentage value.\r\n   *\r\n   * @private\r\n   * @param {number} number -  value to be formatted\r\n   * @param {options} options - format options (Eg. {compact: short, maximumFractionDigits: 0})\r\n   * @returns {number} number with 2 digit fraction percentage\r\n   */\r\n  formatTo2DigitsPercent = (number, options) => (_.isNumber(number) ?\r\n    this.i18n.formatPercent(number / 100, _.extend({\r\n      maximumFractionDigits: 2,\r\n      minimumFractionDigits: 2,\r\n    }, options)) :\r\n    stringNaN);\r\n\r\n  /**\r\n   * Format to global account's currency code.\r\n   *\r\n   * @private\r\n   * @param {number} number -  value to be formatted\r\n   * @param {options} options - format options (Eg. {compact: short, maximumFractionDigits: 0})\r\n   * @returns {number} number in currency format.\r\n   */\r\n  formatCurrency = (number, options) => (_.isNumber(number) ?\r\n    // use global (account's) currency code\r\n    this.i18n.formatCurrency(number, undefined, options) :\r\n    stringNaN);\r\n}\r\n","import _ from 'underscore';\r\nimport { partialConversionPairs } from '@bingads-webui-campaign/column-conversions';\r\nimport { Defaults } from './constants';\r\nimport { ChartGranularityAdapter } from './chart-granularity-adapter';\r\nimport { ChartMetricsAdapter } from './chart-metrics-adapter';\r\n\r\nconst patchPreference = (metricsMap, permissions = {}) => {\r\n  const {\r\n    ColumnConversion: IsColumnConversionEnabled,\r\n    PartialConversions: IsPartialConversionsEnabled,\r\n  } = permissions.dynamic || {};\r\n\r\n  const metricsMapIdIndex = _.indexBy(metricsMap, 'id');\r\n  const metricsMapNameIndex = _.indexBy(metricsMap, 'name');\r\n  const conversionPropertyMap = IsPartialConversionsEnabled ?\r\n    partialConversionPairs :\r\n    _.invert(partialConversionPairs);\r\n\r\n  return IsColumnConversionEnabled ?\r\n    (srcMetricId) => {\r\n      if (_.has(metricsMapIdIndex, srcMetricId)) {\r\n        const srcMetricName = metricsMapIdIndex[srcMetricId].name;\r\n        if (_.has(conversionPropertyMap, srcMetricName)) {\r\n          const targetMetricName = conversionPropertyMap[srcMetricName];\r\n          const targetMetricId = metricsMapNameIndex[targetMetricName].id;\r\n          return targetMetricId;\r\n        }\r\n      }\r\n      return srcMetricId;\r\n    } :\r\n    _.identity;\r\n};\r\n\r\nexport class ChartDataAdapter {\r\n  constructor({\r\n    i18n, permissions = {}, gridName, lowestSupportedGranularity, campaignType,\r\n  } = {}) {\r\n    this.i18n = i18n;\r\n    this.campaignType = campaignType;\r\n    this.granularityAdapter = new ChartGranularityAdapter({ i18n, gridName, lowestSupportedGranularity });\r\n    this.metricsAdapter = new ChartMetricsAdapter(i18n, campaignType);\r\n    ({\r\n      ColumnConversion: this.IsColumnConversionEnabled,\r\n      PartialConversions: this.IsPartialConversionsEnabled,\r\n      InlineChartColumnMerticsEnabled: this.inlineChartColumnMerticsEnabled,\r\n    } = permissions.dynamic || {});\r\n    this.patchPreference = patchPreference(this.metricsAdapter.metricsMap, permissions);\r\n  }\r\n\r\n  /**\r\n   * Gets chart title.\r\n   * @param {object} state - sate instance to get the current level.\r\n   * @returns {string} localized chart title.\r\n   */\r\n  getChartTitle = (state) => {\r\n    let currentLevel = 'BI_Chart_AccountLevel';\r\n    if (state.get('adgroup_id')) {\r\n      currentLevel = 'BI_Chart_AdGroupLevel';\r\n    } else if (state.get('campaign_id')) {\r\n      currentLevel = 'BI_Chart_CampaignLevel';\r\n    }\r\n    return this.i18n.getString(currentLevel);\r\n  };\r\n\r\n  /**\r\n   * Gets localized text for no data text.\r\n   * @param {boolean} isError - flag to return error string\r\n   * @returns {string} localized no data text\r\n   */\r\n  getNoDataText = (isError = false) => (isError ?\r\n    this.i18n.getString('BI_Chart_Error') :\r\n    this.i18n.getString('BI_Chart_NoData'));\r\n\r\n  /**\r\n   * @param {object} data - series data from which start and end data\r\n   * @returns {object} first data item\r\n   */\r\n  getFirstDataItem = data => _.values(data)[0];\r\n\r\n  /**\r\n   * @param {object} dataItem data item\r\n   * @returns {boolean} is dataItem.PrimaryData available\r\n   */\r\n  isPrimaryDataAvailable = dataItem =>\r\n    _.isObject(dataItem)\r\n    && _.isArray(dataItem.PrimaryData)\r\n    && !_.isEmpty(dataItem.PrimaryData)\r\n    && _.every(dataItem.PrimaryData, primaryDataItem => _.isArray(primaryDataItem));\r\n\r\n  /**\r\n   * @param {object} dataItem data item\r\n   * @returns {boolean} is dataItem.ComparisonData available\r\n   */\r\n  isComparisonDataAvailable = dataItem =>\r\n    _.isObject(dataItem)\r\n    && _.isArray(dataItem.ComparisonData)\r\n    && !_.isEmpty(dataItem.ComparisonData)\r\n    && _.every(dataItem.ComparisonData, comparisonDataItem => _.isArray(comparisonDataItem));\r\n\r\n  /**\r\n   * Gets localized chart start and end date labels. By default the\r\n   * show lables will be true and further after aligning fluctuation, if\r\n   * fluctuation data overlaps with start/end date, date will be hidden.\r\n   * @param {object} data - series data from which start and end data\r\n   *  to be shown in label is extracted.\r\n   * @param {number} granularityId - Id of the current grain selection.\r\n   * @returns {object} localized chart label\r\n   */\r\n  getChartLabel = (data, granularityId) => {\r\n    const firstDataItem = this.getFirstDataItem(data);\r\n    const isComparisonDataAvailable = this.isComparisonDataAvailable(firstDataItem);\r\n    const xAxisStartDate = firstDataItem.PrimaryData[0][2];\r\n    const xAxisEndDate = this.getLastAvailableDate(firstDataItem.PrimaryData);\r\n    const xAxisCompareStartDate = isComparisonDataAvailable ?\r\n      firstDataItem.ComparisonData[0][2] :\r\n      '';\r\n    const xAxisCompareEndDate = isComparisonDataAvailable ?\r\n      this.getLastAvailableDate(firstDataItem.ComparisonData) :\r\n      '';\r\n\r\n    return {\r\n      primaryStartDate: this.formatDate(xAxisStartDate, granularityId),\r\n      primaryEndDate: this.formatDate(xAxisEndDate, granularityId),\r\n      comparisonStartDate: this.formatDate(xAxisCompareStartDate, granularityId),\r\n      comparisonEndDate: this.formatDate(xAxisCompareEndDate, granularityId),\r\n    };\r\n  };\r\n\r\n  /**\r\n   * Gets last available date.\r\n   * @param {object} data - series data from which start and end data\r\n   *  to be shown in label is extracted.\r\n   * @returns {string} - latest available date within given data\r\n   */\r\n  getLastAvailableDate(data) {\r\n    if (!data[data.length - 1][2]) {\r\n      for (let i = data.length - 1; i > -1; i -= 1) {\r\n        if (data[i][2]) {\r\n          return data[i][2];\r\n        }\r\n      }\r\n    }\r\n    return data[data.length - 1][2];\r\n  }\r\n\r\n  /**\r\n   * Gets localized list of metrics.\r\n   * @param {object} permission the Persission obj\r\n   * @param {function} metricsFilter the filter function of metricsList\r\n   * @param {object} customMetricNameList the custom metrics list\r\n   * @param {string} currentEntity the current entity of the page\r\n   * @returns {object} localized list of metric items as {id, value}\r\n   */\r\n  getPrimaryMetricsList = (permission = {}, metricsFilter = null, customMetricNameList = [], currentEntity) =>\r\n    this.metricsAdapter.getMetricsList(_.extend(permission, {\r\n      hasNone: false,\r\n      metricsFilter,\r\n      customMetricNameList,\r\n      currentEntity,\r\n    }));\r\n\r\n  /**\r\n   * Gets localized list of metrics with none.\r\n   * @param {object} permission the Persission obj\r\n   * @param {function} metricsFilter the filter function of metricsList\r\n   * @param {object} customMetricNameList the custom metrics list\r\n   * @param {string} currentEntity the current entity of the page\r\n   * @returns {object} localized list of metric items as {id, value}\r\n   */\r\n  getSecondaryMetricsList = (permission = {}, metricsFilter = null, customMetricNameList = [], currentEntity) =>\r\n    this.metricsAdapter.getMetricsList(_.extend(permission, {\r\n      hasNone: true,\r\n      metricsFilter,\r\n      customMetricNameList,\r\n      currentEntity,\r\n    }));\r\n\r\n  /**\r\n   * Gets localized metric item corresponding to the id.\r\n   * @param {number} id - Id corresponding to the metric item\r\n   * @returns {object} localized list of metric items as {id, value}\r\n   */\r\n  getMetricItem = id => this.metricsAdapter.getMetricItem(id);\r\n\r\n  /**\r\n   * Gets localized metric name corresponding to the id.\r\n   * @param {number} id - Id corresponding to the metric item\r\n   * @returns {object} localized list of metric items as {id, value}\r\n   */\r\n  getMetricName = id => this.metricsAdapter.getMetricNameFromId(id);\r\n\r\n  /**\r\n   * Gets localized metric value formatted using i18n based formatters.\r\n   * @param {number} id - Id corresponding to the metric item\r\n   * @param {number} value - value of the metric\r\n   * @param {object} options - i18n formatting options\r\n   * @returns {object} localized list of metric items as {id, value}\r\n   */\r\n  formatMetric = (id, value, options = {}) => {\r\n    const formatter = this.metricsAdapter.getMetricFormatter(id);\r\n    return formatter(value, options);\r\n  };\r\n\r\n  /**\r\n   * Gets localized granularity item corresponding to the id.\r\n   * @param {number} id - Id corresponding to the granularity item\r\n   * @returns {object} localized list of granularity items as {id, value}\r\n   */\r\n  getGranularitySelection = id => this.granularityAdapter.getGranularityItem(id);\r\n\r\n  /**\r\n  * Gets localized list of granularities for the current daterange.\r\n  * @returns {object} localized list of granularity items as {id, value}\r\n  */\r\n  getGranularitiesList = () => this.granularityAdapter.getGranularitiesList();\r\n\r\n  /**\r\n   * Gets selected granularity item enum\r\n   * @param {number} id - Id corresponding to the granularity item\r\n   * @returns {object} localized list of granularity items as {id, value}\r\n   */\r\n  getGranularityEnum = id => this.granularityAdapter.getGranularityEnumFromId(id);\r\n\r\n  /**\r\n   * Gets UI preferences like selected metrics, show chart etc. from preference store.\r\n   * If not found in the preference store, a default value will be returned.\r\n   * @param {object} preference - preference store to be used to fetch data\r\n   * @param {object} pageContext - pagecontext to be used to get the current tab name\r\n   * @returns {object} object containing preferences and defaults\r\n   */\r\n  getPreferencesAndDefaults = (preference, pageContext) =>\r\n    preference.getInlineChartInfo().then((preferenceObject) => {\r\n      const showChartPref = _.result(\r\n        preferenceObject,\r\n        `${pageContext.CurrentTabId}-showChart`,\r\n        Defaults.showChart\r\n      );\r\n\r\n      const showMovingAverageInPref = _.result(\r\n        preferenceObject,\r\n        `${pageContext.CurrentTabId}-showMovingAverage`,\r\n        Defaults.showMovingAverage\r\n      );\r\n\r\n      const granularityEnumInPref = _.result(\r\n        preferenceObject,\r\n        `${pageContext.CurrentTabId}-granularity`,\r\n        Defaults.granularity\r\n      );\r\n      const granularityIdInPref =\r\n        this.granularityAdapter.getGranularityIdFromEnum(granularityEnumInPref);\r\n\r\n      let primaryIdInPref = Defaults.primaryMetricId;\r\n      if (this.IsColumnConversionEnabled) {\r\n        const primaryMetricPrefKey = `${pageContext.CurrentTabId}-primaryMetric`;\r\n        if (_.has(preferenceObject, primaryMetricPrefKey)) {\r\n          primaryIdInPref =\r\n            this.patchPreference(preferenceObject[primaryMetricPrefKey]);\r\n        }\r\n      } else {\r\n        primaryIdInPref = _.result(\r\n          preferenceObject,\r\n          `${pageContext.CurrentTabId}-primaryMetric`,\r\n          Defaults.primaryMetricId\r\n        );\r\n      }\r\n\r\n      let secondaryIdInPref = Defaults.secondaryMetricId;\r\n      if (this.IsColumnConversionEnabled) {\r\n        const secondaryMetricPrefKey = `${pageContext.CurrentTabId}-secondaryMetric`;\r\n        if (_.has(preferenceObject, secondaryMetricPrefKey)) {\r\n          secondaryIdInPref =\r\n            this.patchPreference(preferenceObject[secondaryMetricPrefKey]);\r\n        }\r\n      } else {\r\n        secondaryIdInPref = _.result(\r\n          preferenceObject,\r\n          `${pageContext.CurrentTabId}-secondaryMetric`,\r\n          Defaults.secondaryMetricId\r\n        );\r\n      }\r\n\r\n      return {\r\n        showChart: showChartPref,\r\n        showMovingAverage: showMovingAverageInPref,\r\n        granularityId: granularityIdInPref,\r\n        primaryMetricId: primaryIdInPref,\r\n        secondaryMetricId: secondaryIdInPref,\r\n      };\r\n    });\r\n\r\n  /**\r\n   * Re-evaluate granularity list and selection based on preference and current daterange.\r\n   * @param {object} dateRange - daterange provided by date picker\r\n   * @param {number} preferredGranularityId - Granularity Id from preference store\r\n   * @returns {number} granularity Id to be used in current selection\r\n  */\r\n  reevaluateGranularity = (dateRange, preferredGranularityId) => {\r\n    this.granularityAdapter.updateAvailableGranularities(dateRange);\r\n    return this.granularityAdapter.reconcileSelectedGranularity(preferredGranularityId);\r\n  };\r\n\r\n  /**\r\n   * Extracts and normalizes chart data based on individual metric information.\r\n   * @param {object} rawData flag to return error string\r\n   * @returns {string} localized no data text\r\n  */\r\n  prepareData = (rawData) => {\r\n    const transformChartPoints = (series) => {\r\n      const ret = {};\r\n\r\n      const convertData = (point, isPrimaryData) => {\r\n        if (isPrimaryData) {\r\n          ret.PrimaryData = ret.PrimaryData || [];\r\n        } else {\r\n          ret.ComparisonData = ret.ComparisonData || [];\r\n        }\r\n\r\n        const utcPoint = point;\r\n        // Because the data-time is based on campaign time zone by default,\r\n        // ideally, the format of data-time string in OData response should not\r\n        // contain time zone part. In case it does, we should remove it.\r\n        // e.g. \"2016-11-11T00:00:00-08:00\" -> \"2016-11-11T00:00:00\"\r\n        utcPoint.DateTime = point.DateTime.substring(0, 19);\r\n\r\n        const dateTime = new Date(utcPoint.DateTime);\r\n\r\n        if (isPrimaryData) {\r\n          ret.PrimaryData.push([dateTime.getTime(), utcPoint.Value, point.DateTime]);\r\n        } else {\r\n          ret.ComparisonData.push([dateTime.getTime(), utcPoint.Value, utcPoint.DateTime]);\r\n        }\r\n      };\r\n\r\n      _.each(series.PrimaryDataPoints, (point) => {\r\n        convertData(point, true);\r\n      });\r\n\r\n      _.each(series.ComparisonDataPoints, (point) => {\r\n        convertData(point, false);\r\n      });\r\n\r\n      return ret;\r\n    };\r\n\r\n    const ret = {};\r\n\r\n    _.each(rawData, (series) => {\r\n      if (!series) {\r\n        return;\r\n      }\r\n      const metricId = this.metricsAdapter.getMetricIdFromName(series.MetricName);\r\n\r\n      ret[metricId] = {};\r\n      ret[metricId] = transformChartPoints(series);\r\n    });\r\n\r\n    return ret;\r\n  };\r\n\r\n  /**\r\n   * Compares two series and fills all the smaller series with null.\r\n   * This is used mostly in POP scenarios with custom date range where the data\r\n   * points are either fewer or more than the primary series.\r\n   * Comparison start date is aligned to primary series start date.\r\n   * @param {object} dataSet - inline chart data\r\n   * @param {string} granularity - current granularity selection\r\n   * @returns {object} aligned data\r\n  */\r\n  alignDataForComparison = (dataSet, granularity) => {\r\n    const keys = Object.keys(dataSet);\r\n\r\n    _.each(keys, (key) => {\r\n      const metricData = dataSet[key];\r\n\r\n      if (metricData.PrimaryData &&\r\n        metricData.ComparisonData &&\r\n        metricData.PrimaryData.length !== metricData.ComparisonData.length) {\r\n        const shortermetricData =\r\n          metricData.PrimaryData.length > metricData.ComparisonData.length ?\r\n            metricData.ComparisonData :\r\n            metricData.PrimaryData;\r\n\r\n        const longermetricData =\r\n          metricData.PrimaryData.length < metricData.ComparisonData.length ?\r\n            metricData.ComparisonData :\r\n            metricData.PrimaryData;\r\n\r\n        const diff = Math.abs(metricData.PrimaryData.length - metricData.ComparisonData.length);\r\n\r\n        for (let i = 0; i < diff; i++) { // eslint-disable-line no-plusplus\r\n          const diff1 = longermetricData[shortermetricData.length][0]\r\n            - longermetricData[shortermetricData.length - 1][0];\r\n          const dayAfter = shortermetricData[shortermetricData.length - 1][0] + diff1;\r\n\r\n          shortermetricData.push([dayAfter, null]);\r\n        }\r\n      }\r\n\r\n      // Current Mt returns last day of month, instead of first day of month.\r\n      // Because last day of month\r\n      if (granularity === 'Month' || granularity === 'Quarter') {\r\n        const dayInMillisec = 60 * 60 * 24 * 1000;\r\n\r\n        // eslint-disable-next-line no-plusplus\r\n        for (let i = 0; i < metricData.PrimaryData.length - 1; i++) {\r\n          const primaryDataDateDiff =\r\n            (metricData.PrimaryData[i + 1][0] - metricData.PrimaryData[i][0]) / dayInMillisec;\r\n          const comparisonDataDateDiff =\r\n            (metricData.ComparisonData[i + 1][0] - metricData.ComparisonData[i][0]) / dayInMillisec;\r\n\r\n          if (comparisonDataDateDiff > primaryDataDateDiff) {\r\n            metricData.PrimaryData[i + 1][0] += dayInMillisec;\r\n          } else if (comparisonDataDateDiff < primaryDataDateDiff) {\r\n            metricData.ComparisonData[i + 1][0] += dayInMillisec;\r\n          }\r\n        }\r\n      }\r\n    });\r\n  };\r\n\r\n  formatDate = (timestamp, granularityId) => {\r\n    // fix prod err: granularityId can be undefined due to Merged PR 789653\r\n    if (_.isUndefined(granularityId)) {\r\n      return '';\r\n    }\r\n\r\n    const options = this.granularityAdapter.getGranularityDateFormat(granularityId);\r\n\r\n    if (timestamp && options) {\r\n      if (_.isUndefined(this.dateParser)) {\r\n        this.dateParser = this.i18n.dateParser({ raw: 'yyyy-MM-ddTHH:mm:ss' });\r\n      }\r\n\r\n      if (_.isUndefined(this.dateFormatters)) {\r\n        this.dateFormatters = {};\r\n      }\r\n\r\n      let dateFormatter = this.dateFormatters[granularityId];\r\n      if (_.isUndefined(dateFormatter)) {\r\n        const formatter = this.i18n.dateFormatter(options);\r\n        dateFormatter = _.compose(formatter, this.dateParser);\r\n        this.dateFormatters[granularityId] = dateFormatter;\r\n      }\r\n\r\n      return dateFormatter(timestamp);\r\n    }\r\n\r\n    return '';\r\n  };\r\n\r\n  /**\r\n   * Deep compares two dates based on start -end and comparison dates.\r\n   * Expects the inputs to be the object returned by date picker.\r\n   * @param {object} date1 - daterange object one to be compared\r\n   * @param {object} date2 - dateRange object two to be compared\r\n   * @returns {boolean} if date ranges are different.\r\n  */\r\n  isDateRangeChanged = (date1, date2) => {\r\n    if ((date1 === date2) ||\r\n      (_.isEmpty(date1) && _.isEmpty(date2))) {\r\n      return false;\r\n    }\r\n\r\n    // Check if any one of the dateRange is undefined or empty\r\n    if (!date1 || !date2 || _.isEmpty(date1) || _.isEmpty(date2)) {\r\n      return true;\r\n    }\r\n\r\n    // Check if start and end dates are different\r\n    if ((date1.start.getTime() !== date2.start.getTime()) ||\r\n      (date1.end.getTime() !== date2.end.getTime())) {\r\n      return true;\r\n    }\r\n\r\n    // Check if comparison dates are different\r\n    if (date1.compared && date2.compared) {\r\n      if ((date1.compared.start.getTime() !== date2.compared.start.getTime()) ||\r\n        (date1.compared.end.getTime() !== date2.compared.end.getTime())) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    // Check if any one has comparison date\r\n    if ((date1.compared && !date2.compared) ||\r\n      (date2.compared && !date1.compared)) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  };\r\n\r\n  getMetricsQuery = (primaryMetricSelectionId, secondaryMetricSelectionId) => {\r\n    if (!this.inlineChartColumnMerticsEnabled) {\r\n      return 'All';\r\n    }\r\n    const primaryMetricName = this.getMetricName(primaryMetricSelectionId);\r\n    const secondaryMetricName = this.getMetricName(secondaryMetricSelectionId);\r\n    const metricNames = _.chain([primaryMetricName, secondaryMetricName])\r\n      .filter(name => name !== 'none')\r\n      .uniq()\r\n      .value();\r\n    return metricNames.join(',');\r\n  };\r\n\r\n  formatPreferenceValue = (dateRange, preferenceValue) => {\r\n    const granularityId = this.reevaluateGranularity(dateRange, preferenceValue.granularityId);\r\n    if (_.isUndefined(granularityId)) {\r\n      return;\r\n    }\r\n    const granularity = this.getGranularityEnum(granularityId);\r\n    const metrics = this.getMetricsQuery(\r\n      preferenceValue.primaryMetricId,\r\n      preferenceValue.secondaryMetricId\r\n    );\r\n    const movingAverage = preferenceValue.showMovingAverage;\r\n    // eslint-disable-next-line consistent-return\r\n    return {\r\n      Granularity: granularity,\r\n      Metrics: metrics,\r\n      MovingAverage: (!dateRange.compared) &&\r\n      (granularityId === Defaults.graunlarityId) && movingAverage,\r\n    };\r\n  };\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\n/**\r\n * React component that renders flucutation bulb component. Fluctuation bulb appears\r\n * below the highchart component.\r\n * @param {Bool} val - Properties used to render the component.\r\n * @returns {Element} React element.\r\n */\r\nexport class FluctuationBulb extends React.PureComponent {\r\n  render() {\r\n    this.bulbElem = React.createRef();\r\n    const divStyle = {\r\n      left: `${this.props.left}px`,\r\n    };\r\n    const { isRed, isYellow } = this.props;\r\n    const normalClass = isYellow ? 'balloonYellow' : 'balloon';\r\n    const balloonClass = isRed ? 'balloonUnknown' : normalClass;\r\n    const balloonPic = <div className=\"fluc-image\" id={this.props.id} />;\r\n\r\n    return (\r\n      <div className={balloonClass} style={divStyle} ref={this.bulbElem} id={this.props.id}>\r\n        {balloonPic}\r\n      </div>\r\n    );\r\n  }\r\n}\r\n\r\nFluctuationBulb.propTypes = {\r\n  id: PropTypes.string.isRequired,\r\n  isRed: PropTypes.bool.isRequired,\r\n  isYellow: PropTypes.bool.isRequired,\r\n  left: PropTypes.number.isRequired,\r\n};\r\n","export const instrumentationSchema = {\r\n  scenario: [{\r\n    name: 'inlineChart',\r\n    value: 'inlineChart',\r\n    setting: {},\r\n    activity: [\r\n      {\r\n        name: 'inlineChartFilter',\r\n        value: 'inlineChartFilter',\r\n      },\r\n      {\r\n        name: 'inlineChartAction',\r\n        value: 'inlineChartAction',\r\n      },\r\n      {\r\n        name: 'inlineChartError',\r\n        value: 'inlineChartError',\r\n      },\r\n    ],\r\n  }],\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { FluctuationPopup, FluctuationTypeKey, FluctuationType } from '@bingads-webui-campaign-react/fluctuation-popup';\r\nimport { ChartDataAdapter } from './chart-data-adapter';\r\nimport { FluctuationBulb } from './fluctuation-bulb';\r\nimport { instrumentationSchema } from './inline-chart-instr-schema';\r\nimport { ImpressionsID, ClicksID, SpentID, ConvID, PartialConvID } from './chart-metrics-adapter';\r\n\r\nfunction getFluctuationType(metricId) {\r\n  switch (metricId) {\r\n    case ImpressionsID:\r\n      return FluctuationType[FluctuationTypeKey.Impression];\r\n    case ClicksID:\r\n      return FluctuationType[FluctuationTypeKey.Click];\r\n    case SpentID:\r\n      return FluctuationType[FluctuationTypeKey.Spend];\r\n    case ConvID:\r\n    case PartialConvID:\r\n      return FluctuationType[FluctuationTypeKey.Conv];\r\n    default:\r\n      return null;\r\n  }\r\n}\r\n\r\nexport class FluctuationPanel extends React.PureComponent {\r\n  constructor(props) {\r\n    super(props);\r\n\r\n    this.initializeInstrumentation();\r\n    this.chartDataAdapter = new ChartDataAdapter({\r\n      i18n: this.props.deps.i18n,\r\n      permissions: this.props.deps.context.Permissions,\r\n    });\r\n    this.bulbRefArr = [];\r\n\r\n    this.state = {\r\n      chart: null,\r\n      openedFlucId: null,\r\n    };\r\n  }\r\n\r\n  componentDidUpdate() {\r\n    let finalStartAvail = true;\r\n    let finalEndAvail = true;\r\n    this.bulbRefArr.forEach((item) => {\r\n      if (item.bulbElem.current) {\r\n        const { isStartAvail, isEndAvail } =\r\n          this.hideChartLabelIfApplicable(item.bulbElem.current);\r\n        finalStartAvail = finalStartAvail && isStartAvail;\r\n        finalEndAvail = finalEndAvail && isEndAvail;\r\n      }\r\n    });\r\n    if (this.props.chartLabelStatus.isShowStartDateLabel !== finalStartAvail ||\r\n      this.props.chartLabelStatus.isShowEndDateLabel !== finalEndAvail) {\r\n      this.props.onChartLabelToggle({\r\n        isShowStartDateLabel: finalStartAvail,\r\n        isShowEndDateLabel: finalEndAvail,\r\n      });\r\n    }\r\n  }\r\n\r\n  onChartUpdated = (chart) => {\r\n    this.setState({\r\n      chart,\r\n    });\r\n  };\r\n\r\n  initializeInstrumentation = () => {\r\n    this.props.deps.instrumentation.addScenario(instrumentationSchema);\r\n\r\n    const inlineChartScenario = this.props.deps.instrumentation.inlineChart.create();\r\n    this.activities = {\r\n      chartActionActivity: inlineChartScenario.inlineChartAction.create(),\r\n      chartErrorActivity: inlineChartScenario.inlineChartError.create(),\r\n    };\r\n  };\r\n\r\n  isTwoRectOverlapping = (elem1, elem2) =>\r\n  // Check Leftoverlap, element 1 in element 2, element 2 inside element 1, right overlap\r\n    ((elem1.left >= elem2.left && elem2.right >= elem1.left) ||\r\n      (elem1.left >= elem2.left && elem1.right <= elem2.right) ||\r\n      (elem2.left >= elem1.left && elem2.right <= elem1.right) ||\r\n      (elem1.right >= elem2.left && elem2.right >= elem1.right));\r\n\r\n  hideChartLabelIfApplicable = (bulbElem) => {\r\n    const startLabelRef = this.props.chartLabelRef.current.startLabelRef.current;\r\n    const endLabelRef = this.props.chartLabelRef.current.endLabelRef.current;\r\n    const bulbClientRect = bulbElem.getBoundingClientRect();\r\n    let isBulbOverlappingWithStart = false;\r\n    let isBulbOverlappingWithEnd = false;\r\n\r\n    if (startLabelRef) {\r\n      const startDateRect = startLabelRef.getBoundingClientRect();\r\n      isBulbOverlappingWithStart = this.isTwoRectOverlapping(startDateRect, bulbClientRect);\r\n    }\r\n    if (endLabelRef) {\r\n      const lastDateRect = endLabelRef.getBoundingClientRect();\r\n      isBulbOverlappingWithEnd = this.isTwoRectOverlapping(lastDateRect, bulbClientRect);\r\n    }\r\n\r\n    return {\r\n      isStartAvail: !isBulbOverlappingWithStart,\r\n      isEndAvail: !isBulbOverlappingWithEnd,\r\n    };\r\n  };\r\n\r\n  logContext = (date, fluctuations) => {\r\n    fluctuations.forEach((fluc) => {\r\n      const logObject = {\r\n        fluxId: fluc.UniqueId,\r\n        PrimaryMetricId: this.props.primaryMetricId,\r\n        SecondaryMetricId: this.props.secondaryMetricId,\r\n        eventType: 'FluxShown',\r\n        fluxContent: {\r\n          actions: _.chain(fluc.Actions)\r\n            .pluck('Message')\r\n            .flatten().pluck('MessageId')\r\n            .value(),\r\n          rootCauses: _.chain(fluc.RootCauses)\r\n            .pluck('Message')\r\n            .flatten().pluck('MessageId')\r\n            .value(),\r\n          description: _.pluck(fluc.Description, 'MessageId'),\r\n        },\r\n        fluxDate: date,\r\n        fluxKpi: fluc.FluctuationType,\r\n        userId: this.props.deps.context.CurrentUser.Id,\r\n        isInternal: this.props.deps.context.CurrentUser.IsInternal,\r\n        customerId: fluc.CustomerId,\r\n        accountId: fluc.AccountId,\r\n        campaignId: fluc.CampaignId,\r\n      };\r\n      this.activities.chartActionActivity.trace(`Bulb Rendered for ${JSON.stringify(logObject)}`, 'FluctuationAction');\r\n    });\r\n  };\r\n\r\n  render() {\r\n    if (!this.state.chart || !this.props.fluctuations || this.props.fluctuations.length === 0\r\n      || !this.state.chart.series) {\r\n      return null;\r\n    }\r\n    this.bulbRefArr = [];\r\n    const flucPlaceholders = [];\r\n    this.props.fluctuations.forEach((fluc) => {\r\n      if (fluc.FluctuationsPerDate.length === 0) {\r\n        return;\r\n      }\r\n      this.state.chart.series[0].data.forEach((point, idx) => {\r\n        if (point.name === fluc.formattedDate) {\r\n          if (this.activities) {\r\n            this.logContext(fluc.Date, fluc.FluctuationsPerDate);\r\n          }\r\n\r\n          // substract half bulb width from x to align the bulb center with chart points\r\n          const bulbWidth = 28;\r\n          const clientX = this.state.chart.series[0].points[idx].clientX +\r\n            (this.state.chart.plotLeft - (bulbWidth / 2));\r\n          const isRCUnknown = !_.isUndefined(_.find(\r\n            fluc.FluctuationsPerDate,\r\n            item =>\r\n              item.RootCauses &&\r\n              item.RootCauses[0] &&\r\n              item.RootCauses[0].Message &&\r\n              item.RootCauses[0].Message.MessageId === 'RCUnknown'\r\n          ));\r\n\r\n          const bulbElem = (\r\n            <FluctuationBulb\r\n              id={fluc.FluctuationsPerDate[0].UniqueId}\r\n              ref={(ref) => {\r\n                if (ref) {\r\n                  this.bulbRefArr.push(ref);\r\n                }\r\n              }}\r\n              isRed={isRCUnknown}\r\n              isYellow\r\n              left={clientX}\r\n              imageSrc={`${this.props.deps.imagePath}fluctuation-bulb.png`}\r\n            />\r\n          );\r\n\r\n          // there could be four series when moving range is checked\r\n          // or two series if moving range is not checked\r\n          // primary, (primaryComparison), secondary, (secondaryComparison)\r\n          // send all available ones over for vNext\r\n          // do not send comparison (moving average) to current UI\r\n          const metrics = [];\r\n          this.state.chart.series.forEach((series) => {\r\n            const metricId = (series.userOptions.id.indexOf('primary') !== -1) ?\r\n              this.props.primaryMetricId :\r\n              this.props.secondaryMetricId;\r\n\r\n            if (metricId !== -1 &&\r\n              series.data.length > 0) {\r\n              metrics.push({\r\n                name: series.name,\r\n                value: this.chartDataAdapter.formatMetric(\r\n                  metricId,\r\n                  series.data[idx].y\r\n                ).toString(),\r\n                line: series.userOptions.id,\r\n                color: series.userOptions.color,\r\n              });\r\n            }\r\n          });\r\n\r\n          const fluctuationTypeIds = _.compact([\r\n            getFluctuationType(this.props.primaryMetricId),\r\n            getFluctuationType(this.props.secondaryMetricId),\r\n          ]);\r\n\r\n          // this.activities.chartActionActivity.trace('Fluctuation data populated on chart',\r\n          // 'InlineChartAction');\r\n          const isOpen = !_.isUndefined(_.find(fluc.FluctuationsPerDate, item =>\r\n            item.UniqueId === this.state.openedFlucId));\r\n\r\n          flucPlaceholders.push((\r\n            <div className=\"fluctuation-placeholder\" key={fluc.FluctuationsPerDate[0].UniqueId}>\r\n              <FluctuationPopup\r\n                withoutOpporCheck={fluc.withoutOpporCheck}\r\n                updateFlucData={this.props.updateFlucData}\r\n                updateLoadingStatus={this.props.updateLoadingStatus}\r\n                asyncLoadFluctuationConfig={{\r\n                  dateRange: this.props.dateRange,\r\n                  fluctuationTypeIds,\r\n                }}\r\n                fluctuation={fluc.withoutOpporCheck ? [] : fluc}\r\n                onFlucOpen={(metricId, flucId) => {\r\n                  this.setState({\r\n                    openedFlucId: flucId,\r\n                  });\r\n                  this.flucPage = _.findIndex(fluc.FluctuationsPerDate, {\r\n                    UniqueId: flucId,\r\n                  });\r\n                  if (metricId !== this.props.primaryMetricId &&\r\n                    metricId !== this.props.secondaryMetricId) {\r\n                    this.props.onPrimaryMetricChange({\r\n                      id: metricId,\r\n                    });\r\n                  }\r\n                }}\r\n                deps={{\r\n                  i18n: this.props.deps.i18n,\r\n                  context: this.props.deps.context,\r\n                  instrumentation: this.props.deps.instrumentation,\r\n                  token: this.props.deps.token,\r\n                  imagePath: this.props.deps.imagePath,\r\n                }}\r\n                metrics={metrics}\r\n                triggerButton={bulbElem}\r\n                isOpen={isOpen}\r\n                onFlucDismiss={this.props.onFlucDismiss}\r\n                page={isOpen ? this.flucPage : 0}\r\n              />\r\n            </div>\r\n          ));\r\n        }\r\n      });\r\n    });\r\n    return (\r\n      <div>\r\n        {flucPlaceholders}\r\n      </div>\r\n    );\r\n  }\r\n}\r\n\r\nFluctuationPanel.propTypes = {\r\n  fluctuations: PropTypes.arrayOf(PropTypes.shape({\r\n    Date: PropTypes.string.isRequired,\r\n    formattedDate: PropTypes.string.isRequired,\r\n    FluctuationsPerDate: PropTypes.arrayOf(PropTypes.shape({\r\n      UniqueId: PropTypes.string.isRequired,\r\n    })),\r\n  })).isRequired,\r\n  onFlucDismiss: PropTypes.func.isRequired,\r\n  primaryMetricId: PropTypes.number.isRequired,\r\n  secondaryMetricId: PropTypes.number.isRequired,\r\n  chartLabelStatus: PropTypes.shape({\r\n    isShowStartDateLabel: PropTypes.bool,\r\n    isShowEndDateLabel: PropTypes.bool,\r\n  }).isRequired,\r\n  onChartLabelToggle: PropTypes.func.isRequired,\r\n  onPrimaryMetricChange: PropTypes.func.isRequired,\r\n  chartLabelRef: PropTypes.shape({\r\n    current: PropTypes.shape({\r\n      startLabelRef: PropTypes.shape({\r\n        current: PropTypes.node,\r\n      }),\r\n      endLabelRef: PropTypes.shape({\r\n        current: PropTypes.node,\r\n      }),\r\n    }),\r\n  }).isRequired,\r\n  deps: PropTypes.shape({\r\n    token: PropTypes.string,\r\n    imagePath: PropTypes.string,\r\n    i18n: PropTypes.shape({\r\n      getString: PropTypes.func,\r\n      formatDate: PropTypes.func,\r\n    }).isRequired,\r\n    instrumentation: PropTypes.shape({\r\n      addScenario: PropTypes.func,\r\n      inlineChart: PropTypes.shape({\r\n        create: PropTypes.func,\r\n      }),\r\n      fluctuation: PropTypes.shape({\r\n        create: PropTypes.func,\r\n      }),\r\n    }),\r\n    context: PropTypes.shape({\r\n      CurrentCustomer: PropTypes.shape({\r\n        Id: PropTypes.number,\r\n      }),\r\n      CurrentAccount: PropTypes.shape({\r\n        Id: PropTypes.number,\r\n      }),\r\n      CurrentCampaign: PropTypes.shape({\r\n        Id: PropTypes.number,\r\n      }),\r\n      CurrentUser: PropTypes.shape({\r\n        Id: PropTypes.number,\r\n        IsInternal: PropTypes.bool,\r\n      }),\r\n      Permissions: PropTypes.shape({\r\n        IsABFluctuationBlubYellow: PropTypes.bool,\r\n      }).isRequired,\r\n    }).isRequired,\r\n  }).isRequired,\r\n  dateRange: PropTypes.shape({}).isRequired,\r\n  updateFlucData: PropTypes.func.isRequired,\r\n  updateLoadingStatus: PropTypes.func.isRequired,\r\n};\r\n","/**\r\n * Highchart Style definitions. This will be merged with chart data\r\n * and set on the highchart component.\r\n * For available attributes for highcharts please refer https://api.highcharts.com/highcharts/\r\n */\r\nexport const highchartsStyle = {\r\n  plotOptions: {\r\n    line: {\r\n      dataLabels: {\r\n        enabled: false,\r\n      },\r\n      enableMouseTracking: true,\r\n    },\r\n  },\r\n  xAxis: {\r\n    title: {\r\n      text: '',\r\n    },\r\n    crosshair: {\r\n      enabled: true,\r\n      color: '#E66400',\r\n      dashStyle: 'longdash',\r\n    },\r\n    showFirstLabel: false,\r\n    showLastLabel: false,\r\n    visible: true,\r\n    lineWidth: 1,\r\n    labels: {\r\n      enabled: false,\r\n    },\r\n    tickLength: 0,\r\n  },\r\n  yAxis: [{\r\n    title: {\r\n      text: '',\r\n    },\r\n    tickPixelInterval: 30,\r\n    gridLineDashStyle: 'dash',\r\n    visible: true,\r\n    showFirstLabel: false,\r\n    showLastLabel: false,\r\n  }, {\r\n    title: {\r\n      text: '',\r\n    },\r\n    tickPixelInterval: 30,\r\n    gridLineDashStyle: 'dash',\r\n    visible: true,\r\n    showFirstLabel: false,\r\n    showLastLabel: false,\r\n    opposite: true,\r\n  }],\r\n  tooltip: {\r\n    backgroundColor: '#ffffff',\r\n    borderRadius: 0,\r\n    borderColor: '#AAAAAA',\r\n    borderWidth: 2,\r\n    useHTML: true,\r\n    shared: true,\r\n    shadow: false,\r\n    valueDecimals: 2,\r\n  },\r\n  chart: {\r\n    spacingTop: 0,\r\n    spacingLeft: 0,\r\n    spacingRight: 0,\r\n    spacingBottom: 20,\r\n  },\r\n  legend: {\r\n    enabled: false,\r\n  },\r\n  credits: {\r\n    enabled: false,\r\n  },\r\n};\r\n\r\nexport const highchartsStyleVNextOverride = {\r\n  chart: {\r\n    height: 123,\r\n  },\r\n  xAxis: {\r\n    crosshair: {\r\n      color: 'rgba(0,0,0,0.1)',\r\n    },\r\n  },\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport $ from 'jquery';\r\n\r\nimport { merge } from '@bingads-webui-universal/primitive-utilities';\r\nimport { HighchartReactWrapper } from '@bingads-webui-react/highchart-react-wrapper';\r\nimport { FluctuationTypeKey } from '@bingads-webui-campaign-react/fluctuation-popup';\r\nimport { UiBlocker } from '@bingads-webui-react/ui-blocker';\r\nimport { perfMarkerPropTypes } from '@bingads-webui/performance-marker';\r\nimport { getFilteredCampaignTypeFromRawFilter } from '@bingads-webui-campaign/campaign-ui-common';\r\nimport { withGlobalFilter } from '@bingads-webui-react/global-filter-context';\r\n\r\nimport { ChartLabel } from './chart-label';\r\nimport { ChartPanel } from './chart-panel';\r\nimport { ChartFormatter } from './chart-formatter';\r\nimport { FluctuationPanel } from './fluctuation-panel';\r\nimport { highchartsStyle, highchartsStyleVNextOverride } from '../style/js/highcharts-style';\r\nimport { Defaults } from './constants';\r\nimport { ChartDataAdapter } from './chart-data-adapter';\r\nimport { instrumentationSchema } from './inline-chart-instr-schema';\r\nimport { ImpressionsID, ClicksID, SpentID, ConvID, PartialConvID, VideoMetricColumns } from './chart-metrics-adapter';\r\n\r\nconst WaterfallFilterTypeCampaignType = 0;\r\n\r\nexport class InlineChartInternal extends React.PureComponent {\r\n  constructor(props) {\r\n    super(props);\r\n\r\n\r\n    if (this.props.perfMarker) {\r\n      this.perfMarker = this.props.perfMarker.createChild('Inline_Chart_Init_Load', { isActiveChild: false });\r\n      this.perfMarker.willInit();\r\n    }\r\n\r\n    this.initializeInstrumentation();\r\n    this.i18n = this.props.i18n;\r\n    // Register date change handler.\r\n    this.props.options.addDateChangeListener(this.onDateChangeHandler.bind(this));\r\n    this.props.options.resizeChartListener(this.onResizeWindow.bind(this));\r\n\r\n    this.campaignType = getFilteredCampaignTypeFromRawFilter(this.props[WaterfallFilterTypeCampaignType]);\r\n\r\n    this.chartFormatter = new ChartFormatter();\r\n    this.chartDataAdapter =\r\n      new ChartDataAdapter({\r\n        i18n: this.i18n,\r\n        permissions: this.props.options.pageContext.Permissions,\r\n        gridName: this.props.options.pageContext.CurrentGridName,\r\n        lowestSupportedGranularity: this.props.options.lowestSupportedGranularity,\r\n        campaignType: this.campaignType,\r\n      });\r\n    this.isInitialized = false;\r\n    this.isOuterContainerInitialized = false;\r\n    this.isPendingFetch = false;\r\n    this.inlineChartColumnMerticsEnabled = false;\r\n\r\n    if (this.props.serverContext && this.props.serverContext.DynamicPermissions) {\r\n      this.inlineChartColumnMerticsEnabled =\r\n        this.props.serverContext.DynamicPermissions.InlineChartColumnMerticsEnabled;\r\n    }\r\n\r\n    this.chartData = {};\r\n\r\n    const permissions = this.props.options.pageContext.Permissions || {};\r\n    ({\r\n      dynamic: {\r\n        ColumnConversion: this.IsColumnConversionEnabled,\r\n        PartialConversions: this.IsPartialConversionsEnabled,\r\n      } = {},\r\n    } = permissions);\r\n\r\n    this.withoutOpporCheck = permissions.dynamic && permissions.dynamic.FluctuationsWithoutRecCheck;\r\n\r\n    this.state = {\r\n      isLoading: true,\r\n      isPopEnabled: false,\r\n      isDataAvailable: false,\r\n      isShowChart: true,\r\n      isShowStartDateLabel: true,\r\n      isShowEndDateLabel: true,\r\n      flucData: [],\r\n      chartMarginRight: 0,\r\n      primaryMetricSelectionId: Defaults.primaryMetricId,\r\n      secondaryMetricSelectionId: Defaults.secondaryMetricId,\r\n      granularitySelectionId: Defaults.graunlarityId,\r\n      // Used to only track moving average status. It may be enabled, but hidden if PoP is ON.\r\n      isMovingAverageEnabled: Defaults.showMovingAverage,\r\n      primaryMetricPercentage: '',\r\n      secondaryMetricPercentage: '',\r\n      chartLabelData: {},\r\n      // Combine highchart data and style as highchart options\r\n      noChartText: this.chartDataAdapter.getNoDataText(),\r\n      dateRange: {},\r\n      formattedHighChartOptions: {},\r\n      fluctuationLoading: false,\r\n    };\r\n\r\n    const currentTab = this.props.options.gridCriterionType;\r\n    const currentEntity = this.props.options.entityType;\r\n    const { adGroupId } = (this.props.scope && this.props.scope.values) || {};\r\n\r\n    const getMetricFilters = () => {\r\n      const CPSAndInstallMetrics = ['AverageCPS', 'SalesCount', 'Installs', 'CostPerInstall', 'RevenuePerInstall'];\r\n      const ConvValueRulesMetrics = ['AdvertiserReportedRevenueAdjustment', 'ViewThroughConversionsRevenueAdjustment', 'AllConversionAdvertiserReportedRevenueAdjustment'];\r\n      const ConvValueRulesAllowedEntities = ['Account', 'Campaign', 'AdGroup', 'Ad', 'Keyword'];\r\n\r\n      const fitlerMetrics = [];\r\n      // only account/Perf, campaign, adgroup, ads and positive keyword can show Conversion Value Rule Metrics\r\n      if (!ConvValueRulesAllowedEntities.includes(currentEntity)) {\r\n        fitlerMetrics.push(...ConvValueRulesMetrics);\r\n      }\r\n\r\n      // for Demographics tab , CPA is no longer avaliable in Age and Gender grid\r\n      if (currentTab === 'Age' || currentTab === 'Gender') {\r\n        fitlerMetrics.push(...CPSAndInstallMetrics, 'CPA');\r\n      }\r\n      // for Keyword tab, hide video metrics\r\n      if (currentEntity === 'Keyword') {\r\n        fitlerMetrics.push(...CPSAndInstallMetrics, ...VideoMetricColumns);\r\n      }\r\n\r\n      const isCPSEntitiesCondition = ['Campaign', 'AdGroup', 'Account'].includes(currentEntity);\r\n      const CPSProductgroupCondition = currentTab === 'ProductGroup' && !adGroupId;\r\n      if (!(isCPSEntitiesCondition || CPSProductgroupCondition)) {\r\n        fitlerMetrics.push(...CPSAndInstallMetrics);\r\n      }\r\n\r\n      const uniqueFilterMetrics = _.uniq(fitlerMetrics);\r\n      if (!_.isEmpty(uniqueFilterMetrics)) {\r\n        return metric => !uniqueFilterMetrics.includes(metric.name);\r\n      }\r\n      return null;\r\n    };\r\n\r\n    this.primaryMetricsList =\r\n      this.chartDataAdapter.getPrimaryMetricsList(\r\n        permissions,\r\n        getMetricFilters(),\r\n        this.props.options.customMetricNameList,\r\n        currentEntity\r\n      );\r\n\r\n    this.secondaryMetricsList =\r\n      this.chartDataAdapter.getSecondaryMetricsList(\r\n        permissions,\r\n        getMetricFilters(),\r\n        this.props.options.customMetricNameList,\r\n        currentEntity\r\n      );\r\n  }\r\n\r\n  componentDidMount() {\r\n    this.canceled = false;\r\n    // get promise for current daterange, preferences\r\n    Promise.all([\r\n      this.props.options.pageState.getPromise('$daterange'),\r\n      this.chartDataAdapter.getPreferencesAndDefaults(\r\n        this.props.options.preference,\r\n        this.props.options.pageContext\r\n      )])\r\n      .spread((dateRange, preferences) => {\r\n        if (!this.canceled) {\r\n          // Check if preference option loaded still available (might change due to pilot)\r\n          const normalizedPreferences = this.normalizeWithAvailable(preferences);\r\n          const selectedGranularityId = this.chartDataAdapter.reevaluateGranularity(\r\n            dateRange,\r\n            normalizedPreferences.granularityId\r\n          );\r\n\r\n          this.activities.chartActionActivity.trace(`Inline Chart reevaluated granularity\r\n            preference granularity id  ${normalizedPreferences.granularityId},\r\n            new granularity id ${selectedGranularityId}`, 'InlineChartAction');\r\n\r\n          this.isInitialized = true;\r\n          // Update all the state that will be used by next render cycle to update UI.\r\n          // Make sure both daterange and granularity are updated together.\r\n          this.setState((prevState, newProps) =>\r\n            this.updateState(dateRange, newProps, normalizedPreferences, selectedGranularityId));\r\n        }\r\n      });\r\n  }\r\n\r\n  componentDidUpdate(prevProps, prevState) {\r\n    if (!this.isInitialized || !this.isOuterContainerInitialized) {\r\n      // We need to wait till we read the preference store and daterange\r\n      // before acting on any updates. Keep the initial fetch as pending.\r\n      this.isPendingFetch = true;\r\n      return;\r\n    }\r\n\r\n    if (this.perfMarker && !this.perfMarker.isDone && !this.state.isLoading && this.isInitialized) {\r\n      this.perfMarker.done();\r\n    }\r\n\r\n    if (prevProps.isShowChart !== this.props.isShowChart) {\r\n      this.toggleChartState(!this.state.isShowChart);\r\n    }\r\n\r\n    if (this.chartDataAdapter.isDateRangeChanged(prevProps.dateRange, this.props.dateRange)) {\r\n      // new date range is passed in as props\r\n      // do not directly trigger refresh\r\n      // instead call below handler to let it handle state update and refresh\r\n      // chartDataAdapter.isDateRangeChanged takes care of null or undefined checks\r\n      this.onDateChangeHandler(null, this.props.dateRange);\r\n      return;\r\n    }\r\n\r\n    if (_.isUndefined(this.state.granularitySelectionId)) {\r\n      // Skip fetch if granularity is not defined.\r\n      return;\r\n    }\r\n\r\n    if (!this.state.isShowChart) {\r\n      // Don't fetch in background if chart is hidden. Only fetch on show chart.\r\n      this.isPendingFetch = true;\r\n      return;\r\n    }\r\n    // As componentDidUpdate is invoked on update to any of the props or state, check\r\n    // for changes that require fetch and conditionally trigger it.\r\n    if (\r\n      this.isPendingFetch ||\r\n      (this.isFilterChanged(prevProps.filter, this.props.filter)) ||\r\n      (this.isCustomFilterChanged(prevProps.customFilter, this.props.customFilter)) ||\r\n      (this.chartDataAdapter.isDateRangeChanged(prevState.dateRange, this.state.dateRange)) ||\r\n      (prevState.isPopEnabled !== this.state.isPopEnabled) ||\r\n      // If this.props.gridDataSource is not undefined\r\n      // Don't fetch data when granularity or movingAverage changes\r\n      (!this.props.gridDataSource &&\r\n        prevState.granularitySelectionId !== this.state.granularitySelectionId) ||\r\n      (!this.props.gridDataSource &&\r\n        prevState.isMovingAverageEnabled !== this.state.isMovingAverageEnabled)) {\r\n      // Reset pending fetch.\r\n      this.isPendingFetch = false;\r\n\r\n      if (this.perfMarker) {\r\n        this.perfMarker.willFetchData();\r\n      }\r\n\r\n      // Fetch performance time series\r\n      this.fetchPerformanceAndFluctuation(\r\n        this.state.dateRange,\r\n        this.state.granularitySelectionId,\r\n        // If this.props.gridDataSource is not undefined\r\n        // Use grid data when we didn't show / hide inline chart\r\n        this.props.gridDataSource && prevState.isShowChart === this.state.isShowChart\r\n      );\r\n      this.activities.chartActionActivity.trace('State Updated. Render starts', 'InlineChartAction');\r\n    }\r\n  }\r\n\r\n  componentWillUnmount() {\r\n    this.canceled = true;\r\n  }\r\n\r\n  onDateChangeHandler = (e, newDateRange) => {\r\n    if (!this.isInitialized) {\r\n      // No data to compare yet. Wait till initialization finishes.\r\n      return;\r\n    }\r\n\r\n    if (this.props.perfMarker) {\r\n      this.actionPerfMarker = this.props.perfMarker.createChild('Inline_Chart_Action', { isActiveChild: false });\r\n      this.actionPerfMarker.willInit();\r\n    }\r\n\r\n    this.activities.chartActionActivity.trace(`Inline Chart Date Change received\r\n    ${JSON.stringify(newDateRange)}`, 'InlineChartAction');\r\n\r\n    // Daterange object received through notification is different\r\n    // Eg. title field string can differ. So we only compare, start,end,\r\n    // compared start, end fields to determine time range change and proccess further.\r\n    if (!this.chartDataAdapter.isDateRangeChanged(newDateRange, this.state.dateRange)) {\r\n      this.activities.chartActionActivity.trace(`Inline Chart Date Change no change\r\n      ${JSON.stringify(this.state.dateRange)}`, 'InlineChartAction');\r\n      return;\r\n    }\r\n\r\n    // Update granularity selection and available granularity list\r\n    const selectedGranularityId =\r\n      this.chartDataAdapter.reevaluateGranularity(newDateRange, this.state.granularitySelectionId);\r\n\r\n    this.activities.chartActionActivity.trace(`Inline Chart reevaluated granularity\r\n     old granularity id  ${this.state.granularitySelectionId},\r\n     new granularity id ${selectedGranularityId}`, 'InlineChartAction');\r\n\r\n    const newState = {\r\n      granularitySelectionId: selectedGranularityId,\r\n      dateRange: newDateRange,\r\n      isPopEnabled: !!newDateRange.compared,\r\n      chartLabelData: {},\r\n    };\r\n\r\n    if (_.isUndefined(selectedGranularityId)) {\r\n      newState.isDataAvailable = false;\r\n    }\r\n\r\n    // Update all the state that will be used by next render cycle to update UI.\r\n    this.setState(newState);\r\n  };\r\n\r\n  onResizeWindow = (newWidth) => {\r\n    if (!newWidth || (this.chart && newWidth === this.chart.chartWidth)) {\r\n      return;\r\n    }\r\n\r\n    this.isOuterContainerInitialized = true;\r\n\r\n    let width = newWidth;\r\n    const inlineChartContainer = $('.inline-chart-container');\r\n\r\n    if (inlineChartContainer) {\r\n      width -= (parseFloat(inlineChartContainer.css('paddingLeft')) +\r\n        parseFloat(inlineChartContainer.css('paddingRight')));\r\n    }\r\n\r\n    this.props.options.resizeEventHandler();\r\n\r\n    this.resizeChart(width);\r\n  };\r\n\r\n  onPrimaryMetricChange = (selection) => {\r\n    if (selection.id === this.state.primaryMetricSelectionId) {\r\n      // No op if selection is same metric as currently set.\r\n      return;\r\n    }\r\n\r\n    if (this.props.perfMarker) {\r\n      this.actionPerfMarker = this.props.perfMarker.createChild('Inline_Chart_Action', { isActiveChild: false });\r\n      this.actionPerfMarker.willInit();\r\n    }\r\n\r\n    // Save to preference store\r\n    this.saveToPrefrenceStore('primaryMetric', selection.id);\r\n\r\n    if (this.inlineChartColumnMerticsEnabled) {\r\n      this.setState({\r\n        primaryMetricSelectionId: selection.id,\r\n      }, () => {\r\n        this.fetchPerformanceData(\r\n          this.state.dateRange,\r\n          this.state.granularitySelectionId\r\n        );\r\n      });\r\n    } else {\r\n      // Compute the new chart options\r\n      const formattedOptions = this.getFormattedChartOptions(\r\n        selection.id,\r\n        this.state.secondaryMetricSelectionId\r\n      );\r\n\r\n      this.setState({\r\n        primaryMetricSelectionId: selection.id,\r\n        formattedHighChartOptions: formattedOptions,\r\n      });\r\n    }\r\n\r\n    this.activities.chartActionActivity.trace(\r\n      `Inline Chart primary metric changed: ${selection.id}`,\r\n      'InlineChartAction'\r\n    );\r\n  };\r\n\r\n  onSecondaryMetricChange = (selection) => {\r\n    if (selection.id === this.state.secondaryMetricSelectionId) {\r\n      // No op if selection is same metric as currently set.\r\n      return;\r\n    }\r\n\r\n    if (this.props.perfMarker) {\r\n      this.actionPerfMarker = this.props.perfMarker.createChild('Inline_Chart_Action', { isActiveChild: false });\r\n      this.actionPerfMarker.willInit();\r\n    }\r\n\r\n    // Save to preference store\r\n    this.saveToPrefrenceStore('secondaryMetric', selection.id);\r\n\r\n    if (this.inlineChartColumnMerticsEnabled) {\r\n      this.setState({\r\n        secondaryMetricSelectionId: selection.id,\r\n      }, () => {\r\n        this.fetchPerformanceData(\r\n          this.state.dateRange,\r\n          this.state.granularitySelectionId\r\n        );\r\n      });\r\n    } else {\r\n      // Compute the new chart options\r\n      const formattedHighChartOptions = this.getFormattedChartOptions(\r\n        this.state.primaryMetricSelectionId,\r\n        selection.id\r\n      );\r\n\r\n      this.setState({\r\n        secondaryMetricSelectionId: selection.id,\r\n        formattedHighChartOptions,\r\n      });\r\n    }\r\n\r\n    this.activities.chartActionActivity.trace(\r\n      `Inline Chart secondary metric changed: ${selection.id}`,\r\n      'InlineChartAction'\r\n    );\r\n  };\r\n\r\n  onGranularityChange = (selection) => {\r\n    if (selection.id === this.state.granularitySelectionId) {\r\n      // No op if selection is same granularity as currently set.\r\n      return;\r\n    }\r\n\r\n    if (this.props.perfMarker) {\r\n      this.actionPerfMarker = this.props.perfMarker.createChild('Inline_Chart_Action', { isActiveChild: false });\r\n      this.actionPerfMarker.willInit();\r\n    }\r\n\r\n    // Save to preference store\r\n    const granularityEnum = this.chartDataAdapter.getGranularityEnum(selection.id);\r\n    this.saveToPrefrenceStore('granularity', granularityEnum);\r\n\r\n    if (this.props.gridDataSource) {\r\n      this.setState({\r\n        granularitySelectionId: selection.id,\r\n        chartLabelData: {},\r\n      }, () => {\r\n        this.fetchPerformanceAndFluctuation(\r\n          this.state.dateRange,\r\n          this.state.granularitySelectionId\r\n        );\r\n      });\r\n    } else {\r\n      this.setState({\r\n        granularitySelectionId: selection.id,\r\n        chartLabelData: {},\r\n      });\r\n    }\r\n\r\n    this.activities.chartActionActivity.trace(\r\n      `Inline Chart granularity changed: ${selection.id}`,\r\n      'InlineChartAction'\r\n    );\r\n  };\r\n\r\n  onMovingAverageChange = (event) => {\r\n    if (this.props.perfMarker) {\r\n      this.actionPerfMarker = this.props.perfMarker.createChild('Inline_Chart_Action', { isActiveChild: false });\r\n      this.actionPerfMarker.willInit();\r\n    }\r\n\r\n    // Save to preference store\r\n    this.saveToPrefrenceStore('showMovingAverage', event.target.checked);\r\n\r\n    // Compute the new chart options\r\n    const formattedHighChartOptions = this.getFormattedChartOptions(\r\n      this.state.primaryMetricSelectionId,\r\n      this.state.secondaryMetricSelectionId\r\n    );\r\n\r\n    if (this.props.gridDataSource) {\r\n      this.setState({\r\n        isMovingAverageEnabled: event.target.checked,\r\n        formattedHighChartOptions,\r\n      }, () => {\r\n        this.fetchPerformanceAndFluctuation(\r\n          this.state.dateRange,\r\n          this.state.granularitySelectionId\r\n        );\r\n      });\r\n    } else {\r\n      this.setState({\r\n        isMovingAverageEnabled: event.target.checked,\r\n        formattedHighChartOptions,\r\n      });\r\n    }\r\n\r\n    this.activities.chartActionActivity.trace(\r\n      `Inline Chart moving average changed: ${event.target.checked}`,\r\n      'InlineChartAction'\r\n    );\r\n  };\r\n\r\n  onToggleLabel = ({ isShowStartDateLabel, isShowEndDateLabel }) => {\r\n    this.setState({\r\n      isShowStartDateLabel,\r\n      isShowEndDateLabel,\r\n    });\r\n  };\r\n\r\n  onChartRendered = (chart) => {\r\n    this.activities.chartActionActivity.trace('Inline Chart chart render finished', 'InlineChartAction');\r\n    this.chart = chart;\r\n    this.resizeChart();\r\n\r\n    if (this.props.options.isFluctuationsEnabled &&\r\n      !(this.isFilterActive()) &&\r\n      this.state.granularitySelectionId === 1 &&\r\n      this.state.isDataAvailable &&\r\n      this.fluctuationProm) {\r\n      this.fluctuationProm.then((result) => {\r\n        if (this.chart &&\r\n          this.chart.series) {\r\n          this.setState({\r\n            chartMarginRight: chart.marginRight,\r\n          });\r\n          if (this.panelRef) {\r\n            this.panelRef.onChartUpdated(chart);\r\n          }\r\n          this.activities.chartActionActivity.trace(`Chart shifted: ${this.state.chartMarginRight}`, 'InlineChartAction');\r\n        }\r\n\r\n        this.activities.chartActionActivity.trace(`Fluctuation data received ${result.length}`, 'InlineChartAction');\r\n        this.activities.chartActionActivity.trace(`Inline Chart Shown with Fluctuations Date: ${JSON.stringify(_.extend(this.state.chartLabelData, {\r\n          entity: this.props.options.entityType,\r\n          startDate: this.chartFormatter.getRawDate(this.state.dateRange.start, this.i18n),\r\n          endDate: this.chartFormatter.getRawDate(this.state.dateRange.end, this.i18n),\r\n        }))}`, 'FluctuationAction');\r\n      });\r\n    } else {\r\n      this.isFlucRenderNotRequired = true;\r\n      if (!(this.state.isShowStartDateLabel) ||\r\n        !(this.state.isShowEndDateLabel)) {\r\n        this.setState({\r\n          flucData: [],\r\n          isShowStartDateLabel: true,\r\n          isShowEndDateLabel: true,\r\n        });\r\n      }\r\n    }\r\n\r\n    if (this.actionPerfMarker && !this.actionPerfMarker.isDone) {\r\n      this.actionPerfMarker.done();\r\n    }\r\n  };\r\n\r\n  getFormattedChartOptions = (primaryMetricId, secondaryMetricId) => {\r\n    const { seriesColors } = this.props.options;\r\n    const primaryMetric =\r\n      this.chartDataAdapter.getMetricItem(primaryMetricId);\r\n    const secondaryMetric =\r\n      this.chartDataAdapter.getMetricItem(secondaryMetricId);\r\n\r\n    const highChartData = this.chartFormatter.getFormattedHighChart(\r\n      this.chartDataAdapter,\r\n      {\r\n        primaryMetric,\r\n        secondaryMetric,\r\n        granularityId: this.state.granularitySelectionId,\r\n        isMovingAverageOn: this.state.isMovingAverageEnabled && this.isMovingAverageVisible(),\r\n        chartWidth: this.state.chartWidth,\r\n        seriesColors,\r\n      },\r\n      this.chartData\r\n    );\r\n\r\n    merge(highchartsStyle, highchartsStyleVNextOverride);\r\n\r\n    return merge(highChartData, highchartsStyle);\r\n  };\r\n\r\n  getChartElement() {\r\n    let noDataOrLoading = this.state.isLoading ? (\r\n      <div className=\"spinner\">\r\n        <div className=\"spinner-icon\" />\r\n      </div>\r\n    ) : null;\r\n\r\n    /* eslint-disable react/no-danger */\r\n    if (_.isUndefined(this.state.granularitySelectionId) ||\r\n      (!this.state.isDataAvailable && !this.state.isLoading)) {\r\n      noDataOrLoading = (\r\n        <div className=\"chart-no-data-container\">\r\n          <span\r\n            className=\"chart-no-data-label\"\r\n            dangerouslySetInnerHTML={\r\n              {\r\n                __html: this.state.noChartText,\r\n              }\r\n            }\r\n          />\r\n        </div>);\r\n    }\r\n\r\n    this.chartLabelRef = React.createRef();\r\n    const chartLabelComponent = (<ChartLabel\r\n      isPopEnabled={this.state.isPopEnabled}\r\n      chartLabelData={this.state.chartLabelData}\r\n      isShowStartDateLabel={this.state.isShowStartDateLabel}\r\n      isShowEndDateLabel={this.state.isShowEndDateLabel}\r\n      ref={this.chartLabelRef}\r\n    />);\r\n\r\n    const chart = this.state.isDataAvailable && !this.state.isLoading ? (\r\n      <div>\r\n        <HighchartReactWrapper\r\n          options={this.state.formattedHighChartOptions}\r\n          onChartRenderedCallback={this.onChartRendered}\r\n        />\r\n        {chartLabelComponent}\r\n      </div>)\r\n      : (\r\n        <div>\r\n          {noDataOrLoading}\r\n        </div>);\r\n\r\n    return chart;\r\n  }\r\n\r\n  getFluctuationMetric = (flucType) => {\r\n    switch (flucType) {\r\n      case FluctuationTypeKey.Impression:\r\n        return ImpressionsID;\r\n      case FluctuationTypeKey.Click:\r\n        return ClicksID;\r\n      case FluctuationTypeKey.Spend:\r\n        return SpentID;\r\n      case FluctuationTypeKey.Conversion:\r\n        return this.IsColumnConversionEnabled && this.IsPartialConversionsEnabled ?\r\n          PartialConvID : ConvID;\r\n      default:\r\n        this.activities.chartActionActivity\r\n          .error(\r\n            `Invalid Fluctuation Type: ${flucType}`,\r\n            'FluctuationError'\r\n          );\r\n        return null;\r\n    }\r\n  };\r\n\r\n  setFluctuationFlag(fluxMetrics) {\r\n    _.each(this.primaryMetricsList, (metric) => {\r\n      /* eslint-disable no-param-reassign */\r\n      // fix the bug drop down did not show the bulb icon\r\n      metric.isFluctuation = metric.isFluctuation || _.contains(fluxMetrics, metric.id);\r\n    });\r\n    _.each(this.secondaryMetricsList, (metric) => {\r\n      /* eslint-disable no-param-reassign */\r\n      metric.isFluctuation = metric.isFluctuation || _.contains(fluxMetrics, metric.id);\r\n    });\r\n  }\r\n\r\n  getMetricsName() {\r\n    const { primaryMetricSelectionId, secondaryMetricSelectionId } = this.state;\r\n    const metrics = this.chartDataAdapter.getMetricsQuery(\r\n      primaryMetricSelectionId,\r\n      secondaryMetricSelectionId\r\n    );\r\n    return metrics;\r\n  }\r\n\r\n  resizeChart(width) {\r\n    if (width && this.chart && this.chart.options) {\r\n      this.chart.setSize(width, null, false);\r\n    }\r\n\r\n    // always update state after chart is resized\r\n    // so fluctuation panel can update itself based on new chart size\r\n    if ((width > 0) &&\r\n      width !== this.state.chartWidth) {\r\n      this.setState({\r\n        chartWidth: width,\r\n      });\r\n    }\r\n  }\r\n\r\n  initializeInstrumentation = () => {\r\n    this.props.options.instrumentation.addScenario(instrumentationSchema);\r\n\r\n    const inlineChartScenario = this.props.options.instrumentation.inlineChart.create();\r\n    this.activities = {\r\n      filterActivity: inlineChartScenario.inlineChartFilter.create(),\r\n      chartActionActivity: inlineChartScenario.inlineChartAction.create(),\r\n      chartErrorActivity: inlineChartScenario.inlineChartError.create(),\r\n    };\r\n  };\r\n\r\n  toggleChartState(showChartState) {\r\n    // Save to preference store\r\n    this.saveToPrefrenceStore('showChart', showChartState);\r\n\r\n    this.setState({\r\n      isShowChart: showChartState,\r\n    });\r\n    this.activities.chartActionActivity.trace(`Inline Chart toggle show chart: ${showChartState}`, 'InlineChartAction');\r\n\r\n    this.canceled = !showChartState;\r\n  }\r\n\r\n  updateState(period, props, preferences, granularityId) {\r\n    let primaryMetricSelectionId;\r\n    if (_.isNumber(props.options.defaultPrimaryMetric)) {\r\n      primaryMetricSelectionId = props.options.defaultPrimaryMetric;\r\n    } else if (_.isNumber(preferences.primaryMetricId)) {\r\n      primaryMetricSelectionId = preferences.primaryMetricId;\r\n    }\r\n    return {\r\n      isShowChart: props.isShowChart && preferences.showChart,\r\n      isMovingAverageEnabled: preferences.showMovingAverage,\r\n      primaryMetricSelectionId,\r\n      secondaryMetricSelectionId: preferences.secondaryMetricId,\r\n      granularitySelectionId: granularityId,\r\n      dateRange: period,\r\n      isPopEnabled: !!period.compared,\r\n    };\r\n  }\r\n\r\n  // Normalize preference and default back if certain preference config is no longer available\r\n  normalizeWithAvailable(preferences) {\r\n    const normalizedPreferences = preferences;\r\n\r\n    // Check and update primary metric selection\r\n    if (!_.find(this.primaryMetricsList, { id: preferences.primaryMetricId })) {\r\n      normalizedPreferences.primaryMetricId = Defaults.primaryMetricId;\r\n      this.saveToPrefrenceStore('primaryMetric', normalizedPreferences.primaryMetricId);\r\n    }\r\n\r\n    // Check and update secondary metric selection\r\n    if (!_.find(this.secondaryMetricsList, { id: preferences.secondaryMetricId })) {\r\n      normalizedPreferences.secondaryMetricId = Defaults.secondaryMetricId;\r\n      this.saveToPrefrenceStore('secondaryMetric', normalizedPreferences.secondaryMetricId);\r\n    }\r\n\r\n    if (this.props.options.disableMovingAverage) {\r\n      preferences.showMovingAverage = false;\r\n    }\r\n\r\n    return normalizedPreferences;\r\n  }\r\n\r\n  saveToPrefrenceStore(suffix, value) {\r\n    const prefObj = {};\r\n    prefObj[`${this.props.options.pageContext.CurrentTabId}-${suffix}`] =\r\n      value;\r\n    this.props.options.preference.setInlineChartInfo(prefObj);\r\n  }\r\n\r\n  isMovingAverageVisible(\r\n    granularityId = this.state.granularitySelectionId,\r\n    popEnabled = this.state.isPopEnabled\r\n  ) {\r\n    if (this.props.options.disableMovingAverage) {\r\n      return false;\r\n    }\r\n    return (!popEnabled) &&\r\n      (granularityId === Defaults.graunlarityId);\r\n  }\r\n\r\n  isFilterActive() {\r\n    const filterString = this.props.filter && this.props.filter.odataV4 ?\r\n      this.props.filter.odataV4({ ignoreCase: false }) : '';\r\n    return (!!filterString);\r\n  }\r\n\r\n  isFilterChanged(oldFilter, newFilter) {\r\n    const oldFilterString = oldFilter && oldFilter.odataV4 ?\r\n      oldFilter.odataV4({ ignoreCase: false }) : '';\r\n    const newFilterString = newFilter && newFilter.odataV4 ?\r\n      newFilter.odataV4({ ignoreCase: false }) : '';\r\n\r\n    const result = oldFilterString !== newFilterString;\r\n    return result;\r\n  }\r\n\r\n  isCustomFilterChanged(oldFilter, newFilter) {\r\n    if (!oldFilter && !newFilter) {\r\n      return false;\r\n    }\r\n\r\n    return !_.isEqual(oldFilter, newFilter);\r\n  }\r\n\r\n  proceedFluctuation() {\r\n    // Allow fluctuations only for Account and Campaign levels.\r\n    // At campaign level, restrict to pilot users only.\r\n    return (this.props.options.pageContext.CurrentCampaign &&\r\n      !this.props.options.pageContext.CurrentAdGroup) ||\r\n      (!this.props.options.pageContext.CurrentCampaign &&\r\n        !this.props.options.pageContext.CurrentAdGroup);\r\n  }\r\n\r\n  updateFlucData(data) {\r\n    this.setState({\r\n      flucData: data,\r\n    });\r\n  }\r\n\r\n  updateLoadingStatus(loading) {\r\n    this.setState({\r\n      fluctuationLoading: loading,\r\n    });\r\n  }\r\n\r\n  fetchFluctuation(dateRange, granularityId) {\r\n    if (this.props.options.isFluctuationsEnabled) {\r\n      this.activities.chartActionActivity.trace(\r\n        `Fluctuation pilot enabled:\r\n          user type ${this.props.options.pageContext.CurrentUser.IsInternal ? 'internal' : 'external'}`,\r\n        'InlineChartAction'\r\n      );\r\n    }\r\n\r\n    if (!this.proceedFluctuation()) {\r\n      return;\r\n    }\r\n\r\n    const isFilterActive = this.isFilterActive();\r\n    this.activities.chartActionActivity.trace(\r\n      `InlineChart filter: ${isFilterActive}`,\r\n      'InlineChartAction'\r\n    );\r\n\r\n    // Fetch fluctuations only if supported and granularity is 'Day'.\r\n    // surfacingChannelId 0:default, 1:campaign, 2:adgroup, 3:keyword, 4:ad, 5:campaign_grid_overall\r\n    if (granularityId === Defaults.graunlarityId && !isFilterActive) {\r\n      if (this.props.options.isFluctuationsEnabled) {\r\n        const FlucService = this.props.options.fluctuationService;\r\n        const flucServiceIns = new FlucService({\r\n          token: this.props.options.token,\r\n          options: {\r\n            userId: this.props.options.pageContext.CurrentUser.Id,\r\n            customerId: this.props.options.pageContext.CurrentCustomer.Id,\r\n            accountId: this.props.options.pageContext.CurrentAccount.Id,\r\n            campaignId: this.props.options.pageContext.CurrentCampaign &&\r\n              this.props.options.pageContext.CurrentCampaign.Id,\r\n            granularity: Defaults.granularity,\r\n            startDate: this.formatDateString(dateRange.start),\r\n            endDate: this.formatDateString(dateRange.end),\r\n            surfacingChannelId: this.props.options.entityType === 'Campaign' ? 1 : 0,\r\n            isFluctuationsExperiementEnabled: this.props.options.isFluctuationsExperiementEnabled,\r\n          },\r\n        });\r\n\r\n        this.logSummary();\r\n        this.fluctuationProm = flucServiceIns.findAll({\r\n          withoutOpporCheck: this.withoutOpporCheck,\r\n        });\r\n        this.fluctuationProm.then((result) => {\r\n          this.setState({\r\n            flucData: result,\r\n          });\r\n          this.activities.chartActionActivity.trace('Fluctuation Request Finished', 'InlineChartFetch');\r\n        }, (errorResult) => {\r\n          this.activities.chartErrorActivity.trace(\r\n            `Fluctuation Request Failed ${JSON.stringify(errorResult)}`,\r\n            'InlineChartFetch'\r\n          );\r\n          this.setState({\r\n            flucData: [],\r\n          });\r\n        });\r\n      }\r\n    }\r\n  }\r\n\r\n  fetchPerformanceAndFluctuation(dateRange, granularityId, useGridData) {\r\n    this.fetchPerformanceData(dateRange, granularityId, useGridData).then(() => {\r\n      if (this.perfMarker) {\r\n        this.perfMarker.willRender();\r\n      }\r\n\r\n      if (this.props.onFetchPerfData) {\r\n        this.props.onFetchPerfData();\r\n      }\r\n    });\r\n    this.fetchFluctuation(dateRange, granularityId);\r\n  }\r\n\r\n  fetchPerformanceData = (dateRange, granularityId, useGridData) => {\r\n    const loading = () => {\r\n      this.setState({\r\n        isLoading: true,\r\n        isDataAvailable: false,\r\n      });\r\n    };\r\n\r\n    this.activities.chartActionActivity.trace('Inline Chart Request Started', 'InlineChartFetch');\r\n\r\n    const context = {\r\n      filter: this.props.filter,\r\n      period: dateRange,\r\n      granularity: this.chartDataAdapter.getGranularityEnum(granularityId),\r\n      // Moving average needs to be got only if Pop is not shown and granularity is 'day'\r\n      isMovingAverageOn:\r\n        this.isMovingAverageVisible(\r\n          granularityId,\r\n          this.state.popEnabled\r\n        ) && this.state.isMovingAverageEnabled,\r\n      refreshGridData: false,\r\n      currentEntity: this.props.options.entityType,\r\n      metric: this.getMetricsName(),\r\n    };\r\n\r\n    // Filter service, filter object includes circular reference causing JSON  stringify to break.\r\n    // Hence storing only filter query string in the log.\r\n    const logContext = {\r\n      filterQuery: context.filter ? context.filter.query : '',\r\n      period: context.period,\r\n      granularity: context.granularity,\r\n      movingAverage: context.isMovingAverageOn,\r\n      entity: context.currentEntity,\r\n      campaignId: this.props.options.pageContext.CurrentCampaign &&\r\n        this.props.options.pageContext.CurrentCampaign.Id,\r\n      metric1: this.state.primaryMetricSelectionId,\r\n      metric2: this.state.secondaryMetricSelectionId,\r\n      isInternal: this.props.options.pageContext.CurrentUser.IsInternal,\r\n    };\r\n    this.activities.chartActionActivity.trace(`Fetch Performance Data: ${JSON.stringify(logContext)}`, 'InlineChartAction');\r\n\r\n    if (this.actionPerfMarker) {\r\n      this.actionPerfMarker.willFetchData();\r\n    }\r\n\r\n    return new Promise((resolve) => {\r\n      const successCallback = (result) => {\r\n        if (this.actionPerfMarker) {\r\n          this.actionPerfMarker.willRender();\r\n        }\r\n\r\n        if (!this.canceled) {\r\n          this.activities.chartActionActivity.trace('Inline Chart Request Finished', 'InlineChartFetch');\r\n          const data = this.chartDataAdapter.prepareData(result);\r\n\r\n          if (!_.every(data, this.chartDataAdapter.isPrimaryDataAvailable)) {\r\n            // No preformance time series data\r\n            this.setState({\r\n              isLoading: false,\r\n              isDataAvailable: false,\r\n            });\r\n            resolve();\r\n            return;\r\n          }\r\n\r\n          // Cache the chart raw data.\r\n          this.chartData = data;\r\n\r\n          // Align chart series.\r\n          if (_.every(data, this.chartDataAdapter.isComparisonDataAvailable)) {\r\n            this.chartDataAdapter.alignDataForComparison(\r\n              data,\r\n              this.chartDataAdapter.getGranularityEnum(granularityId)\r\n            );\r\n          }\r\n\r\n          // Update chart label based on chart data and current granularity\r\n          const chartLabel =\r\n            this.chartDataAdapter.getChartLabel(\r\n              data,\r\n              granularityId\r\n            );\r\n\r\n          const formattedHighChartOptions = this.getFormattedChartOptions(\r\n            this.state.primaryMetricSelectionId,\r\n            this.state.secondaryMetricSelectionId\r\n          );\r\n\r\n          this.setState({\r\n            formattedHighChartOptions,\r\n            isLoading: false,\r\n            isDataAvailable: true,\r\n            chartLabelData: chartLabel,\r\n          });\r\n          resolve();\r\n        }\r\n      };\r\n      const errorCallback = (errorResult) => {\r\n        this.activities.chartErrorActivity.trace(\r\n          `PerformanceTimeSeries Request Failed ${JSON.stringify(errorResult)}`,\r\n          'InlineChartFetch'\r\n        );\r\n        this.setState({\r\n          isLoading: false,\r\n          isDataAvailable: false,\r\n        });\r\n      };\r\n      if (useGridData &&\r\n        typeof this.props.gridDataSource.onLoading === 'function' &&\r\n        typeof this.props.gridDataSource.getChartData === 'function'\r\n      ) {\r\n        this.props.gridDataSource.onLoading(loading);\r\n        this.props.gridDataSource.getChartData(successCallback, errorCallback);\r\n      } else {\r\n        loading();\r\n        this.props.dataSource.findAll(context)\r\n          .then((result) => {\r\n            if (this.props.gridDataSource) {\r\n              this.props.gridDataSource.updateChartData(result);\r\n            }\r\n            return result;\r\n          })\r\n          .then(successCallback, errorCallback);\r\n      }\r\n    });\r\n  };\r\n\r\n  formatDateString(dateStr) {\r\n    const leftPadding = s => ((s.length === 1) ? `0${s}` : s);\r\n    const dt = new Date(Date.parse(dateStr));\r\n    const year = `${dt.getFullYear()}`;\r\n    const month = `${dt.getMonth() + 1}`;\r\n    const day = `${dt.getDate()}`;\r\n\r\n    return `${year}-${leftPadding(month)}-${leftPadding(day)}`;\r\n  }\r\n\r\n  dismissFluc = ({ date, fluctuation }) => {\r\n    const flucData = this.state.flucData.map((item) => {\r\n      const flucItem = item;\r\n      if (flucItem.Date === date) {\r\n        flucItem.FluctuationsPerDate = _.without(\r\n          flucItem.FluctuationsPerDate,\r\n          _.findWhere(flucItem.FluctuationsPerDate, {\r\n            UniqueId: fluctuation.UniqueId,\r\n          })\r\n        );\r\n      }\r\n      return flucItem;\r\n    });\r\n\r\n    this.setState({\r\n      flucData,\r\n    });\r\n  };\r\n\r\n  logSummary = () => {\r\n    const logContext = {\r\n      entity: this.props.options.entityType,\r\n      campaignId: this.props.options.pageContext.CurrentCampaign &&\r\n        this.props.options.pageContext.CurrentCampaign.Id,\r\n      metric1: this.state.primaryMetricSelectionId,\r\n      metric2: this.state.secondaryMetricSelectionId,\r\n      metricRecommend: this.state.recommendMetricSelectionId,\r\n      isInternal: this.props.options.pageContext.CurrentUser.IsInternal,\r\n    };\r\n\r\n    this.activities.chartActionActivity.trace('Fluctuation Request Started', 'InlineChartFetch');\r\n    this.activities.chartActionActivity.trace(`Chart Summary: ${JSON.stringify(logContext)}`, 'InlineChartAction');\r\n  };\r\n\r\n  generateFlucData = () => (this.state.flucData ? this.state.flucData.map((item) => {\r\n    const timeWithoutTimezone = item.Date.substring(0, 19);\r\n    const availableFlucMetrics = [];\r\n    let FluctuationsPerDate = [];\r\n    let withoutOpporCheck = false;\r\n    if (item.FluctuationsPerDate) {\r\n      _.each(item.FluctuationsPerDate, (flucItem) => {\r\n        availableFlucMetrics.push(this.getFluctuationMetric(flucItem.FluctuationType));\r\n      });\r\n      ({ FluctuationsPerDate } = item);\r\n    } else if (item.FluctuationList) {\r\n      FluctuationsPerDate = _.map(item.FluctuationList, (flucItem) => {\r\n        availableFlucMetrics.push(this.getFluctuationMetric(flucItem.FluctuationType));\r\n        return {\r\n          FluctuationType: flucItem.FluctuationType,\r\n          UniqueId: flucItem.FluctuationId,\r\n          RootCauses: _.map(flucItem.RootCauses, cause => ({ Message: { MessageId: cause } })),\r\n        };\r\n      });\r\n      withoutOpporCheck = true;\r\n    }\r\n\r\n    FluctuationsPerDate = FluctuationsPerDate.filter((fluc) => {\r\n      const flucMetricId = this.getFluctuationMetric(fluc.FluctuationType);\r\n      return flucMetricId === this.state.primaryMetricSelectionId ||\r\n        flucMetricId === this.state.secondaryMetricSelectionId ||\r\n        flucMetricId === this.state.recommendMetricSelectionId;\r\n    });\r\n\r\n    this.setFluctuationFlag(availableFlucMetrics);\r\n    return {\r\n      Date: item.Date,\r\n      formattedDate: this.chartDataAdapter.formatDate(\r\n        timeWithoutTimezone,\r\n        this.state.granularitySelectionId\r\n      ),\r\n      FluctuationsPerDate,\r\n      withoutOpporCheck,\r\n    };\r\n  }) : null);\r\n\r\n  render() {\r\n    const { options } = this.props;\r\n    const granularityList = this.chartDataAdapter.getGranularitiesList();\r\n    const primarySelection =\r\n      this.chartDataAdapter.getMetricItem(this.state.primaryMetricSelectionId);\r\n    const secondarySelection =\r\n      this.chartDataAdapter.getMetricItem(this.state.secondaryMetricSelectionId);\r\n    const granularitySelection =\r\n      this.chartDataAdapter.getGranularitySelection(this.state.granularitySelectionId);\r\n\r\n    const chart = this.getChartElement();\r\n\r\n    const granularityOptions = {\r\n      granularityList,\r\n      selectedItem: granularitySelection,\r\n      selectionChangeCallback: this.onGranularityChange,\r\n    };\r\n\r\n    const flucPanelEnabled = this.props.options.isFluctuationsEnabled &&\r\n      !(this.isFilterActive()) &&\r\n      this.state.granularitySelectionId === 1 &&\r\n      this.state.isDataAvailable;\r\n\r\n    this.activities.chartActionActivity.trace('Chart Render finishes', 'InlineChartAction');\r\n    this.activities.chartActionActivity.trace(`Chart Width: ${this.state.chartWidth}`, 'InlineChartAction');\r\n\r\n    this.panelRef = React.createRef();\r\n\r\n    const primaryMetricOptions = {\r\n      metricsList: this.primaryMetricsList,\r\n      selectedItem: primarySelection,\r\n      percentage: this.state.primaryMetricPercentage,\r\n      selectionChangeCallback: this.onPrimaryMetricChange,\r\n    };\r\n\r\n    const secondaryMetricOptions = {\r\n      metricsList: this.secondaryMetricsList,\r\n      selectedItem: secondarySelection,\r\n      percentage: this.state.secondaryMetricPercentage,\r\n      selectionChangeCallback: this.onSecondaryMetricChange,\r\n    };\r\n\r\n    return this.state.isShowChart ? (\r\n      <UiBlocker\r\n        blocking={this.state.fluctuationLoading}\r\n        loadingText={this.i18n.getString('loadingtext')}\r\n        classes={{\r\n          blockUiContainer: 'blocker-global',\r\n          blockerIndicator: 'blocker-indicator',\r\n        }}\r\n      >\r\n        <div className=\"inline-chart-container\">\r\n          {!this.props.options.hideChartPanel && <ChartPanel\r\n            i18n={this.i18n}\r\n            chartTitle={this.chartDataAdapter.getChartTitle(options.pageState)}\r\n            isPopEnabled={this.state.isPopEnabled}\r\n            isMovingAverage={this.state.isMovingAverageEnabled}\r\n            isMovingAverageVisible={this.isMovingAverageVisible()}\r\n            primaryMetric={primaryMetricOptions}\r\n            secondaryMetric={secondaryMetricOptions}\r\n            granularity={granularityOptions}\r\n            movingAverageChangeCallback={this.onMovingAverageChange}\r\n          />}\r\n          <div className=\"chart-container\">\r\n            {chart}\r\n            {flucPanelEnabled ?\r\n              <FluctuationPanel\r\n                ref={(r) => { this.panelRef = r; }}\r\n                fluctuations={this.generateFlucData()}\r\n                updateFlucData={(data) => { this.updateFlucData(data); }}\r\n                updateLoadingStatus={loading => this.updateLoadingStatus(loading)}\r\n                chart={this.chart}\r\n                primaryMetricId={this.state.primaryMetricSelectionId}\r\n                secondaryMetricId={this.state.secondaryMetricSelectionId}\r\n                onPrimaryMetricChange={this.onPrimaryMetricChange}\r\n                chartLabelRef={this.chartLabelRef}\r\n                chartLabelStatus={{\r\n                  isShowStartDateLabel: this.state.isShowStartDateLabel,\r\n                  isShowEndDateLabel: this.state.isShowEndDateLabel,\r\n                }}\r\n                onFlucDismiss={this.dismissFluc}\r\n                onChartLabelToggle={this.onToggleLabel}\r\n                dateRange={{\r\n                  startDate: this.state.dateRange.start,\r\n                  endDate: this.state.dateRange.end,\r\n                }}\r\n                deps={{\r\n                  i18n: this.props.i18n,\r\n                  context: this.props.options.pageContext,\r\n                  instrumentation: this.props.options.instrumentation,\r\n                  token: this.props.options.token,\r\n                  imagePath: this.props.options.imagePath,\r\n                }}\r\n              /> : null}\r\n          </div >\r\n        </div >\r\n      </UiBlocker>\r\n    ) : null;\r\n  }\r\n}\r\n\r\nInlineChartInternal.propTypes = {\r\n  /** Is show chart toggle button set */\r\n  isShowChart: PropTypes.bool.isRequired,\r\n  /** i18n */\r\n  i18n: PropTypes.shape({\r\n    getString: PropTypes.func,\r\n    formatDate: PropTypes.func,\r\n  }).isRequired,\r\n\r\n  /** Callback to fire when inline chart call is fetched */\r\n  onFetchPerfData: PropTypes.func,\r\n  /** Filter Object */\r\n  filter: PropTypes.shape({\r\n    odataV4: PropTypes.func,\r\n  }),\r\n  /** Data source manager */\r\n  dataSource: PropTypes.shape({\r\n    findAll: PropTypes.func,\r\n  }).isRequired,\r\n  /** Inline chart options */\r\n  options: PropTypes.shape({\r\n    entityType: PropTypes.string,\r\n    isFluctuationsEnabled: PropTypes.bool,\r\n    isFluctuationsExperiementEnabled: PropTypes.bool,\r\n    hideChartPanel: PropTypes.bool,\r\n    defaultPrimaryMetric: PropTypes.number,\r\n    token: PropTypes.string,\r\n    path: PropTypes.string,\r\n    imagePath: PropTypes.string,\r\n    instrumentation: PropTypes.shape({\r\n      addScenario: PropTypes.func,\r\n      inlineChart: PropTypes.shape({\r\n        create: PropTypes.func,\r\n      }),\r\n      fluctuation: PropTypes.shape({\r\n        create: PropTypes.func,\r\n      }),\r\n    }),\r\n    pageContext: PropTypes.shape({\r\n      CurrentCustomer: PropTypes.shape({\r\n        Id: PropTypes.number,\r\n      }),\r\n      CurrentCampaign: PropTypes.shape({\r\n        Id: PropTypes.number,\r\n      }),\r\n      CurrentAdGroup: PropTypes.shape({\r\n        Id: PropTypes.number,\r\n      }),\r\n      CurrentAccount: PropTypes.shape({\r\n        Id: PropTypes.number,\r\n      }),\r\n      CurrentUser: PropTypes.shape({\r\n        Id: PropTypes.number,\r\n        IsInternal: PropTypes.bool,\r\n      }),\r\n      CurrentTabId: PropTypes.string,\r\n      CurrentGridName: PropTypes.string,\r\n      Permissions: PropTypes.shape({\r\n        IsViewThroughConversionEnabled: PropTypes.bool,\r\n        dynamic: PropTypes.shape({\r\n          FluctuationsWithoutRecCheck: PropTypes.bool,\r\n        }),\r\n      }).isRequired,\r\n    }),\r\n    /** Preference store options */\r\n    preference: PropTypes.shape({\r\n      setInlineChartInfo: PropTypes.func,\r\n      getInlineChartInfo: PropTypes.func,\r\n    }),\r\n    /** Page State */\r\n    pageState: PropTypes.shape({\r\n      getPromise: PropTypes.func,\r\n      get: PropTypes.func,\r\n    }),\r\n    /** Fluctuation fetch service */\r\n    fluctuationService: PropTypes.func,\r\n    /** Date picker change handler */\r\n    addDateChangeListener: PropTypes.func,\r\n    /** Resize window change listener to set highchart container width */\r\n    resizeChartListener: PropTypes.func,\r\n    resizeEventHandler: PropTypes.func,\r\n    /**\r\n     * Theme colors, can be null\r\n     */\r\n    seriesColors: PropTypes.shape({\r\n      primary: PropTypes.shape({\r\n        original: PropTypes.string,\r\n        comparative: PropTypes.string,\r\n      }),\r\n      secondary: PropTypes.shape({\r\n        original: PropTypes.string,\r\n        comparative: PropTypes.string,\r\n      }),\r\n    }),\r\n    disableMovingAverage: PropTypes.bool,\r\n    lowestSupportedGranularity: PropTypes.string,\r\n    gridCriterionType: PropTypes.string,\r\n    customMetricNameList: PropTypes.arrayOf(PropTypes.string),\r\n  }).isRequired,\r\n  dateRange: PropTypes.shape({}),\r\n  perfMarker: perfMarkerPropTypes,\r\n  serverContext: PropTypes.shape({\r\n    DynamicPermissions: PropTypes.shape({\r\n      InlineChartColumnMerticsEnabled: PropTypes.bool,\r\n      CampaignsCombineGridAndChartOdataCallEnabled: PropTypes.bool,\r\n    }),\r\n  }),\r\n  gridDataSource: PropTypes.shape({\r\n    onLoading: PropTypes.func.isRequired,\r\n    getChartData: PropTypes.func.isRequired,\r\n    updateChartData: PropTypes.func.isRequired,\r\n  }),\r\n  customFilter: PropTypes.shape({}),\r\n  scope: PropTypes.shape({\r\n    values: PropTypes.shape({\r\n      adGroupId: PropTypes.number,\r\n    }),\r\n  }),\r\n};\r\n\r\nInlineChartInternal.defaultProps = {\r\n  filter: null,\r\n  onFetchPerfData: () => {\r\n    _.noop();\r\n  },\r\n  dateRange: null,\r\n  perfMarker: null,\r\n  serverContext: null,\r\n  gridDataSource: null,\r\n  customFilter: null,\r\n  scope: {\r\n    values: {\r\n      adGroupId: 0,\r\n    },\r\n  },\r\n};\r\n\r\nexport const InlineChart = withGlobalFilter(InlineChartInternal);\r\n","import CircleSolidSmall from '../media/CircleSolidSmall.svg';\r\nimport DiamondSolidSmall from '../media/DiamondSolidSmall.svg';\r\nimport TriangleDownSolidSmall from '../media/TriangleDownSolidSmall.svg';\r\nimport TriangleUpSolidSmall from '../media/TriangleUpSolidSmall.svg';\r\nimport SquareSolidSmall from '../media/SquareSolidSmall.svg';\r\n\r\nexport const competitionCardStyle = {\r\n  '.competition-card': {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    paddingBottom: 16,\r\n    '& .vnext-legend-labels-container': {\r\n      paddingLeft: 10,\r\n      paddingTop: 10,\r\n\r\n      '& ul': {\r\n        display: 'flex',\r\n        listStyle: 'none',\r\n        paddingLeft: 0,\r\n\r\n        '& li': {\r\n          minWidth: 60,\r\n\r\n          '& .legend-label': {\r\n            height: 20,\r\n            paddingLeft: '15PX !important',\r\n            backgroundRepeat: 'no-repeat',\r\n            backgroundPosition: 'left',\r\n            backgroundSize: '12px 20px',\r\n            marginRight: 5,\r\n            marginLeft: 5,\r\n            marginTop: 1,\r\n            cursor: 'pointer',\r\n            textOverflow: 'ellipsis',\r\n            overflow: 'hidden',\r\n            whiteSpace: 'nowrap',\r\n          },\r\n\r\n          '& .legend-label.disabled': {\r\n            opacity: '50%',\r\n          },\r\n        },\r\n        '& li:nth-child(1) .legend-label': {\r\n          backgroundImage: `url(\"${CircleSolidSmall}\")`,\r\n        },\r\n        '& li:nth-child(2) .legend-label': {\r\n          backgroundImage: `url(\"${DiamondSolidSmall}\")`,\r\n        },\r\n        '& li:nth-child(3) .legend-label': {\r\n          backgroundImage: `url(\"${TriangleDownSolidSmall}\")`,\r\n        },\r\n        '& li:nth-child(4) .legend-label': {\r\n          backgroundImage: `url(\"${TriangleUpSolidSmall}\")`,\r\n        },\r\n        '& li:nth-child(5) .legend-label': {\r\n          backgroundImage: `url(\"${SquareSolidSmall}\")`,\r\n        },\r\n      },\r\n    },\r\n    '& .react-highchart-wrapper > div[role=\"region\"]': {\r\n      overflow: 'visible !important',\r\n    },\r\n    '& .highcharts-container': {\r\n      overflow: 'visible !important',\r\n\r\n      '& .chart-tooltip': {\r\n        fontFamily: '\"Segoe UI\", Tahoma, Geneva, Verdana, sans-serif',\r\n        fontSize: 14,\r\n        position: 'absolute',\r\n        whiteSpace: 'nowrap',\r\n        color: 'rgb(51, 51, 51)',\r\n        padding: 15,\r\n        display: 'block',\r\n        boxShadow: '0 3.2px 7.2px 0 rgba(0,0,0,.132), 0 0.6px 1.8px 0 rgba(0,0,0,.108)',\r\n        backgroundColor: 'rgba(255, 255, 255, 0.95)',\r\n        '@supports (backdrop-filter: blur(60px))': {\r\n          backdropFilter: 'blur(60px)',\r\n          backgroundColor: 'rgba(255, 255, 255, 0.25)',\r\n        },\r\n\r\n        '& .segment-wrapper': {\r\n          marginBottom: 10,\r\n        },\r\n\r\n        '& .tooltip-name-container': {\r\n          display: 'flex',\r\n          marginBottom: 10,\r\n          '& .tooltip-legend': {\r\n            height: 20,\r\n            width: 12,\r\n            backgroundRepeat: 'no-repeat',\r\n          },\r\n          '& .tooltip-legend#legend0': {\r\n            backgroundImage: `url(\"${CircleSolidSmall}\")`,\r\n          },\r\n          '& .tooltip-legend#legend1': {\r\n            backgroundImage: `url(\"${DiamondSolidSmall}\")`,\r\n          },\r\n          '& .tooltip-legend#legend2': {\r\n            backgroundImage: `url(\"${TriangleDownSolidSmall}\")`,\r\n          },\r\n          '& .tooltip-legend#legend3': {\r\n            backgroundImage: `url(\"${TriangleUpSolidSmall}\")`,\r\n          },\r\n          '& .tooltip-legend#legend4': {\r\n            backgroundImage: `url(\"${SquareSolidSmall}\")`,\r\n          },\r\n          '& .tooltip-name': {\r\n            marginLeft: 6,\r\n          },\r\n        },\r\n      },\r\n    },\r\n  },\r\n  '.competition-card .selector-container': {\r\n    float: 'left',\r\n    marginBottom: 12,\r\n  },\r\n  '.competition-card .competition_action .competition_clickLink': {\r\n    flex: '0 0 auto',\r\n  },\r\n  '.competition-card .competition-graph': {\r\n    flex: '1',\r\n  },\r\n  '.competition-card .tile-content .error-msg': {\r\n    paddingTop: 100,\r\n    display: 'flex',\r\n    width: '100%',\r\n    justifyContent: 'center',\r\n  },\r\n  '.competition-card .competition-empty': {\r\n    height: 234,\r\n    textAlign: 'center',\r\n    display: 'inline-block',\r\n    width: '100%',\r\n  },\r\n  '.competition-card .competition-empty .competition-empty-text': {\r\n    position: 'relative',\r\n    top: '50%',\r\n    W: 'translateY(-50%)',\r\n    M: 'translateY(-50%)',\r\n    transform: 'translateY(-50%)',\r\n  },\r\n  '.competition-card-in-toolbar': {\r\n    order: '2',\r\n    margin: '0 5px 0 10px',\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n  },\r\n  '.competition-card .selector-container, .competition-card-in-toolbar .selector-container': {\r\n    lineHeight: 'normal !important',\r\n    fontWeight: '400',\r\n    fontSize: '14px !important',\r\n  },\r\n  '.competition-card .selector-container .btn, .competition-card-in-toolbar .selector-container .btn': {\r\n    border: '0',\r\n    padding: 1,\r\n    fontWeight: 'normal',\r\n  },\r\n  '.competition-card .selector-container .truncated, .competition-card-in-toolbar .selector-container .truncated': {\r\n    marginRight: 5,\r\n  },\r\n  '.competition-card .domain-selector-header, .competition-card-in-toolbar .domain-selector-header': {\r\n    paddingLeft: 10,\r\n    paddingRight: 10,\r\n    paddingTop: 10,\r\n  },\r\n  '.selector-v2': {\r\n    width: 300,\r\n    padding: '0',\r\n  },\r\n  '.selector-v2 .selector__filter': {\r\n    padding: 10,\r\n  },\r\n  '.selector-v2 .selector__filter .search-box__input[type=\"text\"]': {\r\n    width: '100%',\r\n  },\r\n  '.selector-v2 .selector__data-host': {\r\n    position: 'relative',\r\n    minHeight: 40,\r\n  },\r\n  '.selector-v2 .selector__data-progress-backdrop': {\r\n    backgroundColor: 'white',\r\n    bottom: '0',\r\n    left: '0',\r\n    opacity: '0.8',\r\n    position: 'absolute',\r\n    right: '0',\r\n    top: '0',\r\n  },\r\n  '.selector-v2 .selector__data-progress-overlay': {\r\n    backgroundColor: 'white',\r\n    height: 40,\r\n    left: '50%',\r\n    lineHeight: 40,\r\n    marginLeft: -60,\r\n    marginTop: -20,\r\n    overflowX: 'hidden',\r\n    overflowY: 'hidden',\r\n    position: 'absolute',\r\n    textAlign: 'center',\r\n    textOverflow: 'ellipsis',\r\n    top: '50%',\r\n    width: 120,\r\n    whiteSpace: 'pre',\r\n  },\r\n  '.selector-v2 .selector__data-progress-overlay span': {\r\n    verticalAlign: 'middle',\r\n  },\r\n  '.selector-v2 .selector__data': {\r\n    maxHeight: 360,\r\n    overflowY: 'auto',\r\n    position: 'relative',\r\n  },\r\n  '.selector-v2 .selector__data-progress-overlay .progress__icon': {\r\n    display: 'inline-block',\r\n    backgroundRepeat: 'no-repeat',\r\n    width: 40,\r\n    height: 30,\r\n  },\r\n  '.selector-v2 .selector__grid-host .table.grid': {\r\n    marginBottom: 0,\r\n    cursor: 'pointer',\r\n  },\r\n  '.selector-v2 .selector__grid-host .table.grid > tbody > tr > td.table__cell--icon': {\r\n    width: 30,\r\n    paddingLeft: 7,\r\n  },\r\n  '.selector-v2 .selector__grid-host .table.grid > tbody > tr:hover': {\r\n    backgroundColor: '#f3f2f1',\r\n  },\r\n  '.selector-v2 .selector__grid-host .table.grid > thead > tr:hover': {\r\n    backgroundColor: '#f3f2f1',\r\n  },\r\n  '.selector-v2 .selector__grid-host td': {\r\n    whiteSpace: 'pre',\r\n  },\r\n  '.selector-v2 .selector__list-checkbox, .selector-v2 .column-tri-state-checkbox': {\r\n    height: '20px',\r\n    width: '20px',\r\n    '& > span:after': {\r\n      display: 'inline-block',\r\n      backgroundColor: '#fff',\r\n      border: '1px solid rgba(155, 155, 155, 0.57)',\r\n      borderRadius: '2px',\r\n      color: 'transparent',\r\n      content: '\"\\\\E73E\"',\r\n      height: '20px',\r\n      width: '20px',\r\n      fontFamily: 'MsAds MDL2 Assets',\r\n      fontSize: '16px',\r\n      fontWeight: '400',\r\n      paddingTop: '1px',\r\n      textAlign: 'center',\r\n    },\r\n    '& > span.glyphicon-ok:before': {\r\n      content: '\"\" !important',\r\n    },\r\n    '& > span.glyphicon-ok:after': {\r\n      content: '\"\\\\E73E\"',\r\n      backgroundColor: '#0078d4',\r\n      borderColor: '#0078d4',\r\n      color: '#fff',\r\n    },\r\n  },\r\n  '.selector-v2 .selector__no-data-message, .selector-v2 .selector__progress': {\r\n    lineHeight: 38,\r\n    minHeight: 40,\r\n    paddingLeft: 10,\r\n  },\r\n  '.selector-v2 .selector__no-data-message span, .selector-v2 .selector__progress span': {\r\n    verticalAlign: 'middle',\r\n  },\r\n  '.selector-v2 .selector__no-data-message .progress__icon, .selector-v2 .selector__progress .progress__icon': {\r\n    display: 'inline-block',\r\n    backgroundRepeat: 'no-repeat',\r\n    width: 40,\r\n    height: 30,\r\n    marginRight: 10,\r\n  },\r\n  '.selector-v2 .selector__filter-pill': {\r\n    paddingLeft: 10,\r\n    marginTop: 10,\r\n  },\r\n  '.selector-v2 .selector__filter-pill .pill-control': {\r\n    display: 'inline-block',\r\n    marginBottom: '0',\r\n    verticalAlign: 'middle',\r\n  },\r\n  '.selector-v2 .selector__filter-pill .pill-control__list--links': {\r\n    listStyle: 'none',\r\n    marginBottom: '0',\r\n    paddingLeft: '0',\r\n  },\r\n  '.selector-v2 .selector__filter-pill .pill-control__list-item--links': {\r\n    float: 'left',\r\n    marginLeft: 7,\r\n  },\r\n  '.selector-v2 .selector__filter-pill .pill-control__list-item--links a': {\r\n    textDecoration: 'none',\r\n  },\r\n  '.selector-v2 .selector__filter-pill-label': {\r\n    verticalAlign: 'middle',\r\n  },\r\n  '.selector-v2 .search-box-v2 .search-box__input-group': {\r\n    position: 'relative',\r\n    overflow: 'hidden',\r\n  },\r\n  '.selector-v2 .search-box-v2 .search-box__input': {\r\n    padding: '3px 8px',\r\n    paddingLeft: 33,\r\n    border: '1px solid #bbbbbb',\r\n    display: 'block',\r\n    width: '100%',\r\n    fontSize: '1em',\r\n    '&:focus, &:hover': {\r\n      border: '1px #0078d4 solid',\r\n    },\r\n  },\r\n  '.selector-v2 .search-box-v2 .search-box__icon': {\r\n    position: 'absolute',\r\n    left: 6,\r\n    fontSize: 12,\r\n    color: '#605e5c',\r\n    fontFamily: '\"MsAds MDL2 Assets\"',\r\n    '&:hover': {\r\n      cursor: 'pointer',\r\n    },\r\n    '&:before': {\r\n      display: 'inline-block',\r\n      fontWeight: 'normal',\r\n      fontStyle: 'normal',\r\n      textDecoration: 'inherit',\r\n      speak: 'none',\r\n      fontVariant: 'normal',\r\n      textTransform: 'none',\r\n      verticalAlign: 'top',\r\n      lineHeight: 1,\r\n      WebkitFontSmoothing: 'antialiased',\r\n      MozOsxFontSmoothing: 'grayscale',\r\n      content: '\"\\\\E721\"',\r\n      fontSize: 14,\r\n      paddingTop: 4,\r\n    },\r\n    overflow: 'visible !important',\r\n    textDecoration: 'none !important',\r\n    background: 'none !important',\r\n    top: 0,\r\n    marginTop: 5,\r\n  },\r\n  '.selector-v2 .search-box-v2 .filter_search_icon_small': {\r\n    '&:before': {\r\n      fontSize: '14px',\r\n    },\r\n    height: '15px !important',\r\n    display: 'inline-block !important',\r\n    verticalAlign: 'text-top',\r\n    marginTop: '5px',\r\n  },\r\n};\r\n","import { helpbuttonStyle, convertToLocalStyle, getFluctuationPopupStyle, getFluctuationLoadingStyle } from '@bingads-webui-campaign-react/common-styles';\r\n\r\nimport conversionTrackingSetupImg from '../media/conversionTracking/ConversionTrackingSetup.svg';\r\nimport couponStepOneImg from '../media/conversionTracking/CouponStepOne.svg';\r\nimport couponStepTwoImg from '../media/conversionTracking/CouponStepTwo.svg';\r\n\r\nexport const getConversionTrackingCardStyle = palette => ({\r\n  '@global': {\r\n    ...getFluctuationPopupStyle({ palette }),\r\n    ...getFluctuationLoadingStyle(),\r\n    '.bingads-fluctuation-wrapper .card-holder__wrapper': {\r\n      minWidth: '20px !important',\r\n      border: 'none !important',\r\n      flexDirection: 'row !important',\r\n      boxShadow: 'none !important',\r\n      marginBottom: -4,\r\n\r\n      '& .left.carousel-control': {\r\n        left: '5px !important',\r\n      },\r\n\r\n      '& .right.carousel-control': {\r\n        right: '0px !important',\r\n        width: '35px !important',\r\n      },\r\n    },\r\n  },\r\n\r\n\r\n  '.conversion-tracking-card': {\r\n    ...convertToLocalStyle(helpbuttonStyle({ palette })),\r\n\r\n    '& .coupon-step-one-image': {\r\n      backgroundImage: `url(${couponStepOneImg})`,\r\n    },\r\n\r\n    '& .coupon-step-two-image': {\r\n      backgroundImage: `url(${couponStepTwoImg})`,\r\n    },\r\n    '& .conversion-empty-state': {\r\n      height: '100%',\r\n      width: '100%',\r\n      paddingBottom: 15,\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      minHeight: 1,\r\n      justifyContent: 'space-around',\r\n\r\n      '& .coupon-text': {\r\n        fontSize: 20,\r\n        fontWeight: 600,\r\n        color: '#323130',\r\n        textAlign: 'center',\r\n        marginBottom: 10,\r\n        marginTop: 10,\r\n        fontFamily: 'Segoe UI',\r\n        fontStyle: 'normal',\r\n      },\r\n\r\n      '& .coupon-steps-container': {\r\n        display: 'flex',\r\n        flexDirection: 'row',\r\n        '& .step-image-container': {\r\n          height: 150,\r\n          width: 150,\r\n          display: 'flex',\r\n        },\r\n        '& .step': {\r\n          width: '50%',\r\n          display: 'flex',\r\n          flexDirection: 'column',\r\n          justifyContent: 'flex-start',\r\n          alignItems: 'center',\r\n          '& .step-image': {\r\n            flex: 1,\r\n            backgroundRepeat: 'no-repeat',\r\n            backgroundPosition: 'center center',\r\n          },\r\n        },\r\n      },\r\n      '& .title-text': {\r\n        fontSize: 16,\r\n        fontWeight: 600,\r\n        fontFamily: 'Segoe UI',\r\n        order: 1,\r\n        height: 30,\r\n      },\r\n      '& .subtitle-text': {\r\n        fontSize: 12,\r\n        fontFamily: 'Segoe UI',\r\n        height: 40,\r\n        order: 2,\r\n      },\r\n      '& .conversion-image-container': {\r\n        minWidth: '0.1px',\r\n        display: 'flex',\r\n        justifyContent: 'flex-end',\r\n        order: 0,\r\n        flexDirection: 'column',\r\n        flex: 1,\r\n        marginBottom: 20,\r\n      },\r\n      '& .conversion-image': {\r\n        flex: 1,\r\n        backgroundRepeat: 'no-repeat',\r\n        backgroundSize: 'cover',\r\n        backgroundPosition: 'center center',\r\n      },\r\n      '& .conversion_tracking_setup_img': {\r\n        backgroundImage: `url(\"${conversionTrackingSetupImg}\")`,\r\n      },\r\n\r\n      '& .entity-links': {\r\n        order: 3,\r\n        marginTop: 10,\r\n      },\r\n    },\r\n\r\n    '& .conversion-tracking-state': {\r\n      height: '100%',\r\n      paddingBottom: 0,\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      fontSize: 12,\r\n      minHeight: 1,\r\n\r\n      '& .conversion-trackig-tile-error-status': {\r\n        display: 'flex',\r\n        flex: '1',\r\n        justifyContent: 'space-between',\r\n        position: 'relative',\r\n\r\n        '& .alert-group': {\r\n          minWidth: 35,\r\n          height: 85,\r\n          display: 'flex',\r\n          flexDirection: 'column',\r\n          flexWrap: 'nowrap',\r\n          justifyContent: 'center',\r\n          justifyItems: 'center',\r\n          alignContent: 'center',\r\n          alignItems: 'center',\r\n\r\n          '& .alert-text': {\r\n            fontSize: 12,\r\n            fontWeight: 600,\r\n            fontStyle: 'normal',\r\n            fontFamily: 'Segoe UI',\r\n            color: '#D13438',\r\n          },\r\n          '& .alert-number': {\r\n            fontSize: 30,\r\n            fontWeight: 700,\r\n            fontStyle: 'normal',\r\n            color: '#D13438',\r\n            fontFamily: 'Segoe UI',\r\n          },\r\n        },\r\n\r\n        '& .details-group': {\r\n          display: 'flex',\r\n          flexDirection: 'column',\r\n          flexWrap: 'nowrap',\r\n          alignItems: 'flex-start',\r\n          width: '85%',\r\n          '& .title-group': {\r\n            display: 'grid',\r\n            alignContent: 'space-evenly',\r\n            justifyContent: 'start',\r\n            marginTop: '8px',\r\n\r\n            '& .status-overview-title': {\r\n              fontSize: 18,\r\n              fontWeight: 600,\r\n              fontStyle: 'normal',\r\n              fontFamily: 'Segoe UI',\r\n              color: '#323130',\r\n            },\r\n            '& .status-overview-subtitle': {\r\n              marginTop: '16px',\r\n              fontSize: 12,\r\n              fontWeight: 400,\r\n              fontStyle: 'normal',\r\n              fontFamily: 'Segoe UI',\r\n              color: '#605E5C',\r\n            },\r\n          },\r\n          '& .errors-group': {\r\n            marginTop: '24px',\r\n            display: 'flex',\r\n            flexDirection: 'column',\r\n            flexWrap: 'nowrap',\r\n            justifyContent: 'flex-start',\r\n            alignItems: 'flex-start',\r\n            '& .error-status': {\r\n              fontSize: 12,\r\n              fontWeight: 600,\r\n              fontStyle: 'normal',\r\n              color: '#323130',\r\n              fontFamily: 'Segoe UI',\r\n              '& .error-status-number': {\r\n                display: 'inline',\r\n                color: '#D13438',\r\n                borderBottom: '1px dashed #0078D4',\r\n              },\r\n            },\r\n          },\r\n        },\r\n      },\r\n      '& .conversion-tracking-grid-header': {\r\n        display: 'flex',\r\n        margin: '15px 0 0px',\r\n        alignItems: 'flex-start',\r\n        '& .popComparisonRange': {\r\n          flex: '1',\r\n          marginRight: 15,\r\n          color: palette.neutralSecondary,\r\n          display: 'inline-flex',\r\n        },\r\n        '& .popComparisonRange .helpbutton': {\r\n          marginLeft: 5,\r\n        },\r\n        '& .conversion-goals-card_metric': {\r\n          flex: '0',\r\n        },\r\n        '& .metric-container': {\r\n          marginRight: 20,\r\n          '& .dropdown-toggle': {\r\n            height: 'inherit',\r\n          },\r\n        },\r\n      },\r\n      '& .conversion-tracking-grid-container': {\r\n        display: 'flex',\r\n        flex: '1 1',\r\n        justifyContent: 'center',\r\n        overflowY: 'auto',\r\n        overflowX: 'hidden',\r\n\r\n        '& .conversion-tracking-grid-empty': {\r\n          alignSelf: 'center',\r\n          fontSize: '14px',\r\n        },\r\n        '& .conversion-goals-grid': {\r\n          display: 'grid',\r\n          gridTemplateColumns: 'minmax(0, 25%) minmax(0, 20%) minmax(0, 20%) minmax(max-content, max-content) minmax(max-content, 1fr)',\r\n          alignItems: 'stretch',\r\n          flex: '1',\r\n          alignSelf: 'flex-start',\r\n\r\n          '& .conversion-goals-grid-row-10': {\r\n            gridRow: '10',\r\n            borderTop: `1px solid ${palette.neutralLighter}`,\r\n          },\r\n          '& .conversion-goals-grid-row-9': {\r\n            gridRow: '9',\r\n            borderTop: `1px solid ${palette.neutralLighter}`,\r\n          },\r\n          '& .conversion-goals-grid-row-8': {\r\n            gridRow: '8',\r\n            borderTop: `1px solid ${palette.neutralLighter}`,\r\n          },\r\n          '& .conversion-goals-grid-row-7': {\r\n            gridRow: '7',\r\n            borderTop: `1px solid ${palette.neutralLighter}`,\r\n          },\r\n          '& .conversion-goals-grid-row-6': {\r\n            gridRow: '6',\r\n            borderTop: `1px solid ${palette.neutralLighter}`,\r\n          },\r\n          '& .conversion-goals-grid-row-5': {\r\n            gridRow: '5',\r\n            borderTop: `1px solid ${palette.neutralLighter}`,\r\n          },\r\n          '& .conversion-goals-grid-row-4': {\r\n            gridRow: '4',\r\n            borderTop: `1px solid ${palette.neutralLighter}`,\r\n          },\r\n          '& .conversion-goals-grid-row-3': {\r\n            gridRow: '3',\r\n            borderTop: `1px solid ${palette.neutralLighter}`,\r\n          },\r\n          '& .conversion-goals-grid-row-2': {\r\n            gridRow: '2',\r\n            borderTop: `1px solid ${palette.neutralLighter}`,\r\n          },\r\n          '& .conversion-goals-grid-row-1': {\r\n            gridRow: '1',\r\n            borderTop: `1px solid ${palette.neutralLighter}`,\r\n          },\r\n\r\n          '& .conversion-goals-entity-name': {\r\n            gridColumn: '1',\r\n            borderRight: '1px solid #EFEFEF',\r\n            display: 'flex',\r\n            alignItems: 'center',\r\n            minHeight: 48,\r\n            paddingLeft: 10,\r\n            paddingRight: 10,\r\n          },\r\n          '& .conversion-goals-entity-name .status': {\r\n            marginRight: 5,\r\n          },\r\n          '& .conversion-goals-entity-name a': {\r\n            overflow: 'hidden',\r\n            textOverflow: 'ellipsis',\r\n            minWidth: 1,\r\n            whiteSpace: 'nowrap',\r\n          },\r\n          '& .conversion-goals-graph-decline': {\r\n            gridColumn: '2',\r\n            borderRight: '1px solid #CBCBCB',\r\n            padding: '5px 0 5px 5px',\r\n            display: 'flex',\r\n            alignItems: 'center',\r\n            backgroundColor: palette.neutralLighter,\r\n          },\r\n          '& .conversion-goals-graph-decline .decline-box': {\r\n            display: 'flex',\r\n            height: 30,\r\n            width: '100%',\r\n          },\r\n          '& .conversion-goals-graph-decline .decline-box .graph-bar': {\r\n            backgroundColor: palette.themePrimary,\r\n          },\r\n          '& .conversion-goals-graph-increase': {\r\n            gridColumn: '3',\r\n            borderRight: '1px solid #EFEFEF',\r\n            padding: '5px 5px 5px 0',\r\n            display: 'flex',\r\n            alignItems: 'center',\r\n            backgroundColor: palette.neutralLighter,\r\n          },\r\n          '& .conversion-goals-graph-increase .increase-box': {\r\n            display: 'flex',\r\n            height: 30,\r\n            width: '100%',\r\n          },\r\n          '& .conversion-goals-graph-increase .increase-box .graph-bar': {\r\n            backgroundColor: '#01188F',\r\n          },\r\n          '& .pop-change': {\r\n            gridColumn: '5',\r\n            fontSize: 15,\r\n            color: palette.neutralPrimary,\r\n            paddingLeft: 10,\r\n            paddingTop: 12,\r\n            textAlign: 'right',\r\n          },\r\n          '& .pop-change-percentage': {\r\n            gridColumn: '6',\r\n            fontSize: 12,\r\n            color: palette.neutralSecondary,\r\n            paddingLeft: 15,\r\n            paddingTop: 15,\r\n            textAlign: 'right',\r\n          },\r\n          '& .pop-range': {\r\n            gridColumn: '7',\r\n            fontSize: 12,\r\n            color: palette.neutralSecondary,\r\n            paddingLeft: 15,\r\n            paddingRight: 26,\r\n            paddingTop: 15,\r\n            textAlign: 'right',\r\n          },\r\n          '& .graph-hover-target': {\r\n            gridColumn: '2 / span 2',\r\n            background: 'none',\r\n            zIndex: '1',\r\n            border: 'none !important',\r\n          },\r\n          '& .pop-hover-target': {\r\n            gridColumn: '5 / span 2',\r\n            background: 'none',\r\n            zIndex: '1',\r\n            border: 'none !important',\r\n          },\r\n          '& .graph-hover-target:hover .hover-container': {\r\n            display: 'block',\r\n          },\r\n          '& .pop-hover-target:hover .hover-container': {\r\n            display: 'block',\r\n          },\r\n          '& .kpi-increased .bar-icon': {\r\n            display: 'inline-block',\r\n            backgroundColor: '#01188F',\r\n          },\r\n          '& .kpi-declined .bar-icon': {\r\n            display: 'inline-block',\r\n            backgroundColor: '#0078D7',\r\n          },\r\n          '& .bar-icon': {\r\n            display: 'none',\r\n            width: 12,\r\n            height: 12,\r\n            marginRight: 3,\r\n          },\r\n          '& .pop-hover-target .hover-container .hover-content': {\r\n            right: '-150px',\r\n          },\r\n          '& .graph-hover-target .hover-container .hover-content': {\r\n            left: '-150px',\r\n          },\r\n          '& .hover-container': {\r\n            position: 'absolute',\r\n            display: 'none',\r\n            fontSize: 12,\r\n            color: '#333333',\r\n            width: '0',\r\n            height: '0',\r\n            marginLeft: 5,\r\n\r\n            '& .hover-content': {\r\n              position: 'absolute',\r\n              zIndex: '10',\r\n              padding: 15,\r\n              bottom: '0',\r\n              borderRadius: 2,\r\n              boxShadow: '0 3.2px 7.2px 0 rgba(0,0,0,.132), 0 0.6px 1.8px 0 rgba(0,0,0,.108)',\r\n              backgroundColor: 'rgba(255, 255, 255, 0.95)',\r\n              '@supports (backdrop-filter: blur(60px))': {\r\n                backdropFilter: 'blur(60px)',\r\n                backgroundColor: 'rgba(255, 255, 255, 0.25)',\r\n              },\r\n            },\r\n            '& .hover-content:hover': {\r\n              display: 'none',\r\n            },\r\n            '& .hover-content .entity-name': {\r\n              wordBreak: 'break-all',\r\n              paddingBottom: 10,\r\n            },\r\n            '& .hover-content .kpi-grid': {\r\n              display: 'grid',\r\n              gridTemplateColumns: 'minmax(max-content, max-content) minmax(max-content, max-content)',\r\n            },\r\n            '& .hover-content .kpi-grid .kpi-date-range': {\r\n              paddingBottom: 10,\r\n            },\r\n            '& .hover-content .kpi-grid .kpi-data': {\r\n              fontWeight: 'bold',\r\n            },\r\n            '& .hover-content .kpi-grid .kpi-current': {\r\n              maxWidth: '240px',\r\n              gridRow: '1',\r\n              gridColumn: '1',\r\n              borderRight: '1px solid #DDDDDD',\r\n              paddingRight: 15,\r\n            },\r\n            '& .hover-content .kpi-grid .kpi-comparison': {\r\n              maxWidth: '240px',\r\n              gridColumn: '2',\r\n              paddingLeft: 15,\r\n            },\r\n            '& .hover-content .kpi-grid .kpi-change': {\r\n              gridRow: '2',\r\n              gridColumn: '1 / span 2',\r\n              paddingTop: 10,\r\n              display: 'flex',\r\n              alignItems: 'center',\r\n            },\r\n          },\r\n          '& .conversion-goals-grid-row-1 .hover-container .hover-content, .conversion-goals-grid-row-2 .hover-container .hover-content': {\r\n            top: 48,\r\n            bottom: 'auto',\r\n          },\r\n        },\r\n        '& .scroll-bar-cover': {\r\n          position: 'absolute',\r\n          background: 'white',\r\n        },\r\n        '&:hover .scroll-bar-cover': {\r\n          display: 'none',\r\n        },\r\n      },\r\n\r\n      '& .carousel-footer': {\r\n        display: 'flex',\r\n        justifyContent: 'space-between',\r\n        paddingBottom: 15,\r\n\r\n        '& .btn-primary': {\r\n          fontWeight: 'bold',\r\n          fontSize: 14,\r\n          height: '32px',\r\n          backgroundColor: palette.white,\r\n          color: palette.black,\r\n          padding: '0px 0px',\r\n          borderRadius: '2px',\r\n          border: '1px solid',\r\n          borderColor: '#8a8886',\r\n\r\n          minWidth: '200px',\r\n          '&:hover': {\r\n            backgroundColor: '#f3f2f1',\r\n          },\r\n        },\r\n        '& .carousel-pagination': {\r\n          minWidth: 150,\r\n          display: 'flex',\r\n          fontSize: 14,\r\n          justifyContent: 'space-between',\r\n          alignItems: 'center',\r\n\r\n          '& .carousel-item-count': {\r\n          },\r\n          '& .carousel-arrows': {\r\n            minWidth: 50,\r\n            justifyContent: 'center',\r\n            textShadow: 'none',\r\n            color: palette.themePrimary,\r\n\r\n            '&:hover': {\r\n              color: palette.themeDarker,\r\n            },\r\n          },\r\n        },\r\n      },\r\n    },\r\n    ' .conversion-tracking-empty-state': {\r\n    },\r\n\r\n    '& .entity-links': {\r\n      marginTop: 10,\r\n    },\r\n    '& .entity-links .view-all-clickLink': {\r\n      flex: '0 0 auto',\r\n    },\r\n    '& .metric-picker': {\r\n      padding: '0',\r\n      border: '0',\r\n      fontWeight: '600',\r\n      margin: '0',\r\n      fontSize: 12,\r\n      lineHeight: 'normal',\r\n      fallbacks: [\r\n        {\r\n          fontWeight: 'normal',\r\n        },\r\n      ],\r\n    },\r\n  },\r\n});\r\n","import computerIcon from '../media/devices/desktop.svg';\r\nimport tabletIcon from '../media/devices/tablet.svg';\r\nimport smartphoneIcon from '../media/devices/mobile.svg';\r\nimport connectedTVIcon from '../media/devices/ctv.svg';\r\n\r\nconst backgroundPatten = 'repeating-linear-gradient(90deg, transparent, transparent 5px, white 5px, white 8px)';\r\nconst gridColumnTemplate = 'minmax(0px, 1fr) minmax(max-content, 18%) minmax(max-content, 18%) minmax(max-content, 18%)';\r\nconst gridColumnTemplateFourDevices = 'minmax(0px, 1fr) minmax(max-content, 15%) minmax(max-content, 15%) minmax(max-content, 15%) minmax(max-content, 15%)';\r\nconst gridRowTemplate = 'auto auto auto auto';\r\n\r\n// colors not in palette\r\nconst computerColor = '#0078D4';\r\nconst tabletColor = '#00188F';\r\nconst smartPhoneColor = '#E3008C';\r\nconst connectedTVColor = '#4B003F';\r\n\r\nexport const getDeviceCardStyle = palette => ({\r\n  '.device-card': {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    '& .device-content-grid': {\r\n      display: 'grid',\r\n      width: '100%',\r\n      marginTop: 15,\r\n      flex: '1',\r\n      gridTemplateColumns: gridColumnTemplate,\r\n      gridTemplateRows: gridRowTemplate,\r\n\r\n      '&.device-count-4': {\r\n        gridTemplateColumns: gridColumnTemplateFourDevices,\r\n      },\r\n\r\n      '& .graph-area': {\r\n        '& .device-metric': {\r\n          width: '100%',\r\n        },\r\n      },\r\n      '& .device-grid-row-4': {\r\n        '-ms-grid-row': '4',\r\n        gridRow: '4',\r\n        height: 75,\r\n        paddingBottom: 7,\r\n        borderTop: `1px solid ${palette.neutralLighter}`,\r\n        borderBottom: `1px solid ${palette.neutralLighter}`,\r\n\r\n        '& .device-metric__metric-picker .metric-picker': {\r\n          '& .dropdown-menu': {\r\n            top: 'auto',\r\n            bottom: '26px',\r\n          },\r\n        },\r\n      },\r\n      '& .device-grid-row-3': {\r\n        '-ms-grid-row': '3',\r\n        gridRow: '3',\r\n        height: 75,\r\n        paddingBottom: 7,\r\n        borderTop: `1px solid ${palette.neutralLighter}`,\r\n      },\r\n      '& .device-grid-row-2': {\r\n        '-ms-grid-row': '2',\r\n        gridRow: '2',\r\n        height: 75,\r\n        paddingBottom: 7,\r\n        marginTop: 7,\r\n        borderTop: `1px solid ${palette.neutralLighter}`,\r\n      },\r\n      '& .device-grid-row-1': {\r\n        '-ms-grid-row': '1',\r\n        gridRow: '1',\r\n      },\r\n      '& .device-grid-row-2 .hover-content': {\r\n        top: '55px !important',\r\n        bottom: 'auto !important',\r\n      },\r\n      '& .device-grid-column-5': {\r\n        '-ms-grid-column': '5',\r\n        gridColumnStart: '5',\r\n      },\r\n      '& .device-grid-column-4': {\r\n        '-ms-grid-column': '4',\r\n        gridColumnStart: '4',\r\n      },\r\n      '& .device-grid-column-3': {\r\n        '-ms-grid-column': '3',\r\n        gridColumnStart: '3',\r\n      },\r\n      '& .device-grid-column-2': {\r\n        '-ms-grid-column': '2',\r\n        gridColumnStart: '2',\r\n      },\r\n      '& .device-grid-column-1': {\r\n        '-ms-grid-column': '1',\r\n        gridColumnStart: '1',\r\n        display: 'flex',\r\n        flexDirection: 'column',\r\n        alignItems: 'flex-start',\r\n      },\r\n      '& .device-metric__metric-picker .metric-picker': {\r\n        border: 'none',\r\n        paddingLeft: 0,\r\n        paddingRight: 0,\r\n        height: '26px',\r\n\r\n        '& .metric-picker__name': {\r\n          lineHeight: '19px',\r\n        },\r\n\r\n        '& .dropdown-menu': {\r\n          left: '0px',\r\n          right: 'auto',\r\n        },\r\n        '& .metric-picker__button--single': {\r\n          flex: '1',\r\n          justifyContent: 'flex-start',\r\n        },\r\n      },\r\n      '& .caret': {\r\n        margin: '0px 9px',\r\n      },\r\n      '& .legend-container': {\r\n        display: 'flex',\r\n        alignItems: 'center',\r\n        justifyContent: 'flex-end',\r\n        paddingRight: 10,\r\n        fontWeight: '600',\r\n        '& .legend-icon': {\r\n          backgroundRepeat: 'no-repeat',\r\n          backgroundSize: 'contain',\r\n          backgroundPosition: 'center center',\r\n          marginRight: 5,\r\n          fontSize: '14px',\r\n          lineHeight: 1,\r\n          fontWeight: 'normal',\r\n          display: 'flex',\r\n          alignItems: 'center',\r\n          height: '15px',\r\n          width: '15px',\r\n        },\r\n        '& .legend-txt': {\r\n          fontSize: '12px',\r\n          lineHeight: '20px',\r\n        },\r\n      },\r\n      '& .device-grid-column-2 .legend-container .legend-txt': {\r\n        color: computerColor,\r\n      },\r\n      '& .device-grid-column-3 .legend-container .legend-txt': {\r\n        color: tabletColor,\r\n      },\r\n      '& .device-grid-column-4 .legend-container .legend-txt': {\r\n        color: smartPhoneColor,\r\n      },\r\n      '& .device-grid-column-5 .legend-container .legend-txt': {\r\n        color: connectedTVColor,\r\n      },\r\n      '& .graph-container': {\r\n        display: 'flex',\r\n        background: palette.neutralLighter,\r\n        position: 'relative',\r\n        width: '100%',\r\n\r\n        '& .device-grid-bar': {\r\n          flex: '1 1 0',\r\n        },\r\n        '& .device-grid-bar-computer': {\r\n          backgroundColor: palette.themePrimary,\r\n        },\r\n        '& .device-grid-bar-smartphone': {\r\n          backgroundColor: smartPhoneColor,\r\n        },\r\n        '& .device-grid-bar-tablet': {\r\n          backgroundColor: tabletColor,\r\n        },\r\n        '& .device-grid-bar-connectedtv': {\r\n          backgroundColor: connectedTVColor,\r\n        },\r\n        '& .hover-container': {\r\n          display: 'none',\r\n          position: 'absolute',\r\n          width: '0',\r\n          height: '0',\r\n          left: '0',\r\n          fontSize: 12,\r\n          color: '#333333',\r\n          zIndex: '10',\r\n          '& .hover-content': {\r\n            position: 'absolute',\r\n            padding: '15px 0',\r\n            bottom: 5,\r\n            left: '0',\r\n            boxShadow: '0 3.2px 7.2px 0 rgba(0,0,0,.132), 0 0.6px 1.8px 0 rgba(0,0,0,.108)',\r\n            backgroundColor: 'rgba(255, 255, 255, 0.95)',\r\n            '@supports (backdrop-filter: blur(60px))': {\r\n              backdropFilter: 'blur(60px)',\r\n              backgroundColor: 'rgba(255, 255, 255, 0.25)',\r\n            },\r\n          },\r\n          '& .hover-content .device-name': {\r\n            padding: '0 15px',\r\n          },\r\n          '& .hover-content .metric-name': {\r\n            padding: '10px 15px',\r\n          },\r\n          '& .hover-content .hover-kpi-container': {\r\n            display: 'flex',\r\n            whiteSpace: 'nowrap',\r\n          },\r\n          '& .hover-content .hover-kpi-container__date-range': {\r\n            display: 'flex',\r\n            alignItems: 'center',\r\n          },\r\n          '& .hover-content .hover-kpi-container__date-range__color-block': {\r\n            width: 12,\r\n            height: 12,\r\n            marginRight: 3,\r\n          },\r\n          '& .hover-content .hover-kpi-container__date-range .color-block-current-computer': {\r\n            background: computerColor,\r\n          },\r\n          '& .hover-content .hover-kpi-container__date-range .color-block-current-smartphone': {\r\n            background: smartPhoneColor,\r\n          },\r\n          '& .hover-content .hover-kpi-container__date-range .color-block-current-tablet': {\r\n            background: tabletColor,\r\n          },\r\n          '& .hover-content .hover-kpi-container__date-range .color-block-current-connectedtv': {\r\n            background: connectedTVColor,\r\n          },\r\n          '& .hover-content .hover-kpi-container__date-range .color-block-period-computer': {\r\n            background: computerColor,\r\n            backgroundImage: backgroundPatten,\r\n          },\r\n          '& .hover-content .hover-kpi-container__date-range .color-block-period-smartphone': {\r\n            background: smartPhoneColor,\r\n            backgroundImage: backgroundPatten,\r\n          },\r\n          '& .hover-content .hover-kpi-container__date-range .color-block-period-tablet': {\r\n            background: tabletColor,\r\n            backgroundImage: backgroundPatten,\r\n          },\r\n          '& .hover-content .hover-kpi-container__date-range .color-block-period-connectedtv': {\r\n            background: connectedTVColor,\r\n            backgroundImage: backgroundPatten,\r\n          },\r\n          '& .hover-content .hover-kpi-container__hover-kpi': {\r\n            padding: '0 15px',\r\n          },\r\n          '& .hover-content .hover-kpi-container .hover-kpi-container__hover-kpi+.hover-kpi-container__hover-kpi': {\r\n            borderLeft: '1px solid #DDDDDD',\r\n          },\r\n          '& .hover-content .hover-kpi-container__value': {\r\n            paddingTop: 10,\r\n            fontWeight: 'bold',\r\n          },\r\n          '& .hover-content__kpi-change': {\r\n            display: 'flex',\r\n            padding: '10px 15px 0',\r\n          },\r\n          '& .hover-content__kpi-change__value': {\r\n            fontWeight: 'bold',\r\n          },\r\n          '& .hover-content:hover': {\r\n            display: 'none',\r\n          },\r\n        },\r\n        '& .computer-detail': {\r\n          left: 5,\r\n        },\r\n        '& .tablet-detail': {\r\n          left: 15,\r\n        },\r\n        '& .smartphone-detail': {\r\n          left: 25,\r\n        },\r\n        '& .connectedtv-detail': {\r\n          left: 35,\r\n        },\r\n      },\r\n      '& .show-computer-hover .computer-detail': {\r\n        display: 'block !important',\r\n      },\r\n      '& .show-smartphone-hover .smartphone-detail': {\r\n        display: 'block !important',\r\n      },\r\n      '& .show-tablet-hover .tablet-detail': {\r\n        display: 'block !important',\r\n      },\r\n      '& .show-connectedtv-hover .connectedtv-detail': {\r\n        display: 'block !important',\r\n      },\r\n      '& .period': {\r\n        position: 'relative',\r\n        marginTop: 6,\r\n        height: 17,\r\n      },\r\n      '& .period .overlay': {\r\n        position: 'absolute',\r\n        display: 'flex',\r\n        top: '0',\r\n        bottom: '0',\r\n        right: '0',\r\n        left: '0',\r\n        background: backgroundPatten,\r\n      },\r\n      '& .current': {\r\n        flex: '1',\r\n      },\r\n      '& .small_graph .minor': {\r\n        display: 'none',\r\n      },\r\n      '& .kpi-container': {\r\n        marginTop: 15,\r\n        height: 50,\r\n        paddingLeft: 10,\r\n        display: 'flex',\r\n        flexDirection: 'column',\r\n        justifyContent: 'center',\r\n      },\r\n      '& .kpi-container .kpi': {\r\n        display: 'flex',\r\n        justifyContent: 'flex-end',\r\n        paddingRight: 10,\r\n        alignItems: 'baseline',\r\n      },\r\n      '& .kpi-container .kpi .current-value': {\r\n        fontSize: '12px',\r\n        marginBottom: 5,\r\n        color: '#333333',\r\n      },\r\n      '& .kpi-container .kpi .increase': {\r\n        color: '#006D21',\r\n      },\r\n      '& .kpi-container .kpi .decrease': {\r\n        color: '#D90026',\r\n      },\r\n      '& .kpi-container .kpi .change-percentage': {\r\n        fontSize: '12px',\r\n        marginLeft: 5,\r\n      },\r\n      '& .kpi-container .kpi .period-value': {\r\n        fontSize: '12px',\r\n        color: palette.neutralSecondary,\r\n      },\r\n      '& .computer-icon-img': {\r\n        backgroundImage: `url(\"${computerIcon}\")`,\r\n      },\r\n      '& .smartphone-icon-img': {\r\n        backgroundImage: `url(\"${smartphoneIcon}\")`,\r\n      },\r\n      '& .tablet-icon-img': {\r\n        backgroundImage: `url(\"${tabletIcon}\")`,\r\n      },\r\n      '& .connectedtv-icon-img': {\r\n        backgroundImage: `url(\"${connectedTVIcon}\")`,\r\n      },\r\n    },\r\n    '& .device-links': {\r\n      margin: '10px 0 16px',\r\n    },\r\n    '& .device-links .view-all-clickLink': {\r\n      flex: '0 0 auto',\r\n    },\r\n    '& .device-error': {\r\n      alignSelf: 'center',\r\n      marginTop: '150px',\r\n    },\r\n  },\r\n  '.card-holder .small_layout .device-content-grid .change-percentage': {\r\n    display: 'none',\r\n  },\r\n});\r\n","export const getGridCardStyle = palette => ({\r\n  '.grid-card': {\r\n    minHeight: 1,\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    '& .account-card-content .grid-cell--Name': {\r\n      display: 'flex',\r\n    },\r\n    '& .grid-card__grid-content': {\r\n      minHeight: 1,\r\n      flex: '1 1 auto',\r\n      position: 'relative',\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      '& .grid-content': {\r\n        display: 'flex',\r\n        minHeight: 1,\r\n        flexDirection: 'column',\r\n        flex: '1',\r\n\r\n        '& .no-data': {\r\n          flex: '1 1 0px',\r\n          alignItems: 'center',\r\n          justifyContent: 'center',\r\n          backgroundImage: `linear-gradient(${palette.neutralQuaternaryAlt} 1px, transparent 1px)`,\r\n          backgroundSize: '100px 46px',\r\n        },\r\n        '&>div': {\r\n          display: 'flex',\r\n          width: '100% !important',\r\n          minHeight: 1,\r\n          flexShrink: '1',\r\n        },\r\n        '&>div .table-container': {\r\n          display: 'flex',\r\n          flexDirection: 'column',\r\n          width: '100% !important',\r\n          alignItems: 'stretch',\r\n        },\r\n        '&>div .table-container .fixed-header': {\r\n          width: '100% !important',\r\n        },\r\n        '&>div .table-container .viewport': {\r\n          display: 'flex',\r\n        },\r\n      },\r\n      '& .scroll-bar-cover': {\r\n        position: 'absolute',\r\n        background: 'white',\r\n      },\r\n      '& .empty-content': {\r\n      },\r\n      '&:hover .scroll-bar-cover': {\r\n        display: 'none',\r\n      },\r\n    },\r\n    '& .grid-links': {\r\n      margin: '10px 0 16px',\r\n    },\r\n    '& .grid-links .view-all-clickLink': {\r\n      flex: '0 0 auto',\r\n    },\r\n    '& table': {\r\n      tableLayout: 'fixed',\r\n    },\r\n    '& table>thead>tr>th': {\r\n      backgroundColor: 'white',\r\n      borderBottom: 'none',\r\n      fontWeight: '600',\r\n    },\r\n    '& table>thead>tr>th:focus': {\r\n      outline: 'none',\r\n    },\r\n    '& table>tbody>tr': {\r\n      height: 43,\r\n    },\r\n    '& table>tbody>tr>td': {\r\n      borderBottom: 'none',\r\n      borderTop: `1px solid ${palette.neutralLighter}`,\r\n      verticalAlign: 'middle',\r\n      padding: '6px',\r\n    },\r\n    '& .grid-cell--Name': {\r\n      whiteSpace: 'nowrap',\r\n      overflow: 'hidden',\r\n      textOverflow: 'ellipsis',\r\n      padding: '0 5px',\r\n      fontSize: '12px',\r\n      lineHeight: '20px',\r\n\r\n      '& a': {\r\n        overflow: 'hidden',\r\n        whiteSpace: 'nowrap',\r\n        textOverflow: 'ellipsis',\r\n        flex: '0 1 auto',\r\n        minWidth: '1px',\r\n      },\r\n      '& .inactive': {\r\n        color: '#797775',\r\n      },\r\n    },\r\n    '& .grid-cell--Name .search-term-detail': {\r\n      fontSize: 11,\r\n      color: '#666666',\r\n    },\r\n    '& .grid-cell--Name .search-term-detail .glyphicon': {\r\n      fontFamily: '\"MsAds MDL2 Assets\"',\r\n      marginRight: 5,\r\n      position: 'static',\r\n    },\r\n    '& .grid-cell--Name .search-term-detail .actions': {\r\n      display: 'flex',\r\n    },\r\n    '& .grid-cell--Name .search-term-detail .actions button': {\r\n      border: '0',\r\n      boxShadow: 'none',\r\n      borderRadius: '0',\r\n      backgroundColor: 'white',\r\n      color: '#666666',\r\n      padding: '0',\r\n    },\r\n    '& .grid-cell--Name .search-term-detail .actions .add': {\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n      marginRight: 15,\r\n    },\r\n    '& .grid-cell--Name .search-term-detail .actions .add .glyphicon:before': {\r\n      fontFamily: '\"MsAds MDL2 Assets\"',\r\n      color: '#1570a6',\r\n      content: '\"\\\\E710\"',\r\n    },\r\n    '& .grid-cell--Name .search-term-detail .actions .exclude': {\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n    },\r\n    '& .grid-cell--Name .search-term-detail .actions .exclude .glyphicon:before': {\r\n      fontFamily: '\"MsAds MDL2 Assets\"',\r\n      color: '#d90026',\r\n      content: '\"\\\\E738\"',\r\n    },\r\n    '& .grid-cell--Name__hover-container': {\r\n      position: 'absolute',\r\n      display: 'none',\r\n      fontSize: 12,\r\n      color: '#333333',\r\n      width: '0',\r\n      height: '0',\r\n      zIndex: '10',\r\n    },\r\n    '& .grid-cell--Name__hover-container .hover-content': {\r\n      position: 'absolute',\r\n      maxWidth: 300,\r\n      padding: 15,\r\n      borderRadius: 2,\r\n      left: 15,\r\n      bottom: 35,\r\n      boxShadow: '0 3.2px 7.2px 0 rgba(0,0,0,.132), 0 0.6px 1.8px 0 rgba(0,0,0,.108)',\r\n      backgroundColor: 'rgba(255, 255, 255, 0.95)',\r\n      '@supports (backdrop-filter: blur(60px))': {\r\n        backdropFilter: 'blur(60px)',\r\n        backgroundColor: 'rgba(255, 255, 255, 0.25)',\r\n      },\r\n    },\r\n    '& .grid-cell--Name__hover-container .hover-content:hover': {\r\n      display: 'none',\r\n    },\r\n    '& .grid-cell--Name__hover-container .hover-content__text': {\r\n      whiteSpace: 'nowrap',\r\n      overflow: 'hidden',\r\n      textOverflow: 'ellipsis',\r\n    },\r\n    '& .grid-cell--Name__hover-container .hover-content__name': {\r\n      whiteSpace: 'pre',\r\n      display: 'flex',\r\n      flexWrap: 'wrap',\r\n      paddingTop: 15,\r\n    },\r\n    '& .grid-cell--Name__hover-container .hover-content__name .name-value': {\r\n      overflow: 'hidden',\r\n      textOverflow: 'ellipsis',\r\n    },\r\n    '& .grid-cell--Name__hover-container .hover-content__title': {\r\n      fontWeight: 'bold',\r\n      whiteSpace: 'nowrap',\r\n      wordBreak: 'normal',\r\n      paddingTop: 15,\r\n    },\r\n    '& .grid-cell--Name__hover-container .hover-content__content': {\r\n      overflow: 'hidden',\r\n      height: '0',\r\n      visibility: 'hidden',\r\n      whiteSpace: 'pre',\r\n      margin: '0 5px',\r\n    },\r\n    '& tr:nth-child(2) .grid-cell--Name__hover-container .hover-content, tr:nth-child(3) .grid-cell--Name__hover-container .hover-content': {\r\n      bottom: 'auto',\r\n      top: 5,\r\n    },\r\n    '& .status': {\r\n      display: 'inline-block',\r\n      marginRight: 5,\r\n    },\r\n    '& .grid-card-header': {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      alignItems: 'flex-end',\r\n      minWidth: 1,\r\n      flex: '0 1 auto',\r\n    },\r\n    '& .metric-picker__name': {\r\n      textAlign: 'right',\r\n    },\r\n    '& .metric-picker .dropdown': {\r\n      position: 'absolute',\r\n      zIndex: '1000',\r\n    },\r\n    '& .col-Name': {\r\n      width: '36%',\r\n    },\r\n    '& .performance-metric-col-sorting': {\r\n      width: '30%',\r\n    },\r\n    '& .performance-metric-col-non-sorting': {\r\n      width: '17%',\r\n    },\r\n    '& .performance-metric-td-sorting': {\r\n      backgroundColor: palette.neutralLighter,\r\n    },\r\n    '& .performance-metric-th-sorting-pop': {\r\n      display: 'flex',\r\n      justifyContent: 'center',\r\n    },\r\n    '& .performance-metric-th-sorting': {\r\n      display: 'flex',\r\n      justifyContent: 'flex-end',\r\n    },\r\n    '& .grid-card-cell--performance-metric': {\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n    },\r\n    '& .grid-card-cell--performance-metric .grid-card-cell__body': {\r\n      flex: '1',\r\n      marginRight: 10,\r\n      textAlign: 'right',\r\n      fontSize: '12px',\r\n      lineHeight: '20px',\r\n    },\r\n    '& .grid-card-cell--performance-metric .grid-card-cell__extra': {\r\n      flex: '1',\r\n      fontSize: '80%',\r\n    },\r\n    '& .sort-indicator': {\r\n      top: 4,\r\n      marginRight: 5,\r\n    },\r\n    '& .table > thead > tr > th.column-header-sortable': {\r\n      cursor: 'pointer',\r\n      '&:hover': {\r\n        backgroundColor: palette.neutralLighter,\r\n      },\r\n      '&:focus': {\r\n        backgroundColor: palette.neutralQuaternaryAlt,\r\n        outline: `1px solid ${palette.neutralSecondary}`,\r\n        outlineOffset: '-1px',\r\n      },\r\n      '& .sort-indicator.glyphicon.glyphicon-arrow-down:before': {\r\n        content: '\"\\\\EE69\"',\r\n        fontFamily: 'MsAds MDL2 Assets',\r\n      },\r\n      '& .sort-indicator.glyphicon.glyphicon-arrow-up:before': {\r\n        content: '\"\\\\EE68\"',\r\n        fontFamily: 'MsAds MDL2 Assets',\r\n      },\r\n      '& button.dropdown-toggle': {\r\n        background: 'transparent',\r\n        '&:hover': {\r\n          backgroundColor: palette.neutralTertiaryAlt,\r\n        },\r\n        '&:focus': {\r\n          backgroundColor: palette.neutralSecondaryAlt,\r\n        },\r\n      },\r\n    },\r\n  },\r\n});\r\n","export const metricPickerStyle = {\r\n  '.card-holder__wrapper .metric-picker': {\r\n    display: 'flex',\r\n    width: '100%',\r\n    alignItems: 'center',\r\n    justifyContent: 'flex-end',\r\n  },\r\n  '.card-holder__wrapper .metric-picker__button--caret': {\r\n    flex: '0 0 auto',\r\n    minWidth: '0',\r\n  },\r\n  '.card-holder__wrapper .metric-picker .dropdown-toggle': {\r\n    border: 'none',\r\n    height: 'auto',\r\n    padding: '0 5px',\r\n  },\r\n  '.card-holder__wrapper .metric-picker__name': {\r\n    flex: '0 1 auto',\r\n    whiteSpace: 'nowrap',\r\n    minWidth: 1,\r\n    textOverflow: 'ellipsis',\r\n    overflow: 'hidden',\r\n    fontSize: '12px',\r\n  },\r\n  '.card-holder__wrapper .metric-picker__value': {\r\n    overflow: 'hidden',\r\n    textOverflow: 'ellipsis',\r\n    display: 'flex',\r\n\r\n    '& .metric-value': {\r\n      textOverflow: 'ellipsis',\r\n      whiteSpace: 'nowrap',\r\n      flex: '0 1 auto',\r\n      overflow: 'hidden',\r\n      minWidth: 1,\r\n    },\r\n\r\n    '& .metric-value-info': {\r\n      marginLeft: '5px',\r\n    },\r\n  },\r\n  '.card-holder__wrapper .metric-picker__button': {\r\n    border: 'none',\r\n  },\r\n  '.card-holder__wrapper .metric-picker__button--single': {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    flexDirection: 'row',\r\n    minWidth: 1,\r\n    justifyContent: 'center',\r\n  },\r\n};\r\n","export const metricPickerFluentV2Style = {\r\n  '.overview-card .metric-picker': {\r\n    display: 'flex',\r\n    width: '100%',\r\n    alignItems: 'center',\r\n    justifyContent: 'flex-end',\r\n  },\r\n  '.overview-card .metric-picker__button--caret': {\r\n    flex: '0 0 auto',\r\n    minWidth: '0',\r\n  },\r\n  '.overview-card .metric-picker .dropdown-toggle': {\r\n    border: 'none',\r\n    height: 'auto',\r\n    padding: '0 5px',\r\n  },\r\n  '.overview-card .metric-picker__name': {\r\n    flex: '0 1 auto',\r\n    whiteSpace: 'nowrap',\r\n    minWidth: 1,\r\n    maxWidth: 86,\r\n    textOverflow: 'ellipsis',\r\n    overflow: 'hidden',\r\n    fontSize: '14px',\r\n  },\r\n  '.overview-card .metric-picker__value': {\r\n    overflow: 'hidden',\r\n    textOverflow: 'ellipsis',\r\n    display: 'flex',\r\n    maxWidth: 86,\r\n\r\n    '& .metric-value': {\r\n      textOverflow: 'ellipsis',\r\n      whiteSpace: 'nowrap',\r\n      flex: '0 1 auto',\r\n      overflow: 'hidden',\r\n      minWidth: 1,\r\n      fontSize: '22px',\r\n      fontWeight: '600',\r\n      color: '#797775',\r\n    },\r\n\r\n    '& .metric-value-info': {\r\n      marginLeft: '5px',\r\n    },\r\n  },\r\n  '.overview-card .metric-picker__button': {\r\n    border: 'none',\r\n  },\r\n  '.overview-card .metric-picker__button--single': {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    flexDirection: 'row',\r\n    minWidth: 1,\r\n    justifyContent: 'center',\r\n  },\r\n};\r\n","import circleSolid from '../media/chart/CircleSolid.svg';\r\nimport circleDotted from '../media/chart/CircleDotted.svg';\r\nimport diamondSolid from '../media/chart/DiamondSolid.svg';\r\nimport diamondDotted from '../media/chart/DiamondDotted.svg';\r\nimport triangleDownSolid from '../media/chart/TriangleDownSolid.svg';\r\nimport triangleDownDotted from '../media/chart/TriangleDownDotted.svg';\r\nimport triangleUpSolid from '../media/chart/TriangleUpSolid.svg';\r\nimport triangleUpDotted from '../media/chart/TriangleUpDotted.svg';\r\n\r\nexport const getPerformanceCardStyle = palette => ({\r\n  '.performance-card': {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    '& .performance-card-metrics-picker': {\r\n      display: 'flex',\r\n\r\n      '& .metric-picker__text': {\r\n        flex: '0 1 auto',\r\n        minWidth: 1,\r\n\r\n        '&:hover': {\r\n          background: palette.neutralLighter,\r\n        },\r\n      },\r\n      '& .performance-card-metrics-picker__metric': {\r\n        display: 'flex',\r\n        flex: '0 1 auto',\r\n        minWidth: 1,\r\n        padding: '16px 25px 27px 0px',\r\n        alignItems: 'center',\r\n\r\n        '& > div': {\r\n          flex: '1 1 auto',\r\n          minWidth: 1,\r\n          display: 'flex',\r\n\r\n          '& .metric-picker': {\r\n            borderStyle: 'solid',\r\n            borderColor: 'transparent',\r\n            justifyContent: 'center',\r\n            padding: '0px',\r\n            height: '40px',\r\n            minWidth: '60px',\r\n            alignItems: 'flex-start',\r\n\r\n            '&:hover': {\r\n              background: 'transparent',\r\n            },\r\n          },\r\n        },\r\n\r\n        '& .marker': {\r\n          backgroundRepeat: 'no-repeat',\r\n          width: 14,\r\n          height: 40,\r\n          backgroundPosition: 'center',\r\n          backgroundSize: 'contain',\r\n          flex: 'none',\r\n        },\r\n      },\r\n\r\n      '& .performance-card-metrics-picker__metric--column0': {\r\n        '& .original-marker': {\r\n          backgroundImage: `url(\"${circleSolid}\")`,\r\n        },\r\n        '& .comparison-marker': {\r\n          backgroundImage: `url(\"${circleDotted}\")`,\r\n        },\r\n      },\r\n      '& .performance-card-metrics-picker__metric--column1': {\r\n        '& .original-marker': {\r\n          backgroundImage: `url(\"${diamondSolid}\")`,\r\n        },\r\n        '& .comparison-marker': {\r\n          backgroundImage: `url(\"${diamondDotted}\")`,\r\n        },\r\n      },\r\n      '& .performance-card-metrics-picker__metric--column2': {\r\n        '& .original-marker': {\r\n          backgroundImage: `url(\"${triangleDownSolid}\")`,\r\n        },\r\n        '& .comparison-marker': {\r\n          backgroundImage: `url(\"${triangleDownDotted}\")`,\r\n        },\r\n      },\r\n      '& .performance-card-metrics-picker__metric--column3': {\r\n        paddingRight: 0,\r\n        '& .original-marker': {\r\n          backgroundImage: `url(\"${triangleUpSolid}\")`,\r\n        },\r\n        '& .comparison-marker': {\r\n          backgroundImage: `url(\"${triangleUpDotted}\")`,\r\n        },\r\n      },\r\n      '& .metric-picker .metric-picker__button.metric-picker__button--caret.dropdown-toggle.btn.btn-default': {\r\n        height: 'auto',\r\n      },\r\n    },\r\n  },\r\n});\r\n","import circleSolid from '../media/chart/CircleSolid.svg';\r\nimport circleDotted from '../media/chart/CircleDotted.svg';\r\nimport diamondSolid from '../media/chart/DiamondSolid.svg';\r\nimport diamondDotted from '../media/chart/DiamondDotted.svg';\r\nimport triangleDownSolid from '../media/chart/TriangleDownSolid.svg';\r\nimport triangleDownDotted from '../media/chart/TriangleDownDotted.svg';\r\nimport triangleUpSolid from '../media/chart/TriangleUpSolid.svg';\r\nimport triangleUpDotted from '../media/chart/TriangleUpDotted.svg';\r\n\r\nconst metricPickerBorderColor = [\r\n  '#2e76bc',\r\n  '#022F22',\r\n  '#e2068c',\r\n  '#4a0b3f',\r\n];\r\n\r\nconst getMetricPickerBorderStyle = column => ({\r\n  border: `1px solid ${metricPickerBorderColor[column]}`,\r\n  borderRadius: '4px',\r\n});\r\n\r\nexport const getPerformanceCardFluentV2Style = palette => ({\r\n  '.overview-card-container.CardType-Performance': {\r\n    height: '430px',\r\n    '& .overview-card': {\r\n      height: '410px',\r\n    },\r\n  },\r\n  '.overview-card .performance-graph': {\r\n    flexBasis: 'auto',\r\n  },\r\n  '.performance-card': {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    '& .performance-card-metrics-picker': {\r\n      display: 'flex',\r\n      marginBottom: '20px',\r\n      gap: '12px',\r\n\r\n      '& .metric-picker__text': {\r\n        display: 'flex',\r\n        flexDirection: 'column',\r\n        alignItems: 'flex-start',\r\n        maxWidth: '86px',\r\n\r\n        '&:hover': {\r\n          background: palette.neutralLighter,\r\n        },\r\n      },\r\n      '& .performance-card-metrics-picker__metric': {\r\n        display: 'flex',\r\n        flex: '0 1 auto',\r\n        padding: '14px 4px',\r\n        alignItems: 'center',\r\n        justifyContent: 'flex-start',\r\n        gap: '6px',\r\n\r\n        border: '1px solid #d1d1d1',\r\n        borderRadius: '4px',\r\n        width: '160px',\r\n        height: '80px',\r\n\r\n        '& .marker-container': {\r\n          display: 'flex',\r\n          minWidth: '14px',\r\n        },\r\n\r\n        '& .metric-picker': {\r\n          borderStyle: 'solid',\r\n          borderColor: 'transparent',\r\n          justifyContent: 'center',\r\n          padding: '0px',\r\n          height: '55px',\r\n          minWidth: '60px',\r\n          alignItems: 'flex-start',\r\n\r\n          '&:hover': {\r\n            background: 'transparent',\r\n          },\r\n        },\r\n\r\n        '& .marker': {\r\n          backgroundRepeat: 'no-repeat',\r\n          width: 14,\r\n          height: 48,\r\n          backgroundPosition: 'center',\r\n          backgroundSize: 'contain',\r\n          flex: 'none',\r\n        },\r\n\r\n        '& .open>.dropdown-menu': {\r\n          zIndex: 6,\r\n          top: '20px',\r\n        },\r\n      },\r\n\r\n      '& .performance-card-metrics-picker__metric--column0': {\r\n        '& .original-marker': {\r\n          backgroundImage: `url(\"${circleSolid}\")`,\r\n        },\r\n        '& .comparison-marker': {\r\n          backgroundImage: `url(\"${circleDotted}\")`,\r\n        },\r\n        ...getMetricPickerBorderStyle(0),\r\n      },\r\n      '& .performance-card-metrics-picker__metric--column1': {\r\n        '& .original-marker': {\r\n          backgroundImage: `url(\"${diamondSolid}\")`,\r\n        },\r\n        '& .comparison-marker': {\r\n          backgroundImage: `url(\"${diamondDotted}\")`,\r\n        },\r\n        ...getMetricPickerBorderStyle(1),\r\n      },\r\n      '& .performance-card-metrics-picker__metric--column2': {\r\n        '& .original-marker': {\r\n          backgroundImage: `url(\"${triangleDownSolid}\")`,\r\n        },\r\n        '& .comparison-marker': {\r\n          backgroundImage: `url(\"${triangleDownDotted}\")`,\r\n        },\r\n        ...getMetricPickerBorderStyle(2),\r\n      },\r\n      '& .performance-card-metrics-picker__metric--column3': {\r\n        '& .original-marker': {\r\n          backgroundImage: `url(\"${triangleUpSolid}\")`,\r\n        },\r\n        '& .comparison-marker': {\r\n          backgroundImage: `url(\"${triangleUpDotted}\")`,\r\n        },\r\n        ...getMetricPickerBorderStyle(3),\r\n      },\r\n      '& .metric-picker .metric-picker__button.metric-picker__button--caret.dropdown-toggle.btn.btn-default': {\r\n        height: 'auto',\r\n      },\r\n    },\r\n  },\r\n});\r\n","import circleSolid from '../media/chart/CircleSolid.svg';\r\nimport circleDotted from '../media/chart/CircleDotted.svg';\r\nimport diamondSolid from '../media/chart/DiamondSolid.svg';\r\nimport diamondDotted from '../media/chart/DiamondDotted.svg';\r\nimport triangleDownSolid from '../media/chart/TriangleDownSolid.svg';\r\nimport triangleDownDotted from '../media/chart/TriangleDownDotted.svg';\r\nimport triangleUpSolid from '../media/chart/TriangleUpSolid.svg';\r\nimport triangleUpDotted from '../media/chart/TriangleUpDotted.svg';\r\n\r\nexport const getPerformanceGraphStyle = palette => ({\r\n  '.performance-graph': {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    flex: 'auto 1 1',\r\n    flexBasis: '0',\r\n    minHeight: 1,\r\n    '& .performance-graph__graph': {\r\n      flex: 'auto 1 1',\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n\r\n      '& .highcharts-el': {\r\n        fontSize: '12px',\r\n        height: 235,\r\n        overflow: 'visible !important',\r\n        '& > div.highcharts-container': {\r\n          overflow: 'visible !important',\r\n          zIndex: '5 !important',\r\n        },\r\n\r\n        '& .highcharts-root': {\r\n          overflow: 'visible',\r\n        },\r\n\r\n        '& .highcharts-tooltip': {\r\n          '& .highcharts-label-box.highcharts-tooltip-box': {\r\n            opacity: 0,\r\n          },\r\n          '& > span': {\r\n            zIndex: 1,\r\n          },\r\n          '& .perf-graph-tool-tip': {\r\n            display: 'flex',\r\n            boxShadow: '0 3.2px 7.2px 0 rgba(0,0,0,.132), 0 0.6px 1.8px 0 rgba(0,0,0,.108)',\r\n            backgroundColor: 'rgba(255, 255, 255, 0.95)',\r\n            '@supports (backdrop-filter: blur(60px))': {\r\n              backdropFilter: 'blur(60px)',\r\n              backgroundColor: 'rgba(255, 255, 255, 0.25)',\r\n            },\r\n            '& .charts-tooltip': {\r\n              margin: '15px',\r\n\r\n              '& .tool-tip-title': {\r\n                marginBottom: '10px',\r\n              },\r\n              '& .tool-tip-properties': {\r\n                display: 'grid',\r\n                fallbacks: {\r\n                  display: '-ms-grid',\r\n                },\r\n                '& .tool-tip-property:nth-child(1)': {\r\n                  '-ms-grid-row': '1',\r\n                  gridRow: '1',\r\n                  '-ms-grid-column': '1',\r\n                  gridColumn: '1',\r\n                  marginRight: '30px',\r\n                },\r\n                '& .tool-tip-property:nth-child(2)': {\r\n                  '-ms-grid-row': '1',\r\n                  gridRow: '1',\r\n                  '-ms-grid-column': '2',\r\n                  gridColumn: '2',\r\n                },\r\n                '& .tool-tip-property:nth-child(3)': {\r\n                  '-ms-grid-row': '2',\r\n                  gridRow: '2',\r\n                  '-ms-grid-column': '1',\r\n                  gridColumn: '1',\r\n                  marginRight: '30px',\r\n                  marginTop: '10px',\r\n                },\r\n                '& .tool-tip-property:nth-child(4)': {\r\n                  '-ms-grid-row': '2',\r\n                  gridRow: '2',\r\n                  '-ms-grid-column': '2',\r\n                  gridColumn: '2',\r\n                  marginTop: '10px',\r\n                },\r\n                '& .tool-tip-property': {\r\n                  display: 'flex',\r\n\r\n                  '& .tool-tip-icon': {\r\n                    backgroundRepeat: 'no-repeat',\r\n                    width: 14,\r\n                    height: 40,\r\n                    backgroundPosition: 'center',\r\n                    backgroundSize: 'contain',\r\n                    marginRight: '15px',\r\n                  },\r\n                  '& .circle-solid': {\r\n                    backgroundImage: `url(\"${circleSolid}\")`,\r\n                  },\r\n                  '& .circle-shortdash': {\r\n                    backgroundImage: `url(\"${circleDotted}\")`,\r\n                  },\r\n                  '& .diamond-solid': {\r\n                    backgroundImage: `url(\"${diamondSolid}\")`,\r\n                  },\r\n                  '& .diamond-shortdash': {\r\n                    backgroundImage: `url(\"${diamondDotted}\")`,\r\n                  },\r\n                  '& .triangle-down-solid': {\r\n                    backgroundImage: `url(\"${triangleDownSolid}\")`,\r\n                  },\r\n                  '& .triangle-down-shortdash': {\r\n                    backgroundImage: `url(\"${triangleDownDotted}\")`,\r\n                  },\r\n                  '& .triangle-solid': {\r\n                    backgroundImage: `url(\"${triangleUpSolid}\")`,\r\n                  },\r\n                  '& .triangle-shortdash': {\r\n                    backgroundImage: `url(\"${triangleUpDotted}\")`,\r\n                  },\r\n\r\n                  '& .tool-tip-details': {\r\n\r\n                    '& .tool-tip-value': {\r\n                      fontSize: '16px',\r\n                    },\r\n                  },\r\n                },\r\n              },\r\n            },\r\n          },\r\n\r\n          '& .perf-graph-tool-tip.pop': {\r\n            '& .charts-tooltip': {\r\n              margin: '15px',\r\n\r\n              '& .tool-tip-properties': {\r\n                display: 'block',\r\n\r\n                '& .tool-tip-property + .tool-tip-property': {\r\n                  marginTop: '20px',\r\n                },\r\n\r\n                '& .tool-tip-property': {\r\n                  display: 'flex',\r\n                  marginRight: '0px !important',\r\n                },\r\n              },\r\n            },\r\n          },\r\n        },\r\n\r\n        '& .highcharts-root+.highcharts-axis-labels.highcharts-xaxis-labels': {\r\n          top: '16px !important',\r\n        },\r\n\r\n        '& .highcharts-xaxis-labels+.highcharts-xaxis-labels': {\r\n          marginTop: -10,\r\n        },\r\n        '& .highcharts-el__label--first': {\r\n        },\r\n        '& .highcharts-el__label--last': {\r\n        },\r\n      },\r\n    },\r\n    '& .switcher': {\r\n      flex: 'auto 1 1',\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n    },\r\n    '& .graph.graph--no-data': {\r\n      margin: '0px 23px 47px 23px',\r\n      borderBottom: `solid 1px ${palette.neutralQuaternaryAlt}`,\r\n      flex: 'auto 1 1',\r\n      display: 'flex',\r\n      justifyContent: 'center',\r\n      backgroundImage: `linear-gradient(${palette.neutralQuaternaryAlt} 1px, transparent 1px)`,\r\n      backgroundSize: '100px 100px',\r\n\r\n      '& .graph--no-data__label': {\r\n        marginTop: '80px',\r\n      },\r\n    },\r\n  },\r\n});\r\n","import { underlineLinkStyle } from '@bingads-webui-campaign-react/common-styles';\r\n\r\nconst couponColor = '#138486';\r\n\r\nconst tagHeight = 24;\r\n\r\nconst couponFlag = {\r\n  '& .coupon-right-aligned': {\r\n    position: 'absolute',\r\n    top: 0,\r\n    right: 0,\r\n  },\r\n  '& .coupon-tag': {\r\n    color: 'white',\r\n    display: 'flex',\r\n    height: tagHeight,\r\n    width: 'fit-content',\r\n    position: 'relative',\r\n    '& ~ .oppt_detail, & ~ .tip_image_container': {\r\n      marginTop: tagHeight,\r\n    },\r\n    '& .coupon-tag-main-triangle': {\r\n      width: 0,\r\n      height: 0,\r\n      borderStyle: 'solid',\r\n      borderWidth: [tagHeight / 2, 10],\r\n      borderColor: [couponColor, couponColor, couponColor, 'transparent'],\r\n      marginRight: -1,\r\n    },\r\n    '& .coupon-tag-message': {\r\n      backgroundColor: couponColor,\r\n      height: tagHeight,\r\n      padding: [5, 10, 5, 0],\r\n      fontSize: 10,\r\n      boxSizing: 'border-box',\r\n    },\r\n  },\r\n};\r\n\r\nexport const getDefaultTipCardStyle = ({ palette = {} }) => ({\r\n  '.tips-card': {\r\n    ...couponFlag,\r\n    display: 'flex',\r\n    minHeight: 0.1,\r\n    width: '100%',\r\n    '& .deterministic-wrapper-view': {\r\n      width: '100%',\r\n    },\r\n    '& .visuallyhidden': {\r\n      border: '0',\r\n      clip: 'rect(0 0 0 0)',\r\n      height: '1px',\r\n      margin: '-1px',\r\n      overflow: 'hidden',\r\n      padding: '0',\r\n      position: 'absolute',\r\n      width: '1px',\r\n    },\r\n    '& .tipsCarousel': {\r\n      height: 'auto',\r\n      display: 'flex',\r\n      width: '100%',\r\n      '& .carousel-inner': {\r\n        display: 'flex',\r\n        padding: '0',\r\n      },\r\n      '& .carousel-inner .item': {\r\n        flex: '1',\r\n        height: 'auto',\r\n        minWidth: 1,\r\n      },\r\n      '& .carousel-footer': {\r\n        display: 'flex',\r\n        padding: '0',\r\n        position: 'absolute',\r\n        bottom: 0,\r\n      },\r\n      '& .carousel-footer .inactiveButton': {\r\n        display: 'none',\r\n      },\r\n      '& .carousel-inner .carousel__tip_content': {\r\n        display: 'flex',\r\n        flex: '1',\r\n        flexDirection: 'column',\r\n      },\r\n      '& .carousel-inner .carousel__tip_content .tip_text_content': {\r\n        display: 'flex',\r\n        flex: '3 3',\r\n        flexDirection: 'column',\r\n        order: 2,\r\n      },\r\n      '& .carousel-inner .carousel__tip_content .tip_text_content .tip_title': {\r\n        textDecoration: 'none',\r\n        margin: '12px 0px',\r\n        overflow: 'hidden',\r\n        flex: '0 1 auto',\r\n        minHeight: 1,\r\n        lineHeight: 'normal',\r\n        fontSize: '18px',\r\n        fontWeight: '600',\r\n      },\r\n      '& .carousel-inner .carousel__tip_content .tip_text_content .tip_description__wrapper': {\r\n        display: 'block',\r\n        flex: '1 100',\r\n        overflow: 'hidden',\r\n      },\r\n      '& .carousel-inner .carousel__tip_content .tip_text_content .tip_description__wrapper .tip_description': {\r\n        lineHeight: '20px',\r\n        height: 'auto',\r\n        overflow: 'hidden',\r\n        fontSize: '14px',\r\n        fontWeight: 'normal',\r\n        margin: '0',\r\n      },\r\n      '& .carousel-inner .carousel__tip_content .tip_text_content .tip_links': {\r\n        marginTop: 16,\r\n        display: 'flex',\r\n        flexShrink: '0',\r\n        marginBottom: 16,\r\n      },\r\n      '& .carousel-inner .carousel__tip_content .tip_text_content .tip_links .linkButton': {\r\n        lineHeight: '30px',\r\n      },\r\n      '& .carousel-inner .item .carousel__tip_content .tip_text_content .tip_links': {\r\n        marginBottom: 44,\r\n      },\r\n      '& .carousel-inner .carousel__tip_content .tip_text_content .tip_links .tip_clickLink': {\r\n        flex: '0 0 auto',\r\n        '&.secondary_ClickLink': {\r\n          marginLeft: 8,\r\n        },\r\n      },\r\n      '& .carousel-inner .carousel__tip_content .tip_text_content .tip_links .tip_dismissLink': {\r\n        marginLeft: 30,\r\n        paddingTop: 5,\r\n      },\r\n      '& .carousel-inner .carousel__tip_content .tip_text_content .tip_links .tip_dismissLink a': {\r\n        position: 'relative',\r\n        color: '#1570A5',\r\n      },\r\n      '& .carousel-inner .carousel__tip_content .tip_image_container': {\r\n        flex: '2 2',\r\n        minWidth: '0.1px',\r\n        display: 'flex',\r\n        justifyContent: 'flex-end',\r\n        order: 1,\r\n        marginTop: '1px',\r\n        flexDirection: 'column',\r\n      },\r\n      '& .carousel-inner .carousel__tip_content .tip_image_container .tip_image': {\r\n        flex: '1',\r\n        backgroundRepeat: 'no-repeat',\r\n        backgroundSize: 'contain',\r\n        backgroundPosition: 'center center',\r\n      },\r\n      '& .carousel-inner .carousel__welcome_content': {\r\n        display: 'flex',\r\n        flex: '1',\r\n        flexDirection: 'column',\r\n      },\r\n      '& .carousel-inner .carousel__welcome_content .welcome_text_content': {\r\n        display: 'flex',\r\n        flex: '3 3',\r\n        flexDirection: 'column',\r\n        order: 2,\r\n      },\r\n      '& .carousel-inner .carousel__welcome_content .welcome_text_content .welcome_title': {\r\n        textDecoration: 'none',\r\n        margin: '12px 0px',\r\n        overflow: 'hidden',\r\n        flex: '0 1 auto',\r\n        minHeight: 1,\r\n        lineHeight: 'normal',\r\n        fontSize: '18px',\r\n        fontWeight: '600',\r\n      },\r\n      '& .carousel-inner .carousel__welcome_content .welcome_text_content .welcome_description__wrapper': {\r\n        display: 'block',\r\n        flex: '1 100',\r\n        overflow: 'hidden',\r\n      },\r\n      '& .carousel-inner .carousel__welcome_content .welcome_text_content .welcome_description__wrapper .welcome_description': {\r\n        lineHeight: '20px',\r\n        height: 'auto',\r\n        overflow: 'hidden',\r\n        fontSize: '14px',\r\n        fontWeight: 'normal',\r\n        margin: '0',\r\n      },\r\n      '& .carousel-inner .carousel__welcome_content .welcome_text_content .welcome_links': {\r\n        marginTop: 10,\r\n        display: 'flex',\r\n        flexShrink: '0',\r\n        marginBottom: 55,\r\n      },\r\n      '& .carousel-inner .carousel__welcome_content .welcome_text_content .welcome_links .welcome_clickLink': {\r\n        flex: '0 0 auto',\r\n      },\r\n      '& .carousel-inner .carousel__welcome_content .welcome_text_content .welcome_links .welcome_clickLink .linkButton': {\r\n        lineHeight: '30px',\r\n      },\r\n      '& .carousel-inner .carousel__welcome_content .welcome_text_content .welcome_links .disabled-button': {\r\n        flex: '0 0 auto',\r\n      },\r\n      '& .carousel-inner .carousel__welcome_content .welcome_text_content .welcome_links .disabled-button .btn-default.btn': {\r\n        fontWeight: 'bold',\r\n        fontSize: '13px',\r\n        paddingTop: 5,\r\n        paddingBottom: 5,\r\n        paddingLeft: 10,\r\n        paddingRight: 10,\r\n        boxShadow: 'none',\r\n        borderRadius: '0',\r\n        color: '#666666',\r\n        backgroundColor: '#F4F4F4',\r\n        fallbacks: [\r\n          {\r\n            border: '0',\r\n          },\r\n        ],\r\n        cursor: 'default',\r\n      },\r\n      '& .carousel-inner .carousel__welcome_content .welcome_text_content .welcome_links .disabled-button .btn-default.btn:focus': {\r\n        outline: '0',\r\n      },\r\n      '& .carousel-inner .carousel__welcome_content .welcome_image_container': {\r\n        flex: '2 2',\r\n        minWidth: '0.1px',\r\n        display: 'flex',\r\n        justifyContent: 'center',\r\n        order: 1,\r\n        marginTop: '1px',\r\n      },\r\n      '& .carousel-inner .carousel__welcome_content .welcome_image_container .welcome_image': {\r\n        flex: '1',\r\n        backgroundRepeat: 'no-repeat',\r\n        backgroundSize: 'contain',\r\n        backgroundPosition: 'center center',\r\n      },\r\n      '& .carousel-inner .carousel__oppt_content': {\r\n        display: 'flex',\r\n        flexDirection: 'column',\r\n        flex: '1',\r\n        minWidth: 1,\r\n        margin: '16px 0 0',\r\n      },\r\n      '& .carousel-inner .carousel__oppt_content .oppt_detail': {\r\n        display: 'flex',\r\n        flex: '1',\r\n        minHeight: 1,\r\n      },\r\n      '& .carousel-inner .carousel__oppt_content .oppt_detail .oppt_text_content': {\r\n        flex: '3 3',\r\n        minWidth: 1,\r\n        display: 'flex',\r\n        flexDirection: 'column',\r\n      },\r\n      '& .carousel-inner .carousel__oppt_content .oppt_detail .oppt_text_content .oppt_title': {\r\n        fontSize: '18px',\r\n        lineHeight: '22px',\r\n        marginBottom: '8px',\r\n        fontWeight: '600',\r\n      },\r\n      '& .carousel-inner .carousel__oppt_content .oppt_detail .oppt_text_content .oppt_description': {\r\n        fontSize: '13px',\r\n        lineHeight: '18px',\r\n        overflowY: 'auto',\r\n        color: palette.neutralSecondary,\r\n        ...underlineLinkStyle({ palette, elementLocator: '> a' }),\r\n      },\r\n      '& .carousel-inner .carousel__oppt_content .oppt_detail .oppt_content .oppt_description_detail': {\r\n        maxWidth: '200px',\r\n        color: palette.neutralSecondary,\r\n      },\r\n      '& .carousel-inner .carousel__oppt_content .oppt_detail .oppt_content': {\r\n        marginRight: '25px',\r\n        fontWeight: '600',\r\n\r\n        '& .kpis': {\r\n          '& .oppt_kpi.kpi-primary': {\r\n            display: 'block',\r\n            '& .kpi_name': {\r\n              fontSize: '12px',\r\n              color: '#107C10',\r\n            },\r\n            '& .kpi_delta': {\r\n              display: 'flex',\r\n              alignItems: 'center',\r\n              fontSize: '30px',\r\n              lineHeight: '40px',\r\n              color: '#107C10',\r\n              marginRight: '0px',\r\n\r\n              '& .increase-arrow:before': {\r\n                content: '\"\\\\EE68\"',\r\n                fontFamily: 'MsAds MDL2 Assets',\r\n              },\r\n              '& .decrease-arrow:before': {\r\n                content: '\"\\\\EE69\"',\r\n                fontFamily: 'MsAds MDL2 Assets',\r\n              },\r\n            },\r\n            '& .kpi_change': {\r\n              fontSize: '12px',\r\n              lineHeight: '16px',\r\n              marginBottom: '10px',\r\n            },\r\n          },\r\n          '& .oppt_kpi': {\r\n            display: 'flex',\r\n            '& .positive-estimate': {\r\n              color: '#107C10',\r\n            },\r\n          },\r\n          '& .oppt_kpi.kpi-secondary': {\r\n          },\r\n          '& .kpi_delta': {\r\n            display: 'flex',\r\n            marginRight: '5px',\r\n          },\r\n        },\r\n        '& .kpi_description': {\r\n          marginTop: '10px',\r\n          color: palette.neutralSecondary,\r\n        },\r\n      },\r\n      '& .carousel-inner .carousel__oppt_content .oppt_detail .oppt_image_container': {\r\n        flex: '1 1',\r\n        minWidth: 1,\r\n        display: 'flex',\r\n        justifyContent: 'center',\r\n        marginTop: '12px',\r\n        marginBottom: '16px',\r\n      },\r\n      '& .carousel-inner .carousel__oppt_content .oppt_detail .oppt_image_container .oppt_image': {\r\n        flex: '1',\r\n        backgroundRepeat: 'no-repeat',\r\n        backgroundSize: 'contain',\r\n        backgroundPosition: 'center center',\r\n      },\r\n      '& .carousel-inner .carousel__oppt_content .oppt_action': {\r\n        flex: '0 0 75px',\r\n        minHeight: 75,\r\n      },\r\n      '& .carousel-inner .carousel__oppt_content .oppt_action .oppt_clickLink': {\r\n        flex: '0 0 auto',\r\n      },\r\n      '& .carousel-inner .empty_content': {\r\n        margin: '20px 10px 0',\r\n      },\r\n      '& .carousel-inner .active, .carousel-inner .next, .carousel-footer .activeButton, .carousel-inner .prev, .carousel-inner .left, .carousel-inner .right': {\r\n        display: 'flex',\r\n      },\r\n      '& .carousel-inner .next, .carousel-inner .prev': {\r\n        height: '100%',\r\n      },\r\n    },\r\n  },\r\n});\r\n","import { underlineLinkStyle, crudAdStyle, helpbuttonStyle } from '@bingads-webui-campaign-react/common-styles';\r\n\r\nimport broadMatchModifierImg from '../media/tipsOpportunities/tips/broad_match_modifier.svg';\r\nimport callImg from '../media/tipsOpportunities/tips/call.svg';\r\nimport calloutExtensionsImg from '../media/tipsOpportunities/tips/callout_extensions.svg';\r\nimport convTrackingImg from '../media/tipsOpportunities/tips/conv_tracking.svg';\r\nimport createCampaignImg from '../media/tipsOpportunities/tips/create_campaign.svg';\r\nimport dynamicSearchAdsImg from '../media/tipsOpportunities/tips/dynamic_search_ads.svg';\r\nimport enhancedCpcAutobidImg from '../media/tipsOpportunities/tips/enhanced_cpc_autobid.svg';\r\nimport expandedTextAdsImg from '../media/tipsOpportunities/tips/expanded_text_ads.svg';\r\nimport googleImportImg from '../media/tipsOpportunities/tips/google_import.svg';\r\nimport kwMatchTypesImg from '../media/tipsOpportunities/tips/KW_match_types.svg';\r\nimport microsoftLogoImg from '../media/tipsOpportunities/tips/microsoft_logo.svg';\r\nimport negKeywordsImg from '../media/tipsOpportunities/tips/neg_keywords.svg';\r\nimport remarketingImg from '../media/tipsOpportunities/tips/remarketing.svg';\r\nimport reviewExtentionsImg from '../media/tipsOpportunities/tips/review_extentions.svg';\r\nimport sharedBudgetsImg from '../media/tipsOpportunities/tips/shared_budgets.svg';\r\nimport sitelinkExtensionsImg from '../media/tipsOpportunities/tips/sitelink_extensions.svg';\r\nimport structuredSnippetsImg from '../media/tipsOpportunities/tips/structured_snippets.svg';\r\nimport welcomeAddPaymentImg from '../media/tipsOpportunities/tips/welcome_add_payment.svg';\r\nimport welcomeCoachingImg from '../media/tipsOpportunities/tips/welcome_coaching.svg';\r\nimport welcomeCouponImg from '../media/tipsOpportunities/tips/welcome_coupon.svg';\r\nimport welcomeHelpImg from '../media/tipsOpportunities/tips/welcome_help.svg';\r\nimport addNewAdsImg from '../media/tipsOpportunities/opportunities/AddNewAds.svg';\r\nimport addNewKeywordImg from '../media/tipsOpportunities/opportunities/AddNewKeyword.svg';\r\nimport adSchedulingImg from '../media/tipsOpportunities/opportunities/AdScheduling.svg';\r\nimport budgetOppoImg from '../media/tipsOpportunities/opportunities/BudgetOppo.svg';\r\nimport calloutExtensionImg from '../media/tipsOpportunities/opportunities/CalloutExtension.svg';\r\nimport competitiveBidImg from '../media/tipsOpportunities/opportunities/CompetitiveBid.svg';\r\nimport firstpageOppoImg from '../media/tipsOpportunities/opportunities/FirstpageOppo.svg';\r\nimport firstPositionImg from '../media/tipsOpportunities/opportunities/FirstPosition.svg';\r\nimport googleAdImportImg from '../media/tipsOpportunities/opportunities/GAImport.svg';\r\nimport keywordBidImg from '../media/tipsOpportunities/opportunities/KeywordBid.svg';\r\nimport kwBroadMatchImg from '../media/tipsOpportunities/opportunities/KWBroadMatch.svg';\r\nimport kwBroadMatchModifierImg from '../media/tipsOpportunities/opportunities/KWBroadMatchModifier.svg';\r\nimport locationBidImg from '../media/tipsOpportunities/opportunities/LocationBid.svg';\r\nimport mainlineOppoImg from '../media/tipsOpportunities/opportunities/MainlineOppo.svg';\r\nimport remarketingBidImg from '../media/tipsOpportunities/opportunities/RemarketingBid.svg';\r\nimport sitelinkExtensionImg from '../media/tipsOpportunities/opportunities/SitelinkExtension.svg';\r\n\r\nconst tagHeight = 24;\r\nconst flyoutOffset = 16;\r\n\r\nconst couponFlyout = {\r\n  '.flyout-popup-class-position': {\r\n    zIndex: 5,\r\n    '& .popover-view__dismiss': {\r\n      display: 'none',\r\n    },\r\n    '&.right': {\r\n      transform: 'translateX(15px)',\r\n      '& .coupon-tag-flyout-content': {\r\n        '&:after, &:before': {\r\n          right: '100%',\r\n        },\r\n        '&:after': {\r\n          borderColor: ['transparent', 'white', 'transparent', 'transparent'],\r\n          marginRight: -2,\r\n        },\r\n        '&:before': {\r\n          borderColor: ['transparent', 'lightgrey', 'transparent', 'transparent'],\r\n        },\r\n      },\r\n    },\r\n    '&.left': {\r\n      transform: 'translateX(-15px)',\r\n      '& .coupon-tag-flyout-content': {\r\n        '&:after, &:before': {\r\n          left: '100%',\r\n        },\r\n        '&:after': {\r\n          borderColor: ['transparent', 'transparent', 'transparent', 'white'],\r\n          marginLeft: -2,\r\n        },\r\n        '&:before': {\r\n          borderColor: ['transparent', 'transparent', 'transparent', 'lightgrey'],\r\n        },\r\n      },\r\n    },\r\n    '& .flyout-popup-class': {\r\n      marginTop: -flyoutOffset - tagHeight,\r\n      '& .coupon-tag-flyout': {\r\n        '& .coupon-tag-flyout-content': {\r\n          backgroundColor: 'white',\r\n          border: '1px solid lightgrey',\r\n          padding: 10,\r\n          color: 'black',\r\n          width: 280,\r\n          boxShadow: '3px 3px 4px #dddddd',\r\n          '&:after, &:before': {\r\n            top: -(tagHeight / 2),\r\n            borderStyle: 'solid',\r\n            content: '\" \"',\r\n            height: 0,\r\n            width: 0,\r\n            position: 'absolute',\r\n            pointerEvents: 'none',\r\n          },\r\n          '&:after': {\r\n            borderWidth: 10.5,\r\n            marginTop: -10.5,\r\n          },\r\n          '&:before': {\r\n            borderWidth: 11,\r\n            marginTop: -10,\r\n          },\r\n          '& .coupon-tag-flyout-line1': {\r\n            fontWeight: 'bold',\r\n          },\r\n          '& .coupon-tag-flyout-line2': {\r\n            color: 'red',\r\n            marginBottom: 0,\r\n          },\r\n        },\r\n      },\r\n    },\r\n  },\r\n};\r\n\r\nexport const getTipCardStyle = palette => ({\r\n  ...couponFlyout,\r\n  '.tips-card-plus-fac': {\r\n    position: 'relative',\r\n    display: 'flex',\r\n  },\r\n  // estimates tile\r\n  '.recommendation-estimation-tile': {\r\n    fontSize: '12px',\r\n    lineHeight: '15px',\r\n    fontFamily: \"'Segoe UI', Arial, sans-serif\",\r\n    display: '-ms-grid',\r\n    '&.neutral-estimate': {\r\n      color: 'gray',\r\n      fontSize: 28,\r\n    },\r\n    '& .positive-estimate': {\r\n      color: '#107C10',\r\n      fontSize: 28,\r\n    },\r\n    '& .estimate-second-primary': {\r\n      marginTop: '10px',\r\n      '& .estimate-second-primary-titile': {\r\n        width: '124px',\r\n        lineHeight: '15px',\r\n        fontWeight: 'bold',\r\n        MsGridRow: 1,\r\n        gridRow: 1,\r\n      },\r\n      '& .estimate-second-primary-increase': {\r\n        width: '124px',\r\n        lineHeight: '36px',\r\n        fontWeight: 'bold',\r\n        MsGridRow: 2,\r\n        gridRow: 2,\r\n      },\r\n    },\r\n    '& .estimate-primary-titile': {\r\n      width: '124px',\r\n      lineHeight: '15px',\r\n      fontWeight: 'bold',\r\n      MsGridRow: 1,\r\n      gridRow: 1,\r\n      fontSize: '12px !important',\r\n    },\r\n    '& .estimate-primary-increase': {\r\n      width: '124px',\r\n      lineHeight: '36px',\r\n      fontWeight: 'bold',\r\n      MsGridRow: 2,\r\n      gridRow: 2,\r\n      '& .recommendation-arrow-icon': {\r\n        top: '10px',\r\n        position: 'relative',\r\n        '&:before': {\r\n          fontSize: '20px!important',\r\n        },\r\n      },\r\n    },\r\n    '& .estimate-primary-from-to': {\r\n      fontSize: '12px',\r\n      lineHeight: '15px',\r\n      width: '126px',\r\n      whiteSpace: 'pre-wrap',\r\n      MsGridRow: 3,\r\n      gridRow: 3,\r\n      color: 'gray',\r\n    },\r\n    '& .estimate-secondary': {\r\n      margin: '8px 0 0 0',\r\n      fontSize: '12px',\r\n      lineHeight: '15px',\r\n      MsGridRow: 4,\r\n      gridRow: 4,\r\n      '.estimate-secondary-value': {\r\n        fontWeight: 'bold',\r\n      },\r\n      '.estimate-secondary-title': {\r\n        fontWeight: 'normal',\r\n      },\r\n    },\r\n    '& .estimate-tertiary': {\r\n      fontSize: '12px',\r\n      lineHeight: '15px',\r\n      MsGridRow: 5,\r\n      gridRow: 5,\r\n      '& .estimate-tertiary-value': {\r\n        fontWeight: 'normal',\r\n      },\r\n      '& .estimate-tertiary-title': {\r\n        fontWeight: 'normal',\r\n      },\r\n    },\r\n    '& .estimate-cost': {\r\n      fontSize: '12px',\r\n      lineHeight: '15px',\r\n      color: 'black',\r\n      MsGridRow: 6,\r\n      gridRow: 6,\r\n      '& .estimate-cost-value': {\r\n        fontWeight: 'normal',\r\n      },\r\n      '& .estimate-cost-title': {\r\n        fontWeight: 'normal',\r\n      },\r\n    },\r\n    '& .estimate-note': {\r\n      margin: '8px 0 0 0',\r\n      fontSize: '12px',\r\n      lineHeight: '15px',\r\n      MsGridRow: 7,\r\n      gridRow: 7,\r\n      color: 'gray',\r\n    },\r\n  },\r\n  '& .summary-header-menu .bingads-popover': {\r\n    right: 5,\r\n  },\r\n  '& >.toolbar': {\r\n    marginLeft: 10,\r\n    '& .upper-toolbar': {\r\n      display: 'inline-block',\r\n    },\r\n  },\r\n  '& .empty-buttons': {\r\n    marginTop: 36,\r\n  },\r\n\r\n  // empty view\r\n  '& .empty-filter-view': {\r\n    margin: '160px',\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    justifyContent: 'center',\r\n\r\n    '& .empty-icon': {\r\n      display: 'inline-block',\r\n      marginRight: 62,\r\n\r\n      img: {\r\n        width: 200,\r\n        height: 200,\r\n      },\r\n    },\r\n\r\n    '& .empty-details': {\r\n      display: 'inline-block',\r\n      color: '#605E5C',\r\n      gridRow: '1',\r\n      gridColumn: '2',\r\n      '& .empty-title': {\r\n        fontSize: 26,\r\n        margin: '0 0 8.5px',\r\n      },\r\n      '& .empty-sub-title': {\r\n        fontSize: 14,\r\n        fontWeight: 'normal',\r\n        ...underlineLinkStyle({ palette }),\r\n      },\r\n    },\r\n  },\r\n\r\n  '.recommendation-summary-card': {\r\n    height: '278px',\r\n    width: '100%',\r\n    fontFamily: '\\'Segoe UI\\', Arial, sans-serif',\r\n    fontSize: 12,\r\n    display: 'grid',\r\n    color: '#333333',\r\n    gridTemplateColumns: '100%',\r\n    gridTemplateRows: 'repeat(4,auto)',\r\n    '& .summary-summary': {\r\n      gridRow: '1',\r\n      gridTemplateRows: 'repeat(2,auto)',\r\n      '& .summary-notification': {\r\n        '& .recommendation-notification-container': {\r\n          background: '#EFF6FC !important',\r\n          display: 'flex',\r\n          '& .recommendation-notification-text': {\r\n            maxWidth: '90%',\r\n            padding: '5px 0 5px 24px',\r\n            whiteSpace: 'nowrap',\r\n            overflow: 'hidden',\r\n            textOverflow: 'ellipsis',\r\n          },\r\n          '& .recommendation-notification-help': {\r\n            maxWidth: '10%',\r\n            padding: '5px 10px 5px 0',\r\n          },\r\n        },\r\n        '& .helpbutton': helpbuttonStyle({ palette })['.helpbutton'],\r\n        '& .helpbutton::before': { ...helpbuttonStyle({ palette })['.helpbutton::before'], top: 0 },\r\n      },\r\n      '& .summary-banner': {\r\n        background: '#DDDDDD',\r\n        gridRow: '1',\r\n        '& .summary-banner-title': {\r\n          display: 'table-cell',\r\n          verticalAlign: 'middle',\r\n          fontWeight: 'bold',\r\n          color: '#333333',\r\n          height: 30,\r\n          padding: '0px 24px',\r\n        },\r\n      },\r\n      '& .summary-summary-content': {\r\n        borderBottom: 'solid 1px #dddddd',\r\n        paddingTop: 16,\r\n        paddingBottom: 12,\r\n        display: 'grid',\r\n        gridRow: '3',\r\n        '& .summary-card-os-tag-container': {\r\n          display: 'inline-block',\r\n          marginLeft: 3,\r\n          '& .not-available-line': {\r\n            paddingLeft: 10,\r\n            paddingRight: 10,\r\n          },\r\n          '& .iconba.iconba-Trending12': {\r\n            paddingLeft: 8,\r\n            paddingRight: 8,\r\n            paddingBottom: 3,\r\n          },\r\n        },\r\n        '& .summary-info': {\r\n          gridColumn: '3',\r\n          maxHeight: '164px',\r\n          overflowY: 'auto',\r\n\r\n          '& .summary-description': {\r\n            fontSize: 16,\r\n            fontWeight: 'bold',\r\n            color: '#323130',\r\n          },\r\n          '& .summary-description-os': {\r\n            display: 'inline',\r\n          },\r\n          '& .summary-pitching': {\r\n            fontSize: 12,\r\n            fontWeight: 'normal',\r\n            color: '#484644',\r\n            marginTop: 10,\r\n            '& > span': {\r\n              ...underlineLinkStyle({ palette }),\r\n            },\r\n          },\r\n        },\r\n      },\r\n      '& .summary-estimates': {\r\n        gridColumn: '1',\r\n      },\r\n      '& .summary-overall-optimization-score': {\r\n        gridColumn: '1',\r\n        width: 124,\r\n        '& .overall-optimization-score-number': {\r\n          fontSize: 32,\r\n          color: palette.blue,\r\n          width: 124,\r\n          gridRow: 2,\r\n          fontWeight: 'bold',\r\n        },\r\n      },\r\n    },\r\n    '& .summary-sample': {\r\n      gridRow: '2',\r\n      overflowY: 'hidden',\r\n      '&:hover ': {\r\n        overflowY: 'auto',\r\n      },\r\n      '& .recommendation-sample': {\r\n        '& .sample-insight-title': {\r\n          marginTop: 8,\r\n          fontSize: 13,\r\n          fontWeight: 'normal',\r\n          color: '#333333',\r\n        },\r\n        '& .sample-insight': {\r\n          margin: '10px 0 0 0',\r\n          fontSize: 13,\r\n          fontWeight: 'normal',\r\n          color: '#666666',\r\n        },\r\n        '& .sample-visual, & .sample-action-table': {\r\n          margin: '8px 0 0 0',\r\n        },\r\n        '& .sample-horizontal-separator': {\r\n          margin: '8px 0',\r\n          borderTop: '1px solid #ececec',\r\n        },\r\n        '& .sample-action-title': {\r\n          fontSize: 13,\r\n          fontWeight: 'normal',\r\n          color: '#333333',\r\n        },\r\n        '& .sample-more-recommendations': {\r\n          margin: '8px 0 0 0',\r\n        },\r\n      },\r\n      ...crudAdStyle({ palette }),\r\n      '& .ad-preview-header': {\r\n        padding: '0px 0 8px 0',\r\n      },\r\n      '& .recommendation-suggested-ads-column': {\r\n        '& .recommendation-summary-ad-preview': {\r\n          width: '100%',\r\n          padding: '15px 15px 15px 15px',\r\n          background: palette.white,\r\n          border: 'solid 1px #dddddd',\r\n        },\r\n      },\r\n    },\r\n    '& .summary-footer': {\r\n      bottom: '0px',\r\n      position: 'absolute',\r\n      gridRow: '4',\r\n      '& .primary-button': {\r\n        '& button': {\r\n          fontFamily: 'Arial, Helvetica, sans-serif',\r\n          fontWeight: 'bold',\r\n          fontSize: 13,\r\n          backgroundColor: palette.themePrimary,\r\n          color: palette.white,\r\n          padding: '5px 10px',\r\n          border: '1px black solid',\r\n          margin: '0 8px 0 0',\r\n          '&:hover': {\r\n            backgroundColor: '#006464',\r\n          },\r\n        },\r\n      },\r\n      '& .secondary-button': {\r\n        '& button': {\r\n          fontFamily: 'Arial, Helvetica, sans-serif',\r\n          fontWeight: 'bold',\r\n          fontSize: 13,\r\n          backgroundColor: palette.white,\r\n          color: '#000000',\r\n          padding: '5px 10px',\r\n          border: '1px black solid',\r\n          margin: '0 8px 0 0',\r\n          '&:hover': {\r\n            backgroundColor: '#a8a8a8',\r\n          },\r\n        },\r\n      },\r\n    },\r\n  },\r\n  '.carousel-footer': {\r\n    '& .btn-default': {\r\n      display: 'none',\r\n    },\r\n    '& .btn-primary': {\r\n      fontWeight: 'bold',\r\n      fontSize: 14,\r\n      height: '32px',\r\n      backgroundColor: palette.white,\r\n      color: palette.black,\r\n      padding: '6px 19px',\r\n      borderRadius: '2px',\r\n      border: '1px solid black',\r\n      minWidth: '212px',\r\n      '&:hover': {\r\n        backgroundColor: '#f3f2f1',\r\n      },\r\n    },\r\n  },\r\n  // recommendation visual\r\n  '.action-table': {\r\n    marginTop: 8,\r\n    fontFamily: '\\'Segoe UI\\', Arial, sans-serif',\r\n    '& thead': {\r\n      '& th': {\r\n        fontSize: 12,\r\n        color: '#323130',\r\n        fontWeight: 'bold',\r\n        paddingRight: '10px',\r\n        paddingBottom: '8px',\r\n        '&:last-child': {\r\n          paddingRight: '0px',\r\n        },\r\n      },\r\n    },\r\n    '& tbody': {\r\n      '& th': {\r\n        fontSize: 12,\r\n        color: '#323130',\r\n      },\r\n    },\r\n    '& td': {\r\n      fontSize: 12,\r\n      fontWeight: 'normal',\r\n      color: '#333333',\r\n      paddingBottom: 3,\r\n      verticalAlign: 'top',\r\n      paddingRight: '10px',\r\n      'word-break': 'break-word',\r\n      '&:last-child': {\r\n        paddingRight: '0px',\r\n      },\r\n      '& .progress-bar-with-right-label': {\r\n        marginLeft: 10,\r\n        gridTemplateColumns: '80% 20%',\r\n        alignItems: 'center',\r\n        '& .progress': {\r\n          marginRight: 5,\r\n          gridRow: '1',\r\n          gridColumn: '1',\r\n        },\r\n        '& .right-label': {\r\n          gridRow: '1',\r\n          gridColumn: '2',\r\n        },\r\n      },\r\n    },\r\n  },\r\n  '& .navbar-nav': {\r\n    '& .recommendation-download': {\r\n      paddingLeft: 20,\r\n      paddingTop: 6,\r\n      marginBottom: '-15px',\r\n      '& #button-download': {\r\n        background: '#FFFFFF',\r\n        border: '1px solid #8A8886',\r\n        boxSizing: 'border-box',\r\n        borderRadius: '2px',\r\n        fontSize: '14px',\r\n        marginLeft: '770px',\r\n        zIndex: '1',\r\n      },\r\n    },\r\n  },\r\n  '& .nav-pills': {\r\n    '& li': {\r\n      border: '1px solid #505050',\r\n      '&.active, &.active a': {\r\n        backgroundColor: '#e7f0f6',\r\n        color: '#666',\r\n        fontWeight: 'bold',\r\n      },\r\n      '&:nth-child(1)': {\r\n        borderRight: '0',\r\n      },\r\n      '& a': {\r\n        padding: '5px 20px 4px 20px',\r\n        border: 'none',\r\n        fontWeight: 'normal',\r\n      },\r\n    },\r\n  },\r\n  '& .filter-editor': {\r\n    '& .selector-container': {\r\n      '& button': {\r\n        border: '1px solid #BBB',\r\n        padding: '3px 5px 5px 5px',\r\n        textAlign: 'right',\r\n      },\r\n    },\r\n    '& .selector-v2': {\r\n      width: 400,\r\n    },\r\n  },\r\n  '.card-holder__wrapper .tipsCarousel [class*=\"carousel-control\"]': {\r\n    backgroundImage: 'none',\r\n    filter: 'none !important',\r\n    width: 20,\r\n    opacity: '1',\r\n    margin: 0,\r\n    cursor: 'default',\r\n    top: 'auto',\r\n    bottom: '16px',\r\n    fontSize: '16px',\r\n    height: '16px',\r\n  },\r\n  '.card-holder__wrapper .carousel-control': {\r\n    backgroundColor: 'white',\r\n    textShadow: 'none',\r\n    color: palette.themePrimary,\r\n\r\n    '&:hover': {\r\n      color: palette.themeDarker,\r\n    },\r\n  },\r\n  '.card-holder__wrapper .carousel-control.left': {\r\n    left: 'auto',\r\n    right: '30px',\r\n  },\r\n  '.card-holder__wrapper .carousel-control .carousel-control__arrow-right': {\r\n    width: 16,\r\n    height: 16,\r\n    cursor: 'pointer',\r\n    bottom: 'auto',\r\n    '&:before': {\r\n      fontFamily: '\"MsAds MDL2 Assets\"',\r\n      content: '\"\\\\E76C\"',\r\n    },\r\n  },\r\n  '.card-holder__wrapper .carousel-control .carousel-control__arrow-left': {\r\n    width: 16,\r\n    height: 16,\r\n    cursor: 'pointer',\r\n    bottom: 'auto',\r\n    '&:before': {\r\n      fontFamily: '\"MsAds MDL2 Assets\"',\r\n      content: '\"\\\\E76B\"',\r\n    },\r\n  },\r\n  '.card-holder__wrapper .carousel-control.clickable:focus:after': {\r\n    border: 'none',\r\n    outline: `1px solid ${palette.neutralSecondary}`,\r\n    outlineOffset: 2,\r\n  },\r\n  '.card-holder__wrapper .carousel-indicators': {\r\n    marginBottom: '0',\r\n    height: 8,\r\n    bottom: '16px',\r\n    left: '0px',\r\n    width: 'auto',\r\n    margin: '0px',\r\n    lineHeight: '8px',\r\n    fontSize: '8px',\r\n  },\r\n  '.card-holder__wrapper .carousel-indicators li': {\r\n    height: 8,\r\n    width: 8,\r\n    margin: '0',\r\n    marginRight: 10,\r\n    background: 'none',\r\n    border: `1px solid ${palette.neutralSecondary}`,\r\n\r\n    '@media screen and (forced-colors: active)': {\r\n      forcedColorAdjust: 'none',\r\n    },\r\n\r\n    '@media screen and (-ms-high-contrast: active)': {\r\n      background: 'window',\r\n      borderColor: 'windowtext',\r\n    },\r\n  },\r\n  '.card-holder__wrapper .carousel-indicators .active': {\r\n    margin: '0',\r\n    marginRight: 10,\r\n    border: 'none',\r\n    background: palette.themePrimary,\r\n\r\n    '@media screen and (forced-colors: active)': {\r\n      forcedColorAdjust: 'none',\r\n    },\r\n\r\n    '@media screen and (-ms-high-contrast: active)': {\r\n      background: 'highlight',\r\n    },\r\n  },\r\n  '.card-holder__wrapper .import_tip_img': {\r\n    backgroundImage: `url(\"${googleImportImg}\")`,\r\n  },\r\n  '.card-holder__wrapper .broadMatch_tip_img': {\r\n    backgroundImage: `url(\"${broadMatchModifierImg}\")`,\r\n  },\r\n  '.card-holder__wrapper .exta_tip_img': {\r\n    backgroundImage: `url(\"${expandedTextAdsImg}\")`,\r\n  },\r\n  '.card-holder__wrapper .sitelinks_tip_img': {\r\n    backgroundImage: `url(\"${sitelinkExtensionsImg}\")`,\r\n  },\r\n  '.card-holder__wrapper .callouts_tip_img': {\r\n    backgroundImage: `url(\"${calloutExtensionsImg}\")`,\r\n  },\r\n  '.card-holder__wrapper .structSnip_tip_img': {\r\n    backgroundImage: `url(\"${structuredSnippetsImg}\")`,\r\n  },\r\n  '.card-holder__wrapper .dsa_tip_img': {\r\n    backgroundImage: `url(\"${dynamicSearchAdsImg}\")`,\r\n  },\r\n  '.card-holder__wrapper .conversionTracking_tip_img': {\r\n    backgroundImage: `url(\"${convTrackingImg}\")`,\r\n  },\r\n  '.card-holder__wrapper .remarketing_tip_img': {\r\n    backgroundImage: `url(\"${remarketingImg}\")`,\r\n  },\r\n  '.card-holder__wrapper .autoBid_tip_img': {\r\n    backgroundImage: `url(\"${enhancedCpcAutobidImg}\")`,\r\n  },\r\n  '.card-holder__wrapper .sharedBudgets_tip_img': {\r\n    backgroundImage: `url(\"${sharedBudgetsImg}\")`,\r\n  },\r\n  '.card-holder__wrapper .call_tip_img': {\r\n    backgroundImage: `url(\"${callImg}\")`,\r\n  },\r\n  '.card-holder__wrapper .reviews_tip_img': {\r\n    backgroundImage: `url(\"${reviewExtentionsImg}\")`,\r\n  },\r\n  '.card-holder__wrapper .kWMatchType_tip_img': {\r\n    backgroundImage: `url(\"${kwMatchTypesImg}\")`,\r\n  },\r\n  '.card-holder__wrapper .negKW_tip_img': {\r\n    backgroundImage: `url(\"${negKeywordsImg}\")`,\r\n  },\r\n  '.card-holder__wrapper .optiConsult_tip_img': {\r\n    backgroundImage: `url(\"${microsoftLogoImg}\")`,\r\n  },\r\n  '.card-holder__wrapper .welcome_microsoft_logo_tip_img': {\r\n    backgroundImage: `url(\"${microsoftLogoImg}\")`,\r\n  },\r\n  '.card-holder__wrapper .welcome_create_campaign_tip_img': {\r\n    backgroundImage: `url(\"${createCampaignImg}\")`,\r\n  },\r\n  '.card-holder__wrapper .welcome_coaching_tip_img': {\r\n    backgroundImage: `url(\"${welcomeCoachingImg}\")`,\r\n  },\r\n  '.card-holder__wrapper .welcome_coupon_tip_img': {\r\n    backgroundImage: `url(\"${welcomeCouponImg}\")`,\r\n  },\r\n  '.card-holder__wrapper .welcome_add_payment_tip_img': {\r\n    backgroundImage: `url(\"${welcomeAddPaymentImg}\")`,\r\n  },\r\n  '.card-holder__wrapper .welcome_help_tip_img': {\r\n    backgroundImage: `url(\"${welcomeHelpImg}\")`,\r\n  },\r\n  '.card-holder__wrapper .addNewAds_opportunity_img': {\r\n    backgroundImage: `url(\"${addNewAdsImg}\")`,\r\n  },\r\n  '.card-holder__wrapper .remarketingBid_opportunity_img': {\r\n    backgroundImage: `url(\"${remarketingBidImg}\")`,\r\n  },\r\n  '.card-holder__wrapper .locationBid_opportunity_img': {\r\n    backgroundImage: `url(\"${locationBidImg}\")`,\r\n  },\r\n  '.card-holder__wrapper .keyword_opportunity_img': {\r\n    backgroundImage: `url(\"${addNewKeywordImg}\")`,\r\n  },\r\n  '.card-holder__wrapper .keywordBidAdjustment_opportunity_img': {\r\n    backgroundImage: `url(\"${keywordBidImg}\")`,\r\n  },\r\n  '.card-holder__wrapper .googleImport_opportunity_img': {\r\n    backgroundImage: `url(\"${googleAdImportImg}\")`,\r\n  },\r\n  '.card-holder__wrapper .sitelink_opportunity_img': {\r\n    backgroundImage: `url(\"${sitelinkExtensionImg}\")`,\r\n  },\r\n  '.card-holder__wrapper .callout_opportunity_img': {\r\n    backgroundImage: `url(\"${calloutExtensionImg}\")`,\r\n  },\r\n  '.card-holder__wrapper .budget_opportunity_img': {\r\n    backgroundImage: `url(\"${budgetOppoImg}\")`,\r\n  },\r\n  '.card-holder__wrapper .broadMatchKeyword_opportunity_img': {\r\n    backgroundImage: `url(\"${kwBroadMatchImg}\")`,\r\n  },\r\n  '.card-holder__wrapper .broadMatchModifierKeyword_opportunity_img': {\r\n    backgroundImage: `url(\"${kwBroadMatchModifierImg}\")`,\r\n  },\r\n  '.card-holder__wrapper .firstPage_opportunity_img': {\r\n    backgroundImage: `url(\"${firstpageOppoImg}\")`,\r\n  },\r\n  '.card-holder__wrapper .mainLineBid_opportunity_img': {\r\n    backgroundImage: `url(\"${mainlineOppoImg}\")`,\r\n  },\r\n  '.card-holder__wrapper .mainLine1Bid_opportunity_img': {\r\n    backgroundImage: `url(\"${firstPositionImg}\")`,\r\n  },\r\n  '.card-holder__wrapper .competitiveBid_opportunity_img': {\r\n    backgroundImage: `url(\"${competitiveBidImg}\")`,\r\n  },\r\n  '.card-holder__wrapper .adScheduling_opportunity_img': {\r\n    backgroundImage: `url(\"${adSchedulingImg}\")`,\r\n  },\r\n  '.carouselItemCount': {\r\n    position: 'absolute',\r\n    bottom: '15px',\r\n    right: '70px',\r\n  },\r\n});\r\n","import { tokens } from '@fluentui/react-components';\r\nimport { underlineLinkStyle, crudAdStyle, helpbuttonStyle } from '@bingads-webui-campaign-react/common-styles';\r\n\r\nimport broadMatchModifierImg from '../media/tipsOpportunities/tips/broad_match_modifier.svg';\r\nimport callImg from '../media/tipsOpportunities/tips/call.svg';\r\nimport calloutExtensionsImg from '../media/tipsOpportunities/tips/callout_extensions.svg';\r\nimport convTrackingImg from '../media/tipsOpportunities/tips/conv_tracking.svg';\r\nimport createCampaignImg from '../media/tipsOpportunities/tips/create_campaign.svg';\r\nimport dynamicSearchAdsImg from '../media/tipsOpportunities/tips/dynamic_search_ads.svg';\r\nimport enhancedCpcAutobidImg from '../media/tipsOpportunities/tips/enhanced_cpc_autobid.svg';\r\nimport expandedTextAdsImg from '../media/tipsOpportunities/tips/expanded_text_ads.svg';\r\nimport googleImportImg from '../media/tipsOpportunities/tips/google_import.svg';\r\nimport kwMatchTypesImg from '../media/tipsOpportunities/tips/KW_match_types.svg';\r\nimport microsoftLogoImg from '../media/tipsOpportunities/tips/microsoft_logo.svg';\r\nimport negKeywordsImg from '../media/tipsOpportunities/tips/neg_keywords.svg';\r\nimport remarketingImg from '../media/tipsOpportunities/tips/remarketing.svg';\r\nimport reviewExtentionsImg from '../media/tipsOpportunities/tips/review_extentions.svg';\r\nimport sharedBudgetsImg from '../media/tipsOpportunities/tips/shared_budgets.svg';\r\nimport sitelinkExtensionsImg from '../media/tipsOpportunities/tips/sitelink_extensions.svg';\r\nimport structuredSnippetsImg from '../media/tipsOpportunities/tips/structured_snippets.svg';\r\nimport welcomeAddPaymentImg from '../media/tipsOpportunities/tips/welcome_add_payment.svg';\r\nimport welcomeCoachingImg from '../media/tipsOpportunities/tips/welcome_coaching.svg';\r\nimport welcomeCouponImg from '../media/tipsOpportunities/tips/welcome_coupon.svg';\r\nimport welcomeHelpImg from '../media/tipsOpportunities/tips/welcome_help.svg';\r\nimport addNewAdsImg from '../media/tipsOpportunities/opportunities/AddNewAds.svg';\r\nimport addNewKeywordImg from '../media/tipsOpportunities/opportunities/AddNewKeyword.svg';\r\nimport adSchedulingImg from '../media/tipsOpportunities/opportunities/AdScheduling.svg';\r\nimport budgetOppoImg from '../media/tipsOpportunities/opportunities/BudgetOppo.svg';\r\nimport calloutExtensionImg from '../media/tipsOpportunities/opportunities/CalloutExtension.svg';\r\nimport competitiveBidImg from '../media/tipsOpportunities/opportunities/CompetitiveBid.svg';\r\nimport firstpageOppoImg from '../media/tipsOpportunities/opportunities/FirstpageOppo.svg';\r\nimport firstPositionImg from '../media/tipsOpportunities/opportunities/FirstPosition.svg';\r\nimport googleAdImportImg from '../media/tipsOpportunities/opportunities/GAImport.svg';\r\nimport keywordBidImg from '../media/tipsOpportunities/opportunities/KeywordBid.svg';\r\nimport kwBroadMatchImg from '../media/tipsOpportunities/opportunities/KWBroadMatch.svg';\r\nimport kwBroadMatchModifierImg from '../media/tipsOpportunities/opportunities/KWBroadMatchModifier.svg';\r\nimport locationBidImg from '../media/tipsOpportunities/opportunities/LocationBid.svg';\r\nimport mainlineOppoImg from '../media/tipsOpportunities/opportunities/MainlineOppo.svg';\r\nimport remarketingBidImg from '../media/tipsOpportunities/opportunities/RemarketingBid.svg';\r\nimport sitelinkExtensionImg from '../media/tipsOpportunities/opportunities/SitelinkExtension.svg';\r\n\r\nconst tagHeight = 24;\r\n\r\nconst couponColor = '#138486';\r\nconst couponFlag = {\r\n  '& .coupon-right-aligned': {\r\n    position: 'absolute',\r\n    top: 0,\r\n    right: 0,\r\n  },\r\n  '& .coupon-tag': {\r\n    color: 'white',\r\n    display: 'flex',\r\n    height: tagHeight,\r\n    width: 'fit-content',\r\n    position: 'relative',\r\n    '& ~ .oppt_detail, & ~ .tip_image_container': {\r\n      marginTop: tagHeight,\r\n    },\r\n    '& .coupon-tag-main-triangle': {\r\n      width: 0,\r\n      height: 0,\r\n      borderStyle: 'solid',\r\n      borderWidth: [tagHeight / 2, 10],\r\n      borderColor: [couponColor, couponColor, couponColor, 'transparent'],\r\n      marginRight: -1,\r\n    },\r\n    '& .coupon-tag-message': {\r\n      backgroundColor: couponColor,\r\n      height: tagHeight,\r\n      padding: [5, 10, 5, 0],\r\n      fontSize: 10,\r\n      boxSizing: 'border-box',\r\n    },\r\n  },\r\n  '& .coupon-tag-flyout': {\r\n    '& .coupon-tag-flyout-content': {\r\n      '& .coupon-tag-flyout-line1': {\r\n        fontWeight: 'bold',\r\n      },\r\n      '& .coupon-tag-flyout-line2': {\r\n        color: tokens.colorStatusWarningForeground1,\r\n      },\r\n    },\r\n  },\r\n};\r\n\r\nexport const getTipCardFluentV2Style = palette => ({\r\n  '.tips-card-plus-fac': {\r\n    position: 'relative',\r\n    display: 'flex',\r\n  },\r\n  // estimates tile\r\n  '.recommendation-estimation-tile': {\r\n    fontSize: '12px',\r\n    lineHeight: '15px',\r\n    fontFamily: \"'Segoe UI', Arial, sans-serif\",\r\n    display: '-ms-grid',\r\n    '&.neutral-estimate': {\r\n      color: 'gray',\r\n      fontSize: 28,\r\n    },\r\n    '& .positive-estimate': {\r\n      color: '#107C10',\r\n      fontSize: 28,\r\n    },\r\n    '& .estimate-second-primary': {\r\n      marginTop: '10px',\r\n      '& .estimate-second-primary-titile': {\r\n        width: '124px',\r\n        lineHeight: '15px',\r\n        fontWeight: 'bold',\r\n        MsGridRow: 1,\r\n        gridRow: 1,\r\n      },\r\n      '& .estimate-second-primary-increase': {\r\n        width: '124px',\r\n        lineHeight: '36px',\r\n        fontWeight: 'bold',\r\n        MsGridRow: 2,\r\n        gridRow: 2,\r\n      },\r\n    },\r\n    '& .estimate-primary-titile': {\r\n      width: '124px',\r\n      lineHeight: '15px',\r\n      fontWeight: 'bold',\r\n      MsGridRow: 1,\r\n      gridRow: 1,\r\n      fontSize: '12px !important',\r\n    },\r\n    '& .estimate-primary-increase': {\r\n      width: '124px',\r\n      lineHeight: '36px',\r\n      fontWeight: 'bold',\r\n      MsGridRow: 2,\r\n      gridRow: 2,\r\n      '& .recommendation-arrow-icon': {\r\n        top: '10px',\r\n        position: 'relative',\r\n        '&:before': {\r\n          fontSize: '20px!important',\r\n        },\r\n      },\r\n    },\r\n    '& .estimate-primary-from-to': {\r\n      fontSize: '12px',\r\n      lineHeight: '15px',\r\n      width: '126px',\r\n      whiteSpace: 'pre-wrap',\r\n      MsGridRow: 3,\r\n      gridRow: 3,\r\n      color: 'gray',\r\n    },\r\n    '& .estimate-secondary': {\r\n      margin: '8px 0 0 0',\r\n      fontSize: '12px',\r\n      lineHeight: '15px',\r\n      MsGridRow: 4,\r\n      gridRow: 4,\r\n      '.estimate-secondary-value': {\r\n        fontWeight: 'bold',\r\n      },\r\n      '.estimate-secondary-title': {\r\n        fontWeight: 'normal',\r\n      },\r\n    },\r\n    '& .estimate-tertiary': {\r\n      fontSize: '12px',\r\n      lineHeight: '15px',\r\n      MsGridRow: 5,\r\n      gridRow: 5,\r\n      '& .estimate-tertiary-value': {\r\n        fontWeight: 'normal',\r\n      },\r\n      '& .estimate-tertiary-title': {\r\n        fontWeight: 'normal',\r\n      },\r\n    },\r\n    '& .estimate-cost': {\r\n      fontSize: '12px',\r\n      lineHeight: '15px',\r\n      color: 'black',\r\n      MsGridRow: 6,\r\n      gridRow: 6,\r\n      '& .estimate-cost-value': {\r\n        fontWeight: 'normal',\r\n      },\r\n      '& .estimate-cost-title': {\r\n        fontWeight: 'normal',\r\n      },\r\n    },\r\n    '& .estimate-note': {\r\n      margin: '8px 0 0 0',\r\n      fontSize: '12px',\r\n      lineHeight: '15px',\r\n      MsGridRow: 7,\r\n      gridRow: 7,\r\n      color: 'gray',\r\n    },\r\n  },\r\n  '& .summary-header-menu .bingads-popover': {\r\n    right: 5,\r\n  },\r\n  '& >.toolbar': {\r\n    marginLeft: 10,\r\n    '& .upper-toolbar': {\r\n      display: 'inline-block',\r\n    },\r\n  },\r\n  '& .empty-buttons': {\r\n    marginTop: 36,\r\n  },\r\n\r\n  // empty view\r\n  '& .empty-filter-view': {\r\n    margin: '160px',\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    justifyContent: 'center',\r\n\r\n    '& .empty-icon': {\r\n      display: 'inline-block',\r\n      marginRight: 62,\r\n\r\n      img: {\r\n        width: 200,\r\n        height: 200,\r\n      },\r\n    },\r\n\r\n    '& .empty-details': {\r\n      display: 'inline-block',\r\n      color: '#605E5C',\r\n      gridRow: '1',\r\n      gridColumn: '2',\r\n      '& .empty-title': {\r\n        fontSize: 26,\r\n        margin: '0 0 8.5px',\r\n      },\r\n      '& .empty-sub-title': {\r\n        fontSize: 14,\r\n        fontWeight: 'normal',\r\n        ...underlineLinkStyle({ palette }),\r\n      },\r\n    },\r\n  },\r\n\r\n  '.recommendation-summary-card': {\r\n    height: '278px',\r\n    width: '100%',\r\n    fontFamily: '\\'Segoe UI\\', Arial, sans-serif',\r\n    fontSize: 12,\r\n    display: 'grid',\r\n    color: '#333333',\r\n    gridTemplateColumns: '100%',\r\n    gridTemplateRows: 'repeat(4,auto)',\r\n    '& .summary-summary': {\r\n      gridRow: '1',\r\n      gridTemplateRows: 'repeat(2,auto)',\r\n      '& .summary-notification': {\r\n        '& .recommendation-notification-container': {\r\n          background: '#EFF6FC !important',\r\n          display: 'flex',\r\n          '& .recommendation-notification-text': {\r\n            maxWidth: '90%',\r\n            padding: '5px 0 5px 24px',\r\n            whiteSpace: 'nowrap',\r\n            overflow: 'hidden',\r\n            textOverflow: 'ellipsis',\r\n          },\r\n          '& .recommendation-notification-help': {\r\n            maxWidth: '10%',\r\n            padding: '5px 10px 5px 0',\r\n          },\r\n        },\r\n        '& .helpbutton': helpbuttonStyle({ palette })['.helpbutton'],\r\n        '& .helpbutton::before': { ...helpbuttonStyle({ palette })['.helpbutton::before'], top: 0 },\r\n      },\r\n      '& .summary-banner': {\r\n        background: '#DDDDDD',\r\n        gridRow: '1',\r\n        '& .summary-banner-title': {\r\n          display: 'table-cell',\r\n          verticalAlign: 'middle',\r\n          fontWeight: 'bold',\r\n          color: '#333333',\r\n          height: 30,\r\n          padding: '0px 24px',\r\n        },\r\n      },\r\n      '& .summary-summary-content': {\r\n        borderBottom: 'solid 1px #dddddd',\r\n        paddingTop: 16,\r\n        paddingBottom: 12,\r\n        display: 'grid',\r\n        gridRow: '3',\r\n        '& .summary-card-os-tag-container': {\r\n          display: 'inline-block',\r\n          marginLeft: 3,\r\n          '& .not-available-line': {\r\n            paddingLeft: 10,\r\n            paddingRight: 10,\r\n          },\r\n          '& .iconba.iconba-Trending12': {\r\n            paddingLeft: 8,\r\n            paddingRight: 8,\r\n            paddingBottom: 3,\r\n          },\r\n        },\r\n        '& .summary-info': {\r\n          gridColumn: '3',\r\n          maxHeight: '164px',\r\n          overflowY: 'auto',\r\n\r\n          '& .summary-description': {\r\n            fontSize: 16,\r\n            fontWeight: 'bold',\r\n            color: '#323130',\r\n          },\r\n          '& .summary-description-os': {\r\n            display: 'inline',\r\n          },\r\n          '& .summary-pitching': {\r\n            fontSize: 12,\r\n            fontWeight: 'normal',\r\n            color: '#484644',\r\n            marginTop: 10,\r\n            '& > span': {\r\n              ...underlineLinkStyle({ palette }),\r\n            },\r\n          },\r\n        },\r\n      },\r\n      '& .summary-estimates': {\r\n        gridColumn: '1',\r\n      },\r\n      '& .summary-overall-optimization-score': {\r\n        gridColumn: '1',\r\n        width: 124,\r\n        '& .overall-optimization-score-number': {\r\n          fontSize: 32,\r\n          color: palette.blue,\r\n          width: 124,\r\n          gridRow: 2,\r\n          fontWeight: 'bold',\r\n        },\r\n      },\r\n    },\r\n    '& .summary-sample': {\r\n      gridRow: '2',\r\n      overflowY: 'auto',\r\n      '& .recommendation-sample': {\r\n        '& .sample-insight-title': {\r\n          marginTop: 8,\r\n          fontSize: 13,\r\n          fontWeight: 'normal',\r\n          color: '#333333',\r\n        },\r\n        '& .sample-insight': {\r\n          margin: '10px 0 0 0',\r\n          fontSize: 13,\r\n          fontWeight: 'normal',\r\n          color: '#666666',\r\n        },\r\n        '& .sample-visual, & .sample-action-table': {\r\n          margin: '8px 0 0 0',\r\n        },\r\n        '& .sample-horizontal-separator': {\r\n          margin: '8px 0',\r\n          borderTop: '1px solid #ececec',\r\n        },\r\n        '& .sample-action-title': {\r\n          fontSize: 13,\r\n          fontWeight: 'normal',\r\n          color: '#333333',\r\n        },\r\n        '& .sample-more-recommendations': {\r\n          margin: '8px 0 0 0',\r\n        },\r\n      },\r\n      ...crudAdStyle({ palette }),\r\n      '& .ad-preview-header': {\r\n        padding: '0px 0 8px 0',\r\n      },\r\n      '& .recommendation-suggested-ads-column': {\r\n        '& .recommendation-summary-ad-preview': {\r\n          width: '100%',\r\n          padding: '15px 15px 15px 15px',\r\n          background: palette.white,\r\n          border: 'solid 1px #dddddd',\r\n        },\r\n      },\r\n    },\r\n    '& .summary-footer': {\r\n      bottom: '0px',\r\n      position: 'absolute',\r\n      gridRow: '4',\r\n      '& .primary-button': {\r\n        '& button': {\r\n          fontFamily: 'Arial, Helvetica, sans-serif',\r\n          fontWeight: 'bold',\r\n          fontSize: 13,\r\n          backgroundColor: palette.themePrimary,\r\n          color: palette.white,\r\n          padding: '5px 10px',\r\n          border: '1px black solid',\r\n          margin: '0 8px 0 0',\r\n          '&:hover': {\r\n            backgroundColor: '#006464',\r\n          },\r\n        },\r\n      },\r\n      '& .secondary-button': {\r\n        '& button': {\r\n          fontFamily: 'Arial, Helvetica, sans-serif',\r\n          fontWeight: 'bold',\r\n          fontSize: 13,\r\n          backgroundColor: palette.white,\r\n          color: '#000000',\r\n          padding: '5px 10px',\r\n          border: '1px black solid',\r\n          margin: '0 8px 0 0',\r\n          '&:hover': {\r\n            backgroundColor: '#a8a8a8',\r\n          },\r\n        },\r\n      },\r\n    },\r\n  },\r\n  // recommendation visual\r\n  '.action-table': {\r\n    marginTop: 8,\r\n    fontFamily: '\\'Segoe UI\\', Arial, sans-serif',\r\n    '& thead': {\r\n      '& th': {\r\n        fontSize: 12,\r\n        color: '#323130',\r\n        fontWeight: 'bold',\r\n        paddingRight: '10px',\r\n        paddingBottom: '8px',\r\n        '&:last-child': {\r\n          paddingRight: '0px',\r\n        },\r\n      },\r\n    },\r\n    '& tbody': {\r\n      '& th': {\r\n        fontSize: 12,\r\n        color: '#323130',\r\n      },\r\n    },\r\n    '& td': {\r\n      fontSize: 12,\r\n      fontWeight: 'normal',\r\n      color: '#333333',\r\n      paddingBottom: 3,\r\n      verticalAlign: 'top',\r\n      paddingRight: '10px',\r\n      'word-break': 'break-word',\r\n      '&:last-child': {\r\n        paddingRight: '0px',\r\n      },\r\n      '& .progress-bar-with-right-label': {\r\n        marginLeft: 10,\r\n        gridTemplateColumns: '80% 20%',\r\n        alignItems: 'center',\r\n        '& .progress': {\r\n          marginRight: 5,\r\n          gridRow: '1',\r\n          gridColumn: '1',\r\n        },\r\n        '& .right-label': {\r\n          gridRow: '1',\r\n          gridColumn: '2',\r\n        },\r\n      },\r\n    },\r\n  },\r\n  '& .navbar-nav': {\r\n    '& .recommendation-download': {\r\n      paddingLeft: 20,\r\n      paddingTop: 6,\r\n      marginBottom: '-15px',\r\n      '& #button-download': {\r\n        background: '#FFFFFF',\r\n        border: '1px solid #8A8886',\r\n        boxSizing: 'border-box',\r\n        borderRadius: '2px',\r\n        fontSize: '14px',\r\n        marginLeft: '770px',\r\n        zIndex: '1',\r\n      },\r\n    },\r\n  },\r\n  '& .nav-pills': {\r\n    '& li': {\r\n      border: '1px solid #505050',\r\n      '&.active, &.active a': {\r\n        backgroundColor: '#e7f0f6',\r\n        color: '#666',\r\n        fontWeight: 'bold',\r\n      },\r\n      '&:nth-child(1)': {\r\n        borderRight: '0',\r\n      },\r\n      '& a': {\r\n        padding: '5px 20px 4px 20px',\r\n        border: 'none',\r\n        fontWeight: 'normal',\r\n      },\r\n    },\r\n  },\r\n  '& .filter-editor': {\r\n    '& .selector-container': {\r\n      '& button': {\r\n        border: '1px solid #BBB',\r\n        padding: '3px 5px 5px 5px',\r\n        textAlign: 'right',\r\n      },\r\n    },\r\n    '& .selector-v2': {\r\n      width: 400,\r\n    },\r\n  },\r\n  '.tips-card': {\r\n    ...couponFlag,\r\n    display: 'flex',\r\n    minHeight: 0.1,\r\n    width: '100%',\r\n    '& .deterministic-wrapper-view': {\r\n      width: '100%',\r\n    },\r\n    '& .visuallyhidden': {\r\n      border: '0',\r\n      clip: 'rect(0 0 0 0)',\r\n      height: '1px',\r\n      margin: '-1px',\r\n      overflow: 'hidden',\r\n      padding: '0',\r\n      position: 'absolute',\r\n      width: '1px',\r\n    },\r\n    '& .tipsCarousel': {\r\n      height: 'auto',\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      width: '100%',\r\n      '& .carousel-inner': {\r\n        display: 'flex',\r\n        padding: '0',\r\n        height: '270px',\r\n        overflow: 'unset',\r\n        '@media (-webkit-transform-3d), (transform-3d)': {\r\n          '&>.item': {\r\n            transition: 'transform .6s ease-in-out',\r\n            backfaceVisibility: 'hidden',\r\n            perspective: '1000px',\r\n          },\r\n          '&>.item.active': {\r\n            transform: 'translateZ(0)',\r\n            left: 0,\r\n          },\r\n        },\r\n        '& .item.active': {\r\n          // workaround to show recommendation footer button in new overview card\r\n          overflow: 'visible',\r\n        },\r\n\r\n        '& .summary-footer': {\r\n          // we will move position of footer button, we don't want to block the carousel button\r\n          width: '50%',\r\n          '& .btn-default': {\r\n            display: 'none',\r\n          },\r\n          '& .btn-primary': {\r\n            width: '100% !important',\r\n            'overflow-x': 'clip',\r\n            'text-overflow': 'ellipsis',\r\n            position: 'relative',\r\n            top: '7px',\r\n            fontWeight: 'bold',\r\n            fontSize: 14,\r\n            height: '32px',\r\n            backgroundColor: palette.white,\r\n            color: palette.black,\r\n            padding: '6px 19px',\r\n            borderRadius: '4px',\r\n            border: '1px solid #d1d1d1',\r\n            '&:hover': {\r\n              backgroundColor: '#f3f2f1',\r\n            },\r\n            '&:focus': {\r\n              border: `1px solid ${palette.black}`,\r\n            },\r\n          },\r\n        },\r\n      },\r\n      '& .carousel-inner .item': {\r\n        flex: '1',\r\n        height: 'auto',\r\n        minWidth: 1,\r\n        overflow: 'hidden',\r\n        width: '100%',\r\n      },\r\n      '& .carousel-inner .carousel__tip_content': {\r\n        display: 'flex',\r\n        flex: '1',\r\n        flexDirection: 'column',\r\n        height: '270px',\r\n      },\r\n      '& .carousel-inner .carousel__tip_content .tip_text_content': {\r\n        display: 'flex',\r\n        flex: '3 3 150px',\r\n        flexDirection: 'column',\r\n      },\r\n      '& .carousel-inner .carousel__tip_content .tip_text_content .tip_title': {\r\n        textDecoration: 'none',\r\n        margin: '12px 0px',\r\n        overflow: 'hidden',\r\n        flex: '0 1 auto',\r\n        minHeight: 1,\r\n        lineHeight: 'normal',\r\n        fontSize: '18px',\r\n        fontWeight: '600',\r\n      },\r\n      '& .carousel-inner .carousel__tip_content .tip_text_content .tip_description__wrapper': {\r\n        display: 'block',\r\n        flex: '1 100',\r\n        overflow: 'hidden',\r\n      },\r\n      '& .carousel-inner .carousel__tip_content .tip_text_content .tip_description__wrapper .tip_description': {\r\n        lineHeight: '20px',\r\n        height: 'auto',\r\n        overflow: 'hidden',\r\n        fontSize: '14px',\r\n        fontWeight: 'normal',\r\n        margin: '0',\r\n      },\r\n      '& .carousel-inner .tip_links': {\r\n        marginTop: 8,\r\n        display: 'flex',\r\n        width: 'fit-content',\r\n      },\r\n      '& .carousel-inner .tip_links .linkButton': {\r\n        lineHeight: '30px',\r\n      },\r\n      '& .carousel-inner .tip_links .tip_clickLink': {\r\n        flex: '0 0 auto',\r\n        '&.secondary_ClickLink': {\r\n          marginLeft: 8,\r\n        },\r\n      },\r\n      '& .carousel-inner .tip_links .tip_dismissLink': {\r\n        marginLeft: 30,\r\n        paddingTop: 5,\r\n      },\r\n      '& .carousel-inner .tip_links .tip_dismissLink a': {\r\n        position: 'relative',\r\n        color: '#1570A5',\r\n      },\r\n      '& .carousel-inner .carousel__tip_content .tip_image_container': {\r\n        flex: '2 2 100px',\r\n        minWidth: '0.1px',\r\n        display: 'flex',\r\n        justifyContent: 'flex-end',\r\n        marginTop: '1px',\r\n        flexDirection: 'column',\r\n      },\r\n      '& .carousel-inner .carousel__tip_content .tip_image_container .tip_image': {\r\n        flex: '1',\r\n        backgroundRepeat: 'no-repeat',\r\n        backgroundSize: 'contain',\r\n        backgroundPosition: 'center center',\r\n      },\r\n      '& .carousel-inner .empty_content': {\r\n        margin: '20px 10px 0',\r\n      },\r\n    },\r\n  },\r\n  '.tips-card .import_tip_img': {\r\n    backgroundImage: `url(\"${googleImportImg}\")`,\r\n  },\r\n  '.tips-card .broadMatch_tip_img': {\r\n    backgroundImage: `url(\"${broadMatchModifierImg}\")`,\r\n  },\r\n  '.tips-card .exta_tip_img': {\r\n    backgroundImage: `url(\"${expandedTextAdsImg}\")`,\r\n  },\r\n  '.tips-card .sitelinks_tip_img': {\r\n    backgroundImage: `url(\"${sitelinkExtensionsImg}\")`,\r\n  },\r\n  '.tips-card .callouts_tip_img': {\r\n    backgroundImage: `url(\"${calloutExtensionsImg}\")`,\r\n  },\r\n  '.tips-card .structSnip_tip_img': {\r\n    backgroundImage: `url(\"${structuredSnippetsImg}\")`,\r\n  },\r\n  '.tips-card .dsa_tip_img': {\r\n    backgroundImage: `url(\"${dynamicSearchAdsImg}\")`,\r\n  },\r\n  '.tips-card .conversionTracking_tip_img': {\r\n    backgroundImage: `url(\"${convTrackingImg}\")`,\r\n  },\r\n  '.tips-card .remarketing_tip_img': {\r\n    backgroundImage: `url(\"${remarketingImg}\")`,\r\n  },\r\n  '.tips-card .autoBid_tip_img': {\r\n    backgroundImage: `url(\"${enhancedCpcAutobidImg}\")`,\r\n  },\r\n  '.tips-card .sharedBudgets_tip_img': {\r\n    backgroundImage: `url(\"${sharedBudgetsImg}\")`,\r\n  },\r\n  '.tips-card .call_tip_img': {\r\n    backgroundImage: `url(\"${callImg}\")`,\r\n  },\r\n  '.tips-card .reviews_tip_img': {\r\n    backgroundImage: `url(\"${reviewExtentionsImg}\")`,\r\n  },\r\n  '.tips-card .kWMatchType_tip_img': {\r\n    backgroundImage: `url(\"${kwMatchTypesImg}\")`,\r\n  },\r\n  '.tips-card .negKW_tip_img': {\r\n    backgroundImage: `url(\"${negKeywordsImg}\")`,\r\n  },\r\n  '.tips-card .optiConsult_tip_img': {\r\n    backgroundImage: `url(\"${microsoftLogoImg}\")`,\r\n  },\r\n  '.tips-card .welcome_microsoft_logo_tip_img': {\r\n    backgroundImage: `url(\"${microsoftLogoImg}\")`,\r\n  },\r\n  '.tips-card .welcome_create_campaign_tip_img': {\r\n    backgroundImage: `url(\"${createCampaignImg}\")`,\r\n  },\r\n  '.tips-card .welcome_coaching_tip_img': {\r\n    backgroundImage: `url(\"${welcomeCoachingImg}\")`,\r\n  },\r\n  '.tips-card .welcome_coupon_tip_img': {\r\n    backgroundImage: `url(\"${welcomeCouponImg}\")`,\r\n  },\r\n  '.tips-card .welcome_add_payment_tip_img': {\r\n    backgroundImage: `url(\"${welcomeAddPaymentImg}\")`,\r\n  },\r\n  '.tips-card .welcome_help_tip_img': {\r\n    backgroundImage: `url(\"${welcomeHelpImg}\")`,\r\n  },\r\n  '.tips-card .addNewAds_opportunity_img': {\r\n    backgroundImage: `url(\"${addNewAdsImg}\")`,\r\n  },\r\n  '.tips-card .remarketingBid_opportunity_img': {\r\n    backgroundImage: `url(\"${remarketingBidImg}\")`,\r\n  },\r\n  '.tips-card .locationBid_opportunity_img': {\r\n    backgroundImage: `url(\"${locationBidImg}\")`,\r\n  },\r\n  '.tips-card .keyword_opportunity_img': {\r\n    backgroundImage: `url(\"${addNewKeywordImg}\")`,\r\n  },\r\n  '.tips-card .keywordBidAdjustment_opportunity_img': {\r\n    backgroundImage: `url(\"${keywordBidImg}\")`,\r\n  },\r\n  '.tips-card .googleImport_opportunity_img': {\r\n    backgroundImage: `url(\"${googleAdImportImg}\")`,\r\n  },\r\n  '.tips-card .sitelink_opportunity_img': {\r\n    backgroundImage: `url(\"${sitelinkExtensionImg}\")`,\r\n  },\r\n  '.tips-card .callout_opportunity_img': {\r\n    backgroundImage: `url(\"${calloutExtensionImg}\")`,\r\n  },\r\n  '.tips-card .budget_opportunity_img': {\r\n    backgroundImage: `url(\"${budgetOppoImg}\")`,\r\n  },\r\n  '.tips-card .broadMatchKeyword_opportunity_img': {\r\n    backgroundImage: `url(\"${kwBroadMatchImg}\")`,\r\n  },\r\n  '.tips-card .broadMatchModifierKeyword_opportunity_img': {\r\n    backgroundImage: `url(\"${kwBroadMatchModifierImg}\")`,\r\n  },\r\n  '.tips-card .firstPage_opportunity_img': {\r\n    backgroundImage: `url(\"${firstpageOppoImg}\")`,\r\n  },\r\n  '.tips-card .mainLineBid_opportunity_img': {\r\n    backgroundImage: `url(\"${mainlineOppoImg}\")`,\r\n  },\r\n  '.tips-card .mainLine1Bid_opportunity_img': {\r\n    backgroundImage: `url(\"${firstPositionImg}\")`,\r\n  },\r\n  '.tips-card .competitiveBid_opportunity_img': {\r\n    backgroundImage: `url(\"${competitiveBidImg}\")`,\r\n  },\r\n  '.tips-card .adScheduling_opportunity_img': {\r\n    backgroundImage: `url(\"${adSchedulingImg}\")`,\r\n  },\r\n});\r\n","import { helpbuttonStyle, convertToLocalStyle, getFluctuationPopupStyle, getFluctuationLoadingStyle } from '@bingads-webui-campaign-react/common-styles';\r\n\r\nexport const getTopChangeCardStyle = palette => ({\r\n  '@global': {\r\n    ...getFluctuationPopupStyle({ palette }),\r\n    ...getFluctuationLoadingStyle(),\r\n    '.bingads-fluctuation-wrapper .card-holder__wrapper': {\r\n      minWidth: '20px !important',\r\n      border: 'none !important',\r\n      flexDirection: 'row !important',\r\n      boxShadow: 'none !important',\r\n      marginBottom: -4,\r\n\r\n      '& .left.carousel-control': {\r\n        left: '5px !important',\r\n      },\r\n\r\n      '& .right.carousel-control': {\r\n        right: '0px !important',\r\n        width: '35px !important',\r\n      },\r\n    },\r\n  },\r\n  '.top-changes-card': {\r\n    paddingBottom: 16,\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    fontSize: 12,\r\n    minHeight: 1,\r\n\r\n    ...convertToLocalStyle(helpbuttonStyle({ palette })),\r\n    '& .top-changes-card-header': {\r\n      display: 'flex',\r\n      margin: '15px 0 0px',\r\n      alignItems: 'flex-start',\r\n      '& .popComparisonRange': {\r\n        flex: '1',\r\n        marginRight: 15,\r\n        color: palette.neutralSecondary,\r\n      },\r\n      '& .popComparisonRange .helpbutton': {\r\n        marginLeft: 5,\r\n      },\r\n      '& .top-changes-card_metric': {\r\n        flex: '0',\r\n      },\r\n      '& .metric-container': {\r\n        marginRight: 20,\r\n      },\r\n    },\r\n    '& .top-change-grid-container': {\r\n      display: 'flex',\r\n      flex: '1 1',\r\n      justifyContent: 'center',\r\n      overflowY: 'auto',\r\n      overflowX: 'hidden',\r\n      '& .top-change-empty': {\r\n        alignSelf: 'center',\r\n        fontSize: '14px',\r\n      },\r\n      '& .top-change-grid': {\r\n        display: 'grid',\r\n        gridTemplateColumns: 'minmax(0, 33.33%) minmax(0, 16.67%) minmax(0, 16.67%) minmax(max-content, 1fr) minmax(max-content, max-content) minmax(max-content, max-content)',\r\n        alignItems: 'stretch',\r\n        flex: '1',\r\n        alignSelf: 'flex-start',\r\n\r\n        '& .top-change-grid-row-20': {\r\n          gridRow: '20',\r\n          borderTop: `1px solid ${palette.neutralLighter}`,\r\n        },\r\n        '& .top-change-grid-row-19': {\r\n          gridRow: '19',\r\n          borderTop: `1px solid ${palette.neutralLighter}`,\r\n        },\r\n        '& .top-change-grid-row-18': {\r\n          gridRow: '18',\r\n          borderTop: `1px solid ${palette.neutralLighter}`,\r\n        },\r\n        '& .top-change-grid-row-17': {\r\n          gridRow: '17',\r\n          borderTop: `1px solid ${palette.neutralLighter}`,\r\n        },\r\n        '& .top-change-grid-row-16': {\r\n          gridRow: '16',\r\n          borderTop: `1px solid ${palette.neutralLighter}`,\r\n        },\r\n        '& .top-change-grid-row-15': {\r\n          gridRow: '15',\r\n          borderTop: `1px solid ${palette.neutralLighter}`,\r\n        },\r\n        '& .top-change-grid-row-14': {\r\n          gridRow: '14',\r\n          borderTop: `1px solid ${palette.neutralLighter}`,\r\n        },\r\n        '& .top-change-grid-row-13': {\r\n          gridRow: '13',\r\n          borderTop: `1px solid ${palette.neutralLighter}`,\r\n        },\r\n        '& .top-change-grid-row-12': {\r\n          gridRow: '12',\r\n          borderTop: `1px solid ${palette.neutralLighter}`,\r\n        },\r\n        '& .top-change-grid-row-11': {\r\n          gridRow: '11',\r\n          borderTop: `1px solid ${palette.neutralLighter}`,\r\n        },\r\n        '& .top-change-grid-row-10': {\r\n          gridRow: '10',\r\n          borderTop: `1px solid ${palette.neutralLighter}`,\r\n        },\r\n        '& .top-change-grid-row-9': {\r\n          gridRow: '9',\r\n          borderTop: `1px solid ${palette.neutralLighter}`,\r\n        },\r\n        '& .top-change-grid-row-8': {\r\n          gridRow: '8',\r\n          borderTop: `1px solid ${palette.neutralLighter}`,\r\n        },\r\n        '& .top-change-grid-row-7': {\r\n          gridRow: '7',\r\n          borderTop: `1px solid ${palette.neutralLighter}`,\r\n        },\r\n        '& .top-change-grid-row-6': {\r\n          gridRow: '6',\r\n          borderTop: `1px solid ${palette.neutralLighter}`,\r\n        },\r\n        '& .top-change-grid-row-5': {\r\n          gridRow: '5',\r\n          borderTop: `1px solid ${palette.neutralLighter}`,\r\n        },\r\n        '& .top-change-grid-row-4': {\r\n          gridRow: '4',\r\n          borderTop: `1px solid ${palette.neutralLighter}`,\r\n        },\r\n        '& .top-change-grid-row-3': {\r\n          gridRow: '3',\r\n          borderTop: `1px solid ${palette.neutralLighter}`,\r\n        },\r\n        '& .top-change-grid-row-2': {\r\n          gridRow: '2',\r\n          borderTop: `1px solid ${palette.neutralLighter}`,\r\n        },\r\n        '& .top-change-grid-row-1': {\r\n          gridRow: '1',\r\n          borderTop: `1px solid ${palette.neutralLighter}`,\r\n        },\r\n        '& .top-change-entity-name': {\r\n          gridColumn: '1',\r\n          borderRight: '1px solid #EFEFEF',\r\n          display: 'flex',\r\n          alignItems: 'center',\r\n          minHeight: 48,\r\n          paddingLeft: 10,\r\n          paddingRight: 10,\r\n        },\r\n        '& .top-change-entity-name .status': {\r\n          marginRight: 5,\r\n        },\r\n        '& .top-change-entity-name a': {\r\n          overflow: 'hidden',\r\n          textOverflow: 'ellipsis',\r\n          minWidth: 1,\r\n          whiteSpace: 'nowrap',\r\n        },\r\n        '& .top-change-graph-decline': {\r\n          gridColumn: '2',\r\n          borderRight: '1px solid #CBCBCB',\r\n          padding: '5px 0 5px 5px',\r\n          display: 'flex',\r\n          alignItems: 'center',\r\n          backgroundColor: palette.neutralLighter,\r\n        },\r\n        '& .top-change-graph-decline .decline-box': {\r\n          display: 'flex',\r\n          height: 30,\r\n          width: '100%',\r\n        },\r\n        '& .top-change-graph-decline .decline-box .graph-bar': {\r\n          backgroundColor: palette.themePrimary,\r\n        },\r\n        '& .top-change-graph-increase': {\r\n          gridColumn: '3',\r\n          borderRight: '1px solid #EFEFEF',\r\n          padding: '5px 5px 5px 0',\r\n          display: 'flex',\r\n          alignItems: 'center',\r\n          backgroundColor: palette.neutralLighter,\r\n        },\r\n        '& .top-change-graph-increase .increase-box': {\r\n          display: 'flex',\r\n          height: 30,\r\n          width: '100%',\r\n        },\r\n        '& .top-change-graph-increase .increase-box .graph-bar': {\r\n          backgroundColor: '#01188F',\r\n        },\r\n        '& .insight-hover-target .hover-content': {\r\n          top: '0 !important',\r\n          width: 140,\r\n          right: 'auto !important',\r\n        },\r\n        '& .mcc-perf-fluctuation-bulb-container:hover .hover-container': {\r\n          display: 'block',\r\n          position: 'relative',\r\n          left: 'calc(-50% - 30px)',\r\n        },\r\n        '& .mcc-perf-fluctuation-bulb-container': {\r\n          gridColumn: '4',\r\n\r\n          '& .mcc-perf-fluctuation-bulb': {\r\n            padding: 10,\r\n            width: 30,\r\n            cursor: 'pointer',\r\n          },\r\n\r\n          '& .mcc-perf-fluctuation-bulb:before': {\r\n            fontFamily: 'MsAds MDL2 Assets',\r\n            color: '#0078D4',\r\n            fontSize: 16,\r\n          },\r\n        },\r\n        '& .pop-change': {\r\n          gridColumn: '5',\r\n          fontSize: 15,\r\n          color: palette.neutralPrimary,\r\n          paddingLeft: 10,\r\n          paddingTop: 12,\r\n          textAlign: 'right',\r\n        },\r\n        '& .pop-change-percentage': {\r\n          gridColumn: '6',\r\n          fontSize: 12,\r\n          color: palette.neutralSecondary,\r\n          paddingLeft: 15,\r\n          paddingTop: 15,\r\n          textAlign: 'right',\r\n        },\r\n        '& .pop-range': {\r\n          gridColumn: '7',\r\n          fontSize: 12,\r\n          color: palette.neutralSecondary,\r\n          paddingLeft: 15,\r\n          paddingRight: 26,\r\n          paddingTop: 15,\r\n          textAlign: 'right',\r\n        },\r\n        '& .graph-hover-target': {\r\n          gridColumn: '2 / span 2',\r\n          background: 'none',\r\n          zIndex: '1',\r\n          border: 'none !important',\r\n        },\r\n        '& .pop-hover-target': {\r\n          gridColumn: '5 / span 2',\r\n          background: 'none',\r\n          zIndex: '1',\r\n          border: 'none !important',\r\n        },\r\n        '& .graph-hover-target:hover .hover-container': {\r\n          display: 'block',\r\n        },\r\n        '& .pop-hover-target:hover .hover-container': {\r\n          display: 'block',\r\n        },\r\n        '& .kpi-increased .bar-icon': {\r\n          display: 'inline-block',\r\n          backgroundColor: '#01188F',\r\n        },\r\n        '& .kpi-declined .bar-icon': {\r\n          display: 'inline-block',\r\n          backgroundColor: '#0078D7',\r\n        },\r\n        '& .bar-icon': {\r\n          display: 'none',\r\n          width: 12,\r\n          height: 12,\r\n          marginRight: 3,\r\n        },\r\n        '& .pop-hover-target .hover-container .hover-content': {\r\n          right: '-150px',\r\n        },\r\n        '& .graph-hover-target .hover-container .hover-content': {\r\n          left: '-150px',\r\n        },\r\n        '& .hover-container': {\r\n          position: 'absolute',\r\n          display: 'none',\r\n          fontSize: 12,\r\n          color: '#333333',\r\n          width: '0',\r\n          height: '0',\r\n          marginLeft: 5,\r\n\r\n          '& .hover-content': {\r\n            position: 'absolute',\r\n            zIndex: '10',\r\n            padding: 15,\r\n            bottom: '0',\r\n            borderRadius: 2,\r\n            boxShadow: '0 3.2px 7.2px 0 rgba(0,0,0,.132), 0 0.6px 1.8px 0 rgba(0,0,0,.108)',\r\n            backgroundColor: 'rgba(255, 255, 255, 0.95)',\r\n            '@supports (backdrop-filter: blur(60px))': {\r\n              backdropFilter: 'blur(60px)',\r\n              backgroundColor: 'rgba(255, 255, 255, 0.25)',\r\n            },\r\n          },\r\n          '& .hover-content:hover': {\r\n            display: 'none',\r\n          },\r\n          '& .hover-content .entity-name': {\r\n            wordBreak: 'break-all',\r\n            paddingBottom: 10,\r\n          },\r\n          '& .hover-content .kpi-grid': {\r\n            display: 'grid',\r\n            gridTemplateColumns: 'minmax(max-content, max-content) minmax(max-content, max-content)',\r\n          },\r\n          '& .hover-content .kpi-grid .kpi-date-range': {\r\n            paddingBottom: 10,\r\n          },\r\n          '& .hover-content .kpi-grid .kpi-data': {\r\n            fontWeight: 'bold',\r\n          },\r\n          '& .hover-content .kpi-grid .kpi-current': {\r\n            maxWidth: '240px',\r\n            gridRow: '1',\r\n            gridColumn: '1',\r\n            borderRight: '1px solid #DDDDDD',\r\n            paddingRight: 15,\r\n          },\r\n          '& .hover-content .kpi-grid .kpi-comparison': {\r\n            maxWidth: '240px',\r\n            gridColumn: '2',\r\n            paddingLeft: 15,\r\n          },\r\n          '& .hover-content .kpi-grid .kpi-change': {\r\n            gridRow: '2',\r\n            gridColumn: '1 / span 2',\r\n            paddingTop: 10,\r\n            display: 'flex',\r\n            alignItems: 'center',\r\n          },\r\n        },\r\n        '& .top-change-grid-row-1 .hover-container .hover-content, .top-change-grid-row-2 .hover-container .hover-content': {\r\n          top: 48,\r\n          bottom: 'auto',\r\n        },\r\n      },\r\n      '& .scroll-bar-cover': {\r\n        position: 'absolute',\r\n        background: 'white',\r\n      },\r\n      '&:hover .scroll-bar-cover': {\r\n        display: 'none',\r\n      },\r\n    },\r\n    '& .entity-links': {\r\n      marginTop: 10,\r\n    },\r\n    '& .entity-links .view-all-clickLink': {\r\n      flex: '0 0 auto',\r\n    },\r\n    '& .metric-picker': {\r\n      padding: '0',\r\n      border: '0',\r\n      fontWeight: '600',\r\n      margin: '0',\r\n      fontSize: 12,\r\n      lineHeight: 'normal',\r\n      fallbacks: [\r\n        {\r\n          fontWeight: 'normal',\r\n        },\r\n      ],\r\n    },\r\n  },\r\n});\r\n","export const getTopLocationCardStyle = palette => ({\r\n  '.top-locations-card': {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    justifyContent: 'space-between',\r\n    marginTop: 35,\r\n    marginBottom: 55,\r\n  },\r\n  '.top-locations-card .metric-picker-container': {\r\n    display: 'flex',\r\n    justifyContent: 'flex-end',\r\n    height: '0',\r\n    flex: '0',\r\n    position: 'relative',\r\n    top: -32,\r\n    right: 0,\r\n  },\r\n  '.top-locations-card .metric-picker-container .metric-picker': {\r\n    padding: '0',\r\n    border: '0',\r\n    fontWeight: '400',\r\n    margin: '0',\r\n    fontSize: 12,\r\n    lineHeight: 'normal',\r\n  },\r\n  '.top-locations-card .location-data': {\r\n    flex: '1',\r\n    flexBasis: 1,\r\n    minHeight: 1,\r\n    display: 'flex',\r\n    position: 'relative',\r\n  },\r\n  '.top-locations-card .location-data .location-map': {\r\n    display: 'flex',\r\n    flex: '6',\r\n  },\r\n  '.top-locations-card .location-data .location-map>div': {\r\n    flex: '1',\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n  },\r\n  '.top-locations-card .location-data .location-map>div .map-container-wrapper': {\r\n    flex: '1',\r\n    display: 'flex',\r\n  },\r\n  '.top-locations-card .location-data .location-map>div .map-container-wrapper .map-container': {\r\n    flex: '1',\r\n    position: 'relative',\r\n  },\r\n  '.top-locations-card .location-data .location-map>div .map-container-wrapper .map-container .MicrosoftMap': {\r\n    position: 'absolute !important',\r\n    left: 0,\r\n    right: 0,\r\n    top: 0,\r\n    bottom: 0,\r\n    width: 'inherit !important',\r\n    height: 'inherit !important',\r\n  },\r\n  '.top-locations-card .location-data .location-map>div .map-container-wrapper .map-container .tool-tip-container': {\r\n    padding: 15,\r\n    boxShadow: '0 3.2px 7.2px 0 rgba(0,0,0,.132), 0 0.6px 1.8px 0 rgba(0,0,0,.108)',\r\n    backgroundColor: 'rgba(255, 255, 255, 0.95)',\r\n    '@supports (backdrop-filter: blur(60px))': {\r\n      backdropFilter: 'blur(60px)',\r\n      backgroundColor: 'rgba(255, 255, 255, 0.25)',\r\n    },\r\n  },\r\n  '.top-locations-card .location-data .location-map>div .map-container-wrapper .map-container .tool-tip-container .date-range': {\r\n    whiteSpace: 'nowrap',\r\n    margin: '10px 0',\r\n  },\r\n  '.top-locations-card .location-data .location-map>div .map-container-wrapper .map-container .tool-tip-container .metric-container': {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n  },\r\n  '.top-locations-card .location-data .location-map>div .map-container-wrapper .map-container .tool-tip-container .metric-container .metric-name': {\r\n    marginRight: 5,\r\n  },\r\n  '.top-locations-card .location-data .location-map>div .map-container-wrapper .map-container .tool-tip-container .metric-container .metric-value': {\r\n    fontWeight: 'bold',\r\n  },\r\n  '.top-locations-card .location-data .location-map>div .zoom-to-all': {\r\n    display: 'none',\r\n  },\r\n  '.top-locations-card .location-data .data-container': {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    flex: '4',\r\n  },\r\n  '.top-locations-card .location-data .data-container .grid-row-hover': {\r\n    backgroundColor: `${palette.neutralLighter} !important`,\r\n  },\r\n  '.top-locations-card .location-data .data-container .data-grid-row-10': {\r\n    '-ms-grid-row': '10',\r\n    gridRow: '10',\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n  },\r\n  '.top-locations-card .location-data .data-container .data-grid-row-9': {\r\n    '-ms-grid-row': '9',\r\n    gridRow: '9',\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n  },\r\n  '.top-locations-card .location-data .data-container .data-grid-row-8': {\r\n    '-ms-grid-row': '8',\r\n    gridRow: '8',\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n  },\r\n  '.top-locations-card .location-data .data-container .data-grid-row-7': {\r\n    '-ms-grid-row': '7',\r\n    gridRow: '7',\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n  },\r\n  '.top-locations-card .location-data .data-container .data-grid-row-6': {\r\n    '-ms-grid-row': '6',\r\n    gridRow: '6',\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n  },\r\n  '.top-locations-card .location-data .data-container .data-grid-row-5': {\r\n    '-ms-grid-row': '5',\r\n    gridRow: '5',\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n  },\r\n  '.top-locations-card .location-data .data-container .data-grid-row-4': {\r\n    '-ms-grid-row': '4',\r\n    gridRow: '4',\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n  },\r\n  '.top-locations-card .location-data .data-container .data-grid-row-3': {\r\n    '-ms-grid-row': '3',\r\n    gridRow: '3',\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n  },\r\n  '.top-locations-card .location-data .data-container .data-grid-row-2': {\r\n    '-ms-grid-row': '2',\r\n    gridRow: '2',\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n  },\r\n  '.top-locations-card .location-data .data-container .data-grid-row-1': {\r\n    '-ms-grid-row': '1',\r\n    gridRow: '1',\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    borderTop: `1px solid ${palette.neutralLighter}`,\r\n  },\r\n  '.top-locations-card .location-data .data-container .scroll-container': {\r\n    overflowY: 'auto',\r\n    flex: '1',\r\n  },\r\n  '.top-locations-card .location-data .data-container .scroll-container .data-grid': {\r\n    display: 'grid',\r\n    fallbacks: [\r\n      {\r\n        display: '-ms-grid',\r\n      },\r\n    ],\r\n    alignSelf: 'flex-start',\r\n    overflowY: 'auto',\r\n    '-ms-grid-template-columns': '1fr auto',\r\n    gridTemplateColumns: '1fr auto',\r\n  },\r\n  '.top-locations-card .location-data .data-container .scroll-container .data-grid .location-name': {\r\n    padding: '0 10px',\r\n    height: 42,\r\n    whiteSpace: 'nowrap',\r\n    overflow: 'hidden',\r\n    textOverflow: 'ellipsis',\r\n    '-ms-grid-column': '1',\r\n    gridColumn: '1',\r\n    marginLeft: 10,\r\n    borderBottom: `1px solid ${palette.neutralLighter}`,\r\n  },\r\n  '.top-locations-card .location-data .data-container .scroll-container .data-grid .kpi': {\r\n    justifyContent: 'flex-end',\r\n    paddingRight: 10,\r\n    '-ms-grid-column': '2',\r\n    gridColumn: '2',\r\n    borderBottom: `1px solid ${palette.neutralLighter}`,\r\n  },\r\n  '.top-locations-card .location-data .data-container .recommendation-container': {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    margin: '10px 0 10px 10px',\r\n  },\r\n  '.top-locations-card .location-data .data-container .recommendation-container .recommendation-icon-container': {\r\n    display: 'flex',\r\n    flexShrink: '0',\r\n    alignItems: 'center',\r\n    justifyContent: 'center',\r\n    marginRight: 5,\r\n    border: '1px solid #1570A6',\r\n    backgroundColor: '#e5f5fb',\r\n    width: 30,\r\n    height: 30,\r\n  },\r\n  '.top-locations-card .location-data .data-container .recommendation-container .recommendation-icon-container .recommendation-light-bulb': {\r\n    color: '#1570A6 !important',\r\n  },\r\n  '.top-locations-card .location-data .data-container .recommendation-container .recommendation-icon-container .recommendation-light-bulb:before': {\r\n    fontSize: '16px !important',\r\n  },\r\n  '.top-locations-card .location-data .data-container .recommendation-container .msg': {\r\n    display: 'inline',\r\n    color: '#006464',\r\n  },\r\n  '.top-locations-card .location-data .data-container .recommendation-container .view-recommendations, .top-locations-card .location-data .data-container .recommendation-container .dismiss-recommendations': {\r\n    color: '#1570A6',\r\n  },\r\n  '.top-locations-card .location-data .data-container:hover .scroll-bar-cover': {\r\n    display: 'none',\r\n  },\r\n  '.top-locations-card .location-data .data-container .scroll-bar-cover': {\r\n    position: 'absolute',\r\n    background: 'white',\r\n    right: '0',\r\n    top: '0',\r\n    overflow: 'hidden',\r\n  },\r\n  '.top-locations-card .location-data .data-container .scroll-bar-cover .block-container': {\r\n    position: 'absolute',\r\n    width: '100%',\r\n  },\r\n  '.top-locations-card .location-data .data-container .scroll-bar-cover .block-container .cover-block': {\r\n    height: 42,\r\n  },\r\n  '.top-locations-card .location-links': {\r\n    alignItems: 'baseline',\r\n    display: 'flex',\r\n    justifyContent: 'space-between',\r\n    height: '0',\r\n    position: 'relative',\r\n    top: 10,\r\n    flex: '0 0 auto',\r\n  },\r\n  '.top-locations-card .location-links .view-picker-clickLink': {\r\n    display: 'none',\r\n  },\r\n  '.top-locations-card .bubble-icon': {\r\n    width: 12,\r\n    height: 12,\r\n    border: '1px solid #107C10',\r\n    borderRadius: 6,\r\n    marginRight: 5,\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    justifyContent: 'center',\r\n  },\r\n  '.top-locations-card .bubble-icon .dot': {\r\n    width: 2,\r\n    height: 2,\r\n    border: '2px solid #107C10',\r\n    borderRadius: 2,\r\n  },\r\n  '.card-holder__wrapper .small_layout .location-map': {\r\n    display: 'none',\r\n  },\r\n  '.card-holder__wrapper .small_layout.top-locations-card .location-data .data-container .scroll-container .data-grid .location-name': {\r\n    marginLeft: 0,\r\n  },\r\n  '.card-holder__wrapper .small_layout .data-container': {\r\n    display: 'none',\r\n    flex: '1',\r\n  },\r\n  '.card-holder__wrapper .small_layout .location-links .view-picker-clickLink': {\r\n    display: 'block',\r\n    cursor: 'pointer',\r\n  },\r\n});\r\n","export const getTopLocationCardFluentV2Style = palette => ({\r\n  '.top-locations-card': {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    justifyContent: 'space-between',\r\n    height: '100%',\r\n  },\r\n  '.top-locations-card .metric-picker-container': {\r\n    display: 'flex',\r\n    justifyContent: 'flex-end',\r\n    position: 'relative',\r\n  },\r\n  '.top-locations-card .metric-picker-container .metric-picker': {\r\n    padding: '0',\r\n    border: '0',\r\n    fontWeight: '400',\r\n    margin: '0',\r\n    fontSize: 12,\r\n    lineHeight: 'normal',\r\n  },\r\n  '.top-locations-card .metric-picker.open .dropdown-menu': {\r\n    zIndex: 110,\r\n  },\r\n  '.top-locations-card .location-data': {\r\n    flex: '1',\r\n    flexBasis: 1,\r\n    minHeight: 1,\r\n    display: 'flex',\r\n    position: 'relative',\r\n  },\r\n  '.top-locations-card .location-data .location-map': {\r\n    display: 'flex',\r\n    flex: '6',\r\n  },\r\n  '.top-locations-card .location-data .location-map>div': {\r\n    flex: '1',\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n  },\r\n  '.top-locations-card .location-data .location-map>div .map-container-wrapper': {\r\n    flex: '1',\r\n    display: 'flex',\r\n  },\r\n  '.top-locations-card .location-data .location-map>div .map-container-wrapper .map-container': {\r\n    flex: '1',\r\n    position: 'relative',\r\n  },\r\n  '.top-locations-card .location-data .location-map>div .map-container-wrapper .map-container .MicrosoftMap': {\r\n    position: 'absolute !important',\r\n    left: 0,\r\n    right: 0,\r\n    top: 0,\r\n    bottom: 0,\r\n    width: 'inherit !important',\r\n    height: 'inherit !important',\r\n  },\r\n  '.top-locations-card .location-data .location-map>div .map-container-wrapper .map-container .tool-tip-container': {\r\n    padding: 15,\r\n    boxShadow: '0 3.2px 7.2px 0 rgba(0,0,0,.132), 0 0.6px 1.8px 0 rgba(0,0,0,.108)',\r\n    backgroundColor: 'rgba(255, 255, 255, 0.95)',\r\n    '@supports (backdrop-filter: blur(60px))': {\r\n      backdropFilter: 'blur(60px)',\r\n      backgroundColor: 'rgba(255, 255, 255, 0.25)',\r\n    },\r\n  },\r\n  '.top-locations-card .location-data .location-map>div .map-container-wrapper .map-container .tool-tip-container .date-range': {\r\n    whiteSpace: 'nowrap',\r\n    margin: '10px 0',\r\n  },\r\n  '.top-locations-card .location-data .location-map>div .map-container-wrapper .map-container .tool-tip-container .metric-container': {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n  },\r\n  '.top-locations-card .location-data .location-map>div .map-container-wrapper .map-container .tool-tip-container .metric-container .metric-name': {\r\n    marginRight: 5,\r\n  },\r\n  '.top-locations-card .location-data .location-map>div .map-container-wrapper .map-container .tool-tip-container .metric-container .metric-value': {\r\n    fontWeight: 'bold',\r\n  },\r\n  '.top-locations-card .location-data .location-map>div .zoom-to-all': {\r\n    display: 'none',\r\n  },\r\n  '.top-locations-card .location-data .data-container': {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    flex: '4',\r\n  },\r\n  '.top-locations-card .location-data .data-container .grid-row-hover': {\r\n    backgroundColor: `${palette.neutralLighter} !important`,\r\n  },\r\n  '.top-locations-card .location-data .data-container .data-grid-row-10': {\r\n    '-ms-grid-row': '10',\r\n    gridRow: '10',\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n  },\r\n  '.top-locations-card .location-data .data-container .data-grid-row-9': {\r\n    '-ms-grid-row': '9',\r\n    gridRow: '9',\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n  },\r\n  '.top-locations-card .location-data .data-container .data-grid-row-8': {\r\n    '-ms-grid-row': '8',\r\n    gridRow: '8',\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n  },\r\n  '.top-locations-card .location-data .data-container .data-grid-row-7': {\r\n    '-ms-grid-row': '7',\r\n    gridRow: '7',\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n  },\r\n  '.top-locations-card .location-data .data-container .data-grid-row-6': {\r\n    '-ms-grid-row': '6',\r\n    gridRow: '6',\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n  },\r\n  '.top-locations-card .location-data .data-container .data-grid-row-5': {\r\n    '-ms-grid-row': '5',\r\n    gridRow: '5',\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n  },\r\n  '.top-locations-card .location-data .data-container .data-grid-row-4': {\r\n    '-ms-grid-row': '4',\r\n    gridRow: '4',\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n  },\r\n  '.top-locations-card .location-data .data-container .data-grid-row-3': {\r\n    '-ms-grid-row': '3',\r\n    gridRow: '3',\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n  },\r\n  '.top-locations-card .location-data .data-container .data-grid-row-2': {\r\n    '-ms-grid-row': '2',\r\n    gridRow: '2',\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n  },\r\n  '.top-locations-card .location-data .data-container .data-grid-row-1': {\r\n    '-ms-grid-row': '1',\r\n    gridRow: '1',\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    borderTop: `1px solid ${palette.neutralLighter}`,\r\n  },\r\n  '.top-locations-card .location-data .data-container .scroll-container': {\r\n    overflowY: 'auto',\r\n    flex: '1',\r\n  },\r\n  '.top-locations-card .location-data .data-container .scroll-container .data-grid': {\r\n    display: 'grid',\r\n    fallbacks: [\r\n      {\r\n        display: '-ms-grid',\r\n      },\r\n    ],\r\n    alignSelf: 'flex-start',\r\n    overflowY: 'auto',\r\n    '-ms-grid-template-columns': '1fr auto',\r\n    gridTemplateColumns: '1fr auto',\r\n  },\r\n  '.top-locations-card .location-data .data-container .scroll-container .data-grid .location-name': {\r\n    padding: '0 10px',\r\n    height: 42,\r\n    whiteSpace: 'nowrap',\r\n    overflow: 'hidden',\r\n    textOverflow: 'ellipsis',\r\n    '-ms-grid-column': '1',\r\n    gridColumn: '1',\r\n    marginLeft: 10,\r\n    borderBottom: `1px solid ${palette.neutralLighter}`,\r\n  },\r\n  '.top-locations-card .location-data .data-container .scroll-container .data-grid .kpi': {\r\n    justifyContent: 'flex-end',\r\n    paddingRight: 10,\r\n    '-ms-grid-column': '2',\r\n    gridColumn: '2',\r\n    borderBottom: `1px solid ${palette.neutralLighter}`,\r\n  },\r\n  '.top-locations-card .location-data .data-container .recommendation-container': {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    margin: '10px 0 10px 10px',\r\n  },\r\n  '.top-locations-card .location-data .data-container .recommendation-container .recommendation-icon-container': {\r\n    display: 'flex',\r\n    flexShrink: '0',\r\n    alignItems: 'center',\r\n    justifyContent: 'center',\r\n    marginRight: 5,\r\n    border: '1px solid #1570A6',\r\n    backgroundColor: '#e5f5fb',\r\n    width: 30,\r\n    height: 30,\r\n  },\r\n  '.top-locations-card .location-data .data-container .recommendation-container .recommendation-icon-container .recommendation-light-bulb': {\r\n    color: '#1570A6 !important',\r\n  },\r\n  '.top-locations-card .location-data .data-container .recommendation-container .recommendation-icon-container .recommendation-light-bulb:before': {\r\n    fontSize: '16px !important',\r\n  },\r\n  '.top-locations-card .location-data .data-container .recommendation-container .msg': {\r\n    display: 'inline',\r\n    color: '#006464',\r\n  },\r\n  '.top-locations-card .location-data .data-container .recommendation-container .view-recommendations, .top-locations-card .location-data .data-container .recommendation-container .dismiss-recommendations': {\r\n    color: '#1570A6',\r\n  },\r\n  '.top-locations-card .location-data .data-container:hover .scroll-bar-cover': {\r\n    display: 'none',\r\n  },\r\n  '.top-locations-card .location-data .data-container .scroll-bar-cover': {\r\n    position: 'absolute',\r\n    background: 'white',\r\n    right: '0',\r\n    top: '0',\r\n    overflow: 'hidden',\r\n  },\r\n  '.top-locations-card .location-data .data-container .scroll-bar-cover .block-container': {\r\n    position: 'absolute',\r\n    width: '100%',\r\n  },\r\n  '.top-locations-card .location-data .data-container .scroll-bar-cover .block-container .cover-block': {\r\n    height: 42,\r\n  },\r\n  '.top-locations-card .location-links': {\r\n    alignItems: 'baseline',\r\n    display: 'flex',\r\n    justifyContent: 'space-between',\r\n    position: 'relative',\r\n    marginTop: 10,\r\n  },\r\n  '.top-locations-card .location-links .view-picker-clickLink': {\r\n    display: 'none',\r\n  },\r\n  '.top-locations-card .bubble-icon': {\r\n    width: 12,\r\n    height: 12,\r\n    border: '1px solid #107C10',\r\n    borderRadius: 6,\r\n    marginRight: 5,\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    justifyContent: 'center',\r\n  },\r\n  '.top-locations-card .bubble-icon .dot': {\r\n    width: 2,\r\n    height: 2,\r\n    border: '2px solid #107C10',\r\n    borderRadius: 2,\r\n  },\r\n  '.overview-card .small_layout .location-map': {\r\n    display: 'none',\r\n  },\r\n  '.overview-card .small_layout.top-locations-card .location-data .data-container .scroll-container .data-grid .location-name': {\r\n    marginLeft: 0,\r\n  },\r\n  '.overview-card .small_layout .data-container': {\r\n    display: 'none',\r\n    flex: '1',\r\n  },\r\n  '.overview-card .small_layout .location-links .view-picker-clickLink': {\r\n    display: 'block',\r\n    cursor: 'pointer',\r\n  },\r\n});\r\n","import _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport React, { useEffect } from 'react';\r\nimport {\r\n  withSiteMap,\r\n  withCampaignSiteMap,\r\n  siteMapPropType,\r\n  processor,\r\n  processorSet,\r\n  Configs,\r\n} from '@bingads-webui-campaign-react/with-site-map';\r\nimport { DetailListPageMenu } from '@bingads-webui-campaign-react/page-menu';\r\nimport { Activity, Scenario } from '@bingads-webui-react/hoc-with-signal';\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\n\r\nconst dynamicPermissions = _.result(config.get('permissions'), 'dynamic', {});\r\nconst { IsRenameHotelToLodgingEnabled } = dynamicPermissions;\r\n\r\nexport const campaignPageGroups = [\r\n  ['overview', 'recommendations', 'query-insights'],\r\n  ['campaigns', 'adgroups'],\r\n  ['appads-asset-groups', 'asset-groups', 'listing-groups', 'products', 'ads-and-extensions', 'assets-report', IsRenameHotelToLodgingEnabled ? 'properties' : 'hotels', 'landing-pages', 'feeds-items'],\r\n  ['keywords', 'dsa', 'product-groups', IsRenameHotelToLodgingEnabled ? 'property-groups' : 'hotel-groups', 'audiences', 'demographics'],\r\n  ['settings', 'locations', 'ad-schedule', 'devices'],\r\n  ['change-history'],\r\n  ['competition'],\r\n  ['experiments'],\r\n];\r\n\r\nexport const noExpandGroups = ['recommendations', 'query-insights'];\r\n\r\nconst DetailListPageMenuWithSiteMap = withCampaignSiteMap(DetailListPageMenu, _.union(processorSet.all, [processor.processPmaxCampaignPageMenu, processor.processPmaxRetailCampaignPageMenu]));\r\n\r\nexport const Loader = (props) => {\r\n  const {\r\n    siteMap,\r\n    updateAvailability,\r\n    ...others\r\n  } = props;\r\n\r\n  const selectedParent = _.findWhere(siteMap, { selected: true });\r\n\r\n  useEffect(() => {\r\n    updateAvailability(!_.isEmpty(selectedParent));\r\n  });\r\n\r\n  if (!props.isVisible) {\r\n    return null;\r\n  }\r\n\r\n  return (\r\n    <Scenario name=\"detail-list-page-memu\">\r\n      <Activity name=\"detail-list-page-memu\">\r\n        <DetailListPageMenuWithSiteMap pageGroups={campaignPageGroups} noExpandGroups={noExpandGroups} {...others} />\r\n      </Activity>\r\n    </Scenario>\r\n  );\r\n};\r\n\r\nLoader.propTypes = {\r\n  siteMap: siteMapPropType,\r\n  updateAvailability: PropTypes.func,\r\n  isVisible: PropTypes.bool,\r\n};\r\n\r\nLoader.defaultProps = {\r\n  updateAvailability: _.noop,\r\n  isVisible: false,\r\n  siteMap: null,\r\n};\r\n\r\nconst assetsDetailSiteMap = _.findWhere(Configs.standaloneSiteMap, { id: 'pmax-asset-details' });\r\nconst campaignWithAssetsSiteMap = _.union(Configs.campaignSiteMap, [assetsDetailSiteMap]);\r\n\r\nexport const CampaignPageMenuLoader = withSiteMap(\r\n  React.memo(Loader),\r\n  processorSet.all,\r\n  campaignWithAssetsSiteMap\r\n);\r\n","import _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport React, { useEffect } from 'react';\r\nimport {\r\n  withAccountsSiteMap,\r\n  siteMapPropType,\r\n  processor,\r\n} from '@bingads-webui-campaign-react/with-site-map';\r\nimport { PageMenu } from '@bingads-webui-campaign-react/page-menu';\r\n\r\nconst accountsPageGroups = [\r\n  ['accounts-overview'],\r\n  ['recommendations'],\r\n  ['accounts-summary'],\r\n  ['accounts-auction-insights'],\r\n  ['saved-account-reports'],\r\n];\r\n\r\nexport const Loader = (props) => {\r\n  const { siteMap, updateAvailability } = props;\r\n\r\n  const selectedParent = _.findWhere(siteMap, { selected: true });\r\n\r\n  useEffect(() => {\r\n    updateAvailability(!_.isEmpty(selectedParent));\r\n  });\r\n\r\n  return props.isVisible ? (<PageMenu pageGroups={accountsPageGroups} siteMap={siteMap} {...props} />) : null;\r\n};\r\n\r\nLoader.propTypes = {\r\n  siteMap: siteMapPropType.isRequired,\r\n  updateAvailability: PropTypes.func,\r\n  isVisible: PropTypes.bool,\r\n};\r\n\r\nLoader.defaultProps = {\r\n  updateAvailability: _.noop,\r\n  isVisible: false,\r\n};\r\n\r\nconst processors = [processor.processPermissions, processor.processPath, processor.processScope];\r\n\r\nexport const AccountsPageMenuLoader = withAccountsSiteMap(\r\n  React.memo(Loader),\r\n  processors\r\n);\r\n","import _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport React, { useEffect } from 'react';\r\nimport {\r\n  withToolsSiteMap,\r\n  siteMapPropType,\r\n  processor,\r\n} from '@bingads-webui-campaign-react/with-site-map';\r\nimport { PageMenu } from '@bingads-webui-campaign-react/page-menu';\r\n\r\nconst bulkOperationPageGroups = [\r\n  ['rules'],\r\n  ['bulk-edits'],\r\n  ['scripts'],\r\n  ['bulk-uploads'],\r\n];\r\n\r\nexport const Loader = (props) => {\r\n  const { siteMap, updateAvailability } = props;\r\n\r\n  const selectedParent = _.findWhere(siteMap, { selected: true });\r\n\r\n  useEffect(() => {\r\n    updateAvailability(!_.isEmpty(selectedParent));\r\n  });\r\n\r\n  return props.isVisible ? (<PageMenu pageGroups={bulkOperationPageGroups} siteMap={siteMap} {...props} />) : null;\r\n};\r\n\r\nLoader.propTypes = {\r\n  siteMap: siteMapPropType.isRequired,\r\n  updateAvailability: PropTypes.func,\r\n  isVisible: PropTypes.bool,\r\n};\r\n\r\nLoader.defaultProps = {\r\n  updateAvailability: _.noop,\r\n  isVisible: false,\r\n};\r\n\r\nconst processors = [processor.processPermissions, processor.processPath, processor.processScope];\r\n\r\nexport const BulkOperationPageMenuLoader = withToolsSiteMap(\r\n  React.memo(Loader),\r\n  processors,\r\n  _.flatten(bulkOperationPageGroups)\r\n);\r\n","import _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport React, { useEffect } from 'react';\r\nimport {\r\n  withToolsSiteMap,\r\n  siteMapPropType,\r\n  processorSet,\r\n} from '@bingads-webui-campaign-react/with-site-map';\r\nimport { PageMenu } from '@bingads-webui-campaign-react/page-menu';\r\n\r\nconst businessDataPageGroups = [\r\n  ['ad-customizer-feeds'],\r\n  ['dynamic-data-feeds'],\r\n  ['page-feeds'],\r\n  ['customizer-attributes'],\r\n];\r\nexport const Loader = (props) => {\r\n  const { siteMap, updateAvailability } = props;\r\n\r\n  const selectedParent = _.findWhere(siteMap, { selected: true });\r\n\r\n  useEffect(() => {\r\n    updateAvailability(!_.isEmpty(selectedParent));\r\n  });\r\n  return props.isVisible ? (<PageMenu pageGroups={businessDataPageGroups} shouldRenderParentNodeAsLink={false} {...props} />) : null;\r\n};\r\n\r\nLoader.propTypes = {\r\n  siteMap: siteMapPropType.isRequired,\r\n  updateAvailability: PropTypes.func,\r\n  isVisible: PropTypes.bool,\r\n};\r\n\r\nLoader.defaultProps = {\r\n  updateAvailability: _.noop,\r\n  isVisible: false,\r\n};\r\n\r\nexport const BusinessDataPageMenuLoader = withToolsSiteMap(\r\n  React.memo(Loader),\r\n  processorSet.all,\r\n  _.flatten(businessDataPageGroups)\r\n);\r\n","import _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport React, { useEffect } from 'react';\r\nimport {\r\n  withHotelCenterSiteMap,\r\n  siteMapPropType,\r\n  processorSet,\r\n} from '@bingads-webui-campaign-react/with-site-map';\r\nimport { TreeMenu } from '@bingads-webui-campaign-react/tree-menu';\r\n\r\nconst idsToHideSelf = ['hotel-center-setup'];\r\nconst idsToHideChildren = ['report', 'hotel-center-overview', 'reconciliationreport'];\r\nconst pruneSitemap = (sitemap, ids, hideSelfIdsArray) => {\r\n  const pruneNode = (node, ids2) => {\r\n    const { id, children } = node;\r\n\r\n    const result = _.clone(node);\r\n\r\n    if (_.some(ids2, x => x === id)) {\r\n      result.children = [];\r\n    }\r\n\r\n    if (children && children.length > 0) {\r\n      result.children = _.map(result.children, x => pruneNode(x, ids2));\r\n    }\r\n\r\n    return result;\r\n  };\r\n\r\n  const result = _.chain(sitemap)\r\n    .filter(x => (_.indexOf(hideSelfIdsArray, x.id) === -1))\r\n    .map(x => pruneNode(x, ids))\r\n    .value();\r\n  return result;\r\n};\r\n\r\nexport const Loader = (props) => {\r\n  const { siteMap, updateAvailability } = props;\r\n\r\n  const selectedParent = _.findWhere(siteMap, { selected: true });\r\n\r\n  useEffect(() => {\r\n    const available = !_.isEmpty(selectedParent);\r\n    updateAvailability(available);\r\n    props.changeLayout({ menu: { hotelCenterMenu: available } });\r\n  });\r\n\r\n  const prunedSitemap = pruneSitemap(siteMap, idsToHideChildren, idsToHideSelf);\r\n  return props.isVisible ? (<TreeMenu {...props} siteMap={prunedSitemap} />) : null;\r\n};\r\n\r\nLoader.propTypes = {\r\n  changeLayout: PropTypes.func,\r\n  siteMap: siteMapPropType.isRequired,\r\n  updateAvailability: PropTypes.func,\r\n  isVisible: PropTypes.bool,\r\n};\r\n\r\nLoader.defaultProps = {\r\n  changeLayout: _.noop,\r\n  updateAvailability: _.noop,\r\n  isVisible: false,\r\n};\r\n\r\nexport const HotelCenterPageMenuLoader = withHotelCenterSiteMap(\r\n  React.memo(Loader),\r\n  processorSet.all\r\n);\r\n","import _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport React, { useEffect } from 'react';\r\nimport {\r\n  withHotelCenterV2SiteMap,\r\n  siteMapPropType,\r\n  processorSet,\r\n} from '@bingads-webui-campaign-react/with-site-map';\r\nimport { DetailListPageMenu } from '@bingads-webui-campaign-react/page-menu';\r\nimport { Activity, Scenario } from '@bingads-webui-react/hoc-with-signal';\r\n\r\nconst DetailListPageMenuWithSiteMap = withHotelCenterV2SiteMap(DetailListPageMenu, processorSet.all);\r\n\r\nconst hotelCenterV2PageGroups = [[\r\n  'property-center-overview',\r\n  'property-center-feeds',\r\n  'property-center-logos',\r\n  'property-center-reports',\r\n]];\r\n\r\nexport const Loader = (props) => {\r\n  const { siteMap, updateAvailability, ...others } = props;\r\n\r\n  const selectedParent = _.findWhere(siteMap, { selected: true });\r\n\r\n  useEffect(() => {\r\n    const available = !_.isEmpty(selectedParent);\r\n    updateAvailability(available);\r\n  });\r\n\r\n  if (!props.isVisible) {\r\n    return null;\r\n  }\r\n\r\n  return (\r\n    <Scenario name=\"detail-list-page-memu\">\r\n      <Activity name=\"detail-list-page-memu\">\r\n        <DetailListPageMenuWithSiteMap pageGroups={hotelCenterV2PageGroups} noExpandGroups={[]} {...others} />\r\n      </Activity>\r\n    </Scenario>\r\n  );\r\n};\r\n\r\nLoader.propTypes = {\r\n  changeLayout: PropTypes.func,\r\n  siteMap: siteMapPropType.isRequired,\r\n  updateAvailability: PropTypes.func,\r\n  isVisible: PropTypes.bool,\r\n  location: PropTypes.shape({\r\n    pathname: PropTypes.string.isRequired,\r\n  }).isRequired,\r\n};\r\n\r\nLoader.defaultProps = {\r\n  changeLayout: _.noop,\r\n  updateAvailability: _.noop,\r\n  isVisible: false,\r\n};\r\n\r\nexport const HotelCenterV2PageMenuLoader = withHotelCenterV2SiteMap(\r\n  React.memo(Loader),\r\n  processorSet.all\r\n);\r\n","import React, { useEffect } from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n  withToolsSiteMap,\r\n  siteMapPropType,\r\n  processorSet\r\n} from '@bingads-webui-campaign-react/with-site-map';\r\nimport { PageMenu } from '@bingads-webui-campaign-react/page-menu';\r\n\r\nconst merchantCenterPageGroups = [\r\n  ['mmc-store-summary', 'mmc-feeds', 'mmc-promotions', 'mmc-import', 'mmc-settings', 'mmc-products'],\r\n];\r\n\r\nconst merchantCenterPageGroupsWithoutImport = [\r\n  ['mmc-store-summary', 'mmc-feeds', 'mmc-promotions', 'mmc-settings', 'mmc-products'],\r\n];\r\n\r\nexport const Loader = (props) => {\r\n  const { siteMap, updateAvailability, permissions } = props;\r\n\r\n  const selectedParent = _.findWhere(siteMap, { selected: true });\r\n\r\n  useEffect(() => {\r\n    updateAvailability(!_.isEmpty(selectedParent));\r\n  });\r\n\r\n  return props.isVisible ? (<PageMenu pageGroups={permissions.IsDomesticSimplifiedChineseEnabled ? merchantCenterPageGroupsWithoutImport : merchantCenterPageGroups} siteMap={siteMap} {...props} />) : null;\r\n};\r\n\r\nLoader.propTypes = {\r\n  siteMap: siteMapPropType.isRequired,\r\n  updateAvailability: PropTypes.func,\r\n  isVisible: PropTypes.bool,\r\n};\r\n\r\nLoader.defaultProps = {\r\n  updateAvailability: _.noop,\r\n  isVisible: false,\r\n};\r\n\r\nexport const MerchantCenterPageMenuLoader = withToolsSiteMap(\r\n  React.memo(Loader),\r\n  processorSet.all,\r\n  _.map(merchantCenterPageGroups[0], id => `${id}/*`)\r\n);\r\n","import _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport React, { useEffect } from 'react';\r\nimport {\r\n  withBidStrategiesSiteMap,\r\n  siteMapPropType,\r\n  processor,\r\n} from '@bingads-webui-campaign-react/with-site-map';\r\nimport { PageMenu } from '@bingads-webui-campaign-react/page-menu';\r\n\r\nconst bidStrategiesPageGroups = [\r\n  ['portfolio-bid-strategy'],\r\n  ['advanced-controls'],\r\n];\r\n\r\nexport const Loader = (props) => {\r\n  const { siteMap, updateAvailability } = props;\r\n\r\n  const selectedParent = _.findWhere(siteMap, { selected: true });\r\n\r\n  useEffect(() => {\r\n    updateAvailability(!_.isEmpty(selectedParent));\r\n  });\r\n\r\n  return props.isVisible ? (<PageMenu pageGroups={bidStrategiesPageGroups} siteMap={siteMap} {...props} />) : null;\r\n};\r\n\r\nLoader.propTypes = {\r\n  siteMap: siteMapPropType.isRequired,\r\n  updateAvailability: PropTypes.func,\r\n  isVisible: PropTypes.bool,\r\n};\r\n\r\nLoader.defaultProps = {\r\n  updateAvailability: _.noop,\r\n  isVisible: false,\r\n};\r\n\r\nconst processors = [processor.processPermissions, processor.processPath, processor.processScope];\r\n\r\nexport const BidStrategiesPageMenuLoader = withBidStrategiesSiteMap(\r\n  React.memo(Loader),\r\n  processors\r\n);\r\n","import React, { useEffect } from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n  withToolsSiteMap,\r\n  siteMapPropType,\r\n  processorSet\r\n} from '@bingads-webui-campaign-react/with-site-map';\r\nimport { UetTagsPageMenu } from '@bingads-webui-campaign/conversion-tracking-page-menu';\r\n\r\nexport const Loader = (props) => {\r\n  const { siteMap, updateAvailability } = props;\r\n\r\n  const selectedParent = _.findWhere(siteMap, { selected: true });\r\n\r\n  useEffect(() => {\r\n    updateAvailability(!_.isEmpty(selectedParent));\r\n  });\r\n\r\n  return props.isVisible ? <UetTagsPageMenu siteMap={siteMap} /> : null;\r\n};\r\n\r\nLoader.propTypes = {\r\n  siteMap: siteMapPropType.isRequired,\r\n  updateAvailability: PropTypes.func,\r\n  isVisible: PropTypes.bool,\r\n};\r\n\r\nLoader.defaultProps = {\r\n  updateAvailability: _.noop,\r\n  isVisible: false,\r\n};\r\n\r\nexport const UetPageMenuLoader = withToolsSiteMap(\r\n  React.memo(Loader),\r\n  processorSet.all,\r\n  'uet-tag'\r\n);\r\n","import _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport React, { useEffect } from 'react';\r\nimport {\r\n  withToolsSiteMap,\r\n  siteMapPropType,\r\n  processor,\r\n} from '@bingads-webui-campaign-react/with-site-map';\r\nimport { PageMenu } from '@bingads-webui-campaign-react/page-menu';\r\nimport { Glyphicon } from '@bingads-webui-react/primitive';\r\nimport { AssetLibraryIcon } from '@bingads-webui-theme-2018/embeded-svgs';\r\n\r\nconst ASSETS_LIBRARY_ROOT_ID = 'creative-studio-asset-library';\r\nconst ASSETS_MENU_ID = 'creative-studio-asset-library';\r\nconst PERFORMANCE_MENU_ID = 'creative-studio-asset-library-performance';\r\n\r\nconst assetLibraryPageGroups = [\r\n  [ASSETS_MENU_ID],\r\n  [PERFORMANCE_MENU_ID],\r\n];\r\n\r\nexport const Loader = (props) => {\r\n  const {\r\n    siteMap, updateAvailability, mode, ...rest\r\n  } = props;\r\n\r\n  const selectedParent = _.findWhere(siteMap, { selected: true });\r\n\r\n  useEffect(() => {\r\n    updateAvailability(!_.isEmpty(selectedParent));\r\n  });\r\n\r\n  const renderItemIcon = ({ id }) => {\r\n    if (id === PERFORMANCE_MENU_ID) {\r\n      return <Glyphicon glyph=\"ba-Chart\" />;\r\n    }\r\n    if (id === ASSETS_MENU_ID) {\r\n      return (\r\n        <div style={{ position: 'relative', top: 2 }}>\r\n          <AssetLibraryIcon />\r\n        </div>\r\n      );\r\n    }\r\n    return null;\r\n  };\r\n\r\n  const { children: assetLibrarySiteMap = [] } = selectedParent || {};\r\n  return props.isVisible\r\n    ? <PageMenu\r\n        pageGroups={assetLibraryPageGroups}\r\n        siteMap={assetLibrarySiteMap}\r\n        renderItemIcon={renderItemIcon}\r\n        collapsed={mode === 'collapsed'}\r\n        {...rest}\r\n    />\r\n    : null;\r\n};\r\n\r\nLoader.propTypes = {\r\n  siteMap: siteMapPropType.isRequired,\r\n  updateAvailability: PropTypes.func,\r\n  isVisible: PropTypes.bool,\r\n  permissions: PropTypes.shape({\r\n    dynamic: PropTypes.shape({\r\n    }),\r\n  }).isRequired,\r\n  mode: PropTypes.string,\r\n};\r\n\r\nLoader.defaultProps = {\r\n  updateAvailability: _.noop,\r\n  isVisible: false,\r\n  mode: undefined,\r\n};\r\n\r\nconst processors = [processor.processPermissions, processor.processPath, processor.processScope];\r\n\r\nexport const AssetLibraryPageMenuLoader = withToolsSiteMap(\r\n  React.memo(Loader),\r\n  processors,\r\n  [ASSETS_LIBRARY_ROOT_ID]\r\n);\r\n","import React from 'react';\r\nimport { ElementSelector } from '@bingads-webui-campaign-react/element-selector';\r\nimport { CampaignPageMenuPlaceholder } from '@bingads-webui-campaign-react/shell-ui-common';\r\n\r\nimport { CampaignPageMenuLoader } from './campaign-page-menu-loader';\r\nimport { AccountsPageMenuLoader } from './accounts-page-menu-loader';\r\nimport { BulkOperationPageMenuLoader } from './bulk-operation-menu-loader';\r\nimport { BusinessDataPageMenuLoader } from './business-data-page-menu-loader';\r\nimport { HotelCenterPageMenuLoader } from './hotel-center-page-menu-loader';\r\nimport { HotelCenterV2PageMenuLoader } from './hotel-center-v2-page-menu-loader';\r\nimport { MerchantCenterPageMenuLoader } from './merchant-center-page-menu-loader';\r\nimport { BidStrategiesPageMenuLoader } from './bid-strategies-menu-loader';\r\nimport { UetPageMenuLoader } from './uet-tag-page-menu-loader';\r\nimport { AssetLibraryPageMenuLoader } from './asset-library-page-menu-loader';\r\n\r\nexport const PageMenuContainer = React.memo(props => (\r\n  <ElementSelector fallback={(<CampaignPageMenuPlaceholder />)}>\r\n    <AccountsPageMenuLoader {...props} />\r\n    <BidStrategiesPageMenuLoader {...props} />\r\n    <CampaignPageMenuLoader {...props} />\r\n    <BusinessDataPageMenuLoader {...props} />\r\n    <BulkOperationPageMenuLoader {...props} />\r\n    <HotelCenterPageMenuLoader {...props} />\r\n    <HotelCenterV2PageMenuLoader {...props} />\r\n    <MerchantCenterPageMenuLoader {...props} />\r\n    <UetPageMenuLoader {...props} />\r\n    <AssetLibraryPageMenuLoader {...props} />\r\n  </ElementSelector>\r\n));\r\n","import _ from 'underscore';\r\nimport queryString from 'query-string';\r\nimport { curlyTemplate } from '@bingads-webui-universal/primitive-utilities';\r\nimport { ScopeV2 } from '@bingads-webui-campaign-react/with-site-map';\r\n\r\nconst pathNamePrefix = '/campaign/vnext/';\r\n\r\nexport const getPathName = pageItem => `${pathNamePrefix}${pageItem.route}`;\r\n\r\nexport function mapToPageItems(items, i18n, defaultLandingPage, isFallbackSelected) {\r\n  return _.map(items, item => (item.type === 'divider' ? item : {\r\n    id: item.id,\r\n    content: item.content || i18n.getString(item.name),\r\n    isSelected: _.isUndefined(item.isSelected) ? item.selected : item.isSelected,\r\n    isPageEnabled: _.isUndefined(item.isPageEnabled) ? item.available : item.isPageEnabled,\r\n    route: item.route,\r\n    isDefaultLandingPage: item.id === defaultLandingPage,\r\n    isFallbackSelected: isFallbackSelected(item),\r\n    defaultLandingPageTooltipText: item.defaultLandingPageTooltipText ||\r\n      curlyTemplate(i18n.getString(_TL_('Set {{pageName}} as your default landing page')))({ pageName: i18n.getString(item.name) }),\r\n    showTag: item.showTag,\r\n    tagClass: item.tagClass,\r\n    i18n,\r\n    children: item.children,\r\n    scopeV2: item.scopeV2,\r\n  }));\r\n}\r\n\r\nexport function getPageItems(pageGroups, siteMap, i18n, defaultLandingPage, isFallbackSelected) {\r\n  return _.reduce(pageGroups, (result, group, index) => {\r\n    const newItems = mapToPageItems(_.filter(siteMap, item => group.indexOf(item.id) >= 0), i18n, defaultLandingPage, isFallbackSelected);\r\n    const divider = (index === 0 || _.isEmpty(newItems)) ? [] :\r\n      [{ id: `divider_${index}`, type: 'divider' }];\r\n\r\n    return _.union(result, divider, newItems);\r\n  }, []);\r\n}\r\n\r\nexport const getTrimmedParams = (item, scope) => {\r\n  const searchObj = queryString.parse(scope.history.location.search);\r\n  const trimmedParams = ScopeV2.trimToScope(item.scopeV2, searchObj);\r\n  return trimmedParams;\r\n};\r\n\r\nexport const getTrimmedQuery = (item, scope) => {\r\n  const trimmedParams = getTrimmedParams(item, scope);\r\n  return queryString.stringify(trimmedParams, { sort: false });\r\n};\r\n\r\nexport const getPageItemUrl = (pageItem, scope) => {\r\n  if (!pageItem.isPageEnabled) {\r\n    return '';\r\n  }\r\n\r\n  const path = getPathName(pageItem);\r\n  const query = getTrimmedQuery(pageItem, scope);\r\n\r\n  return `${path}?${query}`;\r\n};\r\n\r\n// only flatten {limitLevel} depth\r\nexport const getFlattenedItems = (items, noExpandGroups, limitLevel = 2) =>\r\n  items.reduce((flattenedItems, item) => {\r\n    if (!item.children || item.children.length === 0 || limitLevel <= 1 || _.contains(noExpandGroups, item.id)) {\r\n      return [...flattenedItems, item];\r\n    }\r\n\r\n    return [\r\n      ...flattenedItems,\r\n      ...getFlattenedItems(item.children, noExpandGroups, limitLevel - 1),\r\n    ];\r\n  }, []);\r\n\r\nconst fillGroupCount = groups => _.map(groups, (group) => {\r\n  if (group.count) {\r\n    return group;\r\n  }\r\n\r\n  const newgroup = _.extend(group, {\r\n    children: fillGroupCount(group.children),\r\n  });\r\n  return _.extend(newgroup, {\r\n    count: _.reduce(newgroup.children, (sum, child) => sum + child.count, 0),\r\n  });\r\n});\r\n\r\nconst fillGroupStartIndex = (groups, startIndex = 0) => _.map(groups, (group, index) => {\r\n  const si = index === 0 ? startIndex : groups[index - 1].startIndex + groups[index - 1].count;\r\n  _.extend(group, {\r\n    children: fillGroupStartIndex(group.children, si),\r\n  });\r\n  return _.extend(group, {\r\n    startIndex: si,\r\n  });\r\n});\r\n\r\nconst fillSelectedAndCollapse = (groups, falttenedItems, selectedIndex = -1) => {\r\n  const si = selectedIndex < 0 ? _.findIndex(falttenedItems, { isSelected: true }) : selectedIndex;\r\n  return _.map(groups, (group) => {\r\n    if (si >= group.startIndex && si < group.startIndex + group.count) {\r\n      return _.extend({}, group, { isSelected: true });\r\n    }\r\n\r\n    if (group.count === 1) {\r\n      return group;\r\n    }\r\n\r\n    const newChildren = fillSelectedAndCollapse(group.children, falttenedItems, si);\r\n    return _.extend({}, group, { isCollapsed: true, children: newChildren });\r\n  });\r\n};\r\n\r\nexport const getGroupsForDetailList = (items, falttenedItems, noExpandGroups, level = 0, limitLevel = 1) => {\r\n  const groupsResult = _.reduce(items, (groups, item) => {\r\n    let group;\r\n    const name = item.content || (_.find(falttenedItems, { id: item.id })).content;\r\n    // the last condition is for special mistake configs, we should not have this kind of configs. just in case\r\n    if (_.contains(noExpandGroups, item.id) || item.type === 'divider' || (_.isEmpty(item.children) && level === 0)) {\r\n      group = [{\r\n        key: `group-${item.id}`,\r\n        keyId: item.id,\r\n        count: 1,\r\n        children: [],\r\n        level,\r\n        name,\r\n      }];\r\n    } else if (_.isEmpty(item.children) || level + 1 > limitLevel) {\r\n      group = [];\r\n    } else if (item.children.length > 0 && item.children[0].children && item.children[0].children.length > 0 && level + 1 < limitLevel) {\r\n      const children = getGroupsForDetailList(item.children, falttenedItems, noExpandGroups, level + 1, limitLevel);\r\n      group = [{\r\n        key: `group-${item.id}`,\r\n        keyId: item.id,\r\n        level,\r\n        children,\r\n        name,\r\n      }];\r\n    } else {\r\n      group = [{\r\n        key: `group-${item.id}`,\r\n        keyId: item.id,\r\n        count: item.children.length,\r\n        children: [],\r\n        level,\r\n        name,\r\n      }];\r\n    }\r\n\r\n    return [\r\n      ...groups,\r\n      ...group,\r\n    ];\r\n  }, []);\r\n  return level === 0 ? fillSelectedAndCollapse(fillGroupStartIndex(fillGroupCount(groupsResult)), falttenedItems) :\r\n    groupsResult;\r\n};\r\n\r\nexport const getSingleItems = (groups, items) => _.reduce(groups, (singleItems, group) => {\r\n  if (group.count === 1) {\r\n    return [...singleItems, _.extend({}, items[group.startIndex], { parentId: group.keyId })];\r\n  }\r\n  return singleItems;\r\n}, []);\r\n","export const getPageMenuItemStyles = (pageMenuItem, { palette = {} }) => ({\r\n  baseMenuItem: {\r\n    color: 'rgba(0, 0, 0, 0)', // Hides the fallback glyph\r\n    fontFamily: 'Segoe UI',\r\n    fontWeight: 'normal',\r\n    lineHeight: 'normal',\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n    padding: '0 12px 0 0',\r\n    textDecoration: 'none',\r\n    cursor: 'pointer',\r\n  },\r\n  pageMenuItem: {\r\n    '&:hover': {\r\n      backgroundColor: palette.neutralLight,\r\n      textDecoration: 'none',\r\n      color: 'rgba(0,0,0,0.6)',\r\n    },\r\n    '&:active': {\r\n      backgroundColor: palette.neutralQuaternaryAlt,\r\n      textDecoration: 'none',\r\n    },\r\n  },\r\n  notEnabledPageMenuItem: {\r\n    '&:hover': {\r\n      color: palette.themePrimary,\r\n    },\r\n    '&:active': {\r\n      color: palette.themePrimary,\r\n    },\r\n    '&:focus': {\r\n      color: palette.themePrimary,\r\n    },\r\n  },\r\n  selectedPageMenuItem: {\r\n    fontWeight: 600,\r\n    backgroundColor: palette.themeLighter,\r\n    '&:hover': {\r\n      backgroundColor: palette.themeLight,\r\n      textDecoration: 'none',\r\n      color: palette.themePrimary,\r\n    },\r\n    '& a:focus': {\r\n      textDecoration: 'none',\r\n    },\r\n    '& .fallback-glyph': {\r\n      color: 'rgba(0,0,0,0.6)',\r\n    },\r\n  },\r\n  notEnabledSelectedPageMenuItem: {\r\n    color: palette.themePrimary,\r\n  },\r\n  beforeIcon: {\r\n    borderLeft: `4px solid ${palette.themePrimary}`,\r\n    padding: 0,\r\n    marginRight: -4,\r\n    alignSelf: 'stretch',\r\n  },\r\n  textContainer: {\r\n    display: 'inline-block',\r\n    marginLeft: 16,\r\n    marginTop: 8,\r\n    marginBottom: 9,\r\n    wordBreak: 'break-word',\r\n    flex: '1 1 1px',\r\n    color: palette.neutralPrimary,\r\n    '& a .page-menu-item-content': {\r\n      '@media screen and (forced-colors: active)': {\r\n        color: 'canvasText',\r\n      },\r\n    },\r\n  },\r\n  iconContainer: {\r\n    display: 'inline-block',\r\n    marginLeft: 16,\r\n    marginTop: 8,\r\n    marginBottom: 9,\r\n    color: palette.neutralPrimary,\r\n  },\r\n  text: {\r\n    fontSize: 14,\r\n    color: palette.neutralPrimary,\r\n  },\r\n  fallbackGlyph: {\r\n    fontSize: 16,\r\n    color: 'inherit',\r\n    float: 'right',\r\n    padding: '7px 5px 10px 4px',\r\n    lineHeight: '19px',\r\n  },\r\n  calloutTargetContainer: {\r\n  },\r\n  selectedLandingPage: {\r\n    color: `${palette.themePrimary} !important`,\r\n  },\r\n  notSelectedLandingPage: {\r\n    color: '#808080', // grey color\r\n  },\r\n  landingPageButton: {\r\n    '&:focus': {\r\n      outline: `1px solid ${palette.neutralSecondary}`,\r\n    },\r\n  },\r\n  menuItemTagContainer: {\r\n    position: 'absolute',\r\n    display: 'inline-block',\r\n    marginTop: '-14px',\r\n    marginLeft: '-18px',\r\n  },\r\n  relationLine: {\r\n    borderRight: `3px solid ${palette.neutralQuaternaryAlt}`,\r\n    marginRight: -3,\r\n    marginTop: -10,\r\n  },\r\n});\r\n","import PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport React from 'react';\r\nimport _ from 'underscore';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { Glyphicon, OverlayTrigger, Tooltip } from '@bingads-webui-react/primitive';\r\nimport { submitEvent } from '@bingads-webui-universal/accessibility-helper';\r\nimport { withPermissions } from '@bingads-webui-react/hoc-with-permissions';\r\nimport { getPageMenuItemStyles } from '../styles/page-menu-item-styles';\r\n\r\nconst LandingPageSelector = ({\r\n  classes,\r\n  isPageEnabled,\r\n  pageId,\r\n  setLandingPage,\r\n  isDefaultLandingPage,\r\n  defaultLandingPageTooltipText,\r\n}) => {\r\n  const classNamesArray = [\r\n    [classes.fallbackGlyph, 'fallback-glyph'],\r\n    isDefaultLandingPage\r\n      ? classes.selectedLandingPage\r\n      : classes.notSelectedLandingPage,\r\n  ];\r\n\r\n  const className = classNames(classNamesArray);\r\n  let activeGlyphicon;\r\n  if (pageId === 'campaigns' || pageId === 'overview' || pageId === 'accounts-summary' || pageId === 'accounts-overview') {\r\n    if (isDefaultLandingPage) {\r\n      activeGlyphicon = <Glyphicon onClick={e => setLandingPage(pageId, e)} className={className} glyph=\"ba-HomeSolid\" />;\r\n    } else {\r\n      activeGlyphicon = (\r\n        <OverlayTrigger\r\n          key=\"bottom\"\r\n          placement=\"bottom\"\r\n          overlay={\r\n            <Tooltip id=\"tooltip-top\">\r\n              {defaultLandingPageTooltipText}\r\n            </Tooltip>\r\n          }\r\n        >\r\n          <div\r\n            onClick={e => setLandingPage(pageId, e)}\r\n            role=\"button\"\r\n            className={classNames([classes.landingPageButton, 'set-landing-page-button'])}\r\n            tabIndex={0}\r\n            onKeyDown={e => submitEvent(setLandingPage)(e, pageId, e)}\r\n            aria-label={defaultLandingPageTooltipText}\r\n            data-is-focusable\r\n          >\r\n            <Glyphicon\r\n              className={className}\r\n              glyph=\"ba-Home\"\r\n            />\r\n          </div>\r\n        </OverlayTrigger>);\r\n    }\r\n  } else if (!isPageEnabled) {\r\n    activeGlyphicon = <Glyphicon className={classes.fallbackGlyph} glyph=\"ba-OpenInNewWindow\" />;\r\n  }\r\n\r\n  return (\r\n    <React.Fragment>\r\n      {activeGlyphicon}\r\n    </React.Fragment>\r\n\r\n  );\r\n};\r\n\r\nLandingPageSelector.defaultProps = {\r\n  setLandingPage: null,\r\n  isDefaultLandingPage: null,\r\n  defaultLandingPageTooltipText: '',\r\n};\r\n\r\nLandingPageSelector.propTypes = {\r\n  classes: PropTypes.shape(_.mapObject(\r\n    getPageMenuItemStyles({}, {}),\r\n    _.constant(PropTypes.string.isRequired)\r\n  )).isRequired,\r\n  isPageEnabled: PropTypes.bool.isRequired,\r\n  pageId: PropTypes.string.isRequired,\r\n  setLandingPage: PropTypes.func,\r\n  isDefaultLandingPage: PropTypes.bool,\r\n  defaultLandingPageTooltipText: PropTypes.string,\r\n  permissions: PropTypes.shape({\r\n  }).isRequired,\r\n};\r\n\r\nexport default withPermissions(withDefaultStyles(LandingPageSelector, getPageMenuItemStyles));\r\n","import classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport _ from 'underscore';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { withFallbackCallout } from '@bingads-webui-react/fallback-feature';\r\nimport { StyledMenuItemTag } from '@bingads-webui-campaign-react/shell-ui-common';\r\nimport { getPageMenuItemStyles } from '../styles/page-menu-item-styles';\r\nimport LandingPageSelector from './landing-page-selector';\r\n\r\nfunction getPageMenuItemText(classes, pageItem) {\r\n  return (\r\n    <span className={classNames([classes.text, 'page-menu-item-content'])} >\r\n      {pageItem.content}\r\n    </span>\r\n  );\r\n}\r\n\r\nfunction onClick() {\r\n  // disable clicking on links, only allow to open in new tabs/windows\r\n  return false;\r\n}\r\n\r\nconst PageMenuItemText = ({\r\n  classes, pageItem, pageItemUrl, showLabel,\r\n}) => (\r\n  <div\r\n    className={classNames([classes.textContainer, 'page-menu-item-text-container'])}\r\n    title={showLabel ? pageItem.content : ''}\r\n  >\r\n    {pageItemUrl ? (\r\n      <a href={pageItemUrl} onClick={onClick}>\r\n        {getPageMenuItemText(classes, pageItem)}\r\n      </a>\r\n    ) : (\r\n      getPageMenuItemText(classes, pageItem)\r\n    )}\r\n    {pageItem.showTag ? // preserve this check for better performance\r\n      <div className={classes.menuItemTagContainer}>\r\n        <StyledMenuItemTag tagContent={pageItem.showTag} tagClass={pageItem.tagClass} key=\"page-menu-item-tag\" i18n={pageItem.i18n} />\r\n      </div> : ''}\r\n  </div>\r\n\r\n);\r\n\r\nconst PageMenuItem = ({\r\n  classes,\r\n  pageItem,\r\n  setLandingPage,\r\n  pageItemUrl = '',\r\n  withRelationLine = false,\r\n  showLabel = false,\r\n  renderIcon = null,\r\n  collapsed = false,\r\n}) => {\r\n  const classNameArray = [\r\n    classes.baseMenuItem,\r\n    pageItem.isSelected\r\n      ? [classes.selectedPageMenuItem, 'page-menu-item-selected']\r\n      : classes.pageMenuItem,\r\n    `bingads-campaign-react-page-menu-item-${pageItem.id}`,\r\n    'bingads-campaign-react-page-menu-item',\r\n    `bingads-campaign-react-page-menu-item-${withRelationLine ? 'sub' : 'top'}`,\r\n  ];\r\n\r\n  if (!pageItem.isPageEnabled) {\r\n    classNameArray.push(classes.notEnabledPageMenuItem);\r\n\r\n    if (pageItem.isFallbackSelected) {\r\n      classNameArray.push(classes.notEnabledSelectedPageMenuItem);\r\n    }\r\n  }\r\n\r\n  const className = classNames(classNameArray);\r\n\r\n  return (\r\n    <div\r\n      key={`wrapper-div-${pageItem.id}`}\r\n      className={className}\r\n      aria-label={pageItem.content}\r\n      role=\"link\"\r\n    >\r\n      {withRelationLine && <div className={classes.relationLine} />}\r\n      {pageItem.isSelected && <div className={classes.beforeIcon} />}\r\n      {renderIcon && <div className={classes.iconContainer}>{renderIcon(pageItem)}</div>}\r\n      {(!renderIcon || !collapsed) && <PageMenuItemText classes={classes} pageItem={pageItem} pageItemUrl={pageItemUrl} showLabel={showLabel} />}\r\n      <LandingPageSelector\r\n        isPageEnabled={pageItem.isPageEnabled}\r\n        isDefaultLandingPage={pageItem.isDefaultLandingPage}\r\n        pageId={pageItem.id}\r\n        setLandingPage={setLandingPage}\r\n        defaultLandingPageTooltipText={pageItem.defaultLandingPageTooltipText}\r\n      />\r\n    </div>\r\n  );\r\n};\r\n\r\nPageMenuItem.defaultProps = {\r\n  setLandingPage: null,\r\n  pageItemUrl: '',\r\n  withRelationLine: false,\r\n  showLabel: false,\r\n  renderIcon: null,\r\n  collapsed: false,\r\n};\r\n\r\nPageMenuItemText.propTypes = {\r\n  classes: PropTypes.shape(_.mapObject(\r\n    getPageMenuItemStyles({}, {}),\r\n    _.constant(PropTypes.string.isRequired)\r\n  )).isRequired,\r\n  pageItem: PropTypes.shape({\r\n    id: PropTypes.string.isRequired,\r\n    content: PropTypes.string.isRequired,\r\n    isDefaultLandingPage: PropTypes.bool,\r\n  }).isRequired,\r\n  pageItemUrl: PropTypes.string.isRequired,\r\n  showLabel: PropTypes.bool.isRequired,\r\n};\r\n\r\nPageMenuItem.propTypes = {\r\n  classes: PropTypes.shape(_.mapObject(\r\n    getPageMenuItemStyles({}, {}),\r\n    _.constant(PropTypes.string.isRequired)\r\n  )).isRequired,\r\n  pageItem: PropTypes.shape({\r\n    id: PropTypes.string.isRequired,\r\n    content: PropTypes.string.isRequired,\r\n    isDefaultLandingPage: PropTypes.bool,\r\n    isSelected: PropTypes.bool.isRequired,\r\n    isPageEnabled: PropTypes.bool.isRequired,\r\n    isFallbackSelected: PropTypes.bool.isRequired,\r\n    defaultLandingPageTooltipText: PropTypes.string,\r\n    showTag: PropTypes.string,\r\n    tagClass: PropTypes.string,\r\n  }).isRequired,\r\n  setLandingPage: PropTypes.func,\r\n  pageItemUrl: PropTypes.string,\r\n  withRelationLine: PropTypes.bool,\r\n  showLabel: PropTypes.bool,\r\n  renderIcon: PropTypes.func,\r\n  collapsed: PropTypes.bool,\r\n};\r\n\r\nexport default withDefaultStyles(withFallbackCallout(PageMenuItem), getPageMenuItemStyles);\r\n","import classNames from 'classnames';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { keyCode } from '@bingads-webui/keycode';\r\nimport { siteMapPropType } from '@bingads-webui-campaign-react/with-site-map';\r\nimport { QueryParam } from '@bingads-webui-react/scope-service';\r\nimport { withI18nConsumer } from '@bingads-webui-react/i18n-context';\r\nimport { ListSelector, AriaRoleType } from '@bingads-webui-react/list-selector';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { withActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { getPathName, getPageItems, getPageItemUrl } from './common/page-item-helper';\r\nimport { getPageMenuStyles } from './styles/page-menu-styles';\r\nimport PageMenuItem from './components/page-menu-item';\r\n\r\nclass PageMenu extends React.PureComponent {\r\n  constructor(props) {\r\n    super(props);\r\n\r\n    this.state = {\r\n      selectedFallbackPageItem: null,\r\n      isSetLandingPageButtonFocused: false,\r\n    };\r\n  }\r\n\r\n  componentDidUpdate() {\r\n    if (this.props.perfMarker &&\r\n      !this.props.perfMarker.isDone\r\n    ) {\r\n      this.props.perfMarker.done();\r\n    }\r\n  }\r\n\r\n  onSelect = (selectedPageItem) => {\r\n    const { scope, activity } = this.props;\r\n\r\n    activity.signal(`list selector - page menu item clicked, name: ${selectedPageItem.content}`);\r\n\r\n    if (selectedPageItem.isPageEnabled) {\r\n      scope.save(getPathName(selectedPageItem));\r\n\r\n      this.setState({\r\n        selectedFallbackPageItem: null,\r\n      });\r\n    } else {\r\n      this.setState(state => ({\r\n        // Toggle the state so the callout toggles as well\r\n        selectedFallbackPageItem: state.selectedFallbackPageItem === selectedPageItem\r\n          ? null\r\n          : selectedPageItem,\r\n      }));\r\n    }\r\n  }\r\n\r\n  onTabNext = (event) => {\r\n    if (event.keyCode !== keyCode.Tab) {\r\n      return;\r\n    }\r\n\r\n    const setLandingPageButton = document.querySelector('.set-landing-page-button');\r\n    if (!setLandingPageButton) {\r\n      return;\r\n    }\r\n\r\n    if (this.state.isSetLandingPageButtonFocused) {\r\n      this.focusFirstButtonOnSubPageMenu();\r\n      this.setState({ isSetLandingPageButtonFocused: false });\r\n    } else {\r\n      setLandingPageButton.focus();\r\n      this.setState({ isSetLandingPageButtonFocused: true });\r\n    }\r\n  }\r\n\r\n  onBlur = () => {\r\n    this.setState({ isSetLandingPageButtonFocused: false });\r\n  }\r\n\r\n  focusFirstButtonOnSubPageMenu = () => {\r\n    const firstButtonOnSubPageMenu = document.querySelector('.bingads-campaign-react-sub-page-menu button');\r\n    if (firstButtonOnSubPageMenu) {\r\n      firstButtonOnSubPageMenu.focus();\r\n    }\r\n  }\r\n\r\n  handleFallbackCalloutClose = (id, e) => {\r\n    // This prevents the base menu item from triggering it's onClick\r\n    e.stopPropagation();\r\n\r\n    this.setState((state) => {\r\n      // Check to see if we have opened another callout\r\n      if (state.selectedFallbackPageItem && id === state.selectedFallbackPageItem.id) {\r\n        return {\r\n          selectedFallbackPageItem: null,\r\n        };\r\n      }\r\n\r\n      return {};\r\n    });\r\n  }\r\n\r\n  renderDivider = (item) => {\r\n    const { classes } = this.props;\r\n    return (\r\n      <div\r\n        key={item.id}\r\n        className={classNames([classes.divider, 'bingads-campaign-react-page-menu-divider'])}\r\n      />);\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      classes,\r\n      siteMap,\r\n      i18n,\r\n      defaultLandingPage,\r\n      setLandingPage,\r\n      pageGroups,\r\n      scope,\r\n      collapsed,\r\n    } = this.props;\r\n    const pageMenuClassName = classNames([\r\n      classes.pageMenuContainer,\r\n      'bingads-campaign-react-page-menu',\r\n      collapsed && classes.collapsedPageMenuContainer,\r\n    ]);\r\n\r\n    const isFallbackSelected = item =>\r\n      !!this.state.selectedFallbackPageItem && this.state.selectedFallbackPageItem.id === item.id;\r\n\r\n    const pageItems = getPageItems(pageGroups, siteMap, i18n, defaultLandingPage, isFallbackSelected);\r\n    const selectedPageItem = _.findWhere(pageItems, { isSelected: true });\r\n\r\n    return (\r\n      <nav className={pageMenuClassName} aria-label={i18n.getString(_TL_('Page menu'))} >\r\n        <ListSelector\r\n          renderItem={\r\n            item =>\r\n            (<PageMenuItem\r\n              pageItem={item}\r\n              fallbackSiteMapId={item.id}\r\n              fallbackTitle={item.content}\r\n              fallbackShow={isFallbackSelected(item)}\r\n              fallbackHandleClose={e => this.handleFallbackCalloutClose(item.id, e)}\r\n              setLandingPage={setLandingPage}\r\n              pageItemUrl={getPageItemUrl(item, scope)}\r\n              renderIcon={this.props.renderItemIcon}\r\n              collapsed={collapsed}\r\n            />)\r\n          }\r\n          data={pageItems}\r\n          renderDivider={this.renderDivider}\r\n          selectedItem={selectedPageItem}\r\n          extraData={this.state.selectedFallbackPageItem} // Tells the component to re-render\r\n          onSelect={this.onSelect}\r\n          onKeyDown={this.onTabNext}\r\n          onBlur={this.onBlur}\r\n          enableArrowKeysSupport\r\n          ariaLabel={i18n.getString(_TL_('Page menu'))}\r\n          // since we have button/a under item, use list to fix nested interactive controls issue\r\n          ariaRole={AriaRoleType.List}\r\n        />\r\n      </nav>\r\n    );\r\n  }\r\n}\r\n\r\nPageMenu.defaultProps = {\r\n  defaultLandingPage: null,\r\n  setLandingPage: null,\r\n  perfMarker: null,\r\n  activity: { signal: _.noop },\r\n  renderItemIcon: null,\r\n  collapsed: false,\r\n};\r\n\r\nPageMenu.propTypes = {\r\n  classes: PropTypes.shape(_.mapObject(\r\n    getPageMenuStyles({}, {}),\r\n    _.constant(PropTypes.string.isRequired)\r\n  )).isRequired,\r\n  scope: PropTypes.instanceOf(QueryParam).isRequired,\r\n  i18n: PropTypes.shape({\r\n    getString: PropTypes.func,\r\n  }).isRequired,\r\n  siteMap: siteMapPropType.isRequired,\r\n  defaultLandingPage: PropTypes.string,\r\n  setLandingPage: PropTypes.func,\r\n  perfMarker: PropTypes.shape({\r\n    done: PropTypes.func.isRequired,\r\n    isDone: PropTypes.bool.isRequired,\r\n  }),\r\n  pageGroups: PropTypes.arrayOf(PropTypes.array).isRequired,\r\n  activity: PropTypes.shape({\r\n    signal: PropTypes.func.isRequired,\r\n  }),\r\n  renderItemIcon: PropTypes.func,\r\n  collapsed: PropTypes.bool,\r\n};\r\n\r\nexport const StyledPageMenu = withActivityContext(withI18nConsumer(withDefaultStyles(\r\n  PageMenu,\r\n  getPageMenuStyles\r\n)));\r\n","export const getPageMenuStyles = (pageMenu, { palette = {} }) => ({\r\n  pageMenuContainer: {\r\n    paddingTop: 7,\r\n    width: '100%',\r\n    backgroundColor: palette.neutralLighter,\r\n    borderRight: `solid 1px ${palette.neutralQuaternaryAlt}`,\r\n    position: 'absolute',\r\n    top: 0,\r\n    bottom: 0,\r\n    overflowX: 'hidden',\r\n    overflowY: 'hidden',\r\n    '&:hover': {\r\n      overflowY: 'auto',\r\n    },\r\n    '& .list-selector-item': {\r\n      width: 163,\r\n      position: 'relative',\r\n      '&:focus': {\r\n        outline: `1px solid ${palette.neutralSecondary}`,\r\n        outlineOffset: -1,\r\n      },\r\n      '& > div': {\r\n        width: 'unset',\r\n        height: 'unset',\r\n      },\r\n    },\r\n  },\r\n  divider: {\r\n    width: '100%',\r\n    borderTop: `solid 1px ${palette.neutralQuaternaryAlt}`,\r\n  },\r\n  collapsedPageMenuContainer: {\r\n    '& .list-selector-item': {\r\n      width: 47,\r\n    },\r\n  },\r\n});\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { withDefaultLandingPage } from '@bingads-webui-campaign-react/with-default-landing-page';\r\nimport { StyledPageMenu } from './page-menu';\r\n\r\n\r\nclass DefaultLandingPage extends React.PureComponent {\r\n  constructor(props) {\r\n    super(props);\r\n    if (props.appPerfMarker) {\r\n      this.campaignPageMenuPerfMarker = props.appPerfMarker.createChild('Campaigns_Page_Menu');\r\n      this.markAction('willInit');\r\n    }\r\n  }\r\n\r\n  markAction = (action) => {\r\n    if (this.campaignPageMenuPerfMarker && action) {\r\n      this.campaignPageMenuPerfMarker[action]();\r\n    }\r\n  }\r\n\r\n  render() {\r\n    this.markAction('willRender');\r\n\r\n    return (\r\n      <StyledPageMenu\r\n        perfMarker={this.campaignPageMenuPerfMarker}\r\n        defaultLandingPage={this.props.defaultLandingPage}\r\n        setLandingPage={this.props.setLandingPage}\r\n        {...this.props}\r\n      />\r\n    );\r\n  }\r\n}\r\n\r\nDefaultLandingPage.propTypes = {\r\n  appPerfMarker: PropTypes.shape({\r\n    createChild: PropTypes.func.isRequired,\r\n  }).isRequired,\r\n  defaultLandingPage: PropTypes.string.isRequired,\r\n  setLandingPage: PropTypes.func.isRequired,\r\n};\r\n\r\nexport const PageMenuWithDefaultLandingPage = withDefaultLandingPage(DefaultLandingPage);\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport _ from 'underscore';\r\nimport classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React, { useContext, useState } from 'react';\r\nimport { keyCode } from '@bingads-webui/keycode';\r\nimport { siteMapPropType } from '@bingads-webui-campaign-react/with-site-map';\r\nimport { QueryParam } from '@bingads-webui-react/scope-service';\r\nimport { withI18nConsumer } from '@bingads-webui-react/i18n-context';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport {\r\n  IconButton,\r\n  Link,\r\n  DetailsList,\r\n  DetailsRow,\r\n  SelectionMode\r\n} from '@fluentui/react';\r\nimport { DirectionalHint } from '@bingads-webui-react/fabric-control';\r\nimport { TeachingBubble } from '@bingads-webui-campaign-react/popup-components';\r\nimport { WaterfallFilterType } from '@bingads-webui-campaign/filter-storage';\r\nimport { withDefaultLandingPage } from '@bingads-webui-campaign-react/with-default-landing-page';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\n\r\nimport { getPathName, getPageItems, getPageItemUrl, getFlattenedItems, getGroupsForDetailList, mapToPageItems, getSingleItems, getTrimmedParams } from './common/page-item-helper';\r\nimport PageMenuItem from './components/page-menu-item';\r\nimport { getPageMenuStyles } from './styles/page-menu-detail-list-styles';\r\n\r\nconst columns = [\r\n  { key: 'name', name: 'name', fieldName: 'name' },\r\n];\r\n\r\nfunction DetailListPageMenuInternal(props) {\r\n  const {\r\n    classes,\r\n    siteMap,\r\n    i18n,\r\n    defaultLandingPage,\r\n    setLandingPage,\r\n    pageGroups,\r\n    scope,\r\n    noExpandGroups,\r\n    permissions,\r\n    serverContext,\r\n  } = props;\r\n  const [isTeachingBubbleVisible, setIsTeachingBubbleVisible] = useState(true);\r\n  const campaignTypeQuery = props[WaterfallFilterType.CampaignType] && props[WaterfallFilterType.CampaignType].value && props[WaterfallFilterType.CampaignType].value.query;\r\n  const campaignType = campaignTypeQuery && campaignTypeQuery.CampaignType && campaignTypeQuery.CampaignType.$in[0];\r\n  const {\r\n    RSAAutoGeneratedTeachingBubble,\r\n  } = permissions && permissions.dynamic;\r\n  const activity = useContext(ActivityContext);\r\n  const pageItems = getPageItems(pageGroups, siteMap, i18n, defaultLandingPage, () => false);\r\n  const items = mapToPageItems(getFlattenedItems(pageItems, noExpandGroups), i18n, defaultLandingPage, () => false);\r\n  const groups = getGroupsForDetailList(pageItems, items, noExpandGroups);\r\n  const singleItems = getSingleItems(groups, items);\r\n  const iconExpandLabel = i18n.getString(_TL_('Expand'));\r\n  const iconCollapseLabel = i18n.getString(_TL_('Collapse'));\r\n  const onSelect = item => (event, isFromHeader) => {\r\n    if (event.type !== 'click' && event.keyCode !== keyCode.Enter) {\r\n      // allow only click & enter event to select the item\r\n      return;\r\n    }\r\n    setClarityTag({ DetailListPageMenu: 'true' });\r\n    event.preventDefault();\r\n    if (!isFromHeader) {\r\n      activity.signal(`details list - page menu item clicked, name: ${item.id}`);\r\n    }\r\n    if (item.isPageEnabled) {\r\n      const trimmedParams = getTrimmedParams(item, scope);\r\n      scope.set(trimmedParams);\r\n      scope.save(getPathName(item));\r\n    }\r\n  };\r\n\r\n  const onRenderItemColumn = (item) => {\r\n    if (item.type === 'divider') {\r\n      return null;\r\n    }\r\n\r\n    const singleItem = _.findWhere(singleItems, item);\r\n    let renderItem = item;\r\n    if (singleItem) {\r\n      renderItem = _.findWhere(pageItems, { id: singleItem.parentId });\r\n    }\r\n\r\n    return (\r\n      <div className={classes.pageMenuItem}>\r\n        <PageMenuItem\r\n          pageItem={renderItem}\r\n          setLandingPage={setLandingPage}\r\n          pageItemUrl={getPageItemUrl(renderItem, scope)}\r\n          withRelationLine={!singleItem}\r\n          showLabel\r\n          fallbackTitle={renderItem.content}\r\n        />\r\n      </div>\r\n    );\r\n  };\r\n\r\n  const onToggleCollapse = listprops => () => {\r\n    activity.signal(`toggle icon clicked, ori: ${!!listprops.group.isCollapsed}`);\r\n    listprops.onToggleCollapse(listprops.group);\r\n  };\r\n\r\n  const onGroupHeaderclick = listprops => (e) => {\r\n    activity.signal(`group header clicked, name: ${listprops.group.keyId}`);\r\n    if (listprops.group.isSelected) {\r\n      listprops.onToggleCollapse(listprops.group);\r\n    } else {\r\n      onSelect(items[listprops.group.startIndex])(e, true);\r\n    }\r\n  };\r\n\r\n  const onRenderGroupHeader = (listprops) => {\r\n    if (listprops && listprops.group) {\r\n      if (listprops.group.count > 1) {\r\n        const { group } = listprops;\r\n        const iconLabel = group.isCollapsed ? iconExpandLabel : iconCollapseLabel;\r\n        const isSettingBannerExist = document.querySelector('.bingads-campaign-react-page-menu-item-settings') && (document.querySelector('.bingads-campaign-react-page-menu-item-settings').offsetHeight > 0);\r\n        const MarketName = (serverContext && serverContext.HelpModel && serverContext.HelpModel.MarketName) || 'en-US';\r\n        const language = (MarketName && MarketName.includes('-')) ? MarketName.split('-')[0] : 'en';\r\n\r\n        return (\r\n          <div\r\n            className={classNames([classes.pageMenuGroupHeader, group.isSelected ? classes.pageMenuSelectedGroupHeader : '', group.isSelected ? 'selected' : '', 'bingads-campaign-react-page-menu-item', `bingads-campaign-react-page-menu-group-header-${group.keyId}`])}\r\n            title={group.name}\r\n          >\r\n            <IconButton\r\n              iconProps={{ iconName: group.isCollapsed ? 'ChevronRight' : 'ChevronDownMed' }}\r\n              ariaLabel={iconLabel}\r\n              onClick={onToggleCollapse(listprops)}\r\n              className={classNames([\r\n                classes.pageMenuGroupHeaderIcon,\r\n                group.isCollapsed ? '' : classes.pageMenuGroupHeaderDownIcon,\r\n                group.isCollapsed ? 'ChevronRight' : 'ChevronDownMed',\r\n              ])}\r\n              aria-expanded={!group.isCollapsed}\r\n            />\r\n            <Link\r\n              role=\"button\"\r\n              onClick={onGroupHeaderclick(listprops)}\r\n              className={classNames([`bingads-campaign-react-page-menu-item-${group.keyId}`, 'page-menu-item-content', classes.pageMenuGroupHeaderContent])}\r\n              aria-expanded={!group.isCollapsed}\r\n            >\r\n              {group.name}\r\n            </Link>\r\n            {RSAAutoGeneratedTeachingBubble && campaignType && campaignType.includes('Default') && isTeachingBubbleVisible && isSettingBannerExist && group.keyId === 'settings' &&\r\n            <TeachingBubble\r\n              featureName=\"rsa-autogenerated-assets\"\r\n              title={i18n.getString(_TL_('Enable auto-generated assets for responsive search ads'))}\r\n              content={i18n.getString(_TL_('Save time and maximize ad performance by enabling auto-generated assets for responsive search ads. We‘ll leverage content from your website’s landing page to customize your headlines and descriptions and make them more relevant.'))}\r\n              onDone={() => { setIsTeachingBubbleVisible(false); window.open(`https://help.ads.microsoft.com/#apex/ads/${language}/help:60037/0/${MarketName}/#EnableAutoAssets`); }}\r\n              onDismiss={() => { setIsTeachingBubbleVisible(false); }}\r\n              onClose={() => { setIsTeachingBubbleVisible(false); }}\r\n              primaryButtonText={i18n.getString(_TL_('Learn more'))}\r\n              targetElement=\".bingads-campaign-react-page-menu-item-settings\"\r\n              directionalHint={DirectionalHint.rightBottomEdge}\r\n            />\r\n            }\r\n          </div>\r\n        );\r\n      }\r\n\r\n      if (!listprops.group.name) { // divider\r\n        return (\r\n          <div\r\n            key={listprops.group.key}\r\n            className={classNames([classes.divider, 'bingads-campaign-react-page-menu-divider'])}\r\n          />\r\n        );\r\n      }\r\n\r\n      return <div className={classes.pageMenuSingleItemGroupHeader} />;\r\n    }\r\n    return null;\r\n  };\r\n\r\n  const onRenderRow = (rowProps) => {\r\n    const singleItem = _.findWhere(singleItems, rowProps.item);\r\n    let renderItem = rowProps.item;\r\n    if (singleItem) {\r\n      renderItem = _.findWhere(pageItems, { id: singleItem.parentId });\r\n    }\r\n\r\n    return (<DetailsRow\r\n      {...rowProps}\r\n      className={classNames([\r\n        classes.pageMenuRow,\r\n        'page-menu-detail-list-row',\r\n      ])}\r\n      onClick={onSelect(renderItem)}\r\n      onKeyDown={onSelect(renderItem)}\r\n      role=\"row\"\r\n    />);\r\n  };\r\n\r\n  const pageMenuClassName = classNames([\r\n    classes.pageMenuContainer,\r\n    classes.leftNavigationStyle,\r\n    'bingads-campaign-react-page-menu',\r\n  ]);\r\n\r\n  return (\r\n    <nav className={pageMenuClassName} aria-label={i18n.getString(_TL_('Page menu'))} >\r\n      <div className=\"list-selector-content\">\r\n        <DetailsList\r\n          items={items}\r\n          groups={groups}\r\n          groupProps={{\r\n            onRenderHeader: onRenderGroupHeader,\r\n          }}\r\n          columns={columns}\r\n          selectionMode={SelectionMode.none}\r\n          isHeaderVisible={false}\r\n          onRenderItemColumn={onRenderItemColumn}\r\n          onRenderRow={onRenderRow}\r\n          compact\r\n          isPlaceholderData\r\n          indentWidth={21}\r\n          styles={{\r\n            root: {\r\n              backgroundColor: '#F3f2f1',\r\n            },\r\n            headerWrapper: {\r\n              backgroundColor: '#F3f2f1',\r\n            },\r\n            contentWrapper: {\r\n              backgroundColor: '#F3f2f1',\r\n            },\r\n          }}\r\n          listProps={{\r\n            className: classNames([\r\n              classes.list,\r\n              'page-menu-detail-list-list',\r\n            ]),\r\n          }}\r\n          role=\"treegrid\"\r\n        />\r\n      </div>\r\n    </nav>\r\n  );\r\n}\r\n\r\nDetailListPageMenuInternal.propTypes = {\r\n  classes: PropTypes.shape(_.mapObject(\r\n    getPageMenuStyles({}, {}),\r\n    _.constant(PropTypes.string.isRequired)\r\n  )).isRequired,\r\n  scope: PropTypes.instanceOf(QueryParam).isRequired,\r\n  i18n: PropTypes.shape({\r\n    getString: PropTypes.func,\r\n  }).isRequired,\r\n  siteMap: siteMapPropType.isRequired,\r\n  defaultLandingPage: PropTypes.string,\r\n  setLandingPage: PropTypes.func,\r\n  perfMarker: PropTypes.shape({\r\n    done: PropTypes.func.isRequired,\r\n    isDone: PropTypes.bool.isRequired,\r\n  }),\r\n  pageGroups: PropTypes.arrayOf(PropTypes.array).isRequired,\r\n  noExpandGroups: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n};\r\n\r\nDetailListPageMenuInternal.defaultProps = {\r\n  defaultLandingPage: null,\r\n  setLandingPage: null,\r\n  perfMarker: null,\r\n};\r\n\r\nexport const DetailListPageMenu = withDefaultLandingPage(withI18nConsumer(withDefaultStyles(\r\n  DetailListPageMenuInternal,\r\n  getPageMenuStyles\r\n)));\r\n","export const getPageMenuStyles = (pageMenu, { palette = {} }) => ({\r\n  pageMenuContainer: {\r\n    paddingTop: 7,\r\n    width: '100%',\r\n    backgroundColor: palette.neutralLighter,\r\n    borderRight: `solid 1px ${palette.neutralQuaternaryAlt}`,\r\n    position: 'absolute',\r\n    top: 0,\r\n    bottom: 0,\r\n    overflowX: 'hidden',\r\n    overflowY: 'hidden',\r\n    '&:hover': {\r\n      overflowY: 'auto',\r\n    },\r\n    '& .ms-DetailsRow-cell': {\r\n      padding: 0,\r\n      minWidth: 134,\r\n    },\r\n    '&::-webkit-scrollbar': {\r\n      width: '8px',\r\n      backgroundColor: 'transparent',\r\n    },\r\n    '&::-webkit-scrollbar-track': {\r\n      backgroundColor: 'transparent',\r\n    },\r\n    '&::-webkit-scrollbar-thumb': {\r\n      borderRadius: '10px',\r\n      backgroundColor: '#C0C0C0',\r\n    },\r\n    '& ::-webkit-scrollbar-thumb:hover': {\r\n      background: '#a8a8a8',\r\n    },\r\n    '& .ms-List .ms-List-page .ms-List-cell': {\r\n      minHeight: 1,\r\n    },\r\n    '& .ms-List .ms-List-page .ms-List-cell:last-child:not(:first-child)': {\r\n      marginBottom: 8,\r\n    },\r\n  },\r\n  divider: {\r\n    width: '100%',\r\n    borderTop: `solid 1px ${palette.neutralQuaternaryAlt}`,\r\n    '& + div': {\r\n      display: 'none',\r\n    },\r\n  },\r\n  leftNavigationStyle: {\r\n    paddingLeft: 5,\r\n  },\r\n  list: {\r\n    backgroundColor: palette.neutralLighter,\r\n  },\r\n  pageMenuItem: {\r\n    '& .page-menu-item-content': {\r\n      fontSize: 13,\r\n    },\r\n    '& .page-menu-item-selected': {\r\n      backgroundColor: palette.neutralLight,\r\n    },\r\n    '& .bingads-campaign-react-page-menu-item': {\r\n      paddingRight: 0,\r\n    },\r\n    '& .page-menu-item-text-container': {\r\n      marginLeft: 14,\r\n      whiteSpace: 'normal',\r\n    },\r\n    '& > div': {\r\n      width: 'unset',\r\n      height: 'unset',\r\n    },\r\n  },\r\n  pageMenuGroupHeader: {\r\n    padding: '8.5px 0 8.5px 16px',\r\n    fontSize: 13,\r\n    fontWeight: 400,\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    '& button, & .ms-Link': {\r\n      color: palette.neutralPrimary,\r\n      textDecoration: 'none',\r\n      '@media screen and (forced-colors: active)': {\r\n        color: 'canvasText',\r\n      },\r\n    },\r\n    '&:hover': {\r\n      backgroundColor: palette.neutralLight,\r\n      textDecoration: 'none',\r\n    },\r\n    '&:active, & .ms-Link:active:hover': {\r\n      backgroundColor: palette.neutralQuaternaryAlt,\r\n      textDecoration: 'none',\r\n    },\r\n  },\r\n  pageMenuSelectedGroupHeader: {\r\n    fontWeight: 600,\r\n  },\r\n  pageMenuSingleItemGroupHeader: {\r\n  },\r\n  pageMenuGroupHeaderIcon: {\r\n    width: 12,\r\n    height: 22,\r\n    marginRight: 6,\r\n    '& i': {\r\n      fontSize: 8,\r\n      color: palette.neutralPrimary,\r\n    },\r\n  },\r\n  pageMenuGroupHeaderContent: {\r\n    flexBasis: '100%',\r\n  },\r\n  pageMenuGroupHeaderDownIcon: {\r\n    '& i': {\r\n      marginTop: 6,\r\n    },\r\n  },\r\n  pageMenuRow: {\r\n    backgroundColor: palette.neutralLighter,\r\n    '& .ms-DetailsRow-cell': {\r\n      position: 'static',\r\n    },\r\n  },\r\n});\r\n","import _ from 'underscore';\r\nimport appConfig from '@bingads-webui-component-legacy/config/index';\r\nimport {\r\n  generateBaseBIColumns,\r\n  getListOfRawBIColumns,\r\n  RSAAdCustomizerAttributesColumn,\r\n} from '@bingads-webui-campaign-legacy/campaigns-tab-campaigns/grid/columns-config-base';\r\n\r\nconst Permissions = appConfig.get('Permissions');\r\nconst isPortfolioBidStrategyEnabled = _.result(Permissions.dynamic, 'PortfolioBidStrategy');\r\nconst isBroadOnlyEnabled = _.result(Permissions.dynamic, 'BroadOnly');\r\nconst isPredictiveMatchingEnabled = _.result(Permissions.dynamic, 'PredictiveMatching');\r\n\r\nconst {\r\n  IsAvgPositionDeprecationPhase1Enabled,\r\n  IsExperimentsEnabled: showExperiment,\r\n} = Permissions;\r\n\r\nexport const KeywordStatusColumn = {\r\n  name: 'Status',\r\n  property: _.compact([\r\n    'Status',\r\n    showExperiment && 'Campaign/ExperimentId',\r\n  ]),\r\n};\r\n\r\nexport const KeywordColumn = {\r\n  name: 'Keyword',\r\n  property: ['Text', 'Id', 'Labels', 'AdGroup/Id', 'Campaign/Id', 'RSAAdCustomizerAttributes'],\r\n};\r\n\r\nexport const CampaignColumn = {\r\n  name: 'Campaign',\r\n  property: _.compact([\r\n    'Campaign/Name',\r\n    'Campaign/Id',\r\n    showExperiment && 'Campaign/BaseCampaignName',\r\n  ]),\r\n};\r\nexport const AdGroupColumn = {\r\n  name: 'AdGroup',\r\n  property: ['AdGroup/Name', 'AdGroup/Id'],\r\n};\r\n\r\nexport const BidStrategyNameColumn = {\r\n  name: 'BidStrategyName',\r\n  property: 'Campaign/BidStrategyName',\r\n};\r\n\r\nexport const BidStrategyTypeColumn = {\r\n  name: 'BidStrategyType',\r\n  property: 'DisplayBiddingStrategyType',\r\n};\r\n\r\nexport const BidColumn = {\r\n  name: 'Bid',\r\n  property: ['Bid/Amount', // currently require this will return whole bid object\r\n    'IsBidLandscapeAvailable',\r\n    'Campaign/CampaignType',\r\n    'AdGroup/PricingModel',\r\n    'DisplayBiddingStrategyType',\r\n    'Campaign/Id',\r\n    'AdGroup/Id'],\r\n};\r\n\r\nexport const MatchTypeColumn = {\r\n  name: 'MatchType',\r\n  property: _.compact([\r\n    'MatchType',\r\n    (isBroadOnlyEnabled || isPredictiveMatchingEnabled) && 'Campaign/IsBroadMatchOnlyCampaign',\r\n  ]),\r\n};\r\nexport const DeliveryColumn = {\r\n  name: 'Delivery',\r\n  property: ['DeliveryStatus',\r\n    'DeliveryStatusDetails',\r\n    'QualityScore',\r\n    'NegativeKeywordConflictDetails',\r\n    'BidBelowFirstPageDetail',\r\n    'BidEstimate',\r\n    'Id'],\r\n};\r\n\r\nexport const QualityScoreColumn = {\r\n  name: 'QualityScore',\r\n  property: 'QualityScore',\r\n};\r\n\r\nexport const LandingPageColumn = {\r\n  name: 'LandingPage',\r\n  property: ['DestinationUrl', 'FinalUrls', 'MobileFinalUrls'],\r\n};\r\n\r\nexport const CustomParametersColumn = {\r\n  name: 'CustomParameters',\r\n  property: 'UrlCustomParameters',\r\n};\r\n\r\nexport const TrackingTemplateColumn = {\r\n  name: 'TrackingTemplate',\r\n  property: 'TrackingUrlTemplate',\r\n};\r\n\r\nexport const FinalUrlSuffixColumn = {\r\n  name: 'FinalUrlSuffix',\r\n  property: 'FinalUrlSuffix',\r\n};\r\n\r\nexport const Param1Column = {\r\n  name: 'Param1',\r\n  property: 'Param1',\r\n};\r\n\r\nexport const Param2Column = {\r\n  name: 'Param2',\r\n  property: 'Param2',\r\n};\r\n\r\nexport const Param3Column = {\r\n  name: 'Param3',\r\n  property: 'Param3',\r\n};\r\n\r\nexport const FirstPageBidEstimationColumn = {\r\n  name: 'FirstPageBidEstimation',\r\n  property: 'BidEstimate/FirstPageBidEstimation',\r\n};\r\n\r\nexport const MainlineBidEstimationColumn = {\r\n  name: 'MainlineBidEstimation',\r\n  property: 'BidEstimate/MainlineBidEstimation',\r\n};\r\n\r\nexport const BestPositionBidEstimationColumn = {\r\n  name: 'BestPositionBidEstimation',\r\n  property: 'BidEstimate/BestPositionBidEstimation',\r\n};\r\n\r\nexport const KeywordIdColumn = {\r\n  name: 'KeywordId',\r\n  property: 'Id',\r\n};\r\n\r\nexport const LabelsColumn = {\r\n  name: 'Labels',\r\n  property: 'Labels',\r\n};\r\n\r\nexport const getLockedColumns = ({ scope }) => {\r\n  const { campaignId, adGroupId } = scope;\r\n  const baseLockedColumns = _.compact([\r\n    'Status',\r\n    'Keyword',\r\n    !campaignId && 'Campaign',\r\n    !adGroupId && 'AdGroup',\r\n    'MatchType',\r\n  ]);\r\n  return baseLockedColumns;\r\n};\r\n\r\nexport const getSelectedColumns = ({ scope }) => {\r\n  const { campaignId, adGroupId } = scope;\r\n  const baseSelectedColumns = _.compact([\r\n    KeywordStatusColumn,\r\n    KeywordColumn,\r\n    !campaignId && CampaignColumn,\r\n    !adGroupId && AdGroupColumn,\r\n    isPortfolioBidStrategyEnabled && BidStrategyNameColumn,\r\n    BidStrategyTypeColumn,\r\n    DeliveryColumn,\r\n    BidColumn,\r\n    MatchTypeColumn,\r\n    LabelsColumn,\r\n    RSAAdCustomizerAttributesColumn,\r\n    'Clicks',\r\n    'Impressions',\r\n    'CTR',\r\n    'AverageCPC',\r\n    'Spend',\r\n    'AveragePosition',\r\n    IsAvgPositionDeprecationPhase1Enabled && 'TopImpressionRate',\r\n    IsAvgPositionDeprecationPhase1Enabled && 'AbsoluteTopImpressionRate',\r\n  ]);\r\n  return baseSelectedColumns;\r\n};\r\n\r\nexport function getColumnsMap({ gridName }) {\r\n  const baseColumns = [\r\n    KeywordStatusColumn,\r\n    KeywordColumn,\r\n    CampaignColumn,\r\n    AdGroupColumn,\r\n    BidStrategyNameColumn,\r\n    BidStrategyTypeColumn,\r\n    BidColumn,\r\n    MatchTypeColumn,\r\n    DeliveryColumn,\r\n    QualityScoreColumn,\r\n    LandingPageColumn,\r\n    CustomParametersColumn,\r\n    TrackingTemplateColumn,\r\n    FinalUrlSuffixColumn,\r\n    Param1Column,\r\n    Param2Column,\r\n    Param3Column,\r\n    FirstPageBidEstimationColumn,\r\n    MainlineBidEstimationColumn,\r\n    BestPositionBidEstimationColumn,\r\n    KeywordIdColumn,\r\n    LabelsColumn,\r\n    RSAAdCustomizerAttributesColumn,\r\n  ];\r\n  const baseRawBIColumns = generateBaseBIColumns(getListOfRawBIColumns(gridName));\r\n  const columns = [...baseColumns, ...baseRawBIColumns];\r\n  return _.object(_.map(columns, column => [column.name, column.property]));\r\n}\r\n","import _ from 'underscore';\r\nimport { getCommonFilterConfig } from '@bingads-webui-campaign/common-grid-config';\r\nimport { getLocalizedEditorialRejectionReasons } from '@bingads-webui-campaign/url-filter-metadata';\r\n\r\nconst mockI18n = {\r\n  get: _.identity,\r\n  getString: _.identity,\r\n  type: _.identity,\r\n  enum: _.identity,\r\n  value: _.identity,\r\n  enumMappedString: _.identity,\r\n  enumDescription: _.identity,\r\n  valueDescription: _.identity,\r\n  parseInt: _.identity,\r\n  property: _.identity,\r\n};\r\nconst i18nCache = {\r\n  i18n: mockI18n,\r\n  newI18n: mockI18n,\r\n  legacyGlobalI18n: mockI18n,\r\n  schemaI18nCampaign: mockI18n,\r\n};\r\n\r\n\r\nexport function getFilterConfig({\r\n  jsdata,\r\n  appConfig,\r\n  entitySchema,\r\n  cachedEntitySchema,\r\n  ...restParams\r\n}) {\r\n  // Cache i18n data, so that the DFM call can also access the correct i18n data\r\n  _.mapObject(i18nCache, (val, key) => {\r\n    if (restParams[key]) {\r\n      i18nCache[key] = restParams[key];\r\n    }\r\n  });\r\n  const filterConfig = getCommonFilterConfig({\r\n    ...i18nCache,\r\n    ...restParams,\r\n    editor: {},\r\n    entitySchema,\r\n    cachedEntitySchema,\r\n    searchbox: {\r\n      placeholder: i18nCache.i18n.getString('Schema_Keyword_Property_Text'),\r\n      searchProperty: 'Text',\r\n      searchOperator: '$contains',\r\n      maxLength: entitySchema.properties.Text.maxLength,\r\n    },\r\n    featureName: 'KeywordGrid',\r\n    jsdata,\r\n    globalConfig: appConfig,\r\n    enableCampaignWaterfall: true,\r\n    enableEditorialRejectionFilter: true,\r\n    enableAdGroupWaterfall: true,\r\n    selector: [{\r\n      items: [\r\n        {\r\n          text: i18nCache.i18n.getString('AllKeyword'),\r\n          value: null,\r\n        },\r\n        {\r\n          text: i18nCache.i18n.getString('AllEnabledKeyword'),\r\n          value: [\"Enum.OrderItemStatus'Active'\"],\r\n        },\r\n      ],\r\n      property: 'Status',\r\n      removable: false,\r\n      defaultValue: null,\r\n    }],\r\n  });\r\n  if (i18nCache.newI18n) {\r\n    // update schema for rejection reasons\r\n    const editorialRejectionFlagId = filterConfig.entitySchema.properties.EditorialRejectionFlagId;\r\n    if (editorialRejectionFlagId && !editorialRejectionFlagId.localized) {\r\n      editorialRejectionFlagId.localized = getLocalizedEditorialRejectionReasons(i18nCache.newI18n);\r\n      editorialRejectionFlagId.type = 'string';\r\n    }\r\n  }\r\n  return filterConfig;\r\n}\r\n","/* eslint-disable import/no-named-as-default-member */\r\nimport _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport edm from '@bingads-webui-component-legacy/edm-campaign/index';\r\nimport state from '@bingads-webui-component-legacy/state/index';\r\nimport jsdata from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport dateUtil from '@bingads-webui-component-legacy/humanize/date';\r\nimport appConfig from '@bingads-webui-component-legacy/config/index';\r\nimport pageContext from '@bingads-webui-static-legacy/page-context';\r\nimport cacheService from '@bingads-webui-static-legacy/cache-service';\r\nimport sessionStore from '@bingads-webui-component-legacy/js-data-storage/session-storage';\r\nimport dataContextManager from '@bingads-webui-static-legacy/summary/SummaryDataContextManager';\r\nimport legacyPreferenceService from '@bingads-webui-component-legacy/preference/service/index';\r\nimport * as preferenceStoreFactory from '@bingads-webui-component-legacy/bingads-grid/service/filter-preferences';\r\nimport * as SegmentationPreference from '@bingads-webui-component-legacy/bingads-grid/service/segmentation-preferences';\r\nimport * as customColumnPreference from '@bingads-webui-component-legacy/bingads-grid/service/custom-column-preferences';\r\nimport * as ColumnChooserPreference from '@bingads-webui-component-legacy/bingads-grid/service/column-chooser-preferences';\r\nimport { Keyword } from '@bingads-webui-campaign/campaign-ui-schemas';\r\nimport { fetchSortInfo } from '@bingads-webui-component-legacy/bingads-grid/service/fetch-sortinfo';\r\nimport { FilterService } from '@bingads-webui/filter-service';\r\nimport { getGridDataParams } from '@bingads-webui-campaign/summary-grid-helper';\r\nimport { fetchPaginationConfig } from '@bingads-webui-component-legacy/bingads-grid/service/fetch-pagination';\r\nimport { getColumnsConversionMap } from '@bingads-webui-campaign/column-conversions';\r\nimport { ChartDataAdapter } from '@bingads-webui-campaign-react/inline-chart';\r\nimport { InlineChartPreferences } from '@bingads-webui-campaign/inline-chart-preferences';\r\nimport { store, adapter } from '@bingads-webui-component-legacy/bingads-grid/service/grid-preferences';\r\nimport { DataSourceStore } from '@bingads-webui-campaign/data-source-store';\r\nimport { getFilterConfig } from './filter-config';\r\nimport { getColumnsMap, getSelectedColumns, getLockedColumns } from './columns-config';\r\n\r\nconst mockI18n = {\r\n  getString: _.identity,\r\n};\r\nconst gridName = 'summary_tab_keyword';\r\nconst CurrentTabId = 'Keywords';\r\nconst refreshCampaignCache = 'x-ms-refreshcampaigncache';\r\nconst isOdataActionSource = true;\r\nexport function getDataSourceConfig({\r\n  gridNameSource,\r\n  scope,\r\n  logActivity,\r\n  preferenceService,\r\n  ...restParams\r\n}) {\r\n  const Permissions = appConfig.get('Permissions');\r\n  const { dynamic = {} } = Permissions;\r\n  const {\r\n    ColumnConversion: IsColumnConversionEnabled,\r\n    KeywordsCombineGridAndChartOdataCallEnabled,\r\n  } = dynamic;\r\n\r\n  const initialQuery = isOdataActionSource ? {\r\n    query: {\r\n      nullifynotapplybidamounts: true,\r\n    },\r\n    gridDataParameters: getGridDataParams(appConfig),\r\n  } : {};\r\n\r\n  const scopeAdapter = _.extend({\r\n    customerId: scope.values.cid,\r\n    accountId: scope.values.aid,\r\n    campaignId: scope.values.campaignId,\r\n    adGroupId: scope.values.adGroupId,\r\n  }, scope);\r\n\r\n  if (scopeAdapter.adGroupId) {\r\n    state.set('campaign_id', scopeAdapter.campaignId);\r\n    state.set('adgroup_id', scopeAdapter.adGroupId);\r\n  } else if (scopeAdapter.campaignId) {\r\n    state.set('campaign_id', scopeAdapter.campaignId);\r\n    state.unset('adgroup_id');\r\n  } else {\r\n    state.unset('campaign_id');\r\n    state.unset('adgroup_id');\r\n  }\r\n\r\n  let edmEntity = edm.currentAccount;\r\n  if (scopeAdapter.adGroupId) {\r\n    edmEntity = edm.currentAdGroup;\r\n  } else if (scopeAdapter.campaignId) {\r\n    edmEntity = edm.currentCampaign;\r\n  }\r\n\r\n  const entitySet = edmEntity.Keywords['Default.GridData'];\r\n\r\n  const { KeywordsFilterImprovementEnabled } = Permissions.dynamic;\r\n  let existingDataSource;\r\n  let filterService;\r\n  let dataSource = {\r\n    type: 'jsdata',\r\n    entity: jsdata.Keyword,\r\n    primaryKey: 'Id',\r\n    query: {},\r\n    options: {\r\n      entitySet: edmEntity.Keywords,\r\n      cacheResponse: false,\r\n      useDfmCache: false,\r\n      headers: {\r\n        [refreshCampaignCache]: true,\r\n      },\r\n    },\r\n  };\r\n\r\n  if (gridNameSource && KeywordsFilterImprovementEnabled) {\r\n    existingDataSource = DataSourceStore.get(gridNameSource);\r\n\r\n    if (existingDataSource) {\r\n      // eslint-disable-next-line prefer-destructuring\r\n      dataSource = existingDataSource.dataSource;\r\n      // eslint-disable-next-line prefer-destructuring\r\n      filterService = existingDataSource.filterService;\r\n    }\r\n  }\r\n  if (!gridNameSource || !KeywordsFilterImprovementEnabled || !existingDataSource) {\r\n    const filterConfig = getFilterConfig({\r\n      ...restParams,\r\n      edm,\r\n      scope,\r\n      jsdata,\r\n      appConfig,\r\n      cacheService,\r\n      entitySchema: Keyword,\r\n      sessionStore,\r\n      customColumnPreference,\r\n      preferenceService,\r\n      preferenceStoreFactory: preferenceStoreFactory.getFilters,\r\n      dataContextManager,\r\n    });\r\n\r\n    filterService = new FilterService(filterConfig);\r\n  }\r\n\r\n  return {\r\n    existingDataSource,\r\n    dataSource,\r\n    filterService,\r\n    queryBuilder: {\r\n      decorators: _.compact([\r\n        {\r\n          name: 'columnChooser',\r\n          columnsMap: getColumnsMap({ gridName, scope: scopeAdapter }),\r\n          defaultColumns: getSelectedColumns({ gridName, scope: scopeAdapter }),\r\n          lockedColumns: getLockedColumns({ gridName, scope: scopeAdapter }),\r\n          addPoPColumnsOnComparisonEnabled: true,\r\n          customColumnsEnabled: Permissions.IsCustomColumnsInCampaignsSupported,\r\n          IsAvgPositionDeprecationPhase2Enabled: Permissions.IsAvgPositionDeprecationPhase2Enabled,\r\n          comparisonPoPColumns: [\r\n            'PeriodPerformanceMetrics',\r\n            'PerformanceMetricsChange',\r\n            'PerformanceMetricsChangePercentage',\r\n          ],\r\n        },\r\n        { name: 'dateFilter' },\r\n        { name: 'segment' },\r\n        { name: 'pagination', defaultPageSize: 50 },\r\n        { name: 'sorting' },\r\n        { name: 'filter', filterService },\r\n        { name: 'gridDataParameters', entitySet },\r\n        KeywordsCombineGridAndChartOdataCallEnabled && {\r\n          name: 'chartDataParameters',\r\n          entitySet,\r\n          pageState: state,\r\n          pageContext: { ...pageContext, CurrentTabId }, // At this point pageContext.CurrentTabId is still undefined, so we manually set the pageContext.CurrentTabId to 'Keywords'\r\n          chartDataAdapter: new ChartDataAdapter({ i18n: mockI18n, permissions: Permissions }),\r\n          inlineChartPreference: new InlineChartPreferences(\r\n            store,\r\n            appConfig,\r\n            adapter,\r\n            legacyPreferenceService.initialize().then(() => Promise.promisifyAll(legacyPreferenceService))\r\n          ),\r\n        },\r\n      ]),\r\n      commonConfig: {\r\n        featureName: gridName,\r\n        isOdataActionSource,\r\n        appConfig,\r\n        appState: state,\r\n        deps: {\r\n          dateUtil,\r\n          state,\r\n          ColumnChooserPreference,\r\n          CustomColumnPreference: customColumnPreference,\r\n          SegmentationPreference,\r\n          fetchPaginationConfig,\r\n          fetchSortInfo,\r\n        },\r\n        IsColumnConversionEnabled,\r\n        ...IsColumnConversionEnabled ? {\r\n          columnConversions: getColumnsConversionMap(gridName, Permissions),\r\n        } : {},\r\n      },\r\n      logActivity,\r\n      initialQuery,\r\n    },\r\n  };\r\n}\r\n","import jsdata from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport logger from '@bingads-webui-static-legacy/instrumentation/index';\r\nimport appConfig from '@bingads-webui-component-legacy/config/index';\r\nimport { connect } from '@bingads-webui-campaign/dqb-grid-datasource-connector';\r\nimport { DataSourceStore } from '@bingads-webui-campaign/data-source-store';\r\nimport { QueryBuilderFactory } from '@bingads-webui-campaign/query-builder';\r\nimport { QueryErrorFactory } from '@bingads-webui-campaign/dqb-grid-datasource-error-handler';\r\nimport { getDataSourceConfig } from './data-fetch-config';\r\n\r\nexport function getDataSource({\r\n  gridName,\r\n  ...restParams\r\n}) {\r\n  // DFM call doesn't pass gridName, while grid call passes gridName\r\n  // Thus, the DFM call will create a new dataSource, but the grid call will read the cache\r\n  const Permissions = appConfig.get('Permissions');\r\n  const { dynamic } = Permissions;\r\n  const { KeywordsFilterImprovementEnabled } = dynamic;\r\n  if (gridName && !KeywordsFilterImprovementEnabled) {\r\n    const existingDataSource = DataSourceStore.get(gridName);\r\n    if (existingDataSource) {\r\n      return existingDataSource;\r\n    }\r\n  }\r\n\r\n  const { KeywordsCombineGridAndChartOdataCallEnabled } = dynamic;\r\n  const dataFetchConfig = getDataSourceConfig({\r\n    gridNameSource: gridName,\r\n    ...restParams,\r\n  });\r\n  if (dataFetchConfig.existingDataSource) {\r\n    return dataFetchConfig.existingDataSource;\r\n  }\r\n  const { featureName } = dataFetchConfig.queryBuilder.commonConfig;\r\n  const queryBuilder = QueryBuilderFactory.make(dataFetchConfig.queryBuilder);\r\n  const queryErrors = QueryErrorFactory.make(dataFetchConfig.dataSource);\r\n  const dataSource = connect(\r\n    dataFetchConfig.dataSource,\r\n    queryBuilder,\r\n    featureName,\r\n    logger,\r\n    false,\r\n    KeywordsCombineGridAndChartOdataCallEnabled\r\n  );\r\n  dataSource.queryErrors = queryErrors;\r\n  dataSource.entity = jsdata.Keywords;\r\n  const { filterService } = dataFetchConfig;\r\n\r\n  if (!KeywordsFilterImprovementEnabled) {\r\n    DataSourceStore.set(featureName, dataSource);\r\n  } else {\r\n    const cacheableObjects = {\r\n      dataSource,\r\n      filterService,\r\n    };\r\n\r\n    DataSourceStore.set(featureName, cacheableObjects);\r\n  }\r\n  return { dataSource, filterService };\r\n}\r\n","var pug = require(\"!../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (value) {pug_mixins[\"entityName\"] = pug_interp = function(item){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\nvar isSearchTerm = item.typeName === 'SearchTerm';\nvar isAccount = item.typeName === 'Account';\nvar AccountActivityStatus = item.AccountActivityStatus;\nif (isAccount) {\nif (item.status === AccountActivityStatus.Errors) {\npug_html = pug_html + \"\\u003Cdiv\" + (\" class=\\\"account-error-icon icon-error\\\"\"+pug.attr(\"title\", item.i18n.getString('AccountStatus_Error'), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse\nif (item.status === AccountActivityStatus.Deleted) {\npug_html = pug_html + \"\\u003Cdiv\" + (\" class=\\\"account-deleted-icon\\\"\"+pug.attr(\"title\", item.i18n.getString('AccountStatus_Deleted'), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse\nif (item.status === AccountActivityStatus.Enabled) {\npug_html = pug_html + \"\\u003Cdiv\" + (\" class=\\\"account-enabled-icon icon-success\\\"\"+pug.attr(\"title\", item.i18n.getString('AccountStatus_Active'), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\n}\nelse\nif (!isSearchTerm) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"status\\\"\\u003E\";\nif (item.status === 'Deleted') {\nif (item.isExperiment) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"experiment-paused-icon\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cdiv class=\\\"statusDeleted_icon\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\n}\nelse\nif (item.status === 'Paused') {\nif (item.isExperiment) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"experiment-paused-icon\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cdiv class=\\\"statusPaused_icon\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\n}\nelse\nif (item.status === 'Suspended') {\nif (item.isExperiment) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"experiment-paused-icon\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cdiv class=\\\"statusSuspended_icon\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\n}\nelse\nif (item.status === 'Draft') {\nif (item.isExperiment) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"experiment-paused-icon\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cdiv class=\\\"statusDraft_icon\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\n}\nelse\nif (item.status === 'Expired') {\npug_html = pug_html + \"\\u003Cdiv class=\\\"statushypendisplay\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\nif (item.isExperiment) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"experiment-active-icon\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cdiv class=\\\"statusEnabled_icon\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003Ca\" + (pug.attr(\"href\", item.hash, true, true)+pug.attr(\"title\", item.hideToolTip ? '' : item.name, true, true)+pug.attr(\"aria-label\", item.i18n.getString(`${item.rawStatus} {{entity}}`, {entity: item.name}), true, true)+pug.attr(\"data-campaignid\", item.campaignId, true, true)+pug.attr(\"data-adgroupid\", item.adGroupId, true, true)+pug.attr(\"data-accountid\", item.accountId, true, true)+pug.attr(\"data-type\", item.typeName, true, true)+pug.attr(\"data-text\", item.text, true, true)+pug.attr(\"data-navigationLevel\", item.navigationLevel, true, true)+pug.attr(\"data-campaigntype\", item.campaignType, true, true)+pug.attr(\"data-rawstatus\", item.rawStatus, true, true)+pug.attr(\"data-campaignName\", item.campaignName, true, true)+pug.attr(\"data-adGoupName\", item.adGroupName, true, true)+pug.attr(\"data-matchType\", item.matchType, true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = item.name) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\nif (isAccount && item.status === 'Deleted') {\npug_html = pug_html + \"\\u003Cspan class=\\\"inactive\\\"\\u003E\" + (null == (pug_interp = `&nbsp(${item.i18n.getString('AccountStatus_InActive')})`) ? \"\" : pug_interp) + \"\\u003C\\u002Fspan\\u003E\";\n}\n};\npug_html = pug_html + \"\\u003Cdiv class=\\\"grid-cell grid-cell--Name\\\"\\u003E\";\nvar hideToolTip = (value.typeName === 'Keyword') || (value.typeName === 'SearchTerm' && value.matchingKeyword);\nvar nameCell = {};\nnameCell.status = value.Status;\nnameCell.name = value.Name;\nnameCell.hash = value.hash;\nnameCell.campaignId = value.ids.campaignId;\nnameCell.adGroupId = value.ids.adgroupId;\nnameCell.accountId = value.ids.accountId;\nnameCell.typeName = value.typeName;\nnameCell.text = value.keywordText;\nnameCell.navigationLevel = value.navigationLevel;\nnameCell.campaignName = value.Campaign.Name;\nnameCell.adGroupName = value.AdGroup.Name;\nnameCell.matchType = value.MatchType;\nnameCell.hideToolTip = hideToolTip;\nnameCell.isExperiment = value.isExperiment;\nnameCell.campaignType = value.campaignType;\nnameCell.rawStatus = value.rawStatus;\nnameCell.i18n = value.i18n;\nnameCell.AccountActivityStatus = value.AccountActivityStatus;\npug_mixins[\"entityName\"](nameCell);\nif (value.typeName === 'SearchTerm') {\npug_html = pug_html + \"\\u003Cdiv class=\\\"search-term-detail\\\"\\u003E\\u003Cdiv class=\\\"actions\\\"\\u003E\";\nif (value.matchingKeyword) {\nvar added = value.searchTermStatus.indexOf('Added') > -1;\nif (added) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"add\\\"\\u003E\" + (null == (pug_interp = value.i18n.getString('SearchTermStatus_Added')) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cbutton class=\\\"add\\\"\\u003E\\u003Cdiv class=\\\"glyphicon search-term-add-keyword\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\\u003E\" + (null == (pug_interp = value.i18n.getString('Dashboard_TopSearchTerms_Add')) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fbutton\\u003E\";\n}\n}\nvar excluded = value.searchTermStatus.indexOf('Excluded') > -1;\nif (excluded) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"exclude\\\"\\u003E\" + (null == (pug_interp = value.i18n.getString('SearchTermStatus_Excluded')) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cbutton class=\\\"exclude\\\"\\u003E\\u003Cdiv class=\\\"glyphicon search-term-add-neg-keyword\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\\u003E\" + (null == (pug_interp = value.i18n.getString('Dashboard_TopSearchTerms_Exclude')) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fbutton\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"grid-cell--Name__hover-container\\\"\\u003E\\u003Cdiv class=\\\"hover-content\\\"\\u003E\\u003Cdiv class=\\\"hover-content__text\\\"\\u003E\" + (pug.escape(null == (pug_interp = value.Name) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"hover-content__content\\\"\\u003E\" + (pug.escape(null == (pug_interp = value.Name) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\nif (value.matchingKeyword) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"hover-content__title\\\"\\u003E\" + (null == (pug_interp = value.i18n.getString('Dashboard_TopSearchTerms_Matched_Keyword')) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"hover-content__text\\\" style=\\\"padding-bottom:0px\\\"\\u003E\" + (null == (pug_interp = value.matchingKeyword) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"hover-content__content\\\"\\u003E\" + (null == (pug_interp = value.matchingKeyword) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse\nif (value.typeName === 'Keyword') {\npug_html = pug_html + \"\\u003Cdiv class=\\\"grid-cell--Name__hover-container\\\"\\u003E\\u003Cdiv class=\\\"hover-content\\\"\\u003E\\u003Cdiv class=\\\"hover-content__text\\\"\\u003E\" + (pug.escape(null == (pug_interp = value.Name) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"hover-content__name\\\"\\u003E\\u003Cdiv class=\\\"name-value\\\"\\u003E\" + (pug.escape(null == (pug_interp = value.Campaign.Name) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"name-value\\\"\\u003E\" + (null == (pug_interp = ' ') ? \"\" : pug_interp) + \"\\u003E \" + (pug.escape(null == (pug_interp = value.AdGroup.Name) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\\u003E\" + (null == (pug_interp = value.i18n.getString('ColumnName_Type')) ? \"\" : pug_interp) + \": \" + (null == (pug_interp = value.MatchType) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"hover-content__content\\\"\\u003E\" + (pug.escape(null == (pug_interp = value.Campaign.Name) ? \"\" : pug_interp)) + \" \\u003E \" + (pug.escape(null == (pug_interp = value.AdGroup.Name) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";}.call(this,\"value\" in locals_for_with?locals_for_with.value:typeof value!==\"undefined\"?value:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (AccountActivityStatus, AccountInactiveCauseValue, comparisonDateRangeText, currentDateRangeText, gridData, hasError, i18n, index, loaded, metricName) {pug_mixins[\"entityName\"] = pug_interp = function(item){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\nvar isSearchTerm = item.typeName === 'SearchTerm';\nvar isAccount = item.typeName === 'Account';\nvar AccountActivityStatus = item.AccountActivityStatus;\nif (isAccount) {\nif (item.status === AccountActivityStatus.Errors) {\npug_html = pug_html + \"\\u003Cdiv\" + (\" class=\\\"account-error-icon icon-error\\\"\"+pug.attr(\"title\", item.i18n.getString('AccountStatus_Error'), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse\nif (item.status === AccountActivityStatus.Deleted) {\npug_html = pug_html + \"\\u003Cdiv\" + (\" class=\\\"account-deleted-icon\\\"\"+pug.attr(\"title\", item.i18n.getString('AccountStatus_Deleted'), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse\nif (item.status === AccountActivityStatus.Enabled) {\npug_html = pug_html + \"\\u003Cdiv\" + (\" class=\\\"account-enabled-icon icon-success\\\"\"+pug.attr(\"title\", item.i18n.getString('AccountStatus_Active'), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\n}\nelse\nif (!isSearchTerm) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"status\\\"\\u003E\";\nif (item.status === 'Deleted') {\nif (item.isExperiment) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"experiment-paused-icon\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cdiv class=\\\"statusDeleted_icon\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\n}\nelse\nif (item.status === 'Paused') {\nif (item.isExperiment) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"experiment-paused-icon\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cdiv class=\\\"statusPaused_icon\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\n}\nelse\nif (item.status === 'Suspended') {\nif (item.isExperiment) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"experiment-paused-icon\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cdiv class=\\\"statusSuspended_icon\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\n}\nelse\nif (item.status === 'Draft') {\nif (item.isExperiment) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"experiment-paused-icon\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cdiv class=\\\"statusDraft_icon\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\n}\nelse\nif (item.status === 'Expired') {\npug_html = pug_html + \"\\u003Cdiv class=\\\"statushypendisplay\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\nif (item.isExperiment) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"experiment-active-icon\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cdiv class=\\\"statusEnabled_icon\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003Ca\" + (pug.attr(\"href\", item.hash, true, true)+pug.attr(\"title\", item.hideToolTip ? '' : item.name, true, true)+pug.attr(\"aria-label\", item.i18n.getString(`${item.rawStatus} {{entity}}`, {entity: item.name}), true, true)+pug.attr(\"data-campaignid\", item.campaignId, true, true)+pug.attr(\"data-adgroupid\", item.adGroupId, true, true)+pug.attr(\"data-accountid\", item.accountId, true, true)+pug.attr(\"data-type\", item.typeName, true, true)+pug.attr(\"data-text\", item.text, true, true)+pug.attr(\"data-navigationLevel\", item.navigationLevel, true, true)+pug.attr(\"data-campaigntype\", item.campaignType, true, true)+pug.attr(\"data-rawstatus\", item.rawStatus, true, true)+pug.attr(\"data-campaignName\", item.campaignName, true, true)+pug.attr(\"data-adGoupName\", item.adGroupName, true, true)+pug.attr(\"data-matchType\", item.matchType, true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = item.name) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\nif (isAccount && item.status === 'Deleted') {\npug_html = pug_html + \"\\u003Cspan class=\\\"inactive\\\"\\u003E\" + (null == (pug_interp = `&nbsp(${item.i18n.getString('AccountStatus_InActive')})`) ? \"\" : pug_interp) + \"\\u003C\\u002Fspan\\u003E\";\n}\n};\npug_mixins[\"insightHover\"] = pug_interp = function(index){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cdiv class=\\\"hover-container\\\"\\u003E\\u003Cdiv class=\\\"hover-content\\\"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = \"Click to view insight\") ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n};\npug_mixins[\"insightBulb\"] = pug_interp = function(item){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"mcc-perf-fluctuation-bulb-container\",item.rowClass], [false,true]), false, true)) + \"\\u003E\";\nif ((item.fluctuationTypeIds.length > 0)) {\npug_html = pug_html + \"\\u003Cdiv\" + (\" class=\\\"mcc-perf-fluctuation-bulb iconba iconba-Insights\\\"\"+\" tabindex=\\\"0\\\"\"+pug.attr(\"data-rowIndex\", item.index, true, true)+pug.attr(\"data-fluxTypeIds\", item.fluctuationTypeIds, true, true)+pug.attr(\"data-metricName\", item.metricName, true, true)+pug.attr(\"data-metricText\", item.formattedValue, true, true)+pug.attr(\"data-cmid\", item.campaignId, true, true)+pug.attr(\"data-aid\", item.accountId, true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"mcc-perf-fluctuation-placeholder\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\nif (item.fluctuationTypeIds.length > 0) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"insight-hover-target\\\"\\u003E\";\npug_mixins[\"insightHover\"]({ index, i18n });\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\n}\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\n};\npug_mixins[\"emptyContent\"] = pug_interp = function(i18n){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cdiv class=\\\"top-change-empty\\\"\\u003E\" + (null == (pug_interp = i18n.getString('Dashboard_TopChangeCard_NoData')) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\";\n};\npug_mixins[\"errorContent\"] = pug_interp = function(i18n){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cdiv class=\\\"top-change-empty\\\"\\u003E\" + (null == (pug_interp = i18n.getString('Dashboard_Cards_Data_Error')) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\";\n};\npug_mixins[\"kpi\"] = pug_interp = function(kpiData, metricName, dateRangeText){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cdiv class=\\\"kpi-date-range\\\"\\u003E\" + (pug.escape(null == (pug_interp = dateRangeText) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = metricName) ? \"\" : pug_interp)) + \": &nbsp\\u003Cspan class=\\\"kpi-data\\\"\\u003E\" + (pug.escape(null == (pug_interp = kpiData) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fspan\\u003E\";\n};\npug_mixins[\"hoverContent\"] = pug_interp = function(i18n, item, metricName, currentDateRangeText, comparisonDateRangeText){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cdiv class=\\\"hover-container\\\"\\u003E\\u003Cdiv class=\\\"hover-content\\\"\\u003E\\u003Cdiv class=\\\"entity-name\\\"\\u003E\" + (pug.escape(null == (pug_interp = item.name) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"kpi-grid\\\"\\u003E\\u003Cdiv class=\\\"kpi-current\\\"\\u003E\";\npug_mixins[\"kpi\"](item.formattedMetrics, metricName, currentDateRangeText);\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"kpi-comparison\\\"\\u003E\";\npug_mixins[\"kpi\"](item.formattedPeriodMetrics, metricName, comparisonDateRangeText);\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"kpi-change\\\"\\u003E\\u003Cdiv class=\\\"bar-icon\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cspan\\u003E\" + (null == (pug_interp = i18n.getString(\"Dashboard_Change\")) ? \"\" : pug_interp) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"kpi-data\\\"\\u003E\\u003Cspan\\u003E&nbsp \" + (pug.escape(null == (pug_interp = item.formattedValue) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E&nbsp (\" + (pug.escape(null == (pug_interp = item.formattedPercentageValue) ? \"\" : pug_interp)) + \")\\u003C\\u002Fspan\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n};\npug_mixins[\"gridRow\"] = pug_interp = function(i18n, item, index, metricName, currentDateRangeText, comparisonDateRangeText, AccountInactiveCauseValue){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\nvar rowClass = \"top-change-grid-row-\" + (index+1)\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"top-change-entity-name\",rowClass], [false,true]), false, true)) + \"\\u003E\";\nvar nameCell = {};\nnameCell.status = item.status;\nnameCell.name = item.name;\nnameCell.hash = item.hash;\nnameCell.campaignId = item.campaignId;\nnameCell.adGroupId = item.adgroupId;\nnameCell.accountId = item.accountId;\nnameCell.typeName = item.typeName;\nnameCell.isExperiment = item.isExperiment;\nnameCell.campaignType = item.campaignType;\nnameCell.rawStatus = item.rawStatus;\nnameCell.i18n = i18n;\nnameCell.AccountActivityStatus = AccountActivityStatus;\npug_mixins[\"entityName\"](nameCell);\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"top-change-graph-decline\",rowClass], [false,true]), false, true)) + \"\\u003E\\u003Cdiv class=\\\"decline-box\\\"\\u003E\\u003Cdiv\" + (\" class=\\\"graph-space\\\"\"+pug.attr(\"style\", pug.style(`flex: ${item.declineSpace}`), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (\" class=\\\"graph-bar\\\"\"+pug.attr(\"style\", pug.style(`flex: ${item.declineBar}`), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"top-change-graph-increase\",rowClass], [false,true]), false, true)) + \"\\u003E\\u003Cdiv class=\\\"increase-box\\\"\\u003E\\u003Cdiv\" + (\" class=\\\"graph-bar\\\"\"+pug.attr(\"style\", pug.style(`flex: ${item.increaseBar}`), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (\" class=\\\"graph-space\\\"\"+pug.attr(\"style\", pug.style(`flex: ${item.increaseSpace}`), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\npug_mixins[\"insightBulb\"]({ index, fluctuationTypeIds: item.fluctuationTypeIds, rowClass, metricName, formattedValue: item.formattedValue, campaignId: item.campaignId, accountId: item.accountId });\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"pop-change\",rowClass], [false,true]), false, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = item.formattedValue) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"pop-change-percentage\",rowClass], [false,true]), false, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = item.formattedPercentageValue) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"pop-range\",rowClass], [false,true]), false, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = item.fromTo) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\nvar classes = [rowClass]\nif (item.declineBar > 0) {\nclasses.push('kpi-declined')\n}\nelse\nif (item.increaseBar > 0) {\nclasses.push('kpi-increased')\n}\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"graph-hover-target\",classes], [false,true]), false, true)) + \"\\u003E\";\npug_mixins[\"hoverContent\"](i18n, item, metricName, currentDateRangeText, comparisonDateRangeText);\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"pop-hover-target\",classes], [false,true]), false, true)) + \"\\u003E\";\npug_mixins[\"hoverContent\"](i18n, item, metricName, currentDateRangeText, comparisonDateRangeText);\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\n};\nif (loaded) {\nif (hasError) {\npug_mixins[\"errorContent\"](i18n);\n}\nelse\nif (gridData != undefined) {\nif (gridData.length < 1) {\npug_mixins[\"emptyContent\"](i18n);\n}\nelse {\npug_html = pug_html + \"\\u003Cdiv class=\\\"top-change-grid\\\"\\u003E\";\n// iterate gridData\n;(function(){\n  var $$obj = gridData;\n  if ('number' == typeof $$obj.length) {\n      for (var index = 0, $$l = $$obj.length; index < $$l; index++) {\n        var item = $$obj[index];\npug_mixins[\"gridRow\"](i18n, item, index, metricName, currentDateRangeText, comparisonDateRangeText, AccountInactiveCauseValue);\n      }\n  } else {\n    var $$l = 0;\n    for (var index in $$obj) {\n      $$l++;\n      var item = $$obj[index];\npug_mixins[\"gridRow\"](i18n, item, index, metricName, currentDateRangeText, comparisonDateRangeText, AccountInactiveCauseValue);\n    }\n  }\n}).call(this);\n\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"cover-container\\\"\\u003E\\u003Cdiv class=\\\"scroll-bar-cover\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\n}\n}}.call(this,\"AccountActivityStatus\" in locals_for_with?locals_for_with.AccountActivityStatus:typeof AccountActivityStatus!==\"undefined\"?AccountActivityStatus:undefined,\"AccountInactiveCauseValue\" in locals_for_with?locals_for_with.AccountInactiveCauseValue:typeof AccountInactiveCauseValue!==\"undefined\"?AccountInactiveCauseValue:undefined,\"comparisonDateRangeText\" in locals_for_with?locals_for_with.comparisonDateRangeText:typeof comparisonDateRangeText!==\"undefined\"?comparisonDateRangeText:undefined,\"currentDateRangeText\" in locals_for_with?locals_for_with.currentDateRangeText:typeof currentDateRangeText!==\"undefined\"?currentDateRangeText:undefined,\"gridData\" in locals_for_with?locals_for_with.gridData:typeof gridData!==\"undefined\"?gridData:undefined,\"hasError\" in locals_for_with?locals_for_with.hasError:typeof hasError!==\"undefined\"?hasError:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"index\" in locals_for_with?locals_for_with.index:typeof index!==\"undefined\"?index:undefined,\"loaded\" in locals_for_with?locals_for_with.loaded:typeof loaded!==\"undefined\"?loaded:undefined,\"metricName\" in locals_for_with?locals_for_with.metricName:typeof metricName!==\"undefined\"?metricName:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (addInfo, metric, s$i18n) {pug_html = pug_html + \"\\u003Cdiv class=\\\"metric-picker__button metric-picker__button--single dropdown-toggle\\\" role=\\\"button\\\" data-toggle=\\\"dropdown\\\" aria-haspopup=\\\"true\\\" aria-expanded=\\\"false\\\" tabindex=\\\"0\\\"\\u003E\";\nvar metricName = s$i18n.property('PerformanceMetrics', metric);\npug_html = pug_html + \"\\u003Cdiv\" + (\" class=\\\"metric-picker__name\\\"\"+pug.attr(\"title\", metricName, true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = metricName) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\nif (addInfo) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"metric-value-info\\\"\\u003E\\u003Cdiv data-ref=\\\"info-tooltip\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003Cspan class=\\\"caret\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"addInfo\" in locals_for_with?locals_for_with.addInfo:typeof addInfo!==\"undefined\"?addInfo:undefined,\"metric\" in locals_for_with?locals_for_with.metric:typeof metric!==\"undefined\"?metric:undefined,\"s$i18n\" in locals_for_with?locals_for_with.s$i18n:typeof s$i18n!==\"undefined\"?s$i18n:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"device-metric__metric-picker metric-row\\\"\\u003E\\u003Cdiv data-ref=\\\"metric-picker\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (String, data, hasError, i18n, isAggregatedMetric, isSmartShoppingCampaign, loaded, metrics, navigationLevel, order, s$i18n) {pug_mixins[\"HoverContent\"] = pug_interp = function(order, data, metric){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\nfor (var index = 0; index < order.length; index++)\n{\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"hover-container\",order[index].toLowerCase() + '-detail'], [false,true]), false, true)) + \"\\u003E\\u003Cdiv class=\\\"hover-content\\\"\\u003E\\u003Cdiv class=\\\"device-name\\\"\\u003E\" + (pug.escape(null == (pug_interp = s$i18n.enum('DeviceType', order[index])) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"metric-name\\\"\\u003E\" + (pug.escape(null == (pug_interp = s$i18n.property('PerformanceMetrics', metric)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"hover-kpi-container\\\"\\u003E\\u003Cdiv class=\\\"hover-kpi-container__hover-kpi\\\"\\u003E\\u003Cdiv class=\\\"hover-kpi-container__date-range\\\"\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"hover-kpi-container__date-range__color-block\",\"color-block-current-\" + order[index].toLowerCase()], [false,true]), false, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\\u003E\" + (pug.escape(null == (pug_interp = data.formattedDateRange) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"hover-kpi-container__value\\\"\\u003E\" + (pug.escape(null == (pug_interp = data[index].formattedData[metric].formattedHoverValue) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\nif (data.formattedPeriodDateRange) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"hover-kpi-container__hover-kpi\\\"\\u003E\\u003Cdiv class=\\\"hover-kpi-container__date-range\\\"\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"hover-kpi-container__date-range__color-block\",\"color-block-period-\" + order[index].toLowerCase()], [false,true]), false, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\\u003E\" + (pug.escape(null == (pug_interp = data.formattedPeriodDateRange) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"hover-kpi-container__value\\\"\\u003E\" + (pug.escape(null == (pug_interp = data[index].formattedPeriodData[metric].formattedHoverValue) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\nif (data.formattedPeriodDateRange) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"hover-content__kpi-change\\\"\\u003E\\u003Cdiv\\u003E\" + (null == (pug_interp = i18n.getString(\"Dashboard_Change\")) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"hover-content__kpi-change__value\\\"\\u003E\" + (null == (pug_interp = data[index].formattedPeriodData[metric].formattedChange + \" \" +  data[index].formattedPeriodData[metric].formattedChangePercentage) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\n};\n\n\n\n\npug_mixins[\"errorContent\"] = pug_interp = function(i18n){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cdiv class=\\\"device-error\\\"\\u003E\" + (null == (pug_interp = i18n.getString('Dashboard_Cards_Data_Error')) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\";\n};\npug_mixins[\"gridContentVNext\"] = pug_interp = function(s$i18n, order, metrics, data, i18n, isAggregatedMetric){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"device-content-grid\",'device-count-' + order.length], [false,true]), false, true)) + \"\\u003E\";\nfor (var index = 0; index < order.length; index++)\n{\nvar columnClass = \"device-grid-column-\" + (index + 2)\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"device-card-legend-item\",\"device-grid-row-1\",columnClass], [false,false,true]), false, true)) + \"\\u003E\\u003Cdiv class=\\\"legend-container\\\"\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"legend-icon\",order[index].toLowerCase() + '-icon-img'], [false,true]), false, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"legend-txt\\\"\\u003E\" + (pug.escape(null == (pug_interp = s$i18n.enum('DeviceType', order[index])) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\n// iterate [0, 1, 2]\n;(function(){\n  var $$obj = [0, 1, 2];\n  if ('number' == typeof $$obj.length) {\n      for (var pug_index0 = 0, $$l = $$obj.length; pug_index0 < $$l; pug_index0++) {\n        var metricIndex = $$obj[pug_index0];\nvar metric = metrics[metricIndex]\nvar rowClass = \"device-grid-row-\" + (metricIndex + 2);\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"graph-area\",\"device-grid-column-1\",rowClass], [false,false,true]), false, true)) + \"\\u003E\\u003Cdiv\" + (\" class=\\\"device-card__metric\\\"\"+pug.attr(\"data-ref\", String(metricIndex), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\";\nif (data) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"graph-container current\\\"\\u003E\";\nfor (var index = 0; index < order.length; index++)\n{\nvar type = order[index].toLowerCase()\nvar barClass = \"device-grid-bar-\" + type\nvar flexValue = data[index].formattedData[metric].flexValue\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"device-grid-bar\",barClass], [false,true]), false, true)+pug.attr(\"style\", pug.style(`flex: ${flexValue}; min-width: ${flexValue > 0? '1px': '0px'}`), true, true)+pug.attr(\"data-type\", type, true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nif (!isAggregatedMetric(metric)) {\npug_mixins[\"HoverContent\"](order, data, metric);\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\nif (data.formattedPeriodDateRange) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"graph-container period\\\"\\u003E\";\nfor (var index = 0; index < order.length; index++)\n{\nvar type = order[index].toLowerCase()\nvar barClass = \"device-grid-bar-\" + order[index].toLowerCase()\nvar flexValue = data[index].formattedPeriodData[metric].flexValue\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"device-grid-bar\",barClass], [false,true]), false, true)+pug.attr(\"style\", pug.style(`flex: ${flexValue}; min-width: ${flexValue > 0? '1px': '0px'}`), true, true)+pug.attr(\"data-type\", type, true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003Cdiv class=\\\"overlay\\\"\\u003E\";\nfor (var index = 0; index < order.length; index++)\n{\nvar type = order[index].toLowerCase()\nvar flexValue = data[index].formattedPeriodData[metric].flexValue\npug_html = pug_html + \"\\u003Cdiv\" + (\" class=\\\"device-grid-bar\\\"\"+pug.attr(\"style\", pug.style(`flex: ${flexValue}; min-width: ${flexValue > 0? '1px': '0px'}`), true, true)+pug.attr(\"data-type\", type, true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\nfor (var index = 0; index < order.length; index++)\n{\nvar kpiClasses = [\"device-grid-column-\" + (index + 2), rowClass];\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([kpiClasses], [true]), false, true)) + \"\\u003E\\u003Cdiv class=\\\"kpi-container\\\"\\u003E\";\nif (data) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"kpi\\\"\\u003E\\u003Cdiv class=\\\"current-value\\\"\\u003E\" + (pug.escape(null == (pug_interp = data[index].formattedData[metric].formattedSegment) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\nif (data.formattedPeriodDateRange) {\nvar increase = data[index].formattedPeriodData[metric].changePercentage >= 0\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"change-percentage\",increase ? 'increase' : 'decrease'], [false,true]), false, true)) + \"\\u003E\" + (null == (pug_interp = data[index].formattedPeriodData[metric].formattedChangePercentage) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\nif (data.formattedPeriodDateRange) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"kpi\\\"\\u003E\\u003Cdiv class=\\\"period-value\\\"\\u003E\" + (pug.escape(null == (pug_interp = data[index].formattedPeriodData[metric].formattedSegment) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\n      }\n  } else {\n    var $$l = 0;\n    for (var pug_index0 in $$obj) {\n      $$l++;\n      var metricIndex = $$obj[pug_index0];\nvar metric = metrics[metricIndex]\nvar rowClass = \"device-grid-row-\" + (metricIndex + 2);\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"graph-area\",\"device-grid-column-1\",rowClass], [false,false,true]), false, true)) + \"\\u003E\\u003Cdiv\" + (\" class=\\\"device-card__metric\\\"\"+pug.attr(\"data-ref\", String(metricIndex), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\";\nif (data) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"graph-container current\\\"\\u003E\";\nfor (var index = 0; index < order.length; index++)\n{\nvar type = order[index].toLowerCase()\nvar barClass = \"device-grid-bar-\" + type\nvar flexValue = data[index].formattedData[metric].flexValue\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"device-grid-bar\",barClass], [false,true]), false, true)+pug.attr(\"style\", pug.style(`flex: ${flexValue}; min-width: ${flexValue > 0? '1px': '0px'}`), true, true)+pug.attr(\"data-type\", type, true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nif (!isAggregatedMetric(metric)) {\npug_mixins[\"HoverContent\"](order, data, metric);\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\nif (data.formattedPeriodDateRange) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"graph-container period\\\"\\u003E\";\nfor (var index = 0; index < order.length; index++)\n{\nvar type = order[index].toLowerCase()\nvar barClass = \"device-grid-bar-\" + order[index].toLowerCase()\nvar flexValue = data[index].formattedPeriodData[metric].flexValue\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"device-grid-bar\",barClass], [false,true]), false, true)+pug.attr(\"style\", pug.style(`flex: ${flexValue}; min-width: ${flexValue > 0? '1px': '0px'}`), true, true)+pug.attr(\"data-type\", type, true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003Cdiv class=\\\"overlay\\\"\\u003E\";\nfor (var index = 0; index < order.length; index++)\n{\nvar type = order[index].toLowerCase()\nvar flexValue = data[index].formattedPeriodData[metric].flexValue\npug_html = pug_html + \"\\u003Cdiv\" + (\" class=\\\"device-grid-bar\\\"\"+pug.attr(\"style\", pug.style(`flex: ${flexValue}; min-width: ${flexValue > 0? '1px': '0px'}`), true, true)+pug.attr(\"data-type\", type, true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\nfor (var index = 0; index < order.length; index++)\n{\nvar kpiClasses = [\"device-grid-column-\" + (index + 2), rowClass];\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([kpiClasses], [true]), false, true)) + \"\\u003E\\u003Cdiv class=\\\"kpi-container\\\"\\u003E\";\nif (data) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"kpi\\\"\\u003E\\u003Cdiv class=\\\"current-value\\\"\\u003E\" + (pug.escape(null == (pug_interp = data[index].formattedData[metric].formattedSegment) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\nif (data.formattedPeriodDateRange) {\nvar increase = data[index].formattedPeriodData[metric].changePercentage >= 0\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"change-percentage\",increase ? 'increase' : 'decrease'], [false,true]), false, true)) + \"\\u003E\" + (null == (pug_interp = data[index].formattedPeriodData[metric].formattedChangePercentage) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\nif (data.formattedPeriodDateRange) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"kpi\\\"\\u003E\\u003Cdiv class=\\\"period-value\\\"\\u003E\" + (pug.escape(null == (pug_interp = data[index].formattedPeriodData[metric].formattedSegment) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\n    }\n  }\n}).call(this);\n\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\n};\nif (loaded) {\nif (hasError) {\npug_mixins[\"errorContent\"](i18n);\n}\nelse {\npug_mixins[\"gridContentVNext\"](s$i18n, order, metrics, data, i18n, isAggregatedMetric);\n}\nvar isCustomerLevel = navigationLevel === 'customer';\nif (!isCustomerLevel && !isSmartShoppingCampaign) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"device-links\\\"\\u003E\\u003Cspan class=\\\"view-all-clickLink\\\" href=\\\"javascript:void(0);\\\" role=\\\"presentation\\\" tabindex=\\\"-1\\\"\\u003E\\u003Cbutton class=\\\"btn-default btn\\\" type=\\\"button\\\"\\u003E\" + (null == (pug_interp = i18n.getString('Dashboard_DeviceCard_View_All')) ? \"\" : pug_interp) + \"\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\n}\npug_html = pug_html + \"\\u003Ca\" + (\" class=\\\"HelpTopic hiddenHelpBridge\\\"\"+pug.attr(\"query\", isCustomerLevel ? 'help:ext60045': 'help:app54555', true, true)+\" href=\\\"javascript:void(0);\\\" style=\\\"display:none\\\"\") + \"\\u003E\\u003C\\u002Fa\\u003E\";}.call(this,\"String\" in locals_for_with?locals_for_with.String:typeof String!==\"undefined\"?String:undefined,\"data\" in locals_for_with?locals_for_with.data:typeof data!==\"undefined\"?data:undefined,\"hasError\" in locals_for_with?locals_for_with.hasError:typeof hasError!==\"undefined\"?hasError:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"isAggregatedMetric\" in locals_for_with?locals_for_with.isAggregatedMetric:typeof isAggregatedMetric!==\"undefined\"?isAggregatedMetric:undefined,\"isSmartShoppingCampaign\" in locals_for_with?locals_for_with.isSmartShoppingCampaign:typeof isSmartShoppingCampaign!==\"undefined\"?isSmartShoppingCampaign:undefined,\"loaded\" in locals_for_with?locals_for_with.loaded:typeof loaded!==\"undefined\"?loaded:undefined,\"metrics\" in locals_for_with?locals_for_with.metrics:typeof metrics!==\"undefined\"?metrics:undefined,\"navigationLevel\" in locals_for_with?locals_for_with.navigationLevel:typeof navigationLevel!==\"undefined\"?navigationLevel:undefined,\"order\" in locals_for_with?locals_for_with.order:typeof order!==\"undefined\"?order:undefined,\"s$i18n\" in locals_for_with?locals_for_with.s$i18n:typeof s$i18n!==\"undefined\"?s$i18n:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"no-data\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"cover-container\\\"\\u003E\\u003Cdiv class=\\\"scroll-bar-cover\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (metrics, s$i18n) {pug_html = pug_html + \"\\u003Cdiv class=\\\"dropdown open\\\"\\u003E\\u003Cul class=\\\"dropdown-menu dropdown-menu-right\\\" role=\\\"menu\\\"\\u003E\";\n// iterate metrics\n;(function(){\n  var $$obj = metrics;\n  if ('number' == typeof $$obj.length) {\n      for (var pug_index0 = 0, $$l = $$obj.length; pug_index0 < $$l; pug_index0++) {\n        var metric = $$obj[pug_index0];\npug_html = pug_html + \"\\u003Cli\" + (pug.attr(\"data-metric\", metric, true, true)) + \"\\u003E\\u003Ca href=\\\"#\\\" role=\\\"menuitem\\\"\\u003E\" + (pug.escape(null == (pug_interp = s$i18n.property('PerformanceMetrics', metric)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fli\\u003E\";\n      }\n  } else {\n    var $$l = 0;\n    for (var pug_index0 in $$obj) {\n      $$l++;\n      var metric = $$obj[pug_index0];\npug_html = pug_html + \"\\u003Cli\" + (pug.attr(\"data-metric\", metric, true, true)) + \"\\u003E\\u003Ca href=\\\"#\\\" role=\\\"menuitem\\\"\\u003E\" + (pug.escape(null == (pug_interp = s$i18n.property('PerformanceMetrics', metric)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fli\\u003E\";\n    }\n  }\n}).call(this);\n\npug_html = pug_html + \"\\u003C\\u002Ful\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"metrics\" in locals_for_with?locals_for_with.metrics:typeof metrics!==\"undefined\"?metrics:undefined,\"s$i18n\" in locals_for_with?locals_for_with.s$i18n:typeof s$i18n!==\"undefined\"?s$i18n:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (metric) {pug_html = pug_html + \"\\u003Cdiv\" + (\" class=\\\"btn-group metric-picker\\\"\"+pug.attr(\"data-metric\", metric, true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"metric\" in locals_for_with?locals_for_with.metric:typeof metric!==\"undefined\"?metric:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n, metric, s$i18n) {pug_html = pug_html + \"\\u003Cdiv class=\\\"grid-card-header\\\"\\u003E\\u003Cdiv\" + (\" class=\\\"metric-picker\\\"\"+pug.attr(\"data-metric\", metric, true, true)) + \"\\u003E\";\nvar metricName = s$i18n.property('PerformanceMetrics', metric);\npug_html = pug_html + \"\\u003Cdiv\" + (\" class=\\\"metric-picker__name\\\"\"+pug.attr(\"title\", metricName, true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = metricName) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cbutton\" + (\" class=\\\"metric-picker__button metric-picker__button--caret btn btn-default dropdown-toggle\\\"\"+\" aria-haspopup=\\\"true\\\"\"+pug.attr(\"aria-label\", i18n.getString('Select metric'), true, true)+\" aria-expanded=\\\"false\\\"\") + \"\\u003E\\u003Cspan class=\\\"caret\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"metric\" in locals_for_with?locals_for_with.metric:typeof metric!==\"undefined\"?metric:undefined,\"s$i18n\" in locals_for_with?locals_for_with.s$i18n:typeof s$i18n!==\"undefined\"?s$i18n:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (order, showExtra, value) {pug_html = pug_html + \"\\u003Cdiv class=\\\"grid-card-cell grid-card-cell--performance-metric\\\"\\u003E\\u003Cdiv class=\\\"grid-card-cell__body\\\"\\u003E\" + (pug.escape(null == (pug_interp = value[order.body]) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\nif (showExtra) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"grid-card-cell__extra\\\"\\u003E\\u003Cdiv class=\\\"grid-card-cell__sup\\\"\\u003E\" + (pug.escape(null == (pug_interp = value[order.sup]) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"grid-card-cell__sub\\\"\\u003E\" + (pug.escape(null == (pug_interp = value[order.sub]) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";}.call(this,\"order\" in locals_for_with?locals_for_with.order:typeof order!==\"undefined\"?order:undefined,\"showExtra\" in locals_for_with?locals_for_with.showExtra:typeof showExtra!==\"undefined\"?showExtra:undefined,\"value\" in locals_for_with?locals_for_with.value:typeof value!==\"undefined\"?value:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (options) {pug_html = pug_html + \"\\u003Cdiv class=\\\"empty-content\\\"\\u003E\" + (null == (pug_interp = options.templateOptions.i18n.getString('Dashboard_Cards_NoData')) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\";}.call(this,\"options\" in locals_for_with?locals_for_with.options:typeof options!==\"undefined\"?options:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (adGroupName, addAsNegativeKeyword, appendLearnMoreLink, campaignName, errMsg, i18n, isEmpty, matchType, navigationLevel, selectionLevel, text) {pug_mixins[\"entitySelector\"] = pug_interp = function(navigationLevel, i18n, campaignName, adGroupName, selectionLevel){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\nif (navigationLevel === 'account') {\nif (selectionLevel === 'adGroupLevel') {\npug_html = pug_html + \"\\u003Cdiv class=\\\"adgroup-campaign-label\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Dashboard_TopSearchTerms_SelectAdGroup')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"campaign-ad-group-selector\\\" data-ref=\\\"selector\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cdiv class=\\\"adgroup-campaign-label\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Dashboard_TopSearchTerms_SelectCampaign')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"campaign-ad-group-selector\\\" data-ref=\\\"selector\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\n}\nelse {\npug_html = pug_html + \"\\u003Cdiv class=\\\"entity-info\\\"\\u003E\\u003Cdiv class=\\\"campaign-info\\\"\\u003E\\u003Cdiv class=\\\"adgroup-campaign-label\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Entity_Campaign')) ? \"\" : pug_interp)) + \"\\u003Cdiv\" + (\" class=\\\"selected-entity-names__name\\\"\"+pug.attr(\"title\", campaignName, true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = campaignName) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\nif (selectionLevel === 'adGroupLevel') {\npug_html = pug_html + \"\\u003Cdiv class=\\\"adgroup-info\\\"\\u003E\\u003Cdiv class=\\\"adgroup-campaign-label\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Entity_Adgroup')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"campaign-ad-group-selector\\\" data-ref=\\\"selector\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\n}\n};\npug_html = pug_html + \"\\u003Cdiv class=\\\"add-keyword-content\\\"\\u003E\";\nvar title = addAsNegativeKeyword ? i18n.getString('Dashboard_TopSearchTerms_AddAsNegativeKeyword'): i18n.getString('Dashboard_TopSearchTerms_AddAsKeyword');\nif (addAsNegativeKeyword) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"add-keyword-content__tittle\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Dashboard_TopSearchTerms_AddAsNegativeKeyword')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"adgroup-campaign-label\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Dashboard_TopSearchTerms_AddNegativeKeyword_Level')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"level-selector\\\"\\u003E\";\nif (selectionLevel === 'adGroupLevel') {\npug_html = pug_html + \"\\u003Clabel class=\\\"entityLevel\\\"\\u003E\\u003Cinput name=\\\"entityLevel\\\" type=\\\"radio\\\" value=\\\"campaignLevel\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Dashboard_TopSearchTerms_CampaignLevel')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003Clabel class=\\\"entityLevel\\\"\\u003E\\u003Cinput name=\\\"entityLevel\\\" type=\\\"radio\\\" value=\\\"adGroupLevel\\\" checked=\\\"checked\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Dashboard_TopSearchTerms_AdGroupLevel')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Clabel class=\\\"entityLevel\\\"\\u003E\\u003Cinput name=\\\"entityLevel\\\" type=\\\"radio\\\" value=\\\"campaignLevel\\\" checked=\\\"checked\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Dashboard_TopSearchTerms_CampaignLevel')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003Clabel class=\\\"entityLevel\\\"\\u003E\\u003Cinput name=\\\"entityLevel\\\" type=\\\"radio\\\" value=\\\"adGroupLevel\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Dashboard_TopSearchTerms_AdGroupLevel')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\npug_mixins[\"entitySelector\"](navigationLevel, i18n, campaignName, adGroupName, selectionLevel);\n}\nelse {\npug_html = pug_html + \"\\u003Cdiv class=\\\"add-keyword-content__tittle\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Dashboard_TopSearchTerms_AddAsKeyword')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\npug_mixins[\"entitySelector\"](navigationLevel, i18n, campaignName, adGroupName, selectionLevel);\n}\npug_html = pug_html + \"\\u003Chr style=\\\"clear:both\\\"\\u003E\\u003Cdiv class=\\\"keyword-detail\\\"\\u003E\";\nvar keywordType = addAsNegativeKeyword ? i18n.getString('Entity_NegativeKeywords') :i18n.getString('Entity_Keywords');\npug_html = pug_html + \"\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Cdiv class=\\\"keyword-type\\\" id=\\\"Searchterm-Keywordtype\\\"\\u003E\" + (pug.escape(null == (pug_interp = keywordType) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"keyword-value\\\"\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([addAsNegativeKeyword ? 'negative-keyword-input' : 'keyword-input'], [true]), false, true)) + \"\\u003E\\u003Cinput\" + (\" class=\\\"form-control keyword-text__value\\\"\"+pug.attr(\"value\", text, true, true)+\" type=\\\"text\\\" aria-labelledby=\\\"Searchterm-Keywordtype\\\"\") + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Cdiv class=\\\"keyword-match-type\\\" id=\\\"Searchterm-MatchType\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('ColumnName_Type')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"keyword-match-type-selector\\\"\\u003E\\u003Cselect\" + (\" class=\\\"form-control match-type__value\\\"\"+pug.attr(\"value\", matchType, true, true)+\" aria-labelledby=\\\"Searchterm-MatchType\\\"\") + \"\\u003E\";\nvar selection\nselection = matchType === 'Exact' ? {selected: 'selected'} : {};\npug_html = pug_html + \"\\u003Coption\" + (pug.attrs(pug.merge([{\"value\": \"Exact\"},selection]), true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('KeywordType_Exact')) ? \"\" : pug_interp)) + \"\\u003C\\u002Foption\\u003E\";\nselection = matchType === 'Phrase' ? {selected: 'selected'} : {};\npug_html = pug_html + \"\\u003Coption\" + (pug.attrs(pug.merge([{\"value\": \"Phrase\"},selection]), true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('KeywordType_Phrase')) ? \"\" : pug_interp)) + \"\\u003C\\u002Foption\\u003E\";\nif (!addAsNegativeKeyword) {\nselection = matchType === 'Broad' ? {selected: 'selected'} : {};\npug_html = pug_html + \"\\u003Coption\" + (pug.attrs(pug.merge([{\"value\": \"Broad\"},selection]), true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('KeywordType_Broad')) ? \"\" : pug_interp)) + \"\\u003C\\u002Foption\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fselect\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\nif (errMsg) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"alert-danger\\\"\\u003E\" + (null == (pug_interp = errMsg) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003Cdiv class=\\\"type-help\\\"\\u003E\" + (null == (pug_interp = appendLearnMoreLink(i18n.getString('SearchTerm_ManageKeyword_HelpText'), 'app51021')) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\\u003Chr\\u003E\";\nvar attributes = isEmpty ? { disabled: 'disabled' }: {};\npug_html = pug_html + \"\\u003Cbutton\" + (pug.attrs(pug.merge([{\"class\": \"apply btn btn-primary\"},attributes]), true)) + \"\\u003EApply\\u003C\\u002Fbutton\\u003E\\u003Cbutton class=\\\"cancel btn btn-default\\\"\\u003ECancel\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"adGroupName\" in locals_for_with?locals_for_with.adGroupName:typeof adGroupName!==\"undefined\"?adGroupName:undefined,\"addAsNegativeKeyword\" in locals_for_with?locals_for_with.addAsNegativeKeyword:typeof addAsNegativeKeyword!==\"undefined\"?addAsNegativeKeyword:undefined,\"appendLearnMoreLink\" in locals_for_with?locals_for_with.appendLearnMoreLink:typeof appendLearnMoreLink!==\"undefined\"?appendLearnMoreLink:undefined,\"campaignName\" in locals_for_with?locals_for_with.campaignName:typeof campaignName!==\"undefined\"?campaignName:undefined,\"errMsg\" in locals_for_with?locals_for_with.errMsg:typeof errMsg!==\"undefined\"?errMsg:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"isEmpty\" in locals_for_with?locals_for_with.isEmpty:typeof isEmpty!==\"undefined\"?isEmpty:undefined,\"matchType\" in locals_for_with?locals_for_with.matchType:typeof matchType!==\"undefined\"?matchType:undefined,\"navigationLevel\" in locals_for_with?locals_for_with.navigationLevel:typeof navigationLevel!==\"undefined\"?navigationLevel:undefined,\"selectionLevel\" in locals_for_with?locals_for_with.selectionLevel:typeof selectionLevel!==\"undefined\"?selectionLevel:undefined,\"text\" in locals_for_with?locals_for_with.text:typeof text!==\"undefined\"?text:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (buttonText, isCustomerLevel, typeName) {var contentType = typeName.toLowerCase() + \"-card-content\";\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"grid-card__grid-content\",contentType], [false,true]), false, true)) + \"\\u003E\\u003Cdiv data-ref=\\\"content\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\nif ((buttonText)) {\nvar linkType = typeName.toLowerCase() + \"-card-link\"\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"grid-links\",linkType], [false,true]), false, true)) + \"\\u003E\\u003Cspan class=\\\"view-all-clickLink\\\"\\u003E\\u003Cbutton class=\\\"btn-default btn\\\" type=\\\"button\\\"\\u003E\" + (pug.escape(null == (pug_interp = buttonText) ? \"\" : pug_interp)) + \"\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003Ca\" + (\" class=\\\"HelpTopic hiddenHelpBridge\\\"\"+pug.attr(\"query\", isCustomerLevel ? 'help:ext60045': 'help:app54555', true, true)+\" href=\\\"javascript:void(0);\\\" style=\\\"display:none\\\"\") + \"\\u003E\\u003C\\u002Fa\\u003E\";}.call(this,\"buttonText\" in locals_for_with?locals_for_with.buttonText:typeof buttonText!==\"undefined\"?buttonText:undefined,\"isCustomerLevel\" in locals_for_with?locals_for_with.isCustomerLevel:typeof isCustomerLevel!==\"undefined\"?isCustomerLevel:undefined,\"typeName\" in locals_for_with?locals_for_with.typeName:typeof typeName!==\"undefined\"?typeName:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (addInfo, ariaLabel, i18n, metric, metricValue, s$i18n) {pug_html = pug_html + \"\\u003Cdiv class=\\\"metric-picker__text\\\"\\u003E\";\nvar metricName = s$i18n.property('PerformanceMetrics', metric);\npug_html = pug_html + \"\\u003Cdiv\" + (\" class=\\\"metric-picker__name\\\"\"+pug.attr(\"title\", metricName, true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = metricName) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"metric-picker__value\\\"\\u003E\";\nvar title = addInfo ? null : metricValue;\npug_html = pug_html + \"\\u003Cdiv\" + (\" class=\\\"metric-value\\\"\"+pug.attr(\"title\", title, true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = metricValue) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\nif (addInfo) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"metric-value-info\\\"\\u003E\\u003Cdiv data-ref=\\\"info-tooltip\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cbutton\" + (\" class=\\\"metric-picker__button metric-picker__button--caret dropdown-toggle btn btn-default\\\"\"+\" data-toggle=\\\"dropdown\\\"\"+pug.attr(\"aria-label\", ariaLabel || i18n.getString('Select metric'), true, true)+\" aria-haspopup=\\\"true\\\" aria-expanded=\\\"false\\\"\") + \"\\u003E\\u003Cspan class=\\\"caret\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fbutton\\u003E\";}.call(this,\"addInfo\" in locals_for_with?locals_for_with.addInfo:typeof addInfo!==\"undefined\"?addInfo:undefined,\"ariaLabel\" in locals_for_with?locals_for_with.ariaLabel:typeof ariaLabel!==\"undefined\"?ariaLabel:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"metric\" in locals_for_with?locals_for_with.metric:typeof metric!==\"undefined\"?metric:undefined,\"metricValue\" in locals_for_with?locals_for_with.metricValue:typeof metricValue!==\"undefined\"?metricValue:undefined,\"s$i18n\" in locals_for_with?locals_for_with.s$i18n:typeof s$i18n!==\"undefined\"?s$i18n:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (leftAlign, metrics, s$i18n) {var menuClass = leftAlign ? 'dropdown-menu-left' : 'dropdown-menu-right';\npug_html = pug_html + \"\\u003Cul\" + (pug.attr(\"class\", pug.classes([\"dropdown-menu\",menuClass], [false,true]), false, true)+\" role=\\\"menu\\\"\") + \"\\u003E\";\n// iterate metrics\n;(function(){\n  var $$obj = metrics;\n  if ('number' == typeof $$obj.length) {\n      for (var pug_index0 = 0, $$l = $$obj.length; pug_index0 < $$l; pug_index0++) {\n        var metric = $$obj[pug_index0];\npug_html = pug_html + \"\\u003Cli\" + (pug.attr(\"data-metric\", metric, true, true)+\" role=\\\"presentation\\\"\") + \"\\u003E\\u003Ca href=\\\"#\\\" role=\\\"menuitem\\\"\\u003E\" + (pug.escape(null == (pug_interp = s$i18n.property('PerformanceMetrics', metric)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fli\\u003E\";\n      }\n  } else {\n    var $$l = 0;\n    for (var pug_index0 in $$obj) {\n      $$l++;\n      var metric = $$obj[pug_index0];\npug_html = pug_html + \"\\u003Cli\" + (pug.attr(\"data-metric\", metric, true, true)+\" role=\\\"presentation\\\"\") + \"\\u003E\\u003Ca href=\\\"#\\\" role=\\\"menuitem\\\"\\u003E\" + (pug.escape(null == (pug_interp = s$i18n.property('PerformanceMetrics', metric)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fli\\u003E\";\n    }\n  }\n}).call(this);\n\npug_html = pug_html + \"\\u003C\\u002Ful\\u003E\";}.call(this,\"leftAlign\" in locals_for_with?locals_for_with.leftAlign:typeof leftAlign!==\"undefined\"?leftAlign:undefined,\"metrics\" in locals_for_with?locals_for_with.metrics:typeof metrics!==\"undefined\"?metrics:undefined,\"s$i18n\" in locals_for_with?locals_for_with.s$i18n:typeof s$i18n!==\"undefined\"?s$i18n:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (metric) {pug_html = pug_html + \"\\u003Cdiv\" + (\" class=\\\"btn-group btn btn-default metric-picker\\\"\"+pug.attr(\"data-metric\", metric, true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"metric\" in locals_for_with?locals_for_with.metric:typeof metric!==\"undefined\"?metric:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"dashboard-page\\\" railviewid=\\\"Overview\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n) {pug_html = pug_html + \"\\u003Cdiv class=\\\"add-card__panel\\\"\\u003E\\u003Cdiv class=\\\"text-info add-card__text-info\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Dashboard_AddCard_DescInfo')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (\" class=\\\"add-card__card-container\\\"\"+\" role=\\\"listbox\\\"\"+pug.attr(\"aria-label\", i18n.getString('Dashboard_AddCard'), true, true)+\" aria-multiselectable=\\\"true\\\" data-bind=\\\"foreach: allCards\\\"\") + \"\\u003E\\u003Cdiv class=\\\"pull-left add-card__card-wrapper\\\"\\u003E\\u003Cdiv class=\\\"add-card__card\\\"\\u003E\\u003Cdiv class=\\\"add-card__card-box\\\" role=\\\"option\\\" data-bind=\\\"css: {'add-card__card-box--selected': $data.selected}, event: { keypress: $parent.onKeyPress, click: $parent.onThumbnailClicked, focus: $parent.onFocus }, attr: { 'aria-selected': $data.selected() ? 'true' : 'false', tabindex: $parent.firstFocusedIndex() == $index() ? 0 : -1 }\\\"\\u003E\\u003Cdiv class=\\\"add-card-indicator\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"add-card__thumbnail\\\" data-bind=\\\"css: $data.appliedClass\\\"\\u003E\\u003Cdiv class=\\\"add-card__card-title\\\" data-bind=\\\"text: $data.addCardTitle\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"add-card__image\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"add-card__description\\\" data-bind=\\\"text: $data.desc\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form\\\"\\u003E\\u003Cdiv class=\\\"add-card__button-container\\\"\\u003E\\u003Cbutton class=\\\"btn btn-primary save\\\" type=\\\"button\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Dashboard_AddCard_Save')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fbutton\\u003E\\u003Cbutton class=\\\"btn btn-default cancel\\\" type=\\\"button\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Dashboard_AddCard_Cancel')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fbutton\\u003E\\u003Cdiv class=\\\"text-info add-card__text-info\\\"\\u003E\\u003Cspan data-bind=\\\"text: i18n.getString(&quot;Dashboard_AddCard_TilesSelected&quot;, selectedTilesNumber())\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"dashboard__new-tile-banner\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"mcc_too_many-accounts\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"dashboard__toolbar\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"dashboard__card-panel\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"summarypage-bifreshtime\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (_TL_, accountTimeZoneText, appendLearnMoreLink, i18n) {pug_html = pug_html + ((null == (pug_interp = appendLearnMoreLink(i18n.getString('BITimeStampNotes_Label'), 'ext54480')) ? \"\" : pug_interp) + \"\\u003Cbr\\u003E\" + (null == (pug_interp = appendLearnMoreLink(i18n.getString('MRCAccredited_Label'), '', {linkText:i18n.getString(_TL_('Learn more. ')),label:i18n.getString('MRCAccredited_Label'),} , 'https://about.ads.microsoft.com/en-us/resources/policies/microsoft-advertising-click-measurement-description-of-methodology')) ? \"\" : pug_interp) + (null == (pug_interp = appendLearnMoreLink(i18n.getString('DateRange_Timezone',accountTimeZoneText), 'ext54483')) ? \"\" : pug_interp));}.call(this,\"_TL_\" in locals_for_with?locals_for_with._TL_:typeof _TL_!==\"undefined\"?_TL_:undefined,\"accountTimeZoneText\" in locals_for_with?locals_for_with.accountTimeZoneText:typeof accountTimeZoneText!==\"undefined\"?accountTimeZoneText:undefined,\"appendLearnMoreLink\" in locals_for_with?locals_for_with.appendLearnMoreLink:typeof appendLearnMoreLink!==\"undefined\"?appendLearnMoreLink:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n) {pug_html = pug_html + \"\\u003Csup class=\\\"new-feature-label\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('New_Feature_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fsup\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n, newTileMsg) {pug_html = pug_html + \"\\u003Cdiv class=\\\"new-tile-msg\\\"\\u003E\\u003Cspan class=\\\"new-feature-label\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('New_Feature_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = newTileMsg) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Ca class=\\\"show-new-tile\\\" target=\\\"_blank\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Dashboard_ShowMe')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"msg-dismiss-button\\\"\\u003E\\u003Cbutton class=\\\"closeimage close\\\"\\u003E\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"newTileMsg\" in locals_for_with?locals_for_with.newTileMsg:typeof newTileMsg!==\"undefined\"?newTileMsg:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (warning) {pug_html = pug_html + \"\\u003Cdiv\\u003E\" + (null == (pug_interp = warning) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\";}.call(this,\"warning\" in locals_for_with?locals_for_with.warning:typeof warning!==\"undefined\"?warning:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (metric, s$i18n) {pug_html = pug_html + \"\\u003Cdiv class=\\\"metric-picker__button metric-picker__button--single dropdown-toggle\\\" role=\\\"button\\\" tabindex=\\\"0\\\" data-toggle=\\\"dropdown\\\" aria-haspopup=\\\"true\\\" aria-expanded=\\\"false\\\"\\u003E\\u003Cdiv class=\\\"metric-picker__name\\\"\\u003E\" + (pug.escape(null == (pug_interp = s$i18n.property('PerformanceMetrics', metric)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cspan class=\\\"glyphicon glyphicon-triangle-bottom toolbar-icon pull-right\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"metric\" in locals_for_with?locals_for_with.metric:typeof metric!==\"undefined\"?metric:undefined,\"s$i18n\" in locals_for_with?locals_for_with.s$i18n:typeof s$i18n!==\"undefined\"?s$i18n:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (buttonText, isCustomerLevel, popText, popTextAriaLabel) {pug_html = pug_html + \"\\u003Cdiv class=\\\"top-changes-card-header\\\"\\u003E\\u003Cdiv class=\\\"popComparisonRange\\\"\\u003E\" + (pug.escape(null == (pug_interp = popText) ? \"\" : pug_interp)) + \"\\u003Ca\" + (\" class=\\\"helpbutton\\\"\"+\" type=\\\"helppopup\\\"\"+pug.attr(\"aria-label\", popTextAriaLabel, true, true)+\" topic=\\\"pop_BA_Overview_TopChangesDateRange\\\" onclick=\\\"PopupController.PopupJsClick(this)\\\" href=\\\"javascript:void(0);\\\"\") + \"\\u003E\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"metric-container\\\"\\u003E\\u003Cdiv class=\\\"dev\\\" data-ref=\\\"metric-picker\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"div\\\" data-ref=\\\"grid-content\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\nif ((buttonText)) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"entity-links\\\"\\u003E\\u003Cspan class=\\\"view-all-clickLink\\\" href=\\\"javascript:void(0);\\\" role=\\\"presentation\\\" tabindex=\\\"-1\\\"\\u003E\\u003Cbutton class=\\\"btn-default btn\\\" type=\\\"button\\\"\\u003E\" + (pug.escape(null == (pug_interp = buttonText) ? \"\" : pug_interp)) + \"\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003Ca\" + (\" class=\\\"HelpTopic hiddenHelpBridge\\\"\"+pug.attr(\"query\", isCustomerLevel ? 'help:ext60045': 'help:app54555', true, true)+\" href=\\\"javascript:void(0);\\\" style=\\\"display:none\\\"\") + \"\\u003E\\u003C\\u002Fa\\u003E\";}.call(this,\"buttonText\" in locals_for_with?locals_for_with.buttonText:typeof buttonText!==\"undefined\"?buttonText:undefined,\"isCustomerLevel\" in locals_for_with?locals_for_with.isCustomerLevel:typeof isCustomerLevel!==\"undefined\"?isCustomerLevel:undefined,\"popText\" in locals_for_with?locals_for_with.popText:typeof popText!==\"undefined\"?popText:undefined,\"popTextAriaLabel\" in locals_for_with?locals_for_with.popTextAriaLabel:typeof popTextAriaLabel!==\"undefined\"?popTextAriaLabel:undefined));;return pug_html;};\nmodule.exports = template;"],"names":["cardWelcomeTipsId","cardTopLocationsId","cardAssetPerformanceId","cardPerformanceId","cardDiagnosticId","cardRecommendationsId","cardTopCampaignsId","cardTopAccountsId","cardTopKeywordsId","cardDeviceId","cardSearchTermsId","cardTopAdGroupsId","cardCompetitionId","cardConversionTrackingId","cardTopChangesAccountId","cardTopChangesCampaignId","cardTopChangesAdGroupId","cardNavigateToFullProductId","CampaignLevelCampaignType","_","AccountLevelCampaignType","__","key","getPreference","_ref","preferenceObj","preference","findByNameAtUserLevel","getPreferencePatcher","_ref2","update","preferenceData","newPreferenceData","_objectSpread","setAtUserLevel","Data","Name","getPreferenceKeyPrefix","_ref3","navigationLevel","campaignType","campaignTypeString","Hotel","PerformanceMax","App","LinkedIn","concat","getCardPreferenceKey","_ref4","cardTypeId","prefix","getPagePreferenceKey","_ref5","getCardPreferenceWithDefault","_ref6","config","permissions","cardPreferenceKey","typeId","originCardPreference","defaultPreference","getDefaultPreference","undefined","isPreferenceValid","cardPreference","patchPreference","getCardPreferenceOptionsForDfm","_ref7","options","getDfmPreferenceObject","id","ComparisonValues","PerformanceMetrics","PerformanceMetricsChange","PerformanceMetricsChangePercentage","getHeaderPropsFromPreferenceForPerformanceTable","i18n","dateRange","initialSelectedValue","selectedComparisonValue","compared","value","displayName","getString","_TL_","onOptionSelected","getTablePropsFromPreferenceForPerformanceTable","selectedColumns","defaultGridColumns","allMetrics","metrics","AccountsMode","Expert","map","metric","metricToDisplayNameMap","initialSelectedMetrics","column","find","initialSortColumn","sortColumn","initialSortDirection","sortDirection","isNullOrUndefined","isTablePreferenceValid","metricsKeys","length","some","includes","Object","values","getDefaultPerformanceTablePreference","getDfmPreferenceObjectForPerformanceTable","columns","orderby","direction","selectedMenuItem","val","getLegacyPreference","serverContext","prefs","findByNameAtAccountLevel","dashboardId","name","CurrentCustomer","HasExpertAccount","fetchDashboardId","getAvailableCardsConfigs","cardsConfigs","isSDK","cardConfig","isValidForNavigationLevel","getSelectedCardsConfigs","availableCardsConfigs","selectedCards","sc","getInitSelectedCardsConfig","pagePreferenceKey","pagePreference","legacyCardSelectionPreference","useSelectedCardsWithPreference","isLoadingWelcomeCardConfig","useMemo","patchPagePreference","initSelectedCards","_useState","useState","_useState2","_slicedToArray","setSelectedCards","selectedCardsConfigs","cardSelectionCards","hidden","onCardSelectionSaved","useCallback","selectionToSave","validMetricIndexes","defaultSelectedMetricIndexes","getDefaultPerformanceChartPreference","selectedMetricIndexes","defaultMetrics","getPropsFromPreferenceForPerformanceChart","shellContentElement","document","querySelector","isPerformanceChartPreferenceValid","availableMetricKeys","index","defaultSelectedMetric","getTopChangesAllMetrics","getPropsForTopChanges","preferenceFromServer","getHeaderPropsFromPreferenceForTopChanges","TopChangesFilterOption","AllChanges","TopGainers","TopDecliners","Insights","filter","getDfmPreferenceObjectForTopChanges","getDefaultTopChangesPreference","getTablePropsFromPreferenceForDevices","isDevicePreferenceValid","getDefaultDevicePreference","getCardOptions","edmLevel","entitySet","extraFilter","_ref$isKeyword","isKeyword","_ref$isSearchTerm","isSearchTerm","targetNagivationLevel","edm","currentAccount","Campaigns","query","Id","currentCampaign","AdGroups","currentCustomer","Accounts","Keywords","SearchTerms","getCustomerLevelDataEntitySetOptions","getAccountLevelDataEntitySetOptions","getTopKeywordCardOptions","getSearchTermCardOptions","getCampaignLevelDataEntitySetOptions","getFluentCardsConfigs","_ref2$showWelcomeTips","showWelcomeTips","_ref2$isMobileAppCamp","isMobileAppCampaign","audienceUnderspendShowTile","defaultHiddenCampaignTypes","None","Default","Shopping","DynamicSearchAds","Audience","Smart","diagnosticCardDefaultHiddenCampaignTypesFiltered","diagnosticCardForMobileAppCampaignsFiltered","type","cardsConfig","validFor","size","CardSize","Small","getEntitySetOptions","enabled","Large","dynamicHeightForNarrow","hideForCampaignType","hideForCampaignTypeSDK","arguments","NavigationLevel","Customer","Account","Campaign","getNavigationLevel","scopeValues","aid","campaignId","result","getCcJsData","GetJsDataInfo","cidFetcher","uidFetcher","CurrentUser","willSupportCors","Urls","ClientCenterBaseUrl","jsDataCcRest","getResponsiveSize","containerWidth","Constants","ResponsiveSizeBreakpoints","minWidth","last","get","getResponsiveSizeBasedOnWindowSize","window","innerWidth","getColumnSize","responsiveSize","getViewPortCardsCount","selectedCardsConfig","columnSize","selectedCardSize","remainingRowSize","Math","round","innerHeight","remainingColumnSize","i","cardSize","isInViewPort","cardIds","viewPortSize","indexOf","RECOMMENDATION_SUMMARY_TOP_NUMBER","p$Opportunities","fetchTips","cid","edmCampaign","Customers","$withKey","Tips","top","count","toPromise","then","Promise","schema","scenario","setting","activity","getScope","levelAt","entityIds","legacyConfig","levelAtConstant","ACCOUNT","CAMPAIGN","CUSTOMER","customerId","accountId","campaignName","token","fetchMCCOverviewRecommendations","jsdata","multiAccountRecommendationParameters","RecommendationTypes","getRecommendationIds","CHANNEL_TYPES","MCCOVERVIEW","$call","toJSON","elementType","shortName","findAll","fetchRecommendations","featureInstrumentation","ccJsData","scope","addScenario","currentScenario","loadRecommendationTile","create","currentActivity","opportunities","RecommendationService","odataPath","lcid","LocaleID","channel","OVERVIEW","getSummary","ignoreCoupons","clearRecommendationsCache","fetchGridTileData","getCardsConfig","p$DateRange","dateUtil","fetchGridData","getOptionsForCard","fetchFluentOverviewTilesData","resolve","DateFilterState","queryParam","_queryParam$values","uid","adGroupId","state","p$State","viewPortCardSize","isPerformanceInViewPort","isDeviceInViewPort","isRecommendationInViewPort","isTopCampaignsInViewPort","isKeywordInViewPort","isSearchTermInViewPort","isCompetitionInViewPort","isConversionTrackingInViewPort","isTopChangesCampaignInViewPort","FluentOverviewPageDataFetchManagerCardsConfigObject","dfmDataFetchCallback","p$PerformanceAggregatedData","fetchAggregatedData","p$PerformanceTimeSeries","fetchPerformanceTimeSeries","period","setDFMCache","p$DeviceAggregatedData","fetchCoupons","c","p$TopCampaigns","p$TopAccountKeyword","p$TopAccountSearchTerms","dataSource","getAuctionInsightDataSource","p$CompetitionTile","withDFMCache","p$ConversionTracking","fetchConversionTracking","fetchConversionTrackingData","p$TopChangesCampaign","fetchTopChanges","getPropsFromPreferenceForTopLocations","METRIC_OPTIONS","getPropsFromPreferenceForConversionTracking","preferenceService","getHeaderPropsFromPreferenceForConversionTracking","ConversionFilterOption","getPropsForRecommendations","getPreferenceDataObj","preferenceName","getPreferenceForDashboard","dashboardPreferenceKey","preferenceDataObj","getCardPreference","dashboardPreferenceObj","cardId","cards","card","getCardPreferenceOptions","setPreferenceForCard","cardOptions","preferenceForDashboard","preferenceForCard","newCards","_toConsumableArray","newPreferenceForDashboard","newPreferenceDataObj","_defineProperty","setAtAccountLevel","useIsPreferenceInitialized","_React$useState","React","_React$useState2","isInitialized","setIsInitialized","initialize","eventDispatcher","cardReady","this","perfMarkerCompleted","unblockCard","perfMarker","done","IsCardInViewPort","trigger","onCardReady","BaseCard","_DeterministicView","_this","_classCallCheck","deps","_callSuper","renderInSync","container","initPerfMarker","on","attached","finishedRender","call","blockCard","_inherits","_createClass","createChild","willInit","willRender","willFetchData","el","unblock","documentElement","contains","withUiBlock","CampaignSubType","patch","requestingHelp","$","click","helpers","updateView","callback","windowResizeHandler","wunderbarCallback","addEventListener","removeEventListener","off","_superPropGet","DeterministicView","TopChangesFilterSortOptionMap","ConversionFilterSortOptionMap","changeEvents","_len","attributes","Array","_key","attr","join","formatDate","date","year","getFullYear","month","getMonth","toString","padStart","day","getDate","getFilteredTotalsMetrics","data","raw","filteredTotals","unfilteredTotals","OverallTotals","DeviceSegmentedPerformanceData","SegmentedData","upperLevelNavigation","navigation","source","coerceStatus","status","AccountInactiveReasons","activityStatus","AccountUtils","entityHash","hash","typeName","adGroup","campaign","isSmartCampaign","pageContext","legacyRouter","CurrentAccount","getRouteUrl","account_id","campaign_id","adgroup_id","getEntityIds","adgroupId","saveToFilterStorage","entityType","text","createEditableFilterStorage","save","Text","$eq","navigateToEntity","event","instrumentation","constants","cardType","currentTarget","logMessage","LOGCATEGORY","TRACE","LOGLEVEL","INFO","button","ctrlKey","shiftKey","altKey","metaKey","rawStatus","returnValue","location","href","navigateToRoute","getLocalizedSupportLink","culture","Culture","toLowerCase","consultationLink","coachingLink","periodDurationIn","start","end","max","min","duration","diff","periodFit","availableGranularities","accountsMode","_period$comparativePe","comparativePeriod","hourlyStartDate","Date","setMonth","Infinity","push","getPopDescription","comparisonDateRange","comparisonDateRangeDateRangeText","comparisonText","rangeInDays","formattedStart","formattedEnd","comparisonDateRangeDescription","AppCampaignNewCampaignGridColumns","dynamic","isAppCampaign","isAllCampaigns","applyPartialConversionColumnName","IsAvgPositionDeprecationPhase2Enabled","Clicks","Impressions","CTR","AverageCPC","Spend","AveragePosition","TopImpressionRate","AbsoluteTopImpressionRate","Conversions","ConversionRate","CPA","AdvertiserReportedRevenue","RevenueOnAdSpend","Downloads","PostClickDownloadRate","CostPerDownload","FirstLaunches","PostClickFirstLaunchRate","CostPerFirstLaunch","Purchases","PostInstallPurchaseRate","CostPerPurchase","Subscriptions","PostInstallSubscriptionRate","CostPerSubscription","ConversionsCredit","PartialConversionRate","PartialConversionCPA","UIToMTMetricNameMap","metricSelect","isInsightsMetric","UIMetric","getInsightsMetric","allowedMetric","MTMetric","getInsightsMetricFilterOption","getUIMetrics","shouldExcludeAppMetrics","excludedMetrics","m","entitySchemaCopy","getflattenEntitySchema","schemaName","entitySchema","flattenEntitySchema","SearchTerm","addCampaignTypePropertyForFilter","Keyword","properties","AvailableInsightTypeIds","baseEntitySchemaForAvailableInsightTypeIds","AdGroup","AssetGroup","getMergedFilter","isFilterByInsights","filters","compact","_ref2$filter","_ref2$filter2","_ref2$filter2$value","updatedQuery","WaterfallFilterType","AdGroupStatus","CampaignStatus","Status","FilterEntity","$contains","availableInsightsTypeIdFilter","odata","fieldMap","buildNameToPropertyMapping","ignoreCase","custom","lambdaConvertForAvailableInsightTypeIds","mergedFilter","merge","odataOptions","getConversionGoalsFilterStore","FilterStorageFactory","featureName","filterEntityOptions","fetch","expand","orderBy","SegmentationTypes","select","extraPayload","disableCache","cacheManager","gridDataParameters","DateRange","StartDate","EndDate","ComparisonDateRange","parameters","odataV4","$top","$expand","$select","$filter","invalidate","millisecondsInDay","topChangesDefaultOptions","conversionDefaultOptions","getComparisonDateRange","timeRange","getTime","lastNDate","gridCardConfig","entityCount","isCompared","metricSelectUnserPermission","segmentationTypes","defaultOptions","directionIndex","shouldLoadShoppingTerms","isOverviewRequest","getColumnAndOrder","orderByValue","order","processGridTileOptions","OverviewPageFluentV2","OverviewPageFluent2","instrumentationLegacy","instrumentationConstants","availableMetrics","union","uniq","first","JSON","stringify","_ref5$options","_getColumnAndOrder","f","fetchEntityGridCombined","args","dfmCacheKey","getEntityGridOptions","_ref6$typeName","_orderBy","_orderBy$","columnOrder","processTopChangesMetric","getMetricConverter","_ref8","IsColumnConversionEnabled","ColumnConversion","IsPartialConversionsEnabled","PartialConversions","conversionPropertyMap","partialConversionPairs","patchMetric","_ref9","_ref9$permissions","_ref9$accountsMode","converter","patchMetrics","_ref10","_ref10$permissions","_ref10$metrics","_ref10$accountsMode","getTopChangesOptions","_ref11","_ref11$accountsMode","menuItem","selectedMetric","getConversionOptions","_ref12","allCardConfig","convertTopChangesOptions","_ref13","topChangesOrderBy","_ref13$accountsMode","_ref14","sortOption","getGranularityForConsolidatedCalls","_ref17","_ref17$accountsMode","_availableGranulariti","PerformanceChartGranularity","largerRange","_availableGranulariti3","getTilesFromConfigForConsolidatedCalls","_ref18","tiles","fetchMCCOverview","_ref19","allAccountsOrderBy","AccountsOverviewPrefetchQuery","isPreFetch","_ref19$accountsMode","_getEntityGridOptions","AllAccountsSortColumn","AllAccountsSortDirection","HasGlobalComparisonPeriod","_convertTopChangesOpt","TopChangedAccountsSortOption","TopChangedAccountsSortColumn","Tiles","allMetricsJoined","popMetrics","segmentSelect","tile","multiAccountOverviewParameters","Metrics","FetchFluctuationInsights","callParams","accountModes","UnifiedProductPhase2","PageReady","afterPageReady","postBody","parse","PostBody","serverPreloadParams","serverAccountModes","e","stack","fetchCampaignOverview","_ref20","allCampaignsOrderBy","conversionOrderBy","_getEntityGridOptions2","AllCampaignsSortColumn","AllCampaignsSortDirection","_convertTopChangesOpt2","TopChangedCampaignsSortOption","TopChangedCampaignsSortColumn","_convertOverviewConve","_ref15","_ref16","convertOverviewConversionsOptions","OverviewConversionsSortOption","OverviewConversionsSortColumn","campaignOverviewParameters","fetchCombinedPerformanceTimeSeries","_ref21","fetchSingleTile","errors","performanceTimeSeries","PerformanceTimeSeries","hideCurrency","AccountsHaveDifferentCurrencies","_ref22","_ref22$accountsMode","AllAccounts","AllCampaigns","_ref23","_getTopChangesOptions","TopChangedAccounts","TopChangedCampaigns","popOrderByMetric","_ref24","isDevice","_ref25","_getConversionOptions","ConversionTileResult","FAC_FEATUREID","FAC_STATUS_NOT_IN_PROGRESS","CCUIConstants","RecommendationAdoptionStatus","NotInProgess","FAC_STATUS_ACTIVE","Active","p$Coupons","FeatureAdoptionCoupon","coupons","FeatureId","catch","clearCouponsCache","locationGranularity","country","longitude","latitude","county","stateOrProvince","city","postalCode","mapMetric","mappedMetric","level","$makeCall","functionParams","Locale","ReportType","skip","startDate","endDate","fetchCountryData","fetchStateOrProvinceData","fetchCountyData","fetchCityData","fetchPostalCodeData","BoldSyntax","props","_jsx","ReactTemplate","model","b","children","template","StringsMapping","GoalCategory","AddToCart","BeginCheckout","BookAppointment","Contact","GetDirections","InStoreVisit","Other","OutboundClick","PageView","Purchase","RequestQuote","Signup","Subcribe","SubmitLeadForm","metrici18nKeys","CouponSetup","newI18n","coupon","cost","couponText","stepOneText","stepTwo","stepTwoText","_jsxs","className","defaultProps","useFetchCoupon","instrumentationLog","renderedWithData","CCBaseUrl","_pageContext$CurrentA","currencyCode","CurrencyCode","isDataLoaded","couponLocalized","_useState2$","setDataState","fetchDate","finally","formatCoupon","currency","response","Error","message","fetchCouponsMethod","useEffect","EmptyState","router","requiredPermission","titleString","subtitleString","actionString","_useFetchCoupon","hasCoupons","navigateToConversionGoals","SetUpConversionClicked","renderView","CouponIsShown","NoCoupon","Button","onClick","DefaultButton","PropTypes","i18nKey","GridIncreaseCell","item","rowClass","space","increaseSpace","bar","increaseBar","classNames","style","flex","GridDeclineCell","declineSpace","declineBar","GridNameCell","GoalCategoryFilterStore","nameCellData","category","isAccount","AccountActivityStatus","statusIcon","Errors","Deleted","Enabled","GridNameClicked","updateFilterAndRoute","title","hideToolTip","entity","KpiGrid","currentDate","compareDate","changeString","formattedValue","percentageValue","formattedPercentageValue","metricCurrent","formattedMetrics","metricCompared","formattedPeriodMetrics","GridHoverContainer","isGrid","isIncrease","comparisonStartDate","comparisonEndDate","hoverClassName","KpiColorClassName","GridPopCell","fromTo","GridRow","HoverContainer","ConversionTrackingGrid","processedData","metricName","s$i18n","property","emptyText","renderGridRows","currentRow","ErrorType","ClassName","Title","Message","PopupCallout","content","target","close","popoverId","right","getBoundingClientRect","placement","onMouseLeave","Callout","onClose","show","closeButton","view","CalloutWithLock","withLock","lockKey","keyVault","hoveringPopup","force","PopupContent","bodyText","_ref$goalNames","goalNames","goalList","marginTop","paddingInlineStart","marginBottom","goalName","textOverflow","overflow","seeAllText","Link","PopupContentNoRevenue","noRevenueText","to","number","TrackingTypeFilterStore","hoverCardStatus","setHoverCardStatus","SeeAllClicked","formattedNumber","titleText","statusText","MessageText","errorClassName","ref","useRef","current","onMouseEnter","renderLine","StatusOverview","noConversionGoalsWithRevenue","subtitle","alertText","alertNum","memo","GoalCount","Line","GoalTrackingStatus","GoalNames","ConversionTrackingFooter","pageNumber","setPageNumber","totalPageCount","manageGoalsText","pageCount","ManageConversionsClicked","_Fragment","Tooltip","relationship","icon","ChevronLeftRegular","appearance","disabled","ChevronRightRegular","IconButton","iconProps","iconName","ariaLabel","GridMetricPicker","updateMetric","showDropDown","setShowDropDown","_useState3","_useState4","setSelectedMetric","selectedMetricText","selectNewMetric","listItems","handleClickOutside","useOutsideAlerter","dropdownStyles","dropdown","width","border","boxShadow","outline","selectors","root","callout","caretDown","MetricPicker","handleChange","option","Dropdown","selectedKey","onChange","styles","GridHeader","popDescription","HelpButton","topic","GridPicker","ConversionTrackingState","categoryResults","statusSummaries","updateCurrentMenuItems","processedResults","metricFormatter","ERROR","maxChange","abs","formatMetric","PeriodPerformanceMetrics","Currency","ceil","i18nString","formatMetricWithSign","formatChangePercentageWithSign","fromValue","toValue","CampaignType","processGridData","renderContent","SetUpConversionTracking","ManageConversionsClick","ConversionTrackingCard","_React$Component","getMenuItems","currentMenuItems","isDataFetchRequired","prevState","prevDateRange","prevMenuItem","prevMetric","_this$state","isFetchSingleTile","isMenuItemNeeded","defaultMenuItems","action","preset","triggerChangeMenuItem","fetchTileData","_this$state2","setState","dataLoaded","handleUpdate","triggerChangeMetric","errorType","InstrumentationLog","displayText","prevProps","_this2","_this$state$data","ConversionGoalCategoryResults","ConversionGoalTrackingStatusSummaries","NoConversionGoalsExist","NoConversionGoalsWithRevenue","_this$state3","newMetric","layoutSize","getLayoutSize","$el","closest","outerWidth","conversionTileFetch","_ref2$fetchSingleTile","_BaseCard","viewRef","items","_this$getState","getState","sharedOptions","conversionGoalsFilterStore","HelpLink","display","tabIndex","ConversionTrackingCardReact","menuItems","replace","triggerPreferenceChange","newErrorTypeFilter","TrackingStatus","$in","newCategoryFilter","onResize","relayout","newLayoutSize","currentLayoutSize","addClass","removeClass","ReactDOM","useStyles","makeStyles","cardContent","height","paddingBottom","smallSizeCard","_ref2$accountsMode","_ref3$fetchSingleTile","ConversionTrackingCardFluent","withDelayedStyles","constructOptions","legacyI18n","perfMarkerUtils","classes","headerState","useHeaderStateContext","hideRangeColumn","selectedItemValue","setHidden","_ref$palette","palette","assign","getConversionTrackingCardStyle","metricPickerFluentV2Style","DeviceMetricView","ensureChildView","buttonTemplate","metricPickerButtonTemplate","pick","picked","html","getDeviceOrder","XandrVideoCampaigns","isXandrVideoAdsCampaign","getGraphLayoutSize","reLayoutGraph","currentGraphLayoutSize","isAggregatedMetric","reLayout","currentMetrics","child","String","SingleMetric","metricsWhenPick","_this$deps","actionButton","focus","segmentedPerformanceMetrics","performanceMetrics","formatOption","deviceType","segmentedData","Key","StringValue","segmentedPeriodData","segmentedChangePercentageData","periodData","periodPerformanceMetrics","changePercentageData","performanceMetricsChangePercentage","formattedData","formattedPeriodData","flexValue","formattedSegment","formattedHoverValue","percentage","formatPercent","maximumFractionDigits","minimumFractionDigits","periodValue","periodFlexValue","formattedPeriodSegment","formattedPeriodHoverValue","changePercentage","formattedChangePercentage","formattedChange","formattedDateRange","formattedPeriodDateRange","loaded","render","loadData","_this$getState2","_this$deps2","hasError","removed","dataFetched","renderTrunk","navigateToDevicesSetting","DeviceCard","_this3","_ref8$fetchSingleTile","_ref8$preexecuteFlag","preexecuteFlag","selectedMetrics","patchedMetrics","loadDataFunc","listenTo","showPopup","hidePopup","bind","$target","_this4","willRenderWithData","_this5","_this$deps3","isSmartShoppingCampaign","newState","formatCell","metricColumnTemplate","body","performanceMetricTemplate","sup","sub","showExtra","gridView","sortableMapping","titleMapping","columnHeaderMapping","sortableAttribute","metricColumn","bingadsGridColumn","_ref$PerformanceMetri","_ref$PerformanceMetri2","_ref$PerformanceMetri3","metricColumnProperty","sortable","colClasses","bodyClasses","headClasses","performanceMetricHeaderTemplate","nameColumn","isExperiment","MatchType","DeliveredMatchType","Added","SearchTermStatus","ExperimentId","nameText","keywordText","ids","added","matchingKeyword","searchTermStatus","nameTemplate","metricColumns","removeDropdown","remove","onClickDocument","evt","hoverContent","$viewport","scrollTop","offset","css","updatePopupPosition","getAllColumns","allMetricColumns","refetch","refresh","updateGridBody","sortableHeader","newSortableHeader","updateGridColumn","onGridSortableHeaderChange","changes","newDirection","newOderByColumn","newDirectionIndex","_this$getState3","CombinedCallEntity","getParentState","_this$getParentState","GridDataEntity","_this$getParentState2","DummyDataSource","totalCount","GridCardContent","parent","tileOptions","initialState","gridFactory","pgrid","vnext","use","a11yPlugin","placeholderPlugin","performanceLogPlugin","tableClasses","tableAttributes","plugins","a11y","performanceLog","appConfig","logger","placeholder","viewRoot","placeholderTemplate","templateOptions","events","stopPropagation","preventDefault","$metricPicker","currentMetric","dataset","isDropdownOpenfortheColumn","currentColumns","metricPickerTemplate","default","dropdownMenuTemplate","col","stateColumns","append","scrolling","virtualized","header","tableName","setupScrollBarCover","headerOption","firstRow","once","keyCode","Escape","viewport","viewportWidth","tableWidth","scrollBarWidth","scrollBarHeight","coverTemplate","marginRight","prepend","_this$child$getState","navigate","accountLevelRout","campaignLevelRout","accountMode","navigateToMainGrid","getSearchTermDetail","$link","adGroupName","matchType","setupMenuItems","onMenuAction","GridCard","buttonText","isCustomerLevel","_ref2$preexecuteFlag","adjustedMenuItem","Content","setChild","addKeywordView","updatePosition","addAsKeyword","addAsNegativeKeyword","AddKeywordView","gridCard","reloadGrid","_this6","CampaignAdgroupSelectorVnext","_DeterministicWrapper","selectedCampaign","selectedAdGroup","jsData","campaignAdgroupSelector","createCampaignAdGroupSelector","parentView","DeterministicWrapperView","setPosition","position","left","scrollLeft","updateSelectorPosition","$selector","$pageContainer","_$selector$offset","_$selector$offsetPare","offsetParent","parentTop","parentLeft","_$pageContainer$offse","pageContainerTop","pageContainerLeft","pageContainerHeight","pageContainerWidth","selectorSize","selectionLevel","clearError","errMsg","setupSelectorView","getChild","detachChild","campaignSelected","newCampaign","_this$getState4$level","adgroupSelected","newAdGroup","windowClickHandler","windowScrollHandler","scroll","errorHandler","i18nErrors","getODataErrors","getBulkApiErrors","_this$getState5","isEmpty","appendLearnMoreLink","hideOnClickOutSide","scopeContext","scopeService","negativeKeyword","NegativeKeywords","EntityType","CampaignId","AdGroupId","campaignEntity","NegativeKeyword","onSuccess","onError","keywordData","Bid","adapter","selected","cancel","apply","toggleSelector","updateEntityLevel","keywordTextChange","matchTypeChange","MetricToolTip","TooltipHost","Glyphicon","glyph","MetricToolTipBackBoneView","_Backbone$View","Backbone","_ref$template","defaultTemplate","_ref$buttonTemplate","defaultButtonTemplate","_ref$buttonTemplatePa","buttonTemplateParams","_ref$dropdownMenuTemp","defaultDropdownMenuTemplate","leftAlign","classList","toggleEl","SetUpContentForGlobalA11yAnnounceArea","_this$getState$perfor","performanceMetric","_this$getState$metric","metricValue","addInfo","tooltipView","DeterministicViewForBackBoneView","a11yAnnounceArea","textContent","setTimeout","overviewPanel","dashboardConfig","getDefaultConfig","defaultName","defaultDragAndDrop","defaultDebug","defaultDragHandlerSelector","layoutOptions","small","breakpoint","minCardSize","maxCardSize","defaultHeight","medium","large","toolbar","addCardButton","textKey","getWelcomeConfig","AddCardViewModel","allAvailableCards","updateFocusedIndex","getFirstFocusableIndex","firstSelectedIndex","ko","appliedClass","cssKey","firstFocusedIndex","allCards","cardsToAdd","pluck","difference","cardsToDelete","intersection","selectedTilesNumber","onThumbnailClicked","onKeyPress","Space","onFocus","globalLegacyI18n","saveAddCard","idsToAdd","viewModel","idsToDelete","cancelAddCard","getNextFocusedItemIndex","numOfCards","previousIndex","isNext","maxIndex","getAllAvailableCardElements","onKeyDown","allAvailableCardElements","ArrowDown","focusedIndex","ArrowUp","Home","End","AddCardView","_ref$selectedCards","_ref$newCardsConfig","newCardsConfig","conf","useNewI18n","addCardTitle","addCardTitleKey","desc","descKey","templateVNext","hide","welcomeCardConfig","titleKey","contentType","sizeOption","supportedWidth","getContentConstructor","contentConstructor","CardState","_Backbone$Model","preferences","instrumentationSettings","welcomeCardsConfig","_ref$accountsMode","_ref$isPrefetch","isPrefetch","customerIdType","useAdvertiserCustomerId","set","p$Initialized","quickInstrumentation","getQuickInstrumentation","getDashBoardPreferences","userWelcomePref","doneWithWelcomeTips","doNotShowWelcomeTips","WelcomeStatus","doneInitialLoad","ShowWelcomeTips","createdCampaign","HasCampaigns","skippedBothAtAccountCreation","skippedNoneAtAccountCreation","HasBIData","HasOtherAccounts","loadWelcomeTips","welcomeAttr","newOptions","loadDashBoardCards","cardGroup","getCardCategory","availableCards","defaultIn","savePreference","defaultOut","retiredCards","newDefaultInCards","newDefaultOutCards","newCardConfig","defaultCards","loadDashboardState","hiddenCards","setDashBoardPreferences","attribute","cardPref","dashboardPrefName","accountsDashboardPrefName","userWelcomePrefName","OverviewAsDefaultPrefName","newDefaultOutCardsAvailable","_ref$simpleFormat","simpleFormat","previousRange","views","Summary","bindDateFilterChangeHandler","dateRangeEquals","getPromise","newRange","leftOffsetUINext","leftOffsetMccUINext","dashboardTopUINext","cardMargin","subPageMarginsForUINext","newUIWidthPaddingsAndOffSet","getViewportCardCount","isMccLevel","topOffset","leftOffset","subPageMargins","availableWidth","layoutOption","optionKey","initialRowCount","rowSize","remainingRowCount","currentRowRemainingSpace","ex","i18nMappings","CardHolder_Toolbar_Close","CardHolder_Toolbar_Add","CardHolder_Toolbar_Refresh","CardHolder_Toolbar_Hide","CardHolder_Toolbar_Help","CardHolder_Toolbar_Enlarge","CardHolder_Toolbar_Shrink","CardHolder_Toolbar_SmallSize","CardHolder_Toolbar_MediumSize","CardHolder_Toolbar_LargeSize","CardHolder_Toolbar_Toggle","Loading","i18nGlobal","localInstrumentation","saveSelectedCardsState","orders","cardPanel","cardsOrder","cardMaps","cardState","contentReady","remainingViewportCards","ViewportCardCount","viewportCardsCount","pageIsReady","pageName","createCardContentInstance","otherOptions","cardCreationOptions","currentCard","clearDragAndDrop","setupDragAndDrop","scrollToAddCardView","addCardView","y","animate","showAddCardView","_ref$fromTile","fromTile","panelDecorator","AddCardPanel","panelClassName","panelReadyAriaLabel","closeAddCardPanel","eventsToActions","addCard","deleteCard","setUpAgents","dateFilterState","dateFilter","onDateFilterStateChanged","filterAgent","onFilterStateChanged","updateCardContent","_ref5$fetchSingleTile","_ref5$onMounted","onMounted","_this$cardState$getCa","getCardAttrByTypeId","getContentContainer","azure","azureUrlRewrite","savedStates","updateContent","Dashboard","_ref7$preexecuteFlag","buildLegacyI18n","p$CardState","dispatched","showNewTile","hideNewTileBannerClicked","gotoManagementTab","dispatchStateAsync","_this7","dispatchState","states","updateState","toolbarItems","ToolbarView","toolbarId","iconLeft","_this8","cardAttrsArray","_this8$cardState$getC","preDefinedMenuItems","CardPanel","dragAndDrop","debug","dragHandlerSelector","initialWidth","add","extend","showMenuIcon","silent","wunderbarState","setupFooter","originalOrder","newOrder","hideNewTileBanner","typeIds","loadCardsOutSizeViewPort","dismissOverviewFluctuationPopup","dismissPopupIfExist","getElementsByClassName","updatePreDefinedMenuItems","windowScrollLayout","topChangeCardScrollLayout","parentNode","windowEventHandler","_this9","cardAttrs","_this9$cardState$getC","_this10","delete","newFeatureTemplate","newTileDesc","title1Key","title2Key","newTileMsg","newTileBannerTemplate","newTileId","timeZoneId","footerContainer","accountTimeZoneText","footerTemplate","_this11","res","showTooMuchDataError","error","Code","warningContainer","managementLink","linkContent","warning","tooManyAccountTemplate","_this12","setupToolbar","setupCardPanel","p$ReadyState","spread","saveInitialState","setupNewTileNotice","setupTooManyAccountsWarning","_this13","scrollIntoView","behavior","DashboardPage","_ref$onMounted","_ref$preexecuteFlag","createDashboard","dashboard","isRemoved","recreateView","localScenarioMap","LoadOverviewPage","SCENARIONAME","ACTIVITYNAME","QualifiedVisitOverviewPageFromCampaign","SetOverviewPageAsDefault","AddTileToOverview","AddTileToOverviewFromPanel","RemoveTileFromOverview","ReorderTile","ResizeTile","FirstUse","RemoveRetiredTilesFromOverview","AddNewTilesToOverview","OverviewPageLoadData","msgs","startScenario","startActivity","msg","tipNames","importHelp","importVideo","broadMatchVideo","extaVideo","extaHelp1","extaHelp2","sitelinksMktg","sitelinksHelp","calloutsMktg","calloutsHelp","structSnipHelp","structSnipMktg","dsa","conversionTrackingVideo","remarketingTour","remarketingHelp1","remarketingVideo","remarketingHelp2","autoBidHelp","autoBidMktg","sharedBudgetsHelp","callMktg","callHelp","reviewsMktg","reviewsHelp","kWMatchTypeHelp","kWMatchTypeMktg","negKWHelp1","negKWHelp2","broadMatchHelp","ScheduledImportHelp","ReImportRSACampaigns","IncludeRSACampaigns","IncludeMultiAccountGoogleImport","ProvideStoreToImportShoppingCampaign","SelectAdCusFeedToImportEXTA","FacebookImport","UETCombineClarity","tipsConfig","tipName","description","helpLink","helpType","imgClass","isImportRelatedTip","_getEntityIds","fluctuationTypeIds","TopChangeGrid","showFluctuationPopup","triggerButton","nextSibling","_ref4$fluxtypeids","fluxtypeids","metricname","metrictext","cmid","selectedAccount","Number","CurrentCampaign","pageContextWithMetricRowInfo","context","createElementBasedFluctuationPopupFactory","imagePath","Token","canViewAllInsights","asyncLoadFluctuationConfig","fromScenario","onFlucDismiss","isLastFluc","getParent","dismissLastFluctuation","onDismiss","gridData","currentDateRangeText","comparisonDateRangeText","topChangesGridTemplate","getItems","loadErrorMsg","updateData","popText","popTextAriaLabel","dataError","updateMetricPicker","metricPickerChild","navigateToEntityGrid","bottom","gridWidth","TopChangesCard","_ref$fetchSingleTile","_ref$dismissLastFluct","patchedMetric","metricProcessed","initialMetric","_this3$deps","updateDataFunc","schedule","serialize","attrs","project","inlineChartData","Type","Version","deserialize","match","slice","InlineChartPreferences","store","pathConfig","preferenceServicePromise","definitions","InlineChart","defineResource","registerSubadapter","PreferencesSubadapter","Resource","inlineChart","where","record","keyRecord","path","inlineChartInfo","newinlineChartInfo","ChartLabel","_React$PureComponent","generateStyle","visibility","startLabelRef","endLabelRef","isShowStartDateLabel","chartLabelData","primaryStartDate","isShowEndDateLabel","primaryEndDate","isPopEnabled","MetricsPicker","renderSelectedItem","selectedItemDataDisplayClass","isPopOrMovingAvg","selectedItemPercentage","comparisonMetricDisplayClass","selectedItem","metricPickerAriaLabel","class","DropdownSelector","onSelect","onChangeHandler","renderItem","role","isFluctuation","dropdownMenuAriaLabel","enableArrowKeysSupport","shouldFocusFirstFocusableItemOnMount","GranularityPicker","allGranularities","ChartPanel","isMovingAverage","isMovingAverageVisible","vsString","showMovingAvgString","primaryMetric","metricsList","selectionChangeCallback","secondaryMetric","granularity","granularityList","htmlFor","checked","movingAverageChangeCallback","HelpPopup","Defaults","seriesColor","primary","original","comparative","secondary","uiNextTooltipPositioner","labelWidth","labelHeight","point","x","plotX","chart","plotWidth","plotY","plotHeight","ChartFormatter","getRawDate","getFormattedToolTip","chartAdapter","formatter","primaryPoints","comparisonPoints","tempHtml","points","series","userOptions","color","getToolTipValueHtml","divClass","isMovingAverageOn","getFormattedSeries","granularityId","entry","getFormattedHighChart","allData","tooltip","seriesColors","defaultSeriesColor","chartWidth","primaryMetricName","secondaryMetricName","seriesIndex","primarySeries","PrimaryData","ComparisonData","secondarySeries","yAxis","setSeriesMarker","positioner","sery","selectedSymbol","selectedDashStyle","isPrimary","marker","symbol","radius","fillColor","lineColor","lineWidth","dashStyle","ChartGranularityAdapter","gridName","lowestSupportedGranularity","getGranularitiesList","granularityMap","results","getGranularityItem","itemId","reconcileSelectedGranularity","preferredId","getLowestAvailableGranularityId","getGranularityIdFromEnum","enumVal","enumValue","getGranularityEnumFromId","setIsGranularityDisabled","isDisabled","getGranularityDateFormat","dateFormat","calculateDiff","timeDiff","calculateDisabled","dateDiff","updateAvailableGranularities","mainDateDiff","comparedDateDiff","now","hourlyOptionDisabled","dailyOptionDisabled","weeklyOptionDisabled","monthlyOptionDisabled","quarterlyOptionDisabled","datetime","skeleton","MetricNone","stringNaN","EventsID","VideoMetricColumns","ChartMetricsAdapter","getMetricsList","_ref$hasNone","hasNone","_ref$IsViewThroughCon","IsViewThroughConversionEnabled","_ref$IsAvgPositionDep","IsAvgPositionDeprecationPhase1Enabled","_ref$IsAvgPositionDep2","_ref$IsVideoAdsForCam","IsVideoAdsForCampaignEnabled","_ref$IsVideoMetricsIn","IsVideoMetricsInPerformanceChartEnabled","_ref$IsViewThroughCon2","IsViewThroughConversionsRevenueEnabled","_ref$dynamic","_ref$dynamic2","isCPSReportingEnabled","CPSReporting","InstallPerformanceColumns","IsConvValueRulesEnabled","ConvValueRules","_ref$metricsFilter","metricsFilter","_ref$customMetricName","customMetricNameList","currentEntity","customMetrics","metricsMap","rejectionPredicates","rejectedNames","reject","predicate","getMetricItem","getMetricNameFromId","getMetricIdFromName","getMetricFormatter","formatToInteger","formatDecimal","formatTo2Digits","formatThousandthTo2Digits","formatTo2DigitsPercent","formatCurrency","ChartDataAdapter","_ref2$permissions","getChartTitle","currentLevel","getNoDataText","getFirstDataItem","isPrimaryDataAvailable","dataItem","primaryDataItem","isComparisonDataAvailable","comparisonDataItem","getChartLabel","firstDataItem","xAxisStartDate","xAxisEndDate","getLastAvailableDate","xAxisCompareStartDate","xAxisCompareEndDate","getPrimaryMetricsList","permission","metricsAdapter","getSecondaryMetricsList","getMetricName","getGranularitySelection","granularityAdapter","getGranularityEnum","getPreferencesAndDefaults","getInlineChartInfo","preferenceObject","showChartPref","CurrentTabId","showMovingAverageInPref","granularityEnumInPref","granularityIdInPref","primaryIdInPref","primaryMetricPrefKey","secondaryIdInPref","secondaryMetricPrefKey","showChart","showMovingAverage","primaryMetricId","secondaryMetricId","reevaluateGranularity","preferredGranularityId","prepareData","rawData","ret","metricId","MetricName","convertData","isPrimaryData","utcPoint","DateTime","substring","dateTime","Value","PrimaryDataPoints","ComparisonDataPoints","transformChartPoints","alignDataForComparison","dataSet","keys","metricData","shortermetricData","longermetricData","diff1","dayAfter","dayInMillisec","primaryDataDateDiff","comparisonDataDateDiff","timestamp","dateParser","dateFormatters","dateFormatter","isDateRangeChanged","date1","date2","getMetricsQuery","primaryMetricSelectionId","secondaryMetricSelectionId","inlineChartColumnMerticsEnabled","formatPreferenceValue","preferenceValue","movingAverage","Granularity","MovingAverage","InlineChartColumnMerticsEnabled","metricsMapIdIndex","metricsMapNameIndex","srcMetricId","srcMetricName","targetMetricName","FluctuationBulb","bulbElem","divStyle","_this$props","isRed","isYellow","balloonClass","balloonPic","instrumentationSchema","getFluctuationType","FluctuationType","FluctuationTypeKey","Impression","Click","Conv","FluctuationPanel","onChartUpdated","initializeInstrumentation","inlineChartScenario","activities","chartActionActivity","inlineChartAction","chartErrorActivity","inlineChartError","isTwoRectOverlapping","elem1","elem2","hideChartLabelIfApplicable","chartLabelRef","bulbClientRect","isBulbOverlappingWithStart","isBulbOverlappingWithEnd","startDateRect","lastDateRect","isStartAvail","isEndAvail","logContext","fluctuations","forEach","fluc","logObject","fluxId","UniqueId","PrimaryMetricId","SecondaryMetricId","eventType","fluxContent","actions","Actions","flatten","rootCauses","RootCauses","Description","fluxDate","fluxKpi","userId","isInternal","IsInternal","CustomerId","AccountId","trace","chartDataAdapter","Permissions","bulbRefArr","openedFlucId","finalStartAvail","finalEndAvail","_this2$hideChartLabel","chartLabelStatus","onChartLabelToggle","flucPlaceholders","FluctuationsPerDate","idx","formattedDate","clientX","plotLeft","bulbWidth","isRCUnknown","MessageId","imageSrc","line","isOpen","FluctuationPopup","withoutOpporCheck","updateFlucData","updateLoadingStatus","fluctuation","onFlucOpen","flucId","flucPage","onPrimaryMetricChange","page","highchartsStyle","plotOptions","dataLabels","enableMouseTracking","xAxis","crosshair","showFirstLabel","showLastLabel","visible","labels","tickLength","tickPixelInterval","gridLineDashStyle","opposite","backgroundColor","borderRadius","borderColor","borderWidth","useHTML","shared","shadow","valueDecimals","spacingTop","spacingLeft","spacingRight","spacingBottom","legend","credits","highchartsStyleVNextOverride","InlineChartInternal","onDateChangeHandler","newDateRange","actionPerfMarker","isActiveChild","selectedGranularityId","granularitySelectionId","isDataAvailable","onResizeWindow","newWidth","isOuterContainerInitialized","inlineChartContainer","parseFloat","resizeEventHandler","resizeChart","selection","saveToPrefrenceStore","fetchPerformanceData","formattedOptions","getFormattedChartOptions","formattedHighChartOptions","onSecondaryMetricChange","onGranularityChange","granularityEnum","gridDataSource","fetchPerformanceAndFluctuation","onMovingAverageChange","isMovingAverageEnabled","onToggleLabel","onChartRendered","isFluctuationsEnabled","isFilterActive","fluctuationProm","chartMarginRight","panelRef","chartFormatter","isFlucRenderNotRequired","flucData","isDone","highChartData","chartData","getFluctuationMetric","flucType","Conversion","filterActivity","inlineChartFilter","useGridData","loading","isLoading","popEnabled","refreshGridData","getMetricsName","filterQuery","metric1","metric2","successCallback","canceled","chartLabel","errorCallback","errorResult","onLoading","getChartData","updateChartData","dismissFluc","flucItem","logSummary","metricRecommend","recommendMetricSelectionId","generateFlucData","timeWithoutTimezone","availableFlucMetrics","FluctuationList","FluctuationId","cause","flucMetricId","setFluctuationFlag","addDateChangeListener","resizeChartListener","getFilteredCampaignTypeFromRawFilter","CurrentGridName","isPendingFetch","DynamicPermissions","_permissions$dynamic","FluctuationsWithoutRecCheck","isShowChart","primaryMetricPercentage","secondaryMetricPercentage","noChartText","fluctuationLoading","currentTab","gridCriterionType","getMetricFilters","CPSAndInstallMetrics","fitlerMetrics","uniqueFilterMetrics","primaryMetricsList","secondaryMetricsList","pageState","normalizedPreferences","normalizeWithAvailable","newProps","toggleChartState","isFilterChanged","isCustomFilterChanged","customFilter","noDataOrLoading","dangerouslySetInnerHTML","__html","chartLabelComponent","HighchartReactWrapper","onChartRenderedCallback","fluxMetrics","setSize","showChartState","defaultPrimaryMetric","disableMovingAverage","suffix","prefObj","setInlineChartInfo","oldFilter","newFilter","CurrentAdGroup","proceedFluctuation","flucServiceIns","FlucService","fluctuationService","formatDateString","surfacingChannelId","isFluctuationsExperiementEnabled","onFetchPerfData","fetchFluctuation","dateStr","leftPadding","s","dt","primarySelection","secondarySelection","granularitySelection","getChartElement","granularityOptions","flucPanelEnabled","primaryMetricOptions","secondaryMetricOptions","UiBlocker","blocking","loadingText","blockUiContainer","blockerIndicator","hideChartPanel","chartTitle","r","withGlobalFilter","CircleSolidSmall","DiamondSolidSmall","TriangleDownSolidSmall","TriangleUpSolidSmall","SquareSolidSmall","getFluctuationPopupStyle","getFluctuationLoadingStyle","flexDirection","convertToLocalStyle","helpbuttonStyle","backgroundImage","couponStepOneImg","couponStepTwoImg","minHeight","justifyContent","fontSize","fontWeight","textAlign","fontFamily","fontStyle","alignItems","backgroundRepeat","backgroundPosition","backgroundSize","conversionTrackingSetupImg","flexWrap","justifyItems","alignContent","borderBottom","margin","neutralSecondary","marginLeft","overflowY","overflowX","alignSelf","gridTemplateColumns","gridRow","borderTop","neutralLighter","gridColumn","borderRight","paddingLeft","paddingRight","whiteSpace","padding","themePrimary","neutralPrimary","paddingTop","background","zIndex","backdropFilter","wordBreak","maxWidth","white","black","textShadow","themeDarker","lineHeight","fallbacks","backgroundPatten","computerColor","tabletColor","smartPhoneColor","connectedTVColor","getDeviceCardStyle","gridTemplateRows","gridColumnStart","borderLeft","computerIcon","smartphoneIcon","tabletIcon","connectedTVIcon","getGridCardStyle","neutralQuaternaryAlt","flexShrink","tableLayout","verticalAlign","cursor","outlineOffset","neutralTertiaryAlt","neutralSecondaryAlt","metricPickerStyle","getPerformanceCardStyle","borderStyle","circleSolid","circleDotted","diamondSolid","diamondDotted","triangleDownSolid","triangleDownDotted","triangleUpSolid","triangleUpDotted","metricPickerBorderColor","getMetricPickerBorderStyle","getPerformanceCardFluentV2Style","flexBasis","gap","getPerformanceGraphStyle","opacity","couponColor","couponFlag","tagHeight","boxSizing","getDefaultTipCardStyle","clip","textDecoration","underlineLinkStyle","elementLocator","couponFlyout","transform","pointerEvents","getTipCardStyle","MsGridRow","img","maxHeight","blue","crudAdStyle","forcedColorAdjust","googleImportImg","broadMatchModifierImg","expandedTextAdsImg","sitelinkExtensionsImg","calloutExtensionsImg","structuredSnippetsImg","dynamicSearchAdsImg","convTrackingImg","remarketingImg","enhancedCpcAutobidImg","sharedBudgetsImg","callImg","reviewExtentionsImg","kwMatchTypesImg","negKeywordsImg","microsoftLogoImg","createCampaignImg","welcomeCoachingImg","welcomeCouponImg","welcomeAddPaymentImg","welcomeHelpImg","addNewAdsImg","remarketingBidImg","locationBidImg","addNewKeywordImg","keywordBidImg","googleAdImportImg","sitelinkExtensionImg","calloutExtensionImg","budgetOppoImg","kwBroadMatchImg","kwBroadMatchModifierImg","firstpageOppoImg","mainlineOppoImg","firstPositionImg","competitiveBidImg","adSchedulingImg","tokens","colorStatusWarningForeground1","getTipCardFluentV2Style","transition","backfaceVisibility","perspective","getTopChangeCardStyle","getTopLocationCardStyle","getTopLocationCardFluentV2Style","IsRenameHotelToLodgingEnabled","campaignPageGroups","noExpandGroups","DetailListPageMenuWithSiteMap","withCampaignSiteMap","DetailListPageMenu","processorSet","all","processor","processPmaxCampaignPageMenu","processPmaxRetailCampaignPageMenu","Loader","siteMap","updateAvailability","others","_objectWithoutProperties","_excluded","selectedParent","isVisible","Scenario","Activity","pageGroups","assetsDetailSiteMap","Configs","standaloneSiteMap","campaignWithAssetsSiteMap","campaignSiteMap","CampaignPageMenuLoader","withSiteMap","accountsPageGroups","PageMenu","processors","processPermissions","processPath","processScope","AccountsPageMenuLoader","withAccountsSiteMap","bulkOperationPageGroups","BulkOperationPageMenuLoader","withToolsSiteMap","businessDataPageGroups","shouldRenderParentNodeAsLink","BusinessDataPageMenuLoader","idsToHideSelf","idsToHideChildren","available","changeLayout","menu","hotelCenterMenu","prunedSitemap","sitemap","hideSelfIdsArray","pruneNode","node","ids2","pruneSitemap","TreeMenu","HotelCenterPageMenuLoader","withHotelCenterSiteMap","withHotelCenterV2SiteMap","hotelCenterV2PageGroups","HotelCenterV2PageMenuLoader","merchantCenterPageGroups","merchantCenterPageGroupsWithoutImport","IsDomesticSimplifiedChineseEnabled","MerchantCenterPageMenuLoader","bidStrategiesPageGroups","BidStrategiesPageMenuLoader","withBidStrategiesSiteMap","UetTagsPageMenu","UetPageMenuLoader","ASSETS_MENU_ID","PERFORMANCE_MENU_ID","assetLibraryPageGroups","mode","rest","_ref2$children","assetLibrarySiteMap","renderItemIcon","AssetLibraryIcon","collapsed","AssetLibraryPageMenuLoader","PageMenuContainer","ElementSelector","fallback","CampaignPageMenuPlaceholder","getPathName","pageItem","route","mapToPageItems","defaultLandingPage","isFallbackSelected","isSelected","isPageEnabled","isDefaultLandingPage","defaultLandingPageTooltipText","curlyTemplate","showTag","tagClass","scopeV2","getPageItems","group","newItems","divider","getTrimmedParams","searchObj","queryString","history","search","ScopeV2","trimToScope","getPageItemUrl","trimmedParams","sort","getTrimmedQuery","getFlattenedItems","limitLevel","reduce","flattenedItems","fillGroupCount","groups","newgroup","sum","fillGroupStartIndex","startIndex","si","fillSelectedAndCollapse","falttenedItems","selectedIndex","newChildren","isCollapsed","getGroupsForDetailList","groupsResult","keyId","getPageMenuItemStyles","pageMenuItem","baseMenuItem","neutralLight","notEnabledPageMenuItem","selectedPageMenuItem","themeLighter","themeLight","notEnabledSelectedPageMenuItem","beforeIcon","textContainer","iconContainer","fallbackGlyph","float","calloutTargetContainer","selectedLandingPage","notSelectedLandingPage","landingPageButton","menuItemTagContainer","relationLine","LandingPageSelector","activeGlyphicon","pageId","setLandingPage","classNamesArray","OverlayTrigger","overlay","submitEvent","withPermissions","withDefaultStyles","getPageMenuItemText","PageMenuItemText","pageItemUrl","showLabel","StyledMenuItemTag","tagContent","PageMenuItem","_ref2$pageItemUrl","_ref2$withRelationLin","withRelationLine","_ref2$showLabel","_ref2$renderIcon","renderIcon","_ref2$collapsed","classNameArray","withFallbackCallout","selectedPageItem","signal","selectedFallbackPageItem","onTabNext","Tab","setLandingPageButton","isSetLandingPageButtonFocused","focusFirstButtonOnSubPageMenu","onBlur","firstButtonOnSubPageMenu","handleFallbackCalloutClose","renderDivider","_this$props2","pageMenuClassName","pageMenuContainer","collapsedPageMenuContainer","pageItems","ListSelector","fallbackSiteMapId","fallbackTitle","fallbackShow","fallbackHandleClose","extraData","ariaRole","AriaRoleType","List","StyledPageMenu","withActivityContext","withI18nConsumer","pageMenu","DefaultLandingPage","markAction","campaignPageMenuPerfMarker","appPerfMarker","PageMenuWithDefaultLandingPage","withDefaultLandingPage","fieldName","DetailListPageMenuInternal","isTeachingBubbleVisible","setIsTeachingBubbleVisible","campaignTypeQuery","RSAAutoGeneratedTeachingBubble","useContext","ActivityContext","singleItems","parentId","getSingleItems","iconExpandLabel","iconCollapseLabel","isFromHeader","Enter","setClarityTag","onToggleCollapse","listprops","onGroupHeaderclick","leftNavigationStyle","DetailsList","groupProps","onRenderHeader","iconLabel","isSettingBannerExist","offsetHeight","MarketName","HelpModel","language","split","pageMenuGroupHeader","pageMenuSelectedGroupHeader","pageMenuGroupHeaderIcon","pageMenuGroupHeaderDownIcon","pageMenuGroupHeaderContent","TeachingBubble","onDone","open","primaryButtonText","targetElement","directionalHint","DirectionalHint","rightBottomEdge","pageMenuSingleItemGroupHeader","selectionMode","SelectionMode","none","isHeaderVisible","onRenderItemColumn","singleItem","onRenderRow","rowProps","DetailsRow","pageMenuRow","isPlaceholderData","indentWidth","headerWrapper","contentWrapper","listProps","list","isPortfolioBidStrategyEnabled","isBroadOnlyEnabled","isPredictiveMatchingEnabled","showExperiment","IsExperimentsEnabled","KeywordStatusColumn","KeywordColumn","CampaignColumn","AdGroupColumn","BidStrategyNameColumn","BidStrategyTypeColumn","BidColumn","MatchTypeColumn","DeliveryColumn","QualityScoreColumn","LandingPageColumn","CustomParametersColumn","TrackingTemplateColumn","FinalUrlSuffixColumn","Param1Column","Param2Column","Param3Column","FirstPageBidEstimationColumn","MainlineBidEstimationColumn","BestPositionBidEstimationColumn","KeywordIdColumn","LabelsColumn","getLockedColumns","getSelectedColumns","RSAAdCustomizerAttributesColumn","getColumnsMap","baseColumns","baseRawBIColumns","generateBaseBIColumns","getListOfRawBIColumns","mockI18n","enum","enumMappedString","enumDescription","valueDescription","parseInt","i18nCache","legacyGlobalI18n","schemaI18nCampaign","getFilterConfig","cachedEntitySchema","restParams","filterConfig","getCommonFilterConfig","editor","searchbox","searchProperty","searchOperator","maxLength","globalConfig","enableCampaignWaterfall","enableEditorialRejectionFilter","enableAdGroupWaterfall","selector","removable","defaultValue","editorialRejectionFlagId","EditorialRejectionFlagId","localized","getLocalizedEditorialRejectionReasons","refreshCampaignCache","isOdataActionSource","getDataSourceConfig","gridNameSource","logActivity","_Permissions$dynamic","KeywordsCombineGridAndChartOdataCallEnabled","initialQuery","nullifynotapplybidamounts","getGridDataParams","scopeAdapter","unset","edmEntity","currentAdGroup","existingDataSource","filterService","KeywordsFilterImprovementEnabled","primaryKey","cacheResponse","useDfmCache","headers","DataSourceStore","cacheService","sessionStore","customColumnPreference","preferenceStoreFactory","dataContextManager","FilterService","queryBuilder","decorators","columnsMap","defaultColumns","lockedColumns","addPoPColumnsOnComparisonEnabled","customColumnsEnabled","IsCustomColumnsInCampaignsSupported","comparisonPoPColumns","defaultPageSize","inlineChartPreference","legacyPreferenceService","commonConfig","appState","ColumnChooserPreference","CustomColumnPreference","SegmentationPreference","fetchPaginationConfig","fetchSortInfo","columnConversions","getColumnsConversionMap","getDataSource","dataFetchConfig","QueryBuilderFactory","make","queryErrors","QueryErrorFactory","connect","cacheableObjects","pug","module","exports","locals","pug_interp","pug_html","pug_mixins","locals_for_with","block","escape","nameCell","excluded","AccountInactiveCauseValue","kpiData","dateRangeText","$$obj","$$l","columnClass","pug_index0","metricIndex","barClass","kpiClasses","increase","keywordType","linkType","menuClass","linkText","label"],"sourceRoot":""}